summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2021-06-21 13:53:49 -0700
committer Aaron Giles <aaron@aarongiles.com>2021-06-21 13:53:49 -0700
commit32dbba7d2d4513774b2d877b4c88f2d0760bcf54 (patch)
treef9e6426cf8dc28413c456bdbcd450c85cb302422
parent5522729235b3ce81c839f3932c1aadc14de59e2b (diff)
parent2709c0143a8c7009715242c135b28403eeffce8b (diff)
Merge branch 'master' into deprecateddeprecated
-rw-r--r--hash/apple2_flop_clcracked.xml176
-rw-r--r--hash/apple2_flop_orig.xml632
-rw-r--r--hash/apple2gs_flop_misc.xml (renamed from hash/apple2gs.xml)3
-rw-r--r--hash/apple2gs_flop_orig.xml3044
-rw-r--r--hash/aquarius_cart.xml12
-rw-r--r--hash/cgenie_cass.xml1624
-rw-r--r--hash/dragon_cart.xml38
-rw-r--r--hash/ggm.xml17
-rw-r--r--hash/juicebox.xml376
-rw-r--r--hash/lk3000.xml81
-rw-r--r--hash/mac_hdflop.xml4248
-rw-r--r--hash/mbee_cart.xml94
-rw-r--r--hash/mbee_flop.xml5974
-rw-r--r--hash/megadriv.xml283
-rw-r--r--hash/nes.xml51
-rw-r--r--hash/rx78_cart.xml17
-rw-r--r--hash/super80_cass.xml110
-rw-r--r--hash/vsmilem_cart.xml251
-rw-r--r--makefile2
-rw-r--r--scripts/src/bus.lua34
-rw-r--r--scripts/src/osd/windows.lua1
-rw-r--r--scripts/target/mame/arcade.lua20
-rw-r--r--scripts/target/mame/mess.lua50
-rw-r--r--src/devices/bus/a2bus/a2bus.h1
-rw-r--r--src/devices/bus/a2bus/a2mockingboard.cpp107
-rw-r--r--src/devices/bus/a2bus/a2mockingboard.h51
-rw-r--r--src/devices/bus/a2bus/titan3plus2.cpp334
-rw-r--r--src/devices/bus/a2bus/titan3plus2.h64
-rw-r--r--src/devices/bus/adam/exp.h8
-rw-r--r--src/devices/bus/bw2/exp.h7
-rw-r--r--src/devices/bus/cbm2/exp.cpp9
-rw-r--r--src/devices/bus/cbm2/exp.h7
-rw-r--r--src/devices/bus/coco/coco_multi.cpp123
-rw-r--r--src/devices/bus/coco/coco_multi.h1
-rw-r--r--src/devices/bus/coco/coco_wpk.cpp201
-rw-r--r--src/devices/bus/coco/coco_wpk.h94
-rw-r--r--src/devices/bus/coco/coco_wpk2p.cpp56
-rw-r--r--src/devices/bus/coco/coco_wpk2p.h41
-rw-r--r--src/devices/bus/coco/cococart.cpp65
-rw-r--r--src/devices/bus/coco/cococart.h3
-rw-r--r--src/devices/bus/coco/dragon_claw.cpp212
-rw-r--r--src/devices/bus/coco/dragon_claw.h59
-rw-r--r--src/devices/bus/coco/dragon_msx2.cpp191
-rw-r--r--src/devices/bus/coco/dragon_msx2.h53
-rw-r--r--src/devices/bus/coco/dragon_serial.cpp154
-rw-r--r--src/devices/bus/coco/dragon_serial.h52
-rw-r--r--src/devices/bus/generic/slot.h2
-rw-r--r--src/devices/bus/isa/isa_cards.cpp2
-rw-r--r--src/devices/bus/isa/lrk330.cpp130
-rw-r--r--src/devices/bus/isa/lrk330.h38
-rw-r--r--src/devices/bus/mc10/mc10_cart.cpp230
-rw-r--r--src/devices/bus/mc10/mc10_cart.h118
-rw-r--r--src/devices/bus/mc10/mcx128.cpp371
-rw-r--r--src/devices/bus/mc10/mcx128.h15
-rw-r--r--src/devices/bus/mc10/pak.cpp69
-rw-r--r--src/devices/bus/mc10/pak.h37
-rw-r--r--src/devices/bus/mc10/ram.cpp78
-rw-r--r--src/devices/bus/mc10/ram.h14
-rw-r--r--src/devices/bus/nes/act53.cpp66
-rw-r--r--src/devices/bus/nes/act53.h11
-rw-r--r--src/devices/bus/nes/nes_slot.h4
-rw-r--r--src/devices/bus/newbrain/eim.cpp2
-rw-r--r--src/devices/bus/newbrain/exp.h7
-rw-r--r--src/devices/bus/newbrain/fdc.cpp14
-rw-r--r--src/devices/bus/newbrain/fdc.h5
-rw-r--r--src/devices/bus/odyssey2/rom.cpp2
-rw-r--r--src/devices/bus/pet/exp.h7
-rw-r--r--src/devices/bus/plus4/c1551.cpp4
-rw-r--r--src/devices/bus/plus4/exp.cpp9
-rw-r--r--src/devices/bus/plus4/exp.h7
-rw-r--r--src/devices/bus/pofo/exp.h7
-rw-r--r--src/devices/bus/pofo/hpc104.cpp4
-rw-r--r--src/devices/bus/saitek_osa/expansion.cpp16
-rw-r--r--src/devices/bus/saitek_osa/expansion.h6
-rw-r--r--src/devices/bus/saitek_osa/modules.cpp22
-rw-r--r--src/devices/bus/saitek_osa/modules.h16
-rw-r--r--src/devices/bus/vic10/exp.cpp9
-rw-r--r--src/devices/bus/vic10/exp.h8
-rw-r--r--src/devices/bus/vic20/exp.h8
-rw-r--r--src/devices/bus/vip/exp.h7
-rw-r--r--src/devices/bus/vme/vme.cpp54
-rw-r--r--src/devices/bus/vme/vme.h30
-rw-r--r--src/devices/bus/vme/vme_fccpu20.cpp2
-rw-r--r--src/devices/bus/vme/vme_fcisio.cpp1
-rw-r--r--src/devices/bus/vme/vme_fcscsi.cpp1
-rw-r--r--src/devices/bus/vme/vme_hcpu30.cpp2
-rw-r--r--src/devices/bus/vme/vme_mvme350.cpp1
-rw-r--r--src/devices/bus/vme/vme_mzr8300.cpp1
-rw-r--r--src/devices/cpu/am29000/am29ops.h2
-rw-r--r--src/devices/cpu/arm7/arm7ops.cpp2
-rw-r--r--src/devices/cpu/drcbec.cpp14
-rw-r--r--src/devices/cpu/dspp/dspp.cpp2
-rw-r--r--src/devices/cpu/h8500/h8500.cpp3
-rw-r--r--src/devices/cpu/h8500/h8500.h10
-rw-r--r--src/devices/cpu/h8500/h8510.cpp2
-rw-r--r--src/devices/cpu/h8500/h8520.cpp11
-rw-r--r--src/devices/cpu/h8500/h8520.h8
-rw-r--r--src/devices/cpu/h8500/h8532.cpp11
-rw-r--r--src/devices/cpu/h8500/h8532.h8
-rw-r--r--src/devices/cpu/h8500/h8534.cpp23
-rw-r--r--src/devices/cpu/h8500/h8534.h19
-rw-r--r--src/devices/cpu/m68000/m68kfpu.cpp131
-rw-r--r--src/devices/cpu/m88000/m88000.cpp4
-rw-r--r--src/devices/cpu/mips/r4000.cpp4
-rw-r--r--src/devices/cpu/pdp8/hd6120.cpp43
-rw-r--r--src/devices/cpu/psx/gte.cpp4
-rw-r--r--src/devices/cpu/romp/romp.cpp2
-rw-r--r--src/devices/cpu/sharc/sharc.cpp53
-rw-r--r--src/devices/cpu/sharc/sharc.h5
-rw-r--r--src/devices/cpu/sharc/sharcdma.hxx140
-rw-r--r--src/devices/cpu/tms32031/32031ops.hxx16
-rw-r--r--src/devices/cpu/tms34010/34010ops.hxx6
-rw-r--r--src/devices/cpu/uml.cpp9
-rw-r--r--src/devices/cpu/unsp/unsp_fxxx.cpp4
-rw-r--r--src/devices/cpu/z80/kp69.cpp6
-rw-r--r--src/devices/machine/atmel_arm_aic.cpp4
-rw-r--r--src/devices/machine/netlist.cpp3
-rw-r--r--src/devices/machine/ns32202.cpp8
-rw-r--r--src/devices/machine/sensorboard.cpp2
-rw-r--r--src/devices/machine/smartmed.cpp93
-rw-r--r--src/devices/machine/z80pio.cpp5
-rw-r--r--src/devices/sound/c140.cpp11
-rw-r--r--src/devices/video/dl1416.cpp36
-rw-r--r--src/devices/video/dl1416.h20
-rw-r--r--src/devices/video/hd61830.cpp6
-rw-r--r--src/devices/video/pc_vga.cpp6
-rw-r--r--src/devices/video/vooddefs.ipp20
-rw-r--r--src/devices/video/voodoo.cpp4
-rw-r--r--src/emu/emumem_hedr.ipp54
-rw-r--r--src/emu/emumem_hedw.ipp48
-rw-r--r--src/emu/emumem_mview.cpp2
-rw-r--r--src/emu/rendlay.cpp4
-rw-r--r--src/emu/validity.cpp8
-rw-r--r--src/frontend/mame/ui/confswitch.cpp2
-rw-r--r--src/lib/formats/ipf_dsk.cpp79
-rw-r--r--src/lib/formats/ipf_dsk.h128
-rw-r--r--src/lib/util/msdib.cpp4
-rw-r--r--src/mame/arcade.flt1
-rw-r--r--src/mame/audio/acan.cpp234
-rw-r--r--src/mame/audio/acan.h12
-rw-r--r--src/mame/audio/gottlieb.cpp27
-rw-r--r--src/mame/audio/gottlieb.h1
-rw-r--r--src/mame/drivers/aci_ggm.cpp11
-rw-r--r--src/mame/drivers/adam.cpp34
-rw-r--r--src/mame/drivers/apple2e.cpp19
-rw-r--r--src/mame/drivers/apple2gs.cpp10
-rw-r--r--src/mame/drivers/apple3.cpp4
-rw-r--r--src/mame/drivers/aristmk5.cpp6
-rw-r--r--src/mame/drivers/astrocde.cpp2
-rw-r--r--src/mame/drivers/at.cpp4
-rw-r--r--src/mame/drivers/ave_arb.cpp7
-rw-r--r--src/mame/drivers/betacam.cpp3
-rw-r--r--src/mame/drivers/bvm.cpp2
-rw-r--r--src/mame/drivers/cbm2.cpp2
-rw-r--r--src/mame/drivers/cclimber.cpp81
-rw-r--r--src/mame/drivers/chexx.cpp3
-rw-r--r--src/mame/drivers/decmate2.cpp23
-rw-r--r--src/mame/drivers/dragon.cpp58
-rw-r--r--src/mame/drivers/dynadice.cpp2
-rw-r--r--src/mame/drivers/exidy.cpp54
-rw-r--r--src/mame/drivers/fidel_cc1.cpp2
-rw-r--r--src/mame/drivers/fmtowns.cpp26
-rw-r--r--src/mame/drivers/galaxian.cpp1193
-rw-r--r--src/mame/drivers/galaxian_rockclim.cpp296
-rw-r--r--src/mame/drivers/galaxold.cpp314
-rw-r--r--src/mame/drivers/gameplan.cpp5
-rw-r--r--src/mame/drivers/goldstar.cpp3
-rw-r--r--src/mame/drivers/gticlub.cpp2
-rw-r--r--src/mame/drivers/hh_cops1.cpp4
-rw-r--r--src/mame/drivers/hh_sm510.cpp69
-rw-r--r--src/mame/drivers/hornet.cpp86
-rw-r--r--src/mame/drivers/hp80.cpp2
-rw-r--r--src/mame/drivers/hp9825.cpp2
-rw-r--r--src/mame/drivers/hp9845.cpp2
-rw-r--r--src/mame/drivers/indigo.cpp7
-rw-r--r--src/mame/drivers/intellect02.cpp2
-rw-r--r--src/mame/drivers/inufuku.cpp415
-rw-r--r--src/mame/drivers/jupace.cpp11
-rw-r--r--src/mame/drivers/ladybug.cpp68
-rw-r--r--src/mame/drivers/legionna.cpp296
-rw-r--r--src/mame/drivers/lk3000.cpp354
-rw-r--r--src/mame/drivers/m79amb.cpp20
-rw-r--r--src/mame/drivers/mbee.cpp75
-rw-r--r--src/mame/drivers/mc10.cpp431
-rw-r--r--src/mame/drivers/mephisto_mm2.cpp8
-rw-r--r--src/mame/drivers/meritum.cpp37
-rw-r--r--src/mame/drivers/mermaid.cpp26
-rw-r--r--src/mame/drivers/mitchell.cpp90
-rw-r--r--src/mame/drivers/mpc60.cpp20
-rw-r--r--src/mame/drivers/namcos2.cpp23
-rw-r--r--src/mame/drivers/namcos22.cpp68
-rw-r--r--src/mame/drivers/naomi.cpp34
-rw-r--r--src/mame/drivers/nwk-tr.cpp47
-rw-r--r--src/mame/drivers/odyssey2.cpp2
-rw-r--r--src/mame/drivers/ojankohs.cpp356
-rw-r--r--src/mame/drivers/olibochu.cpp2
-rw-r--r--src/mame/drivers/pacman.cpp25
-rw-r--r--src/mame/drivers/pasha2.cpp143
-rw-r--r--src/mame/drivers/pcxt.cpp45
-rw-r--r--src/mame/drivers/pet.cpp2
-rw-r--r--src/mame/drivers/phoenix.cpp6
-rw-r--r--src/mame/drivers/plus4.cpp2
-rw-r--r--src/mame/drivers/pofo.cpp262
-rw-r--r--src/mame/drivers/psikyo.cpp42
-rw-r--r--src/mame/drivers/psikyosh.cpp241
-rw-r--r--src/mame/drivers/roland_cm32p.cpp2
-rw-r--r--src/mame/drivers/rx78.cpp154
-rw-r--r--src/mame/drivers/schick.cpp195
-rw-r--r--src/mame/drivers/segahang.cpp2
-rw-r--r--src/mame/drivers/segas16a.cpp16
-rw-r--r--src/mame/drivers/sengokmj.cpp12
-rw-r--r--src/mame/drivers/seta.cpp24
-rw-r--r--src/mame/drivers/sitcom.cpp2
-rw-r--r--src/mame/drivers/sk1.cpp6
-rw-r--r--src/mame/drivers/skylncr.cpp25
-rw-r--r--src/mame/drivers/stv.cpp47
-rw-r--r--src/mame/drivers/subhuntr.cpp2
-rw-r--r--src/mame/drivers/supracan.cpp26
-rw-r--r--src/mame/drivers/suprnova.cpp606
-rw-r--r--src/mame/drivers/taito_b.cpp4
-rw-r--r--src/mame/drivers/taitosj.cpp1
-rw-r--r--src/mame/drivers/tattack.cpp3
-rw-r--r--src/mame/drivers/tecmo.cpp55
-rw-r--r--src/mame/drivers/vectrex.cpp2
-rw-r--r--src/mame/drivers/vegas.cpp7
-rw-r--r--src/mame/drivers/vic10.cpp2
-rw-r--r--src/mame/drivers/vic20.cpp2
-rw-r--r--src/mame/drivers/vis.cpp9
-rw-r--r--src/mame/drivers/yman1x.cpp87
-rw-r--r--src/mame/drivers/ymdx100.cpp144
-rw-r--r--src/mame/drivers/ymsy35.cpp76
-rw-r--r--src/mame/includes/adam.h8
-rw-r--r--src/mame/includes/bw2.h2
-rw-r--r--src/mame/includes/fmtowns.h3
-rw-r--r--src/mame/includes/galaxian.h561
-rw-r--r--src/mame/includes/galaxold.h20
-rw-r--r--src/mame/includes/gameplan.h1
-rw-r--r--src/mame/includes/inufuku.h81
-rw-r--r--src/mame/includes/m79amb.h6
-rw-r--r--src/mame/includes/mbee.h9
-rw-r--r--src/mame/includes/mermaid.h7
-rw-r--r--src/mame/includes/namcos2.h5
-rw-r--r--src/mame/includes/naomi.h2
-rw-r--r--src/mame/includes/newbrain.h2
-rw-r--r--src/mame/includes/ojankohs.h175
-rw-r--r--src/mame/includes/seta.h2
-rw-r--r--src/mame/includes/stv.h13
-rw-r--r--src/mame/includes/taitosj.h1
-rw-r--r--src/mame/includes/vip.h2
-rw-r--r--src/mame/includes/x68k.h1
-rw-r--r--src/mame/layout/critcrsh.lay30
-rw-r--r--src/mame/layout/lk3000.lay32
-rw-r--r--src/mame/machine/apple3.cpp49
-rw-r--r--src/mame/machine/coco.cpp3
-rw-r--r--src/mame/machine/mbee.cpp45
-rw-r--r--src/mame/machine/pofo_kbd.cpp138
-rw-r--r--src/mame/machine/pofo_kbd.h39
-rw-r--r--src/mame/machine/segashiobd.cpp121
-rw-r--r--src/mame/machine/segashiobd.h29
-rw-r--r--src/mame/mame.lst29
-rw-r--r--src/mame/mess.flt4
-rw-r--r--src/mame/video/fmtowns.cpp53
-rw-r--r--src/mame/video/galaxian.cpp113
-rw-r--r--src/mame/video/galaxold.cpp53
-rw-r--r--src/mame/video/gameplan.cpp3
-rw-r--r--src/mame/video/inufuku.cpp173
-rw-r--r--src/mame/video/k037122.cpp155
-rw-r--r--src/mame/video/k037122.h10
-rw-r--r--src/mame/video/mbee.cpp3
-rw-r--r--src/mame/video/mermaid.cpp78
-rw-r--r--src/mame/video/ojankohs.cpp81
-rw-r--r--src/mame/video/taitosj.cpp9
-rw-r--r--src/mame/video/x68k.cpp42
-rw-r--r--src/osd/eigcc.h60
-rw-r--r--src/osd/eigccarm.h62
-rw-r--r--src/osd/eigccppc.h62
-rw-r--r--src/osd/eigccx86.h64
-rw-r--r--src/osd/eivc.h57
-rw-r--r--src/osd/eivcarm.h75
-rw-r--r--src/osd/eminline.h47
-rw-r--r--src/tools/unidasm.cpp4
281 files changed, 25998 insertions, 5460 deletions
diff --git a/hash/apple2_flop_clcracked.xml b/hash/apple2_flop_clcracked.xml
index 18b8556e56c..42a1a2349e8 100644
--- a/hash/apple2_flop_clcracked.xml
+++ b/hash/apple2_flop_clcracked.xml
@@ -42303,4 +42303,180 @@ license:CC0
</part>
</software>
+ <software name="bmblgm13">
+ <description>Bumble Games (Version 1.3) (cleanly cracked)</description>
+ <year>1982</year>
+ <publisher>The Learning Company</publisher>
+ <info name="release" value="2021-06-03"/>
+ <!--"Bumble Games" is a 1982 educational program developed by Leslie Grimm, illustrated by Corinne Grimm, and distributed by The Learning Company. This is version 1.3. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="bumble games v1.3 (4am and san inc crack).dsk" size="143360" crc="6636a469" sha1="59badccd350a2c82d6a0140b628a042997b8c88e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rrbit10">
+ <description>Reader Rabbit (Version 1.0) (cleanly cracked)</description>
+ <year>1984</year>
+ <publisher>The Learning Company</publisher>
+ <info name="release" value="2021-06-03"/>
+ <!--"Reader Rabbit" is a 1984 educational program developed by Leslie Grimm, illustrated by Corinne and Cindy Grimm, and distributed by The Learning Company. This is version 1.0. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="reader rabbit v1.0 (4am and san inc crack).dsk" size="143360" crc="9033d75d" sha1="fd19516c3a995ed96026e0463030ce6028c07d47"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="projcirc">
+ <description>Projectile and Circular Motion (cleanly cracked)</description>
+ <year>1984</year>
+ <publisher>Educational Materials and Equipment</publisher>
+ <info name="release" value="2021-06-05"/>
+ <!--"Projectile and Circular Motion" is a 1984 educational program developed and distributed by Educational Materials and Equipment Corporation. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="projectile and circular motion (4am crack).dsk" size="143360" crc="4074b3dd" sha1="95e35ca175c0f02221a9f2a9d413bbcc40e11c42"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bumblp11">
+ <description>Bumble Plot (Version 1.1) (cleanly cracked)</description>
+ <year>1982</year>
+ <publisher>The Learning Company</publisher>
+ <info name="release" value="2021-06-06"/>
+ <!--"Bumble Plot" is a 1982 educational game developed by Leslie Grimm, illustrated by Corinne Grimm, and distributed by The Learning Company. This is version 1.1. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="bumble plot v1.1 (4am and san inc crack).dsk" size="143360" crc="1a360981" sha1="7675056caea06ca067bb576d835207e1885d68fa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gertrudep82">
+ <description>Gertrude's Puzzles (1982 Version) (cleanly cracked)</description>
+ <year>1982</year>
+ <publisher>The Learning Company</publisher>
+ <info name="release" value="2021-06-06"/>
+ <!--"Gertrude's Puzzles" is a 1982 educational game developed by Teri Perl, Leslie Grimm and Warren Robinett, and distributed by The Learning Company. This early version has no visible version number and is only distinguishable by its copy protection. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="gertrude's puzzles 1982 (4am and san inc crack).dsk" size="143360" crc="4584488c" sha1="3bb9f19e91b62935cf95c559fd683e08033dc532"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gertrudesec82">
+ <description>Gertrude's Secrets 1982 (cleanly cracked)</description>
+ <year>1982</year>
+ <publisher>The Learning Company</publisher>
+ <info name="release" value="2021-06-06"/>
+ <!--"Gertrude's Secrets" is a 1982 educational game developed by Teri Perl, Leslie Grimm and Warren Robinett, and distributed by The Learning Company. This early version has no visible version number and is only distinguishable by its copy protection. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="gertrude's secrets 1982 (4am and san inc crack).dsk" size="143360" crc="0d53b68c" sha1="1ae15f7b76b4324f979c533b67aa63ab9169b631"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="taldiscv">
+ <description>Tales of Discovery (cleanly cracked)</description>
+ <year>1984</year>
+ <publisher>Scholastic</publisher>
+ <info name="release" value="2021-06-06"/>
+ <!--"Tales of Discovery" is a 1984 pair of adventure games developed by Dan Klassen, David G. Olmon, Amy McKinley, Deborah Kovacs, Loretta Jones, Maryellen Kohn, Jeffrey Siegel, Andrew Ragan, and Susan Edwards, and distributed by Scholastic. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Side A"/>
+ <dataarea name="flop" size="143360">
+ <rom name="tales of discovery (4am and san inc crack) side a.dsk" size="143360" crc="a3feb079" sha1="e670a5ea6584e98cad5a56563aecb0f5d8fbe3e3"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <feature name="part_id" value="Side B"/>
+ <dataarea name="flop" size="143360">
+ <rom name="tales of discovery (4am and san inc crack) side b.dsk" size="143360" crc="22a0b7c9" sha1="e840ad24ab23df0723ba2f409ec57b3bcf3cbae9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="advelec">
+ <description>Advanced Electricity (cleanly cracked)</description>
+ <year>1984</year>
+ <publisher>Educational Materials and Equipment</publisher>
+ <info name="release" value="2021-06-10"/>
+ <!--"Advanced Electricity" is a 1984 educational program developed and distributed by Educational Materials and Equipment Corporation. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="advanced electricity (4am crack).dsk" size="143360" crc="dd8cc60f" sha1="e290354b903160b8aa8425f9aa95ec744043eb9f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="compcirc">
+ <description>Complex Circuits (cleanly cracked)</description>
+ <year>1984</year>
+ <publisher>Educational Materials and Equipment</publisher>
+ <info name="release" value="2021-06-10"/>
+ <!--"Complex Circuits" is a 1984 educational program developed and distributed by Educational Materials and Equipment Corporation. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="complex circuits (4am crack).dsk" size="143360" crc="d39c85c2" sha1="9befb85556807a4734031b4854b4271d73beb79d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pforth30">
+ <description>PAI Forth (Version 3.0, 12-21-1985) (cleanly cracked)</description>
+ <year>1985</year>
+ <publisher>Prentice Associates Incorporated</publisher>
+ <info name="release" value="2021-06-10"/>
+ <!--"PAI Forth" is a 1985 development program. This is version 3.0. It is preserved here for the first time.-->
+ <!-- It is uncertain as of now whether this was used internally or released. More research is required. - FH -->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="pai forth v3.0 (4am crack).dsk" size="143360" crc="5f1f43e9" sha1="7a10dd0964da0ba404b1ed0dcce8e7f806a8d6e8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rboots82">
+ <description>Rocky's Boots (Unknown 1982 version) (cleanly cracked)</description>
+ <year>1982</year>
+ <publisher>The Learning Company</publisher>
+ <info name="release" value="2021-06-10"/>
+ <!--"Rocky's Boots" is a 1982 educational game developed by Teri Perl, Leslie Grimm and Warren Robinett, and distributed by The Learning Company. This early version has no visible version number and is only distinguishable by its copy protection. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="rocky's boots 1982 (4am and san inc crack).dsk" size="143360" crc="887947a7" sha1="4e3bdda73af0c1069a768a64f32754556c40d223"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="prsnr110s">
+ <description>The Prisoner (Version 1.10) (SoftSmith) (cleanly cracked)</description>
+ <year>1980</year>
+ <publisher>SoftSmith</publisher>
+ <info name="release" value="2021-06-10"/>
+ <!--"The Prisoner" is a 1980 adventure game developed by Edu-Ware. This is version 1.10, re-released by SoftSmith. It is preserved here for the first time.-->
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="143360">
+ <rom name="the prisoner v1.10 (softsmith) (4am and san inc crack).dsk" size="143360" crc="cfb731df" sha1="16e9ff900df3bab5ab9c516325d2cd5729636698"/>
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/apple2_flop_orig.xml b/hash/apple2_flop_orig.xml
index 3c3568b8cbf..e9186a7f824 100644
--- a/hash/apple2_flop_orig.xml
+++ b/hash/apple2_flop_orig.xml
@@ -16884,636 +16884,4 @@ license:CC0
</part>
</software>
- <software name="rastan">
- <description>Rastan</description>
- <year>1990</year>
- <publisher>Taito</publisher>
- <info name="release" value="2021-05-01"/>
- <info name="programmer" value="John Brooks"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 1MB Apple IIgs. (Music requires 1.25MB.) -->
- <!--"Rastan" is a 1990 action game developed by John Brooks and distributed by Taito. It requires a 1MB Apple IIgs. (Music requires 1.25MB.)-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk 1"/>
- <dataarea name="flop" size="1296132">
- <rom name="rastan - disk 1.woz" size="1296132" crc="9759082b" sha1="3b7ddc2326d351f7de2f018229db5a49f1090b52"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk 2"/>
- <dataarea name="flop" size="1296132">
- <rom name="rastan - disk 2.woz" size="1296132" crc="a567351e" sha1="c50fa172350be0c154182b1b86b65b210ff452af"/>
- </dataarea>
- </part>
- </software>
-
- <software name="zanygolf">
- <description>Zany Golf</description>
- <year>1988</year>
- <publisher>Electronic Arts</publisher>
- <info name="release" value="2021-05-02"/>
- <info name="programmer" value="Will Harvey, Jim Nitchals, Ian Gooding, and Doug Fulton"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Zany Golf" is a 1988 sports game developed by Will Harvey, Jim Nitchals, Ian Gooding, and Doug Fulton, and distributed by Electronic Arts. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296664">
- <rom name="zany golf.woz" size="1296664" crc="eac4563c" sha1="4eae45a425ec065a35fca3955ce3d7be1da6082f"/>
- </dataarea>
- </part>
- </software>
-
- <software name="marblm2gs">
- <description>Marble Madness (IIgs)</description>
- <year>1986</year>
- <publisher>Electronic Arts</publisher>
- <info name="release" value="2021-05-02"/>
- <info name="programmer" value="Will Harvey"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Marble Madness" is a 1986 action game developed by Will Harvey and distributed by Electronic Arts. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296646">
- <rom name="marble madness.woz" size="1296646" crc="84fe02b8" sha1="af8014fdb42321f0d75f4bea1e69cf0923904b05"/>
- </dataarea>
- </part>
- </software>
-
- <software name="qix2gs">
- <description>Qix (IIgs)</description>
- <year>1990</year>
- <publisher>Taito</publisher>
- <info name="release" value="2021-05-02"/>
- <info name="programmer" value="Ryan Ridges and John Lund"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!-- Redumped on May 3rd 2021. -->
- <!--"Qix" is a 1990 action game developed by Ryan Ridges and John Lund, and distributed by Taito. It requires a 512K Apple IIgs.-->
-
- <part name="flop0" interface="floppy_3_5">
- <dataarea name="flop" size="1296123">
- <rom name="qix iigs.woz" size="1296123" crc="6955cd6b" sha1="fb20f487be264892bf3828ec8a5c8cabb57f751c" />
- </dataarea>
- </part>
- </software>
-
- <software name="tasst2gs">
- <description>Tass Times in Tonetown (IIgs)</description>
- <year>1986</year>
- <publisher>Activision</publisher>
- <info name="release" value="2021-05-02"/>
- <info name="programmer" value="Rebecca Heineman, Todd Camasta, Russell Lieblich, Brian Fargo, and Steve Nielsen"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 256K Apple IIgs. -->
- <!--"Tass Times in Tonetown" is a 1986 adventure game developed by Rebecca Heineman, Todd Camasta, Russell Lieblich, Brian Fargo, and Steve Nielsen, and distributed by Activision. It requires a 256K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296183">
- <rom name="tass times in tonetown iigs.woz" size="1296183" crc="2b497d3e" sha1="d87988fa71bbe2f8b65f69af2eab6ed38da3952c"/>
- </dataarea>
- </part>
- </software>
-
- <software name="wldgm2gs">
- <description>World Games (IIgs)</description>
- <year>1987</year>
- <publisher>Epyx</publisher>
- <info name="release" value="2021-05-02"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"World Games" is a 1987 sports game developed by Westwood and distributed by Epyx. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296615">
- <rom name="world games iigs.woz" size="1296615" crc="b8e2d858" sha1="42dade566f712f07d2cb30d03256943fe42fd1a6"/>
- </dataarea>
- </part>
- </software>
-
- <software name="gantl2gs">
- <description>Gauntlet (IIgs)</description>
- <year>1988</year>
- <publisher>Mindscape</publisher>
- <info name="release" value="2021-05-02"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 256K Apple IIgs. -->
- <!--"Gauntlet" is a 1988 action game distributed by Mindscape. It requires a 256K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1317604">
- <rom name="gauntlet iigs.woz" size="1317604" crc="fbeb429a" sha1="4df82855dd2924509681ea5a9a138aa7edce8b53"/>
- </dataarea>
- </part>
- </software>
-
- <software name="bchessgs">
- <description>Battle Chess (IIgs)</description>
- <year>1989</year>
- <publisher>Interplay</publisher>
- <info name="release" value="2021-05-03"/>
- <info name="programmer" value="Jim Sproul, Todd J. Camasta, Bruce Schlickbernd, Kurt Heiden, Bill (Weez) Dugan, Thomas R. Decker, Troy P. Worrell, Michael Quarles, Rebecca Heineman, and Alan Pavlish"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--&lt;p&gt;"Battle Chess" is a 1989 board game developed by Jim Sproul, Todd J. Camasta, Bruce Schlickbernd, Kurt Heiden, Bill (Weez) Dugan, Thomas R. Decker, Troy P. Worrell, Michael Quarles, Rebecca Heineman, and Alan Pavlish, and distributed by Interplay. It requires a 512K Apple IIgs.&lt;/p&gt;&lt;p&gt;&lt;a href="/details/Battle_Chess_Manual" rel="nofollow"&gt;Battle Chess manual&lt;/a&gt; contains the information you need for the copy protection questions&lt;/p&gt;-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1345420">
- <rom name="battle chess iigs.woz" size="1345420" crc="9e5f4c69" sha1="2b2e8bb5c8dea141b1ec956719646e612cf89451"/>
- </dataarea>
- </part>
- </software>
-
- <software name="bjacadgs">
- <description>Blackjack Academy (IIgs)</description>
- <year>1987</year>
- <publisher>MicroIllusions</publisher>
- <info name="release" value="2021-05-03"/>
- <info name="programmer" value="Dennis Saunders, PhD., Al Cheser, Allen Doum, Bob Green, Kevin Hammel, Jim Lawton, and Sandy Wardak"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Blackjack Academy" is a 1987 card game developed by Dennis Saunders, PhD., Al Cheser, Allen Doum, Bob Green, Kevin Hammel, Jim Lawton, and Sandy Wardak, and distributed by MicroIllusions. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296198">
- <rom name="blackjack academy iigs.woz" size="1296198" crc="339444f3" sha1="4665623a012536cb00e29f3c9ea1e8e3d73433f9"/>
- </dataarea>
- </part>
- </software>
-
- <software name="blkoutgs">
- <description>Block Out (IIgs)</description>
- <year>1989</year>
- <publisher>California Dreams</publisher>
- <info name="release" value="2021-05-03"/>
- <info name="programmer" value="Alexander Ustaszewski, Marek Jackiewicz, Adam Skorupinski, Marcin Szostakowski, and Marcin Grzegorzewski"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Block Out" is a 1989 action game developed by Alexander Ustaszewski, Marek Jackiewicz, Adam Skorupinski, Marcin Szostakowski, and Marcin Grzegorzewski, and distributed by California Dreams. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1345334">
- <rom name="block out iigs.woz" size="1345334" crc="1fb55ba8" sha1="e7a299effa226f97a5563e604da6b1c20ddcc203"/>
- </dataarea>
- </part>
- </software>
-
- <software name="xenocdgs">
- <description>Xenocide (IIgs)</description>
- <year>1989</year>
- <publisher>Micro Revelations</publisher>
- <info name="release" value="2021-05-03"/>
- <info name="programmer" value="Brian Greenstone and Dave Triplett"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Xenocide" is a 1989 action game developed by Brian Greenstone and Dave Triplett, and distributed by Micro Revelations. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296149">
- <rom name="xenocide iigs.woz" size="1296149" crc="1fae49eb" sha1="b7105d6896f5ce270a72249cfaaa6509c60b8910"/>
- </dataarea>
- </part>
- </software>
-
- <software name="almindgs">
- <description>Alien Mind</description>
- <year>1988</year>
- <publisher>PBI Software</publisher>
- <info name="release" value="2021-05-04"/>
- <info name="programmer" value="Rob Karr and Matt Crysdale"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Alien Mind" is a 1988 action game developed by Rob Karr and Matt Crysdale, and distributed by PBI Software. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk 1"/>
- <dataarea name="flop" size="1312512">
- <rom name="alien mind iigs - disk 1.woz" size="1312512" crc="b82a889f" sha1="5b8c9377ee4f0d35d879ac063f0a02ca82d4fe4d"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk 2"/>
- <dataarea name="flop" size="1312512">
- <rom name="alien mind iigs - disk 2.woz" size="1312512" crc="ee584aad" sha1="e32a4e473d3af9a80e6c2e0b20bf747bcd99ee7f"/>
- </dataarea>
- </part>
- </software>
-
- <software name="gldrshgs">
- <description>Gold Rush! (IIgs)</description>
- <year>1988</year>
- <publisher>Sierra On-Line</publisher>
- <info name="release" value="2021-05-04"/>
- <info name="programmer" value="Ken MacNeill, Doug MacNeill, Jeff Stephenson, Chris Iden, Robert Heitman, and Anita Scott"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Gold Rush!" is a 1988 adventure game developed by Ken MacNeill, Doug MacNeill, Jeff Stephenson, Chris Iden, Robert Heitman, and Anita Scott, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk 1"/>
- <dataarea name="flop" size="1296214">
- <rom name="gold rush iigs - disk 1.woz" size="1296214" crc="0cc92f73" sha1="68975f2ed33b8a430f7612c54bb307c5d05b9178"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk 2"/>
- <dataarea name="flop" size="1296214">
- <rom name="gold rush iigs - disk 2.woz" size="1296214" crc="b69bd9ee" sha1="af68d86f926c04cd1bdc9fb9adb05fb974f929f2"/>
- </dataarea>
- </part>
- <part name="flop3" interface="floppy_3_5">
- <feature name="part_id" value="Disk 3"/>
- <dataarea name="flop" size="1296214">
- <rom name="gold rush iigs - disk 3.woz" size="1296214" crc="ce77925c" sha1="2c41022d0dcdfca9349e8ed3cc805d38ca329ab4"/>
- </dataarea>
- </part>
- <part name="flop4" interface="floppy_3_5">
- <feature name="part_id" value="Disk 4"/>
- <dataarea name="flop" size="1296214">
- <rom name="gold rush iigs - disk 4.woz" size="1296214" crc="5a7a5ddc" sha1="6ae6d46904c3fd555bb85a612cdf2afbf2a58f5b"/>
- </dataarea>
- </part>
- </software>
-
- <software name="uninv2gs">
- <description>Uninvited (IIgs)</description>
- <year>1988</year>
- <publisher>ICOM Simulations</publisher>
- <info name="release" value="2021-05-07"/>
- <info name="programmer" value="Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Craig Erickson, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldemar Horwat, Mark Waterman, Tod Zipnick, and Billy Wolf"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 768K Apple IIgs. -->
- <!--"Uninvited" is a 1988 adventure game developed by Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Craig Erickson, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldemar Horwat, Mark Waterman, Tod Zipnick, and Billy Wolf, and distributed by ICOM Simulations. It requires a 768K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk 1"/>
- <dataarea name="flop" size="1361814">
- <rom name="uninvited iigs - disk 1.woz" size="1361814" crc="07605702" sha1="ca2345614a6f90d77545eeae08b154849b4a30fb"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk 2"/>
- <dataarea name="flop" size="1361814">
- <rom name="uninvited iigs - disk 2.woz" size="1361814" crc="eee5e464" sha1="25166f40af6859bb835f63f79f61ee431e1a638e"/>
- </dataarea>
- </part>
- </software>
-
- <software name="cvcbr2gs">
- <description>Cavern Cobra (IIgs)</description>
- <year>1987</year>
- <publisher>PBI Software</publisher>
- <info name="release" value="2021-05-07"/>
- <info name="programmer" value="Greg Hale and Richard L. Seaborne"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 768K Apple IIgs. -->
- <!--"Cavern Cobra" is a 1987 action game developed by Greg Hale and Richard L. Seaborne, and distributed by PBI Software. It requires a 768K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296147">
- <rom name="cavern cobra iigs.woz" size="1296147" crc="f2ba82bb" sha1="bbca27646cf2fb2fdb72a8500ef204f8ca2afa31"/>
- </dataarea>
- </part>
- </software>
-
- <software name="hrdbl2gs">
- <description>Hardball! (IIgs)</description>
- <year>1987</year>
- <publisher>Accolade</publisher>
- <info name="release" value="2021-05-07"/>
- <info name="programmer" value="Dan Thompson, Ed Bogas, John Boechler, and Mike Benna"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Hardball!" is a 1987 sports game developed by Dan Thompson, Ed Bogas, John Boechler, and Mike Benna, and distributed by Accolade. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296700">
- <rom name="hardball iigs.woz" size="1296700" crc="a9e23a1c" sha1="8849b47b90a09cdb9fc2daf419d06bcf9ac0253f"/>
- </dataarea>
- </part>
- </software>
-
- <software name="taskfrce">
- <description>Task Force</description>
- <year>1990</year>
- <publisher>Britannica Software</publisher>
- <info name="release" value="2021-05-07"/>
- <info name="programmer" value="Scott L. Patterson, Matthew Crysdale, and Gregory A. Thomas"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 1MB Apple IIgs. -->
- <!--"Task Force" is a 1990 action game developed by Scott L. Patterson, Matthew Crysdale, and Gregory A. Thomas, and distributed by Britannica Software. It requires a 1MB Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk 1"/>
- <dataarea name="flop" size="1296174">
- <rom name="task force iigs - disk 1.woz" size="1296174" crc="ccd9125c" sha1="567c8645dc377965fcddc1a3ab077fc82986a760"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk 2"/>
- <dataarea name="flop" size="1296174">
- <rom name="task force iigs - disk 2.woz" size="1296174" crc="26a2e3a7" sha1="21aa9f4fdae6b06a2a9cdffa3b0e2138a78a4b9c"/>
- </dataarea>
- </part>
- </software>
-
- <software name="shdwg2gs">
- <description>Shadowgate (IIgs)</description>
- <year>1988</year>
- <publisher>ICOM Simulations</publisher>
- <info name="release" value="2021-05-07"/>
- <info name="programmer" value="Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldemar Horwat, Tod Zipnick, and David Feldman"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 768K Apple IIgs. -->
- <!--"Shadowgate" is a 1988 adventure game developed by Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldemar Horwat, Tod Zipnick, and David Feldman, and distributed by ICOM Simulations. It requires a 768K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk 1"/>
- <dataarea name="flop" size="1361803">
- <rom name="shadowgate iigs - disk 1.woz" size="1361803" crc="c1fedf06" sha1="da9a08f82c3fadbf27f9635d8d92488597635ab3"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk 2"/>
- <dataarea name="flop" size="1361803">
- <rom name="shadowgate iigs - disk 2.woz" size="1361803" crc="f2107036" sha1="ec055731dc9a699b1334b57a02341198826e8527"/>
- </dataarea>
- </part>
- </software>
-
- <software name="srvvl2gs">
- <description>Serve and Volley (IIgs)</description>
- <year>1988</year>
- <publisher>Accolade</publisher>
- <info name="release" value="2021-05-07"/>
- <info name="programmer" value="Rick Banks, Paul Butler, Ken Shimizu, Danny Chin, Paul Battersby, Jeffrey J. Sigler, Grant Campbell, and Jay Stevens"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Serve and Volley" is a 1988 sports game developed by Rick Banks, Paul Butler, Ken Shimizu, Danny Chin, Paul Battersby, Jeffrey J. Sigler, Grant Campbell, and Jay Stevens, and distributed by Accolade. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296733">
- <rom name="serve and volley iigs.woz" size="1296733" crc="76ec3fda" sha1="f53a7e722df11e8ad5103f9da3c9f45a9848844e"/>
- </dataarea>
- </part>
- </software>
-
- <software name="calig2gs">
- <description>California Games (IIgs)</description>
- <year>1988</year>
- <publisher>Epyx</publisher>
- <info name="release" value="2021-05-07"/>
- <info name="programmer" value="Jimmy Huey, Dan Chang, Jenny Martin, Sheryl Knowles, Bill Bogenreif, Matt Householder, and Ron Fortier"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"California Games" is a 1988 sports game developed by Jimmy Huey, Dan Chang, Jenny Martin, Sheryl Knowles, Bill Bogenreif, Matt Householder, and Ron Fortier, and distributed by Epyx. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296704">
- <rom name="california games iigs.woz" size="1296704" crc="4f648119" sha1="a4ea74ff59efe247e2ec14efe229bf61a41e6444"/>
- </dataarea>
- </part>
- </software>
-
- <software name="seast2gs">
- <description>Sea Strike (IIgs)</description>
- <year>1987</year>
- <publisher>PBI Software</publisher>
- <info name="release" value="2021-05-09"/>
- <info name="programmer" value="Richard L. Seaborne, Jeff A. Lefferts, and Mei-Ying Dell'Aquila"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Sea Strike" is a 1987 action game developed by Richard L. Seaborne, Jeff A. Lefferts, and Mei-Ying Dell'Aquila, and distributed by PBI Software. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296185">
- <rom name="sea strike iigs.woz" size="1296185" crc="1b1e0b06" sha1="e5401ccf01ad10fc18e771c1c7c02db23c485151"/>
- </dataarea>
- </part>
- </software>
-
- <software name="tstd22gs">
- <description>The Duel: Test Drive II (IIgs)</description>
- <year>1989</year>
- <publisher>Accolade</publisher>
- <info name="release" value="2021-05-10"/>
- <info name="programmer" value="Allan Johnson, Erik Kiss, Amory Wong, Don Mattrick, Rick Friesen, Bruce Dawson, Randy Dillon, Brad Gour, Kris Hatlelid, Chris Taylor, John Boechler, Tony Lee, and Theresa Henry"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"The Duel: Test Drive II" is a 1989 racing simulation game developed by Allan Johnson, Erik Kiss, Amory Wong, Don Mattrick, Rick Friesen, Bruce Dawson, Randy Dillon, Brad Gour, Kris Hatlelid, Chris Taylor, John Boechler, Tony Lee, and Theresa Henry, and distributed by Accolade. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Program disk"/>
- <dataarea name="flop" size="1296794">
- <rom name="the duel - test drive ii iigs.woz" size="1296794" crc="614012e4" sha1="bb4bad896deed98d3e9b36519b392761ab96a37d"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="California challenge disk"/>
- <dataarea name="flop" size="1296814">
- <rom name="the duel - test drive ii iigs - california challenge.woz" size="1296814" crc="2847a06b" sha1="c78e98465fb704d6a7f5bc3cde19d00525e10fda"/>
- </dataarea>
- </part>
- <part name="flop3" interface="floppy_3_5">
- <feature name="part_id" value="The muscle cars disk"/>
- <dataarea name="flop" size="1296827">
- <rom name="the duel - test drive ii iigs - the muscle cars.woz" size="1296827" crc="ca2bcddf" sha1="546bd8f31e0cd5b2dc15d2e817fc755229fb18e7"/>
- </dataarea>
- </part>
- <part name="flop4" interface="floppy_3_5">
- <feature name="part_id" value="The supercars disk"/>
- <dataarea name="flop" size="1296807">
- <rom name="the duel - test drive ii iigs - the supercars.woz" size="1296807" crc="f950b388" sha1="b8fe02167c33821d8a19badf157df95e639f0232"/>
- </dataarea>
- </part>
- </software>
-
- <software name="keeft2gs">
- <description>Keef the Thief (IIgs)</description>
- <year>1989</year>
- <publisher>Electronic Arts</publisher>
- <info name="release" value="2021-05-10"/>
- <info name="programmer" value="Andy Gavin and Jason Rubin"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Keef the Thief" is a 1989 roleplaying game developed by Andy Gavin and Jason Rubin, and distributed by Electronic Arts. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk ~ - Program disk"/>
- <dataarea name="flop" size="1312659">
- <rom name="keef the thief iigs - disk 1 - program disk.woz" size="1312659" crc="9ebed3ef" sha1="856928857d778dace377a99a86657cf1a87b4064"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk 2 - Art disk"/>
- <dataarea name="flop" size="1312605">
- <rom name="keef the thief iigs - disk 2 - art disk.woz" size="1312605" crc="561496ac" sha1="78d9793b3fb4b536d4d5411315e3cc144e492472"/>
- </dataarea>
- </part>
- </software>
-
- <software name="gprxc2gs">
- <description>Grand Prix Circuit (IIgs)</description>
- <year>1989</year>
- <publisher>Accolade</publisher>
- <info name="release" value="2021-05-11"/>
- <info name="programmer" value="Don Mattrick, Brad Gour, Allan Johanson, Erik Kiss, Amory Wong, Rick Friesen, and Kris Hatlelid"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Grand Prix Circuit" is a 1989 racing simulation game developed by Don Mattrick, Brad Gour, Allan Johanson, Erik Kiss, Amory Wong, Rick Friesen, and Kris Hatlelid, and distributed by Accolade. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296752">
- <rom name="grand prix circuit iigs.woz" size="1296752" crc="a895e303" sha1="18237633ba940ffea726867aba4b3a53445b7ea7"/>
- </dataarea>
- </part>
- </software>
-
- <software name="crysq2gs">
- <description>Crystal Quest (IIgs)</description>
- <year>1989</year>
- <publisher>Cassidy and Greene</publisher>
- <info name="release" value="2021-05-11"/>
- <info name="programmer" value="Patrick Buckland, Rebecca Heineman, Mike 'Jed' Patrick, and Scott Everts"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Crystal Quest" is a 1989 action game developed by Patrick Buckland, Rebecca Heineman, Mike 'Jed' Patrick, and Scott Everts, and distributed by Cassidy &amp; Greene. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296189">
- <rom name="crystal quest iigs.woz" size="1296189" crc="3b20d9f8" sha1="a386037d68945ac452fd1a6403276531f33672fe"/>
- </dataarea>
- </part>
- </software>
-
- <software name="impm22gs">
- <description>Impossible Mission II (IIgs)</description>
- <year>1989</year>
- <publisher>Epyx</publisher>
- <info name="release" value="2021-05-11"/>
- <info name="programmer" value="Istvan Cseri, Gyula Horvath, Pal Komondi, and Sultan"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Impossible Mission II" is a 1989 action game developed by Istvan Cseri, Gyula Horvath, Pal Komondi, and Sultan, and distributed by Epyx. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296662">
- <rom name="impossible mission ii iigs.woz" size="1296662" crc="fdc001f2" sha1="db6c4c217013a1a4c1b89c87d0956c7a8b21df7c"/>
- </dataarea>
- </part>
- </software>
-
- <software name="lstn2gs">
- <description>The Last Ninja (IIgs)</description>
- <year>1988</year>
- <publisher>Activision</publisher>
- <info name="release" value="2021-05-11"/>
- <info name="programmer" value="Jeff Silverman, John Kroeckel, J. David Koch, Erol Otus, Doug Barnett, Russell Lieblich, and Nicky Robinson"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"The Last Ninja" is a 1988 action game developed by Jeff Silverman, John Kroeckel, J. David Koch, Erol Otus, Doug Barnett, Russell Lieblich, and Nicky Robinson, and distributed by Activision. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1312599">
- <rom name="the last ninja iigs.woz" size="1312599" crc="ed5aaf38" sha1="15500a6600c806a683148297a32314b1d63116e4"/>
- </dataarea>
- </part>
- </software>
-
- <software name="roct2gs">
- <description>The Hunt for Red October (IIgs)</description>
- <year>1989</year>
- <publisher>The Software Toolworks</publisher>
- <info name="release" value="2021-05-18"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 768K Apple IIgs. -->
- <!--"The Hunt for Red October" is a 1989 simulation game developed by John Brooks, Todd Daugherty, and Alex Villagran, and distributed by The Software Toolworks. It requires a 768K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1343773">
- <rom name="the hunt for red october iigs.woz" size="1343773" crc="60d2cfa9" sha1="5a80858e78527d2fe19c8e7c94785d2ecbc39a4e"/>
- </dataarea>
- </part>
- </software>
-
- <software name="fnla2gs">
- <description>Final Assault (IIgs)</description>
- <year>1988</year>
- <publisher>Epyx</publisher>
- <info name="release" value="2021-05-18"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 512K Apple IIgs. -->
- <!--"Final Assault" is a 1988 sports game developed by Infogrames and distributed by Epyx. It requires a 512K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296633">
- <rom name="final assault iigs.woz" size="1296633" crc="968a15df" sha1="214b086187df5d1122bbe84b557bb83d09546e49"/>
- </dataarea>
- </part>
- </software>
-
- <software name="darkc2gs">
- <description>Dark Castle (IIgs)</description>
- <year>1989</year>
- <publisher>Three Sixty</publisher>
- <info name="release" value="2021-05-18"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 768K Apple IIgs. -->
- <!--"Dark Castle" is a 1989 action game developed by Lane Roathe and distributed by Three Sixty. It requires a 768K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk A"/>
- <dataarea name="flop" size="1296175">
- <rom name="dark castle iigs - disk a.woz" size="1296175" crc="930aae1a" sha1="22338f47ccb798018cbf70d2b8f4fa93ba4273ae"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk B"/>
- <dataarea name="flop" size="1296175">
- <rom name="dark castle iigs - disk b.woz" size="1296175" crc="3b075e18" sha1="336fe7b7bfa5acb39abb4b3fe803938557f244e2"/>
- </dataarea>
- </part>
- </software>
-
- <software name="sils2gs">
- <description>Silent Service (IIgs)</description>
- <year>1987</year>
- <publisher>Microprose</publisher>
- <info name="release" value="2021-05-18"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 256K Apple IIgs. -->
- <!--"Silent Service" is a 1987 simulation game developed by Sid Meier, Ed Magnin, Jim Synoski, Michael Haire, Michele Mahan, Silas Warner, Al Roireau, Larry Martin, and Edward Bever, and distributed by Microprose. It requires a 256K Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <dataarea name="flop" size="1296228">
- <rom name="silent service iigs.woz" size="1296228" crc="37087af8" sha1="587219bfd6f4ada98b6e0805998d74b5436c27c6"/>
- </dataarea>
- </part>
- </software>
-
- <software name="gate2gs">
- <description>GATE (IIgs)</description>
- <year>1992</year>
- <publisher>Seven Hills Software</publisher>
- <info name="release" value="2021-05-18"/>
- <sharedfeat name="compatibility" value="A2GS"/>
- <!-- It requires a 1MB Apple IIgs. -->
- <!--"GATE" is a 1992 action game developed by Henrik Gudat, J&#xF6;rg Kienzle, and Yann Le Tensorer, and distributed by Seven Hills Software. It requires a 1MB Apple IIgs.-->
-
- <part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Disk 1"/>
- <dataarea name="flop" size="1296141">
- <rom name="gate iigs - disk 1.woz" size="1296141" crc="aaaabead" sha1="e2aab50a1b9290f34dd75ea0fd86d59eca3f46ca"/>
- </dataarea>
- </part>
- <part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Disk 2"/>
- <dataarea name="flop" size="1296141">
- <rom name="gate iigs - disk 2.woz" size="1296141" crc="66696c57" sha1="f4b5d21a8da6c52a3dc330c0d67c7df0c3a3b0c5"/>
- </dataarea>
- </part>
- </software>
-
</softwarelist>
diff --git a/hash/apple2gs.xml b/hash/apple2gs_flop_misc.xml
index 5bc53612116..8c6797f0cbd 100644
--- a/hash/apple2gs.xml
+++ b/hash/apple2gs_flop_misc.xml
@@ -5,8 +5,7 @@ license:CC0
Generated by SLIST 0.1
-->
-
-<softwarelist name="apple2gs" description="Apple IIgs 3.5 disks">
+<softwarelist name="apple2gs_flop_misc" description="Apple IIgs 3.5&quot; miscellaneous disks">
<software name="1stltrwd">
<description>First Letters &amp; Words</description>
diff --git a/hash/apple2gs_flop_orig.xml b/hash/apple2gs_flop_orig.xml
new file mode 100644
index 00000000000..802d5640e75
--- /dev/null
+++ b/hash/apple2gs_flop_orig.xml
@@ -0,0 +1,3044 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+license:CC0
+-->
+
+<softwarelist name="apple2gs_flop_orig" description="Apple IIgs 3.5&quot; original disks">
+
+ <software name="rastan">
+ <description>Rastan</description>
+ <year>1990</year>
+ <publisher>Taito</publisher>
+ <info name="release" value="2021-05-01"/>
+ <info name="programmer" value="John Brooks"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. (Music requires 1.25MB.) -->
+ <!--"Rastan" is a 1990 action game developed by John Brooks and distributed by Taito. It requires a 1MB Apple IIgs. (Music requires 1.25MB.)-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296132">
+ <rom name="rastan - disk 1.woz" size="1296132" crc="9759082b" sha1="3b7ddc2326d351f7de2f018229db5a49f1090b52"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296132">
+ <rom name="rastan - disk 2.woz" size="1296132" crc="a567351e" sha1="c50fa172350be0c154182b1b86b65b210ff452af"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zanygolf">
+ <description>Zany Golf</description>
+ <year>1988</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-05-02"/>
+ <info name="programmer" value="Will Harvey, Jim Nitchals, Ian Gooding, and Doug Fulton"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Zany Golf" is a 1988 sports game developed by Will Harvey, Jim Nitchals, Ian Gooding, and Doug Fulton, and distributed by Electronic Arts. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296664">
+ <rom name="zany golf.woz" size="1296664" crc="eac4563c" sha1="4eae45a425ec065a35fca3955ce3d7be1da6082f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="marble">
+ <description>Marble Madness</description>
+ <year>1986</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-05-02"/>
+ <info name="programmer" value="Will Harvey"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Marble Madness" is a 1986 action game developed by Will Harvey and distributed by Electronic Arts. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296646">
+ <rom name="marble madness.woz" size="1296646" crc="84fe02b8" sha1="af8014fdb42321f0d75f4bea1e69cf0923904b05"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="qix">
+ <description>Qix</description>
+ <year>1990</year>
+ <publisher>Taito</publisher>
+ <info name="release" value="2021-05-02"/>
+ <info name="programmer" value="Ryan Ridges and John Lund"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!-- Redumped on May 3rd 2021. -->
+ <!--"Qix" is a 1990 action game developed by Ryan Ridges and John Lund, and distributed by Taito. It requires a 512K Apple IIgs.-->
+
+ <part name="flop0" interface="floppy_3_5">
+ <dataarea name="flop" size="1296123">
+ <rom name="qix iigs.woz" size="1296123" crc="6955cd6b" sha1="fb20f487be264892bf3828ec8a5c8cabb57f751c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tasstime">
+ <description>Tass Times in Tonetown</description>
+ <year>1986</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-05-02"/>
+ <info name="programmer" value="Rebecca Heineman, Todd Camasta, Russell Lieblich, Brian Fargo, and Steve Nielsen"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 256K Apple IIgs. -->
+ <!--"Tass Times in Tonetown" is a 1986 adventure game developed by Rebecca Heineman, Todd Camasta, Russell Lieblich, Brian Fargo, and Steve Nielsen, and distributed by Activision. It requires a 256K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296183">
+ <rom name="tass times in tonetown iigs.woz" size="1296183" crc="2b497d3e" sha1="d87988fa71bbe2f8b65f69af2eab6ed38da3952c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wldgames">
+ <description>World Games</description>
+ <year>1987</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-05-02"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"World Games" is a 1987 sports game developed by Westwood and distributed by Epyx. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296615">
+ <rom name="world games iigs.woz" size="1296615" crc="b8e2d858" sha1="42dade566f712f07d2cb30d03256943fe42fd1a6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gauntlet">
+ <description>Gauntlet</description>
+ <year>1988</year>
+ <publisher>Mindscape</publisher>
+ <info name="release" value="2021-05-02"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 256K Apple IIgs. -->
+ <!--"Gauntlet" is a 1988 action game distributed by Mindscape. It requires a 256K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1317604">
+ <rom name="gauntlet iigs.woz" size="1317604" crc="fbeb429a" sha1="4df82855dd2924509681ea5a9a138aa7edce8b53"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="btlchess">
+ <description>Battle Chess</description>
+ <year>1989</year>
+ <publisher>Interplay</publisher>
+ <info name="release" value="2021-05-03"/>
+ <info name="programmer" value="Jim Sproul, Todd J. Camasta, Bruce Schlickbernd, Kurt Heiden, Bill (Weez) Dugan, Thomas R. Decker, Troy P. Worrell, Michael Quarles, Rebecca Heineman, and Alan Pavlish"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Battle Chess" is a 1989 board game developed by Jim Sproul, Todd J. Camasta, Bruce Schlickbernd, Kurt Heiden, Bill (Weez) Dugan, Thomas R. Decker, Troy P. Worrell, Michael Quarles, Rebecca Heineman, and Alan Pavlish, and distributed by Interplay. It requires a 512K Apple IIgs. The manual at https://archive.org/details/Battle_Chess_Manual contains the information you need for the copy protection questions -->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345420">
+ <rom name="battle chess iigs.woz" size="1345420" crc="9e5f4c69" sha1="2b2e8bb5c8dea141b1ec956719646e612cf89451"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bjacadmy">
+ <description>Blackjack Academy</description>
+ <year>1987</year>
+ <publisher>MicroIllusions</publisher>
+ <info name="release" value="2021-05-03"/>
+ <info name="programmer" value="Dennis Saunders, PhD., Al Cheser, Allen Doum, Bob Green, Kevin Hammel, Jim Lawton, and Sandy Wardak"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Blackjack Academy" is a 1987 card game developed by Dennis Saunders, PhD., Al Cheser, Allen Doum, Bob Green, Kevin Hammel, Jim Lawton, and Sandy Wardak, and distributed by MicroIllusions. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296198">
+ <rom name="blackjack academy iigs.woz" size="1296198" crc="339444f3" sha1="4665623a012536cb00e29f3c9ea1e8e3d73433f9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="blockout">
+ <description>Block Out</description>
+ <year>1989</year>
+ <publisher>California Dreams</publisher>
+ <info name="release" value="2021-05-03"/>
+ <info name="programmer" value="Alexander Ustaszewski, Marek Jackiewicz, Adam Skorupinski, Marcin Szostakowski, and Marcin Grzegorzewski"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Block Out" is a 1989 action game developed by Alexander Ustaszewski, Marek Jackiewicz, Adam Skorupinski, Marcin Szostakowski, and Marcin Grzegorzewski, and distributed by California Dreams. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345334">
+ <rom name="block out iigs.woz" size="1345334" crc="1fb55ba8" sha1="e7a299effa226f97a5563e604da6b1c20ddcc203"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="xenocide">
+ <description>Xenocide</description>
+ <year>1989</year>
+ <publisher>Micro Revelations</publisher>
+ <info name="release" value="2021-05-03"/>
+ <info name="programmer" value="Brian Greenstone and Dave Triplett"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Xenocide" is a 1989 action game developed by Brian Greenstone and Dave Triplett, and distributed by Micro Revelations. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296149">
+ <rom name="xenocide iigs.woz" size="1296149" crc="1fae49eb" sha1="b7105d6896f5ce270a72249cfaaa6509c60b8910"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="alienmnd">
+ <description>Alien Mind</description>
+ <year>1988</year>
+ <publisher>PBI Software</publisher>
+ <info name="release" value="2021-05-04"/>
+ <info name="programmer" value="Rob Karr and Matt Crysdale"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Alien Mind" is a 1988 action game developed by Rob Karr and Matt Crysdale, and distributed by PBI Software. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1312512">
+ <rom name="alien mind iigs - disk 1.woz" size="1312512" crc="b82a889f" sha1="5b8c9377ee4f0d35d879ac063f0a02ca82d4fe4d"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1312512">
+ <rom name="alien mind iigs - disk 2.woz" size="1312512" crc="ee584aad" sha1="e32a4e473d3af9a80e6c2e0b20bf747bcd99ee7f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="goldrush">
+ <description>Gold Rush!</description>
+ <year>1988</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-04"/>
+ <info name="programmer" value="Ken MacNeill, Doug MacNeill, Jeff Stephenson, Chris Iden, Robert Heitman, and Anita Scott"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Gold Rush!" is a 1988 adventure game developed by Ken MacNeill, Doug MacNeill, Jeff Stephenson, Chris Iden, Robert Heitman, and Anita Scott, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296214">
+ <rom name="gold rush iigs - disk 1.woz" size="1296214" crc="0cc92f73" sha1="68975f2ed33b8a430f7612c54bb307c5d05b9178"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296214">
+ <rom name="gold rush iigs - disk 2.woz" size="1296214" crc="b69bd9ee" sha1="af68d86f926c04cd1bdc9fb9adb05fb974f929f2"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3"/>
+ <dataarea name="flop" size="1296214">
+ <rom name="gold rush iigs - disk 3.woz" size="1296214" crc="ce77925c" sha1="2c41022d0dcdfca9349e8ed3cc805d38ca329ab4"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4"/>
+ <dataarea name="flop" size="1296214">
+ <rom name="gold rush iigs - disk 4.woz" size="1296214" crc="5a7a5ddc" sha1="6ae6d46904c3fd555bb85a612cdf2afbf2a58f5b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="uninvite">
+ <description>Uninvited</description>
+ <year>1988</year>
+ <publisher>ICOM Simulations</publisher>
+ <info name="release" value="2021-05-07"/>
+ <info name="programmer" value="Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Craig Erickson, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldemar Horwat, Mark Waterman, Tod Zipnick, and Billy Wolf"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Uninvited" is a 1988 adventure game developed by Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Craig Erickson, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldemar Horwat, Mark Waterman, Tod Zipnick, and Billy Wolf, and distributed by ICOM Simulations. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1361814">
+ <rom name="uninvited iigs - disk 1.woz" size="1361814" crc="07605702" sha1="ca2345614a6f90d77545eeae08b154849b4a30fb"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1361814">
+ <rom name="uninvited iigs - disk 2.woz" size="1361814" crc="eee5e464" sha1="25166f40af6859bb835f63f79f61ee431e1a638e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cavcobra">
+ <description>Cavern Cobra</description>
+ <year>1987</year>
+ <publisher>PBI Software</publisher>
+ <info name="release" value="2021-05-07"/>
+ <info name="programmer" value="Greg Hale and Richard L. Seaborne"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Cavern Cobra" is a 1987 action game developed by Greg Hale and Richard L. Seaborne, and distributed by PBI Software. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296147">
+ <rom name="cavern cobra iigs.woz" size="1296147" crc="f2ba82bb" sha1="bbca27646cf2fb2fdb72a8500ef204f8ca2afa31"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hardball">
+ <description>Hardball!</description>
+ <year>1987</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-05-07"/>
+ <info name="programmer" value="Dan Thompson, Ed Bogas, John Boechler, and Mike Benna"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Hardball!" is a 1987 sports game developed by Dan Thompson, Ed Bogas, John Boechler, and Mike Benna, and distributed by Accolade. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296700">
+ <rom name="hardball iigs.woz" size="1296700" crc="a9e23a1c" sha1="8849b47b90a09cdb9fc2daf419d06bcf9ac0253f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="taskfrce">
+ <description>Task Force</description>
+ <year>1990</year>
+ <publisher>Britannica Software</publisher>
+ <info name="release" value="2021-05-07"/>
+ <info name="programmer" value="Scott L. Patterson, Matthew Crysdale, and Gregory A. Thomas"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"Task Force" is a 1990 action game developed by Scott L. Patterson, Matthew Crysdale, and Gregory A. Thomas, and distributed by Britannica Software. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296174">
+ <rom name="task force iigs - disk 1.woz" size="1296174" crc="ccd9125c" sha1="567c8645dc377965fcddc1a3ab077fc82986a760"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296174">
+ <rom name="task force iigs - disk 2.woz" size="1296174" crc="26a2e3a7" sha1="21aa9f4fdae6b06a2a9cdffa3b0e2138a78a4b9c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="shdwgate">
+ <description>Shadowgate</description>
+ <year>1988</year>
+ <publisher>ICOM Simulations</publisher>
+ <info name="release" value="2021-05-07"/>
+ <info name="programmer" value="Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldemar Horwat, Tod Zipnick, and David Feldman"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Shadowgate" is a 1988 adventure game developed by Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldemar Horwat, Tod Zipnick, and David Feldman, and distributed by ICOM Simulations. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1361803">
+ <rom name="shadowgate iigs - disk 1.woz" size="1361803" crc="c1fedf06" sha1="da9a08f82c3fadbf27f9635d8d92488597635ab3"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1361803">
+ <rom name="shadowgate iigs - disk 2.woz" size="1361803" crc="f2107036" sha1="ec055731dc9a699b1334b57a02341198826e8527"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="srvvly">
+ <description>Serve and Volley</description>
+ <year>1988</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-05-07"/>
+ <info name="programmer" value="Rick Banks, Paul Butler, Ken Shimizu, Danny Chin, Paul Battersby, Jeffrey J. Sigler, Grant Campbell, and Jay Stevens"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Serve and Volley" is a 1988 sports game developed by Rick Banks, Paul Butler, Ken Shimizu, Danny Chin, Paul Battersby, Jeffrey J. Sigler, Grant Campbell, and Jay Stevens, and distributed by Accolade. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296733">
+ <rom name="serve and volley iigs.woz" size="1296733" crc="76ec3fda" sha1="f53a7e722df11e8ad5103f9da3c9f45a9848844e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="calgames">
+ <description>California Games</description>
+ <year>1988</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-05-07"/>
+ <info name="programmer" value="Jimmy Huey, Dan Chang, Jenny Martin, Sheryl Knowles, Bill Bogenreif, Matt Householder, and Ron Fortier"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"California Games" is a 1988 sports game developed by Jimmy Huey, Dan Chang, Jenny Martin, Sheryl Knowles, Bill Bogenreif, Matt Householder, and Ron Fortier, and distributed by Epyx. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296704">
+ <rom name="california games iigs.woz" size="1296704" crc="4f648119" sha1="a4ea74ff59efe247e2ec14efe229bf61a41e6444"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="seastrke">
+ <description>Sea Strike</description>
+ <year>1987</year>
+ <publisher>PBI Software</publisher>
+ <info name="release" value="2021-05-09"/>
+ <info name="programmer" value="Richard L. Seaborne, Jeff A. Lefferts, and Mei-Ying Dell'Aquila"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Sea Strike" is a 1987 action game developed by Richard L. Seaborne, Jeff A. Lefferts, and Mei-Ying Dell'Aquila, and distributed by PBI Software. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296185">
+ <rom name="sea strike iigs.woz" size="1296185" crc="1b1e0b06" sha1="e5401ccf01ad10fc18e771c1c7c02db23c485151"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="td2">
+ <description>The Duel: Test Drive II</description>
+ <year>1989</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-05-10"/>
+ <info name="programmer" value="Allan Johnson, Erik Kiss, Amory Wong, Don Mattrick, Rick Friesen, Bruce Dawson, Randy Dillon, Brad Gour, Kris Hatlelid, Chris Taylor, John Boechler, Tony Lee, and Theresa Henry"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"The Duel: Test Drive II" is a 1989 racing simulation game developed by Allan Johnson, Erik Kiss, Amory Wong, Don Mattrick, Rick Friesen, Bruce Dawson, Randy Dillon, Brad Gour, Kris Hatlelid, Chris Taylor, John Boechler, Tony Lee, and Theresa Henry, and distributed by Accolade. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Program disk"/>
+ <dataarea name="flop" size="1296794">
+ <rom name="the duel - test drive ii iigs.woz" size="1296794" crc="614012e4" sha1="bb4bad896deed98d3e9b36519b392761ab96a37d"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="California challenge disk"/>
+ <dataarea name="flop" size="1296814">
+ <rom name="the duel - test drive ii iigs - california challenge.woz" size="1296814" crc="2847a06b" sha1="c78e98465fb704d6a7f5bc3cde19d00525e10fda"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Muscle cars disk"/>
+ <dataarea name="flop" size="1296827">
+ <rom name="the duel - test drive ii iigs - the muscle cars.woz" size="1296827" crc="ca2bcddf" sha1="546bd8f31e0cd5b2dc15d2e817fc755229fb18e7"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Supercars disk"/>
+ <dataarea name="flop" size="1296807">
+ <rom name="the duel - test drive ii iigs - the supercars.woz" size="1296807" crc="f950b388" sha1="b8fe02167c33821d8a19badf157df95e639f0232"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="keef">
+ <description>Keef the Thief</description>
+ <year>1989</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-05-10"/>
+ <info name="programmer" value="Andy Gavin and Jason Rubin"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Keef the Thief" is a 1989 roleplaying game developed by Andy Gavin and Jason Rubin, and distributed by Electronic Arts. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1312659">
+ <rom name="keef the thief iigs - disk 1 - program disk.woz" size="1312659" crc="9ebed3ef" sha1="856928857d778dace377a99a86657cf1a87b4064"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Art disk"/>
+ <dataarea name="flop" size="1312605">
+ <rom name="keef the thief iigs - disk 2 - art disk.woz" size="1312605" crc="561496ac" sha1="78d9793b3fb4b536d4d5411315e3cc144e492472"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gpcirc">
+ <description>Grand Prix Circuit</description>
+ <year>1989</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-05-11"/>
+ <info name="programmer" value="Don Mattrick, Brad Gour, Allan Johanson, Erik Kiss, Amory Wong, Rick Friesen, and Kris Hatlelid"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Grand Prix Circuit" is a 1989 racing simulation game developed by Don Mattrick, Brad Gour, Allan Johanson, Erik Kiss, Amory Wong, Rick Friesen, and Kris Hatlelid, and distributed by Accolade. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296752">
+ <rom name="grand prix circuit iigs.woz" size="1296752" crc="a895e303" sha1="18237633ba940ffea726867aba4b3a53445b7ea7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="crstlqst">
+ <description>Crystal Quest</description>
+ <year>1989</year>
+ <publisher>Cassidy and Greene</publisher>
+ <info name="release" value="2021-05-11"/>
+ <info name="programmer" value="Patrick Buckland, Rebecca Heineman, Mike 'Jed' Patrick, and Scott Everts"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Crystal Quest" is a 1989 action game developed by Patrick Buckland, Rebecca Heineman, Mike 'Jed' Patrick, and Scott Everts, and distributed by Cassidy and Greene. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296189">
+ <rom name="crystal quest iigs.woz" size="1296189" crc="3b20d9f8" sha1="a386037d68945ac452fd1a6403276531f33672fe"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="impmiss2">
+ <description>Impossible Mission II</description>
+ <year>1989</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-05-11"/>
+ <info name="programmer" value="Istvan Cseri, Gyula Horvath, Pal Komondi, and Sultan"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Impossible Mission II" is a 1989 action game developed by Istvan Cseri, Gyula Horvath, Pal Komondi, and Sultan, and distributed by Epyx. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296662">
+ <rom name="impossible mission ii iigs.woz" size="1296662" crc="fdc001f2" sha1="db6c4c217013a1a4c1b89c87d0956c7a8b21df7c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lstninja">
+ <description>The Last Ninja</description>
+ <year>1988</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-05-11"/>
+ <info name="programmer" value="Jeff Silverman, John Kroeckel, J. David Koch, Erol Otus, Doug Barnett, Russell Lieblich, and Nicky Robinson"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"The Last Ninja" is a 1988 action game developed by Jeff Silverman, John Kroeckel, J. David Koch, Erol Otus, Doug Barnett, Russell Lieblich, and Nicky Robinson, and distributed by Activision. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1312599">
+ <rom name="the last ninja iigs.woz" size="1312599" crc="ed5aaf38" sha1="15500a6600c806a683148297a32314b1d63116e4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="redoctbr">
+ <description>The Hunt for Red October</description>
+ <year>1989</year>
+ <publisher>The Software Toolworks</publisher>
+ <info name="release" value="2021-05-18"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"The Hunt for Red October" is a 1989 simulation game developed by John Brooks, Todd Daugherty, and Alex Villagran, and distributed by The Software Toolworks. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1343773">
+ <rom name="the hunt for red october iigs.woz" size="1343773" crc="60d2cfa9" sha1="5a80858e78527d2fe19c8e7c94785d2ecbc39a4e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="finalass">
+ <description>Final Assault</description>
+ <year>1988</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-05-18"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Final Assault" is a 1988 sports game developed by Infogrames and distributed by Epyx. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296633">
+ <rom name="final assault iigs.woz" size="1296633" crc="968a15df" sha1="214b086187df5d1122bbe84b557bb83d09546e49"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="darkcstl">
+ <description>Dark Castle</description>
+ <year>1989</year>
+ <publisher>Three Sixty</publisher>
+ <info name="release" value="2021-05-18"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Dark Castle" is a 1989 action game developed by Lane Roathe and distributed by Three Sixty. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk A"/>
+ <dataarea name="flop" size="1296175">
+ <rom name="dark castle iigs - disk a.woz" size="1296175" crc="930aae1a" sha1="22338f47ccb798018cbf70d2b8f4fa93ba4273ae"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk B"/>
+ <dataarea name="flop" size="1296175">
+ <rom name="dark castle iigs - disk b.woz" size="1296175" crc="3b075e18" sha1="336fe7b7bfa5acb39abb4b3fe803938557f244e2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="slntsvce">
+ <description>Silent Service</description>
+ <year>1987</year>
+ <publisher>Microprose</publisher>
+ <info name="release" value="2021-05-18"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 256K Apple IIgs. -->
+ <!--"Silent Service" is a 1987 simulation game developed by Sid Meier, Ed Magnin, Jim Synoski, Michael Haire, Michele Mahan, Silas Warner, Al Roireau, Larry Martin, and Edward Bever, and distributed by Microprose. It requires a 256K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296228">
+ <rom name="silent service iigs.woz" size="1296228" crc="37087af8" sha1="587219bfd6f4ada98b6e0805998d74b5436c27c6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gate">
+ <description>GATE</description>
+ <year>1992</year>
+ <publisher>Seven Hills Software</publisher>
+ <info name="release" value="2021-05-18"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"GATE" is a 1992 action game developed by Henrik Gudat, Jörg Kienzle, and Yann Le Tensorer, and distributed by Seven Hills Software. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296141">
+ <rom name="gate iigs - disk 1.woz" size="1296141" crc="aaaabead" sha1="e2aab50a1b9290f34dd75ea0fd86d59eca3f46ca"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296141">
+ <rom name="gate iigs - disk 2.woz" size="1296141" crc="66696c57" sha1="f4b5d21a8da6c52a3dc330c0d67c7df0c3a3b0c5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bop90s">
+ <description>Balance of Power: The 1990 Edition</description>
+ <year>1990</year>
+ <publisher>Mindscape</publisher>
+ <info name="release" value="2021-05-29"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM01 or later. -->
+ <!--"Balance of Power: The 1990 Edition" is a 1989 board game developed by Chris Crawford, Ian Hadley, and Caroline Hadley, and distributed by Mindscape. It requires a 1MB Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1347407">
+ <rom name="balance of power- the 1990 edition iigs.woz" size="1347407" crc="f473b2aa" sha1="aab87027f1c52cf11d53e54e78635f4d16b22cda"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bridge6">
+ <description>Bridge 6.0 (Version 2.49B)</description>
+ <year>1989</year>
+ <publisher>Artworx</publisher>
+ <info name="release" value="2021-05-29"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Bridge 6.0" is a 1989 board game developed by Robert Harnish and Arthur Walsh, and distributed by Artworx. This is version 2.49B. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296167">
+ <rom name="bridge 6.0 iigs.woz" size="1296167" crc="a6b03015" sha1="1cdb48c2a7407c5bca4832e3ae6fdd976cab78e6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="qustron2">
+ <description>Questron II (Version 1.1)</description>
+ <year>1988</year>
+ <publisher>Strategic Simulations</publisher>
+ <info name="release" value="2021-05-29"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Questron II" is a 1988 roleplaying game developed by Westwood Associates and distributed by Strategic Simulations, Inc. This is version 1.1. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296163">
+ <rom name="questron ii iigs.woz" size="1296163" crc="4deb4862" sha1="f7e1ce6cf67e0e061ffbb7e96b222861d5dda756"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rchstars">
+ <description>Reach for the Stars</description>
+ <year>1988</year>
+ <publisher>Strategic Studies Group</publisher>
+ <info name="release" value="2021-05-29"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Reach for the Stars" is a 1988 simulation game developed by Roger Keating, Ian Trout, and Allan Bell, and distributed by Strategic Studies Group. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1328945">
+ <rom name="reach for the stars iigs.woz" size="1328945" crc="7c9f6de5" sha1="81cbc69e0cf005aa05de2898603a4c526116ff79"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="roadwr2k">
+ <description>Roadwar 2000</description>
+ <year>1987</year>
+ <publisher>Strategic Simulations</publisher>
+ <info name="release" value="2021-05-29"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Roadwar 2000" is a 1987 simulation game developed by Westwood Associates and distributed by Strategic Simulations, Inc. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296159">
+ <rom name="roadwar 2000 iigs.woz" size="1296159" crc="84f0f97c" sha1="697791039e6ae0077feaa26e6032c5c9c3bd7930"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sshockey">
+ <description>Superstar Ice Hockey</description>
+ <year>1988</year>
+ <publisher>Mindscape</publisher>
+ <info name="release" value="2021-05-29"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Superstar Ice Hockey" is a 1988 sports game developed by Ed Ringler, Andrew Caldwell, Clayton Wishoff, Simon Ffinch, Ed Ringler Sr., and Chris Oke, and distributed by Mindscape. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1297288">
+ <rom name="superstar ice hockey iigs.woz" size="1297288" crc="e93a7c38" sha1="64a91083feca13cc2d709b235b0370d8a6afbbc1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lifendth">
+ <description>Life and Death</description>
+ <year>1989</year>
+ <publisher>The Software Toolworks</publisher>
+ <info name="release" value="2021-05-24"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"Life and Death" is a 1989 simulation game developed by Mark Manyen and Jacob P. Smith, and distributed by The Software Toolworks. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296138">
+ <rom name="life and death iigs - disk 1.woz" size="1296138" crc="a90e885a" sha1="6d4b97e8be6441c9a2f792fa09206a84b5e07952"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296138">
+ <rom name="life and death iigs - disk 2.woz" size="1296138" crc="3a780754" sha1="d73e62dc6c27b3d441dfbc5626dfe3bbb133d3b7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tetris">
+ <description>Tetris</description>
+ <year>1988</year>
+ <publisher>Spectrum HoloByte</publisher>
+ <info name="release" value="2021-05-29"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Tetris" is a 1988 action game developed by Roland Gustafsson, Sean B. Barger, Dan Geisler, Daniel L. Guerra, Jody Sather, Ed Bogas, Neil Cormia, Ty Roberts, and Gary Clayton, and distributed by Spectrum HoloByte. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296252">
+ <rom name="tetris iigs.woz" size="1296252" crc="41451ff2" sha1="0ee2c36d73f575124f28defb9ec50645fb3c2902"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lasrforc">
+ <description>LaserForce</description>
+ <year>1989</year>
+ <publisher>Fanfare</publisher>
+ <info name="release" value="2021-05-24"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1.25MB Apple IIgs.-->
+ <!--"LaserForce" is a 1989 action game developed by Javier Rullan, Huibert Aalbers, Thierry Méchain, Stéphane Renaudin, J-C. Doré, and Olivier Guichaoua, and distributed by Fanfare. It requires a 1.25MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296206">
+ <rom name="laserforce iigs - disk 1.woz" size="1296206" crc="03943e06" sha1="8efcc99202e3f9fae8058d8cc7f0c66902c52ae6"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296206">
+ <rom name="laserforce iigs - disk 2.woz" size="1296206" crc="4eb5535b" sha1="1a53e508eab191f92835990f3195498da8c615a7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arknoid2">
+ <description>Arkanoid II: Revenge of Doh</description>
+ <year>1989</year>
+ <publisher>Taito</publisher>
+ <info name="release" value="2021-05-26"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs ROM01 or later. -->
+ <!--"Arkanoid II" is a 1989 action game developed by Ryan Ridges and John Lund, and distributed by Taito America. It requires a 512K Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296700">
+ <rom name="arkanoid ii - revenge of doh iigs.woz" size="1296700" crc="0529637a" sha1="26f22571afb2a3f51258bf22e7910f02745098a6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bghost">
+ <description>Bubble Ghost</description>
+ <year>1988</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-05-26"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Bubble Ghost" is a 1988 action game developed by Infogrames and distributed by Accolade. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1312525">
+ <rom name="bubble ghost iigs.woz" size="1312525" crc="e4b9eda7" sha1="6a7eb6c3dcaf5927fb0248ff1064414fdefff5a9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dejavu">
+ <description>Déjà Vu</description>
+ <year>1988</year>
+ <publisher>ICOM Simulations</publisher>
+ <info name="release" value="2021-05-26"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM01 or later. -->
+ <!--"Deja Vu" is a 1988 adventure game developed by Fred Allen, David Marsh, Karl Roelofs, Todd Squires, Craig Erickson, Kurt Nelson, Steven Hays, Terry Schulenburg, Darin Adler, Jay Zipnick, Waldermar Horwat, Mark Waterman, and Tod Zipnick, and distributed by ICOM Simulations. It requires a 768K Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - System disk"/>
+ <dataarea name="flop" size="1361855">
+ <rom name="deja vu iigs - disk 1 - system disk.woz" size="1361855" crc="45bf7709" sha1="02c3735f579b259c0f005f20d6c13a79ad9733fc"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Program disk"/>
+ <dataarea name="flop" size="1361855">
+ <rom name="deja vu iigs - disk 2 - program disk.woz" size="1361855" crc="88fcacca" sha1="4d1adbb4f4b351657fbe3d874d3d8bdf40ad2e42"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hacker2">
+ <description>Hacker II</description>
+ <year>1987</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-05-26"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Hacker II: The Doomsday Papers" is a 1987 simulation game developed by Steve Cartwright and distributed by Activision. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296186">
+ <rom name="hacker ii- the doomsday papers iigs.woz" size="1296186" crc="5601d8b7" sha1="7d542579d2a127adefca5d10cb996e5a69fdb2cb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="destryr">
+ <description>Destroyer</description>
+ <year>1987</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Destroyer" is a 1987 simulation game developed by Michael Kosaka and Chuck Sommerville, and distributed by Epyx. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296658">
+ <rom name="destroyer iigs.woz" size="1296658" crc="401a544a" sha1="83004334a12e4e7b36baa132b14333741cb38d67"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gbabsktb">
+ <description>GBA Championship Basketball</description>
+ <year>1987</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"GBA Championship Basketball" is a 1987 sports game developed by Paul Terry, Jack Thornton, Scott Orr, John Cutter, Troy Lyndon, and Russell Lieblich, and distributed by Activision. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1329513">
+ <rom name="gba championship basketball iigs.woz" size="1329513" crc="affed43a" sha1="615e8fe867a969216381d2d3ec656d973b6a3b55"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jigsaw">
+ <description>Jigsaw</description>
+ <year>1988</year>
+ <publisher>Britannica Software</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM01 or later. -->
+ <!--"Jigsaw" is a 1988 board game developed by Javier Rullan Ruano and Huibert Aalbers, and distributed by Britannica Software. It requires a 768K Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296764">
+ <rom name="jigsaw iigs - disk 1 - program disk.woz" size="1296764" crc="1b4cac90" sha1="e429fe5e5149e7b5c5a812b74de6a7da3a9237cc"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Picture library"/>
+ <dataarea name="flop" size="1296255">
+ <rom name="jigsaw iigs - disk 2 - picture library.woz" size="1296255" crc="522b9621" sha1="646e277b6c8d32b5f4e96a6387341405b9db4951"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="miniputt">
+ <description>Mini-Putt</description>
+ <year>1988</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Mini-Putt" is a 1988 sports game developed by Ross Salas and distributed by Accolade. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296636">
+ <rom name="mini-putt iigs.woz" size="1296636" crc="043ffe92" sha1="cace02db6788d3142d4704264422289beb2a8bbc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="omega">
+ <description>Omega</description>
+ <year>1988</year>
+ <publisher>Origin Systems</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM01 or later. -->
+ <!--"Omega" is a 1988 simulation game developed by Stuart B. Marks and distributed by Origin Systems. It requires a 768K Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296155">
+ <rom name="omega iigs.woz" size="1296155" crc="1451e0d5" sha1="d9de13700b35c3ca651883b9c5224dbd8e43cf0e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="photonix">
+ <description>Photonix (Version 1.46)</description>
+ <year>1989</year>
+ <publisher>Free Tools Association</publisher>
+ <info name="release" value="2021-05-30"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1.25M Apple IIgs ROM 00 or ROM 01. -->
+ <!--"Photonix" is a 1989 disk utility developed by El Mathos, Pad, and ACS, and distributed by Free Tools Association. It requires a 1.25M Apple IIgs ROM 00 or ROM 01. This is version 1.46.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345319">
+ <rom name="photonix iigs.woz" size="1345319" crc="29368542" sha1="0504af1ada3e3cc9fc00d35096c1c92f93acefb5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="silpheed">
+ <description>Silpheed</description>
+ <year>1987</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Silpheed" is a 1987 action game developed by John Rettig, Stuart Goldstein, Mark Seibert, Satoshi Uesaki, Nobuyuki Ogawa, Akira Eye, Fumihito Kasatani, Nobuyuki Aoshima, Hiromi Ohba, Takeshi Miyaji, Osamu Harada, and Youichi Miyaji, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296337">
+ <rom name="silpheed iigs - disk 1.woz" size="1296337" crc="6e23bfc4" sha1="aab31b270ac2d0be19a63aeebb58cf63f8d664be"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296337">
+ <rom name="silpheed iigs - disk 2.woz" size="1296337" crc="2464d39c" sha1="3a4f6e18d97f5bdc40b988e6a44dedc2d5b62fb3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spquest">
+ <description>Space Quest</description>
+ <year>1987</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Space Quest: The Sarien Encounter" is a 1987 adventure game developed by Scott Murphy, Mark Crowe, Jeff Stephenson, Chris Iden, Sol Ackerman, and Ken Williams, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296257">
+ <rom name="space quest iigs - disk 1.woz" size="1296257" crc="c635790a" sha1="9bc6db1793f379838e90e0d5ab4b325e7658fb79"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296257">
+ <rom name="space quest iigs - disk 2.woz" size="1296257" crc="dc9f2e0d" sha1="49714165313ee908fc309970544659322dca1bd0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="thrdcrir">
+ <description>The Third Courier</description>
+ <year>1989</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM01 or later. -->
+ <!--"The Third Courier" is a 1989 adventure game developed by Carol Manley, Ivan Manley, Mike Branham, Robert Clardy, Chris Barker, Scott Wallin, Miik Nichols, Sheldon Safir, and Mark Wallace, and distributed by Accolade. It requires a 768K Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296289">
+ <rom name="the third courier iigs - disk 1.woz" size="1296289" crc="517a7892" sha1="df7f0eb0c4985fb756701e5263c16938e8ceb55c"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296289">
+ <rom name="the third courier iigs - disk 2.woz" size="1296289" crc="6f6cbd12" sha1="e4f765378433c72f922403a9953b9e70f6b065e0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="warmidle">
+ <description>War in Middle Earth</description>
+ <year>1989</year>
+ <publisher>Melbourne House</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM01 or later. -->
+ <!--"War in Middle Earth" is a 1989 adventure game developed by Ron Harris, Robert Clardy, Alan B. Clark, Graeme Devine, Mike Branham, Lloyd Ollmann, Jr., John Conley, Jim McBride, Michael Park, David Schroeder, Michael Ormsby, Mike Christy, Ann Dickens Clardy, Marcus Streets, Mark Riley, and Mike Singleton, and distributed by Melbourne House. It requires a 768K Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1312766">
+ <rom name="war in middle earth iigs - disk 1.woz" size="1312766" crc="8fd4dacd" sha1="cdf81e6137abfd07fa5b1be89f372784730e409f"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1312766">
+ <rom name="war in middle earth iigs - disk 2.woz" size="1312766" crc="a6800d26" sha1="733114ea587392bd01b7641ccc91a03ec85cc243"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="carmnwld">
+ <description>Where in the World is Carmen Sandiego?</description>
+ <year>1989</year>
+ <publisher>Broderbund Software</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Where in the World is Carmen Sandiego?" is a 1989 educational game developed by Gene Portwood, Lauren Elliott, Loring Vogel, Leila Bronstein, Don Albrecht, and Michelle McBride, and distributed by Broderbund Software. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296279">
+ <rom name="where in the world is carmen sandiego iigs - disk 1.woz" size="1296279" crc="7c2cd2eb" sha1="0e6ea59c5974c37ee88e22d8cbdfc3a46567d921"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296791">
+ <rom name="where in the world is carmen sandiego iigs - disk 2.woz" size="1296791" crc="ade1e7f6" sha1="4933ac927a966edde20cac34fa5374a2a163889c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="windwlkr">
+ <description>Windwalker</description>
+ <year>1990</year>
+ <publisher>Origin Systems</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM01 or later. -->
+ <!--"Windwalker" is a 1990 roleplaying game developed by Greg Malone, Dallas Snell, Jeff Hillhouse, Dave Eresian, Richard Filoramo, Lester Humphreys, Jason Linhart, Stephen Linhart, Kiri Naiman, Keith Winston, Jeff Dee, Glen Johnson, Denis Loubet, Keith Berdak, Bill Clarke, and Doug Hewitt, and distributed by Origin Systems. It requires a 768K Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1329100">
+ <rom name="windwalker iigs - disk 1.woz" size="1329100" crc="e8d218f5" sha1="682fac9a00d71b0ebf5f5f75e47bd872b71cd724"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1329100">
+ <rom name="windwalker iigs - disk 2.woz" size="1329100" crc="10702583" sha1="0cbbb26fd78220570cc3fdb5a48c4ccac9eaa1ab"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="warlock">
+ <description>Warlock</description>
+ <year>1988</year>
+ <publisher>Three-Sixty Pacific</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Warlock" is a 1988 action game developed by Infogrames and distributed by Three-Sixty Pacific. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296172">
+ <rom name="warlock iigs.woz" size="1296172" crc="b7fa22d5" sha1="79c3c37ed3f33defee66f6f757a4574302a405c4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wingames">
+ <description>Winter Games</description>
+ <year>1987</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Winter Games" is a 1987 sports game developed by Westwood Studios and distributed by Epyx. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296641">
+ <rom name="winter games iigs.woz" size="1296641" crc="8f9c392c" sha1="79150a262cec508f188f67cc9b7e45ee1dc52405"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="shanghai">
+ <description>Shanghai</description>
+ <year>1987</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Shanghai" is a 1987 board game developed by Brodie Lockard and Ivan Manley, and distributed by Activision. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296154">
+ <rom name="shanghai iigs.woz" size="1296154" crc="7155a611" sha1="6aac8d0a393c37a9b30f249d21bcfae2ba38f727"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pquest">
+ <description>Police Quest</description>
+ <year>1987</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Police Quest" is a 1987 adventure game developed by Jim Walls, Greg Rowland, Al Lowe, Scott Murphy, Ken Williams, Mark Crowe, Jerry Moore, Margaret Lowe, Jeff Stephenson, Chris Iden, Bob Heitman, and Carlos Escobar, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296347">
+ <rom name="police quest iigs - disk 1.woz" size="1296347" crc="777c23e5" sha1="d75bd3b9d9a2a686c6cc2872b30a162b6aa176a8"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1298395">
+ <rom name="police quest iigs - disk 2.woz" size="1298395" crc="942f2197" sha1="b245b1a25e2cfbcfe8c75b4de33a089410ce7dad"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="drgnwars">
+ <description>Dragon Wars</description>
+ <year>1990</year>
+ <publisher>Interplay Productions</publisher>
+ <info name="release" value="2021-05-30"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Dragon Wars" is a 1990 roleplaying game developed by Rebecca Heineman, Todd Camasta, Charles Deenan, Brian Fargo, and Paul O'Connor, and distributed by Interplay Productions. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296196">
+ <rom name="dragon wars iigs.woz" size="1296196" crc="331a8128" sha1="551d0e2fd5a4a33c41a7ba3f9b381bd41a8a7e9d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="monte">
+ <description>Monte Carlo</description>
+ <year>1987</year>
+ <publisher>PBI Software</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Monte Carlo" is a 1987 simulation game developed by Jeff Lefferts and Richard L. Seaborne, and distributed by PBI Software. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296169">
+ <rom name="monte carlo iigs.woz" size="1296169" crc="c89c7237" sha1="eae72c1446f10e585cb732359bf22a96122c2ede"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="subbatl">
+ <description>Sub Battle Simulator</description>
+ <year>1987</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Sub Battle Simulator" is a 1987 simulation game developed by Rob Brannon, Kelly Fergason, and Steve Snyder, and distributed by Epyx. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296676">
+ <rom name="sub battle simulator iigs.woz" size="1296676" crc="aa01105f" sha1="81a3029ef72d3dde59c385a2383c545021509734"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jelwayqb">
+ <description>John Elway's Quarterback</description>
+ <year>1989</year>
+ <publisher>Melbourne House</publisher>
+ <info name="release" value="2021-05-27"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"John Elway's Quarterback" is a 1989 sports game developed by William Denham, Gotham Graphics, and Raymond Genovese, and distributed by Melbourne House. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1312567">
+ <rom name="john elway's quarterback iigs.woz" size="1312567" crc="f730957b" sha1="8484a0b8380a46a07ca3674507fcd857c385947e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spquest2">
+ <description>Space Quest II</description>
+ <year>1988</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-28"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Space Quest II" is a 1988 adventure game developed by Mark Crowe, Scott Murphy, Jeff Stephenson, Chris Iden, Robert Heitman, and Carlos Escobar, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296282">
+ <rom name="space quest ii iigs - disk 1.woz" size="1296282" crc="34a62868" sha1="53340223e323e9b1e56e3c82b100cfd2869799bf"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296282">
+ <rom name="space quest ii iigs - disk 2.woz" size="1296282" crc="f5cce30c" sha1="6684e98df5c3d88f44099abaeabe4b8396e0c7f3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kingqst3">
+ <description>King's Quest III</description>
+ <year>1988</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-28"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"King's Quest III" is a 1988 adventure game developed by Roberta Williams, Al Lowe, Bob Kernaghan, Robert E. Heitman, Jeff Stephenson, Chris Iden, Doug MacNeill, Margaret Lowe, Dale Carlson, Jennifer Cobb, Chad Bye, Jeremy T. Cromwell, Carlos Escobar, Annette Childs, Greg Steffen, and Ken Williams, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296426">
+ <rom name="king's quest iii iigs - disk 1.woz" size="1296426" crc="cf25ed37" sha1="0dd9185c47c0607f5342c01b3cf0ca42d6b5a187"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296426">
+ <rom name="king's quest iii iigs - disk 2.woz" size="1296426" crc="738e9164" sha1="ef78a433efc4b54aa3014facb3bc4fdb0e3446cf"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gwshoot">
+ <description>Great Western Shootout</description>
+ <year>1989</year>
+ <publisher>Britannica Software</publisher>
+ <info name="release" value="2021-05-28"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Great Western Shootout" is a 1989 action game developed by Scott Patterson and Matt Crysdale, and distributed by Britannica Software. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296194">
+ <rom name="great western shootout iigs - disk 1.woz" size="1296194" crc="65d9538c" sha1="c41a1a7796c4d67432b546cebc7997d9a5cfb22d"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296194">
+ <rom name="great western shootout iigs - disk 2.woz" size="1296194" crc="8e664521" sha1="aa738a532332574481bcadb9c071e0dfe0730e24"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lslarry">
+ <description>Leisure Suit Larry in the Land of the Lounge Lizards</description>
+ <year>1987</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-28"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Leisure Suit Larry in the Land of the Lounge Lizards" is a 1987 adventure game developed by Al Lowe, Chuck Benton, Mark Crowe, Jeff Stephenson, Chris Iden, Bob Heitman, Ken Williams, and Carlos Escobar, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1312662">
+ <rom name="leisure suit larry in the land of the lounge lizards iigs - disk 1.woz" size="1312662" crc="31bf3aad" sha1="f1daad9a5a04cd2ae82c5fa3a315741a66a64126"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1312662">
+ <rom name="leisure suit larry in the land of the lounge lizards iigs - disk 2.woz" size="1312662" crc="b990e5bd" sha1="022bc36381aaa325153139cbc04da276fb8e1fbe"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bcauldrn">
+ <description>The Black Cauldron</description>
+ <year>1987</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-28"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"The Black Cauldron" is a 1987 adventure game developed by Al Lowe, Roberta Williams, Elaine Boulay, Nancy Casolaro, Melissa Haldeman, Scott Murphy, Sol Ackerman, Ken Williams, Jeff Stephenson, Chris Iden, and Bob Heitman, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296327">
+ <rom name="the black cauldron iigs - disk 1.woz" size="1296327" crc="def8c641" sha1="951544d592da8c0203ceec45f3f6e45ec44b98e9"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296327">
+ <rom name="the black cauldron iigs - disk 2.woz" size="1296327" crc="f66ab4ff" sha1="32f51302f4c3458f2134dea823d30f411a8f250e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kingchgo">
+ <description>The King of Chicago</description>
+ <year>1988</year>
+ <publisher>Cinemaware</publisher>
+ <info name="release" value="2021-05-28"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM01 or later. -->
+ <!--"The King of Chicago" is a 1988 adventure game developed by Doug Sharp and distributed by Cinemaware. It requires a 768K Apple IIgs ROM01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296682">
+ <rom name="the king of chicago iigs - reel 1.woz" size="1296682" crc="41530912" sha1="85fb08f8da981e9cc87edf8446e722ab7eefae91"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size="1296170">
+ <rom name="the king of chicago iigs - reel 2.woz" size="1296170" crc="a53c37c0" sha1="ff0519cf1b17e77587d82a41c12c836f44e21ab5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kingqst4">
+ <description>King's Quest IV: The Perils of Rosella</description>
+ <year>1989</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-28"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"King's Quest IV: The Perils of Rosella" is a 1989 adventure game developed by Ken Williams, Roberta Williams, William Goldstein, Chris Hoyt, John Hamilton, Teresa Baker, Jerry Moore, Carolly Hauksdottir, William Skirvin, Jeff Stephenson, Robert Heitman, Chris Iden, and Paul Krasno, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296374">
+ <rom name="king's quest iv iigs - disk 1.woz" size="1296374" crc="ff747ad4" sha1="6a216fc73cf146418bcc4cb2a0b159e1d96d367b"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296374">
+ <rom name="king's quest iv iigs - disk 2.woz" size="1296374" crc="f209e379" sha1="5b0a275432a495b86eb325a65558e340f15bcea4"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3"/>
+ <dataarea name="flop" size="1296374">
+ <rom name="king's quest iv iigs - disk 3.woz" size="1296374" crc="65f8435a" sha1="e20ba8c160e6609efa9d3576bef83c798dd2c436"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starsg1">
+ <description>Star Saga: One - Beyond The Boundary (Version 1.1)</description>
+ <year>1987</year>
+ <publisher>Masterplay Publishing Corporation</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Star Saga: One - Beyond The Boundary" is a 1987 roleplaying game developed by Richard Dutton, Walter Freitag, Andrew C. Greenberg, and Michael Massimilla, and distributed by Masterplay Publishing Corporation. This is version 1.1. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296274">
+ <rom name="star saga one iigs.woz" size="1296274" crc="e96de728" sha1="d00257002b10a75f5418e53bf96aa33df914cd2b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dejavu2">
+ <description>Déjà Vu II: Lost in Las Vegas</description>
+ <year>1989</year>
+ <publisher>Mindscape</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Déjà Vu II: Lost in Las Vegas" is a 1989 adventure game developed by Fred Allen, David Marsh, Michael Manning, Todd Squires, David Feldman, Paul Snively, Brian Baker, Karl Roelofs, Ed Dluzen, Darin Adler, Jay Zipnick, Waldemar Horwat, Julia Ulano, Tod Zipnick, and Mitch Adler, and distributed by Mindscape. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1361905">
+ <rom name="deja vu ii lost in last vegas iigs.woz" size="1361905" crc="55d9e932" sha1="9a82f93d0a200435f05d0b1a0a9d37d4c1978c20"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="twrmyrgl">
+ <description>The Tower of Myraglen</description>
+ <year>1987</year>
+ <publisher>PBI Software</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"The Tower of Myraglen" is a 1987 roleplaying game developed by Richard L. Seaborne and Jeff A. Lamberts, and distributed by PBI Software. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Start-up disk"/>
+ <dataarea name="flop" size="1296187">
+ <rom name="the tower of myraglen iigs - disk 1 - start-up disk.woz" size="1296187" crc="9a571c95" sha1="359abb5dfd1150d129e90c95e501f2c89c17b62e"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Program disk"/>
+ <dataarea name="flop" size="1345338">
+ <rom name="the tower of myraglen iigs - disk 2 - program disk.woz" size="1345338" crc="1e3a010b" sha1="a264a9be38d8ea804beea4d6b547ee25304af9df"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dhilchl">
+ <description>Downhill Challenge</description>
+ <year>1989</year>
+ <publisher>Broderbund Software</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Downhill Challenge" is a 1989 sports game designed by Christian Bertrand, ported to the Apple IIgs by Jean Claude Levy, and distributed by Broderbund Software. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - System disk"/>
+ <dataarea name="flop" size="1296205">
+ <rom name="downhill challenge iigs - disk 1 - system disk.woz" size="1296205" crc="ddcad7bf" sha1="6f56149da5cd8ca3f7a3ec7032a5278311e4d1ed"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Game disk"/>
+ <dataarea name="flop" size="1296203">
+ <rom name="downhill challenge iigs - disk 2 - game disk.woz" size="1296203" crc="ffa192ba" sha1="3fef37aa6d9aa8fdba0df6e6cb5b2a8668eca0bc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wltrgolf">
+ <description>World Tour Golf</description>
+ <year>1987</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"World Tour Golf" is a 1987 sports game developed by Evan and Nicky Robinson and Paul Reiche III, ported to the Apple IIgs by John Selhorst, and distributed by Electronic Arts. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296185">
+ <rom name="world tour golf iigs.woz" size="1296185" crc="b3f3f81d" sha1="1b5b86f72a9219c07c6a421450e1bb900c81ca55"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vegasgmb">
+ <description>Vegas Gambler</description>
+ <year>1988</year>
+ <publisher>California Dreams</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Vegas Gambler" is a 1988 simulation game developed by Marek Jackiewicz, Andrzej Miciłkiewicz, Marcin Szostakowski, Maciej Markuszewski, and Dorota Błaszczak, and distributed by California Dreams. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345393">
+ <rom name="vegas gambler iigs.woz" size="1345393" crc="22e59934" sha1="be3ebd77211d45f6169e21e09c26ee4359ca0398"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="chsm2100">
+ <description>The Fidelity Chessmaster 2100</description>
+ <year>1988</year>
+ <publisher>The Software Toolworks</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"The Fidelity Chessmaster 2100" is a 1988 board game developed by Troy Heere and Mark Manyen, and distributed by The Software Toolworks. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296183">
+ <rom name="the fidelity chessmaster 2100 iigs - disk 1.woz" size="1296183" crc="281e93dc" sha1="2246f45d7deb3414c1bdcbad5d0b4f77a9db52d3"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296183">
+ <rom name="the fidelity chessmaster 2100 iigs - disk 2.woz" size="1296183" crc="0c4704bc" sha1="d2ea3f4fbb3cf1127c23bb1ebd32fd3adef049f9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spaceace">
+ <description>Space Ace</description>
+ <year>1990</year>
+ <publisher>ReadySoft</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"Space Ace" is a 1990 action game developed by David Foster, Simon Douglas, Jorge Freitas, Hugh MacLeod, Murray Foster, Laurie Williams, Adam Wolk, Michael Griffith, Peter Bayes, David Dimatteo, Sue McComb, and Joanne Ashdown, and distributed by ReadySoft. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 1.woz" size="1296303" crc="c9b1d81c" sha1="01d0768fea8f9f2f6fb198ec75cf64382eaaeed7"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 2.woz" size="1296303" crc="213c7969" sha1="4f8c5a803705aa0a8856bd73295357d33277518b"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 3.woz" size="1296303" crc="5846b4eb" sha1="2556bdf9afbf627c71c589dea05030e22bb6d736"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 4.woz" size="1296303" crc="852b6729" sha1="cfd808927c36559ba0f30780dacc040c2533e656"/>
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 5"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 5.woz" size="1296303" crc="776d76db" sha1="d1979794cbf43d6df3b8ee19abd48af229d52d17"/>
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 6"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 6.woz" size="1296303" crc="0ad79c66" sha1="dfe7a77e8bac698f5b582940d5e88c55484e8934"/>
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 7"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 7.woz" size="1296303" crc="7a881dee" sha1="ac37a58f8a51482480cfe8f42ec57a0393f50c31"/>
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 8"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 8.woz" size="1296303" crc="7eb87bb0" sha1="daa9af77d0e162ba55f3d76d326582d172a135ad"/>
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 9"/>
+ <dataarea name="flop" size="1296303">
+ <rom name="space ace iigs - disk 9.woz" size="1296303" crc="8f9cbeed" sha1="f478b959ba865feead8d73220805ccfdf7b930e6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arkanoid">
+ <description>Arkanoid</description>
+ <year>1988</year>
+ <publisher>Taito</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs ROM 01. -->
+ <!--"Arkanoid" is a 1988 action game developed by Ryan Ridges and John Lund, and distributed by Taito America. It requires a 512K Apple IIgs ROM 01.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296671">
+ <rom name="arkanoid iigs.woz" size="1296671" crc="d82eee53" sha1="52914d5c1c05617eac17173de671f09ba7ef3c3c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nicklaus">
+ <description>Jack Nicklaus' Greatest 18 Holes of Major Championship Golf</description>
+ <year>1989</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-05-31"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Jack Nicklaus' Greatest 18 Holes of Major Championship Golf" is a 1989 sports game developed by Tony Manso and distributed by Accolade. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk ~ - Program disk"/>
+ <dataarea name="flop" size="1296252">
+ <rom name="jack nicklaus' greatest 18 holes of major championship golf iigs - disk 1 - program disk.woz" size="1296252" crc="42a132b9" sha1="ba9a7d0f8865b990b4c01d9b44fa82fe067f275e"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Course disk"/>
+ <dataarea name="flop" size="1296251">
+ <rom name="jack nicklaus' greatest 18 holes of major championship golf iigs - disk 2 - course disk.woz" size="1296251" crc="668bfa15" sha1="1b50bcfd3eeee7a0730f789bcda75530941c3770"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hostage">
+ <description>Hostage: Rescue Mission</description>
+ <year>1990</year>
+ <publisher>Mindscape</publisher>
+ <info name="release" value="2021-05-31"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Hostage: Rescue Mission" is a 1990 simulation game developed by Infogrames and distributed by Mindscape. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1361742">
+ <rom name="hostage- rescue mission iigs.woz" size="1361742" crc="e094007a" sha1="14ee3d0863bcb7170ba1bdab21876687f4ce619a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="captbld">
+ <description>Captain Blood</description>
+ <year>1989</year>
+ <publisher>Mindscape</publisher>
+ <info name="release" value="2021-05-31"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Captain Blood" is a 1989 simulation game developed by Philippe Ulrich, Didier Bouchon, Jean-Michel Jarre, Alexis Martial, and Michael Rho, and distributed by Mindscape. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1361758">
+ <rom name="captain blood iigs.woz" size="1361758" crc="45d2ab10" sha1="7f968e1704c2a969a33cf7a07c81629c12c7577d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="carmnusa">
+ <description>Where in the U.S.A. is Carmen Sandiego?</description>
+ <year>1989</year>
+ <publisher>Broderbund Software</publisher>
+ <info name="release" value="2021-05-31"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"Where in the U.S.A. is Carmen Sandiego?" is a 1989 educational game developed by Gene Portwood, Lauren Elliot, Peter Adams, Leila Bronstein, Julie Glavin, Michelle McBride, Dan Guerra, Les Pardue, Bevan Hulfenstein, Louis Evans, and Tom Rettig, and distributed by Broderbund Software. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296338">
+ <rom name="where in the u.s.a. is carmen sandiego iigs - disk 1.woz" size="1296338" crc="ca473b90" sha1="a48d9112106def7b6deed7146522152fb483bad0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296369">
+ <rom name="where in the u.s.a. is carmen sandiego iigs - disk 2.woz" size="1296369" crc="d150ccbb" sha1="3dbbfd2a1b14ded3bc6f307a32d9a003882305b2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="brdtale">
+ <description>The Bard's Tale: Tales of the Unknown</description>
+ <year>1987</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-05-31"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"The Bard's Tale: Tales of the Unknown" is a 1987 roleplaying game developed by Rebecca Heineman and distributed by Electronic Arts. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296709">
+ <rom name="the bard's tale iigs.woz" size="1296709" crc="1b451e17" sha1="d41c827b989d73f32615e49904ecf93638e81625"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="neuromnc">
+ <description>Neuromancer</description>
+ <year>1989</year>
+ <publisher>Interplay Productions</publisher>
+ <info name="release" value="2021-05-31"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Neuromancer" is a 1989 adventure game developed by Rebecca Heineman and distributed by Interplay Productions. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345288">
+ <rom name="neuromancer iigs.woz" size="1345288" crc="6d21fbf3" sha1="2f461215cd9331a0a87a61b1497b92d08f64589d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dreamzne">
+ <description>Dream Zone</description>
+ <year>1987</year>
+ <publisher>Baudville</publisher>
+ <info name="release" value="2021-05-31"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Dream Zone" is a 1987 adventure game developed by Andy Gavin, Jason Rubin, and Sarah Sidman, and distributed by Baudville. This is version 3.2. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296189">
+ <rom name="dream zone iigs - disk 1.woz" size="1296189" crc="05e8fc0d" sha1="17e950d8bb6c7f2119c0c6f41d17f4287056180e"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296189">
+ <rom name="dream zone iigs - disk 2.woz" size="1296189" crc="73d7952e" sha1="379575a78e2ae4594793738c9b71b250ba67cf17"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="manhuntr">
+ <description>Manhunter: New York</description>
+ <year>1987</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-05-31"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Manhunter: New York" is a 1987 adventure game developed by Dave Murry, Barry Murry, Dee Dee Murry, Jeff Stephenson, Chris Iden, Bob Heitman, Carlos Escobar, and Dr. Gary and Julie Stonedahl, and distributed by Sierra On-Line. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1345384">
+ <rom name="manhunter- new york iigs - disk 1.woz" size="1345384" crc="8862c002" sha1="064b29d944f02fce20e407c451d435365a8fe0fb"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1345384">
+ <rom name="manhunter- new york iigs - disk 2.woz" size="1345384" crc="f17f2cfa" sha1="0d915aec7f33375d8ba46c1c4419d8986a6360b0"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3"/>
+ <dataarea name="flop" size="1345384">
+ <rom name="manhunter- new york iigs - disk 3.woz" size="1345384" crc="bd448818" sha1="dcc058c912d3a291ede35a2b99ca59519f47d0c9"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4"/>
+ <dataarea name="flop" size="1345384">
+ <rom name="manhunter- new york iigs - disk 4.woz" size="1345384" crc="660c6483" sha1="21aca32e5fb3fa843ca660de8c6a3354df99106a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mean18">
+ <description>Mean 18</description>
+ <year>1987</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-06-03"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Mean 18" is a 1987 sports game developed by Rex Bradford, George Karalias, and Mark Lesser, and distributed by Accolade. It requires a 512K Apple IIgs. This archive includes the three add-on disks that were available separately (Famous Courses Volume II, III, and IV).-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk ~ - Program disk"/>
+ <dataarea name="flop" size="1329494">
+ <rom name="mean 18 iigs - disk 1 - program disk.woz" size="1329494" crc="0bff6131" sha1="a4f312c1e20e1f6f56aa7a150b1e3c2a055a659b"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Famous courses volume II"/>
+ <dataarea name="flop" size="1296258">
+ <rom name="mean 18 iigs - disk 2 - famous courses volume ii.woz" size="1296258" crc="13d63de6" sha1="1e2415846c7dc1c7ef213965c039fa2ae1cf07f9"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3 - Famous courses volume III"/>
+ <dataarea name="flop" size="1297284">
+ <rom name="mean 18 iigs - disk 3 - famous courses volume iii.woz" size="1297284" crc="57051e09" sha1="1f077302afab70811c901eb6f40d4e4b3d48a997"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4 - Famous courses volume IV"/>
+ <dataarea name="flop" size="1297250">
+ <rom name="mean 18 iigs - disk 4 - famous courses volume iv.woz" size="1297250" crc="f9e50694" sha1="75871ecc202b0535e45253c5c28ef8447853389f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hvrblade">
+ <description>Hover Blade</description>
+ <year>1991</year>
+ <publisher>MCX</publisher>
+ <info name="release" value="2021-06-04"/>
+ <sharedfeat name="compatibility" value=",A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later -->
+ <!--"Hover Blade" is a 1991 action game developed by Shiraz Akmal and Eric Boden, and distributed by MCX. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1345297">
+ <rom name="hover blade iigs - disk 1.woz" size="1345297" crc="dea1f1bf" sha1="f15fa4a7894908b48fa7038521e0ca37cada2656"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1345297">
+ <rom name="hover blade iigs - disk 2.woz" size="1345297" crc="c63ec5d5" sha1="bb90b71a84b5f9d3809342e27a303638208194bb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fastbrk">
+ <description>Fast Break</description>
+ <year>1989</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-06-04"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Fast Break" is a 1989 sports game developed by Steve Cartwright, Greg Hospelhorn, George Wong, Pam Levins, and Roseann Mitchell, and distributed by Accolade. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296720">
+ <rom name="fast break iigs.woz" size="1296720" crc="56b4f173" sha1="18e1ba72192ce9e059633a62be6aae0c8b92c686"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hallsmzm">
+ <description>Halls of Montezuma</description>
+ <year>1990</year>
+ <publisher>Strategic Simulations</publisher>
+ <info name="release" value="2021-06-04"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"Halls of Montezuma" is a 1990 simulation game developed by Roger Keating, Ian Trout, Allan Bell, Sue Bell, and Steven Hart, and distributed by Strategic Simulations Group. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296238">
+ <rom name="halls of montezuma iigs - disk 1.woz" size="1296238" crc="e9e5007e" sha1="d562bcf62a8b5dfab0d991279b9372ae0af55e35"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296238">
+ <rom name="halls of montezuma iigs - disk 2.woz" size="1296238" crc="390131dd" sha1="0d75cf473647631351edb2871710cdd684094e7b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starsg2">
+ <description>Star Saga: Two - The Clathran Menace</description>
+ <year>1988</year>
+ <publisher>MasterPlay Publishing Corporation</publisher>
+ <info name="release" value="2021-06-04"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Star Saga: Two - The Clathran Menace" is a 1988 roleplaying game developed by Richard Dutton, Walter Freitag, Andrew C. Greenberg, Sheila M. Greenberg, Michael Massimilla, and Gerald M. Seixas, and distributed by MasterPlay Publishing Corporation. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296296">
+ <rom name="star saga two iigs.woz" size="1296296" crc="39e1e6ee" sha1="b712121eb0a254f6ef51010371e308f11ed931b8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clbbgmn">
+ <description>Club Backgammon</description>
+ <year>1988</year>
+ <publisher>California Dreams</publisher>
+ <info name="release" value="2021-06-04"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Club Backgammon" is a 1988 board game developed by Staszek Bartkowski, Jarek Olszewski, Dorota B&#x142;aszczak, Maciej Markuszewski, and Marcin Szostakowski, and distributed by California Dreams. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1344899">
+ <rom name="club backgammon iigs.woz" size="1344899" crc="02fd734a" sha1="c62ad7673353aa21ccb1fab56e1df9b4e2a7a57e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="byondzrk">
+ <description>Beyond Zork: The Coconut of Quendor (Revision 57 / 871221)</description>
+ <year>1987</year>
+ <publisher>Infocom</publisher>
+ <info name="release" value="2021-06-04"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs ROM 00 or ROM 01. -->
+ <!--"Beyond Zork: The Coconut of Quendor" is a 1987 adventure game developed by Brian Moriarty and distributed by Infocom. This is revision 57 / 871221. It requires a 512K Apple IIgs ROM 00 or ROM 01.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1312556">
+ <rom name="beyond zork iigs.woz" size="1312556" crc="b312178d" sha1="e08df0adda743ee92f6716fbaaa2ddd3ba2c3a05"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="crylmsn2">
+ <description>2088: The Cryllan Mission - The Second Scenario</description>
+ <year>1990</year>
+ <publisher>Victory Software</publisher>
+ <info name="release" value="2021-06-04"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1.25MB Apple IIgs ROM 01 or later. -->
+ <!--"2088: The Cryllan Mission - The Second Scenario" is a 1990 roleplaying game developed by Vinay Pai, Vivek Pai, and Vijay Pai, and distributed by Victory Software. It requires a 1.25MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - System"/>
+ <dataarea name="flop" size="1345398">
+ <rom name="2088 - the cryllan mission - the second scenario iigs - disk 1 - system.woz" size="1345398" crc="389a2d46" sha1="d1132ba890573390db3906742ecc517a068a36cc"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Program"/>
+ <dataarea name="flop" size="1345399">
+ <rom name="2088 - the cryllan mission - the second scenario iigs - disk 2 - program.woz" size="1345399" crc="b500b6bb" sha1="fd86fd3aa3c8da2ff8b11189107786925eb2011e"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3 - Outdoors"/>
+ <dataarea name="flop" size="1345400">
+ <rom name="2088 - the cryllan mission - the second scenario iigs - disk 3 - outdoors.woz" size="1345400" crc="9dda11aa" sha1="d387c50de2c3591a48b2b4ee9a03558178b028c5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="defcrown">
+ <description>Defender of the Crown</description>
+ <year>1988</year>
+ <publisher>Cinemaware</publisher>
+ <info name="release" value="2021-06-04"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Defender of the Crown" is a 1988 adventure game developed by Kellyn Beeck, James Sachs, Ivan Manley, Robert Jacob, Phyllis Jacob, Pat Cook, Jim Cuomo, Tom Warner, Jeff Hilbers, Steve Quinn, Richard La Barre, John Cutter, Rob Landeros, Doug Smith, Betsy Scafati, and Wayne Brockman, and distributed by Cinemaware Corporation. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Reel 1"/>
+ <dataarea name="flop" size="1296886">
+ <rom name="defender of the crown iigs - reel 1.woz" size="1296886" crc="73c57ecb" sha1="bfb82cc4c817ada07bff9e1dd06a84a2522af05a"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Reel 2"/>
+ <dataarea name="flop" size="1296374">
+ <rom name="defender of the crown iigs - reel 2.woz" size="1296374" crc="5a8945a3" sha1="fac77abad75d71c2f05a31ce609a944a6dc0f46f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="skatedie">
+ <description>Skate or Die</description>
+ <year>1988</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs ROM 01. Music requires 768K. -->
+ <!--"Skate or Die" is a 1988 sports game developed by Michael Kosaka, Stephen Landrum, David Bunch, and Michelle Shelfer, and distributed by Electronic Arts. It requires a 512K Apple IIgs ROM 01. Music requires 768K.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296713">
+ <rom name="skate or die iigs.woz" size="1296713" crc="300af7ee" sha1="7ef79447b14b2268bdbd6489188f951c995e9b7a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="strsoccr">
+ <description>Street Sports Soccer</description>
+ <year>1988</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs ROM 00 or ROM 01. -->
+ <!--"Street Sports Soccer" is a 1988 sports game developed by Designer Software and distributed by Epyx. It requires a 512K Apple IIgs ROM 00 or ROM 01.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296697">
+ <rom name="street sports soccer iigs.woz" size="1296697" crc="25b2491e" sha1="fd7231ff1fbba463fa6a0ae068b9ef37a284b64b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ootw">
+ <description>Out of this World</description>
+ <year>1992</year>
+ <publisher>Interplay Productions</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"Out of this World" is a 1992 action game developed by Rebecca Heineman and distributed by Interplay Productions. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296230">
+ <rom name="out of this world iigs - disk 1 - program disk.woz" size="1296230" crc="114a8c7f" sha1="5821227cf3e7dc6b07d2255f63c77a66f355cc93"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Sounds disk"/>
+ <dataarea name="flop" size="1296229">
+ <rom name="out of this world iigs - disk 2 - sounds disk.woz" size="1296229" crc="df8eccc2" sha1="e8bf12708fd810db0ef8ec803df338c2a747781a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="thexder">
+ <description>Thexder (Version 2.7)</description>
+ <year>1987</year>
+ <publisher>Sierra On-Line</publisher>
+ <info name="release" value="2021-06-01"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Thexder" is a 1987 action game developed by H. Godai, S. Uesaka, Michael D. Branham, Robert C. Clardy, John P. Conley, Lloyd Ollmann Jr., and Michael Ormsby, and distributed by Sierra On-Line. This is version 2.7. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296260">
+ <rom name="thexder iigs.woz" size="1296260" crc="98a49554" sha1="6c1389e558151f08234f25f6c0e04337e6290297"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tunarmg">
+ <description>Tunnels of Armageddon (Version 1.0)</description>
+ <year>1989</year>
+ <publisher>California Dreams</publisher>
+ <info name="release" value="2021-06-03"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Tunnels of Armageddon" is a 1989 action game developed by Adam Skorupiński, Mirek Zabłocki, Krzysiek Koziarski, Zbych Dąbrowski, Dorota Błaszczak, Marcin Grzegorzewski, Dick Vohlers, Tomek Meuś, and distributed by California Dreams. This is version 1.0. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1344940">
+ <rom name="tunnels of armageddon iigs.woz" size="1344940" crc="5fbeadc3" sha1="3c3d99d4aea530e2eb529e085d31984e0d11dd28"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cribgin">
+ <description>Gin King / Cribbage King</description>
+ <year>1989</year>
+ <publisher>The Software Toolworks</publisher>
+ <info name="release" value="2021-06-05"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"Gin King / Cribbage King" is a 1989 board game developed by Mark Manyen, Don Laabs, David M. Linnehan, and Elizabeth Scafati, and distributed by The Software Toolworks. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296245">
+ <rom name="gin king - cribbage king iigs - disk 1.woz" size="1296245" crc="976a71a5" sha1="3319d52f509cd072aa74cf804b206e3b14c8f348"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1345397">
+ <rom name="gin king - cribbage king iigs - disk 2.woz" size="1345397" crc="f38659d9" sha1="fd11f19bb38faf58e270ae07f042f259106390ad"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="revo76">
+ <description>Revolution '76 (Version June 27, 1989)</description>
+ <year>1989</year>
+ <publisher>Britannica Software</publisher>
+ <info name="release" value="2021-06-07"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1.25MB Apple IIgs ROM 01 or later. -->
+ <!--"Revolution '76" is a 1988 strategy game developed by Edward Bever, Patricia Bever, Susan Barr, Sandra Lakin, David Craft, Andy Kanakares, and Ezra Sidran, and distributed by Britannica Software. This version is dated June 27, 1989 according to a printed stamp on the disk label. It requires a 1.25MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296267">
+ <rom name="revolution '76 iigs - disk 1.woz" size="1296267" crc="e112814c" sha1="3c713d5c14d0e182256120ff7623a064b2a6b812"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296267">
+ <rom name="revolution '76 iigs - disk 2.woz" size="1296267" crc="1dbedb8e" sha1="9d489ffab3e025586e702d72387641ffe4fb7d55"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3"/>
+ <dataarea name="flop" size="1296267">
+ <rom name="revolution '76 iigs - disk 3.woz" size="1296267" crc="7fee9792" sha1="41082c8b9546d12e9a73824a3f2ce2be4dd0823b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="printshp">
+ <description>The Print Shop (Version 1.0)</description>
+ <year>1987</year>
+ <publisher>Broderbund Software</publisher>
+ <info name="release" value="2021-06-07"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"The Print Shop IIgs" is a 1987 graphics program developed by David Balsam, Martin Kahn, Corey Kosak, Ann E. Kronen, Susan E. Schlangen, Richard Whittaker, Michelle McBride, Don Albrecht, and Leila Bronstein, and distributed by Broderbund Software. This is version 1.0. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296808">
+ <rom name="the print shop iigs.woz" size="1296808" crc="5e6c4c53" sha1="3bea5c841e8459cab65d1b6382f66d15ee0b61e4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="prntshcm">
+ <description>The Print Shop Companion</description>
+ <year>1990</year>
+ <publisher>Broderbund Software</publisher>
+ <info name="release" value="2021-06-07"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"The Print Shop Companion IIgs" is a 1990 graphics program developed by Roland Gustafsson, Leslie Wilson, Michelle Bushneff, Barbara Lawrence, and Leila Bronstein, and distributed by Broderbund Software. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296229">
+ <rom name="the print shop companion iigs.woz" size="1296229" crc="9a1893da" sha1="bb43dbf428eb45b147a9726b71ff2d38a5f48b87"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fantavsn">
+ <description>Fantavision</description>
+ <year>1987</year>
+ <publisher>Broderbund Software</publisher>
+ <info name="release" value="2021-06-07"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 256K Apple IIgs. -->
+ <!--"Fantavision IIgs" is a 1987 graphics program developed by Scott Anderson and Ken Rosen, and distributed by Broderbund Software. It requires a 256K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296691">
+ <rom name="fantavision iigs.woz" size="1296691" crc="4c7648fd" sha1="ece3cc2473fedfaa497dea84e01f1b07b43bdeb1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="crtoonrs">
+ <description>Cartooners</description>
+ <year>1988</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-06-07"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"Cartooners" is a 1988 graphics program developed by Randy McLaughlin, Al Borchers, Mike Johnston, Tony Hertzel, Thomas Hertzel, Paul Hertzel, Neal Vaughn, and Dan Klassen, and distributed by Electronic Arts. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296281">
+ <rom name="cartooners iigs - disk 1 - program.woz" size="1296281" crc="1ad490c0" sha1="8e64c731fc8f449c0c6c6b1ef39586bc8254b035"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Art disk"/>
+ <dataarea name="flop" size="1296277">
+ <rom name="cartooners iigs - disk 2 - art.woz" size="1296277" crc="9406f975" sha1="3a286df8f20643b488fa9277bd0364459ab0503f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="artfilm">
+ <description>Art and Film Director</description>
+ <year>1989</year>
+ <publisher>Epyx</publisher>
+ <info name="release" value="2021-06-08"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Art and Film Director" is a 1989 graphics program developed by Novotrade, Caesar Studio, Amanda Dee, Jeff Dee, Sheryl Knowles, Janet Kramer, and Matthew Sarconi, and distributed by Epyx. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Art director"/>
+ <dataarea name="flop" size="1296249">
+ <rom name="art and film director iigs - disk 1 - art director.woz" size="1296249" crc="9cf7534c" sha1="64d760d5f90b3b3bd6d4c0051599a24af9ca144f"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Film director"/>
+ <dataarea name="flop" size="1296250">
+ <rom name="art and film director iigs - disk 2 - film director.woz" size="1296250" crc="191e6975" sha1="44c74d30795d351415c828604b8aa258d3ba8a7b"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3 - Graphics disk"/>
+ <dataarea name="flop" size="1296762">
+ <rom name="art and film director iigs - disk 3 - graphics disk.woz" size="1296762" crc="c69d302f" sha1="5d8a514f4fa284473d930468f814ca89d76b7042"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="drawplus">
+ <description>Draw Plus (Version 1.1)</description>
+ <year>1987</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-06-08"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Draw Plus" is a 1987 graphics program developed by H. Lamiraux and distributed by Activision. This is version 1.1. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296171">
+ <rom name="draw plus iigs.woz" size="1296171" crc="60ae386e" sha1="e31e826e10ead9211e4e9f28ce51398786efedec"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="grphstd">
+ <description>The Graphics Studio</description>
+ <year>1987</year>
+ <publisher>Accolade</publisher>
+ <info name="release" value="2021-06-08"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"The Graphics Studio" is a 1987 graphics program developed by Greg Hospelhorn, Peter Wickman, Richard Antaki, and distributed by Accolade. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296696">
+ <rom name="the graphics studio iigs.woz" size="1296696" crc="19c9e6bf" sha1="97e5f4a0a05c818862a580b7bcb5663241d72e78"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="immortal">
+ <description>The Immortal</description>
+ <year>1990</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-06-05"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"The Immortal" is a 1990 roleplaying game developed by Will Harvey, Ian Gooding, Michael Marcanted, Brett G. Durrett, and Douglas Fulton, and distributed by Electronic Arts. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Play disk"/>
+ <dataarea name="flop" size="1296229">
+ <rom name="the immortal iigs - disk 1 - play.woz" size="1296229" crc="b804341e" sha1="72322fd7d8e5d3904bd89796725fb106d3cca5a5"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Graphics disk"/>
+ <dataarea name="flop" size="1296226">
+ <rom name="the immortal iigs - disk 2 - graphics.woz" size="1296226" crc="bf428297" sha1="cdf5ea12029204a4a8dfed975d2c917406e3a7d5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="triango">
+ <description>TrianGo</description>
+ <year>1988</year>
+ <publisher>California Dreams</publisher>
+ <info name="release" value="2021-06-05"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"TrianGo" is a 1988 board game developed by Staszek Bartkowski, Marcin Szostakowski, Maciej Markuszewski, Dorota Błaszczak, and distributed by California Dreams. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296250">
+ <rom name="triango iigs.woz" size="1296250" crc="0bd18998" sha1="36f0a842875632f25bb8acd60bf807862a4397b6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="816paint">
+ <description>816/Paint (Version 3.1)</description>
+ <year>1987</year>
+ <publisher>Baudville</publisher>
+ <info name="release" value="2021-06-08"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"816/Paint" is a 1987 graphics program developed by Michael Darooge, Robert Barris, and Gregory C. Miller, and distributed by Baudville. This is vesion 3.1. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1319212">
+ <rom name="816-paint iigs.woz" size="1319212" crc="03cde91c" sha1="7f3de5c008fd9bb77cdd2cdb4dc2524cb77be6ff"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="begldraw">
+ <description>BeagleDraw (Version 1.3)</description>
+ <year>1987</year>
+ <publisher>Beagle Bros.</publisher>
+ <info name="release" value="2021-06-09"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"BeagleDraw" is a 1987 graphics program developed by Robert Hearn and Jeff Erickson, and distributed by Beagle Bros. This is version 1.3. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296153">
+ <rom name="beagledraw iigs.woz" size="1296153" crc="66e80d46" sha1="e1fd5c85d666fec1cc03f7bab728d11c9bcf3c3c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="drmgrafx">
+ <description>DreamGrafix</description>
+ <year>1992</year>
+ <publisher>DreamWorld Software</publisher>
+ <info name="release" value="2021-06-10"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1.25MB Apple IIgs. -->
+ <!--"DreamGrafix" is a 1992 graphics program developed by Jason Anderson, Steve Chiang, Shawn Martin, and Yong Su Kim, and distributed by DreamWorld Software. This is version 1.06. It requires a 1.25MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1328942">
+ <rom name="dreamgrafix iigs.woz" size="1328942" crc="1179d76c" sha1="699f5f4adac2043ff2f71619e4c6f3d2f54d7acb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="platpnt">
+ <description>Platinum Paint (Version 2.01)</description>
+ <year>1992</year>
+ <publisher>Beagle Bros.</publisher>
+ <info name="release" value="2021-06-10"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1.25MB Apple IIgs. -->
+ <!--"Platinum Paint" is a 1992 graphics program developed by Matthew Reimer and distributed by Beagle Bros. This is version 2.01. It requires a 1.25MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - System disk"/>
+ <dataarea name="flop" size="1296170">
+ <rom name="platinum paint iigs - disk 1 - system disk.woz" size="1296170" crc="6ccb4390" sha1="12e9e8da24881506302e19cd9110e831564dd211"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Program disk"/>
+ <dataarea name="flop" size="1296171">
+ <rom name="platinum paint iigs - disk 2 - program disk.woz" size="1296171" crc="b778a68c" sha1="a66e372e59945f3ec18491c7df5be01e076411cc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pwplus">
+ <description>Paintworks Plus (Version 1.2)</description>
+ <year>1986</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-06-10"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Paintworks Plus" is a 1986 graphics program developed by Henri Lamiraux, B. Gallet, L. Barthelet, R. Danais, and S. Cavril, and distributed by Activision. This is version 1.2. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296206">
+ <rom name="paintworks plus iigs.woz" size="1296206" crc="c557968f" sha1="c5c44af96b91aa1550cc0fdabd67434fd72a4e51"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pwksgold">
+ <description>Paintworks Gold (Version 1.5)</description>
+ <year>1987</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-06-10"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1.25MB Apple IIgs. -->
+ <!--"Paintworks Gold" is a 1987 graphics program developed by Luc Barthelet, Henri Lamiraux, Paul Zuzelo, and Sydney Williams, and distributed by Activision. This is version 1.5. It requires a 1.25MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296195">
+ <rom name="paintworks gold iigs - disk 1 - program disk.woz" size="1296195" crc="727db105" sha1="e2b1759d4f41068346fd0d5485afa262ec4a6718"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Art disk"/>
+ <dataarea name="flop" size="1296191">
+ <rom name="paintworks gold iigs - disk 2 - art disk.woz" size="1296191" crc="5eaa9d86" sha1="dccd17f662a69e5c64f90ae4c93272c988402547"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="imgmst12">
+ <description>ImageMaster: Basic Paint (Version 1.2)</description>
+ <year>1992</year>
+ <publisher>JADA Graphics</publisher>
+ <info name="release" value="2021-06-10"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"ImageMaster: Basic Paint" is a 1992 graphics program developed by Larry Jackson and distributed by JADA Graphics. This is version 1.2. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296161">
+ <rom name="imagemaster- basic paint iigs.woz" size="1296161" crc="5daefc49" sha1="f2eec1054c8bcdd0fd94951be018873a0c1d991a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="grphsmkt">
+ <description>Graphics Supermarket (Version 1.1)</description>
+ <year>1987</year>
+ <publisher>Abracadata</publisher>
+ <info name="release" value="2021-06-10"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Graphics Supermarket" is a 1987 graphics program developed by Rodger Smith, Joe Hebling, Mary Carol Smith, and Connie Holvey, and distributed by Abracadata. This is version 1.1. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1328978">
+ <rom name="graphics supermarket iigs.woz" size="1328978" crc="b34c7131" sha1="dec9c9c89d6d5219ed28e7a56e7cef1683970394"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gwrit310">
+ <description>GraphicWriter III (Version 1.0)</description>
+ <year>1990</year>
+ <publisher>Seven Hills Software</publisher>
+ <info name="release" value="2021-06-10"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM 01 or later. -->
+ <!--"GraphicWriter III" is a 1990 graphics program developed by Gary Crandall and Richard Bennett, and distributed by Seven Hills Software. This is version 1.0. It requires a 768K Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1360720">
+ <rom name="graphicwriter iii iigs - disk 1.woz" size="1360720" crc="20234e53" sha1="de039d332924765b21e90296020d1d34bc53ac35"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296208">
+ <rom name="graphicwriter iii iigs - disk 2.woz" size="1296208" crc="0b82c50b" sha1="f9eddd4ab85144b608b72e486484ead4f8c5bb11"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3"/>
+ <dataarea name="flop" size="1360720">
+ <rom name="graphicwriter iii iigs - disk 3.woz" size="1360720" crc="a62a325f" sha1="c2499046e52c002bcd48352535633bd6eb577152"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dpaint2">
+ <description>DeluxePaint II (Version 2.01)</description>
+ <year>1987</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-06-08"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"DeluxePaint II" is a 1987 graphics program developed by Daniel Silva, Brent Iverson, David Grady, Greg Riker, Shelley Day, Jeff Johnnigman, Happy Keller, Nicholas Lavroff, Carolyn McFarlane, Richard Antaki, Paul Reiche III, Stu Roberson, Avril Harrison, Judy Campbell, and Frank Wing, and distributed by Electronic Arts. This is vesion 2.01. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296391">
+ <rom name="deluxepaint ii iigs - disk 1 - program.woz" size="1296391" crc="b0028911" sha1="bbddbd2078877b4a2526da3cc5da856e444a1322"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Bonus art disk"/>
+ <dataarea name="flop" size="1296398">
+ <rom name="deluxepaint ii iigs - disk 2 - bonus art disk.woz" size="1296398" crc="b499dc9b" sha1="9da9d0446400ba0a14955a70c7969ae1200810a9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starspln">
+ <description>Stars and Planets</description>
+ <year>1989</year>
+ <publisher>Advanced Ideas</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs ROM 01 or later. -->
+ <!--"Stars and Planets" is a 1989 educational program developed by Julie Anderson and distributed by Advanced Ideas. It requires a 512K Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345319">
+ <rom name="stars and planets iigs.woz" size="1345319" crc="19b5c12b" sha1="213b4477085f32423c69da5adc4d692b837a54c0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mavisbcn">
+ <description>Mavis Beacon Teaches Typing (Version 1.8)</description>
+ <year>1987</year>
+ <publisher>The Software Toolworks</publisher>
+ <info name="release" value="2021-06-16"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Mavis Beacon Teaches Typing" is a 1987 educational program developed and distributed by The Software Toolworks. This is version 1.8. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1289492">
+ <rom name="mavis beacon teaches typing iigs - disk 1.woz" size="1289492" crc="aca9e637" sha1="d2c04b96e16d17a10a47f2422e9a14547957a67e"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296148">
+ <rom name="mavis beacon teaches typing iigs - disk 2.woz" size="1296148" crc="6c39595e" sha1="40461f3e81396be49bcb8af1d95de4f3fc1e4a3e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mathnme">
+ <description>Math and Me (Version 1.0 08/01/88)</description>
+ <year>1988</year>
+ <publisher>Davidson and Associates</publisher>
+ <info name="release" value="2021-06-16"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Math and Me" is a 1988 educational program developed by C.K. Haun and distributed by Davidson &amp;amp; Associates. This is version 1.0, dated 08/01/88. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1328947">
+ <rom name="math and me iigs.woz" size="1328947" crc="b732477d" sha1="d9270d665cd209b85eb9c3bb6df4a37468150ebe"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="smthtlkr">
+ <description>SmoothTalker</description>
+ <year>1987</year>
+ <publisher>First Byte</publisher>
+ <info name="release" value="2021-06-16"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM 00 or ROM 01. -->
+ <!--"SmoothTalker" is a 1987 productivity program developed and distributed by First Byte. It requires a 768K Apple IIgs ROM 00 or ROM 01.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1312507">
+ <rom name="smoothtalker iigs.woz" size="1312507" crc="19b0ec7f" sha1="89d332155d9bd9c02e6254f4379c15eb6bb19376"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stckybsh">
+ <description>Stickybear Shapes</description>
+ <year>1988</year>
+ <publisher>Optimum Resource</publisher>
+ <info name="release" value="2021-06-16"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Stickybear Shapes" is a 1988 educational program developed by Richard Hefter, David Cunningham, and Susan Dubicki, and distributed by Optimum Resource. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1286466">
+ <rom name="stickybear shapes iigs.woz" size="1286466" crc="1d44fbc7" sha1="8b1c33ed774c590557bc2eff7f5758819b33092c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tbtarot">
+ <description>Tarot</description>
+ <year>1990</year>
+ <publisher>Toolbox</publisher>
+ <info name="release" value="2021-06-16"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"Tarot" is a 1990 French language card game developed by François Uhrich and Jean-François Sauvage, and distributed by Toolbox. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345329">
+ <rom name="tarot iigs.woz" size="1345329" crc="14cd98c9" sha1="41efccb0166e1891b068f1ad9a072d0fb805ef7a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fmplanet">
+ <description>Full Metal Planete</description>
+ <year>1990</year>
+ <publisher>Infogrames</publisher>
+ <info name="release" value="2021-06-16"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"Full Metal Planete" is a 1990 French language board game developed by François Uhrich, Nicolas Bergeret, Louis van Proosdij Duport, Etienne Petitjean, and Pascal Wassong, and distributed by Infogrames. This is version 1.0. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345399">
+ <rom name="full metal planete iigs.woz" size="1345399" crc="7f957af7" sha1="e727b67b1905956a2a9b99d8715b8291e30c391d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="shangha2">
+ <description>Shanghai II: Dragon's Eye</description>
+ <year>1993</year>
+ <publisher>Big Red Computer Club</publisher>
+ <info name="release" value="2021-06-16"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"Shanghai II: Dragon's Eye" is a 1993 board game developed by Brodie Lockard, Don Harlow, John Wrenholt, and Steve Luellman, and distributed by Big Red Computer Club. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296206">
+ <rom name="shanghai ii iigs - disk 1 - program.woz" size="1296206" crc="ddda4a20" sha1="22cb6182462e3869797c4a2a46565761a8b00874"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Sounds disk"/>
+ <dataarea name="flop" size="1296206">
+ <rom name="shanghai ii iigs - disk 2 - sounds.woz" size="1296206" crc="0a58a12d" sha1="bc42f224a719594df64c0098c60fe7d9af185bc6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mcs">
+ <description>Music Construction Set (Version 1.0)</description>
+ <year>1986</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-06-14"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 256K Apple IIgs. -->
+ <!--"Music Construction Set" is a 1986 audio program developed by Will Harvey, Jim Nitchals, and Doug Fulton, and distributed by Electronic Arts. This is version 1.0. It requires a 256K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296714">
+ <rom name="music construction set iigs.woz" size="1296714" crc="c61bf3cc" sha1="8bb33e8b4cab20effb6e7522e3eb01f382e53a7d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="instsynt">
+ <description>Instant Synthesizer</description>
+ <year>1988</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="release" value="2021-06-14"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM 01 or later. -->
+ <!--"Instant Synthesizer" is a 1988 audio program developed by Larry Reed and distributed by Electronic Arts. This is version 1.0. It requires a 768K Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296230">
+ <rom name="instant synthesizer iigs - disk 1 - program.woz" size="1296230" crc="d4e982f6" sha1="25eecac855d0784ba5df1125cecde22977d1474c"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Data disk"/>
+ <dataarea name="flop" size="1296227">
+ <rom name="instant synthesizer iigs - disk 2 - data.woz" size="1296227" crc="b3f3db36" sha1="278993013a1eb963e06f78af6d5f58d48cd86fc1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mtrkspro">
+ <description>Master Tracks Pro (Version 1.04)</description>
+ <year>1989</year>
+ <publisher>Passport Designs</publisher>
+ <info name="release" value="2021-06-14"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"Master Tracks Pro" is a 1989 audio program developed by Dave Kusek, Don Williams, and Dave Howell, and distributed by Passport Designs. This is version 1.04. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345349">
+ <rom name="master tracks pro iigs.woz" size="1345349" crc="4c8cb4f7" sha1="fb5db1100b1512186113fa9d8396b649ab1db9c7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="musstdio">
+ <description>The Music Studio (Version 2.0)</description>
+ <year>1988</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-06-14"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"The Music Studio" is a 1988 audio program developed by Ric Forrester, Rick Parfitt, Peter Wickman, Paul Zuzelo, Sally Froud, Jeff Cable, Carl Bacani, Jim Inscore, Sydney Williams Lewis, Nancy Waisanen, Steve Young, and Laura E. Singer, and distributed by Activision. This is version 2.0. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296337">
+ <rom name="the music studio iigs - disk 1 - program.woz" size="1296337" crc="a4f7f392" sha1="eb2e0e72cdceb392c3f2ef73ff5c576a8c0c2ca8"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Additional songs and instruments disk"/>
+ <dataarea name="flop" size="1296362">
+ <rom name="the music studio iigs - disk 2 - additional songs and instruments.woz" size="1296362" crc="a834a4c6" sha1="e5b2a5dcd6642725d82c45617a4c2dadea5febd1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jamsessn">
+ <description>Jam Session (Version 1.0)</description>
+ <year>1989</year>
+ <publisher>Broderbund Software</publisher>
+ <info name="release" value="2021-06-14"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM 01 or later. -->
+ <!--"Jam Session" is a 1989 audio program developed by Steve Capps, Neil Cormia, Ty Roberts, Ed Bogas, Edward Badasov, Latricia Turner, and Avril Harrison, and distributed by Broderbund Software. This is version 1.0. It requires a 768K Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296761">
+ <rom name="jam session iigs - disk 1.woz" size="1296761" crc="b145977d" sha1="5d5e075af05dcb8eed20453e42b6654835aece3e"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296249">
+ <rom name="jam session iigs - disk 2.woz" size="1296249" crc="58e8e887" sha1="e2c8115252a4729ae1dcd8e47a6ca9efc1857384"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="muswrv23">
+ <description>Pyware Music Writer (Version 2.03)</description>
+ <year>1990</year>
+ <publisher>Pyware</publisher>
+ <info name="release" value="2021-06-14"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM 01 or later. -->
+ <!--"Pyware Music Writer" is a 1990 audio program developed by Pygraphics and distributed by Pyware. This is version 2.03. It requires a 768K Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Boot disk 5.0.4"/>
+ <dataarea name="flop" size="1296179">
+ <rom name="pyware music writer iigs - disk 1 - boot disk 5.0.4.woz" size="1296179" crc="cdb27c84" sha1="de3d1476fe9dfb7c3761f74c51dc38e78537cab5"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Program disk"/>
+ <dataarea name="flop" size="1345341">
+ <rom name="pyware music writer iigs - disk 2 - program disk.woz" size="1345341" crc="ee9edef7" sha1="fa177e0d55f757140bf1fc96614225b995924d67"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mtrksjr">
+ <description>Master Tracks Jr. (Version 1.03)</description>
+ <year>1988</year>
+ <publisher>Passport Designs</publisher>
+ <info name="release" value="2021-06-14"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs ROM 01 or later. -->
+ <!--"Master Tracks Jr." is a 1988 audio program developed by Dave Kusek, Don Williams, and Dave Howell, and distributed by Passport Designs. This is version 1.03. It requires a 768K Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1329990">
+ <rom name="master tracks jr. iigs.woz" size="1329990" crc="763ca9f0" sha1="2daa4d51640810c823b852720d89a5aeda615522"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="salvatns">
+ <description>Salvation Supreme (Version 2.0)</description>
+ <year>1993</year>
+ <publisher>Vitesse Software</publisher>
+ <info name="release" value="2021-06-17"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"Salvation Supreme" is a 1993 set of disk utilities developed by Christopher Warner, Robert Morgan, Joe Jaworski, and Jonah Stich, and distributed by Vitesse Software. This is version 2.0. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296208">
+ <rom name="salvation supreme iigs - disk 1.woz" size="1296208" crc="d33c159f" sha1="a20776f1b58647ec57526b72ebe02f22567a383d"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296208">
+ <rom name="salvation supreme iigs - disk 2.woz" size="1296208" crc="75578373" sha1="aeaa51b3b44f9f0e20e86d0581d9de7fd9f8753d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ntgs">
+ <description>NoiseTracker (Version 1.0)</description>
+ <year>1992</year>
+ <publisher>FTA</publisher>
+ <info name="release" value="2021-06-14"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs ROM 01 or later. -->
+ <!--"NoiseTracker" is a 1992 audio program developed by Olivier Goguel, Olivier Bailly-Maitre, Pascal Watel, Lionel Picanelot, and Michael Guitton, and distributed by FTA. This is version 1.00. It requires a 1MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1345387">
+ <rom name="noisetracker iigs.woz" size="1345387" crc="b3ffe621" sha1="cd086b0770b4a29e46d174923dec08880c3972f7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hypst31c">
+ <description>HyperStudio (Version 3.1c)</description>
+ <year>1989</year>
+ <publisher>Roger Wagner Publishing</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1.5MB Apple IIgs ROM 01 or later. -->
+ <!--"HyperStudio" is a 1989 multimedia program developed by Michael O'Keefe, Dave Klimas, Eric Mueller, Roy Bannon, Ken Kashmarek, and Garrick Toubassi, and distributed by Roger Wagner Publishing. This is version 3.1c. It requires a 1.5MB Apple IIgs ROM 01 or later.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - System disk"/>
+ <dataarea name="flop" size="1296332">
+ <rom name="hyperstudio iigs - disk 1 - hs.system.woz" size="1296332" crc="105cd440" sha1="6eb1490032644870e3d7b2198307f92b9f4c9726"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Hyperstudio disk"/>
+ <dataarea name="flop" size="1296334">
+ <rom name="hyperstudio iigs - disk 2 - hyperstudio.woz" size="1296334" crc="dddc1718" sha1="c79d9ae79e9b3b05d404b6fcfc860c2032610749"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3 - Combo disk"/>
+ <dataarea name="flop" size="1296331">
+ <rom name="hyperstudio iigs - disk 3 - combo.hs.woz" size="1296331" crc="72d2c492" sha1="cb36c4183aea90fc4e31136ea3b23c78e628f5f5"/>
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4 - Art disk"/>
+ <dataarea name="flop" size="1296329">
+ <rom name="hyperstudio iigs - disk 4 - hs.art.woz" size="1296329" crc="a58110b6" sha1="7574471d6720393fbbdc59a177f6d6540b7fc659"/>
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 5 - Sounds disk"/>
+ <dataarea name="flop" size="1296332">
+ <rom name="hyperstudio iigs - disk 5 - hs.sounds.woz" size="1296332" crc="59075668" sha1="42c47278b34b37054980255a136447e603bc6a62"/>
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 6 - Samples 1 disk"/>
+ <dataarea name="flop" size="1296332">
+ <rom name="hyperstudio iigs - disk 6 - samples.1.woz" size="1296332" crc="9b75ac57" sha1="60ca027728e1c4252cc1ea1d3b62f7c2260ffc46"/>
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 7 - Samples 2 disk"/>
+ <dataarea name="flop" size="1296332">
+ <rom name="hyperstudio iigs - disk 7 - samples.2.woz" size="1296332" crc="4ec61e88" sha1="8aeb610008ba430aa78cf59f2565b14f4d666e11"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wcelite">
+ <description>Writer's Choice Elite</description>
+ <year>1987</year>
+ <publisher>Activision</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Writer's Choice Elite" is a 1987 productivity program developed by Richard Danais, Nancy Philippine, Bernard Gallet, and Luc Barthelet, and distributed by Activision. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296190">
+ <rom name="writer's choice elite iigs.woz" size="1296190" crc="79eb00fe" sha1="0f38257b5012c5b07546e1484213b4246c1e434a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wordpfct">
+ <description>WordPerfect (Version 2.1e)</description>
+ <year>1987</year>
+ <publisher>WordPerfect Corporation</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"WordPerfect" is a 1987 productivity program developed by Dale T. Taylor, Daniel P. Burton, Barry Watts, Todd J. Wood, Scott B. Mitchell, Brent D. Hauvel, David Woodbury, Douglas L. Davies, and Kyle W. Erickson, and distributed by WordPerfect Corporation. This is version 2.1e. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 - Program disk"/>
+ <dataarea name="flop" size="1296311">
+ <rom name="wordperfect iigs - disk 1 - program.woz" size="1296311" crc="2650d9d0" sha1="a6e08cd2ac88548ee788c618f033e4ac719173bd"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 - Word lists disk"/>
+ <dataarea name="flop" size="1296311">
+ <rom name="wordperfect iigs - disk 2 - word lists.woz" size="1296311" crc="9b42af92" sha1="28fb7ef3146168e1870ed4539ed4e58ab45d0559"/>
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3 - Utilities disk"/>
+ <dataarea name="flop" size="1296311">
+ <rom name="wordperfect iigs - disk 3 - utilities.woz" size="1296311" crc="47dc3811" sha1="b613067de9e13f84042f5a736fe020a24da61a90"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wndanimk">
+ <description>The Wonders of the Animal Kingdom</description>
+ <year>1989</year>
+ <publisher>Unicorn Software</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"The Wonders of the Animal Kingdom" is a 1989 educational program developed by Stan Brewster, Joseph Hewitt, and June Stark, and distributed by Unicorn Software. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296707">
+ <rom name="the wonders of the animal kingdom iigs - disk 1.woz" size="1296707" crc="db85592f" sha1="c613731a2e880d4b99cef0acb42eaace1039ba51"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296195">
+ <rom name="the wonders of the animal kingdom iigs - disk 2.woz" size="1296195" crc="fbf4f128" sha1="383b93a32b223399e77724e08631d4c256eb4cc8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wordmstr">
+ <description>The Word Master</description>
+ <year>1989</year>
+ <publisher>Unicorn Software</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 1MB Apple IIgs. -->
+ <!--"The Word Master" is a 1989 educational program developed by William Demas and Joseph Hewitt, and distributed by Unicorn Software. It requires a 1MB Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1296684">
+ <rom name="the word master iigs.woz" size="1296684" crc="a3d0b0ff" sha1="b78e70ec3d35dea4bf06819c0940fa4e2c6736e1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="readrhym">
+ <description>Read and Rhyme</description>
+ <year>1988</year>
+ <publisher>Unicorn Software</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Read and Rhyme" is a 1988 educational program developed by William Demas and distributed by Unicorn Software. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296669">
+ <rom name="read and rhyme iigs - disk 1.woz" size="1296669" crc="2011af62" sha1="e399fff6bd60b964ce68cb3d36ca33a77f1483f6"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296157">
+ <rom name="read and rhyme iigs - disk 2.woz" size="1296157" crc="3e060399" sha1="f0ed2208dc2447734e22acb1c5d943cbe55ac9c4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="aesopfbl">
+ <description>Aesop's Fables</description>
+ <year>1988</year>
+ <publisher>Unicorn Software</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 768K Apple IIgs. -->
+ <!--"Aesop's Fables" is a 1988 educational program developed by William Demas, Joseph Hewitt IV, and June Stark, and distributed by Unicorn Software. It requires a 768K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296699">
+ <rom name="aesop's fables iigs - disk 1.woz" size="1296699" crc="7534b2f6" sha1="b20944b409de700f1df32e9faf8c9e4e162f7a9c"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296187">
+ <rom name="aesop's fables iigs - disk 2.woz" size="1296187" crc="b43ff258" sha1="925944a9ac634ed2b6a009a0d6e0015f8a896d1f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="awagrizz">
+ <description>Audubon Wildlife Adventures: Grizzly Bears</description>
+ <year>1988</year>
+ <publisher>Advanced Ideas</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Audubon Wildlife Adventures: Grizzly Bears" is a 1988 educational program developed by Deborah Kovacs, Pat Relf, Drew Ruscil, Dennis Sullivan, Doreen Curtin, Andy Henriquez, Christopher Palmer, Gerri Brioso, Cynthia Vansant, Richard Frietas, Paul Frietas, Roger DiSilvestro, Richard Chevat, Sandy Damashek, Susan Greer, and Jeffrey Siegel, and distributed by Advanced Ideas. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296396">
+ <rom name="audubon wildlife adventures- grizzly bears iigs - disk 1.woz" size="1296396" crc="c2590677" sha1="0cb36870f69aadb3c8c895d19214e327b16583b0"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296396">
+ <rom name="audubon wildlife adventures- grizzly bears iigs - disk 2.woz" size="1296396" crc="79ae82cc" sha1="e2feb4106181279f061a05bbdbe3add69c65a2a9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="awawhale">
+ <description>Audubon Wildlife Adventures: Whales</description>
+ <year>1989</year>
+ <publisher>Advanced Ideas</publisher>
+ <info name="release" value="2021-06-15"/>
+ <sharedfeat name="compatibility" value="A2GS"/>
+ <!-- It requires a 512K Apple IIgs. -->
+ <!--"Audubon Wildlife Adventures: Whales" is a 1989 educational program developed by Deborah Kovacs, Pat Relf, Drew Ruscil, Dennis Sullivan, Doreen Curtin, Donna Curtin, Jennifer Crouser, Candace Maher, Carol Felice, Roger DiSilvestro, Susan Greer, Lee Berman, and Christopher Palmer, and distributed by Advanced Ideas. It requires a 512K Apple IIgs.-->
+
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1"/>
+ <dataarea name="flop" size="1296364">
+ <rom name="audubon wildlife adventures- whales iigs - disk 1.woz" size="1296364" crc="e5cd5217" sha1="161168122ad2c805edf856f0ca97d79f89ec2df9"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2"/>
+ <dataarea name="flop" size="1296364">
+ <rom name="audubon wildlife adventures- whales iigs - disk 2.woz" size="1296364" crc="4b787b04" sha1="9b13466551b1c895853d4ccefb6725a34648a79b"/>
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/aquarius_cart.xml b/hash/aquarius_cart.xml
index b3b5d1b26b2..2b107b43a5c 100644
--- a/hash/aquarius_cart.xml
+++ b/hash/aquarius_cart.xml
@@ -347,6 +347,18 @@ X-6203 : Chess
<!--Hardware -->
+ <software name="c1541os" supported="no">
+ <description>C1541 DOS V3.0</description>
+ <year>1988</year>
+ <publisher>Ron Koenig</publisher>
+ <part name="cart" interface="aquarius_cart">
+ <!--<feature name="slot" value="c1541" />-->
+ <dataarea name="rom" size="0x8000">
+ <rom name="1541os.bin" size="0x4000" crc="6cd611e8" sha1="b2c3eabaadf21b463653f0e2bcf7b70c4a13fc39"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="modem" supported="no">
<description>Modem Terminal Software</description>
<year>1983</year>
diff --git a/hash/cgenie_cass.xml b/hash/cgenie_cass.xml
index c2e8bbeb5a2..9d6fab633b5 100644
--- a/hash/cgenie_cass.xml
+++ b/hash/cgenie_cass.xml
@@ -1,37 +1,44 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
<!--
license:CC0
TCG is Trommeschläger Computer GmbH, who renamed themselves mid 1983 to TCS.
They were the German distributor of the Colour Genie EG2000 computers.
-Known missing software titles:
+Known missing software titles (incomplete):
+Blitz, MCE, 1983
Break Out
Colour-Monitor I
Colour-Skat
Colour-Text
-Composer, TCS 1983 (Carsten Schmidt)
+Composer, TCS, 1983 (Carsten Schmidt)
Conquer
-Doppelwurm, TCS 1983
-ExNimroid, TCS 1983
-Galactic Attack, Klaus Weber
-Mau-Mau, TCS 1982 (Carsten Schmidt, Kalle Braun)
-Mampf (Mampfman?), TCS 1983
+Double Agent, Algray Software, 1983
+Doppelwurm, TCS, 1983
+Draughts (A. G. Kneeus)
+Droids, Arcade Games, 1984 (R. Bartlett)
+ExNimroid, TCS, 1983
+Exterminator Part 1: The Birds, Algray Software, 1983
+Fortress of Evil, Algray Software, 1983
+Galactic Attack (Klaus Weber)
+Mau-Mau, TCS, 1982 (Carsten Schmidt, Kalle Braun)
+Mampf (Mampfman?), TCS, 1983
Mathematik-Lernprogramm
-Mausi, TCS 1983
+Mausi, TCS, 1983
Memory
-Opamp (Operationsverstärker Applikationen), Uwe Gerber
+Opamp (Operationsverstärker Applikationen) (Uwe Gerber)
Optik (Grundeigenschaften des Lichts)
-Orgel, TCS 1982
-Panik, TCS 1982
-Panzerkampf, TCS 1983
-Plotter, TCS 1983
-Punktejagd
-Shaper
+Panzerkampf, TCS, 1983
Sound-Editor
+Space Figher, Molimerx, 1982
Screen-Printer (standalone)
+Sucker!, Arcade Games
+
+TODO: There are some hacked/modified images. Remove when the best version
+is confirmed.
-->
@@ -51,19 +58,6 @@ Screen-Printer (standalone)
</part>
</software>
- <software name="baeng">
- <description>BängBäng - 2 player gun fight</description>
- <year>1983</year>
- <publisher>TCS</publisher>
- <info name="author" value="Jürgen Buchmüller" />
- <info name="usage" value="Type SYSTEM and load with BAENG, enter / to start (req. 32k memory and joysticks)" />
- <part name="cass1" interface="cgenie_cass">
- <dataarea name="cass" size="8943">
- <rom name="baeng.cas" size="8943" crc="0e1badf1" sha1="0a6dd2a49555ea0e0049eb02f19f60c9de382ab8" />
- </dataarea>
- </part>
- </software>
-
<software name="basicode">
<description>Basicode</description>
<year>1983</year>
@@ -127,6 +121,20 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- SN Error in 810 -->
+ <software name="berlineru" supported="partial">
+ <description>Die Berliner Uhr</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Wilhelm Toelke" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="6487">
+ <rom name="die_berliner_uhr.cas" size="6487" crc="58d28104" sha1="ff3dcd0caf0cfffc894a2f9d699c4505f944c6f3" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="casloader">
<description>Genie I II / TRS 80 Cassettenlader</description>
<year>1984</year>
@@ -140,6 +148,20 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Distributed as part of the new subscriber tape of NCGU -->
+ <software name="charedit">
+ <description>Character Generator/Editor</description>
+ <year>198?</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Tony Parkin" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="1453">
+ <rom name="character_generator_editor.cas" size="1453" crc="bd332d6a" sha1="100d2420e57e9460b087bba31dbb38ea354fd74b" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="charset">
<description>Charset</description>
<year>198?</year>
@@ -153,11 +175,26 @@ Screen-Printer (standalone)
</part>
</software>
+ <!--
+ Load or type an Z80 assembler program as BASIC lines. Example:
+ 10 ORG 4800H
+ 20 LD HL,4400H
+ 30 LD DE,4401H
+ 40 LD BC,3FFH
+ 50 LD (HL),42
+ 60 LDIR
+ 60 RET
+ 70 END 4800H
+ Note there are two blanks after a line number. If you want to define a label,
+ use just one blank and write e.g. '40 LABEL: LD HL,1234H'.
+ Finally you can use NAME /OA to output to cassette,
+ /NS to not create the symbol table, /TM to assemble to memory.
+ -->
<software name="colasm">
<description>Colour-Assembler</description>
<year>1983</year>
<publisher>TCS</publisher>
- <info name="usage" value="Type SYSTEM and load with COLASM, enter / to start.&#10;Load or type an Z80 assembler program as BASIC lines. Example:&#10;10 ORG 4800H&#10;20 LD HL,4400H&#10;30 LD DE,4401H&#10;40 LD BC,3FFH&#10;50 LD (HL),42&#10;60 LDIR&#10;60 RET&#10;70 END 4800H&#10;Note there are two blanks after a line number. If you want to define a label, use just one blank and write e.g. '40 LABEL: LD HL,1234H'.&#10;Finally you can use NAME /OA to output to cassette, /NS to not create the symbol table, /TM to assemble to memory." />
+ <info name="usage" value="Type SYSTEM and load with COLASM, enter / to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="6611">
<rom name="colasm.cas" size="6611" crc="06eecba7" sha1="1ed872352cac33b591af3923c1252a63108e7005" />
@@ -341,7 +378,7 @@ Screen-Printer (standalone)
</part>
</software>
- <software name="grafiked">
+ <software name="grafiked" supported="no">
<description>Grafik-Editor</description>
<year>1983</year>
<publisher>TCS</publisher>
@@ -355,6 +392,33 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Real title unknown -->
+ <software name="machinem">
+ <description>Machine Monitor (?)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3700">
+ <rom name="machine_monitor.cas" size="3700" crc="a1ad2580" sha1="855110e0ed1afad663e4c42d2faf057d15a7bf79" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Distributed as part of the new subscriber tape of NCGU -->
+ <software name="mctapec">
+ <description>M/C Tape Copier</description>
+ <year>1983</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Type SYSTEM and load with TCOPY" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="811">
+ <rom name="mc_tape_copier.cas" size="811" crc="79ebc27b" sha1="3d0de95e403723acb5af343b7e93fb1a1446dc31" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="natomors">
<description>Nato Morsing Standard Code</description>
<year>1983</year>
@@ -394,6 +458,32 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="orgel">
+ <description>Orgel</description>
+ <year>1982</year>
+ <publisher>TCS</publisher>
+ <info name="usage" value="Type SYSTEM and load with ORGEL, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="14945">
+ <rom name="orgel.cas" size="14945" crc="96720b1f" sha1="0814fb5a382316b4c6c941e433f45f24e4d81105" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- SN Error in 540 -->
+ <software name="plotter25" supported="no">
+ <description>Plotter 2.5</description>
+ <year>1983</year>
+ <publisher>TCS</publisher>
+ <info name="author" value="Klaus Weber" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="7919">
+ <rom name="plotter_25.cas" size="7919" crc="5374ce34" sha1="3dd154e672b00040b1f214101f130c21d36c71e7" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="primzahl">
<description>Primzahlsuche</description>
<year>198?</year>
@@ -443,6 +533,20 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- TM Error in 60 -->
+ <software name="shaper" supported="no">
+ <description>Shaper: Shape Table Editor</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Udo Gerber" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8803">
+ <rom name="shaper_shape_table_editor.cas" size="8803" crc="600a0c4b" sha1="5588207df56dca6005515e22af7f2a7747568ff2" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="shifttra">
<description>Shift Transformation</description>
<year>198?</year>
@@ -493,6 +597,19 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="supergen">
+ <description>Super Gen v2</description>
+ <year>198?</year>
+ <publisher>Superb Software</publisher>
+ <info name="author" value="E. A. Jackson" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="6499">
+ <rom name="super_gen_v2.cas" size="6499" crc="9ab234ad" sha1="7f0412e5d9a102e268a26efc2cf0d89656355d68" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="supergra">
<description>Super-Grafik</description>
<year>1984</year>
@@ -557,6 +674,19 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="theword">
+ <description>The Word 1.2</description>
+ <year>1985</year>
+ <publisher>JD Tronics</publisher>
+ <info name="developer" value="ANCA Sof." />
+ <info name="usage" value="Type SYSTEM and load with WORD (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="16249">
+ <rom name="the_word_v12.cas" size="16249" crc="75ea49ab" sha1="1563ebf2e06a952142c4b34012a33acd7515dc68" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="tracemon">
<description>Tracemon</description>
<year>1983</year>
@@ -646,11 +776,26 @@ Screen-Printer (standalone)
<!-- Demos -->
+ <software name="colemu3w">
+ <description>Colour Emu 3.0 Welcome Tape</description>
+ <year>1997</year>
+ <publisher>&lt;homebrew&gt;</publisher>
+ <info name="author" value="Burkhard Lehner" />
+ <info name="author" value="Stephan Scholz" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="930">
+ <rom name="colemu3_welcome.cas" size="930" crc="2e331055" sha1="3c5a8a98b0c2701d7688535910c32d217fefe7b3" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="coldemo">
<description>Colour Genie Demonstration Kassette</description>
<year>198?</year>
<publisher>Carsten Schmidt</publisher>
- <info name="author" value="Carsten Schmidt, Kalle Braun" />
+ <info name="author" value="Carsten Schmidt" />
+ <info name="author" value="Kalle Braun" />
<info name="usage" value="Load with CLOAD, enter RUN to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="9038">
@@ -659,6 +804,18 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="colours">
+ <description>Colours</description>
+ <year>????</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="373">
+ <rom name="colours.cas" size="373" crc="a7138b4d" sha1="b50d8189c9e30fb3eeaccfc23553b6cd0a7673da" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="floh">
<description>Der Flohwalzer</description>
<year>198?</year>
@@ -671,6 +828,57 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Distributed as part of the new subscriber tape of NCGU -->
+ <software name="invaderd" supported="partial">
+ <description>Invader Demo</description>
+ <year>198?</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Dave Doohan" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="1098">
+ <rom name="invader_demo_part1.cas" size="1098" crc="19cb9e54" sha1="3ae52a539a1298263f003e245cde146d898d6b85" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="789">
+ <rom name="invader_demo_part2.cas" size="789" crc="3f6aeecd" sha1="76cc489ffcf64c84da4c536a2312691bb9dda6aa" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="cgenie_cass">
+ <dataarea name="cass" size="36">
+ <!-- Empty -->
+ <rom name="invader_demo_part3.cas" size="36" crc="fde266e7" sha1="1b91a094834b891bc132b4841dd9aca477f68124" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="linedraw">
+ <description>Line Drawing</description>
+ <year>????</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="198">
+ <rom name="line_drawing.cas" size="198" crc="79386ba8" sha1="9d73180e81180fde198ce4923c463203abc56382" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Distributed as part of the new subscriber tape of NCGU -->
+ <software name="magicc">
+ <description>Magic Carpet Demo</description>
+ <year>198?</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="540">
+ <rom name="magic_carpet_demo.cas" size="540" crc="ee4ce9ab" sha1="91298ce70f468b36acade91b1461284f83fc58a8" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="musik">
<description>Musik</description>
<year>1983</year>
@@ -696,8 +904,64 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Real title unknown -->
+ <software name="psgdemo">
+ <description>PSG-Demo</description>
+ <year>????</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="809">
+ <rom name="psgdemo.cas" size="554" crc="72862969" sha1="bf33cd2a242af2e1d3c7e51c3596ba31c5e95fef" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="topworld">
+ <description>Top of the World Music Demo</description>
+ <year>????</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="7890">
+ <rom name="top_of_the_world_music_demo.cas" size="7890" crc="58ee3ef8" sha1="41312cfe79b49f8551640c1f327917ea62dfdedd" />
+ </dataarea>
+ </part>
+ </software>
+
<!-- Games -->
+ <software name="3dhaunted">
+ <description>3D Haunted House</description>
+ <year>1984</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Adrian Fowler" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="23233">
+ <rom name="3d_haunted_house.cas" size="23233" crc="befb6c2e" sha1="1d69248ade349dfae7f5a6a7159f00820031a3df" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="a10bomb">
+ <description>A10 Bomber</description>
+ <year>1983</year>
+ <publisher>Ipswich Software Factory</publisher>
+ <info name="author" value="R. Hamilton" />
+ <info name="usage" value="Type SYSTEM and load with A" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="10896">
+ <rom name="a10_bomber_part1.cas" size="10896" crc="ccdf41b9" sha1="cca297ab82ba2797ab11445867d80b696098fbee" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="5082">
+ <rom name="a10_bomber_part2.cas" size="5082" crc="43401ddc" sha1="0f4af119a5be9341df993010dd0ad379efa84591" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="abenteue">
<description>Abenteuerland</description>
<year>198?</year>
@@ -723,6 +987,46 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Part of 'Games Tape 1' from Kwerty? -->
+ <software name="airaid">
+ <description>Airaid</description>
+ <year>198?</year>
+ <publisher>Kwerty Software</publisher>
+ <info name="author" value="Kevin Kirkland" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="1716">
+ <rom name="airaid.cas" size="1716" crc="d71d174d" sha1="663f33b5d5aff65977c21d5c19058a4cb9a62f78" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="alienatt">
+ <description>Alien Attack</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="9311">
+ <rom name="alien_attack.cas" size="9311" crc="28bccdc2" sha1="c55bb27b65dae5dea75e85c6bdf9a24c13fcd327" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Part of 'Games Tape 1' from Kwerty? -->
+ <software name="aliens">
+ <description>Aliens</description>
+ <year>198?</year>
+ <publisher>Kwerty Software</publisher>
+ <info name="author" value="Kevin Kirkland" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="1860">
+ <rom name="aliens.cas" size="1860" crc="842183b4" sha1="43f52f4ec5e18a10a320f3f2eb94e9b6262c3866" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="andromed">
<description>Andromeda (32k)</description>
<year>1982</year>
@@ -749,10 +1053,12 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Same game as bakpak -->
<software name="astrnaut">
<description>Astronaut</description>
<year>1984</year>
- <publisher>N. A. Taylor</publisher>
+ <publisher>Arcade Games</publisher>
+ <info name="author" value="N. A. Taylor" />
<info name="usage" value="Type SYSTEM and load with ASTRO" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="9136">
@@ -761,6 +1067,63 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="backgamm">
+ <description>Backgammon</description>
+ <year>1983</year>
+ <publisher>JD Tronics</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="9178">
+ <rom name="backgammon.cas" size="9178" crc="b68e12c8" sha1="7bc2560cc346d92d6b50023134c7156aa0406224" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="baeng">
+ <description>BängBäng - 2 player gun fight</description>
+ <year>1983</year>
+ <publisher>TCS</publisher>
+ <info name="author" value="Jürgen Buchmüller" />
+ <info name="usage" value="Type SYSTEM and load with BAENG, enter / to start (req. 32k memory and joysticks)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8943">
+ <rom name="baeng_baeng.cas" size="8943" crc="0e1badf1" sha1="0a6dd2a49555ea0e0049eb02f19f60c9de382ab8" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bang">
+ <description>Bang Bang</description>
+ <year>1983</year>
+ <publisher>TCS / Gumboot Software</publisher>
+ <info name="author" value="Jürgen Buchmüller" />
+ <info name="usage" value="Type SYSTEM and load with BBBBBB, enter / to start (req. joysticks)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8843">
+ <rom name="bang_bang.cas" size="8843" crc="aebb750b" sha1="c9e208680590dd70d059c29803a08dd83d888526" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Same game as astrnaut -->
+ <software name="bakpak">
+ <description>Bak-Pak</description>
+ <year>1984</year>
+ <publisher>Arcade Games</publisher>
+ <info name="author" value="N. A. Tylor" />
+ <info name="usage" value="Type SYSTEM and load with BAKPAK" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="2250">
+ <rom name="bak_pak_part1.cas" size="2250" crc="0df488f6" sha1="e34d45f854cf0f2a73b6e8af4298b8cae78fbc2f" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="7763">
+ <rom name="bak_pak_part2.cas" size="7763" crc="2986f798" sha1="649409c747c857e250509b1505fd15e6430accc0" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="ballon">
<description>Ballon</description>
<year>198?</year>
@@ -773,6 +1136,19 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="blastaro">
+ <description>Blastaroids</description>
+ <year>1983</year>
+ <publisher>Algray Software</publisher>
+ <info name="author" value="Paul Barsby" />
+ <info name="usage" value="Type SYSTEM and load with BLAST" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="14732">
+ <rom name="blastaroids.cas" size="14732" crc="7940150b" sha1="2106d97de6affdad3b20077f73da89a36e959cc3" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="botschaf">
<description>Botschaft</description>
<year>1985</year>
@@ -810,7 +1186,7 @@ Screen-Printer (standalone)
<info name="usage" value="Load with CLOAD, enter RUN to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="3949">
- <rom name="bumm.cas" size="3949" crc="4ed535ac" sha1="5851c745328330db09613e2978939784e6796e48" />
+ <rom name="bumm_bumm.cas" size="3949" crc="4ed535ac" sha1="5851c745328330db09613e2978939784e6796e48" />
</dataarea>
</part>
</software>
@@ -823,7 +1199,7 @@ Screen-Printer (standalone)
<info name="usage" value="Type SYSTEM and load with CAVEMA, enter / to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="14943">
- <rom name="caveman.cas" size="14943" crc="6b0ed55c" sha1="caab54c624825d5e2ba13d69e81d383d00442687" />
+ <rom name="cave_man.cas" size="14943" crc="6b0ed55c" sha1="caab54c624825d5e2ba13d69e81d383d00442687" />
</dataarea>
</part>
</software>
@@ -835,7 +1211,20 @@ Screen-Printer (standalone)
<info name="usage" value="Type SYSTEM and load with CHESSM, enter / to start (req. 32k memory)" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="13860">
- <rom name="chessm.cas" size="13860" crc="666382ef" sha1="19fff13390ea5fd95cb437539d908daf6c2e7237" />
+ <rom name="chess_machine.cas" size="13860" crc="666382ef" sha1="19fff13390ea5fd95cb437539d908daf6c2e7237" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="chomper">
+ <description>Chomper</description>
+ <year>198?</year>
+ <publisher>Kansas Software</publisher>
+ <info name="author" value="Wal Mansell" />
+ <info name="usage" value="Type SYSTEM and load with CHOMP, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8664">
+ <rom name="chomper.cas" size="8664" crc="d07a57eb" sha1="38c04901e05daae9c45d75e78bc07c159e310533" />
</dataarea>
</part>
</software>
@@ -879,6 +1268,44 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="colchess">
+ <description>Colour Genie Chess</description>
+ <year>1984</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="usage" value="Type SYSTEM and load with CHESS, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="11595">
+ <rom name="colour_genie_chess.cas" size="11595" crc="83635309" sha1="113b4685533a0314b2fb2f397818b1e9c6d41267" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="colfrog">
+ <description>Colour Frog</description>
+ <year>1983</year>
+ <publisher>TCS</publisher>
+ <info name="author" value="Thomas Schmidt" />
+ <info name="usage" value="Type SYSTEM and load with FROGGE, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="9305">
+ <rom name="colourfrog.cas" size="9305" crc="ce33fcef" sha1="e79d20e8060b37a46887b7419e03720c9869739c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="colfroga" cloneof="colfrog">
+ <description>Colour Frog (no title screen)</description>
+ <year>1983</year>
+ <publisher>TCS</publisher>
+ <info name="author" value="Thomas Schmidt" />
+ <info name="usage" value="Type SYSTEM and load with FROG, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8261">
+ <rom name="colourfrog_notitle.cas" size="8261" crc="ee47e6d0" sha1="31172642811fac02c1fb099524dde0edb0b7cc5d" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="colkong">
<description>Colour Kong (32k)</description>
<year>1983</year>
@@ -918,6 +1345,32 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="colpont">
+ <description>Colour Genie Pontoon</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="E. A. Jackson" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8374">
+ <rom name="colour_genie_pontoon.cas" size="8374" crc="15f2092d" sha1="06e94447992a7cd37306688b867aa3b5ff13bc43" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="colqix">
+ <description>Colour Qix</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Veit Wagner" />
+ <info name="usage" value="Type SYSTEM and load with QIX" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8919">
+ <rom name="colour_qix.cas" size="8919" crc="e235fe24" sha1="de80c8af1fe60f5ed9b8e41e932ed827645dea65" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="colscha">
<description>Colour Schach</description>
<year>1983</year>
@@ -944,15 +1397,106 @@ Screen-Printer (standalone)
</part>
</software>
- <software name="cosmicat">
+ <software name="colsch16" cloneof="colsch">
+ <description>Colour Schach (TCS, 16k)</description>
+ <year>1983</year>
+ <publisher>TCS</publisher>
+ <info name="author" value="Kalle Braun" />
+ <info name="usage" value="Type SYSTEM and load with SCHACH, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="11329">
+ <rom name="colour_schach_tcs_16k.cas" size="11329" crc="dcbeec18" sha1="75e67fd3ca02f1974eef772aa62bf4eac71ec501" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cosmic">
<description>Cosmic Attack</description>
<year>198?</year>
<publisher>Kansas Software</publisher>
<info name="author" value="Wal Mansell" />
<info name="usage" value="Type SYSTEM and load with COSMIC, enter / to start" />
<part name="cass1" interface="cgenie_cass">
- <dataarea name="cass" size="9755">
- <rom name="cosmic_attack.cas" size="9755" crc="3266bd94" sha1="f92f79d630e32287b227e3c9f7c902f9c4d6ba64" />
+ <dataarea name="cass" size="9791">
+ <rom name="cosmic_attack.cas" size="9791" crc="90a2d75b" sha1="51cdc81d1a24aceb35d20b6d7a3af0f2a69e0cdd" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cquest1">
+ <description>Colour Quest 1: Find the Diamond of Balmarlon</description>
+ <year>1983</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Type SYSTEM and load with QQQQQQ" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="21439">
+ <rom name="colour_quest_1_diamond_of_balmarlon.cas" size="21439" crc="cc0e9b18" sha1="51b31feda5796d71ff5f17411ba714e0f5fc6d58" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cquest2">
+ <description>Colour Quest 2: The Vegan Incident</description>
+ <year>1983</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Type SYSTEM and load with QQQQQQ" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="21439">
+ <rom name="colour_quest_2_the_vegan_incident.cas" size="21439" crc="c7176083" sha1="25b7706ed049bce3a24dbad5acd84ef8626a62ea" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cquest3">
+ <description>Colour Quest 3: Enchanted Gardens</description>
+ <year>1983</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Type SYSTEM and load with QQQQQQ (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="23266">
+ <rom name="colour_quest_3_enchanted_gardens.cas" size="23266" crc="7d3d7d45" sha1="b832717605cb476f68e8b73512829723e9e8eb37" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cquest4">
+ <description>Colour Quest 4: Camelot Adventure</description>
+ <year>1983</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Type SYSTEM and load with QQQQQQ" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="15848">
+ <rom name="colour_quest_4_camelot_adventure.cas" size="15848" crc="7025017a" sha1="d70f3235ef9a8acaa9c36f841c1a1144ed33e331" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cquest4a">
+ <description>Colour Quest 4: Camelot Adventure (Marcos Software)</description>
+ <year>1983</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Type SYSTEM and load with QQQQQQ" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="15848">
+ <rom name="colour_quest_4_camelot_adventure_marcos.cas" size="15848" crc="e506e65b" sha1="37adfff2e338a46d8252646b6e7724d0c7a90e66" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cquest6">
+ <description>Colour Quest 6: Fishing Quest</description>
+ <year>1983</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Type SYSTEM and load with QQQQQQ" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="21442">
+ <rom name="colour_quest_6_fishing_quest.cas" size="21442" crc="6bb944d0" sha1="ac6faa6ea09f609828e2eb2ab2d15c7c193fb4fe" />
</dataarea>
</part>
</software>
@@ -1008,6 +1552,19 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="demond">
+ <description>Demon Derby</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="E. A. Jackson" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="7486">
+ <rom name="demon_derby.cas" size="7486" crc="2723467e" sha1="1bb48d35f5101ee3035cd2cffe320a7c9946af1f" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="deathsta">
<description>Deathstar</description>
<year>1983</year>
@@ -1034,28 +1591,40 @@ Screen-Printer (standalone)
</part>
</software>
- <software name="defender">
- <description>Defender</description>
+ <software name="defendag">
+ <description>Defender (Andreas Goldau)</description>
<year>198?</year>
<publisher>Andreas Goldau Softwareproduction</publisher>
<info name="author" value="Andreas Goldau" />
<info name="usage" value="Load with CLOAD, enter RUN to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="4515">
- <rom name="defender.cas" size="4515" crc="f4bfe618" sha1="feb736a6c7cbae2ce9859e0b8d3b8052f1c3f310" />
+ <rom name="defender_andreas_goldau.cas" size="4515" crc="f4bfe618" sha1="feb736a6c7cbae2ce9859e0b8d3b8052f1c3f310" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="defender">
+ <description>Defender</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Type SYSTEM and load with DFNDR" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4525">
+ <rom name="defender.cas" size="4525" crc="55d5419c" sha1="b10e277f3885d5c6bffa373dae59f089b4188b4f" />
</dataarea>
</part>
</software>
<software name="digboy">
- <description>DIG-BOY (TCS)</description>
+ <description>DIG-BOY</description>
<year>1983</year>
<publisher>TCS</publisher>
<info name="author" value="Dieter Kuhn" />
<info name="usage" value="Type SYSTEM and load with DIGBOY, enter / to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="14960">
- <rom name="digboy_tcs.cas" size="14960" crc="839706b5" sha1="58bac8f61a35a8d355e9db67d74cef22219099c2" />
+ <rom name="digboy.cas" size="14960" crc="839706b5" sha1="58bac8f61a35a8d355e9db67d74cef22219099c2" />
</dataarea>
</part>
</software>
@@ -1107,7 +1676,7 @@ Screen-Printer (standalone)
<software name="eatman">
<description>Eatman</description>
<year>1983</year>
- <publisher>Molimerx Ltd.</publisher>
+ <publisher>Computer Service W. Neumann / Molimerx Ltd</publisher>
<info name="author" value="Bernd Herd" />
<info name="usage" value="Type SYSTEM and load with EATMAN, enter / to start" />
<part name="cass1" interface="cgenie_cass">
@@ -1143,6 +1712,19 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="eliminatg">
+ <description>Eliminator (Gumboot)</description>
+ <year>1984</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Harald Bögeholz" />
+ <info name="usage" value="Type SYSTEM and load with ELIMIN (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="12758">
+ <rom name="eliminator_gumboot.cas" size="12758" crc="50b1dd34" sha1="582ee5609376389a717cf0dc583e0b81f23c0002" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="empire">
<description>Empire</description>
<year>198?</year>
@@ -1206,6 +1788,19 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="flybytes">
+ <description>Flying Bytes</description>
+ <year>1984</year>
+ <publisher>Arcade Games</publisher>
+ <info name="author" value="A. D. Hockney" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)"/>
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="24898">
+ <rom name="flying_bytes.cas" size="24898" crc="f515e0a3" sha1="62d768657473d588e779161c860ba31a3171f76c" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="fraggels">
<description>Im Reich der Fraggels</description>
<year>19??</year>
@@ -1220,15 +1815,57 @@ Screen-Printer (standalone)
</part>
</software>
- <software name="frog">
- <description>Colour Frog</description>
+ <!-- Side B of cassette -->
+ <software name="galattj" supported="no">
+ <description>Galactic Attack (Joystick)</description>
<year>1983</year>
- <publisher>TCS</publisher>
- <info name="author" value="Thomas Schmidt" />
- <info name="usage" value="Type SYSTEM and load with FROG, enter / to start" />
+ <publisher>Microbyte Software</publisher>
+ <info name="usage" value="Type SYSTEM and load with GALAX" />
<part name="cass1" interface="cgenie_cass">
- <dataarea name="cass" size="8261">
- <rom name="colourfrog_tcs.cas" size="8261" crc="ee47e6d0" sha1="31172642811fac02c1fb099524dde0edb0b7cc5d" />
+ <dataarea name="cass" size="2531">
+ <rom name="galactic_attack_joystick_part1.cas" size="2531" crc="cfeb5ae2" sha1="95fa317db189e6733e88597d6837b9cd520de947" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="6629">
+ <rom name="galactic_attack_joystick_part2.cas" size="6629" crc="23307149" sha1="e7bf5d73809475932e173b2d11c876898f8b26ff" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Side A of cassette -->
+ <software name="galattk">
+ <description>Galactic Attack (Keyboard)</description>
+ <year>1983</year>
+ <publisher>Microbyte Software</publisher>
+ <info name="usage" value="Type SYSTEM and load with GALAX" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="2531">
+ <rom name="galactic_attack_keyboard_part1.cas" size="2531" crc="cfeb5ae2" sha1="95fa317db189e6733e88597d6837b9cd520de947" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="7980">
+ <rom name="galactic_attack_keyboard_part2.cas" size="7980" crc="571cadd8" sha1="c0aaa5c6d0457c25cd0f79da91246cc04b6c8b7e" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Called Genipede in-game -->
+ <software name="genieped">
+ <description>Geniepede</description>
+ <year>1983</year>
+ <publisher>Ipswich Software Factory</publisher>
+ <info name="author" value="R. Hamilton" />
+ <info name="usage" value="Type SYSTEM and load with G" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3468">
+ <rom name="geniepede_part1.cas" size="3468" crc="6a0014d8" sha1="9f6c649b824e303d17cf26ed62310a8fcc9762c1" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="5963">
+ <rom name="geniepede_part2.cas" size="5963" crc="22634e4f" sha1="e283b8ab4918f0bb6b929f32f42194704bf8fd1f" />
</dataarea>
</part>
</software>
@@ -1247,15 +1884,80 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Part of 'Games Tape 1' from Kwerty? -->
+ <software name="gobbleg">
+ <description>Gobble Garden</description>
+ <year>198?</year>
+ <publisher>Kwerty Software</publisher>
+ <info name="author" value="Kevin Kirkland" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3642">
+ <rom name="gobble_garden.cas" size="3642" crc="275609c4" sha1="ba0a76cf44769a9c334f8a662dabcea7d376bc9d" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="gorilla">
<description>Gorilla</description>
<year>1983</year>
<publisher>Heinz Hübben Software Verlag</publisher>
<info name="author" value="Thomas M. Binzinger" />
+ <info name="usage" value="Type SYSTEM and load with GORILL" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="18182">
+ <rom name="gorilla.cas" size="18182" crc="dac2b981" sha1="589610cac34a48918396fb3dbf49b58c5e97f7e9" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gorilla32" cloneof="gorilla">
+ <description>Gorilla (32k)</description>
+ <year>1983</year>
+ <publisher>Heinz Hübben Software Verlag</publisher>
+ <info name="author" value="Thomas M. Binzinger" />
<info name="usage" value="Type SYSTEM and load with GORILL, enter / to start (req. 32k memory)" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="16873">
- <rom name="gorill.cas" size="16873" crc="b207dd02" sha1="00403df3b9b1a49eda23402c3d9ab2ecf5137005" />
+ <rom name="gorilla_32k.cas" size="16873" crc="b207dd02" sha1="00403df3b9b1a49eda23402c3d9ab2ecf5137005" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gotya">
+ <description>Gotya</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="G. Huggins" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3762">
+ <rom name="gotya.cas" size="3762" crc="897669f8" sha1="f160c805efbe072c3ac39225cb0dadfba94efd95" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Part of 'Games Tape 2' from Kwerty? -->
+ <software name="grabit">
+ <description>Grabit</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Type SYSTEM and load with GRABIT" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8603">
+ <rom name="grabit.cas" size="8603" crc="3e9c4548" sha1="3fd648cab1743d1576b68bb2b0ef59d9f38d4c25" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="grandpri">
+ <description>Grand Prix</description>
+ <year>1985</year>
+ <publisher>Arcade Games / Gumboot Software</publisher>
+ <info name="usage" value="Type SYSTEM and load with GGGGGG (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="35550">
+ <rom name="grand_prix.cas" size="35550" crc="49a37d3c" sha1="ae779186f1f64b40fc8015ed9cde2c71ab7a070a" />
</dataarea>
</part>
</software>
@@ -1293,23 +1995,36 @@ Screen-Printer (standalone)
<year>1983</year>
<publisher>TCS</publisher>
<info name="author" value="Jürgen Buchmüller" />
- <info name="usage" value="Type SYSTEM and load with HEKTIK, enter / to start (req. 32k memory)" />
+ <info name="usage" value="Type SYSTEM and load with HEKTIK, enter / to start" />
<part name="cass1" interface="cgenie_cass">
- <dataarea name="cass" size="14627">
- <rom name="hektik.cas" size="14627" crc="933a5a34" sha1="2dd597be32687bc305b7d4fd0e5f073b5f603898" />
+ <dataarea name="cass" size="14663">
+ <rom name="hektik.cas" size="14663" crc="ccc3e799" sha1="9dca67b2b1778394e4bac9294c0e149e329cb989" />
</dataarea>
</part>
</software>
- <software name="hektika" cloneof="hektik">
- <description>Hektik (alternate)</description>
+ <software name="hektik32" cloneof="hektik">
+ <description>Hektik (32k)</description>
<year>1983</year>
<publisher>TCS</publisher>
<info name="author" value="Jürgen Buchmüller" />
<info name="usage" value="Type SYSTEM and load with HEKTIK, enter / to start (req. 32k memory)" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="14683">
- <rom name="hektik_alt.cas" size="14683" crc="ee16c405" sha1="0f3f0a984258334d719c3cc46e1e642af5ddcf9a" />
+ <rom name="hektik_32k.cas" size="14683" crc="ee16c405" sha1="0f3f0a984258334d719c3cc46e1e642af5ddcf9a" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hektike">
+ <description>Hektik (English)</description>
+ <year>1984</year>
+ <publisher>Arcade Games</publisher>
+ <info name="author" value="Jürgen Buchmüller" />
+ <info name="usage" value="Type SYSTEM and load with HEKTIK" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="14974">
+ <rom name="hektik_english.cas" size="14974" crc="61af69f7" sha1="b38c31e19070b62613ca97015f4b75e9f00d93b9" />
</dataarea>
</part>
</software>
@@ -1327,6 +2042,18 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="herorun">
+ <description>Hero Run</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4597">
+ <rom name="hero_run.cas" size="4597" crc="34cb4c00" sha1="7bdc82b557b1ee77d49714b148c25f7081381629" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="horror">
<description>Horror Castle</description>
<year>198?</year>
@@ -1340,6 +2067,32 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="intboard">
+ <description>Intellegent Games Boards</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="E. A. Jackson" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="7756">
+ <rom name="intellegent_games_boards.cas" size="7507" crc="95296e94" sha1="897ec025524753d3156b62f68508fe557bb76f32" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="invaders">
+ <description>Invaders from Space</description>
+ <year>1983</year>
+ <publisher>Molimerx Ltd</publisher>
+ <info name="author" value="D. Briers" />
+ <info name="usage" value="Type SYSTEM and load with INVADE, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3873">
+ <rom name="invaders_from_space.cas" size="3873" crc="5ff53875" sha1="9c26737267874291fb6d0f30be74465914f3d005" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="invasion">
<description>Invasion aus dem Weltraum</description>
<year>1982</year>
@@ -1353,6 +2106,24 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="jackpot">
+ <description>Jackpot</description>
+ <year>1984</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Gordon P. Geddes" />
+ <info name="usage" value="Type SYSTEM and load with JCKPT (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="608">
+ <rom name="jackpot_part1.cas" size="608" crc="d7d2ffcc" sha1="4fc14f4a68eafbbdda15cba16ac74a92224e757f" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="11115">
+ <rom name="jackpot_part2.cas" size="11115" crc="a7e92981" sha1="3e2c61770b09ff643b74652ef62350e8e7cd6934" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="jetset" supported="no">
<description>Jet Set Billy (16k)</description>
<year>1984</year>
@@ -1385,6 +2156,20 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="jumbo">
+ <description>Jumbo</description>
+ <year>1984</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="John Taylor" />
+ <info name="author" value="Frank Avery" />
+ <info name="usage" value="Type SYSTEM and load with JUMBO" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="13327">
+ <rom name="jumbo.cas" size="13327" crc="bb5f6b32" sha1="9c449b437dd7e5ceee4389a27756bb086d9333e2" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="kaefer">
<description>Marienkäfer</description>
<year>1984</year>
@@ -1411,6 +2196,19 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="kong">
+ <description>Kong</description>
+ <year>1983</year>
+ <publisher>Algray Software</publisher>
+ <info name="author" value="Stuart Sampson" />
+ <info name="usage" value="Type SYSTEM and load with KONGDM, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="11458">
+ <rom name="kong.cas" size="11458" crc="f8a581c8" sha1="2dbe432c596fa8d73ec24cf7620ab1bc10934ff0" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="kniffel">
<description>Kniffel</description>
<year>1985</year>
@@ -1506,6 +2304,19 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="maddriv">
+ <description>Mad Driver</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Jan Hemming" />
+ <info name="usage" value="Type SYSTEM and load with MADDRI, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="2812">
+ <rom name="mad_driver.cas" size="2812" crc="445b2a7b" sha1="e795cf2f8e0ab4a5b538c0002b857af9012916f7" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="madtree">
<description>Madtree</description>
<year>1983</year>
@@ -1519,6 +2330,21 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Same "engine" as Colour Quest -->
+ <!-- This might also be Colour Quest 5 -->
+ <software name="madven2">
+ <description>Madventure 2: Shipwreck</description>
+ <year>1984</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Dave R M Doohan" />
+ <info name="usage" value="Type SYSTEM and load with MMMMMM" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="15678">
+ <rom name="madventure_2_shipwreck.cas" size="15678" crc="583bd6c4" sha1="6f2544d834afa623129cbdc5173a925a0a8f728f" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mampf2">
<description>Mampf Man II</description>
<year>1983</year>
@@ -1526,8 +2352,79 @@ Screen-Printer (standalone)
<info name="author" value="Klaus Weber" />
<info name="usage" value="Type SYSTEM and load with MAMPF2, enter / to start (req. 32k memory)" />
<part name="cass1" interface="cgenie_cass">
- <dataarea name="cass" size="17035">
- <rom name="mampfman2.cas" size="17035" crc="11e61c65" sha1="4a3b59f427f632b5e2d889330b6ddd0ffbccbf5b" />
+ <dataarea name="cass" size="17071">
+ <rom name="mampfman2.cas" size="17071" crc="7271468e" sha1="94263f254813b9a2368169e6b5a65ef9a70935fb" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mampf2a" cloneof="mampf2">
+ <description>Mampf Man II (alt)</description>
+ <year>1983</year>
+ <publisher>TCS</publisher>
+ <info name="author" value="Klaus Weber" />
+ <info name="usage" value="Type SYSTEM and load with MAMPF2, enter / to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="17091">
+ <rom name="mampfman2_alt.cas" size="17091" crc="f2be825b" sha1="ddae6342f05506d8c33f5148f04191988867d36a" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="martianr">
+ <description>Martian Rescue</description>
+ <year>1983</year>
+ <publisher>Ipswich Software Factory</publisher>
+ <info name="author" value="R. Hamilton" />
+ <info name="usage" value="Type SYSTEM and load with R" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3022">
+ <rom name="martian_rescue_part1.cas" size="3022" crc="8d5ffce6" sha1="aa9611c147d8c545023187a86976d0ceb1e305cc" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="8707">
+ <rom name="martian_rescue_part2.cas" size="8707" crc="02eef20e" sha1="f7e935fcf73630b364daa26c6fb870b3eb4e88ee" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Also called "Maurer" in game -->
+ <software name="mauer">
+ <description>Mauer</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Juergen Piscol" />
+ <info name="usage" value="Type SYSTEM and load with MAUER, enter / to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8219">
+ <rom name="mauer.cas" size="8219" crc="4cdd4b14" sha1="a24cf2d5198f510b059175ed9da41545ec77e2ed" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mazechas">
+ <description>Maze Chaser</description>
+ <year>198?</year>
+ <publisher>Superb Software</publisher>
+ <info name="author" value="E. A. Jackson" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3849">
+ <rom name="maze_chaser.cas" size="3849" crc="7e2dbe6b" sha1="78c7192a1b5dddf34a70835ad6a991dd2dfd36a8" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mazeman">
+ <description>Maze Man</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Jan Hemming" />
+ <info name="usage" value="Type SYSTEM and load with MAZEMA, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8219">
+ <rom name="maze_man.cas" size="3893" crc="8c2b443f" sha1="f838fe9c0eab8124e4c11439cd7bc0f252aca0a1" />
</dataarea>
</part>
</software>
@@ -1558,6 +2455,31 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="meteor32" cloneof="meteor">
+ <description>Meteor (32k)</description>
+ <year>1983</year>
+ <publisher>TCS</publisher>
+ <info name="author" value="Harald Bögeholz" />
+ <info name="usage" value="Type SYSTEM and load with METEOR, enter / to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8678">
+ <rom name="meteor_32k.cas" size="8678" crc="304b7dd5" sha1="66bb229467f7f613a34e2000c0a05e8bc6c9292f" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="milliped">
+ <description>Millipede</description>
+ <year>1984</year>
+ <publisher>Gonzalo</publisher>
+ <info name="usage" value="Type SYSTEM and load with MILLIP" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3643">
+ <rom name="millipede.cas" size="3643" crc="6cc25a76" sha1="db48df71f579359cd86cf9f51a249738b7a6a989" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="monroe" supported="no">
<description>Unknown (data?)</description>
<year>198?</year>
@@ -1596,6 +2518,58 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="mystad1">
+ <description>Mysterious Adventures No. 1: The Golden Baton</description>
+ <year>1982</year>
+ <publisher>Molimerx Ltd</publisher>
+ <info name="author" value="B. Howarth" />
+ <info name="usage" value="Type SYSTEM and load with BATON, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="14142">
+ <rom name="mysterious_adventures_1_the_golden_baton.cas" size="14142" crc="e92f427d" sha1="8adb3fd417b4f427fa790846427bb912c768115e" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mystad2">
+ <description>Mysterious Adventures No. 2: The Time Machine</description>
+ <year>1982</year>
+ <publisher>Molimerx Ltd</publisher>
+ <info name="author" value="B. Howarth" />
+ <info name="usage" value="Type SYSTEM and load with TIMACH, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="14144">
+ <rom name="mysterious_adventures_2_the_time_machine.cas" size="14144" crc="ee33066e" sha1="2ea2a8cc1ca2e32e54f1c5b03093489d9e19893c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mystad3">
+ <description>Mysterious Adventures No. 3: Arrow of Death (Pt. 1)</description>
+ <year>1982</year>
+ <publisher>Molimerx Ltd</publisher>
+ <info name="author" value="B. Howarth" />
+ <info name="usage" value="Type SYSTEM and load with ARROW1, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="14142">
+ <rom name="mysterious_adventures_3_arrow_of_death_pt_1.cas" size="14142" crc="5a26e79d" sha1="877dc5469a5ddf9f64999937a89beb19aec195fb" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mystad6">
+ <description>Mysterious Adventures No. 6: Circus</description>
+ <year>1982</year>
+ <publisher>Molimerx Ltd</publisher>
+ <info name="author" value="B. Howarth" />
+ <info name="usage" value="Type SYSTEM and load with CIRCUS, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="14142">
+ <rom name="mysterious_adventures_6_circus.cas" size="14142" crc="2dc62f1d" sha1="53aba7c053e988379a206e558224691efcad87a8" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mysttave">
<description>Mysterious Tavern</description>
<year>198?</year>
@@ -1609,6 +2583,33 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="numberup">
+ <description>Numbers Up Shoot Out</description>
+ <year>1984</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Tony Hockney" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4300">
+ <rom name="numbers_up_shoot_out.cas" size="4300" crc="4fbbdedf" sha1="cb5fcf2f25ebb049d9671f021ca617ac36b1058c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- NF Error in 790 -->
+ <software name="numberupa" supported="no">
+ <description>Numbers Up Shoot Out (Alt)</description>
+ <year>1984</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Tony Hockney" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4408">
+ <rom name="numbers_up_shoot_out_alt.cas" size="4408" crc="f46e2163" sha1="5e343536490549453eea58c84f7779f1c873982b" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="netzo">
<description>Netzo</description>
<year>1983</year>
@@ -1635,15 +2636,214 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="palacem">
+ <description>Palace of Ming</description>
+ <year>1984</year>
+ <publisher>Cooperated Software</publisher>
+ <info name="author" value="Marcus Schneider" />
+ <info name="usage" value="Type SYSTEM and load with PAL" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4723">
+ <rom name="palace_of_ming_part1.cas" size="4723" crc="c6c2ab2d" sha1="2aa7971670ba3edb511312642bf5e1b643c02de5" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="14675">
+ <rom name="palace_of_ming_part2.cas" size="14675" crc="e8a48700" sha1="4733fd624dfede24569c030b95f4ab253fb263a7" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="panik">
+ <description>Panik</description>
+ <year>1982</year>
+ <publisher>TCS</publisher>
+ <info name="author" value="Carsten Schmidt" />
+ <info name="usage" value="Type SYSTEM and load with PANIC, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="10687">
+ <rom name="panik.cas" size="10687" crc="aaede4b2" sha1="00a71dbdd2d5e5503edbe0601afe6470cc1a6941" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Distributed as part of the new subscriber tape of NCGU -->
+ <software name="plato">
+ <description>Plato</description>
+ <year>198?</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Marc J. Leduc" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4349">
+ <rom name="plato.cas" size="4349" crc="d190456d" sha1="9070a2bd778121e6eaf6ebd520bfd0d4357cf087" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- UL Error in 80 when hit by an enemy -->
+ <software name="pointcha" supported="partial">
+ <description>Point Chase</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="rol" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4598">
+ <rom name="point_chase.cas" size="4598" crc="bcd77040" sha1="78ddf40b7d07c6f7512cf161e6d0ba2ca1962290" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="polepos">
<description>Pole Position</description>
<year>1984</year>
- <publisher>Andreas Müller</publisher>
+ <publisher>&lt;unknown&gt;</publisher>
<info name="author" value="Andreas Müller" />
<info name="usage" value="Type SYSTEM and load with POLEPO, enter / to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="14362">
- <rom name="polepo.cas" size="14362" crc="cfd0d6ce" sha1="bfced1e2d8128d38b4657c330ff67037759de832" />
+ <rom name="pole_position.cas" size="14362" crc="cfd0d6ce" sha1="bfced1e2d8128d38b4657c330ff67037759de832" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="protheus">
+ <description>Protheus Schach</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Gerhard Wolf" />
+ <info name="usage" value="Type SYSTEM and load with PROTH (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="10900">
+ <rom name="protheus_schach.cas" size="10900" crc="afaf88b1" sha1="56e9eeb426aafa8673f5722d7cf39c08364a9bce" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="puckman">
+ <description>Puckman</description>
+ <year>1983</year>
+ <publisher>JD Tronics</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="5836">
+ <rom name="puckman_part1.cas" size="5836" crc="40d0ea9d" sha1="7c67510c2b6f4d8acf42d05af714176fa894776f" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="8786">
+ <rom name="puckman_part2.cas" size="8786" crc="ae609eb7" sha1="88382bb5a4d19b9b3c1a06a225de7fd1fbd117e9" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="punktej">
+ <description>Punktejagd</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Type SYSTEM and load with PUNKET, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="12723">
+ <rom name="punktejagd.cas" size="12723" crc="cf8d2338" sha1="6039fcf9ce92afef485285fa821ad64e53ddf48b" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="punter">
+ <description>Punter</description>
+ <year>1984</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="9571">
+ <rom name="punter.cas" size="9571" crc="621e8bee" sha1="16a55bd4152fdf3f49c00a014cd12a05ef91b8ec" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="qman">
+ <description>Q*Man</description>
+ <year>1984</year>
+ <publisher>Schmidtke Software / Arcade Games</publisher>
+ <info name="author" value="P. Thomas" />
+ <info name="usage" value="Type SYSTEM and load with Q*MAN" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="15679">
+ <rom name="q_man.cas" size="15679" crc="329eae74" sha1="f41765b35871341d2040c21713a51186318a452c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="quandry">
+ <description>Quandry</description>
+ <year>1984</year>
+ <publisher>Omega Software</publisher>
+ <info name="author" value="Derek Smith" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="1538">
+ <rom name="quandry.cas" size="1538" crc="50496f50" sha1="3a8171224d0d21658488bcecd2d1aac43219ce5e" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="quasimo">
+ <description>Quasimodo</description>
+ <year>1984</year>
+ <publisher>Kingsoft</publisher>
+ <info name="author" value="Matthew J. King" />
+ <info name="author" value="D. McCleery" />
+ <info name="usage" value="Type SYSTEM and load with QUASI" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="6119">
+ <rom name="quasimodo_part1.cas" size="6119" crc="c7602cb9" sha1="241b5e207423c7acd0d6cbe95fb891fd4c773284" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="11230">
+ <rom name="quasimodo_part2.cas" size="11230" crc="a4831e03" sha1="b0a3cfab075df61393bee9ad2588c9abd9a4fb0d" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- OD Error in 27 (16k) 750 (32k) -->
+ <!-- Supposed to be the 16k version of Punter? -->
+ <software name="racing" supported="no">
+ <description>Racing</description>
+ <year>1984</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="9133">
+ <rom name="racing.cas" size="9133" crc="ef390d94" sha1="45b69ff1221a369528a050be51cbf9d3d09435fc" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- only works with cg-basic-rom-v1-pal-en.rom -->
+ <software name="racingd">
+ <description>Racing Driver</description>
+ <year>1982</year>
+ <publisher>Molimerx Ltd</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="5840">
+ <rom name="racing_driver.cas" size="5840" crc="ff756596" sha1="5f5e866de2267b5073b78c4a4119cbe65332e411" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="roulette" supported="no">
+ <description>Roulette</description>
+ <year>1982</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Christian Klein" />
+ <info name="author" value="Beo Lutz" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8775">
+ <rom name="roulette.cas" size="8775" crc="6c25fee4" sha1="27d2f1dc2ed3e894d3517039464b869991cb1bfc" status="baddump" />
</dataarea>
</part>
</software>
@@ -1704,11 +2904,37 @@ Screen-Printer (standalone)
<year>1983</year>
<publisher>Algray Software</publisher>
<info name="author" value="Stuart Sampson" />
+ <info name="usage" value="Type SYSTEM and load with SKRMBL" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="21975">
+ <rom name="skramble.cas" size="11071" crc="c64db1ee" sha1="b86274ac2700556b3694fd11c6469a94f6bb83cb" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="skramblea" cloneof="skramble">
+ <description>Skramble (alt)</description>
+ <year>1983</year>
+ <publisher>Algray Software</publisher>
+ <info name="author" value="Stuart Sampson" />
<info name="usage" value="Type SYSTEM and load with SKRMBL, enter / to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="21975">
<!-- Seems to be twice on tape? -->
- <rom name="skramble.cas" size="21975" crc="bcab3ef0" sha1="743cea96915b0893f9d1e15dbbe62d23672535ab" />
+ <rom name="skramble_alt.cas" size="21975" crc="bcab3ef0" sha1="743cea96915b0893f9d1e15dbbe62d23672535ab" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="softband">
+ <description>Soft-Bandit</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Josef Tiefes" />
+ <info name="usage" value="Type SYSTEM and load with SOFTBA" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4361">
+ <rom name="soft-bandit.cas" size="4361" crc="450e59f1" sha1="ae8dbfd4df3d8620bade71eb06c4f046c9c184fa" />
</dataarea>
</part>
</software>
@@ -1739,15 +2965,79 @@ Screen-Printer (standalone)
</part>
</software>
- <!-- FC-Error in Line 5430 -->
- <software name="startrek" supported="no">
+ <software name="spacesha">
+ <description>Space Shares</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="7918">
+ <rom name="space_shares.cas" size="7918" crc="0a49a5a3" sha1="55f1e64cb3b13bcde3fb0ea65931f8e928407882" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spellpic">
+ <description>Spell A Picture</description>
+ <year>1983</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="13345">
+ <rom name="spell_a_picture.cas" size="13345" crc="eb00247e" sha1="9014e7bcea18dc4918e6a427f8083e50c836edd4" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="snakesn">
+ <description>Snake Snatch</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="E. A. Jackson" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="5658">
+ <rom name="snake_snatch.cas" size="5658" crc="63cc913e" sha1="ec2cdd23ada76e9ff95bac91b7aee9432596bc63" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Needs ROMs v2 -->
+ <software name="sstartrk" supported="no">
<description>Super Star Treck</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="16473">
- <rom name="startrek.cas" size="16473" crc="f643147f" sha1="c7eb591be00b14a0fed594535f68953e2896bd24" />
+ <rom name="super_star_treck.cas" size="16473" crc="f643147f" sha1="c7eb591be00b14a0fed594535f68953e2896bd24" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Also known as 'Genie Trek' -->
+ <software name="startrek">
+ <description>Star Trek</description>
+ <year>1984</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="Malcolm E. Fowler" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="19351">
+ <rom name="star_trek.cas" size="19351" crc="84bda7ca" sha1="e9579cdecd2a7cf19ac96d76facad50fa9f630c5" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stockmar">
+ <description>Stockmarket Simulation</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Anthony Fleet" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="8271">
+ <rom name="stockmarket_simulation.cas" size="8271" crc="12047cae" sha1="132333bbb36cbdd425033b34af82d3427ca65c91" />
</dataarea>
</part>
</software>
@@ -1765,14 +3055,109 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="swag">
+ <description>Swag!</description>
+ <year>1985</year>
+ <publisher>Arcade Games</publisher>
+ <info name="usage" value="Type SYSTEM and load with SWAG, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="14603">
+ <rom name="swag.cas" size="14603" crc="0e3752db" sha1="43fb0bdb0b7ca0ca63ea5bedb70c8383f7240966" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tarnsman" supported="no">
+ <description>Tarnsman of Gor</description>
+ <year>1984</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Marcus Schneider" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4677">
+ <rom name="tarnsman_of_gor_part1.cas" size="4677" crc="d8ae6435" sha1="cd58ccd69c00a81a0b741ca5f84fbd639cc3fc48" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="17190">
+ <rom name="tarnsman_of_gor_part2.cas" size="17190" crc="6454f9a4" sha1="946847594f94ebcfda35f6ae27472f6ec0f42548" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="tausend">
<description>Tausendfuss</description>
<year>1983</year>
<publisher>TCS</publisher>
+ <info name="usage" value="Type SYSTEM and load with FUSS" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="3945">
+ <rom name="tausendfuss.cas" size="3945" crc="ab2ee9d1" sha1="a17c7549469b1f4232c3caacd2069a22729fce7c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tausenda" cloneof="tausend">
+ <description>Tausendfuss (no autostart)</description>
+ <year>1983</year>
+ <publisher>TCS</publisher>
<info name="usage" value="Type SYSTEM and load with FUSS, enter / to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="3858">
- <rom name="tausendfuss.cas" size="3858" crc="be2dc26b" sha1="a6048eac7691cca43838df62b7fd52f006f81aa6" />
+ <rom name="tausendfuss_noauto.cas" size="3858" crc="be2dc26b" sha1="a6048eac7691cca43838df62b7fd52f006f81aa6" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="terry">
+ <description>Terry's Travels</description>
+ <year>1983</year>
+ <publisher>Algray Software</publisher>
+ <info name="author" value="Paul Barsby" />
+ <info name="usage" value="Type SYSTEM and load with TERRY" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="15322">
+ <rom name="terrys_travels.cas" size="15322" crc="c2ae5a8e" sha1="d00455a4fbd402f972f870274e9f3d89f2f262d8" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ Expects some mystery device connected to the parallel expansion port:
+ Outputs on PORTA, expects PORTB bit 0 to be 0
+ Press BREAK after loading the final part and enter "1090 REM" to skip and run the game
+ This seems to be just a preview of a full game
+ -->
+ <software name="tohell" supported="partial">
+ <description>To Hell And Back</description>
+ <year>1986</year>
+ <publisher>Battle-Soft</publisher>
+ <info name="author" value="D. Taylor" />
+ <info name="author" value="Ian Nash" />
+ <info name="usage" value="Type SYSTEM and load with H, enter / to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="1500">
+ <rom name="to_hell_and_back_part1.cas" size="1500" crc="8e7bd060" sha1="2381025f066a78916ee28e63864ed3ccce721525" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="cgenie_cass">
+ <dataarea name="cass" size="758">
+ <rom name="to_hell_and_back_part2.cas" size="758" crc="3ca238a7" sha1="d77056e16c15800646a0e2b3ced08e5b5b1e8768" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="cgenie_cass">
+ <dataarea name="cass" size="4225">
+ <rom name="to_hell_and_back_part3.cas" size="4225" crc="6b2eab58" sha1="b51031832fa4d4018a1fdf881380af883b3f833e" />
+ </dataarea>
+ </part>
+ <part name="cass4" interface="cgenie_cass">
+ <dataarea name="cass" size="4225">
+ <rom name="to_hell_and_back_part4.cas" size="4225" crc="611d0b71" sha1="3d5839243e7dda98d7cae354d9b8166b6de099f9" />
+ </dataarea>
+ </part>
+ <part name="cass5" interface="cgenie_cass">
+ <dataarea name="cass" size="11334">
+ <rom name="to_hell_and_back_part5.cas" size="11334" crc="cd501fbd" sha1="471a0cd6914f7a244b67de8ae5bbac39aee3c029" />
</dataarea>
</part>
</software>
@@ -1818,6 +3203,18 @@ Screen-Printer (standalone)
</part>
</software>
+ <software name="tron">
+ <description>Tron</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Type SYSTEM and load with TRON" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="10717">
+ <rom name="tron.cas" size="10717" crc="9a1ec45e" sha1="5b343b5c9fc9ed5e69f0401e35ea100f13c7dd30" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="ubootjag">
<description>U-Boot-Jagd</description>
<year>198?</year>
@@ -1830,6 +3227,85 @@ Screen-Printer (standalone)
</part>
</software>
+ <!-- Real title unknown, not a full game -->
+ <software name="unkchase">
+ <description>Unknown Chase Game</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="844">
+ <rom name="unknown_chase_game.cas" size="844" crc="87e3020b" sha1="4ebd517f369a90f86008ddff9762dbf39afc4247" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Real title unknown -->
+ <software name="unksole">
+ <description>Unknown Game by S. J. Sole</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="S. J. Sole" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="1643">
+ <rom name="unknown_game_by_sj_sole.cas" size="1643" crc="1e78b799" sha1="b4cd230e6d01058b726586083d09c26771a38b5d" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viergewi">
+ <description>Vier Gewinnt</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="author" value="Kurt Baedker" />
+ <info name="usage" value="Type SYSTEM and load with 4GEW, enter / to start" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="10689">
+ <rom name="vier_gewinnt.cas" size="10689" crc="c15bcf55" sha1="cac52aec2887b3e079d97b6e692de718408bf0cf" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vortex">
+ <description>Vortex</description>
+ <year>1984</year>
+ <publisher>Heinz Hübben Software Verlag</publisher>
+ <info name="developer" value="Spectra-Games" />
+ <info name="usage" value="Type SYSTEM and load with VORTEX, enter / to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="15003">
+ <rom name="vortex.cas" size="15003" crc="086f07d2" sha1="bbe927f080d3b400b3ea81e00e077eb520834e06" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="whatrhym">
+ <description>What's My Rhyme</description>
+ <year>1984</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="M. E. Fowler" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="11855">
+ <rom name="whats_my_rhyme.cas" size="11855" crc="3364a9f2" sha1="3a05376d95f802ecc7fda88278e896576f811146" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wordy">
+ <description>Wordy</description>
+ <year>198?</year>
+ <publisher>Gumboot Software</publisher>
+ <info name="author" value="D. M. Sullivan" />
+ <info name="usage" value="Load with CLOAD, enter RUN to start (req. 32k memory)" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="11160">
+ <rom name="wordy.cas" size="11160" crc="1a287c02" sha1="a3c1e0d15f222a183622f46d62005a2fc27947dc" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="wurm">
<description>Wurm</description>
<year>1982</year>
@@ -1846,10 +3322,22 @@ Screen-Printer (standalone)
<description>Zalaga</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Type SYSTEM and load with ZALAGA" />
+ <part name="cass1" interface="cgenie_cass">
+ <dataarea name="cass" size="4334">
+ <rom name="zalaga.cas" size="4334" crc="836706e0" sha1="7ae6c09548fecc206dc1c60017ee80dcff537fe3" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zalagaa" cloneof="zalaga">
+ <description>Zalaga (no autostart)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
<info name="usage" value="Type SYSTEM and load with ZALAGA, enter / to start" />
<part name="cass1" interface="cgenie_cass">
<dataarea name="cass" size="4228">
- <rom name="zalaga.cas" size="4228" crc="d9d9aa24" sha1="62e53a50fdb1c1ac844e88d7571296588feda7bf" />
+ <rom name="zalaga_noauto.cas" size="4228" crc="d9d9aa24" sha1="62e53a50fdb1c1ac844e88d7571296588feda7bf" />
</dataarea>
</part>
</software>
diff --git a/hash/dragon_cart.xml b/hash/dragon_cart.xml
index 18cc4ebd697..3694ab48488 100644
--- a/hash/dragon_cart.xml
+++ b/hash/dragon_cart.xml
@@ -387,7 +387,7 @@ Compiled by K1W1 and Cowering (from GoodCoCo)
<software name="sprdose6">
<description>SuperDOS E6</description>
<year>1986</year>
- <publisher>PNP</publisher>
+ <publisher>PNP Communications</publisher>
<part name="cart" interface="coco_cart">
<feature name="slot" value="dragon_fdc" />
<dataarea name="rom" size="8192">
@@ -396,6 +396,18 @@ Compiled by K1W1 and Cowering (from GoodCoCo)
</part>
</software>
+ <software name="terminal" supported="no">
+ <description>Terminal Simulator</description>
+ <year>1984</year>
+ <publisher>Telepost Systems</publisher>
+ <part name="cart" interface="coco_cart">
+ <dataarea name="rom" size="16384">
+ <rom name="terminal simulator 1 24-5-84.rom" size="8192" crc="6a7e8b36" sha1="dbd1871c5ecb338defd3209b387d83d5222ed4a6" offset="0x0000" />
+ <rom name="terminal simulator 2 24-5-84.rom" size="8192" crc="ea472a6a" sha1="d6fab40b421a3054bbd32e9d2641ec17fc614cd6" offset="0x2000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="testcond">
<description>Test De Conducción</description>
<year>1982</year>
@@ -435,6 +447,30 @@ Compiled by K1W1 and Cowering (from GoodCoCo)
</part>
</software>
+ <software name="epromps" supported="no">
+ <description>Dragon EPROM Programmer</description>
+ <year>1984</year>
+ <publisher>Steve's Electronics</publisher>
+ <part name="cart" interface="coco_cart">
+ <!-- <feature name="slot" value="epromprg" /> -->
+ <dataarea name="rom" size="4096">
+ <rom name="ecm_ep_kit.rom" size="4096" crc="f5e1d7f0" sha1="cce757b0662abb8c110e1a072cbf9f54d097d010"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="prestel" supported="no">
+ <description>Prestel</description>
+ <year>1987</year>
+ <publisher>Peaksoft</publisher>
+ <part name="cart" interface="coco_cart">
+ <feature name="slot" value="serial" />
+ <dataarea name="rom" size="8192">
+ <rom name="comron_peaksoft.rom" size="8192" crc="9d18cf46" sha1="14124dfb4bd78d1907e80d779cd7f3bae30564c9"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="soaktest" supported="no">
<description>Dragon 32 Soak Test</description>
<year>1983</year>
diff --git a/hash/ggm.xml b/hash/ggm.xml
index c704ff3b92e..865955604d9 100644
--- a/hash/ggm.xml
+++ b/hash/ggm.xml
@@ -37,7 +37,22 @@ license:CC0
</part>
</software>
- <software name="sandy">
+ <software name="morphy">
+ <description>Morphy Edition - Master Chess</description>
+ <year>1981</year>
+ <publisher>Applied Concepts</publisher>
+ <part name="cart" interface="ggm">
+ <feature name="overlay" value="0x02" />
+ <dataarea name="rom" size="0x8000">
+ <rom name="7075-03" offset="0x4000" size="0x1000" crc="3787e728" sha1="c5408fefdd0fa213b535cbc1e530defd6d90fcfa" /> <!-- HN462732 -->
+ <rom offset="0x6000" size="0x1000" loadflag="reload" />
+ <rom name="7076-04" offset="0x5000" size="0x1000" crc="57867a31" sha1="06f415231b4fbf95a9b95664ef2c9c7d1342ef56" /> <!-- " -->
+ <rom offset="0x7000" size="0x1000" loadflag="reload" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sandy" cloneof="morphy">
<description>Sandy Edition - Master Chess</description>
<year>1981</year>
<publisher>Applied Concepts / Sandy Electronic</publisher>
diff --git a/hash/juicebox.xml b/hash/juicebox.xml
index dac6c95c6df..7b6c75da31a 100644
--- a/hash/juicebox.xml
+++ b/hash/juicebox.xml
@@ -5,68 +5,352 @@ license:CC0
-->
<softwarelist name="juicebox" description="Mattel Juice Box SmartMedia Flash ROM">
-<!-- known items (* = dumped)
- (many still missing from this list)
-
- H2679 - Ed, Edd n Eddy Episode #39
- H2682 - Juiceware Animated Assortment
-* H2683 - Codename: Kids Next Door vol.1
- H2684 - Ed, Edd n Eddy vol.1
-* H2685 - Yu-Gi-Oh! vol.1
- H2686 - Winx Club
- H2687 - The Grim Adventures of Billy and Mandy vol.1
- H2688 - Vans Triple Crown vol.1
- H2689 - Vans Triple Crown vol.2
- H2690 - Vans Pipeline Masters
- H2692 - Teenage Mutant Ninja Turtles vol.1
- H2694 - Trading Spaces vol.1
- H2697 - Megas XLR Vol. 1
- H2698 - WWE Rey Mysterio vol.1
- H2699 - Motocycle Mania 1 vol.1
- H2701 - Dexter's Laboratory vol.1
- H2702 - WWE Chris Benoit vol.1
- H2706 - MyScene Jammin in Jamaica vol.1
- H2707 - MyScene Masquerade Madness
- H2708 - WWE Eugene vol.1
- H2709 - Music Video Liz Phair Skye Bnip Stacie
-
- H6225 - Juice Box Music Video (Ashlee Simpson, The Cure, Vanessa Carlton, Fan_3)
- H6228 - Juice Box Music Video (Avril Lavine, The Calling, Clay Miken, Ruben Studdard)
- H6232 - Juice Box Music Video (Zoegirl, Jumps, Baha Men, Atomic Kitten)
- H6248 - Codename: Kids Next Door - Episode #19
- H6254 - Juice Box Music Video (Liz Flair, Stacie Orrico, Skye Sweetnam, Zoegirl) (full part # H6254-0971G1)
- H6259 - SonicX Episode 3: Missile Wrist Rampage
- H6260 - Teenage Mutant Ninja Turtles Episode 36
-
- H7416 - Streetball Classics Vol.1
-
- H8084 - Yu-Gi-Oh! Episode 175
- H8085 - Good Times with Carey Hart
- H8143 - Yu-Gi-Oh! Episode 176
+<!-- The .smc files in this are the raw dumps dumps, but with a 0x400 byte custom header (with the first 2 bytes being the flash ident code, and rest unused)
+ This appears to be a custom standard, enforced by smartmed.cpp -->
+
+<!--
+
+ Known Releases
+
+ (* = dumped and boots in MAME
+ B = confirmed bad dump
+ V = validated with 2nd cartridge)
+
+ The flash ROMs on these cartridges look to be deteriorating, each will likely need verifying against multiple cartridges to verify the integrity of
+ the data.
+
+ H2679 - Ed, Edd n Eddy Episode #39
+ H2682 - Juiceware Animated Assortment
+*V H2683 - Codename: Kids Next Door Volume 1
+ H2684 - Ed, Edd n Eddy Volume 1
+*V H2685 - Yu-Gi-Oh! Volume 1
+* H2686 - Winx Club Volume 1
+ H2687 - The Grim Adventures of Billy and Mandy Volume 1
+ H2688 - Vans Triple Crown Volume 1 (BMX)
+ H2689 - Vans Triple Crown Volume 2 (Skateboarding)
+* H2690 - Vans Pipeline Masters Volume 1
+* H2692 - Teenage Mutant Ninja Turtles Volume 1
+ H2694 - Trading Spaces Volume 1
+* H2697 - Megas XLR Volume 1
+ H2698 - WWE Rey Mysterio Volume 1
+ H2699 - Motocycle Mania 1 Volume 1
+ H2700 - Powerpuff Girls Volume 1
+ H2701 - Dexter's Laboratory Volume 1
+ H2702 - WWE Chris Benoit Volume 1
+ H2706 - MyScene Jammin in Jamaica Volume 1
+ H2707 - MyScene Masquerade Madness
+ H2708 - WWE Eugene Volume 1
+* H2709 - Juice Box Music Video (Liz Phair, Stacie Orrico, Skye Sweetnam)
+*B H6226 - Juice Box Music Video (Ashlee Simpson, The Cure, Vanessa Carlton, fan_3, Ashlee Simpson)
+* H6228 - Juice Box Music Video (Avril Lavine, The Calling, Clay Miken, Ruben Studdard)
+* H6230A- Juice Box Music Video (Baha Men, Jump5, Jump5, Beu Sisters, ZOEgirl)
+* H6232 - Juice Box Music Video (Zoegirl, Jump5, Jump5, Baha Men, Atomic Kitten)
+ H6233 - Kenny Chesney - 'Live Those Songs', 'No Shoes, No Shirt, No Problems', 'I Go Back' Sara Evans - 'Suds in the Bucket, Martina McBride - 'This One's For The Girls'
+ H6234 - Juice Box Music Video (Ashlee Simpson, Ashlee Simpson) (same 2 Ashlee Simpson songs as H6226, but without other tracks)
+ H6248 - Codename: Kids Next Door - Episode #19
+ H6254 - Juice Box Music Video (Liz Flair, Stacie Orrico, Skye Sweetnam, Zoegirl) (full part # H6254-0971G1) (include 'the making of' for Skye Sweetnam Tangled Up in Me)
+* H6258 - Winx Club Episode 103
+ H6259 - SonicX Episode 3: Missile Wrist Rampage
+* H6260 - Teenage Mutant Ninja Turtles Episode 36
+
+* H7416 - Streetball Classics Volume 1
+ H7417 - Streetball Classics Volume 2
+
+* H8084 - Yu-Gi-Oh! Episode 175
+ H8085 - Good Times with Carey Hart
+* H8143 - Yu-Gi-Oh! Episode 176
+
+ - Johnny Bravo Vol 1
+ - Brett Favre - The Field General
+ H269x - Courage - The Cowardly Dog Volume 1
+ - Dexter's Laboratory Episode 51
+
+ (many still missing from this list)
-->
- <software name="kidsnedo">
- <description>Codename: Kids Next Door</description>
+ <!--
+ contains:
+ The Shredder Strikes Part I
+ The Shredder Strikes Part II
+ -->
+ <!-- PVPlayer Build of Aug 07 2004 at 14:25:28 -->
+ <software name="tmnt1" supported="partial">
+ <description>Teenage Mustant Ninja Turtles Volume 1 (H2692)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H2692" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_tmnt_vol1_h2692_matrix11247_9875.smc" size="0x2100400" crc="dccdff36" sha1="57332cd1fc90cdb6433af79f1f27863e3f68cdf2" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ Operation: B.E.A.C.H / Operation: U.N.D.E.R.C.O.V.E.R
+ Operation: F.U.T.U.R.E
+ -->
+ <!-- PVPlayer Build of Aug 11 2004 at 15:14:03 -->
+ <software name="knd1" supported="partial">
+ <description>Codename: Kids Next Door Volume 1 (H2683)</description>
<year>2004</year>
<publisher>4Kids Entertainment</publisher>
<info name="serial" value="H2683" />
<part name="memc" interface="sm_memc">
- <dataarea name="rom" size="34604032">
- <rom name="kidsnedo.smc" size="34604032" crc="e917e1f2" sha1="42c56a8b9a2ae076956b98e8bd71e1dfd841d002" offset="0x00000" />
+ <dataarea name="rom" size="0x2100400">
+ <rom name="kidsnedo.smc" size="0x2100400" crc="e917e1f2" sha1="42c56a8b9a2ae076956b98e8bd71e1dfd841d002" />
</dataarea>
</part>
</software>
- <software name="yugioh">
- <description>Yu-Gi-Oh!</description>
+ <!--
+ contains:
+ Friends Till The End - Part III
+ Friends Till The End - Part IV
+ -->
+ <!-- PVPlayer Build of Aug 11 2004 at 15:14:03 -->
+ <software name="yugiv1" supported="partial">
+ <description>Yu-Gi-Oh! Volume 1 (H2685)</description>
<year>2004</year>
<publisher>4Kids Entertainment</publisher>
<info name="serial" value="H2685" />
<part name="memc" interface="sm_memc">
- <dataarea name="rom" size="34604032">
- <rom name="yugioh.smc" size="34604032" crc="0a97c7d6" sha1="1b2375c9ef1bbd5cae0c3f0ac20511a36523e86a" offset="0x00000"/>
+ <dataarea name="rom" size="0x2100400">
+ <rom name="yugioh.smc" size="0x2100400" crc="0a97c7d6" sha1="1b2375c9ef1bbd5cae0c3f0ac20511a36523e86a" />
+ </dataarea>
+ </part>
+ </software>
+
+
+
+ <!-- contains:
+ The Ultimate Ninja
+ Crash Dummies: Ruff Driving (bonus)
+ -->
+ <!-- PVPlayer Build of Aug 25 2004 at 19:30:38 -->
+ <software name="tmnte36" supported="partial">
+ <description>Teenage Mustant Ninja Turtles Episode 36 (H6260)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H6260" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_tmnt_ep36_h6260_matrix11247_9875.smc" size="0x2100400" crc="a494fe28" sha1="5c64f229979823276ca5da95e4c4c395b85242b9" offset="0x00000"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ Avril Lavigne - Don't Tell Me
+ The Calling - Our Lives
+ Avril Lavigne - My Happy Ending
+ Clay Aiken - The Way
+ Ruben Studdard - Superstar
+ -->
+ <!-- PVPlayer Build of Aug 25 2004 at 19:30:38 -->
+ <software name="jbm_6228" supported="partial">
+ <description>Juicebox Music Video - Avril Lavigne, The Calling, Avril Lavigne, Clay Aiken, Ruben Studdard (H6228)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H6228" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_musicvideo_h6228_matrix11247_9875.smc" size="0x2100400" crc="0bd04da3" sha1="8a05663e0d3c40ac963ca1b1a41339cfa5142694" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ Liz Phair - Extraordinary
+ Stacie Orrico - Stuck
+ Skye Sweetnam - Tangled Up In Me
+ -->
+ <!-- PVPlayer Build of Aug 25 2004 at 19:30:38 -->
+ <software name="jbm_2709" supported="partial">
+ <description>Juicebox Music Video - Liz Phair, Stacie Orrico, Skye Sweetnam (H2709)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H2709" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_musicvideo_h2709_matrix11252_9873.smc" size="0x1080400" crc="d9ff5ee4" sha1="fdcb32a7ff8534357521f340ec16b01ec887de5c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ ZOEgirl - You Get Me
+ Jump5 - All I Can Do
+ Jump5 - Spinnin' Around
+ Baha Men - Who Let The Dogs Out
+ Atomic Kitten - Eternal Flame
+ -->
+ <!-- PVPlayer Build of Sep 17 2004 at 16:30:38 -->
+ <software name="jbm_6232" supported="partial">
+ <description>Juicebox Music Video - ZOEgirl, Jump5, Jump5, Baha Men, Atomic Kitten (H6232)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H6232" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_musicvideo_h6232_matrix11247_9875.smc" size="0x2100400" crc="27b85bb6" sha1="673937106788dd6c4a3647454f4583e97eb2d1a9" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- PVPlayer Build of Sep 17 2004 at 16:30:38 -->
+ <software name="winxe103" supported="partial">
+ <description>Winx Club Episode 103 (H6258)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H6258" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_winxclub_ep103_h6258_matrix11252_9873.smc" size="0x1080400" crc="d7e370ba" sha1="b24a9e1b1a7c3a830976cc6c28451cec9eefa31d" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ Friends 'Til The End - Part I
+ -->
+ <!-- PVPlayer Build of Sep 17 2004 at 16:30:38 -->
+ <software name="yugie175" supported="partial">
+ <description>Yu-Gi-Oh! Episode 175 (H8084)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H8084" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_yugioh_ep175_h8084_matrix11252_9873.smc" size="0x1080400" crc="04b2c825" sha1="977e9c20384bdbc65c2b90ed32d09624e95a0e0a" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ Friends 'Til The End - Part II
+ -->
+ <!-- PVPlayer Build of Sep 17 2004 at 16:30:38 -->
+ <software name="yugie176" supported="partial">
+ <description>Yu-Gi-Oh! Episode 176 (H8143)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H8143" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_yugioh_ep176_h8143_matrix11252_9873.smc" size="0x1080400" crc="f1a0edd4" sha1="553e74100f9969117f0240f98e84515823cce108" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- PVPlayer Build of Aug 25 2004 at 19:30:38 -->
+ <software name="plmv1" supported="partial">
+ <description>Vans Pipeline Masters Volume 1 (H2690)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H2690" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_pipelinemasters_vol1_h2690_matrix11247_9875.smc" size="0x2100400" crc="e8cca1d4" sha1="5cd2b29bc28d20d9c9b455edb750fbbb530b8e5b" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sbcv1" supported="partial">
+ <description>Streetball Classics Volume 1 (H7416)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H7416" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_streetball-classics-vol1_h7416_matrix11247_9875.smc" size="0x2100400" crc="ada20763" sha1="b973e18d390a7d1a530e3737562722f96163d593" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ Test Drive
+ All I Wanted Was A Slushie
+ -->
+ <software name="megasv1" supported="partial">
+ <description>Megas XLR Volume 1 (H2697)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H2697" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_megas-xlr_vol1_h2697_matrix11247_9875.smc" size="0x2100400" crc="385b0402" sha1="fd761af3c8eaa522db0b4c224d37440d47c26c8a" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ It Feels Like Magic
+ More Than High School
+ -->
+ <!-- PVPlayer Build of Aug 11 2004 at 15:14:03 -->
+ <software name="winxv1" supported="partial">
+ <description>Winx Club Volume 1 (H2686)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H2686" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_winxclub_vol1_h2686_matrix11247_9875.smc" size="0x2100400" crc="0d8e6f6d" sha1="f45cd8cdbd7b0d28a2bd5a2503bae52190112db6" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ Baha Men - Move It Like This
+ Jump 5 - Do Ya
+ Jump 5 - Spinnin' Around
+ Beu Sisters - I Was Only (Seventeen)
+ ZOEgirl - Dismissed
+ -->
+ <!-- PVPlayer Build of Sep 17 2004 at 16:30:38 -->
+ <software name="jbm_6230a" supported="partial">
+ <description>Juicebox Music Video - Baha Men, Jump5, Jump5, Beu Sisters, ZOEgirl (H6230A)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H6230A" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <rom name="jb_musicvideo_h6230a_matrix11247_9875.smc" size="0x2100400" crc="d8ce26c4" sha1="02b3bdec5ba1002264663e79ecbe2444a92efdfc" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!--
+ contains:
+ Ashlee Simpson - Shadow
+ The Cure - The End Of The World
+ Vanessa Carlton - White Houses
+ fan_3 - Geek Love
+ Ashlee Simpson - Pieces of Me
+ -->
+ <!-- PVPlayer Build of Sep 17 2004 at 16:30:38 -->
+ <software name="jbm_6226" supported="partial">
+ <description>Juicebox Music Video - Ashlee Simpson, The Cure, Vanessa Carlton, fan_3, Ashlee Simpson (H6226)</description>
+ <year>2004</year>
+ <publisher>4Kids Entertainment</publisher>
+ <info name="serial" value="H6226" />
+ <part name="memc" interface="sm_memc">
+ <dataarea name="rom" size="0x2100400">
+ <!-- start of The Cure song has corrupt video, so might still be bad -->
+ <rom name="jb_musicvideo_h6226_matrix11247_9875.smc" size="0x2100400" crc="c53ed7ac" sha1="c91eaaf3bdfba2badf4498d419dbc0bca8c89bac" status="baddump" />
</dataarea>
</part>
</software>
+
</softwarelist>
diff --git a/hash/lk3000.xml b/hash/lk3000.xml
new file mode 100644
index 00000000000..ad06a522df1
--- /dev/null
+++ b/hash/lk3000.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+license:CC0
+-->
+
+<!--
+
+Lexicon / Nixdorf LK-3000 cartridges
+
+serial index:
+
+LK-3000: main unit
+LK-3800: adaptor
+
+LK-0280: Winter Olympics
+LK-0680: Summer Olympics
+LK-3050: English-Spanish
+LK-3060: English-French
+LK-3070: English-Italian
+LK-3080: English-German
+LK-3090: English-Swedish
+LK-3100: English-Polish
+LK-3110: English-Portuguese
+LK-3120: English-Russian
+LK-3130: English-Greek
+LK-3200: English-Spanish-French-German-Italian-Greek
+LK-3500: Electronic Notebook
+LK-3900: Calculator
+
+unreleased?:
+
+LK-3140: English-Arabic
+LK-3150: English-Hebrew
+LK-3160: English-Japanese
+LK-3170: English-Chinese
+
+-->
+
+<softwarelist name="lk3000" description="LK-3000 Cartridges">
+
+ <software name="calc">
+ <description>Calculator</description>
+ <year>1979</year>
+ <publisher>Lexicon</publisher>
+ <info name="serial" value="LK-3900" />
+ <part name="cart" interface="lk3000">
+ <dataarea name="rom" size="0x2800">
+ <rom name="sc80249p_lk3900m" offset="0x0000" size="0x0800" crc="192edfcf" sha1="527216b6e15b9ab5f83742f437a5a8d8eef14ce2" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="german" supported="no">
+ <description>English-German</description>
+ <year>1979</year>
+ <publisher>Lexicon</publisher>
+ <info name="serial" value="LK-3080" />
+ <part name="cart" interface="lk3000">
+ <dataarea name="rom" size="0x2800">
+ <rom name="sc80236p_lk3080m" offset="0x0000" size="0x0800" crc="69019491" sha1="d452d1c7b70310c1da9cea2e8b2b1369e1e4cc92" />
+ <rom name="lk_3080_r1" offset="0x0800" size="0x1000" crc="1712568d" sha1="24db112e0845fcf8451721a1f9a043aed4995d98" /> <!-- EA 8332 -->
+ <rom name="lk_3080_r2" offset="0x1800" size="0x1000" crc="669479d1" sha1="3bae1d6fc80781053c127908b8154e16bee933b9" /> <!-- EA 8332 -->
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="notebook">
+ <description>Electronic Notebook</description>
+ <year>1980</year>
+ <publisher>Lexicon</publisher>
+ <info name="serial" value="LK-3500" />
+ <part name="cart" interface="lk3000">
+ <feature name="ram" value="1" />
+ <dataarea name="rom" size="0x2800">
+ <rom name="sc80293p_lk3500m" offset="0x0000" size="0x0800" crc="ec8e7d7c" sha1="13e0b174647ecea8f0db5511b7b93df504e91aa9" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/mac_hdflop.xml b/hash/mac_hdflop.xml
index adbe8f239a0..a1748958c8d 100644
--- a/hash/mac_hdflop.xml
+++ b/hash/mac_hdflop.xml
@@ -2638,35 +2638,195 @@ license:CC0
</part>
</software>
- <!-- S/N: Z93350-001A -->
- <software name="clarisw20sv">
- <description>ClarisWorks 2.0 (Swedish)</description>
+ <software name="clarisor20v1">
+ <description>Claris Organizer 2.0v1</description>
+ <year>1996</year>
+ <publisher>Claris</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="1135cf50" sha1="2b1c7c5b2f934dda6f68e8d256f993f7becb5637" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="d87e6699" sha1="89d0ceb73aea2d8c64daff8b88089b27eaea06b4" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="449e882d" sha1="4094f3868451a097920e398454c6d00dff1fd84d" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clarisw20">
+ <description>ClarisWorks 2.0CDv1 (UK English)</description>
<year>1993</year>
<publisher>Claris</publisher>
- <info name="version" value="2.0" />
<part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk 1.img" size="1474560" crc="3bb6af5f" sha1="8f1d97e0825c8b876ee6b86db3b13de74a494159" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk 2.img" size="1474560" crc="c51a46b7" sha1="cec8bdc88e37e5c28822f154d10655379b2e30a3" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clarisw30">
+ <description>ClarisWorks 3.0CDv1 (UK English)</description>
+ <year>1994</year>
+ <publisher>Claris</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
<dataarea name="flop" size="1474560">
- <rom name="clarisworks 2.0 (swe) (disk 1).img" size="1474560" crc="25da86b7" sha1="99e9fa57e0d7d03fb89611745bd04b4d7c4af998" />
+ <rom name="Disk1.img" size="1474560" crc="92724e5a" sha1="0fba282bb5cd1d5b511640de307a675d2ecd8492" />
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
<dataarea name="flop" size="1474560">
- <rom name="clarisworks 2.0 (swe) (disk 2).img" size="1474560" crc="76e73be8" sha1="46921d446169d949b37879f6cbbdfb802323b7ef" />
+ <rom name="Disk2.img" size="1474560" crc="9dbf71ba" sha1="edd0de558066b76a23ff5ab55a342915b88a086b" />
</dataarea>
</part>
<part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
<dataarea name="flop" size="1474560">
- <rom name="clarisworks 2.0 (swe) (disk 3).img" size="1474560" crc="8e2dbabc" sha1="6b2b982348874be31899b6b2bace55518e5e9477" />
+ <rom name="Disk3.img" size="1474560" crc="a70d8dac" sha1="74821c8bdfccda0b987587ab223ee526b5861510" />
</dataarea>
</part>
<part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
<dataarea name="flop" size="1474560">
- <rom name="clarisworks 2.0 (swe) (disk 4).img" size="1474560" crc="9ad039ef" sha1="18777ffd48cb9a016b169e38cf867f81367271b0" />
+ <rom name="Disk4.img" size="1474560" crc="fabee185" sha1="3bb8304a65845737e9ca80e70fb452f9064628cd" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- S/N: Z93350-001A -->
+ <software name="clarisw30sv">
+ <description>ClarisWorks 3.0Sv1 (Swedish)</description>
+ <year>1994</year>
+ <publisher>Claris</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="clarisworks 3.0 (swe) (disk 1).img" size="1474560" crc="25da86b7" sha1="99e9fa57e0d7d03fb89611745bd04b4d7c4af998" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="clarisworks 3.0 (swe) (disk 2).img" size="1474560" crc="76e73be8" sha1="46921d446169d949b37879f6cbbdfb802323b7ef" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="clarisworks 3.0 (swe) (disk 3).img" size="1474560" crc="8e2dbabc" sha1="6b2b982348874be31899b6b2bace55518e5e9477" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="clarisworks 3.0 (swe) (disk 4).img" size="1474560" crc="9ad039ef" sha1="18777ffd48cb9a016b169e38cf867f81367271b0" />
</dataarea>
</part>
<part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 5" />
<dataarea name="flop" size="1474560">
- <rom name="clarisworks 2.0 (swe) (disk 5).img" size="1474560" crc="f74f6289" sha1="b60aae3606fec538dc60ba15bbec47e3da607a65" />
+ <rom name="clarisworks 3.0 (swe) (disk 5).img" size="1474560" crc="f74f6289" sha1="b60aae3606fec538dc60ba15bbec47e3da607a65" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clarisw40">
+ <description>ClarisWorks 4.0v4 (US English)</description>
+ <year>1996</year>
+ <publisher>Claris</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk1.img" size="1474560" crc="aef73fce" sha1="f47bc8ccbd3cafd9c9fa18a43073b16b9d984d31" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk2.img" size="1474560" crc="862f508e" sha1="c8ddfe91138780e503785709a0d9996e5cabdf01" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk3.img" size="1474560" crc="e78a544f" sha1="cfa3d23ea8bdbc16ed8410e563959df096e55b81" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk4.img" size="1474560" crc="cd93b6f6" sha1="895405f08925f602671f21e19721837ad0ec022d" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk5.img" size="1474560" crc="6fb58895" sha1="001f98e16609e857c7a030bcbe8ce1bdb6303a0e" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk6.img" size="1474560" crc="63bc36c9" sha1="ae1704aacf8ba86ddeb6ce8ee22110ab8b1d8472" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clarisw40sv">
+ <description>ClarisWorks 4.0Sv1 (Swedish)</description>
+ <year>1996</year>
+ <publisher>Claris</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk01.img" size="1474560" crc="6d566478" sha1="ccfba94cdba82b458d1d50de28eabd1f5da4d210" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk02.img" size="1474560" crc="45b58b88" sha1="514c39d87c7c79d82252c6b798165d67a8dd86c7" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk03.img" size="1474560" crc="21a9608b" sha1="6cb7a246c9396bdd7dae8aaf224df662c8305c81" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk04.img" size="1474560" crc="851eeb5f" sha1="7dcc7871f6df8e32d62174fbe81df694a667c7c1" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk05.img" size="1474560" crc="ee35a6ea" sha1="c0557af7c8778a4a96aa2f0e00bcf53e6b31843f" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk06.img" size="1474560" crc="e590bf7a" sha1="c2b2d4482e35a06fe59caf210d1183031153969d" />
</dataarea>
</part>
</software>
@@ -2701,6 +2861,475 @@ license:CC0
</part>
</software>
+ <software name="excel50a">
+ <description>Microsoft Excel 5.0a (US English)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="8db45c87" sha1="f4b200d69b198010b33408dc618e81c9c74c3012" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="80ab8a52" sha1="fff7c5dcbb270fc9bb47f030cb5923d63b945f24" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="d20f9451" sha1="71b6b1e40ae5369617ab7b08a1e10b8d1d91cb05" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="cfa7d9a1" sha1="304c2aaa76200da0dfa67dc09f3c153e6243a6c9" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="3b6ab75d" sha1="518c78b25810321015590039b237d22f8667496a" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="aa39e221" sha1="81912976e2ab6ced1ff09cc564fa7436a0fb3237" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="c33d0acf" sha1="a842ac840d94803edbe5dedb8dbbc4db1f76e9db" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="6523b5b9" sha1="4eee59762a542831256e3f2b1128ace8ef212983" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="5a1c1556" sha1="61127a76972eb92907094241d2739f5b82695c84" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="62b400a1" sha1="7326de47d9b1e62a338a43b205198bf3849a5cbd" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="de196ac6" sha1="a5cb17a5c0e31a12f2d37aac5d7c8f40bf4be444" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="70eede1c" sha1="37d46361fb0a1fb4424f34236b3be7c798f913a2" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="83577345" sha1="bfb6bc8d3a290215a686e20889093f1289a5b5ee" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="excel50de">
+ <description>Microsoft Excel 5.0 (German)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 1-Installation" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="3c312373" sha1="378eb214688de309cdeaa7f0f9fd3006cb67bd2e" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="78188dbd" sha1="5bdbc053aa95d8e761535f0c31ad3fe7efd13f9a" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="d221035c" sha1="4c111955135cfe2acde9a8b1c8660b98848b1490" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="d29601ef" sha1="a718a969608f0187113c263e93a682dc1c07b871" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="c33936de" sha1="20210408dff1b0108fb4b4644a54c02831cedef8" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="042b188b" sha1="44d89f0015e3504b7f5184b1bdbd6e6539f1c7e8" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="d4a2ae47" sha1="04865af2705f48ae1688f8453db7d858a7ec23ab" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="e53a6de0" sha1="ed666e14ba3e5032a5bfddda916f60124998d280" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="5fafae14" sha1="62ee8357d6f460a9c8d6ca4b25a46943afc0766e" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="b8c2b23b" sha1="28f95002bac642e8d348ed43d4a3f00a2272947b" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="07dbd990" sha1="e074d53fb63f231263a2f955c47f22e30d61828c" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="11bdcf07" sha1="c0ae8d849b2f7cba5e5b5373c33448349f15a88b" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="3dba10d7" sha1="0042e0ba0caea0dfd9058e644521155a3c60b458" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Doesn't work with System 7.0 or newer -->
+ <software name="foxbase20">
+ <description>FoxBASE+/Mac 2.00</description>
+ <year>1989</year>
+ <publisher>Fox Software</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="FoxBASE+ 2.00" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="f367df6b" sha1="da29b8e7741ff42050a0eac140a89eadcfed151c" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="6f61ff89" sha1="ba61f65a2126f7f097eb4a887f040af9cf19acb8" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="foxpro25cde">
+ <description>Microsoft FoxPro 2.5c (German)</description>
+ <year>1994</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Installationsdiskette 1" />
+ <dataarea name="flop1" size="1474560">
+ <rom name="Installationsdiskette 1.img" size="1474560" crc="90daa796" sha1="034c8927f2a745e7aa4113f2f753544a796f8b6e" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette - 2" />
+ <dataarea name="flop2" size="1474560">
+ <rom name="Diskette - 2.img" size="1474560" crc="4949f610" sha1="e55bc536f216fae5f683c99e61f66d2834c8770d" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette - 3" />
+ <dataarea name="flop3" size="1474560">
+ <rom name="Diskette - 3.img" size="1474560" crc="28220e1c" sha1="decb0f7c2438eaaf49281b7108352d28ba059510" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette - 3" />
+ <dataarea name="flop4" size="1474560">
+ <rom name="Diskette - 4.img" size="1474560" crc="128e0503" sha1="d2624840e73a7bd9418b97e87c20919da09befe7" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette - 4" />
+ <dataarea name="flop5" size="1474560">
+ <rom name="Diskette - 5.img" size="1474560" crc="9c5dfd0a" sha1="9f248a472394199797592ac1167818fedf929829" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette - 5" />
+ <dataarea name="flop6" size="1474560">
+ <rom name="Diskette - 6.img" size="1474560" crc="e9ee45d2" sha1="8813d260422d208485b12d71cf00cd8ba6c68624" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette - 6" />
+ <dataarea name="flop7" size="1474560">
+ <rom name="Diskette - 7.img" size="1474560" crc="5c1fe418" sha1="2bf4b1b006f7409e77b921bc9727397e95f09b68" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Zeichensätze" />
+ <dataarea name="flop9" size="1474560">
+ <rom name="Zeichensatze.img" size="1474560" crc="323d16c8" sha1="e25d301dbed989871b12426d3335f431025c444a" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="ASLM Installer" />
+ <dataarea name="flop8" size="1474560">
+ <rom name="ASLM Installer.img" size="1474560" crc="a49ff03e" sha1="f21e7c3989a03d12cec82ac8168b9585ca752f03" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="foxpro25cfr">
+ <description>Microsoft FoxPro 2.5c (French)</description>
+ <year>1994</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 1 - Install" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disquette 1 - Install.img" size="1474560" crc="1f999b44" sha1="125ccdd1144e0a27591abe22dcde96f962022974" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disquette 2.img" size="1474560" crc="b7a593b6" sha1="c494fbcdd517b0b139399734db3715ce8ebb423f" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disquette 3.img" size="1474560" crc="2725930f" sha1="307f0c208c19d000eb7c1916df3d02950bc49d7d" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disquette 4.img" size="1474560" crc="c6eb25fd" sha1="3fcc50f0e1bc78e5176bfb4841f7d490f84e4c50" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disquette 5.img" size="1474560" crc="f4f5ee4a" sha1="89d33130a64e80832ea5fd13a6ba84dde965cb61" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disquette 6.img" size="1474560" crc="29c1d561" sha1="8f4992b9aaa85890095db0fea117f8f7fc4bd58d" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disquette 7.img" size="1474560" crc="a165fe0e" sha1="7fd9dfa9afd77834f99537137ac0ae1438f67622" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Polices" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Polices.img" size="1474560" crc="b6bb9767" sha1="6689790613cef5678d9bda856bada2475d5c7448" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="ASLM Installer" />
+ <dataarea name="flop" size="1474560">
+ <rom name="ASLM Installer.img" size="1474560" crc="81f5aa50" sha1="ec329213326f157871ed9616e4718e3d7161f864" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="frmaker402">
+ <description>FrameMaker 4.0.2</description>
+ <year>1994</year>
+ <publisher>Frame Technology</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk01.img" size="1474560" crc="f56604cc" sha1="6dc9a0d12c4832e897567d9387ec7860f4e1f96f" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk02.img" size="1474560" crc="3c9c920e" sha1="8a2519cb963e5ede96a48fe47bda79f03d1ca538" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk03.img" size="1474560" crc="d2f42054" sha1="b5a2b74d72dc68c88e32ba30b47f0e660fd8bce0" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk04.img" size="1474560" crc="af93d3e7" sha1="20eb316490feb8838ef642615db21c6d10918f16" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk05.img" size="1474560" crc="57c0d547" sha1="89b66f4d1259e7ad528a1e701fc7626e6030172f" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk06.img" size="1474560" crc="604a7ce0" sha1="3c08718f8796a321f5e33719a25724ea2a0673bb" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk07.img" size="1474560" crc="0fb76ceb" sha1="b2433abdf3ad1c8e0adc73c7b77a7cfe13a3912b" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="PSPrinter 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="PSPrinter 1.img" size="1474560" crc="9819461c" sha1="635830bd023d14a95026d9ff776c5a2c97cf5b8d" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="PSPrinter 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="PSPrinter 2.img" size="1474560" crc="13d3b88e" sha1="151344efdb66bf0070c5cb788abcfdad06a88140" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="frmaker50">
+ <description>FrameMaker 5.0</description>
+ <year>1995</year>
+ <publisher>Frame Technology</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="1f266e11" sha1="6169128b22f8811fd88e763fbc61eecb4d935733" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="63eb5ff5" sha1="d27755258a402756fa00903cf652330cc65836d3" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="204ac644" sha1="59c21e1f8ecc46d84a70ee8897ba24ecaa10929f" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="51bff2d0" sha1="d695ffb871d1e4812bb4e543425075e662f0a7c6" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="eba63ffa" sha1="d80d612faddeb8db5d32e9c38fdc108a086984cd" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="45cbf3a8" sha1="acec609fb2e1d80c07555337672af00e78c9030a" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="44404563" sha1="669b2817084e5ecba7f2faa2092ca59c84f9afad" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="3f09490c" sha1="c7dab9625d37ae4c7c4e94971a11337ace6749a9" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="97de54aa" sha1="3e7fef35765501a4bf3aa6d5716cbcde1a30fed3" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="b1c03805" sha1="2f76f25128065d9220861a0871511da5bd09be66" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="bcf46d1d" sha1="f1ce6d8480eac41374755d0c0b2fa0b24e0f439c" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="fbcbaf81" sha1="8fb229b366283ea025bcf20dbb6496f5218164e1" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="9a8552a1" sha1="a97d9ef6925ab72c1bd6c8734dc72737470f97a0" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="95dfcebf" sha1="d7443eebee892a253379aa9c4245c546dd74c3da" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="ASLM Installer" />
+ <dataarea name="flop" size="1474560">
+ <rom name="aslm.img" size="1474560" crc="5d4781a9" sha1="4eb591d5d1baafa457f55c51ef66a661801b6e7e" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="HTML Lite Installer" />
+ <dataarea name="flop" size="1474560">
+ <rom name="HTML Lite Installer.img" size="1474560" crc="17eef145" sha1="a45378b9b1b6abd875c24d7e82bd48875aa9e696" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="gayblade">
<description>GayBlade</description>
<year>1992</year>
@@ -2924,6 +3553,2088 @@ license:CC0
</part>
</software>
+ <!-- MAME crashes on startup with "Fatal error: fpgen_rm_reg: unimplemented opmode 0A at 01ED4FB6" -->
+ <software name="matlabst40" supported="no">
+ <description>Matlab 4.0 Student Edition</description>
+ <year>1995</year>
+ <publisher>The MathWorks</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="1b645647" sha1="8364ff516efbd6bb802a4a3420999ea86493205c" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="d6748ac6" sha1="6feed5319bb47c8d520166a9096118761a5ae36c" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="8e3588bd" sha1="401c8182e14126b922e6ce46b9b8ed6d5a267239" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="netadm10">
+ <description>Apple Network Administration Toolkit 1.0</description>
+ <year>1996</year>
+ <publisher>Apple</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Install 1.img" size="1474560" crc="7346ea46" sha1="3cca3d439216934e0eb1f634343a5eb8442ed933" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Install 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Install 2.img" size="1474560" crc="7985a749" sha1="4a948ec3f8093f134e10ed9cbaeca349acd67923" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Install 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Install 3.img" size="1474560" crc="41d5de06" sha1="452fd357d4738af69296490515e169f9beddeb6f" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Server Install" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Server Install.img" size="1474560" crc="3c722a60" sha1="3e1a98e82442d9ce3b490c3a5d678c9e677e6df3" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="netadm10u">
+ <description>Apple Network Administration Toolkit 1.0 Updates</description>
+ <year>1996</year>
+ <publisher>Apple</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="At Ease 4.0.1 Updater" />
+ <dataarea name="flop" size="1474560">
+ <rom name="At Ease 4.0.1 Updater.img" size="1474560" crc="85b63cce" sha1="43ba982af150264c6639715ef52b9d0e1fceb08e" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Network Assistant 2.0.1 Updater" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Network Assist 2.0.1 Updtr.img" size="1474560" crc="3673197b" sha1="52df3715657ef75235253cd4ae0afc21b446c61f" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="netadm20u">
+ <description>Apple Network Administration Toolkit 2.0 Updates</description>
+ <year>1998</year>
+ <publisher>Apple</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="At Ease 5.0.1 Updater" />
+ <dataarea name="flop" size="1474560">
+ <rom name="At Ease 5.0.1 Updater.img" size="1474560" crc="0a273067" sha1="299ab067081df730d86e2bcec04ed2ca815dda60" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="At Ease 5.0.1 Web Extras" />
+ <dataarea name="flop" size="1474560">
+ <rom name="At Ease 5.0.1 Web Extras.img" size="1474560" crc="68d9637e" sha1="e7a7a6901893c2cd449ebac62d8894c7c91fb503" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="At Ease for Workgroups 5.0.2 Updater" />
+ <dataarea name="flop" size="1620480">
+ <rom name="At Ease WG 5.0.2 Updater.img" size="1620480" crc="afe39210" sha1="c4f56cbfb1660d16f186178b28489b142fbf06e0" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Network Assistant 3.0.1 Startup" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Network Asst Startup 3.0.1.img" size="1474560" crc="101cdafe" sha1="76b5116ac85a9c31b8557609fd8db933b2ccaa76" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Network Assistant 3.0.2 Updater" />
+ <dataarea name="flop" size="1474560">
+ <rom name="NetworkAsst Update 3.0.2.img" size="1474560" crc="b4adfed5" sha1="a41147e794919634f228b0186640992c54a0d0a0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nutils313">
+ <description>Norton Utilities for Macintosh 3.1.3</description>
+ <year>1994</year>
+ <publisher>Symantec</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Me First" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Install Me First.img" size="1474560" crc="1b122860" sha1="82cbb1a75a2c1e246f4713298e552dff3b651e43" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="NUM 3.1 Emergency Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="NUM 3.1 Emergency Disk.img" size="1474560" crc="99bb16ca" sha1="c1fedd13981f552bcbd0edd3f8ed3bd780f220e4" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Utilities Disk 1.img" size="1474560" crc="42c3b670" sha1="9b6bbbe82470ccede5e4f14e81ecbfc77399a032" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Utilities Disk 2.img" size="1474560" crc="d4ce19f8" sha1="6a87c155c9eefff12c40845f14baee4dd481c2ee" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nutils321">
+ <description>Norton Utilities for Macintosh 3.2.1</description>
+ <year>1995</year>
+ <publisher>Symantec</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Me First" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Install Me First.img" size="1474560" crc="88d0c5b5" sha1="c4090dbb66930f554054698f66ef23c6bcf26e85" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="NUM Emergency Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="NUM Emergency Disk.img" size="1474560" crc="e7cf0268" sha1="e3431d31d8d4440ba445aeda4ed46b028040e573" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Utilities Disk 1.img" size="1474560" crc="17d00de9" sha1="ecf9d7e967fe01f81eeadac59785baf3027e3908" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Utilities Disk 2.img" size="1474560" crc="f6177aa6" sha1="544c84195de7767dbae3b713869188bbe684d29e" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nutils353">
+ <description>Norton Utilities for Macintosh 3.5.3</description>
+ <year>1998</year>
+ <publisher>Symantec</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Me First" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Install Me First.img" size="1474560" crc="bbe4862d" sha1="d8d547fe882c159da547b8a621745f00429b8025" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Utilities Disk 1.img" size="1474560" crc="b04fcc05" sha1="8d27b6c2cbbcfd82ded8d842f865e45c50573f89" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Utilities Disk 2.img" size="1474560" crc="46d20927" sha1="c3e25827ffc28e3dac01ea8d653b5ef639445c1f" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Utilities Disk 3.img" size="1474560" crc="3e00bfa6" sha1="0d425ff47a13c853511371865e5b6f80e481f307" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Utilities Disk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Utilities Disk 4.img" size="1474560" crc="a2d81854" sha1="12e126f3d2b8f47505a41761628a825c22b0aea0" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Startup Disk Builder Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Startup Disk Builder Disk.img" size="1474560" crc="28c031ec" sha1="7e26b08be41fdbbe9e097fd43258f59e0b14985c" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office42">
+ <description>Microsoft Office 4.2 (US English)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 1" />
+ <dataarea name="flop1" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="8985d17e" sha1="9a54aa313f13626017a1ea44425cf933c04f4f39" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 2" />
+ <dataarea name="flop2" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="1fd054f3" sha1="5f79613de264fa9d09a7c3f80bf58804bcb4fd3f" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 3" />
+ <dataarea name="flop3" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="8f135105" sha1="2215c0462b381ac46c7e3c1517e6dd5a419cd7d2" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 4" />
+ <dataarea name="flop4" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="d7e2ab81" sha1="df2233e41781a613cf750462f84dac4a47b2c42b" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 5" />
+ <dataarea name="flop5" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="7c6989bb" sha1="3461c75d46342bd427b62d4ef605d4614776baa9" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 6" />
+ <dataarea name="flop6" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="eabf36e9" sha1="1c2ae32d0912b7a30c7e9defe6c5b18f7f4e5449" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 7" />
+ <dataarea name="flop7" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="f3ccec55" sha1="1fa2749ac551283e82173a922fd083ee8393d2de" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 8" />
+ <dataarea name="flop8" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="58746b7b" sha1="f5e47405ebba17319365458a741960465dc3c206" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 9" />
+ <dataarea name="flop9" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="53d35c5a" sha1="a4dfc2e31e6ac868c4620377eddebff2a9eb0ba5" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 10" />
+ <dataarea name="flop10" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="2fd82337" sha1="d17915be3c33dd45c4d63b15bb2975b42b82aa9a" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 11" />
+ <dataarea name="flop11" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="1fc91094" sha1="bf4413a3365453e5a433cd224ff86494e1e14443" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 12" />
+ <dataarea name="flop12" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="bded7c6d" sha1="424903d56feca3c15de2289b5f3117795099dd99" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 13" />
+ <dataarea name="flop13" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="41193aa3" sha1="ac452deab5179b00d07913b1d66bd3065235d4a5" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 14" />
+ <dataarea name="flop14" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="e58e1681" sha1="8d0b4b4a65d9651f7b19965f14cdef08f5d2fdce" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 15" />
+ <dataarea name="flop15" size="1474560">
+ <rom name="disk15.img" size="1474560" crc="88bc447f" sha1="1411aeef33ba5e2a124f8d99e385c618568ab1de" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 16" />
+ <dataarea name="flop16" size="1474560">
+ <rom name="disk16.img" size="1474560" crc="fb8e272f" sha1="b088c3cd7ad31892d73932925c2f0db6aab9a1aa" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 17" />
+ <dataarea name="flop17" size="1474560">
+ <rom name="disk17.img" size="1474560" crc="c4ab095a" sha1="7a13903555d49fc77e60200df16bae1f07442a45" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 18" />
+ <dataarea name="flop18" size="1474560">
+ <rom name="disk18.img" size="1474560" crc="1b9eae80" sha1="a7ecaada74bb9de9c7d0ce1fdd4b6bab9c69b27f" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 19" />
+ <dataarea name="flop19" size="1474560">
+ <rom name="disk19.img" size="1474560" crc="cf26cb8f" sha1="a9279c663585226f242ec9bdcb589048f7140026" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 20" />
+ <dataarea name="flop20" size="1474560">
+ <rom name="disk20.img" size="1474560" crc="71af4c78" sha1="6573a07181e9c44adaa21d6185250c70323e663b" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 21" />
+ <dataarea name="flop21" size="1474560">
+ <rom name="disk21.img" size="1474560" crc="9663a69b" sha1="9b5a5d40b8e3fa68a072fae3a0a89cbe0bab0b29" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 22" />
+ <dataarea name="flop22" size="1474560">
+ <rom name="disk22.img" size="1474560" crc="6144d187" sha1="a58ac1f0b2c5bb47b1495df8ea5c5d589d403076" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 23" />
+ <dataarea name="flop23" size="1474560">
+ <rom name="disk23.img" size="1474560" crc="929fef1b" sha1="8f0208d91e830ce73ffcef374857e414b25d89da" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 24" />
+ <dataarea name="flop24" size="1474560">
+ <rom name="disk24.img" size="1474560" crc="a8594f3d" sha1="2b6a54de65290c8d6b32f182b16dbaf18486afc5" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 25" />
+ <dataarea name="flop25" size="1474560">
+ <rom name="disk25.img" size="1474560" crc="5b37e30a" sha1="edf5fad02e3ba76f923486f30307208cef2882a5" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 26" />
+ <dataarea name="flop26" size="1474560">
+ <rom name="disk26.img" size="1474560" crc="ed844f27" sha1="fd9ab1efed8faebcecc87359f4c46e8ccb5e2bda" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 27" />
+ <dataarea name="flop27" size="1474560">
+ <rom name="disk27.img" size="1474560" crc="ac43f7d8" sha1="6a122d7b58fc15f8d86b46b495e76f312bf28932" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 28" />
+ <dataarea name="flop28" size="1474560">
+ <rom name="disk28.img" size="1474560" crc="d8c59316" sha1="8a93d6ba84812aecff658e09ecb497fcc7ca0bc7" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 29" />
+ <dataarea name="flop29" size="1474560">
+ <rom name="disk29.img" size="1474560" crc="3baf5baf" sha1="aa560ca5ccf26b8e1eca0e2c37bf2fb13ef59e88" />
+ </dataarea>
+ </part>
+ <part name="flop30" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 30" />
+ <dataarea name="flop30" size="1474560">
+ <rom name="disk30.img" size="1474560" crc="69c46621" sha1="b22805409500c7cd91a957c56fb860af50885747" />
+ </dataarea>
+ </part>
+ <part name="flop31" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 31" />
+ <dataarea name="flop31" size="1474560">
+ <rom name="disk31.img" size="1474560" crc="20864783" sha1="204919f7e878925ec64af9442f9f514760934466" />
+ </dataarea>
+ </part>
+ <part name="flop32" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 32" />
+ <dataarea name="flop32" size="1474560">
+ <rom name="disk32.img" size="1474560" crc="9edda715" sha1="a12df353fc0d342260aaf1c095c9847741df45fa" />
+ </dataarea>
+ </part>
+ <part name="flop33" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 33" />
+ <dataarea name="flop33" size="1474560">
+ <rom name="disk33.img" size="1474560" crc="ad945723" sha1="a4530b97435e9fbd041b85aab1030aa32dee2c74" />
+ </dataarea>
+ </part>
+ <part name="flop34" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 34" />
+ <dataarea name="flop34" size="1474560">
+ <rom name="disk34.img" size="1474560" crc="77bfc0c6" sha1="dd219fe404b181f00b0a4ea8fcf61d5f2f6e9ce9" />
+ </dataarea>
+ </part>
+ <part name="flop35" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 35" />
+ <dataarea name="flop35" size="1474560">
+ <rom name="disk35.img" size="1474560" crc="7c374735" sha1="602634f8d4e891fb8abba5b5cd4366de8d055c9a" />
+ </dataarea>
+ </part>
+ <part name="flop36" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 36" />
+ <dataarea name="flop36" size="1474560">
+ <rom name="disk36.img" size="1474560" crc="1f23ec83" sha1="d0849a88c0e290619a40dda3af61d62f000a953a" />
+ </dataarea>
+ </part>
+ <part name="flop37" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 37" />
+ <dataarea name="flop37" size="1474560">
+ <rom name="disk37.img" size="1474560" crc="c750c7d6" sha1="b71f4064ddd6d42e385579377c23a449dc1d9830" />
+ </dataarea>
+ </part>
+ <part name="flop38" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 38" />
+ <dataarea name="flop38" size="1474560">
+ <rom name="disk38.img" size="1474560" crc="da0faafd" sha1="7cb1e08ec259e9f1db9a5780b136c75424ce223c" />
+ </dataarea>
+ </part>
+ <part name="flop39" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 39" />
+ <dataarea name="flop39" size="1474560">
+ <rom name="disk39.img" size="1474560" crc="439e9bdf" sha1="64370c3c683cda3dfed9a34d99495ff031626e13" />
+ </dataarea>
+ </part>
+ <part name="flop40" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 40" />
+ <dataarea name="flop40" size="1474560">
+ <rom name="disk40.img" size="1474560" crc="4af34c8a" sha1="5ae38c3ae5e24959e10253ec9b10c010b837d8fd" />
+ </dataarea>
+ </part>
+ <part name="flop41" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Viewer Disk.img" size="1474560" crc="27ba6536" sha1="a51a14a60ebec0d5360cc208e99eb46d0d61953b" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office42aus">
+ <description>Microsoft Office 4.2 (Australian English)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 1" />
+ <dataarea name="flop1" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="84f792cc" sha1="750d985041ab0f43824828cd5f908a90116cee53" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 2" />
+ <dataarea name="flop2" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="ff7ff5cb" sha1="27f983f9cbf234640a8e574f11f71b54aaa2623e" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 3" />
+ <dataarea name="flop3" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="93b416ee" sha1="1633899534d39439a3fb4d30610de91e5f411936" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 4" />
+ <dataarea name="flop4" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="53c62735" sha1="1f443016cd938e6b0080f8b9b63e881c47015046" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 5" />
+ <dataarea name="flop5" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="050b6015" sha1="c6f0bd9b03aab5832c0f8533290cd7291c25bebb" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 6" />
+ <dataarea name="flop6" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="34945a75" sha1="86d1e5d4262a2ed229c270d6cd29dcdedfe8bdab" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 7" />
+ <dataarea name="flop7" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="4b56eeb2" sha1="190829b4b3aea1c38c42944d43c317e63ecc19fe" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 8" />
+ <dataarea name="flop8" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="47d78827" sha1="d7e8fe690931af70b581492c9cf9e2389c140a87" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 9" />
+ <dataarea name="flop9" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="ae6de126" sha1="6a11fbbe02c0369b463f051da83bd30ccd99e018" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 10" />
+ <dataarea name="flop10" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="3b92346c" sha1="7196ad3e03c7431ce0ee21fd57293330e616f700" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 11" />
+ <dataarea name="flop11" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="8f52a6ff" sha1="31f876fdcbe22dd4a514d5900c4d3dc91116d1f1" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 12" />
+ <dataarea name="flop12" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="0f2f167c" sha1="bc04ac851ed43b683eb1a8fb6ac30fe410516530" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 13" />
+ <dataarea name="flop13" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="ede9b1e2" sha1="68576a3e178c57dbb1b107ba97f0bbd9c5670c90" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 14" />
+ <dataarea name="flop14" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="9ce23fae" sha1="ef607d2dbb561e32b1ef0d38617455a0d3e3da74" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 15" />
+ <dataarea name="flop15" size="1474560">
+ <rom name="disk15.img" size="1474560" crc="1b503041" sha1="2d2152912de6e241e8089ec88198cde8f276bf5b" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 16" />
+ <dataarea name="flop16" size="1474560">
+ <rom name="disk16.img" size="1474560" crc="97757bd0" sha1="88a2e4fb8dbc6fdacef089e6650a917a74e5d270" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 17" />
+ <dataarea name="flop17" size="1474560">
+ <rom name="disk17.img" size="1474560" crc="4b79d560" sha1="b458a2be9d07c9684ee729c501fe46b75071a01c" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 18" />
+ <dataarea name="flop18" size="1474560">
+ <rom name="disk18.img" size="1474560" crc="32798624" sha1="854e2b683999db518f96f0b74ef33c4787efdc91" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 19" />
+ <dataarea name="flop19" size="1474560">
+ <rom name="disk19.img" size="1474560" crc="5644f447" sha1="2d559202be378e6d038938d8277f19538d37555e" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 20" />
+ <dataarea name="flop20" size="1474560">
+ <rom name="disk20.img" size="1474560" crc="c71b61e4" sha1="24ea8778705dc24960e885e955183196a01ba5c7" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 21" />
+ <dataarea name="flop21" size="1474560">
+ <rom name="disk21.img" size="1474560" crc="193765e4" sha1="11409a61de844936d7a3f10bd48613aeed708a07" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 22" />
+ <dataarea name="flop22" size="1474560">
+ <rom name="disk22.img" size="1474560" crc="90bc2e72" sha1="51577d13587ad5b0869d73db5bbd6af9a16b442b" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 23" />
+ <dataarea name="flop23" size="1474560">
+ <rom name="disk23.img" size="1474560" crc="3f29cc23" sha1="9eccd37755973d0bf190b777e9b57b37ea8564b5" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 24" />
+ <dataarea name="flop24" size="1474560">
+ <rom name="disk24.img" size="1474560" crc="798d6fc7" sha1="cf7db37af155b2f82cd7fe7c276b2338c9d11907" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 25" />
+ <dataarea name="flop25" size="1474560">
+ <rom name="disk25.img" size="1474560" crc="c03b1933" sha1="8f94e3623dda944308301b63d972ff7e8affb65c" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 26" />
+ <dataarea name="flop26" size="1474560">
+ <rom name="disk26.img" size="1474560" crc="5eb60920" sha1="b60138d96f0cd4fb1f35925813890fca37e01a07" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 27" />
+ <dataarea name="flop27" size="1474560">
+ <rom name="disk27.img" size="1474560" crc="fa9c79b3" sha1="6787a9f601b5b705f8dbe390fe3c8e58f7c72b52" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 28" />
+ <dataarea name="flop28" size="1474560">
+ <rom name="disk28.img" size="1474560" crc="6d61af71" sha1="03fc05c4391e6b7fcb883497020d9f69f59918d2" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 29" />
+ <dataarea name="flop29" size="1474560">
+ <rom name="disk29.img" size="1474560" crc="9d1d23b4" sha1="b8e8ec8a8c4dad45d5ab9477538a5d3d2892d4b1" />
+ </dataarea>
+ </part>
+ <part name="flop30" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 30" />
+ <dataarea name="flop30" size="1474560">
+ <rom name="disk30.img" size="1474560" crc="5bbd224c" sha1="6f7d98d32b16dcc92109f2492f5ac38b5de64288" />
+ </dataarea>
+ </part>
+ <part name="flop31" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 31" />
+ <dataarea name="flop31" size="1474560">
+ <rom name="disk31.img" size="1474560" crc="1de5c993" sha1="b2902dedaa1eed00ebdd73fcc3c7b189d7e0c880" />
+ </dataarea>
+ </part>
+ <part name="flop32" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 32" />
+ <dataarea name="flop32" size="1474560">
+ <rom name="disk32.img" size="1474560" crc="e9641142" sha1="bd18243138d85a8744c754077a7080aff26c530b" />
+ </dataarea>
+ </part>
+ <part name="flop33" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 33" />
+ <dataarea name="flop33" size="1474560">
+ <rom name="disk33.img" size="1474560" crc="c80f376c" sha1="74ceee0592c39dd7dfb240f6a96c8141e8e42db8" />
+ </dataarea>
+ </part>
+ <part name="flop34" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 34" />
+ <dataarea name="flop34" size="1474560">
+ <rom name="disk34.img" size="1474560" crc="b167b725" sha1="ed084f7d7ba049775f9cf7edeaeecf5b65433a22" />
+ </dataarea>
+ </part>
+ <part name="flop35" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 35" />
+ <dataarea name="flop35" size="1474560">
+ <rom name="disk35.img" size="1474560" crc="6cc472e5" sha1="e74d6c57230391e8dd7983aa005e16fd66dba4fc" />
+ </dataarea>
+ </part>
+ <part name="flop36" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 36" />
+ <dataarea name="flop36" size="1474560">
+ <rom name="disk36.img" size="1474560" crc="854bf2f6" sha1="d2e947fe4620eea332791e1bc7792bf05e4d0f7d" />
+ </dataarea>
+ </part>
+ <part name="flop37" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 37" />
+ <dataarea name="flop37" size="1474560">
+ <rom name="disk37.img" size="1474560" crc="2570d6fa" sha1="a632b9e99e974e6aa8d8f9378561cc5bfd65953f" />
+ </dataarea>
+ </part>
+ <part name="flop38" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 38" />
+ <dataarea name="flop38" size="1474560">
+ <rom name="disk38.img" size="1474560" crc="a6c96b69" sha1="aafdb4a93533226812c0bffda0b73ad60224a96d" />
+ </dataarea>
+ </part>
+ <part name="flop39" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 39" />
+ <dataarea name="flop39" size="1474560">
+ <rom name="disk39.img" size="1474560" crc="8d63307c" sha1="021add356e45f66e7f3954e6627b1ca022d667ec" />
+ </dataarea>
+ </part>
+ <part name="flop40" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 40" />
+ <dataarea name="flop40" size="1474560">
+ <rom name="disk40.img" size="1474560" crc="dfdfba2b" sha1="71c35d87597891d5031bb02f7c8d7648042421ff" />
+ </dataarea>
+ </part>
+ <part name="flop41" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="viewer.img" size="1474560" crc="27ba6536" sha1="a51a14a60ebec0d5360cc208e99eb46d0d61953b" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office42da">
+ <description>Microsoft Office 4.2 (Danish)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 1 - Installation" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk01.img" size="1474560" crc="7f6d9dea" sha1="07c1526eb99dee2fa336571eecf7658d5050a490" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk02.img" size="1474560" crc="db012a6e" sha1="1140a9bb8edbfa7247c229e3516bbdfb73c30119" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk03.img" size="1474560" crc="be71decf" sha1="a2be1cd97e2c1455680d790e04db1ea1fa02454d" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk04.img" size="1474560" crc="9bec4c73" sha1="235fdceb72ddc50d82cdb9882718bea55e273cd6" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk05.img" size="1474560" crc="498e9a53" sha1="aca405f6a604d1be97c676e31fe5df3bd11f1df6" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk06.img" size="1474560" crc="6b70d2dc" sha1="0953c5c2429586309abd348660dbf1e65c3fd967" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk07.img" size="1474560" crc="1b2d3ee9" sha1="95ad11646db9defe015017d40ab4985e7332f78c" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk08.img" size="1474560" crc="d59bccb2" sha1="1fb94ef825826a8c7f3ad365c1dc4198f86afe5b" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk09.img" size="1474560" crc="d2c13fba" sha1="9399da5672e5507ea457b29a57da49d36b3fbf82" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk10.img" size="1474560" crc="dd6c065c" sha1="caaaad42961d7c9b0952cb7553e2e50576140bea" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk11.img" size="1474560" crc="775ab025" sha1="256387a6b92d75a36b28b7ee056c99c961b9fd08" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk12.img" size="1474560" crc="cfe490e8" sha1="210f71eacc4effdb42976b81b7ae64402b9026bb" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk13.img" size="1474560" crc="a4bd6ca0" sha1="0da5dab1c81a98ee10c10685ba26455f966f3236" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk14.img" size="1474560" crc="e3e40fed" sha1="cd379f7e7beb9022acd402e56caa27c3e0837ffe" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 15" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk15.img" size="1474560" crc="eeeb55f9" sha1="b2d7ea495bed467fa6b502ef8da63ee372339624" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 16" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk16.img" size="1474560" crc="3ad946e9" sha1="bd1ccb12765717affcfbabc5ffa021fe4d00216f" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 17" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk17.img" size="1474560" crc="efa4e6cf" sha1="fdb85f48647ea1bc1f62b61d769b9a53aa412ac6" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 18" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk18.img" size="1474560" crc="82c1fa70" sha1="16aeb9b567a517f146e8ede062f3a76f31363d05" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 19" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk19.img" size="1474560" crc="3f530320" sha1="b25f4837e1f5c9288bd8b86820328f54194cbd06" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 20" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk20.img" size="1474560" crc="593d9528" sha1="006c66168a64d2e60f059af50e53e2d094cb56f7" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 21" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk21.img" size="1474560" crc="233ebafc" sha1="93551dc7c6a45f379c22eef73d9f70f50ef86677" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 22" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk22.img" size="1474560" crc="77e575ca" sha1="a7723a262b4995409377d3450720e9bf26ab6f7b" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 23" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk23.img" size="1474560" crc="97acc417" sha1="7f6364a5315ad9650d932c3113eecd58090c93ec" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 24" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk24.img" size="1474560" crc="3e2bac89" sha1="b300dced6c447bbfb811f0306fbab6dc44f8a7f2" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 25" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk25.img" size="1474560" crc="cc5b541b" sha1="479a0f5b28577ea51a0599870f223356db18e688" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 26" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk26.img" size="1474560" crc="f8de7b6b" sha1="7dadf7a86e01317619aa89d7e03cc197a5bd0949" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 27" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk27.img" size="1474560" crc="7fecf440" sha1="913ef15084a6876dcb48431831216bfdb0228a5f" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 28" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk28.img" size="1474560" crc="f137bfbf" sha1="aefb6af9f357e953dae8ad728b9e543b40218276" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="Viewer Disk.img" size="1474560" crc="b0b24503" sha1="fe6f981f8ffe664b4b69582c6ff1d7ff5aa69de5" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office42fr">
+ <description>Microsoft Office 4.2 (French)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 1 - Installation" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk01.img" size="1474560" crc="b1caf505" sha1="2806f1c77cee3eea1d7d14c2b68cdd4a7fd6cef9" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk02.img" size="1474560" crc="ff5f3086" sha1="2447b68b6eaa12e4edc021eb51ee1ac97378aa3a" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk03.img" size="1474560" crc="6f5e3b7e" sha1="869c42056402476dc8b6c2ed99f6f9ad70d76bdc" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk04.img" size="1474560" crc="96a73d6a" sha1="869e80a82a6546f4c7174c978c7c86fa00ad4e81" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk05.img" size="1474560" crc="ea4cbf1b" sha1="5f2789a4af0d0ce489f6216623ac08f597de20f4" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk06.img" size="1474560" crc="818a82ea" sha1="b833ad0be0073cc95d6d867a5f2816bc0cc15043" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk07.img" size="1474560" crc="b577e454" sha1="fe0343b677dfd27302dd52f80b1e877a768f0e36" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk08.img" size="1474560" crc="3710b217" sha1="a3df741494d9038aadfbc181f290dedc0fc7ad72" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk09.img" size="1474560" crc="54b04889" sha1="64ef4f8076eb47042883a2e1fc9859fb421b56ad" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk10.img" size="1474560" crc="8ef6da72" sha1="17a1226186d206c5edb46be33715723f62ff7f9b" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk11.img" size="1474560" crc="e0489874" sha1="19651469f99f9668e74c3f5367c4ff6a74866c3d" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk12.img" size="1474560" crc="625064e4" sha1="95a932b9a7a19642330f2c27b1eed986921d56f6" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk13.img" size="1474560" crc="83f1e7e7" sha1="bd689bc8bb1a7ceb967497131cc8181cb9434c2a" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk14.img" size="1474560" crc="7dda7f88" sha1="51aae18f8259d2e2c4d5060c5addc3501714634b" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 15" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk15.img" size="1474560" crc="25ee86dd" sha1="9a0606b0a2f5011094de632ac3bf43c33ac70c36" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 16" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk16.img" size="1474560" crc="6766a390" sha1="07edbaa6647bafffa23ff34354f2d42d42ea0769" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 17" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk17.img" size="1474560" crc="311c2c8c" sha1="2ee9a47a823b514309a91e470c71eca8acb4cf35" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 18" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk18.img" size="1474560" crc="7efb157a" sha1="9a34ec6f2dc5b8246ec3e03a8f58ee29f326e085" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 19" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk19.img" size="1474560" crc="5f631633" sha1="c31167871b08bc9d76a4c15076f2b1cb6def775e" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 20" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk20.img" size="1474560" crc="104835f3" sha1="ab789b005a0c9424a203095e1454b789f35e2adb" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 21" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk21.img" size="1474560" crc="574d4151" sha1="861deb8746e4470750e974f18d75b7960b4e1074" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 22" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk22.img" size="1474560" crc="909012dc" sha1="94f0504664618e53634cb34cfdffe3820cd42c60" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 23" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk23.img" size="1474560" crc="e1c660af" sha1="c4da11922c0f1842984f2b2cca1a4e080e788f94" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 24" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk24.img" size="1474560" crc="28360f02" sha1="5a05310d514f57ab7f24987a0fbafef514c9d4ce" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 25" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk25.img" size="1474560" crc="f326683d" sha1="dc54f537d3204949712d6445e18f3f902c080086" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 26" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk26.img" size="1474560" crc="9c25ba1c" sha1="b6ba86369230b99d0691b7e1c4c0744730616824" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 27" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk27.img" size="1474560" crc="2629bf13" sha1="9f25cbc6bfd3f1c71829fcaa33e55c7fd8736d32" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 28" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk28.img" size="1474560" crc="629747ac" sha1="3049c949057a4c6d2a69a09c9d866d98e69ab86f" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 29" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk29.img" size="1474560" crc="4f8ff9c6" sha1="1c8f192bea42db5734fda2fb53b8981ec41854ad" />
+ </dataarea>
+ </part>
+ <part name="flop30" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 30" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk30.img" size="1474560" crc="dbfa1010" sha1="ea8201a149b50900e4a7aed7762cf9ce5fb1d064" />
+ </dataarea>
+ </part>
+ <part name="flop31" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette 31" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk31.img" size="1474560" crc="755d0704" sha1="1142035a585a38d628aa7fd5330371900608f9f2" />
+ </dataarea>
+ </part>
+ <part name="flop32" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Visionneuse" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disquette Visionneuse.img" size="1474560" crc="3cd0dc72" sha1="e284e3dcd5fc1b2f57fe16be1d782663cc2c5a7e" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office42it">
+ <description>Microsoft Office 4.2 (Italian)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 1 - Installazione" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="af099fa0" sha1="e33222630f5fdb4112173761808fc0c885a29208" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="8370f403" sha1="ac2a266b36c8a770d18002c2f2e8e362435120f5" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="f4dfd1e6" sha1="f258b9efd9a8cef24c4e729c560752844aeb7de1" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="190fb672" sha1="45134eaeedffd943c9b25e1b24be5587c8a8c7c5" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="5147c47f" sha1="fcbc5f3ebd9bff7a1176a7ff93fa23f38e95bb1e" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="a940fccf" sha1="9d7bc1e8c666e5edba71ef35c1be5337cd02a2e4" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="3d125d86" sha1="c7b67c502f989829035b900860fe91b7873af457" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="618d17d5" sha1="322e68dfa8c5d5953c57445c90cb15e0323926fe" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="87c252ae" sha1="d1ea14a20efbe5c19d0acd10b6bb49512212b227" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="51dff582" sha1="40fb9db89a42ead242ad42f6bd1a99d1c6005697" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="7c8c479c" sha1="01f1f5837cfbd62375e3bdaf4e9996c243920a15" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="c9061829" sha1="4bc5dd0e601d3b052ead1fa38b89106ad1f2cbdd" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="7311af0a" sha1="faa6335bc1d295d9461e8f758552ec25f4eacb78" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="fd5aa447" sha1="a389e5cb4688fa2632d7ceac6182f72468e91696" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 15" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk15.img" size="1474560" crc="9a10b915" sha1="7798c7906dc3f8b5e9c1b67e9c31afe1b16f5016" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 16" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk16.img" size="1474560" crc="be2aa7cb" sha1="f068d3f1f3ab962a04d20c4a1234290aa3ddd594" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 17" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk17.img" size="1474560" crc="0453b2dc" sha1="5d93360884398870ab1345135a27ca8d4e2c4c0b" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 18" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk18.img" size="1474560" crc="271c7605" sha1="ba72249350b969651192956251b3f00c43cfd59a" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 19" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk19.img" size="1474560" crc="788c751b" sha1="f95dfce34ef010e3006cb9fc84762bc7ab8351b3" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 20" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk20.img" size="1474560" crc="663a86de" sha1="19ebdfeb3808318d5bbdadedcf3a1ed39f9e8a50" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 21" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk21.img" size="1474560" crc="e2bcb579" sha1="aa265a247a248a8ea9413ff351998cd28b977bfb" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 22" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk22.img" size="1474560" crc="f3abfb53" sha1="483c6a90e09c1a723abaf475959bbf5f94193e1c" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 23" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk23.img" size="1474560" crc="b4bc91e6" sha1="395ac4d2f5802bc74a73105edd45cfa40cdac0e9" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 24" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk24.img" size="1474560" crc="0b09e7e9" sha1="c7c3647734c19c3fc8fa3203a28a2dd8b3dbb58c" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 25" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk25.img" size="1474560" crc="06f5fb82" sha1="0c68e81ff7e2476315da265b783026427bb9ba38" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 26" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk26.img" size="1474560" crc="c5c7315e" sha1="5a89535d30ba7ccb1b27d001eec8760d5b4126f4" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 27" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk27.img" size="1474560" crc="d8cfff91" sha1="415db6e986433907d9ddd02781391e2e06bb94b9" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 28" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk28.img" size="1474560" crc="7bbea5eb" sha1="0b5eba49f13986430859731e07195731a370b195" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 29" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk29.img" size="1474560" crc="0377f6f2" sha1="f4d3a61b1c21416ab7233a0f99f7881bfed96e54" />
+ </dataarea>
+ </part>
+ <part name="flop32" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Viewer Disk.img" size="1474560" crc="74cce1b6" sha1="a6f441d654d3f7bef30253489ca2848dca9cf17e" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office42nl">
+ <description>Microsoft Office 4.2 (Dutch)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 1 - Setup" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk01.img" size="1474560" crc="daab0c1b" sha1="0e695d5e669bf11e23dba303cd4945963c25d8ca" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk02.img" size="1474560" crc="9c0f0f3c" sha1="346cba216f3888f6ff0c08066fbfd852fb0f6f28" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk03.img" size="1474560" crc="9122c757" sha1="585ff591879ba88c07670e498b35e83389140cd8" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk04.img" size="1474560" crc="0f3f6775" sha1="7f6fda2ff85c9756605242dd5a7497c5a566dec8" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk05.img" size="1474560" crc="0f4ce6fa" sha1="8643b0e6216cbfefd90532eec2cc1f6bb765771a" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk06.img" size="1474560" crc="4b583121" sha1="5ec48d9f4431737699f8dd2c9951a108d3d9e76c" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk07.img" size="1474560" crc="119f40b1" sha1="8f41b9349e2c5e43609448fb0e714fb0a960de5d" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk08.img" size="1474560" crc="02c5475a" sha1="2ba9caa08d62659d3a31abc7d6aad1beed5b9450" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk09.img" size="1474560" crc="b5565f45" sha1="1ea219f83baa5ee6fc0acb2cce5f7412a8423715" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk10.img" size="1474560" crc="d5d94143" sha1="330d656d612a3fd76569b01cff6f3f8f3b754d11" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk11.img" size="1474560" crc="b2446806" sha1="4baa5d9516cc46464166f32dabdd14d1d973cf4b" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk12.img" size="1474560" crc="803368a2" sha1="d297eae7d59c034546417801a7a7893267b13001" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk13.img" size="1474560" crc="00c24974" sha1="aff4716754f98d8922e65e5624837146970e47a8" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk14.img" size="1474560" crc="ba4ef2d0" sha1="db252bbd61b8042fcf4c0ad82e4a12fe0d6b7d29" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 15" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk15.img" size="1474560" crc="dea5e4de" sha1="e517a39eb3ec276c54579c8f59ec6d3049c62761" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 16" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk16.img" size="1474560" crc="92144f37" sha1="19133f32c7631e5557b4c64d618737e62f3e3c20" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 17" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk17.img" size="1474560" crc="a83becee" sha1="6fadab308ec1332155510f732d3dde93320b9e1d" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 18" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk18.img" size="1474560" crc="9d64ffad" sha1="165a3fe00672cc4ce7f604e660928986564e3a3a" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 19" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk19.img" size="1474560" crc="73d6c7ba" sha1="0ebc2bdadc014510a0e715d180ad64d0d2a28e70" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 20" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk20.img" size="1474560" crc="ad197d0a" sha1="b29292b97ae9750d2189e55820b2f0bba457e1a8" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 21" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk21.img" size="1474560" crc="691dc0e7" sha1="69caca0d0b82c11bcbb4ec5a1af399925e83e463" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 22" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk22.img" size="1474560" crc="e307a73e" sha1="7c290c32dec5c10baeb7f50a8e9f1acec1c0593c" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 23" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk23.img" size="1474560" crc="4a34c839" sha1="d30de7eba0c3422257e633101186dff42f140326" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 24" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk24.img" size="1474560" crc="3c67efc0" sha1="a04613f78a6814ec7f07560bf03ab8e96d0f327b" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 25" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk25.img" size="1474560" crc="24baf00b" sha1="9d5d6595677c74e3de14d271d579482d7b69ba90" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 26" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk26.img" size="1474560" crc="cb6cea84" sha1="212e53dde6d207266a55edc8b2f31310721409fa" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 27" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk27.img" size="1474560" crc="f7f38687" sha1="9e8053b110b2c18d57e9e2670ae7f2d1d539eefb" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 28" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk28.img" size="1474560" crc="bfd6dc90" sha1="83d7dedd37d42fe7a05ae00088a2037af06a70e8" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Viewer Disk.img" size="1474560" crc="55a025e3" sha1="11d69ccf2be65b228534ec4e1ee63877f8ff7d56" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office42no">
+ <description>Microsoft Office 4.2 (Norwegian)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 1 - Installasjon" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="b6d51d51" sha1="dd63eb20e0f9c1bab905e2ddd8a9d3fa96ec5e0c" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="d683ba07" sha1="694e6900d99c22ff542bdd1cf168962433d2c09f" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="9b539735" sha1="f5d5d5f0066996f46d0b0d973465429e6de5c4fb" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="0efc1e3d" sha1="f72246cb85d60ccb729c6a46a328fe360ba6a732" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="7cace157" sha1="e12a9c2163d75965dadf6312a9411108c1e7f46f" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="b1316eac" sha1="c53cd5cbedd9405751bbdb100677f214d5f52b3c" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="5955d127" sha1="9753cc71b1135cc271a78aa2f323d7701e702e4b" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="a43cdc25" sha1="410aaa3cfe8e468485fdc179850662955147cf82" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="004492d2" sha1="da08ba22922c04a724548c663e4d6728752b0da2" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="1bb0d314" sha1="40167b597da21712e1377999d46d94237e25fedf" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="aaeaf451" sha1="d24dd5d04bdbd5bd9ca5213a4331608095cd4ae9" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="e86ed823" sha1="288a7eb8f944fca512fbdedffe6bfc61c8404671" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="8f509bc4" sha1="5cd74daad6076f56d95ed1b64eda8dba7df5580c" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="0dcfe2f3" sha1="c0ce5dcbec856693f1122fe5df828e96a8b4c816" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 15" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk15.img" size="1474560" crc="8bc69b08" sha1="3eedb050a10fda057b67f71ddee8952ee9862a72" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 16" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk16.img" size="1474560" crc="e2d73071" sha1="075d0d9d095bf78fa7edf1fb329df059e12816ce" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 17" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk17.img" size="1474560" crc="f0b4d978" sha1="ca1fe777c3c2577fc4f50da880a9d72206ebe00b" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 18" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk18.img" size="1474560" crc="6f432310" sha1="1984cf25ba293dd4d91c25148c661923e02a1874" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 19" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk19.img" size="1474560" crc="97ce99ad" sha1="b6992f5109ef1325abf9c7a5275cf6231d1c6740" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 20" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk20.img" size="1474560" crc="e8be489b" sha1="e477322627246294aa61a4042a72c6945b7e83f7" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 21" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk21.img" size="1474560" crc="f5d321af" sha1="ed78dd643c45e41accc3060a00b37944a6c5f65e" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 22" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk22.img" size="1474560" crc="c1d0ce57" sha1="c66ae3e8e30b3575c7e0095a6b525844803f2772" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 23" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk23.img" size="1474560" crc="84802abd" sha1="0098cc9369f8975b5469f3be6a781edfbe3e7249" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 24" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk24.img" size="1474560" crc="b707acef" sha1="b9c2984595578309c8b0b3a8a3d9c7ff703902cd" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 25" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk25.img" size="1474560" crc="6c3ec005" sha1="12ea89976bbb83a57ac9f71502f95242c57c1c0a" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 26" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk26.img" size="1474560" crc="bdba0333" sha1="bd6cfd710b19809083f206c89821f62a9f3cb572" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 27" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk27.img" size="1474560" crc="16551d5e" sha1="78c1937c96068d83099f7474a28595be83cf3cec" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 28" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk28.img" size="1474560" crc="013727ba" sha1="eb4a99ab31353c40fadb7e26103f401334386843" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Viewer Disk.img" size="1474560" crc="8a1cfa87" sha1="3129bc7ca7350ec86e882bababa9fee84e66530d" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office42sv">
+ <description>Microsoft Office 4.2 (Swedish)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 1 - Installation" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="99ca6229" sha1="79a2c00f9f74e7323126d521119faf455535def9" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="f7a38b90" sha1="eafc27d7798090a3b47852a95d9a4c1a8c2c02b1" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="8693b471" sha1="b8eb5edbe75bbc2a8f7f05e028c1c9de5c2b38a0" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="ab327d67" sha1="536b58b3ac333b889ca3798d123917a71daa30fc" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="2a79d860" sha1="7b624380189e9b5ff425a0dad102551771b0f4c0" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="364ff1c8" sha1="4b7b9fe2f5ade46fed85f54bd6ab4d41ba17e5cd" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="c3a17f4b" sha1="4492ba83d6a9277df3bcd7b14628053c0b537ae0" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="80f53ead" sha1="19d98024166c28233ccb12521b2045ba3136d3c0" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="5c7f50b2" sha1="89dda26bb0b9391a493fd8f13a489665c6cfdb6e" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="d84bd97f" sha1="236f07cbfe08c66d10b23aebfba77d9487e52d34" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="a90433f6" sha1="a817382241805f83e2b5d05bef37c9a4386fd8e0" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="374f5c89" sha1="dd14435a09c5849bb61c074645cdf535099b98d9" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="bf4e491a" sha1="8e9e003d8d4ae01e2c1a058f554910d4ca045d9e" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="47cd2701" sha1="3c4ce49a2e4bd93ab1793d0050c80e8b3aad940d" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 15" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk15.img" size="1474560" crc="82423f47" sha1="27b2c3ec6b0ed5f45b074aea2c3db7b759c34e3d" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 16" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk16.img" size="1474560" crc="eb8a33d7" sha1="a9e040f60e5b35471f3e02c78a68d0cac01f06cb" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 17" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk17.img" size="1474560" crc="0b507a03" sha1="6677a3b9cf27ef83cbc9a94c589523df43522495" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 18" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk18.img" size="1474560" crc="30ccb24d" sha1="9e20ba8bb7fcc60a3ca3860b71260660fb7f7ab5" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 19" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk19.img" size="1474560" crc="cb81867b" sha1="a5d5c84fb11195fe7db08c5df7d00c18205b9481" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 20" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk20.img" size="1474560" crc="e3281b46" sha1="adb0f0e5eec3906e075181e44496c89a2630b236" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 21" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk21.img" size="1474560" crc="da7b938a" sha1="f03892a2e1f77f6b95c9b44a4f1cd109d59922e5" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 22" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk22.img" size="1474560" crc="d83e8070" sha1="d75e46c957140e701bfd17ce6cc772ec85fb2c79" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 23" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk23.img" size="1474560" crc="218e4be4" sha1="c422891cd5df731ad398070b72d0ba414909b15f" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 24" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk24.img" size="1474560" crc="2df57ebb" sha1="bb239ed297a2a1ed4d0a16f561e2c0b1f852d299" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 25" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk25.img" size="1474560" crc="248d949e" sha1="37fe8c23c9416b707f48df3b09911495bed11adc" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 26" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk26.img" size="1474560" crc="faeec71e" sha1="6e147cd7e9b52c349cb3c4b41400bc70d57077af" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 27" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk27.img" size="1474560" crc="430e22b0" sha1="95dd3c02c525aa5a9deecac2f458195ac783e012" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 28" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk28.img" size="1474560" crc="813968b2" sha1="89a0d03f79997d5803151eb780f76baf3930527a" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Viewer Disk.img" size="1474560" crc="6da97be9" sha1="c6531f6eedc0795f0b4d246152f1bc082cbb8d1e" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="office421">
+ <description>Microsoft Office 4.2.1 (US English)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 1" />
+ <dataarea name="flop1" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="1584659d" sha1="789965dc878169db5790630e9cbd19c808e553f9" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 2" />
+ <dataarea name="flop2" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="0904fefa" sha1="6cf54bbb90b263e188caf9b8a5ff30f1ec74d3a8" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 3" />
+ <dataarea name="flop3" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="91a5ed8b" sha1="273c4e44b8a0ca1faf5ff34711f6d45e333489d5" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 4" />
+ <dataarea name="flop4" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="292c9ccc" sha1="2c9282665451e21fc5ee03e56653aa893dac4323" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 5" />
+ <dataarea name="flop5" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="0f4543a2" sha1="f1d2f3a26de29383a4d4f479f061bb3278987263" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 6" />
+ <dataarea name="flop6" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="2152d59e" sha1="aa998d143924740955b873f77ce3faa387c3be7b" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 7" />
+ <dataarea name="flop7" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="13947265" sha1="5fbc7a93bda658bec7678da810d529f9565f2458" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 8" />
+ <dataarea name="flop8" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="054cc9d3" sha1="16a24e618f9d8e180dd328cc649389727b96d077" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 9" />
+ <dataarea name="flop9" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="1b6c4377" sha1="01f1b5a41041ad1b732434d623e3c9dc5da0562d" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 10" />
+ <dataarea name="flop10" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="0627187f" sha1="6e877f9a6abaee231199779062e04cfb9f1fe17e" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 11" />
+ <dataarea name="flop11" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="bd25637e" sha1="b604f18b46ec668c2a492cd4441c890b1e8f87db" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 12" />
+ <dataarea name="flop12" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="752d48cf" sha1="1361078c09c369e00b5902cdb736fb3ab62a90da" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 13" />
+ <dataarea name="flop13" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="772444d0" sha1="df8fccfb5733cd52c6adaca83edd9fb76b87b966" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 14" />
+ <dataarea name="flop14" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="9c2aa453" sha1="530efa8b8b5059732e54d2b86fe91b77b9f5f8b5" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 15" />
+ <dataarea name="flop15" size="1474560">
+ <rom name="disk15.img" size="1474560" crc="4334b3d0" sha1="8bf3db6a37a1608645ddc7ea37fcd8aca206f626" />
+ </dataarea>
+ </part>
+ <part name="flop16" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 16" />
+ <dataarea name="flop16" size="1474560">
+ <rom name="disk16.img" size="1474560" crc="dad7b3ef" sha1="a4678900033bf7063381e0812b0f6e82b17f33e2" />
+ </dataarea>
+ </part>
+ <part name="flop17" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 17" />
+ <dataarea name="flop17" size="1474560">
+ <rom name="disk17.img" size="1474560" crc="5d956733" sha1="6414c049f405433411ddf43f22087e3237589f61" />
+ </dataarea>
+ </part>
+ <part name="flop18" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 18" />
+ <dataarea name="flop18" size="1474560">
+ <rom name="disk18.img" size="1474560" crc="a773a378" sha1="b41825b99ff305619e5de96e6b156a0aee309872" />
+ </dataarea>
+ </part>
+ <part name="flop19" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 19" />
+ <dataarea name="flop19" size="1474560">
+ <rom name="disk19.img" size="1474560" crc="42a7fc7e" sha1="0d7534636127a537b3a401493fa88e64de8c625c" />
+ </dataarea>
+ </part>
+ <part name="flop20" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 20" />
+ <dataarea name="flop20" size="1474560">
+ <rom name="disk20.img" size="1474560" crc="34d746b2" sha1="02588b67a07da37de77ec6e8f5f14fa5f3cef107" />
+ </dataarea>
+ </part>
+ <part name="flop21" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 21" />
+ <dataarea name="flop21" size="1474560">
+ <rom name="disk21.img" size="1474560" crc="a7290f8e" sha1="efc4b20b91125afb19ae41fba81be12f7557806f" />
+ </dataarea>
+ </part>
+ <part name="flop22" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 22" />
+ <dataarea name="flop22" size="1474560">
+ <rom name="disk22.img" size="1474560" crc="7ffdc321" sha1="677a4e9e84bd3271ffcd5bd674ecbcb10bc81f7d" />
+ </dataarea>
+ </part>
+ <part name="flop23" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 23" />
+ <dataarea name="flop23" size="1474560">
+ <rom name="disk23.img" size="1474560" crc="0f93a6ea" sha1="fd331192bd5d8195bf6d1fe607df23fc22c3f2b6" />
+ </dataarea>
+ </part>
+ <part name="flop24" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 24" />
+ <dataarea name="flop24" size="1474560">
+ <rom name="disk24.img" size="1474560" crc="8db24cae" sha1="fb79273394c8bb7ac47bca3a9391b70f5f2acf50" />
+ </dataarea>
+ </part>
+ <part name="flop25" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 25" />
+ <dataarea name="flop25" size="1474560">
+ <rom name="disk25.img" size="1474560" crc="7e7a530f" sha1="3de058a404f18e478bd67b16e3b00f0e7e7bfba2" />
+ </dataarea>
+ </part>
+ <part name="flop26" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 26" />
+ <dataarea name="flop26" size="1474560">
+ <rom name="disk26.img" size="1474560" crc="58a7c09b" sha1="e1183a453a19331de3cb9d372ef88cade8caab00" />
+ </dataarea>
+ </part>
+ <part name="flop27" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 27" />
+ <dataarea name="flop27" size="1474560">
+ <rom name="disk27.img" size="1474560" crc="ac2d9617" sha1="3f71e2a43d59bf9baea1a8719c78093b4ddb4db8" />
+ </dataarea>
+ </part>
+ <part name="flop28" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 28" />
+ <dataarea name="flop28" size="1474560">
+ <rom name="disk28.img" size="1474560" crc="66656cdc" sha1="65eff6a995a806dde1bec412b3053a6334fa9da0" />
+ </dataarea>
+ </part>
+ <part name="flop29" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 29" />
+ <dataarea name="flop29" size="1474560">
+ <rom name="disk29.img" size="1474560" crc="2d641107" sha1="005c434843e1264e1ebc399ea02be1ec0652cf0d" />
+ </dataarea>
+ </part>
+ <part name="flop30" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 30" />
+ <dataarea name="flop30" size="1474560">
+ <rom name="disk30.img" size="1474560" crc="a12b1be9" sha1="3f95efb161c73095fd41fa9484cf3c6fb3af3297" />
+ </dataarea>
+ </part>
+ <part name="flop31" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 31" />
+ <dataarea name="flop31" size="1474560">
+ <rom name="disk31.img" size="1474560" crc="6bcae48f" sha1="5906048b9c43577dde54362daa66623cb4cfbb9c" />
+ </dataarea>
+ </part>
+ <part name="flop32" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 32" />
+ <dataarea name="flop32" size="1474560">
+ <rom name="disk32.img" size="1474560" crc="f30d794d" sha1="711e37f6ab24bf9cb4138178464eb9a7f4e7ecc8" />
+ </dataarea>
+ </part>
+ <part name="flop33" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 33" />
+ <dataarea name="flop33" size="1474560">
+ <rom name="disk33.img" size="1474560" crc="e7629f9f" sha1="cea9655cdb70d77ab07daa0b20ec5172194ffb36" />
+ </dataarea>
+ </part>
+ <part name="flop41" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer Disk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="viewer.img" size="1474560" crc="521c5278" sha1="872f5d9e232441ee57b62fd8121f422c7da4d066" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="offman42de">
+ <description>Microsoft Office Manager 4.2 (German)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 1-Installation" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="886acadb" sha1="73b6061c0716819d926cbb2222bd4152c1588f8d" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="e8c1614f" sha1="da0ea3d5796a1170e895198432170776d9eefa1a" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ptalk121">
+ <description>PlainTalk 1.2.1</description>
+ <year>1994</year>
+ <publisher>Apple</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="PlainTalk" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="cbf3538f" sha1="3f29fd9f9e24544c5069d90a16872afd17edae72" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="PlainTalk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="3e0f5aa1" sha1="02027310f12f098124b97a9db3ee9a548fa14c1e" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="PlainTalk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="dd8cec40" sha1="8a876241d9104f9353cc56f75e0a211e9849d617" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="PlainTalk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="5f0e040f" sha1="66d88a4d43ec12bbd79a2b27da18ef62e4ce4521" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="PlainTalk 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="6356ec12" sha1="abaec86d62949844cddf296c2fe21199d07102b4" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="pmaker50">
<description>Aldus PageMaker 5.0 (English)</description>
<year>1993</year>
@@ -3039,49 +5750,49 @@ license:CC0
<part name="flop1" interface="floppy_3_5">
<feature name="part_id" value="1" />
<dataarea name="flop" size="1474560">
- <rom name="disk01.img" size="1474560" crc="13a2eb9a" sha1="57c6ec46c3a3708895ee3e7fea63da7e48eecd08" offset="0"/>
+ <rom name="disk01.img" size="1474560" crc="13a2eb9a" sha1="57c6ec46c3a3708895ee3e7fea63da7e48eecd08" />
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
<feature name="part_id" value="2" />
<dataarea name="flop" size="1474560">
- <rom name="disk02.img" size="1474560" crc="be33175e" sha1="a1366c7f6379ac5905f3d2de169d54819d6ba52f" offset="0"/>
+ <rom name="disk02.img" size="1474560" crc="be33175e" sha1="a1366c7f6379ac5905f3d2de169d54819d6ba52f" />
</dataarea>
</part>
<part name="flop3" interface="floppy_3_5">
<feature name="part_id" value="3" />
<dataarea name="flop" size="1474560">
- <rom name="disk03.img" size="1474560" crc="863639ab" sha1="20edf0eb78fd89496ac437316cc88a1ab58873e6" offset="0"/>
+ <rom name="disk03.img" size="1474560" crc="863639ab" sha1="20edf0eb78fd89496ac437316cc88a1ab58873e6" />
</dataarea>
</part>
<part name="flop4" interface="floppy_3_5">
<feature name="part_id" value="4" />
<dataarea name="flop" size="1474560">
- <rom name="disk04.img" size="1474560" crc="9fd925c3" sha1="f70cb9ce0484a5ae247743f4105062ae7f6fc1f7" offset="0"/>
+ <rom name="disk04.img" size="1474560" crc="9fd925c3" sha1="f70cb9ce0484a5ae247743f4105062ae7f6fc1f7" />
</dataarea>
</part>
<part name="flop5" interface="floppy_3_5">
<feature name="part_id" value="5" />
<dataarea name="flop" size="1474560">
- <rom name="disk05.img" size="1474560" crc="d2e6f62c" sha1="3b0ddf1961daede5acaee9199feb49ed1787e3f5" offset="0"/>
+ <rom name="disk05.img" size="1474560" crc="d2e6f62c" sha1="3b0ddf1961daede5acaee9199feb49ed1787e3f5" />
</dataarea>
</part>
<part name="flop6" interface="floppy_3_5">
<feature name="part_id" value="6" />
<dataarea name="flop" size="1474560">
- <rom name="disk06.img" size="1474560" crc="763323d9" sha1="f03e4bf827500a5e3f81b256def24b29ead7665f" offset="0"/>
+ <rom name="disk06.img" size="1474560" crc="763323d9" sha1="f03e4bf827500a5e3f81b256def24b29ead7665f" />
</dataarea>
</part>
<part name="flop7" interface="floppy_3_5">
<feature name="part_id" value="7" />
<dataarea name="flop" size="1474560">
- <rom name="disk07.img" size="1474560" crc="f1585a37" sha1="7a1631fe8cf7ebadb616fd736a54f47dbfb0b6bb" offset="0"/>
+ <rom name="disk07.img" size="1474560" crc="f1585a37" sha1="7a1631fe8cf7ebadb616fd736a54f47dbfb0b6bb" />
</dataarea>
</part>
<part name="flop8" interface="floppy_3_5">
<feature name="part_id" value="8" />
<dataarea name="flop" size="1474560">
- <rom name="disk08.img" size="1474560" crc="db3c38e6" sha1="72533f9e2b28350c1e6e92ecc96e3dc38538f163" offset="0"/>
+ <rom name="disk08.img" size="1474560" crc="db3c38e6" sha1="72533f9e2b28350c1e6e92ecc96e3dc38538f163" />
</dataarea>
</part>
</software>
@@ -3093,55 +5804,103 @@ license:CC0
<part name="flop1" interface="floppy_3_5">
<feature name="part_id" value="1" />
<dataarea name="flop" size="1474560">
- <rom name="Disk01.img" size="1474560" crc="32778c17" sha1="7157acd292fc7391c5c0039a7c1f90de8c0bdf0a" offset="0"/>
+ <rom name="Disk01.img" size="1474560" crc="32778c17" sha1="7157acd292fc7391c5c0039a7c1f90de8c0bdf0a" />
</dataarea>
</part>
<part name="flop2" interface="floppy_3_5">
<feature name="part_id" value="2" />
<dataarea name="flop" size="1474560">
- <rom name="Disk02.img" size="1474560" crc="83d3273a" sha1="5e0113740d235d6b26e326efc1804707fc9fa1f7" offset="0"/>
+ <rom name="Disk02.img" size="1474560" crc="83d3273a" sha1="5e0113740d235d6b26e326efc1804707fc9fa1f7" />
</dataarea>
</part>
<part name="flop3" interface="floppy_3_5">
<feature name="part_id" value="3" />
<dataarea name="flop" size="1474560">
- <rom name="Disk03.img" size="1474560" crc="ae59d9ae" sha1="4ce5515ab650ac62f338ddb9683eb7c403631c01" offset="0"/>
+ <rom name="Disk03.img" size="1474560" crc="ae59d9ae" sha1="4ce5515ab650ac62f338ddb9683eb7c403631c01" />
</dataarea>
</part>
<part name="flop4" interface="floppy_3_5">
<feature name="part_id" value="4" />
<dataarea name="flop" size="1474560">
- <rom name="Disk04.img" size="1474560" crc="5af3839c" sha1="57e8740a4036dbd1323358735663ceadd768346c" offset="0"/>
+ <rom name="Disk04.img" size="1474560" crc="5af3839c" sha1="57e8740a4036dbd1323358735663ceadd768346c" />
</dataarea>
</part>
<part name="flop5" interface="floppy_3_5">
<feature name="part_id" value="5" />
<dataarea name="flop" size="1474560">
- <rom name="Disk05.img" size="1474560" crc="ddd2697e" sha1="95f7b1034324403e127865f12514308fe9ef4ad2" offset="0"/>
+ <rom name="Disk05.img" size="1474560" crc="ddd2697e" sha1="95f7b1034324403e127865f12514308fe9ef4ad2" />
</dataarea>
</part>
<part name="flop6" interface="floppy_3_5">
<feature name="part_id" value="6" />
<dataarea name="flop" size="1474560">
- <rom name="Disk06.img" size="1474560" crc="81ebe4a8" sha1="386875d33e6e8f36d65d398d990c964b243e53aa" offset="0"/>
+ <rom name="Disk06.img" size="1474560" crc="81ebe4a8" sha1="386875d33e6e8f36d65d398d990c964b243e53aa" />
</dataarea>
</part>
<part name="flop7" interface="floppy_3_5">
<feature name="part_id" value="7" />
<dataarea name="flop" size="1474560">
- <rom name="Disk07.img" size="1474560" crc="285ff02f" sha1="9a7db99eb10374bd2e44747a79fab0b2e679a17f" offset="0"/>
+ <rom name="Disk07.img" size="1474560" crc="285ff02f" sha1="9a7db99eb10374bd2e44747a79fab0b2e679a17f" />
</dataarea>
</part>
<part name="flop8" interface="floppy_3_5">
<feature name="part_id" value="8" />
<dataarea name="flop" size="1474560">
- <rom name="Disk08.img" size="1474560" crc="8cc3fdf2" sha1="d48e7550bdfb2a1a4a0b7d9b1d2b80905d71ede4" offset="0"/>
+ <rom name="Disk08.img" size="1474560" crc="8cc3fdf2" sha1="d48e7550bdfb2a1a4a0b7d9b1d2b80905d71ede4" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ppoint30b">
+ <description>Microsoft PowerPoint 3.0b</description>
+ <year>1993</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 with Installer" />
+ <dataarea name="flop" size="1474644">
+ <rom name="Disk 1 with Installer.img" size="1474644" crc="cde7e099" sha1="e86cad6d2779fe3781e5377c7b48938de5072bbd" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474644">
+ <rom name="Disk 2.img" size="1474644" crc="ebfdf739" sha1="1e69c724b4c067ba0212645c22973e9f6f87101a" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1474644">
+ <rom name="Disk 3.img" size="1474644" crc="e64dc5a2" sha1="40b319f1ab571a04a9fe4919fb9337dc2108244b" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1474644">
+ <rom name="Disk 4.img" size="1474644" crc="ec0ddcbb" sha1="96c05da916d35055c47fd369ed96d74673346c46" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="TrueType Fonts Disk 1" />
+ <dataarea name="flop" size="1474644">
+ <rom name="TrueType Fonts Disk 1.img" size="1474644" crc="d12618ff" sha1="d6da846d890e06499e2f14da1d6ae2fdf1887b06" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="TrueType Fonts Disk 2" />
+ <dataarea name="flop" size="1474644">
+ <rom name="TrueType Fonts Disk 2.img" size="1474644" crc="ee8a87bf" sha1="616bd41f1db84a971e32331105ada84e25d04373" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="PowerPoint Viewer" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PowerPoint Viewer.img" size="1474644" crc="b0c274eb" sha1="7a1a9decd9c661a20d1d0074a6da725935070267" />
</dataarea>
</part>
</software>
<software name="ppoint40">
- <description>Microsoft PowerPoint 4.0</description>
+ <description>Microsoft PowerPoint 4.0 (English)</description>
<year>1994</year>
<publisher>Microsoft</publisher>
<part name="flop1" interface="floppy_3_5">
@@ -3224,6 +5983,322 @@ license:CC0
</part>
</software>
+ <software name="ppoint40de">
+ <description>Microsoft PowerPoint 4.0 (German)</description>
+ <year>1994</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 1.img" size="1474560" crc="5faad435" sha1="de030887f8a92a24421d85b4b105174725e1970a" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 2.img" size="1474560" crc="bca4d88d" sha1="c6d739f04558961634f70933d219655ba4c9b2ec" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 3.img" size="1474560" crc="66c4b40c" sha1="6575f828ab3a7a0cf4c5d26709fde97e947623ae" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 4.img" size="1474560" crc="a1b28768" sha1="80d8b3402c401ff05e4f115e1d49d9f40f8d338e" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 5.img" size="1474560" crc="6890f2cf" sha1="14a1042855878df2736d0775f8d249b086450616" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 6.img" size="1474560" crc="02d2f9dd" sha1="1b69c42edb7481e4d2b7d1629fe4a3d4007f13eb" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 7.img" size="1474560" crc="4c710498" sha1="b105f8b5a885539473989942fdedd501afa6cbbd" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 8.img" size="1474560" crc="47af7530" sha1="9d369c24bebfc4bdea13ef7ab4c6d2e0ce32296f" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 9.img" size="1474560" crc="d5e94bca" sha1="6900ffc15d0778d576bb49e84d3ac06a624da195" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 10.img" size="1474560" crc="11b49b99" sha1="343c246e0878016911632b5e3e654c17c9d60fc4" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 11.img" size="1474560" crc="128ed16e" sha1="5150890c732fbb14675d9cd565dae26c68e9f5a7" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Setup-Diskette 12.img" size="1474560" crc="2c06f7f5" sha1="96c4a2d52da1672ee50f78c3f7385fc6c0ff4e7b" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Projektor-Diskette" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Projektor-Diskette.img" size="1474560" crc="ed54465d" sha1="b5a65d1957a553c16643ec229215b8d5a30eb8b7" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ppoint40it">
+ <description>Microsoft PowerPoint 4.0 (Italian)</description>
+ <year>1994</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 1 - Installazione" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="0ec61a2e" sha1="af290e3e84e64008c8ff6ef4dc6061e792e26650" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="7a9a2190" sha1="80c4371a978d667078abadda179260dcfbc846f3" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="d6886216" sha1="c04da5d17184ac420ed73fe1ea02031cb82323b7" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="8a1d9a8b" sha1="338d8fb6701c02fa3717ab69d9788eef3a451ad8" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="c920a56a" sha1="9763b42f487c2e1d764e3159a74ad73e7aae7fa7" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="597f2107" sha1="753af10c94d14dab37dcc535052439ab37c8084f" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="dbeb4add" sha1="7566143a28e8a96dc10bc9610c543e48385a754a" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="6d385835" sha1="d52af7df1087c7bfe8ea1442d426ad2d9a42f3ff" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="65101ed6" sha1="b66149fe127b43de1d7129f37d134d8927a5574f" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="b0893634" sha1="632167af777318df06470e8e341e4e53fec368e8" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="2651e95a" sha1="cd48203020f0d63ab3e6ef6e3318ccfeb61a700b" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="31b41d7c" sha1="1449897864ef33c2f524f5936eb79fbed92c8cea" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer" />
+ <dataarea name="flop" size="1474560">
+ <rom name="viewer.img" size="1474560" crc="f8cfc107" sha1="eaad40aad6d0d58fefd734f4083df9da455cc573" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ppoint40sv">
+ <description>Microsoft PowerPoint 4.0 (Swedish)</description>
+ <year>1994</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 1 - Installation" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="c3c57fc3" sha1="81620fce877a5440678bbbd1ccd218b02d1971e5" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="a9542bc6" sha1="e584e04bf4c359bd687f2fc4dbfea260959a0474" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="659c00a4" sha1="d22168c778d84e3193dd416cfbedbfa14c8a0c12" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="d7eecb75" sha1="2fb4aea9682cbeac3117ffefce4103511fd06e87" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="9f7bb9a4" sha1="2bec74e70b13c7f6a10a16f20484e808d167320f" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="750d5955" sha1="b1dd7c227eb2375a86a0e342bfefe5dc8a2b2ff9" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="42b3ea55" sha1="9a50f85960eb7e2f7fa144d411f42e7bbc71391c" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="81b3cd1e" sha1="ecbcf5ddfd508f0bf75ed5ad0032b027f6df85c2" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="be10d3dc" sha1="b0b4d22279d962421b69de83a26022de4c2394f4" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="02f35d8f" sha1="54d653f5d69cddf593ee2a732c441e40c522cab9" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="7b516100" sha1="edd7ef1d2d00acfc623220e30eece5ef6912a406" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="6b12ce31" sha1="578a2b9eedf2515ef9f61849c2f54cd8a9d1a173" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Viewer" />
+ <dataarea name="flop" size="1474560">
+ <rom name="viewer.img" size="1474560" crc="44014914" sha1="aaf6a246452ebf9a716588ea1b3c7dacecc6723a" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="qxpress211fr">
+ <description>QuarkXPress 2.11 (French)</description>
+ <year>1989</year>
+ <publisher>Quark</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="QuarkXPress-211.img" size="1474560" crc="3a82c753" sha1="9fa67ade5e8c577d031a5261b7592edf43c6d6b2" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="qxpress33">
+ <description>QuarkXPress 3.3 (English)</description>
+ <year>1994</year>
+ <publisher>Quark</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Program Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Program Disk 1.img" size="1474560" crc="1785fec7" sha1="93f3ca94bf12e59a8d11af64c2625d04503109f5" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Program Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Program Disk 2.img" size="1474560" crc="f107b76e" sha1="a5db9f02fb251c6e99aae6f6eb3e445f1dd69abe" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Program Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Program Disk 3.img" size="1474560" crc="642aac41" sha1="1614033aac23688f238cacdb3daaa123b09e8852" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Apple Events" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Apple Events.img" size="1474560" crc="dd5d7f61" sha1="444dbfe3936db8e98f808220c266d244057c63e3" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="EfiColor XTension" />
+ <dataarea name="flop" size="1474560">
+ <rom name="EfiColor XTension.img" size="1474560" crc="74cd0565" sha1="91e8b107b69fe35d3681cf9775354e1ec7754fe7" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Tutorials/Samples" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Tutorials_Samples.img" size="1474560" crc="ad36f5b9" sha1="41b1656f940cc5c0acfc9d346ea42b78426bb9f2" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rsg45a">
+ <description>Ready, Set, Go! 4.5a</description>
+ <year>1989</year>
+ <publisher>Manhattan Graphics</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="af781736" sha1="20de9d9be3e2074ed66ed2a65a8e7b4c7f684155" />
+ </dataarea>
+ </part>
+ </software>
+
<!--
These disks were bundled as part of a single package that also contained:
WordPerfect 3.0
@@ -3272,6 +6347,73 @@ license:CC0
</part>
</software>
+ <!-- Requires a PowerPC CPU -->
+ <software name="softwin30" supported="no">
+ <description>SoftWindows 3.0</description>
+ <year>1996</year>
+ <publisher>Insignia Solutions</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 1.img" size="1474560" crc="2b7fb1d9" sha1="660da9b7f7ba2977c8467030d08dc1b29e162d58" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 2.img" size="1474560" crc="8e2d1383" sha1="5126617dbcf199872d4786489c76ea6229b117ba" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 3.img" size="1474560" crc="37d595bd" sha1="16080dc773ad7fae198ea0bbf814419c3c158eea" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 4.img" size="1474560" crc="36a989dc" sha1="99bd6875da731611a711c7b1f71f9b36debc5cf5" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 5.img" size="1474560" crc="0fd7b1ec" sha1="78f09de983063a86c9cb829559bd988f1d100e80" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 6.img" size="1474560" crc="3bbd3db0" sha1="f61e4ff320e73c10555bbf962c1f8f752ad94f6a" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 7.img" size="1474560" crc="2f5def86" sha1="deccb205d04af943d862255d7352dcce9055ebe2" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 8.img" size="1474560" crc="eabde44b" sha1="e3bb54709134aaaa8601813da5d2f091119aadcd" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 9.img" size="1474560" crc="9a6b9941" sha1="55734726f2d772a99d748b36a6bd6f77d355e19f" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Win Install 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Win Install 10.img" size="1474560" crc="154f0faa" sha1="8963c2db51406fa88580903a0e42f07530c6bc3b" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="symcpp60">
<description>Symantec C++ for Macintosh 6.0</description>
<year>1993</year>
@@ -3296,6 +6438,48 @@ license:CC0
</part>
</software>
+ <software name="symcpp70">
+ <description>Symantec C++ for Macintosh 7.0</description>
+ <year>1994</year>
+ <publisher>Symantec</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk #1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk01.img" size="1474560" crc="53dc4601" sha1="f98b4b0df5da33097e02b357e0072ee678325cf5" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk #2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk02.img" size="1474560" crc="1fa3618c" sha1="b11517ca4b7960164e8c2952505e1ab7f94add09" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk #3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk03.img" size="1474560" crc="5bd4628e" sha1="03aa890ca987fa4d7fa253535892287b39a371c0" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk #4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk04.img" size="1474560" crc="29d5cdcc" sha1="885b5395cbeb6cabefc1dc3abbbd93b9db2aa918" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disk #5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="Disk05.img" size="1474560" crc="af4cec3e" sha1="46a2950c674870de12cf66d4b9d354234f9fb65b" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="AppleScript Setup" />
+ <dataarea name="flop" size="1474560">
+ <rom name="AppleScript Setup.img" size="1474560" crc="7b37f0ce" sha1="d08d47511a26200fa117a3d153abec5f1b61f190" />
+ </dataarea>
+ </part>
+ </software>
+
<!-- Requires a PowerPC CPU -->
<software name="vellum269" supported="no">
<description>Vellum 3D 2.6.9</description>
@@ -3315,6 +6499,922 @@ license:CC0
</part>
</software>
+ <software name="word60">
+ <description>Microsoft Word 6.0 (International English)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="5451b485" sha1="99948405f74e6ea3fc7a58911ddbd3af47df8753" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="d84fca21" sha1="16d2d0c6725ca169d4edb99f3266b8124291f6cf" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="d72ce1f9" sha1="304a050a5dc7f532323f6ee73d7f42463156895c" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="e61102ee" sha1="d39f52758e4d72411d8722687b39352739345db0" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="1d60717a" sha1="fff3316417420176f66226f461cbe2db70d87434" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="75fc3816" sha1="9ebd75823e4a031717ab2ff812ebac5072c5b187" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="aacb80dc" sha1="efa2d6f1b888be5c0a3d490022efbc49ad6c67aa" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="ba4b9f03" sha1="2e45b486c38915a4c0f0c396b616c46c85c40eaf" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="065bcb5c" sha1="ce02e776360a90526b171a0836e8ef60469628a9" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="1964bcdd" sha1="1ffd9c92e37149fe84b571040fc640d201c69249" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="6a6b206c" sha1="bcfac459f3e3d10abc6abc1b996718c633e5954e" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="d4530f01" sha1="59c9012a31154f541b9a1a4ad06b63bdedbcd780" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="f650432e" sha1="1a2ab6e191085a4dc4c3c35eb0b5a87fcc619d14" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60da">
+ <description>Microsoft Word 6.0 (Danish)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 1 - Installation" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="d1a74135" sha1="cae7f53c74ce5ea19d6bf043d3ebd2b5c628bc10" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="19fcbd70" sha1="36de7fedf0880c639edd9719a378d44dd3eff580" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="a9a3c531" sha1="5a43dd32ff8e470d5f93e268096c2afeab90f27c" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="65388fd3" sha1="cf89f29c3f535f00525c42cb26c53e420877177d" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="34005e83" sha1="32f9943b168b13710273d523ed9bbc7853998e3c" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="3e407fc8" sha1="3f519062e6aa4c45a84d169017df48857ab21cfa" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="ec6a4924" sha1="2af1b7faec588675031a09d77d5527c559f8c315" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="76a622ff" sha1="cbce57c476ffd207509251c0d5b3b24df4330ab1" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="e3306a6c" sha1="52c8df3438906c700603ccf61e4be84147001822" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="07d962b8" sha1="58fe7d68b4758d229a69dfebab3ca3c2522263fe" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60de">
+ <description>Microsoft Word 6.0 (German)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="96d65b6e" sha1="f0b262feb8d006cdbe6d497781b68376e21c79c2" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="539643f0" sha1="ef8488bd972e0ed3f904807de0d2d631634845a4" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="5ba5e5b7" sha1="0d86bc1563cf480a2029b8ce25b4f0d69f094798" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="4ef74611" sha1="c7b495e31b8ba73abe1aa22ef95f42244c8c686c" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="c2f7c047" sha1="e9f5b1e8e759d13b22663f917e4c688682174db9" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="97a92429" sha1="83d932b05fb1daa1c0e970ca4875627533873326" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="1ebcb9ee" sha1="2c4ab4819e899e486273244f700753a64290e89c" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="dfe5eb27" sha1="cd009a32288a1df52ce4252600c83501b1975ddb" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="0b5660de" sha1="0be05a7fc78b8eed35e070b0627b88ad7199aa5b" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="9ef17db0" sha1="3c54754e544167d7b26329313f04532747c4fd7a" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="4bd4a8f8" sha1="b6944c63a39f5ee763ea26415b24e12e97cba69a" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="06bf1708" sha1="8bb2bdc597990ceaeb9670272fb23607c5c84aa3" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="bd37feb7" sha1="d50ebe0beddf029f6631d8375967ebbeb08242ec" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="568f329c" sha1="fc6c1a0b49ada85eff2d3509ce8c275877a77960" />
+ </dataarea>
+ </part>
+ <part name="flop15" interface="floppy_3_5">
+ <feature name="part_id" value="Install Disk 15" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk15.img" size="1474560" crc="1f1beda5" sha1="0a330cb04a57339d7c8c39cec42d1dbbe0d58b04" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60fr">
+ <description>Microsoft Word 6.0 (French)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="82550af2" sha1="650ce66df8030596e5c85a4c727dac2f268ed65d" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="fdf91e57" sha1="c69cf6cd91fd19760d0104b879b5bb5c78b2c938" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="214cab22" sha1="02d77a0574cc764013967f889638399dd8dae92c" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="91319542" sha1="0266c0ebd8cac4f0fdf1ad6c4bb732be2edfa99f" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="43b56186" sha1="6f736efdb17560014a6a1c9ae53128ca5fd7f112" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="8338c9fb" sha1="c20ece61359c435270309e89b91ae9145b5a14dc" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="71f96425" sha1="59c0105a133e73ba7a88dd1bf4ab669cfbbbd231" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="85ecbcdc" sha1="d2b2eb839fdc180c48cf9230fcf1bb67a68bf258" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="cc92662c" sha1="d56033aa2b1891d98d5df0a37dff15ad7f1e8535" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="35beab3b" sha1="222878afd0470d289cbd912b083cbe7b37af17da" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="5cf1b46e" sha1="0168bc540a0c268ad558c6b96bbb31fcc1ec3329" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="5934d6e5" sha1="6fbf1ad0fe3196fd7fc1c130015c6b2388bf50a0" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="5cabb0d1" sha1="b56229d6e7205eca195baaa0d61c83d9c455098d" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60frc">
+ <description>Microsoft Word 6.0 (Canadian French)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="c7c8a5bf" sha1="b5c2dc485828a78dd88aabd9baf1ead9d75d9b27" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="24055688" sha1="d897108660c4aead8b30cb4cc3281f4645e79dbf" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="402ba591" sha1="774bafcc093309dac523f369b4657af112793325" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="38a656d2" sha1="5042b8907745609c268dde9fad141c228d65722d" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="d1e6cf35" sha1="da78cdc61d8b01b33a59f3e3d0f324ec11afe8fe" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="63730adc" sha1="2e5e807ab25b3b12dfe1f995775ad66f2ae48d6a" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="302f751c" sha1="f6aaf17a9954e5119d11e01132d79ed80ecb8866" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="cefaeb48" sha1="ac484dad8369deadbc0d15e8adff242138fb1acb" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="eac44e35" sha1="c52e641bfe8f8e76d9f679afb6fe6f238ab54cdb" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="72308957" sha1="bc144d2824ab98d2345d3b73fbc08980300d54eb" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="a86b18f0" sha1="6733f3291b290a12663be0aecba73a9e172283fc" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="400e6c95" sha1="0de9b2143edfb0248588abf94421234eed79dd18" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Disquette Installation 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="68245b14" sha1="2a5a0c320039caade2b34b0a0b1467724bb0e11f" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60it">
+ <description>Microsoft Word 6.0 (Italian)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 1 - Installazione" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="4db62c49" sha1="0d8aaf01ea3c903a7f11e81f8951356fd0bd8b7c" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="ed84f073" sha1="54cf9f1ae1e8c132d56bc299215119e0d6b3cc35" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="8427118f" sha1="6323646bb8fa9492b7e784a215530fd80e1f5505" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="fec4f4ef" sha1="e20bb8c7cf02d3ce13192e4cbccc81b8dd2ecf45" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="42a4949a" sha1="27c12d29d2207ea7cb9a7b6a77d11e0d0d32c903" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="dcfc6586" sha1="0d655d2421840c6a0e5dacb5a073d1a5a5704d02" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="045657c4" sha1="bed4c68338cbe1ae61cd3cddda9c9257711339a3" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="52412162" sha1="7d7d09735659b9a1664595a289727829d0f83d8c" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="a8aa4f14" sha1="f26a56f6c1e59fb8e8b326c8e4b5a827ee086d23" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="66dc2eed" sha1="21eb5a603c8ab326285d9517f77fb6155ee80067" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="c8fcec7c" sha1="0fe85e5377580685d90f8fd141b79bf60b6226a6" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="bc3b5dc2" sha1="db0c493ac3f2efca5f2728629739417f6e621be1" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Disco 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="ca32c9f5" sha1="0c47ffd8a33de42a08c348c9e6a4b07c6a565aaa" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60ja">
+ <description>Microsoft Word 6.0 (Japanese)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="814042b6" sha1="2f626b5714055f171fa318aa509a82b16e0112e4" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="77c2f115" sha1="da235802115f8774de4ec5c957aa910e65977441" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="d7443f8a" sha1="761628a3a0f65bb978a0e06bef4470326fa52111" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="3bb73aef" sha1="9bc4e552979ba7f3351df4d64e75ffe9cb022bcf" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="5586adbd" sha1="59c46225800b8f6e28efcc6050e978d98422e443" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="8f4e0e7d" sha1="9d3173c872162770aef230a43620fd2c4ad94d3e" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="4d3169df" sha1="0e9a246dc2d3c07840837e0aaaa35a63109d787a" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="a441d3bf" sha1="fa8b69ed22446b420dbf590902ce88bf626d2316" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="b0cd46c8" sha1="3b76b678950cad180a3ed40d4aac9c17807e5134" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="d5dc2afe" sha1="e6bce7c973680dfc34876a5b0024eb44af8ae809" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="9fadb892" sha1="47485827da852980a7c3d2741cb2aa21c39e6a8b" />
+ </dataarea>
+ </part>
+ <part name="flop12" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 12" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk12.img" size="1474560" crc="49199133" sha1="d8dcf229fe90ef5405ee665038ca5e9d2f8806ee" />
+ </dataarea>
+ </part>
+ <part name="flop13" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 13" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk13.img" size="1474560" crc="09025e83" sha1="eef20deba7791968e6337520a65385c51934d418" />
+ </dataarea>
+ </part>
+ <part name="flop14" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 14" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk14.img" size="1474560" crc="02c7969a" sha1="8665c2028a92f08688cbeb99e3d2989526372685" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60nl">
+ <description>Microsoft Word 6.0 (Dutch)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 1 - Setup" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="369768dc" sha1="7787f50c4d9b429c36bcc3b616def522a23f2907" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="4c826b81" sha1="16c421feba8ee11e813739b6d1af7232f8a1959d" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="59ee0d19" sha1="e1d29aa31df20d71d0abade177339623c3a1de34" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="c5838266" sha1="5eff05adc7e9b49b0dfdfc1abdf87074ab638857" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="73b8940d" sha1="b58ecb82167271cc48c756f69b9ea404749c89ac" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="223517a3" sha1="c524e849312af5f7656fa2ddf18f907980fc6c8e" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="a5df817b" sha1="4ba47f5f32d54ca3854506739713a0f454bf215b" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="1ace6786" sha1="267b622044f1d0f6b2016a9b287f617aa42213bd" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="ea6908ea" sha1="c3982a0dff2dc55cc9fb4392fa7ec55bc8348eb0" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskette 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="334770fb" sha1="6b5c596e886f2b191ab58341d404114701448750" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60sv">
+ <description>Microsoft Word 6.0 (Swedish)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 1 - Installation" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="342d1bdb" sha1="eec0cef397ce7e5bee4d7bda3d945a2705cd3152" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="43de8d62" sha1="58940438e7c95185f38530bdc11e569341240423" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="e12efb34" sha1="86e88f3709b39bf9f3b654682ad183ef372be33a" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="d4a74aa9" sha1="d702bee7f9166cfee203d14489ee78e6b1fe66a7" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="72731117" sha1="5938daff0b472d5b1d05af796440b472abd2b439" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="0f03758a" sha1="fa2ee923bb8856b557f8731568a40967c607a065" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="475f1a03" sha1="540dfb52f735e120e640dcbdfebde4df81ddb9de" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="4212945f" sha1="c3e2eebb270f38b570d82093a98370f19bad198e" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="55d7b0b1" sha1="a755923dbd78b92578a3409ebc97d9a5a1d359a1" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="386d93a2" sha1="9be8866712d106cb0d3484b606a1b9fd04e80738" />
+ </dataarea>
+ </part>
+ <part name="flop11" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 11" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk11.img" size="1474560" crc="eaf3d57c" sha1="bb78e80dcb143374d1d88078c0be991343154170" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word60ano">
+ <description>Microsoft Word 6.0a (Norwegian)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 1 - Installasjon" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk01.img" size="1474560" crc="b8df07c7" sha1="1609b11a3ff329d110efcfb80a73dd1c149e1318" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk02.img" size="1474560" crc="1197e850" sha1="10f31c6825b259eeabc6e4534ddf7607f2b9ec4a" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk03.img" size="1474560" crc="bfdbd895" sha1="d399dc4eced9bb4bd7c21012f20999c065261794" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk04.img" size="1474560" crc="cfb68df8" sha1="606bf011a03a046de6dd3c1fdd93f3a90c8f5096" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk05.img" size="1474560" crc="b050aea4" sha1="a2acde547a5782805bc810b8c036deba168cb5ef" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk06.img" size="1474560" crc="9c8b893b" sha1="f6a40b9942243f8d9550488a909f892b220a0e24" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk07.img" size="1474560" crc="c0c3420b" sha1="b030d2aeb57c509d0215b3f4133d67c896a93ba0" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk08.img" size="1474560" crc="8fc4c109" sha1="f60df564074f311b087e61e641fa15f6dc34c63b" />
+ </dataarea>
+ </part>
+ <part name="flop9" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 9" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk09.img" size="1474560" crc="bf7b2aba" sha1="c8ba3a647a4efce022901ab2310274fbbc7d9691" />
+ </dataarea>
+ </part>
+ <part name="flop10" interface="floppy_3_5">
+ <feature name="part_id" value="Diskett 10" />
+ <dataarea name="flop" size="1474560">
+ <rom name="disk10.img" size="1474560" crc="835f34e4" sha1="67de4d2d9d8d8c79b4c3ceea8b8c8269bf7f3ea9" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Requires a PowerPC CPU and an existing installation of the 68k version -->
+ <software name="works40pm" supported="no">
+ <description>Microsoft Works 4.0b (US English, Power Macintosh upgrade)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 1" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 1.img" size="1474644" crc="deb18ea5" sha1="21332cb729268bcd8cc38930650c32fc3947b159" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 2" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 2.img" size="1474644" crc="0bfefc44" sha1="c33d2adab03cfc6625a50cf11bdb26646228adfc" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 3" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 3.img" size="1474644" crc="da7e1fc5" sha1="f2e3076b315284868c4322973e671d50015d1a12" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 4" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 4.img" size="1474644" crc="ebc15e3d" sha1="8ce2fd708b205c811234d9660b982de8e2549ca4" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Requires a PowerPC CPU and an existing installation of the 68k version -->
+ <software name="works40pmau" supported="no">
+ <description>Microsoft Works 4.0b (Australian English, Power Macintosh upgrade)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 1" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 1.img" size="1474644" crc="5a3e46db" sha1="90b547a038dd62b1b68c19e469752bdf4234d71c" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 2" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 2.img" size="1474644" crc="845c1379" sha1="ad1df3f81ea118e45c06558f0ff83aeb3e21482f" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 3" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 3.img" size="1474644" crc="fe5ef23a" sha1="b4e72aa3b1ba73572b1e726fefe4571115ac9da6" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 4" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 4.img" size="1474644" crc="8fa0878a" sha1="efb4369cd00f12c1ba2203aac688d09581e0bbc2" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Requires a PowerPC CPU and an existing installation of the 68k version -->
+ <software name="works40pmde" supported="no">
+ <description>Microsoft Works 4.0b (German, Power Macintosh upgrade)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 1" />
+ <dataarea name="flop" size="1474644">
+ <rom name="Setup-Diskette 1.img" size="1474644" crc="723262c0" sha1="ca95671c6a044ff78109ab021c8ae9ef9953d21f" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 2" />
+ <dataarea name="flop" size="1474644">
+ <rom name="Setup-Diskette 2.img" size="1474644" crc="6249e21a" sha1="3d2211ffe8bfb7df74fbca96d5b9526223954c43" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 3" />
+ <dataarea name="flop" size="1474644">
+ <rom name="Setup-Diskette 3.img" size="1474644" crc="f3e40df2" sha1="45f750b7b6c1b57e7266bc16ca800e6a9442a0d8" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="Setup-Diskette 4" />
+ <dataarea name="flop" size="1474644">
+ <rom name="Setup-Diskette 4.img" size="1474644" crc="4ccfb7a0" sha1="8ff8a9eafb7db6e87e3f8950617baa083ee65de3" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Requires a PowerPC CPU and an existing installation of the 68k version -->
+ <software name="works40pmint" supported="no">
+ <description>Microsoft Works 4.0b (International English, Power Macintosh upgrade)</description>
+ <year>1995</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 1" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 1.img" size="1474644" crc="d645e42b" sha1="6aa52eedb1f12dd983a7d38fe1fabc55003a3c82" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 2" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 2.img" size="1474644" crc="10807f88" sha1="c7635ce7bf83fcd9a55f83561bcbeb512b11a61b" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 3" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 3.img" size="1474644" crc="44c09d53" sha1="a19b8fac9307768cb68cf342b211c7bc5c3e83fc" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="PPC Install Disk 4" />
+ <dataarea name="flop" size="1474644">
+ <rom name="PPC Install Disk 4.img" size="1474644" crc="f5875ef3" sha1="5f1e4043e70d8083c4b15dd024f5c6e0bc18df31" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="wp30a">
<description>WordPerfect 3.0a</description>
<year>1994</year>
@@ -3350,4 +7450,100 @@ license:CC0
</dataarea>
</part>
</software>
+
+ <software name="wp31">
+ <description>WordPerfect 3.1</description>
+ <year>1994</year>
+ <publisher>Novell</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 1" />
+ <dataarea name="flop1" size="1474560">
+ <rom name="WordPerfect 1.img" size="1474560" crc="528ff795" sha1="51c53ee4e50fbabef2031aa2bc88d05c938474b9" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 2" />
+ <dataarea name="flop2" size="1474560">
+ <rom name="WordPerfect 2.img" size="1474560" crc="37b98183" sha1="10370cf115aad128564a150d068b5cc2d24651d2" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 3" />
+ <dataarea name="flop3" size="1474560">
+ <rom name="WordPerfect 3.img" size="1474560" crc="88948ad1" sha1="96e48f6b5714873c3d0757cf491410e211f49108" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 4" />
+ <dataarea name="flop4" size="1474560">
+ <rom name="WordPerfect 4.img" size="1474560" crc="2665b8f8" sha1="f69975caf918eb0cf14c451156eb2f02874ab07e" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 5" />
+ <dataarea name="flop5" size="1474560">
+ <rom name="WordPerfect 5.img" size="1474560" crc="1d57d06e" sha1="52e77beb481a6ede5849e043e24b76a14edd6f4e" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="Install Document Experts" />
+ <dataarea name="flop6" size="1474560">
+ <rom name="Install Document Experts.img" size="1474560" crc="16a89a61" sha1="34e91a4667a9e634c05bfb7e867f1f0f2a05f0f9" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wp35">
+ <description>WordPerfect 3.5</description>
+ <year>1995</year>
+ <publisher>Novell</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 1" />
+ <dataarea name="flop" size="1474560">
+ <rom name="WordPerfect 1.img" size="1474560" crc="334287a2" sha1="d3f6181db8a58e161c06207023f42c739abf375e" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 2" />
+ <dataarea name="flop" size="1474560">
+ <rom name="WordPerfect 2.img" size="1474560" crc="0cd7e6c1" sha1="30514d2602a097a2072cf65b039d0b9ae47362e1" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 3" />
+ <dataarea name="flop" size="1474560">
+ <rom name="WordPerfect 3.img" size="1474560" crc="8ad1aaea" sha1="f12a4a87f20b358089cfb4e1e816501d712c3850" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 4" />
+ <dataarea name="flop" size="1474560">
+ <rom name="WordPerfect 4.img" size="1474560" crc="4f86e4db" sha1="460b069a633e4b90eacfced944dcdecc9663c72f" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 5" />
+ <dataarea name="flop" size="1474560">
+ <rom name="WordPerfect 5.img" size="1474560" crc="787d2ceb" sha1="9a88c60aec6ae2f0c80d2aba77e86278c5d73aaa" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 6" />
+ <dataarea name="flop" size="1474560">
+ <rom name="WordPerfect 6.img" size="1474560" crc="9c26c636" sha1="050e0c85d4782f2986376dd87bf807c14d24c83c" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 7" />
+ <dataarea name="flop" size="1474560">
+ <rom name="WordPerfect 7.img" size="1474560" crc="8d4a3f6c" sha1="aedc18bea06f6e6151b7a7c3ad915dae2cfc65df" />
+ </dataarea>
+ </part>
+ <part name="flop8" interface="floppy_3_5">
+ <feature name="part_id" value="WordPerfect 8" />
+ <dataarea name="flop" size="1474560">
+ <rom name="WordPerfect 8.img" size="1474560" crc="1cfc8337" sha1="75a373def0588bbad24e3cefb6f28939854f5d65" />
+ </dataarea>
+ </part>
+ </software>
</softwarelist>
diff --git a/hash/mbee_cart.xml b/hash/mbee_cart.xml
index d6ffc859388..7ba2b8c4f58 100644
--- a/hash/mbee_cart.xml
+++ b/hash/mbee_cart.xml
@@ -40,7 +40,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>FORTH v1.0</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -53,7 +53,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>FORTH v1.1</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -66,7 +66,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>OZLOGO</description>
<year>1983</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -79,7 +79,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Sargon Chess</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -92,7 +92,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>HELP (set 1)</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0 [-rom3 recommended = PAK1]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [-rom3 recommended = PAK1]"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -105,7 +105,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>HELP (set 2)</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0 [-rom3 recommended = PAK1]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [-rom3 recommended = PAK1]"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -118,7 +118,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Mydas Dissassembler</description>
<year>1984</year>
<publisher>Mytek</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -131,7 +131,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Super Disassembler 3.0</description>
<year>1983</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -144,7 +144,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Mytek Word Processor</description>
<year>198?</year>
<publisher>Mytek</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -157,7 +157,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Microspace Invaders</description>
<year>1983</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -170,7 +170,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Survivor</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -183,7 +183,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Typing Tutor</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -196,7 +196,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Wordbee 1.0</description>
<year>1982</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [-rom2 recommended]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [-rom2 recommended]"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -209,7 +209,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Wordbee 1.2</description>
<year>1982</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [-rom2 recommended]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [-rom2 recommended]"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -222,7 +222,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Wordbee 1.2 (Swedish)</description>
<year>1982</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [-rom2 recommended]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [-rom2 recommended]"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -235,7 +235,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Wordbee 1.3</description>
<year>1982</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [-rom2 recommended]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [-rom2 recommended]"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -248,7 +248,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Wordbee 1.3 Rel 3</description>
<year>1982</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [-rom2 recommended]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [-rom2 recommended]"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -261,7 +261,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Wordbee 2.0 (Swedish)</description>
<year>1982</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [-rom2 recommended]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [-rom2 recommended]"/>
<sharedfeat name="compatibility" value="1,2" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -352,7 +352,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<year>198?</year>
<publisher>Microworld</publisher>
<info name="usage" value="NET"/>
- <sharedfeat name="compatibility" value="3" />
+ <sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_net">
<dataarea name="rom" size="0x2000">
<rom name="telcom30.mbn" size="0x2000" crc="9aee48e2" sha1="e0598e732b44a08e3f7e77ec63a879ac1434b5ec" />
@@ -365,7 +365,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<year>198?</year>
<publisher>Microworld</publisher>
<info name="usage" value="NET"/>
- <sharedfeat name="compatibility" value="3" />
+ <sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_net">
<dataarea name="rom" size="0x2000">
<rom name="telcom31.mbn" size="0x2000" crc="5a904a29" sha1="3120fb65ccefeb180ab80d8d35440c70dc8452c8" />
@@ -378,7 +378,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<year>198?</year>
<publisher>Microworld</publisher>
<info name="usage" value="NET"/>
- <sharedfeat name="compatibility" value="3" />
+ <sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_net">
<dataarea name="rom" size="0x2000">
<rom name="telcom32.mbn" size="0x2000" crc="e9f0b82b" sha1="e1f2004a401878468f7f359fd30b0b948ae0eb48" />
@@ -391,7 +391,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<year>198?</year>
<publisher>Microworld</publisher>
<info name="usage" value="NET"/>
- <sharedfeat name="compatibility" value="3" />
+ <sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_net">
<dataarea name="rom" size="0x2000">
<rom name="telcom321.mbn" size="0x2000" crc="b07eefaa" sha1="5dab90b2c232673282d215845c9947cc5bdd50c8" />
@@ -404,7 +404,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<year>198?</year>
<publisher>Microworld</publisher>
<info name="usage" value="NET"/>
- <sharedfeat name="compatibility" value="3" />
+ <sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_net">
<dataarea name="rom" size="0x2000">
<rom name="telcom321a.mbn" size="0x2000" crc="36852a11" sha1="c45b8d03629e86231c6b256a7435abd87d8872a4" />
@@ -417,7 +417,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<year>198?</year>
<publisher>Microworld</publisher>
<info name="usage" value="NET"/>
- <sharedfeat name="compatibility" value="3" />
+ <sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_net">
<dataarea name="rom" size="0x2000">
<rom name="telcom321p.mbn" size="0x2000" crc="3d2e8190" sha1="b4d330e149c4ddaa4a399f90b3ce8a854ddcd271" />
@@ -430,7 +430,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<year>198?</year>
<publisher>Microworld</publisher>
<info name="usage" value="NET"/>
- <sharedfeat name="compatibility" value="3" />
+ <sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_net">
<dataarea name="rom" size="0x2000">
<rom name="telcom321s.mbn" size="0x2000" crc="00f8fde1" sha1="eb881bbab90c85fd6e29540decd25e884c67f738" />
@@ -468,7 +468,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Viatel 2.0</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -481,7 +481,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Viatel 2.2</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -494,7 +494,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Viatel 2.3</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -507,7 +507,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Videotex 1.1 (Swedish)</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -520,7 +520,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Videotex 2.34</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -533,7 +533,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Videotex 2.35</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -546,7 +546,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Shell (pc85)</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [recommend -rom7 = PAK5]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [recommend -rom7 = PAK5]"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -559,7 +559,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Shell (pc85b)</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [recommend -rom7 = PAK5]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [recommend -rom7 = PAK5]"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -572,7 +572,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Shell (ppc85)</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [recommend -rom7 = PAK5]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [recommend -rom7 = PAK5]"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -585,7 +585,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Shell (pc85s)</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [recommend -rom7 = PAK5]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [recommend -rom7 = PAK5]"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -598,7 +598,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Graphics / Database</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [recommend -rom5 = PAK3]. Database access is PAKn+8"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [recommend -rom5 = PAK3]. Database access is PAKn+8"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x4000">
@@ -611,7 +611,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Graphics (Swedish)</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [recommend -rom5 = PAK3]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [recommend -rom5 = PAK3]"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -624,7 +624,7 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
<description>Database (Swedish)</description>
<year>198?</year>
<publisher>Microworld</publisher>
- <info name="usage" value="EDASM or PAK0 [recommend -rom3 = PAK1]"/>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0 [recommend -rom3 = PAK1]"/>
<sharedfeat name="compatibility" value="2,3" />
<part name="cart" interface="mbee_pak">
<dataarea name="rom" size="0x2000">
@@ -633,4 +633,22 @@ Most roms can be mounted in any slot, although sometimes one is recommended in t
</part>
</software>
+ <software name="pascal">
+ <description>Pascal</description>
+ <year>198?</year>
+ <publisher>Microworld</publisher>
+ <info name="usage" value="Press W (pc85-type), or EDASM or PAK0"/>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="cart1" interface="mbee_pak">
+ <dataarea name="rom" size="0x2000">
+ <rom name="pascal.mbp" size="0x2000" crc="d67c1ce4" sha1="6140fca6cc3e8315f2eb38a7341268fe2d123b71" />
+ </dataarea>
+ </part>
+ <part name="cart2" interface="mbee_net">
+ <dataarea name="rom" size="0x1000">
+ <rom name="pascal.mbn" size="0x1000" crc="b4830252" sha1="98593db159242f8c98f5321253c03ab588b106ba" />
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/mbee_flop.xml b/hash/mbee_flop.xml
new file mode 100644
index 00000000000..559a945527e
--- /dev/null
+++ b/hash/mbee_flop.xml
@@ -0,0 +1,5974 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+license:CC0
+
+Floppy disks for the Microbee. These extensions are supported: DSK (CPC-EMU).
+ubee512 extensions such as ss80, ds40 etc are not yet supported.
+
+Compatibility flags:
+1 = mbee56, mbee128
+2 = mbee128p
+3 = mbee256
+
+If no flag is specified, it's assumed it works on all of them.
+
+Microbees were quite flexible - you could order any combination of 9 or 13cm drives.
+Capacities:
+Drive Size Type ubee512ext Capacity DSK-image-size
+13cm SSDD ss40 193KB 211KB Standard
+13cm DSDD ds40 386KB 421KB Standard
+9cm SSDD ss80 386KB 421KB Standard
+9cm DSDD ds80 776KB 841KB Standard
+9cm DSDD ds82 782KB 841KB Dreamdisk
+9cm DSDD ds84 784KB 841KB PJB
+9cm DSDD ds8b 776KB 841KB Beeboard
+
+At the time of writing (2021-06-04) any floppy image will work in any emulated drive.
+
+-->
+<softwarelist name="mbee_flop" description="Microbee floppy disks">
+
+ <software name="56k">
+ <description>56k</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="56k.dsk" size="430336" crc="cfd7e4b5" sha1="5baafdd825663076e63ffe7cb794889dd713a506"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="56k_master_91">
+ <description>56k_master_91</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="56k_master_91_ds40.dsk" size="430336" crc="e99c3878" sha1="86db454e6257b0888f2494b40b0e145bbea5102b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="56k_sys">
+ <description>56k_sys</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="56k_sys_ds40.dsk" size="430336" crc="fd7cfc29" sha1="6be5b0af75062620971d85fa44f2b1f4a9856042"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="56k_systemm8401">
+ <description>56k_system_master_84_01</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="56k_system_master_84_01_ds40.dsk" size="430336" crc="9f1f1d67" sha1="96077596874de0c5e63b6f9ce06ad9121e0482e1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="56k_systemm_e">
+ <description>56k_system_master_early</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="56k_system_master_early_ds40.dsk" size="430336" crc="260c38f4" sha1="bae8066d8df409ae2aba173fed33315b12674989"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adv_typing_tutor">
+ <description>Advanced (touch) Typing Tutor</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="advanced_typing_tutor_ds40.dsk" size="430336" crc="cbcc65c0" sha1="3c3cb97a4f490a3a9b6e091abdde8706722a7fba"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="colossal">
+ <description>Colossal Cave</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_ss80.dsk" size="430336" crc="49beb748" sha1="7823070867bc5818e9bb7b9424e864379909d932"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="agri_studies">
+ <description>Agricultural Studies</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="agricultural_studies_ds40.dsk" size="430336" crc="a8fbdfdd" sha1="623754bb0c0c3c0bae42d48b2cbbb0549a359408"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="art_auction">
+ <description>Art Auction</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="art_auction_ds40.dsk" size="430336" crc="25e1379d" sha1="509ce05be68178c7bbef834989bbdeea95134594"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dbase2">
+ <description>DBase II (backup)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="backup.dsk" size="430336" crc="11665561" sha1="7fc3766f11dc6d5e6fa1817d87a1a6ef0de21aa6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="basic1">
+ <description>Random Basic games</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="Basic1.dsk" size="430336" crc="33d78cb4" sha1="a9b307789ee95e685f37237d82e75ec72a8e7d06"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="basicgames05">
+ <description>Basic Games 05</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="basicgames05_ss80.dsk" size="430336" crc="59140848" sha1="5960cf3e002a3545fd6d29edab8b867ba59522e3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="beenet_51">
+ <description>Beenet</description>
+ <year>1985</year>
+ <publisher>Applied Technology</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="beenet_51_ss80.dsk" size="430336" crc="7ed40b20" sha1="cbbc173272447aacfd03b2d0afdbe017307d6889"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="beet_demo" supported="no"><!-- needs unemulated hardware -->
+ <description>Beetalker and Beethoven demo</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="beethovan_beetalker_demo_ds40.dsk" size="430336" crc="115f0dfb" sha1="259f25d8ffce0e6c2aafda5054a30b96a15d04e9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bee_draw">
+ <description>Bee Draw 1.0</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="bee_draw_ds40.dsk" size="430336" crc="1549f47a" sha1="279ae6e853835f3899d63ba72c214ad4d5b6790c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="biology">
+ <description>Biological Science</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="biology_ds40.dsk" size="430336" crc="d9e6ca68" sha1="f63410811f43a238fc6f4c56abb89a14307c0025"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="birds_antarctica">
+ <description>Birds of Antarctica</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="birds_of_antarctica_ss80.dsk" size="430336" crc="47c7cad7" sha1="a3424be37a41d7149e9110a6b5b81434a55518fb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="buzznet3b">
+ <description>Buzznet iii Demo Disk</description>
+ <year>19??</year>
+ <publisher>Bendata</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="buzznet_iii_demo_disk_ds40.dsk" size="430336" crc="9eb55e7c" sha1="f3e3a65326149f6f9ad1155f2bfe64b3c7040f9d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="buzznet3c">
+ <description>Buzznet 3.4</description>
+ <year>1985</year>
+ <publisher>Bendata</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="buzzword_ds40.dsk" size="430336" crc="989af9d9" sha1="cbf4a4e6c4ec947bd1bdb423ea2b632195403018"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="catalog">
+ <description>Disk Cataloger</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="catalog.dsk" size="430336" crc="3ce12d10" sha1="56c536db7e8ddc06f32281b5a9b3f97c2c15b0f9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cheryl_goding">
+ <description>Cheryl Goding Demo Disk</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cheryl_goding_demo_disk_ds40.dsk" size="430336" crc="3edf5615" sha1="43da627ff864795649d73815251a7e2434493d58"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ciab_ds_master">
+ <description>CIAB Double-sided Master</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="ciab_double_sided_master_ds80.dsk" size="860416" crc="0d41825c" sha1="6c377d7c308a3c966de015c2b366bb19f8d71f05"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ciab_systemm8602">
+ <description>CIAB System Master 1986/02</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="ciab_system_master_86_02_ss80.dsk" size="430336" crc="69ed414c" sha1="ee9ad32a5d253ac4d694e8a5c7818f2eef065f56"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ciab_systemm8503">
+ <description>CIAB System Master 1985/03</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="ciab_system_master_85_03_ss80.dsk" size="430336" crc="a4552963" sha1="c77909c1cefdb8f182f4e1729fceb48c14f4bece"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="colour_sampler_1">
+ <description>Colour Sampler 1</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="colour_sampler_1.dsk" size="215296" crc="fdf20f2b" sha1="fcc742c3756a3b3c698ccce80a1957e853710f4e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ciab_boot">
+ <description>CIAB boot menu</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm.dsk" size="430336" crc="870b51c4" sha1="d6aa9ee879c068a06b18185a07f3555f89429dbb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cunning_running">
+ <description>Cunning Running</description>
+ <year>1984</year>
+ <publisher>Jacaranda Wiley</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cunning_running_ss80.dsk" size="430336" crc="b6e2dd4c" sha1="e3d79fa64774c49daa57cb3ed74bf2eb365574ea"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="databuzz_beenet">
+ <description>databuzz_beenet_version</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="databuzz_beenet_version_ds40.dsk" size="430336" crc="3a9b2e69" sha1="7085eb74bff874c041e796d223c37b2479cefb89"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="defender">
+ <description>Micro Defender</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="defender_ds40.dsk" size="430336" crc="0a575afc" sha1="5e808f7a2826a52027b06565bc7c0807f63734fa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo">
+ <description>Honeysoft Demo Disk</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="demo.dsk" size="215296" crc="70ce3786" sha1="f14bf0d11a7b649074f96a33d56e604cfbf6e30b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="chip8_23">
+ <description>Chip8 v2.3</description>
+ <year>1986</year>
+ <publisher>Dreamcards</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="dreamdisk_chip8_2.3_ss80.dsk" size="430336" crc="4b687089" sha1="e8d9991bbb1a6143810cbc9f3f166b3e4b9d49db"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dungeon_of_khan">
+ <description>Dungeons of Khan</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="dungeon_of_khan_ds40.dsk" size="430336" crc="dd9b0a1b" sha1="294bab4aa00ef95a73f9167e471b42444de89de5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_heym_dn">
+ <description>D.Heym Directed Numbers</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="d_heym_directed_numbers_ds40.dsk" size="430336" crc="a6c639e8" sha1="9db405389c6298e6b1cb4afc33ec170f299598aa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_heym_nl">
+ <description>D.Heym Number Lines</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="d_heym_number_lines_ds40.dsk" size="430336" crc="b96956b5" sha1="effc29371fd97d8db87e2deba49fc0a18d70bfe4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_heym_var">
+ <description>D.Heym Various</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="d_heym_various_ds40.dsk" size="430336" crc="9d595f52" sha1="41c8e0b8019b9f574514aa6a03cd5b68fd531635"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_heym_cf">
+ <description>D.Heym Common Fractions</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="d_heym_common_fractions_ds40.dsk" size="430336" crc="a41dd347" sha1="afc65055afb4575dab5728e0691e1d0bb5fca670"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_heym_cn">
+ <description>D.Heym Counting Numbers</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="d_heym_counting_numbers_ds40.dsk" size="430336" crc="9b33d8b4" sha1="4846647c8b753ecd1935d131617842cd6f0a68fa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_01">
+ <description>education_01</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="education_01_ss80.dsk" size="430336" crc="e1bc2eb0" sha1="e6d0304aa820398bbf93956381fce9b2d581ffe5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="empty_ciab_sys">
+ <description>empty_ciab_sys</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="empty_ciab_sys.ss80.dsk" size="430336" crc="5e1855d1" sha1="7da67588ed7c33aee81b3379cd81d46554f3308d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="english">
+ <description>English</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="english_ds40.dsk" size="430336" crc="09491897" sha1="32e46880644dbb7bae1bdd868457f7fa9a6c8520"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="first_fleet1">
+ <description>First Fleet (set 1)</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="first_fleet_ss80.dsk" size="430336" crc="64f425e0" sha1="086b8464797f2b610f94f21b481b750e1ace3e7b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="first_fleet2">
+ <description>First Fleet (set 2)</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <info name="usage" value="When asked for data file name, enter CONVIC"/>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="first_fleet_wesoft_ss80.dsk" size="430336" crc="5da9b8b1" sha1="1adb0f6048969323d976479b257d5471e8461687"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geograbee">
+ <description>Geograbee</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="geograbee_ds40.dsk" size="430336" crc="ae3ccee6" sha1="24099f5a6be4b20961fc7637649c545cda30243f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gmkp">
+ <description>Ghost Muncher / Kilopede</description>
+ <year>1983</year>
+ <publisher>Mytek</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="gmkp_ds40.dsk" size="430336" crc="fc5701fa" sha1="2b752eb9ecdad1e96f4359d2e168374bc9c68f77"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="golf">
+ <description>2 Golf Games</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="golf_ds40.dsk" size="430336" crc="93e25947" sha1="d8df1f812fd7bf0b1c272cf34092c85fae8c0461"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="good_math">
+ <description>Goodison Mathematics</description>
+ <year>19??</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="goodison_math_ss80.dsk" size="430336" crc="d1e762e5" sha1="100b3347cfb9ad08ef036fefe93ebc0bc4f9cd32"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="good_demo">
+ <description>Goodison Demo</description>
+ <year>19??</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="goodison_demo_ds40.dsk" size="430336" crc="2664beeb" sha1="37e4827f00d0b6b7743d417f868e72b2e9cde4d5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="good_sp_reading">
+ <description>Goodison Speed Reading</description>
+ <year>19??</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="goodison_speed_reading_ds40.dsk" size="430336" crc="c5e6e327" sha1="10f15ad1f46e1a64d3da5c7941438e12c4b9c84e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hiplot">
+ <description>Hiplot</description>
+ <year>1985</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="hiplot_ds40.dsk" size="430336" crc="da4cc6e7" sha1="79e370b19add1ac3eccd3728827130a8ecde076e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="home_economics">
+ <description>Home Economics</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="home_economics_ds40.dsk" size="430336" crc="b6f604af" sha1="42b8acdf07ce112e67b0ee169de41212869b700a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="air_track">
+ <description>Air_Track</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_air_track.dsk" size="215296" crc="030fd5b1" sha1="2bd061e3a5d4fb817df7763c3bc4bc3234224a9a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="air_track_t01">
+ <description>Air Track t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_air_track_t01.dsk" size="215296" crc="fd7cda11" sha1="131c230d7186eea1e4be14cad06199cadee61b0b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="air_track_t04">
+ <description>Air Track t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_air_track_t04.dsk" size="215296" crc="4233d42d" sha1="ef996977c05c6ee4c14d4bf483188eae1f01ddc4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade_g_1_t01">
+ <description>Arcade Games 1 t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_arcade_games_1_t01.dsk" size="215296" crc="7f816daa" sha1="d011b521cf51d55c1f32769f9027aced88d21937"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade_g_1_t04">
+ <description>Arcade Games 1 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_arcade_games_1_t04.dsk" size="215296" crc="aa6bb884" sha1="57fe8c29692768ce96bdce40890c24c03af6915d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade_g_2_t01">
+ <description>Arcade Games 2 t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_arcade_games_2_t01.dsk" size="215296" crc="e1495f0b" sha1="59b177838477e051b8093f3e8097d2d3cf1d6769"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade_g_2_t03">
+ <description>Arcade Games 2 t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_arcade_games_2_t03.dsk" size="215296" crc="e94e27cc" sha1="0fe5f4787c1ddabd596e7d709753746f5ae136b5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade_g_2_t04">
+ <description>Arcade Games 2 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_arcade_games_2_t04.dsk" size="215296" crc="3ef83996" sha1="0d93152b408167537831bcc7ca99f9dbf345ab54"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade_g_4_t03">
+ <description>Arcade Games 4 t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_arcade_games_4_t03.dsk" size="215296" crc="df322925" sha1="9365313b62ef6e4774d66b3bff26de4a35be78a6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bee_casino_t01">
+ <description>Bee Casino t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_bee_casino_t01.dsk" size="215296" crc="a42546c5" sha1="14ee5ada18df4f6d71cc27c88c117b4f1083e455"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bee_casino_t04">
+ <description>Bee Casino t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_bee_casino_t04.dsk" size="215296" crc="b2776761" sha1="f5e28834b665c317498fa92eb3213c3906bb9072"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bee_sc_1_t01">
+ <description>Bee Scientist 1 t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_bee_scientist_1_t01.dsk" size="215296" crc="33d1f37c" sha1="9b7deb12bf55780c164296f6f16b5128280b73db"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bee_sc_1_t04">
+ <description>Bee Scientist 1 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_bee_scientist_1_t04.dsk" size="215296" crc="b7c23fd2" sha1="84e4c91e93404e239d725479fd6a0dfa6bdf985a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="christmas_t04">
+ <description>Christmas Carols t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_christmas_carols_t04.dsk" size="215296" crc="ab7b2a64" sha1="9baa15047f3851a9fdb093b6ff35b4463bb83dda"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cricket_t01">
+ <description>Cricket t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_cricket_t01.dsk" size="215296" crc="f6770d6f" sha1="584a267c7651ac544f90a9b383460ae32f23c475"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cricket_t04">
+ <description>Cricket t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_cricket_t04.dsk" size="215296" crc="a47762a9" sha1="e816752568f7805ba0014b4359b8b715d8f050e3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo_disk_t02">
+ <description>Demonstration Disk t02</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_demonstration_disk_t02.dsk" size="215296" crc="af883af2" sha1="07474841a986b7ddd53ea321b5e2c22f83685f6a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo_disk_t04">
+ <description>Honeysoft Demo Disk t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_256tc_demo_disk_t04.dsk" size="215296" crc="8cbc276e" sha1="c97583b8cdb435daf16d12db8a275109709d4620"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family_fav_t03">
+ <description>Family Favourites t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_family_favourites_t03.dsk" size="215296" crc="90bc2741" sha1="1cbef3dc0093b9f981bd876b14cd29c49092661c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family_fav_t04">
+ <description>Family Favourites t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_family_favourites_t04.dsk" size="215296" crc="408d2acf" sha1="0773d6ce4f160557fddd9907bc1b4be5174d85b5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family_g_1_t01">
+ <description>Family Games 1 t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_family_games_1_t01.dsk" size="215296" crc="6bc8dcd9" sha1="d9bf7659bf69a8550772f555f0c05d483d9f979b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family_g_1_t03">
+ <description>Family Games 1 t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_family_games_1_t03.dsk" size="215296" crc="8c48f2d9" sha1="2c1691cb6776240eeb43f1033f260c454956124e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family_g_1_t04">
+ <description>Family Games 1 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_family_games_1_t04.dsk" size="215296" crc="dba4f9a8" sha1="03f92b303c985b07b8b317a4806036b5fe0fd7ca"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="golf_t01">
+ <description>3 Golf Games t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_golf_t01.dsk" size="215296" crc="d7646791" sha1="3f2bbdf54197f5bb6fac8283c7629848a2b7c2d2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="golf_t04">
+ <description>3 Golf Games t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_golf_t04.dsk" size="215296" crc="a353963f" sha1="e654266c487d44560c7364360dec1d507aa8aabf"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gr_adv_1_t01">
+ <description>Graphic Adventures 1 t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_graphic_adventures_1_t01.dsk" size="215296" crc="119eb5b4" sha1="854e4c91c751e6d7d86619c85163677a76356fa5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gr_adv_1_t04">
+ <description>Graphic Adventures 1 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_graphic_adventures_1_t04.dsk" size="215296" crc="9c18830a" sha1="b95079bf5620e2b2d79d6c64dfdf1e45c6437e8a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="joy_g_1_t03" supported="no"><!-- Needs joystick -->
+ <description>Joystick Games 1 t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_joystick_games_1_t03.dsk" size="215296" crc="58f360ab" sha1="c3c43d6936170504ada3b5c76c444a2041ad916f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="joy_g_1_t04" supported="no"><!-- Needs joystick -->
+ <description>Joystick Games 1 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_joystick_games_1_t04.dsk" size="215296" crc="5f0a8efa" sha1="59d3ee5f38609caace8f558bd380beb25e4e8044"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kids_pack_1_t03">
+ <description>Kids Pack 1 t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_kids_pack_1_t03.dsk" size="215296" crc="edc7bbe6" sha1="1d9af5962167b8cf539e176f268de150dd3478ed"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kids_pack_1_t04">
+ <description>Kids Pack 1 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_kids_pack_1_t04.dsk" size="215296" crc="8a96a04e" sha1="75178f877df218ae8c17320fda992304d046962b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kids_pack_2_t03">
+ <description>Kids Pack 2 t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_kids_pack_2_t03.dsk" size="215296" crc="b694a3fc" sha1="dc17f08067e8c1d88cc4453b00980dbf2892e5aa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lcbf_words_t01">
+ <description>Learning Can Be Fun words t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_learning_can_be_fun_words_t01.dsk" size="215296" crc="187d5a49" sha1="f1eab670b379cf1cd52496626418155f4afd0506"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lcbf_wn_t04">
+ <description>Learning Can Be Fun Words and Numbers t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="honeysoft_lcbf_words_and_numbers_t04.dsk" size="430336" crc="026c8ef8" sha1="162b9f13e461e1134817e3d7859dedd8e2903bdb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lcbf_more_t01">
+ <description>Learning Can Be Fun more t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_learning_can_be_fun_more_t01.dsk" size="215296" crc="475eff6e" sha1="c0085a8b440982a8f9a749d425443bfbc36d473b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lcbf_more_t03">
+ <description>Learning Can Be Fun more t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_learning_can_be_fun_more_t03.dsk" size="215296" crc="00b03293" sha1="9355c5f69ccab0473c26c3274e89d4d10ec5b62a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lcbf_more_t04">
+ <description>Learning Can Be Fun more t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_learning_can_be_fun_more_t04.dsk" size="215296" crc="5c56c7b2" sha1="392c5119304a52c2e1f80c85a6ca20fb4c954328"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lcbf_numbers_t01">
+ <description>Learning Can Be Fun numbers t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_learning_can_be_fun_numbers_t01.dsk" size="215296" crc="c4c7de61" sha1="2e4c8f9c33dd9f4ba4e76d05e07bc1f122a21dfc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lcbf_numbers_t04">
+ <description>Learning Can Be Fun numbers t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_learning_can_be_fun_numbers_t04.dsk" size="215296" crc="2d08901f" sha1="b6db3b7ab2bd77ed6c3dfd7c0c8483d12d37a36e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="our_world_t02">
+ <description>Our World t02</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_our_world_t02.dsk" size="215296" crc="84525c60" sha1="aaa5084c42272c42de7a55d0226aa13393872d5f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="our_world_t04">
+ <description>Our World t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_our_world_t04.dsk" size="215296" crc="86d222ef" sha1="d436018b3cdda18a85984c6196dd9afddbf128b5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="penny_arcade_t02">
+ <description>Penny Arcade t02</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_penny_arcade_t02.dsk" size="215296" crc="5a80b588" sha1="857c4561cbbb56b305b090a1e8efa9694d0b819b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="penny_arcade_t03">
+ <description>Penny Arcade t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_penny_arcade_t03.dsk" size="215296" crc="e4523512" sha1="77c3e2f827f284441762ec8a316f7ef7b1b9af58"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="penny_arcade_t04">
+ <description>Penny Arcade t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_penny_arcade_t04.dsk" size="215296" crc="c92b2fcb" sha1="20128c3b9ada62bec0896cbcd39d01b51e159150"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sc_tut_1_t01">
+ <description>Science Tutorial 1 t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_science_tutorial_1_t01.dsk" size="215296" crc="90cf3e49" sha1="115109a7f03b006f0454a30967be3323954611ff"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sc_tut_1_t02">
+ <description>Science Tutorial 1 t02</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_science_tutorial_1_t02.dsk" size="215296" crc="28c0f296" sha1="2554d7a09da5a664b1e34818d31fa4840246f2a9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sc_tut_1_t04">
+ <description>Science Tutorial 1 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_science_tutorial_1_t04.dsk" size="215296" crc="d6131e6a" sha1="ede16880d904aa24deabeaba767668a678f1d509"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sc_tut_2_t01">
+ <description>Science Tutorial 2 t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_science_tutorial_2_t01.dsk" size="215296" crc="117c1ab0" sha1="a25d9684430524787b31663317cc2954edc46b32"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sc_tut_2_t04">
+ <description>Science Tutorial 2 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_science_tutorial_2_t04.dsk" size="215296" crc="3b35f77b" sha1="d650ffabdcf53014ff2926039620f52a4f13bf3f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="soc_stud_t01">
+ <description>Social Studies t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_social_studies_t01.dsk" size="215296" crc="073950a6" sha1="72c9eeec1b426f1471f483887f83a35d328b2d30"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="soc_studies_t04">
+ <description>Social Studies t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_social_studies_t04.dsk" size="215296" crc="2d26bcc4" sha1="718c9b0f0f999605b71103351ce1fb0e3c2710a5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="soc_stud_or_t03">
+ <description>Social Studies Oracle t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_social_studies_oracle_t03.dsk" size="215296" crc="1e2b0003" sha1="7fefdabe55d3f4642d4ff888cd915bfe64819d18"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="soc_stud_or_t04">
+ <description>Social Studies Oracle t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_social_studies_oracle_t04.dsk" size="215296" crc="98535a6d" sha1="a42f6d1f708f8a2dd41a5ecc5f23fb122ca5ffcb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="str_g_1_t01">
+ <description>Strategic Games 1 t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_strategic_games_1_t01.dsk" size="215296" crc="978150b0" sha1="0dc35114b47cd3cf73b80e72661be89ceeec1f5a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="str_g_1_t03">
+ <description>Strategic Games 1 t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_strategic_games_1_t03.dsk" size="215296" crc="efdacfe8" sha1="08ed28b0163e4e360f563ef47fa4f49fe60afc2f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="str_g_1_t04">
+ <description>Strategic Games 1 t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_strategic_games_1_t04.dsk" size="215296" crc="3e1d89b2" sha1="6c4dc51a7f8b26d532b94a4653854bda958108c0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tech_draw_t01">
+ <description>Technical Drawing t01</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_technical_drawing_t01.dsk" size="215296" crc="1e6f0cc6" sha1="5ea63679fbee0803883603115a10189994dce922"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tech_draw_t04">
+ <description>Technical Drawing t04</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_technical_drawing_t04.dsk" size="215296" crc="598bf32f" sha1="9a6bbdcab91f553dea951736039e15aa3814a6cb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="visual_prog_t03">
+ <description>Visual Programming t03</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_visual_programming_t03.dsk" size="215296" crc="e67b2f61" sha1="b46b0ad06ec217df528877b5fdfda39ba1911292"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hotdr_10">
+ <description>Hoards of the Deep Realm 1.0 (set 1)</description>
+ <year>1985</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="hoards_of_the_deep_realm_10.dsk" size="430336" crc="32d704a9" sha1="f9f1293e6fd55ba8f8cac41f720a5599e510ac01"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hotdr_10a">
+ <description>Hoards of the Deep Realm 1.0 (set 2)</description>
+ <year>1985</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="hoards_of_the_deep_realm_10_ss80.dsk" size="430336" crc="34b25229" sha1="f1e7bad9ed7fe0d736cddc9ced0681609d948572"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hotdr_11">
+ <description>Hoards of the Deep Realm 1.1 (set 1)</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="hoards_of_the_deep_realm_11.dsk" size="430336" crc="7847ab37" sha1="5431607fa3a6a8788444db23c54983367bb54614"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hotdr_11a">
+ <description>Hoards of the Deep Realm 1.1 (set 2)</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="hoards_of_the_deep_realm_11_ds40.dsk" size="430336" crc="87e08840" sha1="1f3a44cabde5b09e10c2f60425c55235a5d8943e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="im_shareware_d1">
+ <description>impact_media_shareware_d1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="impact_media_shareware_d1_ds40.dsk" size="430336" crc="2a3ace87" sha1="5d16052b3b464bfdc5089f630470a187ecda7e78"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="im_shareware_d2">
+ <description>impact_media_shareware_d2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="impact_media_shareware_d2_ds40.dsk" size="430336" crc="7a0251d3" sha1="37ce6a0daf755282ee3bb79a53007fceffde3b16"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sheepdog_trial">
+ <description>Sheep-dog Trial</description>
+ <year>1984</year>
+ <publisher>Jacaranda Wiley</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jacaranda_sheepdog_trial_ds40.dsk" size="430336" crc="abc2cc4b" sha1="d07ba2025da33c4a1f55667faf0fcad2db05adde"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="scavenger_hunt">
+ <description>Scavenger Hunt</description>
+ <year>1984</year>
+ <publisher>Jacaranda Wiley</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jacaranda_scavenger_hunt_ds40.dsk" size="430336" crc="081a699d" sha1="a01c668617c5f5caeef33cbcf880995cbea07246"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jandhb_01">
+ <description>JHBeesware 1</description>
+ <year>19??</year>
+ <publisher>J and H Beesware</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jandhbeesware_01_ds40.dsk" size="430336" crc="279661af" sha1="26982ea0cfc0fd48d74f596a7f3447101eba35ad"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jandhb_02">
+ <description>JHBeesware 2</description>
+ <year>19??</year>
+ <publisher>J and H Beesware</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jandhbeesware_02_ds40.dsk" size="430336" crc="91f48b0a" sha1="ea645b32a7da0da708f50d5a150d3736b25535a6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jandhb_03">
+ <description>JHBeesware 3</description>
+ <year>19??</year>
+ <publisher>J and H Beesware</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jandhbeesware_03_ds40.dsk" size="430336" crc="ab5c7e3d" sha1="1ccc6b433a172248d64d007719c10a7c8b496d85"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="number_line_set">
+ <description>Number Line Set</description>
+ <year>19??</year>
+ <publisher>J and H Beesware</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jandhbeesware_number_line_set_ds40.dsk" size="430336" crc="93066d46" sha1="13b80d11f7059dcdd67a3ed3b91ea39f52d46523"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pascals_tri_set">
+ <description>Pascals Triangle Set</description>
+ <year>19??</year>
+ <publisher>J and H Beesware</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jandhbeesware_pacals_triangle_set_ds40.dsk" size="430336" crc="b340f3fb" sha1="e26cff8fe0ef1f4a78f6c085256d7be775dbe832"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lets_eat_worms">
+ <description>Lets Eat Worms</description>
+ <year>1985</year>
+ <publisher>Nectar</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="lets_eat_worms_ds40.dsk" size="430336" crc="e27466a1" sha1="eb7da544644e97226383de51a7dad4d18f238619"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="manual_arts">
+ <description>Manual Arts</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="manual_arts_ds40.dsk" size="430336" crc="89eea73c" sha1="d6787460d9e33e11c519f6654524550f88cf27c4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="master_demo">
+ <description>Bennett Data Multiplexer Communications Programme master demo</description>
+ <year>1985</year>
+ <publisher>Bendata</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="master_demo_ds40.dsk" size="430336" crc="5fe40221" sha1="c8b7068170f0c4eb408a79d28256c94e8e23586d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mathematics_1">
+ <description>Mathematics #1</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mathmatics_1_ds40.dsk" size="430336" crc="779edc40" sha1="7c82fee506b7e8f424c72e7d0c500bbc17c541ac"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mathematics_2">
+ <description>Mathematics #2</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mathmatics_2_ds40.dsk" size="430336" crc="74c05cce" sha1="f6658fd3f1150b943d698bee7c94873fe91d4b33"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mc_basic_tut">
+ <description>Machine-Code and Basic Tutorials</description>
+ <year>1983</year>
+ <publisher>Mytek</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mc_and_basic_tutor_ds40.dsk" size="430336" crc="6a913678" sha1="38458ff703c47ab1c60bd49b63f393d08335d504"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="public_domain">
+ <description>Microbear Public Domain</description>
+ <year>19??</year>
+ <publisher>Microbear</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="microbear_public_domain_ss80.dsk" size="430336" crc="421962bb" sha1="1177c0590dc22f307106cf4d87c416615259842d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wordstar_33_1of2">
+ <description>wordstar v3.3 1of2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="wordstar_3.3_1of2_ss80.dsk" size="430336" crc="5bb1f612" sha1="720ac2cb6c1ea7e13aafdfdf06e86909be54eb99"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wordstar_33_2of2">
+ <description>Wordstar v3.3 2of2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="wordstar_3.3_2of2_ss80.dsk" size="430336" crc="19eb467f" sha1="760e2a2b3ee23f75e21a884c8355f1486715baba"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="msinv2">
+ <description>Microspace Invaders II</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="microspace_invaders_ds40.dsk" size="430336" crc="3ba81e40" sha1="d1ec21220dd7084d402c38944e24107615339aae"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_dbase_a_001">
+ <description>MUGWA dbase_a_001</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_dbase_a_001_ds40.dsk" size="430336" crc="59f77a92" sha1="df54a8ac29cfda90c46f7cd0d52fa499528ccfb0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_dbase_a_002">
+ <description>MUGWA dbase_a_002</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_dbase_a_002_ds40.dsk" size="430336" crc="61a470cf" sha1="4bd73635cbd28283f2c06ae34c2dcba02d8affbb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_dbase_a_003">
+ <description>MUGWA dbase_a_003</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_dbase_a_003_ds40.dsk" size="430336" crc="d2508ffd" sha1="e1b61d70290b1180d522e7c8f079c8d858fdfdb5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_dbase_a_004">
+ <description>MUGWA dbase_a_004</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_dbase_a_004_ds40.dsk" size="430336" crc="a007da2b" sha1="291341f0c7a97bc37067a526ae7ec6bbc8575e57"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_dbase_a_005">
+ <description>MUGWA dbase_a_005</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_dbase_a_005_ds40.dsk" size="430336" crc="5ced7e0e" sha1="d3b23f589d52cd07d642df1fdd3c998baf28725f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_macro_001">
+ <description>MUGWA macro_001</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_macro_001_ds40.dsk" size="430336" crc="8f0e7bfc" sha1="b82a2b4d056a9c89df880f6bd604bd87a65b8f6d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_dbase_001">
+ <description>MUGWA dbase_001</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_dbase_001_ds40.dsk" size="430336" crc="41099a6f" sha1="bc76d578c656a1d11b41bf1f30c8cdcf1c8c699b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_dbase_002">
+ <description>MUGWA dbase_002</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_dbase_002_ds40.dsk" size="430336" crc="c3e9f041" sha1="2c0d79bb627702d2548a1bf99adfc5bcbcb2d9aa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_paslib2_000">
+ <description>MUGWA paslib2_000</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_paslib2_000_ds40.dsk" size="430336" crc="ab719ae8" sha1="4ccc7e7bf07255199001c23b2c3326d72ac31ea1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_boot_disk">
+ <description>MUGWA boot disk</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_boot_disk_ss80.dsk" size="430336" crc="e25c3c40" sha1="321b70449b62ea338be12504b9cfc733d146e0e5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_rom_pak">
+ <description>MUGWA rom_pak</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_rom_pak_ss80.dsk" size="430336" crc="e7e5a9bd" sha1="7f00eebb25d5f08b10c3dbf243b7f5c05b31f041"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_amrad">
+ <description>MUGWA Amateur Radio programs</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_amrad_ds40.dsk" size="430336" crc="5e013253" sha1="ba8891946d8854144269a672ce54794a247d46c0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_bforth_001">
+ <description>MUGWA Beeforth</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_bforth_001_ds40.dsk" size="430336" crc="fafdbb2e" sha1="b5c1bada4a89bbee3446f604d334d65e790de6d2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mu_cp83_000">
+ <description>MUGWA Small-C</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mugwa_cp83_000_ds40.dsk" size="430336" crc="c99405cf" sha1="7bf6ea2556d3fa0aaede4a94a185e76a97426c96"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="netpack_1">
+ <description>Networked Educational 1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="netpack_1_ss80.dsk" size="430336" crc="078160cf" sha1="ac027689ca4b678a78cfa1468ac51afd4b389405"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="netpack_2">
+ <description>Networked Educational 2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="netpack_2_ss80.dsk" size="430336" crc="11b004dd" sha1="d0cea5c814a3021be5fdcedcd83a4664d0fca148"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="netpack_3">
+ <description>Networked Educational 3</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="netpack_3_ss80.dsk" size="430336" crc="fa99b857" sha1="83baba089303f75c337b42663de1ec8d4287d05f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="one_world">
+ <description>One World Countries Database 1.01</description>
+ <year>1985</year>
+ <publisher>Active Learning Systems</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="one_world_ss80.dsk" size="430336" crc="313ca7c5" sha1="7b7e7c9007477cfb8346e54732b13ae4a2e9db16"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="physical_science">
+ <description>Physical Science</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="physical_science_ds40.dsk" size="430336" crc="028ebb9e" sha1="c3a899d15553390d2f7d927ca63e713dd6def9f3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sample">
+ <description>CIAB menu sample</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="sample_ss80.dsk" size="430336" crc="92c452a1" sha1="1d592b9e838c2960f50d1176d62bb699847bd83b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nanoc">
+ <description>Nanoc the Destroyer / Jumpman (set 1)</description>
+ <year>19??</year>
+ <publisher>Superior Computer Software</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="scs_d1_nanoc_ss80.dsk" size="430336" crc="918dd463" sha1="cfbc5ba5d57379dd1e384bdc18acdc213e54d5a8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nanoca">
+ <description>Nanoc the Destroyer / Jumpman (set 2)</description>
+ <year>19??</year>
+ <publisher>Superior Computer Software</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="scs_d1_nanoc_ss80_1.dsk" size="430336" crc="16ef7162" sha1="a70369853afc8fc44ada93efa78d291c339e1844"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nanocii">
+ <description>Nanoc the Destroyer II / Freedom Fighter / Missile Dodger (set 1)</description>
+ <year>19??</year>
+ <publisher>Superior Computer Software</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="scs_d2_nanoc2_ss80.dsk" size="430336" crc="75ee2812" sha1="889417ab1e792b4da96367e6db6eb68288c3c478"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nanociia">
+ <description>Nanoc the Destroyer II / Freedom Fighter / Missile Dodger (set 2)</description>
+ <year>19??</year>
+ <publisher>Superior Computer Software</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="scs_d2_nanoc2_ss80_1.dsk" size="430336" crc="d068e074" sha1="404e66a86a6a3fe94b287b1b6c592a6a9397069b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sg_80_40">
+ <description>Simon Gerraty 80/40 Track Bios 4.2b (set 1)</description>
+ <year>1987</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simon_gerraty_80_40_ds40.dsk" size="430336" crc="31b9525f" sha1="72159f9f817b67877073d9cc1c60a8eb5d7d02fd"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sg_80_40a">
+ <description>Simon Gerraty 80/40 Track Bios 4.2b (set 2)</description>
+ <year>1987</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simon_gerraty_80_40_ss80.dsk" size="430336" crc="3dc38c8b" sha1="a0479f7324a9ba4b6e5527f4efa41a731456b060"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="simple_bus_gr">
+ <description>Simple Business Graphics</description>
+ <year>19??</year>
+ <publisher>Microworld</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simple_business_graphics_ss80.dsk" size="430336" crc="72dc2066" sha1="6dacff4b3516693d8e94ce76bb568f3cb34e6b75"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="simply_db_120c">
+ <description>Simply DB 1.20c</description>
+ <year>1984</year>
+ <publisher>Reid Software</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simply_db_120c_ss80.dsk" size="430336" crc="a9ac2ee8" sha1="08523d0ac80942d8d99d7dab6249b373d58d336d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="simply_db_202">
+ <description>Simply DB 2.02</description>
+ <year>19??</year>
+ <publisher>Reid Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="simply_db_202_ds80.dsk" size="860416" crc="b277feb9" sha1="88737ba44c1d0d9733dab0cb3dce4989018d7a8a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sketch_pad">
+ <description>Sketch Pad</description>
+ <year>1984</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="sketch_pad_ds40.dsk" size="430336" crc="e66fd15d" sha1="9b3ff4ac8aad3c7f18603d9cbe1db35ec2141a76"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="smartkey_11a">
+ <description>Smartkey v1.1a</description>
+ <year>1984</year>
+ <publisher>FBN Software</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="smartkey_11a_ds40.dsk" size="430336" crc="a5b9d05f" sha1="6bcf72ac6d4d37582898da029f97e5e3f0e4749c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="smug_02">
+ <description>SMUG 02</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="smug_02_ds40.dsk" size="430336" crc="ea4632b0" sha1="ab2d901687ba507298095f451a62ef15ff323fef"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="smug_tape_lib">
+ <description>SMUG Tape Library</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="smug_tape_library_ds40.dsk" size="430336" crc="0999ca0f" sha1="8d8146ef1ee53c0410509bf35a4281043043954d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="social_science">
+ <description>Social Science</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="social_science_ds40.dsk" size="430336" crc="3d5ae432" sha1="dddd0aaf4a0ce4f02d92e0c4900e32961cd993e5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spring_clipart">
+ <description>Springboard Clipart</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="springboard_clipart_ds80.dsk" size="860416" crc="b80941f0" sha1="9f0eb0e769e8198d4de210b0c9b9413af86c96f0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="survivor" supported="no"><!-- Needs Joystick -->
+ <description>Survivor</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="survivor_ds40.dsk" size="430336" crc="b9661d0d" sha1="612cc774b2a79e562c40eb8ec0b011fc0590c5ba"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sword_quest_plus">
+ <description>Sword Quest / Microspace Invaders II / The Valley / Caves</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="sword_quest_plus_ds40.dsk" size="430336" crc="c138a4c5" sha1="ce25effff0025677a5f0586569423d4bffe1d061"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sydney_approach">
+ <description>Sydney Approach</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="sydney_approach_ds40.dsk" size="430336" crc="bae54748" sha1="ae046544f13ff8ef2fbd95854b5888f37195ae02"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="telcom_22">
+ <description>Telcom 2.0/2.2 (for 64k)</description>
+ <year>1985</year>
+ <publisher>Microworld Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="telcom_v2_for_56k_ds40.dsk" size="430336" crc="7b38b57f" sha1="6519edc8241793108b930294d470e9a60e9bef84"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="the_winners">
+ <description>The Winners</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="the_winners_ss80.dsk" size="430336" crc="61e27db4" sha1="6bfbc2b6e67e6564873085050eeddd5e8f4517a9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turtle">
+ <description>turtle</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="turtle_ds40.dsk" size="430336" crc="e8f51bf9" sha1="54be02dfb14c3b4c09f8929b396f870981cee77c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ext_turtle_43p">
+ <description>Extended Turtle 4.3p</description>
+ <year>19??</year>
+ <publisher>Nectar</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="nectar_extended_turtle_43p_ds40.dsk" size="430336" crc="90bdf62f" sha1="ed55c1529948427dd36353da0476cd98fc31a818"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ext_turtle_46p">
+ <description>Extended Turtle 4.6p</description>
+ <year>1986</year>
+ <publisher>Nectar</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="nectar_extended_turtle_46p_ss80.dsk" size="430336" crc="7378ac58" sha1="d2e1adfab57004dd91b703e1f7283dc802b58d98"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="utility">
+ <description>Utility</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="utility.dsk" size="430336" crc="0f19ddba" sha1="53ee5046f82e45b143aa6c178af409fe252411c2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viatel_upg_v13a">
+ <description>Viatel Upgrade v1.3a</description>
+ <year>1985</year>
+ <publisher>Microworld Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="viatel_upgrade_v13a_ss80.dsk" size="430336" crc="e7b7d47b" sha1="73a724d57f3e123a183ab16a2d2322a5fb6c53eb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viper">
+ <description>Viper</description>
+ <year>1983</year>
+ <publisher>Subatomic Software</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="viper_ds40.dsk" size="430336" crc="bd0519c2" sha1="ca07111a4ab30c87cd37ef38a6b4385bbc1cb20d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wdproc">
+ <description>WDPROC - Word Processing Package</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="wordprocessor_ds40.dsk" size="430336" crc="1cbb0e61" sha1="3d9dfd0d459c13bd0c43f637fffae940fb8708a9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word_puzzle">
+ <description>Word Puzzles</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="word_puzzle_ss80.dsk" size="430336" crc="ee522105" sha1="e9d7ce0317928320d193775ad2185e3c8471d925"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mms">
+ <description>Membership Maintenance System v1.30</description>
+ <year>1983</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Password is 12345678"/>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="(psw=12345678)mms_ds80.dsk" size="860416" crc="6ca8e9c7" sha1="d82332ae3627f8f802e30c2ebc5849f46aaa0002"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128ks">
+ <description>128ks</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128ks_ds40.dsk" size="430336" crc="a88e6c09" sha1="697d3e204bce228d0a1e0653d767b5f17d61c488"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128ks_master">
+ <description>128ks_master</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128ks_master_ds40.dsk" size="430336" crc="d7f02a01" sha1="e0fa70cdf2115fa98dbb12cb0a369a22e1e77de4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128ks_swed_boot">
+ <description>128ks_swedish_boot</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128ks_swedish_boot_disk_ds40.dsk" size="430336" crc="04b09f67" sha1="63588fa086c77e4f8f397129405312f8967cf3e0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128ks_utility">
+ <description>128ks_utility</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128ks_utility_ds40.dsk" size="430336" crc="2a46c9ec" sha1="99760f39dfe5ad6cd7191c55f612747b3af9e120"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128k_system_35">
+ <description>128k_system_master_35</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128k_system_master_35.dsk" size="430336" crc="a39edc31" sha1="439dd19d82cb191399eb3f4f8d272b337be08491"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128k_swed_boot">
+ <description>128k_swedish_boot_disk</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128k_swedish_boot_disk_ds40.dsk" size="430336" crc="dcd25b9e" sha1="ed09e566a13f26d358c3ad46cf12995cb1a7f187"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="64kmaster">
+ <description>64kmaster</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="64kmaster.dsk" size="430336" crc="fd002ef6" sha1="2b159a3f24921f5be233217aa66ff8ae46010643"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="64premium_system">
+ <description>64k_premium_system_disk</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="64k_premium_system_disk_ss80.dsk" size="430336" crc="faae5eec" sha1="20b1a8b4a16fe2cefec196ba7009afddd580500e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="64premium_master">
+ <description>64k_premium_master</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="64k_premium_master_ss80.dsk" size="430336" crc="0018f7d7" sha1="92d1a1e09eaf9a5613edfbba02c320f14873a147"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="64k_zcpr16">
+ <description>64k_zcpr1.6</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="64k_zcpr1.6_ds40.dsk" size="430336" crc="e493de86" sha1="b26270a9b5223d171f349166b2130838b59026c2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventure">
+ <description>Adventure Games (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_ds84.dsk" size="860416" crc="c64e0d46" sha1="f0b93a1c13fc0db30135ec15b0bd477736818cf8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventure_1">
+ <description>Adventure Games (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_games_1_ds84.dsk" size="860416" crc="22e6d9e8" sha1="246b08f596dbea8558b07fd9a60eda84cadb2574"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventh_1_t01">
+ <description>Honeysoft Microbee Text Adventures Vol One (set 1)</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_adventures_1_t01.dsk" size="215296" crc="d6e43442" sha1="b8d08cc526e95a7dc1f1c33c8b14d124f79261a2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventh_1_t04">
+ <description>Honeysoft Microbee Text Adventures Vol One (set 2)</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_adventures_1_t04.dsk" size="215296" crc="fbf395f3" sha1="43d6903f539a9e4c55b6b2976caf37a118d32c6a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventure_01">
+ <description>Adventure Games #1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_01_ds80.dsk" size="860416" crc="96211f16" sha1="355703f8e38ff1311ff9f99bd8c90044f0858f96"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm2">
+ <description>Alan's Adventure's Disk 2 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure2_ds84.dsk" size="860416" crc="133f8c6d" sha1="9b19fc1e7d815b3332838d8856f3136e05f0c56d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm2a">
+ <description>Alan's Adventure's Disk 2 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure2_ds84_1.dsk" size="860416" crc="61a615ab" sha1="f58f38f22c4e3ee6c34f71e4af0dc05fcdce40ea"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm2b">
+ <description>ChickenMan's Adventure's Disk 2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_02_ds80.dsk" size="860416" crc="ee63ca44" sha1="c9bfed386316833a0ffe65cc3fd235261e939b79"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventh_2_t01">
+ <description>Honeysoft Microbee Adventures Vol Two (set 1)</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_adventures_2_t01.dsk" size="215296" crc="18eac019" sha1="d06c20d2fb09a602b89bcb5f613e8b91e7c818e6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventh_2_t04">
+ <description>Honeysoft Microbee Adventures Vol Two (set 2)</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_adventures_2_t04.dsk" size="215296" crc="4a970b38" sha1="54e22386e47d2bc176c12ee4d93f4ec66085d3d6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventh_3_t01">
+ <description>Honeysoft Microbee Adventures Vol Three (set 1)</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_adventures_3_t01.dsk" size="215296" crc="883a7bba" sha1="8fb0207e83079d9025af20bca77ba6cb1bb692a1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventh_3_t04">
+ <description>Honeysoft Microbee Adventures Vol Three (set 2)</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="honeysoft_adventures_3_t04.dsk" size="215296" crc="ba56e0be" sha1="3302a6156c003ad34deb5aabe1414ff5a2545170"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm3">
+ <description>Alan's Adventure's Disk 3 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure3_ds84.dsk" size="860416" crc="d6a24aa6" sha1="0540b3a5de84a3ffaa53910311823d4674efc97e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm3a">
+ <description>Alan's Adventure's Disk 3 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure3a_ds84.dsk" size="860416" crc="de6bc2d5" sha1="79e6dd46a34f0ca84fe73cc9c1123d09eeeb2966"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm3b">
+ <description>ChickenMan's Adventure's Disk 3</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_03_ds80.dsk" size="860416" crc="8d01066d" sha1="9e78f70e46eafa3775f0378e1419cc4294c9310f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm4">
+ <description>Alan's Adventure's Disk 4 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure4_ds84.dsk" size="860416" crc="245196c7" sha1="50e2800cf388428e6a2c16fe256dd7af84884bb3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm4a">
+ <description>Alan's Adventure's Disk 4 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure4_ds84_1.dsk" size="860416" crc="439be696" sha1="e2fc1c13bf20b95e23185054117ca50e944cba23"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm4b">
+ <description>ChickenMan's Adventure's Disk 4</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_04_ds80.dsk" size="860416" crc="f40c5f97" sha1="6223926c6c26a4fe147edf3313bb99c6539099c9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm5">
+ <description>ChickenMan's Adventure's Disk 5</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_05_ds80.dsk" size="860416" crc="a0c69ddb" sha1="0451ee3348235cc48a060080e82c7d49a5e91216"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm6">
+ <description>ChickenMan's Adventure's Disk 6</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_06_ds80.dsk" size="860416" crc="b14cdf7d" sha1="50e7f90d5f6ed1ef94c80f849e9ccba6bc7ac623"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm7">
+ <description>ChickenMan's Adventure's Disk 7</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_07_ds80.dsk" size="860416" crc="eabc2341" sha1="cbee3393b46b8ba73adb362488d937c526a1829a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm8">
+ <description>ChickenMan's Adventure's Disk 8</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_08_ds80.dsk" size="860416" crc="5dbed494" sha1="dfc32816846b5b5e9f88064086bbb382b196f6d2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm9">
+ <description>ChickenMan's Adventure's Disk 9</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_09_ds80.dsk" size="860416" crc="ecc3e126" sha1="b62adcbfddf993c88afedf27c78dba62c4965b96"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm10">
+ <description>ChickenMan's Adventure's Disk 10</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_10_ss80.dsk" size="430336" crc="ab904b4a" sha1="916c76e65b234bc119ab2f05914ebe0ea3811222"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm11">
+ <description>ChickenMan's Adventure's Disk 11</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_11_ss80.dsk" size="430336" crc="7c66ede0" sha1="f9959374a1ab2d34ffa4191a23160f0996722430"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm12">
+ <description>ChickenMan's Adventure's Disk 12</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_12_ss80.dsk" size="430336" crc="b2c92ebf" sha1="396797362f52c9f59241065fb445bcf0f5ce15d0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm15">
+ <description>ChickenMan's Adventure's Disk 15</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_15_ss80.dsk" size="430336" crc="64d0debc" sha1="032421ed012c34a461cd883673542fea89f8d05a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm16">
+ <description>ChickenMan's Adventure's Disk 16</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_16_ss80.dsk" size="430336" crc="381951f5" sha1="dd751e291a597621b70ec042c6352395442f269f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm17">
+ <description>Various Scottfree Adventures Disk 17</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_17_ss80.dsk" size="430336" crc="38bddd4b" sha1="2e56c8623e8f1bf614fc167f3e0e9f5c1bea428c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm18">
+ <description>ChickenMan's Adventure's Disk 18</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_18_ss80.dsk" size="430336" crc="cbc958ed" sha1="20ea1690a66681ce3e61bce1849f4518f18fdd96"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm19">
+ <description>ChickenMan's Adventure's Disk 19</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_19_ss80.dsk" size="430336" crc="e2645dd4" sha1="10829ae6d367efa6990a214da887b1c0ec8b3428"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm20">
+ <description>ChickenMan's Adventure's Disk 20</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_20_ss80.dsk" size="430336" crc="8a7c271d" sha1="6aeea4e9de4295332f8aad2c7d01c8efaad85fbc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm21">
+ <description>ChickenMan's Adventure's Disk 21</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_21_ss80.dsk" size="430336" crc="f0a4efc1" sha1="e2a759c6c3b59f5aa02a4e5b777b850b0ccbc66b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm22">
+ <description>ChickenMan's Adventure's Disk 22</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_22_ss80.dsk" size="430336" crc="014f504b" sha1="f31ec0e662df08dc6fa3920f57374d2ac7400afc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm23">
+ <description>ChickenMan's Adventure's Disk 23</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_23_ss80.dsk" size="430336" crc="a4827aa9" sha1="3d7093df1d2b88c99bf0fe5b0717c4283c53b34d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm24">
+ <description>ChickenMan's Adventure's Disk 24</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_24_ss80.dsk" size="430336" crc="994f24e7" sha1="bb2b5af8954d179f3131e4186cd4d199e8777228"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm25">
+ <description>ChickenMan's Adventure's Disk 25</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_25_ss80.dsk" size="430336" crc="411c69a1" sha1="c58db9f49370a6f582fb1a1f304e097d151d897d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm26">
+ <description>ChickenMan's Adventure's Disk 26</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_26_ss80.dsk" size="430336" crc="316e2e9c" sha1="a89e65dd07962f172aa5c671002e45daa2a83319"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm27">
+ <description>ChickenMan's Adventure's Disk 27</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_27_ss80.dsk" size="430336" crc="00f45490" sha1="a702f8dcde595c5ce82b5abb636255310d75becf"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm28">
+ <description>ChickenMan's Adventure's Disk 28</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_28_ss80.dsk" size="430336" crc="d5bafaf7" sha1="7b8f8e9107dd7e001463bd7c726f0d3e794355e6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm29">
+ <description>ChickenMan's Adventure's Disk 29</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_29_ss80.dsk" size="430336" crc="a20325f0" sha1="95d88c96d370a2a80724e44f8456f0913bb012f1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventcm30">
+ <description>ChickenMan's Adventure's Disk 30</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="adventure_30_ss80.dsk" size="430336" crc="17cbce7f" sha1="f69ba1afd9e26601e9760b884c3f893e2a554db5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade1">
+ <description>Menu of Arcade Games (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="arcade-1a1b_ds84.dsk" size="860416" crc="9b5fd44c" sha1="a434841607ebd5dd537d05c6be45154f3694a541"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade1m">
+ <description>Microbee Arcade Games #1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="arcade_1_ss80.dsk" size="430336" crc="c1a35798" sha1="9f26408c85c8bbba475e81690481191d8fbe0284"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade1a">
+ <description>Menu of Arcade Games (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="arcade1_ds84.dsk" size="860416" crc="19417e06" sha1="45ad148572dfffee1d421ceb617d88eb9c4af2c4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade1b">
+ <description>Menu of Arcade Games (set 3)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="arcade1_ds80.dsk" size="860416" crc="7c89f161" sha1="2f75ed79c392a9532b3142fa673882957f953cd3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade2">
+ <description>Menu of Arcade Games (set 4)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="arcade2_ds80.dsk" size="860416" crc="85dec9b7" sha1="7ef8fb0f00ec9f12919905977e07e7d97e6d0c9c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade2m">
+ <description>Microbee Arcade Games #2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="arcade_2_ss80.dsk" size="430336" crc="fa32522a" sha1="e8463233f8d63f25355efdeed79a433ca7ca60dc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcade2h">
+ <description>Honeysoft Arcade Games Vol II</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="arcadegames2.dsk" size="215296" crc="6e9f5b52" sha1="4440db5341581eee5b49be6d840d7f85dae9bfa9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="australiana">
+ <description>Australiana Quiz Game</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="australiana_sydney_2_melb_marathon_ss80.dsk" size="430336" crc="1b89c3c9" sha1="c4fdedbb7bab17ad899edb1ab84fcdb4e9aa2ad8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bnlanguagearts">
+ <description>Bernie Nichols Language Arts</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="bernie_nichols_language_arts_ds40.dsk" size="430336" crc="3efc4b23" sha1="8ea91ecdfd12474e4a3628f61a3947382d3a2614"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="word_study">
+ <description>Beesware Word Study</description>
+ <year>19??</year>
+ <publisher>Bendata</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="beesware_word_study_ss80.dsk" size="430336" crc="d95c0e26" sha1="849e5f3cd0ecacd77ac0be40bc9acefd38dbb949"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bnreading">
+ <description>Bernie Nichols Reading Programs</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="bernie_nichols_reading_ds40.dsk" size="430336" crc="51d32b88" sha1="6c23321c883529b44a226fd37ef0f858d76697a3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bnscience">
+ <description>Bernie Nichols Science and Miscellaneous</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="bernie_nichols_science_ds40.dsk" size="430336" crc="77805cd4" sha1="62c39cbc9edd19523f8ba4da9849ebcdbe91b08f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bnspelling">
+ <description>Bernie Nichols Spelling Programs</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="bernie_nichols_spelling_ds40.dsk" size="430336" crc="042ddf8e" sha1="cc3429a92c658d7cd399b28dad5a49a6686c9ce8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bngraphics">
+ <description>Bernie Nichols Educational Graphics</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="bernie_nichols_graphics_ds40.dsk" size="430336" crc="47013378" sha1="18bf6716d11b733c880cf342d9f112f9d7703979"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bondwell_speech" supported="no"><!-- needs hardware -->
+ <description>Bondwell Speech</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="bondwell_speech_ss80.dsk" size="430336" crc="28e5ed1b" sha1="2409de4c25fcfbc52c0b04f6fc39bd68531d4d35"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boot">
+ <description>128k boot disk (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="boot.dsk" size="430336" crc="aee6c402" sha1="c6bf37aec94163becb71c71dc68dd2bcfdc48d9c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boot2">
+ <description>128k boot disk (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="boot2.dsk" size="430336" crc="e61422fe" sha1="f9177128925f3dc960196b5ce4d4fe05f73e3f2f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="brian_howarth">
+ <description>Brian Howarths Mystery Adventures</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="brian_howarth_adventures_ss80.dsk" size="430336" crc="048c6262" sha1="441790a78ff9e7a056ac3679daffecd8d5f3b974"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bushwalking">
+ <description>Bushwalking Adventure</description>
+ <year>1984</year>
+ <publisher>Dreamcards</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="bushwalking_adventure_ss80.dsk" size="430336" crc="0bf3176e" sha1="491c404368e8f8dfc8f0f01725db01631d9a25ff"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bushome_database">
+ <description>Business and Home Database</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="business_and_home_database_ds80.dsk" size="860416" crc="0748e5ad" sha1="eb54f7fa65ca2c689040c47cef096c001a36363f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="buzznet3">
+ <description>Bennett Data Multiplexer Buzznet III v1.3 (set 1)</description>
+ <year>1985</year>
+ <publisher>Bendata</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="buzzcalc_ds40.dsk" size="430336" crc="e90bbe06" sha1="d02c85ca47e3d9043b0b1a71bf0381a7cdd864c1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="buzznet3a">
+ <description>Bennett Data Multiplexer Buzznet III v1.3 (set 2)</description>
+ <year>1985</year>
+ <publisher>Bendata</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="buzznet_iii_network_v13_ds40.dsk" size="430336" crc="23bffc40" sha1="60dc8b5a268bb176fe4fcef3e701e32358ba0473"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="carefile_13">
+ <description>Carefile v1.3</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="carefile_1.3_ds80.dsk" size="860416" crc="1ac8f1ce" sha1="ac008049ff54e2db690c61a926efcca1c37aaea1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cashbook">
+ <description>Cashbook_v2.1 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cashbook_v2.1_ds40.dsk" size="430336" crc="6c63e11e" sha1="d4e6e0ccd1735e45935f5fc4da82ad84b110dfe1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cashbook2">
+ <description>Cashbook_v2.1 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cashbook_v2.1_ds40_1.dsk" size="430336" crc="f3bb4a4d" sha1="f8158c944b0b03cf1bb3b5d543a835471b871d01"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm_demo">
+ <description>ChickenMan's Games Demo Disc</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="ChickenMan_Games_Demo_Disc_ds80.dsk" size="860416" crc="e9c8dad6" sha1="1e1ef6c6da29202bc0b714ab69555e5f90e562bb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="citadel_of_chaos">
+ <description>Citadel of Chaos v2.01</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="citadel_of_chaos_ss80.dsk" size="430336" crc="257e5596" sha1="4ff8f42be1628beccb0015ce40bd9c5581ced932"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cloze_exercises">
+ <description>Cloze Exercises</description>
+ <year>1985</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cloze_exercises_ds40.dsk" size="430336" crc="c27fe55c" sha1="84b45da73ff5e86079beea0042ebbacaa572cd5b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="composer_bee">
+ <description>Composer Bee Plus</description>
+ <year>1985</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="composer_bee_plus_ss80.dsk" size="430336" crc="118371d1" sha1="42a1193c5c1d4742712760252060e2fc4b2c2cea"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="comprobe">
+ <description>Comprobe 1.00</description>
+ <year>1989</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="comprobe_ss80.dsk" size="430336" crc="3603e901" sha1="f9e6085fdb58e183e85392af40f4cadd1889d2e2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="crossword_capers">
+ <description>Crossword Capers</description>
+ <year>1984</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="crossword_capers_ds40.dsk" size="430336" crc="7b849c56" sha1="7915d6ec3941a81affaacb42feae34b829c121a7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cas_educational">
+ <description>C.A.Sinclair Educational Disk</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="c_a_sinclair_educational_disk_ds40.dsk" size="430336" crc="ff34485e" sha1="49b8c6b67b470ededcbbf301ec854c08c49f4095"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_01">
+ <description>Denham 1</description>
+ <year>19??</year>
+ <publisher>Denham Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="denham_01_ds80.dsk" size="860416" crc="fd6bbf47" sha1="72895623d827721e241becbbe9132c7f4ae2fe62"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_02">
+ <description>Denham 2</description>
+ <year>19??</year>
+ <publisher>Denham Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="denham_02_ds80.dsk" size="860416" crc="058a3ad7" sha1="16fde728a9154f00ae3abd29129e89271376b725"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_03">
+ <description>Denham 3</description>
+ <year>19??</year>
+ <publisher>Denham Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="denham_03_ds80.dsk" size="860416" crc="9ee067b5" sha1="772fb3f579cf975f9714c8c2810590410d3d8687"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_04">
+ <description>Denham 4</description>
+ <year>19??</year>
+ <publisher>Denham Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="denham_04_ds80.dsk" size="860416" crc="55c311e1" sha1="cf56cfb24ca60757ab1f431f52db05d31f2c07b5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_kta">
+ <description>Denham Kings Trees Aces</description>
+ <year>19??</year>
+ <publisher>Denham Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="denham_kings_trees_aces_ss80.dsk" size="430336" crc="80f1182a" sha1="f180bdc10f1599ff56c21d5bb660f39696111efa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="d_easy_stats">
+ <description>Denham Easy Stats</description>
+ <year>19??</year>
+ <publisher>Denham Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="denham_easy_stats_ss80.dsk" size="430336" crc="96b6e3cb" sha1="0735c3181847668cc0a67563d06c2c7bba93039a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dragon_spells">
+ <description>Dragon Spells</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="dragon_spells_ss80.dsk" size="430336" crc="fe5db296" sha1="c6766a6a93c744875731bbb076f3f1e060c64c5f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dream_battleship">
+ <description>Battleship</description>
+ <year>1983</year>
+ <publisher>Dreamcards</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="dreamcards_battleship_ss80.dsk" size="430336" crc="954c036e" sha1="63cd5f1610f2b5e806605883782c0fcd1e1b5f99"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dream_hangman">
+ <description>Hangman</description>
+ <year>1983</year>
+ <publisher>Dreamcards</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="dreamcards_hangman_ss80.dsk" size="430336" crc="e15c4399" sha1="e8d03faa8b7adccc2b4248d1499154f41e039fdc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_05">
+ <description>education_05</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_05_ds80.dsk" size="860416" crc="8254ce65" sha1="04fc45e94bc22971d7bfc0aff30465dc75c323e6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_04">
+ <description>education_04</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_04_ds80.dsk" size="860416" crc="958c9879" sha1="8d3b5295ff54ccd37e76eae7c7fb3566433ba603"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_02">
+ <description>education_02</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_02_ds80.dsk" size="860416" crc="4adac457" sha1="f619dedd795aa2ea36a3aef26d1e36615e8b5ad5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_11">
+ <description>education_11</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="education_11_ss80.dsk" size="430336" crc="45cc1fea" sha1="adaf8b8c18b64134a495ca469da8d2986069d441"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_09">
+ <description>education_09</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_09_ds80.dsk" size="860416" crc="3ed71ced" sha1="714cc4532be15a96059c22ab7512ce7ed0033131"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_8">
+ <description>education_8</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_8_ds84.dsk" size="860416" crc="f61c15fd" sha1="599a365c8cfd2b79101de9370925472869a27bc8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_6">
+ <description>education_6</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_6_ds84.dsk" size="860416" crc="011de937" sha1="fcad76dd38620a8d4bb94895be6516c42c555a7d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_03">
+ <description>education_03</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_03_ds80.dsk" size="860416" crc="56c36449" sha1="907d25f37b898aa993f01d5de904b5576d977911"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_7">
+ <description>education_7</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_7_ds84.dsk" size="860416" crc="489f4331" sha1="a94a44cf57ab590dd8bc45e9fed209c7ebca9aae"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_06">
+ <description>education_06</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_06_ds80.dsk" size="860416" crc="767015a9" sha1="dfffb4601442ecc297e0e700f484410e36f7dd64"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_12">
+ <description>education_12</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_12_ds80.dsk" size="860416" crc="a9f7300e" sha1="bea1a567bedc7428e670a9a4b537ece18ec45644"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_07">
+ <description>education_07</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_07_ds80.dsk" size="860416" crc="3fe26cda" sha1="230bd22d47e2f2b3e10b6a2f9e1b23f44ed8ced3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_08">
+ <description>education_08</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_08_ds80.dsk" size="860416" crc="6e89f3ce" sha1="0e855cc45f7cef64412b10a2c6c73e2d691c5a59"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_9">
+ <description>education_9</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_9_ds84.dsk" size="860416" crc="e8cd2890" sha1="09eacc29e11961d9ac806cd4377f2b03800ac668"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_10">
+ <description>education_10</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_10_ds80.dsk" size="860416" crc="e844cc10" sha1="28aa5b73e63567f734fce39e0dc1af77f335fb60"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_1">
+ <description>education_1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_1_ds84.dsk" size="860416" crc="a3352ec3" sha1="9e7a98b44b4064eaaeeab928e533086d2c46ff35"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_3">
+ <description>education_3</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_3_ds84.dsk" size="860416" crc="ff47e2a7" sha1="238bd7282bfba33b176ec79bd452928a72b759e7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_4">
+ <description>education_4</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_4_ds84.dsk" size="860416" crc="f103182d" sha1="eaa0b14cb499d134b94f87bee881645c4a063a43"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="education_5">
+ <description>education_5</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="education_5_ds84.dsk" size="860416" crc="1aaa5eaf" sha1="be04727f731f50ed5398241bfa60a7c09888cbc9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="faust">
+ <description>Faust Adventure</description>
+ <year>1990</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="faust_ss80.dsk" size="430336" crc="89f2edea" sha1="2f6394713e848051ce6cc2e94b7763dff4058302"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="filemaster_v2">
+ <description>Filemaster v2</description>
+ <year>1985</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="filemaster_v2_ds40.dsk" size="430336" crc="f43a708f" sha1="7fb2e0b44a8fd5d63dc19ee73f44fb458d09baa7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="first_fleet3">
+ <description>First Fleet (set 3)</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="first_fleet_ss80_1.dsk" size="430336" crc="b5d64fed" sha1="0c85a43935b24c619f2a3c89e001954eeb78776f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ftl_modula2_d1">
+ <description>FTL Modula2 disk1</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="ftl_modula2_disk1_ss80.dsk" size="430336" crc="14d7934a" sha1="d24ed49f81803e328fcf96057ea2dad3baf99176"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ftl_modula2_d2">
+ <description>FTL_Modula2 disk2</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="ftl_modula2_disk2_ss80.dsk" size="430336" crc="429a026b" sha1="116dca1a50f337e2e711e5a263618986911b8787"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ftl_modula2_d3">
+ <description>FTL_Modula2 disk3</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="ftl_modula2_disk3_ss80.dsk" size="430336" crc="ef52d125" sha1="2d08929801de9ee9b65d31b02e8df6f715dac8b9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games">
+ <description>Menu of Games on Disk (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_1_ds84.dsk" size="860416" crc="ceede656" sha1="68257391317ffe026511cb039f34523630476b84"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamesa">
+ <description>Menu of Games on Disk (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_1_ds84_1.dsk" size="860416" crc="1ce055e8" sha1="0318c204b6bfb816eb0b57f7943f7d2d3a7a9124"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games1">
+ <description>Menu of Games Disk #1 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_1_ds80.dsk" size="860416" crc="31a90bcd" sha1="b48f1a3eef9de8acad2349c9bc318132b7ba4e2f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games1a">
+ <description>Menu of Games Disk #1 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_1_ds80_1.dsk" size="860416" crc="19cf2a6b" sha1="6cdf171714c5fc3d5a7af72172dd24890a4a3bd2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games2">
+ <description>Games2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="games2.dsk" size="430336" crc="5479fb4c" sha1="24da203bf46488153ca1ed2e76e1c7949473a077"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm2">
+ <description>Chickman's Games Disk 2 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_2_ds80.dsk" size="860416" crc="bf7ef968" sha1="107d21ade2c583735546889662ffa0bf91216b12"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm2a">
+ <description>Chickenman's Games Disk 2 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_2_ds80_1.dsk" size="860416" crc="ea8740d9" sha1="ef0fe907e6a3be182f19a24c4474a52a00bff1e2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamesb">
+ <description>Menu of games and other programs (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_3_ds84.dsk" size="860416" crc="517fbefa" sha1="8107586589a6f5d18a1653ed201a92bb08f2aa3e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamesc">
+ <description>Menu of games and other programs (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_3_ds84_1.dsk" size="860416" crc="17f21bbf" sha1="bf5a2f93959f9eb65f037a0e84b8251c31e378ab"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games3">
+ <description>Menu of games and others on Disk #3 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_3_ds80.dsk" size="860416" crc="c5f3aad4" sha1="85502d45a45d87300ef670b43408d38b6c3eacc2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games3a">
+ <description>Menu of games and others on Disk #3 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_3_ds80_1.dsk" size="860416" crc="814ea26c" sha1="bfa9cad96459b93c83f835ed109c19a31c8f4cfc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm4">
+ <description>Alan's Games Disk 4</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_4_ds84.dsk" size="860416" crc="40f69802" sha1="94a74cd37183b6780af114891a576f55ceea2514"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm4a">
+ <description>Chickenman's Games Disk 4 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_4_ds80.dsk" size="860416" crc="87b70daa" sha1="57d1374a30415ed226d9e47bec40c9f548575801"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm4b">
+ <description>Chickenman's Games Disk 4 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_4_ds80_1.dsk" size="860416" crc="c00bc611" sha1="311e57bcf76a655b318592412bc8c022c9f3da8f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm5">
+ <description>Chickenman's Games Disk 5 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_5_ds80.dsk" size="860416" crc="6517711b" sha1="1ff393531b2aa89600de9f122eea342310e68055"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm5a">
+ <description>Chickenman's Games Disk 5 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_5_ds80_1.dsk" size="860416" crc="0d79806b" sha1="8aabaed73dc69b2ce2935a44124889d514fd37d4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games6">
+ <description>Selection Menu (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="games1.dsk" size="430336" crc="1a13b39f" sha1="2a14064dcea6aab8674dc65d5b862bc37967fa6e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games6a">
+ <description>Selection Menu (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="games_6_ss80.dsk" size="430336" crc="33fa0272" sha1="4019427a837cad7a66b06e661359389dad1208b5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="games7">
+ <description>Menu of Games 7</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="games_7_ss80.dsk" size="430336" crc="eeaf2edb" sha1="be8b0f89a2fcc49b4444a70a05441ee3e0e3cb46"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm8">
+ <description>Chickenman's Games Disk 8</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="games_8_ds80.dsk" size="860416" crc="5bff2939" sha1="1815b6003b1a89bf84eaf5f6ce5ab8c5d7e1adde"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm9">
+ <description>Chickenman's Games Disk 9 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="games_9_ss80.dsk" size="430336" crc="4fd9a39f" sha1="812a6db5e197da56c3a498dc91eb62a30a4daf1c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamescm9a">
+ <description>Chickenman's Games Disk 9 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="games_9_ss80_1.dsk" size="430336" crc="355c5aa5" sha1="5a612f89b072fd21b10a8007d8197cdfd6a73b99"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="good_words">
+ <description>Goodison Words</description>
+ <year>1986</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="goodison_words_ss80.dsk" size="430336" crc="46392923" sha1="0b9a604318caf044402c5da7bc3e9a2182f94b65"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="good_edu_01">
+ <description>Goodison Education 1</description>
+ <year>1985</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="goodison_education_01_ds80.dsk" size="860416" crc="dc12856e" sha1="b76bc539900bd10339840007fff82cca3d5c1fe2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="good_edu_02">
+ <description>Goodison Education 2</description>
+ <year>1985</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="goodison_education_02_ds80.dsk" size="860416" crc="0d96d8c3" sha1="122925bf44b5b1a20af64cc958edc7de5f712648"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="good_edu_03">
+ <description>Goodison Education 3</description>
+ <year>1985</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="goodison_education_03_ds80.dsk" size="860416" crc="a1544c79" sha1="8e09e4f00fd05f733e24d842979af859b25020ff"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="good_spelling">
+ <description>Goodison Spelling</description>
+ <year>1986</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="goodison_spelling_ss80.dsk" size="430336" crc="8b6283d2" sha1="7683bc540ad764bb7a662bad73028a93d8cfb48d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="greybeard">
+ <description>Greybeard Tape Files (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="greybeard_tape_files_ds84.dsk" size="860416" crc="3f6d0ed5" sha1="f8900f194372de526eca743d46dde7aa31eb50eb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="greybeard2">
+ <description>Greybeard Tape Files (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="greybeard_tape_files_ds84_1.dsk" size="860416" crc="11f70993" sha1="315dd0d6ced2897799be1de70caf191ce8fea5bb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geography_01">
+ <description>Geography 1</description>
+ <year>1987</year>
+ <publisher>Humblebee</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="humblebee_geography_01_ss80.dsk" size="430336" crc="5fc9cca5" sha1="379323f122ddca8d4cab7130a4f68785475eea63"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geography_02">
+ <description>Geography 2</description>
+ <year>1987</year>
+ <publisher>Humblebee</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="humblebee_geography_02_ss80.dsk" size="430336" crc="b3b66922" sha1="95c5270f5d43f6c2bc03a019d04f729cb4c43abc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geography_03">
+ <description>Geography 3</description>
+ <year>1987</year>
+ <publisher>Humblebee</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="humblebee_geography_03_ss80.dsk" size="430336" crc="e80b0914" sha1="171176a0a69e38946e6cb189b9bbf9cfc5daa5f8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="icon_editor_v14">
+ <description>Icon Editor v1.4</description>
+ <year>1989</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="icon_editor_v14_ss80.dsk" size="430336" crc="676bc859" sha1="3b8de758b5ee98a10e3664c4f3745c2cbd714916"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="infoexpress">
+ <description>Information Express v1.2</description>
+ <year>1986</year>
+ <publisher>Microbee Systems</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="information_express_v1.2_ss80.dsk" size="430336" crc="a4570711" sha1="603af2df79de9df3fc682a261cce1dbc6a5b87e5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="isbok">
+ <description>Isbok Adventure</description>
+ <year>1985</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="isbok_ss80_1.dsk" size="430336" crc="316c07af" sha1="44278baf2b5175544591c6640e8ca7f6abc96233"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="golddust_island">
+ <description>Gold-dust Island</description>
+ <year>1984</year>
+ <publisher>Jacaranda Wiley</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jacaranda_golddust_island_ds40.dsk" size="430336" crc="d6eae61b" sha1="6ab0c52991a1990bfa0e9f17f6c4f232f30d0fb8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="raftaway_river">
+ <description>Raft-away River</description>
+ <year>1984</year>
+ <publisher>Jacaranda Wiley</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jacaranda_raftaway_river_ds40.dsk" size="430336" crc="292ef1fd" sha1="b183cf409b7dd9e38264f245d90d086fa758135e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jewelssancarais">
+ <description>Jewels of Sancara Island</description>
+ <year>19??</year>
+ <publisher>Psychic Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="jewels_of_sancara_island_ss80.dsk" size="430336" crc="7ba1f832" sha1="2ca0fb99b6a90aa48e3fcdfa793a6af08b3512ac"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="job">
+ <description>Job Option Bank v4.52</description>
+ <year>1983</year>
+ <publisher>Educational Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="job_ds40.dsk" size="430336" crc="f56f9c60" sha1="00e1afbc9f10f69a3ba0783f60a4aa5fbbe2e097"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="label_maker">
+ <description>Label Generator Program</description>
+ <year>19??</year>
+ <publisher>Hammosoft</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="label_maker_ss80.dsk" size="430336" crc="fa3851fa" sha1="3b3ae331cb8781200de4b016638ced9a241c1436"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="larry1">
+ <description>Leisure Suit Larry</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="leisure_suit_larry_ds40.dsk" size="430336" crc="3e4891c9" sha1="44731477224bde2977896f9b6de5a9e63212ec59"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="letsgopunting">
+ <description>Let's Go Punting (set 1)</description>
+ <year>1986</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="LetsGoPunting_ds84.dsk" size="860416" crc="bd46ecc7" sha1="a552458a2239406d44e282c4dd4fa08d20638e51"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="letsgopunting2">
+ <description>Let's Go Punting (set 2)</description>
+ <year>1986</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="lets_go_punting_ds80.dsk" size="860416" crc="39508204" sha1="d2abb2bc33fc9c3a4a199e982b60a1653cad1185"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="masterb">
+ <description>CIAB System Master</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="masterb.dsk" size="430336" crc="aaa0bd19" sha1="9c4dbbf2bf08e6f6ff82adc71c6189c393877823"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="melb2hobart_race">
+ <description>Melbourne to Hobart Yacht Race Simulation</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="melbourne_to_hobart_yacht_race_ds80.dsk" size="860416" crc="9284948a" sha1="9882d2a88cb2f4dd2f25159e2488a6b492632fbd"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_1">
+ <description>cpm3_61k (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_61k_ds40.dsk" size="430336" crc="7fe21ea3" sha1="630abfdc994da6b1dc0241fbe9b4a48f8c7ba932"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_2">
+ <description>cpm3_61k (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_61k_ds40_1.dsk" size="430336" crc="b02f19a4" sha1="7a645b8d010f881967a1fdf0001ce9ab6fb721df"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_3">
+ <description>cpm3_61k (set 3)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_61k_ss80.dsk" size="430336" crc="d8b6c4b3" sha1="f28b90a5934299cc06f00232b3b8d95c9a16e87c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_4">
+ <description>cpm3_61k (set 4)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_61k_ss80_1.dsk" size="430336" crc="51f062f1" sha1="ee05fcd79ec961be4193e4d9db83e271d4c1abb5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_5">
+ <description>cpm3_61k (set 5)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_61k_ds80.dsk" size="860416" crc="9e146054" sha1="4c34f9cbb70800a9323321c6389417c5b9e2eb6a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_6">
+ <description>cpm3_61k (set 6)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_61k_ds80_1.dsk" size="860416" crc="c2ba5011" sha1="52fc41d936c026c4563783022f10abad60a8164d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_7">
+ <description>cpm3_61k (set 7)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_61k_ds82.dsk" size="860416" crc="e9e27ae2" sha1="daa1f4205d2c34f9e38aa24eec05eb5b606fc7b5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_8">
+ <description>cpm3_61k (set 8)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_61k_ds82_1.dsk" size="860416" crc="b4869fa1" sha1="1893e589a6216c836dd82f6d865b9404b54d46cc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_9">
+ <description>cpm3_61k (set 9)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_61k_ds84.dsk" size="860416" crc="62ed9b96" sha1="71273f7cf22e74c9259420f43810ced44445820c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_61k_10">
+ <description>cpm3_61k (set 10)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_61k_ds84_1.dsk" size="860416" crc="edab2f78" sha1="d0f891b96c87202d49c2b7e8394d79131eccd4e1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_1">
+ <description>cpm3_dri (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_dri_ds40.dsk" size="430336" crc="952d5595" sha1="cb793119ac39bace2b65f08179874dc92b0da6e0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_2">
+ <description>cpm3_dri (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_dri_ds40_1.dsk" size="430336" crc="3c5a45d9" sha1="e9f8f3e27f09272dc768fa5b21579587725b1321"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_3">
+ <description>cpm3_dri (set 3)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_dri_ss80.dsk" size="430336" crc="32798f85" sha1="a15498ac0fc904bf5f631c4c1ee76b4d319659d7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_4">
+ <description>cpm3_dri (set 4)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_dri_ss80_2.dsk" size="430336" crc="dd853e8c" sha1="cd7fff91e0769b30fe4fa4332b4f6888310b7ebb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_5">
+ <description>cpm3_dri (set 5)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_dri_ds80.dsk" size="860416" crc="4fc9f99b" sha1="183bf26a4ffef82af9e07eed64f3aa18dabb63a7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_6">
+ <description>cpm3_dri (set 6)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_dri_ds80_1.dsk" size="860416" crc="51189453" sha1="bbfce4426da4d214d2f7897f7781ce66b50f95ce"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_7">
+ <description>cpm3_dri (set 7)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_dri_ds82.dsk" size="860416" crc="df05cbcf" sha1="d974d79815c98b32e442c5419b4c642379d19a65"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_8">
+ <description>cpm3_dri (set 8)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_dri_ds82_1.dsk" size="860416" crc="535778ad" sha1="7ec82ed1a302e8fd233184170c0b9e7586388ee1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_9">
+ <description>cpm3_dri (set 9)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_dri_ds84.dsk" size="860416" crc="a7c9b796" sha1="811b28dcda6c62c2fbddf10a2d2293100aa7279b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_dri_10">
+ <description>cpm3_dri (set 10)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_dri_ds84_1.dsk" size="860416" crc="b3a99ee9" sha1="8c3d365efba2fb16d1a488b9b72b360303cf3ac4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_1">
+ <description>cpm3_y2k (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_y2k_ds40.dsk" size="430336" crc="2ffab30d" sha1="e318b316360c870c8ff99d138b776a724143403e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_2">
+ <description>cpm3_y2k (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_y2k_ds40_1.dsk" size="430336" crc="5d3261a6" sha1="f692d8b8f739b313846bb9d1743e70d94b2570e0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_3">
+ <description>cpm3_y2k (set 3)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_y2k_ss80.dsk" size="430336" crc="bced1af3" sha1="e917af1c3800fff01134d0ccfc37a0337727aaaf"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_4">
+ <description>cpm3_y2k (set 4)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="cpm3_y2k_ss80_1.dsk" size="430336" crc="88ae691d" sha1="a174134ab9e8952d98ee8fad6bcaac26f8f45ae9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_5">
+ <description>cpm3_y2k (set 5)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_y2k_ds80.dsk" size="860416" crc="320eb76c" sha1="c0d17f540f965d5318ccd1b6a6de2a084a1a21e6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_6">
+ <description>cpm3_y2k (set 6)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_y2k_ds80_1.dsk" size="860416" crc="187d47d6" sha1="71bc174876742f40e6e342eaecbf995e71b5eabf"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_7">
+ <description>cpm3_y2k (set 7)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_y2k_ds82.dsk" size="860416" crc="d246c4b1" sha1="264866e4bd29fa9c2c3fa4289f9419eb460f86ab"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_8">
+ <description>cpm3_y2k (set 8)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_y2k_ds82_1.dsk" size="860416" crc="75460870" sha1="c607c8b5bbc72ec16349e710d9ab977b1eba678f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_9">
+ <description>cpm3_y2k (set 9)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_y2k_ds84.dsk" size="860416" crc="b2b46979" sha1="28c136d98f91336b40b3179103bab2ec4d5ee276"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm3_y2k_10">
+ <description>cpm3_y2k (set 10)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="cpm3_y2k_ds84_1.dsk" size="860416" crc="5bd0a4e6" sha1="5edca4769c2204dca00fb8d4864898fcffdef159"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="micropen">
+ <description>Micropen 1.0</description>
+ <year>1984</year>
+ <publisher>Intelligence (IRL) Ltd</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="micropen_ss80.dsk" size="430336" crc="08522140" sha1="b046fd0dad40e46d76e8ba7af8337a86bde4ca21"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="utilities">
+ <description>utilities</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="utilities_ss80.dsk" size="430336" crc="8fac6f7f" sha1="52541e8dea59bd879df519469f221156c7c1cd8b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_61k_1">
+ <description>zpm3_61k (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="zpm3_61k_ds40.dsk" size="430336" crc="c1746488" sha1="93d9c7176bd07f9a1a47e6e63b7088a2f469d6ce"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_61k_2">
+ <description>zpm3_61k (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="zpm3_61k_ss80.dsk" size="430336" crc="46087e23" sha1="7929c4dd08a71562775986079f9a5528a1b2af96"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_61k_3">
+ <description>zpm3_61k (set 3)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="zpm3_61k_ds80.dsk" size="860416" crc="05e621f5" sha1="fbcb08d2a820b79663b00c11f792eda89c810f54"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_61k_4">
+ <description>zpm3_61k (set 4)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="zpm3_61k_ds82.dsk" size="860416" crc="beb1cbc1" sha1="5589507686f4255608f371dced500b6d65ae633b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_61k_5">
+ <description>zpm3_61k (set 5)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="zpm3_61k_ds84.dsk" size="860416" crc="86e3552b" sha1="05006477021f2a36e688b74020e13ff5e563054d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_y2k_1">
+ <description>zpm3_y2k (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="zpm3_y2k_ds40.dsk" size="430336" crc="7bb02443" sha1="b2951a005eef568014f8b345a2ceab21a267df77"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_y2k_2">
+ <description>zpm3_y2k (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="zpm3_y2k_ss80.dsk" size="430336" crc="fccc3ee8" sha1="09ff85dbe4ee09771e48b5dc3cfd213a5511d38c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_y2k_3">
+ <description>zpm3_y2k (set 3)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="zpm3_y2k_ds80.dsk" size="860416" crc="269a3611" sha1="a10e42e972a9cb8c59ea7ef84be5ace76cc834b8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_y2k_4">
+ <description>zpm3_y2k (set 4)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="zpm3_y2k_ds82.dsk" size="860416" crc="09c2e568" sha1="93c7ef0249bb0df0f0584355a2b9ee42e39a9789"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zpm3_y2k_5">
+ <description>zpm3_y2k (set 5)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="zpm3_y2k_ds84.dsk" size="860416" crc="703e6c1e" sha1="2b8b7b70464b0fd4b03a76f067ded9651aa06653"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="milestone">
+ <description>Milestone 1.09</description>
+ <year>1981</year>
+ <publisher>Organic Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="milestone_ss80.dsk" size="430336" crc="28236aa2" sha1="a6acabf36066153a3755f79de2cc6e383b0a8a41"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mmd_educational">
+ <description>MMD Educational</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="mmd_educational_ss80.dsk" size="430336" crc="1042a3c8" sha1="7bc9896021a34f91301419f1962eb14a4b852989"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mouse_bios9" supported="no"><!-- Needs mouse emulation -->
+ <description>mouse_bios9</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="mouse_bios9_ds80.dsk" size="860416" crc="86762227" sha1="abadbfedb9b082c96284b88e69b7c4406a8af952"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="musicraft">
+ <description>Musicraft</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="musicraft_program_ds80.dsk" size="860416" crc="6c488f50" sha1="b5dc148601195a67846fcdc4c54f0f94b31c9303"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="musicraft_songs_ds80.dsk" size="860416" crc="e305fbe7" sha1="b29a32d5fddf82b26c67f29bdf60632228da13dc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nemesis">
+ <description>Nemesis 1.2</description>
+ <year>1981</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="nemesis_1.2_ss80.dsk" size="430336" crc="17e7697a" sha1="e99c1be173e370facfc48971bf5902ff08cb01fb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nemesis_dung">
+ <description>Nemesis Dungeon Master</description>
+ <year>1981</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="nemesis_dungeon_master_ss80.dsk" size="430336" crc="5787da29" sha1="e571b43e3d6ca47ca703afd1ab8985da3e134216"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="orac_scientists">
+ <description>ORAC Scientists 1 v3.1</description>
+ <year>1986</year>
+ <publisher>Koan</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="orac_scientists_ds80.dsk" size="860416" crc="44de896c" sha1="e92a6064ab67b2a49b04324868e95f0ae01291f7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="paws">
+ <description>PAWcomp Adventure compiler</description>
+ <year>1987</year>
+ <publisher>Gilsoft</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="paws_ss80.dsk" size="430336" crc="da9c8509" sha1="f199417ccb88bb86cc9abbdf70683c92daf9c2b9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pengbookgames">
+ <description>Penguin Book of Microbee Games</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="penguin_book_of_games_ss80.dsk" size="430336" crc="48950eb2" sha1="29b291abf9c4de4191405c1a0190496821d02ed4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pb_11">
+ <description>Peter Broughton v1.1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="peter_broughton_v11_ds40.dsk" size="430336" crc="8cbe1139" sha1="7545c17ae0199bb2566825ff8f22ca205392f7a2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pb_12">
+ <description>Peter Broughton v1.2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="peter_broughton_v12_ds80.dsk" size="860416" crc="45334414" sha1="5b5714df54f7f6849aa4eb8439592ebc63043f98"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pb_20pre_deep">
+ <description>Peter Broughton v2.0pre deepdene</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="peter_broughton_v20pre_deepdene_ds40.dsk" size="430336" crc="5e8b3736" sha1="7c91b98c77a30c1bfd3555a59a20c2a2b5be6cb8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pb_22">
+ <description>Peter Broughton v2.2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="peter_broughton_v22_ds84.dsk" size="860416" crc="c94b170e" sha1="f9f36042d948092888b125a5b7f29abb90427b04"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pb_22p">
+ <description>Peter Broughton v2.2p 1of2 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="peter_broughton_v22p_1_ds84.dsk" size="860416" crc="7d671444" sha1="b6e8a8c472b8e725a5f25811caeaafdcea00f043"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pb_22p_1">
+ <description>Peter Broughton v2.2p 1of2 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="peter_broughton_v22p_2_ds84.dsk" size="860416" crc="ba3bc9ac" sha1="2deeb59bedf5bd8883f8d74da2f900a756ae7929"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="plan80">
+ <description>Plan80 v2.4</description>
+ <year>1982</year>
+ <publisher>Business Planning Systems</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="plan80_ss80.dsk" size="430336" crc="dbbc5f44" sha1="c4470a17fee720ca0fee0020085c1723debd3c71"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="poster_disk">
+ <description>Poster Disk 1987</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="poster_disk_1987_ds80.dsk" size="860416" crc="6852bb40" sha1="958003211b34389962f09153bbbe00cd849b7365"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tch_rollbook">
+ <description>Primary Teachers Rollbook</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="primary_teachers_rollbook_ds40.dsk" size="430336" crc="ace18e2c" sha1="4b5f64f44e022d3eafca1efe6d5380f19b696a78"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pm_10">
+ <description>Printmaster 1.0</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="printmaster_1.0_ss80.dsk" size="430336" crc="c7faec7a" sha1="111b6e28ad5790a0105ca501061d9a414daf9370"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pm_110a">
+ <description>Printmaster 1.10a</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="printmaster_1.10a_ds80.dsk" size="860416" crc="497b4da5" sha1="e66ada3be40a73767ca9dbaecef8feaf44084397"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pm_graphed">
+ <description>Printmaster Graphics Editor</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="printmaster_graphics_editor_ds80.dsk" size="860416" crc="fd81691a" sha1="d595a6b5e83a859bbc72e9ffc3624ac3b2177401"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pmplus_146">
+ <description>Printmaster Plus 1.46</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="printmaster_plus_1.46_ds80.dsk" size="860416" crc="c220cea9" sha1="91615b45d99e9f3feb2273f6ee9c95aa5d32f213"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="racer" supported="no"><!-- Needs Joystick -->
+ <description>R.A.C.E.R.</description>
+ <year>1991</year>
+ <publisher>Adrenalin Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="racer_ss80.dsk" size="430336" crc="2243358d" sha1="2b1c4f7c43e1b383e7f52f61c378271e1f248d3b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="res_logo_10">
+ <description>Research Logo 1.0</description>
+ <year>1985</year>
+ <publisher>Logo Research Institute</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="research_logo_10_ds40.dsk" size="430336" crc="e0547854" sha1="94d87f2f038adda985769273cf8e7365af8ba816"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="res_logo_10a">
+ <description>Research Logo 1.0a</description>
+ <year>1985</year>
+ <publisher>Logo Research Institute</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="research_logo_10a_ss80.dsk" size="430336" crc="3983a7d4" sha1="7c0d78fc49eac199c40b8442159f218b091587bc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="res_logo_10b">
+ <description>Research Logo 1.0a+</description>
+ <year>1985</year>
+ <publisher>Logo Research Institute</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="research_logo_10a+_ds80.dsk" size="860416" crc="825445f9" sha1="2a5f820791670fa13010336c4b647d2f7b30b806"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="richard_larkins">
+ <description>Richard Larkins Games</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="richard_larkins_games_ss80.dsk" size="430336" crc="90758690" sha1="016d457ae8830a550d5c83655e1983fc575f8f8d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rime_maths">
+ <description>Primary Rime Lessons</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="rime_maths_ds80.dsk" size="860416" crc="e9906a2e" sha1="b7e2117c52cb738300a89688b5a9169af543a13e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="roots_m">
+ <description>Commsoft Roots/M</description>
+ <year>1981</year>
+ <publisher>Commsoft</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="roots_m_ss80.dsk" size="430336" crc="f08d92bf" sha1="093802f470ac411d96fb9188e7a35171d53bae1d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="scott_adams">
+ <description>Complete Scott Adams Original Adventures</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="scott_adams_adventures_ds80.dsk" size="860416" crc="8e8f2d8d" sha1="21c6db3097625e2255c27de691fb9d01aac1d17a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nanocrev">
+ <description>Nanoc's Revenge</description>
+ <year>19??</year>
+ <publisher>Superior Computer Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="scs_disk_3_nanoc_revenge_ss80.dsk" size="430336" crc="ca0e3716" sha1="2c659114f7b737530e7bb1a5afb9dcafcff0bf35"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fortris">
+ <description>Fortris</description>
+ <year>19??</year>
+ <publisher>Superior Computer Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="scs_disk_4_fortris_ss80.dsk" size="430336" crc="477656cd" sha1="24c98325834fdc6e0d286690f95de6285cc55a3a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="timegapx">
+ <description>Timegap-x</description>
+ <year>19??</year>
+ <publisher>Superior Computer Software</publisher>
+ <info name="usage" value="PIN is 256"/>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="scs_disk_5_timegapx_ss80.dsk" size="430336" crc="90a140f9" sha1="c870665540546cc13ebfdff91c44c86321c63c92"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="interest">
+ <description>Simple and Compound Interest</description>
+ <year>1985</year>
+ <publisher>Denham Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simple_and_compound_interest_ds40.dsk" size="430336" crc="a71c7dc5" sha1="30c1bb8e6498504b403568126f6fefe9676035bd"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="smc">
+ <description>Smart Model Controller v1.12m</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="smart_model_controller_ss80.dsk" size="430336" crc="9ba5618e" sha1="26fbfaab16de066086a9b1e6da207633685a6fce"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128starter">
+ <description>128k Starter Disk</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="starter_disk.dsk" size="430336" crc="8b40d520" sha1="4f31d8dffab78acb401af16a65a296eef0fefd78"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128swedish_boot">
+ <description>swedish_128k_boot_disk</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="swedish_128k_boot_disk_ds40.dsk" size="430336" crc="7022de90" sha1="82da869af426bfb2899eac3a266359e916786fd6"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="takeover">
+ <description>Takeover: warriors against the world</description>
+ <year>1990</year>
+ <publisher>Adrenalin Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="takeover_ss80.dsk" size="430336" crc="f93c6482" sha1="da8104dadfa1c6b25847bb44990ce845e86f09e0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="telcom_30">
+ <description>Telcom 3.0 Upgrade (for 128k/256tc)</description>
+ <year>1987</year>
+ <publisher>Microbee Systems</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="telcom3_upgrade_ss80.dsk" size="430336" crc="72751fd0" sha1="a4cc6d285bea372ce01634a77bd7100a8dbc4e8f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="thunder_road">
+ <description>Thunder Road Adventure 1.2</description>
+ <year>1980</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="thunder_road_ds80.dsk" size="860416" crc="828c838e" sha1="a43baf9fd1ee2bcdc87699ddbdeb46bc70c69c89"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="timetableblock">
+ <description>Timetable Blocker 5.1</description>
+ <year>1986</year>
+ <publisher>Vandem Boom Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="timetable_blocker_v5.1_ds80.dsk" size="860416" crc="4f7b2a8e" sha1="a66e7ba26b241492a5a51a41fa51b08c15ff8b87"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="timetableman">
+ <description>Timetable Manager 4.3</description>
+ <year>1986</year>
+ <publisher>Vandem Boom Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="time_table_manager_4.3_ds80.dsk" size="860416" crc="26a05b70" sha1="6961745062c7ba9b011430a7ea4fcb7bbd03ca1f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tim_hartnell">
+ <description>Tim Hartnell Adventures</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="tim_hartnell_adventures_ss80.dsk" size="430336" crc="5f1cbdd2" sha1="93eac93a4177ca068aa53e94253a3729cb0b8d01"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turbodisk_ii">
+ <description>Turbodisk II (set 1)</description>
+ <year>1988</year>
+ <publisher>Complete Micro Solutions</publisher>
+ <sharedfeat name="compatibility" value="1,2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="turbodisk_ii_ss80.dsk" size="430336" crc="e3420337" sha1="101df9ae231ca601a960d90cb91819675d9e839b"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128turbodiskii">
+ <description>128k Turbodisk II (set 2)</description>
+ <year>1988</year>
+ <publisher>Complete Micro Solutions</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="turbodisk_ii_ds40.dsk" size="430336" crc="296103cc" sha1="16ae4aa8967e0e45aa023e4a38695ba2d62d3713"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turbo_pascal">
+ <description>Turbo Pascal</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="turbo_pascal.dsk" size="430336" crc="949e5aeb" sha1="fbb1e51988a27f81675e795c36c89e58f226191c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="venture_writer">
+ <description>Venture Writer 2.1</description>
+ <year>19??</year>
+ <publisher>NSW Department of Education</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="venture_writer_ds40.dsk" size="430336" crc="0a9f96f6" sha1="521fa04c2c61996107b4ace0fa6851c6d4e329aa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wanderer">
+ <description>Wanderer</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="wanderer_ss80.dsk" size="430336" crc="c69adbb5" sha1="a3fefb2e43bf0b5f1851f7571bbd8978b504f46c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wavplay" supported="no"><!-- Needs hardware -->
+ <description>Wavplay 2.3</description>
+ <year>1995</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="wavplay_ds80.dsk" size="860416" crc="10936be4" sha1="87a26e3cee578c32311f4bada7ddf79fe22c4a85"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ways_we_were">
+ <description>Ways We Were</description>
+ <year>19??</year>
+ <publisher>Grapefruit Moon Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="ways_we_were_ss80.dsk" size="430336" crc="809e722a" sha1="8ad44fcfcf4a9dbde0bbb146fe904e23f7ac5390"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wildcards_games">
+ <description>Games from Wildcards Vol 1,2,3,4</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="wildcards_games_ss80.dsk" size="430336" crc="b5100c32" sha1="5aaf6ca439af0fe7522bd183a5a91eca7c2b77d0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wordgraph_a_v02">
+ <description>Wordgraph A, v02</description>
+ <year>1985</year>
+ <publisher>Research Technology Canberra</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="wordgraph_a_v02_ss80.dsk" size="430336" crc="da63cc5e" sha1="f790b79b75f42e937790876106d03ea5155040aa"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wordgraph_a_v04">
+ <description>Wordgraph A, v04</description>
+ <year>1986</year>
+ <publisher>Research Technology Canberra</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="wordgraph_a_v04_ss80.dsk" size="430336" crc="7d7bc39b" sha1="6168066d71ac0be2c183da5be3ca3ce93629f066"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wordsta">
+ <description>Wordstar 3.3</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="wordsta.dsk" size="430336" crc="137e02fa" sha1="477de6c52e23d1ee8498dd81a3f9b95f1618788f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zeephon">
+ <description>Zeephon</description>
+ <year>1986</year>
+ <publisher>GreyMatter Software</publisher>
+ <sharedfeat name="compatibility" value="2,3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="zeephon_ds40.dsk" size="430336" crc="a7d40487" sha1="64401dc982e2b1a5358f661c03aad1285a55cd6e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pmaster">
+ <description>128kp_master (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128kp_master_ds40.dsk" size="430336" crc="61807186" sha1="d892108bdaf317037d359ad6e19ed8213df4f06c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pmaster2">
+ <description>128kp_master (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128kp_master_ss80.dsk" size="430336" crc="26121c2d" sha1="29d2ef82b81253a7e8980c9fcf190f38e9ce714e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128psystem8803">
+ <description>128kp Premium System 1988/03</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128kp_premium_system_88_03_ss80.dsk" size="430336" crc="5629c7bc" sha1="0e2f2e15eda3a831faab20daabb758b2798b7b59"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pstarter">
+ <description>128kp_starter</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128kp_starter_ss80.dsk" size="430336" crc="544fdefc" sha1="25ed49c6d24ed0634304de680e6a8681584f6f52"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pgetting">
+ <description>Getting to know your Microbee</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128kp_getting_to_know_your_microbee_ds40.dsk" size="430336" crc="cc9ed658" sha1="1b248e3e22c940170d7ea1fad559ded45fcf7411"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pstarter8607">
+ <description>128k Premium Starter 1986/07</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128k_premium_starter_86_07_ss80.dsk" size="430336" crc="f3736020" sha1="d66b2ac669d55e7b050f85c1d1dcdfad4a8bda38"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128psystem8803a">
+ <description>128k Premium System 1988/03</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128k_premium_system_88_03_ss80.dsk" size="430336" crc="7de1a223" sha1="8a1631bc8e2315a5fa6d5921fea6166d49903529"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pmaster8607">
+ <description>128k Premium Master 1986/07</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128k_premium_master_86_07_ss80.dsk" size="430336" crc="ab831296" sha1="16bb7b61daeff5907dc9291e2ac309549f32c555"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pmasterearly">
+ <description>128k Premium Master Early</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="128k_premium_master_early_ds40.dsk" size="430336" crc="1908690c" sha1="7a4e1249548e48ea24f94f38b0e16949520b3994"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128padventure1">
+ <description>adventure1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure1_ds80.dsk" size="860416" crc="2a9d5f4f" sha1="8ecb1afb73e4f81f8fac34076d4f5b7b7be94ab9"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128padventure13">
+ <description>adventure_13</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_13_ds80.dsk" size="860416" crc="53dd5166" sha1="0e70472e327a28f27d75c99e0848c80eb134b221"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128padventure14">
+ <description>adventure_14</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="adventure_14_ds80.dsk" size="860416" crc="ba7323ed" sha1="b2747040d2f68f460b70bd9dc125951883010a5d"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arcadeg1">
+ <description>Arcade Games 1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="2" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="arcade_games_1_ds84.dsk" size="860416" crc="91307b52" sha1="d15d711b4e88854c2cd9f2fa65c80093680f3117"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128parcade_g_3">
+ <description>Arcade Games 3</description>
+ <year>19??</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="215296">
+ <rom name="arcade_games_3.dsk" size="215296" crc="f96ad0c0" sha1="df1b86ed5923dced86a4e8f17a7f39c42289e700"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128paust2020">
+ <description>Australia 2020</description>
+ <year>1987</year>
+ <publisher>Monash University</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="australia_2020_ss80.dsk" size="430336" crc="b3c28c4d" sha1="ac7dd15aa9835217b4c6961cc19750f51898eaa3"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pbeeartistic">
+ <description>Premium Beeartistic 1.30</description>
+ <year>1987</year>
+ <publisher>Exitek</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="beeartistic_premium_13_ss80.dsk" size="430336" crc="849f09f1" sha1="b32b5efcf0ebca0dc1a03981162384965c917d48"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pbeetc" supported="no"><!-- needs unemulated hardware -->
+ <description>Disk Beecomposer</description>
+ <year>1986</year>
+ <publisher>Honeysoft</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="beethoven_composer_ss80.dsk" size="430336" crc="f45118cd" sha1="4bcfa05bf3fda2abee5d18d1869baac795f38169"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pdavidahl">
+ <description>David Ahls Adventures</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="david_ahl_adventures_ds80.dsk" size="860416" crc="3b797cca" sha1="d56707c96a34da10fa5020e0fd6c6d1fa2f1574a"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pdoodle">
+ <description>Doodle Draw v1.1</description>
+ <year>1986</year>
+ <publisher>Goodison</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="doodle_draw_ds80.dsk" size="860416" crc="51103d6f" sha1="a94088929408d1228758572882f42c132e7a740e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pdtest">
+ <description>Disk Test v3.9</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="dtest_ss80.dsk" size="430336" crc="82b0640e" sha1="151e9abc912c2e094ea0d1824f41da71c601d668"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128peword13">
+ <description>Early Word v1.3</description>
+ <year>1985</year>
+ <publisher>Nectar</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="early_word_ss80.dsk" size="430336" crc="117776a1" sha1="865d12d96b6b4b836af4ff2ae9d82083e0eb647c"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pepc101">
+ <description>electric_paintbrush_chalkboard_1.01</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="electric_paintbrush_chalkboard_ss80.dsk" size="430336" crc="0f46e9fa" sha1="60eefa15c04f0c3a9917108694a516ac25cb601e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pepfonts">
+ <description>electric_paintbrush_fonts</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="electric_paintbrush_fonts_ss80.dsk" size="430336" crc="f50a8739" sha1="061dd365e8ec51f8d8c6f6e88d1273da4b063072"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pepmouse122">
+ <description>electric_paintbrush_mouse_1.22</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="electric_paintbrush_mouse_ss80.dsk" size="430336" crc="8aba30b2" sha1="cf56f8a91ca81367507f185d57cf3f67d2009b40"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pepsshow">
+ <description>Electric Paintbrush Slide Show</description>
+ <year>1986</year>
+ <publisher>Microbee Systems</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="electric_paintbrush_slide_show_ss80.dsk" size="430336" crc="4ae530d8" sha1="9e282e0a6413b2a3c97a750f60308562e94fffd1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pepsgmod">
+ <description>EPSGmod Files</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="epsgmod_files_ds80.dsk" size="860416" crc="9ca9f702" sha1="30aa5388c62644f9cd18329b536bb64269357195"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pfirstfleet">
+ <description>First Fleet (set 4)</description>
+ <year>19??</year>
+ <publisher>Education Department of Western Australia</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="First_Fleet_101_128k_ds80.dsk" size="860416" crc="79c8d5c2" sha1="c31ded2eefbca4d6c9d478e4a0ee2a9c9ead22fc"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128p_lines">
+ <description>Microbee Lines v0.1</description>
+ <year>1987</year>
+ <publisher>Microbee Systems</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="lego_lines_ss80.dsk" size="430336" crc="1eb9795c" sha1="97f310c4fa2271c2f6a3999349edd5d442cde6d8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pws40">
+ <description>Wordstar 4.0</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="wordstar_40_ds80.dsk" size="860416" crc="5e5732cb" sha1="b394f38d56e976f10598c118f936dc40c1651118"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pmillio30">
+ <description>Millionwaire 3.0 (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="millionware_30_ds80.dsk" size="860416" crc="02945571" sha1="56f16172df9bd1eb86229f5ad99bea74d975ea38"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pmillio30a">
+ <description>Millionwaire 3.0 (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="millionware_30_ds80_1.dsk" size="860416" crc="a6e1b972" sha1="fac59e090b64c186022a3874cbdca8798ad5f36e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128premium2">
+ <description>premium2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="premium2_ds40.dsk" size="430336" crc="eefb5d8e" sha1="6af5e6de4a94c1f389662d8137d463504b4b6d00"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128premium1">
+ <description>premium1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="premium1_ds40.dsk" size="430336" crc="64a57488" sha1="bc2410345160a9ecdc340a7399cd45416967476e"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128psw204">
+ <description>Simply Write v2.04</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simply_write_204_ss80.dsk" size="430336" crc="08429a62" sha1="a110c57675279c778661345561bcd5d5e1f8e5fe"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128psw302">
+ <description>Simply Write v3.02</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simply_write_302_ss80.dsk" size="430336" crc="5f4178ae" sha1="26f5a98f7274b8b21131d4807d1edd4bde4a3720"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128psw303">
+ <description>Simply Write v3.03</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simply_write_303_ss80.dsk" size="430336" crc="8740d0cd" sha1="af1a5412cfcd1d70ff2c269f90fecca83b0a3a21"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pswfe">
+ <description>Simply Write Font Editor v2.04</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="simply_write_font_editor_204_ss80.dsk" size="430336" crc="5bce6abc" sha1="a9b28d6cb45343e86f85c0f8f22ed7fe438302c5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128pstorymaker">
+ <description>Storymaker 128k</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="storymaker_128k_ds80.dsk" size="860416" crc="752026c9" sha1="5cca54dfcaf754d1c9a5432226724aa717666845"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="128ptantrix">
+ <description>Tantrix</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="tantrix_ds80.dsk" size="860416" crc="fcfe2a68" sha1="d3bbf7b988661870569007d996cc5167dca1abb2"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tmfe">
+ <description>The Mob From Evil</description>
+ <year>19??</year>
+ <publisher>Kerwin Software</publisher>
+ <info name="usage" value="When asked for the picture disk, just press ENTER."/>
+ <sharedfeat name="compatibility" value="3" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="the_mob_from_evil_ds80.dsk" size="860416" crc="2dd680e5" sha1="124b0493921aad58d2b4a30fc945c93bf65748fc"/>
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="the_mob_from_evil_picture_ss80.dsk" size="430336" crc="dc8e838f" sha1="a8fb8cf51dfd7b1cae044e93e7181d2f0eb243c5"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256diag">
+ <description>256tc_diagnostics</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="256tc_diagnostics_ds80.dsk" size="860416" crc="26621a45" sha1="06d477f22b63a02d3122bca38434840c76c22f32"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256systemm">
+ <description>256tc_system_master</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="256tc_system_master_ds80.dsk" size="860416" crc="47602f1b" sha1="d620f073a31be56af35002f120f3e3518b5af3b1"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256utility">
+ <description>256tc_utility_disk_rel2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="256tc_utility_disk_rel2_ss80.dsk" size="430336" crc="016744c7" sha1="6b2830f1e0346b58621085eb1c0f6653b2058ece"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256intro" supported="partial"><!-- affected by an emulation bug -->
+ <description>256tc_intro</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="256tc_intro_ss80.dsk" size="430336" crc="52e267e2" sha1="147e290e0a32b8b23a3bb0c091fee062e353551f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256system1">
+ <description>256tc_system_disk_rel1_1987</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="256tc_system_disk_rel1_87_ds80.dsk" size="860416" crc="1ab042ec" sha1="361a695774f6020310c8e985938fb408f6629a35"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256system2">
+ <description>256tc_system_disk_rel2_1987</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="256tc_system_disk_rel2_87_ds80.dsk" size="860416" crc="463e1dc3" sha1="de8212714601a6308432cab8190840639b298fe4"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256system3">
+ <description>256tc_system_disk_rel3_1988/06</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="256tc_system_disk_rel3_88_06_ds80.dsk" size="860416" crc="21618caa" sha1="3b457fac354d8d588d9792e5907ed91bcac5c857"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256system4">
+ <description>256tc_system_disk_rel4_1988/09</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="256tc_system_disk_rel4_88_09_ds80.dsk" size="860416" crc="0ff6990c" sha1="5c50d1084b8e67df00fa4a1fc849d98e414bf9ad"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256bwmod">
+ <description>bwmod</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="bwmod.dsk" size="860416" crc="09bd7d19" sha1="c5d216e8811074841cd51226303b4af9566180a8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256hoards11t">
+ <description>Hoards of the Deep Realm 11t (set 1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="hoards_of_the_deep_realm_11t.dsk" size="430336" crc="b27f7537" sha1="8a7a2d86d4e2ce02de1fb0b8844051b3819e8378"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256hoards11ta">
+ <description>Hoards of the Deep Realm 11t (set 2)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="430336">
+ <rom name="hoards_of_the_deep_realm_11t_ss80.dsk" size="430336" crc="fce2e854" sha1="9451da606783d99580b44fa9fd4a9d43c5c61c13"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256oracexplorers">
+ <description>ORAC Explorers</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="orac_explorers_ds80.dsk" size="860416" crc="0b70420e" sha1="92f262b8af20142e45c888dbd0ba1e1c25dfe049"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="256storymaker">
+ <description>Storymaker 256tc</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="4" />
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="860416">
+ <rom name="storymaker_256tc_ds80.dsk" size="860416" crc="59baee9d" sha1="99ad32b1cb7b3f36690d1b05c9f421794e4b7e45"/>
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/megadriv.xml b/hash/megadriv.xml
index 48570be42ae..42fd9205454 100644
--- a/hash/megadriv.xml
+++ b/hash/megadriv.xml
@@ -50,7 +50,6 @@ Known undumped protos
* Payne Stewart Golf
* Jack Nicklaus 95
* Jack Nicklaus Power Challenge
- * Danny Sullivan's Indy Heat
* Star Trek Starfleet Academy
* Teenage Mutant Hero Turtles - The Hyperstone Heist (Euro)
* Spot Goes to Hollywood (Euro)
@@ -330,9 +329,10 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<publisher>Black Pearl</publisher>
<info name="alt_title" value="アキラ"/>
<part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="SGEP2A AW REV. A"/>
<feature name="u1" value="M27C4001-12F1"/>
<feature name="u2" value="M27C4001-12F1"/>
- <feature name="u3" value="74HC139N"/>
+ <feature name="u3" value="SN74HC139N"/>
<feature name="u4" value="M27C4001-12F1"/>
<feature name="u5" value="M27C4001-12F1"/>
<dataarea name="rom" width="16" endianness="big" size="2097152">
@@ -10415,6 +10415,23 @@ but dumps still have to be confirmed.
</part>
</software>
+ <software name="aladdinup1" cloneof="aladdin">
+ <description>Disney's Aladdin (prototype 19930627)</description>
+ <year>1993</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-6108A"/>
+ <feature name="ic9" value="KM62256ALP-10L"/>
+ <feature name="ic13" value="PC74HC139P"/>
+ <feature name="ic17" value="PC74HC74P"/>
+ <feature name="ic18" value="PC74HC125P"/>
+ <feature name="ic19" value="PC74HC32P"/>
+ <dataarea name="rom" width="16" endianness="big" size="4194304">
+ <rom name="aladdin (prototype 19930627).bin" size="4194304" crc="78110310" sha1="b84b231c53dffba7f48561b79562faa3f4ed2ac5"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="aladdinup" cloneof="aladdin">
<description>Disney's Aladdin (USA, Prototype)</description>
<year>1993</year>
@@ -10969,6 +10986,17 @@ but dumps still have to be confirmed.
</part>
</software>
+ <software name="austrarlp" cloneof="austrarl">
+ <description>Australian Rugby League (prototype)</description>
+ <year>1994</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="australian rugby league (prototype).bin" size="2097152" crc="51117c67" sha1="bb84be50eb4d31dbe601058bf9ea1adaaec1a1b1"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="awepossm">
<description>Awesome Possum (USA)</description>
<year>1993</year>
@@ -11827,6 +11855,20 @@ but dumps still have to be confirmed.
</part>
</software>
+<!-- Found in a development cart with an Alien Storm label -->
+ <software name="biohazrbp1" cloneof="biohazrb">
+ <description>Bio Hazard Battle (prototype)</description>
+ <year>1991?</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5694-01"/>
+ <feature name="ic5" value="PC74HC139P"/>
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="bio hazard battle (prototype).bin" size="1048576" crc="4f19a73d" sha1="66439a7a4b8cb3f195a5830b62ceb03c68392ac2"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="biohazrbp" cloneof="biohazrb">
<description>Bio Hazard Battle (USA, Prototype)</description>
<year>1992</year>
@@ -12362,6 +12404,17 @@ but dumps still have to be confirmed.
</part>
</software>
+ <software name="captlangp" cloneof="havoc">
+ <description>Captain Lang (prototype)</description>
+ <year>1993</year>
+ <publisher>Data East</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="captain lang (early prototype).bin" size="1048576" crc="89418d48" sha1="47307d1a7ea1e813547c94700885595c6e8d156a"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="captplanu" cloneof="captplan">
<description>Captain Planet and the Planeteers (USA)</description>
<year>1993</year>
@@ -12434,6 +12487,17 @@ but dumps still have to be confirmed.
</part>
</software>
+ <software name="champwcsp" cloneof="champwcs">
+ <description>Champions World Class Soccer (prototype)</description>
+ <year>1994</year>
+ <publisher>Flying Edge</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="champions world class soccer (prototype 19940318).bin" size="1048576" crc="7b3eb69d" sha1="d99c4bc35f3380338f6b69daa527cbd8e0d7b257"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="champbwl">
<description>Championship Bowling (USA)</description>
<year>1993</year>
@@ -12770,6 +12834,18 @@ but dumps still have to be confirmed.
</part>
</software>
+<!-- Nearly identical to final build save for a few bytes -->
+ <software name="colleg96p" cloneof="colleg96">
+ <description>College Football USA 96 (prototype 19950621)</description>
+ <year>1995</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="college football usa 96 (prototype 19950621).bin" size="2097152" crc="e70bd01d" sha1="5438ba1baa3400c73905e25fdfe9d504c3604d5a"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="colleg97">
<description>College Football USA 97 (USA)</description>
<year>1996</year>
@@ -13769,6 +13845,18 @@ but dumps still have to be confirmed.
</part>
</software>
+<!-- This is likely a dump from one of 50 reproduction cartridges, sold on AtariAge, based on an original prototype -->
+ <software name="indyheat">
+ <description>Danny Sullivan's Indy Heat (prototype) (pirate)</description>
+ <year>1992</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="danny sullivan's indy heat (prototype).bin" size="2097152" crc="0e356a3c" sha1="6e76ff6a74374cd9170a902c250a1674ef69fd56"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="darkcstl">
<description>Dark Castle (Euro, USA)</description>
<year>1991</year>
@@ -14372,8 +14460,8 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="drrobotnup" cloneof="drrobotn">
- <description>Dr. Robotnik's Mean Bean Machine (USA, Prototype)</description>
+ <software name="drrobotnup1" cloneof="drrobotn">
+ <description>Dr. Robotnik's Mean Bean Machine (USA, prototype)</description>
<year>1993</year>
<publisher>Sega</publisher>
<part name="cart" interface="megadriv_cart">
@@ -14383,6 +14471,17 @@ but dumps still have to be confirmed.
</part>
</software>
+ <software name="drrobotnup" cloneof="drrobotn">
+ <description>Dr. Robotnik's Mean Bean Machine (USA, prototype b)</description>
+ <year>1993</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="dr. robotnik's mean bean machine (prototype b).bin" size="1048576" crc="c631bfff" sha1="9d65fd99d8306b09d0cb7ce728647d223294208c"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="drrobotnu" cloneof="drrobotn">
<description>Dr. Robotnik's Mean Bean Machine (USA)</description>
<year>1993</year>
@@ -14531,6 +14630,17 @@ but dumps still have to be confirmed.
</part>
</software>
+ <software name="dune2p" cloneof="dune2">
+ <description>Dune - The Battle for Arrakis (Euro, prototype 19940111)</description>
+ <year>1993</year>
+ <publisher>Virgin Interactive</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="dune ii - the battle for arrakis (prototype 19940111).bin" size="1048576" crc="781cb285" sha1="d02cf6e07071cf3d47e867182bf42d67b9e30a3e"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="duneu" cloneof="dune2">
<description>Dune - The Battle for Arrakis (USA)</description>
<year>1993</year>
@@ -15955,6 +16065,18 @@ but dumps still have to be confirmed.
</part>
</software>
+<!-- A Sega Channel version was released, but this is apparently an earlier prototype without sound -->
+ <software name="flintop">
+ <description>The Flintstones (Ocean prototype)</description>
+ <year>1995</year>
+ <publisher>Ocean</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="the flintstones (ocean) (prototype).bin" size="1048576" crc="9281ff45" sha1="23c1ad486457ee73b504133014970aea316634f6"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="foreman">
<description>Foreman for Real (World)</description>
<year>1995</year>
@@ -16519,6 +16641,17 @@ but dumps still have to be confirmed.
</part>
</software>
+ <software name="granadap" cloneof="granada">
+ <description>Granada (Jpn, USA, v1.1 prototype)</description>
+ <year>1990</year>
+ <publisher>Renovation ~ Wolf Team</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="524288">
+ <rom name="granada (rev01 prototype).bin" size="524288" crc="129a37dd" sha1="ae23265cdc4907bae676101d3086929425ef641a"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="grandslj" cloneof="grandsl">
<description>GrandSlam - The Tennis Tournament '92 (Jpn)</description>
<year>1992</year>
@@ -20318,6 +20451,20 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="nbajamp" cloneof="nbajam">
+ <description>NBA Jam (Apr 1993 prototype)</description>
+ <year>1993</year>
+ <publisher>Arena</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_nbajam_alt"/>
+ <feature name="pcb" value="SGEP2A AW REV. A"/>
+ <feature name="u3" value="74HC139AP"/>
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="nba jam april 1993.bin" size="2097152" crc="e35f7eee" sha1="1aad8b146ec1eb2a9823878fbfddc02efe3f6ad9"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="nbajamtef" cloneof="nbajamte">
<description>NBA Jam Tournament Edition (World, 2002 Fix Release)</description>
<year>2002?</year>
@@ -21048,6 +21195,19 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+<!-- This is mostly identical to v1.1 and yet the internal header claims it is earlier than the above alt -->
+ <software name="nhlpa93b" cloneof="nhlpa93">
+ <description>NHLPA Hockey 93 (Euro, USA, v1.1 alt)</description>
+ <year>1992</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_nhlpa"/>
+ <dataarea name="rom" width="16" endianness="big" size="524288">
+ <rom name="nhlpa hockey 93 (alternate build).bin" size="524288" crc="93e509ea" sha1="af5dbf3e70417753164ceeb76be63f51e492626f"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="mansellu" cloneof="mansell">
<description>Nigel Mansell's World Championship Racing (USA)</description>
<year>1993</year>
@@ -22606,6 +22766,27 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="psychop" cloneof="psycho">
+ <description>Psycho Pinball (prototype)</description>
+ <year>1994</year>
+ <publisher>Codemasters</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <!-- This is the order they appear on PCB. Release by drx had ODD0/1 names swapped. -->
+ <rom name="EVN0.bin" size="524288" crc="495ca575" sha1="08a60b9bb4b09aa646edb28d787058754ee899ef" offset="0x000001" loadflag="load16_byte"/>
+ <rom name="EVN1.bin" size="524288" crc="c025faf7" sha1="b97b1edbfd94661bdfd32d27c21c65f8ff662a39" offset="0x100001" loadflag="load16_byte"/> <!-- EVN1 silkscreen not on PCB -->
+ <rom name="ODD1.bin" size="524288" crc="5e4f5343" sha1="45694929f8b854d60b5daaf128227af0d233f731" offset="0x100000" loadflag="load16_byte"/>
+ <rom name="ODD0.bin" size="524288" crc="aa1dedde" sha1="c9e230e064b1c3a760c449c745ea483d97c00de1" offset="0x000000" loadflag="load16_byte"/>
+ </dataarea>
+ </part>
+<!-- LABEL(S)
+
+ PSYCHO PINBALL
+ Mega Drive - Full game
+ 17
+-->
+ </software>
+
<software name="puggsyp" cloneof="puggsy">
<description>Puggsy (Prototype)</description>
<year>1993</year>
@@ -22653,7 +22834,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
-
<software name="puttsqup">
<description>Putty Squad (prototype)</description>
<year>1992</year>
@@ -22665,6 +22845,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="puttsqup1" cloneof="puttsqup">
+ <description>Putty Squad (early prototype)</description>
+ <year>1992</year>
+ <publisher>System 3 / Ocean</publisher>
+ <info name="usage" value="Move Putty with second controller"/>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="0x100000">
+ <rom name="putty squad (early prototype).bin" size="0x100000" crc="4974ae73" sha1="68be5cc2aae704777bbe47fb4a0e8ffe9afca9d3"/>
+ </dataarea>
+ </part>
+ </software>
<software name="putter">
<description>Putter Golf (Jpn, SegaNet)</description>
@@ -22933,6 +23124,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="radrexp" cloneof="radrex">
+ <description>Radical Rex (Euro, prototype)</description>
+ <year>1994</year>
+ <publisher>Activision</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="radical rex (prototype).bin" size="1048576" crc="bf2912e3" sha1="da7400580b757d531f86e62b3f211798d8663237"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="radrexu" cloneof="radrex">
<description>Radical Rex (USA)</description>
<year>1994</year>
@@ -24339,8 +24541,9 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="ship">
- <description>Ship (Prototype)</description>
+<!-- This was a demo program distributed with the GEMS 2.5 devkit. This version was compiled from source code. -->
+ <software name="ship1" cloneof="ship">
+ <description>Ship (prototype)</description>
<year>199?</year>
<publisher>Technopop</publisher>
<part name="cart" interface="megadriv_cart">
@@ -24350,6 +24553,21 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+<!-- This is from an original developer's cart that had a Sega VISITOR sticker slapped on the front as a joke by programmer Randel Reiss -->
+ <software name="ship">
+ <description>Ship (visitor prototype)</description>
+ <year>199?</year>
+ <publisher>Technopop</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5694-01"/>
+ <feature name="ic5" value="PC74HC139P"/>
+ <dataarea name="rom" width="16" endianness="big" size="262144">
+ <!-- The known dump is a 512KB overdump. PCB clearly has two 128KB 27C100s. This cuts off the second half (all 0xFF). -->
+ <rom name="ship (visitor prototype).bin" size="262144" crc="852b5511" sha1="167c163e10135b6d0fcd63b1d1b6981d30db9af0"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="shougi">
<description>Shougi no Hoshi (Jpn)</description>
<year>1991</year>
@@ -25549,6 +25767,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="spiroup" cloneof="spirou">
+ <description>Spirou (Euro, prototype)</description>
+ <year>1996</year>
+ <publisher>Infogrames</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="spirou (prototype).bin" size="1048576" crc="51bc6c35" sha1="1b03b04a1d3ae75b51e487dced305c6a729b4fa6"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="splatth2">
<description>Splatterhouse 2 (Euro)</description>
<year>1992</year>
@@ -26165,6 +26394,18 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+<!-- This mostly differs from final build only in the internal header... -->
+ <software name="sracerp" cloneof="sracer">
+ <description>Street Racer (Euro, prototype 19950321)</description>
+ <year>1995</year>
+ <publisher>Ubi Soft</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="street racer (prototype 19950321).bin" size="1048576" crc="a439a96e" sha1="674e3c5185923a98bd8e9ae9bc0409d0c6503432"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="ssmart">
<description>Street Smart (Jpn, USA)</description>
<year>1991</year>
@@ -27724,6 +27965,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="tintinp" cloneof="tintin">
+ <description>Tintin au Tibet (Euro, prototype)</description>
+ <year>1995</year>
+ <publisher>Infogrames</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="tintin in tibet (prototype).bin" size="2097152" crc="5d4e0ea1" sha1="28a63f4e7c063c127b00dc7c8c3f1439eed437ba"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="ttacmeu" cloneof="ttacme">
<description>Tiny Toon Adventures - Acme All-Stars (USA, Kor)</description>
<year>1994</year>
@@ -30965,6 +31217,23 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <!-- To be used in conjuction with a MegaCD -->
+ <software name="fluxp" cloneof="flux">
+ <description>Flux (Euro, prototype 19950425)</description>
+ <year>1995</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5694-01"/>
+ <feature name="ic1" value="M27C1000-12XF1"/>
+ <feature name="ic2" value="M27C1000-12XF1"/>
+ <feature name="ic5" value="74HC139AP"/>
+ <dataarea name="rom" width="16" endianness="big" size="262144">
+ <rom name="ic1.bin" size="131072" crc="ae6f6975" sha1="24364fcf4373af48e833fdb82ec5beda05d95a50" offset="0x000001" loadflag="load16_byte"/>
+ <rom name="ic2.bin" size="131072" crc="4dd9f61e" sha1="1d833920ce871dfdfbc8442efcc9a931138fb683" offset="0x000000" loadflag="load16_byte"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="meganser">
<description>Mega Anser (Jpn)</description>
<year>199?</year>
diff --git a/hash/nes.xml b/hash/nes.xml
index 59875f415ff..019e76a558f 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -76833,7 +76833,55 @@ be better to redump them properly. -->
</software>
-<!-- Multicarts (these have to be better examined: some dumps are possibly incomplete, e.g. menu + 1 game: thes eincomplete dumps should be removed) -->
+<!-- Multicarts using homebrew mapper #28. These have their origin in NESDev competitions. The following roms are freely available digital releases. They need to be checked against commercial physical carts. -->
+
+ <software name="a53vol1">
+ <description>Streemerz - Action 53 Function 16 Volume 1 (R.C.#2)</description>
+ <year>2013</year>
+ <publisher>Infinite NES Lives</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="nes_action53" />
+ <dataarea name="prg" size="524288">
+ <rom name="action 53 volume 1.prg" size="524288" crc="6441e8f6" sha1="da92a26ecc64767fdbb63ab8b2d9e7dcd7884fcc" offset="00000" />
+ </dataarea>
+ <!-- 32k VRAM on cartridge? -->
+ <dataarea name="vram" size="32768">
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="a53vol2">
+ <description>Double Action 53 Volume 2 (R.C.#2)</description>
+ <year>2014</year>
+ <publisher>Infinite NES Lives</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="nes_action53" />
+ <dataarea name="prg" size="524288">
+ <rom name="action 53 volume 2.prg" size="524288" crc="6e61971f" sha1="cb2c6dc8c8be3ee738ad8a793a75475553506e14" offset="00000" />
+ </dataarea>
+ <!-- 32k VRAM on cartridge? -->
+ <dataarea name="vram" size="32768">
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="a53vol3">
+ <description>Action 53 Vol. 3 - Revenge of the Twins</description>
+ <year>2018</year>
+ <publisher>Infinite NES Lives</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="nes_action53" />
+ <dataarea name="prg" size="1048576">
+ <rom name="action 53 volume 3.prg" size="1048576" crc="660f8e82" sha1="85c67c171f77a47566f4b9ead1a352c02e2e07a6" offset="00000" />
+ </dataarea>
+ <!-- 32k VRAM on cartridge? Sinking Feeling needs this much. -->
+ <dataarea name="vram" size="32768">
+ </dataarea>
+ </part>
+ </software>
+
+
+<!-- Multicarts (these have to be better examined: some dumps are possibly incomplete, e.g. menu + 1 game: these incomplete dumps should be removed) -->
<software name="mc_10og" supported="no">
<description>10 in 1 Omake Game (FC Mobile)</description>
@@ -81540,4 +81588,3 @@ that the real dumps might surface -->
</software>
</softwarelist>
-
diff --git a/hash/rx78_cart.xml b/hash/rx78_cart.xml
index c9bc6922f2b..7bc3870e327 100644
--- a/hash/rx78_cart.xml
+++ b/hash/rx78_cart.xml
@@ -102,8 +102,8 @@ The monitor will expect you to load a program from cassette.
<publisher>Bandai</publisher>
<info name="usage" value="Z and X to start and move; Space to pick up and put down" />
<part name="cart" interface="rx78_cart">
- <dataarea name="rom" size="16384">
- <rom name="burgershop.bin" size="16384" crc="b5a5ffc5" sha1="3b5fb0e670dce635d5220c0ffcae69da7c55049b" />
+ <dataarea name="rom" size="8192">
+ <rom name="burgershop.bin" size="8192" crc="2428ad88" sha1="a773125aeb85646a6e3d15c4c2f2685d9e5232c9" />
</dataarea>
</part>
</software>
@@ -112,16 +112,16 @@ The monitor will expect you to load a program from cassette.
<description>Challenge Golf</description>
<year>1983</year>
<publisher>Bandai</publisher>
- <info name="usage" value="Q1 = Home or Backspace; Q2 = \ or End; ZXCV to rotate player; Arrows to rotate view; Middle row or Ctrl to choose a club; Alt or Space to shoot; Enter to abandon hole." />
+ <info name="usage" value="Q1 = Home or Backspace; Q2 = \ or End; ZXCV to rotate player; Arrows to adjust view; Middle row or Ctrl to choose a club; Alt or Space to shoot; Enter to abandon hole." />
<part name="cart" interface="rx78_cart">
<dataarea name="rom" size="16384">
- <rom name="ChallengeGolf.bin" size="0x2000" crc="e4edf5c3" sha1="25322dbf6b8f80604aebe87cc375e5a63b98b6d6" offset="0x2000" />
+ <rom name="3128c62-3g1.ic1.bin" size="0x2000" crc="e4edf5c3" sha1="25322dbf6b8f80604aebe87cc375e5a63b98b6d6" offset="0x2000" />
<rom size="0x2000" offset="0x0000" loadflag="continue" />
</dataarea>
</part>
</software>
- <software name="cracer" supported="partial"><!-- various bugs -->
+ <software name="cracer">
<description>Champion Racer</description>
<year>1983</year>
<publisher>Bandai</publisher>
@@ -133,10 +133,11 @@ The monitor will expect you to load a program from cassette.
</part>
</software>
- <software name="exbaseb" supported="no"><!-- gfx issues -->
+ <software name="exbaseb">
<description>Excite Baseball</description>
<year>1983</year>
<publisher>Bandai</publisher>
+ <info name="usage" value="Blue player uses arrows; Red player uses R,D,F,G" /><!-- difficult to hit the ball -->
<part name="cart" interface="rx78_cart">
<dataarea name="rom" size="32768">
<rom name="exbaseb1.bin" size="0x2000" crc="6237e902" sha1="0f7c236b9425508b3f22664ce7a5f10fc1b991b3" offset="0x4000" />
@@ -230,8 +231,8 @@ The monitor will expect you to load a program from cassette.
<publisher>Bandai</publisher>
<info name="usage" value="1 player: Use P[];./ticPGDN to move, Space to fire. 2 players: P1 use Arrows,Ctrl,Alt; P2 use RDFGAS" />
<part name="cart" interface="rx78_cart">
- <dataarea name="rom" size="16384">
- <rom name="ultraman.bin" size="16384" crc="0ba54dfb" sha1="5ba7eb4779d5c362e4751102b31d8e0083e06310" />
+ <dataarea name="rom" size="8192">
+ <rom name="ultraman.bin" size="8192" crc="f7bc2394" sha1="e124c7325044abc615b807c0b670bbaa35d94264" />
</dataarea>
</part>
</software>
diff --git a/hash/super80_cass.xml b/hash/super80_cass.xml
index 0bc4481bfa3..7f7f3f80150 100644
--- a/hash/super80_cass.xml
+++ b/hash/super80_cass.xml
@@ -28,13 +28,56 @@ M-2325 : Power transformer
H-3200 : Metal Case
H-8402 : Bare main PCB (included in K-3600)
P-2670 : S100 socket (included in K-3606)
+X-1186 : 16k of 4116 RAM
X-3790 : Debug/Disassembler
X-3791 : Editor-Assembler
+B-3600 : Construction Manual
+B-3602 : Basic Manual
+B-3606 : Dick Smith's First Book of Super-80 Programs
These 2 games were never advertised, but since the details are available...
X-3792 : Dungeon Dilemma
-X-3607 : Horse Race
+X-3793 : Horse Race
+
+
+List of known lost commercial games:
+Name Publisher or Author Notes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+PACKMEN Microcomputer Engineering (MCE) VDUEB only
+Super-80 Invaders Microcomputer Engineering (MCE) VDUEB only
+Martian Attack Microcomputer Engineering (MCE) VDUEB only
+Othello Microcomputer Engineering (MCE) VDUEB only
+Adventure Microcomputer Engineering (MCE) VDUEB only
+Super-80 Chess Microcomputer Engineering (MCE) VDUEB only
+ZIP ZAP Bemak
+Laser Raider Bemak
+Mini Typewriter Bemak
+Super-80 Tables Bemak
+Supermind Challender Bemak
+Keeper Matrix Software (George Georgiou)
+Black Jack Matrix Software
+Simon Matrix Software
+Simon II Matrix Software
+Space Rescue Matrix Software
+Froggy Matrix Software
+Yahtzee Matrix Software
+Poker Matrix Software
+Vegas Black Jack Matrix Software
+Keeper Matrix Software
+Adventure Matrix Software
+Dungeon Dilemma (improved) Matrix Software
+Star Trek Matrix Software
+Sargon Chess Matrix Software
+Breakout Matrix Software
+Scrambler Matrix Software
+Rally X Matrix Software
+Super Invaders Megasoft
+Sea Wars Megasoft
+Chess Chasers Megasoft
+Hangman Megasoft
+Life Megasoft
+Macro/Z80 + D/BUG Tawarri (Scott MacDonald)
-->
@@ -47,7 +90,7 @@ X-3607 : Horse Race
<description>Horse Race</description>
<year>198?</year>
<publisher>Dick Smith Electronics</publisher>
- <info name="serial" value="X-3607" /><!-- 012L1 -->
+ <info name="serial" value="X-3793" /><!-- 012L1 -->
<info name="developer" value="George Georgiou"/>
<info name="usage" value="LOAD while in BASIC, then RUN" />
<sharedfeat name="compatibility" value="DEF,D,E,M" />
@@ -113,7 +156,6 @@ X-3607 : Horse Race
<!--
Various commercial releases for use with super80, super80d and super80e, recorded at 300 baud.
Mini Typewriter has bugs.
- There was quite a lot of commercially-available software available, however 99 percent of it has been lost forever.
-->
<software name="eldraw">
<description>El Draw 3.6.3</description>
@@ -174,13 +216,14 @@ X-3607 : Horse Race
<publisher>Bemak</publisher>
<info name="serial" value="403" />
<info name="usage" value="super80d only. L to load, G100 to run" />
- <sharedfeat name="compatibility" value="D,M" />
+ <sharedfeat name="compatibility" value="D" />
<part name="cass" interface="super80_cass">
- <dataarea name="cass" size="15616026">
- <rom name="zipzap.wav" size="15616026" crc="7bf30894" sha1="50fe59484b5eb39f37933f23754e7f1c2c0f322b"/>
+ <dataarea name="cass" size="0xfb7438">
+ <rom name="zipzap.wav" size="0xfb7438" crc="e57ca5d5" sha1="520753d06f6bd931ea4ea40c0929fa66ca8f41a6"/>
</dataarea>
</part>
</software>
+
<!--
Various homebrew programs for use with super80, super80d and super80e, recorded at 300 baud.
Some are ok, some are junk.
@@ -534,32 +577,6 @@ X-3607 : Horse Race
</dataarea>
</part>
</software>
- <software name="zipzapa" cloneof="zipzap">
- <description>Zip Zap (sound fixed)</description>
- <year>198?</year>
- <publisher>Bemak</publisher>
- <info name="serial" value="403a" />
- <info name="usage" value="super80d only. L to load, G100 to run" />
- <sharedfeat name="compatibility" value="D" />
- <part name="cass" interface="super80_cass">
- <dataarea name="cass" size="15618506">
- <rom name="zipzapa.wav" size="15618506" crc="bb16ab34" sha1="6dc6209af690ccad61eb8aef0bb0509ab9743813"/>
- </dataarea>
- </part>
- </software>
- <software name="zipzap1" cloneof="zipzap">
- <description>Zip Zap (R1)</description>
- <year>198?</year>
- <publisher>Bemak</publisher>
- <info name="serial" value="403R1" />
- <info name="usage" value="super80d only. L to load, G100 to run" />
- <sharedfeat name="compatibility" value="D,M" />
- <part name="cass" interface="super80_cass">
- <dataarea name="cass" size="15618496">
- <rom name="zipzap1.wav" size="15618496" crc="5b98c625" sha1="871e278c0da48c236689fa7d20017d6f2ceb9c9b"/>
- </dataarea>
- </part>
- </software>
<software name="zipzap2j" cloneof="zipzap">
<description>Zip Zap (R2)(with arrows)</description>
<year>198?</year>
@@ -568,8 +585,8 @@ X-3607 : Horse Race
<info name="usage" value="super80d only. L to load, G100 to run" />
<sharedfeat name="compatibility" value="D,M" />
<part name="cass" interface="super80_cass">
- <dataarea name="cass" size="15621606">
- <rom name="zipzap2j.wav" size="15621606" crc="89258a7f" sha1="c1e8eeed52ce98e65c35a12e65207aef681b2ac4"/>
+ <dataarea name="cass" size="0xfb8046">
+ <rom name="zipzap2j.wav" size="0xfb8046" crc="734039d9" sha1="7c936325937877582dd40098dcf20df3fbf46aae"/>
</dataarea>
</part>
</software>
@@ -1647,6 +1664,31 @@ X-3607 : Horse Race
</dataarea>
</part>
</software>
+ <software name="crazym">
+ <description>Crazy Maze</description>
+ <year>1983</year>
+ <publisher>Matrix Software</publisher>
+ <info name="usage" value="L to load, G0 to run" />
+ <sharedfeat name="compatibility" value="D" />
+ <part name="cass" interface="super80_cass">
+ <dataarea name="cass" size="0x1bfd222">
+ <rom name="crazym.wav" size="0x1bfd222" crc="094412f9" sha1="a32f716313745bbd8b14cb54a0f8f3817fe059f7"/>
+ </dataarea>
+ </part>
+ </software>
+ <software name="crazymj">
+ <description>Crazy Maze (with arrows)</description>
+ <year>1983</year>
+ <publisher>Matrix Software</publisher>
+ <info name="usage" value="T3 then, L to load, G0 to run" />
+ <sharedfeat name="compatibility" value="D,M" />
+ <part name="cass" interface="super80_cass">
+ <dataarea name="cass" size="0x1bfd20e">
+ <rom name="crazymj.wav" size="0x1bfd20e" crc="f723e58d" sha1="213a9dca5f58206cd415aa34eb4f0a70eb785c7b"/>
+ </dataarea>
+ </part>
+ </software>
+
<!--
Various homebrew programs for use with super80v (80 column display), recorded at 600 baud.
Most of these have been partially rewritten by myself to take advantage of the features of the super80v.
diff --git a/hash/vsmilem_cart.xml b/hash/vsmilem_cart.xml
index 3d4b3c0b8fb..d6a9f1c8d55 100644
--- a/hash/vsmilem_cart.xml
+++ b/hash/vsmilem_cart.xml
@@ -26,8 +26,10 @@ Language:
+========+===================+===========================================================================================+
| XX | 80-084000(US) | Action Mania |
-| XX | 80-084000(US) | Action Mania (Rev, 4?) |
-| XX | 80-084000(US) | Action Mania (Rev, 6?) |
+| XX | 80-084000(US) | Action Mania (rev. 4?) |
+| XX | 80-084000(US) | Action Mania (rev. 6?) |
+| XX | 80-084000(US) | Action Mania (alt 1) |
+| XX | 80-084000(US) | Action Mania (alt 2) |
| | (IT) | ????? |
| XX | 80-084002(NL) | Sports Games |
| | 80-084003(UK) | Action Mania |
@@ -38,16 +40,17 @@ Language:
| XX | 80-084008(CN) | 英语运动园 |
+========+===================+===========================================================================================+
| XX | 80-084020(US) | Dora the Explorer: Dora's Fix It Adventure |
+| XX | 80-084020(US) | Dora the Explorer: Dora's Fix It Adventure (rev. 3?) |
| ** | 80-084021(US) | Dora the Explorer: Dora's Fix It Adventure (pocket version, same ROM as 80-084020(US)) |
| XX | 80-084022(NL) | Dora: Dora's Reparatie Avontuur |
| | 80-084023(UK) | Dora the Explorer: Dora's Fix It Adventure |
| XX | 80-084024(GE) | Dora: Doras Reparatur-Abenteuer |
-| XX | 80-084024(GE) | Dora: Doras Reparatur-Abenteuer (Rev. 2) |
+| XX | 80-084024(GE) | Dora: Doras Reparatur-Abenteuer (rev. 2) |
| XX | 80-084025(FR) | Dora L'Exploratrice : Les Adventures De Dora Apprentie Mécano |
| | 80-084026(PT) | Dora : em busca das pecas perdidas |
-| | 80-084027(SP) | Dora : La Aventura arregla-todo de Dora |
+| XX | 80-084027(SP) | Dora La Exploradora: La Aventura arregla-todo de Dora |
+========+===================+===========================================================================================+
-| | 80-084040(US) | Scooby-Doo! - Funland Frenzy |
+| XX | 80-084040(US) | Scooby-Doo! - Funland Frenzy |
| | 80-084043(UK) | Scooby-Doo! - Funland Frenzy |
| | 80-084044(GE) | Scooby-Doo! - Im Lernpark |
| XX | 80-084045(FR) | Scooby-Doo! - Panique à Funland |
@@ -66,7 +69,7 @@ Language:
| | 80-084100(US) | Wonder Pets - Save the Animals! |
| XX | 80-084103(UK) | Wonder Pets - Save the Animals! |
+========+===================+===========================================================================================+
-| | 80-084120(US) | Kung Fu Panda - Path of the Panda |
+| XX | 80-084120(US) | Kung Fu Panda - Path of the Panda |
| | 80-084123(UK) | Kung Fu Panda - Path of the Panda |
| XX | 80-084124(GE) | Kung Fu Panda - Der Weg des Panda |
| XX | 80-084125(FR) | Kung Fu Panda - La mission de Po |
@@ -77,11 +80,11 @@ Language:
| XX | 80-084145(FR) | Spider-Man & ses amis - Missions Secrètes |
| | 80-084147(SP) | Spider-Man y Amigos: Misiones Secretas (no # on label) |
+========+===================+===========================================================================================+
-| XX | 80-084160(US) | Disney's Little Einsteins: The Glass Slipper Ball (Rev. 2?) |
-| XX | 80-084160(US) | Disney's Little Einsteins: The Glass Slipper Ball (Rev. 5?) |
+| XX | 80-084160(US) | Disney's Little Einsteins: The Glass Slipper Ball (rev. 2?) |
+| XX | 80-084160(US) | Disney's Little Einsteins: The Glass Slipper Ball (rev. 5?) |
| | 80-084163(UK) | Disney's Little Einsteins: The Glass Slipper Ball |
| XX | 80-084164(GE) | Disney's Kleine Einsteins: Der Glaspantoffel-Ball |
-| XX | 80-084164(GE) | Disney's Kleine Einsteins: Der Glaspantoffel-Ball (Rev. 2?) |
+| XX | 80-084164(GE) | Disney's Kleine Einsteins: Der Glaspantoffel-Ball (rev. 2?) |
| | 80-084167(SP) | Little Einsteins de Disney: El Baile del Zapatito de Cristal |
+========+===================+===========================================================================================+
| XX | 80-084180(US) | Mickey Mouse Clubhouse |
@@ -95,6 +98,7 @@ Language:
| | 80-084188(CN) | 米奇妙妙屋 |
+========+===================+===========================================================================================+
| XX | 80-084200(US) | Nascar Academy - Race Car Superstar |
+| XX | 80-084200(US) | Nascar Academy - Race Car Superstar (alt) |
+========+===================+===========================================================================================+
| | 80-084220(US) | Snow Park Challenge |
| | 80-084222(NL) | Wintersport Games |
@@ -158,13 +162,13 @@ Language:
| | 80-084386(PT) | Winnie - Em Busca do Mel (84396 on cart) |
| XX | 80-084387(SP) | Winnie the Pooh - En Busca de la Miel |
+========+===================+===========================================================================================+
-| | 80-084400(US) | Cars - Rev It Up in Radiator Springs |
-| | 80-084402(NL) | Cars - Spektakel in Radiator Springs |
-| | 80-084403(UK) | Cars - Rev it up in Radiator Springs |
-| XX | 80-084404(GE) | Cars - Vollgas in Radiator Springs |
-| XX | 80-084405(FR) | Cars - Quatre Roues |
-| | 80-084406(PT) | Cars - Aventura Em Radiator Springs (84416 on cart) |
-| XX | 80-084407(SP) | Cars - Acelera el Motor en Radiador Springs |
+| XX | 80-084400(US) | Cars - Rev It Up in Radiator Springs |
+| | 80-084402(NL) | Cars - Spektakel in Radiator Springs |
+| | 80-084403(UK) | Cars - Rev it up in Radiator Springs |
+| XX | 80-084404(GE) | Cars - Vollgas in Radiator Springs |
+| XX | 80-084405(FR) | Cars - Quatre Roues |
+| | 80-084406(PT) | Cars - Aventura Em Radiator Springs (84416 on cart) |
+| XX | 80-084407(SP) | Cars - Acelera el Motor en Radiador Springs |
+========+===================+===========================================================================================+
| XX | 80-084420(US) | Toy Story 3 |
| | 80-084421(US) | Toy Story 3 (pocket version) |
@@ -209,8 +213,8 @@ Language:
+========+===================+===========================================================================================+
| | 80-084560(US) | <Unknown> |
+========+===================+===========================================================================================+
-| | 80-084580(US) | Cars 2 (motion version) |
-| | 80-084581(US) | Cars 2 (pocket version) |
+| XX | 80-084580(US) | Cars 2 (motion version) |
+| XX | 80-084581(US) | Cars 2 (pocket version) |
| | 80-084583(UK) | Cars 2 |
| XX | 80-084584(GE) | Cars 2 |
| XX | 80-084585(FR) | Cars 2 |
@@ -219,7 +223,7 @@ Language:
| | 80-084600(US) | <Unknown> (Should be Orange colored Cinderella - Cinderella's Magic Wishes) |
| | 80-084603(UK) | Cinderella - Cinderella's Magic Wishes |
| XX | 80-084604(GE) | Cinderella - Lernen im Maerchenland |
-| XX | 80-084604(GE) | Cinderella - Lernen im Maerchenland (Rev. 2?) |
+| XX | 80-084604(GE) | Cinderella - Lernen im Maerchenland (rev. 2?) |
| XX | 80-084605(FR) | Cendrillon - Le rêve enchanté de Cendrillon |
+========+===================+===========================================================================================+
| | 80-084620(US) | <Unknown> (Should be Orange colored Finding Nemo) |
@@ -237,7 +241,7 @@ Language:
<softwarelist name="vsmilem_cart" description="VTech V.Smile Motion cartridges">
<software name="actnmniam6">
- <description>Action Mania (USA, Rev. 6?)</description>
+ <description>Action Mania (USA, rev. 6?)</description>
<year>201?</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084000(US)" />
@@ -250,7 +254,7 @@ Language:
</software>
<software name="actnmniam4" cloneof="actnmniam6">
- <description>Action Mania (USA, Rev. 4?)</description>
+ <description>Action Mania (USA, rev. 4?)</description>
<year>201?</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084000(US)" />
@@ -276,6 +280,29 @@ Language:
</part>
</software>
+ <software name="actnmniama1" cloneof="actnmniam6">
+ <description>Action Mania (USA, alt 1)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084000(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <dataarea name="rom" size="0x0800000">
+ <rom name="ACTION Mania 80-084000(US) (Motion) [ALT1].bin" size="0x0800000" crc="790f097f" sha1="d1ff028837b4190173a0823ac518a58deee171b8" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="actnmniama2" cloneof="actnmniam6">
+ <description>Action Mania (USA, alt 2)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084000(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <dataarea name="rom" size="0x0800000">
+ <rom name="ACTION Mania 80-084000(US) (Motion) [ALT2].bin" size="0x0800000" crc="65b5a102" sha1="336bab256596756931d7821244d9d659e55992e8" />
+ </dataarea>
+ </part>
+ </software>
<software name="actnmniamnl" cloneof="actnmniam6">
<description>Sport Games (Netherlands)</description>
@@ -347,7 +374,20 @@ Language:
</part>
</software>
- <software name="carsmge">
+ <software name="carsm">
+ <description>Disney/Pixar Cars - Rev It Up in Radiator Springs (USA)</description>
+ <year>2009</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084400(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="8388608">
+ <rom name="Cars - Rev It Up in Radiator Springs 80-084400(US) (Motion).bin" size="8388608" crc="1e6363ef" sha1="5db9fe5626ebae102ee0ec8e6b42c7987c7df686" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="carsmge" cloneof="carsm">
<description>Disney/Pixar Cars - Vollgas in Radiator Springs (Germany)</description>
<year>2009</year>
<publisher>VTech</publisher>
@@ -362,7 +402,7 @@ Language:
</part>
</software>
- <software name="carsmfr" cloneof="carsmge">
+ <software name="carsmfr" cloneof="carsm">
<description>Disney/Pixar Cars - Quatre Roues (France)</description>
<year>2009?</year>
<publisher>VTech</publisher>
@@ -375,7 +415,7 @@ Language:
</part>
</software>
- <software name="carsmsp" cloneof="carsmge">
+ <software name="carsmsp" cloneof="carsm">
<description>Disney/Pixar Cars - Acelera el Motor en Radiador Springs (Spain)</description>
<year>20??</year>
<publisher>VTech</publisher>
@@ -390,7 +430,35 @@ Language:
</part>
</software>
- <software name="cars2mge">
+ <software name="cars2m">
+ <description>Disney/Pixar Cars 2 (USA)</description>
+ <year>2011</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084580(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="0x1000000">
+ <rom name="Cars 2 80-084580(US) (Motion) LOW.bin" size="0x0800000" crc="6d78ae05" sha1="cdb2656be1d6e4fd24f2dd443680152fdeeab2a2" offset="0x0000000" />
+ <rom name="Cars 2 80-084580(US) (Motion) HIGH.bin" size="0x0800000" crc="05c42207" sha1="89b89f312477fc56ff53c8ba7ce89ace7671e2cd" offset="0x0800000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cars2mp" cloneof="cars2m">
+ <description>Disney/Pixar Cars 2 (Pocket version, USA)</description>
+ <year>2011</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084581(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="0x1000000">
+ <rom name="Cars 2 80-084581(US) (Motion) (Pocket) LOW.bin" size="0x0800000" crc="3947439a" sha1="0d3ac108a48c64ec456145e7ddb31448425d27f5" offset="0x0000000" />
+ <rom name="Cars 2 80-084581(US) (Motion) (Pocket) HIGH.bin" size="0x0800000" crc="7eb714a4" sha1="dd03301ec4b74706d3ffa64b51bef33b7bd56ba9" offset="0x0800000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cars2mge" cloneof="cars2m">
<description>Disney/Pixar Cars 2 (Germany)</description>
<year>2011</year>
<publisher>VTech</publisher>
@@ -406,7 +474,7 @@ Language:
</part>
</software>
- <software name="cars2mfr" cloneof="cars2mge">
+ <software name="cars2mfr" cloneof="cars2m">
<description>Disney/Pixar Cars 2 (France)</description>
<year>2011</year>
<publisher>VTech</publisher>
@@ -420,7 +488,7 @@ Language:
</software>
<software name="cinderlamge2">
- <description>Disneys Princess Cinderella - Lernen im Märchenland (Germany, Rev. 2?)</description>
+ <description>Disneys Princess Cinderella - Lernen im Märchenland (Germany, rev. 2?)</description>
<year>2010</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084604(GE)" />
@@ -458,8 +526,8 @@ Language:
</part>
</software>
- <software name="doram">
- <description>Nickelodeon Dora the Explorer - Dora's Fix It Adventure (USA, Rev. 3?)</description>
+ <software name="doram3">
+ <description>Nickelodeon Dora the Explorer - Dora's Fix It Adventure (USA, rev. 3?)</description>
<year>2008</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084020(US)" /> <!-- Same ROM as 084021(US) -->
@@ -471,7 +539,20 @@ Language:
</part>
</software>
- <software name="doramnl" cloneof="doram">
+ <software name="doram" cloneof="doram3">
+ <description>Nickelodeon Dora the Explorer - Dora's Fix It Adventure (USA)</description>
+ <year>2008</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084020(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="8388608">
+ <rom name="Dora the Explorer - Dora's Fix-it Adventure 80-084020(US) (Motion).bin" size="8388608" crc="04d168f0" sha1="1ffb35bf7a1884c9ae3be1ce0c9bb9472d889f10" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="doramnl" cloneof="doram3">
<description>Nick Jr Dora - Dora's Reparatie Avontuur (Netherlands)</description>
<year>2009</year>
<publisher>VTech</publisher>
@@ -486,8 +567,8 @@ Language:
</part>
</software>
- <software name="doramg2" cloneof="doram">
- <description>Nick Dora - Doras Reparatur-Abenteuer (Germany, Rev. 2)</description>
+ <software name="doramg2" cloneof="doram3">
+ <description>Nick Dora - Doras Reparatur-Abenteuer (Germany, rev. 2)</description>
<year>2009</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084024(GE)" />
@@ -501,7 +582,7 @@ Language:
</part>
</software>
- <software name="doramge" cloneof="doram">
+ <software name="doramge" cloneof="doram3">
<description>Nick Dora - Doras Reparatur-Abenteuer (Germany)</description>
<year>2009</year>
<publisher>VTech</publisher>
@@ -516,7 +597,7 @@ Language:
</part>
</software>
- <software name="doramfr" cloneof="doram">
+ <software name="doramfr" cloneof="doram3">
<description>Nickelodeon Dora L'Exploratrice - Les adventures de Dora Apprentie Mécano (France)</description>
<year>2008</year>
<publisher>VTech</publisher>
@@ -529,6 +610,19 @@ Language:
</part>
</software>
+ <software name="doramsp" cloneof="doram3">
+ <description>Nickelodeon Dora La Exploradora - La Aventura Arregla-Todo de Dora (Spain)</description>
+ <year>2010</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084027(SP)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="8388608">
+ <rom name="80-084027 - Dora La Exploradora - La Aventura Arregla-Todo De Dora (Spain).bin" size="8388608" crc="6394e5c0" sha1="a1df78187d167cf4bf15322cc4fa6b5a669217c2" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="findnemomfr">
<description>Le Monde de Nemo - Nemo à la decourverte de l'océan (France)</description>
<year>2010</year>
@@ -543,7 +637,7 @@ Language:
</software>
<software name="hmannym">
- <description>Disney Handy Manny (USA, Rev. 2?)</description>
+ <description>Disney Handy Manny (USA, rev. 2?)</description>
<year>2009</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084360(US)" />
@@ -582,7 +676,20 @@ Language:
</part>
</software>
- <software name="kfpandamge">
+ <software name="kfpandam">
+ <description>DreamWorks Kung Fu Panda - Path of the Panda (USA)</description>
+ <year>2008</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084120(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="8388608">
+ <rom name="Kung Fu Panda - Path of the Panda 80-084120(US) (Motion).bin" size="8388608" crc="bcfdfdf6" sha1="759645680e63624b773c569f15b360c0079db839" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kfpandamge" cloneof="kfpandam">
<description>DreamWorks Kung Fu Panda - Der Weg des Panda (Germany)</description>
<year>2008?</year>
<publisher>VTech</publisher>
@@ -597,7 +704,7 @@ Language:
</part>
</software>
- <software name="kfpandamfr" cloneof="kfpandamge">
+ <software name="kfpandamfr" cloneof="kfpandam">
<description>DreamWorks Kung Fu Panda - La mission de Po (France)</description>
<year>2008?</year>
<publisher>VTech</publisher>
@@ -611,7 +718,7 @@ Language:
</software>
<software name="ltleinstnm5">
- <description>Disney's Little Einsteins (USA, Rev. 5?)</description>
+ <description>Disney's Little Einsteins (USA, rev. 5?)</description>
<year>2009</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084160(US)" />
@@ -623,7 +730,7 @@ Language:
</software>
<software name="ltleinstnm2" cloneof="ltleinstnm5">
- <description>Disney's Little Einsteins (USA, Rev. 2?)</description>
+ <description>Disney's Little Einsteins (USA, rev. 2?)</description>
<year>2009</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084160(US)" />
@@ -635,7 +742,7 @@ Language:
</software>
<software name="ltleinstnmg2" cloneof="ltleinstnm5">
- <description>Disney's Kleine Einsteins (Germany, Rev. 2?)</description>
+ <description>Disney's Kleine Einsteins (Germany, rev. 2?)</description>
<year>2009</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084164(GE)" />
@@ -671,6 +778,19 @@ Language:
</part>
</software>
+ <software name="mickeychma" cloneof="mickeychm">
+ <description>Disney Mickey Mouse Clubhouse (alt, USA)</description>
+ <year>2008</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084180(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="8388608">
+ <rom name="Mickey Mouse Clubhouse 80-084180(US) (Motion) [ALT].bin" size="8388608" crc="2ac1da77" sha1="6f6cc0a67e0a0392658c5062bffa581ffe715c1c" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mickeychmge" cloneof="mickeychm">
<description>Disney Micky Maus Wunderhaus (Germany)</description>
<year>2009</year>
@@ -687,7 +807,7 @@ Language:
</software>
<software name="mickeychmf005" cloneof="mickeychm">
- <description>Disney La Maison de Mickey (France, Rev. 005)</description>
+ <description>Disney La Maison de Mickey (France, rev. 005)</description>
<year>2009?</year>
<publisher>VTech</publisher>
<info name="serial" value="084185-005(FR)" />
@@ -715,7 +835,7 @@ Language:
</software>
<software name="monvsalienm">
- <description>DreamWorks Monsters vs. Aliens (USA, Rev. 3?)</description>
+ <description>DreamWorks Monsters vs. Aliens (USA, rev. 3?)</description>
<year>2009</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084440(US)" />
@@ -826,6 +946,19 @@ Language:
</part>
</software>
+ <software name="nascarma" cloneof="nascarm">
+ <description>NASCAR Academy - Race Car Superstar (alt, USA)</description>
+ <year>2009?</year>
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084200(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="8388608">
+ <rom name="NASCAR Academy - Race Car Superstar 80-084200(US) (Motion).bin" size="8388608" crc="030e3f19" sha1="77ddb6463ade16975dd7780593677ca4b01cc93c" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="nihaoklm">
<description>Nickelodeon Ni Hao Kai Lan - Happy Chinese New Year! (USA)</description>
<year>2009</year>
@@ -947,7 +1080,33 @@ Language:
</part>
</software>
- <software name="scoobyffmfr">
+ <software name="scoobyffm">
+ <description>Scooby-Doo! - Funland Frenzy (USA)</description>
+ <year>2008</year> <!-- (s08) -->
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084040(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="8388608">
+ <rom name="Scooby-Doo - Funland Frenzy 80-084040(US) (Motion).bin" size="8388608" crc="aaa1293d" sha1="bef9409a1045c1a4367006b75c0dfc80da052372" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="scoobyffma" cloneof="scoobyffm">
+ <description>Scooby-Doo! - Funland Frenzy (alt, USA)</description>
+ <year>2008</year> <!-- (s08 on screen, s09 on cart label) -->
+ <publisher>VTech</publisher>
+ <info name="serial" value="80-084040(US)" />
+ <part name="cart" interface="vsmile_cart">
+ <feature name="u1" value="" />
+ <dataarea name="rom" size="8388608">
+ <rom name="Scooby-Doo - Funland Frenzy 80-084040(US) (Motion) [ALT].bin" size="8388608" crc="d7471a76" sha1="3621dcee24dc0ec3771e8e312673f192bbe3762b" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="scoobyffmfr" cloneof="scoobyffm">
<description>Scooby-Doo! - Panique à Funland (France)</description>
<year>2008</year> <!-- (s08) -->
<publisher>VTech</publisher>
@@ -960,7 +1119,7 @@ Language:
</part>
</software>
- <software name="scoobyffmsp" cloneof="scoobyffmfr">
+ <software name="scoobyffmsp" cloneof="scoobyffm">
<description>¡¡Scooby-Doo!! - Misterio en el parque (Spain)</description>
<year>2009</year> <!-- (s09) -->
<publisher>VTech</publisher>
@@ -1128,7 +1287,7 @@ Language:
</software>
<software name="tinkerm">
- <description>TinkerBell (USA, Rev. 2?)</description>
+ <description>TinkerBell (USA, rev. 2?)</description>
<year>2009</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084320(GE)" />
@@ -1256,7 +1415,7 @@ Language:
</software>
<software name="wallem">
- <description>Disney/Pixar Wall-E (USA, Rev. 2?)</description>
+ <description>Disney/Pixar Wall-E (USA, rev. 2?)</description>
<year>2008</year>
<publisher>VTech</publisher>
<info name="serial" value="80-084080(US)" />
diff --git a/makefile b/makefile
index 1097656fafd..7738b07fa57 100644
--- a/makefile
+++ b/makefile
@@ -429,7 +429,6 @@ endif
ifneq (,$(findstring s390x,$(UNAME)))
BIGENDIAN := 1
endif
-endif # BIGENDIAN
# FreeBSD
ifneq (,$(findstring powerpc,$(UNAME)))
ifneq (,$(findstring powerpc64le,$(UNAME)))
@@ -438,6 +437,7 @@ else
BIGENDIAN := 1
endif
endif
+endif # BIGENDIAN
ifndef PYTHON_EXECUTABLE
PYTHON := python
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index fd54182bc0a..ae7ff3bfba9 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -1614,6 +1614,8 @@ if (BUSES["ISA"]~=null) then
MAME_DIR .. "src/devices/bus/isa/bblue2.h",
MAME_DIR .. "src/devices/bus/isa/3xtwin.cpp",
MAME_DIR .. "src/devices/bus/isa/3xtwin.h",
+ MAME_DIR .. "src/devices/bus/isa/lrk330.cpp",
+ MAME_DIR .. "src/devices/bus/isa/lrk330.h",
}
end
@@ -1747,6 +1749,24 @@ end
---------------------------------------------------
--
+--@src/devices/bus/mc10/mc10_cart.h,BUSES["MC10"] = true
+---------------------------------------------------
+if (BUSES["MC10"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/mc10/mc10_cart.cpp",
+ MAME_DIR .. "src/devices/bus/mc10/mc10_cart.h",
+ MAME_DIR .. "src/devices/bus/mc10/mcx128.cpp",
+ MAME_DIR .. "src/devices/bus/mc10/mcx128.h",
+ MAME_DIR .. "src/devices/bus/mc10/pak.cpp",
+ MAME_DIR .. "src/devices/bus/mc10/pak.h",
+ MAME_DIR .. "src/devices/bus/mc10/ram.cpp",
+ MAME_DIR .. "src/devices/bus/mc10/ram.h",
+ }
+end
+
+
+---------------------------------------------------
+--
--@src/devices/bus/kc/kc.h,BUSES["KC"] = true
---------------------------------------------------
@@ -2462,6 +2482,8 @@ if (BUSES["A2BUS"]~=null) then
MAME_DIR .. "src/devices/bus/a2bus/suprterminal.h",
MAME_DIR .. "src/devices/bus/a2bus/timemasterho.cpp",
MAME_DIR .. "src/devices/bus/a2bus/timemasterho.h",
+ MAME_DIR .. "src/devices/bus/a2bus/titan3plus2.cpp",
+ MAME_DIR .. "src/devices/bus/a2bus/titan3plus2.h",
MAME_DIR .. "src/devices/bus/a2bus/transwarp.cpp",
MAME_DIR .. "src/devices/bus/a2bus/transwarp.h",
MAME_DIR .. "src/devices/bus/a2bus/uniprint.cpp",
@@ -3479,16 +3501,26 @@ if (BUSES["COCO"]~=null) then
MAME_DIR .. "src/devices/bus/coco/coco_sym12.h",
MAME_DIR .. "src/devices/bus/coco/coco_t4426.cpp",
MAME_DIR .. "src/devices/bus/coco/coco_t4426.h",
+ MAME_DIR .. "src/devices/bus/coco/coco_wpk.cpp",
+ MAME_DIR .. "src/devices/bus/coco/coco_wpk.h",
+ MAME_DIR .. "src/devices/bus/coco/coco_wpk2p.cpp",
+ MAME_DIR .. "src/devices/bus/coco/coco_wpk2p.h",
MAME_DIR .. "src/devices/bus/coco/cococart.cpp",
MAME_DIR .. "src/devices/bus/coco/cococart.h",
MAME_DIR .. "src/devices/bus/coco/dragon_amtor.cpp",
MAME_DIR .. "src/devices/bus/coco/dragon_amtor.h",
+ MAME_DIR .. "src/devices/bus/coco/dragon_claw.cpp",
+ MAME_DIR .. "src/devices/bus/coco/dragon_claw.h",
MAME_DIR .. "src/devices/bus/coco/dragon_fdc.cpp",
MAME_DIR .. "src/devices/bus/coco/dragon_fdc.h",
MAME_DIR .. "src/devices/bus/coco/dragon_jcbsnd.cpp",
MAME_DIR .. "src/devices/bus/coco/dragon_jcbsnd.h",
MAME_DIR .. "src/devices/bus/coco/dragon_jcbspch.cpp",
MAME_DIR .. "src/devices/bus/coco/dragon_jcbspch.h",
+ MAME_DIR .. "src/devices/bus/coco/dragon_msx2.cpp",
+ MAME_DIR .. "src/devices/bus/coco/dragon_msx2.h",
+ MAME_DIR .. "src/devices/bus/coco/dragon_serial.cpp",
+ MAME_DIR .. "src/devices/bus/coco/dragon_serial.h",
MAME_DIR .. "src/devices/bus/coco/dragon_sprites.cpp",
MAME_DIR .. "src/devices/bus/coco/dragon_sprites.h",
}
@@ -4465,8 +4497,6 @@ if (BUSES["SAITEK_OSA"]~=null) then
files {
MAME_DIR .. "src/devices/bus/saitek_osa/expansion.cpp",
MAME_DIR .. "src/devices/bus/saitek_osa/expansion.h",
- MAME_DIR .. "src/devices/bus/saitek_osa/modules.cpp",
- MAME_DIR .. "src/devices/bus/saitek_osa/modules.h",
MAME_DIR .. "src/devices/bus/saitek_osa/maestro.cpp",
MAME_DIR .. "src/devices/bus/saitek_osa/maestro.h",
MAME_DIR .. "src/devices/bus/saitek_osa/maestroa.cpp",
diff --git a/scripts/src/osd/windows.lua b/scripts/src/osd/windows.lua
index 963980b22ca..aa6b0241fb9 100644
--- a/scripts/src/osd/windows.lua
+++ b/scripts/src/osd/windows.lua
@@ -233,6 +233,7 @@ project ("ocore_" .. _OPTIONS["osd"])
MAME_DIR .. "src/osd/eigccppc.h",
MAME_DIR .. "src/osd/eigccx86.h",
MAME_DIR .. "src/osd/eivc.h",
+ MAME_DIR .. "src/osd/eivcarm.h",
MAME_DIR .. "src/osd/eivcx86.h",
MAME_DIR .. "src/osd/eminline.h",
MAME_DIR .. "src/osd/osdcomm.h",
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index 00ac2a26a6d..ad5d9ce3372 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -921,6 +921,7 @@ function linkProjects_mame_arcade(_target, _subtarget)
"midcoin",
"midw8080",
"midway",
+ "mr",
"namco",
"nasco",
"neogeo",
@@ -2913,6 +2914,15 @@ files {
MAME_DIR .. "src/mame/audio/sente6vb.h",
}
+createMAMEProjects(_target, _subtarget, "mr")
+files {
+ MAME_DIR .. "src/mame/drivers/dribling.cpp",
+ MAME_DIR .. "src/mame/includes/dribling.h",
+ MAME_DIR .. "src/mame/video/dribling.cpp",
+ MAME_DIR .. "src/mame/drivers/sshot.cpp",
+ MAME_DIR .. "src/mame/drivers/subhuntr.cpp",
+}
+
createMAMEProjects(_target, _subtarget, "namco")
files {
MAME_DIR .. "src/mame/drivers/20pacgal.cpp",
@@ -2943,6 +2953,7 @@ files {
MAME_DIR .. "src/mame/video/xevious.cpp",
MAME_DIR .. "src/mame/drivers/galaxian.cpp",
MAME_DIR .. "src/mame/includes/galaxian.h",
+ MAME_DIR .. "src/mame/drivers/galaxian_rockclim.cpp",
MAME_DIR .. "src/mame/audio/galaxian.cpp",
MAME_DIR .. "src/mame/audio/galaxian.h",
MAME_DIR .. "src/mame/video/galaxian.cpp",
@@ -3556,6 +3567,8 @@ files {
MAME_DIR .. "src/mame/machine/dc-ctrl.h",
MAME_DIR .. "src/mame/machine/jvs13551.cpp",
MAME_DIR .. "src/mame/machine/jvs13551.h",
+ MAME_DIR .. "src/mame/machine/segashiobd.cpp",
+ MAME_DIR .. "src/mame/machine/segashiobd.h",
MAME_DIR .. "src/mame/drivers/triforce.cpp",
MAME_DIR .. "src/mame/drivers/puckpkmn.cpp",
MAME_DIR .. "src/mame/drivers/segac2.cpp",
@@ -4561,8 +4574,6 @@ files {
MAME_DIR .. "src/mame/video/vs920a.cpp",
MAME_DIR .. "src/mame/video/vs920a.h",
MAME_DIR .. "src/mame/drivers/inufuku.cpp",
- MAME_DIR .. "src/mame/includes/inufuku.h",
- MAME_DIR .. "src/mame/video/inufuku.cpp",
MAME_DIR .. "src/mame/drivers/ojankohs.cpp",
MAME_DIR .. "src/mame/includes/ojankohs.h",
MAME_DIR .. "src/mame/video/ojankohs.cpp",
@@ -4884,9 +4895,6 @@ files {
MAME_DIR .. "src/mame/drivers/dorachan.cpp",
MAME_DIR .. "src/mame/drivers/drdmania.cpp",
MAME_DIR .. "src/mame/drivers/dreamwld.cpp",
- MAME_DIR .. "src/mame/drivers/dribling.cpp",
- MAME_DIR .. "src/mame/includes/dribling.h",
- MAME_DIR .. "src/mame/video/dribling.cpp",
MAME_DIR .. "src/mame/drivers/dwarfd.cpp",
MAME_DIR .. "src/mame/drivers/dynadice.cpp",
MAME_DIR .. "src/mame/drivers/dynamoah.cpp",
@@ -5114,7 +5122,6 @@ files {
MAME_DIR .. "src/mame/audio/special.h",
MAME_DIR .. "src/mame/drivers/spool99.cpp",
MAME_DIR .. "src/mame/drivers/sprcros2.cpp",
- MAME_DIR .. "src/mame/drivers/sshot.cpp",
MAME_DIR .. "src/mame/drivers/ssingles.cpp",
MAME_DIR .. "src/mame/drivers/sstrangr.cpp",
MAME_DIR .. "src/mame/drivers/startouch.cpp",
@@ -5122,7 +5129,6 @@ files {
MAME_DIR .. "src/mame/drivers/strkzn.cpp",
MAME_DIR .. "src/mame/drivers/stuntair.cpp",
MAME_DIR .. "src/mame/drivers/su2000.cpp",
- MAME_DIR .. "src/mame/drivers/subhuntr.cpp",
MAME_DIR .. "src/mame/drivers/summit.cpp",
MAME_DIR .. "src/mame/drivers/sumt8035.cpp",
MAME_DIR .. "src/mame/drivers/supercrd.cpp",
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index 1fe07c532ed..871ad4a66c7 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -831,25 +831,25 @@ BUSES["ACORN"] = true
BUSES["ADAM"] = true
BUSES["ADAMNET"] = true
BUSES["ADB"] = true
+BUSES["AMIGA_KEYBOARD"] = true
BUSES["APF"] = true
BUSES["APRICOT_EXPANSION"] = true
BUSES["APRICOT_KEYBOARD"] = true
BUSES["AQUARIUS"] = true
-BUSES["AMIGA_KEYBOARD"] = true
BUSES["ARCADIA"] = true
BUSES["ASTROCADE"] = true
BUSES["ATA"] = true
-BUSES["BBC_FDC"] = true
+BUSES["BBC_1MHZBUS"] = true
BUSES["BBC_ANALOGUE"] = true
BUSES["BBC_CART"] = true
BUSES["BBC_EXP"] = true
+BUSES["BBC_FDC"] = true
BUSES["BBC_INTERNAL"] = true
BUSES["BBC_JOYPORT"] = true
BUSES["BBC_MODEM"] = true
-BUSES["BBC_1MHZBUS"] = true
+BUSES["BBC_ROM"] = true
BUSES["BBC_TUBE"] = true
BUSES["BBC_USERPORT"] = true
-BUSES["BBC_ROM"] = true
BUSES["BML3"] = true
BUSES["BW2"] = true
BUSES["C64"] = true
@@ -861,8 +861,8 @@ BUSES["CGENIE_EXPANSION"] = true
BUSES["CGENIE_PARALLEL"] = true
BUSES["CHANNELF"] = true
BUSES["COCO"] = true
-BUSES["COLECO_CONTROLLER"] = true
BUSES["COLECO_CART"] = true
+BUSES["COLECO_CONTROLLER"] = true
BUSES["COMPIS_GRAPHICS"] = true
BUSES["COMPUCOLOR"] = true
BUSES["COMX35"] = true
@@ -871,10 +871,10 @@ BUSES["CRVISION"] = true
BUSES["DMV"] = true
BUSES["ECBBUS"] = true
BUSES["ECONET"] = true
-BUSES["EKARA"] = true
BUSES["EINSTEIN_USERPORT"] = true
-BUSES["ELECTRON"] = true
+BUSES["EKARA"] = true
BUSES["ELECTRON_CART"] = true
+BUSES["ELECTRON"] = true
BUSES["EP64"] = true
BUSES["EPSON_SIO"] = true
BUSES["FMT_SCSI"] = true
@@ -885,38 +885,39 @@ BUSES["GBA"] = true
BUSES["GENERIC"] = true
BUSES["GIO64"] = true
BUSES["HEXBUS"] = true
-BUSES["HPHIL"] = true
+BUSES["HP_IPC_IO"] = true
+BUSES["HP80_IO"] = true
+BUSES["HP9845_IO"] = true
BUSES["HPDIO"] = true
+BUSES["HPHIL"] = true
BUSES["IEEE488"] = true
BUSES["IMI7000"] = true
BUSES["INTELLEC4"] = true
-BUSES["INTERPRO_SR"] = true
BUSES["INTERPRO_KEYBOARD"] = true
BUSES["INTERPRO_MOUSE"] = true
-BUSES["INTV"] = true
+BUSES["INTERPRO_SR"] = true
BUSES["INTV_CTRL"] = true
+BUSES["INTV"] = true
BUSES["IQ151"] = true
BUSES["ISA"] = true
BUSES["ISBX"] = true
BUSES["JAKKS_GAMEKEY"] = true
-BUSES["HP80_IO"] = true
-BUSES["HP9845_IO"] = true
-BUSES["HP_IPC_IO"] = true
BUSES["KC"] = true
BUSES["LPCI"] = true
BUSES["M5"] = true
BUSES["MACKBD"] = true
BUSES["MACPDS"] = true
-BUSES["MIDI"] = true
+BUSES["MC10"] = true
BUSES["MEGADRIVE"] = true
+BUSES["MIDI"] = true
BUSES["MSX_SLOT"] = true
BUSES["MTX"] = true
BUSES["MULTIBUS"] = true
BUSES["NASBUS"] = true
-BUSES["NEOGEO"] = true
BUSES["NEOGEO_CTRL"] = true
-BUSES["NES"] = true
+BUSES["NEOGEO"] = true
BUSES["NES_CTRL"] = true
+BUSES["NES"] = true
BUSES["NEWBRAIN"] = true
BUSES["NSCSI"] = true
BUSES["NUBUS"] = true
@@ -924,18 +925,18 @@ BUSES["O2"] = true
BUSES["ORICEXT"] = true
BUSES["P2000"] = true
BUSES["PASOPIA"] = true
-BUSES["PC1512"] = true
-BUSES["PCE"] = true
BUSES["PC_JOY"] = true
BUSES["PC_KBD"] = true
+BUSES["PC1512"] = true
+BUSES["PCE"] = true
BUSES["PET"] = true
BUSES["PLUS4"] = true
BUSES["POFO"] = true
BUSES["PSI_KEYBOARD"] = true
BUSES["PSX_CONTROLLER"] = true
BUSES["PSX_PARALLEL"] = true
-BUSES["QL"] = true
BUSES["QBUS"] = true
+BUSES["QL"] = true
BUSES["RS232"] = true
BUSES["RTPC_KBD"] = true
BUSES["S100"] = true
@@ -954,8 +955,8 @@ BUSES["SG1000_EXP"] = true
BUSES["SGIKBD"] = true
BUSES["SMS_CTRL"] = true
BUSES["SMS_EXP"] = true
-BUSES["SNES"] = true
BUSES["SNES_CTRL"] = true
+BUSES["SNES"] = true
BUSES["SPC1000"] = true
BUSES["SPECTRUM"] = true
BUSES["SS50"] = true
@@ -966,11 +967,11 @@ BUSES["SVI_SLOT"] = true
BUSES["TANBUS"] = true
BUSES["TATUNG_PIPE"] = true
BUSES["THOMSON"] = true
-BUSES["TMC600"] = true
BUSES["TI8X"] = true
BUSES["TI99"] = true
BUSES["TI99X"] = true
BUSES["TIKI100"] = true
+BUSES["TMC600"] = true
BUSES["TVC"] = true
BUSES["UTS_KBD"] = true
BUSES["VBOY"] = true
@@ -1570,6 +1571,8 @@ files {
MAME_DIR .. "src/mame/machine/315-5881_crypt.h",
MAME_DIR .. "src/mame/machine/315-6154.cpp",
MAME_DIR .. "src/mame/machine/315-6154.h",
+ MAME_DIR .. "src/mame/machine/segashiobd.cpp",
+ MAME_DIR .. "src/mame/machine/segashiobd.h",
MAME_DIR .. "src/mame/video/powervr2.cpp",
MAME_DIR .. "src/mame/video/powervr2.h",
MAME_DIR .. "src/mame/drivers/neogeo.cpp",
@@ -1894,6 +1897,7 @@ files {
MAME_DIR .. "src/mame/audio/lynx.h",
MAME_DIR .. "src/mame/machine/lynx.cpp",
MAME_DIR .. "src/mame/drivers/pofo.cpp",
+ MAME_DIR .. "src/mame/machine/pofo_kbd.cpp",
MAME_DIR .. "src/mame/drivers/tvboy.cpp",
}
@@ -4404,6 +4408,8 @@ files {
createMESSProjects(_target, _subtarget, "yamaha")
files {
MAME_DIR .. "src/mame/machine/mulcd.cpp",
+ MAME_DIR .. "src/mame/drivers/yman1x.cpp",
+ MAME_DIR .. "src/mame/drivers/ymdx100.cpp",
MAME_DIR .. "src/mame/drivers/ymdx11.cpp",
MAME_DIR .. "src/mame/drivers/ymmu5.cpp",
MAME_DIR .. "src/mame/drivers/ymmu50.cpp",
@@ -4411,6 +4417,7 @@ files {
MAME_DIR .. "src/mame/drivers/ymmu100.cpp",
MAME_DIR .. "src/mame/drivers/ympsr60.cpp",
MAME_DIR .. "src/mame/drivers/ympsr340.cpp",
+ MAME_DIR .. "src/mame/drivers/ymsy35.cpp",
MAME_DIR .. "src/mame/drivers/ymtx81z.cpp",
MAME_DIR .. "src/mame/drivers/ymvl70.cpp",
MAME_DIR .. "src/mame/drivers/fb01.cpp",
@@ -4581,6 +4588,7 @@ files {
MAME_DIR .. "src/mame/drivers/learnwin.cpp",
MAME_DIR .. "src/mame/drivers/lft.cpp",
MAME_DIR .. "src/mame/drivers/lg-dvd.cpp",
+ MAME_DIR .. "src/mame/drivers/lk3000.cpp",
MAME_DIR .. "src/mame/drivers/lms46.cpp",
MAME_DIR .. "src/mame/drivers/lola8a.cpp",
MAME_DIR .. "src/mame/drivers/lilith.cpp",
diff --git a/src/devices/bus/a2bus/a2bus.h b/src/devices/bus/a2bus/a2bus.h
index 1c7d94bbcdc..5a10f06de39 100644
--- a/src/devices/bus/a2bus/a2bus.h
+++ b/src/devices/bus/a2bus/a2bus.h
@@ -149,6 +149,7 @@ public:
virtual void write_inh_rom(uint16_t offset, uint8_t data) { }
virtual uint16_t inh_start() { return INH_START_INVALID; }
virtual uint16_t inh_end() { return INH_END_INVALID; }
+ virtual bool inh_check(uint16_t offset, bool bIsWrite) { return false; }
virtual int inh_type() { return INH_NONE; }
device_a2bus_card_interface *next() const { return m_next; }
diff --git a/src/devices/bus/a2bus/a2mockingboard.cpp b/src/devices/bus/a2bus/a2mockingboard.cpp
index 6073e843371..380e9988a8b 100644
--- a/src/devices/bus/a2bus/a2mockingboard.cpp
+++ b/src/devices/bus/a2bus/a2mockingboard.cpp
@@ -41,11 +41,13 @@ DEFINE_DEVICE_TYPE(A2BUS_ECHOPLUS, a2bus_echoplus_device, "a2echop", "S
void a2bus_ayboard_device::add_common_devices(machine_config &config)
{
MOS6522(config, m_via1, 1022727);
+ m_via1->readpa_handler().set(FUNC(a2bus_ayboard_device::via1_in_a));
m_via1->writepa_handler().set(FUNC(a2bus_ayboard_device::via1_out_a));
m_via1->writepb_handler().set(FUNC(a2bus_ayboard_device::via1_out_b));
m_via1->irq_handler().set(FUNC(a2bus_ayboard_device::via1_irq_w));
MOS6522(config, m_via2, 1022727);
+ m_via2->readpa_handler().set(FUNC(a2bus_ayboard_device::via2_in_a));
m_via2->writepa_handler().set(FUNC(a2bus_ayboard_device::via2_out_a));
m_via2->writepb_handler().set(FUNC(a2bus_ayboard_device::via2_out_b));
m_via2->irq_handler().set(FUNC(a2bus_ayboard_device::via2_irq_w));
@@ -101,6 +103,9 @@ void a2bus_echoplus_device::device_add_mconfig(machine_config &config)
{
add_common_devices(config);
+ config.device_remove(VIA2_TAG);
+ m_via1->writepb_handler().set(FUNC(a2bus_ayboard_device::via1_out_b));
+
AY8913(config, m_ay2, 1022727);
m_ay2->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
@@ -165,7 +170,7 @@ void a2bus_ayboard_device::device_reset()
read_cnxx - called for reads from this card's cnxx space
-------------------------------------------------*/
-uint8_t a2bus_ayboard_device::read_cnxx(uint8_t offset)
+u8 a2bus_ayboard_device::read_cnxx(u8 offset)
{
if (offset <= 0x7f)
{
@@ -179,9 +184,15 @@ uint8_t a2bus_ayboard_device::read_cnxx(uint8_t offset)
return 0;
}
-uint8_t a2bus_phasor_device::read_cnxx(uint8_t offset)
+u8 a2bus_echoplus_device::read_cnxx(u8 offset)
{
- uint8_t ret = 0;
+ m_last_cnxx_addr = offset;
+ return m_via1->read(offset & 0xf);
+}
+
+u8 a2bus_phasor_device::read_cnxx(u8 offset)
+{
+ u8 ret = 0;
int via_sel;
if (m_native)
@@ -212,7 +223,7 @@ uint8_t a2bus_phasor_device::read_cnxx(uint8_t offset)
write_cnxx - called for writes to this card's c0nx space
-------------------------------------------------*/
-void a2bus_ayboard_device::write_cnxx(uint8_t offset, uint8_t data)
+void a2bus_ayboard_device::write_cnxx(u8 offset, u8 data)
{
// When the SSI-263 is emulated, Cn40 will write to both the VIA and
// the first SSI-263, and Cn20 will write to both the VIA and the
@@ -227,7 +238,13 @@ void a2bus_ayboard_device::write_cnxx(uint8_t offset, uint8_t data)
}
}
-void a2bus_phasor_device::write_cnxx(uint8_t offset, uint8_t data)
+void a2bus_echoplus_device::write_cnxx(u8 offset, u8 data)
+{
+ m_last_cnxx_addr = offset;
+ m_via1->write(offset & 0xf, data);
+}
+
+void a2bus_phasor_device::write_cnxx(u8 offset, u8 data)
{
if ((offset < 0x20) || (offset >= 0x80 && offset < 0xa0))
{
@@ -277,12 +294,12 @@ WRITE_LINE_MEMBER( a2bus_ayboard_device::via2_irq_w )
}
}
-void a2bus_ayboard_device::via1_out_a(uint8_t data)
+void a2bus_ayboard_device::via1_out_a(u8 data)
{
m_porta1 = data;
}
-void a2bus_ayboard_device::via1_out_b(uint8_t data)
+void a2bus_ayboard_device::via1_out_b(u8 data)
{
if (!BIT(data, 2))
{
@@ -310,7 +327,65 @@ void a2bus_ayboard_device::via1_out_b(uint8_t data)
}
}
-void a2bus_phasor_device::via1_out_b(uint8_t data)
+void a2bus_echoplus_device::via1_out_b(u8 data)
+{
+ if (!(m_last_cnxx_addr & 0x80))
+ {
+ if (!BIT(data, 2))
+ {
+ m_ay1->reset_w();
+ }
+ else
+ {
+ switch (data & 3)
+ {
+ case 0: // BDIR=0, BC1=0 (inactive)
+ break;
+
+ case 1: // BDIR=0, BC1=1 (read PSG)
+ m_porta1 = m_ay1->data_r();
+ break;
+
+ case 2: // BDIR=1, BC1=0 (write PSG)
+ m_ay1->data_w(m_porta1);
+ break;
+
+ case 3: // BDIR=1, BC1=1 (latch)
+ m_ay1->address_w(m_porta1);
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (!BIT(data, 2))
+ {
+ m_ay2->reset_w();
+ }
+ else
+ {
+ switch (data & 3)
+ {
+ case 0: // BDIR=0, BC1=0 (inactive)
+ break;
+
+ case 1: // BDIR=0, BC1=1 (read PSG)
+ m_porta1 = m_ay2->data_r();
+ break;
+
+ case 2: // BDIR=1, BC1=0 (write PSG)
+ m_ay2->data_w(m_porta1);
+ break;
+
+ case 3: // BDIR=1, BC1=1 (latch)
+ m_ay2->address_w(m_porta1);
+ break;
+ }
+ }
+ }
+}
+
+void a2bus_phasor_device::via1_out_b(u8 data)
{
if (!(data & 4))
{
@@ -359,12 +434,12 @@ void a2bus_phasor_device::via1_out_b(uint8_t data)
}
}
-void a2bus_ayboard_device::via2_out_a(uint8_t data)
+void a2bus_ayboard_device::via2_out_a(u8 data)
{
m_porta2 = data;
}
-void a2bus_ayboard_device::via2_out_b(uint8_t data)
+void a2bus_ayboard_device::via2_out_b(u8 data)
{
if (!BIT(data, 2))
{
@@ -392,7 +467,7 @@ void a2bus_ayboard_device::via2_out_b(uint8_t data)
}
}
-void a2bus_phasor_device::via2_out_b(uint8_t data)
+void a2bus_phasor_device::via2_out_b(u8 data)
{
if (!BIT(data, 2))
{
@@ -463,20 +538,20 @@ void a2bus_phasor_device::set_clocks()
}
}
-uint8_t a2bus_phasor_device::read_c0nx(uint8_t offset)
+u8 a2bus_phasor_device::read_c0nx(u8 offset)
{
m_native = BIT(offset, 0);
set_clocks();
return 0xff;
}
-void a2bus_phasor_device::write_c0nx(uint8_t offset, uint8_t data)
+void a2bus_phasor_device::write_c0nx(u8 offset, u8 data)
{
m_native = BIT(offset, 0);
set_clocks();
}
-uint8_t a2bus_echoplus_device::read_c0nx(uint8_t offset)
+u8 a2bus_echoplus_device::read_c0nx(u8 offset)
{
switch (offset)
{
@@ -487,7 +562,7 @@ uint8_t a2bus_echoplus_device::read_c0nx(uint8_t offset)
return 0;
}
-void a2bus_echoplus_device::write_c0nx(uint8_t offset, uint8_t data)
+void a2bus_echoplus_device::write_c0nx(u8 offset, u8 data)
{
switch (offset)
{
@@ -513,7 +588,7 @@ WRITE_LINE_MEMBER( a2bus_mockingboard_device::write_via1_cb2 )
m_last_cb2_state = state;
}
-void a2bus_mockingboard_device::via1_out_b(uint8_t data)
+void a2bus_mockingboard_device::via1_out_b(u8 data)
{
m_portb1 = data;
diff --git a/src/devices/bus/a2bus/a2mockingboard.h b/src/devices/bus/a2bus/a2mockingboard.h
index 44acff10006..539363c1f10 100644
--- a/src/devices/bus/a2bus/a2mockingboard.h
+++ b/src/devices/bus/a2bus/a2mockingboard.h
@@ -28,10 +28,12 @@ class a2bus_ayboard_device:
public:
DECLARE_WRITE_LINE_MEMBER( via1_irq_w );
DECLARE_WRITE_LINE_MEMBER( via2_irq_w );
- void via1_out_a(uint8_t data);
- virtual void via1_out_b(uint8_t data);
- void via2_out_a(uint8_t data);
- virtual void via2_out_b(uint8_t data);
+ u8 via1_in_a() { return m_porta1; }
+ u8 via2_in_a() { return m_porta2; }
+ void via1_out_a(u8 data);
+ virtual void via1_out_b(u8 data);
+ void via2_out_a(u8 data);
+ virtual void via2_out_b(u8 data);
protected:
// construction/destruction
@@ -42,20 +44,20 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
- virtual uint8_t read_c0nx(uint8_t offset) override { return 0xff; }
- virtual void write_c0nx(uint8_t offset, uint8_t data) override { }
- virtual uint8_t read_cnxx(uint8_t offset) override;
- virtual void write_cnxx(uint8_t offset, uint8_t data) override;
+ virtual u8 read_c0nx(u8 offset) override { return 0xff; }
+ virtual void write_c0nx(u8 offset, u8 data) override { }
+ virtual u8 read_cnxx(u8 offset) override;
+ virtual void write_cnxx(u8 offset, u8 data) override;
void add_common_devices(machine_config &config);
required_device<via6522_device> m_via1;
- required_device<via6522_device> m_via2;
+ optional_device<via6522_device> m_via2;
required_device<ay8913_device> m_ay1;
required_device<ay8913_device> m_ay2;
- uint8_t m_porta1;
- uint8_t m_porta2;
+ u8 m_porta1;
+ u8 m_porta2;
};
class a2bus_mockingboard_device : public a2bus_ayboard_device
@@ -63,7 +65,7 @@ class a2bus_mockingboard_device : public a2bus_ayboard_device
public:
a2bus_mockingboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- virtual void via1_out_b(uint8_t data) override;
+ virtual void via1_out_b(u8 data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_reset() override;
@@ -73,7 +75,7 @@ protected:
private:
DECLARE_WRITE_LINE_MEMBER(write_via1_cb2);
- uint8_t m_portb1;
+ u8 m_portb1;
int m_last_cb2_state;
};
@@ -82,16 +84,16 @@ class a2bus_phasor_device : public a2bus_ayboard_device
public:
a2bus_phasor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- void via1_out_b(uint8_t data) override;
- void via2_out_b(uint8_t data) override;
+ void via1_out_b(u8 data) override;
+ void via2_out_b(u8 data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
- virtual uint8_t read_c0nx(uint8_t offset) override;
- virtual void write_c0nx(uint8_t offset, uint8_t data) override;
- virtual uint8_t read_cnxx(uint8_t offset) override;
- virtual void write_cnxx(uint8_t offset, uint8_t data) override;
+ virtual u8 read_c0nx(u8 offset) override;
+ virtual void write_c0nx(u8 offset, u8 data) override;
+ virtual u8 read_cnxx(u8 offset) override;
+ virtual void write_cnxx(u8 offset, u8 data) override;
required_device<ay8913_device> m_ay3;
required_device<ay8913_device> m_ay4;
@@ -110,10 +112,17 @@ public:
protected:
virtual void device_add_mconfig(machine_config &config) override;
- virtual uint8_t read_c0nx(uint8_t offset) override;
- virtual void write_c0nx(uint8_t offset, uint8_t data) override;
+ virtual void via1_out_b(u8 data) override;
+
+ virtual u8 read_c0nx(u8 offset) override;
+ virtual void write_c0nx(u8 offset, u8 data) override;
+ virtual u8 read_cnxx(u8 offset) override;
+ virtual void write_cnxx(u8 offset, u8 data) override;
required_device<tms5220_device> m_tms;
+
+private:
+ u8 m_last_cnxx_addr;
};
// device type definition
diff --git a/src/devices/bus/a2bus/titan3plus2.cpp b/src/devices/bus/a2bus/titan3plus2.cpp
new file mode 100644
index 00000000000..e04dc03448a
--- /dev/null
+++ b/src/devices/bus/a2bus/titan3plus2.cpp
@@ -0,0 +1,334 @@
+// license:BSD-3-Clause
+// copyright-holders:R. Belmont
+/*********************************************************************
+
+ titan3plus3.cpp
+
+ Implemention of the Titan "/// Plus //"" card.
+ By R. Belmont, based on reverse-engineering by Rob Justice.
+
+ This extends the Apple ///'s II emulation to include a 128K
+ extended language card and Apple II compatible game I/O.
+
+ The card enables itself if the /// is at 1 MHz and accesses the
+ card's $CNxx ROM space. If the /// goes back to 2 MHz mode at
+ any time, the card disables itself.
+
+ Address ranges this messes with:
+ $C05X - passed through to ///, but also used for annunciators on A2 gameio
+ $C06X - /// doesn't see when card enabled, A2 paddles
+ $C07X - passed through to ///, but also used for A2 paddle reset
+ $C08X - unused by /// (language card control)
+ $D000-$FFFF: usual (for A2) language card space. Not so usual for ///.
+
+*********************************************************************/
+
+#include "emu.h"
+#include "titan3plus2.h"
+
+/***************************************************************************
+ PARAMETERS
+***************************************************************************/
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(A2BUS_TITAN3PLUS2, a2bus_titan3plus2_device, "titan3p2", "Titan /// Plus //")
+
+/***************************************************************************
+ FUNCTION PROTOTYPES
+***************************************************************************/
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+void a2bus_titan3plus2_device::device_add_mconfig(machine_config &config)
+{
+ APPLE2_GAMEIO(config, m_gameio, apple2_gameio_device::default_options, nullptr);
+}
+
+a2bus_titan3plus2_device::a2bus_titan3plus2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, type, tag, owner, clock), device_a2bus_card_interface(mconfig, *this),
+ m_gameio(*this, "gameio"),
+ m_inh_state(0), m_last_offset(0), m_dxxx_bank(0), m_main_bank(0), m_enabled(false)
+{
+}
+
+a2bus_titan3plus2_device::a2bus_titan3plus2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ a2bus_titan3plus2_device(mconfig, A2BUS_TITAN3PLUS2, tag, owner, clock)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void a2bus_titan3plus2_device::device_start()
+{
+ memset(m_ram, 0, 128*1024);
+
+ save_item(NAME(m_inh_state));
+ save_item(NAME(m_ram));
+ save_item(NAME(m_dxxx_bank));
+ save_item(NAME(m_main_bank));
+ save_item(NAME(m_last_offset));
+ save_item(NAME(m_enabled));
+
+ m_x_calibration = m_y_calibration = attotime::from_nsec(10800).as_double();
+}
+
+void a2bus_titan3plus2_device::device_reset()
+{
+ m_inh_state = INH_NONE;
+ m_dxxx_bank = 0;
+ m_main_bank = 0;
+ m_last_offset = -1;
+}
+
+void a2bus_titan3plus2_device::do_io(int offset)
+{
+ int old_inh_state = m_inh_state;
+
+ switch (offset)
+ {
+ case 0x1: case 0x3: case 0x9: case 0xb:
+ if (offset != m_last_offset)
+ {
+ m_last_offset = offset;
+ return;
+ }
+ break;
+ }
+ m_last_offset = offset;
+
+ if (offset & 4)
+ {
+ switch (offset)
+ {
+ case 0x4: m_main_bank = 0x00000; break;
+ case 0x5: m_main_bank = 0x04000; break;
+ case 0x6: m_main_bank = 0x08000; break;
+ case 0x7: m_main_bank = 0x0c000; break;
+ case 0xc: m_main_bank = 0x10000; break;
+ case 0xd: m_main_bank = 0x14000; break;
+ case 0xe: m_main_bank = 0x18000; break;
+ case 0xf: m_main_bank = 0x1c000; break;
+ }
+ }
+ else
+ {
+ m_inh_state = INH_NONE;
+ m_dxxx_bank = 0;
+
+ if (offset & 0x1)
+ {
+ m_inh_state |= INH_WRITE;
+ }
+
+ switch(offset & 0x03)
+ {
+ case 0x00:
+ case 0x03:
+ m_inh_state |= INH_READ;
+ break;
+ }
+
+ if (!(offset & 8))
+ {
+ m_dxxx_bank = 0x1000;
+ }
+ }
+
+ if (m_inh_state != old_inh_state)
+ {
+ recalc_slot_inh();
+ }
+
+ #if 0
+ printf("LC: (ofs %x) new state %c%c dxxx=%04x main=%05x\n",
+ offset,
+ (m_inh_state & INH_READ) ? 'R' : 'x',
+ (m_inh_state & INH_WRITE) ? 'W' : 'x',
+ m_dxxx_bank, m_main_bank);
+ #endif
+}
+
+
+/*-------------------------------------------------
+ read_c08x - called for reads from the LC switches
+-------------------------------------------------*/
+
+uint8_t a2bus_titan3plus2_device::read_c08x(uint8_t offset)
+{
+ if (!machine().side_effects_disabled())
+ {
+ do_io(offset & 0xf);
+ }
+ return 0xff;
+}
+
+
+/*-------------------------------------------------
+ write_c0nx - called for writes to the LC switches
+-------------------------------------------------*/
+
+void a2bus_titan3plus2_device::write_c08x(uint8_t offset, uint8_t data)
+{
+ do_io(offset & 0xf);
+}
+
+uint8_t a2bus_titan3plus2_device::read_inh_rom(uint16_t offset)
+{
+ if (offset < 0xd000)
+ {
+ if ((offset >= 0xc080) && (offset <= 0xc08f))
+ {
+ return read_c08x(offset & 0xf);
+ }
+
+ if ((offset >= 0xc060) && (offset <= 0xc06f))
+ {
+ switch (offset & 0x7)
+ {
+ case 1: // button 0
+ return (m_gameio->sw0_r() ? 0x80 : 0);
+
+ case 2: // button 1
+ return (m_gameio->sw1_r() ? 0x80 : 0);
+
+ case 3: // button 2
+ return (m_gameio->sw2_r() ? 0x80 : 0);
+
+ case 4: // joy 1 X axis
+ if (!m_gameio->is_device_connected())
+ return 0x80;
+ return ((machine().time().as_double() < m_joystick_x1_time) ? 0x80 : 0);
+
+ case 5: // joy 1 Y axis
+ if (!m_gameio->is_device_connected())
+ return 0x80;
+ return ((machine().time().as_double() < m_joystick_y1_time) ? 0x80 : 0);
+
+ case 6: // joy 2 X axis
+ if (!m_gameio->is_device_connected())
+ return 0x80;
+ return ((machine().time().as_double() < m_joystick_x2_time) ? 0x80 : 0);
+
+ case 7: // joy 2 Y axis
+ if (!m_gameio->is_device_connected())
+ return 0x80;
+ return ((machine().time().as_double() < m_joystick_y2_time) ? 0x80 : 0);
+ }
+ }
+ }
+ else
+ {
+ if (offset < 0xe000)
+ {
+ return m_ram[(offset & 0xfff) + m_dxxx_bank + m_main_bank];
+ }
+
+ return m_ram[(offset & 0x1fff) + 0x2000 + m_main_bank];
+ }
+
+ return 0xff;
+}
+
+void a2bus_titan3plus2_device::write_inh_rom(uint16_t offset, uint8_t data)
+{
+ if (offset < 0xd000)
+ {
+ if ((offset >= 0xc080) && (offset <= 0xc08f))
+ {
+ write_c08x(offset & 0xf, data);
+ return;
+ }
+ }
+ else
+ {
+ if (offset < 0xe000)
+ {
+ m_ram[(offset & 0xfff) + m_dxxx_bank + m_main_bank] = data;
+ return;
+ }
+
+ m_ram[(offset & 0x1fff) + 0x2000 + m_main_bank] = data;
+ }
+}
+
+u8 a2bus_titan3plus2_device::read_cnxx(u8 offset)
+{
+ m_enabled = true;
+ return 0xff;
+}
+
+// returns if we want to /INH a read or write to a specific address
+bool a2bus_titan3plus2_device::inh_check(u16 offset, bool bIsWrite)
+{
+ if (!m_enabled)
+ {
+ return false;
+ }
+
+ // handle LC
+ if (offset >= 0xd000)
+ {
+ if ((bIsWrite) && (m_inh_state & INH_WRITE))
+ {
+ return true;
+ }
+
+ if (!(bIsWrite) && (m_inh_state & INH_READ))
+ {
+ return true;
+ }
+ }
+
+ if ((offset >= 0xc080) && (offset <= 0xc08f))
+ {
+ return true;
+ }
+
+ if ((offset >= 0xc070) && (offset <= 0xc07f))
+ {
+ m_joystick_x1_time = machine().time().as_double() + m_x_calibration * m_gameio->pdl0_r();
+ m_joystick_y1_time = machine().time().as_double() + m_y_calibration * m_gameio->pdl1_r();
+ m_joystick_x2_time = machine().time().as_double() + m_x_calibration * m_gameio->pdl2_r();
+ m_joystick_y2_time = machine().time().as_double() + m_y_calibration * m_gameio->pdl3_r();
+
+ return false; // Apple /// should still handle this
+ }
+
+ if ((offset >= 0xc060) && (offset <= 0xc06f))
+ {
+ return true;
+ }
+
+ if ((offset >= 0xc058) && (offset <= 0xc05f))
+ {
+ switch (offset & 0xf)
+ {
+ case 8:
+ case 9:
+ m_gameio->an0_w(offset & 1);
+ break;
+ case 0xa:
+ case 0xb:
+ m_gameio->an1_w(offset & 1);
+ break;
+ case 0xc:
+ case 0xd:
+ m_gameio->an2_w(offset & 1);
+ break;
+ case 0xe:
+ case 0xf:
+ m_gameio->an3_w(offset & 1);
+ break;
+ }
+ return false; // Apple /// should still see this
+ }
+
+ return false;
+}
diff --git a/src/devices/bus/a2bus/titan3plus2.h b/src/devices/bus/a2bus/titan3plus2.h
new file mode 100644
index 00000000000..f162f115d8e
--- /dev/null
+++ b/src/devices/bus/a2bus/titan3plus2.h
@@ -0,0 +1,64 @@
+// license:BSD-3-Clause
+// copyright-holders:R. Belmont
+/*********************************************************************
+
+ titan3plus2.h
+
+ Implemention of the Titan /// Plus II card
+
+*********************************************************************/
+
+#ifndef MAME_BUS_A2BUS_TITAN3PLUS2_H
+#define MAME_BUS_A2BUS_TITAN3PLUS2_H
+
+#pragma once
+
+#include "a2bus.h"
+#include "bus/a2gameio/gameio.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class a2bus_titan3plus2_device:
+ public device_t,
+ public device_a2bus_card_interface
+{
+public:
+ // construction/destruction
+ a2bus_titan3plus2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ a2bus_titan3plus2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ // overrides of standard a2bus slot functions
+ virtual u8 read_inh_rom(u16 offset) override;
+ virtual void write_inh_rom(u16 offset, u8 data) override;
+ virtual bool inh_check(uint16_t offset, bool bIsWrite) override;
+
+private:
+ required_device<apple2_gameio_device> m_gameio;
+
+ u8 read_c08x(u8 offset);
+ void write_c08x(u8 offset, u8 data);
+ u8 read_cnxx(u8 offset) override;
+ void do_io(int offset);
+
+ int m_inh_state;
+ int m_last_offset;
+ int m_dxxx_bank;
+ int m_main_bank;
+ u8 m_ram[128*1024];
+ bool m_enabled;
+
+ double m_joystick_x1_time, m_joystick_y1_time, m_joystick_x2_time, m_joystick_y2_time, m_x_calibration, m_y_calibration;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(A2BUS_TITAN3PLUS2, a2bus_titan3plus2_device)
+
+#endif // MAME_BUS_A2BUS_TITAN3PLUS2_H
diff --git a/src/devices/bus/adam/exp.h b/src/devices/bus/adam/exp.h
index ee74bf0396a..d9e993c3a1f 100644
--- a/src/devices/bus/adam/exp.h
+++ b/src/devices/bus/adam/exp.h
@@ -15,14 +15,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define ADAM_LEFT_EXPANSION_SLOT_TAG "slot1"
-#define ADAM_CENTER_EXPANSION_SLOT_TAG "slot2"
-#define ADAM_RIGHT_EXPANSION_SLOT_TAG "slot3"
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/bw2/exp.h b/src/devices/bus/bw2/exp.h
index dfb5924351b..6c6acf11f9a 100644
--- a/src/devices/bus/bw2/exp.h
+++ b/src/devices/bus/bw2/exp.h
@@ -43,13 +43,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define BW2_EXPANSION_SLOT_TAG "exp"
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/cbm2/exp.cpp b/src/devices/bus/cbm2/exp.cpp
index a824ecd051e..cc0f3516bc5 100644
--- a/src/devices/bus/cbm2/exp.cpp
+++ b/src/devices/bus/cbm2/exp.cpp
@@ -76,15 +76,6 @@ cbm2_expansion_slot_device::cbm2_expansion_slot_device(const machine_config &mco
void cbm2_expansion_slot_device::device_start()
{
m_card = get_card_device();
-
- // inherit bus clock
- // FIXME: this should be unnecessary as slots pass DERIVED_CLOCK(1, 1) through by default
- if (clock() == 0)
- {
- cbm2_expansion_slot_device *root = machine().root_device().subdevice<cbm2_expansion_slot_device>(CBM2_EXPANSION_SLOT_TAG);
- assert(root);
- set_unscaled_clock(root->clock());
- }
}
diff --git a/src/devices/bus/cbm2/exp.h b/src/devices/bus/cbm2/exp.h
index 9781e4ac05a..b9f967137ca 100644
--- a/src/devices/bus/cbm2/exp.h
+++ b/src/devices/bus/cbm2/exp.h
@@ -34,13 +34,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define CBM2_EXPANSION_SLOT_TAG "exp"
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/coco/coco_multi.cpp b/src/devices/bus/coco/coco_multi.cpp
index 7006281286f..2061c905b3f 100644
--- a/src/devices/bus/coco/coco_multi.cpp
+++ b/src/devices/bus/coco/coco_multi.cpp
@@ -101,6 +101,8 @@ namespace
INPUT_CHANGED_MEMBER( switch_changed );
protected:
+ coco_multipak_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
@@ -119,10 +121,12 @@ namespace
virtual address_space &cartridge_space() override;
virtual ioport_constructor device_input_ports() const override;
- private:
// device references
required_device_array<cococart_slot_device, 4> m_slots;
+ void update_line(int slot_number, line ln);
+
+ private:
// internal state
u8 m_select;
u8 m_block;
@@ -138,24 +142,24 @@ namespace
void set_select(u8 new_select);
u8 ff7f_read();
void ff7f_write(u8 data);
- void update_line(int slot_number, line ln);
-
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot1_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot2_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot3_halt_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_cart_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_nmi_w);
- DECLARE_WRITE_LINE_MEMBER(multi_slot4_halt_w);
};
};
+// ======================> dragon_multipak_device
+
+class dragon_multipak_device : public coco_multipak_device
+{
+public:
+ // construction/destruction
+ dragon_multipak_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+};
+
+
/***************************************************************************
IMPLEMENTATION
***************************************************************************/
@@ -175,21 +179,54 @@ static void coco_cart_slot4(device_slot_interface &device)
void coco_multipak_device::device_add_mconfig(machine_config &config)
{
COCOCART_SLOT(config, m_slots[0], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
- m_slots[0]->cart_callback().set(FUNC(coco_multipak_device::multi_slot1_cart_w));
- m_slots[0]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot1_nmi_w));
- m_slots[0]->halt_callback().set(FUNC(coco_multipak_device::multi_slot1_halt_w));
+ m_slots[0]->cart_callback().set([this](int state) { update_line(1, line::CART); });
+ m_slots[0]->nmi_callback().set([this](int state) { update_line(1, line::NMI); });
+ m_slots[0]->halt_callback().set([this](int state) { update_line(1, line::HALT); });
COCOCART_SLOT(config, m_slots[1], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
- m_slots[1]->cart_callback().set(FUNC(coco_multipak_device::multi_slot2_cart_w));
- m_slots[1]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot2_nmi_w));
- m_slots[1]->halt_callback().set(FUNC(coco_multipak_device::multi_slot2_halt_w));
+ m_slots[1]->cart_callback().set([this](int state) { update_line(2, line::CART); });
+ m_slots[1]->nmi_callback().set([this](int state) { update_line(2, line::NMI); });
+ m_slots[1]->halt_callback().set([this](int state) { update_line(2, line::HALT); });
COCOCART_SLOT(config, m_slots[2], DERIVED_CLOCK(1, 1), coco_cart_slot1_3, nullptr);
- m_slots[2]->cart_callback().set(FUNC(coco_multipak_device::multi_slot3_cart_w));
- m_slots[2]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot3_nmi_w));
- m_slots[2]->halt_callback().set(FUNC(coco_multipak_device::multi_slot3_halt_w));
+ m_slots[2]->cart_callback().set([this](int state) { update_line(3, line::CART); });
+ m_slots[2]->nmi_callback().set([this](int state) { update_line(3, line::NMI); });
+ m_slots[2]->halt_callback().set([this](int state) { update_line(3, line::HALT); });
COCOCART_SLOT(config, m_slots[3], DERIVED_CLOCK(1, 1), coco_cart_slot4, "fdcv11");
- m_slots[3]->cart_callback().set(FUNC(coco_multipak_device::multi_slot4_cart_w));
- m_slots[3]->nmi_callback().set(FUNC(coco_multipak_device::multi_slot4_nmi_w));
- m_slots[3]->halt_callback().set(FUNC(coco_multipak_device::multi_slot4_halt_w));
+ m_slots[3]->cart_callback().set([this](int state) { update_line(4, line::CART); });
+ m_slots[3]->nmi_callback().set([this](int state) { update_line(4, line::NMI); });
+ m_slots[3]->halt_callback().set([this](int state) { update_line(4, line::HALT); });
+}
+
+
+static void dragon_cart_slot1_3(device_slot_interface &device)
+{
+ dragon_cart_add_basic_devices(device);
+}
+
+static void dragon_cart_slot4(device_slot_interface &device)
+{
+ dragon_cart_add_basic_devices(device);
+ dragon_cart_add_fdcs(device);
+}
+
+
+void dragon_multipak_device::device_add_mconfig(machine_config &config)
+{
+ COCOCART_SLOT(config, m_slots[0], DERIVED_CLOCK(1, 1), dragon_cart_slot1_3, nullptr);
+ m_slots[0]->cart_callback().set([this](int state) { update_line(1, line::CART); });
+ m_slots[0]->nmi_callback().set([this](int state) { update_line(1, line::NMI); });
+ m_slots[0]->halt_callback().set([this](int state) { update_line(1, line::HALT); });
+ COCOCART_SLOT(config, m_slots[1], DERIVED_CLOCK(1, 1), dragon_cart_slot1_3, nullptr);
+ m_slots[1]->cart_callback().set([this](int state) { update_line(2, line::CART); });
+ m_slots[1]->nmi_callback().set([this](int state) { update_line(2, line::NMI); });
+ m_slots[1]->halt_callback().set([this](int state) { update_line(2, line::HALT); });
+ COCOCART_SLOT(config, m_slots[2], DERIVED_CLOCK(1, 1), dragon_cart_slot1_3, nullptr);
+ m_slots[2]->cart_callback().set([this](int state) { update_line(3, line::CART); });
+ m_slots[2]->nmi_callback().set([this](int state) { update_line(3, line::NMI); });
+ m_slots[2]->halt_callback().set([this](int state) { update_line(3, line::HALT); });
+ COCOCART_SLOT(config, m_slots[3], DERIVED_CLOCK(1, 1), dragon_cart_slot4, "dragon_fdc");
+ m_slots[3]->cart_callback().set([this](int state) { update_line(4, line::CART); });
+ m_slots[3]->nmi_callback().set([this](int state) { update_line(4, line::NMI); });
+ m_slots[3]->halt_callback().set([this](int state) { update_line(4, line::HALT); });
}
INPUT_PORTS_START( coco_multipack )
@@ -206,6 +243,7 @@ INPUT_PORTS_END
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(COCO_MULTIPAK, device_cococart_interface, coco_multipak_device, "coco_multipack", "CoCo Multi-Pak Interface")
+DEFINE_DEVICE_TYPE_PRIVATE(DRAGON_MULTIPAK, device_cococart_interface, dragon_multipak_device, "dragon_multipack", "Dragon Multi-Pak Interface")
@@ -226,13 +264,22 @@ ioport_constructor coco_multipak_device::device_input_ports() const
// coco_multipak_device - constructor
//-------------------------------------------------
-coco_multipak_device::coco_multipak_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
- : device_t(mconfig, COCO_MULTIPAK, tag, owner, clock)
+coco_multipak_device::coco_multipak_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
, device_cococart_interface(mconfig, *this)
, m_slots(*this, "slot%u", 1), m_select(0), m_block(0)
{
}
+coco_multipak_device::coco_multipak_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : coco_multipak_device(mconfig, COCO_MULTIPAK, tag, owner, clock)
+{
+}
+
+dragon_multipak_device::dragon_multipak_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : coco_multipak_device(mconfig, DRAGON_MULTIPAK, tag, owner, clock)
+{
+}
//-------------------------------------------------
// device_start - device-specific startup
@@ -486,24 +533,6 @@ void coco_multipak_device::scs_write(offs_t offset, u8 data)
//-------------------------------------------------
-// multiX_slotX_[cart|nmi|halt] trampolines
-//-------------------------------------------------
-
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot1_cart_w) { update_line(1, line::CART); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot1_nmi_w) { update_line(1, line::NMI); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot1_halt_w) { update_line(1, line::HALT); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot2_cart_w) { update_line(2, line::CART); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot2_nmi_w) { update_line(2, line::NMI); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot2_halt_w) { update_line(2, line::HALT); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot3_cart_w) { update_line(3, line::CART); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot3_nmi_w) { update_line(3, line::NMI); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot3_halt_w) { update_line(3, line::HALT); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot4_cart_w) { update_line(4, line::CART); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot4_nmi_w) { update_line(4, line::NMI); }
-WRITE_LINE_MEMBER(coco_multipak_device::multi_slot4_halt_w) { update_line(4, line::HALT); }
-
-
-//-------------------------------------------------
// cartridge_space
//-------------------------------------------------
diff --git a/src/devices/bus/coco/coco_multi.h b/src/devices/bus/coco/coco_multi.h
index eb66aee9660..94e9c6bbc05 100644
--- a/src/devices/bus/coco/coco_multi.h
+++ b/src/devices/bus/coco/coco_multi.h
@@ -9,5 +9,6 @@
// device type definition
DECLARE_DEVICE_TYPE(COCO_MULTIPAK, device_cococart_interface)
+DECLARE_DEVICE_TYPE(DRAGON_MULTIPAK, device_cococart_interface)
#endif // MAME_BUS_COCO_COCO_MULTIPAK_H
diff --git a/src/devices/bus/coco/coco_wpk.cpp b/src/devices/bus/coco/coco_wpk.cpp
new file mode 100644
index 00000000000..8841c2960ea
--- /dev/null
+++ b/src/devices/bus/coco/coco_wpk.cpp
@@ -0,0 +1,201 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ PBJ Word-Pak/Word-Pak II - 80 Column Video Cartridge
+
+ TODO:
+ - the R6545 Transparent Mode used to update video RAM needs some attention.
+ - original PBJ WorkPak (not II or RS) had an optional Basic Driver ROM (undumped).
+ - does WordPak II use different character ROM?
+
+***************************************************************************/
+
+#include "emu.h"
+#include "coco_wpk.h"
+#include "render.h"
+#include "screen.h"
+
+
+//-------------------------------------------------
+// ROM( coco_wpk )
+//-------------------------------------------------
+
+ROM_START(coco_wpk)
+ ROM_REGION(0x0800, "chargen", 0)
+ ROM_LOAD("chr_gen_4.0.rom", 0x0000, 0x0800, CRC(6e9a671a) SHA1(0ff5fae512c7f1abe138504d51492404dd86be03)) // from PBJ WordPak RS
+ROM_END
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(COCO_WPK, coco_wpk_device, "coco_wpk", "CoCo WordPak")
+DEFINE_DEVICE_TYPE(COCO_WPK2, coco_wpk2_device, "coco_wpk2", "CoCo WordPak II")
+DEFINE_DEVICE_TYPE(COCO_WPKRS, coco_wpkrs_device, "coco_wpkrs", "CoCo WordPak RS")
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// coco_wpk_device - constructor
+//-------------------------------------------------
+
+coco_wpk_device::coco_wpk_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this )
+ , m_crtc(*this, "crtc")
+ , m_palette(*this, "palette")
+ , m_chargen(*this, "chargen")
+ , m_video_addr(0)
+ , m_video_data(0)
+{
+}
+
+coco_wpk_device::coco_wpk_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : coco_wpk_device(mconfig, COCO_WPK, tag, owner, clock)
+{
+}
+
+coco_wpk2_device::coco_wpk2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : coco_wpk_device(mconfig, COCO_WPK2, tag, owner, clock)
+{
+}
+
+coco_wpkrs_device::coco_wpkrs_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : coco_wpk_device(mconfig, COCO_WPKRS, tag, owner, clock)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void coco_wpk_device::device_start()
+{
+ m_video_ram = std::make_unique<u8[]>(0x800);
+
+ save_pointer(NAME(m_video_ram), 0x800);
+ save_item(NAME(m_video_addr));
+}
+
+void coco_wpk2_device::device_start()
+{
+ coco_wpk_device::device_start();
+}
+
+void coco_wpkrs_device::device_start()
+{
+ coco_wpk_device::device_start();
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void coco_wpk_device::device_reset()
+{
+ install_readwrite_handler(0xff98, 0xff98, read8smo_delegate(*m_crtc, FUNC(r6545_1_device::status_r)), write8smo_delegate(*m_crtc, FUNC(r6545_1_device::address_w)));
+ install_readwrite_handler(0xff99, 0xff99, read8smo_delegate(*m_crtc, FUNC(r6545_1_device::register_r)), write8smo_delegate(*m_crtc, FUNC(r6545_1_device::register_w)));
+ install_write_handler(0xff9b, 0xff9b, write8smo_delegate(*this, FUNC(coco_wpkrs_device::crtc_display_w)));
+}
+
+void coco_wpk2_device::device_reset()
+{
+ coco_wpk_device::device_reset();
+
+ install_write_handler(0xff9c, 0xff9c, write8smo_delegate(*this, FUNC(coco_wpk2_device::video_select_w)));
+
+ machine().render().first_target()->set_view(0);
+}
+
+void coco_wpkrs_device::device_reset()
+{
+ install_readwrite_handler(0xff76, 0xff76, read8smo_delegate(*m_crtc, FUNC(r6545_1_device::status_r)), write8smo_delegate(*m_crtc, FUNC(r6545_1_device::address_w)));
+ install_readwrite_handler(0xff77, 0xff77, read8smo_delegate(*m_crtc, FUNC(r6545_1_device::register_r)), write8smo_delegate(*m_crtc, FUNC(r6545_1_device::register_w)));
+ install_write_handler(0xff79, 0xff79, write8smo_delegate(*this, FUNC(coco_wpkrs_device::crtc_display_w)));
+}
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void coco_wpk_device::device_add_mconfig(machine_config &config)
+{
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_raw(14.318181_MHz_XTAL, 896, 0, 640, 290, 0, 240);
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
+
+ PALETTE(config, m_palette, palette_device::MONOCHROME);
+
+ R6545_1(config, m_crtc, 14.318181_MHz_XTAL / 8);
+ m_crtc->set_screen("screen");
+ m_crtc->set_show_border_area(false);
+ m_crtc->set_char_width(8);
+ m_crtc->set_on_update_addr_change_callback(FUNC(coco_wpkrs_device::crtc_addr));
+ m_crtc->set_update_row_callback(FUNC(coco_wpkrs_device::crtc_update_row));
+}
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *coco_wpk_device::device_rom_region() const
+{
+ return ROM_NAME( coco_wpk );
+}
+
+
+void coco_wpk_device::crtc_display_w(u8 data)
+{
+ //logerror("crtc_display_w: %02x\n", data);
+ m_video_ram[m_video_addr] = data;
+
+ m_crtc->register_r();
+}
+
+
+MC6845_ON_UPDATE_ADDR_CHANGED(coco_wpk_device::crtc_addr)
+{
+ //logerror("crtc_addr: %04x %d\n", address, strobe);
+ m_video_addr = address;
+}
+
+
+MC6845_UPDATE_ROW(coco_wpk_device::crtc_update_row)
+{
+ u32 *p = &bitmap.pix(y);
+
+ for (int column = 0; column < x_count; column++)
+ {
+ u8 code = m_video_ram[(ma + column) & 0x7ff];
+ u16 addr = (code << 4) | (ra & 0x0f);
+ u8 data = m_chargen->base()[addr & 0x7ff];
+
+ if (column == cursor_x)
+ {
+ data = 0xff;
+ }
+
+ for (int bit = 0; bit < 8; bit++)
+ {
+ *p++ = m_palette->pen(BIT(data, 0) && de);
+
+ data >>= 1;
+ }
+ }
+}
+
+
+void coco_wpk2_device::video_select_w(u8 data)
+{
+ // software video switch (Word-Pak II only)
+ machine().render().first_target()->set_view(BIT(data, 6));
+}
diff --git a/src/devices/bus/coco/coco_wpk.h b/src/devices/bus/coco/coco_wpk.h
new file mode 100644
index 00000000000..65534dd3709
--- /dev/null
+++ b/src/devices/bus/coco/coco_wpk.h
@@ -0,0 +1,94 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_COCO_COCO_WPK_H
+#define MAME_BUS_COCO_COCO_WPK_H
+
+#pragma once
+
+#include "cococart.h"
+#include "video/mc6845.h"
+#include "emupal.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> coco_wpk_device
+
+class coco_wpk_device :
+ public device_t,
+ public device_cococart_interface
+{
+public:
+ static constexpr feature_type imperfect_features() { return feature::GRAPHICS; }
+
+ // construction/destruction
+ coco_wpk_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ // construction/destruction
+ coco_wpk_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ required_device<r6545_1_device> m_crtc;
+ required_device<palette_device> m_palette;
+ required_memory_region m_chargen;
+
+ u16 m_video_addr;
+ u8 m_video_data;
+
+ std::unique_ptr<u8[]> m_video_ram;
+
+ void crtc_display_w(u8 data);
+ MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr);
+ MC6845_UPDATE_ROW(crtc_update_row);
+};
+
+
+// ======================> coco_wpk2_device
+
+class coco_wpk2_device : public coco_wpk_device
+{
+public:
+ // construction/destruction
+ coco_wpk2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ void video_select_w(u8 data);
+};
+
+
+// ======================> coco_wpkrs_device
+
+class coco_wpkrs_device : public coco_wpk_device
+{
+public:
+ // construction/destruction
+ coco_wpkrs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(COCO_WPK, coco_wpk_device)
+DECLARE_DEVICE_TYPE(COCO_WPK2, coco_wpk2_device)
+DECLARE_DEVICE_TYPE(COCO_WPKRS, coco_wpkrs_device)
+
+#endif // MAME_BUS_COCO_COCO_WPK_H
diff --git a/src/devices/bus/coco/coco_wpk2p.cpp b/src/devices/bus/coco/coco_wpk2p.cpp
new file mode 100644
index 00000000000..62fb2504bf7
--- /dev/null
+++ b/src/devices/bus/coco/coco_wpk2p.cpp
@@ -0,0 +1,56 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ CoCo WordPak 2+
+
+***************************************************************************/
+
+#include "emu.h"
+#include "coco_wpk2p.h"
+#include "screen.h"
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(COCO_WPK2P, coco_wpk2p_device, "coco_wpk2p", "CoCo WordPak 2+")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// coco_wpk2p_device - constructor
+//-------------------------------------------------
+
+coco_wpk2p_device::coco_wpk2p_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, COCO_WPK2P, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this )
+ , m_v9958(*this, "v9958")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void coco_wpk2p_device::device_start()
+{
+ install_readwrite_handler(0xff78, 0xff7b, read8sm_delegate(*m_v9958, FUNC(v9958_device::read)), write8sm_delegate(*m_v9958, FUNC(v9958_device::write)));
+}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void coco_wpk2p_device::device_add_mconfig(machine_config &config)
+{
+ /* video hardware */
+ V9958(config, m_v9958, 21.477272_MHz_XTAL);
+ m_v9958->set_screen_ntsc("screen");
+ m_v9958->set_vram_size(0x20000);
+ m_v9958->int_cb().set([this](int state) { set_line_value(line::NMI, state); });
+ SCREEN(config, "screen", SCREEN_TYPE_RASTER);
+}
diff --git a/src/devices/bus/coco/coco_wpk2p.h b/src/devices/bus/coco/coco_wpk2p.h
new file mode 100644
index 00000000000..f6c3debc766
--- /dev/null
+++ b/src/devices/bus/coco/coco_wpk2p.h
@@ -0,0 +1,41 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_COCO_COCO_WPK2P_H
+#define MAME_BUS_COCO_COCO_WPK2P_H
+
+#pragma once
+
+#include "cococart.h"
+#include "video/v9938.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> coco_wpk2p_device
+
+class coco_wpk2p_device :
+ public device_t,
+ public device_cococart_interface
+{
+public:
+ // construction/destruction
+ coco_wpk2p_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+
+private:
+ required_device<v9958_device> m_v9958;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(COCO_WPK2P, coco_wpk2p_device)
+
+#endif // MAME_BUS_COCO_COCO_WPK2P_H
diff --git a/src/devices/bus/coco/cococart.cpp b/src/devices/bus/coco/cococart.cpp
index 8f733cd6c6a..28e97457114 100644
--- a/src/devices/bus/coco/cococart.cpp
+++ b/src/devices/bus/coco/cococart.cpp
@@ -54,6 +54,17 @@
#include "coco_ssc.h"
#include "coco_stecomp.h"
#include "coco_sym12.h"
+#include "coco_wpk.h"
+#include "coco_wpk2p.h"
+
+#include "dragon_amtor.h"
+#include "dragon_claw.h"
+#include "dragon_fdc.h"
+#include "dragon_jcbsnd.h"
+#include "dragon_jcbspch.h"
+#include "dragon_msx2.h"
+#include "dragon_serial.h"
+#include "dragon_sprites.h"
/***************************************************************************
@@ -702,12 +713,17 @@ void coco_cart_add_basic_devices(device_slot_interface &device)
device.option_add("gmc", COCO_PAK_GMC);
device.option_add("max", COCO_PAK_MAX);
device.option_add("midi", COCO_MIDI);
+ device.option_add("msx2", DRAGON_MSX2);
device.option_add("orch90", COCO_ORCH90);
device.option_add("ram", COCO_PAK_RAM);
device.option_add("rs232", COCO_RS232);
device.option_add("ssc", COCO_SSC);
device.option_add("stecomp", COCO_STEREO_COMPOSER);
device.option_add("sym12", COCO_SYM12);
+ device.option_add("wpk", COCO_WPK);
+ device.option_add("wpk2", COCO_WPK2);
+ device.option_add("wpkrs", COCO_WPKRS);
+ device.option_add("wpk2p", COCO_WPK2P);
}
@@ -737,3 +753,52 @@ void coco_cart_add_multi_pak(device_slot_interface &device)
// and the Multi-Pak itself is optional because they cannot be daisy chained
device.option_add("multi", COCO_MULTIPAK);
}
+
+
+//-------------------------------------------------
+// dragon_cart_add_basic_devices
+//-------------------------------------------------
+
+void dragon_cart_add_basic_devices(device_slot_interface &device)
+{
+ device.option_add_internal("amtor", DRAGON_AMTOR);
+ device.option_add("ccpsg", COCO_PSG);
+ device.option_add("claw", DRAGON_CLAW);
+ device.option_add("gmc", COCO_PAK_GMC);
+ device.option_add("jcbsnd", DRAGON_JCBSND);
+ device.option_add("jcbspch", DRAGON_JCBSPCH);
+ device.option_add("max", COCO_PAK_MAX);
+ device.option_add("midi", DRAGON_MIDI);
+ device.option_add("msx2", DRAGON_MSX2);
+ device.option_add("orch90", COCO_ORCH90);
+ device.option_add("pak", COCO_PAK);
+ device.option_add("serial", DRAGON_SERIAL);
+ device.option_add("ram", COCO_PAK_RAM);
+ device.option_add("sprites", DRAGON_SPRITES);
+ device.option_add("ssc", COCO_SSC);
+ device.option_add("stecomp", COCO_STEREO_COMPOSER);
+ device.option_add("sym12", COCO_SYM12);
+ device.option_add("wpk2p", COCO_WPK2P);
+}
+
+
+//-------------------------------------------------
+// dragon_cart_add_fdcs
+//-------------------------------------------------
+
+void dragon_cart_add_fdcs(device_slot_interface &device)
+{
+ device.option_add("dragon_fdc", DRAGON_FDC);
+ device.option_add("premier_fdc", PREMIER_FDC);
+ device.option_add("sdtandy_fdc", SDTANDY_FDC);
+}
+
+
+//-------------------------------------------------
+// dragon_cart_add_multi_pak
+//-------------------------------------------------
+
+void dragon_cart_add_multi_pak(device_slot_interface &device)
+{
+ device.option_add("multi", DRAGON_MULTIPAK);
+}
diff --git a/src/devices/bus/coco/cococart.h b/src/devices/bus/coco/cococart.h
index 78176588969..d2e33085956 100644
--- a/src/devices/bus/coco/cococart.h
+++ b/src/devices/bus/coco/cococart.h
@@ -231,5 +231,8 @@ private:
void coco_cart_add_basic_devices(device_slot_interface &device);
void coco_cart_add_fdcs(device_slot_interface &device);
void coco_cart_add_multi_pak(device_slot_interface &device);
+void dragon_cart_add_basic_devices(device_slot_interface &device);
+void dragon_cart_add_fdcs(device_slot_interface &device);
+void dragon_cart_add_multi_pak(device_slot_interface &device);
#endif // MAME_BUS_COCO_COCOCART_H
diff --git a/src/devices/bus/coco/dragon_claw.cpp b/src/devices/bus/coco/dragon_claw.cpp
new file mode 100644
index 00000000000..a4c00b0f71a
--- /dev/null
+++ b/src/devices/bus/coco/dragon_claw.cpp
@@ -0,0 +1,212 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ The Dragon's Claw from Lucidata
+
+ http://archive.worldofdragon.org/index.php?title=The_Dragon%27s_Claw
+
+ The Dragon's Claw is an extension cartridge for the Dragon by Lucidata.
+ It features two parallel I/O ports. One with the BBC User Port pinout,
+ and the second with a Centronics Printer Port pinout.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dragon_claw.h"
+#include "bus/bbc/userport/userport.h"
+#include "bus/centronics/ctronics.h"
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE_PRIVATE(DRAGON_CLAW, device_cococart_interface, dragon_claw_device, "dragon_claw", "The Dragon's Claw")
+
+//-------------------------------------------------
+// INPUT_PORTS( claw )
+//-------------------------------------------------
+
+INPUT_PORTS_START(claw)
+ PORT_START("LINKS")
+ PORT_CONFNAME(0x03, 0x00, "L1 Address Selection")
+ PORT_CONFSETTING(0x00, "$FF80")
+ PORT_CONFSETTING(0x01, "$FF90")
+ PORT_CONFSETTING(0x02, "$FFA0")
+ PORT_CONFSETTING(0x03, "$FFB0")
+ PORT_CONFNAME(0x04, 0x00, "L2 Interrupt Line")
+ PORT_CONFSETTING(0x00, "NMI")
+ PORT_CONFSETTING(0x04, "CART")
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor dragon_claw_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(claw);
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dragon_claw_device - constructor
+//-------------------------------------------------
+
+dragon_claw_device::dragon_claw_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, DRAGON_CLAW, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this )
+ , m_via(*this, "via")
+ , m_slot(*this, "slot")
+ , m_links(*this, "LINKS")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dragon_claw_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void dragon_claw_device::device_reset()
+{
+ uint8_t addr = (m_links->read() & 0x03) << 8;
+
+ install_readwrite_handler(0xff80 | addr, 0xff8f | addr, read8sm_delegate(*m_via, FUNC(via6522_device::read)), write8sm_delegate(*m_via, FUNC(via6522_device::write)));
+}
+
+static void dragon_cart(device_slot_interface &device)
+{
+ dragon_cart_add_basic_devices(device);
+ dragon_cart_add_fdcs(device);
+}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void dragon_claw_device::device_add_mconfig(machine_config &config)
+{
+ MOS6522(config, m_via, DERIVED_CLOCK(1, 1));
+ m_via->writepa_handler().set("cent_data_out", FUNC(output_latch_device::write));
+ m_via->readpb_handler().set("userport", FUNC(bbc_userport_slot_device::pb_r));
+ m_via->writepb_handler().set("userport", FUNC(bbc_userport_slot_device::pb_w));
+ m_via->ca2_handler().set("centronics", FUNC(centronics_device::write_strobe));
+ m_via->cb1_handler().set("userport", FUNC(bbc_userport_slot_device::write_cb1));
+ m_via->cb2_handler().set("userport", FUNC(bbc_userport_slot_device::write_cb2));
+ m_via->irq_handler().set(FUNC(dragon_claw_device::irq_w)); // link L2 selects either NMI or CART line
+
+ bbc_userport_slot_device &userport(BBC_USERPORT_SLOT(config, "userport", bbc_userport_devices, nullptr));
+ userport.cb1_handler().set(m_via, FUNC(via6522_device::write_cb1));
+ userport.cb2_handler().set(m_via, FUNC(via6522_device::write_cb2));
+
+ centronics_device &centronics(CENTRONICS(config, "centronics", centronics_devices, nullptr));
+ centronics.ack_handler().set(m_via, FUNC(via6522_device::write_ca1));
+ output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
+ centronics.set_output_latch(latch);
+
+ COCOCART_SLOT(config, m_slot, DERIVED_CLOCK(1, 1), dragon_cart, nullptr);
+ m_slot->cart_callback().set([this](int state) { set_line_value(line::CART, state); });
+ m_slot->nmi_callback().set([this](int state) { set_line_value(line::NMI, state); });
+ m_slot->halt_callback().set([this](int state) { set_line_value(line::HALT, state); });
+}
+
+WRITE_LINE_MEMBER(dragon_claw_device::irq_w)
+{
+ if (m_links->read() & 0x04)
+ set_line_value(line::CART, state);
+ else
+ set_line_value(line::NMI, state);
+}
+
+
+//-------------------------------------------------
+// set_sound_enable
+//-------------------------------------------------
+
+void dragon_claw_device::set_sound_enable(bool sound_enable)
+{
+ m_slot->set_line_value(line::SOUND_ENABLE, sound_enable ? line_value::ASSERT : line_value::CLEAR);
+}
+
+
+//-------------------------------------------------
+// get_cart_base
+//-------------------------------------------------
+
+u8 *dragon_claw_device::get_cart_base()
+{
+ return m_slot->get_cart_base();
+}
+
+
+//-------------------------------------------------
+// get_cart_size
+//-------------------------------------------------
+
+u32 dragon_claw_device::get_cart_size()
+{
+ return m_slot->get_cart_size();
+}
+
+
+//-------------------------------------------------
+// cts_read
+//-------------------------------------------------
+
+u8 dragon_claw_device::cts_read(offs_t offset)
+{
+ return m_slot->cts_read(offset);
+}
+
+
+//-------------------------------------------------
+// cts_write
+//-------------------------------------------------
+
+void dragon_claw_device::cts_write(offs_t offset, u8 data)
+{
+ m_slot->cts_write(offset, data);
+}
+
+
+//-------------------------------------------------
+// scs_read
+//-------------------------------------------------
+
+u8 dragon_claw_device::scs_read(offs_t offset)
+{
+ return m_slot->scs_read(offset);
+}
+
+
+//-------------------------------------------------
+// scs_write
+//-------------------------------------------------
+
+void dragon_claw_device::scs_write(offs_t offset, u8 data)
+{
+ m_slot->scs_write(offset, data);
+}
+
+
+//-------------------------------------------------
+// cartridge_space
+//-------------------------------------------------
+
+address_space &dragon_claw_device::cartridge_space()
+{
+ return device_cococart_interface::cartridge_space();
+}
diff --git a/src/devices/bus/coco/dragon_claw.h b/src/devices/bus/coco/dragon_claw.h
new file mode 100644
index 00000000000..9743b5b0b3c
--- /dev/null
+++ b/src/devices/bus/coco/dragon_claw.h
@@ -0,0 +1,59 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_COCO_DRAGON_CLAW_H
+#define MAME_BUS_COCO_DRAGON_CLAW_H
+
+#pragma once
+
+#include "cococart.h"
+#include "machine/6522via.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> dragon_claw_device
+
+class dragon_claw_device :
+ public device_t,
+ public device_cococart_interface,
+ public device_cococart_host_interface
+{
+public:
+ // construction/destruction
+ dragon_claw_device(const machine_config& mconfig, const char* tag, device_t* owner, u32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config& config) override;
+ virtual ioport_constructor device_input_ports() const override;
+
+ virtual u8 cts_read(offs_t offset) override;
+ virtual void cts_write(offs_t offset, u8 data) override;
+ virtual u8 scs_read(offs_t offset) override;
+ virtual void scs_write(offs_t offset, u8 data) override;
+ virtual void set_sound_enable(bool sound_enable) override;
+
+ virtual u8 *get_cart_base() override;
+ virtual u32 get_cart_size() override;
+
+ virtual address_space &cartridge_space() override;
+
+private:
+ DECLARE_WRITE_LINE_MEMBER(irq_w);
+
+ required_device<via6522_device> m_via;
+ required_device<cococart_slot_device> m_slot;
+ required_ioport m_links;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(DRAGON_CLAW, device_cococart_interface)
+
+#endif // MAME_BUS_COCO_DRAGON_CLAW_H
diff --git a/src/devices/bus/coco/dragon_msx2.cpp b/src/devices/bus/coco/dragon_msx2.cpp
new file mode 100644
index 00000000000..9460b6955f3
--- /dev/null
+++ b/src/devices/bus/coco/dragon_msx2.cpp
@@ -0,0 +1,191 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+// thanks-to:John Whitworth
+/***************************************************************************
+
+ Dragon MSX 2+ by DragonPlus Electronics
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dragon_msx2.h"
+#include "render.h"
+#include "screen.h"
+#include "speaker.h"
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(DRAGON_MSX2, dragon_msx2_device, "dragon_msx2", "Dragon MSX 2+")
+
+
+//-------------------------------------------------
+// INPUT_PORTS( dragon_msx2 )
+//-------------------------------------------------
+
+INPUT_PORTS_START( dragon_msx2 )
+ PORT_START("CONFIG")
+ PORT_CONFNAME(0x01, 0x00, "J1 PWR")
+ PORT_CONFSETTING(0x00, "Cart Port")
+ PORT_CONFSETTING(0x01, "External")
+ PORT_CONFNAME(0x02, 0x00, "J2 CART")
+ PORT_CONFSETTING(0x00, "N/C")
+ PORT_CONFSETTING(0x02, "HSYNC")
+ PORT_CONFNAME(0x04, 0x00, "J3 Port Select")
+ PORT_CONFSETTING(0x00, "FF7* (Native)")
+ PORT_CONFSETTING(0x04, "FF5* (MPI)")
+ PORT_CONFNAME(0x08, 0x08, "J4 Default Video")
+ PORT_CONFSETTING(0x00, "V9958")
+ PORT_CONFSETTING(0x08, "MC6847")
+ PORT_CONFNAME(0x10, 0x10, "J5 Video Lock")
+ PORT_CONFSETTING(0x00, "Locked")
+ PORT_CONFSETTING(0x10, "Unlocked")
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor dragon_msx2_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( dragon_msx2 );
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dragon_msx2_device - constructor
+//-------------------------------------------------
+
+dragon_msx2_device::dragon_msx2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, DRAGON_MSX2, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this )
+ , m_ym2413(*this, "ym2413")
+ , m_v9958(*this, "v9958")
+ , m_ym2149(*this, "ym2149")
+ , m_config(*this, "CONFIG")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dragon_msx2_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void dragon_msx2_device::device_reset()
+{
+ // pin 26 is tied to GND
+ m_ym2149->set_pin26_low_w();
+
+ // Native mode
+ if (!BIT(m_config->read(), 2))
+ {
+ install_readwrite_handler(0xff76, 0xff77, read8sm_delegate(*m_ym2413, FUNC(ym2413_device::read)), write8sm_delegate(*m_ym2413, FUNC(ym2413_device::write)));
+ install_readwrite_handler(0xff78, 0xff7b, read8sm_delegate(*m_v9958, FUNC(v9958_device::read)), write8sm_delegate(*m_v9958, FUNC(v9958_device::write)));
+ install_write_handler(0xff7c, 0xff7c, write8smo_delegate(*m_ym2149, FUNC(ym2149_device::address_w)));
+ install_readwrite_handler(0xff7d, 0xff7d, read8smo_delegate(*m_ym2149, FUNC(ym2149_device::data_r)), write8smo_delegate(*m_ym2149, FUNC(ym2149_device::data_w)));
+ install_write_handler(0xff7e, 0xff7e, write8smo_delegate(*this, FUNC(dragon_msx2_device::video_select_w)));
+ }
+
+ // Default Video
+ machine().render().first_target()->set_view(!BIT(m_config->read(), 3));
+}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void dragon_msx2_device::device_add_mconfig(machine_config &config)
+{
+ V9958(config, m_v9958, 21.477272_MHz_XTAL);
+ m_v9958->set_screen_pal("screen");
+ m_v9958->set_vram_size(0x20000);
+ m_v9958->int_cb().set([this](int state) { set_line_value(line::NMI, state); });
+ SCREEN(config, "screen", SCREEN_TYPE_RASTER);
+
+ SPEAKER(config, "speaker").front_center();
+ YM2413(config, m_ym2413, 21.477272_MHz_XTAL / 6).add_route(ALL_OUTPUTS, "speaker", 1.0);
+ YM2149(config, m_ym2149, 21.477272_MHz_XTAL / 6).add_route(ALL_OUTPUTS, "speaker", 1.0);
+}
+
+
+//-------------------------------------------------
+// scs_read
+//-------------------------------------------------
+
+u8 dragon_msx2_device::scs_read(offs_t offset)
+{
+ u8 data = 0x00;
+
+ if (BIT(m_config->read(), 2)) // MPI mode
+ {
+ switch (offset)
+ {
+ case 0x16: case 0x17:
+ data = m_ym2413->read(offset & 1);
+ break;
+
+ case 0x18: case 0x19: case 0x1a: case 0x1b:
+ data = m_v9958->read(offset & 3);
+ break;
+
+ case 0x1d:
+ data = m_ym2149->data_r();
+ break;
+ }
+ }
+
+ return data;
+}
+
+//-------------------------------------------------
+// scs_write
+//-------------------------------------------------
+
+void dragon_msx2_device::scs_write(offs_t offset, u8 data)
+{
+ if (BIT(m_config->read(), 2)) // MPI mode
+ {
+ switch (offset)
+ {
+ case 0x16: case 0x17:
+ m_ym2413->write(offset & 1, data);
+ break;
+
+ case 0x18: case 0x19: case 0x1a: case 0x1b:
+ m_v9958->write(offset & 3, data);
+ break;
+
+ case 0x1c:
+ m_ym2149->address_w(data);
+ break;
+
+ case 0x1d:
+ m_ym2149->data_w(data);
+ break;
+
+ case 0x1e:
+ video_select_w(data);
+ break;
+ }
+ }
+}
+
+void dragon_msx2_device::video_select_w(u8 data)
+{
+ if (BIT(m_config->read(), 4)) // Unlocked
+ machine().render().first_target()->set_view(!BIT(data, 0));
+}
diff --git a/src/devices/bus/coco/dragon_msx2.h b/src/devices/bus/coco/dragon_msx2.h
new file mode 100644
index 00000000000..3eb1fcaa64b
--- /dev/null
+++ b/src/devices/bus/coco/dragon_msx2.h
@@ -0,0 +1,53 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_COCO_DRAGON_MSX2_H
+#define MAME_BUS_COCO_DRAGON_MSX2_H
+
+#pragma once
+
+#include "cococart.h"
+#include "sound/ay8910.h"
+#include "sound/ymopl.h"
+#include "video/v9938.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> dragon_msx2_device
+
+class dragon_msx2_device :
+ public device_t,
+ public device_cococart_interface
+{
+public:
+ // construction/destruction
+ dragon_msx2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual ioport_constructor device_input_ports() const override;
+
+ virtual u8 scs_read(offs_t offset) override;
+ virtual void scs_write(offs_t offset, u8 data) override;
+
+private:
+ required_device<ym2413_device> m_ym2413;
+ required_device<v9958_device> m_v9958;
+ required_device<ym2149_device> m_ym2149;
+ required_ioport m_config;
+
+ void video_select_w(u8 data);
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(DRAGON_MSX2, dragon_msx2_device)
+
+#endif // MAME_BUS_COCO_DRAGON_MSX2_H
diff --git a/src/devices/bus/coco/dragon_serial.cpp b/src/devices/bus/coco/dragon_serial.cpp
new file mode 100644
index 00000000000..8967bed816c
--- /dev/null
+++ b/src/devices/bus/coco/dragon_serial.cpp
@@ -0,0 +1,154 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/***************************************************************************
+
+ Peaksoft Prestel Module
+
+ Also known as the New Era Interface from Peaksoft/Harry Whitehouse, which
+ includes a through port for DOS cartridges.
+
+ TODO:
+ - RX/TX rate set by dipswitches (default 100001/001001?), for use with a 1200/75 modem.
+ - add throughport, not known how CTS/SCS lines are switched between slots.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "dragon_serial.h"
+#include "machine/clock.h"
+#include "bus/rs232/rs232.h"
+
+
+//-------------------------------------------------
+// ROM( dragon_serial )
+//-------------------------------------------------
+
+ROM_START(dragon_serial)
+ ROM_REGION(0x2000, "eprom", 0)
+ ROM_LOAD("comron_peaksoft.rom", 0x0000, 0x2000, CRC(9d18cf46) SHA1(14124dfb4bd78d1907e80d779cd7f3bae30564c9))
+ROM_END
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(DRAGON_SERIAL, dragon_serial_device, "dragon_serial", "Dragon Peaksoft Prestel Module")
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dragon_serial_device - constructor
+//-------------------------------------------------
+
+dragon_serial_device::dragon_serial_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, DRAGON_SERIAL, tag, owner, clock)
+ , device_cococart_interface(mconfig, *this )
+ , m_eprom(*this, "eprom")
+ , m_acia(*this, "acia")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dragon_serial_device::device_start()
+{
+ set_line_value(line::CART, line_value::Q);
+}
+
+//-------------------------------------------------
+// dragon_serial_device::get_cart_base
+//-------------------------------------------------
+
+u8 *dragon_serial_device::get_cart_base()
+{
+ return m_eprom->base();
+}
+
+//-------------------------------------------------
+// dragon_serial_device::get_cart_memregion
+//-------------------------------------------------
+
+memory_region *dragon_serial_device::get_cart_memregion()
+{
+ return m_eprom;
+}
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void dragon_serial_device::device_add_mconfig(machine_config &config)
+{
+ ACIA6850(config, m_acia, 0);
+ m_acia->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_acia->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ m_acia->irq_handler().set([this](int state) { set_line_value(line::NMI, state); });
+
+ clock_device &acia_clock(CLOCK(config, "acia_clock", 2.4576_MHz_XTAL));
+ acia_clock.signal_handler().set(FUNC(dragon_serial_device::write_acia_clock));
+
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "null_modem"));
+ rs232.rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
+ rs232.cts_handler().set(m_acia, FUNC(acia6850_device::write_cts));
+ rs232.dcd_handler().set(m_acia, FUNC(acia6850_device::write_dcd));
+}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *dragon_serial_device::device_rom_region() const
+{
+ return ROM_NAME( dragon_serial );
+}
+
+//-------------------------------------------------
+// cts_read
+//-------------------------------------------------
+
+u8 dragon_serial_device::cts_read(offs_t offset)
+{
+ return m_eprom->base()[offset & 0x1fff];
+}
+
+//-------------------------------------------------
+// scs_read
+//-------------------------------------------------
+
+u8 dragon_serial_device::scs_read(offs_t offset)
+{
+ uint8_t result = 0x00;
+
+ switch (offset)
+ {
+ case 0x14: case 0x15:
+ result = m_acia->read(offset & 1);
+ break;
+ }
+ return result;
+}
+
+//-------------------------------------------------
+// scs_write
+//-------------------------------------------------
+
+void dragon_serial_device::scs_write(offs_t offset, u8 data)
+{
+ switch (offset)
+ {
+ case 0x14: case 0x15:
+ m_acia->write(offset & 1, data);
+ break;
+ }
+}
+
+WRITE_LINE_MEMBER(dragon_serial_device::write_acia_clock)
+{
+ m_acia->write_txc(state);
+ m_acia->write_rxc(state);
+}
diff --git a/src/devices/bus/coco/dragon_serial.h b/src/devices/bus/coco/dragon_serial.h
new file mode 100644
index 00000000000..7f33a61de67
--- /dev/null
+++ b/src/devices/bus/coco/dragon_serial.h
@@ -0,0 +1,52 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_COCO_DRAGON_SERIAL_H
+#define MAME_BUS_COCO_DRAGON_SERIAL_H
+
+#pragma once
+
+#include "cococart.h"
+#include "machine/6850acia.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> dragon_serial_device
+
+class dragon_serial_device :
+ public device_t,
+ public device_cococart_interface
+{
+public:
+ // construction/destruction
+ dragon_serial_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type imperfect_features() { return feature::COMMS; }
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual u8 *get_cart_base() override;
+ virtual memory_region *get_cart_memregion() override;
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+ virtual u8 cts_read(offs_t offset) override;
+ virtual u8 scs_read(offs_t offset) override;
+ virtual void scs_write(offs_t offset, u8 data) override;
+
+private:
+ DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
+
+ required_memory_region m_eprom;
+ required_device<acia6850_device> m_acia;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(DRAGON_SERIAL, dragon_serial_device)
+
+#endif // MAME_BUS_COCO_DRAGON_SERIAL_H
diff --git a/src/devices/bus/generic/slot.h b/src/devices/bus/generic/slot.h
index 883e521c908..ee96382f435 100644
--- a/src/devices/bus/generic/slot.h
+++ b/src/devices/bus/generic/slot.h
@@ -30,7 +30,7 @@ public:
assert(!(decode_limit & base));
for (offs_t remain = length, start = 0U; remain && (decode_limit >= start); )
{
- unsigned const msb(31 - count_leading_zeros(u32(remain)));
+ unsigned const msb(31 - count_leading_zeros_32(u32(remain)));
offs_t const chunk(offs_t(1) << msb);
offs_t range((chunk - 1) & decode_limit);
offs_t mirror(decode_limit & ~decode_mask & ~range);
diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp
index ce23388ea1d..cc00f2233e0 100644
--- a/src/devices/bus/isa/isa_cards.cpp
+++ b/src/devices/bus/isa/isa_cards.cpp
@@ -50,6 +50,7 @@
#include "tekram_dc820.h"
#include "asc88.h"
#include "omti8621.h"
+#include "lrk330.h"
// sound
#include "adlib.h"
@@ -230,4 +231,5 @@ void pc_isa16_cards(device_slot_interface &device)
device.option_add("dc820", TEKRAM_DC820); // actually an EISA card
device.option_add("dc820b", TEKRAM_DC820B); // actually an EISA card
device.option_add("omti8621", ISA16_OMTI8621);
+ device.option_add("lrk331", LRK331);
}
diff --git a/src/devices/bus/isa/lrk330.cpp b/src/devices/bus/isa/lrk330.cpp
new file mode 100644
index 00000000000..18cd1bfe29e
--- /dev/null
+++ b/src/devices/bus/isa/lrk330.cpp
@@ -0,0 +1,130 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/***************************************************************************
+
+ Skeleton driver for ESDI controllers by Lark Associates Inc.
+
+ Major ICs excluding EPROMs, in order of decreasing pin count:
+ * Silicon Logic LD1111 HDC (QFP128, U1)
+ * Xilinx XC2018-70PC68C Logic Cell Array (PLCC84, U11)
+ * National DP8473V Floppy Disk Controller PLUS-2 (PLCC52, U4)
+ * Signetics SCN8032HCCA44 8-Bit Microcontroller (PLCC44, U20)
+ * Sharp LH52258D-45 32Kx8 CMOS Static RAM (SDIP28, U2 & U3)
+ * Vitelic V61C16F70L 2Kx8 CMOS Static RAM (SSOP24, U19)
+
+ The purpose of the small SRAM is not clear. Perhaps it can be banked
+ into the lower part of the 8032 program space after loading patches
+ for the EPROM microcode, since that uses the upper mirror addresses
+ almost exclusively.
+
+ A transfer rate of up to 24 megabits per second was advertised.
+
+ LRK-330 is presumably identical to LRK-331, only without the FDC or
+ 34-pin floppy drive cable connector installed.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "lrk330.h"
+
+#include "imagedev/floppy.h"
+#include "machine/upd765.h"
+
+// device type definition
+DEFINE_DEVICE_TYPE(LRK331, lrk331_device, "lrk331", "Lark Associates LRK-331 ESDI Controller")
+
+
+lrk331_device::lrk331_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, LRK331, tag, owner, clock)
+ , device_isa16_card_interface(mconfig, *this)
+ , m_mcu(*this, "mcu")
+ , m_bios(*this, "bios")
+ , m_config(*this, "CONFIG")
+{
+}
+
+void lrk331_device::device_start()
+{
+}
+
+void lrk331_device::device_reset()
+{
+}
+
+void lrk331_device::ucode_map(address_map &map)
+{
+ map(0x0000, 0x3fff).mirror(0x4000).rom().region("ucode", 0);
+}
+
+void lrk331_device::ext_map(address_map &map)
+{
+ map.global_mask(0xff);
+ map(0x0b, 0x0b).nopw();
+}
+
+static INPUT_PORTS_START(lrk331)
+ PORT_START("CONFIG")
+ PORT_DIPNAME(0x001, 0x001, "Drive Addresses") PORT_DIPLOCATION("W1:1")
+ PORT_DIPSETTING(0x001, "Primary (1F0h-1F7h, 3F0h-3F7h)")
+ PORT_DIPSETTING(0x000, "Secondary (170h-177h, 370h-377h)")
+ PORT_DIPNAME(0x002, 0x002, "Floppy Drive Speed") PORT_DIPLOCATION("W2:2")
+ PORT_DIPSETTING(0x002, "Single")
+ PORT_DIPSETTING(0x000, "Dual")
+ PORT_DIPNAME(0x004, 0x004, "Interrupt Delay") PORT_DIPLOCATION("W3:1")
+ PORT_DIPSETTING(0x004, "Disabled")
+ PORT_DIPSETTING(0x000, "Enabled")
+ PORT_DIPNAME(0x008, 0x008, "Factory Configured - Do Not Alter") PORT_DIPLOCATION("W4:1")
+ PORT_DIPSETTING(0x008, DEF_STR(Off))
+ PORT_DIPSETTING(0x000, DEF_STR(On))
+ PORT_DIPNAME(0x0f0, 0x0e0, "BIOS Address") PORT_DIPLOCATION("W5-W8:1,2,3,4")
+ PORT_DIPSETTING(0x0f0, "Disabled")
+ PORT_DIPSETTING(0x0e0, "C800h")
+ PORT_DIPSETTING(0x0d0, "CC00h")
+ PORT_DIPSETTING(0x0b0, "D000h")
+ PORT_DIPSETTING(0x070, "D400h")
+ PORT_DIPNAME(0x300, 0x200, "IRQ Select") PORT_DIPLOCATION("W9-W10:1,2")
+ PORT_DIPSETTING(0x200, "IRQ 14")
+ PORT_DIPSETTING(0x100, "IRQ 15")
+ PORT_DIPNAME(0x400, 0x000, "Floppy Drive Interface") PORT_DIPLOCATION("W11:1")
+ PORT_DIPSETTING(0x400, "Disabled")
+ PORT_DIPSETTING(0x000, "Enabled")
+INPUT_PORTS_END
+
+ioport_constructor lrk331_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(lrk331);
+}
+
+static void pc_hd_floppies(device_slot_interface &device)
+{
+ device.option_add("525hd", FLOPPY_525_HD);
+ device.option_add("35hd", FLOPPY_35_HD);
+ device.option_add("525dd", FLOPPY_525_DD);
+ device.option_add("35dd", FLOPPY_35_DD);
+}
+
+void lrk331_device::device_add_mconfig(machine_config &config)
+{
+ I8032(config, m_mcu, 24_MHz_XTAL / 2);
+ m_mcu->set_addrmap(AS_PROGRAM, &lrk331_device::ucode_map);
+ m_mcu->set_addrmap(AS_IO, &lrk331_device::ext_map);
+
+ //LD1111(config, m_hdc, 24_MHz_XTAL);
+
+ DP8473(config, "fdc", 24_MHz_XTAL);
+ FLOPPY_CONNECTOR(config, "fdc:0", pc_hd_floppies, "525hd", floppy_image_device::default_pc_floppy_formats);
+ FLOPPY_CONNECTOR(config, "fdc:1", pc_hd_floppies, nullptr, floppy_image_device::default_pc_floppy_formats);
+}
+
+ROM_START(lrk331)
+ ROM_REGION(0x2000, "bios", 0)
+ ROM_LOAD("63308-10.bin", 0x0000, 0x2000, CRC(f16d4f25) SHA1(437664ff9723c8036a40f1e504899b7cacd21ad0))
+
+ ROM_REGION(0x4000, "ucode", 0)
+ ROM_LOAD("63307-08.bin", 0x0000, 0x4000, CRC(6d2e8b26) SHA1(1a33462a29b306b01960cf2ac0b209b2adf58dbe))
+ROM_END
+
+const tiny_rom_entry *lrk331_device::device_rom_region() const
+{
+ return ROM_NAME(lrk331);
+}
diff --git a/src/devices/bus/isa/lrk330.h b/src/devices/bus/isa/lrk330.h
new file mode 100644
index 00000000000..b75a50fa7a3
--- /dev/null
+++ b/src/devices/bus/isa/lrk330.h
@@ -0,0 +1,38 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+
+#ifndef MAME_BUS_ISA_LRK330_H
+#define MAME_BUS_ISA_LRK330_H
+
+#pragma once
+
+#include "isa.h"
+#include "cpu/mcs51/mcs51.h"
+
+class lrk331_device : public device_t, public device_isa16_card_interface
+{
+public:
+ lrk331_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ virtual ioport_constructor device_input_ports() const override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+private:
+ void ucode_map(address_map &map);
+ void ext_map(address_map &map);
+
+ required_device<mcs51_cpu_device> m_mcu;
+ required_region_ptr<u8> m_bios;
+ required_ioport m_config;
+};
+
+DECLARE_DEVICE_TYPE(LRK331, lrk331_device)
+
+#endif // MAME_BUS_ISA_LRK330_H
diff --git a/src/devices/bus/mc10/mc10_cart.cpp b/src/devices/bus/mc10/mc10_cart.cpp
new file mode 100644
index 00000000000..f7858a087bc
--- /dev/null
+++ b/src/devices/bus/mc10/mc10_cart.cpp
@@ -0,0 +1,230 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+/*********************************************************************
+
+ mc10cart.cpp
+
+ MC-10 / Alice expansion slot - typically used for the 16K external
+ RAM expansion.
+
+ MC-10 and Alice pinout listing
+ --- ------- --- -------
+ 1 GND 18 A6
+ 2 GND 19 A7
+ 3 D0 20 A8
+ 4 D1 21 A9
+ 5 D2 22 A10
+ 6 D3 23 A11
+ 7 D4 24 A12
+ 8 D5 25 A13
+ 9 D6 26 A14
+ 10 D7 27 A15
+ 11 R/!W 28 E
+ 12 A0 29 SEL
+ 13 A1 30 RESET
+ 14 A2 31 !NMI
+ 15 A3 32 +5V
+ 16 A3 33 GND
+ 17 A5 34 GND
+
+ SEL is an input to the MC-10 that allows the cartridge to remove
+ the internal chips from the bus.
+
+*********************************************************************/
+
+#include "emu.h"
+#include "mc10_cart.h"
+
+#include "mcx128.h"
+#include "pak.h"
+#include "ram.h"
+
+//#define VERBOSE 1
+#include "logmacro.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(MC10CART_SLOT, mc10cart_slot_device, "mc10cart_slot", "MC-10 Cartridge Slot")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// mc10cart_slot_device - constructor
+//-------------------------------------------------
+mc10cart_slot_device::mc10cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
+ device_t(mconfig, MC10CART_SLOT, tag, owner, clock),
+ device_single_card_slot_interface<device_mc10cart_interface>(mconfig, *this),
+ device_image_interface(mconfig, *this),
+ m_nmi_callback(*this),
+ m_cart(nullptr),
+ m_memspace(*this, finder_base::DUMMY_TAG, -1)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void mc10cart_slot_device::device_start()
+{
+ m_nmi_callback.resolve_safe();
+ m_cart = get_card_device();
+}
+
+//-------------------------------------------------
+// set_nmi_line
+//-------------------------------------------------
+
+void mc10cart_slot_device::set_nmi_line(int state)
+{
+ m_nmi_callback(state);
+}
+
+//-------------------------------------------------
+// call_load
+//-------------------------------------------------
+
+image_init_result mc10cart_slot_device::call_load()
+{
+ if (!m_cart)
+ return image_init_result::PASS;
+
+ memory_region *romregion(loaded_through_softlist() ? memregion("rom") : nullptr);
+ if (loaded_through_softlist() && !romregion)
+ {
+ seterror(IMAGE_ERROR_INVALIDIMAGE, "Software list item has no 'rom' data area");
+ return image_init_result::FAIL;
+ }
+
+ u32 const len(loaded_through_softlist() ? romregion->bytes() : length());
+ if (len > m_cart->max_rom_length())
+ {
+ seterror(IMAGE_ERROR_UNSUPPORTED, "Unsupported cartridge size");
+ return image_init_result::FAIL;
+ }
+
+ if (!loaded_through_softlist())
+ {
+ LOG("Allocating %u byte cartridge ROM region\n", len);
+ romregion = machine().memory().region_alloc(subtag("rom").c_str(), len, 1, ENDIANNESS_BIG);
+ u32 const cnt(fread(romregion->base(), len));
+ if (cnt != len)
+ {
+ seterror(IMAGE_ERROR_UNSPECIFIED, "Error reading cartridge file");
+ return image_init_result::FAIL;
+ }
+ }
+
+ return m_cart->load();
+}
+
+//-------------------------------------------------
+// get_default_card_software
+//-------------------------------------------------
+
+std::string mc10cart_slot_device::get_default_card_software(get_default_card_software_hook &hook) const
+{
+ return software_get_default_slot("pak");
+}
+
+//**************************************************************************
+// DEVICE MC-10 CART INTERFACE - Implemented by devices that plug into
+// MC-10 cartridge slots
+//**************************************************************************
+
+template class device_finder<device_mc10cart_interface, false>;
+template class device_finder<device_mc10cart_interface, true>;
+
+//-------------------------------------------------
+// device_mc10cart_interface - constructor
+//-------------------------------------------------
+
+device_mc10cart_interface::device_mc10cart_interface(const machine_config &mconfig, device_t &device)
+ : device_interface(device, "mc10cart")
+ , m_owning_slot(nullptr)
+{
+}
+
+//-------------------------------------------------
+// ~device_mc10cart_interface - destructor
+//-------------------------------------------------
+
+device_mc10cart_interface::~device_mc10cart_interface()
+{
+}
+
+//-------------------------------------------------
+// interface_config_complete
+//-------------------------------------------------
+
+void device_mc10cart_interface::interface_config_complete()
+{
+ m_owning_slot = dynamic_cast<mc10cart_slot_device *>(device().owner());
+}
+
+//-------------------------------------------------
+// interface_pre_start
+//-------------------------------------------------
+
+void device_mc10cart_interface::interface_pre_start()
+{
+ if (!m_owning_slot)
+ throw emu_fatalerror("Expected device().owner() to be of type mc10cart_slot_device");
+}
+
+/*-------------------------------------------------
+ max_rom_length
+-------------------------------------------------*/
+
+int device_mc10cart_interface::max_rom_length() const
+{
+ return 0;
+}
+
+/*-------------------------------------------------
+ load
+-------------------------------------------------*/
+
+image_init_result device_mc10cart_interface::load()
+{
+ return image_init_result::FAIL;
+}
+
+//-------------------------------------------------
+// mc10_cart_add_basic_devices
+//-------------------------------------------------
+
+void mc10_cart_add_basic_devices(device_slot_interface &device)
+{
+ // basic devices
+ device.option_add("mcx128", MC10_PAK_MCX128);
+ device.option_add("pak", MC10_PAK);
+ device.option_add("ram", MC10_PAK_RAM);
+}
+
+//-------------------------------------------------
+// alice_cart_add_basic_devices
+//-------------------------------------------------
+
+void alice_cart_add_basic_devices(device_slot_interface &device)
+{
+ // basic devices
+ device.option_add("alice128", ALICE_PAK_MCX128);
+ device.option_add("pak", MC10_PAK);
+ device.option_add("ram", MC10_PAK_RAM);
+}
+
+//-------------------------------------------------
+// alice32_cart_add_basic_devices
+//-------------------------------------------------
+
+void alice32_cart_add_basic_devices(device_slot_interface &device)
+{
+ // basic devices
+ device.option_add("pak", MC10_PAK);
+ device.option_add("ram", MC10_PAK_RAM);
+}
diff --git a/src/devices/bus/mc10/mc10_cart.h b/src/devices/bus/mc10/mc10_cart.h
new file mode 100644
index 00000000000..eba93284325
--- /dev/null
+++ b/src/devices/bus/mc10/mc10_cart.h
@@ -0,0 +1,118 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+/*********************************************************************
+
+ mc10_cart.h
+
+ MC-10 / Alice cartridge management
+
+*********************************************************************/
+
+#ifndef MAME_BUS_MC10_MC10CART_H
+#define MAME_BUS_MC10_MC10CART_H
+
+#pragma once
+
+#include "softlist_dev.h"
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+
+// ======================> mc10cart_slot_device
+class device_mc10cart_interface;
+
+class mc10cart_slot_device final : public device_t,
+ public device_single_card_slot_interface<device_mc10cart_interface>,
+ public device_image_interface
+{
+public:
+
+ // construction/destruction
+ template <typename T>
+ mc10cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock, T &&opts, const char *dflt)
+ : mc10cart_slot_device(mconfig, tag, owner, clock)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ mc10cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ // inline configuration
+ template <typename T> void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward<T>(tag), spacenum); }
+ auto nmi_callback() { return m_nmi_callback.bind(); }
+
+ // address map manipulations
+ address_space &memspace() const { return *m_memspace; };
+
+ // device-level overrides
+ virtual void device_start() override;
+
+ // image-level overrides
+ virtual image_init_result call_load() override;
+ virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
+
+ virtual iodevice_t image_type() const noexcept override { return IO_CARTSLOT; }
+
+ virtual bool is_readable() const noexcept override { return true; }
+ virtual bool is_writeable() const noexcept override { return false; }
+ virtual bool is_creatable() const noexcept override { return false; }
+ virtual bool must_be_loaded() const noexcept override { return false; }
+ virtual bool is_reset_on_load() const noexcept override { return true; }
+ virtual const char *image_interface() const noexcept override { return "mc10_cart"; }
+ virtual const char *file_extensions() const noexcept override { return "mcc,rom"; }
+
+ // manipulation of nmi line
+ void set_nmi_line(int state);
+ devcb_write_line m_nmi_callback;
+
+ // slot interface overrides
+ virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
+
+private:
+
+ // cartridge
+ device_mc10cart_interface *m_cart;
+
+protected:
+ required_address_space m_memspace;
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(MC10CART_SLOT, mc10cart_slot_device)
+
+class device_mc10cart_interface : public device_interface
+{
+public:
+ // construction/destruction
+ virtual ~device_mc10cart_interface();
+
+ virtual int max_rom_length() const;
+ virtual image_init_result load();
+
+protected:
+ void raise_cart_nmi() { m_owning_slot->set_nmi_line(ASSERT_LINE); }
+ void lower_cart_nmi() { m_owning_slot->set_nmi_line(CLEAR_LINE); }
+
+ virtual void interface_config_complete() override;
+ virtual void interface_pre_start() override;
+
+ device_mc10cart_interface(const machine_config &mconfig, device_t &device);
+
+ // accessors for containers
+ mc10cart_slot_device &owning_slot() const { assert(m_owning_slot); return *m_owning_slot; }
+
+private:
+ mc10cart_slot_device * m_owning_slot;
+};
+
+// methods for configuring MC-10 slot devices
+void mc10_cart_add_basic_devices(device_slot_interface &device);
+void alice_cart_add_basic_devices(device_slot_interface &device);
+void alice32_cart_add_basic_devices(device_slot_interface &device);
+
+#endif // MAME_BUS_MC10_MC10CART_H
diff --git a/src/devices/bus/mc10/mcx128.cpp b/src/devices/bus/mc10/mcx128.cpp
new file mode 100644
index 00000000000..32c9239afb5
--- /dev/null
+++ b/src/devices/bus/mc10/mcx128.cpp
@@ -0,0 +1,371 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+/***************************************************************************
+
+ mcx128.cpp
+
+ Code for emulating Darren Atkinson's MCX-128 cartridge
+
+ Features:
+ 128K of RAM expansion
+ 16K of ROM expansion
+
+ New MC-10 memory map defined by this cartridge:
+
+ 0000 - 0003 6803 Ports
+ 0004 - 0007 Expansion RAM
+ 0008 - 000E 6803 Status / Control
+ 000F Expansion RAM
+ 0010 - 0013 6803 UART
+ 0014 6803 RAM Control Reg
+ 0015 - 001F Unused
+ 0020 - 007F Expansion RAM
+ 0080 - 00FF On-chip CPU RAM / Expansion RAM
+ 0100 - 3FFF Expansion RAM
+ 4000 - 5FFF Built-In RAM / Expansion RAM
+ 6000 - BEFF Expansion RAM
+ BF00 RAM Bank Control Reg
+ BF01 ROM Map Control Reg
+ BF80 - BFFF Keyboard / VDG / Sound
+ C000 - DFFF EPROM or Expansion RAM
+ E000 - FFFF Built-in ROM, EPROM or Expansion RAM
+
+ Deficiency:
+
+ * Writing to 6803 chip RAM at $80 to $ff should be mirrored
+ to external RAM.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "mcx128.h"
+
+//#define VERBOSE (LOG_GENERAL)
+#include "logmacro.h"
+
+
+ROM_START(mc10_mcx128)
+ ROM_REGION(0x4000, "eprom", ROMREGION_ERASE00)
+ ROM_LOAD("mcx128bas.rom", 0x0000, 0x4000, CRC(11202e4b) SHA1(36c30d0f198a1bffee88ef29d92f2401447a91f4))
+ROM_END
+
+ROM_START(alice_mcx128)
+ ROM_REGION(0x4000, "eprom", ROMREGION_ERASE00)
+ ROM_LOAD("alice128bas.rom", 0x0000, 0x4000, CRC(a737544a) SHA1(c8fd92705fc42deb6a0ffac6274e27fd61ecd4cc))
+ROM_END
+
+//**************************************************************************
+// TYPE DECLARATIONS
+//**************************************************************************
+
+// ======================> mc10_pak_device
+
+class mc10_pak_mcx128_device :
+ public device_t,
+ public device_mc10cart_interface
+{
+public:
+ // construction/destruction
+ mc10_pak_mcx128_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ // construction/destruction
+ mc10_pak_mcx128_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void device_post_load() override;
+
+ virtual const tiny_rom_entry *device_rom_region() const override
+ {
+ return ROM_NAME(mc10_mcx128);
+ }
+
+ u8 control_register_read(offs_t offset);
+ void control_register_write(offs_t offset, u8 data);
+
+ void write_ram_mirror(address_space &space, offs_t offset, u8 data);
+
+ void view_map0(address_map &map);
+ void view_map1(address_map &map);
+ void view_map2(address_map &map);
+ void view_map3(address_map &map);
+ void view_map4(address_map &map);
+ void view_map5(address_map &map);
+ void view_map6(address_map &map);
+ void view_map7(address_map &map);
+
+
+private:
+ memory_share_creator<u8> m_share;
+ memory_view m_view;
+ memory_bank_array_creator<8> m_bank;
+ uint8_t ram_bank_cr;
+ uint8_t rom_map_cr;
+
+ void update_banks();
+
+};
+
+DEFINE_DEVICE_TYPE_PRIVATE(MC10_PAK_MCX128, device_mc10cart_interface, mc10_pak_mcx128_device, "mc10_mcx128", "Darren Atkinson's MCX-128 cartridge")
+
+//-------------------------------------------------
+// mc10_pak_device - constructor
+//-------------------------------------------------
+
+mc10_pak_mcx128_device::mc10_pak_mcx128_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ :mc10_pak_mcx128_device(mconfig, MC10_PAK_MCX128, tag, owner, clock)
+{
+}
+
+mc10_pak_mcx128_device::mc10_pak_mcx128_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_mc10cart_interface(mconfig, *this)
+ , m_share(*this, "ext_ram", 1024*128, ENDIANNESS_BIG)
+ , m_view(*this, "mcx_view")
+ , m_bank(*this, "bank%u", 0U)
+{
+}
+
+void mc10_pak_mcx128_device::view_map0(address_map &map)
+{
+ map(0x0004, 0x0007).bankrw("bank0");
+ map(0x000f, 0x000f).bankrw("bank1");
+ map(0x0020, 0x3fff).bankrw("bank2");
+ map(0x4000, 0x5fff).bankr("bank3").w(FUNC(mc10_pak_mcx128_device::write_ram_mirror));
+ map(0x6000, 0xbeff).bankrw("bank4");
+ map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write));
+ map(0xc000, 0xfeff).rom().region("eprom",0x0000).bankw("bank5");
+ map(0xff00, 0xffff).rom().region("eprom",0x3f00).bankw("bank7");
+}
+
+void mc10_pak_mcx128_device::view_map1(address_map &map)
+{
+ map(0x0004, 0x0007).bankrw("bank0");
+ map(0x000f, 0x000f).bankrw("bank1");
+ map(0x0020, 0x3fff).bankrw("bank2");
+ map(0x4000, 0x5fff).bankr("bank3").w(FUNC(mc10_pak_mcx128_device::write_ram_mirror));
+ map(0x6000, 0xbeff).bankrw("bank4");
+ map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write));
+ map(0xc000, 0xdfff).bankrw("bank5");
+ map(0xe000, 0xfeff).rom().region("eprom",0x2000).bankw("bank6");
+ map(0xff00, 0xffff).rom().region("eprom",0x3f00).bankw("bank7");
+}
+
+void mc10_pak_mcx128_device::view_map2(address_map &map)
+{
+ map(0x0004, 0x0007).bankrw("bank0");
+ map(0x000f, 0x000f).bankrw("bank1");
+ map(0x0020, 0x3fff).bankrw("bank2");
+ map(0x4000, 0x5fff).bankr("bank3").w(FUNC(mc10_pak_mcx128_device::write_ram_mirror));
+ map(0x6000, 0xbeff).bankrw("bank4");
+ map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write));
+ map(0xc000, 0xdfff).bankrw("bank5");
+ map(0xe000, 0xfeff).bankw("bank6");
+ map(0xff00, 0xffff).bankw("bank7");
+// 0xe000, 0xffff: read internal ROM
+}
+
+void mc10_pak_mcx128_device::view_map3(address_map &map)
+{
+ map(0x0004, 0x0007).bankrw("bank0");
+ map(0x000f, 0x000f).bankrw("bank1");
+ map(0x0020, 0x3fff).bankrw("bank2");
+ map(0x4000, 0x5fff).bankr("bank3").w(FUNC(mc10_pak_mcx128_device::write_ram_mirror));
+ map(0x6000, 0xbeff).bankrw("bank4");
+ map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write));
+ map(0xc000, 0xfeff).bankrw("bank5");
+ map(0xff00, 0xffff).bankrw("bank7");
+}
+
+void mc10_pak_mcx128_device::view_map4(address_map &map)
+{
+ map(0x0004, 0x0007).bankrw("bank0");
+ map(0x000f, 0x000f).bankrw("bank1");
+ map(0x0020, 0x3fff).bankrw("bank2");
+ map(0x4000, 0xbeff).bankrw("bank3");
+ map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write));
+ map(0xc000, 0xfeff).rom().region("eprom",0x0000).bankw("bank5");
+ map(0xff00, 0xffff).rom().region("eprom",0x3f00).bankw("bank7");
+}
+
+void mc10_pak_mcx128_device::view_map5(address_map &map)
+{
+ map(0x0004, 0x0007).bankrw("bank0");
+ map(0x000f, 0x000f).bankrw("bank1");
+ map(0x0020, 0x3fff).bankrw("bank2");
+ map(0x4000, 0xbeff).bankrw("bank3");
+ map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write));
+ map(0xc000, 0xdfff).bankrw("bank5");
+ map(0xe000, 0xfeff).rom().region("eprom",0x2000).bankw("bank6");
+ map(0xff00, 0xffff).rom().region("eprom",0x3f00).bankw("bank7");
+}
+
+void mc10_pak_mcx128_device::view_map6(address_map &map)
+{
+ map(0x0004, 0x0007).bankrw("bank0");
+ map(0x000f, 0x000f).bankrw("bank1");
+ map(0x0020, 0x3fff).bankrw("bank2");
+ map(0x4000, 0xbeff).bankrw("bank3");
+ map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write));
+ map(0xc000, 0xdfff).bankrw("bank5");
+ map(0xe000, 0xfeff).bankw("bank6");
+ map(0xff00, 0xffff).bankw("bank7");
+// 0xe000, 0xffff: read internal ROM
+}
+
+void mc10_pak_mcx128_device::view_map7(address_map &map)
+{
+ map(0x0004, 0x0007).bankrw("bank0");
+ map(0x000f, 0x000f).bankrw("bank1");
+ map(0x0020, 0x3fff).bankrw("bank2");
+ map(0x4000, 0xbeff).bankrw("bank3");
+ map(0xbf00, 0xbf01).rw(FUNC(mc10_pak_mcx128_device::control_register_read), FUNC(mc10_pak_mcx128_device::control_register_write));
+ map(0xc000, 0xfeff).bankrw("bank5");
+ map(0xff00, 0xffff).bankrw("bank7");
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void mc10_pak_mcx128_device::device_start()
+{
+ save_item(NAME(ram_bank_cr));
+ save_item(NAME(rom_map_cr));
+
+ // 0x0004 - 0x0007
+ m_bank[0]->configure_entry(0, &m_share[0x00004]);
+ m_bank[0]->configure_entry(1, &m_share[0x10004]);
+
+ // 0x000f - 0x000f
+ m_bank[1]->configure_entry(0, &m_share[0x0000f]);
+ m_bank[1]->configure_entry(1, &m_share[0x1000f]);
+
+ // 0x0000 - 0x3fff
+ m_bank[2]->configure_entry(0, &m_share[0x00020]);
+ m_bank[2]->configure_entry(1, &m_share[0x10020]);
+
+ // 0x4000 - 0x5fff
+ m_bank[3]->configure_entry(0, &m_share[0x08000]);
+ m_bank[3]->configure_entry(1, &m_share[0x18000]);
+
+ // 0x6000 - 0xbeff
+ m_bank[4]->configure_entry(0, &m_share[0x0a000]);
+ m_bank[4]->configure_entry(1, &m_share[0x1a000]);
+
+ // 0xc000 - 0xdfff
+ m_bank[5]->configure_entry(0, &m_share[0x04000]);
+ m_bank[5]->configure_entry(1, &m_share[0x14000]);
+
+ // 0xe000 - 0xffff
+ m_bank[6]->configure_entry(0, &m_share[0x06000]);
+ m_bank[6]->configure_entry(1, &m_share[0x16000]);
+
+ // 0xff00 - 0xffff
+ m_bank[7]->configure_entry(0, &m_share[0x07f00]);
+ m_bank[7]->configure_entry(1, &m_share[0x07f00]);
+
+ owning_slot().memspace().install_view(0x0000, 0xffff, m_view);
+
+ m_view[0].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map0);
+ m_view[1].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map1);
+ m_view[2].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map2);
+ m_view[3].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map3);
+ m_view[4].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map4);
+ m_view[5].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map5);
+ m_view[6].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map6);
+ m_view[7].install_device(0x0000, 0xffff, *this, &mc10_pak_mcx128_device::view_map7);
+}
+
+//-------------------------------------------------
+// device_reset - device-specific startup
+//-------------------------------------------------
+
+void mc10_pak_mcx128_device::device_reset()
+{
+ ram_bank_cr = 0;
+ rom_map_cr = 0;
+ update_banks();
+}
+
+void mc10_pak_mcx128_device::device_post_load()
+{
+ update_banks();
+}
+
+void mc10_pak_mcx128_device::write_ram_mirror(address_space &space, offs_t offset, u8 data)
+{
+ std::optional<int> cur_slot = m_view.entry();
+ m_share[0x08000+offset] = data;
+
+ if (cur_slot.has_value())
+ {
+ int cur_slot_int = *cur_slot;
+ m_view.disable();
+ space.write_byte(0x4000+offset, data);
+ m_view.select(cur_slot_int);
+ }
+}
+
+u8 mc10_pak_mcx128_device::control_register_read(offs_t offset)
+{
+ if (offset==0)
+ return ram_bank_cr & 0x03;
+
+ return rom_map_cr & 0x03;
+}
+
+void mc10_pak_mcx128_device::control_register_write(offs_t offset, u8 data)
+{
+ if (offset==0)
+ ram_bank_cr = data;
+ else
+ rom_map_cr = data;
+
+ update_banks();
+}
+
+void mc10_pak_mcx128_device::update_banks()
+{
+ int bank0 = ram_bank_cr & 0x01;
+ int bank1 = (ram_bank_cr & 0x02) >> 1;
+
+ m_bank[0]->set_entry(bank0);
+ m_bank[1]->set_entry(bank0);
+ m_bank[2]->set_entry(bank0);
+ m_bank[3]->set_entry(bank1);
+ m_bank[4]->set_entry(bank1);
+ m_bank[5]->set_entry(bank0);
+ m_bank[6]->set_entry(bank0);
+ m_bank[7]->set_entry(bank0);
+
+ m_view.select((bank1 << 2) | (rom_map_cr & 0x03));
+ LOG("view select: %d, bank cr: %d\n", (bank1 << 2) | (rom_map_cr & 0x03), ram_bank_cr & 0x03 );
+}
+
+class alice_pak_mcx128_device : public mc10_pak_mcx128_device
+{
+public:
+ // construction/destruction
+ alice_pak_mcx128_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+protected:
+ // device-level overrides
+ virtual const tiny_rom_entry *device_rom_region() const override
+ {
+ return ROM_NAME(alice_mcx128);
+ }
+};
+
+//-------------------------------------------------
+// mc10_pak_device - constructor
+//-------------------------------------------------
+
+alice_pak_mcx128_device::alice_pak_mcx128_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : mc10_pak_mcx128_device(mconfig, ALICE_PAK_MCX128, tag, owner, clock)
+{
+}
+
+DEFINE_DEVICE_TYPE_PRIVATE(ALICE_PAK_MCX128, device_mc10cart_interface, alice_pak_mcx128_device, "alice_mcx128", "Darren Atkinson's MCX-128 cartridge (Alice ROM)")
diff --git a/src/devices/bus/mc10/mcx128.h b/src/devices/bus/mc10/mcx128.h
new file mode 100644
index 00000000000..29ae63b64e2
--- /dev/null
+++ b/src/devices/bus/mc10/mcx128.h
@@ -0,0 +1,15 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+#ifndef MAME_BUS_MC10_MC10_MCX128_H
+#define MAME_BUS_MC10_MC10_MCX128_H
+
+#pragma once
+
+#include "mc10_cart.h"
+
+// device type definition
+DECLARE_DEVICE_TYPE(MC10_PAK_MCX128, device_mc10cart_interface)
+DECLARE_DEVICE_TYPE(ALICE_PAK_MCX128, device_mc10cart_interface)
+
+#endif // MAME_BUS_MC10_MC10_MCX128_H
+
diff --git a/src/devices/bus/mc10/pak.cpp b/src/devices/bus/mc10/pak.cpp
new file mode 100644
index 00000000000..8e27d58ab8b
--- /dev/null
+++ b/src/devices/bus/mc10/pak.cpp
@@ -0,0 +1,69 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+/***************************************************************************
+
+ pak.cpp
+
+ Code for emulating standard MC-10 cartridges with only ROM
+
+***************************************************************************/
+
+#include "emu.h"
+#include "pak.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(MC10_PAK, mc10_pak_device, "mc10pak", "MC-10 Program PAK")
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// mc10_pak_device - constructor
+//-------------------------------------------------
+mc10_pak_device::mc10_pak_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_mc10cart_interface(mconfig, *this)
+{
+}
+
+mc10_pak_device::mc10_pak_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : mc10_pak_device(mconfig, MC10_PAK, tag, owner, clock)
+{
+}
+
+//-------------------------------------------------
+// max_rom_length - device-specific startup
+//-------------------------------------------------
+
+int mc10_pak_device::max_rom_length() const
+{
+ return 1024 * 16;
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void mc10_pak_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// load - install rom region
+//-------------------------------------------------
+
+image_init_result mc10_pak_device::load()
+{
+ // if the host has supplied a ROM space, install it
+ memory_region *const romregion(memregion("^rom"));
+ if (romregion)
+ owning_slot().memspace().install_rom(0x5000, 0x5000 + romregion->bytes(), romregion->base());
+ else
+ return image_init_result::FAIL;
+
+ return image_init_result::PASS;
+}
diff --git a/src/devices/bus/mc10/pak.h b/src/devices/bus/mc10/pak.h
new file mode 100644
index 00000000000..797cea2f691
--- /dev/null
+++ b/src/devices/bus/mc10/pak.h
@@ -0,0 +1,37 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+#ifndef MAME_BUS_MC10_MC10_PAK_H
+#define MAME_BUS_MC10_MC10_PAK_H
+
+#pragma once
+
+#include "mc10_cart.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> mc10_pak_device
+
+class mc10_pak_device :
+ public device_t,
+ public device_mc10cart_interface
+{
+public:
+ // construction/destruction
+ mc10_pak_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ virtual int max_rom_length() const override;
+ virtual image_init_result load() override;
+
+protected:
+ mc10_pak_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+};
+
+// device type definitions
+DECLARE_DEVICE_TYPE(MC10_PAK, mc10_pak_device)
+
+#endif // MAME_BUS_MC10_MC10_PAK_H
diff --git a/src/devices/bus/mc10/ram.cpp b/src/devices/bus/mc10/ram.cpp
new file mode 100644
index 00000000000..f6a6f488955
--- /dev/null
+++ b/src/devices/bus/mc10/ram.cpp
@@ -0,0 +1,78 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+/***************************************************************************
+
+ ram.cpp
+
+ Code for emulating the Radio Shack 16K RAM Cartridge
+
+***************************************************************************/
+
+#include "emu.h"
+#include "ram.h"
+
+// #include "machine/ram.h"
+
+// #define VERBOSE (LOG_GENERAL )
+#include "logmacro.h"
+
+
+//**************************************************************************
+// TYPE DECLARATIONS
+//**************************************************************************
+
+namespace
+{
+ // ======================> mc10_pak_device
+
+ class mc10_pak_ram_device :
+ public device_t,
+ public device_mc10cart_interface
+ {
+ public:
+ // construction/destruction
+ mc10_pak_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ protected:
+ // device-level overrides
+ virtual void device_start() override;
+ private:
+ memory_share_creator<u8> m_share;
+ };
+};
+
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE_PRIVATE(MC10_PAK_RAM, device_mc10cart_interface, mc10_pak_ram_device, "mc10pakram", "Radio Shack 16K RAM Cartridge")
+
+
+
+//-------------------------------------------------
+// mc10_pak_device - constructor
+//-------------------------------------------------
+
+mc10_pak_ram_device::mc10_pak_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, MC10_PAK_RAM, tag, owner, clock)
+ , device_mc10cart_interface(mconfig, *this)
+ , m_share(*this, "ext_ram", 1024*16, ENDIANNESS_BIG)
+{
+}
+
+
+
+//**************************************************************************
+// MACHINE FRAGMENTS AND ADDRESS MAPS
+//**************************************************************************
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void mc10_pak_ram_device::device_start()
+{
+ owning_slot().memspace().install_ram(0x5000, 0x8fff, &m_share[0]);
+}
diff --git a/src/devices/bus/mc10/ram.h b/src/devices/bus/mc10/ram.h
new file mode 100644
index 00000000000..e32530f81e6
--- /dev/null
+++ b/src/devices/bus/mc10/ram.h
@@ -0,0 +1,14 @@
+// license:BSD-3-Clause
+// copyright-holders:tim lindner
+#ifndef MAME_BUS_MC10_MC10_RAM_H
+#define MAME_BUS_MC10_MC10_RAM_H
+
+#pragma once
+
+#include "mc10_cart.h"
+
+// device type definition
+DECLARE_DEVICE_TYPE(MC10_PAK_RAM, device_mc10cart_interface)
+
+#endif // MAME_BUS_MC10_MC10_RAM_H
+
diff --git a/src/devices/bus/nes/act53.cpp b/src/devices/bus/nes/act53.cpp
index 2a441c36153..0576f36a06c 100644
--- a/src/devices/bus/nes/act53.cpp
+++ b/src/devices/bus/nes/act53.cpp
@@ -32,7 +32,7 @@
DEFINE_DEVICE_TYPE(NES_ACTION53, nes_action53_device, "nes_action53", "NES Cart Action 53 PCB")
-nes_action53_device::nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+nes_action53_device::nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_ACTION53, tag, owner, clock)
, m_sel(0)
{
@@ -45,17 +45,21 @@ void nes_action53_device::device_start()
common_start();
save_item(NAME(m_sel));
save_item(NAME(m_reg));
- m_reg[0] = 0x00;
- m_reg[1] = 0x0f;
- m_reg[2] = 0x00;
- m_reg[3] = 0x3f;
+}
+
+void nes_action53_device::pcb_start(running_machine &machine, u8 *ciram_ptr, bool cart_mounted)
+{
+ device_nes_cart_interface::pcb_start(machine, ciram_ptr, cart_mounted);
+ // at power on last 16K of ROM is mapped to $C000-$FFFF
+ m_reg[0] = m_reg[1] = m_reg[2] = 0;
+ m_reg[3] = (m_prg_chunks - 1) >> 1;
+ update_prg();
}
void nes_action53_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
// register content is not touched by reset
- update_prg();
}
@@ -79,7 +83,7 @@ void nes_action53_device::pcb_reset()
R:$80 is clear
R:$01: [...M PPPP]
- P = PRG Reg
+ P = Inner PRG Reg
M = Mirroring
This bit overwrites bit 0 of R:$80, but only if bit 1 of
R:$80 is clear
@@ -97,7 +101,7 @@ void nes_action53_device::pcb_reset()
%10 = Vert
%11 = Horz
- R:$81: [..BB BBBB]
+ R:$81: [BBBB BBBB]
Outer PRG Reg
@@ -105,34 +109,20 @@ void nes_action53_device::pcb_reset()
void nes_action53_device::update_prg()
{
- uint8_t prg_lo, prg_hi, helper;
- uint8_t out = (m_reg[3] & 0x3f) << 1; // Outer PRG reg
- uint8_t size = (m_reg[2] & 0x30) >> 4; // Game size
- uint8_t mask = (1 << (size + 1)) - 1; // Bits to be taken from PRG reg
-
- if (!BIT(m_reg[2], 3))
- {
- helper = (out & ~mask) | ((m_reg[1] << 1) & mask);
- //32K mode
- prg_lo = (helper & 0xfe);
- prg_hi = (helper | 0x01);
- }
- else
- {
- helper = (out & ~mask) | (m_reg[1] & mask);
- if (BIT(m_reg[2], 2))
- {
- //16K mode with fixed HI
- prg_lo = helper;
- prg_hi = (out | 0x01);
- }
- else
- {
- //16K mode with fixed LO
- prg_lo = (out & 0xfe);
- prg_hi = helper;
- }
- }
+ u16 prg_lo, prg_hi;
+ u8 size = (m_reg[2] & 0x30) >> 4; // Game size
+ u16 mask = ~0 << (size + 1); // Bits to be taken from PRG regs
+ u8 b32k = !BIT(m_reg[2], 3); // 32K mode bit
+ u16 outer = m_reg[3] << 1; // Outer PRG reg bits
+ u8 inner = (m_reg[1] << b32k) & ~mask; // Inner PRG reg bits
+
+ prg_hi = prg_lo = (outer & mask) | inner;
+ if (b32k) // 32K mode
+ prg_hi++;
+ else if (BIT(m_reg[2], 2)) // 16K mode with fixed HI
+ prg_hi = ++outer;
+ else // 16K mode with fixed LO
+ prg_lo = outer;
// printf("banks : 0x%2X - 0x%2X\n", prg_lo, prg_hi);
prg16_89ab(prg_lo);
@@ -158,7 +148,7 @@ void nes_action53_device::update_mirr()
}
}
-void nes_action53_device::write_l(offs_t offset, uint8_t data)
+void nes_action53_device::write_l(offs_t offset, u8 data)
{
LOG_MMC(("action 53 write_l, offset: %04x, data: %02x\n", offset, data));
offset += 0x100;
@@ -167,7 +157,7 @@ void nes_action53_device::write_l(offs_t offset, uint8_t data)
}
-void nes_action53_device::write_h(offs_t offset, uint8_t data)
+void nes_action53_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("action 53 write_h, offset: %04x, data: %02x\n", offset, data));
diff --git a/src/devices/bus/nes/act53.h b/src/devices/bus/nes/act53.h
index 8e4b1c3b073..ead18a54ad6 100644
--- a/src/devices/bus/nes/act53.h
+++ b/src/devices/bus/nes/act53.h
@@ -12,12 +12,13 @@ class nes_action53_device : public nes_nrom_device
{
public:
// construction/destruction
- nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ nes_action53_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
- virtual void write_l(offs_t offset, uint8_t data) override;
- virtual void write_h(offs_t offset, uint8_t data) override;
+ virtual void write_l(offs_t offset, u8 data) override;
+ virtual void write_h(offs_t offset, u8 data) override;
virtual void pcb_reset() override;
+ virtual void pcb_start(running_machine &machine, u8 *ciram_ptr, bool cart_mounted) override;
protected:
// device-level overrides
@@ -26,8 +27,8 @@ protected:
private:
void update_prg();
void update_mirr();
- uint8_t m_sel;
- uint8_t m_reg[4];
+ u8 m_sel;
+ u8 m_reg[4];
};
// device type definition
diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h
index acdfed33164..a207a26e869 100644
--- a/src/devices/bus/nes/nes_slot.h
+++ b/src/devices/bus/nes/nes_slot.h
@@ -237,9 +237,9 @@ protected:
device_nes_cart_interface(const machine_config &mconfig, device_t &device);
DECLARE_WRITE_LINE_MEMBER(set_irq_line);
- void hold_irq_line();
+ [[deprecated("IRQs should be cleared explicitly")]] void hold_irq_line();
void reset_cpu();
- void poke(offs_t offset, uint8_t data);
+ [[deprecated("devices should stop poking into memory spaces where they don't belong")]] void poke(offs_t offset, uint8_t data);
// internal state
uint8_t *m_prg;
diff --git a/src/devices/bus/newbrain/eim.cpp b/src/devices/bus/newbrain/eim.cpp
index be3cae2e615..7b3685eeea7 100644
--- a/src/devices/bus/newbrain/eim.cpp
+++ b/src/devices/bus/newbrain/eim.cpp
@@ -113,7 +113,7 @@ newbrain_eim_device::newbrain_eim_device(const machine_config &mconfig, const ch
device_newbrain_expansion_slot_interface(mconfig, *this),
m_ctc(*this, Z80CTC_TAG),
m_acia(*this, MC6850_TAG),
- m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_rom(*this, "eim"),
m_ram(*this, RAM_TAG)
{
diff --git a/src/devices/bus/newbrain/exp.h b/src/devices/bus/newbrain/exp.h
index e8293a9c540..922ef17213a 100644
--- a/src/devices/bus/newbrain/exp.h
+++ b/src/devices/bus/newbrain/exp.h
@@ -43,13 +43,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define NEWBRAIN_EXPANSION_SLOT_TAG "exp"
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/newbrain/fdc.cpp b/src/devices/bus/newbrain/fdc.cpp
index a356d034a39..fa046e0d5a9 100644
--- a/src/devices/bus/newbrain/fdc.cpp
+++ b/src/devices/bus/newbrain/fdc.cpp
@@ -135,11 +135,8 @@ newbrain_fdc_device::newbrain_fdc_device(const machine_config &mconfig, const ch
device_newbrain_expansion_slot_interface(mconfig, *this),
m_maincpu(*this, Z80_TAG),
m_fdc(*this, UPD765_TAG),
- m_floppy0(*this, UPD765_TAG ":0"),
- m_floppy1(*this, UPD765_TAG ":1"),
- m_floppy2(*this, UPD765_TAG ":2"),
- m_floppy3(*this, UPD765_TAG ":3"),
- m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG)
+ m_floppy(*this, UPD765_TAG ":%u", 0U),
+ m_exp(*this, "exp")
{
}
@@ -224,10 +221,9 @@ void newbrain_fdc_device::iorq_w(offs_t offset, uint8_t data, bool &prtov)
void newbrain_fdc_device::moton(int state)
{
- if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(!state);
- if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(!state);
- if (m_floppy2->get_device()) m_floppy2->get_device()->mon_w(!state);
- if (m_floppy3->get_device()) m_floppy3->get_device()->mon_w(!state);
+ for (auto &floppy : m_floppy)
+ if (floppy->get_device())
+ floppy->get_device()->mon_w(!state);
}
diff --git a/src/devices/bus/newbrain/fdc.h b/src/devices/bus/newbrain/fdc.h
index e5d6665a078..3ac24faffa6 100644
--- a/src/devices/bus/newbrain/fdc.h
+++ b/src/devices/bus/newbrain/fdc.h
@@ -57,10 +57,7 @@ private:
required_device<z80_device> m_maincpu;
required_device<upd765a_device> m_fdc;
- required_device<floppy_connector> m_floppy0;
- required_device<floppy_connector> m_floppy1;
- required_device<floppy_connector> m_floppy2;
- required_device<floppy_connector> m_floppy3;
+ required_device_array<floppy_connector, 4> m_floppy;
required_device<newbrain_expansion_slot_device> m_exp;
void moton(int state);
diff --git a/src/devices/bus/odyssey2/rom.cpp b/src/devices/bus/odyssey2/rom.cpp
index 20b04256d00..b964d99b584 100644
--- a/src/devices/bus/odyssey2/rom.cpp
+++ b/src/devices/bus/odyssey2/rom.cpp
@@ -28,7 +28,7 @@ void o2_rom_device::device_start()
void o2_rom_device::cart_init()
{
- m_cart_mask = (1 << (31 - count_leading_zeros(m_rom_size))) - 1;
+ m_cart_mask = (1 << (31 - count_leading_zeros_32(m_rom_size))) - 1;
}
diff --git a/src/devices/bus/pet/exp.h b/src/devices/bus/pet/exp.h
index d3adf1e9262..14fe9296a8d 100644
--- a/src/devices/bus/pet/exp.h
+++ b/src/devices/bus/pet/exp.h
@@ -17,13 +17,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define PET_EXPANSION_SLOT_TAG "exp"
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/plus4/c1551.cpp b/src/devices/bus/plus4/c1551.cpp
index 5811f7b42f7..b8ecd0b7642 100644
--- a/src/devices/bus/plus4/c1551.cpp
+++ b/src/devices/bus/plus4/c1551.cpp
@@ -368,7 +368,7 @@ void c1551_device::device_add_mconfig(machine_config &config)
connector.set_fixed(true);
connector.set_formats(c1551_device::floppy_formats);
- PLUS4_EXPANSION_SLOT(config, m_exp, 0);
+ PLUS4_EXPANSION_SLOT(config, m_exp, DERIVED_CLOCK(1, 1));
m_exp->irq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::irq_w));
m_exp->cd_rd_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::dma_cd_r));
m_exp->cd_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::dma_cd_w));
@@ -417,7 +417,7 @@ c1551_device::c1551_device(const machine_config &mconfig, const char *tag, devic
, m_ga(*this, C64H156_TAG)
, m_pla(*this, PLA_TAG)
, m_floppy(*this, C64H156_TAG":0:525ssqd")
- , m_exp(*this, PLUS4_EXPANSION_SLOT_TAG)
+ , m_exp(*this, "exp")
, m_jp1(*this, "JP1")
, m_leds(*this, "led%u", 0U)
, m_tcbm_data(0xff)
diff --git a/src/devices/bus/plus4/exp.cpp b/src/devices/bus/plus4/exp.cpp
index 4099b38d5bd..fb0387908ef 100644
--- a/src/devices/bus/plus4/exp.cpp
+++ b/src/devices/bus/plus4/exp.cpp
@@ -90,15 +90,6 @@ void plus4_expansion_slot_device::device_start()
m_read_dma_cd.resolve_safe(0xff);
m_write_dma_cd.resolve_safe();
m_write_aec.resolve_safe();
-
- // inherit bus clock
- // FIXME: this should be unnecessary as slots pass DERIVED_CLOCK(1, 1) through by default
- if (clock() == 0)
- {
- plus4_expansion_slot_device *root = machine().root_device().subdevice<plus4_expansion_slot_device>(PLUS4_EXPANSION_SLOT_TAG);
- assert(root);
- set_unscaled_clock(root->clock());
- }
}
diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h
index fb03fb7fd4b..785207dd4f1 100644
--- a/src/devices/bus/plus4/exp.h
+++ b/src/devices/bus/plus4/exp.h
@@ -43,13 +43,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define PLUS4_EXPANSION_SLOT_TAG "exp"
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/pofo/exp.h b/src/devices/bus/pofo/exp.h
index f760ce694c3..4078535e2c7 100644
--- a/src/devices/bus/pofo/exp.h
+++ b/src/devices/bus/pofo/exp.h
@@ -48,13 +48,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define PORTFOLIO_EXPANSION_SLOT_TAG "exp"
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/pofo/hpc104.cpp b/src/devices/bus/pofo/hpc104.cpp
index 11744206c7e..0d8953b20c6 100644
--- a/src/devices/bus/pofo/hpc104.cpp
+++ b/src/devices/bus/pofo/hpc104.cpp
@@ -100,7 +100,7 @@ pofo_hpc104_device::pofo_hpc104_device(const machine_config &mconfig, device_typ
device_portfolio_expansion_slot_interface(mconfig, *this),
device_nvram_interface(mconfig, *this),
m_ccm(*this, PORTFOLIO_MEMORY_CARD_SLOT_B_TAG),
- m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_nvram(*this, "nvram", 0x40000, ENDIANNESS_LITTLE),
m_io_sw1(*this, "SW1")
{
@@ -169,7 +169,7 @@ uint8_t pofo_hpc104_device::nrdi_r(offs_t offset, uint8_t data, bool iom, bool b
{
if (offset >= 0x1f000 && offset < 0x5f000)
{
- data = m_nvram[offset - 0x1f000] = data;
+ data = m_nvram[offset - 0x1f000];
}
}
}
diff --git a/src/devices/bus/saitek_osa/expansion.cpp b/src/devices/bus/saitek_osa/expansion.cpp
index bae1dfe0eb5..0c7e6be78bc 100644
--- a/src/devices/bus/saitek_osa/expansion.cpp
+++ b/src/devices/bus/saitek_osa/expansion.cpp
@@ -11,6 +11,10 @@ Used by Saitek(SciSys) chess computers Leonardo, Galileo, Renaissance.
#include "emu.h"
#include "expansion.h"
+#include "maestro.h"
+#include "maestroa.h"
+#include "sparc.h"
+
//**************************************************************************
// DEVICE DEFINITIONS
@@ -153,3 +157,15 @@ device_saitekosa_expansion_interface::device_saitekosa_expansion_interface(const
device_saitekosa_expansion_interface::~device_saitekosa_expansion_interface()
{
}
+
+//-------------------------------------------------
+// module list
+//-------------------------------------------------
+
+void saitekosa_expansion_modules(device_slot_interface &device)
+{
+ device.option_add("analyst", OSA_ANALYST);
+ device.option_add("maestro", OSA_MAESTRO);
+ device.option_add("maestroa", OSA_MAESTROA);
+ device.option_add("sparc", OSA_SPARC);
+}
diff --git a/src/devices/bus/saitek_osa/expansion.h b/src/devices/bus/saitek_osa/expansion.h
index 2c245ada301..cb513bf2f4e 100644
--- a/src/devices/bus/saitek_osa/expansion.h
+++ b/src/devices/bus/saitek_osa/expansion.h
@@ -119,10 +119,10 @@ protected:
saitekosa_expansion_device *m_expansion;
};
+void saitekosa_expansion_modules(device_slot_interface &device);
+
+
// device type definition
DECLARE_DEVICE_TYPE(SAITEKOSA_EXPANSION, saitekosa_expansion_device)
-// include here so drivers don't need to
-#include "modules.h"
-
#endif // MAME_BUS_SAITEKOSA_EXPANSION_H
diff --git a/src/devices/bus/saitek_osa/modules.cpp b/src/devices/bus/saitek_osa/modules.cpp
deleted file mode 100644
index 19b7af1ff13..00000000000
--- a/src/devices/bus/saitek_osa/modules.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap
-/***************************************************************************
-
- Saitek OSA Expansion Slot modules
-
-***************************************************************************/
-
-#include "emu.h"
-#include "modules.h"
-
-#include "maestro.h"
-#include "maestroa.h"
-#include "sparc.h"
-
-void saitekosa_expansion_modules(device_slot_interface &device)
-{
- device.option_add("analyst", OSA_ANALYST);
- device.option_add("maestro", OSA_MAESTRO);
- device.option_add("maestroa", OSA_MAESTROA);
- device.option_add("sparc", OSA_SPARC);
-}
diff --git a/src/devices/bus/saitek_osa/modules.h b/src/devices/bus/saitek_osa/modules.h
deleted file mode 100644
index 009daf69cec..00000000000
--- a/src/devices/bus/saitek_osa/modules.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:hap
-/***************************************************************************
-
- Saitek OSA Expansion Slot modules
-
-***************************************************************************/
-
-#ifndef MAME_BUS_SAITEKOSA_MODULES_H
-#define MAME_BUS_SAITEKOSA_MODULES_H
-
-#pragma once
-
-void saitekosa_expansion_modules(device_slot_interface &device);
-
-#endif // MAME_BUS_SAITEKOSA_MODULES_H
diff --git a/src/devices/bus/vic10/exp.cpp b/src/devices/bus/vic10/exp.cpp
index a678a2624c3..48f42ad73c1 100644
--- a/src/devices/bus/vic10/exp.cpp
+++ b/src/devices/bus/vic10/exp.cpp
@@ -79,15 +79,6 @@ void vic10_expansion_slot_device::device_start()
m_write_res.resolve_safe();
m_write_cnt.resolve_safe();
m_write_sp.resolve_safe();
-
- // inherit bus clock
- // FIXME: this should be unnecessary as slots pass DERIVED_CLOCK(1, 1) through by default
- if (clock() == 0)
- {
- vic10_expansion_slot_device *root = machine().root_device().subdevice<vic10_expansion_slot_device>(VIC10_EXPANSION_SLOT_TAG);
- assert(root);
- set_unscaled_clock(root->clock());
- }
}
diff --git a/src/devices/bus/vic10/exp.h b/src/devices/bus/vic10/exp.h
index 20d21f99e1c..c2b1f52ec70 100644
--- a/src/devices/bus/vic10/exp.h
+++ b/src/devices/bus/vic10/exp.h
@@ -41,14 +41,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define VIC10_EXPANSION_SLOT_TAG "exp"
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/vic20/exp.h b/src/devices/bus/vic20/exp.h
index 96583a29577..dab459cf7bf 100644
--- a/src/devices/bus/vic20/exp.h
+++ b/src/devices/bus/vic20/exp.h
@@ -40,14 +40,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define VIC20_EXPANSION_SLOT_TAG "exp"
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/vip/exp.h b/src/devices/bus/vip/exp.h
index bb9cd203690..aa50074e9ca 100644
--- a/src/devices/bus/vip/exp.h
+++ b/src/devices/bus/vip/exp.h
@@ -40,13 +40,6 @@
//**************************************************************************
-// CONSTANTS
-//**************************************************************************
-
-#define VIP_EXPANSION_SLOT_TAG "exp"
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
diff --git a/src/devices/bus/vme/vme.cpp b/src/devices/bus/vme/vme.cpp
index a6edb30b693..57f0c6170d2 100644
--- a/src/devices/bus/vme/vme.cpp
+++ b/src/devices/bus/vme/vme.cpp
@@ -109,54 +109,34 @@ vme_slot_device::vme_slot_device(const machine_config &mconfig, const char *tag,
vme_slot_device::vme_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, device_slot_interface(mconfig, *this)
- , m_vme_tag(nullptr)
- , m_vme_slottag(nullptr)
+ , m_vme(*this, finder_base::DUMMY_TAG)
+ , m_slot_nbr(0)
, m_vme_j1_callback(*this)
{
LOG("%s %s\n", tag, FUNCNAME);
}
//-------------------------------------------------
-// update_vme_chains
-//-------------------------------------------------
-void vme_slot_device::update_vme_chains(uint32_t slot_nbr)
-{
- LOG("%s %s - %d\n", FUNCNAME, tag(), slot_nbr);
-}
-
-//-------------------------------------------------
-// set_vme_slot
+// device_start - device-specific startup
//-------------------------------------------------
-void vme_slot_device::set_vme_slot(const char *tag, const char *slottag)
+void vme_slot_device::device_start()
{
- LOG("%s %s - %s\n", FUNCNAME, tag, slottag);
- m_vme_tag = tag;
- m_vme_slottag = slottag;
+ // m_card = dynamic_cast<device_vme_card_interface *>(get_card_device());
}
//-------------------------------------------------
-// device_start - device-specific startup
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
//-------------------------------------------------
-void vme_slot_device::device_start()
+void vme_slot_device::device_resolve_objects()
{
device_vme_card_interface *dev = dynamic_cast<device_vme_card_interface *>(get_card_device());
- LOG("%s %s - %s:%s\n", tag(), FUNCNAME, m_vme_tag, m_vme_slottag);
+ LOG("%s %s - %s\n", tag(), FUNCNAME, m_vme.finder_tag());
if (dev)
{
- dev->set_vme_tag(m_vme_tag, m_vme_slottag);
+ dev->set_vme_bus(*m_vme, m_slot_nbr);
}
-
- // m_card = dynamic_cast<device_vme_card_interface *>(get_card_device());
-}
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-void vme_slot_device::device_config_complete()
-{
- LOG("%s %s\n", tag(), FUNCNAME);
}
//-------------------------------------------------
@@ -457,8 +437,6 @@ void vme_device::install_device(vme_amod_t amod, offs_t start, offs_t end, read3
device_vme_card_interface::device_vme_card_interface(const machine_config &mconfig, device_t &device)
: device_interface(device, "vme")
, m_vme(nullptr)
- , m_vme_tag(nullptr)
- , m_vme_slottag(nullptr)
, m_slot(0)
, m_next(nullptr)
{
@@ -471,17 +449,9 @@ device_vme_card_interface::~device_vme_card_interface()
LOG("%s %s\n", m_device->tag(), FUNCNAME);
}
-void device_vme_card_interface::set_vme_tag(const char *tag, const char *slottag)
-{
- LOG("%s %s\n", tag, FUNCNAME);
- m_vme_tag = tag;
- m_vme_slottag = slottag;
-}
-
-void device_vme_card_interface::set_vme_device()
+void device_vme_card_interface::interface_post_start()
{
LOG("%s %s\n", m_device->tag(), FUNCNAME);
- m_vme = device().machine().root_device().subdevice<vme_device>(m_vme_tag);
// printf("*** %s %sfound\n", m_vme_tag, m_vme ? "" : "not ");
if (m_vme) m_vme->add_vme_card(this);
}
diff --git a/src/devices/bus/vme/vme.h b/src/devices/bus/vme/vme.h
index 93947e40e91..e49b23cbbbe 100644
--- a/src/devices/bus/vme/vme.h
+++ b/src/devices/bus/vme/vme.h
@@ -55,12 +55,11 @@
// CONSTANTS
//**************************************************************************
-#define VME_BUS_TAG "vme"
-
//void vme_slot1(device_slot_interface &device); // Disabled until we know how to combine a board driver and a slot device.
void vme_slots(device_slot_interface &device);
class device_vme_card_interface; // This interface is standardized
+class vme_device;
class vme_slot_device : public device_t,
public device_slot_interface
@@ -85,16 +84,15 @@ public:
};
// construction/destruction
- template <typename T>
- vme_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, uint32_t slot_nbr, char const *bus_tag)
+ template <typename T, typename U>
+ vme_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt, uint32_t slot_nbr, U &&bus_tag)
: vme_slot_device(mconfig, tag, owner, 0)
{
option_reset();
opts(*this);
set_default_option(dflt);
set_fixed(false);
- set_vme_slot(bus_tag, tag);
- update_vme_chains(slot_nbr);
+ set_vme_slot(std::forward<U>(bus_tag), slot_nbr);
}
vme_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
@@ -102,8 +100,7 @@ public:
// Callbacks to the board from the VME bus comes through here
auto vme_j1_callback() { return m_vme_j1_callback.bind(); }
- void set_vme_slot(const char *tag, const char *slottag);
- void update_vme_chains(uint32_t slot_nbr);
+ template <typename T> void set_vme_slot(T &&tag, uint32_t slot_nbr) { m_vme.set_tag(std::forward<T>(tag)); m_slot_nbr = slot_nbr; }
virtual uint8_t read8(offs_t offset);
virtual void write8(offs_t offset, uint8_t data);
@@ -113,10 +110,11 @@ protected:
// device-level overrides
virtual void device_start() override;
- virtual void device_config_complete() override;
+ virtual void device_resolve_objects() override;
// configuration
- const char *m_vme_tag, *m_vme_slottag;
+ required_device<vme_device> m_vme;
+ uint32_t m_slot_nbr;
// callbacks
devcb_write_line m_vme_j1_callback;
@@ -139,8 +137,6 @@ public:
void set_cputag(const char *tag) { m_cputag = tag; }
void use_owner_spaces();
- virtual space_config_vector memory_space_config() const override;
-
const address_space_config m_a32_config;
void add_vme_card(device_vme_card_interface *card);
@@ -196,6 +192,8 @@ protected:
virtual void device_reset() override;
simple_list<device_vme_card_interface> m_device_list;
+ virtual space_config_vector memory_space_config() const override;
+
// internal state
cpu_device *m_maincpu;
@@ -218,22 +216,22 @@ class device_vme_card_interface : public device_interface
template <class ElementType> friend class simple_list;
public:
// inline configuration
- void set_vme_tag(const char *tag, const char *slottag);
+ void set_vme_bus(vme_device &vme, int slot) { m_vme = &vme; m_slot = slot; }
// construction/destruction
virtual ~device_vme_card_interface();
- void set_vme_device();
virtual uint8_t read8(offs_t offset);
virtual void write8(offs_t offset, uint8_t data);
+protected:
device_vme_card_interface(const machine_config &mconfig, device_t &device);
-protected:
+ virtual void interface_post_start() override;
+
device_t *m_device;
vme_device *m_vme;
- const char *m_vme_tag, *m_vme_slottag;
int m_slot;
private:
diff --git a/src/devices/bus/vme/vme_fccpu20.cpp b/src/devices/bus/vme/vme_fccpu20.cpp
index 8759c47d143..ee07b86e1be 100644
--- a/src/devices/bus/vme/vme_fccpu20.cpp
+++ b/src/devices/bus/vme/vme_fccpu20.cpp
@@ -443,8 +443,6 @@ void vme_fccpu20_device::device_start()
{
LOG("%s\n", FUNCNAME);
- set_vme_device();
-
save_pointer (NAME (m_sysrom), sizeof(m_sysrom));
save_pointer (NAME (m_sysram), sizeof(m_sysram));
// save_item(NAME(m_board_id)); // TODO: Save this "non base type" item
diff --git a/src/devices/bus/vme/vme_fcisio.cpp b/src/devices/bus/vme/vme_fcisio.cpp
index d9e35370812..de4c03dfab8 100644
--- a/src/devices/bus/vme/vme_fcisio.cpp
+++ b/src/devices/bus/vme/vme_fcisio.cpp
@@ -405,7 +405,6 @@ vme_fcisio1_card_device::vme_fcisio1_card_device(const machine_config &mconfig,
void vme_fcisio1_card_device::device_start()
{
LOG("%s\n", FUNCNAME);
- set_vme_device();
/* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */
m_sysrom = (uint16_t*)(memregion ("maincpu")->base () + 0xf00000);
diff --git a/src/devices/bus/vme/vme_fcscsi.cpp b/src/devices/bus/vme/vme_fcscsi.cpp
index 508ae910e9c..7324dd907b6 100644
--- a/src/devices/bus/vme/vme_fcscsi.cpp
+++ b/src/devices/bus/vme/vme_fcscsi.cpp
@@ -329,7 +329,6 @@ vme_fcscsi1_card_device::vme_fcscsi1_card_device(const machine_config &mconfig,
void vme_fcscsi1_card_device::device_start()
{
LOG("%s\n", FUNCNAME);
- set_vme_device();
/* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */
m_sysrom = (uint16_t*)(memregion ("maincpu")->base () + 0xe00000);
diff --git a/src/devices/bus/vme/vme_hcpu30.cpp b/src/devices/bus/vme/vme_hcpu30.cpp
index 0c072c20191..2d70c85dd94 100644
--- a/src/devices/bus/vme/vme_hcpu30.cpp
+++ b/src/devices/bus/vme/vme_hcpu30.cpp
@@ -180,8 +180,6 @@ void vme_hcpu30_card_device::device_start()
{
LOG("%s %s\n", tag(), FUNCNAME);
- set_vme_device();
-
save_pointer (NAME (m_sysrom), sizeof(m_sysrom));
save_pointer (NAME (m_sysram), sizeof(m_sysram));
diff --git a/src/devices/bus/vme/vme_mvme350.cpp b/src/devices/bus/vme/vme_mvme350.cpp
index 1b8f2f7a564..a0dca46b996 100644
--- a/src/devices/bus/vme/vme_mvme350.cpp
+++ b/src/devices/bus/vme/vme_mvme350.cpp
@@ -224,7 +224,6 @@ vme_mvme350_card_device::vme_mvme350_card_device(const machine_config &mconfig,
void vme_mvme350_card_device::device_start()
{
LOG("%s %s\n", tag(), FUNCNAME);
- set_vme_device();
/* Setup r/w handlers for shared memory area */
#if 0
diff --git a/src/devices/bus/vme/vme_mzr8300.cpp b/src/devices/bus/vme/vme_mzr8300.cpp
index cdcd3bd267e..99e2e8c0889 100644
--- a/src/devices/bus/vme/vme_mzr8300.cpp
+++ b/src/devices/bus/vme/vme_mzr8300.cpp
@@ -168,7 +168,6 @@ vme_mzr8300_card_device::vme_mzr8300_card_device(const machine_config &mconfig,
void vme_mzr8300_card_device::device_start()
{
LOG("%s %s\n", tag(), FUNCNAME);
- set_vme_device();
/* Setup r/w handlers for first SIO in A16 */
uint32_t base = 0xFF0000;
diff --git a/src/devices/cpu/am29000/am29ops.h b/src/devices/cpu/am29000/am29ops.h
index 74f6eef48f9..e111af99cd1 100644
--- a/src/devices/cpu/am29000/am29ops.h
+++ b/src/devices/cpu/am29000/am29ops.h
@@ -1396,7 +1396,7 @@ void am29000_cpu_device::CLZ()
{
uint32_t b = INST_M_BIT ? I8: GET_RB_VAL;
- m_r[RC] = count_leading_zeros(b);
+ m_r[RC] = count_leading_zeros_32(b);
}
void am29000_cpu_device::SETIP()
diff --git a/src/devices/cpu/arm7/arm7ops.cpp b/src/devices/cpu/arm7/arm7ops.cpp
index cb08ff8fed4..f5a8f435762 100644
--- a/src/devices/cpu/arm7/arm7ops.cpp
+++ b/src/devices/cpu/arm7/arm7ops.cpp
@@ -1697,7 +1697,7 @@ void arm7_cpu_device::arm7ops_0123(uint32_t insn)
uint32_t rm = insn&0xf;
uint32_t rd = (insn>>12)&0xf;
- SetRegister(rd, count_leading_zeros(GetRegister(rm)));
+ SetRegister(rd, count_leading_zeros_32(GetRegister(rm)));
R15 += 4;
}
diff --git a/src/devices/cpu/drcbec.cpp b/src/devices/cpu/drcbec.cpp
index d8b30535d6e..f54e6416696 100644
--- a/src/devices/cpu/drcbec.cpp
+++ b/src/devices/cpu/drcbec.cpp
@@ -1062,11 +1062,11 @@ int drcbe_c::execute(code_handle &entry)
break;
case MAKE_OPCODE_SHORT(OP_LZCNT, 4, 0): // LZCNT dst,src
- PARAM0 = count_leading_zeros(PARAM1);
+ PARAM0 = count_leading_zeros_32(PARAM1);
break;
case MAKE_OPCODE_SHORT(OP_LZCNT, 4, 1):
- temp32 = count_leading_zeros(PARAM1);
+ temp32 = count_leading_zeros_32(PARAM1);
flags = FLAGS32_NZ(temp32);
PARAM0 = temp32;
break;
@@ -1675,17 +1675,11 @@ int drcbe_c::execute(code_handle &entry)
break;
case MAKE_OPCODE_SHORT(OP_LZCNT, 8, 0): // DLZCNT dst,src
- if ((uint32_t)(DPARAM1 >> 32) != 0)
- DPARAM0 = count_leading_zeros(DPARAM1 >> 32);
- else
- DPARAM0 = 32 + count_leading_zeros(DPARAM1);
+ DPARAM0 = count_leading_zeros_64(DPARAM1);
break;
case MAKE_OPCODE_SHORT(OP_LZCNT, 8, 1):
- if ((uint32_t)(DPARAM1 >> 32) != 0)
- temp64 = count_leading_zeros(DPARAM1 >> 32);
- else
- temp64 = 32 + count_leading_zeros(DPARAM1);
+ temp64 = count_leading_zeros_64(DPARAM1);
flags = FLAGS64_NZ(temp64);
DPARAM0 = temp64;
break;
diff --git a/src/devices/cpu/dspp/dspp.cpp b/src/devices/cpu/dspp/dspp.cpp
index ac7ece3cfb5..3479e461af5 100644
--- a/src/devices/cpu/dspp/dspp.cpp
+++ b/src/devices/cpu/dspp/dspp.cpp
@@ -1588,7 +1588,7 @@ void dspp_device::update_fifo_dma()
while (mask != 0)
{
- uint32_t channel = 31 - count_leading_zeros(mask);
+ uint32_t channel = 31 - count_leading_zeros_32(mask);
const fifo_dma & dma = m_fifo_dma[channel];
diff --git a/src/devices/cpu/h8500/h8500.cpp b/src/devices/cpu/h8500/h8500.cpp
index c96fed16f7f..765988ceeaa 100644
--- a/src/devices/cpu/h8500/h8500.cpp
+++ b/src/devices/cpu/h8500/h8500.cpp
@@ -12,10 +12,11 @@
#include "h8500.h"
#include "h8500dasm.h"
-h8500_device::h8500_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int addrbits, int buswidth, int ramsize, address_map_constructor map)
+h8500_device::h8500_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int addrbits, int buswidth, int ramsize, int defmode, address_map_constructor map)
: cpu_device(mconfig, type, tag, owner, clock)
, m_program_config("program", ENDIANNESS_BIG, buswidth, addrbits, 0, map)
, m_ram_config("internal RAM", ENDIANNESS_BIG, 16, ramsize, 0, address_map_constructor(FUNC(h8500_device::ram_map), this))
+ , m_mode_control(defmode)
, m_pc(0)
, m_ppc(0)
, m_sr(0)
diff --git a/src/devices/cpu/h8500/h8500.h b/src/devices/cpu/h8500/h8500.h
index ede393687a9..3755ab7a4ab 100644
--- a/src/devices/cpu/h8500/h8500.h
+++ b/src/devices/cpu/h8500/h8500.h
@@ -18,8 +18,10 @@ public:
H8500_R4, H8500_R5, H8500_FP, H8500_SP
};
+ void set_mode(u8 mode) { assert(!configured()); m_mode_control = mode; }
+
protected:
- h8500_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int addrbits, int buswidth, int ramsize, address_map_constructor map);
+ h8500_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int addrbits, int buswidth, int ramsize, int defmode, address_map_constructor map);
// device-level overrides
virtual void device_config_complete() override;
@@ -40,7 +42,8 @@ protected:
// device_state_interface overrides
virtual void state_string_export(const device_state_entry &entry, std::string &str) const override;
- virtual bool h8_maximum_mode() const noexcept { return true; }
+ u8 mode_control() const { return m_mode_control; }
+ virtual bool h8_maximum_mode() const noexcept { return m_mode_control == 3 || m_mode_control == 4; } // all except H8/570
private:
void ram_map(address_map &map);
@@ -52,6 +55,9 @@ private:
address_space *m_program;
memory_access<11, 1, 0, ENDIANNESS_BIG>::cache m_ram_cache;
+ // misc. configuration
+ u8 m_mode_control;
+
// internal registers
u16 m_pc;
u16 m_ppc;
diff --git a/src/devices/cpu/h8500/h8510.cpp b/src/devices/cpu/h8500/h8510.cpp
index 413f99cc248..b4ade58d8d5 100644
--- a/src/devices/cpu/h8500/h8510.cpp
+++ b/src/devices/cpu/h8500/h8510.cpp
@@ -12,7 +12,7 @@
DEFINE_DEVICE_TYPE(HD6415108, hd6415108_device, "hd6415108", "Hitachi HD6415108 (H8/510)")
h8510_device::h8510_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
- : h8500_device(mconfig, type, tag, owner, clock, 24, 16, 0, address_map_constructor(FUNC(h8510_device::internal_map), this))
+ : h8500_device(mconfig, type, tag, owner, clock, 24, 16, 0, 4, address_map_constructor(FUNC(h8510_device::internal_map), this))
{
}
diff --git a/src/devices/cpu/h8500/h8520.cpp b/src/devices/cpu/h8500/h8520.cpp
index 9a3a076d5e4..459a979da98 100644
--- a/src/devices/cpu/h8500/h8520.cpp
+++ b/src/devices/cpu/h8500/h8520.cpp
@@ -10,9 +10,10 @@
#include "h8520.h"
DEFINE_DEVICE_TYPE(HD6435208, hd6435208_device, "hd6435208", "Hitachi HD6435208 (H8/520)")
+DEFINE_DEVICE_TYPE(HD6475208, hd6475208_device, "hd6475208", "Hitachi HD6475208 (H8/520)")
h8520_device::h8520_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
- : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 9, address_map_constructor(FUNC(h8520_device::internal_map), this))
+ : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 9, 4, address_map_constructor(FUNC(h8520_device::internal_map), this))
{
}
@@ -21,9 +22,15 @@ hd6435208_device::hd6435208_device(const machine_config &mconfig, const char *ta
{
}
+hd6475208_device::hd6475208_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : h8520_device(mconfig, HD6475208, tag, owner, clock)
+{
+}
+
void h8520_device::internal_map(address_map &map)
{
- map(0x0000, 0x3fff).rom().region(DEVICE_SELF, 0); // modes 2, 4, 7
+ if (mode_control() == 2 || mode_control() == 4 || mode_control() == 7)
+ map(0x0000, 0x3fff).rom().region(DEVICE_SELF, 0);
#if 0
map(0xff80, 0xff80).w(FUNC(h8520_device::p1ddr_w));
map(0xff81, 0xff81).w(FUNC(h8520_device::p2ddr_w));
diff --git a/src/devices/cpu/h8500/h8520.h b/src/devices/cpu/h8500/h8520.h
index fc8795e7425..7f66327c796 100644
--- a/src/devices/cpu/h8500/h8520.h
+++ b/src/devices/cpu/h8500/h8520.h
@@ -24,6 +24,14 @@ public:
hd6435208_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
+class hd6475208_device : public h8520_device
+{
+public:
+ // device type constructor
+ hd6475208_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
DECLARE_DEVICE_TYPE(HD6435208, hd6435208_device)
+DECLARE_DEVICE_TYPE(HD6475208, hd6475208_device)
#endif // MAME_CPU_H8500_H8520_H
diff --git a/src/devices/cpu/h8500/h8532.cpp b/src/devices/cpu/h8500/h8532.cpp
index 9d0be448e3f..20c9869c4ee 100644
--- a/src/devices/cpu/h8500/h8532.cpp
+++ b/src/devices/cpu/h8500/h8532.cpp
@@ -10,9 +10,10 @@
#include "h8532.h"
DEFINE_DEVICE_TYPE(HD6435328, hd6435328_device, "hd6435328", "Hitachi HD6435328 (H8/532)")
+DEFINE_DEVICE_TYPE(HD6475328, hd6475328_device, "hd6475328", "Hitachi HD6475328 (H8/532)")
h8532_device::h8532_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
- : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 10, address_map_constructor(FUNC(h8532_device::internal_map), this))
+ : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 10, 4, address_map_constructor(FUNC(h8532_device::internal_map), this))
{
}
@@ -21,9 +22,15 @@ hd6435328_device::hd6435328_device(const machine_config &mconfig, const char *ta
{
}
+hd6475328_device::hd6475328_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : h8532_device(mconfig, HD6475328, tag, owner, clock)
+{
+}
+
void h8532_device::internal_map(address_map &map)
{
- map(0x0000, 0x7fff).rom().region(DEVICE_SELF, 0); // modes 2, 4, 7
+ if (mode_control() == 2 || mode_control() == 4 || mode_control() == 7)
+ map(0x0000, 0x7fff).rom().region(DEVICE_SELF, 0);
#if 0
map(0xff80, 0xff80).w(FUNC(h8532_device::p1ddr_w));
map(0xff81, 0xff81).w(FUNC(h8532_device::p2ddr_w));
diff --git a/src/devices/cpu/h8500/h8532.h b/src/devices/cpu/h8500/h8532.h
index c9b08ee1d00..71ec652a465 100644
--- a/src/devices/cpu/h8500/h8532.h
+++ b/src/devices/cpu/h8500/h8532.h
@@ -24,6 +24,14 @@ public:
hd6435328_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
+class hd6475328_device : public h8532_device
+{
+public:
+ // device type constructor
+ hd6475328_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
DECLARE_DEVICE_TYPE(HD6435328, hd6435328_device)
+DECLARE_DEVICE_TYPE(HD6475328, hd6475328_device)
#endif // MAME_CPU_H8500_H8532_H
diff --git a/src/devices/cpu/h8500/h8534.cpp b/src/devices/cpu/h8500/h8534.cpp
index dd33af71128..06c9b0dc24f 100644
--- a/src/devices/cpu/h8500/h8534.cpp
+++ b/src/devices/cpu/h8500/h8534.cpp
@@ -9,11 +9,13 @@
#include "emu.h"
#include "h8534.h"
+DEFINE_DEVICE_TYPE(HD6435348, hd6435348_device, "hd6435348", "Hitachi HD6435348 (H8/534)")
DEFINE_DEVICE_TYPE(HD6475348, hd6475348_device, "hd6475348", "Hitachi HD6475348 (H8/534)")
DEFINE_DEVICE_TYPE(HD6435368, hd6435368_device, "hd6435368", "Hitachi HD6435368 (H8/536)")
+DEFINE_DEVICE_TYPE(HD6475368, hd6475368_device, "hd6475368", "Hitachi HD6475368 (H8/536)")
h8534_device::h8534_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, address_map_constructor map)
- : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 11, map)
+ : h8500_device(mconfig, type, tag, owner, clock, 20, 8, 11, 4, map)
{
}
@@ -22,6 +24,11 @@ h8534_device::h8534_device(const machine_config &mconfig, device_type type, cons
{
}
+hd6435348_device::hd6435348_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : h8534_device(mconfig, HD6435348, tag, owner, clock)
+{
+}
+
hd6475348_device::hd6475348_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: h8534_device(mconfig, HD6475348, tag, owner, clock)
{
@@ -37,16 +44,24 @@ hd6435368_device::hd6435368_device(const machine_config &mconfig, const char *ta
{
}
+hd6475368_device::hd6475368_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : h8536_device(mconfig, HD6475368, tag, owner, clock)
+{
+}
+
void h8534_device::internal_map(address_map &map)
{
- map(0x0000, 0x7fff).rom().region(DEVICE_SELF, 0); // modes 2, 4, 7
+ if (mode_control() == 2 || mode_control() == 4 || mode_control() == 7)
+ map(0x0000, 0x7fff).rom().region(DEVICE_SELF, 0);
register_field_map(map);
}
void h8536_device::internal_map(address_map &map)
{
- //map(0x0000, 0xee7f).rom().region(DEVICE_SELF, 0); // mode 2?
- //map(0x0000, 0xf67f).rom().region(DEVICE_SELF, 0); // modes 4, 7
+ if (mode_control() == 2)
+ map(0x0000, 0xee7f).rom().region(DEVICE_SELF, 0);
+ else if (mode_control() == 4 || mode_control() == 7)
+ map(0x0000, 0xf67f).rom().region(DEVICE_SELF, 0);
register_field_map(map);
}
diff --git a/src/devices/cpu/h8500/h8534.h b/src/devices/cpu/h8500/h8534.h
index 8e5c357ff1b..2fad7985a70 100644
--- a/src/devices/cpu/h8500/h8534.h
+++ b/src/devices/cpu/h8500/h8534.h
@@ -11,9 +11,8 @@
class h8534_device : public h8500_device
{
protected:
- // delegating constructor
+ // delegating constructors
h8534_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
-
h8534_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, address_map_constructor map);
void register_field_map(address_map &map);
@@ -22,6 +21,13 @@ private:
void internal_map(address_map &map);
};
+class hd6435348_device : public h8534_device
+{
+public:
+ // device type constructor
+ hd6435348_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
class hd6475348_device : public h8534_device
{
public:
@@ -45,7 +51,16 @@ public:
hd6435368_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
};
+class hd6475368_device : public h8536_device
+{
+public:
+ // device type constructor
+ hd6475368_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+};
+
+DECLARE_DEVICE_TYPE(HD6435348, hd6435348_device)
DECLARE_DEVICE_TYPE(HD6475348, hd6475348_device)
DECLARE_DEVICE_TYPE(HD6435368, hd6435368_device)
+DECLARE_DEVICE_TYPE(HD6475368, hd6475368_device)
#endif // MAME_CPU_H8500_H8534_H
diff --git a/src/devices/cpu/m68000/m68kfpu.cpp b/src/devices/cpu/m68000/m68kfpu.cpp
index ed439f2fe5f..7cd10e84b84 100644
--- a/src/devices/cpu/m68000/m68kfpu.cpp
+++ b/src/devices/cpu/m68000/m68kfpu.cpp
@@ -241,6 +241,53 @@ inline void m68000_base_device::store_pack_float80(u32 ea, int k, floatx80 fpr)
m68ki_write_32(ea+8, dw3);
}
+inline floatx80 propagateFloatx80NaNOneArg(floatx80 a)
+{
+ if (floatx80_is_signaling_nan(a))
+ float_raise(float_flag_invalid);
+
+ a.low |= 0xC000000000000000U;
+
+ return a;
+}
+
+static void normalizeFloatx80Subnormal(uint64_t aSig, int32_t *zExpPtr, uint64_t *zSigPtr)
+{
+ int shiftCount = countLeadingZeros64(aSig);
+ *zSigPtr = aSig << shiftCount;
+ *zExpPtr = 1 - shiftCount;
+}
+
+inline floatx80 getman(floatx80 src)
+{
+ const flag sign = (src.high >> 15);
+ int32_t exp = (src.high & 0x7fff);
+ uint64_t signific = src.low;
+
+ if (exp == 0x7fff)
+ {
+ if ((uint64_t)(signific << 1))
+ {
+ return propagateFloatx80NaNOneArg(src);
+ }
+ else
+ {
+ return packFloatx80(0, 0xffff, 0xffffffffffffffffU);
+ }
+ }
+
+ if (exp == 0)
+ {
+ if (signific == 0)
+ {
+ return packFloatx80(sign, 0, 0);
+ }
+ normalizeFloatx80Subnormal(signific, &exp, &signific);
+ }
+
+ return packFloatx80(sign, 0x3fff, signific);
+}
+
inline void m68000_base_device::SET_CONDITION_CODES(floatx80 reg)
{
// u64 *regi;
@@ -347,6 +394,10 @@ u8 m68000_base_device::READ_EA_8(int ea)
{
return REG_D()[reg];
}
+ case 1: // An
+ {
+ return REG_A()[reg];
+ }
case 2: // (An)
{
u32 ea = REG_A()[reg];
@@ -423,6 +474,10 @@ u16 m68000_base_device::READ_EA_16(int ea)
{
return (u16)(REG_D()[reg]);
}
+ case 1: // An
+ {
+ return (u16)REG_A()[reg];
+ }
case 2: // (An)
{
u32 ea = REG_A()[reg];
@@ -500,6 +555,10 @@ u32 m68000_base_device::READ_EA_32(int ea)
{
return REG_D()[reg];
}
+ case 1: // An
+ {
+ return REG_A()[reg];
+ }
case 2: // (An)
{
u32 ea = REG_A()[reg];
@@ -1106,6 +1165,13 @@ void m68000_base_device::WRITE_EA_FPE(int mode, int reg, floatx80 fpr, uint32 di
break;
}
+ case 6: // (An) + (Xn) + d8
+ {
+ u32 ea = EA_AY_IX_32();
+ store_extended_float80(ea, fpr);
+ break;
+ }
+
case 7:
{
switch (reg)
@@ -1163,11 +1229,11 @@ void m68000_base_device::WRITE_EA_PACK(int ea, int k, floatx80 fpr)
void m68000_base_device::fpgen_rm_reg(u16 w2)
{
- int ea = m_ir & 0x3f;
- int rm = (w2 >> 14) & 0x1;
- int src = (w2 >> 10) & 0x7;
- int dst = (w2 >> 7) & 0x7;
- int opmode = w2 & 0x7f;
+ const int ea = m_ir & 0x3f;
+ const int rm = (w2 >> 14) & 0x1;
+ const int src = (w2 >> 10) & 0x7;
+ const int dst = (w2 >> 7) & 0x7;
+ const int opmode = w2 & 0x7f;
floatx80 source;
// fmovecr #$f, fp0 f200 5c0f
@@ -1383,7 +1449,7 @@ void m68000_base_device::fpgen_rm_reg(u16 w2)
}
case 0x06: // FLOGNP1
{
- m_fpr[dst] = floatx80_flognp1 (source);
+ m_fpr[dst] = floatx80_flognp1(source);
SET_CONDITION_CODES(m_fpr[dst]);
m_icount -= 594; // for MC68881
break;
@@ -1460,6 +1526,13 @@ void m68000_base_device::fpgen_rm_reg(u16 w2)
m_icount -= 6;
break;
}
+ case 0x1f: // FGETMAN
+ {
+ m_fpr[dst] = getman(source);
+ SET_CONDITION_CODES(m_fpr[dst]);
+ m_icount -= 31;
+ break;
+ }
case 0x60: // FSDIVS
case 0x20: // FDIV
{
@@ -1534,6 +1607,24 @@ void m68000_base_device::fpgen_rm_reg(u16 w2)
m_icount -= 9;
break;
}
+ case 0x30: // FSINCOS
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ {
+ m_fpr[dst] = source;
+ floatx80_fsin(m_fpr[dst]);
+ SET_CONDITION_CODES(m_fpr[dst]); // condition codes are set for the sine result
+
+ m_fpr[(w2 & 0x7)] = source;
+ floatx80_fcos(m_fpr[(w2 & 0x7)]);
+ m_icount -= 451;
+ break;
+ }
case 0x38: // FCMP
{
floatx80 res;
@@ -1743,17 +1834,6 @@ void m68000_base_device::fmovem(u16 w2)
int mode = (w2 >> 11) & 0x3;
int reglist = w2 & 0xff;
- u32 mem_addr = 0;
- switch (ea >> 3)
- {
- case 5: // (d16, An)
- mem_addr= EA_AY_DI_32();
- break;
- case 6: // (An) + (Xn) + d8
- mem_addr= EA_AY_IX_32();
- break;
- }
-
if (dir) // From FP regs to mem
{
switch (mode)
@@ -1797,8 +1877,7 @@ void m68000_base_device::fmovem(u16 w2)
{
int imode = (ea >> 3) & 0x7;
int reg = (ea & 0x7);
- int di_mode = imode == 5;
-
+ int di_mode = (imode == 5);
uint32 di_mode_ea = di_mode ? (REG_A()[reg] + MAKE_INT_16(m68ki_read_imm_16())) : 0;
for (i=0; i < 8; i++)
@@ -1832,23 +1911,17 @@ void m68000_base_device::fmovem(u16 w2)
{
int imode = (ea >> 3) & 0x7;
int reg = (ea & 0x7);
- int di_mode = imode == 5;
+ int di_mode = (imode == 5);
uint32 di_mode_ea = di_mode ? (REG_A()[reg] + MAKE_INT_16(m68ki_read_imm_16())) : 0;
for (i=0; i < 8; i++)
{
if (reglist & (1 << i))
{
- switch (ea >> 3)
+ m_fpr[7 - i] = READ_EA_FPE(imode, reg, di_mode_ea);
+ if (di_mode)
{
- case 5: // (d16, An)
- case 6: // (An) + (Xn) + d8
- m_fpr[7-i] = load_extended_float80(mem_addr);
- mem_addr += 12;
- break;
- default:
- m_fpr[7 - i] = READ_EA_FPE(imode, reg, di_mode_ea);
- break;
+ di_mode_ea += 12;
}
m_icount -= 2;
}
diff --git a/src/devices/cpu/m88000/m88000.cpp b/src/devices/cpu/m88000/m88000.cpp
index 130888d8cc3..b45a74b830e 100644
--- a/src/devices/cpu/m88000/m88000.cpp
+++ b/src/devices/cpu/m88000/m88000.cpp
@@ -996,14 +996,14 @@ void mc88100_device::execute(u32 const inst)
break;
case 0x740: // ff1: find first bit set
{
- unsigned const count = count_leading_zeros(m_r[S2]);
+ unsigned const count = count_leading_zeros_32(m_r[S2]);
m_r[D] = (count == 32) ? count : 31 - count;
}
break;
case 0x760: // ff0: find first bit clear
{
- unsigned const count = count_leading_ones(m_r[S2]);
+ unsigned const count = count_leading_ones_32(m_r[S2]);
m_r[D] = (count == 32) ? count : 31 - count;
}
diff --git a/src/devices/cpu/mips/r4000.cpp b/src/devices/cpu/mips/r4000.cpp
index eb2cff471d2..2b12a2089f5 100644
--- a/src/devices/cpu/mips/r4000.cpp
+++ b/src/devices/cpu/mips/r4000.cpp
@@ -1175,7 +1175,7 @@ void r4000_base_device::cpu_exception(u32 exception, u16 const vector)
u32 const iphw = CAUSE & SR & CAUSE_IPHW;
if (iphw)
- debug()->interrupt_hook(22 - count_leading_zeros((iphw - 1) & ~iphw));
+ debug()->interrupt_hook(22 - count_leading_zeros_32((iphw - 1) & ~iphw));
}
}
else
@@ -1530,7 +1530,7 @@ void r4000_base_device::cp0_tlbwi(u8 const index)
entry.pfn[0] = m_cp0[CP0_EntryLo0] & EL_WM;
entry.pfn[1] = m_cp0[CP0_EntryLo1] & EL_WM;
- entry.low_bit = 32 - count_leading_zeros((entry.mask >> 1) | 0xfff);
+ entry.low_bit = 32 - count_leading_zeros_32((entry.mask >> 1) | 0xfff);
LOGMASKED(LOG_TLB, "tlb write index %02d mask 0x%016x vpn2 0x%016x %c asid 0x%02x pfn0 0x%016x %c%c pfn1 0x%016x %c%c (%s)\n",
index, entry.mask,
diff --git a/src/devices/cpu/pdp8/hd6120.cpp b/src/devices/cpu/pdp8/hd6120.cpp
index ec72498d272..947225ae603 100644
--- a/src/devices/cpu/pdp8/hd6120.cpp
+++ b/src/devices/cpu/pdp8/hd6120.cpp
@@ -86,20 +86,34 @@
Register”), PC and the two stack pointers, include several which are
only implicitly used in execution: a TEMP register that latches ALU
outputs, the instruction register IR, and the output latch register OL
- that holds all addresses and data to be output on the DX bus. HD-6120
- also internally maintains a group of 3-bit registers whose path
- connects to TEMP, each of which contains the current memory extension
- fields, their mirrors or various flags. (This emulation extends the
- field registers to 4 bits to include the CTRLFF, PDF and PEX flags,
- which are neither readable nor output directly at any time.)
- Particular flag registers are enabled on the C0, C1 and EMA2 lines
- during the final writes of ISZ, DCA and JMS. The most important of
- these flag registers includes LINK, the interrupt enable flip-flop and
- the GT flag hitherto provided only on arithmetic extensions of some
- previous PDP-8 CPUs, though like MQ it conveys no specific purpose
- here. Another flag register contains the inverse of the active-low
- INTREQ input, the PWRON flag (set if STRTUP = VSS at RESET time,
- causing entry into panel mode) and 0 in its LSB.
+ that holds all addresses and data to be output on the DX bus.
+
+ HD-6120 also maintains a group of 3-bit internal registers whose data
+ path connects to TEMP. These are used to hold the current memory
+ extension fields, their mirrors and various flags. (This emulation
+ extends the field registers to 4 bits to include the CTRLFF, PDF and
+ PEX flags, which are neither readable nor output directly at any
+ time.) These 3-bit registers may be enabled on the C0, C1 and EMA2
+ lines at particular times, and the GTF, GCF, PRS, RDF, RIF and RIB
+ internal IOTs read various combinations of them into AC. They include:
+
+ MSB LSB Output conditions
+ -----------------------------------------
+ IF0 IF1 IF2 IFETCH, direct operands (except if FZ)
+ IB0 IB1 IB2 None (until transferred to IF)
+ ISF0 ISF1 ISF2 None
+ DF0 DF1 DF2 Indirect operand addressing, IOTs, etc.
+ DSF0 DSF1 DSF2 None
+ LINK GT IEFF DCA AC writes
+ INTREQ* PWRON 0 ISZ result writes
+ BTSTRAP PNLTRP HLTFLG JMS PC writes
+
+ The GT flag, like MQ, is not used for any specific purpose on the
+ HD-6120, unlike the arithmetic extensions of previous PDP-8 CPUs which
+ originally implemented them. The INTREQ flag is 1 when the input pin
+ is sampled active low and 0 when it is inactive. The PWRON flag is set
+ if STRTUP is sampled as VSS at RESET time; it causes the CPU to trap
+ into panel mode before executing its first instruction.
Undefined Group 3 OPRs and internal IOTs have no effect on the
HD-6120 except that both interrupts and panel requests are blocked
@@ -1001,6 +1015,7 @@ void hd6120_device::execute_run()
break;
case minor_state::PEX_1:
+ m_temp = m_ac;
m_state = minor_state::PEX_2;
break;
diff --git a/src/devices/cpu/psx/gte.cpp b/src/devices/cpu/psx/gte.cpp
index d48b206e84f..6305b4d7412 100644
--- a/src/devices/cpu/psx/gte.cpp
+++ b/src/devices/cpu/psx/gte.cpp
@@ -215,7 +215,7 @@ void gte::setcp2dr( uint32_t pc, int reg, uint32_t value )
break;
case 30:
- LZCR = (value & 0x80000000) == 0 ? count_leading_zeros(value) : count_leading_ones(value);
+ LZCR = (value & 0x80000000) == 0 ? count_leading_zeros_32(value) : count_leading_ones_32(value);
break;
case 31:
@@ -314,7 +314,7 @@ static inline uint32_t gte_divide( uint16_t numerator, uint16_t denominator )
0x00
};
- int shift = count_leading_zeros( denominator ) - 16;
+ int shift = count_leading_zeros_32( denominator ) - 16;
int r1 = ( denominator << shift ) & 0x7fff;
int r2 = table[ ( ( r1 + 0x40 ) >> 7 ) ] + 0x101;
diff --git a/src/devices/cpu/romp/romp.cpp b/src/devices/cpu/romp/romp.cpp
index d68988cb876..94e3da8591c 100644
--- a/src/devices/cpu/romp/romp.cpp
+++ b/src/devices/cpu/romp/romp.cpp
@@ -887,7 +887,7 @@ void romp_device::execute_run()
flags_log(m_gpr[R2]);
break;
case 0xf5: // clz: count leading zeros
- m_gpr[R2] = count_leading_zeros(u16(m_gpr[R3])) - 16;
+ m_gpr[R2] = count_leading_zeros_32(u16(m_gpr[R3])) - 16;
break;
case 0xf9: // mc03: move character zero from three
diff --git a/src/devices/cpu/sharc/sharc.cpp b/src/devices/cpu/sharc/sharc.cpp
index ded941af415..134611079a8 100644
--- a/src/devices/cpu/sharc/sharc.cpp
+++ b/src/devices/cpu/sharc/sharc.cpp
@@ -343,7 +343,10 @@ void adsp21062_device::iop_w(offs_t offset, uint32_t data)
case 0x1c:
{
m_core->dma[6].control = data;
- sharc_iop_delayed_w(0x1c, data, 1);
+ if (data & 0x1)
+ {
+ sharc_iop_delayed_w(0x1c, data, 1);
+ }
break;
}
@@ -360,9 +363,12 @@ void adsp21062_device::iop_w(offs_t offset, uint32_t data)
// DMA 7
case 0x1d:
- {
+ {
m_core->dma[7].control = data;
- sharc_iop_delayed_w(0x1d, data, 30);
+ if (data & 0x1)
+ {
+ sharc_iop_delayed_w(0x1d, data, 30);
+ }
break;
}
@@ -442,7 +448,7 @@ void adsp21062_device::external_dma_write(uint32_t address, uint64_t data)
All addresses in the 17-bit index registers are offset by 0x0002 0000, the
first internal RAM location, before they are used by the DMA controller.
*/
-
+
switch ((m_core->dma[6].control >> 6) & 0x3)
{
case 2: // 16/48 packing
@@ -972,6 +978,19 @@ void adsp21062_device::set_flag_input(int flag_num, int state)
}
}
+WRITE_LINE_MEMBER(adsp21062_device::write_stall)
+{
+ m_core->write_stalled = (state == 0) ? false : true;
+
+ if (m_enable_drc)
+ {
+ if (m_core->write_stalled)
+ spin_until_trigger(45757);
+ else
+ machine().scheduler().trigger(45757);
+ }
+}
+
void adsp21062_device::check_interrupts()
{
int i;
@@ -1028,8 +1047,24 @@ void adsp21062_device::execute_run()
}
else
{
+ if (m_core->write_stalled)
+ eat_cycles(m_core->icount);
+
if (m_core->idle && m_core->irq_pending == 0)
{
+ int dma_count = m_core->icount;
+
+ // run active DMAs even while idling
+ while (dma_count > 0 && m_core->dma_status & ((1 << 6) | (1 << 7)))
+ {
+ if (!m_core->write_stalled)
+ {
+ dma_run_cycle(6);
+ dma_run_cycle(7);
+ }
+ dma_count--;
+ }
+
m_core->icount = 0;
debugger_instruction_hook(m_core->daddr);
}
@@ -1037,9 +1072,9 @@ void adsp21062_device::execute_run()
{
check_interrupts();
m_core->idle = 0;
- }
+ }
- while (m_core->icount > 0 && !m_core->idle)
+ while (m_core->icount > 0 && !m_core->idle && !m_core->write_stalled)
{
m_core->pc = m_core->daddr;
m_core->daddr = m_core->faddr;
@@ -1126,6 +1161,12 @@ void adsp21062_device::execute_run()
}
}
+ if (!m_core->write_stalled)
+ {
+ dma_run_cycle(6);
+ dma_run_cycle(7);
+ }
+
--m_core->icount;
};
}
diff --git a/src/devices/cpu/sharc/sharc.h b/src/devices/cpu/sharc/sharc.h
index 6c9292c5193..f7d2d8701cd 100644
--- a/src/devices/cpu/sharc/sharc.h
+++ b/src/devices/cpu/sharc/sharc.h
@@ -103,6 +103,8 @@ public:
TIMER_CALLBACK_MEMBER(sharc_iop_delayed_write_callback);
TIMER_CALLBACK_MEMBER(sharc_dma_callback);
+ WRITE_LINE_MEMBER(write_stall);
+
void sharc_cfunc_unimplemented();
void sharc_cfunc_read_iop();
void sharc_cfunc_write_iop();
@@ -270,6 +272,7 @@ private:
int32_t chained_direction;
emu_timer *timer;
bool active;
+ bool chained;
};
@@ -379,6 +382,7 @@ private:
SHARC_DMA_OP dma_op[12];
uint32_t dma_status;
+ bool write_stalled;
int32_t interrupt_active;
@@ -475,6 +479,7 @@ private:
void schedule_dma_op(int channel, uint32_t src, uint32_t dst, int src_modifier, int dst_modifier, int src_count, int dst_count, int pmode);
void dma_op(int channel);
void sharc_dma_exec(int channel);
+ void dma_run_cycle(int channel);
void add_systemreg_write_latency_effect(int sysreg, uint32_t data, uint32_t prev_data);
inline void swap_register(uint32_t *a, uint32_t *b);
void systemreg_write_latency_effect();
diff --git a/src/devices/cpu/sharc/sharcdma.hxx b/src/devices/cpu/sharc/sharcdma.hxx
index fdbf7a0f635..e0df2cb5e54 100644
--- a/src/devices/cpu/sharc/sharcdma.hxx
+++ b/src/devices/cpu/sharc/sharcdma.hxx
@@ -10,7 +10,7 @@
void adsp21062_device::schedule_chained_dma_op(int channel, uint32_t dma_chain_ptr, int chained_direction)
{
- uint32_t op_ptr = 0x20000 + dma_chain_ptr;
+ uint32_t op_ptr = 0x20000 + (dma_chain_ptr & 0x1ffff);
uint32_t int_index = dm_read32(op_ptr - 0);
uint32_t int_modifier = dm_read32(op_ptr - 1);
@@ -49,10 +49,14 @@ void adsp21062_device::schedule_chained_dma_op(int channel, uint32_t dma_chain_p
m_core->dma_op[channel].chain_ptr = chain_ptr;
m_core->dma_op[channel].chained_direction = chained_direction;
+ m_core->dma_op[channel].chained = true;
m_core->dma_op[channel].active = true;
- int cycles = m_core->dma_op[channel].src_count / 4;
- m_core->dma_op[channel].timer->adjust(cycles_to_attotime(cycles), channel);
+ if (m_enable_drc)
+ {
+ int cycles = m_core->dma_op[channel].src_count / 4;
+ m_core->dma_op[channel].timer->adjust(cycles_to_attotime(cycles), channel);
+ }
// enable busy flag
m_core->dma_status |= (1 << channel);
@@ -74,15 +78,107 @@ void adsp21062_device::schedule_dma_op(int channel, uint32_t src, uint32_t dst,
m_core->dma_op[channel].pmode = pmode;
m_core->dma_op[channel].chain_ptr = 0;
+ m_core->dma_op[channel].chained = false;
m_core->dma_op[channel].active = true;
- int cycles = src_count / 4;
- m_core->dma_op[channel].timer->adjust(cycles_to_attotime(cycles), channel);
+ if (m_enable_drc)
+ {
+ int cycles = src_count / 4;
+ m_core->dma_op[channel].timer->adjust(cycles_to_attotime(cycles), channel);
+ }
// enable busy flag
m_core->dma_status |= (1 << channel);
}
+void adsp21062_device::dma_run_cycle(int channel)
+{
+ if (m_core->dma_status & (1 << channel))
+ {
+ uint32_t src = m_core->dma_op[channel].src;
+ uint32_t dst = m_core->dma_op[channel].dst;
+ int src_modifier = m_core->dma_op[channel].src_modifier;
+ int dst_modifier = m_core->dma_op[channel].dst_modifier;
+ int src_count = m_core->dma_op[channel].src_count;
+ //int dst_count = m_core->dma_op[channel].dst_count;
+ int pmode = m_core->dma_op[channel].pmode;
+
+ switch (pmode)
+ {
+ case DMA_PMODE_NO_PACKING:
+ {
+ uint32_t data = dm_read32(src);
+ dm_write32(dst, data);
+ src += src_modifier;
+ dst += dst_modifier;
+ src_count--;
+ break;
+ }
+ case DMA_PMODE_16_32:
+ {
+ uint32_t data = ((dm_read32(src + 0) & 0xffff) << 16) | (dm_read32(src + 1) & 0xffff);
+
+ dm_write32(dst, data);
+ src += src_modifier * 2;
+ dst += dst_modifier;
+ src_count -= 2;
+ break;
+ }
+ case DMA_PMODE_8_48:
+ {
+ uint64_t data = ((uint64_t)(dm_read32(src + 0) & 0xff) << 0) |
+ ((uint64_t)(dm_read32(src + 1) & 0xff) << 8) |
+ ((uint64_t)(dm_read32(src + 2) & 0xff) << 16) |
+ ((uint64_t)(dm_read32(src + 3) & 0xff) << 24) |
+ ((uint64_t)(dm_read32(src + 4) & 0xff) << 32) |
+ ((uint64_t)(dm_read32(src + 5) & 0xff) << 40);
+
+ pm_write48(dst, data);
+ src += src_modifier * 6;
+ dst += dst_modifier;
+ src_count -= 6;
+ break;
+ }
+ default:
+ {
+ fatalerror("SHARC: dma_op: unimplemented packing mode %d\n", pmode);
+ }
+ }
+
+ m_core->dma_op[channel].src_count = src_count;
+ m_core->dma_op[channel].src = src;
+ m_core->dma_op[channel].dst = dst;
+
+ if (src_count <= 0)
+ {
+ // clear busy flag
+ m_core->dma_status &= ~(1 << channel);
+
+ m_core->dma_op[channel].active = false;
+
+ // raise interrupt if
+ // * non-chained DMA
+ // * chained-DMA with PCI set in the next chain pointer
+ if (!m_core->dma_op[channel].chained || (m_core->dma_op[channel].chained && (m_core->dma_op[channel].chain_ptr & 0x20000)))
+ {
+ m_core->irptl |= (1 << (channel + 10));
+
+ // DMA interrupt
+ if (m_core->imask & (1 << (channel + 10)))
+ {
+ m_core->irq_pending |= 1 << (channel + 10);
+ }
+ }
+
+ // schedule chained op if chaining
+ if ((m_core->dma_op[channel].chain_ptr & 0x1ffff) != 0)
+ {
+ schedule_chained_dma_op(channel, m_core->dma_op[channel].chain_ptr, m_core->dma_op[channel].chained_direction);
+ }
+ }
+ }
+}
+
void adsp21062_device::dma_op(int channel)
{
int i;
@@ -94,7 +190,7 @@ void adsp21062_device::dma_op(int channel)
//int dst_count = m_core->dma_op[channel].dst_count;
int pmode = m_core->dma_op[channel].pmode;
- //printf("dma_op: %08X, %08X, %08X, %08X, %08X, %d\n", src, dst, src_modifier, dst_modifier, src_count, pmode);
+ //printf("dma_op: ch %d: %08X, %08X, %08X, %08X, %08X, %d at %08X\n", channel, src, dst, src_modifier, dst_modifier, src_count, pmode, m_core->pc);
switch (pmode)
{
@@ -191,36 +287,36 @@ void adsp21062_device::sharc_dma_exec(int channel)
{
uint32_t dma_chain_ptr = m_core->dma[channel].chain_ptr & 0x1ffff;
- schedule_chained_dma_op(channel, dma_chain_ptr, tran);
+ schedule_chained_dma_op(channel, dma_chain_ptr, tran);
}
else
{
if (tran) // Transmit to external
{
- dst = m_core->dma[channel].ext_index;
- dst_modifier = m_core->dma[channel].ext_modifier;
- dst_count = m_core->dma[channel].ext_count;
- src = (m_core->dma[channel].int_index & 0x1ffff) | 0x20000;
- src_modifier = m_core->dma[channel].int_modifier;
- src_count = m_core->dma[channel].int_count;
+ dst = m_core->dma[channel].ext_index;
+ dst_modifier = m_core->dma[channel].ext_modifier;
+ dst_count = m_core->dma[channel].ext_count;
+ src = (m_core->dma[channel].int_index & 0x1ffff) | 0x20000;
+ src_modifier = m_core->dma[channel].int_modifier;
+ src_count = m_core->dma[channel].int_count;
}
else // Receive from external
{
- src = m_core->dma[channel].ext_index;
- src_modifier = m_core->dma[channel].ext_modifier;
- src_count = m_core->dma[channel].ext_count;
- dst = (m_core->dma[channel].int_index & 0x1ffff) | 0x20000;
- dst_modifier = m_core->dma[channel].int_modifier;
- dst_count = m_core->dma[channel].int_count;
+ src = m_core->dma[channel].ext_index;
+ src_modifier = m_core->dma[channel].ext_modifier;
+ src_count = m_core->dma[channel].ext_count;
+ dst = (m_core->dma[channel].int_index & 0x1ffff) | 0x20000;
+ dst_modifier = m_core->dma[channel].int_modifier;
+ dst_count = m_core->dma[channel].int_count;
}
if (dtype)
- //if (src_count != dst_count)
+ //if (src_count != dst_count)
{
pmode = DMA_PMODE_8_48;
}
- schedule_dma_op(channel, src, dst, src_modifier, dst_modifier, src_count, dst_count, pmode);
+ schedule_dma_op(channel, src, dst, src_modifier, dst_modifier, src_count, dst_count, pmode);
}
}
@@ -239,7 +335,7 @@ TIMER_CALLBACK_MEMBER(adsp21062_device::sharc_dma_callback)
}
dma_op(channel);
- if (m_core->dma_op[channel].chain_ptr != 0)
+ if ((m_core->dma_op[channel].chain_ptr & 0x1ffff) != 0)
{
schedule_chained_dma_op(channel, m_core->dma_op[channel].chain_ptr, m_core->dma_op[channel].chained_direction);
}
diff --git a/src/devices/cpu/tms32031/32031ops.hxx b/src/devices/cpu/tms32031/32031ops.hxx
index da59340b7d9..06533f09abb 100644
--- a/src/devices/cpu/tms32031/32031ops.hxx
+++ b/src/devices/cpu/tms32031/32031ops.hxx
@@ -393,7 +393,7 @@ void tms3203x_device::int2float(tmsreg &srcdst)
// positive values; count leading zeros and shift
else if ((int32_t)man > 0)
{
- cnt = count_leading_zeros(man);
+ cnt = count_leading_zeros_32(man);
man <<= cnt;
exp = 31 - cnt;
}
@@ -401,7 +401,7 @@ void tms3203x_device::int2float(tmsreg &srcdst)
// negative values; count leading ones and shift
else
{
- cnt = count_leading_ones(man);
+ cnt = count_leading_ones_32(man);
man <<= cnt;
exp = 31 - cnt;
}
@@ -585,13 +585,13 @@ void tms3203x_device::addf(tmsreg &dst, tmsreg &src1, tmsreg &src2)
{
if (man > 0)
{
- cnt = count_leading_zeros((uint32_t)man);
+ cnt = count_leading_zeros_32((uint32_t)man);
man <<= cnt;
exp -= cnt;
}
else
{
- cnt = count_leading_ones((uint32_t)man);
+ cnt = count_leading_ones_32((uint32_t)man);
man <<= cnt;
exp -= cnt;
}
@@ -698,13 +698,13 @@ void tms3203x_device::subf(tmsreg &dst, tmsreg &src1, tmsreg &src2)
{
if (man > 0)
{
- cnt = count_leading_zeros((uint32_t)man);
+ cnt = count_leading_zeros_32((uint32_t)man);
man <<= cnt;
exp -= cnt;
}
else
{
- cnt = count_leading_ones((uint32_t)man);
+ cnt = count_leading_ones_32((uint32_t)man);
man <<= cnt;
exp -= cnt;
}
@@ -847,13 +847,13 @@ void tms3203x_device::norm(tmsreg &dst, tmsreg &src)
int cnt;
if (man > 0)
{
- cnt = count_leading_zeros((uint32_t)man);
+ cnt = count_leading_zeros_32((uint32_t)man);
man <<= cnt;
exp -= cnt;
}
else
{
- cnt = count_leading_ones((uint32_t)man);
+ cnt = count_leading_ones_32((uint32_t)man);
man <<= cnt;
exp -= cnt;
}
diff --git a/src/devices/cpu/tms34010/34010ops.hxx b/src/devices/cpu/tms34010/34010ops.hxx
index 1c71439107e..aa398e3c776 100644
--- a/src/devices/cpu/tms34010/34010ops.hxx
+++ b/src/devices/cpu/tms34010/34010ops.hxx
@@ -2458,16 +2458,16 @@ void tms340x0_device::setcdp(uint16_t op)
// .. only single bit set, pitch is power of two!
case 1:
{
- m_convdp = 32 - count_leading_zeros(dptch);
+ m_convdp = 32 - count_leading_zeros_32(dptch);
COUNT_CYCLES(4);
return;
}
// .. two bits, we can decompose it to sum of two power of two numbers
case 2:
{
- uint8_t first_one = count_leading_zeros(dptch);
+ uint8_t first_one = count_leading_zeros_32(dptch);
uint8_t v1 = 32 - first_one;
- uint8_t v2 = 32 - count_leading_zeros(dptch & ~(1 << (first_one - 1)));
+ uint8_t v2 = 32 - count_leading_zeros_32(dptch & ~(1 << (first_one - 1)));
m_convdp = v2 | (v1 << 8);
COUNT_CYCLES(6);
diff --git a/src/devices/cpu/uml.cpp b/src/devices/cpu/uml.cpp
index 8b0c7023f58..6a81d63400e 100644
--- a/src/devices/cpu/uml.cpp
+++ b/src/devices/cpu/uml.cpp
@@ -631,14 +631,9 @@ void uml::instruction::simplify()
if (m_param[1].is_immediate())
{
if (m_size == 4)
- convert_to_mov_immediate(count_leading_zeros(m_param[1].immediate()));
+ convert_to_mov_immediate(count_leading_zeros_32(m_param[1].immediate()));
else if (m_size == 8)
- {
- if ((m_param[1].immediate() >> 32) == 0)
- convert_to_mov_immediate(32 + count_leading_zeros(m_param[1].immediate()));
- else
- convert_to_mov_immediate(count_leading_zeros(m_param[1].immediate() >> 32));
- }
+ convert_to_mov_immediate(count_leading_zeros_64(m_param[1].immediate()));
}
break;
diff --git a/src/devices/cpu/unsp/unsp_fxxx.cpp b/src/devices/cpu/unsp/unsp_fxxx.cpp
index 4c1f41245ad..13b7bd27995 100644
--- a/src/devices/cpu/unsp/unsp_fxxx.cpp
+++ b/src/devices/cpu/unsp/unsp_fxxx.cpp
@@ -396,11 +396,11 @@ void unsp_12_device::execute_fxxx_101_group(uint16_t op)
if (r4 & 0x8000)
{
- m_core->m_r[REG_R2] = count_leading_ones(0xffff0000 | r4) - 17;
+ m_core->m_r[REG_R2] = count_leading_ones_32(0xffff0000 | r4) - 17;
}
else
{
- m_core->m_r[REG_R2] = count_leading_zeros(r4) - 17; // -17 because count_leading_zeros works with 32-bit values
+ m_core->m_r[REG_R2] = count_leading_zeros_32(r4) - 17; // -17 because count_leading_zeros_32 works with 32-bit values
}
return;
diff --git a/src/devices/cpu/z80/kp69.cpp b/src/devices/cpu/z80/kp69.cpp
index 84be060c4c7..0e194138b2c 100644
--- a/src/devices/cpu/z80/kp69.cpp
+++ b/src/devices/cpu/z80/kp69.cpp
@@ -409,14 +409,14 @@ int kp69_base_device::z80daisy_irq_ack()
// Restrict to high-priority interrupts if any of those are pending
if ((m_irr & m_pgr) != 0)
{
- level = 31 - count_leading_zeros(u32(m_irr & m_pgr));
+ level = 31 - count_leading_zeros_32(u32(m_irr & m_pgr));
assert(level >= 0 && level < 16);
if ((1 << level) < (m_isr & m_pgr))
level = -1;
}
else if (m_irr != 0 && (m_isr & m_pgr) == 0)
{
- level = 31 - count_leading_zeros(u32(m_irr));
+ level = 31 - count_leading_zeros_32(u32(m_irr));
assert(level >= 0 && level < 16);
if ((1 << level) < m_isr)
level = -1;
@@ -461,7 +461,7 @@ void kp69_base_device::z80daisy_irq_reti()
}
else if (m_isr != 0)
{
- int level = 31 - count_leading_zeros(u32((m_isr & m_pgr) != 0 ? (m_isr & m_pgr) : m_isr));
+ int level = 31 - count_leading_zeros_32(u32((m_isr & m_pgr) != 0 ? (m_isr & m_pgr) : m_isr));
assert(level >= 0 && level < 16);
m_isr &= ~(1 << level);
diff --git a/src/devices/machine/atmel_arm_aic.cpp b/src/devices/machine/atmel_arm_aic.cpp
index 258bb3ae438..5e80a471477 100644
--- a/src/devices/machine/atmel_arm_aic.cpp
+++ b/src/devices/machine/atmel_arm_aic.cpp
@@ -53,7 +53,7 @@ uint32_t arm_aic_device::irq_vector_r()
int midx = -1;
do
{
- uint8_t idx = 31 - count_leading_zeros(mask);
+ uint8_t idx = 31 - count_leading_zeros_32(mask);
if ((int)(m_aic_smr[idx] & 7) >= pri)
{
midx = idx;
@@ -146,7 +146,7 @@ void arm_aic_device::check_irqs()
int pri = get_level();
do
{
- uint8_t idx = 31 - count_leading_zeros(mask);
+ uint8_t idx = 31 - count_leading_zeros_32(mask);
if ((int)(m_aic_smr[idx] & 7) > pri)
{
m_core_status |= 2;
diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp
index 7c43c35838d..cc1f92c5755 100644
--- a/src/devices/machine/netlist.cpp
+++ b/src/devices/machine/netlist.cpp
@@ -828,7 +828,8 @@ void netlist_mame_stream_output_device::sound_update_fill(write_stream_view &tar
int sampindex;
for (sampindex = 0; sampindex < m_buffer.size(); sampindex++)
target.put(sampindex, m_buffer[sampindex]);
- target.fill(m_cur, sampindex);
+ if (sampindex < target.samples())
+ target.fill(m_cur, sampindex);
}
diff --git a/src/devices/machine/ns32202.cpp b/src/devices/machine/ns32202.cpp
index 1a84ad180e9..4eb6f67f487 100644
--- a/src/devices/machine/ns32202.cpp
+++ b/src/devices/machine/ns32202.cpp
@@ -275,7 +275,7 @@ void ns32202_device::interrupt(void *ptr, s32 param)
// check equal priority unmasked pending cascade interrupt
if ((m_csrc & mask) && (m_ipnd & mask) && !(m_imsk & mask))
{
- LOGMASKED(LOG_STATE, "unmasked pending cascade in-service interrupt %d\n", 31 - count_leading_zeros(mask));
+ LOGMASKED(LOG_STATE, "unmasked pending cascade in-service interrupt %d\n", 31 - count_leading_zeros_32(mask));
accept = true;
}
@@ -285,7 +285,7 @@ void ns32202_device::interrupt(void *ptr, s32 param)
// check unmasked pending interrupt
if ((m_ipnd & mask) && !(m_imsk & mask))
{
- LOGMASKED(LOG_STATE, "unmasked pending interrupt %d\n", 31 - count_leading_zeros(mask));
+ LOGMASKED(LOG_STATE, "unmasked pending interrupt %d\n", 31 - count_leading_zeros_32(mask));
accept = true;
break;
}
@@ -324,7 +324,7 @@ u8 ns32202_device::interrupt_acknowledge(bool side_effects)
mask = (mask << 1) | (mask >> 15);
}
- unsigned const number = 31 - count_leading_zeros(mask);
+ unsigned const number = 31 - count_leading_zeros_32(mask);
if (side_effects)
{
LOGMASKED(LOG_STATE, "acknowledge highest priority unmasked interrupt %d\n", number);
@@ -400,7 +400,7 @@ u8 ns32202_device::interrupt_return(bool side_effects)
// rotate priority mask
mask = (mask << 1) | (mask >> 15);
}
- unsigned const number = 31 - count_leading_zeros(mask);
+ unsigned const number = 31 - count_leading_zeros_32(mask);
if (side_effects)
{
diff --git a/src/devices/machine/sensorboard.cpp b/src/devices/machine/sensorboard.cpp
index 8970726cf50..3d4188396dd 100644
--- a/src/devices/machine/sensorboard.cpp
+++ b/src/devices/machine/sensorboard.cpp
@@ -497,7 +497,7 @@ INPUT_CHANGED_MEMBER(sensorboard_device::sensor)
INPUT_CHANGED_MEMBER(sensorboard_device::ui_spawn)
{
- u8 pos = (newval) ? (u8)param : 32 - count_leading_zeros(m_inp_spawn->read());
+ u8 pos = (newval) ? (u8)param : 32 - count_leading_zeros_32(m_inp_spawn->read());
if (pos == 0 || pos > m_maxspawn)
return;
diff --git a/src/devices/machine/smartmed.cpp b/src/devices/machine/smartmed.cpp
index 0d0643c1965..0a7c8911571 100644
--- a/src/devices/machine/smartmed.cpp
+++ b/src/devices/machine/smartmed.cpp
@@ -124,9 +124,8 @@ void nand_device::device_start()
image_init_result smartmedia_image_device::smartmedia_format_1()
{
SM_disk_image_header custom_header;
- int bytes_read;
- bytes_read = fread(&custom_header, sizeof(custom_header));
+ const int bytes_read = fread(&custom_header, sizeof(custom_header));
if (bytes_read != sizeof(custom_header))
{
return image_init_result::FAIL;
@@ -207,6 +206,7 @@ int smartmedia_image_device::detect_geometry( uint8_t id1, uint8_t id2)
{
switch (id2)
{
+ case 0x73 : m_page_data_size = 0x0200; m_num_pages = 0x08000; m_page_total_size = 0x0210; m_log2_pages_per_block = 5; result = true; break;
case 0x75 : m_page_data_size = 0x0200; m_num_pages = 0x10000; m_page_total_size = 0x0210; m_log2_pages_per_block = 5; result = true; break;
}
}
@@ -219,9 +219,8 @@ int smartmedia_image_device::detect_geometry( uint8_t id1, uint8_t id2)
image_init_result smartmedia_image_device::smartmedia_format_2()
{
disk_image_format_2_header custom_header;
- int bytes_read, i, j;
- bytes_read = fread(&custom_header, sizeof(custom_header));
+ const int bytes_read = fread(&custom_header, sizeof(custom_header));
if (bytes_read != sizeof(custom_header))
{
return image_init_result::FAIL;
@@ -250,18 +249,19 @@ image_init_result smartmedia_image_device::smartmedia_format_2()
m_accumulated_status = 0;
m_pagereg = std::make_unique<uint8_t[]>(m_page_total_size);
m_id_len = 3;
- memcpy( m_id, custom_header.data1, m_id_len);
+ memcpy(m_id, custom_header.data1, m_id_len);
m_mp_opcode = 0;
m_col_address_cycles = 1;
m_row_address_cycles = (m_num_pages > 0x10000) ? 3 : 2;
m_sequential_row_read = 1;
- for (i=0;i<8;i++)
+ for (int i = 0; i < 8; i++)
{
- memcpy( m_data_uid_ptr.get() + i * 32, custom_header.data2, 16);
- for (j=0;j<16;j++) m_data_uid_ptr[i*32+16+j] = custom_header.data2[j] ^ 0xFF;
+ memcpy(m_data_uid_ptr.get() + i * 32, custom_header.data2, 16);
+ for (int j = 0; j < 16; j++)
+ m_data_uid_ptr[i * 32 + 16 + j] = custom_header.data2[j] ^ 0xFF;
}
- memcpy( m_data_uid_ptr.get() + 256, custom_header.data3, 16);
+ memcpy(m_data_uid_ptr.get() + 256, custom_header.data3, 16);
fread(m_feeprom_data, m_page_total_size*m_num_pages);
@@ -281,9 +281,9 @@ image_init_result smartmedia_image_device::call_load()
result = smartmedia_format_1();
if (result != image_init_result::PASS)
{
- // try format 2
- fseek( position, SEEK_SET);
- result = smartmedia_format_2();
+ // try format 2
+ fseek(position, SEEK_SET);
+ result = smartmedia_format_2();
}
return result;
}
@@ -299,10 +299,9 @@ void smartmedia_image_device::call_unload()
if (m_image_format == 1)
{
SM_disk_image_header custom_header;
- int bytes_read;
- fseek( 0, SEEK_SET);
- bytes_read = fread( &custom_header, sizeof( custom_header));
- if (bytes_read == sizeof( custom_header))
+ fseek(0, SEEK_SET);
+ const int bytes_read = fread(&custom_header, sizeof(custom_header));
+ if (bytes_read == sizeof(custom_header))
{
if (custom_header.version == 0)
{
@@ -337,7 +336,7 @@ void smartmedia_image_device::call_unload()
m_status = 0xC0;
m_accumulated_status = 0;
m_pagereg = std::make_unique<uint8_t[]>(m_page_total_size);
- memset( m_id, 0, sizeof( m_id));
+ memset(m_id, 0, sizeof(m_id));
m_id_len = 0;
m_mp_opcode = 0;
m_mode_3065 = 0;
@@ -390,8 +389,8 @@ void nand_device::command_w(uint8_t data)
m_mode_3065 = 0;
if (!m_write_rnb.isnull())
{
- m_write_rnb( 0);
- m_write_rnb( 1);
+ m_write_rnb(0);
+ m_write_rnb(1);
}
break;
case 0x00: // Read (1st cycle)
@@ -422,10 +421,10 @@ void nand_device::command_w(uint8_t data)
}
else
{
- m_mode = SM_M_READ;
- m_pointer_mode = SM_PM_C;
- m_page_addr = 0;
- m_addr_load_ptr = 0;
+ m_mode = SM_M_READ;
+ m_pointer_mode = SM_PM_C;
+ m_page_addr = 0;
+ m_addr_load_ptr = 0;
}
break;
case 0x80: // Page Program (1st cycle)
@@ -444,11 +443,10 @@ void nand_device::command_w(uint8_t data)
}
else
{
- int i;
m_status = (m_status & 0x80) | m_accumulated_status;
//logerror( "smartmedia: program, page_addr %08X\n", m_page_addr);
- for (i=0; i<m_page_total_size; i++)
- m_feeprom_data[m_page_addr*m_page_total_size + i] &= m_pagereg[i];
+ for (int i = 0; i < m_page_total_size; i++)
+ m_feeprom_data[m_page_addr * m_page_total_size + i] &= m_pagereg[i];
m_status |= 0x40;
if (data == 0x15)
m_accumulated_status = m_status & 0x1f;
@@ -457,13 +455,13 @@ void nand_device::command_w(uint8_t data)
m_mode = SM_M_INIT;
if (!m_write_rnb.isnull())
{
- m_write_rnb( 0);
- m_write_rnb( 1);
+ m_write_rnb(0);
+ m_write_rnb(1);
}
}
break;
- /*case 0x11:
- break;*/
+ //case 0x11:
+ // break;
case 0x60: // Block Erase (1st cycle)
m_mode = SM_M_ERASE;
m_page_addr = 0;
@@ -486,22 +484,22 @@ void nand_device::command_w(uint8_t data)
m_pointer_mode = SM_PM_A;
if (!m_write_rnb.isnull())
{
- m_write_rnb( 0);
- m_write_rnb( 1);
+ m_write_rnb(0);
+ m_write_rnb(1);
}
}
break;
case 0x70: // Read Status
m_mode = SM_M_READSTATUS;
break;
- /*case 0x71:
- break;*/
+ //case 0x71:
+ // break;
case 0x90: // Read ID
m_mode = SM_M_READID;
m_addr_load_ptr = 0;
break;
- /*case 0x91:
- break;*/
+ //case 0x91:
+ // break;
case 0x30: // Read (2nd cycle)
if (m_col_address_cycles == 1)
{
@@ -523,8 +521,8 @@ void nand_device::command_w(uint8_t data)
{
if (!m_write_rnb.isnull())
{
- m_write_rnb( 0);
- m_write_rnb( 1);
+ m_write_rnb(0);
+ m_write_rnb(1);
}
}
}
@@ -622,12 +620,12 @@ void nand_device::address_w(uint8_t data)
if (m_addr_load_ptr < m_col_address_cycles)
{
m_byte_addr &= ~(0xFF << (m_addr_load_ptr * 8));
- m_byte_addr |= (data << (m_addr_load_ptr * 8));
+ m_byte_addr |= (data << (m_addr_load_ptr * 8));
}
else if (m_addr_load_ptr < m_col_address_cycles + m_row_address_cycles)
{
m_page_addr &= ~(0xFF << ((m_addr_load_ptr - m_col_address_cycles) * 8));
- m_page_addr |= (data << ((m_addr_load_ptr - m_col_address_cycles) * 8));
+ m_page_addr |= (data << ((m_addr_load_ptr - m_col_address_cycles) * 8));
}
}
m_addr_load_ptr++;
@@ -636,7 +634,7 @@ void nand_device::address_w(uint8_t data)
if (m_addr_load_ptr < m_row_address_cycles)
{
m_page_addr &= ~(0xFF << (m_addr_load_ptr * 8));
- m_page_addr |= (data << (m_addr_load_ptr * 8));
+ m_page_addr |= (data << (m_addr_load_ptr * 8));
}
m_addr_load_ptr++;
break;
@@ -645,7 +643,7 @@ void nand_device::address_w(uint8_t data)
if (m_addr_load_ptr < m_col_address_cycles)
{
m_byte_addr &= ~(0xFF << (m_addr_load_ptr * 8));
- m_byte_addr |= (data << (m_addr_load_ptr * 8));
+ m_byte_addr |= (data << (m_addr_load_ptr * 8));
}
m_addr_load_ptr++;
break;
@@ -682,7 +680,10 @@ uint8_t nand_device::data_r()
{
if (m_byte_addr < m_page_total_size)
{
- reply = m_feeprom_data[m_page_addr*m_page_total_size + m_byte_addr];
+ if (m_page_addr < m_num_pages)
+ reply = m_feeprom_data[m_page_addr * m_page_total_size + m_byte_addr];
+ else
+ reply = 0xff;
}
else
{
@@ -691,7 +692,11 @@ uint8_t nand_device::data_r()
}
else
{
- reply = m_data_uid_ptr[m_page_addr*m_page_total_size + m_byte_addr];
+ // FIXME: this appears to be incorrect, m_data_uid_ptr is a smaller structure of 256*16
+ // this code would always result in reading past the buffer
+ uint32_t addr = m_page_addr * m_page_total_size + m_byte_addr;
+ if (addr < 256 + 16)
+ reply = m_data_uid_ptr[addr];
}
m_byte_addr++;
if ((m_byte_addr == m_page_total_size) && (m_sequential_row_read != 0))
diff --git a/src/devices/machine/z80pio.cpp b/src/devices/machine/z80pio.cpp
index d269891e333..e1664055f21 100644
--- a/src/devices/machine/z80pio.cpp
+++ b/src/devices/machine/z80pio.cpp
@@ -601,11 +601,6 @@ void z80pio_device::pio_port::control_write(uint8_t data)
// load interrupt vector
m_vector = data;
if (LOG) m_device->logerror("Z80PIO Port %c Interrupt Vector: %02x\n", 'A' + m_index, data);
-
- // set interrupt enable
- m_icw |= ICW_ENABLE_INT;
- m_ie = true;
- check_interrupts();
}
else
{
diff --git a/src/devices/sound/c140.cpp b/src/devices/sound/c140.cpp
index c6e5a05271e..b04a35a0f31 100644
--- a/src/devices/sound/c140.cpp
+++ b/src/devices/sound/c140.cpp
@@ -478,8 +478,10 @@ inline u8 c140_device::keyon_status_read(u16 offset)
u8 c140_device::c140_r(offs_t offset)
{
offset &= 0x1ff;
- if ((offset & 0xf) == 0x5)
+
+ if ((offset & 0xf) == 0x5 && offset < 0x180)
return keyon_status_read(offset);
+
return m_REG[offset];
}
@@ -552,9 +554,14 @@ void c140_device::c140_w(offs_t offset, u8 data)
u8 c219_device::c219_r(offs_t offset)
{
+ offset &= 0x1ff;
+
// assume same as c140
// TODO: what happens here on reading unmapped voice regs?
- return c140_r(offset);
+ if ((offset & 0xf) == 0x5 && offset < 0x100)
+ return keyon_status_read(offset);
+
+ return m_REG[offset];
}
diff --git a/src/devices/video/dl1416.cpp b/src/devices/video/dl1416.cpp
index 2508bb179fb..4321192e981 100644
--- a/src/devices/video/dl1416.cpp
+++ b/src/devices/video/dl1416.cpp
@@ -185,15 +185,12 @@ dl1414_device::dl1414_device(
device_t *owner,
u32 clock)
: device_t(mconfig, type, tag, owner, clock)
- , m_update_cb(*this)
- , m_digit_ram{ 0x00, 0x00, 0x00, 0x00 }
- , m_cursor_state{ false, false, false, false }
, m_wr_in(true)
- , m_ce_in(true)
- , m_ce_latch(true)
, m_addr_in(0x00)
- , m_addr_latch(0x00)
, m_data_in(0x00)
+ , m_update_cb(*this)
+ , m_digit_ram{ 0x00, 0x00, 0x00, 0x00 }
+ , m_cursor_state{ false, false, false, false }
{
}
@@ -204,7 +201,10 @@ dl1416_device::dl1416_device(
device_t *owner,
u32 clock)
: dl1414_device(mconfig, type, tag, owner, clock)
+ , m_ce_in(true)
+ , m_ce_latch(true)
, m_cu_in(true)
+ , m_addr_latch(0x00)
{
}
@@ -220,18 +220,12 @@ void dl1414_device::device_start()
save_item(NAME(m_digit_ram));
save_item(NAME(m_cursor_state));
save_item(NAME(m_wr_in));
- save_item(NAME(m_ce_in));
- save_item(NAME(m_ce_latch));
save_item(NAME(m_addr_in));
- save_item(NAME(m_addr_latch));
save_item(NAME(m_data_in));
// set initial state for input lines
m_wr_in = true;
- m_ce_in = true;
- m_ce_latch = true;
m_addr_in = 0x00;
- m_addr_latch = 0x00;
m_data_in = 0x00;
// randomise internal RAM
@@ -249,10 +243,16 @@ void dl1416_device::device_start()
dl1414_device::device_start();
// register for state saving
+ save_item(NAME(m_ce_in));
+ save_item(NAME(m_ce_latch));
save_item(NAME(m_cu_in));
+ save_item(NAME(m_addr_latch));
// set initial state for input lines
+ m_ce_in = true;
+ m_ce_latch = true;
m_cu_in = true;
+ m_addr_latch = 0x00;
}
//-------------------------------------------------
@@ -277,6 +277,16 @@ WRITE_LINE_MEMBER( dl1414_device::wr_w )
{
m_wr_in = bool(state);
if (m_wr_in)
+ bus_w(m_addr_in, m_data_in);
+ }
+}
+
+WRITE_LINE_MEMBER( dl1416_device::wr_w )
+{
+ if (bool(state) != m_wr_in)
+ {
+ m_wr_in = bool(state);
+ if (m_wr_in)
{
if (!m_ce_latch)
bus_w(m_addr_latch, m_data_in);
@@ -289,7 +299,7 @@ WRITE_LINE_MEMBER( dl1414_device::wr_w )
}
}
-WRITE_LINE_MEMBER( dl1414_device::ce_w )
+WRITE_LINE_MEMBER( dl1416_device::ce_w )
{
m_ce_in = bool(state);
}
diff --git a/src/devices/video/dl1416.h b/src/devices/video/dl1416.h
index 9c4b6228ee3..ce1d61071f4 100644
--- a/src/devices/video/dl1416.h
+++ b/src/devices/video/dl1416.h
@@ -7,7 +7,7 @@
* 4-Digit 16-Segment Alphanumeric Intelligent Display
* with Memory/Decoder/Driver
*
- * See video/dl1416.c for more info
+ * See video/dl1416.cpp for more info
*
****************************************************************************/
@@ -36,8 +36,7 @@ public:
auto update() { return m_update_cb.bind(); }
// signal-level interface
- DECLARE_WRITE_LINE_MEMBER(wr_w); // write strobe (rising edge)
- DECLARE_WRITE_LINE_MEMBER(ce_w); // chip enable (active low)
+ virtual DECLARE_WRITE_LINE_MEMBER(wr_w); // write strobe (rising edge)
void addr_w(u8 state);
void data_w(u8 state);
@@ -59,23 +58,24 @@ protected:
void set_cursor_state(offs_t offset, bool state);
virtual u16 translate(u8 digit, bool cursor) const = 0;
+ // input line state
+ bool m_wr_in;
+ u8 m_addr_in;
+ u8 m_data_in;
+
private:
devcb_write16 m_update_cb;
// internal state
u8 m_digit_ram[4]; // holds the digit code for each position
bool m_cursor_state[4]; // holds the cursor state for each position
-
- // input line state
- bool m_wr_in;
- bool m_ce_in, m_ce_latch;
- u8 m_addr_in, m_addr_latch;
- u8 m_data_in;
};
class dl1416_device : public dl1414_device
{
public:
+ virtual DECLARE_WRITE_LINE_MEMBER(wr_w) override;
+ DECLARE_WRITE_LINE_MEMBER(ce_w); // chip enable (active low)
DECLARE_WRITE_LINE_MEMBER(cu_w); // cursor enable (active low)
protected:
@@ -93,7 +93,9 @@ protected:
private:
// input line state
+ bool m_ce_in, m_ce_latch;
bool m_cu_in;
+ u8 m_addr_latch;
};
#endif // MAME_VIDEO_DL1416_H
diff --git a/src/devices/video/hd61830.cpp b/src/devices/video/hd61830.cpp
index 55bf2bbd588..235d250b405 100644
--- a/src/devices/video/hd61830.cpp
+++ b/src/devices/video/hd61830.cpp
@@ -440,7 +440,7 @@ void hd61830_device::draw_char(bitmap_ind16 &bitmap, const rectangle &cliprect,
{
// cursor off, character blink
if (!cursor)
- pixel = m_cursor ? pixel : 0;
+ pixel = m_cursor ? 1 : pixel;
// cursor blink
if (cursor && (cl == m_cp))
@@ -483,8 +483,8 @@ void hd61830_device::update_text(bitmap_ind16 &bitmap, const rectangle &cliprect
md1 = readbyte(rac2);
md2 = readbyte(rac2+1);
- draw_char(bitmap, cliprect, ma, x, y + rows, md1);
- draw_char(bitmap, cliprect, ma+1, x+1, y + rows, md2);
+ draw_char(bitmap, cliprect, ma + (rows * m_hn), x, y + rows, md1);
+ draw_char(bitmap, cliprect, ma+1 + (rows * m_hn), x+1, y + rows, md2);
ma+=2;
rac1+=2;
diff --git a/src/devices/video/pc_vga.cpp b/src/devices/video/pc_vga.cpp
index d72899d2de2..2edaaca392a 100644
--- a/src/devices/video/pc_vga.cpp
+++ b/src/devices/video/pc_vga.cpp
@@ -36,11 +36,11 @@
ROM declarations:
(oti 037 chip)
- ROM_LOAD("oakvga.bin", 0xc0000, 0x8000, 0x318c5f43)
+ ROM_LOAD("oakvga.bin", 0xc0000, 0x8000, CRC(318c5f43) SHA1(2aeb6cf737fd87dfd08c9f5b5bc421fcdbab4ce9) )
(tseng labs famous et4000 isa vga card (oem))
- ROM_LOAD("et4000b.bin", 0xc0000, 0x8000, 0xa903540d)
+ ROM_LOAD("et4000b.bin", 0xc0000, 0x8000, CRC(a903540d) SHA1(unknown) )
(tseng labs famous et4000 isa vga card)
- ROM_LOAD("et4000.bin", 0xc0000, 0x8000, 0xf01e4be0)
+ ROM_LOAD("et4000.bin", 0xc0000, 0x8000, CRC(f01e4be0) SHA1(95d75ff41bcb765e50bd87a8da01835fd0aa01d5) )
***************************************************************************/
diff --git a/src/devices/video/vooddefs.ipp b/src/devices/video/vooddefs.ipp
index 6a169640947..d9726edf960 100644
--- a/src/devices/video/vooddefs.ipp
+++ b/src/devices/video/vooddefs.ipp
@@ -135,7 +135,7 @@ static inline int32_t fast_reciplog(int64_t value, int32_t *log2)
}
/* determine how many leading zeros in the value and shift it up high */
- lz = count_leading_zeros(temp);
+ lz = count_leading_zeros_32(temp);
temp <<= lz;
exp += lz;
@@ -1852,15 +1852,15 @@ do
wfloat = 0xffff; \
else \
{ \
- int exp = count_leading_zeros(temp); \
+ int exp = count_leading_zeros_32(temp); \
wfloat = ((exp << 12) | ((~temp >> (19 - exp)) & 0xfff)) + 1; \
} \
} \
\
/* compute depth value (W or Z) for this pixel */ \
- if (FBZMODE_WBUFFER_SELECT(FBZMODE)) \
+ if (FBZMODE_WBUFFER_SELECT(FBZMODE)) \
{ \
- if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) \
+ if (!FBZMODE_DEPTH_FLOAT_SELECT(FBZMODE)) \
depthval = wfloat; \
else \
{ \
@@ -1873,7 +1873,7 @@ do
depthval = 0xffff; \
else \
{ \
- int exp = count_leading_zeros(temp); \
+ int exp = count_leading_zeros_32(temp); \
depthval = ((exp << 12) | ((~temp >> (19 - exp)) & 0xfff)) + 1; \
} \
} \
@@ -1884,11 +1884,11 @@ do
CLAMPED_Z(ITERZ, FBZCOLORPATH, depthval); \
} \
/* add the bias */ \
- biasdepth = depthval; \
+ biasdepth = depthval; \
if (FBZMODE_ENABLE_DEPTH_BIAS(FBZMODE)) \
{ \
- biasdepth += (int16_t)vd->reg[zaColor].u; \
- CLAMP(biasdepth, 0, 0xffff); \
+ biasdepth += (int16_t)vd->reg[zaColor].u; \
+ CLAMP(biasdepth, 0, 0xffff); \
}
@@ -1898,12 +1898,12 @@ do
/* handle depth buffer testing */ \
if (FBZMODE_ENABLE_DEPTHBUF(FBZMODE)) \
{ \
- int32_t depthsource; \
+ int32_t depthsource; \
\
/* the source depth is either the iterated W/Z+bias or a */ \
/* constant value */ \
if (FBZMODE_DEPTH_SOURCE_COMPARE(FBZMODE) == 0) \
- depthsource = biasdepth; \
+ depthsource = biasdepth; \
else \
depthsource = (uint16_t)vd->reg[zaColor].u; \
\
diff --git a/src/devices/video/voodoo.cpp b/src/devices/video/voodoo.cpp
index 180a8d454c3..2b57e67e3de 100644
--- a/src/devices/video/voodoo.cpp
+++ b/src/devices/video/voodoo.cpp
@@ -3129,7 +3129,7 @@ int32_t voodoo_device::register_w(voodoo_device *vd, offs_t offset, uint32_t dat
attoseconds_t refresh = vd->m_screen->frame_period().attoseconds();
attoseconds_t stdperiod, medperiod, vgaperiod;
attoseconds_t stddiff, meddiff, vgadiff;
- rectangle visarea;
+ rectangle visarea;
if (vd->vd_type == TYPE_VOODOO_2)
{
@@ -3151,7 +3151,7 @@ int32_t voodoo_device::register_w(voodoo_device *vd, offs_t offset, uint32_t dat
}
/* create a new visarea */
- visarea.set(hbp, hbp + hvis - 1, vbp, vbp + vvis - 1);
+ visarea.set(hbp, hbp + std::max(hvis - 1, 0), vbp, vbp + std::max(vvis - 1, 0));
/* keep within bounds */
visarea.max_x = (std::min)(visarea.max_x, htotal - 1);
diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp
index 5af8664932b..460735a2f63 100644
--- a/src/emu/emumem_hedr.ipp
+++ b/src/emu/emumem_hedr.ipp
@@ -183,7 +183,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
range_cut_before(ostart-1, start_entry);
range_cut_after(oend+1, end_entry);
- if(LowBits <= Width + AddrShift) {
+ if constexpr(LowBits <= Width + AddrShift) {
if(handler->is_view())
handler->init_handlers(start_entry, end_entry, LowBits, m_u_dispatch, m_u_ranges);
handler->ref(end_entry - start_entry);
@@ -317,7 +317,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
range_cut_before(ostart-1, start_entry);
range_cut_after(oend+1, end_entry);
- if(LowBits <= Width + AddrShift) {
+ if constexpr(LowBits <= Width + AddrShift) {
for(offs_t ent = start_entry; ent <= end_entry; ent++) {
u8 rkey1 = rkey;
if(ent != start_entry)
@@ -331,7 +331,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
} else if(start_entry == end_entry) {
if(!(start & LOWMASK) && (end & LOWMASK) == LOWMASK) {
if(m_u_dispatch[start_entry]->is_dispatch())
- m_u_dispatch[start_entry]->populate_mismatched_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, descriptor, rkey, mappings);
+ m_u_dispatch[start_entry]->populate_mismatched_nomirror(0, LOWMASK, ostart, oend, descriptor, rkey, mappings);
else {
mismatched_patch(descriptor, rkey, mappings, m_u_dispatch[start_entry]);
m_u_ranges[start_entry].set(ostart, oend);
@@ -351,19 +351,17 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
rkey &= ~handler_entry::END;
}
- if(start_entry <= end_entry) {
- for(offs_t ent = start_entry; ent <= end_entry; ent++) {
- u8 rkey1 = rkey;
- if(ent != start_entry)
- rkey1 &= ~handler_entry::START;
- if(ent != end_entry)
- rkey1 &= ~handler_entry::END;
- if(m_u_dispatch[ent]->is_dispatch())
- m_u_dispatch[ent]->populate_mismatched_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, descriptor, rkey1, mappings);
- else {
- mismatched_patch(descriptor, rkey1, mappings, m_u_dispatch[ent]);
- m_u_ranges[ent].set(ostart, oend);
- }
+ for(offs_t ent = start_entry; ent <= end_entry; ent++) {
+ u8 rkey1 = rkey;
+ if(ent != start_entry)
+ rkey1 &= ~handler_entry::START;
+ if(ent != end_entry)
+ rkey1 &= ~handler_entry::END;
+ if(m_u_dispatch[ent]->is_dispatch())
+ m_u_dispatch[ent]->populate_mismatched_nomirror(0, LOWMASK, ostart, oend, descriptor, rkey1, mappings);
+ else {
+ mismatched_patch(descriptor, rkey1, mappings, m_u_dispatch[ent]);
+ m_u_ranges[ent].set(ostart, oend);
}
}
}
@@ -448,7 +446,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
range_cut_before(ostart-1, start_entry);
range_cut_after(oend+1, end_entry);
- if(LowBits <= Width + AddrShift) {
+ if constexpr(LowBits <= Width + AddrShift) {
for(offs_t ent = start_entry; ent <= end_entry; ent++) {
passthrough_patch(handler, mappings, m_u_dispatch[ent]);
m_u_ranges[ent].intersect(ostart, oend);
@@ -456,8 +454,12 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
} else if(start_entry == end_entry) {
if(!(start & LOWMASK) && (end & LOWMASK) == LOWMASK) {
- passthrough_patch(handler, mappings, m_u_dispatch[start_entry]);
- m_u_ranges[start_entry].intersect(ostart, oend);
+ if(m_u_dispatch[start_entry]->is_dispatch())
+ m_u_dispatch[start_entry]->populate_passthrough_nomirror(0, LOWMASK, ostart, oend, handler, mappings);
+ else {
+ passthrough_patch(handler, mappings, m_u_dispatch[start_entry]);
+ m_u_ranges[start_entry].intersect(ostart, oend);
+ }
} else
populate_passthrough_nomirror_subdispatch(start_entry, start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings);
@@ -471,14 +473,12 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
end_entry--;
}
- if(start_entry <= end_entry) {
- for(offs_t ent = start_entry; ent <= end_entry; ent++) {
- if(m_u_dispatch[ent]->is_dispatch())
- m_u_dispatch[ent]->populate_passthrough_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings);
- else {
- passthrough_patch(handler, mappings, m_u_dispatch[ent]);
- m_u_ranges[ent].intersect(ostart, oend);
- }
+ for(offs_t ent = start_entry; ent <= end_entry; ent++) {
+ if(m_u_dispatch[ent]->is_dispatch())
+ m_u_dispatch[ent]->populate_passthrough_nomirror(0, LOWMASK, ostart, oend, handler, mappings);
+ else {
+ passthrough_patch(handler, mappings, m_u_dispatch[ent]);
+ m_u_ranges[ent].intersect(ostart, oend);
}
}
}
diff --git a/src/emu/emumem_hedw.ipp b/src/emu/emumem_hedw.ipp
index 1c0a791c569..43ba5768b55 100644
--- a/src/emu/emumem_hedw.ipp
+++ b/src/emu/emumem_hedw.ipp
@@ -185,7 +185,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
range_cut_before(ostart-1, start_entry);
range_cut_after(oend+1, end_entry);
- if(LowBits <= Width + AddrShift) {
+ if constexpr(LowBits <= Width + AddrShift) {
if(handler->is_view())
handler->init_handlers(start_entry, end_entry, LowBits, m_u_dispatch, m_u_ranges);
handler->ref(end_entry - start_entry);
@@ -319,7 +319,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
range_cut_before(ostart-1, start_entry);
range_cut_after(oend+1, end_entry);
- if(LowBits <= Width + AddrShift) {
+ if constexpr(LowBits <= Width + AddrShift) {
for(offs_t ent = start_entry; ent <= end_entry; ent++) {
u8 rkey1 = rkey;
if(ent != start_entry)
@@ -333,7 +333,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
} else if(start_entry == end_entry) {
if(!(start & LOWMASK) && (end & LOWMASK) == LOWMASK) {
if(m_u_dispatch[start_entry]->is_dispatch())
- m_u_dispatch[start_entry]->populate_mismatched_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, descriptor, rkey, mappings);
+ m_u_dispatch[start_entry]->populate_mismatched_nomirror(0, LOWMASK, ostart, oend, descriptor, rkey, mappings);
else {
mismatched_patch(descriptor, rkey, mappings, m_u_dispatch[start_entry]);
m_u_ranges[start_entry].intersect(ostart, oend);
@@ -353,19 +353,17 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
rkey &= ~handler_entry::END;
}
- if(start_entry <= end_entry) {
- for(offs_t ent = start_entry; ent <= end_entry; ent++) {
- u8 rkey1 = rkey;
- if(ent != start_entry)
- rkey1 &= ~handler_entry::START;
- if(ent != end_entry)
- rkey1 &= ~handler_entry::END;
- if(m_u_dispatch[ent]->is_dispatch())
- m_u_dispatch[ent]->populate_mismatched_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, descriptor, rkey1, mappings);
- else {
- mismatched_patch(descriptor, rkey1, mappings, m_u_dispatch[ent]);
- m_u_ranges[ent].intersect(ostart, oend);
- }
+ for(offs_t ent = start_entry; ent <= end_entry; ent++) {
+ u8 rkey1 = rkey;
+ if(ent != start_entry)
+ rkey1 &= ~handler_entry::START;
+ if(ent != end_entry)
+ rkey1 &= ~handler_entry::END;
+ if(m_u_dispatch[ent]->is_dispatch())
+ m_u_dispatch[ent]->populate_mismatched_nomirror(0, LOWMASK, ostart, oend, descriptor, rkey1, mappings);
+ else {
+ mismatched_patch(descriptor, rkey1, mappings, m_u_dispatch[ent]);
+ m_u_ranges[ent].intersect(ostart, oend);
}
}
}
@@ -450,7 +448,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
range_cut_before(ostart-1, start_entry);
range_cut_after(oend+1, end_entry);
- if(LowBits <= Width + AddrShift) {
+ if constexpr(LowBits <= Width + AddrShift) {
for(offs_t ent = start_entry; ent <= end_entry; ent++) {
passthrough_patch(handler, mappings, m_u_dispatch[ent]);
m_u_ranges[ent].intersect(ostart, oend);
@@ -459,7 +457,7 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
} else if(start_entry == end_entry) {
if(!(start & LOWMASK) && (end & LOWMASK) == LOWMASK) {
if(m_u_dispatch[start_entry]->is_dispatch())
- m_u_dispatch[start_entry]->populate_passthrough_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings);
+ m_u_dispatch[start_entry]->populate_passthrough_nomirror(0, LOWMASK, ostart, oend, handler, mappings);
else {
passthrough_patch(handler, mappings, m_u_dispatch[start_entry]);
m_u_ranges[start_entry].intersect(ostart, oend);
@@ -477,14 +475,12 @@ template<int HighBits, int Width, int AddrShift, endianness_t Endian> void handl
end_entry--;
}
- if(start_entry <= end_entry) {
- for(offs_t ent = start_entry; ent <= end_entry; ent++) {
- if(m_u_dispatch[ent]->is_dispatch())
- m_u_dispatch[ent]->populate_passthrough_nomirror(start & LOWMASK, end & LOWMASK, ostart, oend, handler, mappings);
- else {
- passthrough_patch(handler, mappings, m_u_dispatch[ent]);
- m_u_ranges[ent].intersect(ostart, oend);
- }
+ for(offs_t ent = start_entry; ent <= end_entry; ent++) {
+ if(m_u_dispatch[ent]->is_dispatch())
+ m_u_dispatch[ent]->populate_passthrough_nomirror(0, LOWMASK, ostart, oend, handler, mappings);
+ else {
+ passthrough_patch(handler, mappings, m_u_dispatch[ent]);
+ m_u_ranges[ent].intersect(ostart, oend);
}
}
}
diff --git a/src/emu/emumem_mview.cpp b/src/emu/emumem_mview.cpp
index d6750ad2e23..f132809615a 100644
--- a/src/emu/emumem_mview.cpp
+++ b/src/emu/emumem_mview.cpp
@@ -788,7 +788,7 @@ std::pair<handler_entry *, handler_entry *> memory_view::make_handlers(address_s
m_space = &space;
offs_t span = addrstart ^ addrend;
- u32 awidth = 32 - count_leading_zeros(span);
+ u32 awidth = 32 - count_leading_zeros_32(span);
h_make(awidth, m_config->data_width(), m_config->addr_shift(), m_config->endianness(), space, *this, m_handler_read, m_handler_write);
m_handler_read->ref();
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index 789c7c15a7c..00322df4203 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -530,6 +530,7 @@ private:
// variable found
if (start == 0)
m_buffer.seekp(0);
+ assert(start < str.length());
m_buffer.write(&str[start], pos - start);
m_buffer.write(text.first.data(), text.first.length());
start = term - str.begin() + 1;
@@ -550,7 +551,8 @@ private:
}
else
{
- m_buffer.write(&str[start], str.length() - start);
+ if (start < str.length())
+ m_buffer.write(&str[start], str.length() - start);
return util::buf_to_string_view(m_buffer);
}
}
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp
index ba928a5acfa..de5321f5347 100644
--- a/src/emu/validity.cpp
+++ b/src/emu/validity.cpp
@@ -519,14 +519,14 @@ void validity_checker::validate_inlines()
for (int i = 0; i <= 32; i++)
{
u32 t = i < 32 ? (1 << (31 - i) | testu32a >> i) : 0;
- u8 resultu8 = count_leading_zeros(t);
+ u8 resultu8 = count_leading_zeros_32(t);
if (resultu8 != i)
- osd_printf_error("Error testing count_leading_zeros %08x=%02x (expected %02x)\n", t, resultu8, i);
+ osd_printf_error("Error testing count_leading_zeros_32 %08x=%02x (expected %02x)\n", t, resultu8, i);
t ^= 0xffffffff;
- resultu8 = count_leading_ones(t);
+ resultu8 = count_leading_ones_32(t);
if (resultu8 != i)
- osd_printf_error("Error testing count_leading_ones %08x=%02x (expected %02x)\n", t, resultu8, i);
+ osd_printf_error("Error testing count_leading_ones_32 %08x=%02x (expected %02x)\n", t, resultu8, i);
}
}
diff --git a/src/frontend/mame/ui/confswitch.cpp b/src/frontend/mame/ui/confswitch.cpp
index 4f0ec775260..ee15d6d5ad5 100644
--- a/src/frontend/mame/ui/confswitch.cpp
+++ b/src/frontend/mame/ui/confswitch.cpp
@@ -62,7 +62,7 @@ inline bool menu_confswitch::switch_group_descriptor::matches(ioport_field const
inline unsigned menu_confswitch::switch_group_descriptor::switch_count() const noexcept
{
- return (sizeof(mask) * 8) - count_leading_zeros(mask);
+ return (sizeof(mask) * 8) - count_leading_zeros_32(mask);
}
diff --git a/src/lib/formats/ipf_dsk.cpp b/src/lib/formats/ipf_dsk.cpp
index 066d9ff62a6..0f1725f5c14 100644
--- a/src/lib/formats/ipf_dsk.cpp
+++ b/src/lib/formats/ipf_dsk.cpp
@@ -7,24 +7,6 @@
const floppy_format_type FLOPPY_IPF_FORMAT = &floppy_image_format_creator<ipf_format>;
-ipf_format::ipf_format() :
- tinfos(),
- tcount(0),
- type(0),
- release(0),
- revision(0),
- encoder_type(0),
- encoder_revision(0),
- origin(0),
- min_cylinder(0),
- max_cylinder(0),
- min_head(0),
- max_head(0),
- credit_day(0),
- credit_time(0)
-{
-}
-
const char *ipf_format::name() const
{
return "ipf";
@@ -59,20 +41,21 @@ int ipf_format::identify(io_generic *io, uint32_t form_factor, const std::vector
bool ipf_format::load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image)
{
+ ipf_decode dec;
uint64_t size = io_generic_size(io);
std::vector<uint8_t> data(size);
io_generic_read(io, &data[0], 0, size);
- bool res = parse(data, image);
+ bool res = dec.parse(data, image);
return res;
}
-uint32_t ipf_format::r32(const uint8_t *p)
+uint32_t ipf_format::ipf_decode::r32(const uint8_t *p)
{
return (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
}
-uint32_t ipf_format::rb(const uint8_t *&p, int count)
+uint32_t ipf_format::ipf_decode::rb(const uint8_t *&p, int count)
{
uint32_t v = 0;
for(int i=0; i<count; i++)
@@ -80,7 +63,7 @@ uint32_t ipf_format::rb(const uint8_t *&p, int count)
return v;
}
-uint32_t ipf_format::crc32r(const uint8_t *data, uint32_t size)
+uint32_t ipf_format::ipf_decode::crc32r(const uint8_t *data, uint32_t size)
{
// Reversed crc32
uint32_t crc = 0xffffffff;
@@ -95,7 +78,7 @@ uint32_t ipf_format::crc32r(const uint8_t *data, uint32_t size)
return ~crc;
}
-bool ipf_format::parse(std::vector<uint8_t> &data, floppy_image *image)
+bool ipf_format::ipf_decode::parse(std::vector<uint8_t> &data, floppy_image *image)
{
image->set_variant(floppy_image::DSDD); // Not handling anything else yet
tcount = 84*2+1; // Usual max
@@ -107,7 +90,7 @@ bool ipf_format::parse(std::vector<uint8_t> &data, floppy_image *image)
return res;
}
-bool ipf_format::parse_info(const uint8_t *info)
+bool ipf_format::ipf_decode::parse_info(const uint8_t *info)
{
type = r32(info+12);
if(type != 1)
@@ -130,7 +113,7 @@ bool ipf_format::parse_info(const uint8_t *info)
return true;
}
-ipf_format::track_info *ipf_format::get_index(uint32_t idx)
+ipf_format::ipf_decode::track_info *ipf_format::ipf_decode::get_index(uint32_t idx)
{
if(idx > 1000)
return nullptr;
@@ -142,7 +125,7 @@ ipf_format::track_info *ipf_format::get_index(uint32_t idx)
return &tinfos[idx];
}
-bool ipf_format::parse_imge(const uint8_t *imge)
+bool ipf_format::ipf_decode::parse_imge(const uint8_t *imge)
{
track_info *t = get_index(r32(imge+64));
if(!t)
@@ -176,7 +159,7 @@ bool ipf_format::parse_imge(const uint8_t *imge)
return true;
}
-bool ipf_format::parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_extra_size)
+bool ipf_format::ipf_decode::parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_extra_size)
{
track_info *t = get_index(r32(data+24));
if(!t)
@@ -193,7 +176,7 @@ bool ipf_format::parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_ext
return true;
}
-bool ipf_format::scan_one_tag(std::vector<uint8_t> &data, uint32_t &pos, uint8_t *&tag, uint32_t &tsize)
+bool ipf_format::ipf_decode::scan_one_tag(std::vector<uint8_t> &data, uint32_t &pos, uint8_t *&tag, uint32_t &tsize)
{
if(data.size()-pos < 12)
return false;
@@ -209,7 +192,7 @@ bool ipf_format::scan_one_tag(std::vector<uint8_t> &data, uint32_t &pos, uint8_t
return true;
}
-bool ipf_format::scan_all_tags(std::vector<uint8_t> &data)
+bool ipf_format::ipf_decode::scan_all_tags(std::vector<uint8_t> &data)
{
uint32_t pos = 0;
uint32_t size = data.size();
@@ -254,7 +237,7 @@ bool ipf_format::scan_all_tags(std::vector<uint8_t> &data)
return true;
}
-bool ipf_format::generate_tracks(floppy_image *image)
+bool ipf_format::ipf_decode::generate_tracks(floppy_image *image)
{
for(uint32_t i = 0; i != tcount; i++) {
track_info *t = &tinfos[i];
@@ -268,7 +251,7 @@ bool ipf_format::generate_tracks(floppy_image *image)
return true;
}
-void ipf_format::rotate(std::vector<uint32_t> &track, uint32_t offset, uint32_t size)
+void ipf_format::ipf_decode::rotate(std::vector<uint32_t> &track, uint32_t offset, uint32_t size)
{
uint32_t done = 0;
for(uint32_t bpos=0; done < size; bpos++) {
@@ -289,7 +272,7 @@ void ipf_format::rotate(std::vector<uint32_t> &track, uint32_t offset, uint32_t
}
}
-void ipf_format::mark_track_splice(std::vector<uint32_t> &track, uint32_t offset, uint32_t size)
+void ipf_format::ipf_decode::mark_track_splice(std::vector<uint32_t> &track, uint32_t offset, uint32_t size)
{
for(int i=0; i<3; i++) {
uint32_t pos = (offset + i) % size;
@@ -302,13 +285,13 @@ void ipf_format::mark_track_splice(std::vector<uint32_t> &track, uint32_t offset
}
}
-void ipf_format::timing_set(std::vector<uint32_t> &track, uint32_t start, uint32_t end, uint32_t time)
+void ipf_format::ipf_decode::timing_set(std::vector<uint32_t> &track, uint32_t start, uint32_t end, uint32_t time)
{
for(uint32_t i=start; i != end; i++)
track[i] = (track[i] & floppy_image::MG_MASK) | time;
}
-bool ipf_format::generate_timings(track_info *t, std::vector<uint32_t> &track, const std::vector<uint32_t> &data_pos, const std::vector<uint32_t> &gap_pos)
+bool ipf_format::ipf_decode::generate_timings(track_info *t, std::vector<uint32_t> &track, const std::vector<uint32_t> &data_pos, const std::vector<uint32_t> &gap_pos)
{
timing_set(track, 0, t->size_cells, 2000);
@@ -386,7 +369,7 @@ bool ipf_format::generate_timings(track_info *t, std::vector<uint32_t> &track, c
return true;
}
-bool ipf_format::generate_track(track_info *t, floppy_image *image)
+bool ipf_format::ipf_decode::generate_track(track_info *t, floppy_image *image)
{
if(!t->size_cells)
return true;
@@ -434,7 +417,7 @@ bool ipf_format::generate_track(track_info *t, floppy_image *image)
return true;
}
-void ipf_format::track_write_raw(std::vector<uint32_t>::iterator &tpos, const uint8_t *data, uint32_t cells, bool &context)
+void ipf_format::ipf_decode::track_write_raw(std::vector<uint32_t>::iterator &tpos, const uint8_t *data, uint32_t cells, bool &context)
{
for(uint32_t i=0; i != cells; i++)
*tpos++ = data[i>>3] & (0x80 >> (i & 7)) ? MG_1 : MG_0;
@@ -442,7 +425,7 @@ void ipf_format::track_write_raw(std::vector<uint32_t>::iterator &tpos, const ui
context = tpos[-1] == MG_1;
}
-void ipf_format::track_write_mfm(std::vector<uint32_t>::iterator &tpos, const uint8_t *data, uint32_t start_offset, uint32_t patlen, uint32_t cells, bool &context)
+void ipf_format::ipf_decode::track_write_mfm(std::vector<uint32_t>::iterator &tpos, const uint8_t *data, uint32_t start_offset, uint32_t patlen, uint32_t cells, bool &context)
{
patlen *= 2;
for(uint32_t i=0; i != cells; i++) {
@@ -456,13 +439,13 @@ void ipf_format::track_write_mfm(std::vector<uint32_t>::iterator &tpos, const ui
}
}
-void ipf_format::track_write_weak(std::vector<uint32_t>::iterator &tpos, uint32_t cells)
+void ipf_format::ipf_decode::track_write_weak(std::vector<uint32_t>::iterator &tpos, uint32_t cells)
{
for(uint32_t i=0; i != cells; i++)
*tpos++ = floppy_image::MG_N;
}
-bool ipf_format::generate_block_data(const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, std::vector<uint32_t>::iterator tlimit, bool &context)
+bool ipf_format::ipf_decode::generate_block_data(const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, std::vector<uint32_t>::iterator tlimit, bool &context)
{
for(;;) {
if(data >= dlimit)
@@ -504,7 +487,7 @@ bool ipf_format::generate_block_data(const uint8_t *data, const uint8_t *dlimit,
}
}
-bool ipf_format::generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, std::vector<uint32_t>::iterator &tpos, bool &context)
+bool ipf_format::ipf_decode::generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, std::vector<uint32_t>::iterator &tpos, bool &context)
{
spos = ipos >= 16 && ipos+16 <= gap_cells ? ipos : gap_cells >> 1;
track_write_mfm(tpos, &pattern, 0, 8, spos, context);
@@ -517,7 +500,7 @@ bool ipf_format::generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint3
return true;
}
-bool ipf_format::gap_description_to_reserved_size(const uint8_t *&data, const uint8_t *dlimit, uint32_t &res_size)
+bool ipf_format::ipf_decode::gap_description_to_reserved_size(const uint8_t *&data, const uint8_t *dlimit, uint32_t &res_size)
{
res_size = 0;
for(;;) {
@@ -542,7 +525,7 @@ bool ipf_format::gap_description_to_reserved_size(const uint8_t *&data, const ui
}
}
-bool ipf_format::generate_gap_from_description(const uint8_t *&data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, uint32_t size, bool pre, bool &context)
+bool ipf_format::ipf_decode::generate_gap_from_description(const uint8_t *&data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, uint32_t size, bool pre, bool &context)
{
const uint8_t *data1 = data;
uint32_t res_size;
@@ -612,7 +595,7 @@ bool ipf_format::generate_gap_from_description(const uint8_t *&data, const uint8
}
-bool ipf_format::generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context)
+bool ipf_format::ipf_decode::generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context)
{
if(ipos >= 16 && ipos < gap_cells-16)
spos = ipos;
@@ -621,7 +604,7 @@ bool ipf_format::generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32
return generate_gap_from_description(data, dlimit, tpos, gap_cells, true, context);
}
-bool ipf_format::generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context)
+bool ipf_format::ipf_decode::generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context)
{
if(ipos >= 16 && ipos < gap_cells-16)
spos = ipos;
@@ -630,7 +613,7 @@ bool ipf_format::generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32
return generate_gap_from_description(data, dlimit, tpos, gap_cells, false, context);
}
-bool ipf_format::generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context)
+bool ipf_format::ipf_decode::generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context)
{
if(ipos >= 16 && ipos < gap_cells-16)
spos = ipos;
@@ -657,7 +640,7 @@ bool ipf_format::generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32
return generate_gap_from_description(data, dlimit, tpos+spos+delta, gap_cells - spos - delta, false, context);
}
-bool ipf_format::generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, bool &context)
+bool ipf_format::ipf_decode::generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, bool &context)
{
switch(gap_type) {
case 0:
@@ -673,7 +656,7 @@ bool ipf_format::generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8
}
}
-bool ipf_format::generate_block(track_info *t, uint32_t idx, uint32_t ipos, std::vector<uint32_t> &track, uint32_t &pos, uint32_t &dpos, uint32_t &gpos, uint32_t &spos, bool &context)
+bool ipf_format::ipf_decode::generate_block(track_info *t, uint32_t idx, uint32_t ipos, std::vector<uint32_t> &track, uint32_t &pos, uint32_t &dpos, uint32_t &gpos, uint32_t &spos, bool &context)
{
const uint8_t *data = t->data;
const uint8_t *data_end = t->data + t->data_size;
@@ -705,7 +688,7 @@ bool ipf_format::generate_block(track_info *t, uint32_t idx, uint32_t ipos, std:
return true;
}
-uint32_t ipf_format::block_compute_real_size(track_info *t)
+uint32_t ipf_format::ipf_decode::block_compute_real_size(track_info *t)
{
uint32_t size = 0;
const uint8_t *thead = t->data;
diff --git a/src/lib/formats/ipf_dsk.h b/src/lib/formats/ipf_dsk.h
index a2e4bee2a79..82447da3297 100644
--- a/src/lib/formats/ipf_dsk.h
+++ b/src/lib/formats/ipf_dsk.h
@@ -12,8 +12,6 @@
class ipf_format : public floppy_image_format_t
{
public:
- ipf_format();
-
virtual int identify(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants) override;
virtual bool load(io_generic *io, uint32_t form_factor, const std::vector<uint32_t> &variants, floppy_image *image) override;
@@ -23,69 +21,71 @@ public:
virtual bool supports_save() const override;
private:
- struct track_info {
- uint32_t cylinder = 0, head = 0, type = 0;
- uint32_t sigtype = 0, process = 0, reserved[3] = { 0, 0, 0 };
- uint32_t size_bytes = 0, size_cells = 0;
- uint32_t index_bytes = 0, index_cells = 0;
- uint32_t datasize_cells = 0, gapsize_cells = 0;
- uint32_t block_count = 0, weak_bits = 0;
-
- uint32_t data_size_bits = 0;
-
- bool info_set = false;
-
- const uint8_t *data = nullptr;
- uint32_t data_size = 0;
+ struct ipf_decode {
+ struct track_info {
+ uint32_t cylinder = 0, head = 0, type = 0;
+ uint32_t sigtype = 0, process = 0, reserved[3] = { 0, 0, 0 };
+ uint32_t size_bytes = 0, size_cells = 0;
+ uint32_t index_bytes = 0, index_cells = 0;
+ uint32_t datasize_cells = 0, gapsize_cells = 0;
+ uint32_t block_count = 0, weak_bits = 0;
+
+ uint32_t data_size_bits = 0;
+
+ bool info_set = false;
+
+ const uint8_t *data = nullptr;
+ uint32_t data_size = 0;
+ };
+
+ std::vector<track_info> tinfos;
+ uint32_t tcount = 0;
+
+ uint32_t type = 0, release = 0, revision = 0;
+ uint32_t encoder_type = 0, encoder_revision = 0, origin = 0;
+ uint32_t min_cylinder = 0, max_cylinder = 0, min_head = 0, max_head = 0;
+ uint32_t credit_day = 0, credit_time = 0;
+ uint32_t platform[4] = {}, extra[5] = {};
+
+ uint32_t crc32r(const uint8_t *data, uint32_t size);
+
+ bool parse_info(const uint8_t *info);
+ bool parse_imge(const uint8_t *imge);
+ bool parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_extra_size);
+
+ bool scan_one_tag(std::vector<uint8_t> &data, uint32_t &pos, uint8_t *&tag, uint32_t &tsize);
+ bool scan_all_tags(std::vector<uint8_t> &data);
+ static uint32_t r32(const uint8_t *p);
+ static uint32_t rb(const uint8_t *&p, int count);
+
+ track_info *get_index(uint32_t idx);
+
+ void track_write_raw(std::vector<uint32_t>::iterator &tpos, const uint8_t *data, uint32_t cells, bool &context);
+ void track_write_mfm(std::vector<uint32_t>::iterator &tpos, const uint8_t *data, uint32_t start_offset, uint32_t patlen, uint32_t cells, bool &context);
+ void track_write_weak(std::vector<uint32_t>::iterator &tpos, uint32_t cells);
+ bool generate_block_data(const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, std::vector<uint32_t>::iterator tlimit, bool &context);
+
+ bool gap_description_to_reserved_size(const uint8_t *&data, const uint8_t *dlimit, uint32_t &res_size);
+ bool generate_gap_from_description(const uint8_t *&data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, uint32_t size, bool pre, bool &context);
+ bool generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, std::vector<uint32_t>::iterator &tpos, bool &context);
+ bool generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context);
+ bool generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context);
+ bool generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context);
+ bool generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, bool &context);
+
+ bool generate_block(track_info *t, uint32_t idx, uint32_t ipos, std::vector<uint32_t> &track, uint32_t &pos, uint32_t &dpos, uint32_t &gpos, uint32_t &spos, bool &context);
+ uint32_t block_compute_real_size(track_info *t);
+
+ void timing_set(std::vector<uint32_t> &track, uint32_t start, uint32_t end, uint32_t time);
+ bool generate_timings(track_info *t, std::vector<uint32_t> &track, const std::vector<uint32_t> &data_pos, const std::vector<uint32_t> &gap_pos);
+
+ void rotate(std::vector<uint32_t> &track, uint32_t offset, uint32_t size);
+ void mark_track_splice(std::vector<uint32_t> &track, uint32_t offset, uint32_t size);
+ bool generate_track(track_info *t, floppy_image *image);
+ bool generate_tracks(floppy_image *image);
+
+ bool parse(std::vector<uint8_t> &data, floppy_image *image);
};
-
- std::vector<track_info> tinfos;
- uint32_t tcount;
-
- uint32_t type, release, revision;
- uint32_t encoder_type, encoder_revision, origin;
- uint32_t min_cylinder, max_cylinder, min_head, max_head;
- uint32_t credit_day, credit_time;
- uint32_t platform[4], extra[5];
-
- uint32_t crc32r(const uint8_t *data, uint32_t size);
-
- bool parse_info(const uint8_t *info);
- bool parse_imge(const uint8_t *imge);
- bool parse_data(const uint8_t *data, uint32_t &pos, uint32_t max_extra_size);
-
- bool scan_one_tag(std::vector<uint8_t> &data, uint32_t &pos, uint8_t *&tag, uint32_t &tsize);
- bool scan_all_tags(std::vector<uint8_t> &data);
- static uint32_t r32(const uint8_t *p);
- static uint32_t rb(const uint8_t *&p, int count);
-
- track_info *get_index(uint32_t idx);
-
- void track_write_raw(std::vector<uint32_t>::iterator &tpos, const uint8_t *data, uint32_t cells, bool &context);
- void track_write_mfm(std::vector<uint32_t>::iterator &tpos, const uint8_t *data, uint32_t start_offset, uint32_t patlen, uint32_t cells, bool &context);
- void track_write_weak(std::vector<uint32_t>::iterator &tpos, uint32_t cells);
- bool generate_block_data(const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, std::vector<uint32_t>::iterator tlimit, bool &context);
-
- bool gap_description_to_reserved_size(const uint8_t *&data, const uint8_t *dlimit, uint32_t &res_size);
- bool generate_gap_from_description(const uint8_t *&data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, uint32_t size, bool pre, bool &context);
- bool generate_block_gap_0(uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, std::vector<uint32_t>::iterator &tpos, bool &context);
- bool generate_block_gap_1(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context);
- bool generate_block_gap_2(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context);
- bool generate_block_gap_3(uint32_t gap_cells, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator &tpos, bool &context);
- bool generate_block_gap(uint32_t gap_type, uint32_t gap_cells, uint8_t pattern, uint32_t &spos, uint32_t ipos, const uint8_t *data, const uint8_t *dlimit, std::vector<uint32_t>::iterator tpos, bool &context);
-
- bool generate_block(track_info *t, uint32_t idx, uint32_t ipos, std::vector<uint32_t> &track, uint32_t &pos, uint32_t &dpos, uint32_t &gpos, uint32_t &spos, bool &context);
- uint32_t block_compute_real_size(track_info *t);
-
- void timing_set(std::vector<uint32_t> &track, uint32_t start, uint32_t end, uint32_t time);
- bool generate_timings(track_info *t, std::vector<uint32_t> &track, const std::vector<uint32_t> &data_pos, const std::vector<uint32_t> &gap_pos);
-
- void rotate(std::vector<uint32_t> &track, uint32_t offset, uint32_t size);
- void mark_track_splice(std::vector<uint32_t> &track, uint32_t offset, uint32_t size);
- bool generate_track(track_info *t, floppy_image *image);
- bool generate_tracks(floppy_image *image);
-
- bool parse(std::vector<uint8_t> &data, floppy_image *image);
};
extern const floppy_format_type FLOPPY_IPF_FORMAT;
diff --git a/src/lib/util/msdib.cpp b/src/lib/util/msdib.cpp
index c084442f44b..58d7429fce1 100644
--- a/src/lib/util/msdib.cpp
+++ b/src/lib/util/msdib.cpp
@@ -93,9 +93,9 @@ union bitmap_headers
bool dib_parse_mask(uint32_t mask, unsigned &shift, unsigned &bits)
{
- shift = count_leading_zeros(mask);
+ shift = count_leading_zeros_32(mask);
mask <<= shift;
- bits = count_leading_ones(mask);
+ bits = count_leading_ones_32(mask);
mask <<= shift;
shift = 32 - shift - bits;
return !mask;
diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt
index 533d5c951d2..21bde9492c1 100644
--- a/src/mame/arcade.flt
+++ b/src/mame/arcade.flt
@@ -454,6 +454,7 @@ galastrm.cpp
galaxi.cpp
galaxia.cpp
galaxian.cpp
+galaxian_rockclim.cpp
galaxold.cpp
galgame.cpp
galgames.cpp
diff --git a/src/mame/audio/acan.cpp b/src/mame/audio/acan.cpp
index 5f999368625..b881f2e65ac 100644
--- a/src/mame/audio/acan.cpp
+++ b/src/mame/audio/acan.cpp
@@ -22,9 +22,11 @@ acan_sound_device::acan_sound_device(const machine_config &mconfig, const char *
, device_sound_interface(mconfig, *this)
, m_stream(nullptr)
, m_timer(nullptr)
- , m_irq_handler(*this)
+ , m_timer_irq_handler(*this)
+ , m_dma_irq_handler(*this)
, m_ram_read(*this)
, m_active_channels(0)
+ , m_dma_channels(0)
{
}
@@ -35,11 +37,13 @@ void acan_sound_device::device_start()
m_mix = std::make_unique<int32_t[]>((clock() / 16 / 5) * 2);
m_timer = timer_alloc(0);
- m_irq_handler.resolve();
+ m_timer_irq_handler.resolve_safe();
+ m_dma_irq_handler.resolve_safe();
m_ram_read.resolve_safe(0);
// register for savestates
save_item(NAME(m_active_channels));
+ save_item(NAME(m_dma_channels));
save_item(STRUCT_MEMBER(m_channels, pitch));
save_item(STRUCT_MEMBER(m_channels, length));
save_item(STRUCT_MEMBER(m_channels, start_addr));
@@ -47,6 +51,7 @@ void acan_sound_device::device_start()
save_item(STRUCT_MEMBER(m_channels, end_addr));
save_item(STRUCT_MEMBER(m_channels, addr_increment));
save_item(STRUCT_MEMBER(m_channels, frac));
+ save_item(STRUCT_MEMBER(m_channels, register9));
save_item(STRUCT_MEMBER(m_channels, envelope));
save_item(STRUCT_MEMBER(m_channels, volume));
save_item(STRUCT_MEMBER(m_channels, volume_l));
@@ -58,19 +63,19 @@ void acan_sound_device::device_start()
void acan_sound_device::device_reset()
{
m_active_channels = 0;
+ m_dma_channels = 0;
std::fill(std::begin(m_regs), std::end(m_regs), 0);
m_timer->reset();
- if (!m_irq_handler.isnull())
- m_irq_handler(0);
+ m_timer_irq_handler(0);
+ m_dma_irq_handler(0);
}
void acan_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
if (m_regs[0x14] & 0x40)
{
- if (!m_irq_handler.isnull())
- m_irq_handler(1);
+ m_timer_irq_handler(1);
// Update frequency
uint16_t period = (m_regs[0x12] << 8) + m_regs[0x11];
@@ -82,7 +87,7 @@ void acan_sound_device::sound_stream_update(sound_stream &stream, std::vector<re
{
std::fill_n(&m_mix[0], outputs[0].samples() * 2, 0);
- for (int i = 0; i < 15 && m_active_channels != 0; i++)
+ for (int i = 0; i < 16 && m_active_channels != 0; i++)
{
if (BIT(m_active_channels, i))
{
@@ -103,7 +108,12 @@ void acan_sound_device::sound_stream_update(sound_stream &stream, std::vector<re
if (channel.curr_addr >= channel.end_addr)
{
- if (channel.one_shot)
+ if (channel.register9)
+ {
+ m_dma_irq_handler(1);
+ keyon_voice(i);
+ }
+ else if (channel.one_shot)
{
m_active_channels &= ~(1 << i);
}
@@ -128,13 +138,28 @@ uint8_t acan_sound_device::read(offs_t offset)
{
if (offset == 0x14)
{
- // acknowledge timer (?)
- if (!m_irq_handler.isnull())
- m_irq_handler(0);
+ // acknowledge timer IRQ?
+ m_timer_irq_handler(0);
+ }
+ else if (offset == 0x16)
+ {
+ // acknowledge DMA IRQ?
+ m_dma_irq_handler(0);
}
return m_regs[offset];
}
+void acan_sound_device::keyon_voice(uint8_t voice)
+{
+ acan_channel &channel = m_channels[voice];
+ channel.curr_addr = channel.start_addr << 6;
+ channel.end_addr = channel.curr_addr + channel.length;
+
+ m_active_channels |= (1 << voice);
+
+ //printf("Keyon voice %d\n", voice);
+}
+
void acan_sound_device::write(offs_t offset, uint8_t data)
{
const uint8_t upper = (offset >> 4) & 0x0f;
@@ -144,107 +169,128 @@ void acan_sound_device::write(offs_t offset, uint8_t data)
switch (upper)
{
- case 0x1:
- if (lower == 0x7) // Keyon/keyoff
- {
- const uint16_t mask = 1 << (data & 0xf);
- if (data & 0xf0)
- m_active_channels |= mask;
- else
- m_active_channels &= ~mask;
- }
- else if (lower == 0x4) // Timer control
- {
- if (data & 0x80)
- {
- // Update frequency
- uint16_t period = (m_regs[0x12] << 8) + m_regs[0x11];
- m_timer->adjust(clocks_to_attotime(10 * (0x10000 - period)), 0);
- }
- // the meaning of the data that is actually written is unknown
- LOG("Sound timer control: %02x = %02x\n", offset, data);
- }
- else if (lower != 0x1 && lower != 0x2)
- {
- LOG("Unknown audio register: %02x = %02x\n", offset, data);
- }
+ case 0x1:
+ switch (lower)
+ {
+ case 0x1: // Timer frequency (low byte)
+ LOG("%s: Sound timer frequency (low byte) = %02x\n", machine().describe_context(), data);
break;
- case 0x2: // Pitch (low byte)
- if (lower < 0xf)
- {
- acan_channel &channel = m_channels[lower];
- channel.pitch &= 0xff00;
- channel.pitch |= data;
- channel.addr_increment = (uint32_t)channel.pitch << 6;
- channel.frac = 0;
- }
+ case 0x2: // Timer frequency (high byte)
+ LOG("%s: Sound timer frequency (high byte) = %02x\n", machine().describe_context(), data);
break;
- case 0x3: // Pitch (high byte)
- if (lower < 0xf)
+ case 0x4: // Timer control
+ // The meaning of the data that is actually written is unknown
+ LOG("%s: Sound timer control = %02x\n", machine().describe_context(), data);
+ if (BIT(data, 7))
{
- acan_channel &channel = m_channels[lower];
- channel.pitch &= 0x00ff;
- channel.pitch |= data << 8;
- channel.addr_increment = (uint32_t)channel.pitch << 6;
- channel.frac = 0;
+ // Update frequency
+ uint16_t period = (m_regs[0x12] << 8) + m_regs[0x11];
+ m_timer->adjust(clocks_to_attotime(10 * (0x10000 - period)), 0);
}
break;
- case 0x5: // Waveform length
- if (lower < 0xf)
- {
- acan_channel &channel = m_channels[lower];
- //channel.length = (data & ~0x01) << 6;
- channel.length = (data & 0x0e) << 6; // Temporary hack to make jttlaugh audible. Not the proper fix!
- channel.end_addr = channel.curr_addr + channel.length;
- channel.one_shot = BIT(data, 0);
- }
+ case 0x6: // DMA-driven channel flags?
+ // The meaning of the data that is actually written is unknown
+ m_dma_channels = data << 8;
+ LOG("%s: DMA-driven channel flag(?) = %02x\n", machine().describe_context(), data);
break;
- case 0x6: // Waveform address (divided by 0x40, high byte)
- if (lower < 0xf)
+ case 0x7: // Keyon/keyoff
+ {
+ LOG("%s: Sound key control, voice %02x key%s\n", machine().describe_context(), data & 0xf, (data & 0xf0) ? "on" : "off");
+ const uint16_t mask = 1 << (data & 0xf);
+ if (data & 0xf0)
{
- acan_channel &channel = m_channels[lower];
- channel.start_addr &= 0x00ff;
- channel.start_addr |= data << 8;
- channel.curr_addr = channel.start_addr << 6;
- channel.end_addr = channel.curr_addr + channel.length;
+ keyon_voice(data & 0xf);
}
- break;
-
- case 0x7: // Waveform address (divided by 0x40, low byte)
- if (lower < 0xf)
+ else
{
- acan_channel &channel = m_channels[lower];
- channel.start_addr &= 0xff00;
- channel.start_addr |= data;
- channel.curr_addr = channel.start_addr << 6;
- channel.end_addr = channel.curr_addr + channel.length;
+ m_active_channels &= ~mask;
}
break;
+ }
- case 0xa: // Envelope Parameters? (not yet known)
- case 0xb:
- case 0xc:
- case 0xd:
- if (lower < 0xf)
- m_channels[lower].envelope[upper - 0xa] = data;
+ default:
+ LOG("Unknown sound register: %02x = %02x\n", offset, data);
break;
+ }
+ break;
- case 0xe: // Volume
- if (lower < 0xf)
- {
- acan_channel &channel = m_channels[lower];
- channel.volume = data;
- channel.volume_l = (data & 0xf0) | (data >> 4);
- channel.volume_r = (data & 0x0f) | (data << 4);
- }
- break;
+ case 0x2: // Pitch (low byte)
+ {
+ acan_channel &channel = m_channels[lower];
+ channel.pitch &= 0xff00;
+ channel.pitch |= data;
+ channel.addr_increment = (uint32_t)channel.pitch << 6;
+ break;
+ }
- default:
- LOG("Unknown audio register: %02x = %02x\n", offset, data);
- break;
+ case 0x3: // Pitch (high byte)
+ {
+ acan_channel &channel = m_channels[lower];
+ channel.pitch &= 0x00ff;
+ channel.pitch |= data << 8;
+ channel.addr_increment = (uint32_t)channel.pitch << 6;
+ break;
+ }
+
+ case 0x5: // Waveform length
+ {
+ acan_channel &channel = m_channels[lower];
+ channel.length = 0x40 << ((data & 0x0e) >> 1);
+ channel.one_shot = BIT(data, 0);
+ LOG("%s: Waveform length and attributes (voice %02x): %02x\n", machine().describe_context(), lower, data);
+ break;
+ }
+
+ case 0x6: // Waveform address (divided by 0x40, high byte)
+ {
+ acan_channel &channel = m_channels[lower];
+ channel.start_addr &= 0x00ff;
+ channel.start_addr |= data << 8;
+ LOG("%s: Waveform address (high) (voice %02x): %02x, will be %04x\n", machine().describe_context(), lower, data, channel.start_addr << 6);
+ break;
+ }
+
+ case 0x7: // Waveform address (divided by 0x40, low byte)
+ {
+ acan_channel &channel = m_channels[lower];
+ channel.start_addr &= 0xff00;
+ channel.start_addr |= data;
+ LOG("%s: Waveform address (low) (voice %02x): %02x, will be %04x\n", machine().describe_context(), lower, data, channel.start_addr << 6);
+ break;
+ }
+
+ case 0x9: // Unknown (set to 0xFF for DMA-driven channels)
+ {
+ acan_channel &channel = m_channels[lower];
+ channel.register9 = data;
+ LOG("%s: Unknown voice register 9 (voice %02x): %02x\n", machine().describe_context(), lower, data);
+ break;
+ }
+
+ case 0xa: // Envelope Parameters? (not yet known)
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ m_channels[lower].envelope[upper - 0xa] = data;
+ LOG("%s: Envelope parameter %d (voice %02x) = %02x\n", machine().describe_context(), upper - 0xa, lower, data);
+ break;
+
+ case 0xe: // Volume
+ {
+ acan_channel &channel = m_channels[lower];
+ channel.volume = data;
+ channel.volume_l = (data & 0xf0) | (data >> 4);
+ channel.volume_r = (data & 0x0f) | (data << 4);
+ LOG("%s: Volume register (voice %02x) = = %02x\n", machine().describe_context(), lower, data);
+ break;
+ }
+
+ default:
+ LOG("Unknown sound register: %02x = %02x\n", offset, data);
+ break;
}
}
diff --git a/src/mame/audio/acan.h b/src/mame/audio/acan.h
index 9c04c12cb69..0f6ac312a2d 100644
--- a/src/mame/audio/acan.h
+++ b/src/mame/audio/acan.h
@@ -17,7 +17,8 @@ public:
acan_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
auto ram_read() { return m_ram_read.bind(); }
- auto irq_handler() { return m_irq_handler.bind(); }
+ auto timer_irq_handler() { return m_timer_irq_handler.bind(); }
+ auto dma_irq_handler() { return m_dma_irq_handler.bind(); }
uint8_t read(offs_t offset);
void write(offs_t offset, uint8_t data);
@@ -41,6 +42,7 @@ private:
uint16_t end_addr;
uint32_t addr_increment;
uint32_t frac;
+ uint8_t register9;
uint8_t envelope[4];
uint8_t volume;
uint8_t volume_l;
@@ -48,12 +50,16 @@ private:
bool one_shot;
};
+ void keyon_voice(uint8_t voice);
+
sound_stream *m_stream;
emu_timer *m_timer;
- devcb_write_line m_irq_handler;
+ devcb_write_line m_timer_irq_handler;
+ devcb_write_line m_dma_irq_handler;
devcb_read8 m_ram_read;
uint16_t m_active_channels;
- acan_channel m_channels[15];
+ uint16_t m_dma_channels;
+ acan_channel m_channels[16];
uint8_t m_regs[256];
std::unique_ptr<int32_t[]> m_mix;
};
diff --git a/src/mame/audio/gottlieb.cpp b/src/mame/audio/gottlieb.cpp
index 4c56cff5e23..8c8555f13be 100644
--- a/src/mame/audio/gottlieb.cpp
+++ b/src/mame/audio/gottlieb.cpp
@@ -463,7 +463,8 @@ inline void gottlieb_sound_r2_device::nmi_state_update()
uint8_t gottlieb_sound_r2_device::audio_data_r()
{
- m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
+ if (!machine().side_effects_disabled())
+ m_audiocpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
return m_audiocpu_latch;
}
@@ -475,12 +476,29 @@ uint8_t gottlieb_sound_r2_device::audio_data_r()
uint8_t gottlieb_sound_r2_device::speech_data_r()
{
- m_speechcpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
+ if (!machine().side_effects_disabled())
+ m_speechcpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
return m_speechcpu_latch;
}
//-------------------------------------------------
+// signal_audio_nmi_r - signal an NMI from the
+// speech CPU to the audio CPU
+//-------------------------------------------------
+
+uint8_t gottlieb_sound_r2_device::signal_audio_nmi_r()
+{
+ if (!machine().side_effects_disabled())
+ {
+ m_audiocpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+ m_audiocpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ }
+ return 0xff;
+}
+
+
+//-------------------------------------------------
// signal_audio_nmi_w - signal an NMI from the
// speech CPU to the audio CPU
//-------------------------------------------------
@@ -620,7 +638,7 @@ void gottlieb_sound_r2_device::gottlieb_speech_r2_map(address_map &map)
map(0x8000, 0x8000).mirror(0x1fff).w(FUNC(gottlieb_sound_r2_device::psg_latch_w));
map(0xa000, 0xa000).mirror(0x07ff).w(FUNC(gottlieb_sound_r2_device::nmi_rate_w));
map(0xa800, 0xa800).mirror(0x07ff).r(FUNC(gottlieb_sound_r2_device::speech_data_r));
- map(0xb000, 0xb000).mirror(0x07ff).w(FUNC(gottlieb_sound_r2_device::signal_audio_nmi_w));
+ map(0xb000, 0xb000).mirror(0x07ff).rw(FUNC(gottlieb_sound_r2_device::signal_audio_nmi_r), FUNC(gottlieb_sound_r2_device::signal_audio_nmi_w));
map(0xc000, 0xffff).rom();
}
@@ -703,6 +721,9 @@ void gottlieb_sound_r2_device::device_start()
save_item(NAME(m_nmi_state));
save_item(NAME(m_speech_control));
save_item(NAME(m_last_command));
+ save_item(NAME(m_psg_latch));
+ save_item(NAME(m_psg_data_latch));
+ save_item(NAME(m_sp0250_latch));
}
diff --git a/src/mame/audio/gottlieb.h b/src/mame/audio/gottlieb.h
index aa712c02130..8977c3181ab 100644
--- a/src/mame/audio/gottlieb.h
+++ b/src/mame/audio/gottlieb.h
@@ -140,6 +140,7 @@ public:
// internal communications
uint8_t speech_data_r();
uint8_t audio_data_r();
+ uint8_t signal_audio_nmi_r();
void signal_audio_nmi_w(uint8_t data);
void nmi_rate_w(uint8_t data);
CUSTOM_INPUT_MEMBER( speech_drq_custom_r );
diff --git a/src/mame/drivers/aci_ggm.cpp b/src/mame/drivers/aci_ggm.cpp
index 225e5418067..9ced19e60b9 100644
--- a/src/mame/drivers/aci_ggm.cpp
+++ b/src/mame/drivers/aci_ggm.cpp
@@ -7,7 +7,7 @@ Applied Concepts Great Game Machine (GGM), electronic board game computer.
2nd source distribution: Modular Game System (MGS), by Chafitz.
Hardware notes:
-- 6502A 2MHz (unknown XTAL, label "5-80"), SYP6522 VIA
+- 6502A 2MHz, SYP6522 VIA
- 2KB RAM(4*HM472114AP-2), no ROM on main PCB
- 2*74164 shift register, 3*6118P VFD driver
- 8-digit 14seg VFD panel (same one as in Speak & Spell)
@@ -19,7 +19,7 @@ There were also some standalone machines, eg. Morphy Encore, Odin Encore.
Known chess cartridges (*denotes not dumped):
- Chess/Boris 2.5 (aka Sargon 2.5)
- *Gruenfeld Edition - Master Chess Openings
-- *Morphy Edition - Master Chess
+- Morphy Edition - Master Chess
- Capablanca Edition - Master Chess Endgame
- Sandy Edition - Master Chess (German language version of Morphy)
- Steinitz Edition-4 - Master Chess
@@ -40,7 +40,6 @@ TODO:
- it doesn't have nvram, it's a workaround for MAME forcing a hard reset when
swapping in a new cartridge
- what's VIA PB0 for? game toggles it once per irq
-- identify XTAL (2MHz CPU/VIA is correct, compared to video reference)
- confirm display AP segment, is it used anywhere?
- verify cartridge pinout, right now assume A0-A15 (max known cart size is 24KB).
Boris/Sargon cartridge is A0-A11 and 2 CS lines, Steinitz uses the whole range.
@@ -172,7 +171,7 @@ void ggm_state::update_reset(ioport_value state)
DEVICE_IMAGE_LOAD_MEMBER(ggm_state::load_cart)
{
u32 size = m_cart->common_get_size("rom");
- m_cart_mask = ((1 << (31 - count_leading_zeros(size))) - 1) & 0xffff;
+ m_cart_mask = ((1 << (31 - count_leading_zeros_32(size))) - 1) & 0xffff;
m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
@@ -432,10 +431,10 @@ INPUT_PORTS_END
void ggm_state::ggm(machine_config &config)
{
/* basic machine hardware */
- M6502(config, m_maincpu, 2000000);
+ M6502(config, m_maincpu, 2_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &ggm_state::main_map);
- MOS6522(config, m_via, 2000000); // DDRA = 0xff, DDRB = 0x81
+ MOS6522(config, m_via, 2_MHz_XTAL); // DDRA = 0xff, DDRB = 0x81
m_via->writepa_handler().set(FUNC(ggm_state::select_w));
m_via->writepb_handler().set(FUNC(ggm_state::control_w));
m_via->readpb_handler().set(FUNC(ggm_state::input_r));
diff --git a/src/mame/drivers/adam.cpp b/src/mame/drivers/adam.cpp
index c4052ae3162..d3abeeeb31e 100644
--- a/src/mame/drivers/adam.cpp
+++ b/src/mame/drivers/adam.cpp
@@ -458,9 +458,9 @@ uint8_t adam_state::mreq_r(offs_t offset)
}
data = m_cart->bd_r(offset & 0x7fff, data, cs1, cs2, cs3, cs4);
- data = m_slot1->bd_r(offset & 0xff, data, 1, biorq, 1, 1, 1);
- data = m_slot2->bd_r(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2);
- data = m_slot3->bd_r(offset, data, 1, 1, 1, cas1, cas2);
+ data = m_slot[0]->bd_r(offset & 0xff, data, 1, biorq, 1, 1, 1);
+ data = m_slot[1]->bd_r(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2);
+ data = m_slot[2]->bd_r(offset, data, 1, 1, 1, cas1, cas2);
return data;
}
@@ -516,9 +516,9 @@ void adam_state::mreq_w(offs_t offset, uint8_t data)
m_ram->pointer()[offset] = data;
}
- m_slot1->bd_w(offset & 0xff, data, 1, biorq, 1, 1, 1);
- m_slot2->bd_w(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2);
- m_slot3->bd_w(offset, data, 1, 1, 1, cas1, cas2);
+ m_slot[0]->bd_w(offset & 0xff, data, 1, biorq, 1, 1, 1);
+ m_slot[1]->bd_w(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2);
+ m_slot[2]->bd_w(offset, data, 1, 1, 1, cas1, cas2);
}
@@ -557,9 +557,9 @@ uint8_t adam_state::iorq_r(offs_t offset)
break;
}
- data = m_slot1->bd_r(offset & 0xff, data, 1, biorq, 1, 1, 1);
- data = m_slot2->bd_r(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2);
- data = m_slot3->bd_r(offset, data, 1, 1, 1, cas1, cas2);
+ data = m_slot[0]->bd_r(offset & 0xff, data, 1, biorq, 1, 1, 1);
+ data = m_slot[1]->bd_r(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2);
+ data = m_slot[2]->bd_r(offset, data, 1, 1, 1, cas1, cas2);
return data;
}
@@ -609,9 +609,9 @@ void adam_state::iorq_w(offs_t offset, uint8_t data)
break;
}
- m_slot1->bd_w(offset & 0xff, data, 1, biorq, 1, 1, 1);
- m_slot2->bd_w(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2);
- m_slot3->bd_w(offset, data, 1, 1, 1, cas1, cas2);
+ m_slot[0]->bd_w(offset & 0xff, data, 1, biorq, 1, 1, 1);
+ m_slot[1]->bd_w(offset, data, bmreq, biorq, aux_rom_cs, 1, cas2);
+ m_slot[2]->bd_w(offset, data, 1, 1, 1, cas1, cas2);
}
@@ -1076,11 +1076,11 @@ void adam_state::adam(machine_config &config)
ADAMNET_SLOT(config, "net15", m_adamnet, adamnet_devices, nullptr);
COLECOVISION_CARTRIDGE_SLOT(config, m_cart, colecovision_cartridges, nullptr);
- ADAM_EXPANSION_SLOT(config, m_slot1, XTAL(7'159'090)/2, adam_slot1_devices, "adamlink");
- m_slot1->irq().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- ADAM_EXPANSION_SLOT(config, m_slot2, XTAL(7'159'090)/2, adam_slot2_devices, nullptr);
- m_slot2->irq().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- ADAM_EXPANSION_SLOT(config, m_slot3, XTAL(7'159'090)/2, adam_slot3_devices, "ram");
+ ADAM_EXPANSION_SLOT(config, m_slot[0], XTAL(7'159'090)/2, adam_slot1_devices, "adamlink"); // left
+ m_slot[0]->irq().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ ADAM_EXPANSION_SLOT(config, m_slot[1], XTAL(7'159'090)/2, adam_slot2_devices, nullptr); // center
+ m_slot[1]->irq().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ ADAM_EXPANSION_SLOT(config, m_slot[2], XTAL(7'159'090)/2, adam_slot3_devices, "ram"); // right
COLECOVISION_CONTROL_PORT(config, m_joy1, colecovision_control_port_devices, "hand");
m_joy1->irq().set(FUNC(adam_state::joy1_irq_w));
diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp
index 52826b35be4..bc5e2be148e 100644
--- a/src/mame/drivers/apple2e.cpp
+++ b/src/mame/drivers/apple2e.cpp
@@ -3380,8 +3380,8 @@ void apple2e_state::r4000bank_map(address_map &map)
void apple2e_state::c100bank_map(address_map &map)
{
map(0x0000, 0x01ff).rw(FUNC(apple2e_state::c100_r), FUNC(apple2e_state::c100_w));
- map(0x0200, 0x03ff).r(FUNC(apple2e_state::c100_int_r)).nopw();
- map(0x0400, 0x05ff).r(FUNC(apple2e_state::c100_int_bank_r)).nopw();
+ map(0x0200, 0x03ff).rw(FUNC(apple2e_state::c100_int_r), FUNC(apple2e_state::c100_w));
+ map(0x0400, 0x05ff).rw(FUNC(apple2e_state::c100_int_bank_r), FUNC(apple2e_state::c100_w));
map(0x0600, 0x07ff).r(FUNC(apple2e_state::c100_cec_r)).nopw();
map(0x0800, 0x09ff).r(FUNC(apple2e_state::c100_cec_bank_r)).nopw();
@@ -3390,8 +3390,8 @@ void apple2e_state::c100bank_map(address_map &map)
void apple2e_state::c300bank_map(address_map &map)
{
map(0x0000, 0x00ff).rw(FUNC(apple2e_state::c300_r), FUNC(apple2e_state::c300_w));
- map(0x0100, 0x01ff).r(FUNC(apple2e_state::c300_int_r)).nopw();
- map(0x0200, 0x02ff).r(FUNC(apple2e_state::c300_int_bank_r)).nopw();
+ map(0x0100, 0x01ff).rw(FUNC(apple2e_state::c300_int_r), FUNC(apple2e_state::c300_w));
+ map(0x0200, 0x02ff).rw(FUNC(apple2e_state::c300_int_bank_r), FUNC(apple2e_state::c300_w));
map(0x0300, 0x03ff).r(FUNC(apple2e_state::c300_cec_r)).nopw();
map(0x0400, 0x04ff).r(FUNC(apple2e_state::c300_cec_bank_r)).nopw();
}
@@ -4832,7 +4832,10 @@ void apple2e_state::apple2e(machine_config &config)
void apple2e_state::apple2epal(machine_config &config)
{
apple2e(config);
- m_screen->set_raw(1021800*14, (65*7)*2, 0, (40*7)*2, 312, 0, 192);
+ M6502(config.replace(), m_maincpu, 1016966);
+ m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::apple2e_map);
+ m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline));
+ m_screen->set_raw(1016966 * 14, (65 * 7) * 2, 0, (40 * 7) * 2, 312, 0, 192);
}
void apple2e_state::mprof3(machine_config &config)
@@ -4855,7 +4858,11 @@ void apple2e_state::apple2ee(machine_config &config)
void apple2e_state::apple2eepal(machine_config &config)
{
apple2ee(config);
- m_screen->set_raw(1021800*14, (65*7)*2, 0, (40*7)*2, 312, 0, 192);
+ M65C02(config.replace(), m_maincpu, 1016966);
+ m_maincpu->set_addrmap(AS_PROGRAM, &apple2e_state::apple2e_map);
+ m_maincpu->set_dasm_override(FUNC(apple2e_state::dasm_trampoline));
+
+ m_screen->set_raw(1016966 * 14, (65 * 7) * 2, 0, (40 * 7) * 2, 312, 0, 192);
}
void apple2e_state::spectred(machine_config &config)
diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp
index 61edd2ce1b0..e0ec82d1be6 100644
--- a/src/mame/drivers/apple2gs.cpp
+++ b/src/mame/drivers/apple2gs.cpp
@@ -2186,7 +2186,12 @@ int apple2gs_state::get_vpos()
{
// as per IIgs Tech Note #39, this is simply scanline + 250 on NTSC (262 lines),
// or scanline + 200 on PAL (312 lines)
- return ((m_screen->vpos() + BORDER_TOP) % 262) + 250;
+ int vpos = m_screen->vpos() + (511 - BORDER_TOP + 6);
+ if (vpos > 511)
+ {
+ vpos -= (511 - 250);
+ }
+ return vpos;
}
void apple2gs_state::process_clock()
@@ -4955,7 +4960,8 @@ void apple2gs_state::apple2gs(machine_config &config)
applefdintf_device::add_35(config, m_floppy[2]);
applefdintf_device::add_35(config, m_floppy[3]);
- SOFTWARE_LIST(config, "flop35_list").set_original("apple2gs");
+ SOFTWARE_LIST(config, "flop35_list").set_original("apple2gs_flop_orig"); // Until we have clean cracks, use this as the default
+ SOFTWARE_LIST(config, "flop35_misc").set_compatible("apple2gs_flop_misc"); // Legacy software list pre-June 2021 and defaced cracks
SOFTWARE_LIST(config, "flop525_clean").set_compatible("apple2_flop_clcracked"); // No filter on clean cracks yet.
SOFTWARE_LIST(config, "flop525_orig").set_compatible("apple2_flop_orig").set_filter("A2GS"); // Filter list to compatible disks for this machine.
SOFTWARE_LIST(config, "flop525_misc").set_compatible("apple2_flop_misc");
diff --git a/src/mame/drivers/apple3.cpp b/src/mame/drivers/apple3.cpp
index 1c633605b89..32262a419a8 100644
--- a/src/mame/drivers/apple3.cpp
+++ b/src/mame/drivers/apple3.cpp
@@ -26,6 +26,8 @@
#include "bus/a2bus/mouse.h"
#include "bus/a2bus/a2zipdrive.h"
#include "bus/a2bus/cmsscsi.h"
+#include "bus/a2bus/titan3plus2.h"
+#include "bus/a2bus/a2mockingboard.h"
#include "bus/rs232/rs232.h"
@@ -47,6 +49,8 @@ static void apple3_cards(device_slot_interface &device)
device.option_add("mouse", A2BUS_MOUSE); // Apple II Mouse Card
device.option_add("focusdrive", A2BUS_FOCUSDRIVE); // Focus Drive IDE card
device.option_add("cmsscsi", A2BUS_CMSSCSI); // CMS Apple II SCSI Card
+ device.option_add("titan3plus2", A2BUS_TITAN3PLUS2); // Titan /// Plus 2 card
+ device.option_add("mockingboard", A2BUS_MOCKINGBOARD);
}
static void a3_floppies(device_slot_interface &device)
diff --git a/src/mame/drivers/aristmk5.cpp b/src/mame/drivers/aristmk5.cpp
index 3537d488089..5a9223b9a9e 100644
--- a/src/mame/drivers/aristmk5.cpp
+++ b/src/mame/drivers/aristmk5.cpp
@@ -2407,6 +2407,9 @@ void aristmk5_state::aristmk5_usa_touch(machine_config &config)
ROM_REGION( 0x400000, "set_4.04.09", ROMREGION_ERASEFF ) /* setchip v4.04.09 */ \
ROM_LOAD32_WORD( "setchip v4.04.09.u7", 0x000000, 0x80000, CRC(e8e8dc75) SHA1(201fe95256459ce34fdb6f7498135ab5016d07f3) ) \
ROM_LOAD32_WORD( "setchip v4.04.09.u11", 0x000002, 0x80000, CRC(ff7a9035) SHA1(4352c4336e61947c555fdc80c61f944076f64b64) ) \
+ ROM_REGION( 0x400000, "set_4.04.09_alt", ROMREGION_ERASEFF ) /* setchip v4.04.09 alternate? u7 matches, u11 is almost identical. Checksum-16 of the dump matches what's on the label */ \
+ ROM_LOAD32_WORD( "clear_mk5_u_7_ck_eb68.u7", 0x000000, 0x80000, CRC(e8e8dc75) SHA1(201fe95256459ce34fdb6f7498135ab5016d07f3) ) \
+ ROM_LOAD32_WORD( "clear_mk5_u_11_ck_3a6f.u11", 0x000002, 0x80000, CRC(4cf70173) SHA1(f3dda0f188c035a36954048b449b9b96787709f2) ) \
ROM_REGION( 0x400000, "set_4.04.08", ROMREGION_ERASEFF ) /* setchip v4.04.08 */ \
ROM_LOAD32_WORD( "setchip v4.04.08.u7", 0x000000, 0x80000, CRC(7c4b7fe4) SHA1(39dd39c794c0cb6abc1b7503650643a8131468d1) ) \
ROM_LOAD32_WORD( "setchip v4.04.08.u11", 0x000002, 0x80000, CRC(d3234a28) SHA1(8ff112ee4aadf1d359ca8ffe0cfa9c7400aa0595) ) \
@@ -2422,6 +2425,9 @@ void aristmk5_state::aristmk5_usa_touch(machine_config &config)
ROM_REGION( 0x400000, "set_4.02.04", ROMREGION_ERASEFF ) /* setchip v4.02.04 */ \
ROM_LOAD32_WORD( "setchip v4.02.04.u7", 0x000000, 0x80000, CRC(5a254b22) SHA1(8444f237b392df2a3cb42ea349e7af32f47dd544) ) \
ROM_LOAD32_WORD( "setchip v4.02.04.u11", 0x000002, 0x80000, CRC(def36617) SHA1(c7ba5b08e884a8fb36c9fb51c08e243e32c81f89) ) \
+ ROM_REGION( 0x400000, "set_4.02.04_alt", ROMREGION_ERASEFF ) /* setchip v4.02.04, but seems to have more code and some different strings */ \
+ ROM_LOAD32_WORD( "setchip v4.02.04_alt.u7", 0x000000, 0x80000, CRC(41275334) SHA1(d4a63dbc77c2c44f6a9c72b389bd270f2137997f) ) /* _alt suffix added to avoid having same ROM labels */ \
+ ROM_LOAD32_WORD( "setchip v4.02.04_alt.u11", 0x000002, 0x80000, CRC(254e8b03) SHA1(0ed9723258d3f86b21bf132cbe2fd0bae978cd5e) ) /* _alt suffix added to avoid having same ROM labels */ \
ROM_REGION( 0x400000, "set_1.0", ROMREGION_ERASEFF ) /* setchip v1.0 */ \
ROM_LOAD32_WORD( "setchip v1.0.u7", 0x000000, 0x80000, CRC(16c2828d) SHA1(87218a76bb2791bce27b4b8ab341ba73cbbf6ffe) ) \
ROM_LOAD32_WORD( "setchip v1.0.u11", 0x000002, 0x80000, CRC(a969f12b) SHA1(fc6d234ce1f5c6b5aceb97b73aad60144352023b) )
diff --git a/src/mame/drivers/astrocde.cpp b/src/mame/drivers/astrocde.cpp
index eda7f8b7c81..d583a63f3a6 100644
--- a/src/mame/drivers/astrocde.cpp
+++ b/src/mame/drivers/astrocde.cpp
@@ -1560,7 +1560,7 @@ ROM_START( wow )
ROM_LOAD( "wow.x5", 0x8000, 0x1000, CRC(16912c2b) SHA1(faf9c96d99bc111c5f1618f6863f22fd9269027b) )
ROM_LOAD( "wow.x6", 0x9000, 0x1000, CRC(35797f82) SHA1(376bba29e88c16d95438fa996913b76581df0937) )
ROM_LOAD( "wow.x7", 0xa000, 0x1000, CRC(ce404305) SHA1(a52c6c7b77842f25c79515460be6b7ed959b5edb) )
-/* ROM_LOAD( "wow.x11", 0xc000, CRC(00001000) , ? ) here would go the foreign language ROM */
+ //ROM_LOAD( "wow.x11", 0xc000, 0x1000 NO_DUMP ) // here would go the foreign language ROM
ROM_END
diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp
index d1f4638d029..5f91e82b478 100644
--- a/src/mame/drivers/at.cpp
+++ b/src/mame/drivers/at.cpp
@@ -1976,8 +1976,8 @@ ROM_START( ec1849 )
ROM_REGION16_LE(0x20000,"bios", 0)
ROM_LOAD16_BYTE( "cpu-card_27c256_015.rom", 0x10000, 0x8000, CRC(68eadf0a) SHA1(903a7f1c3ebc6b27c31b512b2908c483608b5c13))
ROM_LOAD16_BYTE( "cpu-card_27c256_016.rom", 0x10001, 0x8000, CRC(bc3924d6) SHA1(596be415e6c2bc4ff30a187f146664531565712c))
- //ROM_LOAD16_BYTE( "video-card_573rf6( 2764)_040.rom", 0xc0001, 0x2000, CRC(a3ece315) SHA1(e800e11c3b1b6fcaf41bfb7d4058a9d34fdd2b3f))
- //ROM_LOAD16_BYTE( "video-card_573rf6( 2764)_041.rom", 0xc0000, 0x2000, CRC(b0a2ba7f) SHA1(c8160e8bc97cd391558f1dddd3fd3ec4a19d030c))
+ //ROM_LOAD16_BYTE( "video-card_573rf6(2764)_040.rom", 0xc0001, 0x2000, CRC(a3ece315) SHA1(e800e11c3b1b6fcaf41bfb7d4058a9d34fdd2b3f))
+ //ROM_LOAD16_BYTE( "video-card_573rf6(2764)_041.rom", 0xc0000, 0x2000, CRC(b0a2ba7f) SHA1(c8160e8bc97cd391558f1dddd3fd3ec4a19d030c))
ROM_END
// Morse KP-286
diff --git a/src/mame/drivers/ave_arb.cpp b/src/mame/drivers/ave_arb.cpp
index 1ba8958eaf9..5d2273d959d 100644
--- a/src/mame/drivers/ave_arb.cpp
+++ b/src/mame/drivers/ave_arb.cpp
@@ -38,6 +38,9 @@ TODO:
******************************************************************************/
#include "emu.h"
+
+#include "bus/generic/carts.h"
+#include "bus/generic/slot.h"
#include "cpu/m6502/m6502.h"
#include "cpu/m6502/m65c02.h"
#include "video/pwm.h"
@@ -45,8 +48,6 @@ TODO:
#include "machine/6522via.h"
#include "machine/nvram.h"
#include "sound/dac.h"
-#include "bus/generic/slot.h"
-#include "bus/generic/carts.h"
#include "speaker.h"
#include "softlist.h"
@@ -148,7 +149,7 @@ void arb_state::update_reset()
DEVICE_IMAGE_LOAD_MEMBER(arb_state::cart_load)
{
u32 size = m_cart->common_get_size("rom");
- m_cart_mask = ((1 << (31 - count_leading_zeros(size))) - 1) & 0x7fff;
+ m_cart_mask = ((1 << (31 - count_leading_zeros_32(size))) - 1) & 0x7fff;
m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
diff --git a/src/mame/drivers/betacam.cpp b/src/mame/drivers/betacam.cpp
index 38f136351f9..59dacce5b1c 100644
--- a/src/mame/drivers/betacam.cpp
+++ b/src/mame/drivers/betacam.cpp
@@ -98,7 +98,8 @@ void betacam_state::betacam(machine_config &config)
m_systemcpu->set_addrmap(AS_PROGRAM, &betacam_state::system_mem_map);
m_systemcpu->p2_in_cb().set_ioport("DSW1");
- HD6475348(config, m_servocpu, 20_MHz_XTAL); //Actual chip is marked "H8/534 6435348F 10"
+ HD6435348(config, m_servocpu, 20_MHz_XTAL); //Actual chip is marked "H8/534 6435348F 10"
+ m_servocpu->set_mode(3);
m_servocpu->set_addrmap(AS_PROGRAM, &betacam_state::servo_mem_map);
//CXD1095(config, "cxdio0");
diff --git a/src/mame/drivers/bvm.cpp b/src/mame/drivers/bvm.cpp
index af931fefd7b..a6ee2d9767c 100644
--- a/src/mame/drivers/bvm.cpp
+++ b/src/mame/drivers/bvm.cpp
@@ -51,7 +51,6 @@ private:
void bvm_state::mem_map(address_map &map)
{
- // internal ROM not used here?
map(0x00000, 0x0f67f).rw("flash", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write));
map(0x10000, 0x17fff).ram().share("nvram");
map(0x18000, 0x18007).rw("cxdio0", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write));
@@ -66,6 +65,7 @@ INPUT_PORTS_END
void bvm_state::bvm(machine_config &config)
{
HD6435368(config, m_maincpu, 20_MHz_XTAL);
+ m_maincpu->set_mode(3); // internal ROM not used here?
m_maincpu->set_addrmap(AS_PROGRAM, &bvm_state::mem_map);
CAT28F020(config, "flash");
diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp
index f9f45d9e660..6a4e1eb5cd6 100644
--- a/src/mame/drivers/cbm2.cpp
+++ b/src/mame/drivers/cbm2.cpp
@@ -81,7 +81,7 @@ public:
m_ieee2(*this, DS75161A_TAG),
m_joy1(*this, CONTROL1_TAG),
m_joy2(*this, CONTROL2_TAG),
- m_exp(*this, CBM2_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_user(*this, USER_PORT_TAG),
m_ram(*this, RAM_TAG),
m_cassette(*this, PET_DATASSETTE_PORT_TAG),
diff --git a/src/mame/drivers/cclimber.cpp b/src/mame/drivers/cclimber.cpp
index b728d654aec..cf812895208 100644
--- a/src/mame/drivers/cclimber.cpp
+++ b/src/mame/drivers/cclimber.cpp
@@ -1606,7 +1606,7 @@ ROM_START( cclimbrrod )
ROM_END
-/* Sets below are Crazy Kong Part II and have an extra screen in attract mode, showing a caged Kong and copyright */
+// Sets below are Crazy Kong Part II and have an extra screen in attract mode, showing a caged Kong and copyright
ROM_START( ckongpt2 )
ROM_REGION( 0x6000, "maincpu", 0 )
@@ -1724,6 +1724,34 @@ ROM_START( ckongpt2jeu )
ROM_LOAD( "13.5p", 0x1000, 0x1000, CRC(9003ffbd) SHA1(fd016056aabc23957643f37230f03842294f795e) )
ROM_END
+ROM_START( ckongpt2ss )
+ ROM_REGION( 0x6000, "maincpu", 0 )
+ ROM_LOAD( "ck2_7.5d", 0x0000, 0x1000, CRC(b27df032) SHA1(57f9be139c610405e3c2fddd7093dfb1277e450e) )
+ ROM_LOAD( "ck2_8.5e", 0x1000, 0x1000, CRC(5dc1aaba) SHA1(42b9e5946ffce7c156d114bde68f37c2c34853c4) )
+ ROM_LOAD( "ck2_9.5h", 0x2000, 0x1000, CRC(c9054c94) SHA1(1aa08d2501ee620759fd5c111e12f6d432c25294) )
+ ROM_LOAD( "ck_10.5k", 0x3000, 0x1000, CRC(923420cb) SHA1(51f809c92a1e7483debbf29e77364d0ab3b863e6) ) // unique
+ ROM_LOAD( "ck2_11.5l", 0x4000, 0x1000, CRC(ae159192) SHA1(d467256a3a366e246243e7828ff4a45d4c146e2c) )
+ ROM_LOAD( "ck_12.5n", 0x5000, 0x1000, CRC(25a015d3) SHA1(8b932cb9ae1ba67b4ff86b7b97be0c31cef23514) ) // unique
+
+ ROM_REGION( 0x4000, "gfx1", 0 )
+ ROM_LOAD( "ck2_6.11n", 0x0000, 0x1000, CRC(2dcedd12) SHA1(dfdcfc21bcba7c8e148ee54daae511ca78c58e70) )
+ ROM_LOAD( "ck2_5.11l", 0x1000, 0x1000, CRC(fa7cbd91) SHA1(0208d2ebc59f3600005476b6987472685bc99d67) )
+ ROM_LOAD( "ck2_4.11k", 0x2000, 0x1000, CRC(3375b3bd) SHA1(a00b3c31cff123aab6ac0833aabfdd663302971a) )
+ ROM_LOAD( "ck2_3.11h", 0x3000, 0x1000, CRC(5655cc11) SHA1(5195e9b2a60c54280b48b32ee8248090904dbc51) )
+
+ ROM_REGION( 0x1000, "gfx2", 0 )
+ ROM_LOAD( "ck2_2.11c", 0x0000, 0x0800, CRC(d1352c31) SHA1(da726a63a8be830d695afeddc1717749af8c9d47) )
+ ROM_LOAD( "ck2_1.11a", 0x0800, 0x0800, CRC(a7a2fdbd) SHA1(529865f8bbfbdbbf34ac39c70ef17e6d5bd0f845) )
+
+ ROM_REGION( 0x0060, "proms", 0 )
+ ROM_LOAD( "mb7051.v6", 0x0000, 0x0020, CRC(b3fc1505) SHA1(5b94adde0428a26b815c7eb9b3f3716470d349c7) )
+ ROM_LOAD( "mb7051.u6", 0x0020, 0x0020, CRC(26aada9e) SHA1(f59645e606ea4f0dd0fc4ea47dd03f526c534941) )
+ ROM_LOAD( "mb7051.t6", 0x0040, 0x0020, CRC(676b3166) SHA1(29b9434cd34d43ea5664e436e2a24b54f8d88aac) )
+
+ ROM_REGION( 0x2000, "cclimber_audio:samples", 0 )
+ ROM_LOAD( "14.5s", 0x0000, 0x1000, CRC(5f0bcdfb) SHA1(7f79bf6de117348f606696ed7ea1937bbf926612) )
+ ROM_LOAD( "13.5p", 0x1000, 0x1000, CRC(9003ffbd) SHA1(fd016056aabc23957643f37230f03842294f795e) )
+ROM_END
ROM_START( ckongpt2b )
ROM_REGION( 0x6000, "maincpu", 0 )
@@ -1783,7 +1811,7 @@ ROM_START( ckongpt2b2 )
ROM_LOAD( "6.bin", 0x1000, 0x1000, CRC(9003ffbd) SHA1(fd016056aabc23957643f37230f03842294f795e) )
ROM_END
-/* Sets below are 'Crazy Kong' without the extra Falcon screen or Pt. 2 subtitle, they also have worse colours */
+// Sets below are 'Crazy Kong' without the extra Falcon screen or Pt. 2 subtitle, they also have worse colours
ROM_START( ckong )
ROM_REGION( 0x6000, "maincpu", 0 )
@@ -2732,50 +2760,51 @@ void cclimber_state::init_rpatrol()
}
-GAME( 1980, cclimber, 0, cclimberx, cclimber, cclimber_state, init_cclimber, ROT0, "Nichibutsu", "Crazy Climber (US set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, cclimbera, cclimber, cclimberx, cclimber, cclimber_state, init_cclimber, ROT0, "Nichibutsu", "Crazy Climber (US set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, cclimberj, cclimber, cclimberx, cclimberj, cclimber_state, init_cclimberj, ROT0, "Nichibutsu", "Crazy Climber (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, ccboot, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg", "Crazy Climber (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, ccboot2, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg", "Crazy Climber (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, ccbootmr, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg (Model Racing)", "Crazy Climber (Model Racing bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, cclimber, 0, cclimberx, cclimber, cclimber_state, init_cclimber, ROT0, "Nichibutsu", "Crazy Climber (US set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, cclimbera, cclimber, cclimberx, cclimber, cclimber_state, init_cclimber, ROT0, "Nichibutsu", "Crazy Climber (US set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, cclimberj, cclimber, cclimberx, cclimberj, cclimber_state, init_cclimberj, ROT0, "Nichibutsu", "Crazy Climber (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, ccboot, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg", "Crazy Climber (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, ccboot2, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg", "Crazy Climber (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, ccbootmr, cclimber, cclimberx, cclimber, cclimber_state, init_cclimberj, ROT0, "bootleg (Model Racing)", "Crazy Climber (Model Racing bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, cclimbroper, cclimber, cclimber, cclimber, cclimber_state, empty_init, ROT0, "bootleg (Operamatic)", "Crazy Climber (Spanish, Operamatic bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, cclimbrrod, cclimber, cclimber, cclimber, cclimber_state, empty_init, ROT0, "bootleg (Rodmar)", "Crazy Climber (Spanish, Rodmar bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, cclimbrrod, cclimber, cclimber, cclimber, cclimber_state, empty_init, ROT0, "bootleg (Rodmar)", "Crazy Climber (Spanish, Rodmar bootleg)", MACHINE_SUPPORTS_SAVE )
/* these sets have ugly colours, no extra attract screen, and no graphics for the extra attract screen in the BG roms
- there is a Falcon logo in the text roms which is unused
- does the code to display the extra screen still exist in the roms? */
-GAME( 1981, ckong, 0, cclimber, ckong, cclimber_state, empty_init, ROT270, "Kyoei / Falcon", "Crazy Kong", MACHINE_SUPPORTS_SAVE ) // on a Falcon FCK-01 PCB, but doesn't display any Falcon copyright
-GAME( 1981, ckongalc, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Alca)", "Crazy Kong (Alca bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, monkeyd, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg", "Monkey Donkey", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, dking, ckong, cclimber, ckong, cclimber_state, init_dking, ROT270, "bootleg", "Donkey King", MACHINE_SUPPORTS_SAVE ) // supposedly, possibly by Hafasonic?
+GAME( 1981, ckong, 0, cclimber, ckong, cclimber_state, empty_init, ROT270, "Kyoei / Falcon", "Crazy Kong", MACHINE_SUPPORTS_SAVE ) // on a Falcon FCK-01 PCB, but doesn't display any Falcon copyright
+GAME( 1981, ckongalc, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Alca)", "Crazy Kong (Alca bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, monkeyd, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg", "Monkey Donkey", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, dking, ckong, cclimber, ckong, cclimber_state, init_dking, ROT270, "bootleg", "Donkey King", MACHINE_SUPPORTS_SAVE ) // supposedly, possibly by Hafasonic?
GAME( 1981, ckongdks, ckong, cclimber, ckong, cclimber_state, init_dking, ROT270, "bootleg", "Donkey Kong (Spanish Crazy Kong bootleg)", MACHINE_SUPPORTS_SAVE )
/* these sets have correct colours, and also contain the graphics used for the extra attract screen in the BG roms, but it is unused
- the Falcon logo in the text roms is still unused
- does the code to display the extra screen still exist in the roms? */
GAME( 1981, ckongo, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Orca)", "Crazy Kong (Orca bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, bigkong, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg", "Big Kong", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, bigkong, ckong, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg", "Big Kong", MACHINE_SUPPORTS_SAVE )
/* these sets have correct colours, and the extra attract screen, they also make use of the Falcon logo, some sets hack out the Falcon
text on the extra screen */
-GAME( 1981, ckongpt2, 0, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, ckongpt2a, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, ckongpt2j, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, ckongpt2jeu, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Jeutel)", "Crazy Kong Part II (Jeutel bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, ckongpt2b, ckongpt2, ckongb, ckongb, cclimber_state, init_ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, ckongpt2b2, ckongpt2, cclimber, ckongb2, cclimber_state, empty_init, ROT270, "bootleg", "Crazy Kong Part II (bootleg)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // one PROM differs and seems bad, but dump has been confirmed on multiple PCBs
+GAME( 1981, ckongpt2, 0, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, ckongpt2a, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, ckongpt2j, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "Falcon", "Crazy Kong Part II (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, ckongpt2jeu, ckongpt2, cclimber, ckong, cclimber_state, empty_init, ROT270, "bootleg (Jeutel)", "Crazy Kong Part II (Jeutel bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, ckongpt2ss, ckongpt2, cclimber, ckongb2, cclimber_state, empty_init, ROT270, "bootleg (SegaSA / Sonic)", "Crazy Kong (SegaSA / Sonic bootleg)", MACHINE_SUPPORTS_SAVE ) // on a Falcon FCK-00 PCB
+GAME( 1981, ckongpt2b, ckongpt2, ckongb, ckongb, cclimber_state, init_ckongb, ROT270, "bootleg", "Crazy Kong Part II (alternative levels)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, ckongpt2b2, ckongpt2, cclimber, ckongb2, cclimber_state, empty_init, ROT270, "bootleg", "Crazy Kong Part II (bootleg)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // one PROM differs and seems bad, but dump has been confirmed on multiple PCBs
// see bagman.cpp for parent
GAME( 1982, bagmanf, bagman, bagmanf, bagmanf, cclimber_state, empty_init, ROT270, "bootleg", "Le Bagnard (bootleg on Crazy Kong hardware)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-GAME( 1981, rpatrol, 0, rpatrol, rpatrol, cclimber_state, init_rpatrol, ROT0, "Orca", "River Patrol (Japan)", MACHINE_SUPPORTS_SAVE)
+GAME( 1981, rpatrol, 0, rpatrol, rpatrol, cclimber_state, init_rpatrol, ROT0, "Orca", "River Patrol (Japan)", MACHINE_SUPPORTS_SAVE)
GAME( 1981, rpatroln, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "Orca", "River Patrol (Japan, unprotected)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, rpatrolb, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "bootleg", "River Patrol (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, silvland, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "Falcon", "Silver Land", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, rpatrolb, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "bootleg", "River Patrol (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, silvland, rpatrol, rpatrol, rpatrol, cclimber_state, empty_init, ROT0, "Falcon", "Silver Land", MACHINE_SUPPORTS_SAVE )
// see pacman.cpp for parent
-GAME( 1985, cannonb, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb, ROT90, "bootleg (Soft)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game
-GAME( 1985, cannonb2, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb2, ROT90, "bootleg (TV Game Gruenberg)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy)", MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game
+GAME( 1985, cannonb, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb, ROT90, "bootleg (Soft)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 1, buggy)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game
+GAME( 1985, cannonb2, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb2, ROT90, "bootleg (TV Game Gruenberg)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 2, buggy)", MACHINE_SUPPORTS_SAVE ) // bootleggers missed protection after bonus game
GAME( 1985, cannonb3, cannonbp, cannonb, cannonb, cclimber_state, init_cannonb2, ROT90, "bootleg (Soft)", "Cannon Ball (bootleg on Crazy Kong hardware) (set 3, no bonus game)", MACHINE_SUPPORTS_SAVE ) // the bonus game is patched out, thus avoiding the protection issue
GAME( 1982, swimmer, 0, swimmer, swimmer, cclimber_state, empty_init, ROT0, "Tehkan", "Swimmer (set 1)", MACHINE_SUPPORTS_SAVE )
@@ -2785,7 +2814,7 @@ GAME( 1982, swimmerb, swimmer, swimmer, swimmerb, cclimber_state, empty_i
GAME( 1983, guzzler, 0, guzzler, guzzler, cclimber_state, empty_init, ROT90, "Tehkan", "Guzzler", MACHINE_SUPPORTS_SAVE )
GAME( 1983, guzzlers, guzzler, guzzler, guzzler, cclimber_state, empty_init, ROT90, "Tehkan", "Guzzler (Swimmer Conversion)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, yamato, 0, yamato, yamato, cclimber_state, init_yamato, ROT90, "Sega", "Yamato (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1983, yamato, 0, yamato, yamato, cclimber_state, init_yamato, ROT90, "Sega", "Yamato (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1983, yamato2, yamato, yamato, yamato, cclimber_state, init_yamato, ROT90, "Sega", "Yamato (World?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1983, toprollr, 0, toprollr, toprollr, cclimber_state, init_toprollr, ROT90, "Jaleco", "Top Roller", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/chexx.cpp b/src/mame/drivers/chexx.cpp
index ab185f04337..40fa111d5c5 100644
--- a/src/mame/drivers/chexx.cpp
+++ b/src/mame/drivers/chexx.cpp
@@ -71,6 +71,9 @@ exact clone of the 1st generation ICE Chexx hardware (https://www.recreativas.or
| x2 T74LS365B1 x2 |
|___________ COST _____________ TIME ___|
+The electromechanical game Fire Escape (1984, Mech-Tronic Games, Inc.)
+appears to run on very similar hardware, with a AY8912 but no Digitalker.
+
***************************************************************************/
#include "emu.h"
diff --git a/src/mame/drivers/decmate2.cpp b/src/mame/drivers/decmate2.cpp
index 40d52bd0357..ea7b1420a31 100644
--- a/src/mame/drivers/decmate2.cpp
+++ b/src/mame/drivers/decmate2.cpp
@@ -966,17 +966,18 @@ void decmate2_state::pc238(machine_config &config)
ROM_START(decmate2)
ROM_REGION16_BE(0x2000, "cprom", 0)
- //ROM_LOAD16_BYTE("23-399e2.e113", 0x0000, 0x0800, NO_DUMP) // 0000-3777, bits 0:7 (to be shifted)
- //ROM_LOAD16_BYTE("23-400e2.e114", 0x1000, 0x0800, NO_DUMP) // 4000-7777, bits 0:7 (to be shifted)
- //ROM_LOAD16_BYTE("23-401e2.e115", 0x0001, 0x0800, NO_DUMP) // 0000-3777 & 4000-7777, bits 8:11 (to be split up)
- ROM_SYSTEM_BIOS(0, "19h", "19H (2310)")
- ROMX_LOAD("23-390e2.e113", 0x0000, 0x0800, CRC(9b19451a) SHA1(ed26557f17f59ce05ca08b34a05a24a97388dfe0), ROM_BIOS(0) | ROM_SKIP(1))
- ROMX_LOAD("23-391e2.e114", 0x1000, 0x0800, CRC(3a09ada1) SHA1(3093bd926d49c2fd62a773e8019e3755aa165ae9), ROM_BIOS(0) | ROM_SKIP(1))
- ROMX_LOAD("23-392e2.e115", 0x0001, 0x0800, CRC(19901cb6) SHA1(82a642d2b5b56250611f69321d0251e27fa639fc), ROM_BIOS(0) | ROM_SKIP(1))
- ROM_SYSTEM_BIOS(1, "31z", "31Z (3732)") // Regenerated from source code listing
- ROMX_LOAD("23-358e2.e113", 0x0000, 0x0800, BAD_DUMP CRC(e6b9ab4d) SHA1(12533bab586b7bc753fae3ce1959bc5ced3905f5), ROM_BIOS(1) | ROM_SKIP(1))
- ROMX_LOAD("23-359e2.e114", 0x1000, 0x0800, BAD_DUMP CRC(3d1825b7) SHA1(753af9657eef1a284801c9765f4899563d3d9a20), ROM_BIOS(1) | ROM_SKIP(1))
- ROMX_LOAD("23-360e2.e115", 0x0001, 0x0800, BAD_DUMP CRC(ed8162e6) SHA1(4ab993c00a5afc6465153ca4f52faa76e02a0ef3), ROM_BIOS(1) | ROM_SKIP(1))
+ ROM_SYSTEM_BIOS(0, "19n", "19N (2316)")
+ ROMX_LOAD("23-399e2.e113", 0x0000, 0x0800, CRC(2881252e) SHA1(5825bc00833dd33f294f79df11200dce76e78740), ROM_BIOS(0) | ROM_SKIP(1)) // 0000-3777, bits 0:7 (to be shifted)
+ ROMX_LOAD("23-400e2.e114", 0x1000, 0x0800, CRC(b6f79f77) SHA1(131a1c28c7d1c90dc1b6c85194f84f120cc60bd9), ROM_BIOS(0) | ROM_SKIP(1)) // 4000-7777, bits 0:7 (to be shifted)
+ ROMX_LOAD("23-401e2.e115", 0x0001, 0x0800, CRC(1076b630) SHA1(7be4c30d512b4f86f645cb7a3a20122ee4187759), ROM_BIOS(0) | ROM_SKIP(1)) // 0000-3777 & 4000-7777, bits 8:11 (to be split up)
+ ROM_SYSTEM_BIOS(1, "19h", "19H (2310)")
+ ROMX_LOAD("23-390e2.e113", 0x0000, 0x0800, CRC(9b19451a) SHA1(ed26557f17f59ce05ca08b34a05a24a97388dfe0), ROM_BIOS(1) | ROM_SKIP(1))
+ ROMX_LOAD("23-391e2.e114", 0x1000, 0x0800, CRC(3a09ada1) SHA1(3093bd926d49c2fd62a773e8019e3755aa165ae9), ROM_BIOS(1) | ROM_SKIP(1))
+ ROMX_LOAD("23-392e2.e115", 0x0001, 0x0800, CRC(19901cb6) SHA1(82a642d2b5b56250611f69321d0251e27fa639fc), ROM_BIOS(1) | ROM_SKIP(1))
+ ROM_SYSTEM_BIOS(2, "31z", "31Z (3732)") // Regenerated from source code listing
+ ROMX_LOAD("23-358e2.e113", 0x0000, 0x0800, BAD_DUMP CRC(e6b9ab4d) SHA1(12533bab586b7bc753fae3ce1959bc5ced3905f5), ROM_BIOS(2) | ROM_SKIP(1))
+ ROMX_LOAD("23-359e2.e114", 0x1000, 0x0800, BAD_DUMP CRC(3d1825b7) SHA1(753af9657eef1a284801c9765f4899563d3d9a20), ROM_BIOS(2) | ROM_SKIP(1))
+ ROMX_LOAD("23-360e2.e115", 0x0001, 0x0800, BAD_DUMP CRC(ed8162e6) SHA1(4ab993c00a5afc6465153ca4f52faa76e02a0ef3), ROM_BIOS(2) | ROM_SKIP(1))
ROM_REGION(0x1000, "rxcpu", 0)
ROM_LOAD("23-008m1.e27", 0x0000, 0x1000, CRC(fae4026b) SHA1(388e093d952ce1f6fcf2dcdab5b5099a6aafad0f))
diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp
index 2b73e06162b..d1a3ae16d40 100644
--- a/src/mame/drivers/dragon.cpp
+++ b/src/mame/drivers/dragon.cpp
@@ -21,23 +21,9 @@
#include "formats/dmk_dsk.h"
#include "formats/sdf_dsk.h"
#include "imagedev/floppy.h"
+#include "bus/coco/cococart.h"
#include "bus/rs232/rs232.h"
-#include "bus/coco/coco_gmc.h"
-#include "bus/coco/coco_orch90.h"
-#include "bus/coco/coco_max.h"
-#include "bus/coco/coco_midi.h"
-#include "bus/coco/coco_pak.h"
-#include "bus/coco/coco_psg.h"
-#include "bus/coco/coco_ram.h"
-#include "bus/coco/coco_ssc.h"
-#include "bus/coco/coco_stecomp.h"
-#include "bus/coco/coco_sym12.h"
-#include "bus/coco/dragon_amtor.h"
-#include "bus/coco/dragon_fdc.h"
-#include "bus/coco/dragon_jcbsnd.h"
-#include "bus/coco/dragon_jcbspch.h"
-#include "bus/coco/dragon_sprites.h"
//**************************************************************************
@@ -153,10 +139,10 @@ static INPUT_PORTS_START( dragon_keyboard )
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP), '^')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("DOWN") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN), 10) PORT_CHAR('[')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("LEFT") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT), 8)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("RIGHT") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT), 9) PORT_CHAR(']')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"\u2191") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP), '^')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"\u2193") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN), 10) PORT_CHAR('[')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"\u2190") PORT_CODE(KEYCODE_LEFT) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(UCHAR_MAMEKEY(LEFT), 8)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"\u2192") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT), 9) PORT_CHAR(']')
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_START("row6")
@@ -171,23 +157,23 @@ static INPUT_PORTS_START( dragon200e_keyboard )
PORT_INCLUDE(dragon_keyboard)
PORT_MODIFY("row0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("0 \xC3\x87") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(0xC7)
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"0 \u00c7") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(0xC7)
PORT_MODIFY("row1")
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("\xC3\x91") PORT_CODE(KEYCODE_COLON) PORT_CHAR(0xD1)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"\u00d1") PORT_CODE(KEYCODE_COLON) PORT_CHAR(0xD1)
PORT_MODIFY("row2")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(';') PORT_CHAR('+')
PORT_MODIFY("row5")
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("UP") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP), '^') PORT_CHAR('_')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("DOWN \xC2\xA1") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(10) PORT_CHAR(0xA1)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("RIGHT \xC2\xBF") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(9) PORT_CHAR(0xBF)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"\u2191") PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP), '^') PORT_CHAR('_')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"\u2193 \u00a1") PORT_CODE(KEYCODE_DOWN) PORT_CHAR(10) PORT_CHAR(0xA1)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"\u2192 \u00bf") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(9) PORT_CHAR(0xBF)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_CHAR(0xA7)
PORT_MODIFY("row6")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("CLEAR @") PORT_CODE(KEYCODE_HOME) PORT_CHAR(12) PORT_CHAR('@')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME("BREAK \xC3\xBC") PORT_CODE(KEYCODE_END) PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) PORT_CHAR(0xFC)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, 0) PORT_NAME(u8"BREAK \u00fc") PORT_CODE(KEYCODE_END) PORT_CODE(KEYCODE_ESC) PORT_CHAR(27) PORT_CHAR(0xFC)
INPUT_PORTS_END
static INPUT_PORTS_START( dragon )
@@ -209,23 +195,9 @@ INPUT_PORTS_END
void dragon_cart(device_slot_interface &device)
{
- device.option_add_internal("amtor", DRAGON_AMTOR);
- device.option_add("ccpsg", COCO_PSG);
- device.option_add("dragon_fdc", DRAGON_FDC);
- device.option_add("gmc", COCO_PAK_GMC);
- device.option_add("jcbsnd", DRAGON_JCBSND);
- device.option_add("jcbspch", DRAGON_JCBSPCH);
- device.option_add("max", COCO_PAK_MAX);
- device.option_add("midi", DRAGON_MIDI);
- device.option_add("orch90", COCO_ORCH90);
- device.option_add("pak", COCO_PAK);
- device.option_add("premier_fdc", PREMIER_FDC);
- device.option_add("ram", COCO_PAK_RAM);
- device.option_add("sdtandy_fdc", SDTANDY_FDC);
- device.option_add("sprites", DRAGON_SPRITES);
- device.option_add("ssc", COCO_SSC);
- device.option_add("stecomp", COCO_STEREO_COMPOSER);
- device.option_add("sym12", COCO_SYM12);
+ dragon_cart_add_basic_devices(device);
+ dragon_cart_add_fdcs(device);
+ dragon_cart_add_multi_pak(device);
}
void dragon_alpha_state::dragon_formats(format_registration &fr)
@@ -553,7 +525,7 @@ ROM_END
#define rom_dragon64h rom_dragon64
#define rom_tanodr64h rom_tanodr64
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1982, dragon32, 0, 0, dragon32, dragon, dragon_state, empty_init, "Dragon Data Ltd", "Dragon 32", 0 )
COMP( 1983, dragon64, dragon32, 0, dragon64, dragon, dragon64_state, empty_init, "Dragon Data Ltd", "Dragon 64", 0 )
COMP( 19??, dragon64h, dragon32, 0, dragon64h, dragon, dragon64_state, empty_init, "Dragon Data Ltd", "Dragon 64 (HD6309E CPU)", MACHINE_UNOFFICIAL )
diff --git a/src/mame/drivers/dynadice.cpp b/src/mame/drivers/dynadice.cpp
index 5aef7ba1fd9..c33fbc5372e 100644
--- a/src/mame/drivers/dynadice.cpp
+++ b/src/mame/drivers/dynadice.cpp
@@ -154,7 +154,7 @@ void dynadice_state::dynadice_sound_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).r("soundlatch", FUNC(generic_latch_8_device::read));
- map(0x01, 0x01).w("soundlatch", FUNC(generic_latch_8_device::write));
+ map(0x01, 0x01).w("soundlatch", FUNC(generic_latch_8_device::clear_w));
map(0x02, 0x02).w(FUNC(dynadice_state::sound_data_w));
map(0x03, 0x03).w(FUNC(dynadice_state::sound_control_w));
}
diff --git a/src/mame/drivers/exidy.cpp b/src/mame/drivers/exidy.cpp
index 2f7e668a320..415b9b0afaf 100644
--- a/src/mame/drivers/exidy.cpp
+++ b/src/mame/drivers/exidy.cpp
@@ -1236,41 +1236,41 @@ ROM_END
ROM_START( spectar )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "spl11a-3", 0x1000, 0x0800, CRC(08880aff) SHA1(3becef348245ff4c8b0aae4a14751ab740b7d160) )
- ROM_LOAD( "spl10a-2", 0x1800, 0x0800, CRC(fca667c1) SHA1(168426f9e87c002d2673c0230fceac4d0831d594) )
- ROM_LOAD( "spl9a-3", 0x2000, 0x0800, CRC(9d4ce8ba) SHA1(2ef45c225fe704e49d10247c3eba1ef14141b3b7) )
- ROM_LOAD( "spl8a-2", 0x2800, 0x0800, CRC(cfacbadf) SHA1(77b27cf6f35e8e8dd2fd4f31bba2a96f3076163e) )
- ROM_LOAD( "spl7a-2", 0x3000, 0x0800, CRC(4c4741ff) SHA1(8de72613a385095253bb9e6da76493caec3115e4) )
- ROM_LOAD( "spl6a-2", 0x3800, 0x0800, CRC(0cb46b25) SHA1(65c5d2cc8df67225339dc8781dd29d4b57ded70c) )
+ ROM_LOAD( "spl11a-3.11a", 0x1000, 0x0800, CRC(08880aff) SHA1(3becef348245ff4c8b0aae4a14751ab740b7d160) )
+ ROM_LOAD( "spl10a-2.10a", 0x1800, 0x0800, CRC(fca667c1) SHA1(168426f9e87c002d2673c0230fceac4d0831d594) )
+ ROM_LOAD( "spl9a-3.9a", 0x2000, 0x0800, CRC(9d4ce8ba) SHA1(2ef45c225fe704e49d10247c3eba1ef14141b3b7) )
+ ROM_LOAD( "spl8a-2.8a", 0x2800, 0x0800, CRC(cfacbadf) SHA1(77b27cf6f35e8e8dd2fd4f31bba2a96f3076163e) )
+ ROM_LOAD( "spl7a-2.7a", 0x3000, 0x0800, CRC(4c4741ff) SHA1(8de72613a385095253bb9e6da76493caec3115e4) )
+ ROM_LOAD( "spl6a-2.6a", 0x3800, 0x0800, CRC(0cb46b25) SHA1(65c5d2cc8df67225339dc8781dd29d4b57ded70c) )
ROM_REGION( 0x0400, "gfx1", 0 )
- ROM_LOAD( "hrl11d-2", 0x0000, 0x0400, CRC(c55b645d) SHA1(0c18277939d74e3e1281a7f114a34781d30c2baf) ) /* this is actually not used (all FF) */
- ROM_CONTINUE( 0x0000, 0x0400 ) /* overwrite with the real one */
+ ROM_LOAD( "hrl11d-2.11d", 0x0000, 0x0400, CRC(c55b645d) SHA1(0c18277939d74e3e1281a7f114a34781d30c2baf) ) /* this is actually not used (all FF) */
+ ROM_CONTINUE( 0x0000, 0x0400 ) /* overwrite with the real one */
- ROM_REGION( 0x0140, "proms", 0 ) // were dumped from a bootleg, very probably they are the same, but marked as bad dump for precaution. The 2 6331 match the Targ ones.
- ROM_LOAD( "prom.5c", 0x0000, 0x0100, BAD_DUMP CRC(9ca2e061) SHA1(4111325b00a1017042d55c59308d41e8333ba627) ) // 6301 according to the Spectar manual
- ROM_LOAD( "prom.6d", 0x0100, 0x0020, BAD_DUMP CRC(e26f9053) SHA1(eec35b6aa2c2d305418306bf4a1754a0583f109f) ) // 6331 according to the Spectar manual
- ROM_LOAD( "hrl14h-1", 0x0120, 0x0020, BAD_DUMP CRC(f76b4fcf) SHA1(197e0cc508ffeb5cefa4046bdfb158939d598225) ) // 6331 according to the Spectar manual
+ ROM_REGION( 0x0140, "proms", 0 )
+ ROM_LOAD( "spl5c-2.5c", 0x0000, 0x0100, CRC(9ca2e061) SHA1(4111325b00a1017042d55c59308d41e8333ba627) ) // 6301 according to the Spectar manual, also seen as IM 5623CPE on PCB
+ ROM_LOAD( "prom.6d", 0x0100, 0x0020, BAD_DUMP CRC(e26f9053) SHA1(eec35b6aa2c2d305418306bf4a1754a0583f109f) ) // screen controller PROM, 6331 according to the Spectar manual, dumped from a bootleg
+ ROM_LOAD( "hrl14h-1.14h", 0x0120, 0x0020, CRC(f76b4fcf) SHA1(197e0cc508ffeb5cefa4046bdfb158939d598225) ) // 6331 according to the Spectar manual
ROM_END
ROM_START( spectar1 )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "spl12a1", 0x0800, 0x0800, CRC(7002efb4) SHA1(fbb19ccd2aee49b78606eadcbef94e842e1be905) )
- ROM_LOAD( "spl11a1", 0x1000, 0x0800, CRC(8eb8526a) SHA1(0c42ee073fc73c89731dec4e3ecfc82c9b8301e9) )
- ROM_LOAD( "spl10a1", 0x1800, 0x0800, CRC(9d169b3d) SHA1(bee9d029df6e2fba24a5ba41a76f1658e9038838) )
- ROM_LOAD( "spl9a1", 0x2000, 0x0800, CRC(40e3eba1) SHA1(197aaed9a6159b6f3e347c0446be9e44733c1341) )
- ROM_LOAD( "spl8a1", 0x2800, 0x0800, CRC(64d8eb84) SHA1(a249c832ea951fddc6699f7ac0b4486e8a5be98e) )
- ROM_LOAD( "spl7a1", 0x3000, 0x0800, CRC(e08b0d8d) SHA1(6ffd6f8fb50c9fc09c38f56da7d6d005b66e78cc) )
- ROM_LOAD( "spl6a1", 0x3800, 0x0800, CRC(f0e4e71a) SHA1(5487a94650c964a7ab07f30aacab0b470dcb3b40) )
-
- ROM_REGION( 0x0400, "gfx1", 0 )
- ROM_LOAD( "hrl11d-2", 0x0000, 0x0400, CRC(c55b645d) SHA1(0c18277939d74e3e1281a7f114a34781d30c2baf) ) /* this is actually not used (all FF) */
- ROM_CONTINUE( 0x0000, 0x0400 ) /* overwrite with the real one */
+ ROM_LOAD( "spl12a-1.12a", 0x0800, 0x0800, CRC(7002efb4) SHA1(fbb19ccd2aee49b78606eadcbef94e842e1be905) )
+ ROM_LOAD( "spl11a-1.11a", 0x1000, 0x0800, CRC(8eb8526a) SHA1(0c42ee073fc73c89731dec4e3ecfc82c9b8301e9) )
+ ROM_LOAD( "spl10a-1.10a", 0x1800, 0x0800, CRC(9d169b3d) SHA1(bee9d029df6e2fba24a5ba41a76f1658e9038838) )
+ ROM_LOAD( "spl9a-1.9a", 0x2000, 0x0800, CRC(40e3eba1) SHA1(197aaed9a6159b6f3e347c0446be9e44733c1341) )
+ ROM_LOAD( "spl8a-1.8a", 0x2800, 0x0800, CRC(64d8eb84) SHA1(a249c832ea951fddc6699f7ac0b4486e8a5be98e) )
+ ROM_LOAD( "spl7a-1.7a", 0x3000, 0x0800, CRC(e08b0d8d) SHA1(6ffd6f8fb50c9fc09c38f56da7d6d005b66e78cc) )
+ ROM_LOAD( "spl6a-1.6a", 0x3800, 0x0800, CRC(f0e4e71a) SHA1(5487a94650c964a7ab07f30aacab0b470dcb3b40) )
+
+ ROM_REGION( 0x0400, "gfx1", 0 ) // some PCBs were seen with hrl11d-1
+ ROM_LOAD( "hrl11d-2.11d", 0x0000, 0x0400, CRC(c55b645d) SHA1(0c18277939d74e3e1281a7f114a34781d30c2baf) ) /* this is actually not used (all FF) */
+ ROM_CONTINUE( 0x0000, 0x0400 ) /* overwrite with the real one */
- ROM_REGION( 0x0140, "proms", 0 ) // were dumped from a bootleg, very probably they are the same, but marked as bad dump for precaution. The 2 6331 match the Targ ones.
- ROM_LOAD( "prom.5c", 0x0000, 0x0100, BAD_DUMP CRC(9ca2e061) SHA1(4111325b00a1017042d55c59308d41e8333ba627) ) // 6301 according to the Spectar manual
- ROM_LOAD( "prom.6d", 0x0100, 0x0020, BAD_DUMP CRC(e26f9053) SHA1(eec35b6aa2c2d305418306bf4a1754a0583f109f) ) // 6331 according to the Spectar manual
- ROM_LOAD( "hrl14h-1", 0x0120, 0x0020, BAD_DUMP CRC(f76b4fcf) SHA1(197e0cc508ffeb5cefa4046bdfb158939d598225) ) // 6331 according to the Spectar manual
+ ROM_REGION( 0x0140, "proms", 0 )
+ ROM_LOAD( "spl5c-2.5c", 0x0000, 0x0100, CRC(9ca2e061) SHA1(4111325b00a1017042d55c59308d41e8333ba627) ) // 6301 according to the Spectar manual, also seen as IM 5623CPE on PCB
+ ROM_LOAD( "prom.6d", 0x0100, 0x0020, BAD_DUMP CRC(e26f9053) SHA1(eec35b6aa2c2d305418306bf4a1754a0583f109f) ) // screen controller PROM, 6331 according to the Spectar manual, dumped from a bootleg
+ ROM_LOAD( "hrl14h-1.14h", 0x0120, 0x0020, CRC(f76b4fcf) SHA1(197e0cc508ffeb5cefa4046bdfb158939d598225) ) // 6331 according to the Spectar manual
ROM_END
ROM_START( spectarrf )
diff --git a/src/mame/drivers/fidel_cc1.cpp b/src/mame/drivers/fidel_cc1.cpp
index 19cfdb94f48..c4afe7b5c54 100644
--- a/src/mame/drivers/fidel_cc1.cpp
+++ b/src/mame/drivers/fidel_cc1.cpp
@@ -143,7 +143,7 @@ u8 cc1_state::ppi_porta_r()
{
// 74148(priority encoder) I0-I7: inputs
// d0-d2: 74148 S0-S2, d3: 74148 GS
- u8 data = count_leading_zeros(m_inputs[0]->read()) - 24;
+ u8 data = count_leading_zeros_32(m_inputs[0]->read()) - 24;
if (data == 8) data = 0xf;
// d5-d7: more inputs (direct)
diff --git a/src/mame/drivers/fmtowns.cpp b/src/mame/drivers/fmtowns.cpp
index 05441601efe..ac87d0bcbf7 100644
--- a/src/mame/drivers/fmtowns.cpp
+++ b/src/mame/drivers/fmtowns.cpp
@@ -464,6 +464,9 @@ void towns_state::device_timer(emu_timer &timer, device_timer_id id, int param,
case TIMER_CDDA:
towns_delay_cdda((cdrom_image_device*)ptr);
break;
+ case TIMER_SPRITES:
+ draw_sprites();
+ break;
}
}
void towns_state::freerun_inc()
@@ -939,6 +942,7 @@ uint8_t towns_state::towns_padport_r(offs_t offset)
uint8_t extra2;
uint32_t state;
+ offset >>= 1;
if(offset == 0)
{
if((porttype & 0x0f) == 0x01)
@@ -960,7 +964,7 @@ uint8_t towns_state::towns_padport_r(offs_t offset)
if((extra1 & 0x20) && (m_towns_pad_mask & 0x02))
ret &= ~0x20;
}
- if((porttype & 0x0f) == 0x04) // 6-button joystick
+ else if((porttype & 0x0f) == 0x04) // 6-button joystick
{
extra1 = m_6b_joy1_ex->read();
@@ -992,7 +996,7 @@ uint8_t towns_state::towns_padport_r(offs_t offset)
ret &= ~0x01;
}
}
- if((porttype & 0x0f) == 0x02) // mouse
+ else if((porttype & 0x0f) == 0x02) // mouse
{
switch(m_towns_mouse_output)
{
@@ -1025,9 +1029,9 @@ uint8_t towns_state::towns_padport_r(offs_t offset)
if(m_towns_pad_mask & 0x10)
ret |= 0x40;
}
-
+ else ret = 0x7f;
}
- if(offset == 1) // second joystick port
+ else if(offset == 1) // second joystick port
{
if((porttype & 0xf0) == 0x10)
{
@@ -1048,7 +1052,7 @@ uint8_t towns_state::towns_padport_r(offs_t offset)
if((extra2 & 0x20) && (m_towns_pad_mask & 0x08))
ret &= ~0x20;
}
- if((porttype & 0xf0) == 0x40) // 6-button joystick
+ else if((porttype & 0xf0) == 0x40) // 6-button joystick
{
extra2 = m_6b_joy2_ex->read();
@@ -1080,7 +1084,7 @@ uint8_t towns_state::towns_padport_r(offs_t offset)
ret &= ~0x01;
}
}
- if((porttype & 0xf0) == 0x20) // mouse
+ else if((porttype & 0xf0) == 0x20) // mouse
{
switch(m_towns_mouse_output)
{
@@ -1113,6 +1117,7 @@ uint8_t towns_state::towns_padport_r(offs_t offset)
if(m_towns_pad_mask & 0x20)
ret |= 0x40;
}
+ else ret = 0x7f;
}
return ret;
@@ -1788,7 +1793,10 @@ uint8_t towns_state::towns_cdrom_r(offs_t offset)
m_towns_cd.extra_status = 0;
break;
case 0x04: // play cdda
- towns_cd_set_status(0x07,0x00,0x00,0x00);
+ if(m_cdda->audio_ended())
+ towns_cd_set_status(0x07,0x00,0x00,0x00);
+ else
+ towns_cd_set_status(0x00,0x00,0x03,0x00);
m_towns_cd.status &= ~2;
m_towns_cd.extra_status = 0;
break;
@@ -2355,7 +2363,7 @@ void towns_state::towns_io(address_map &map)
// CD-ROM
map(0x04c0, 0x04cf).rw(FUNC(towns_state::towns_cdrom_r), FUNC(towns_state::towns_cdrom_w)).umask32(0x00ff00ff);
// Joystick / Mouse ports
- map(0x04d0, 0x04d3).r(FUNC(towns_state::towns_padport_r)).umask32(0x00ff00ff);
+ map(0x04d0, 0x04d3).r(FUNC(towns_state::towns_padport_r));
map(0x04d6, 0x04d6).w(FUNC(towns_state::towns_pad_mask_w));
// Sound (YM3438 [FM], RF5c68 [PCM])
map(0x04d8, 0x04df).rw("fm", FUNC(ym3438_device::read), FUNC(ym3438_device::write)).umask32(0x00ff00ff);
@@ -2426,7 +2434,7 @@ void towns_state::towns16_io(address_map &map)
// CD-ROM
map(0x04c0, 0x04cf).rw(FUNC(towns_state::towns_cdrom_r), FUNC(towns_state::towns_cdrom_w)).umask16(0x00ff);
// Joystick / Mouse ports
- map(0x04d0, 0x04d3).r(FUNC(towns_state::towns_padport_r)).umask16(0x00ff);
+ map(0x04d0, 0x04d3).r(FUNC(towns_state::towns_padport_r));
map(0x04d6, 0x04d6).w(FUNC(towns_state::towns_pad_mask_w));
// Sound (YM3438 [FM], RF5c68 [PCM])
map(0x04d8, 0x04df).rw("fm", FUNC(ym3438_device::read), FUNC(ym3438_device::write)).umask16(0x00ff);
diff --git a/src/mame/drivers/galaxian.cpp b/src/mame/drivers/galaxian.cpp
index b0f848013e7..1c4e3b00a8c 100644
--- a/src/mame/drivers/galaxian.cpp
+++ b/src/mame/drivers/galaxian.cpp
@@ -701,6 +701,7 @@ TODO:
#include "emu.h"
#include "includes/galaxian.h"
+
#include "audio/cclimber.h"
#include "audio/galaxian.h"
@@ -714,6 +715,7 @@ TODO:
#include "audio/nl_konami.h"
+
/*************************************
*
* Interrupts
@@ -728,13 +730,12 @@ WRITE_LINE_MEMBER(galaxian_state::vblank_interrupt_w)
m_maincpu->set_input_line(m_irq_line, ASSERT_LINE);
}
-INPUT_CHANGED_MEMBER(galaxian_state::tenspot_fake)
+INPUT_CHANGED_MEMBER(tenspot_state::tenspot_fake)
{
if (newval)
{
- m_tenspot_current_game++;
- m_tenspot_current_game%=10;
- tenspot_set_game_bank(m_tenspot_current_game, 1);
+ m_current_game = (m_current_game + 1) % 10;
+ set_game_bank(m_current_game, true);
}
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
}
@@ -1013,30 +1014,40 @@ uint8_t galaxian_state::explorer_sound_latch_r()
*
*************************************/
-uint8_t galaxian_state::sfx_sample_io_r(offs_t offset)
+void taiyo_sfx_state::machine_start()
{
- /* the decoding here is very simplistic, and you can address both simultaneously */
+ galaxian_state::machine_start();
+
+ m_sample_control = 0;
+
+ save_item(NAME(m_sample_control));
+}
+
+
+uint8_t taiyo_sfx_state::sample_io_r(offs_t offset)
+{
+ // the decoding here is very simplistic, and you can address both simultaneously
uint8_t result = 0xff;
if (offset & 0x04) result &= m_ppi8255[2]->read(offset & 3);
return result;
}
-void galaxian_state::sfx_sample_io_w(offs_t offset, uint8_t data)
+void taiyo_sfx_state::sample_io_w(offs_t offset, uint8_t data)
{
- /* the decoding here is very simplistic, and you can address both simultaneously */
+ // the decoding here is very simplistic, and you can address both simultaneously
if (offset & 0x04) m_ppi8255[2]->write(offset & 3, data);
if (offset & 0x10) m_dac->write(data);
}
-void galaxian_state::sfx_sample_control_w(uint8_t data)
+void taiyo_sfx_state::sample_control_w(uint8_t data)
{
- uint8_t old = m_sfx_sample_control;
- m_sfx_sample_control = data;
+ uint8_t old = m_sample_control;
+ m_sample_control = data;
- /* the inverse of bit 0 clocks the flip flop to signal an INT */
- /* it is automatically cleared on the acknowledge */
+ // the inverse of bit 0 clocks the flip flop to signal an INT
+ // it is automatically cleared on the acknowledge
if ((old & 0x01) && !(data & 0x01))
m_audio2->set_input_line(0, HOLD_LINE);
}
@@ -1058,13 +1069,13 @@ void galaxian_state::sfx_sample_control_w(uint8_t data)
The data(code) in the extra RAM is later jumped/called to in many parts of the game.
*/
-uint8_t galaxian_state::monsterz_protection_r()
+uint8_t taiyo_sfx_state::monsterz_protection_r()
{
return m_protection_result;
}
-void galaxian_state::monsterz_set_latch()
+void taiyo_sfx_state::monsterz_set_latch()
{
// read from a rom (which one?? "a-3e.k3" from audiocpu ($2700-$2fff) looks very suspicious)
uint8_t *rom = memregion("audiocpu")->base();
@@ -1075,7 +1086,7 @@ void galaxian_state::monsterz_set_latch()
}
-void galaxian_state::monsterz_porta_1_w(uint8_t data)
+void taiyo_sfx_state::monsterz_porta_1_w(uint8_t data)
{
// d7 high: set latch + advance address high bits (and reset low bits?)
if (data & 0x80)
@@ -1085,7 +1096,7 @@ void galaxian_state::monsterz_porta_1_w(uint8_t data)
}
}
-void galaxian_state::monsterz_portb_1_w(uint8_t data)
+void taiyo_sfx_state::monsterz_portb_1_w(uint8_t data)
{
// d3 high: set latch + advance address low bits
if (data & 0x08)
@@ -1095,7 +1106,7 @@ void galaxian_state::monsterz_portb_1_w(uint8_t data)
}
}
-void galaxian_state::monsterz_portc_1_w(uint8_t data)
+void taiyo_sfx_state::monsterz_portc_1_w(uint8_t data)
{
}
@@ -1208,9 +1219,9 @@ void galaxian_state::turtles_ppi8255_1_w(offs_t offset, uint8_t data){ m_ppi8255
*
*************************************/
-uint8_t galaxian_state::scorpion_ay8910_r(offs_t offset)
+uint8_t zac_scorpion_state::ay8910_r(offs_t offset)
{
- /* the decoding here is very simplistic, and you can address both simultaneously */
+ // the decoding here is very simplistic, and you can address both simultaneously
uint8_t result = 0xff;
if (offset & 0x08) result &= m_ay8910[2]->data_r();
if (offset & 0x20) result &= m_ay8910[1]->data_r();
@@ -1219,9 +1230,9 @@ uint8_t galaxian_state::scorpion_ay8910_r(offs_t offset)
}
-void galaxian_state::scorpion_ay8910_w(offs_t offset, uint8_t data)
+void zac_scorpion_state::ay8910_w(offs_t offset, uint8_t data)
{
- /* the decoding here is very simplistic, and you can address all six simultaneously */
+ // the decoding here is very simplistic, and you can address all six simultaneously
if (offset & 0x04) m_ay8910[2]->address_w(data);
if (offset & 0x08) m_ay8910[2]->data_w(data);
if (offset & 0x10) m_ay8910[1]->address_w(data);
@@ -1231,41 +1242,39 @@ void galaxian_state::scorpion_ay8910_w(offs_t offset, uint8_t data)
}
-uint8_t galaxian_state::scorpion_protection_r()
+uint8_t zac_scorpion_state::protection_r()
{
- uint16_t paritybits;
+ // compute parity of the current (bitmask & $CE29)
uint8_t parity = 0;
-
- /* compute parity of the current (bitmask & $CE29) */
- for (paritybits = m_protection_state & 0xce29; paritybits != 0; paritybits >>= 1)
+ for (uint16_t paritybits = m_protection_state & 0xce29; paritybits != 0; paritybits >>= 1)
if (paritybits & 1)
parity++;
- /* only the low bit matters for protection, but bit 2 is also checked */
+ // only the low bit matters for protection, but bit 2 is also checked
return parity;
}
-void galaxian_state::scorpion_protection_w(uint8_t data)
+void zac_scorpion_state::protection_w(uint8_t data)
{
- /* bit 5 low is a reset */
+ // bit 5 low is a reset
if (!(data & 0x20))
m_protection_state = 0x0000;
- /* bit 4 low is a clock */
+ // bit 4 low is a clock
if (!(data & 0x10))
{
- /* each clock shifts left one bit and ORs in the inverse of the parity */
- m_protection_state = (m_protection_state << 1) | (~scorpion_protection_r() & 1);
+ // each clock shifts left one bit and ORs in the inverse of the parity
+ m_protection_state = (m_protection_state << 1) | (~protection_r() & 1);
}
}
-uint8_t galaxian_state::scorpion_digitalker_intr_r()
+uint8_t zac_scorpion_state::digitalker_intr_r()
{
return m_digitalker->digitalker_0_intr_r();
}
-void galaxian_state::scorpion_digitalker_control_w(uint8_t data)
+void zac_scorpion_state::digitalker_control_w(uint8_t data)
{
m_digitalker->digitalker_0_cs_w(data & 1 ? ASSERT_LINE : CLEAR_LINE);
m_digitalker->digitalker_0_cms_w(data & 2 ? ASSERT_LINE : CLEAR_LINE);
@@ -1278,19 +1287,35 @@ void galaxian_state::scorpion_digitalker_control_w(uint8_t data)
*
*************************************/
+void gmgalax_state::machine_start()
+{
+ bagmanmc_state::machine_start();
+
+ m_stars_enabled = 0;
+ std::fill(std::begin(m_gfxbank), std::end(m_gfxbank), 0);
+
+ save_item(NAME(m_selected_game));
+
+ m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x4000);
+
+ // callback when the game select is toggled
+ game_changed(*m_gamesel->fields().first(), 0, 0, 0);
+}
+
+
INPUT_CHANGED_MEMBER(gmgalax_state::game_changed)
{
- /* new value is the selected game */
+ // new value is the selected game
m_selected_game = newval;
- /* select the bank and graphics bank based on it */
- m_bank1->set_entry(m_selected_game);
+ // select the bank and graphics bank based on it
+ m_rombank->set_entry(m_selected_game);
galaxian_gfxbank_w(0, m_selected_game);
- /* reset the stars */
+ // reset the stars
galaxian_stars_enable_w(0);
- /* reset the CPU */
+ // reset the CPU
m_maincpu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
}
@@ -1309,34 +1334,51 @@ CUSTOM_INPUT_MEMBER(gmgalax_state::port_r)
*
*************************************/
-void galaxian_state::zigzag_bankswap_w(uint8_t data)
+void zigzagb_state::machine_start()
+{
+ galaxian_state::machine_start();
+
+ m_ay8910_latch = 0;
+
+ save_item(NAME(m_ay8910_latch));
+
+ // make ROMs 2 & 3 swappable
+ m_rombanks[0]->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000);
+ m_rombanks[1]->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000);
+
+ // set initial ROM mapping
+ bankswap_w(0);
+}
+
+
+void zigzagb_state::bankswap_w(uint8_t data)
{
- /* Zig Zag can swap ROMs 2 and 3 as a form of copy protection */
- m_bank1->set_entry(data & 1);
- membank("bank2")->set_entry(~data & 1);
+ // Zig Zag can swap ROMs 2 and 3 as a form of copy protection
+ m_rombanks[0]->set_entry(data & 1);
+ m_rombanks[1]->set_entry(~data & 1);
}
-void galaxian_state::zigzag_ay8910_w(offs_t offset, uint8_t data)
+void zigzagb_state::ay8910_w(offs_t offset, uint8_t data)
{
switch (offset & 0x300)
{
- case 0x000:
- /* control lines */
- /* bit 0 = WRITE */
- /* bit 1 = C/D */
- if ((offset & 1) != 0)
- m_ay8910[0]->data_address_w(offset >> 1, m_zigzag_ay8910_latch);
- break;
+ case 0x000:
+ // control lines
+ // bit 0 = WRITE
+ // bit 1 = C/D
+ if (BIT(offset, 0))
+ m_ay8910[0]->data_address_w(BIT(offset, 1), m_ay8910_latch);
+ break;
- case 0x100:
- /* data latch */
- m_zigzag_ay8910_latch = offset & 0xff;
- break;
+ case 0x100:
+ // data latch
+ m_ay8910_latch = offset & 0xff;
+ break;
- case 0x200:
- /* unknown */
- break;
+ case 0x200:
+ // unknown
+ break;
}
}
@@ -1362,14 +1404,26 @@ READ_LINE_MEMBER(galaxian_state::azurian_port_r)
*
*************************************/
-READ_LINE_MEMBER(galaxian_state::kingball_muxbit_r)
+void kingball_state::machine_start()
+{
+ galaxian_state::machine_start();
+
+ m_speech_dip = 0;
+ m_sound = 0;
+
+ save_item(NAME(m_speech_dip));
+ save_item(NAME(m_sound));
+}
+
+
+READ_LINE_MEMBER(kingball_state::muxbit_r)
{
- /* multiplex the service mode switch with a speech DIP switch */
- return (ioport("FAKE")->read() >> m_kingball_speech_dip) & 1;
+ // multiplex the service mode switch with a speech DIP switch
+ return BIT(m_mux_port->read(), m_speech_dip);
}
-READ_LINE_MEMBER(galaxian_state::kingball_noise_r)
+READ_LINE_MEMBER(kingball_state::noise_r)
{
/* bit 5 is the NOISE line from the sound circuit. The code just verifies
that it's working, doesn't actually use return value, so we can just use
@@ -1378,26 +1432,26 @@ READ_LINE_MEMBER(galaxian_state::kingball_noise_r)
}
-void galaxian_state::kingball_speech_dip_w(uint8_t data)
+void kingball_state::speech_dip_w(uint8_t data)
{
- m_kingball_speech_dip = data;
+ m_speech_dip = data;
}
-void galaxian_state::kingball_sound1_w(uint8_t data)
+void kingball_state::sound1_w(uint8_t data)
{
- m_kingball_sound = (m_kingball_sound & ~0x01) | data;
+ m_sound = (m_sound & ~0x01) | data;
}
-void galaxian_state::kingball_sound2_w(uint8_t data)
+void kingball_state::sound2_w(uint8_t data)
{
- m_kingball_sound = (m_kingball_sound & ~0x02) | (data << 1);
- m_soundlatch->write(m_kingball_sound | 0xf0);
+ m_sound = (m_sound & ~0x02) | (data << 1);
+ m_soundlatch->write(m_sound | 0xf0);
}
-void galaxian_state::kingball_dac_w(uint8_t data)
+void kingball_state::dac_w(uint8_t data)
{
m_dac->write(data >> 4);
}
@@ -1410,31 +1464,42 @@ void galaxian_state::kingball_dac_w(uint8_t data)
*
*************************************/
-void galaxian_state::mshuttle_ay8910_cs_w(uint8_t data)
+void mshuttle_state::machine_start()
{
- m_mshuttle_ay8910_cs = data & 1;
+ galaxian_state::machine_start();
+
+ m_ay8910_cs = 0;
+
+ save_item(NAME(m_ay8910_cs));
}
-void galaxian_state::mshuttle_ay8910_control_w(uint8_t data)
+void mshuttle_state::ay8910_cs_w(uint8_t data)
{
- if (!m_mshuttle_ay8910_cs)
+ m_ay8910_cs = data & 1;
+}
+
+
+void mshuttle_state::ay8910_control_w(uint8_t data)
+{
+ if (!m_ay8910_cs)
m_ay8910_cclimber->address_w(data);
}
-void galaxian_state::mshuttle_ay8910_data_w(uint8_t data)
+void mshuttle_state::ay8910_data_w(uint8_t data)
{
- if (!m_mshuttle_ay8910_cs)
+ if (!m_ay8910_cs)
m_ay8910_cclimber->data_w(data);
}
-uint8_t galaxian_state::mshuttle_ay8910_data_r()
+uint8_t mshuttle_state::ay8910_data_r()
{
- if (!m_mshuttle_ay8910_cs)
+ if (!m_ay8910_cs)
return m_ay8910_cclimber->data_r();
- return 0xff;
+ else
+ return 0xff;
}
@@ -1529,9 +1594,23 @@ uint8_t galaxian_state::dingoe_3001_r()
*
*************************************/
-void galaxian_state::moonwar_port_select_w(uint8_t data)
+void moonwar_state::machine_start()
{
- m_moonwar_port_select = data & 0x10;
+ galaxian_state::machine_start();
+
+ m_port_select = 0;
+ std::fill(std::begin(m_direction), std::end(m_direction), 0);
+ std::fill(std::begin(m_counter_74ls161), std::end(m_counter_74ls161), 0);
+
+ save_item(NAME(m_port_select));
+ save_item(NAME(m_direction));
+ save_item(NAME(m_counter_74ls161));
+}
+
+
+void moonwar_state::port_select_w(uint8_t data)
+{
+ m_port_select = BIT(~data, 4);
}
@@ -1633,7 +1712,7 @@ void galaxian_state::galaxian_map(address_map &map)
galaxian_map_discrete(map);
}
-void galaxian_state::pisces_map(address_map &map)
+void pisces_state::pisces_map(address_map &map)
{
galaxian_map(map);
map(0x6002, 0x6002).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_gfxbank_w)); // coin lockout replaced by graphics bank
@@ -1722,7 +1801,7 @@ void galaxian_state::thepitm_map(address_map &map)
map(0xb004, 0xb004).mirror(0x7f8).nopw(); // disable the stars
}
-void galaxian_state::porter_map(address_map &map)
+void pisces_state::porter_map(address_map &map)
{
mooncrst_map(map);
map(0x0000, 0x4fff).rom().region("maincpu", 0); // extend ROM
@@ -1730,7 +1809,7 @@ void galaxian_state::porter_map(address_map &map)
map(0xa002, 0xa002).mirror(0x7f8).w(FUNC(galaxian_state::galaxian_gfxbank_w)); // coin lockout replaced by graphics bank
}
-void galaxian_state::skybase_map(address_map &map)
+void pisces_state::skybase_map(address_map &map)
{
mooncrst_map(map);
map(0x0000, 0x5fff).rom().region("maincpu", 0); // extend ROM
@@ -1816,22 +1895,22 @@ void galaxian_state::ckongmc_map(address_map &map)
map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r));
}
-void galaxian_state::bagmanmc_map(address_map &map)
+void bagmanmc_state::bagmanmc_map(address_map &map)
{
ckongg_map_base(map);
mooncrst_map_discrete(map);
map(0xa000, 0xa000).portr("IN0");
- map(0xa003, 0xa003).w(FUNC(galaxian_state::coin_count_0_w));
+ map(0xa003, 0xa003).w(FUNC(bagmanmc_state::coin_count_0_w));
map(0xa800, 0xa800).portr("IN1");
map(0xb000, 0xb000).portr("IN2").nopw();
- map(0xb001, 0xb001).w(FUNC(galaxian_state::irq_enable_w));
- map(0xb002, 0xb002).w(FUNC(galaxian_state::galaxian_gfxbank_w));
- map(0xb006, 0xb006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
- map(0xb007, 0xb007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
+ map(0xb001, 0xb001).w(FUNC(bagmanmc_state::irq_enable_w));
+ map(0xb002, 0xb002).w(FUNC(bagmanmc_state::galaxian_gfxbank_w));
+ map(0xb006, 0xb006).w(FUNC(bagmanmc_state::galaxian_flip_screen_x_w));
+ map(0xb007, 0xb007).w(FUNC(bagmanmc_state::galaxian_flip_screen_y_w));
map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r));
}
-void galaxian_state::bagmanmc_io_map(address_map &map)
+void bagmanmc_state::bagmanmc_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x08, 0x09).nopw(); // remnant of AY-3-8910 port-based input
@@ -1861,29 +1940,36 @@ void galaxian_state::fantastc_map(address_map &map)
// map(0xfff8, 0xffff).nopw(); // timefgtr, sound related?
}
-void galaxian_state::zigzag_map(address_map &map)
+void zigzagb_state::zigzag_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x1fff).rom();
- map(0x2000, 0x2fff).bankr("bank1");
- map(0x3000, 0x3fff).bankr("bank2");
+ map(0x2000, 0x2fff).bankr(m_rombanks[0]);
+ map(0x3000, 0x3fff).bankr(m_rombanks[1]);
map(0x4000, 0x47ff).ram(); // needs a full 2K of RAM
- map(0x4800, 0x4fff).w(FUNC(galaxian_state::zigzag_ay8910_w));
- map(0x5000, 0x53ff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
- map(0x5800, 0x58ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
+ map(0x4800, 0x4fff).w(FUNC(zigzagb_state::ay8910_w));
+ map(0x5000, 0x53ff).mirror(0x0400).ram().w(FUNC(zigzagb_state::galaxian_videoram_w)).share("videoram");
+ map(0x5800, 0x58ff).mirror(0x0700).ram().w(FUNC(zigzagb_state::galaxian_objram_w)).share("spriteram");
map(0x6000, 0x6000).mirror(0x07ff).portr("IN0");
- map(0x6000, 0x6001).mirror(0x07f8).w(FUNC(galaxian_state::start_lamp_w));
- map(0x6003, 0x6003).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w));
+ map(0x6000, 0x6001).mirror(0x07f8).w(FUNC(zigzagb_state::start_lamp_w));
+ map(0x6003, 0x6003).mirror(0x07f8).w(FUNC(zigzagb_state::coin_count_0_w));
map(0x6800, 0x6800).mirror(0x07ff).portr("IN1");
map(0x7000, 0x7000).mirror(0x07ff).portr("IN2");
- map(0x7001, 0x7001).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w));
- map(0x7002, 0x7002).mirror(0x07f8).w(FUNC(galaxian_state::zigzag_bankswap_w));
- map(0x7004, 0x7004).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w));
- map(0x7006, 0x7006).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
- map(0x7007, 0x7007).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
+ map(0x7001, 0x7001).mirror(0x07f8).w(FUNC(zigzagb_state::irq_enable_w));
+ map(0x7002, 0x7002).mirror(0x07f8).w(FUNC(zigzagb_state::bankswap_w));
+ map(0x7004, 0x7004).mirror(0x07f8).w(FUNC(zigzagb_state::galaxian_stars_enable_w));
+ map(0x7006, 0x7006).mirror(0x07f8).w(FUNC(zigzagb_state::galaxian_flip_screen_x_w));
+ map(0x7007, 0x7007).mirror(0x07f8).w(FUNC(zigzagb_state::galaxian_flip_screen_y_w));
map(0x7800, 0x7800).mirror(0x07ff).r("watchdog", FUNC(watchdog_timer_device::reset_r));
}
+void gmgalax_state::gmgalax_map(address_map &map)
+{
+ galaxian_map(map);
+
+ map(0x0000, 0x3fff).bankr(m_rombank); // ROM is banked
+}
+
// not derived from schematics
void galaxian_state::ozon1_map(address_map &map)
{
@@ -1930,13 +2016,13 @@ void namenayo_state::namenayo_map(address_map &map)
map(0x0000, 0x3fff).rom();
map(0x4000, 0x4fff).ram();
map(0x5000, 0x6fff).rom();
- map(0xc800, 0xc8ff).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
- map(0xd000, 0xd3ff).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
+ map(0xc800, 0xc8ff).ram().w(FUNC(namenayo_state::galaxian_objram_w)).share("spriteram");
+ map(0xd000, 0xd3ff).ram().w(FUNC(namenayo_state::galaxian_videoram_w)).share("videoram");
map(0xd800, 0xd800).w(FUNC(namenayo_state::namenayo_unk_d800_w)); // some kind of split position for bg colour maybe?
map(0xe000, 0xe01f).ram().w(FUNC(namenayo_state::namenayo_extattr_w)).share("extattrram");
- map(0xe801, 0xe801).w(FUNC(galaxian_state::irq_enable_w));
- map(0xe806, 0xe806).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
- map(0xe807, 0xe807).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
+ map(0xe801, 0xe801).w(FUNC(namenayo_state::irq_enable_w));
+ map(0xe806, 0xe806).mirror(0x07f8).w(FUNC(namenayo_state::galaxian_flip_screen_x_w));
+ map(0xe807, 0xe807).mirror(0x07f8).w(FUNC(namenayo_state::galaxian_flip_screen_y_w));
map(0xf900, 0xf903).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xfa00, 0xfa03).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xf000, 0xf000).r("watchdog", FUNC(watchdog_timer_device::reset_r));
@@ -2054,7 +2140,7 @@ void galaxian_state::mimonscr_map(address_map &map)
-void galaxian_state::scorpion_map(address_map &map)
+void zac_scorpion_state::scorpion_map(address_map &map)
{
theend_map(map);
map(0x5800, 0x67ff).rom().region("maincpu", 0x5800); // extra ROM
@@ -2285,46 +2371,45 @@ void galaxian_state::turpins_map(address_map &map)
-/* this is the same as theend, except for separate RGB background controls
- and some extra ROM space at $7000 and $C000 */
-void galaxian_state::sfx_map(address_map &map)
+// this is the same as theend, except for separate RGB background controls and some extra ROM space at $7000 and $C000
+void taiyo_sfx_state::sfx_map(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x4000, 0x47ff).ram();
- map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
- map(0x5000, 0x50ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
- map(0x6800, 0x6800).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_red_w));
- map(0x6801, 0x6801).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w));
- map(0x6802, 0x6802).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w));
- map(0x6803, 0x6803).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_blue_w));
- map(0x6804, 0x6804).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w));
- map(0x6805, 0x6805).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_green_w));
- map(0x6806, 0x6806).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
- map(0x6807, 0x6807).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
+ map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(taiyo_sfx_state::galaxian_videoram_w)).share("videoram");
+ map(0x5000, 0x50ff).mirror(0x0700).ram().w(FUNC(taiyo_sfx_state::galaxian_objram_w)).share("spriteram");
+ map(0x6800, 0x6800).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_red_w));
+ map(0x6801, 0x6801).mirror(0x07f8).w(FUNC(taiyo_sfx_state::irq_enable_w));
+ map(0x6802, 0x6802).mirror(0x07f8).w(FUNC(taiyo_sfx_state::coin_count_0_w));
+ map(0x6803, 0x6803).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_blue_w));
+ map(0x6804, 0x6804).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_stars_enable_w));
+ map(0x6805, 0x6805).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_green_w));
+ map(0x6806, 0x6806).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_flip_screen_x_w));
+ map(0x6807, 0x6807).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_flip_screen_y_w));
map(0x7000, 0x7fff).rom();
- map(0x8000, 0xbfff).rw(FUNC(galaxian_state::theend_ppi8255_r), FUNC(galaxian_state::theend_ppi8255_w));
+ map(0x8000, 0xbfff).rw(FUNC(taiyo_sfx_state::theend_ppi8255_r), FUNC(taiyo_sfx_state::theend_ppi8255_w));
map(0xc000, 0xefff).rom();
}
-void galaxian_state::monsterz_map(address_map &map)
+void taiyo_sfx_state::monsterz_map(address_map &map)
{
map(0x0000, 0x37ff).rom();
map(0x3800, 0x3fff).ram(); // extra RAM used by protection
map(0x4000, 0x47ff).ram();
- map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
- map(0x5000, 0x50ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
- map(0x6800, 0x6800).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_red_w));
- map(0x6801, 0x6801).mirror(0x07f8).w(FUNC(galaxian_state::irq_enable_w));
- map(0x6802, 0x6802).mirror(0x07f8).w(FUNC(galaxian_state::coin_count_0_w));
- map(0x6803, 0x6803).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_blue_w));
- map(0x6804, 0x6804).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_stars_enable_w));
- map(0x6805, 0x6805).mirror(0x07f8).w(FUNC(galaxian_state::scramble_background_green_w));
- map(0x6806, 0x6806).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
- map(0x6807, 0x6807).mirror(0x07f8).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
- map(0x8000, 0xbfff).rw(FUNC(galaxian_state::theend_ppi8255_r), FUNC(galaxian_state::theend_ppi8255_w));
+ map(0x4800, 0x4bff).mirror(0x0400).ram().w(FUNC(taiyo_sfx_state::galaxian_videoram_w)).share("videoram");
+ map(0x5000, 0x50ff).mirror(0x0700).ram().w(FUNC(taiyo_sfx_state::galaxian_objram_w)).share("spriteram");
+ map(0x6800, 0x6800).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_red_w));
+ map(0x6801, 0x6801).mirror(0x07f8).w(FUNC(taiyo_sfx_state::irq_enable_w));
+ map(0x6802, 0x6802).mirror(0x07f8).w(FUNC(taiyo_sfx_state::coin_count_0_w));
+ map(0x6803, 0x6803).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_blue_w));
+ map(0x6804, 0x6804).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_stars_enable_w));
+ map(0x6805, 0x6805).mirror(0x07f8).w(FUNC(taiyo_sfx_state::scramble_background_green_w));
+ map(0x6806, 0x6806).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_flip_screen_x_w));
+ map(0x6807, 0x6807).mirror(0x07f8).w(FUNC(taiyo_sfx_state::galaxian_flip_screen_y_w));
+ map(0x8000, 0xbfff).rw(FUNC(taiyo_sfx_state::theend_ppi8255_r), FUNC(taiyo_sfx_state::theend_ppi8255_w));
map(0xc000, 0xd7ff).rom();
- map(0xd800, 0xd800).r(FUNC(galaxian_state::monsterz_protection_r));
+ map(0xd800, 0xd800).r(FUNC(taiyo_sfx_state::monsterz_protection_r));
}
@@ -2377,20 +2462,20 @@ void galaxian_state::frogf_map(address_map &map)
}
-/* mooncrst */
-void galaxian_state::mshuttle_map(address_map &map)
+// mshuttle
+void mshuttle_state::mshuttle_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x7fff).rom();
map(0x8000, 0x83ff).ram();
- map(0x9000, 0x93ff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
- map(0x9800, 0x98ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
+ map(0x9000, 0x93ff).mirror(0x0400).ram().w(FUNC(mshuttle_state::galaxian_videoram_w)).share("videoram");
+ map(0x9800, 0x98ff).mirror(0x0700).ram().w(FUNC(mshuttle_state::galaxian_objram_w)).share("spriteram");
map(0xa000, 0xa000).portr("IN0");
- map(0xa000, 0xa000).w(FUNC(galaxian_state::irq_enable_w));
- map(0xa001, 0xa001).w(FUNC(galaxian_state::galaxian_stars_enable_w));
- map(0xa002, 0xa002).w(FUNC(galaxian_state::galaxian_flip_screen_xy_w));
+ map(0xa000, 0xa000).w(FUNC(mshuttle_state::irq_enable_w));
+ map(0xa001, 0xa001).w(FUNC(mshuttle_state::galaxian_stars_enable_w));
+ map(0xa002, 0xa002).w(FUNC(mshuttle_state::galaxian_flip_screen_xy_w));
map(0xa004, 0xa004).w("cclimber_audio", FUNC(cclimber_audio_device::sample_trigger_w));
- map(0xa007, 0xa007).w(FUNC(galaxian_state::mshuttle_ay8910_cs_w));
+ map(0xa007, 0xa007).w(FUNC(mshuttle_state::ay8910_cs_w));
map(0xa800, 0xa800).portr("IN1");
map(0xa800, 0xa800).w("cclimber_audio", FUNC(cclimber_audio_device::sample_rate_w));
map(0xb000, 0xb000).portr("IN2");
@@ -2398,95 +2483,119 @@ void galaxian_state::mshuttle_map(address_map &map)
map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r));
}
-void galaxian_state::mshuttle_decrypted_opcodes_map(address_map &map)
+void mshuttle_state::mshuttle_decrypted_opcodes_map(address_map &map)
{
map(0x0000, 0x7fff).rom().share("decrypted_opcodes");
}
-void galaxian_state::mshuttle_portmap(address_map &map)
+void mshuttle_state::mshuttle_portmap(address_map &map)
{
map.unmap_value_high();
map.global_mask(0x0f);
- map(0x08, 0x08).w(FUNC(galaxian_state::mshuttle_ay8910_control_w));
- map(0x09, 0x09).w(FUNC(galaxian_state::mshuttle_ay8910_data_w));
- map(0x0c, 0x0c).r(FUNC(galaxian_state::mshuttle_ay8910_data_r));
+ map(0x08, 0x08).w(FUNC(mshuttle_state::ay8910_control_w));
+ map(0x09, 0x09).w(FUNC(mshuttle_state::ay8910_data_w));
+ map(0x0c, 0x0c).r(FUNC(mshuttle_state::ay8910_data_r));
}
-void galaxian_state::fourplay_map(address_map &map)
+
+// fourplay
+void fourplay_state::fourplay_map(address_map &map)
{
- map(0x0000,0x3fff).bankr("bank1");
+ map(0x0000,0x3fff).bankr(m_rombank);
map(0x4000,0x47ff).ram();
- map(0x5000,0x53ff).mirror(0x0400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
- map(0x5800,0x58ff).mirror(0x0700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
+ map(0x5000,0x53ff).mirror(0x0400).ram().w(FUNC(fourplay_state::galaxian_videoram_w)).share("videoram");
+ map(0x5800,0x58ff).mirror(0x0700).ram().w(FUNC(fourplay_state::galaxian_objram_w)).share("spriteram");
map(0x6000,0x6000).portr("IN0");
map(0x6800,0x6800).portr("IN1");
map(0x7000,0x7000).portr("IN2");
map(0x7800,0x7fff).r("watchdog",FUNC(watchdog_timer_device::reset_r));
- map(0x6000,0x6001).w(FUNC(galaxian_state::start_lamp_w));
- map(0x6002,0x6002).nopw(); // .w(FUNC(galaxian_state::coin_lock_w));
- map(0x6003,0x6003).w(FUNC(galaxian_state::coin_count_0_w));
+ map(0x6000,0x6001).w(FUNC(fourplay_state::start_lamp_w));
+ map(0x6002,0x6002).nopw(); // .w(FUNC(fourplay_state::coin_lock_w));
+ map(0x6003,0x6003).w(FUNC(fourplay_state::coin_count_0_w));
map(0x6004,0x6007).w("cust",FUNC(galaxian_sound_device::lfo_freq_w));
map(0x6800,0x6807).w("cust",FUNC(galaxian_sound_device::sound_w));
- map(0x7001,0x7001).w(FUNC(galaxian_state::irq_enable_w));
- map(0x7002,0x7003).w(FUNC(galaxian_state::fourplay_rombank_w));
- map(0x7004,0x7004).w(FUNC(galaxian_state::galaxian_stars_enable_w));
+ map(0x7001,0x7001).w(FUNC(fourplay_state::irq_enable_w));
+ map(0x7002,0x7003).w(FUNC(fourplay_state::fourplay_rombank_w));
+ map(0x7004,0x7004).w(FUNC(fourplay_state::galaxian_stars_enable_w));
map(0x7005,0x7005).nopw(); /* bit 3 of rombank select - always 0 */
- map(0x7006,0x7006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
- map(0x7007,0x7007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
+ map(0x7006,0x7006).w(FUNC(fourplay_state::galaxian_flip_screen_x_w));
+ map(0x7007,0x7007).w(FUNC(fourplay_state::galaxian_flip_screen_y_w));
map(0x7008,0x7008).nopw(); /* bit 4 of rombank select - always 0 */
map(0x7800,0x7800).w("cust",FUNC(galaxian_sound_device::pitch_w));
}
-void galaxian_state::videight_map(address_map &map)
+void videight_state::videight_map(address_map &map)
{
- map(0x0000,0x3fff).bankr("bank1");
+ map(0x0000,0x3fff).bankr(m_rombank);
map(0x4000,0x47ff).ram();
- map(0x5000,0x53ff).mirror(0x400).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
- map(0x5800,0x58ff).mirror(0x700).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
+ map(0x5000,0x53ff).mirror(0x400).ram().w(FUNC(videight_state::galaxian_videoram_w)).share("videoram");
+ map(0x5800,0x58ff).mirror(0x700).ram().w(FUNC(videight_state::galaxian_objram_w)).share("spriteram");
map(0x6000,0x6000).portr("IN0");
map(0x6800,0x6800).portr("IN1");
map(0x7000,0x7000).portr("IN2");
map(0x7800,0x7fff).r("watchdog",FUNC(watchdog_timer_device::reset_r));
- map(0x6000,0x6002).w(FUNC(galaxian_state::videight_gfxbank_w));
- map(0x6003,0x6003).w(FUNC(galaxian_state::coin_count_0_w));
+ map(0x6000,0x6002).w(FUNC(videight_state::videight_gfxbank_w));
+ map(0x6003,0x6003).w(FUNC(videight_state::coin_count_0_w));
map(0x6004,0x6007).w("cust",FUNC(galaxian_sound_device::lfo_freq_w));
map(0x6800,0x6807).w("cust",FUNC(galaxian_sound_device::sound_w));
map(0x6808,0x68ff).nopw();
- map(0x7001,0x7001).w(FUNC(galaxian_state::irq_enable_w));
- map(0x7002,0x7005).w(FUNC(galaxian_state::videight_rombank_w));
- map(0x7006,0x7006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w));
- map(0x7007,0x7007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w));
+ map(0x7001,0x7001).w(FUNC(videight_state::irq_enable_w));
+ map(0x7002,0x7005).w(FUNC(videight_state::videight_rombank_w));
+ map(0x7006,0x7006).w(FUNC(videight_state::galaxian_flip_screen_x_w));
+ map(0x7007,0x7007).w(FUNC(videight_state::galaxian_flip_screen_y_w));
map(0x7008,0x7008).nopw(); /* bit 4 of rombank select - always 0 */
map(0x7800,0x7800).w("cust",FUNC(galaxian_sound_device::pitch_w));
}
-void galaxian_state::tenspot_unk_6000_w(uint8_t data)
+void tenspot_state::machine_start()
+{
+ galaxian_state::machine_start();
+
+ m_current_game = 0;
+
+ save_item(NAME(m_current_game));
+
+ for (unsigned i = 0; 10U > i; ++i)
+ m_mainbank->configure_entry(i, memregion(util::string_format("game_%u_cpu", i))->base());
+
+ set_game_bank(m_current_game, false);
+}
+
+void tenspot_state::unk_6000_w(uint8_t data)
{
logerror("tenspot_unk_6000_w %02x\n",data);
}
-void galaxian_state::tenspot_unk_8000_w(uint8_t data)
+void tenspot_state::unk_8000_w(uint8_t data)
{
logerror("tenspot_unk_8000_w %02x\n",data);
}
-void galaxian_state::tenspot_unk_e000_w(uint8_t data)
+void tenspot_state::unk_e000_w(uint8_t data)
{
logerror("tenspot_unk_e000_w %02x\n",data);
}
-void galaxian_state::tenspot_select_map(address_map &map)
+void tenspot_state::tenspot_map(address_map &map)
+{
+ galaxian_map(map);
+ map(0x0000, 0x3fff).bankr(m_mainbank);
+ map(0x6002, 0x6002).mirror(0x07f8).w(FUNC(tenspot_state::artic_gfxbank_w));
+ map(0x7000, 0x7000).r(*this, FUNC(tenspot_state::dsw_read));
+}
+
+void tenspot_state::tenspot_select_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x07ff).rom();
map(0x2000, 0x23ff).ram();
map(0x4000, 0x4000).portr("SELECT2");
- map(0x6000, 0x6000).w(FUNC(galaxian_state::tenspot_unk_6000_w));
+ map(0x6000, 0x6000).w(FUNC(tenspot_state::unk_6000_w));
map(0xc000, 0xc000).portr("SELECT");
- map(0x8000, 0x8000).w(FUNC(galaxian_state::tenspot_unk_8000_w));
+ map(0x8000, 0x8000).w(FUNC(tenspot_state::unk_8000_w));
map(0xa000, 0xa03f).ram();
- map(0xe000, 0xe000).w(FUNC(galaxian_state::tenspot_unk_e000_w));
+ map(0xe000, 0xe000).w(FUNC(tenspot_state::unk_e000_w));
}
@@ -2522,6 +2631,37 @@ void galaxian_state::froggeram_map(address_map &map)
map(0xb807, 0xb807).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); // always set to 0?
}
+void guttangt_state::guttangt_rombank_w(uint8_t data)
+{
+ m_rombank->set_entry(data & 1);
+}
+
+// map not derived from schematics
+void guttangt_state::guttangt_map(address_map &map)
+{
+ map(0x0000, 0x1fff).rom().nopw();
+ map(0x2000, 0x27ff).bankr(m_rombank); // 0x2000-0x27ff is banked (so they have room for the new music player), see init / rom loading
+ map(0x2800, 0x3fff).rom().nopw();
+
+ map(0x4000, 0x47ff).ram();
+
+ map(0x5000, 0x53ff).ram().w(FUNC(galaxian_state::galaxian_videoram_w)).share("videoram");
+ map(0x5800, 0x58ff).ram().w(FUNC(galaxian_state::galaxian_objram_w)).share("spriteram");
+
+ map(0x6000, 0x6000).portr("IN0").w(FUNC(guttangt_state::guttangt_rombank_w));
+ map(0x6800, 0x6800).portr("IN1");
+
+ galaxian_map_discrete(map);
+
+ map(0x7000, 0x7000).portr("IN2");
+ map(0x7001, 0x7001).w(FUNC(galaxian_state::irq_enable_w));
+
+ map(0x7006, 0x7006).w(FUNC(galaxian_state::galaxian_flip_screen_x_w)); // always set to 0?
+ map(0x7007, 0x7007).w(FUNC(galaxian_state::galaxian_flip_screen_y_w)); // always set to 0?
+
+ map(0x7800, 0x7800).r("watchdog", FUNC(watchdog_timer_device::reset_r));
+}
+
/*************************************
*
* Sound CPU memory maps
@@ -2560,7 +2700,7 @@ void galaxian_state::konami_sound_portmap(address_map &map)
map(0x00, 0xff).rw(FUNC(galaxian_state::konami_ay8910_r), FUNC(galaxian_state::konami_ay8910_w));
}
-void galaxian_state::monsterz_sound_map(address_map &map)
+void taiyo_sfx_state::monsterz_sound_map(address_map &map)
{
konami_sound_map(map);
map(0x0000, 0x3fff).rom().region("audiocpu", 0); // sound board has space for extra ROM
@@ -2618,22 +2758,32 @@ void galaxian_state::takeoff_sound_portmap(address_map &map)
// Scorpion with 3 x AY-8910A and Digitalker
-void galaxian_state::scorpion_sound_map(address_map &map)
+void zac_scorpion_state::scorpion_sound_map(address_map &map)
{
konami_sound_map(map);
- map(0x3000, 0x3000).r(FUNC(galaxian_state::scorpion_digitalker_intr_r));
+ map(0x3000, 0x3000).r(FUNC(zac_scorpion_state::digitalker_intr_r));
}
-void galaxian_state::scorpion_sound_portmap(address_map &map)
+void zac_scorpion_state::scorpion_sound_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0xff).rw(FUNC(galaxian_state::scorpion_ay8910_r), FUNC(galaxian_state::scorpion_ay8910_w));
+ map(0x00, 0xff).rw(FUNC(zac_scorpion_state::ay8910_r), FUNC(zac_scorpion_state::ay8910_w));
}
// King and Balloon with DAC
-void galaxian_state::kingball_sound_map(address_map &map)
+void kingball_state::kingball_map(address_map &map)
+{
+ mooncrst_map(map);
+ map(0xb000, 0xb000).mirror(0x07f8).w(FUNC(kingball_state::sound1_w));
+ map(0xb001, 0xb001).mirror(0x07f8).w(FUNC(kingball_state::irq_enable_w));
+ map(0xb002, 0xb002).mirror(0x07f8).w(FUNC(kingball_state::sound2_w));
+ map(0xb003, 0xb003).mirror(0x07f8).w(FUNC(kingball_state::speech_dip_w));
+ map(0xb004, 0xb004).mirror(0x07f8).unmapw(); // disable the stars
+}
+
+void kingball_state::kingball_sound_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0x3fff);
@@ -2641,26 +2791,26 @@ void galaxian_state::kingball_sound_map(address_map &map)
map(0x0000, 0x1fff).rom();
}
-void galaxian_state::kingball_sound_portmap(address_map &map)
+void kingball_state::kingball_sound_portmap(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
- map(0x00, 0x00).mirror(0xff).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w(FUNC(galaxian_state::kingball_dac_w));
+ map(0x00, 0x00).mirror(0xff).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w(FUNC(kingball_state::dac_w));
}
// SF-X sample player
-void galaxian_state::sfx_sample_map(address_map &map)
+void taiyo_sfx_state::sfx_sample_map(address_map &map)
{
map(0x0000, 0x5fff).rom();
map(0x8000, 0x83ff).mirror(0x6c00).ram();
}
-void galaxian_state::sfx_sample_portmap(address_map &map)
+void taiyo_sfx_state::sfx_sample_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0xff).rw(FUNC(galaxian_state::sfx_sample_io_r), FUNC(galaxian_state::sfx_sample_io_w));
+ map(0x00, 0xff).rw(FUNC(taiyo_sfx_state::sample_io_r), FUNC(taiyo_sfx_state::sample_io_w));
}
void galaxian_state::turpins_sound_map(address_map &map)
@@ -3515,7 +3665,7 @@ static INPUT_PORTS_START( tenspot )
PORT_DIPUNKNOWN( 0x80, 0x80 )
PORT_START("FAKE_SELECT") /* fake button to move onto next game - until select rom is understood! */
- PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Next Game (Fake)") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, galaxian_state, tenspot_fake, 0)
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Next Game (Fake)") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, tenspot_state, tenspot_fake, 0)
PORT_MODIFY("IN0")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_4WAY
@@ -4677,14 +4827,14 @@ static INPUT_PORTS_START( kingball )
PORT_INCLUDE(galaxian)
PORT_MODIFY("IN0")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(galaxian_state, kingball_muxbit_r)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(kingball_state, muxbit_r)
/* Relating to above port:Hack? - possibly multiplexed via writes to $b003 */
//PORT_DIPNAME( 0x40, 0x40, "Speech" )
//PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
//PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_MODIFY("IN1")
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(galaxian_state, kingball_noise_r) /* NOISE line */
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(kingball_state, noise_r) /* NOISE line */
PORT_DIPNAME( 0xc0, 0x40, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0xc0, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) )
@@ -6149,26 +6299,23 @@ static INPUT_PORTS_START( scobras )
INPUT_PORTS_END
-CUSTOM_INPUT_MEMBER(galaxian_state::moonwar_dial_r)
+CUSTOM_INPUT_MEMBER(moonwar_state::dial_r)
{
- static const char *const dialname[2] = { "P1_DIAL", "P2_DIAL" };
- int p = (~m_moonwar_port_select >> 4) & 1;
-
// see http://www.cityofberwyn.com/schematics/stern/MoonWar_opto.tiff for schematic
- // I.e. a 74ls161 counts from 0 to 15 which is the absolute number of bars passed on the quadrature
+ // i.e. a 74ls161 counts from 0 to 15 which is the absolute number of bars passed on the quadrature
- signed char dialread = ioport(dialname[p])->read();
+ const int8_t dialread = int8_t(uint8_t(m_dials[m_port_select]->read()));
- uint8_t ret;
+ if (dialread < 0)
+ m_direction[m_port_select] = 0x00;
+ else if (dialread > 0)
+ m_direction[m_port_select] = 0x10;
- if (dialread < 0) m_direction[p] = 0x00;
- else if (dialread > 0) m_direction[p] = 0x10;
+ m_counter_74ls161[m_port_select] += std::abs(dialread);
+ m_counter_74ls161[m_port_select] &= 0xf;
- m_counter_74ls161[p] += abs(dialread);
- m_counter_74ls161[p] &= 0xf;
-
- ret = m_counter_74ls161[p] | m_direction[p];
- //fprintf(stderr, "dialread1: %02x, counter_74ls161: %02x, spinner ret is %02x\n", dialread, m_counter_74ls161[p], ret);
+ const uint8_t ret = m_counter_74ls161[m_port_select] | m_direction[m_port_select];
+ //logerror("dialread1: %02x, counter_74ls161: %02x, spinner ret is %02x\n", dialread, m_counter_74ls161[m_port_select], ret);
return ret;
}
@@ -6176,7 +6323,7 @@ CUSTOM_INPUT_MEMBER(galaxian_state::moonwar_dial_r)
/* verified from Z80 code */
static INPUT_PORTS_START( moonwar )
PORT_START("IN0")
- PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(galaxian_state, moonwar_dial_r)
+ PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(moonwar_state, dial_r)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL // cocktail: p2 shield
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
@@ -6765,6 +6912,63 @@ static INPUT_PORTS_START( highroll )
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8")
INPUT_PORTS_END
+
+static INPUT_PORTS_START( guttangt )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
+ PORT_DIPNAME( 0x20, 0x20, "IN0:5" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) // also acts as button 1 / speedup
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) // ^
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
+ PORT_DIPNAME( 0x20, 0x20, "IN1:6" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x40, "A: 2C/1C B: 1C/3C" )
+ PORT_DIPSETTING( 0x00, "A: 1C/1C B: 1C/6C" )
+ PORT_DIPNAME( 0x80, 0x80, "IN1:8" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("IN2")
+ PORT_DIPNAME( 0x01, 0x01, "IN2:1" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x04, "3" )
+ PORT_DIPSETTING( 0x08, "4" )
+ PORT_DIPSETTING( 0x0c, "5" )
+ PORT_DIPNAME( 0x10, 0x10, "IN2:5" )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "IN2:6" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "IN2:7" )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "IN2:8" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
/*************************************
*
* Graphics layouts
@@ -6892,13 +7096,17 @@ void galaxian_state::sidam_bootleg_base(machine_config &config)
{
galaxian_base(config);
- /* basic machine hardware */
+ // basic machine hardware
m_maincpu->set_clock(12_MHz_XTAL / 2 / 2);
- /* video hardware */
+ // video hardware
m_gfxdecode->set_info(gfx_sidam);
+ // adjust for 12 MHz pixel clock
m_screen->set_raw(12_MHz_XTAL, SIDAM_HTOTAL, SIDAM_HBEND, SIDAM_HBSTART, GALAXIAN_VTOTAL, GALAXIAN_VBEND, GALAXIAN_VBSTART);
+ set_x_scale(SIDAM_XSCALE);
+ set_h0_start(SIDAM_H0START);
+
}
@@ -7041,10 +7249,10 @@ void galaxian_state::galaxian(machine_config &config)
GALAXIAN_SOUND(config, "cust", 0);
}
-void galaxian_state::pisces(machine_config &config)
+void pisces_state::pisces(machine_config &config)
{
galaxian(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::pisces_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &pisces_state::pisces_map);
}
void galaxian_state::victoryc(machine_config &config)
@@ -7076,34 +7284,48 @@ void galaxian_state::pacmanbl(machine_config &config)
{
galaxian(config);
- /* separate tile/sprite ROMs */
+ // separate tile/sprite ROMs
m_gfxdecode->set_info(gfx_pacmanbl);
}
-void galaxian_state::tenspot(machine_config &config)
+void tenspot_state::tenspot(machine_config &config)
{
galaxian(config);
- /* basic machine hardware */
+
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_PROGRAM, &tenspot_state::tenspot_map);
+
z80_device &selectcpu(Z80(config, "selectcpu", GALAXIAN_PIXEL_CLOCK/3/2)); // ?? mhz
- selectcpu.set_addrmap(AS_PROGRAM, &galaxian_state::tenspot_select_map);
- //selectcpu.set_vblank_int("screen", FUNC(galaxian_state::nmi_line_pulse));
+ selectcpu.set_addrmap(AS_PROGRAM, &tenspot_state::tenspot_select_map);
+ //selectcpu.set_vblank_int("screen", FUNC(tenspot_state::nmi_line_pulse));
- /* separate tile/sprite ROMs */
+ // separate tile/sprite ROMs
m_gfxdecode->set_info(gfx_tenspot);
}
-void galaxian_state::zigzag(machine_config &config)
+void galaxian_state::devilfsg(machine_config &config)
+{
+ pacmanbl(config);
+
+ // IRQ line is INT, not NMI
+ set_irq_line(0);
+}
+
+void zigzagb_state::zigzag(machine_config &config)
{
galaxian_base(config);
- /* separate tile/sprite ROMs */
+ // separate tile/sprite ROMs
m_gfxdecode->set_info(gfx_pacmanbl);
- /* basic machine hardware */
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::zigzag_map);
+ // two sprite generators
+ set_num_spritegens(2);
- /* sound hardware */
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_PROGRAM, &zigzagb_state::zigzag_map);
+
+ // sound hardware
AY8910(config, m_ay8910[0], GALAXIAN_PIXEL_CLOCK/3/2).add_route(ALL_OUTPUTS, "speaker", 0.5); /* matches PCB video - unconfirmed */
}
@@ -7112,6 +7334,8 @@ void gmgalax_state::gmgalax(machine_config &config)
{
galaxian(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &gmgalax_state::gmgalax_map);
+
/* banked video hardware */
m_gfxdecode->set_info(gfx_gmgalax);
m_palette->set_entries(64);
@@ -7156,16 +7380,16 @@ void galaxian_state::thepitm(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::thepitm_map);
}
-void galaxian_state::porter(machine_config &config)
+void pisces_state::porter(machine_config &config)
{
mooncrst(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::porter_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &pisces_state::porter_map);
}
-void galaxian_state::skybase(machine_config &config)
+void pisces_state::skybase(machine_config &config)
{
mooncrst(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::skybase_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &pisces_state::skybase_map);
}
void galaxian_state::kong(machine_config &config)
@@ -7208,11 +7432,15 @@ void galaxian_state::ckongmc(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::ckongmc_map);
}
-void galaxian_state::bagmanmc(machine_config &config)
+void bagmanmc_state::bagmanmc(machine_config &config)
{
mooncrst(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::bagmanmc_map);
- m_maincpu->set_addrmap(AS_IO, &galaxian_state::bagmanmc_io_map);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &bagmanmc_state::bagmanmc_map);
+ m_maincpu->set_addrmap(AS_IO, &bagmanmc_state::bagmanmc_io_map);
+
+ // IRQ line is INT, not NMI
+ set_irq_line(0);
}
@@ -7223,6 +7451,12 @@ void galaxian_state::fantastc(machine_config &config)
// alternate memory map
m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::fantastc_map);
+ // bullets moved from $60 to $c0
+ set_bullets_base(0xc0);
+
+ // two sprite generators
+ set_num_spritegens(2);
+
// sound hardware
AY8910(config, m_ay8910[0], GALAXIAN_PIXEL_CLOCK/3/2).add_route(ALL_OUTPUTS, "speaker", 0.25); // 3.072MHz
AY8910(config, m_ay8910[1], GALAXIAN_PIXEL_CLOCK/3/2).add_route(ALL_OUTPUTS, "speaker", 0.25); // 3.072MHz
@@ -7249,6 +7483,13 @@ void galaxian_state::timefgtr(machine_config &config)
TIMER(config, "scantimer").configure_scanline(FUNC(galaxian_state::timefgtr_scanline), "screen", 0, 1);
}
+void guttangt_state::guttangt(machine_config &config)
+{
+ galaxian(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &guttangt_state::guttangt_map);
+}
+
+
void galaxian_state::jumpbug(machine_config &config)
{
@@ -7302,32 +7543,37 @@ void galaxian_state::checkmaj(machine_config &config)
}
-void galaxian_state::mshuttle(machine_config &config)
+void mshuttle_state::mshuttle(machine_config &config)
{
galaxian_base(config);
// basic machine hardware
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::mshuttle_map);
- m_maincpu->set_addrmap(AS_OPCODES, &galaxian_state::mshuttle_decrypted_opcodes_map);
- m_maincpu->set_addrmap(AS_IO, &galaxian_state::mshuttle_portmap);
+ m_maincpu->set_addrmap(AS_PROGRAM, &mshuttle_state::mshuttle_map);
+ m_maincpu->set_addrmap(AS_OPCODES, &mshuttle_state::mshuttle_decrypted_opcodes_map);
+ m_maincpu->set_addrmap(AS_IO, &mshuttle_state::mshuttle_portmap);
+
+ // IRQ line is INT, not NMI
+ set_irq_line(0);
// sound hardware
CCLIMBER_AUDIO(config, "cclimber_audio", 0);
}
-void galaxian_state::kingball(machine_config &config)
+void kingball_state::kingball(machine_config &config)
{
mooncrst(config);
- /* basic machine hardware */
+ // basic machine hardware
+ m_maincpu->set_addrmap(AS_PROGRAM, &kingball_state::kingball_map);
+
Z80(config, m_audiocpu, 5000000/2);
- m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::kingball_sound_map);
- m_audiocpu->set_addrmap(AS_IO, &galaxian_state::kingball_sound_portmap);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &kingball_state::kingball_sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &kingball_state::kingball_sound_portmap);
GENERIC_LATCH_8(config, m_soundlatch);
- /* sound hardware */
+ // sound hardware
DAC_4BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.53); // unknown DAC
}
@@ -7434,11 +7680,13 @@ void namenayo_state::namenayo(machine_config &config)
konami_base(config);
konami_sound_2x_ay8910(config);
+ // video hardware
m_maincpu->set_addrmap(AS_PROGRAM, &namenayo_state::namenayo_map);
m_palette->set_entries(64);
- /* video hardware */
m_gfxdecode->set_info(gfx_namenayo);
+
+ set_left_sprite_clip(0);
}
// TODO: should be derived from theend, re-sort machine configs later
@@ -7546,23 +7794,23 @@ void galaxian_state::amigo2(machine_config &config) // marked "AMI", but similar
AY8910(config, m_ay8910[1], 12_MHz_XTAL / 2 / 2 / 2).add_route(ALL_OUTPUTS, "speaker", 0.25); /* matches PCB, needs verification */
}
-void galaxian_state::scorpion(machine_config &config)
+void zac_scorpion_state::scorpion(machine_config &config)
{
scramble_base(config);
// alternate memory map
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::scorpion_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &zac_scorpion_state::scorpion_map);
- m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::scorpion_sound_map);
- m_audiocpu->set_addrmap(AS_IO, &galaxian_state::scorpion_sound_portmap);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &zac_scorpion_state::scorpion_sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &zac_scorpion_state::scorpion_sound_portmap);
- m_ppi8255[1]->in_pc_callback().set(FUNC(galaxian_state::scorpion_protection_r));
- m_ppi8255[1]->out_pc_callback().set(FUNC(galaxian_state::scorpion_protection_w));
+ m_ppi8255[1]->in_pc_callback().set(FUNC(zac_scorpion_state::protection_r));
+ m_ppi8255[1]->out_pc_callback().set(FUNC(zac_scorpion_state::protection_w));
- /* extra AY8910 with I/O ports */
+ // extra AY8910 with I/O ports
AY8910(config, m_ay8910[2], KONAMI_SOUND_CLOCK/8);
m_ay8910[2]->port_a_write_callback().set(m_digitalker, FUNC(digitalker_device::digitalker_data_w));
- m_ay8910[2]->port_b_write_callback().set(FUNC(galaxian_state::scorpion_digitalker_control_w));
+ m_ay8910[2]->port_b_write_callback().set(FUNC(zac_scorpion_state::digitalker_control_w));
m_ay8910[2]->add_route(ALL_OUTPUTS, "speaker", 0.25);
DIGITALKER(config, m_digitalker, 4_MHz_XTAL).add_route(ALL_OUTPUTS, "speaker", 0.16);
@@ -7577,19 +7825,19 @@ void galaxian_state::ckongs(machine_config &config)
}
-void galaxian_state::sfx(machine_config &config)
+void taiyo_sfx_state::sfx(machine_config &config)
{
scramble_base(config);
config.device_remove("watchdog");
// alternate memory map
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::sfx_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &taiyo_sfx_state::sfx_map);
/* 3rd CPU for the sample player */
Z80(config, m_audio2, KONAMI_SOUND_CLOCK/8);
- m_audio2->set_addrmap(AS_PROGRAM, &galaxian_state::sfx_sample_map);
- m_audio2->set_addrmap(AS_IO, &galaxian_state::sfx_sample_portmap);
+ m_audio2->set_addrmap(AS_PROGRAM, &taiyo_sfx_state::sfx_sample_map);
+ m_audio2->set_addrmap(AS_IO, &taiyo_sfx_state::sfx_sample_portmap);
I8255A(config, m_ppi8255[2]);
m_ppi8255[2]->in_pa_callback().set("soundlatch2", FUNC(generic_latch_8_device::read));
@@ -7598,24 +7846,24 @@ void galaxian_state::sfx(machine_config &config)
/* port on 2nd 8910 is used for communication */
m_ay8910[1]->port_a_write_callback().set("soundlatch2", FUNC(generic_latch_8_device::write));
- m_ay8910[1]->port_b_write_callback().set(FUNC(galaxian_state::sfx_sample_control_w));
+ m_ay8910[1]->port_b_write_callback().set(FUNC(taiyo_sfx_state::sample_control_w));
/* DAC for the sample player */
DAC_8BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 1.0); // 16-pin IC (not identified by schematics)
}
-void galaxian_state::monsterz(machine_config &config)
+void taiyo_sfx_state::monsterz(machine_config &config)
{
sfx(config);
// alternate memory map
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::monsterz_map);
- m_audiocpu->set_addrmap(AS_PROGRAM, &galaxian_state::monsterz_sound_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &taiyo_sfx_state::monsterz_map);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &taiyo_sfx_state::monsterz_sound_map);
- m_ppi8255[1]->out_pa_callback().set(FUNC(galaxian_state::monsterz_porta_1_w));
- m_ppi8255[1]->out_pb_callback().set(FUNC(galaxian_state::monsterz_portb_1_w));
- m_ppi8255[1]->out_pc_callback().set(FUNC(galaxian_state::monsterz_portc_1_w));
+ m_ppi8255[1]->out_pa_callback().set(FUNC(taiyo_sfx_state::monsterz_porta_1_w));
+ m_ppi8255[1]->out_pb_callback().set(FUNC(taiyo_sfx_state::monsterz_portb_1_w));
+ m_ppi8255[1]->out_pc_callback().set(FUNC(taiyo_sfx_state::monsterz_portc_1_w));
// there are likely other differences too, but those can wait until after protection is sorted out
}
@@ -7756,33 +8004,33 @@ void galaxian_state::anteaterg(machine_config &config)
}
-void galaxian_state::moonwar(machine_config &config)
+void moonwar_state::moonwar(machine_config &config)
{
scobra(config);
- m_ppi8255[0]->out_pc_callback().set(FUNC(galaxian_state::moonwar_port_select_w));
+ m_ppi8255[0]->out_pc_callback().set(FUNC(moonwar_state::port_select_w));
- m_palette->set_init(FUNC(galaxian_state::moonwar_palette)); // bullets are less yellow
+ m_palette->set_init(FUNC(moonwar_state::moonwar_palette)); // bullets are less yellow
}
-void galaxian_state::fourplay(machine_config &config)
+void fourplay_state::fourplay(machine_config &config)
{
galaxian(config);
// basic machine hardware
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::fourplay_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &fourplay_state::fourplay_map);
- /* video hardware */
+ // video hardware
m_gfxdecode->set_info(gfx_gmgalax);
m_palette->set_entries(64);
}
-void galaxian_state::videight(machine_config &config)
+void videight_state::videight(machine_config &config)
{
galaxian(config);
// basic machine hardware
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_state::videight_map);
+ m_maincpu->set_addrmap(AS_PROGRAM, &videight_state::videight_map);
/* video hardware */
m_gfxdecode->set_info(gfx_videight);
@@ -8023,22 +8271,16 @@ void galaxian_state::decode_victoryc()
*
*************************************/
-void galaxian_state::common_init(galaxian_draw_bullet_func draw_bullet,galaxian_draw_background_func draw_background,
- galaxian_extend_tile_info_func extend_tile_info,galaxian_extend_sprite_info_func extend_sprite_info)
+void galaxian_state::common_init(
+ draw_bullet_func draw_bullet,
+ draw_background_func draw_background,
+ extend_tile_info_func extend_tile_info,
+ extend_sprite_info_func extend_sprite_info)
{
- m_x_scale = GALAXIAN_XSCALE;
- m_h0_start = GALAXIAN_H0START;
- m_irq_enabled = 0;
- m_irq_line = INPUT_LINE_NMI;
- m_numspritegens = 1;
- m_bullets_base = 0x60;
- m_sprites_base = 0x40;
- m_frogger_adjust = false;
- m_sfx_tilemap = false;
- m_draw_bullet_ptr = (draw_bullet != nullptr) ? draw_bullet : &galaxian_state::galaxian_draw_bullet;
- m_draw_background_ptr = (draw_background != nullptr) ? draw_background : &galaxian_state::galaxian_draw_background;
- m_extend_tile_info_ptr = extend_tile_info;
- m_extend_sprite_info_ptr = extend_sprite_info;
+ m_draw_bullet_ptr = draw_bullet_delegate(draw_bullet ? draw_bullet : &galaxian_state::galaxian_draw_bullet, this);
+ m_draw_background_ptr = draw_background_delegate(draw_background ? draw_background : &galaxian_state::galaxian_draw_background, this);
+ m_extend_tile_info_ptr = extend_tile_info_delegate(extend_tile_info ? extend_tile_info : &galaxian_state::empty_extend_tile_info, this);
+ m_extend_sprite_info_ptr = extend_sprite_info_delegate(extend_sprite_info ? extend_sprite_info : &galaxian_state::empty_extend_sprite_info, this);
}
@@ -8137,28 +8379,19 @@ void galaxian_state::init_azurian()
void gmgalax_state::init_gmgalax()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- m_stars_enabled = 0;
- std::fill(std::begin(m_gfxbank), std::end(m_gfxbank), 0);
-
- /* video extensions */
- common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &gmgalax_state::gmgalax_extend_tile_info, &gmgalax_state::gmgalax_extend_sprite_info);
-
- /* ROM is banked */
- space.install_read_bank(0x0000, 0x3fff, m_bank1);
- m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000);
-
- /* callback when the game select is toggled */
- game_changed(*machine().ioport().ports().begin()->second->fields().first(), 0, 0, 0);
- save_item(NAME(m_selected_game));
+ // video extensions
+ common_init(nullptr, nullptr, nullptr, nullptr);
+ m_extend_tile_info_ptr = extend_tile_info_delegate(&gmgalax_state::bagmanmc_extend_tile_info, this);
+ m_extend_sprite_info_ptr = extend_sprite_info_delegate(&gmgalax_state::bagmanmc_extend_sprite_info, this);
}
-void galaxian_state::init_pisces()
+void pisces_state::init_pisces()
{
/* video extensions */
- common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::pisces_extend_tile_info, &galaxian_state::pisces_extend_sprite_info);
+ common_init(nullptr, nullptr, nullptr, nullptr);
+ m_extend_tile_info_ptr = extend_tile_info_delegate(&pisces_state::pisces_extend_tile_info, this);
+ m_extend_sprite_info_ptr = extend_sprite_info_delegate(&pisces_state::pisces_extend_sprite_info, this);
}
@@ -8183,24 +8416,35 @@ void galaxian_state::init_victoryc()
}
-void galaxian_state::init_fourplay()
+void fourplay_state::init_fourplay()
{
- m_bank1->configure_entries(0, 4, memregion("maincpu")->base() + 0x10000, 0x4000);
- m_bank1->set_entry(0);
+ m_rombank->configure_entries(0, 4, memregion("maincpu")->base(), 0x4000);
+ m_rombank->set_entry(0);
/* video extensions */
- common_init(NULL, NULL, &galaxian_state::pisces_extend_tile_info, &galaxian_state::pisces_extend_sprite_info);
+ common_init(nullptr, nullptr, nullptr, nullptr);
+ m_extend_tile_info_ptr = extend_tile_info_delegate(&fourplay_state::pisces_extend_tile_info, this);
+ m_extend_sprite_info_ptr = extend_sprite_info_delegate(&fourplay_state::pisces_extend_sprite_info, this);
}
-void galaxian_state::init_videight()
+void videight_state::init_videight()
{
- m_bank1->configure_entries(0, 8, memregion("maincpu")->base() + 0x10000, 0x4000);
- m_bank1->set_entry(0);
+ m_rombank->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
+ m_rombank->set_entry(0);
/* video extensions */
- common_init(NULL, NULL, &galaxian_state::videight_extend_tile_info, &galaxian_state::videight_extend_sprite_info);
+ common_init(nullptr, nullptr, nullptr, nullptr);
+ m_extend_tile_info_ptr = extend_tile_info_delegate(&videight_state::videight_extend_tile_info, this);
+ m_extend_sprite_info_ptr = extend_sprite_info_delegate(&videight_state::videight_extend_sprite_info, this);
}
+void guttangt_state::init_guttangt()
+{
+ common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::guttangt_extend_sprite_info);
+
+ m_rombank->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x2000);
+ m_rombank->set_entry(0);
+}
/*************************************
*
@@ -8262,26 +8506,22 @@ void galaxian_state::init_pacmanbl()
space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::artic_gfxbank_w)));
}
-uint8_t galaxian_state::tenspot_dsw_read()
+uint8_t tenspot_state::dsw_read()
{
- if (m_tenspot_current_game >= 0 && m_tenspot_current_game < 10)
- return m_tenspot_game_dsw[m_tenspot_current_game]->read();
+ if (m_current_game < m_game_dsw.size())
+ return m_game_dsw[m_current_game]->read();
else
return 0x00;
}
-void galaxian_state::tenspot_set_game_bank(int bank, int from_game)
+void tenspot_state::set_game_bank(int bank, bool invalidate_gfx)
{
char tmp[64];
uint8_t* srcregion;
uint8_t* dstregion;
- int x;
- sprintf(tmp,"game_%d_cpu", bank);
- srcregion = memregion(tmp)->base();
- dstregion = memregion("maincpu")->base();
- memcpy(dstregion, srcregion, 0x4000);
+ m_mainbank->set_entry(bank);
sprintf(tmp,"game_%d_temp", bank);
srcregion = memregion(tmp)->base();
@@ -8290,17 +8530,13 @@ void galaxian_state::tenspot_set_game_bank(int bank, int from_game)
dstregion = memregion("gfx2")->base();
memcpy(dstregion, srcregion, 0x2000);
- if (from_game)
+ if (invalidate_gfx)
{
- for (x=0;x<0x200;x++)
- {
+ for (int x = 0; x < 0x200; x++)
m_gfxdecode->gfx(0)->mark_dirty(x);
- }
- for (x=0;x<0x80;x++)
- {
+ for (int x = 0; x < 0x80; x++)
m_gfxdecode->gfx(1)->mark_dirty(x);
- }
}
sprintf(tmp,"game_%d_prom", bank);
@@ -8311,9 +8547,9 @@ void galaxian_state::tenspot_set_game_bank(int bank, int from_game)
galaxian_palette(*m_palette);
}
-void galaxian_state::init_tenspot()
+void tenspot_state::init_tenspot()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
+ //address_space &space = m_maincpu->space(AS_PROGRAM);
/* these are needed for batman part 2 to work properly, this banking is probably a property of the artic board,
which tenspot appears to have copied */
@@ -8326,53 +8562,23 @@ void galaxian_state::init_tenspot()
init_galaxian();
-
- space.install_write_handler(0x6002, 0x6002, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::artic_gfxbank_w)));
-
- m_tenspot_current_game = 0;
-
- tenspot_set_game_bank(m_tenspot_current_game, 0);
-
- space.install_read_handler(0x7000, 0x7000, read8smo_delegate(*this, FUNC(galaxian_state::tenspot_dsw_read)));
}
-
-void galaxian_state::init_devilfsg()
+void bagmanmc_state::init_bagmanmc()
{
/* video extensions */
- common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr);
-
- /* IRQ line is INT, not NMI */
- m_irq_line = 0;
+ common_init(nullptr, nullptr, nullptr, nullptr);
+ m_extend_tile_info_ptr = extend_tile_info_delegate(&bagmanmc_state::bagmanmc_extend_tile_info, this);
+ m_extend_sprite_info_ptr = extend_sprite_info_delegate(&bagmanmc_state::bagmanmc_extend_sprite_info, this);
}
-void galaxian_state::init_bagmanmc()
+void zigzagb_state::init_zigzag()
{
- /* video extensions */
- common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::gmgalax_extend_tile_info, &galaxian_state::gmgalax_extend_sprite_info);
-
- /* IRQ line is INT, not NMI */
- m_irq_line = 0;
-}
-
-
-void galaxian_state::init_zigzag()
-{
- /* video extensions */
+ // video extensions
common_init(nullptr, &galaxian_state::galaxian_draw_background, nullptr, nullptr);
- m_draw_bullet_ptr = nullptr;
-
- /* two sprite generators */
- m_numspritegens = 2;
-
- /* make ROMs 2 & 3 swappable */
- m_bank1->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000);
- membank("bank2")->configure_entries(0, 2, memregion("maincpu")->base() + 0x2000, 0x1000);
-
- /* handler for doing the swaps */
- zigzag_bankswap_w(0);
+ m_draw_bullet_ptr = draw_bullet_delegate();
}
@@ -8462,33 +8668,31 @@ void galaxian_state::init_kong()
}
-void galaxian_state::mshuttle_decode(const uint8_t convtable[8][16])
+void mshuttle_state::mshuttle_decode(const uint8_t convtable[8][16])
{
- uint8_t *rom = memregion("maincpu")->base();
+ const uint8_t *const rom = memregion("maincpu")->base();
- for (int A = 0x0000;A < 0x8000;A++)
+ for (int addr = 0x0000; addr < 0x8000; addr++)
{
- int i,j;
- uint8_t src = rom[A];
+ const uint8_t src = rom[addr];
- /* pick the translation table from bit 0 of the address */
- /* and from bits 1 7 of the source data */
- i = (A & 1) | (src & 0x02) | ((src & 0x80) >> 5);
+ // pick the translation table from bit 0 of the address and from bits 1 7 of the source data
+ const int i = (addr & 1) | (src & 0x02) | ((src & 0x80) >> 5);
- /* pick the offset in the table from bits 0 2 4 6 of the source data */
- j = (src & 0x01) | ((src & 0x04) >> 1) | ((src & 0x10) >> 2) | ((src & 0x40) >> 3);
+ // pick the offset in the table from bits 0 2 4 6 of the source data
+ const int j = (src & 0x01) | ((src & 0x04) >> 1) | ((src & 0x10) >> 2) | ((src & 0x40) >> 3);
- /* decode the opcodes */
- m_decrypted_opcodes[A] = (src & 0xaa) | convtable[i][j];
+ // decode the opcodes
+ m_decrypted_opcodes[addr] = (src & 0xaa) | convtable[i][j];
}
}
-void galaxian_state::init_mshuttle()
+void mshuttle_state::init_mshuttle()
{
static const uint8_t convtable[8][16] =
{
- /* 0xff marks spots which are unused and therefore unknown */
+ // 0xff marks spots which are unused and therefore unknown
{ 0x40,0x41,0x44,0x15,0x05,0x51,0x54,0x55,0x50,0x00,0x01,0x04,0xff,0x10,0x11,0x14 },
{ 0x45,0x51,0x55,0x44,0x40,0x11,0x05,0x41,0x10,0x14,0x54,0x50,0x15,0x04,0x00,0x01 },
{ 0x11,0x14,0x10,0x00,0x44,0x05,0xff,0x04,0x45,0x15,0x55,0x50,0xff,0x01,0x54,0x51 },
@@ -8499,18 +8703,15 @@ void galaxian_state::init_mshuttle()
{ 0x05,0x04,0x51,0x01,0xff,0xff,0x55,0xff,0x00,0x50,0x15,0x14,0x44,0x41,0x40,0x54 },
};
- /* video extensions */
+ // video extensions
common_init(&galaxian_state::mshuttle_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mshuttle_extend_tile_info, &galaxian_state::mshuttle_extend_sprite_info);
- /* IRQ line is INT, not NMI */
- m_irq_line = 0;
-
- /* decrypt the code */
+ // decrypt the code
mshuttle_decode(convtable);
}
-void galaxian_state::init_mshuttlj()
+void mshuttle_state::init_mshuttlj()
{
static const uint8_t convtable[8][16] =
{
@@ -8524,13 +8725,10 @@ void galaxian_state::init_mshuttlj()
{ 0x55,0x50,0x15,0x10,0x01,0x04,0x41,0x44,0x45,0x40,0x05,0x00,0x11,0x14,0x51,0x54 },
};
- /* video extensions */
+ // video extensions
common_init(&galaxian_state::mshuttle_draw_bullet, &galaxian_state::galaxian_draw_background, &galaxian_state::mshuttle_extend_tile_info, &galaxian_state::mshuttle_extend_sprite_info);
- /* IRQ line is INT, not NMI */
- m_irq_line = 0;
-
- /* decrypt the code */
+ // decrypt the code
mshuttle_decode(convtable);
}
@@ -8540,12 +8738,6 @@ void galaxian_state::init_fantastc()
/* video extensions */
common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::upper_extend_sprite_info);
- /* two sprite generators */
- m_numspritegens = 2;
-
- /* bullets moved from $60 to $c0 */
- m_bullets_base = 0xc0;
-
/* decode code */
static const uint16_t lut_am_unscramble[32] = {
0, 2, 4, 6, // ok!
@@ -8570,36 +8762,11 @@ void galaxian_state::init_fantastc()
void galaxian_state::init_timefgtr()
{
- /* two sprite generators */
- m_numspritegens = 2;
-
- /* bullets moved from $60 to $c0 */
- m_bullets_base = 0xc0;
-
/* video extensions */
common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::upper_extend_sprite_info);
}
-void galaxian_state::init_kingball()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
- /* video extensions */
- common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, nullptr);
-
- /* disable the stars */
- space.unmap_write(0xb004, 0xb004, 0x7f8);
-
- space.install_write_handler(0xb000, 0xb000, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::kingball_sound1_w)));
- space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::irq_enable_w)));
- space.install_write_handler(0xb002, 0xb002, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::kingball_sound2_w)));
- space.install_write_handler(0xb003, 0xb003, 0, 0x7f8, 0, write8smo_delegate(*this, FUNC(galaxian_state::kingball_speech_dip_w)));
-
- save_item(NAME(m_kingball_speech_dip));
- save_item(NAME(m_kingball_sound));
-}
-
/*************************************
*
* Konami games
@@ -8642,10 +8809,11 @@ void galaxian_state::init_mandinga()
space.unmap_read(0x7000, 0x7000, 0x7ff);
}
-void galaxian_state::init_sfx()
+void taiyo_sfx_state::init_sfx()
{
- /* basic configuration */
- common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::sfx_draw_background, &galaxian_state::upper_extend_tile_info, nullptr);
+ // basic configuration
+ common_init(&galaxian_state::scramble_draw_bullet, nullptr, &galaxian_state::upper_extend_tile_info, nullptr);
+ m_draw_background_ptr = draw_background_delegate(&taiyo_sfx_state::sfx_draw_background, this);
m_sfx_tilemap = true;
}
@@ -8664,25 +8832,10 @@ void galaxian_state::init_atlantis()
}
-void galaxian_state::init_sidam()
-{
- /* adjust for 12 MHz pixel clock */
- m_x_scale = SIDAM_XSCALE;
- m_h0_start = SIDAM_H0START;
-}
-
void galaxian_state::init_explorer()
{
/* video extensions */
common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::null_draw_background, nullptr, nullptr); // no 555 timer; there might be no stars at all
- init_sidam();
-}
-
-void galaxian_state::init_amigo2()
-{
- /* video extensions */
- init_turtles();
- init_sidam();
}
@@ -8786,7 +8939,7 @@ void galaxian_state::init_amidar()
#endif
-void galaxian_state::init_scorpion()
+void zac_scorpion_state::init_scorpion()
{
common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::scramble_draw_background, &galaxian_state::batman2_extend_tile_info, &galaxian_state::upper_extend_sprite_info);
@@ -8851,15 +9004,6 @@ void galaxian_state::init_calipso()
}
-void galaxian_state::init_moonwar()
-{
- /* video extensions */
- common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::scramble_draw_background, nullptr, nullptr);
-
- save_item(NAME(m_moonwar_port_select));
-}
-
-
void galaxian_state::init_ghostmun()
{
/* same as Pacmanbl... */
@@ -8935,7 +9079,10 @@ void galaxian_state::init_mimonkey()
void namenayo_state::init_namenayo()
{
/* video extensions */
- common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::namenayo_draw_background, &namenayo_state::namenayo_extend_tile_info, &namenayo_state::namenayo_extend_sprite_info);
+ common_init(&galaxian_state::scramble_draw_bullet, nullptr, nullptr, nullptr);
+ m_draw_background_ptr = draw_background_delegate(&namenayo_state::namenayo_draw_background, this);
+ m_extend_tile_info_ptr = extend_tile_info_delegate(&namenayo_state::namenayo_extend_tile_info, this);
+ m_extend_sprite_info_ptr = extend_sprite_info_delegate(&namenayo_state::namenayo_extend_sprite_info, this);
}
/*************************************
@@ -10349,14 +10496,14 @@ ROM_END
ROM_START( gmgalax )
- ROM_REGION( 0x18000, "maincpu", 0 ) /* 64k for code + 32k for banked code */
- ROM_LOAD( "pcb1_pm1.bin", 0x10000, 0x1000, CRC(19338c70) SHA1(cc2665b7d534d324627d12025ee099ff415d4214) )
- ROM_LOAD( "pcb1_pm2.bin", 0x11000, 0x1000, CRC(18db074d) SHA1(a70ed18f632e947493e648e6fc057dfb7a2a3322) )
- ROM_LOAD( "pcb1_pm3.bin", 0x12000, 0x1000, CRC(abb98b1d) SHA1(bb0109d353359bb192a3e6856a857c2f842838cb) )
- ROM_LOAD( "pcb1_pm4.bin", 0x13000, 0x1000, CRC(2403c78e) SHA1(52d8c8a4efcf47871485080ab217098a019e6579) )
- ROM_LOAD( "pcb1_gx1.bin", 0x14000, 0x1000, CRC(2faa9f53) SHA1(1e7010d407601c5da1adc68bc9f4742c79d57286) )
- ROM_LOAD( "pcb1_gx2.bin", 0x15000, 0x1000, CRC(121c5f16) SHA1(cb1806fa984870133fd883969838dca85f992515) )
- ROM_LOAD( "pcb1_gx3.bin", 0x16000, 0x1000, CRC(02d81a21) SHA1(39209cfb7cf142a65e157544d93803ea542a8efb) )
+ ROM_REGION( 0x8000, "maincpu", 0 ) // 32k banked code
+ ROM_LOAD( "pcb1_pm1.bin", 0x0000, 0x1000, CRC(19338c70) SHA1(cc2665b7d534d324627d12025ee099ff415d4214) )
+ ROM_LOAD( "pcb1_pm2.bin", 0x1000, 0x1000, CRC(18db074d) SHA1(a70ed18f632e947493e648e6fc057dfb7a2a3322) )
+ ROM_LOAD( "pcb1_pm3.bin", 0x2000, 0x1000, CRC(abb98b1d) SHA1(bb0109d353359bb192a3e6856a857c2f842838cb) )
+ ROM_LOAD( "pcb1_pm4.bin", 0x3000, 0x1000, CRC(2403c78e) SHA1(52d8c8a4efcf47871485080ab217098a019e6579) )
+ ROM_LOAD( "pcb1_gx1.bin", 0x4000, 0x1000, CRC(2faa9f53) SHA1(1e7010d407601c5da1adc68bc9f4742c79d57286) )
+ ROM_LOAD( "pcb1_gx2.bin", 0x5000, 0x1000, CRC(121c5f16) SHA1(cb1806fa984870133fd883969838dca85f992515) )
+ ROM_LOAD( "pcb1_gx3.bin", 0x6000, 0x1000, CRC(02d81a21) SHA1(39209cfb7cf142a65e157544d93803ea542a8efb) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_LOAD( "pcb2gfx1.bin", 0x0000, 0x0800, CRC(7021bbc0) SHA1(52d2983d74e722fccb31eb02ca56255850c4f41c) )
@@ -10814,17 +10961,17 @@ ROM_START( tenspot )
ROM_LOAD( "u1.u1", 0x0000, 0x100, CRC(f18006f7) SHA1(f9a3541cd7f2b75816227d8befc03d2e33eeebac) )
- /* temporary - replace game_x with the game number you want to test. */
+ // temporary - replace game_x with the game number you want to test.
ROM_REGION( 0x4000, "maincpu", ROMREGION_ERASEFF )
ROM_REGION( 0x2000, "gfx1", ROMREGION_ERASEFF )
ROM_REGION( 0x2000, "gfx2", ROMREGION_ERASEFF )
ROM_REGION( 0x0020, "proms", ROMREGION_ERASEFF )
- ROM_END
+ROM_END
ROM_START( fourplay )
- ROM_REGION( 0x20000, "maincpu", 0 )
- ROM_LOAD( "fourplay.bin", 0x10000, 0x10000, CRC(b42b2c2c) SHA1(f3b6f136b39e7a6adadecb9acf906fcfe649f398) )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "fourplay.bin", 0x00000, 0x10000, CRC(b42b2c2c) SHA1(f3b6f136b39e7a6adadecb9acf906fcfe649f398) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "graph1.bin", 0x0000, 0x1000, CRC(359c0c1f) SHA1(9e39baae4ab5763db236d0a49a6665d2e69cba11) )
@@ -10835,8 +10982,8 @@ ROM_START( fourplay )
ROM_END
ROM_START( videight )
- ROM_REGION( 0x30000, "maincpu", 0 )
- ROM_LOAD( "videight.bin", 0x10000, 0x20000, CRC(0601db09) SHA1(0c9cd1afb0034946261219bf42b2f9b1ed5bdb17) )
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "videight.bin", 0x00000, 0x20000, CRC(0601db09) SHA1(0c9cd1afb0034946261219bf42b2f9b1ed5bdb17) )
ROM_REGION( 0x10000, "gfx1", 0 )
ROM_LOAD( "v8g1.bin", 0x0000, 0x8000, CRC(af771e33) SHA1(cdc960c5f548e19da4eabdaf8b789ca8ffb6a29f) )
@@ -14744,6 +14891,29 @@ ROM_START( victorycb )
ROM_LOAD( "prom.6l", 0x0000, 0x0020, CRC(25329e5a) SHA1(aff60d02aa4d1d5f16e2d32155c315deee8b4089) )
ROM_END
+// PCB made by Recreativos Franco
+ROM_START( guttangt )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "gg1-2716.rom", 0x0000, 0x0800, CRC(7f338d91) SHA1(d203f229f4f5934467b80ed0f2208e5551aaa383) )
+ ROM_LOAD( "gg2-2758.rom", 0x0800, 0x0800, CRC(ecdbb62b) SHA1(c2eb0316ab789a69b74aeec25e5c690b4334c7c2) )
+ ROM_LOAD( "gg3-2716.rom", 0x1000, 0x0800, CRC(38d71df3) SHA1(f1771256b52ba1bfc1bd472f8a78d6302a7b1299) )
+ ROM_LOAD( "gg4-2716.rom", 0x1800, 0x0800, CRC(7623125a) SHA1(3f3abb9c66751908918fa52e22e153da5fdc0902) )
+ ROM_LOAD( "gg5-2732.rom", 0x2000, 0x0800, CRC(1fe33f92) SHA1(d3e00459015b8bf43fe2e8f6cb57cef775bbb330) )
+ ROM_CONTINUE(0x4000,0x800) // double sized ROM containing banked code, maps at 0x2000
+ ROM_LOAD( "gg6-2716.rom", 0x2800, 0x0800, CRC(60606cd5) SHA1(9a4bf0134c7fa66d2ecd3a745421091b0a086572) )
+ ROM_LOAD( "gg7-2516.rom", 0x3000, 0x0800, CRC(ce0d0a93) SHA1(339bd9c6c40eb2501d1a1adcea0cfa82e3224967) )
+ ROM_LOAD( "gg8-2716.rom", 0x3800, 0x0800, CRC(b8716081) SHA1(e2d1db27ad44876b891cc0a2232ac887bcc5516f) )
+
+ ROM_REGION( 0x2000, "gfx1", 0 )
+ // some tile corruption so one of these is bad
+ ROM_LOAD( "gg9-2732.rom", 0x0000, 0x1000, BAD_DUMP CRC(be6bf522) SHA1(23a09409b7de4bfdb970e4ff23d89a2439a0aee5) )
+ ROM_LOAD( "gg10-2732.rom", 0x1000, 0x1000, BAD_DUMP CRC(b04c34c5) SHA1(a37db70ce67d64daa5f0c41cce1136d1c9d8c175) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ // no PROM was present, standard one used as this was a conversion, but it might be incorrect
+ ROM_LOAD( "mmi6331.6l", 0x0000, 0x0020, BAD_DUMP CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) )
+ROM_END
+
/*************************************
*
@@ -14811,6 +14981,7 @@ GAME( 19??, chewing, luctoday, galaxian, luctoday, galaxian_state, init_
GAME( 1982, catacomb, 0, galaxian, catacomb, galaxian_state, init_galaxian, ROT90, "MTM Games", "Catacomb", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
GAME( 19??, omegab, theend, galaxian, omegab, galaxian_state, init_galaxian, ROT270, "bootleg?", "Omega (bootleg?)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, highroll, 0, highroll, highroll, galaxian_state, init_highroll, ROT90, "bootleg?", "High Roller", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // auto starts game after inserting coin, bad cards GFX, bad inputs response, not all inputs are mapped
+GAME( 1982, guttangt, locomotn, guttangt, guttangt, guttangt_state, init_guttangt, ROT90, "bootleg (Recreativos Franco?)", "Guttang Gottong (bootleg on Galaxian type hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // or by 'Tren' ?
// Basic hardware + extra RAM
GAME( 1982, victoryc, 0, victoryc, victoryc, galaxian_state, init_victoryc, ROT270, "Comsoft", "Victory (Comsoft)", MACHINE_SUPPORTS_SAVE )
@@ -14832,23 +15003,23 @@ GAME( 1979, kamakazi3, galaxian, galaxian, superg, galaxian_state, init_
GAME( 1982, azurian, 0, galaxian, azurian, galaxian_state, init_azurian, ROT90, "Rait Electronics Ltd", "Azurian Attack", MACHINE_SUPPORTS_SAVE )
// Extra characters controlled via bank at $6002
-GAME( 19??, pisces, 0, pisces, pisces, galaxian_state, init_pisces, ROT90, "Subelectro", "Pisces", MACHINE_SUPPORTS_SAVE )
-GAME( 19??, piscesb, pisces, pisces, piscesb, galaxian_state, init_pisces, ROT90, "bootleg", "Pisces (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 19??, omni, pisces, pisces, piscesb, galaxian_state, init_pisces, ROT90, "bootleg", "Omni", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, uniwars, 0, pisces, superg, galaxian_state, init_pisces, ROT90, "Irem", "UniWar S", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, uniwarsa, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg (Karateco)", "UniWar S (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, mltiwars, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg (Gayton Games)", "Multi Wars (bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, gteikoku, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "Irem", "Gingateikoku no Gyakushu", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, gteikokub, uniwars, pisces, gteikokub, galaxian_state, init_pisces, ROT270, "bootleg", "Gingateikoku no Gyakushu (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, gteikokub2, uniwars, pisces, gteikokub2, galaxian_state, init_pisces, ROT90, "bootleg", "Gingateikoku no Gyakushu (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, gteikokub3, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg (Honly)", "Gingateikoku no Gyakushu (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, spacbatt, uniwars, pisces, spacbatt, galaxian_state, init_pisces, ROT90, "bootleg", "Space Battle (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, spacbat2, uniwars, pisces, spacbatt, galaxian_state, init_pisces, ROT90, "bootleg", "Space Battle (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, spacempr, uniwars, pisces, spacbatt, galaxian_state, init_pisces, ROT90, "bootleg", "Space Empire (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, skyraidr, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg", "Sky Raider (Uniwars bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, galemp, uniwars, pisces, superg, galaxian_state, init_pisces, ROT90, "bootleg (Taito do Brasil)", "Galaxy Empire (bootleg?)", MACHINE_SUPPORTS_SAVE ) // Clearly a hack, but was it licensed?
-GAME( 1980, asideral, uniwars, pisces, asideral, galaxian_state, init_pisces, ROT90, "bootleg (Electrogame S.A.)", "Ataque Sideral (Spanish bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, pajaroes, uniwars, pisces, asideral, galaxian_state, init_pisces, ROT90, "bootleg (PSV S.A.)", "Pajaro del Espacio (Spanish bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE ) // Very similar to 'asideral'
+GAME( 19??, pisces, 0, pisces, pisces, pisces_state, init_pisces, ROT90, "Subelectro", "Pisces", MACHINE_SUPPORTS_SAVE )
+GAME( 19??, piscesb, pisces, pisces, piscesb, pisces_state, init_pisces, ROT90, "bootleg", "Pisces (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 19??, omni, pisces, pisces, piscesb, pisces_state, init_pisces, ROT90, "bootleg", "Omni", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, uniwars, 0, pisces, superg, pisces_state, init_pisces, ROT90, "Irem", "UniWar S", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, uniwarsa, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Karateco)", "UniWar S (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, mltiwars, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Gayton Games)", "Multi Wars (bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, gteikoku, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "Irem", "Gingateikoku no Gyakushu", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, gteikokub, uniwars, pisces, gteikokub, pisces_state, init_pisces, ROT270, "bootleg", "Gingateikoku no Gyakushu (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, gteikokub2, uniwars, pisces, gteikokub2, pisces_state, init_pisces, ROT90, "bootleg", "Gingateikoku no Gyakushu (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, gteikokub3, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Honly)", "Gingateikoku no Gyakushu (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, spacbatt, uniwars, pisces, spacbatt, pisces_state, init_pisces, ROT90, "bootleg", "Space Battle (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, spacbat2, uniwars, pisces, spacbatt, pisces_state, init_pisces, ROT90, "bootleg", "Space Battle (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, spacempr, uniwars, pisces, spacbatt, pisces_state, init_pisces, ROT90, "bootleg", "Space Empire (bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, skyraidr, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg", "Sky Raider (Uniwars bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, galemp, uniwars, pisces, superg, pisces_state, init_pisces, ROT90, "bootleg (Taito do Brasil)", "Galaxy Empire (bootleg?)", MACHINE_SUPPORTS_SAVE ) // Clearly a hack, but was it licensed?
+GAME( 1980, asideral, uniwars, pisces, asideral, pisces_state, init_pisces, ROT90, "bootleg (Electrogame S.A.)", "Ataque Sideral (Spanish bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, pajaroes, uniwars, pisces, asideral, pisces_state, init_pisces, ROT90, "bootleg (PSV S.A.)", "Pajaro del Espacio (Spanish bootleg of UniWar S)", MACHINE_SUPPORTS_SAVE ) // Very similar to 'asideral'
// Artic Multi-System games - separate tile/sprite ROMs
GAME( 1980, streakng, 0, pacmanbl, streakng, galaxian_state, init_galaxian, ROT90, "Shoei", "Streaking (set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
@@ -14859,26 +15030,26 @@ GAME( 1981, pacmanblb, puckman, pacmanbl, pacmanblb, galaxian_state, init_
GAME( 1981, pacmanblc, puckman, pacmanbl, pacmanbl, galaxian_state, init_pacmanbl, ROT270, "bootleg (Calfesa)", "Pac-Man (Calfesa, Spanish bootleg on Galaxian hardware)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // same PROM as Moon Cresta, gives very strange colors and sprites get cut
GAME( 1981, pacmanblv, puckman, pacmanbl, pacmanbl, galaxian_state, init_pacmanbl, ROT270, "bootleg (Video Dens)", "Pac-Man (Video Dens, Spanish bootleg on Galaxian hardware)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, ghostmun, puckman, pacmanbl, streakng, galaxian_state, init_ghostmun, ROT90, "bootleg (Leisure and Allied)", "Ghost Muncher", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, phoenxp2, phoenix, pisces, phoenxp2, galaxian_state, init_batman2, ROT270, "bootleg", "Phoenix Part 2", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, batman2, phoenix, pisces, batman2, galaxian_state, init_batman2, ROT270, "bootleg", "Batman Part 2", MACHINE_SUPPORTS_SAVE ) // Similar to pisces, but with different video banking characteristics
-GAME( 1983, ladybugg, ladybug, pisces, ladybugg, galaxian_state, init_batman2, ROT270, "bootleg", "Lady Bug (bootleg on Galaxian hardware)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, phoenxp2, phoenix, pisces, phoenxp2, pisces_state, init_batman2, ROT270, "bootleg", "Phoenix Part 2", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, batman2, phoenix, pisces, batman2, pisces_state, init_batman2, ROT270, "bootleg", "Batman Part 2", MACHINE_SUPPORTS_SAVE ) // Similar to pisces, but with different video banking characteristics
+GAME( 1983, ladybugg, ladybug, pisces, ladybugg, pisces_state, init_batman2, ROT270, "bootleg", "Lady Bug (bootleg on Galaxian hardware)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, atlantisb, atlantis, galaxian, atlantib, galaxian_state, init_galaxian, ROT270, "bootleg", "Battle of Atlantis (bootleg)", MACHINE_SUPPORTS_SAVE ) // I don't know if this should have a starfield...
-GAME( 1982, tenspot, 0, tenspot, tenspot, galaxian_state, init_tenspot, ROT270, "Thomas Automatics", "Ten Spot", MACHINE_NOT_WORKING ) // Work out how menu works
+GAME( 1982, tenspot, 0, tenspot, tenspot, tenspot_state, init_tenspot, ROT270, "Thomas Automatics", "Ten Spot", MACHINE_NOT_WORKING ) // Work out how menu works
// Separate tile/sprite ROMs, plus INT instead of NMI
-GAME( 1984, devilfsg, devilfsh, pacmanbl, devilfsg, galaxian_state, init_devilfsg, ROT270, "Vision / Artic", "Devil Fish (Galaxian hardware, bootleg?)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, devilfsg, devilfsh, devilfsg, devilfsg, galaxian_state, init_galaxian, ROT270, "Vision / Artic", "Devil Fish (Galaxian hardware, bootleg?)", MACHINE_SUPPORTS_SAVE )
// Sound hardware replaced with AY8910
// We're missing the original set by Taito do Brasil, we only have the bootlegs
-GAME( 1982, zigzagb, 0, zigzag, zigzag, galaxian_state, init_zigzag, ROT90, "bootleg (LAX)", "Zig Zag (Dig Dug conversion on Galaxian hardware, bootleg set 1)", MACHINE_SUPPORTS_SAVE ) // rewrite of Dig Dug (!) not a clone
-GAME( 1982, zigzagb2, zigzagb, zigzag, zigzag, galaxian_state, init_zigzag, ROT90, "bootleg (LAX)", "Zig Zag (Dig Dug conversion on Galaxian hardware, bootleg set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, zigzagb, 0, zigzag, zigzag, zigzagb_state, init_zigzag, ROT90, "bootleg (LAX)", "Zig Zag (Dig Dug conversion on Galaxian hardware, bootleg set 1)", MACHINE_SUPPORTS_SAVE ) // rewrite of Dig Dug (!) not a clone
+GAME( 1982, zigzagb2, zigzagb, zigzag, zigzag, zigzagb_state, init_zigzag, ROT90, "bootleg (LAX)", "Zig Zag (Dig Dug conversion on Galaxian hardware, bootleg set 2)", MACHINE_SUPPORTS_SAVE )
// multi-game select via external switch
GAME( 1981, gmgalax, 0, gmgalax, gmgalax, gmgalax_state, init_gmgalax, ROT90, "bootleg", "Ghostmuncher Galaxian (bootleg)", MACHINE_SUPPORTS_SAVE )
// Multigames
-GAME( 2002, fourplay, 0, fourplay, galaxian, galaxian_state, init_fourplay, ROT90, "Macro", "Four Play", MACHINE_SUPPORTS_SAVE )
-GAME( 2001, videight, 0, videight, warofbug, galaxian_state, init_videight, ROT90, "Macro", "Video Eight", MACHINE_SUPPORTS_SAVE )
+GAME( 2002, fourplay, 0, fourplay, galaxian, fourplay_state, init_fourplay, ROT90, "Macro", "Four Play", MACHINE_SUPPORTS_SAVE )
+GAME( 2001, videight, 0, videight, warofbug, videight_state, init_videight, ROT90, "Macro", "Video Eight", MACHINE_SUPPORTS_SAVE )
/*************************************
@@ -14943,13 +15114,13 @@ GAME( 1981, ckongmc2, ckong, ckongmc, ckongmc2, galaxian_state, init_
GAME( 1981, ckonggx, ckong, ckongg, ckonggx, galaxian_state, init_ckonggx, ROT90, "bootleg", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1982, ckongcv, ckong, ckongg, ckonggx, galaxian_state, init_ckonggx, ROT90, "bootleg", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 2)", MACHINE_NOT_WORKING )
GAME( 1982, ckongis, ckong, ckongg, ckonggx, galaxian_state, init_ckonggx, ROT90, "bootleg", "Crazy Kong (bootleg on Galaxian hardware, encrypted, set 3)", MACHINE_NOT_WORKING )
-GAME( 1982, bagmanmc, bagman, bagmanmc, bagmanmc, galaxian_state, init_bagmanmc, ROT90, "bootleg", "Bagman (bootleg on Moon Cresta hardware, set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1984, bagmanm2, bagman, bagmanmc, bagmanmc, galaxian_state, init_bagmanmc, ROT90, "bootleg (GIB)", "Bagman (bootleg on Moon Cresta hardware, set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1982, bagmanmc, bagman, bagmanmc, bagmanmc, bagmanmc_state, init_bagmanmc, ROT90, "bootleg", "Bagman (bootleg on Moon Cresta hardware, set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1984, bagmanm2, bagman, bagmanmc, bagmanmc, bagmanmc_state, init_bagmanmc, ROT90, "bootleg (GIB)", "Bagman (bootleg on Moon Cresta hardware, set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
// Other games on basic mooncrst hardware
-GAME( 1982, porter, dockman, porter, porter, galaxian_state, init_pisces, ROT90, "bootleg", "Port Man (bootleg on Moon Cresta hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL )
-GAME( 1982, portera, dockman, porter, porter, galaxian_state, init_pisces, ROT90, "bootleg", "El Estivador (Spanish bootleg of Port Man on Galaxian hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL )
-GAME( 1982, skybase, 0, skybase, skybase, galaxian_state, init_pisces, ROT90, "Omori Electric Co., Ltd.", "Sky Base", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, porter, dockman, porter, porter, pisces_state, init_pisces, ROT90, "bootleg", "Port Man (bootleg on Moon Cresta hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL )
+GAME( 1982, portera, dockman, porter, porter, pisces_state, init_pisces, ROT90, "bootleg", "El Estivador (Spanish bootleg of Port Man on Galaxian hardware)", MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL )
+GAME( 1982, skybase, 0, skybase, skybase, pisces_state, init_pisces, ROT90, "Omori Electric Co., Ltd.", "Sky Base", MACHINE_SUPPORTS_SAVE )
GAME( 198?, kong, 0, kong, kong, galaxian_state, init_kong, ROT90, "Taito do Brasil", "Kong (Donkey Kong conversion on Galaxian hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_WRONG_COLORS ) // rewrite of Donkey Kong (!) not a clone
// Larger romspace, 2*AY8910, based on Super Star Crest board?
@@ -14972,15 +15143,15 @@ GAME( 1983, dingo, 0, checkmaj, dingo, galaxian_state, init_
GAME( 1983, dingoe, dingo, checkman, dingo, galaxian_state, init_dingoe, ROT90, "Ashby Computers and Graphics Ltd.", "Dingo (encrypted)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
// Crazy Climber sound plus AY8910 instead of galaxian sound, plus INT instead of NMI
-GAME( 1981, mshuttle, 0, mshuttle, mshuttle, galaxian_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US? set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, mshuttle2, mshuttle, mshuttle, mshuttle, galaxian_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US? set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, mshuttlea, mshuttle, mshuttle, mshuttle, galaxian_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US, version A)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, mshuttlej, mshuttle, mshuttle, mshuttle, galaxian_state, init_mshuttlj, ROT0, "Nichibutsu", "Moon Shuttle (Japan set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, mshuttlej2, mshuttle, mshuttle, mshuttle, galaxian_state, init_mshuttlj, ROT0, "Nichibutsu", "Moon Shuttle (Japan set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, mshuttle, 0, mshuttle, mshuttle, mshuttle_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US? set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, mshuttle2, mshuttle, mshuttle, mshuttle, mshuttle_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US? set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, mshuttlea, mshuttle, mshuttle, mshuttle, mshuttle_state, init_mshuttle, ROT0, "Nichibutsu", "Moon Shuttle (US, version A)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, mshuttlej, mshuttle, mshuttle, mshuttle, mshuttle_state, init_mshuttlj, ROT0, "Nichibutsu", "Moon Shuttle (Japan set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, mshuttlej2, mshuttle, mshuttle, mshuttle, mshuttle_state, init_mshuttlj, ROT0, "Nichibutsu", "Moon Shuttle (Japan set 2)", MACHINE_SUPPORTS_SAVE )
// 2nd CPU driving DAC for sound
-GAME( 1980, kingball, 0, kingball, kingball, galaxian_state, init_kingball, ROT90, "Namco", "King & Balloon (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1980, kingballj, kingball, kingball, kingball, galaxian_state, init_kingball, ROT90, "Namco", "King & Balloon (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, kingball, 0, kingball, kingball, kingball_state, init_galaxian, ROT90, "Namco", "King & Balloon (US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1980, kingballj, kingball, kingball, kingball, kingball_state, init_galaxian, ROT90, "Namco", "King & Balloon (Japan)", MACHINE_SUPPORTS_SAVE )
@@ -15019,7 +15190,7 @@ GAME( 1982, amidaru, amidar, turtles, amidaru, galaxian_state, init_
GAME( 1982, amidaro, amidar, turtles, amidaro, galaxian_state, init_turtles, ROT90, "Konami (Olympia license)", "Amidar (Olympia)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, amidarb, amidar, turtles, amidaru, galaxian_state, init_turtles, ROT90, "bootleg", "Amidar (bootleg)", MACHINE_SUPPORTS_SAVE ) // Similar to Amigo bootleg
GAME( 1982, amigo, amidar, turtles, amidaru, galaxian_state, init_turtles, ROT90, "bootleg", "Amigo (bootleg of Amidar, set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1982, amigo2, amidar, amigo2, amidaru, galaxian_state, init_amigo2, ROT90, "bootleg", "Amigo (bootleg of Amidar, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // sound timer might be different?
+GAME( 1982, amigo2, amidar, amigo2, amidaru, galaxian_state, init_turtles, ROT90, "bootleg", "Amigo (bootleg of Amidar, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) // sound timer might be different?
GAME( 1982, amidars, amidar, scramble, amidars, galaxian_state, init_scramble, ROT90, "Konami", "Amidar (Scramble hardware)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, mandinga, amidar, scramble, amidars, galaxian_state, init_mandinga, ROT90, "bootleg (Artemi)", "Mandinga (Artemi bootleg of Amidar)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // color PROM needs bitswap<8> on addressing, reference: http://www.youtube.com/watch?v=6uGK4AZxV2U
GAME( 1982, mandingaeg, amidar, scramble, amidars, galaxian_state, init_mandingaeg, ROT90, "bootleg (Electrogame S.A.)", "Mandinga (Electrogame S.A. bootleg of Amidar)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
@@ -15065,16 +15236,16 @@ GAME( 1981, ckongs, ckong, ckongs, ckongs, galaxian_state, init_
GAME( 1981, jungsub, jungler, jungsub, jungsub, galaxian_state, init_jungsub, ROT90, "bootleg (Subelectro)", "Jungler (Subelectro, bootleg on Scramble hardware)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // mostly works, bad GFX ROM causes lots of glitches
// Scorpion hardware; based on Scramble but with a 3rd AY-8910 and a speech chip
-GAME( 1982, scorpion, 0, scorpion, scorpion, galaxian_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
-GAME( 1982, scorpiona, scorpion, scorpion, scorpion, galaxian_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
-GAME( 1982, scorpionb, scorpion, scorpion, scorpion, galaxian_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
-GAME( 19??, scorpionmc, scorpion, scorpnmc, scorpnmc, galaxian_state, init_batman2, ROT90, "bootleg? (Dorneer)", "Scorpion (Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE )
-GAME( 19??, aracnis, scorpion, scorpnmc, aracnis, galaxian_state, init_batman2, ROT90, "bootleg", "Aracnis (bootleg of Scorpion on Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1982, scorpion, 0, scorpion, scorpion, zac_scorpion_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
+GAME( 1982, scorpiona, scorpion, scorpion, scorpion, zac_scorpion_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
+GAME( 1982, scorpionb, scorpion, scorpion, scorpion, zac_scorpion_state, init_scorpion, ROT90, "Zaccaria", "Scorpion (set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE)
+GAME( 19??, scorpionmc, scorpion, scorpnmc, scorpnmc, galaxian_state, init_batman2, ROT90, "bootleg? (Dorneer)", "Scorpion (Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE )
+GAME( 19??, aracnis, scorpion, scorpnmc, aracnis, galaxian_state, init_batman2, ROT90, "bootleg", "Aracnis (bootleg of Scorpion on Moon Cresta hardware)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
// SF-X hardware; based on Scramble with extra Z80 and 8255 driving a DAC-based sample player
-GAME( 1983, sfx, 0, sfx, sfx, galaxian_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System (Nichibutsu license)", "SF-X", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, skelagon, sfx, sfx, sfx, galaxian_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System (Nichibutsu USA license)", "Skelagon", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE)
-GAME( 1982, monsterz, 0, monsterz, sfx, galaxian_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System", "Monster Zero", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
+GAME( 1983, sfx, 0, sfx, sfx, taiyo_sfx_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System (Nichibutsu license)", "SF-X", MACHINE_SUPPORTS_SAVE )
+GAME( 1983, skelagon, sfx, sfx, sfx, taiyo_sfx_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System (Nichibutsu USA license)", "Skelagon", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE)
+GAME( 1982, monsterz, 0, monsterz, sfx, taiyo_sfx_state, init_sfx, ORIENTATION_FLIP_X, "Taiyo System", "Monster Zero", MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
/*
@@ -15093,8 +15264,8 @@ GAME( 1981, scobrag, scobra, scobra, scobras, galaxian_state, init_
GAME( 1981, scobraggi, scobra, scobra, scobras, galaxian_state, init_scobra, ROT90, "bootleg (Cocamatic)", "Super Cobra (bootleg, set 3)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) // uses the scramble color PROM
GAME( 1981, suprheli, scobra, scobra, scobras, galaxian_state, init_scobra, ROT90, "bootleg", "Super Heli (Super Cobra bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, moonwar, 0, moonwar, moonwar, galaxian_state, init_moonwar, ROT90, "Stern Electronics", "Moonwar", MACHINE_SUPPORTS_SAVE )
-GAME( 1981, moonwara, moonwar, moonwar, moonwara, galaxian_state, init_moonwar, ROT90, "Stern Electronics", "Moonwar (older)", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, moonwar, 0, moonwar, moonwar, moonwar_state, init_scobra, ROT90, "Stern Electronics", "Moonwar", MACHINE_SUPPORTS_SAVE )
+GAME( 1981, moonwara, moonwar, moonwar, moonwara, moonwar_state, init_scobra, ROT90, "Stern Electronics", "Moonwar (older)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, armorcar, 0, scobra, armorcar, galaxian_state, init_scobra, ROT90, "Stern Electronics", "Armored Car (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, armorcar2, armorcar, scobra, armorcar2, galaxian_state, init_scobra, ROT90, "Stern Electronics", "Armored Car (set 2)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/galaxian_rockclim.cpp b/src/mame/drivers/galaxian_rockclim.cpp
new file mode 100644
index 00000000000..bb8c0b2e204
--- /dev/null
+++ b/src/mame/drivers/galaxian_rockclim.cpp
@@ -0,0 +1,296 @@
+// license:BSD-3-Clause
+// copyright-holders:Tomasz Slanina, David Haywood
+
+#include "emu.h"
+#include "includes/galaxian.h"
+
+namespace {
+
+class galaxian_rockclim_state : public galaxian_state
+{
+public:
+ galaxian_rockclim_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_rockclim_videoram(*this,"rockclim_vram")
+ , m_gfxdecode2(*this,"gfxdecode2")
+ , m_palette2(*this,"palette2")
+ { }
+
+ void rockclim(machine_config &config);
+
+ void init_rockclim();
+
+protected:
+ virtual void video_start() override;
+
+private:
+ void rockclim_map(address_map &map);
+
+ void rockclim_palette(palette_device &palette) const;
+ void rockclim_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void rockclim_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
+ void rockclim_videoram_w(offs_t offset, uint8_t data);
+ void rockclim_scroll_w(offs_t offset, uint8_t data);
+ uint8_t rockclim_videoram_r(offs_t offset);
+ TILE_GET_INFO_MEMBER(rockclim_get_tile_info);
+
+ uint16_t m_rockclim_v;
+ uint16_t m_rockclim_h;
+
+ tilemap_t *m_rockclim_tilemap;
+ required_shared_ptr<uint8_t> m_rockclim_videoram;
+ required_device<gfxdecode_device> m_gfxdecode2;
+ required_device<palette_device> m_palette2;
+};
+
+void galaxian_rockclim_state::rockclim_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ m_rockclim_tilemap->draw(*m_screen, bitmap, cliprect, 0,0);
+}
+
+void galaxian_rockclim_state::rockclim_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
+{
+ if ((*code & 0x30) == 0x20)
+ {
+ if (m_gfxbank[2] & 1)
+ {
+ int bank = (((m_gfxbank[0] & 1) << 5) | ((m_gfxbank[1] & 1) << 4));
+ *code = (0x40 + bank) | (*code & 0x0f);
+ }
+ }
+}
+
+uint8_t galaxian_rockclim_state::rockclim_videoram_r(offs_t offset)
+{
+ return m_rockclim_videoram[offset];
+}
+
+void galaxian_rockclim_state::rockclim_videoram_w(offs_t offset, uint8_t data)
+{
+ m_rockclim_videoram[offset] = data;
+ m_rockclim_tilemap->mark_tile_dirty(offset);
+}
+
+void galaxian_rockclim_state::rockclim_scroll_w(offs_t offset, uint8_t data)
+{
+ switch (offset & 3)
+ {
+ case 0: m_rockclim_h = (m_rockclim_h & 0xff00) | data; m_rockclim_tilemap->set_scrollx(0, m_rockclim_h * m_x_scale); break;
+ case 1: m_rockclim_h = (m_rockclim_h & 0x00ff) | (data << 8); m_rockclim_tilemap->set_scrollx(0, m_rockclim_h * m_x_scale); break;
+ case 2: m_rockclim_v = (m_rockclim_v & 0xff00) | data; m_rockclim_tilemap->set_scrolly(0, m_rockclim_v); break;
+ case 3: m_rockclim_v = (m_rockclim_v & 0x00ff) | (data << 8); m_rockclim_tilemap->set_scrolly(0, m_rockclim_v); break;
+ }
+}
+
+void galaxian_rockclim_state::video_start()
+{
+ galaxian_state::video_start();
+
+ m_rockclim_tilemap = &machine().tilemap().create(*m_gfxdecode2, tilemap_get_info_delegate(*this, FUNC(galaxian_rockclim_state::rockclim_get_tile_info)), TILEMAP_SCAN_ROWS,8 * m_x_scale,8,64,32);
+ m_rockclim_v = m_rockclim_h = 0;
+ save_item(NAME(m_rockclim_v));
+ save_item(NAME(m_rockclim_h));
+}
+
+TILE_GET_INFO_MEMBER(galaxian_rockclim_state::rockclim_get_tile_info)
+{
+ uint16_t code = m_rockclim_videoram[tile_index];
+ tileinfo.set(0, code, 0, 0);
+}
+
+void galaxian_rockclim_state::rockclim_map(address_map &map)
+{
+ galaxian_state::mooncrst_map(map);
+
+ map(0x4000, 0x47ff).rw(FUNC(galaxian_rockclim_state::rockclim_videoram_r), FUNC(galaxian_rockclim_state::rockclim_videoram_w)).share("rockclim_vram");//4800 - 4803 = bg scroll ?
+ map(0x4800, 0x4803).w(FUNC(galaxian_rockclim_state::rockclim_scroll_w));
+ map(0x5000, 0x53ff).ram();
+ map(0x5800, 0x5800).portr("IN3");
+ map(0x6000, 0x7fff).rom();
+ map(0x8800, 0x8800).portr("IN4");
+}
+
+
+// verified from Z80 code
+static INPUT_PORTS_START( rockclim )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) // only adds 1 credit if "Coin Slots" is set to 1
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE1 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_8WAY
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x00, "30000" )
+ PORT_DIPSETTING( 0x40, "50000" )
+ PORT_DIPNAME( 0x80, 0x00, "Coin Slots" )
+ PORT_DIPSETTING( 0x80, "1" )
+ PORT_DIPSETTING( 0x00, "2" )
+
+ PORT_START("IN3")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_8WAY PORT_COCKTAIL
+
+ PORT_START("IN2")
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x01, "4" )
+ PORT_DIPSETTING( 0x02, "5" )
+ PORT_DIPSETTING( 0x03, "6" )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_TILT )
+ PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN4")
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 9C_1C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 8C_1C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 7C_1C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x09, DEF_STR( 1C_7C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_8C ) )
+ PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 9C_1C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 8C_1C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 7C_1C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x50, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x60, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x70, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 1C_8C ) )
+INPUT_PORTS_END
+
+static const gfx_layout rockclim_charlayout =
+{
+ 8,8,
+ RGN_FRAC(1,2),
+ 4,
+ { 4, 0, RGN_FRAC(1,2)+4, RGN_FRAC(1,2) },
+ { 3, 2, 1, 0,11 ,10, 9, 8 },
+ { 0*8*2, 1*8*2, 2*8*2, 3*8*2, 4*8*2, 5*8*2, 6*8*2, 7*8*2 },
+ 8*8*2
+};
+
+static GFXDECODE_START( gfx_rockclim )
+ GFXDECODE_SCALE("bg_gfx", 0x0000, rockclim_charlayout, 0, 1, GALAXIAN_XSCALE,1)
+GFXDECODE_END
+
+
+void galaxian_rockclim_state::rockclim_palette(palette_device &palette) const
+{
+ const uint8_t *color_prom = memregion("bg_proms")->base();
+
+ // first, the character/sprite palette
+ int const len = memregion("bg_proms")->bytes();
+ for (int i = 0; i < len; i++)
+ {
+ int bit0, bit1, bit2;
+
+ // red component
+ bit0 = BIT(*color_prom, 0);
+ bit1 = BIT(*color_prom, 1);
+ bit2 = BIT(*color_prom, 2);
+ int const r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ // green component
+ bit0 = BIT(*color_prom, 3);
+ bit1 = BIT(*color_prom, 4);
+ bit2 = BIT(*color_prom, 5);
+ int const g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ // blue component
+ bit0 = BIT(*color_prom, 6);
+ bit1 = BIT(*color_prom, 7);
+ int const b = 0x4f * bit0 + 0xa8 * bit1;
+
+ palette.set_pen_color(i, r, g, b);
+ color_prom++;
+ }
+}
+
+void galaxian_rockclim_state::rockclim(machine_config &config)
+{
+ galaxian_state::mooncrst(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &galaxian_rockclim_state::rockclim_map);
+
+ // video hardware
+ GFXDECODE(config, m_gfxdecode2, m_palette2, gfx_rockclim);
+ PALETTE(config, m_palette2, FUNC(galaxian_rockclim_state::rockclim_palette), 32);
+}
+
+
+ROM_START( rockclim )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "lc01.a1", 0x0000, 0x1000, CRC(8601ae8d) SHA1(6e0c3b34ce5e6879ce7a116c5c2660889a68320d) )
+ ROM_LOAD( "lc02.a2", 0x1000, 0x1000, CRC(2dde9d4c) SHA1(7e343113116b94894558819a7f77f77e4e952da7) )
+ ROM_LOAD( "lc03.a3", 0x2000, 0x1000, CRC(82c48a67) SHA1(abf95062eb5c9bd4bb3c9b9af59396a4ca6905d8) )
+ ROM_LOAD( "lc04.a4", 0x3000, 0x1000, CRC(7cd3a04a) SHA1(756c12288e120e6f761b266b91920d17cab6926c) )
+ ROM_LOAD( "lc05.a5", 0x6000, 0x1000, CRC(5e542149) SHA1(425a5a8769c3fa0887db8ff04e2a4f32f18d2679) )
+ ROM_LOAD( "lc06.a6", 0x7000, 0x1000, CRC(b2bdca64) SHA1(e72e63725164c922816dda90ac964a94062eab1b) )
+
+ ROM_REGION( 0x800, "melody", 0 ) // Epson 7910C Multi-Melody IC
+ ROM_LOAD( "7910c 537 104", 0x000, 0x800, NO_DUMP ) // actual size unknown, needs decapping
+
+ ROM_REGION( 0x2000, "gfx1", 0 )
+ ROM_LOAD( "lc08.a9", 0x0000, 0x800, CRC(7f18e1ef) SHA1(2a160b994708ec0f06774dde3ec613af7e3f32c6) )
+ ROM_LOAD( "lc07.a7", 0x0800, 0x800, CRC(f18b50ac) SHA1(a2328eb55882a09403cae1a497c611b494649cac) )
+ ROM_LOAD( "lc10.c9", 0x1000, 0x800, CRC(dec5781b) SHA1(b6277fc890d153db24bd48293780cf239a6aa0e7) )
+ ROM_LOAD( "lc09.c7", 0x1800, 0x800, CRC(06c0b5de) SHA1(561cf99a6be03205c7bc5fd15d4d51ee4d6d164b) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "lc11.f4", 0x0000, 0x0020, CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) )
+
+ ROM_REGION( 0x2000, "bg_gfx", 0 )
+ ROM_LOAD( "lc13.g5", 0x0000, 0x1000, CRC(19475f2b) SHA1(5d42aa45a7b519dacdecd3d2edbfee6971693034) )
+ ROM_LOAD( "lc14.g7", 0x1000, 0x1000, CRC(cc96d1db) SHA1(9713b47b723a5d8837f2a8e8c43e46dc41a62e5b) )
+
+ ROM_REGION( 0x0020, "bg_proms", 0 )
+ ROM_LOAD( "lc12.e9", 0x0000, 0x0020, CRC(f6e76547) SHA1(c9ea78d1876156561b3bbf327d7e0299e1d9fd4a) )
+ROM_END
+
+void galaxian_rockclim_state::init_rockclim()
+{
+ galaxian_state::init_mooncrsu();
+
+ m_extend_sprite_info_ptr = extend_sprite_info_delegate(&galaxian_rockclim_state::rockclim_extend_sprite_info, this);
+ m_draw_background_ptr = draw_background_delegate(&galaxian_rockclim_state::rockclim_draw_background, this);
+}
+
+} // Anonymous namespace
+
+GAME( 1981, rockclim, 0, rockclim, rockclim, galaxian_rockclim_state, init_rockclim, ROT180, "Taito", "Rock Climber", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // misses melody
diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp
index b29c15810b8..bf3a57b050c 100644
--- a/src/mame/drivers/galaxold.cpp
+++ b/src/mame/drivers/galaxold.cpp
@@ -184,37 +184,6 @@ void galaxold_state::hustlerb3_map(address_map &map)
}
-void galaxold_state::rockclim_map(address_map &map)
-{
- map(0x0000, 0x3fff).rom();
- map(0x4000, 0x47ff).rw(FUNC(galaxold_state::rockclim_videoram_r), FUNC(galaxold_state::rockclim_videoram_w)).share("rockclim_vram");//4800 - 4803 = bg scroll ?
- map(0x4800, 0x4803).w(FUNC(galaxold_state::rockclim_scroll_w));
- map(0x5000, 0x53ff).ram(); //?
- map(0x5800, 0x5800).portr("IN2");
- map(0x6000, 0x7fff).rom();
- map(0x8000, 0x87ff).ram();
- map(0x8800, 0x8800).portr("DSW1");
- map(0x9000, 0x93ff).ram().w(FUNC(galaxold_state::galaxold_videoram_w)).share("videoram");
- map(0x9400, 0x97ff).r(FUNC(galaxold_state::galaxold_videoram_r));
- map(0x9800, 0x983f).ram().w(FUNC(galaxold_state::galaxold_attributesram_w)).share("attributesram");
- map(0x9840, 0x985f).ram().share("spriteram");
- map(0x9860, 0x987f).ram().share("bulletsram");
- map(0x9880, 0x98ff).ram();
- map(0xa000, 0xa000).portr("IN0");
- map(0xa000, 0xa002).w(FUNC(galaxold_state::galaxold_gfxbank_w));// a002 - sprite bank
- map(0xa003, 0xa003).w(FUNC(galaxold_state::galaxold_coin_counter_w));
- map(0xa004, 0xa007).w("cust", FUNC(galaxian_sound_device::lfo_freq_w));
- map(0xa800, 0xa800).portr("IN1");
- map(0xa800, 0xa802).w("cust", FUNC(galaxian_sound_device::background_enable_w));
- map(0xa803, 0xa803).w("cust", FUNC(galaxian_sound_device::noise_enable_w));
- map(0xa805, 0xa805).w("cust", FUNC(galaxian_sound_device::fire_enable_w));
- map(0xa806, 0xa807).w("cust", FUNC(galaxian_sound_device::vol_w));
- map(0xb000, 0xb000).portr("DSW0").w(FUNC(galaxold_state::galaxold_nmi_enable_w));
- map(0xb006, 0xb006).w(FUNC(galaxold_state::galaxold_flip_screen_x_w));
- map(0xb007, 0xb007).w(FUNC(galaxold_state::galaxold_flip_screen_y_w));
- map(0xb800, 0xb800).r("watchdog", FUNC(watchdog_timer_device::reset_r));
- map(0xb800, 0xb800).w("cust", FUNC(galaxian_sound_device::pitch_w));
-}
void galaxold_state::scramblb_map(address_map &map)
@@ -339,41 +308,8 @@ void galaxold_state::scrambleo_map(address_map &map)
map(0x7001, 0x7001).w(FUNC(galaxold_state::galaxold_nmi_enable_w));
}
-void galaxold_state::guttang_rombank_w(uint8_t data)
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-// printf("rombank %02x\n",data);
- space.install_rom(0x2000, 0x27ff, memregion("maincpu")->base() + (data & 1 ? 0x4000 : 0x2000));
-}
-
-
-void galaxold_state::guttang_map(address_map &map)
-{
- map(0x0000, 0x3fff).rom().nopw(); // 0x2000-0x27ff is banked (so they have room for the new music player), see init
- map(0x4000, 0x47ff).ram();
-
- map(0x5000, 0x53ff).ram().w(FUNC(galaxold_state::galaxold_videoram_w)).share("videoram");
-
- map(0x5800, 0x583f).ram().w(FUNC(galaxold_state::galaxold_attributesram_w)).share("attributesram");
- map(0x5840, 0x585f).ram().share("spriteram");
- map(0x5860, 0x587f).ram().share("bulletsram");
- map(0x5880, 0x58ff).ram();
-
- map(0x6000, 0x6000).portr("IN0").w(FUNC(galaxold_state::guttang_rombank_w));
- map(0x6800, 0x6800).portr("IN1");
-
- map(0x6800, 0x6802).w("cust", FUNC(galaxian_sound_device::background_enable_w));
- map(0x6803, 0x6803).w("cust", FUNC(galaxian_sound_device::noise_enable_w));
- map(0x6805, 0x6805).w("cust", FUNC(galaxian_sound_device::fire_enable_w));
- map(0x6806, 0x6807).w("cust", FUNC(galaxian_sound_device::vol_w));
- map(0x7000, 0x7000).portr("IN2");
- map(0x7001, 0x7001).w(FUNC(galaxold_state::galaxold_nmi_enable_w));
-
- map(0x7800, 0x7800).r("watchdog", FUNC(watchdog_timer_device::reset_r)).w("cust", FUNC(galaxian_sound_device::pitch_w));
-
-}
void galaxold_state::_4in1_map(address_map &map)
@@ -812,90 +748,6 @@ static INPUT_PORTS_START( froggerv )
INPUT_PORTS_END
-// verified from Z80 code
-static INPUT_PORTS_START( rockclim )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 ) // only adds 1 credit if "Coin Slots" is set to 1
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE1 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
-
- PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_8WAY
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_8WAY
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Bonus_Life ) )
- PORT_DIPSETTING( 0x00, "30000" )
- PORT_DIPSETTING( 0x40, "50000" )
- PORT_DIPNAME( 0x80, 0x00, "Coin Slots" )
- PORT_DIPSETTING( 0x80, "1" )
- PORT_DIPSETTING( 0x00, "2" )
-
- PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY PORT_COCKTAIL
-
- PORT_START("DSW0")
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
- PORT_DIPSETTING( 0x00, "3" )
- PORT_DIPSETTING( 0x01, "4" )
- PORT_DIPSETTING( 0x02, "5" )
- PORT_DIPSETTING( 0x03, "6" )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_TILT )
- PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
-
- PORT_START("DSW1")
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 9C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 8C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 7C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 6C_1C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x09, DEF_STR( 1C_7C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_8C ) )
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 9C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 8C_1C ) )
- PORT_DIPSETTING( 0x20, DEF_STR( 7C_1C ) )
- PORT_DIPSETTING( 0x30, DEF_STR( 6C_1C ) )
- PORT_DIPSETTING( 0x40, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x50, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x60, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x70, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x90, DEF_STR( 1C_7C ) )
- PORT_DIPSETTING( 0x80, DEF_STR( 1C_8C ) )
-INPUT_PORTS_END
// verified from Z80 code
@@ -1593,68 +1445,6 @@ INPUT_PORTS_END
-static INPUT_PORTS_START( guttangt )
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
- PORT_DIPNAME( 0x40, 0x40, "IN0:6" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
-
- PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_DIPNAME( 0x04, 0x00, "IN1:3" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "IN1:4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "IN1:5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "IN1:6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "IN1:7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "IN1:8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("IN2")
- PORT_DIPNAME( 0x01, 0x01, "IN2:1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "IN2:2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, "IN2:3" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, "IN2:4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "IN2:5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, "IN2:6" )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "IN2:7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, "IN2:8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-INPUT_PORTS_END
-
static const gfx_layout galaxold_charlayout =
{
@@ -1717,22 +1507,6 @@ static const gfx_layout _4in1_spritelayout =
32*8
};
-static const gfx_layout rockclim_charlayout =
-{
- 8,8,
- 256,
- 4,//?
- { 4, 0,4096*8+4,4096*8 },
- { 3, 2, 1, 0,11 ,10, 9, 8 },
- { 0*8*2, 1*8*2, 2*8*2, 3*8*2, 4*8*2, 5*8*2, 6*8*2, 7*8*2 },
- 8*8*2
-};
-
-static GFXDECODE_START( gfx_rockclim )
- GFXDECODE_ENTRY( "gfx1", 0x0000, galaxold_charlayout, 32, 8 )
- GFXDECODE_ENTRY( "gfx1", 0x0000, galaxold_spritelayout, 32, 8 )
- GFXDECODE_ENTRY( "gfx2", 0x0000, rockclim_charlayout, 0, 1 )
-GFXDECODE_END
static GFXDECODE_START( gfx_galaxian )
GFXDECODE_ENTRY( "gfx1", 0x0000, galaxold_charlayout, 0, 8 )
@@ -1895,22 +1669,6 @@ void galaxold_state::scrambleo(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::scrambleo_map);
}
-void galaxold_state::guttang(machine_config &config)
-{
- galaxian(config);
-
- // basic machine hardware
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::guttang_map);
-
- // video hardware
- m_palette->set_entries(32+2+64+1); // 32 for the characters, 2 for the bullets, 64 for the stars, 1 for background
- m_palette->set_init(FUNC(galaxold_state::galaxold_palette));
-// m_palette->set_init(FUNC(galaxold_state::scrambold_palette));
-
- MCFG_VIDEO_START_OVERRIDE(galaxold_state,mooncrst)
-}
-
-
void galaxold_state::_4in1(machine_config &config)
{
galaxian(config);
@@ -1946,21 +1704,6 @@ void galaxold_state::dkongjrmc(machine_config &config)
}
-void galaxold_state::rockclim(machine_config &config)
-{
- mooncrst(config);
-
- // basic machine hardware
- m_maincpu->set_addrmap(AS_PROGRAM, &galaxold_state::rockclim_map);
- m_gfxdecode->set_info(gfx_rockclim);
-
- // video hardware
- MCFG_VIDEO_START_OVERRIDE(galaxold_state,rockclim)
- m_palette->set_entries(64+64+2); // 64 colors only, but still uses bullets so we need to keep the palette big
- m_palette->set_init(FUNC(galaxold_state::rockclim_palette));
-
- m_screen->set_size(64*8, 32*8);
-}
void galaxold_state::drivfrcg(machine_config &config)
@@ -1982,7 +1725,7 @@ void galaxold_state::drivfrcg(machine_config &config)
m_screen->set_palette(m_palette);
m_screen->screen_vblank().set_inputline(m_maincpu, 0, ASSERT_LINE);
- PALETTE(config, m_palette, FUNC(galaxold_state::rockclim_palette), 64);
+ PALETTE(config, m_palette, FUNC(galaxold_state::s2650_palette), 64);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_gmgalax);
@@ -2043,7 +1786,7 @@ void galaxold_state::racknrol(machine_config &config)
// video hardware
GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxian);
- PALETTE(config, m_palette, FUNC(galaxold_state::rockclim_palette), 32);
+ PALETTE(config, m_palette, FUNC(galaxold_state::s2650_palette), 32);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
@@ -2070,7 +1813,7 @@ void galaxold_state::hexpoola(machine_config &config)
maincpu.intack_handler().set(FUNC(galaxold_state::hunchbkg_intack));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxian);
- PALETTE(config, m_palette, FUNC(galaxold_state::rockclim_palette), 32);
+ PALETTE(config, m_palette, FUNC(galaxold_state::s2650_palette), 32);
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
@@ -2154,30 +1897,6 @@ ROM_START( froggerv )
ROM_END
-ROM_START( rockclim )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "lc01.a1", 0x0000, 0x1000, CRC(8601ae8d) SHA1(6e0c3b34ce5e6879ce7a116c5c2660889a68320d) )
- ROM_LOAD( "lc02.a2", 0x1000, 0x1000, CRC(2dde9d4c) SHA1(7e343113116b94894558819a7f77f77e4e952da7) )
- ROM_LOAD( "lc03.a3", 0x2000, 0x1000, CRC(82c48a67) SHA1(abf95062eb5c9bd4bb3c9b9af59396a4ca6905d8) )
- ROM_LOAD( "lc04.a4", 0x3000, 0x1000, CRC(7cd3a04a) SHA1(756c12288e120e6f761b266b91920d17cab6926c) )
- ROM_LOAD( "lc05.a5", 0x6000, 0x1000, CRC(5e542149) SHA1(425a5a8769c3fa0887db8ff04e2a4f32f18d2679) )
- ROM_LOAD( "lc06.a6", 0x7000, 0x1000, CRC(b2bdca64) SHA1(e72e63725164c922816dda90ac964a94062eab1b) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "lc08.a9", 0x0000, 0x800, CRC(7f18e1ef) SHA1(2a160b994708ec0f06774dde3ec613af7e3f32c6) )
- ROM_LOAD( "lc07.a7", 0x0800, 0x800, CRC(f18b50ac) SHA1(a2328eb55882a09403cae1a497c611b494649cac) )
- ROM_LOAD( "lc10.c9", 0x1000, 0x800, CRC(dec5781b) SHA1(b6277fc890d153db24bd48293780cf239a6aa0e7) )
- ROM_LOAD( "lc09.c7", 0x1800, 0x800, CRC(06c0b5de) SHA1(561cf99a6be03205c7bc5fd15d4d51ee4d6d164b) )
-
- ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "lc13.g5", 0x0000, 0x1000, CRC(19475f2b) SHA1(5d42aa45a7b519dacdecd3d2edbfee6971693034) )
- ROM_LOAD( "lc14.g7", 0x1000, 0x1000, CRC(cc96d1db) SHA1(9713b47b723a5d8837f2a8e8c43e46dc41a62e5b) )
-
- ROM_REGION( 0x0040, "proms", 0 )
- ROM_LOAD( "lc12.e9", 0x0000, 0x0020, CRC(f6e76547) SHA1(c9ea78d1876156561b3bbf327d7e0299e1d9fd4a) )
- ROM_LOAD( "lc11.f4", 0x0020, 0x0020, CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) )
-ROM_END
-
ROM_START( scramblb )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -2710,26 +2429,7 @@ ROM_START( trvchlng )
ROM_END
-// PCB made by Recreativos Franco
-ROM_START( guttangt )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "gg1-2716.rom", 0x0000, 0x0800, CRC(7f338d91) SHA1(d203f229f4f5934467b80ed0f2208e5551aaa383) )
- ROM_LOAD( "gg2-2758.rom", 0x0800, 0x0800, CRC(ecdbb62b) SHA1(c2eb0316ab789a69b74aeec25e5c690b4334c7c2) )
- ROM_LOAD( "gg3-2716.rom", 0x1000, 0x0800, CRC(38d71df3) SHA1(f1771256b52ba1bfc1bd472f8a78d6302a7b1299) )
- ROM_LOAD( "gg4-2716.rom", 0x1800, 0x0800, CRC(7623125a) SHA1(3f3abb9c66751908918fa52e22e153da5fdc0902) )
- ROM_LOAD( "gg5-2732.rom", 0x2000, 0x0800, CRC(1fe33f92) SHA1(d3e00459015b8bf43fe2e8f6cb57cef775bbb330) )
- ROM_CONTINUE(0x4000,0x800) // banked code, maps at 0x2000
- ROM_LOAD( "gg6-2716.rom", 0x2800, 0x0800, CRC(60606cd5) SHA1(9a4bf0134c7fa66d2ecd3a745421091b0a086572) )
- ROM_LOAD( "gg7-2516.rom", 0x3000, 0x0800, CRC(ce0d0a93) SHA1(339bd9c6c40eb2501d1a1adcea0cfa82e3224967) )
- ROM_LOAD( "gg8-2716.rom", 0x3800, 0x0800, CRC(b8716081) SHA1(e2d1db27ad44876b891cc0a2232ac887bcc5516f) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "gg9-2732.rom", 0x0000, 0x1000, CRC(be6bf522) SHA1(23a09409b7de4bfdb970e4ff23d89a2439a0aee5) )
- ROM_LOAD( "gg10-2732.rom", 0x1000, 0x1000, CRC(b04c34c5) SHA1(a37db70ce67d64daa5f0c41cce1136d1c9d8c175) )
-
- ROM_REGION( 0x0020, "proms", 0 ) // no PROM was present..
- ROM_LOAD( "mmi6331.6l", 0x0000, 0x0020, BAD_DUMP CRC(6a0c7d87) SHA1(140335d85c67c75b65689d4e76d29863c209cf32) )
-ROM_END
+
/*
@@ -2779,16 +2479,11 @@ ROM_START( bullsdrtg )
ROM_LOAD( "prom.bin", 0x0000, 0x0020, CRC(16b19bfa) SHA1(a0e9217f9bc5b06212d5f22dcc3dc4b2838788ba) )
ROM_END
-void galaxold_state::init_guttangt()
-{
- m_maincpu->space(AS_PROGRAM).install_rom(0x2000, 0x27ff, memregion("maincpu")->base() + 0x2000);
-}
// Z80 games
// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY, FULLNAME, FLAGS
GAME( 1981, vpool, hustler, mooncrst, vpool, galaxold_state, empty_init, ROT90, "bootleg", "Video Pool (bootleg on Moon Cresta hardware)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1981, rockclim, 0, rockclim, rockclim, galaxold_state, empty_init, ROT180, "Taito", "Rock Climber", MACHINE_SUPPORTS_SAVE )
GAME( 1981, scramblb, scramble, scramblb, scramblb, galaxold_state, empty_init, ROT90, "bootleg", "Scramble (bootleg on Galaxian hardware)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1981, scramb2, scramble, scramb2, scramb2, galaxold_state, empty_init, ROT90, "bootleg", "Scramble (bootleg, set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1981, scramb3, scramble, scramb3, scramb2, galaxold_state, empty_init, ROT90, "bootleg", "Scramble (bootleg, set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
@@ -2799,7 +2494,6 @@ GAME( 1982, dkongjrm, dkongjr, dkongjrm, dkongjrm, galaxold_state, empty_ini
GAME( 1982, dkongjrmc, dkongjr, dkongjrmc, dkongjrmc, galaxold_state, empty_init, ROT90, "bootleg (Centromatic)", "Donkey Kong Jr. (bootleg on Moon Cresta hardware, set 2)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // sprites leave artifacts
GAME( 1982, tazzmang, tazmania, tazzmang, tazzmang, galaxold_state, empty_init, ROT90, "bootleg", "Tazz-Mania (bootleg on Galaxian hardware)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1982, tazzmang2, tazmania, tazzmang, tazzmang, galaxold_state, empty_init, ROT90, "bootleg", "Tazz-Mania (bootleg on Galaxian hardware with Starfield)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1982, guttangt, locomotn, guttang, guttangt, galaxold_state, init_guttangt, ROT270, "bootleg (Recreativos Franco?)", "Guttang Gottong (bootleg on Galaxian type hardware)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // or by 'Tren' ?
// Videotron cartridge system
GAME( 1981, hustlerb3, hustler, videotron, hustlerb3, galaxold_state, empty_init, ROT90, "bootleg (Videotron)", "Video Pool (Video Hustler bootleg)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/gameplan.cpp b/src/mame/drivers/gameplan.cpp
index a2460fb8e8d..d6e55864a45 100644
--- a/src/mame/drivers/gameplan.cpp
+++ b/src/mame/drivers/gameplan.cpp
@@ -938,6 +938,7 @@ void gameplan_state::machine_start()
save_item(NAME(m_video_y));
save_item(NAME(m_video_command));
save_item(NAME(m_video_data));
+ save_item(NAME(m_video_previous));
}
@@ -948,6 +949,7 @@ void gameplan_state::machine_reset()
m_video_y = 0;
m_video_command = 0;
m_video_data = 0;
+ m_video_previous = 0;
}
void gameplan_state::gameplan(machine_config &config)
@@ -998,6 +1000,9 @@ void gameplan_state::leprechn(machine_config &config)
{
gameplan(config);
m_maincpu->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK);
+ m_via_0->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK);
+ m_via_1->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK);
+ m_via_2->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK);
/* basic machine hardware */
m_audiocpu->set_addrmap(AS_PROGRAM, &gameplan_state::leprechn_audio_map);
diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp
index fdea2ef8d26..2be3d9e2543 100644
--- a/src/mame/drivers/goldstar.cpp
+++ b/src/mame/drivers/goldstar.cpp
@@ -12233,8 +12233,7 @@ ROM_START( lucky8e )
ROM_REGION( 0x18000, "gfx1", 0 )
ROM_LOAD( "27256.5", 0x00000, 0x8000, CRC(59026af3) SHA1(3d7f7e78968ca26275635aeaa0e994468a3da575) )
ROM_LOAD( "27256.6", 0x08000, 0x8000, CRC(67a073c1) SHA1(36194d57d0dc0601fa1fdf2e6806f11b2ea6da36) )
-// ROM_LOAD( "27128.7", 0x10000, 0x4000, BAD_DUMP CRC(0000b9d0) SHA1(00008fe8a116c33bbd712a639224d041447a45c1) )
- ROM_LOAD( "7", 0x10000, 0x8000, CRC(c415b9d0) SHA1(fd558fe8a116c33bbd712a639224d041447a45c1) ) // from parent set, since 2 of 3 bitplanes matched
+ ROM_LOAD( "27128.7", 0x10000, 0x8000, BAD_DUMP CRC(c415b9d0) SHA1(fd558fe8a116c33bbd712a639224d041447a45c1) ) // from parent set, since 2 of 3 bitplanes matched
ROM_REGION( 0x8000, "gfx2", 0 )
ROM_LOAD( "27128.1", 0x0000, 0x2000, CRC(8ca19ee7) SHA1(2e0cd4a74bd9abef60ed561ba4e5bb2681ce1222) ) // overdump?
diff --git a/src/mame/drivers/gticlub.cpp b/src/mame/drivers/gticlub.cpp
index b1a0a12b00d..2f48600b04c 100644
--- a/src/mame/drivers/gticlub.cpp
+++ b/src/mame/drivers/gticlub.cpp
@@ -963,6 +963,7 @@ void gticlub_state::hangplt(machine_config &config)
m_voodoo[0]->set_screen_tag("lscreen");
m_voodoo[0]->set_cpu_tag(m_dsp[0]);
m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall));
VOODOO_1(config, m_voodoo[1], STD_VOODOO_1_CLOCK);
m_voodoo[1]->set_fbmem(2);
@@ -970,6 +971,7 @@ void gticlub_state::hangplt(machine_config &config)
m_voodoo[1]->set_screen_tag("rscreen");
m_voodoo[1]->set_cpu_tag(m_dsp[1]);
m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1);
+ m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall));
K033906(config, "k033906_1", 0, m_voodoo[0]);
K033906(config, "k033906_2", 0, m_voodoo[1]);
diff --git a/src/mame/drivers/hh_cops1.cpp b/src/mame/drivers/hh_cops1.cpp
index 12f23182242..f17c55c4f07 100644
--- a/src/mame/drivers/hh_cops1.cpp
+++ b/src/mame/drivers/hh_cops1.cpp
@@ -403,13 +403,13 @@ static INPUT_PORTS_START( qkracerm )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(u8"÷")
PORT_START("IN.2") // DS8874 OUT 6 port K
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(u8"×")
PORT_START("IN.3") // DS8874 OUT 7 port K
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp
index 8af7d653f19..46478e86b35 100644
--- a/src/mame/drivers/hh_sm510.cpp
+++ b/src/mame/drivers/hh_sm510.cpp
@@ -9240,6 +9240,74 @@ ROM_END
/***************************************************************************
+ Tronica Space Mission (model SM-11)
+ * PCB label SM-11 250582
+ * Sharp SM5A label 0126 228B TRONICA (no decap)
+ * lcd screen with custom segments, 1-bit sound
+
+***************************************************************************/
+
+class trspacmis_state : public hh_sm510_state
+{
+public:
+ trspacmis_state(const machine_config &mconfig, device_type type, const char *tag) :
+ hh_sm510_state(mconfig, type, tag)
+ { }
+
+ void trspacmis(machine_config &config);
+};
+
+// config
+
+static INPUT_PORTS_START( trspacmis )
+ PORT_START("IN.0") // R2
+ PORT_CONFNAME( 0x01, 0x00, "Invincibility (Cheat)") // factory test, unpopulated on PCB
+ PORT_CONFSETTING( 0x00, DEF_STR( Off ) )
+ PORT_CONFSETTING( 0x01, DEF_STR( On ) )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) // same as 0x01?
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) // display test?
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) // alarm test?
+
+ PORT_START("IN.1") // R3
+ PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.2") // R4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_CHANGED_CB(input_changed) PORT_NAME("Time")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game B")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Game A")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE2 ) PORT_CHANGED_CB(input_changed) PORT_NAME("Alarm")
+
+ PORT_START("BA")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_CHANGED_CB(input_changed) PORT_16WAY
+
+ PORT_START("B")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_CHANGED_CB(input_changed) PORT_16WAY
+
+ PORT_START("ACL")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_CHANGED_CB(acl_button) PORT_NAME("ACL")
+INPUT_PORTS_END
+
+void trspacmis_state::trspacmis(machine_config &config)
+{
+ sm5a_common(config, 1601, 1080); // R mask option confirmed
+}
+
+// roms
+
+ROM_START( trspacmis )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "0126_228b", 0x0000, 0x0740, CRC(3d319537) SHA1(007d376cfd29574554caa59ed9163178179ae9c5) )
+
+ ROM_REGION( 106675, "screen", 0)
+ ROM_LOAD( "trspacmis.svg", 0, 106675, CRC(45d7b798) SHA1(db08fef21462507a115547ecf8eac38260a0c868) )
+ROM_END
+
+
+
+
+
+/***************************************************************************
+
Elektronika Автослалом (Autoslalom) (model IM-23)
* KB1013VK1-2 MCU
* lcd screen with custom segments, 1-bit sound
@@ -9548,6 +9616,7 @@ CONS( 1992, tbatmana, 0, 0, tbatmana, tbatmana, tbatmana_s
CONS( 1983, trshutvoy, 0, 0, trshutvoy, trshutvoy, trshutvoy_state, empty_init, "Tronica", "Shuttle Voyage", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1983, tigarden, trshutvoy, 0, tigarden, trshutvoy, trshutvoy_state, empty_init, "Tronica", "Thief in Garden", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
CONS( 1982, trsrescue, 0, 0, trsrescue, trsrescue, trsrescue_state, empty_init, "Tronica", "Space Rescue", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
+CONS( 1982, trspacmis, 0, 0, trspacmis, trspacmis, trspacmis_state, empty_init, "Tronica", "Space Mission", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
// misc
CONS( 1990, auslalom, 0, 0, auslalom, auslalom, auslalom_state, empty_init, "Elektronika", "Autoslalom", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK )
diff --git a/src/mame/drivers/hornet.cpp b/src/mame/drivers/hornet.cpp
index 78d6390290e..15e81ac9cd5 100644
--- a/src/mame/drivers/hornet.cpp
+++ b/src/mame/drivers/hornet.cpp
@@ -409,6 +409,7 @@ public:
void init_hornet();
void init_sscope();
void init_sscope2();
+ void init_gradius4();
protected:
virtual void machine_start() override;
@@ -433,7 +434,7 @@ private:
required_ioport_array<3> m_in;
required_ioport m_dsw;
optional_ioport m_eepromout;
- optional_ioport_array<2> m_analog;
+ optional_ioport_array<3> m_analog;
output_finder<2> m_pcb_digit;
optional_region_ptr<uint32_t> m_comm_board_rom;
optional_memory_bank m_comm_bank;
@@ -448,6 +449,8 @@ private:
uint16_t m_gn680_ret0;
uint16_t m_gn680_ret1;
+ bool m_sndres;
+
uint8_t sysreg_r(offs_t offset);
void sysreg_w(offs_t offset, uint8_t data);
void comm1_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
@@ -562,24 +565,35 @@ void hornet_state::sysreg_w(offs_t offset, uint8_t data)
break;
case 4: // System Register 1
+ {
/*
- 0x80 = SNDRES (sound reset)
- 0x40 = COMRES (COM reset)
- 0x20 = COINRQ2 (EEPROM SCL?)
- 0x10 = COINRQ1 (EEPROM data)
- 0x08 = ADCS (ADC CS)
- 0x04 = ADCONV (ADC CONV)
- 0x02 = ADDI (ADC DI)
- 0x01 = ADDSCLK (ADC SCLK)
+ 0x80 = SNDRES (sound reset)
+ 0x40 = COMRES (COM reset)
+ 0x20 = COINRQ2 (EEPROM SCL?)
+ 0x10 = COINRQ1 (EEPROM data)
+ 0x08 = ADCS (ADC CS)
+ 0x04 = ADCONV (ADC CONV)
+ 0x02 = ADDI (ADC DI)
+ 0x01 = ADDSCLK (ADC SCLK)
*/
m_adc12138->cs_w((data >> 3) & 0x1);
m_adc12138->conv_w((data >> 2) & 0x1);
m_adc12138->di_w((data >> 1) & 0x1);
m_adc12138->sclk_w(data & 0x1);
- m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
+ bool sndres = (data & 0x80) ? true : false;
+ m_audiocpu->set_input_line(INPUT_LINE_RESET, (sndres) ? CLEAR_LINE : ASSERT_LINE);
+ if (sndres != m_sndres)
+ {
+ // clear interrupts when reset line is triggered
+ m_audiocpu->set_input_line(M68K_IRQ_1, CLEAR_LINE);
+ }
+
+ m_sndres = sndres;
+
osd_printf_debug("System register 1 = %02X\n", data);
break;
+ }
case 5: // Sound Control Register
/*
@@ -615,6 +629,7 @@ void hornet_state::sysreg_w(offs_t offset, uint8_t data)
m_maincpu->set_input_line(INPUT_LINE_IRQ1, CLEAR_LINE);
if (data & 0x40)
m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
+
m_konppc->set_cgboard_id((data >> 4) & 3);
m_cg_view.select(m_konppc->get_cgboard_id() ? 1 : 0);
break;
@@ -993,6 +1008,33 @@ static INPUT_PORTS_START( sscope2 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("lan_eeprom", eeprom_serial_93cxx_device, cs_write)
INPUT_PORTS_END
+static INPUT_PORTS_START( thrilld )
+ PORT_INCLUDE( hornet )
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Gear Shift Up")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Gear Shift Down")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("Gear Shift Left")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("Gear Shift Right")
+ PORT_BIT( 0x07, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_MODIFY("IN1")
+ PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_MODIFY("IN2")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("ANALOG1")
+ PORT_BIT(0x7ff, 0x400, IPT_PADDLE) PORT_NAME("Steering Wheel") PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(60)
+
+ PORT_START("ANALOG2")
+ PORT_BIT(0x7ff, 0x000, IPT_PEDAL) PORT_NAME("Gas Pedal") PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(60)
+
+ PORT_START("ANALOG3")
+ PORT_BIT(0x7ff, 0x000, IPT_PEDAL2) PORT_NAME("Brake Pedal") PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(60)
+INPUT_PORTS_END
+
/* PowerPC interrupts
@@ -1046,14 +1088,13 @@ void hornet_state::machine_reset()
double hornet_state::adc12138_input_callback(uint8_t input)
{
- int value = 0;
- switch (input)
+ if (input < m_analog.size())
{
- case 0: value = m_analog[0].read_safe(0); break;
- case 1: value = m_analog[1].read_safe(0); break;
+ int value = m_analog[input].read_safe(0);
+ return (double)(value) / 2047.0;
}
- return (double)(value) / 2047.0;
+ return 0.0;
}
void hornet_state::hornet(machine_config &config)
@@ -1082,6 +1123,7 @@ void hornet_state::hornet(machine_config &config)
m_voodoo[0]->set_screen_tag("screen");
m_voodoo[0]->set_cpu_tag(m_dsp[0]);
m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall));
K033906(config, "k033906_1", 0, m_voodoo[0]);
@@ -1161,6 +1203,7 @@ void hornet_state::sscope(machine_config &config)
m_voodoo[1]->set_screen_tag("rscreen");
m_voodoo[1]->set_cpu_tag(m_dsp[1]);
m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1);
+ m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall));
K033906(config, "k033906_2", 0, m_voodoo[1]);
@@ -1195,6 +1238,7 @@ void hornet_state::sscope2(machine_config &config)
m_voodoo[0]->set_screen_tag("lscreen");
m_voodoo[0]->set_cpu_tag(m_dsp[0]);
m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall));
VOODOO_2(config.replace(), m_voodoo[1], STD_VOODOO_2_CLOCK);
m_voodoo[1]->set_fbmem(2);
@@ -1202,6 +1246,7 @@ void hornet_state::sscope2(machine_config &config)
m_voodoo[1]->set_screen_tag("rscreen");
m_voodoo[1]->set_cpu_tag(m_dsp[1]);
m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1);
+ m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall));
DS2401(config, "lan_serial_id");
EEPROM_93C46_16BIT(config, "lan_eeprom");
@@ -1354,6 +1399,13 @@ void hornet_state::init_hornet()
m_maincpu->ppc4xx_spu_set_tx_handler(write8smo_delegate(*this, FUNC(hornet_state::jamma_jvs_w)));
+ //m_dsp[0]->enable_recompiler();
+}
+
+void hornet_state::init_gradius4()
+{
+ init_hornet();
+
m_dsp[0]->enable_recompiler();
}
@@ -1661,13 +1713,13 @@ ROM_END
/*************************************************************************/
-GAME( 1998, gradius4, 0, hornet, gradius4, hornet_state, init_hornet, ROT0, "Konami", "Gradius IV: Fukkatsu (ver JAC)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1998, gradius4, 0, hornet, gradius4, hornet_state, init_gradius4, ROT0, "Konami", "Gradius IV: Fukkatsu (ver JAC)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1998, nbapbp, 0, hornet, nbapbp, hornet_state, init_hornet, ROT0, "Konami", "NBA Play By Play (ver JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1998, nbapbpa, nbapbp, hornet, nbapbp, hornet_state, init_hornet, ROT0, "Konami", "NBA Play By Play (ver AAB)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1998, terabrst, 0, terabrst, terabrst, hornet_state, init_hornet, ROT0, "Konami", "Teraburst (1998/07/17 ver UEL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1998, terabrsta, terabrst, terabrst, terabrst, hornet_state, init_hornet, ROT0, "Konami", "Teraburst (1998/02/25 ver AAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
// identifies as NWK-LC system
-GAME( 1998, thrilldbu, thrilld, hornet_lan, hornet, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver UFB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // heavy GFX glitches, fails wheel motor test, for now it's possible to get in game by switching "SW:2" to on
+GAME( 1998, thrilldbu, thrilld, hornet_lan, thrilld, hornet_state, init_hornet, ROT0, "Konami", "Thrill Drive (ver UFB)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN ) // heavy GFX glitches, fails wheel motor test, for now it's possible to get in game by switching "SW:2" to on
// The region comes from the Timekeeper NVRAM, without a valid default all sets except 'xxD, Ver 1.33' will init their NVRAM to UAx versions, the xxD set seems to incorrectly init it to JXD, which isn't a valid
// version, and thus can't be booted. If you copy the NVRAM from another already initialized set, it will boot as UAD.
diff --git a/src/mame/drivers/hp80.cpp b/src/mame/drivers/hp80.cpp
index 709366bbdaa..22bb4794eb4 100644
--- a/src/mame/drivers/hp80.cpp
+++ b/src/mame/drivers/hp80.cpp
@@ -696,7 +696,7 @@ static const uint8_t keyboard_table[ 80 ][ 2 ] = {
bool hp80_base_state::kb_scan_ioport(ioport_value pressed , unsigned idx_base , uint8_t& row , uint8_t& col)
{
if (pressed) {
- unsigned bit_no = 31 - count_leading_zeros(pressed);
+ unsigned bit_no = 31 - count_leading_zeros_32(pressed);
row = (idx_base + bit_no) / 8;
col = (idx_base + bit_no) % 8;
return true;
diff --git a/src/mame/drivers/hp9825.cpp b/src/mame/drivers/hp9825.cpp
index 9f69d976a88..dfcc7c5d007 100644
--- a/src/mame/drivers/hp9825.cpp
+++ b/src/mame/drivers/hp9825.cpp
@@ -558,7 +558,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(hp9825_state::kb_scan)
void hp9825_state::kb_scan_ioport(ioport_value pressed , ioport_port &port , unsigned idx_base , int& max_seq_len , unsigned& max_seq_idx)
{
while (pressed) {
- unsigned bit_no = 31 - count_leading_zeros(pressed);
+ unsigned bit_no = 31 - count_leading_zeros_32(pressed);
ioport_value mask = BIT_MASK<ioport_value>(bit_no);
int seq_len = port.field(mask)->seq().length();
if (seq_len > max_seq_len) {
diff --git a/src/mame/drivers/hp9845.cpp b/src/mame/drivers/hp9845.cpp
index 7976c54cbc9..ab4398b20e7 100644
--- a/src/mame/drivers/hp9845.cpp
+++ b/src/mame/drivers/hp9845.cpp
@@ -550,7 +550,7 @@ attotime hp9845_base_state::time_to_gv_mem_availability() const
void hp9845_base_state::kb_scan_ioport(ioport_value pressed , ioport_port &port , unsigned idx_base , int& max_seq_len , unsigned& max_seq_idx)
{
while (pressed) {
- unsigned bit_no = 31 - count_leading_zeros(pressed);
+ unsigned bit_no = 31 - count_leading_zeros_32(pressed);
ioport_value mask = BIT_MASK(bit_no);
int seq_len = port.field(mask)->seq().length();
if (seq_len > max_seq_len) {
diff --git a/src/mame/drivers/indigo.cpp b/src/mame/drivers/indigo.cpp
index ede8813bb55..8f21674e6af 100644
--- a/src/mame/drivers/indigo.cpp
+++ b/src/mame/drivers/indigo.cpp
@@ -234,9 +234,12 @@ ROM_END
ROM_START( indigo4k )
ROM_REGION64_BE( 0x80000, "user1", 0 )
- ROMX_LOAD( "ip20prom.070-8116-004.bin", 0x000000, 0x080000, CRC(940d960e) SHA1(596aba530b53a147985ff3f6f853471ce48c866c), ROM_GROUPDWORD | ROM_REVERSE )
+ ROM_SYSTEM_BIOS( 0, "405d-rev-a", "SGI Version 4.0.5D Rev A IP20, Aug 19, 1992" )
+ ROMX_LOAD( "ip20prom.070-8116-004.bin", 0x000000, 0x080000, CRC(940d960e) SHA1(596aba530b53a147985ff3f6f853471ce48c866c), ROM_GROUPDWORD | ROM_REVERSE | ROM_BIOS(0) )
+ ROM_SYSTEM_BIOS( 1, "405g-rev-b", "SGI Version 4.0.5G Rev B IP20, Nov 10, 1992" ) // dumped over serial connection from boot monitor and swapped
+ ROMX_LOAD( "ip20prom.070-8116-005.bin", 0x000000, 0x080000, CRC(1875b645) SHA1(52f5d7baea3d1bc720eb2164104c177e23504345), ROM_GROUPDWORD | ROM_REVERSE | ROM_BIOS(1) )
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1991, indigo3k, 0, 0, indigo3k, indigo, indigo3k_state, empty_init, "Silicon Graphics Inc", "IRIS Indigo (R3000, 33MHz)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-COMP( 1993, indigo4k, 0, 0, indigo4k, indigo, indigo4k_state, empty_init, "Silicon Graphics Inc", "IRIS Indigo (R4400, 150MHz, Ver. 4.0.5D Rev A)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP( 1993, indigo4k, 0, 0, indigo4k, indigo, indigo4k_state, empty_init, "Silicon Graphics Inc", "IRIS Indigo (R4400, 150MHz)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/intellect02.cpp b/src/mame/drivers/intellect02.cpp
index 2e9608e045a..016f0bb5cf4 100644
--- a/src/mame/drivers/intellect02.cpp
+++ b/src/mame/drivers/intellect02.cpp
@@ -132,7 +132,7 @@ u8 intel02_state::input_r()
{
// d0-d3: buttons through a maze of logic gates
// basically giving each button its own 4-bit scancode
- u8 data = count_leading_zeros(m_inputs[0]->read()) - 17;
+ u8 data = count_leading_zeros_32(m_inputs[0]->read()) - 17;
// d4: Vcc, d5-d7: buttons (direct)
return data | (~m_inputs[1]->read() << 4 & 0xf0);
diff --git a/src/mame/drivers/inufuku.cpp b/src/mame/drivers/inufuku.cpp
index 2ccc99d0dfe..e2657c8a04b 100644
--- a/src/mame/drivers/inufuku.cpp
+++ b/src/mame/drivers/inufuku.cpp
@@ -73,14 +73,245 @@ TODO:
******************************************************************************/
#include "emu.h"
-#include "includes/inufuku.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
+#include "machine/gen_latch.h"
#include "sound/ymopn.h"
+#include "video/bufsprite.h"
+#include "video/vsystem_spr.h"
+
+#include "emupal.h"
#include "screen.h"
#include "speaker.h"
+#include "tilemap.h"
+
+
+namespace {
+
+class inufuku_state : public driver_device
+{
+public:
+ inufuku_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_bg_videoram(*this, "bg_videoram")
+ , m_bg_rasterram(*this, "bg_rasterram")
+ , m_tx_videoram(*this, "tx_videoram")
+ , m_sprtileram(*this, "sprtileram")
+ , m_audiobank(*this, "audiobank")
+ , m_maincpu(*this, "maincpu")
+ , m_audiocpu(*this, "audiocpu")
+ , m_gfxdecode(*this, "gfxdecode")
+ , m_palette(*this, "palette")
+ , m_spr(*this, "vsystem_spr")
+ , m_soundlatch(*this, "soundlatch")
+ , m_sprattrram(*this, "sprattrram")
+ { }
+
+ void inufuku(machine_config &config);
+ void _3on3dunk(machine_config &config);
+
+ DECLARE_READ_LINE_MEMBER(soundflag_r);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
+private:
+ // memory pointers
+ required_shared_ptr<u16> m_bg_videoram;
+ required_shared_ptr<u16> m_bg_rasterram;
+ required_shared_ptr<u16> m_tx_videoram;
+ required_shared_ptr<u16> m_sprtileram;
+
+ required_memory_bank m_audiobank;
+
+ // video-related
+ tilemap_t *m_bg_tilemap;
+ tilemap_t *m_tx_tilemap;
+ int m_bg_scrollx = 0;
+ int m_bg_scrolly = 0;
+ int m_tx_scrollx = 0;
+ int m_tx_scrolly = 0;
+ bool m_bg_raster = false;
+ u8 m_bg_palettebank = 0;
+ u8 m_tx_palettebank = 0;
+ u32 tile_callback( u32 code );
+
+ // devices
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+ required_device<vsystem_spr_device> m_spr;
+ required_device<generic_latch_8_device> m_soundlatch;
+ required_device<buffered_spriteram16_device> m_sprattrram;
+
+ void soundrombank_w(u8 data);
+ void palettereg_w(offs_t offset, u16 data);
+ void scrollreg_w(offs_t offset, u16 data);
+ void bg_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ void tx_videoram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
+ TILE_GET_INFO_MEMBER(get_bg_tile_info);
+ TILE_GET_INFO_MEMBER(get_tx_tile_info);
+
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ void main_map(address_map &map);
+ void sound_io_map(address_map &map);
+ void sound_map(address_map &map);
+};
+
+
+/******************************************************************************
+
+ Memory handlers
+
+******************************************************************************/
+
+void inufuku_state::palettereg_w(offs_t offset, u16 data)
+{
+ switch (offset)
+ {
+ case 0x02:
+ m_bg_palettebank = (data & 0xf000) >> 12;
+ m_bg_tilemap->mark_all_dirty();
+ /*
+ if (data & ~0xf000)
+ logerror("%s: palettereg_w %02X: %04x\n", machine().describe_context(), offset << 1, data);
+ */
+ break;
+ case 0x03:
+ m_tx_palettebank = (data & 0xf000) >> 12;
+ m_tx_tilemap->mark_all_dirty();
+ /*
+ if (data & ~0xf000)
+ logerror("%s: palettereg_w %02X: %04x\n", machine().describe_context(), offset << 1, data);
+ */
+ break;
+ default:
+ //logerror("%s: palettereg_w %02X: %04x\n", machine().describe_context(), offset << 1, data);
+ break;
+ }
+}
+
+
+void inufuku_state::scrollreg_w(offs_t offset, u16 data)
+{
+ switch (offset)
+ {
+ case 0x00: m_bg_scrollx = data + 1; break;
+ case 0x01: m_bg_scrolly = data + 0; break;
+ case 0x02: m_tx_scrollx = data - 3; break;
+ case 0x03: m_tx_scrolly = data + 1; break;
+ case 0x04:
+ m_bg_raster = BIT(~data, 9);
+ /*
+ if (data & ~0x0200)
+ logerror("%s: palettereg_w %02X: %04x\n", machine().describe_context(), offset << 1, data);
+ */
+ break;
+ default:
+ //logerror("%s: scrollreg_w %02X: %04x\n", machine().describe_context(), offset << 1, data);
+ break;
+ }
+}
+
+
+/******************************************************************************
+
+ Tilemap callbacks
+
+******************************************************************************/
+
+TILE_GET_INFO_MEMBER(inufuku_state::get_bg_tile_info)
+{
+ tileinfo.set(0,
+ m_bg_videoram[tile_index],
+ m_bg_palettebank,
+ 0);
+}
+
+
+TILE_GET_INFO_MEMBER(inufuku_state::get_tx_tile_info)
+{
+ tileinfo.set(1,
+ m_tx_videoram[tile_index],
+ m_tx_palettebank,
+ 0);
+}
+
+
+void inufuku_state::bg_videoram_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ COMBINE_DATA(&m_bg_videoram[offset]);
+ m_bg_tilemap->mark_tile_dirty(offset);
+}
+
+
+void inufuku_state::tx_videoram_w(offs_t offset, u16 data, u16 mem_mask)
+{
+ COMBINE_DATA(&m_tx_videoram[offset]);
+ m_tx_tilemap->mark_tile_dirty(offset);
+}
+
+
+u32 inufuku_state::tile_callback( u32 code )
+{
+ return ((m_sprtileram[code * 2] & 0x0007) << 16) + m_sprtileram[(code * 2) + 1];
+}
+
+
+/******************************************************************************
+
+ Start the video hardware emulation
+
+******************************************************************************/
+
+void inufuku_state::video_start()
+{
+ m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(inufuku_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+ m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(inufuku_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
+
+ m_bg_tilemap->set_transparent_pen(255);
+ m_tx_tilemap->set_transparent_pen(255);
+}
+
+
+/******************************************************************************
+
+ Display refresh
+
+******************************************************************************/
+
+u32 inufuku_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ bitmap.fill(m_palette->black_pen(), cliprect);
+ screen.priority().fill(0);
+
+ if (m_bg_raster)
+ {
+ m_bg_tilemap->set_scroll_rows(512);
+ for (int i = cliprect.min_y; i <= cliprect.max_y; i++)
+ m_bg_tilemap->set_scrollx((m_bg_scrolly + i) & 0x1ff, m_bg_scrollx + m_bg_rasterram[i]);
+ }
+ else
+ {
+ m_bg_tilemap->set_scroll_rows(1);
+ m_bg_tilemap->set_scrollx(0, m_bg_scrollx);
+ }
+ m_bg_tilemap->set_scrolly(0, m_bg_scrolly);
+ m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+
+ m_tx_tilemap->set_scrollx(0, m_tx_scrollx);
+ m_tx_tilemap->set_scrolly(0, m_tx_scrolly);
+ m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4);
+
+ m_spr->draw_sprites( m_sprattrram->buffer(), m_sprattrram->bytes(), screen, bitmap, cliprect );
+ return 0;
+}
/******************************************************************************
@@ -89,11 +320,12 @@ TODO:
******************************************************************************/
-void inufuku_state::inufuku_soundrombank_w(uint8_t data)
+void inufuku_state::soundrombank_w(u8 data)
{
- membank("bank1")->set_entry(data & 0x03);
+ m_audiobank->set_entry(data & 0x03);
}
+
/******************************************************************************
Input/Output port interface
@@ -105,17 +337,18 @@ READ_LINE_MEMBER(inufuku_state::soundflag_r)
return m_soundlatch->pending_r() ? 0 : 1;
}
+
/******************************************************************************
Main CPU memory handlers
******************************************************************************/
-void inufuku_state::inufuku_map(address_map &map)
+void inufuku_state::main_map(address_map &map)
{
- map(0x000000, 0x0fffff).rom(); // main rom
+ map(0x000000, 0x0fffff).rom().region("maincpu", 0x000000); // main rom
-// map(0x100000, 0x100007).nopw(); // ?
+// map(0x100000, 0x100007).nopw(); // ?
map(0x180000, 0x180001).portr("P1");
map(0x180002, 0x180003).portr("P2");
@@ -125,22 +358,22 @@ void inufuku_state::inufuku_map(address_map &map)
map(0x18000a, 0x18000b).portr("P3");
map(0x200000, 0x200001).portw("EEPROMOUT");
- map(0x280001, 0x280001).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // sound command
+ map(0x280001, 0x280001).w(m_soundlatch, FUNC(generic_latch_8_device::write)); // sound command
- map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // palette ram
- map(0x380000, 0x3801ff).writeonly().share("bg_rasterram"); // bg raster ram
- map(0x400000, 0x401fff).rw(FUNC(inufuku_state::inufuku_bg_videoram_r), FUNC(inufuku_state::inufuku_bg_videoram_w)).share("bg_videoram"); // bg ram
- map(0x402000, 0x403fff).rw(FUNC(inufuku_state::inufuku_tx_videoram_r), FUNC(inufuku_state::inufuku_tx_videoram_w)).share("tx_videoram"); // text ram
+ map(0x300000, 0x301fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // palette ram
+ map(0x380000, 0x3801ff).writeonly().share(m_bg_rasterram); // bg raster ram
+ map(0x400000, 0x401fff).ram().w(FUNC(inufuku_state::bg_videoram_w)).share(m_bg_videoram); // bg ram
+ map(0x402000, 0x403fff).ram().w(FUNC(inufuku_state::tx_videoram_w)).share(m_tx_videoram); // text ram
map(0x404000, 0x40ffff).ram(); // ?? mirror (3on3dunk)
- map(0x580000, 0x581fff).ram().share("spriteram1"); // sprite table + sprite attribute
- map(0x600000, 0x61ffff).ram().share("spriteram2"); // cell table
+ map(0x580000, 0x581fff).ram().share("sprattrram"); // sprite table + sprite attribute
+ map(0x600000, 0x61ffff).ram().share(m_sprtileram); // cell table
- map(0x780000, 0x780013).w(FUNC(inufuku_state::inufuku_palettereg_w)); // bg & text palettebank register
- map(0x7a0000, 0x7a0023).w(FUNC(inufuku_state::inufuku_scrollreg_w)); // bg & text scroll register
-// map(0x7e0000, 0x7e0001).nopw(); // ?
+ map(0x780000, 0x780013).w(FUNC(inufuku_state::palettereg_w)); // bg & text palettebank register
+ map(0x7a0000, 0x7a0023).w(FUNC(inufuku_state::scrollreg_w)); // bg & text scroll register
+// map(0x7e0000, 0x7e0001).nopw(); // ?
- map(0x800000, 0xbfffff).rom(); // data rom
- map(0xfd0000, 0xfdffff).ram(); // work ram
+ map(0x800000, 0xbfffff).rom().region("maincpu", 0x100000); // data rom
+ map(0xfd0000, 0xfdffff).ram(); // work ram
}
@@ -150,21 +383,23 @@ void inufuku_state::inufuku_map(address_map &map)
******************************************************************************/
-void inufuku_state::inufuku_sound_map(address_map &map)
+void inufuku_state::sound_map(address_map &map)
{
map(0x0000, 0x77ff).rom();
map(0x7800, 0x7fff).ram();
- map(0x8000, 0xffff).bankr("bank1");
+ map(0x8000, 0xffff).bankr(m_audiobank);
}
-void inufuku_state::inufuku_sound_io_map(address_map &map)
+
+void inufuku_state::sound_io_map(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).w(FUNC(inufuku_state::inufuku_soundrombank_w));
+ map(0x00, 0x00).w(FUNC(inufuku_state::soundrombank_w));
map(0x04, 0x04).rw(m_soundlatch, FUNC(generic_latch_8_device::read), FUNC(generic_latch_8_device::acknowledge_w));
map(0x08, 0x0b).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write));
}
+
/******************************************************************************
Port definitions
@@ -242,61 +477,23 @@ static INPUT_PORTS_START( inufuku )
INPUT_PORTS_END
-
-
/******************************************************************************
Graphics definitions
******************************************************************************/
-static const gfx_layout tilelayout =
-{
- 8, 8,
- RGN_FRAC(1, 1),
- 8,
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 1*8, 0*8, 3*8, 2*8, 5*8, 4*8, 7*8, 6*8 },
- { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64 },
- 64*8
-};
-
-static const gfx_layout spritelayout =
-{
- 16, 16,
- RGN_FRAC(1, 1),
- 4,
- { 0, 1, 2, 3 },
- { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4,
- 10*4, 11*4, 8*4, 9*4, 14*4, 15*4, 12*4, 13*4 },
- { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
- 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
- 128*8
-};
-
-static const gfx_layout spritelayout_alt =
-{
- 16, 16,
- RGN_FRAC(1, 1),
- 4,
- { 0, 1, 2, 3 },
- { 1*4, 0*4, 3*4, 2*4, 5*4, 4*4, 7*4, 6*4,
- 9*4, 8*4, 11*4, 10*4, 13*4, 12*4, 15*4, 14*4 },
- { 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
- 8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
- 128*8
-};
-
static GFXDECODE_START( gfx_inufuku )
- GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 256*16 ) // bg
- GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256*16 ) // text
- GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 0, 256*16 ) // sprite
+ GFXDECODE_ENTRY( "bgtile", 0, gfx_8x8x8_raw, 0, 4096/256 ) // bg
+ GFXDECODE_ENTRY( "txtile", 0, gfx_8x8x8_raw, 0, 4096/256 ) // text
+ GFXDECODE_ENTRY( "sprtile", 0, gfx_16x16x4_packed_msb, 0, 4096/16 ) // sprite
GFXDECODE_END
+
static GFXDECODE_START( gfx_3on3dunk )
- GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 256*16 ) // bg
- GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0, 256*16 ) // text
- GFXDECODE_ENTRY( "gfx3", 0, spritelayout_alt, 0, 256*16 ) // sprite
+ GFXDECODE_ENTRY( "bgtile", 0, gfx_8x8x8_raw, 0, 4096/256 ) // bg
+ GFXDECODE_ENTRY( "txtile", 0, gfx_8x8x8_raw, 0, 4096/256 ) // text
+ GFXDECODE_ENTRY( "sprtile", 0, gfx_16x16x4_packed_lsb, 0, 4096/16 ) // sprite
GFXDECODE_END
@@ -308,10 +505,8 @@ GFXDECODE_END
void inufuku_state::machine_start()
{
- uint8_t *ROM = memregion("audiocpu")->base();
-
- membank("bank1")->configure_entries(0, 4, &ROM[0x00000], 0x8000);
- membank("bank1")->set_entry(0);
+ m_audiobank->configure_entries(0, 4, memregion("audiocpu")->base(), 0x8000);
+ m_audiobank->set_entry(0);
save_item(NAME(m_bg_scrollx));
save_item(NAME(m_bg_scrolly));
@@ -322,64 +517,69 @@ void inufuku_state::machine_start()
save_item(NAME(m_tx_palettebank));
}
+
void inufuku_state::machine_reset()
{
m_bg_scrollx = 0;
m_bg_scrolly = 0;
m_tx_scrollx = 0;
m_tx_scrolly = 0;
- m_bg_raster = 0;
+ m_bg_raster = false;
m_bg_palettebank = 0;
m_tx_palettebank = 0;
}
+
void inufuku_state::inufuku(machine_config &config)
{
- /* basic machine hardware */
- M68000(config, m_maincpu, 32000000/2); /* 16.00 MHz */
- m_maincpu->set_addrmap(AS_PROGRAM, &inufuku_state::inufuku_map);
+ // basic machine hardware */
+ M68000(config, m_maincpu, XTAL(32'000'000)/2); // 16.00 MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &inufuku_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(inufuku_state::irq1_line_hold));
- Z80(config, m_audiocpu, 32000000/4); /* 8.00 MHz */
- m_audiocpu->set_addrmap(AS_PROGRAM, &inufuku_state::inufuku_sound_map);
- m_audiocpu->set_addrmap(AS_IO, &inufuku_state::inufuku_sound_io_map); /* IRQs are triggered by the YM2610 */
+ Z80(config, m_audiocpu, XTAL(32'000'000)/4); // 8.00 MHz
+ m_audiocpu->set_addrmap(AS_PROGRAM, &inufuku_state::sound_map);
+ m_audiocpu->set_addrmap(AS_IO, &inufuku_state::sound_io_map); // IRQs are triggered by the YM2610
EEPROM_93C46_16BIT(config, "eeprom");
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2300));
screen.set_size(2048, 256);
screen.set_visarea(0, 319, 0, 223);
- screen.set_screen_update(FUNC(inufuku_state::screen_update_inufuku));
- screen.screen_vblank().set(FUNC(inufuku_state::screen_vblank_inufuku));
+ screen.set_screen_update(FUNC(inufuku_state::screen_update));
+ screen.screen_vblank().set(m_sprattrram, FUNC(buffered_spriteram16_device::vblank_copy_rising));
screen.set_palette(m_palette);
VSYSTEM_SPR(config, m_spr, 0);
m_spr->set_offsets(0, 1); // reference videos confirm at least the +1 against tilemaps in 3on3dunk (the highscore header text and black box are meant to be 1 pixel misaligned, although there is currently a priority bug there too)
m_spr->set_pdraw(true);
- m_spr->set_tile_indirect_cb(FUNC(inufuku_state::inufuku_tile_callback));
+ m_spr->set_tile_indirect_cb(FUNC(inufuku_state::tile_callback));
m_spr->set_gfx_region(2);
m_spr->set_gfxdecode_tag(m_gfxdecode);
+ BUFFERED_SPRITERAM16(config, m_sprattrram);
+
GFXDECODE(config, m_gfxdecode, m_palette, gfx_inufuku);
PALETTE(config, m_palette).set_format(palette_device::xGBR_555, 4096);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, m_soundlatch);
m_soundlatch->data_pending_callback().set_inputline(m_audiocpu, INPUT_LINE_NMI);
m_soundlatch->set_separate_acknowledge(true);
- ym2610_device &ymsnd(YM2610(config, "ymsnd", 32000000/4));
+ ym2610_device &ymsnd(YM2610(config, "ymsnd", XTAL(32'000'000)/4));
ymsnd.irq_handler().set_inputline(m_audiocpu, 0);
ymsnd.add_route(0, "mono", 0.50);
ymsnd.add_route(1, "mono", 0.75);
ymsnd.add_route(2, "mono", 0.75);
}
+
void inufuku_state::_3on3dunk(machine_config &config)
{
inufuku(config);
@@ -387,9 +587,6 @@ void inufuku_state::_3on3dunk(machine_config &config)
}
-
-
-
/******************************************************************************
ROM definitions
@@ -397,59 +594,61 @@ void inufuku_state::_3on3dunk(machine_config &config)
******************************************************************************/
ROM_START( inufuku )
- ROM_REGION( 0x1000000, "maincpu", 0 ) // main cpu + data
+ ROM_REGION( 0x0500000, "maincpu", 0 ) // main cpu + data
ROM_LOAD16_WORD_SWAP( "u147.bin", 0x0000000, 0x080000, CRC(ab72398c) SHA1(f5dc266ffa936ea6528b46a34113f5e2f8141d71) )
ROM_LOAD16_WORD_SWAP( "u146.bin", 0x0080000, 0x080000, CRC(e05e9bd4) SHA1(af0fdf31c2bdf851bf15c9de725dcbbb58464d54) )
- ROM_LOAD16_WORD_SWAP( "lhmn5l28.148", 0x0800000, 0x400000, CRC(802d17e7) SHA1(43b26efea65fd051c094d19784cb977ced39a1a0) )
+ ROM_LOAD16_WORD_SWAP( "lhmn5l28.148", 0x0100000, 0x400000, CRC(802d17e7) SHA1(43b26efea65fd051c094d19784cb977ced39a1a0) )
ROM_REGION( 0x0020000, "audiocpu", 0 ) // sound cpu
ROM_LOAD( "u107.bin", 0x0000000, 0x020000, CRC(1744ef90) SHA1(e019f4ca83e21aa25710cc0ca40ffe765c7486c9) )
- ROM_REGION( 0x0400000, "gfx1", 0 ) // bg
- ROM_LOAD16_WORD_SWAP( "lhmn5ku8.u40", 0x0000000, 0x400000, CRC(8cbca80a) SHA1(063e9be97f5a1f021f8326f2994b51f9af5e1eaf) )
+ ROM_REGION( 0x0400000, "bgtile", 0 ) // bg
+ ROM_LOAD( "lhmn5ku8.u40", 0x0000000, 0x400000, CRC(8cbca80a) SHA1(063e9be97f5a1f021f8326f2994b51f9af5e1eaf) )
- ROM_REGION( 0x0400000, "gfx2", 0 ) // text
- ROM_LOAD16_WORD_SWAP( "lhmn5ku7.u8", 0x0000000, 0x400000, CRC(a6c0f07f) SHA1(971803d1933d8296767d8766ea9f04dcd6ab065c) )
+ ROM_REGION( 0x0400000, "txtile", 0 ) // text
+ ROM_LOAD( "lhmn5ku7.u8", 0x0000000, 0x400000, CRC(a6c0f07f) SHA1(971803d1933d8296767d8766ea9f04dcd6ab065c) )
- ROM_REGION( 0x0c00000, "gfx3", 0 ) // sprite
- ROM_LOAD16_WORD_SWAP( "lhmn5kub.u34", 0x0000000, 0x400000, CRC(7753a7b6) SHA1(a2e8747ce83ea5a57e2fe62f2452de355d7f48b6) )
- ROM_LOAD16_WORD_SWAP( "lhmn5kua.u36", 0x0400000, 0x400000, CRC(1ac4402a) SHA1(c15acc6fce4fe0b54e92d14c31a1bd78acf2c8fc) )
- ROM_LOAD16_WORD_SWAP( "lhmn5ku9.u38", 0x0800000, 0x400000, CRC(e4e9b1b6) SHA1(4d4ad85fbe6a442d4f8cafad748bcae4af6245b7) )
+ ROM_REGION( 0x0c00000, "sprtile", 0 ) // sprite
+ ROM_LOAD( "lhmn5kub.u34", 0x0000000, 0x400000, CRC(7753a7b6) SHA1(a2e8747ce83ea5a57e2fe62f2452de355d7f48b6) )
+ ROM_LOAD( "lhmn5kua.u36", 0x0400000, 0x400000, CRC(1ac4402a) SHA1(c15acc6fce4fe0b54e92d14c31a1bd78acf2c8fc) )
+ ROM_LOAD( "lhmn5ku9.u38", 0x0800000, 0x400000, CRC(e4e9b1b6) SHA1(4d4ad85fbe6a442d4f8cafad748bcae4af6245b7) )
ROM_REGION( 0x0400000, "ymsnd:adpcma", 0 ) // adpcm data
ROM_LOAD( "lhmn5ku6.u53", 0x0000000, 0x400000, CRC(b320c5c9) SHA1(7c99da2d85597a3c008ed61a3aa5f47ad36186ec) )
ROM_END
+
ROM_START( 3on3dunk )
- ROM_REGION( 0x1000000, "maincpu", 0 ) // main cpu + data
- ROM_LOAD16_WORD_SWAP( "prog0_2_4_usa.u147", 0x0000000, 0x080000, CRC(957924ab) SHA1(6fe8ca711d11239310d58188e9d6d28cd27bc5af) )
- ROM_LOAD16_WORD_SWAP( "prog1_2_4_usa.u146", 0x0080000, 0x080000, CRC(2479e236) SHA1(729e6c85d34d6925c8d6557b138e2bed43e1de6a) )
- ROM_LOAD16_WORD_SWAP( "lh535l5y.u148", 0x0800000, 0x400000, CRC(aa33e02a) SHA1(86381ecf18fba9065cbc02112751c435bbf8b8b4) )
+ ROM_REGION( 0x0500000, "maincpu", 0 ) // main cpu + data
+ ROM_LOAD16_WORD_SWAP( "prog0_2_4_usa.u147", 0x0000000, 0x080000, CRC(957924ab) SHA1(6fe8ca711d11239310d58188e9d6d28cd27bc5af) )
+ ROM_LOAD16_WORD_SWAP( "prog1_2_4_usa.u146", 0x0080000, 0x080000, CRC(2479e236) SHA1(729e6c85d34d6925c8d6557b138e2bed43e1de6a) )
+ ROM_LOAD16_WORD_SWAP( "lh535l5y.u148", 0x0100000, 0x400000, CRC(aa33e02a) SHA1(86381ecf18fba9065cbc02112751c435bbf8b8b4) )
ROM_REGION( 0x0020000, "audiocpu", 0 ) // sound cpu
ROM_LOAD( "sound_prog_97_1_13.u107", 0x0000000, 0x020000, CRC(d9d42805) SHA1(ab5cb7c141d9c9ed5121ba4dbc1d0fa187bd9f68) )
- ROM_REGION( 0x0400000, "gfx1", 0 ) // bg
- ROM_LOAD16_WORD_SWAP( "lh525kwy.u40", 0x0000000, 0x400000, CRC(aaa426d1) SHA1(2f9a2981f336caf3188baec9a34f61452dee2203) )
+ ROM_REGION( 0x0400000, "bgtile", 0 ) // bg
+ ROM_LOAD( "lh525kwy.u40", 0x0000000, 0x400000, CRC(aaa426d1) SHA1(2f9a2981f336caf3188baec9a34f61452dee2203) )
- ROM_REGION( 0x0400000, "gfx2", 0 ) // text
- ROM_LOAD16_WORD_SWAP( "lh537nn4.u8", 0x0000000, 0x200000, CRC(2b7be1d8) SHA1(aac274a8f4028db7429478601a1761e61ab4f9a2) )
+ ROM_REGION( 0x0400000, "txtile", 0 ) // text
+ ROM_LOAD( "lh537nn4.u8", 0x0000000, 0x200000, CRC(2b7be1d8) SHA1(aac274a8f4028db7429478601a1761e61ab4f9a2) )
- ROM_REGION( 0x2000000, "gfx3", 0 ) // sprite
+ ROM_REGION( 0x2000000, "sprtile", 0 ) // sprite
ROM_LOAD( "lh535kwz.u34", 0x0000000, 0x400000, CRC(7372ce78) SHA1(ed2a861986357fad7ef983750cd906c3d722b862) )
ROM_LOAD( "lh535kv0.u36", 0x0400000, 0x400000, CRC(247e5741) SHA1(8d71d964791fb4b86e390bcdf7744f616d6357b1) )
ROM_LOAD( "lh535kv2.u38", 0x0800000, 0x400000, CRC(76449b1e) SHA1(b63d50c6f0dc91dc94dbcdda9842598529c1c26e) )
ROM_LOAD( "lh537nn5.u20", 0x0c00000, 0x200000, CRC(f457cd3b) SHA1(cc13f5dc44e4675c1074a365b10f34e684817d81) )
- /* 0x0e00000, 0x200000 empty */
+ // 0x0e00000, 0x200000 empty
ROM_LOAD( "lh536pnm.u32", 0x1000000, 0x400000, CRC(bc39e449) SHA1(5aea90b66ee03c70797ddc42dbcb064d83ce8cc7) )
ROM_REGION( 0x0400000, "ymsnd:adpcma", 0 ) // ADPCM data
ROM_LOAD( "lh5388r1.u53", 0x0000000, 0x100000, CRC(765d892f) SHA1(9b078c879d0437d1669bf4301fd52a768aa4d293) )
- ROM_REGION( 0x400000, "ymsnd:adpcmb", 0 ) // speech
+ ROM_REGION( 0x0400000, "ymsnd:adpcmb", 0 ) // speech
ROM_LOAD( "lh536pkl.u51", 0x0000000, 0x300000, CRC(e4919abf) SHA1(d6af4b9c6ff62f92216c9927027d3b2376416bae) )
ROM_END
+} // Anonymous namespace
/******************************************************************************
diff --git a/src/mame/drivers/jupace.cpp b/src/mame/drivers/jupace.cpp
index 5bb5768521f..0ce284a9a44 100644
--- a/src/mame/drivers/jupace.cpp
+++ b/src/mame/drivers/jupace.cpp
@@ -170,11 +170,12 @@ private:
SNAPSHOT_LOAD_MEMBER(ace_state::snapshot_cb)
{
+ std::vector<uint8_t> RAM(0x10000);
cpu_device *cpu = m_maincpu;
- uint8_t *RAM = memregion(cpu->tag())->base();
address_space &space = cpu->space(AS_PROGRAM);
- unsigned char ace_repeat, ace_byte, loop;
- int done=0, ace_index=0x2000;
+ unsigned char ace_repeat, ace_byte;
+ u16 ace_index=0x2000;
+ bool done = false;
if (m_ram->size() < 16*1024)
{
@@ -194,7 +195,7 @@ SNAPSHOT_LOAD_MEMBER(ace_state::snapshot_cb)
{
case 0x00:
logerror("File loaded!\r\n");
- done = 1;
+ done = true;
break;
case 0x01:
image.fread(&ace_byte, 1);
@@ -202,7 +203,7 @@ SNAPSHOT_LOAD_MEMBER(ace_state::snapshot_cb)
break;
default:
image.fread(&ace_repeat, 1);
- for (loop = 0; loop < ace_byte; loop++)
+ for (u8 loop = 0; loop < ace_byte; loop++)
RAM[ace_index++] = ace_repeat;
break;
}
diff --git a/src/mame/drivers/ladybug.cpp b/src/mame/drivers/ladybug.cpp
index fb66bf2408e..ddd822e762b 100644
--- a/src/mame/drivers/ladybug.cpp
+++ b/src/mame/drivers/ladybug.cpp
@@ -263,32 +263,32 @@ static INPUT_PORTS_START( ladybug )
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW0")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA(J2):8,7")
PORT_DIPSETTING( 0x03, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x02, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x04, 0x04, "High Score Names" )
+ PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) PORT_DIPLOCATION("SWA(J2):6")
PORT_DIPSETTING( 0x00, "3 Letters" )
PORT_DIPSETTING( 0x04, "10 Letters" )
- PORT_DIPNAME( 0x08, 0x08, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1)
+ PORT_DIPNAME( 0x08, 0x08, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1) PORT_DIPLOCATION("SWA(J2):5")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "Freeze" )
+ PORT_DIPNAME( 0x10, 0x10, "Freeze" ) PORT_DIPLOCATION("SWA(J2):4")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA(J2):3")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SWA(J2):2")
PORT_DIPSETTING( 0x40, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA(J2):1")
PORT_DIPSETTING( 0x80, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_START("DSW1")
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) )
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB(K2):8,7,6,5")
PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) )
@@ -300,7 +300,7 @@ static INPUT_PORTS_START( ladybug )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
/* settings 0x00 through 0x05 all give 1 Coin/1 Credit */
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) )
+ PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB(K2):4,3,2,1")
PORT_DIPSETTING( 0x60, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) )
@@ -361,24 +361,24 @@ static INPUT_PORTS_START( snapjack )
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW0")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA(J2):8,7")
PORT_DIPSETTING( 0x03, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x02, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x04, 0x04, "High Score Names" )
+ PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) PORT_DIPLOCATION("SWA(J2):6")
PORT_DIPSETTING( 0x00, "3 Letters" )
PORT_DIPSETTING( 0x04, "10 Letters" )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA(J2):5")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x10, 0x00, "unused1?" )
+ PORT_DIPNAME( 0x10, 0x10, "unused1?" ) PORT_DIPLOCATION("SWA(J2):4")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, "unused2?" )
+ PORT_DIPNAME( 0x20, 0x20, "unused2?" ) PORT_DIPLOCATION("SWA(J2):3")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA(J2):2,1")
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0xc0, "3" )
PORT_DIPSETTING( 0x80, "4" )
@@ -386,7 +386,7 @@ static INPUT_PORTS_START( snapjack )
PORT_START("DSW1")
/* coinage is slightly different from Lady Bug and Cosmic Avenger */
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) )
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB(K2):8,7,6,5")
PORT_DIPSETTING( 0x05, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) )
@@ -399,7 +399,7 @@ static INPUT_PORTS_START( snapjack )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
/* settings 0x00 through 0x04 all give 1 Coin/1 Credit */
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) )
+ PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB(K2):4,3,2,1")
PORT_DIPSETTING( 0x50, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x70, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) )
@@ -449,30 +449,30 @@ static INPUT_PORTS_START( cavenger )
PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW0")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA(J2):8,7")
PORT_DIPSETTING( 0x03, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x02, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x04, 0x04, "High Score Names" )
+ PORT_DIPNAME( 0x04, 0x04, "High Score Names" ) PORT_DIPLOCATION("SWA(J2):6")
PORT_DIPSETTING( 0x00, "3 Letters" )
PORT_DIPSETTING( 0x04, "10 Letters" )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA(J2):5")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x30, 0x00, "Initial High Score" )
+ PORT_DIPNAME( 0x30, 0x00, "Initial High Score" ) PORT_DIPLOCATION("SWA(J2):4,3")
PORT_DIPSETTING( 0x00, "0" )
PORT_DIPSETTING( 0x30, "5000" )
PORT_DIPSETTING( 0x20, "8000" )
PORT_DIPSETTING( 0x10, "10000" )
- PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA(J2):2,1")
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0xc0, "3" )
PORT_DIPSETTING( 0x80, "4" )
PORT_DIPSETTING( 0x40, "5" )
PORT_START("DSW1")
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) )
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB(K2):8,7,6,5")
PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) )
@@ -484,7 +484,7 @@ static INPUT_PORTS_START( cavenger )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
/* settings 0x00 through 0x05 all give 1 Coin/1 Credit */
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) )
+ PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB(K2):4,3,2,1")
PORT_DIPSETTING( 0x60, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) )
@@ -531,32 +531,32 @@ static INPUT_PORTS_START( dorodon )
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW0")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SWA(J2):8,7")
PORT_DIPSETTING( 0x03, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x02, DEF_STR( Medium ) )
PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SWA(J2):6")
PORT_DIPSETTING( 0x04, "20000" )
PORT_DIPSETTING( 0x00, "30000" )
- PORT_DIPNAME( 0x08, 0x08, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1)
+ PORT_DIPNAME( 0x08, 0x08, "Rack Test (Cheat)" ) PORT_CODE(KEYCODE_F1) PORT_DIPLOCATION("SWA(J2):5")
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "Freeze" )
+ PORT_DIPNAME( 0x10, 0x10, "Freeze" ) PORT_DIPLOCATION("SWA(J2):4")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SWA(J2):3")
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SWA(J2):2")
PORT_DIPSETTING( 0x40, DEF_STR( No ) )
PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("SWA(J2):1")
PORT_DIPSETTING( 0x80, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_START("DSW1")
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) )
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SWB(K2):8,7,6,5")
PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) )
@@ -568,7 +568,7 @@ static INPUT_PORTS_START( dorodon )
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
/* settings 0x00 through 0x05 all give 1 Coin/1 Credit */
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) )
+ PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SWB(K2):4,3,2,1")
PORT_DIPSETTING( 0x60, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0xa0, DEF_STR( 2C_1C ) )
@@ -1118,7 +1118,7 @@ ROM_START( mrsdyna )
ROM_REGION( 0x10000, "maincpu", 0 )
// NOTE: Mrs. Dynamite returns ROM ERROR in test mode. It does an 8-bit checksum on these 3
// ROMs and computes 0xFF. The answer to pass the test is 0x00.
- // THowever, these images were dumped twice, and seem to work fine.
+ // However, these images were dumped twice, and seem to work fine.
ROM_LOAD( "mrsd-8203a-r4.f3", 0x0000, 0x2000, CRC(c944062c) SHA1(c61fc327d67595e601f6a7e5e337646f5f9d351b) )
ROM_LOAD( "mrsd-8203a-n4.f2", 0x2000, 0x2000, CRC(d1b9c7bb) SHA1(c139c8ae5b14924eb04a265095a7ab95ac5370af) )
ROM_LOAD( "mrsd-8203a-m4.f1", 0x4000, 0x2000, CRC(d25b1dfe) SHA1(f68c6fb2cda37fcffbe7c3c2a3cc5cb372c4101b) )
diff --git a/src/mame/drivers/legionna.cpp b/src/mame/drivers/legionna.cpp
index cd74404c794..f95fdc9ae08 100644
--- a/src/mame/drivers/legionna.cpp
+++ b/src/mame/drivers/legionna.cpp
@@ -453,59 +453,68 @@ static INPUT_PORTS_START( legionna )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ???
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // ???
- PORT_START("DSW1")
- PORT_DIPNAME( 0x001f, 0x001f, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x0015, DEF_STR( 6C_1C ) )
- PORT_DIPSETTING( 0x0017, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x0019, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x001b, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x0003, DEF_STR( 8C_3C ) )
- PORT_DIPSETTING( 0x001d, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x0005, DEF_STR( 5C_3C ) )
- PORT_DIPSETTING( 0x0007, DEF_STR( 3C_2C ) )
- PORT_DIPSETTING( 0x001f, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x0009, DEF_STR( 2C_3C ) )
- PORT_DIPSETTING( 0x0013, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0011, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x000f, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x000d, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x000b, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x001e, "A 1/1 B 1/2" )
- PORT_DIPSETTING( 0x0014, "A 2/1 B 1/3" )
- PORT_DIPSETTING( 0x000a, "A 3/1 B 1/5" )
- PORT_DIPSETTING( 0x0000, "A 5/1 B 1/6" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Free_Play ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_START("DSW1") // Note: If the joystick is held in any direction at power-on the DIP switches are shown on screen.
+ PORT_DIPNAME( 0x0001, 0x0001, "Coin Mode" ) PORT_DIPLOCATION("SW01:1")
+ PORT_DIPSETTING( 0x0001, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x001e, 0x001e, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW01:2,3,4,5") PORT_CONDITION("DSW1", 0x0001, NOTEQUALS, 0x0000)
+ PORT_DIPSETTING( 0x001e, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0012, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x000e, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x001c, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x001a, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 3C_2C ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0016, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 5C_3C ) )
+ PORT_DIPSETTING( 0x0014, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 8C_3C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x0006, 0x0006, DEF_STR( Coin_A )) PORT_DIPLOCATION("SW01:2,3") PORT_CONDITION("DSW1", 0x0001, EQUALS, 0x0000)
+ PORT_DIPSETTING( 0x0006, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
+ PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Coin_B )) PORT_DIPLOCATION("SW01:4,5") PORT_CONDITION("DSW1", 0x0001, EQUALS, 0x0000)
+ PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW01:6") // manual says 'NOT IN USE'
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, "Freeze" )
+ PORT_DIPNAME( 0x0040, 0x0040, "Freeze" ) PORT_DIPLOCATION("SW01:7") // manual says 'NOT IN USE'
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW01:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW02:1,2")
PORT_DIPSETTING( 0x0200, "1" )
PORT_DIPSETTING( 0x0300, "2" )
PORT_DIPSETTING( 0x0100, "3" )
PORT_DIPSETTING( 0x0000, "4" )
- PORT_DIPNAME( 0x0400, 0x0400, "Extend" )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0400, DEF_STR( On ) )
- PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Extend Play" ) PORT_DIPLOCATION("SW02:3")
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW02:4") // manual says 'NOT IN USE'
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW02:5,6")
PORT_DIPSETTING( 0x2000, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x3000, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW02:7")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x4000, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW02:8")
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Yes ) )
PORT_START("PLAYERS34")
PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -566,57 +575,66 @@ static INPUT_PORTS_START( heatbrl )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x001f, 0x001f, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x0015, DEF_STR( 6C_1C ) )
- PORT_DIPSETTING( 0x0017, DEF_STR( 5C_1C ) )
- PORT_DIPSETTING( 0x0019, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x001b, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x0003, DEF_STR( 8C_3C ) )
- PORT_DIPSETTING( 0x001d, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x0005, DEF_STR( 5C_3C ) )
- PORT_DIPSETTING( 0x0007, DEF_STR( 3C_2C ) )
- PORT_DIPSETTING( 0x001f, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x0009, DEF_STR( 2C_3C ) )
- PORT_DIPSETTING( 0x0013, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0011, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x000f, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x000d, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x000b, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x001e, "A 1/1 B 1/2" )
- PORT_DIPSETTING( 0x0014, "A 2/1 B 1/3" )
- PORT_DIPSETTING( 0x000a, "A 3/1 B 1/5" )
- PORT_DIPSETTING( 0x0000, "A 5/1 B 1/6" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Free_Play ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Players ) )
- PORT_DIPSETTING( 0x0020, "2" )
- PORT_DIPSETTING( 0x0000, "4" )
- PORT_DIPNAME( 0x0040, 0x0040, "Freeze" )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) )
+ PORT_START("DSW1") // Note: If any player 1 button is held down at power-on the DIP switches are shown on screen for 40 seconds.
+ PORT_DIPNAME( 0x0001, 0x0001, "Coin Mode" ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x0001, "Mode 1" )
+ PORT_DIPSETTING( 0x0000, "Mode 2" )
+ PORT_DIPNAME( 0x001e, 0x001e, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:2,3,4,5") PORT_CONDITION("DSW1", 0x0001, NOTEQUALS, 0x0000)
+ PORT_DIPSETTING( 0x001e, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0012, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x000e, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x000c, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x001c, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x001a, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 3C_2C ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0016, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 5C_3C ) )
+ PORT_DIPSETTING( 0x0014, DEF_STR( 6C_1C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 8C_3C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x0006, 0x0006, DEF_STR( Coin_A )) PORT_DIPLOCATION("SW1:2,3") PORT_CONDITION("DSW1", 0x0001, EQUALS, 0x0000)
+ PORT_DIPSETTING( 0x0006, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
+ PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Coin_B )) PORT_DIPLOCATION("SW1:4,5") PORT_CONDITION("DSW1", 0x0001, EQUALS, 0x0000)
+ PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x0060, 0x0060, "Cabinet Setting" ) PORT_DIPLOCATION("SW1:6,7")
+ PORT_DIPSETTING( 0x0060, "2 Players & 1 Coin Slot" )
+ PORT_DIPSETTING( 0x0040, "4 Players & 1 Coin Slot" )
+ PORT_DIPSETTING( 0x0020, "4 Players (2x 2P Linked) & 1-4 Coin Slots" )
+ PORT_DIPSETTING( 0x0000, "4 Players & 4 Coin Slots" )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0200, "1" )
PORT_DIPSETTING( 0x0100, "2" )
PORT_DIPSETTING( 0x0300, "3" )
PORT_DIPSETTING( 0x0000, "5" )
- PORT_DIPNAME( 0x0400, 0x0400, "Extend" )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0400, DEF_STR( On ) )
- PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) )
+ PORT_DIPNAME( 0x0c00, 0x0c00, "Players Start & Join" ) PORT_DIPLOCATION("SW2:3,4") // Listed as-is from the manual but test mode shows different text for 2 choices
+ PORT_DIPSETTING( 0x0c00, DEF_STR( Normal ) ) // 1 or 2 players can start
+ PORT_DIPSETTING( 0x0800, "2 Start, 1 Can Join" ) // test shows 'Double Coin Start'. This is for a 4 player cab.
+ PORT_DIPSETTING( 0x0400, "2 Start, 2 Can Join" ) // test shows 'Normal'... probably for a 4-player cab or 2 linked cabs with a minimum of 2 players.
+ PORT_DIPSETTING( 0x0000, "1 Start, 2 Can Join" ) // test shows 'Double Coin Start'... also probably for a 4 player cab or 2 linked cabs.
+ PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x2000, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x4000, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Yes ) )
INPUT_PORTS_END
@@ -653,31 +671,31 @@ static INPUT_PORTS_START( godzilla )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW1")
- PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0001, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Service_Mode ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) )
+ PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3")
PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0100, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0200, DEF_STR( 2C_1C ) )
@@ -686,19 +704,19 @@ static INPUT_PORTS_START( godzilla )
PORT_DIPSETTING( 0x0500, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0300, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0400, DEF_STR( 1C_5C ) )
- PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) )
+ PORT_DIPNAME( 0x3800, 0x3800, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:4,5,6")
PORT_DIPSETTING( 0x3800, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x0000, "3 Coins/5 Credits" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 3C_5C ) )
PORT_DIPSETTING( 0x1000, DEF_STR( 2C_3C ) )
PORT_DIPSETTING( 0x3000, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x0800, DEF_STR( 2C_5C ) )
PORT_DIPSETTING( 0x2800, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x1800, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x2000, DEF_STR( 1C_5C ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
@@ -758,18 +776,18 @@ static INPUT_PORTS_START( grainbow )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) )
+ PORT_START("DSW1") // DIP switch sheet or manual needed to improve this.
+ PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x0002, "2")
PORT_DIPSETTING( 0x0003, "3")
PORT_DIPSETTING( 0x0000, "5")
PORT_DIPSETTING( 0x0001, "4")
- PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) // ???
+ PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:3,4") // could be something else, not difficulty???
PORT_DIPSETTING( 0x000c, "2" ) // Internal value stored at 0x1086cc and often used as table offset
PORT_DIPSETTING( 0x0008, "0" )
PORT_DIPSETTING( 0x0004, "4" )
- //PORT_DIPSETTING( 0x0000, "4" ) // Was one of these settings intended to be 6?
- PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x0000, "4" ) // Was one of these settings intended to be 6?
+ PORT_DIPNAME( 0x00f0, 0x00f0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:5,6,7,8")
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
PORT_DIPSETTING( 0x00a0, DEF_STR( 6C_1C ) )
PORT_DIPSETTING( 0x00b0, DEF_STR( 5C_1C ) )
@@ -786,54 +804,54 @@ static INPUT_PORTS_START( grainbow )
PORT_DIPSETTING( 0x0070, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0060, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x0050, DEF_STR( 1C_6C ) )
- PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:1")
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Demo_Sounds ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
PORT_DIPSETTING( 0x0200, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Service_Mode ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START("DSW2")
- PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:7") // toggling this has no effect in test mode, always shown on.
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:8") // toggling this has no effect in test mode, always shown on.
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -892,34 +910,34 @@ static INPUT_PORTS_START( denjinmk )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_START("DSW1")
- PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) )
+ PORT_START("DSW1") // DIP switch sheet or manual needed to improve this.
+ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( On ) )
- PORT_SERVICE( 0x0040, IP_ACTIVE_LOW )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Language ) ) // it actually skips the story entirely, so just remain JP as default
- PORT_DIPSETTING( 0x0080, DEF_STR( Japanese ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Yes ) )
+ PORT_SERVICE( 0x0040, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Language ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x0080, DEF_STR( Japanese ) ) // On English it skips the story entirely, so leave JP as default
PORT_DIPSETTING( 0x0000, DEF_STR( English ) )
- PORT_DIPNAME( 0x0f00, 0x0f00, DEF_STR( Coin_A ) )
+ PORT_DIPNAME( 0x0f00, 0x0f00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x0200, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0800, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x0600, "3 Coins / 5 Credits" )
+ PORT_DIPSETTING( 0x0600, DEF_STR( 3C_5C ) )
PORT_DIPSETTING( 0x0400, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x0100, DEF_STR( 4C_3C ) )
PORT_DIPSETTING( 0x0f00, DEF_STR( 1C_1C ) )
@@ -932,11 +950,11 @@ static INPUT_PORTS_START( denjinmk )
PORT_DIPSETTING( 0x0a00, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x0900, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
- PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coin_B ) )
+ PORT_DIPNAME( 0xf000, 0xf000, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:5,6,7,8")
PORT_DIPSETTING( 0x2000, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x5000, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x8000, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x6000, "3 Coins / 5 Credits" )
+ PORT_DIPSETTING( 0x6000, DEF_STR( 3C_5C ) )
PORT_DIPSETTING( 0x4000, DEF_STR( 3C_2C ) )
PORT_DIPSETTING( 0x1000, DEF_STR( 4C_3C ) )
PORT_DIPSETTING( 0xf000, DEF_STR( 1C_1C ) )
@@ -957,7 +975,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( cupsoc )
// p3 and p4 inputs are routed thru two 10-pins on lower-left of PCB
- // TODO: dip-conditional with coin slots
+ // TODO: dip-conditional with coin slots... Not actually needed as there are no conditional DIPs on this game.
// SEIBU_COIN_INPUTS override
PORT_START("COIN")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
@@ -1039,8 +1057,8 @@ static INPUT_PORTS_START( cupsoc )
PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x0018, DEF_STR( 1C_6C ) )
- PORT_DIPNAME( 0x0040, 0x0040, "Starting Coin" ) PORT_DIPLOCATION("SW1:7")
- PORT_DIPSETTING( 0x0040, DEF_STR( Normal ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "Starting Coin" ) PORT_DIPLOCATION("SW1:7") // x2 means at least 2 players must start which
+ PORT_DIPSETTING( 0x0040, DEF_STR( Normal ) ) // is similar to Heated Barrel SW2: 3,4
PORT_DIPSETTING( 0x0000, "x2" )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
@@ -1073,22 +1091,22 @@ static INPUT_PORTS_START( cupsoc )
PORT_DIPSETTING( 0x0003, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0002, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0001, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) )
PORT_DIPNAME( 0x000c, 0x000c, "Cabinet Setting" ) PORT_DIPLOCATION("SW3:3,4")
- PORT_DIPSETTING( 0x0000, "4 Players / 1 Coin Slot" )
- PORT_DIPSETTING( 0x0004, "4 Players / 4 Coin Slots" )
- PORT_DIPSETTING( 0x0008, "4 Players / 2 Coin Slots" )
PORT_DIPSETTING( 0x000c, "2 Players" )
+ PORT_DIPSETTING( 0x0008, "4 Players & 4 Coin Slots" )
+ PORT_DIPSETTING( 0x0004, "4 Players (2x 2P Linked) & 1-4 Coin Slots" )
+ PORT_DIPSETTING( 0x0000, "4 Players & 1 Coin Slot" )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW3:5")
- PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Yes ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW3:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:7")
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:7") // toggling this has no effect in test mode, always shown on.
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:8")
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unused ) ) PORT_DIPLOCATION("SW3:8") // toggling this has no effect in test mode, always shown on.
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
diff --git a/src/mame/drivers/lk3000.cpp b/src/mame/drivers/lk3000.cpp
new file mode 100644
index 00000000000..e1c7dd84b7d
--- /dev/null
+++ b/src/mame/drivers/lk3000.cpp
@@ -0,0 +1,354 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+// thanks-to:Sean Riddle
+/******************************************************************************
+
+Lexicon LK-3000, a pocket computer.
+It was also licensed to Nixdorf.
+
+Hardware notes:
+- 3870 MCU (Motorola brand) @ 4MHz(2MHz internal)
+- optional external ROM or RAM
+- 4*Litronix DL 1414 (16*17segs total)
+- 33-button keypad
+
+The CPU and memory is on the cartridge. In theory, any hardware configuration
+is possible, but it looks like they always used a 3870.
+
+cartridge types known:
+- CPU + 4/8KB ROM (ROM may be unpopulated)
+- CPU + 2*4KB ROM
+- CPU + 1KB battery-backed RAM (2*NEC D444)
+
+TODO:
+- external rom access doesn't work ("german" locks up)
+- external ram should be battery-backed
+
+******************************************************************************/
+
+#include "emu.h"
+
+#include "bus/generic/carts.h"
+#include "bus/generic/slot.h"
+#include "cpu/f8/f8.h"
+#include "machine/f3853.h"
+#include "video/dl1416.h"
+
+// internal artwork
+#include "lk3000.lh"
+
+
+namespace {
+
+class lk3000_state : public driver_device
+{
+public:
+ lk3000_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_dl1414(*this, "dl1414_%u", 0),
+ m_cart(*this, "cartslot"),
+ m_inputs(*this, "IN.%u", 0),
+ m_digits(*this, "digit%u", 0U)
+ { }
+
+ void lk3000(machine_config &config);
+
+ // CLR button is tied to MCU RESET pin
+ DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ // devices/pointers
+ required_device<cpu_device> m_maincpu;
+ required_device_array<dl1414_device, 4> m_dl1414;
+ required_device<generic_slot_device> m_cart;
+ required_ioport_array<8> m_inputs;
+ output_finder<16> m_digits;
+
+ void main_map(address_map &map);
+ void main_io(address_map &map);
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
+ template <int N> void update_display(offs_t offset, u16 data);
+
+ u8 p0_r();
+ void p0_w(u8 data);
+ u8 p1_r();
+ void p1_w(u8 data);
+ u8 p4_r();
+ void p4_w(u8 data);
+ u8 p5_r();
+ void p5_w(u8 data);
+
+ u8 m_p0 = 0;
+ u8 m_p1 = 0;
+ u8 m_p4 = 0;
+ u8 m_p5 = 0;
+
+ bool m_has_ram = false;
+ u8 m_ram[0x400];
+};
+
+void lk3000_state::machine_start()
+{
+ m_digits.resolve();
+ memset(m_ram, 0xff, 0x400);
+
+ // register for savestates
+ save_item(NAME(m_p0));
+ save_item(NAME(m_p1));
+ save_item(NAME(m_p4));
+ save_item(NAME(m_p5));
+ save_item(NAME(m_has_ram));
+ save_item(NAME(m_ram));
+}
+
+
+
+/******************************************************************************
+ I/O
+******************************************************************************/
+
+// misc
+
+DEVICE_IMAGE_LOAD_MEMBER(lk3000_state::cart_load)
+{
+ u32 size = m_cart->common_get_size("rom");
+ m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+
+ // extra ram (optional)
+ m_has_ram = image.get_feature("ram") != nullptr;
+
+ return image_init_result::PASS;
+}
+
+template <int N>
+void lk3000_state::update_display(offs_t offset, u16 data)
+{
+ m_digits[N * 4 + offset] = data;
+}
+
+
+// 3870 ports
+
+u8 lk3000_state::p0_r()
+{
+ return m_p0;
+}
+
+void lk3000_state::p0_w(u8 data)
+{
+ m_p0 = data;
+}
+
+u8 lk3000_state::p1_r()
+{
+ u8 data = m_p1;
+
+ // P10-P13: multiplexed inputs
+ if (m_p4 & 0x10)
+ data |= m_inputs[~m_p4 & 7]->read();
+
+ // read rom data
+ if (m_p5 & 0x20)
+ {
+ // P00-P06: A0-A6, P50-P54: A7-A11, P07 selects chip
+ u16 offset = (m_p0 & 0x7f) | (m_p5 << 7 & 0xf80) | (m_p0 << 5 & 0x1000);
+ data |= m_cart->read_rom(offset + 0x800);
+ }
+
+ // read ram data
+ if (m_has_ram && m_p4 & 0xc0)
+ {
+ u16 offset = (m_p0 & 0xff) | (m_p5 << 8 & 0x300);
+ data |= m_ram[offset];
+ }
+
+ return data;
+}
+
+void lk3000_state::p1_w(u8 data)
+{
+ // P10-P15,_P15: DL1414 data
+ for (int i = 0; i < 4; i++)
+ m_dl1414[i]->data_w((~data & 0x3f) | (data << 1 & 0x40));
+
+ m_p1 = data;
+}
+
+u8 lk3000_state::p4_r()
+{
+ return m_p4;
+}
+
+void lk3000_state::p4_w(u8 data)
+{
+ // P40,P41: DL1414 address
+ for (int i = 0; i < 4; i++)
+ m_dl1414[i]->addr_w(~data & 3);
+
+ // P42,P43,GND,P45: 7442 to DL1414 _WR
+ for (int i = 0; i < 4; i++)
+ m_dl1414[i]->wr_w(BIT(1 << (~data >> 2 & 0xb), i));
+
+ // P46: write ram data
+ if (m_has_ram && ~data & m_p4 & 0x40)
+ {
+ u16 offset = (m_p0 & 0xff) | (m_p5 << 8 & 0x300);
+ m_ram[offset] = m_p1;
+ }
+
+ // P40,P41,P42,P44: 7442 to keypad mux
+ m_p4 = data;
+}
+
+u8 lk3000_state::p5_r()
+{
+ return m_p5;
+}
+
+void lk3000_state::p5_w(u8 data)
+{
+ m_p5 = data;
+}
+
+
+
+/******************************************************************************
+ Address Maps
+******************************************************************************/
+
+void lk3000_state::main_map(address_map &map)
+{
+ map.global_mask(0x7ff);
+ map(0x0000, 0x07ff).r("cartslot", FUNC(generic_slot_device::read_rom));
+}
+
+void lk3000_state::main_io(address_map &map)
+{
+ map(0x00, 0x00).rw(FUNC(lk3000_state::p0_r), FUNC(lk3000_state::p0_w));
+ map(0x01, 0x01).rw(FUNC(lk3000_state::p1_r), FUNC(lk3000_state::p1_w));
+ map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write));
+}
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( lk3000 )
+ PORT_START("IN.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_NAME("A / MET")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_NAME("B / US")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_NAME("C / X>M")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_NAME("D / K")
+
+ PORT_START("IN.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_NAME("J / C1")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_NAME("K / C2")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_NAME("L / RM")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_NAME("M / %")
+
+ PORT_START("IN.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_NAME("S / EXC")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_NAME("T / +/-")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_NAME("U / M+")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("V / 0")
+
+ PORT_START("IN.3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('e') PORT_NAME("E / 7")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('f') PORT_NAME("F / 8")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('g') PORT_NAME("G / 9")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR('h') PORT_NAME(u8"H / ÷")
+
+ PORT_START("IN.4")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('n') PORT_NAME("N / 4")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('o') PORT_NAME("O / 5")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('p') PORT_NAME("P / 6")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('q') PORT_NAME("Q / +")
+
+ PORT_START("IN.5")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('w') PORT_NAME("W / 1")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('x') PORT_NAME("X / 2")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('y') PORT_NAME("Y / 3")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR('z') PORT_NAME("Z / .")
+
+ PORT_START("IN.6")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('?') PORT_NAME("? / P2")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) PORT_NAME("bs / P1")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('r') PORT_NAME("R / -")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR('i') PORT_NAME(u8"I / ×")
+
+ PORT_START("IN.7")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_NAME("def / P4")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t') PORT_NAME("stp / P3")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(' ') PORT_NAME("sp / =")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_NAME("f")
+
+ PORT_START("RESET")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHANGED_MEMBER(DEVICE_SELF, lk3000_state, reset_button, 0) PORT_CHAR(127) PORT_NAME("clr")
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Configs
+******************************************************************************/
+
+void lk3000_state::lk3000(machine_config &config)
+{
+ // basic machine hardware
+ F8(config, m_maincpu, 4_MHz_XTAL/2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &lk3000_state::main_map);
+ m_maincpu->set_addrmap(AS_IO, &lk3000_state::main_io);
+ m_maincpu->set_irq_acknowledge_callback("psu", FUNC(f38t56_device::int_acknowledge));
+
+ auto &psu(F38T56(config, "psu", 4_MHz_XTAL/2));
+ psu.set_int_vector(0x20);
+ psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
+ psu.read_a().set(FUNC(lk3000_state::p4_r));
+ psu.write_a().set(FUNC(lk3000_state::p4_w));
+ psu.read_b().set(FUNC(lk3000_state::p5_r));
+ psu.write_b().set(FUNC(lk3000_state::p5_w));
+
+ // video hardware
+ DL1414T(config, m_dl1414[0], u32(0)).update().set(FUNC(lk3000_state::update_display<0>));
+ DL1414T(config, m_dl1414[1], u32(0)).update().set(FUNC(lk3000_state::update_display<1>));
+ DL1414T(config, m_dl1414[2], u32(0)).update().set(FUNC(lk3000_state::update_display<2>));
+ DL1414T(config, m_dl1414[3], u32(0)).update().set(FUNC(lk3000_state::update_display<3>));
+ config.set_default_layout(layout_lk3000);
+
+ // cartridge
+ GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "lk3000");
+ m_cart->set_device_load(FUNC(lk3000_state::cart_load));
+ m_cart->set_must_be_loaded(true);
+
+ SOFTWARE_LIST(config, "cart_list").set_original("lk3000");
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( lk3000 )
+ ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 )
+ // none here, it's in the module slot
+ROM_END
+
+} // anonymous namespace
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+// YEAR NAME PARENT COMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
+CONS( 1979, lk3000, 0, 0, lk3000, lk3000, lk3000_state, empty_init, "Lexicon", "LK-3000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/m79amb.cpp b/src/mame/drivers/m79amb.cpp
index c855502faa1..1a3416dd16f 100644
--- a/src/mame/drivers/m79amb.cpp
+++ b/src/mame/drivers/m79amb.cpp
@@ -59,7 +59,6 @@ and two large (paddles pretending to be) guns.
#include "emu.h"
#include "includes/m79amb.h"
-#include "cpu/i8085/i8085.h"
#include "screen.h"
#include "speaker.h"
@@ -185,25 +184,26 @@ static INPUT_PORTS_START( m79amb )
INPUT_PORTS_END
-INTERRUPT_GEN_MEMBER(m79amb_state::m79amb_interrupt)
+uint8_t m79amb_state::inta_r()
{
- device.execute().set_input_line_and_vector(0, HOLD_LINE, 0xcf); /* Z80 - RST 08h */
+ m_maincpu->set_input_line(0, CLEAR_LINE);
+
+ // Vector is RST 1
+ return 0xcf;
}
void m79amb_state::m79amb(machine_config &config)
{
/* basic machine hardware */
- I8080(config, m_maincpu, XTAL(19'660'800) / 10);
+ I8080(config, m_maincpu, 19.6608_MHz_XTAL / 10);
m_maincpu->set_addrmap(AS_PROGRAM, &m79amb_state::main_map);
- m_maincpu->set_vblank_int("screen", FUNC(m79amb_state::m79amb_interrupt));
+ m_maincpu->in_inta_func().set(FUNC(m79amb_state::inta_r));
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_refresh_hz(60);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
- screen.set_size(32*8, 32*8);
- screen.set_visarea(0*8, 32*8-1, 4*8, 32*8-1);
+ screen.set_raw(19.6608_MHz_XTAL / 4, 320, 0, 256, 262, 32, 256);
screen.set_screen_update(FUNC(m79amb_state::screen_update_ramtek));
+ screen.screen_vblank().set_inputline(m_maincpu, 0, ASSERT_LINE);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -214,7 +214,7 @@ void m79amb_state::m79amb(machine_config &config)
ROM_START( m79amb )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x2000, "maincpu", 0 )
ROM_LOAD( "m79.10t", 0x0000, 0x0200, CRC(ccf30b1e) SHA1(c1a77f8dc81c491928f81121ca5c9b7f8753794f) )
ROM_LOAD( "m79.9t", 0x0200, 0x0200, CRC(daf807dd) SHA1(16cd9d553bfb111c8380966cbde39dbddd5fe58c) )
ROM_LOAD( "m79.8t", 0x0400, 0x0200, CRC(79fafa02) SHA1(440620f5be44febdd7c64014739dc71fb570cc92) )
diff --git a/src/mame/drivers/mbee.cpp b/src/mame/drivers/mbee.cpp
index 197cbd9d271..ce5bea06fd8 100644
--- a/src/mame/drivers/mbee.cpp
+++ b/src/mame/drivers/mbee.cpp
@@ -129,6 +129,7 @@ from Brett Selwood and Andrew Davies.
#include "emu.h"
#include "includes/mbee.h"
#include "formats/mbee_cas.h"
+#include "sound/sn76496.h"
#include "speaker.h"
void mbee_state::mbee_mem(address_map &map)
@@ -288,6 +289,14 @@ void mbee_state::mbee128_io(address_map &map)
map(0x50, 0x57).w(FUNC(mbee_state::port50_w));
}
+void mbee_state::mbee128p_io(address_map &map)
+{
+ map.global_mask(0xff);
+ map.unmap_value_high();
+ mbee128_io(map);
+ map(0x10, 0x13).w("sn1", FUNC(sn76489a_device::write));
+}
+
void mbee_state::mbee256_io(address_map &map)
{
map.unmap_value_high();
@@ -301,7 +310,7 @@ void mbee_state::mbee256_io(address_map &map)
map(0x000b, 0x000b).mirror(0xff00).w(FUNC(mbee_state::port0b_w));
map(0x000c, 0x000c).mirror(0xff00).r(m_crtc, FUNC(mc6845_device::status_r)).w(FUNC(mbee_state::m6545_index_w));
map(0x000d, 0x000d).mirror(0xff00).r(m_crtc, FUNC(mc6845_device::register_r)).w(FUNC(mbee_state::m6545_data_w));
- // map(0x0010, 0x0013).mirror(0xff00); Optional SN76489AN audio chip (never used)
+ map(0x0010, 0x0013).mirror(0xff00).w("sn1", FUNC(sn76489a_device::write));
map(0x0018, 0x001b).mirror(0xff00).r(FUNC(mbee_state::port18_r));
map(0x001c, 0x001f).mirror(0xff00).rw(FUNC(mbee_state::port1c_r), FUNC(mbee_state::port1c_w));
map(0x0044, 0x0047).mirror(0xff00).rw(m_fdc, FUNC(wd2793_device::read), FUNC(wd2793_device::write));
@@ -433,7 +442,7 @@ static INPUT_PORTS_START( mbee128 )
PORT_CONFSETTING( 0x20, "Amber")
PORT_CONFSETTING( 0x30, "White")
// Wire links on motherboard
- PORT_CONFNAME( 0xc0, 0x40, "PIO B7")
+ PORT_CONFNAME( 0xc0, 0x80, "PIO B7")
PORT_CONFSETTING( 0x00, "VS") // sync pulse to enable telcom clock
PORT_CONFSETTING( 0x40, "RTC") // RTC IRQ for clock
PORT_CONFSETTING( 0x80, "Tied high") // default resistor to vcc
@@ -568,7 +577,7 @@ static INPUT_PORTS_START( mbee256 )
PORT_CONFSETTING( 0x00, DEF_STR(No))
PORT_CONFSETTING( 0x01, DEF_STR(Yes))
// Wire links on motherboard
- PORT_CONFNAME( 0xc0, 0x40, "PIO B7")
+ PORT_CONFNAME( 0xc0, 0x80, "PIO B7")
PORT_CONFSETTING( 0x00, "VS") // sync pulse to enable telcom clock
PORT_CONFSETTING( 0x40, "RTC") // RTC IRQ must be used on teleterm
PORT_CONFSETTING( 0x80, "Tied high") // default resistor to vcc
@@ -688,8 +697,12 @@ void mbee_state::mbee(machine_config &config)
m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
m_cassette->set_interface("mbee_cass");
- GENERIC_SOCKET(config, "optrom1", generic_plain_slot, "mbee_net", "mbn").set_device_load(FUNC(mbee_state::pak_load<1U>)); // net
- GENERIC_SOCKET(config, "optrom2", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<2U>)); // edasm
+ generic_slot_device &optrom1(GENERIC_SOCKET(config, "optrom1", generic_plain_slot, "mbee_net", "mbn")); // net
+ optrom1.set_device_load(FUNC(mbee_state::pak_load<1U>));
+ optrom1.set_device_unload(FUNC(mbee_state::pak_unload<1U>));
+ generic_slot_device &optrom2(GENERIC_SOCKET(config, "optrom2", generic_plain_slot, "mbee_pak", "mbp")); // edasm
+ optrom2.set_device_load(FUNC(mbee_state::pak_load<2U>));
+ optrom2.set_device_unload(FUNC(mbee_state::pak_unload<2U>));
SOFTWARE_LIST(config, "cass_list").set_original("mbee_cass").set_filter("1");
SOFTWARE_LIST(config, "quik_list").set_original("mbee_quik").set_filter("1");
@@ -752,13 +765,27 @@ void mbee_state::mbeeic(machine_config &config)
m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
m_cassette->set_interface("mbee_cass");
- GENERIC_SOCKET(config, "optrom1", generic_plain_slot, "mbee_net", "mbn").set_device_load(FUNC(mbee_state::pak_load<1U>)); // net
- GENERIC_SOCKET(config, "optrom2", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<2U>)); // pak0
- GENERIC_SOCKET(config, "optrom3", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<3U>)); // pak1
- GENERIC_SOCKET(config, "optrom4", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<4U>)); // pak2
- GENERIC_SOCKET(config, "optrom5", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<5U>)); // pak3
- GENERIC_SOCKET(config, "optrom6", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<6U>)); // pak4
- GENERIC_SOCKET(config, "optrom7", generic_plain_slot, "mbee_pak", "mbp").set_device_load(FUNC(mbee_state::pak_load<7U>)); // pak5
+ generic_slot_device &optrom1(GENERIC_SOCKET(config, "optrom1", generic_plain_slot, "mbee_net", "mbn")); // net
+ optrom1.set_device_load(FUNC(mbee_state::pak_load<1U>));
+ optrom1.set_device_unload(FUNC(mbee_state::pak_unload<1U>));
+ generic_slot_device &optrom2(GENERIC_SOCKET(config, "optrom2", generic_plain_slot, "mbee_pak", "mbp")); // pak0
+ optrom2.set_device_load(FUNC(mbee_state::pak_load<2U>));
+ optrom2.set_device_unload(FUNC(mbee_state::pak_unload<2U>));
+ generic_slot_device &optrom3(GENERIC_SOCKET(config, "optrom3", generic_plain_slot, "mbee_pak", "mbp")); // pak1
+ optrom3.set_device_load(FUNC(mbee_state::pak_load<3U>));
+ optrom3.set_device_unload(FUNC(mbee_state::pak_unload<3U>));
+ generic_slot_device &optrom4(GENERIC_SOCKET(config, "optrom4", generic_plain_slot, "mbee_pak", "mbp")); // pak2
+ optrom4.set_device_load(FUNC(mbee_state::pak_load<4U>));
+ optrom4.set_device_unload(FUNC(mbee_state::pak_unload<4U>));
+ generic_slot_device &optrom5(GENERIC_SOCKET(config, "optrom5", generic_plain_slot, "mbee_pak", "mbp")); // pak3
+ optrom5.set_device_load(FUNC(mbee_state::pak_load<5U>));
+ optrom5.set_device_unload(FUNC(mbee_state::pak_unload<5U>));
+ generic_slot_device &optrom6(GENERIC_SOCKET(config, "optrom6", generic_plain_slot, "mbee_pak", "mbp")); // pak4
+ optrom6.set_device_load(FUNC(mbee_state::pak_load<6U>));
+ optrom6.set_device_unload(FUNC(mbee_state::pak_unload<6U>));
+ generic_slot_device &optrom7(GENERIC_SOCKET(config, "optrom7", generic_plain_slot, "mbee_pak", "mbp")); // pak5
+ optrom7.set_device_load(FUNC(mbee_state::pak_load<7U>));
+ optrom7.set_device_unload(FUNC(mbee_state::pak_unload<7U>));
SOFTWARE_LIST(config, "cass_list").set_original("mbee_cass").set_filter("2");
SOFTWARE_LIST(config, "quik_list").set_original("mbee_quik").set_filter("2");
@@ -794,8 +821,8 @@ void mbee_state::mbee56(machine_config &config)
m_fdc->intrq_wr_callback().set(FUNC(mbee_state::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(mbee_state::fdc_drq_w));
m_fdc->enmf_rd_callback().set_constant(0);
- FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "525qd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "525qd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
SOFTWARE_LIST(config, "flop_list").set_original("mbee_flop").set_filter("1");
remove_carts(config);
@@ -818,30 +845,34 @@ void mbee_state::mbee128p(machine_config &config)
{
mbeeppc(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mbee_state::mbee256_mem);
- m_maincpu->set_addrmap(AS_IO, &mbee_state::mbee128_io);
+ m_maincpu->set_addrmap(AS_IO, &mbee_state::mbee128p_io);
WD2793(config, m_fdc, 4_MHz_XTAL / 2);
m_fdc->intrq_wr_callback().set(FUNC(mbee_state::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(mbee_state::fdc_drq_w));
m_fdc->enmf_rd_callback().set_constant(0);
- FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "525qd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "525qd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
+ FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
+
+ SN76489A(config, "sn1", 13.5_MHz_XTAL / 4).add_route(ALL_OUTPUTS, "mono", 0.50);
SOFTWARE_LIST(config, "flop_list").set_original("mbee_flop").set_filter("3");
remove_carts(config);
remove_quick(config);
}
+void mbee_state::mbeepp(machine_config &config)
+{
+ mbee128p(config);
+ SOFTWARE_LIST(config.replace(), "flop_list").set_original("mbee_flop").set_filter("2,3");
+}
+
void mbee_state::mbee256(machine_config &config)
{
mbee128p(config);
m_maincpu->set_addrmap(AS_PROGRAM, &mbee_state::mbee256_mem);
m_maincpu->set_addrmap(AS_IO, &mbee_state::mbee256_io);
- config.device_remove("fdc:0");
- config.device_remove("fdc:1");
- FLOPPY_CONNECTOR(config, m_floppy0, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
- FLOPPY_CONNECTOR(config, m_floppy1, mbee_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats).enable_sound(true);
TIMER(config, "newkb_timer").configure_periodic(FUNC(mbee_state::newkb_timer), attotime::from_hz(50));
SOFTWARE_LIST(config.replace(), "flop_list").set_original("mbee_flop").set_filter("4");
@@ -1154,4 +1185,4 @@ COMP( 1986, mbeeppc, mbee, 0, mbeeppc, mbee, mbee_state, init_mbeep
COMP( 1986, mbeett, mbee, 0, mbeett, mbee256, mbee_state, init_mbeett, "Microbee Systems", "Microbee Teleterm", MACHINE_SUPPORTS_SAVE )
COMP( 1986, mbee128p, mbee, 0, mbee128p, mbee128, mbee_state, init_mbee128p, "Microbee Systems", "Microbee 128k Premium", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 1987, mbee256, mbee, 0, mbee256, mbee256, mbee_state, init_mbee256, "Microbee Systems", "Microbee 256TC", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-COMP( 2012, mbeepp, mbee, 0, mbee256, mbee128, mbee_state, init_mbeepp, "Microbee Systems", "Microbee Premium Plus", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 2012, mbeepp, mbee, 0, mbeepp, mbee128, mbee_state, init_mbeepp, "Microbee Systems", "Microbee Premium Plus+", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mc10.cpp b/src/mame/drivers/mc10.cpp
index c389f7055c9..82764d6f977 100644
--- a/src/mame/drivers/mc10.cpp
+++ b/src/mame/drivers/mc10.cpp
@@ -4,16 +4,14 @@
TRS-80 Radio Shack MicroColor Computer
- May 2020: Added emulation for Darren Atkinson's MCX 128.
-
***************************************************************************/
-
#include "emu.h"
#include "cpu/m6800/m6801.h"
#include "imagedev/cassette.h"
#include "imagedev/printer.h"
+#include "bus/mc10/mc10_cart.h"
#include "bus/rs232/rs232.h"
#include "machine/ram.h"
#include "machine/timer.h"
@@ -26,7 +24,6 @@
#include "formats/coco_cas.h"
-
namespace
{
@@ -41,33 +38,30 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_ram(*this, RAM_TAG)
- , m_bank1(*this, "bank1")
- , m_bank2(*this, "bank2")
+ , m_mc10cart(*this, "ext")
, m_mc6847(*this, "mc6847")
- , m_ef9345(*this, "ef9345")
, m_dac(*this, "dac")
, m_cassette(*this, "cassette")
, m_rs232(*this, "rs232")
, m_pb(*this, "pb%u", 0U)
- { }
+ {}
- void alice90(machine_config &config);
- void alice32(machine_config &config);
+ void mc10_base(machine_config &config);
+ void mc10_video(machine_config &config);
void mc10(machine_config &config);
+ void alice(machine_config &config);
+ void mc10_bfff_w_dac(uint8_t data);
+ uint8_t mc10_bfff_r();
protected:
- uint8_t mc10_bfff_r();
void mc10_bfff_w(uint8_t data);
uint8_t mc10_port1_r();
void mc10_port1_w(uint8_t data);
uint8_t mc10_port2_r();
void mc10_port2_w(uint8_t data);
- uint8_t alice90_bfff_r();
- void alice32_bfff_w(uint8_t data);
uint8_t mc6847_videoram_r(offs_t offset);
- TIMER_DEVICE_CALLBACK_MEMBER(alice32_scanline);
// device-level overrides
virtual void driver_start() override;
@@ -75,74 +69,48 @@ protected:
required_device<m6803_cpu_device> m_maincpu;
required_device<ram_device> m_ram;
- required_memory_bank m_bank1;
- optional_memory_bank m_bank2;
+ optional_device<mc10cart_slot_device> m_mc10cart;
- uint8_t *m_ram_base;
- uint32_t m_ram_size;
uint8_t m_keyboard_strobe;
uint8_t m_port2;
uint8_t read_keyboard_strobe(bool single_line);
+ mc10cart_slot_device &mc10cart() { return *m_mc10cart; }
+
private:
- void alice32_mem(address_map &map);
- void alice90_mem(address_map &map);
void mc10_mem(address_map &map);
optional_device<mc6847_base_device> m_mc6847;
- optional_device<ef9345_device> m_ef9345;
required_device<dac_bit_interface> m_dac;
required_device<cassette_image_device> m_cassette;
required_device<rs232_port_device> m_rs232;
required_ioport_array<8> m_pb;
};
-class mcx128_state : public mc10_state
+class alice32_state : public mc10_state
{
public:
- mcx128_state(const machine_config &mconfig, device_type type, const char *tag)
+ alice32_state(const machine_config &mconfig, device_type type, const char *tag)
: mc10_state(mconfig, type, tag)
- , m_mcx_ram(*this, "mcx_ram")
- , m_mcx_cart_rom_base(*this, "cart")
- , m_mcx_int_rom_base(*this, "maincpu")
- , m_bank3(*this, "bank3")
- , m_bank4r(*this, "bank4r")
- , m_bank4w(*this, "bank4w")
- , m_bank5r(*this, "bank5r")
- , m_bank5w(*this, "bank5w")
- , m_bank6r(*this, "bank6r")
- , m_bank6w(*this, "bank6w")
- { }
-
- void mcx128(machine_config &config);
-
-private:
- uint8_t mcx128_bf00_r(offs_t offset);
- void mcx128_bf00_w(offs_t offset, uint8_t data);
+ , m_ef9345(*this, "ef9345")
+ {}
- void mcx128_mem(address_map &map);
- void update_mcx128_banking();
+ void alice32(machine_config &config);
+ void alice90(machine_config &config);
+ void alice32_bfff_w(uint8_t data);
+ uint8_t alice90_bfff_r();
+protected:
// device-level overrides
virtual void driver_start() override;
- virtual void driver_reset() override;
- required_device<ram_device> m_mcx_ram;
- required_region_ptr<u8> m_mcx_cart_rom_base;
- required_region_ptr<u8> m_mcx_int_rom_base;
- required_memory_bank m_bank3;
- required_memory_bank m_bank4r;
- required_memory_bank m_bank4w;
- required_memory_bank m_bank5r;
- required_memory_bank m_bank5w;
- required_memory_bank m_bank6r;
- required_memory_bank m_bank6w;
-
- uint8_t *m_mcx_ram_base;
-
- uint8_t m_bank_control;
- uint8_t m_map_control;
+ TIMER_DEVICE_CALLBACK_MEMBER(alice32_scanline);
+ required_device<ef9345_device> m_ef9345;
+
+private:
+ void alice32_mem(address_map &map);
+ void alice90_mem(address_map &map);
};
/***************************************************************************
@@ -162,16 +130,16 @@ uint8_t mc10_state::read_keyboard_strobe(bool single_line)
read = true;
}
}
+
return result;
}
-
uint8_t mc10_state::mc10_bfff_r()
{
return read_keyboard_strobe(false);
}
-uint8_t mc10_state::alice90_bfff_r()
+uint8_t alice32_state::alice90_bfff_r()
{
return read_keyboard_strobe(true);
}
@@ -186,119 +154,29 @@ void mc10_state::mc10_bfff_w(uint8_t data)
m_mc6847->ag_w(BIT(data, 5));
m_mc6847->css_w(BIT(data, 6));
- // bit 7, dac output
- m_dac->write(BIT(data, 7));
+ mc10_bfff_w_dac(data);
}
-void mc10_state::alice32_bfff_w(uint8_t data)
+void mc10_state::mc10_bfff_w_dac(uint8_t data)
{
// bit 7, dac output
m_dac->write(BIT(data, 7));
}
-/***************************************************************************
- $bf00: RAM Bank Control Register
- 7 6 5 4 3 2 1 0
- | | | | | | | |
- | | | | | | | +- Bank Selection for Page 0
- | | | | | | +--- Bank Selection for Page 1
- +-+-+-+-+-+----- N/C
- $bf01: ROM Map Control Register
- 7 6 5 4 3 2 1 0 | reading | writing |
- | | | | | | | | 0 0 - 16K External ROM 16K RAM
- | | | | | | | +-\_ 0 1 - 8K RAM / 8K External ROM 16K RAM
- | | | | | | +---/ 1 0 - 8K RAM / 8K Internal ROM 16K RAM
- | | | | | | 1 1 - 16K RAM 16K RAM
- +-+-+-+-+-+--------N/C
-***************************************************************************/
-
-void mcx128_state::update_mcx128_banking()
+void alice32_state::alice32_bfff_w(uint8_t data)
{
- int32_t bank_offset_page_0 = 0x10000 * BIT(m_bank_control,0);
- int32_t bank_offset_page_1 = 0x10000 * BIT(m_bank_control,1);
-
- // 0x0000 - 0x3fff
- m_bank1->set_base(m_mcx_ram_base + bank_offset_page_0 + 0);
-
- // 0x4000 - 0x4fff
- if( bank_offset_page_1 == 0)
- m_bank2->set_base(m_ram_base); /* internal 4K when page is 0 */
- else
- m_bank2->set_base(m_mcx_ram_base + bank_offset_page_1 + 0x8000);
-
- // 0x5000 - 0xbeff
- m_bank3->set_base(m_mcx_ram_base + bank_offset_page_1 + 0x8000 + 0x1000);
-
- // 0xc000 - 0xdfff
- m_bank4w->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x4000);
-
- // 0xe000 - 0xfeff
- m_bank5w->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x6000);
-
- // 0xff00 - 0xffff
- m_bank6w->set_base(m_mcx_ram_base + 0 + 0x7f00); /* always bank 0 */
-
- switch( m_map_control )
- {
- case 0:
- m_bank4r->set_base(m_mcx_cart_rom_base);
- m_bank5r->set_base(m_mcx_cart_rom_base + 0x2000);
- m_bank6r->set_entry(0);
- break;
-
- case 1:
- m_bank4r->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x4000);
- m_bank5r->set_base(m_mcx_cart_rom_base + 0x2000 + 0x2000); // invalid address, what should it be?
- m_bank6r->set_entry(1);
- break;
-
- case 2:
- m_bank4r->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x4000);
- m_bank5r->set_base(m_mcx_int_rom_base);
- m_bank6r->set_entry(2);
- break;
-
- case 3:
- m_bank4r->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x4000);
- m_bank5r->set_base(m_mcx_ram_base + bank_offset_page_0 + 0x6000);
- m_bank6r->set_entry(3); /* always bank 0 */
- break;
-
- default:
- // can't get here
- break;
- }
-}
-
-uint8_t mcx128_state::mcx128_bf00_r(offs_t offset)
-{
- if( (offset & 1) == 0 ) return m_bank_control;
-
- return m_map_control;
-}
-
-void mcx128_state::mcx128_bf00_w(offs_t offset, uint8_t data)
-{
- if( (offset & 1) == 0 )
- m_bank_control = data & 3;
- else
- m_map_control = data & 3;
-
- update_mcx128_banking();
+ mc10_bfff_w_dac(data);
}
-
/***************************************************************************
MC6803 I/O
***************************************************************************/
-/* keyboard strobe */
uint8_t mc10_state::mc10_port1_r()
{
return m_keyboard_strobe;
}
-/* keyboard strobe */
void mc10_state::mc10_port1_w(uint8_t data)
{
m_keyboard_strobe = data;
@@ -329,7 +207,6 @@ void mc10_state::mc10_port2_w(uint8_t data)
{
// bit 0, cassette & printer output
m_cassette->output( BIT(data, 0) ? +1.0 : -1.0);
-
m_rs232->write_txd(BIT(data, 0) ? 1 : 0);
m_port2 = data;
@@ -343,13 +220,14 @@ void mc10_state::mc10_port2_w(uint8_t data)
uint8_t mc10_state::mc6847_videoram_r(offs_t offset)
{
if (offset == ~0) return 0xff;
- m_mc6847->inv_w(BIT(m_ram_base[offset], 6));
- m_mc6847->as_w(BIT(m_ram_base[offset], 7));
- return m_ram_base[offset];
+ uint8_t result = m_ram->read(offset);
+ m_mc6847->inv_w(BIT(result, 6));
+ m_mc6847->as_w(BIT(result, 7));
+ return result;
}
-TIMER_DEVICE_CALLBACK_MEMBER(mc10_state::alice32_scanline)
+TIMER_DEVICE_CALLBACK_MEMBER(alice32_state::alice32_scanline)
{
m_ef9345->update_scanline((uint16_t)param);
}
@@ -358,73 +236,37 @@ TIMER_DEVICE_CALLBACK_MEMBER(mc10_state::alice32_scanline)
DRIVER INIT
***************************************************************************/
-
void mc10_state::driver_reset()
{
- /* initialize keyboard strobe */
m_keyboard_strobe = 0x00;
}
void mc10_state::driver_start()
{
- // call base device_start
driver_device::driver_start();
- address_space &prg = m_maincpu->space(AS_PROGRAM);
-
- /* initialize memory */
- m_ram_base = m_ram->pointer();
- m_ram_size = m_ram->size();
- m_bank1->set_base(m_ram_base);
+ save_item(NAME(m_keyboard_strobe));
- /* initialize memory expansion */
- if (m_bank2)
- {
- if (m_ram_size == 20 * 1024)
- m_bank2->set_base(m_ram_base + 0x1000);
- else if (m_ram_size == 24 * 1024)
- m_bank2->set_base(m_ram_base + 0x2000);
- else if (m_ram_size != 32 * 1024) //ensure that is not alice90
- prg.nop_readwrite(0x5000, 0x8fff);
- }
+ address_space &space = m_maincpu->space(AS_PROGRAM);
+ u32 ram_size = m_ram->size();
- /* register for state saving */
- save_item(NAME(m_keyboard_strobe));
+ // don't step on hardware page at 0xbf00
+ if (ram_size == 0x8000)
+ ram_size -= 0x100;
- //for alice32 force port4 DDR to 0xff at startup
- //if (!strcmp(machine().system().name, "alice32") || !strcmp(machine().system().name, "alice90"))
- //m_maincpu->m6801_io_w(prg, 0x05, 0xff);
+ space.install_ram(0x4000, 0x4000+ram_size-1, m_ram->pointer());
}
-void mcx128_state::driver_start()
+void alice32_state::driver_start()
{
- // call base device_start
driver_device::driver_start();
- /* initialize memory */
- m_ram_base = m_ram->pointer();
- m_ram_size = m_ram->size();
-
- m_mcx_ram_base = m_mcx_ram->pointer();
-
- save_item(NAME(m_bank_control));
- save_item(NAME(m_map_control));
-
- m_bank6r->configure_entry(0, m_mcx_cart_rom_base + 0x3f00);
- m_bank6r->configure_entry(1, m_mcx_cart_rom_base + 0x5f00); // invalid address, what should it be?
- m_bank6r->configure_entry(2, m_mcx_int_rom_base + 0x1f00);
- m_bank6r->configure_entry(3, m_mcx_ram_base + 0x7f00);
-}
-
-void mcx128_state::driver_reset()
-{
- // call base device_start
- mc10_state::driver_reset();
+ save_item(NAME(m_keyboard_strobe));
- m_bank_control = 0;
- m_map_control = 0;
+ address_space &space = m_maincpu->space(AS_PROGRAM);
+ u32 ram_size = m_ram->size();
- update_mcx128_banking();
+ space.install_ram(0x3000, 0x3000+ram_size-1, m_ram->pointer());
}
/***************************************************************************
@@ -433,47 +275,28 @@ void mcx128_state::driver_reset()
void mc10_state::mc10_mem(address_map &map)
{
- map(0x0100, 0x3fff).noprw(); /* unused */
- map(0x4000, 0x4fff).bankrw("bank1"); /* 4k internal ram */
- map(0x5000, 0x8fff).bankrw("bank2"); /* 16k memory expansion */
- map(0x9000, 0xbffe).noprw(); /* unused */
+ // mc10 / alice: RAM start at 0x4000, installed in driver_start
map(0xbfff, 0xbfff).rw(FUNC(mc10_state::mc10_bfff_r), FUNC(mc10_state::mc10_bfff_w));
- map(0xe000, 0xffff).rom().region("maincpu", 0x0000); /* ROM */
+ map(0xe000, 0xffff).rom().region("maincpu", 0x0000);
}
-void mc10_state::alice32_mem(address_map &map)
+void alice32_state::alice32_mem(address_map &map)
{
- map(0x0100, 0x2fff).noprw(); /* unused */
- map(0x3000, 0x4fff).bankrw("bank1"); /* 8k internal ram */
- map(0x5000, 0x8fff).bankrw("bank2"); /* 16k memory expansion */
- map(0x9000, 0xafff).noprw(); /* unused */
+ // alice32: RAM start at 0x3000, installed in driver_start
map(0xbf20, 0xbf29).rw(m_ef9345, FUNC(ef9345_device::data_r), FUNC(ef9345_device::data_w));
- map(0xbfff, 0xbfff).rw(FUNC(mc10_state::mc10_bfff_r), FUNC(mc10_state::alice32_bfff_w));
- map(0xc000, 0xffff).rom().region("maincpu", 0x0000); /* ROM */
+ map(0xbfff, 0xbfff).rw(FUNC(mc10_state::mc10_bfff_r), FUNC(alice32_state::alice32_bfff_w));
+ map(0xc000, 0xffff).rom().region("maincpu", 0x0000);
}
-void mc10_state::alice90_mem(address_map &map)
+void alice32_state::alice90_mem(address_map &map)
{
- map(0x0100, 0x2fff).noprw(); /* unused */
- map(0x3000, 0xafff).bankrw("bank1"); /* 32k internal ram */
+ // alice90: RAM start at 0x3000, installed in driver_start
map(0xbf20, 0xbf29).rw(m_ef9345, FUNC(ef9345_device::data_r), FUNC(ef9345_device::data_w));
- map(0xbfff, 0xbfff).rw(FUNC(mc10_state::alice90_bfff_r), FUNC(mc10_state::alice32_bfff_w));
- map(0xc000, 0xffff).rom().region("maincpu", 0x0000); /* ROM */
+ map(0xbfff, 0xbfff).rw(FUNC(alice32_state::alice90_bfff_r), FUNC(alice32_state::alice32_bfff_w));
+ map(0xc000, 0xffff).rom().region("maincpu", 0x0000);
}
-void mcx128_state::mcx128_mem(address_map &map)
-{
- map(0x0000, 0x3fff).bankrw("bank1");
- map(0x4000, 0x4fff).bankrw("bank2");
- map(0x5000, 0xbeff).bankrw("bank3");
- map(0xbf00, 0xbf01).rw(FUNC(mcx128_state::mcx128_bf00_r), FUNC(mcx128_state::mcx128_bf00_w));
- map(0xbf02, 0xbf7f).noprw(); /* unused */
- map(0xbf80, 0xbffe).noprw(); /* unused */
- map(0xbfff, 0xbfff).rw(FUNC(mcx128_state::mc10_bfff_r), FUNC(mcx128_state::mc10_bfff_w));
- map(0xc000, 0xdfff).bankr("bank4r").bankw("bank4w");
- map(0xe000, 0xfeff).bankr("bank5r").bankw("bank5w");
- map(0xff00, 0xffff).bankr("bank6r").bankw("bank6w");
-}
+
/***************************************************************************
INPUT PORTS
@@ -659,7 +482,7 @@ DEVICE_INPUT_DEFAULTS_END
MACHINE DRIVERS
***************************************************************************/
-void mc10_state::mc10(machine_config &config)
+void mc10_state::mc10_base(machine_config &config)
{
/* basic machine hardware */
M6803(config, m_maincpu, XTAL(3'579'545)); /* 0,894886 MHz */
@@ -669,42 +492,68 @@ void mc10_state::mc10(machine_config &config)
m_maincpu->in_p2_cb().set(FUNC(mc10_state::mc10_port2_r));
m_maincpu->out_p2_cb().set(FUNC(mc10_state::mc10_port2_w));
- /* video hardware */
- SCREEN(config, "screen", SCREEN_TYPE_RASTER);
-
- mc6847_ntsc_device &vdg(MC6847_NTSC(config, "mc6847", XTAL(3'579'545)));
- vdg.set_screen("screen");
- vdg.input_callback().set(FUNC(mc10_state::mc6847_videoram_r));
-
/* sound hardware */
SPEAKER(config, "speaker").front_center();
DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.0625);
CASSETTE(config, m_cassette);
- m_cassette->set_formats(coco_cassette_formats);
+ m_cassette->set_formats(alice32_cassette_formats);
m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
m_cassette->add_route(ALL_OUTPUTS, "speaker", 0.05);
m_cassette->set_interface("mc10_cass");
/* printer */
- rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "printer"));
- rs232.set_option_device_input_defaults("printer", DEVICE_INPUT_DEFAULTS_NAME(printer));
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "rs_printer"));
+ rs232.set_option_device_input_defaults("rs_printer", DEVICE_INPUT_DEFAULTS_NAME(printer));
+}
+void mc10_state::mc10_video(machine_config &config)
+{
/* internal ram */
- RAM(config, m_ram).set_default_size("20K").set_extra_options("4K");
+ RAM(config, m_ram).set_default_size("4K").set_extra_options("8K,20K,32K");
+
+ /* video hardware */
+ SCREEN(config, "screen", SCREEN_TYPE_RASTER).set_raw(9.828_MHz_XTAL / 2, 320, 0, 320, 243, 0, 243);
+
+ mc6847_ntsc_device &vdg(MC6847_NTSC(config, "mc6847", XTAL(3'579'545)));
+ vdg.set_screen("screen");
+ vdg.input_callback().set(FUNC(mc10_state::mc6847_videoram_r));
+}
+
+void mc10_state::mc10(machine_config &config)
+{
+ mc10_base(config);
+ mc10_video(config);
+
+ /* expansion port hardware */
+ mc10cart_slot_device &cartslot(MC10CART_SLOT(config, "ext", DERIVED_CLOCK(1, 1), mc10_cart_add_basic_devices, nullptr));
+ cartslot.set_memspace(m_maincpu, AS_PROGRAM);
+ cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
/* Software lists */
SOFTWARE_LIST(config, "cass_list").set_original("mc10");
}
-void mc10_state::alice32(machine_config &config)
+void mc10_state::alice(machine_config &config)
{
- M6803(config, m_maincpu, XTAL(3'579'545));
- m_maincpu->set_addrmap(AS_PROGRAM, &mc10_state::alice32_mem);
- m_maincpu->in_p1_cb().set(FUNC(mc10_state::mc10_port1_r));
- m_maincpu->out_p1_cb().set(FUNC(mc10_state::mc10_port1_w));
- m_maincpu->in_p2_cb().set(FUNC(mc10_state::mc10_port2_r));
- m_maincpu->out_p2_cb().set(FUNC(mc10_state::mc10_port2_w));
+ mc10_base(config);
+ mc10_video(config);
+
+ /* expansion port hardware */
+ mc10cart_slot_device &cartslot(MC10CART_SLOT(config, "ext", DERIVED_CLOCK(1, 1), alice_cart_add_basic_devices, nullptr));
+ cartslot.set_memspace(m_maincpu, AS_PROGRAM);
+ cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
+
+ /* Software lists */
+ SOFTWARE_LIST(config, "cass_list").set_original("mc10");
+}
+
+void alice32_state::alice32(machine_config &config)
+{
+ mc10_base(config);
+
+ /* basic machine hardware */
+ m_maincpu->set_addrmap(AS_PROGRAM, &alice32_state::alice32_mem);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -717,35 +566,28 @@ void mc10_state::alice32(machine_config &config)
EF9345(config, m_ef9345, 0);
m_ef9345->set_screen("screen");
m_ef9345->set_palette_tag("palette");
- TIMER(config, "alice32_sl").configure_scanline(FUNC(mc10_state::alice32_scanline), "screen", 0, 10);
-
- /* sound hardware */
- SPEAKER(config, "speaker").front_center();
- DAC_1BIT(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.0625);
-
- CASSETTE(config, m_cassette);
- m_cassette->set_formats(alice32_cassette_formats);
- m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED);
- m_cassette->add_route(ALL_OUTPUTS, "speaker", 0.05);
- m_cassette->set_interface("mc10_cass");
-
- /* printer */
- rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "printer"));
- rs232.set_option_device_input_defaults("printer", DEVICE_INPUT_DEFAULTS_NAME(printer));
+ TIMER(config, "alice32_sl").configure_scanline(FUNC(alice32_state::alice32_scanline), "screen", 0, 10);
+ /* expansion port hardware */
+ mc10cart_slot_device &cartslot(MC10CART_SLOT(config, "ext", DERIVED_CLOCK(1, 1), alice32_cart_add_basic_devices, nullptr));
+ cartslot.set_memspace(m_maincpu, AS_PROGRAM);
+ cartslot.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
/* internal ram */
- RAM(config, m_ram).set_default_size("24K").set_extra_options("8K");
+ RAM(config, m_ram).set_default_size("8K").set_extra_options("24K");
/* Software lists */
SOFTWARE_LIST(config, "cass_list").set_original("alice32");
SOFTWARE_LIST(config, "mc10_cass").set_compatible("mc10");
}
-void mc10_state::alice90(machine_config &config)
+void alice32_state::alice90(machine_config &config)
{
alice32(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &mc10_state::alice90_mem);
+ /* basic machine hardware */
+ m_maincpu->set_addrmap(AS_PROGRAM, &alice32_state::alice90_mem);
+
+ /* internal ram */
m_ram->set_default_size("32K");
/* Software lists */
@@ -754,20 +596,6 @@ void mc10_state::alice90(machine_config &config)
config.device_remove("mc10_cass");
}
-void mcx128_state::mcx128(machine_config &config)
-{
- mc10(config);
- m_maincpu->set_addrmap(AS_PROGRAM, &mcx128_state::mcx128_mem);
-
- /* internal ram */
- m_ram->set_default_size("4K");
- RAM(config, m_mcx_ram).set_default_size("128K");
-
- /* Software lists */
- /* to do */
-}
-
-
/***************************************************************************
ROM DEFINITIONS
***************************************************************************/
@@ -798,31 +626,14 @@ ROM_START( alice90 )
ROM_LOAD( "charset.rom", 0x0000, 0x2000, BAD_DUMP CRC(b2f49eb3) SHA1(d0ef530be33bfc296314e7152302d95fdf9520fc) ) // from dcvg5k
ROM_END
-ROM_START( mcx128 )
- ROM_REGION(0x2000, "maincpu", 0)
- ROM_LOAD("mc10.rom", 0x0000, 0x2000, CRC(11fda97e) SHA1(4afff2b4c120334481aab7b02c3552bf76f1bc43))
- ROM_REGION(0x4000, "cart", 0)
- ROM_LOAD("mcx128bas.rom", 0x0000, 0x4000, CRC(11202e4b) SHA1(36c30d0f198a1bffee88ef29d92f2401447a91f4))
-ROM_END
-
-ROM_START( alice128 )
- ROM_REGION(0x2000, "maincpu", 0)
- ROM_LOAD("alice.rom", 0x0000, 0x2000, CRC(f876abe9) SHA1(c2166b91e6396a311f486832012aa43e0d2b19f8))
- ROM_REGION(0x4000, "cart", 0)
- ROM_LOAD("alice128bas.rom", 0x0000, 0x4000, CRC(a737544a) SHA1(c8fd92705fc42deb6a0ffac6274e27fd61ecd4cc))
-ROM_END
-
}
/***************************************************************************
GAME DRIVERS
***************************************************************************/
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, mc10, 0, 0, mc10, mc10, mc10_state, empty_init, "Tandy Radio Shack", "MC-10", MACHINE_SUPPORTS_SAVE )
-COMP( 1983, alice, mc10, 0, mc10, alice, mc10_state, empty_init, "Matra & Hachette", "Alice", MACHINE_SUPPORTS_SAVE )
-COMP( 1984, alice32, 0, 0, alice32, alice, mc10_state, empty_init, "Matra & Hachette", "Alice 32", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-COMP( 1985, alice90, alice32, 0, alice90, alice, mc10_state, empty_init, "Matra & Hachette", "Alice 90", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-COMP( 2011, mcx128, mc10, 0, mcx128, mc10, mcx128_state, empty_init, "Tandy Radio Shack", "MCX-128", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL )
-COMP( 2011, alice128,mc10, 0, mcx128, alice, mcx128_state, empty_init, "Matra & Hachette", "Alice with MCX-128", MACHINE_SUPPORTS_SAVE | MACHINE_UNOFFICIAL )
-
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1983, mc10, 0, 0, mc10, mc10, mc10_state, empty_init, "Tandy Radio Shack", "MC-10", MACHINE_SUPPORTS_SAVE )
+COMP( 1983, alice, mc10, 0, alice, alice, mc10_state, empty_init, "Matra & Hachette", "Alice", MACHINE_SUPPORTS_SAVE )
+COMP( 1984, alice32, 0, 0, alice32, alice, alice32_state, empty_init, "Matra & Hachette", "Alice 32", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+COMP( 1985, alice90, alice32, 0, alice90, alice, alice32_state, empty_init, "Matra & Hachette", "Alice 90", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mephisto_mm2.cpp b/src/mame/drivers/mephisto_mm2.cpp
index 4b0aace06f1..7ea5c7482c9 100644
--- a/src/mame/drivers/mephisto_mm2.cpp
+++ b/src/mame/drivers/mephisto_mm2.cpp
@@ -468,12 +468,12 @@ ROM_START( mm4tk )
ROM_END
-ROM_START( mm5 )
+ROM_START( mm5 ) // v5.1 (MEM->INFO to see version number)
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("mephisto5.rom", 0x8000, 0x8000, CRC(89c3d9d2) SHA1(77cd6f8eeb03c713249db140d2541e3264328048) )
ROM_END
-ROM_START( mm5a )
+ROM_START( mm5a ) // v5.0
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("mm50.rom", 0x8000, 0x8000, CRC(fcfa7e6e) SHA1(afeac3a8c957ba58cefaa27b11df974f6f2066da) )
ROM_END
@@ -510,6 +510,6 @@ CONS( 1987, mm4a, mm4, 0, mm4, mm2, mm2_state, empty_init, "He
CONS( 1987, mm4b, mm4, 0, mm4, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM IV (v6.00)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, mm4tk, mm4, 0, mm4tk, mm2, mm2_state, empty_init, "hack", "Mephisto MM IV (TurboKit)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING )
-CONS( 1990, mm5, 0, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1990, mm5a, mm5, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, mm5, 0, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (v5.1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1990, mm5a, mm5, 0, mm5, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (v5.0)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1989, mm5p, mm5, 0, mm5p, mm2, mm2_state, empty_init, "Hegener + Glaser", "Mephisto MM V (Portorose TM version)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_TIMING ) // aka Rebel
diff --git a/src/mame/drivers/meritum.cpp b/src/mame/drivers/meritum.cpp
index 259b3415a93..9edd68b9cb4 100644
--- a/src/mame/drivers/meritum.cpp
+++ b/src/mame/drivers/meritum.cpp
@@ -56,6 +56,7 @@ For Model III:
#include "emu.h"
#include "includes/trs80.h"
+#include "bus/centronics/ctronics.h"
#include "machine/input_merger.h"
#include "machine/i8251.h"
#include "machine/i8255.h"
@@ -68,6 +69,8 @@ public:
meritum_state(const machine_config &mconfig, device_type type, const char *tag)
: trs80_state(mconfig, type, tag)
, m_screen(*this, "screen")
+ , m_centronics(*this, "centronics")
+ , m_nmigate(*this, "nmigate")
{ }
void meritum1(machine_config &config);
@@ -83,10 +86,32 @@ private:
void io_map(address_map &map);
void mem_map2(address_map &map);
void io_map2(address_map &map);
+ void mainppi_portb_w(u8);
+ void mainppi_portc_w(u8);
required_device<screen_device> m_screen;
+ optional_device<centronics_device> m_centronics;
+ required_device<input_merger_device> m_nmigate;
};
+void meritum_state::mainppi_portc_w(u8 data)
+{
+ m_nmigate->in_w<0>(!BIT(data, 7)); // negated PC7 => NMI
+ m_centronics->write_strobe(BIT(data, 1)); // PC1 = STROBE (centronics)
+}
+
+void meritum_state::mainppi_portb_w(u8 data)
+{
+ m_centronics->write_data0(BIT(data, 0));
+ m_centronics->write_data1(BIT(data, 1));
+ m_centronics->write_data2(BIT(data, 2));
+ m_centronics->write_data3(BIT(data, 3));
+ m_centronics->write_data4(BIT(data, 4));
+ m_centronics->write_data5(BIT(data, 5));
+ m_centronics->write_data6(BIT(data, 6));
+ m_centronics->write_data7(BIT(data, 7));
+}
+
void meritum_state::mem_map(address_map &map)
{
map(0x0000, 0x37ff).rom();
@@ -332,7 +357,17 @@ void meritum_state::meritum1(machine_config &config)
pit.out_handler<2>().set_inputline(m_maincpu, INPUT_LINE_NMI);
i8255_device &mainppi(I8255(config, "mainppi")); // parallel interface
- mainppi.out_pc_callback().set("nmigate", FUNC(input_merger_device::in_w<0>)).bit(7).invert();
+ mainppi.out_pc_callback().set(FUNC(meritum_state::mainppi_portc_w));
+ mainppi.out_pb_callback().set(FUNC(meritum_state::mainppi_portb_w));
+
+ // printer
+ CENTRONICS(config, m_centronics, centronics_devices, "printer");
+ m_centronics->set_data_input_buffer("cent_data_in");
+ m_centronics->ack_handler().set("mainppi", FUNC(i8255_device::pc2_w));
+
+ INPUT_BUFFER(config, "cent_data_in");
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ m_centronics->set_output_latch(cent_data_out);
PIT8253(config, "audiopit", 0); // optional audio interface
diff --git a/src/mame/drivers/mermaid.cpp b/src/mame/drivers/mermaid.cpp
index b8fff594330..c792a4fea14 100644
--- a/src/mame/drivers/mermaid.cpp
+++ b/src/mame/drivers/mermaid.cpp
@@ -89,13 +89,13 @@ Stephh's notes (based on the games Z80 code and some tests) :
1) 'mermaid'
- - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cokctail".
+ - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cocktail".
- Continue Play is determined via DSW bit 3. When it's ON, insert a coin when
the message is displayed on the screen. Beware that there is no visible timer !
2) 'yachtmn'
- - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cokctail".
+ - Player 2 uses 2nd set of inputs ONLY when "Cabinet" Dip Switch is set to "Cocktail".
- Continue Play is always possible provided that you insert a coin when the
message (much shorter than in 'mermaid') is displayed on the screen (there is
also no timer). Then when you press START, you need to press START again when
@@ -162,7 +162,7 @@ void mermaid_state::mermaid_map(address_map &map)
{
map(0x0000, 0x9fff).rom();
map(0xc000, 0xc7ff).ram();
- map(0xc800, 0xcbff).ram().w(FUNC(mermaid_state::mermaid_videoram2_w)).share("videoram2");
+ map(0xc800, 0xcbff).ram().w(FUNC(mermaid_state::mermaid_videoram2_w)).share("videoram2").mirror(0x400);
map(0xd000, 0xd3ff).ram().w(FUNC(mermaid_state::mermaid_videoram_w)).share("videoram");
map(0xd800, 0xd81f).ram().w(FUNC(mermaid_state::mermaid_bg_scroll_w)).share("bg_scrollram");
map(0xd840, 0xd85f).ram().w(FUNC(mermaid_state::mermaid_fg_scroll_w)).share("fg_scrollram");
@@ -174,7 +174,7 @@ void mermaid_state::mermaid_map(address_map &map)
map(0xe800, 0xe807).w("latch2", FUNC(ls259_device::write_d0));
map(0xf000, 0xf000).portr("P2");
map(0xf800, 0xf800).r(FUNC(mermaid_state::mermaid_collision_r));
- map(0xf802, 0xf802).nopw(); // ???
+ // map(0xf802, 0xf802).nopw(); // ???
map(0xf806, 0xf806).w(FUNC(mermaid_state::mermaid_ay8910_write_port_w));
map(0xf807, 0xf807).w(FUNC(mermaid_state::mermaid_ay8910_control_port_w));
}
@@ -365,6 +365,7 @@ void mermaid_state::machine_start()
save_item(NAME(m_coll_bit2));
save_item(NAME(m_coll_bit3));
save_item(NAME(m_coll_bit6));
+ save_item(NAME(m_bg_bank));
save_item(NAME(m_rougien_gfxbank1));
save_item(NAME(m_rougien_gfxbank2));
save_item(NAME(m_ay8910_enable));
@@ -382,6 +383,8 @@ void mermaid_state::machine_reset()
m_coll_bit2 = 0;
m_coll_bit3 = 0;
m_coll_bit6 = 0;
+ m_bg_mask = 0;
+ m_bg_bank = 0;
m_rougien_gfxbank1 = 0;
m_rougien_gfxbank2 = 0;
@@ -428,16 +431,22 @@ void mermaid_state::mermaid(machine_config &config)
LS259(config, m_latch[0]);
m_latch[0]->q_out_cb<0>().set(FUNC(mermaid_state::ay1_enable_w));
m_latch[0]->q_out_cb<1>().set(FUNC(mermaid_state::ay2_enable_w));
- m_latch[0]->q_out_cb<4>().set_nop(); // ???
+ m_latch[0]->q_out_cb<2>().set([this](int state){ logerror("02 = %d\n", state); }); // ???
+ m_latch[0]->q_out_cb<3>().set([this](int state){ logerror("03 = %d\n", state); }); // ???
+ m_latch[0]->q_out_cb<4>().set([this](int state){ logerror("04 = %d\n", state); }); // ???
m_latch[0]->q_out_cb<5>().set(FUNC(mermaid_state::flip_screen_x_w));
m_latch[0]->q_out_cb<6>().set(FUNC(mermaid_state::flip_screen_y_w));
m_latch[0]->q_out_cb<7>().set(FUNC(mermaid_state::nmi_mask_w));
LS259(config, m_latch[1]);
- m_latch[1]->q_out_cb<0>().set_nop(); // ???
+ m_latch[1]->q_out_cb<0>().set(FUNC(mermaid_state::bg_mask_w));
+ m_latch[1]->q_out_cb<1>().set(FUNC(mermaid_state::bg_bank_w));
+ m_latch[1]->q_out_cb<2>().set([this](int state){ logerror("12 = %d\n", state); }); // ???
+ m_latch[1]->q_out_cb<3>().set([this](int state){ logerror("13 = %d\n", state); }); // ???
m_latch[1]->q_out_cb<4>().set(FUNC(mermaid_state::rougien_gfxbankswitch1_w));
m_latch[1]->q_out_cb<5>().set(FUNC(mermaid_state::rougien_gfxbankswitch2_w));
- m_latch[1]->q_out_cb<7>().set_nop(); // very frequent
+ m_latch[1]->q_out_cb<6>().set([this](int state){ logerror("16 = %d\n", state); }); // ???
+ m_latch[1]->q_out_cb<7>().set_nop(); // probable watchdog
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
@@ -462,9 +471,12 @@ void mermaid_state::mermaid(machine_config &config)
void mermaid_state::rougien(machine_config &config)
{
mermaid(config);
+ m_bg_split = 1;
m_latch[0]->q_out_cb<2>().set(FUNC(mermaid_state::rougien_sample_playback_w));
+ m_latch[1]->q_out_cb<0>().set([this](int state){ logerror("10 = %d\n", state); }); // ???
+ m_latch[1]->q_out_cb<1>().set([this](int state){ logerror("11 = %d\n", state); }); // ???
m_latch[1]->q_out_cb<2>().set(FUNC(mermaid_state::rougien_sample_rom_hi_w));
m_latch[1]->q_out_cb<3>().set(FUNC(mermaid_state::rougien_sample_rom_lo_w));
diff --git a/src/mame/drivers/mitchell.cpp b/src/mame/drivers/mitchell.cpp
index 2ada187c87c..4a960d3dd2b 100644
--- a/src/mame/drivers/mitchell.cpp
+++ b/src/mame/drivers/mitchell.cpp
@@ -376,7 +376,7 @@ void mitchell_state::spangbl_io_map(address_map &map)
map(0x00, 0x02).r(FUNC(mitchell_state::input_r));
map(0x00, 0x00).w(FUNC(mitchell_state::pangbl_gfxctrl_w)); /* Palette bank, layer enable, coin counters, more */
map(0x02, 0x02).w(FUNC(mitchell_state::pang_bankswitch_w)); /* Code bank register */
- map(0x03, 0x03).w(m_soundlatch, FUNC(generic_latch_8_device::write));
+ map(0x03, 0x03).portr("DSW1").w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x05, 0x05).portr("SYS0");
map(0x06, 0x06).nopw(); /* watchdog? irq ack? */
map(0x07, 0x07).w(FUNC(mitchell_state::pang_video_bank_w)); /* Video RAM bank register */
@@ -871,14 +871,69 @@ static INPUT_PORTS_START( pang )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2)
INPUT_PORTS_END
+static INPUT_PORTS_START( pangdsw )
+ PORT_INCLUDE( pang )
+
+// the settings are shown if entering test mode. The game always respects the dip setting, changing the values in test mode has no effect
+// it appears the bootleggers didn't care to add dips for flipscreen, free play and extend values (or at least they haven't been found yet)
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:6,7,8")
+ PORT_DIPSETTING( 0x07, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x18, 0x18, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:4,5")
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x18, "2" )
+ PORT_DIPSETTING( 0x08, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPNAME( 0x60, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW1:2,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Difficult ) )
+ PORT_DIPSETTING( 0x60, DEF_STR( Very_Difficult ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( spangbl )
PORT_INCLUDE( pang )
PORT_MODIFY("SYS0")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // this bootleg doesn't seem to allow entering test mode. It has a dip bank for settings, instead.
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* unused? */
PORT_MODIFY("IN1")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // must be high for game to boot..
+
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:6,7,8")
+ PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_6C ) )
+ PORT_DIPNAME( 0x18, 0x08, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:4,5")
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x08, "2" )
+ PORT_DIPSETTING( 0x10, "3" )
+ PORT_DIPSETTING( 0x18, "4" )
+ PORT_DIPNAME( 0x60, 0x20, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW1:2,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Difficult ) )
+ PORT_DIPSETTING( 0x60, DEF_STR( Very_Difficult ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
INPUT_PORTS_END
static INPUT_PORTS_START( mstworld )
@@ -2265,33 +2320,6 @@ ROM_START( spangbl )
ROM_LOAD( "ic125.14", 0x030000, 0x10000, CRC(bd5c2f4b) SHA1(3c71d63637633a98ab513e4336e2954af3f964f4) )
ROM_END
-// "spangbl2"
-// TODO: There is a bank of 8 dipswitches that needs to be hooked up with this set up:
-// ______________________________________________________
-// | | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
-// |--------------------|---|---|---|---|---|---|---|---|
-// | 1 Coin - 1 Credit | ON| ON| ON| | | | | |
-// | 1 Coin - 2 Credits |OFF| ON| ON| | | | | |
-// | 1 Coin - 3 Credits | ON|OFF| ON| | | | | |
-// | 1 Coin - 4 Credits |OFF|OFF| ON| | | | | |
-// | 1 Coin - 6 Credits | ON| ON|OFF| | | | | |
-// | 2 Coin - 1 Credit |OFF| ON|OFF| | | | | |
-// | 3 Coin - 1 Credit | ON|OFF|OFF| | | | | |
-// | 4 Coin - 1 Credit |OFF|OFF|OFF| | | | | |
-// |--------------------|---|---|---|---|---|---|---|---|
-// | 1 Player | | | | ON| ON| | | |
-// | 2 Players | | | |OFF| ON| | | |
-// | 3 Players | | | | ON|OFF| | | |
-// | 4 Players | | | |OFF|OFF| | | |
-// |--------------------|---|---|---|---|---|---|---|---|
-// | Easy | | | | | | ON| ON| |
-// | Normal | | | | | |OFF| ON| |
-// | Dificult | | | | | | ON|OFF| |
-// | Very dificult | | | | | |OFF|OFF| |
-// |--------------------|---|---|---|---|---|---|---|---|
-// | No demo sounds | | | | | | | | ON|
-// | Demo sounds | | | | | | | |OFF|
-// |____________________________________________________|
ROM_START( spangbl2 )
ROM_REGION( 0x50000*2, "maincpu", ROMREGION_ERASEFF )
// IC2 can be found as 27C512 with 1st and 2nd half identical or as 27C256
@@ -2763,11 +2791,11 @@ GAME( 1989, bbros, pang, pang, pang, mitchell_state, init_
GAME( 1989, pompingw, pang, pang, pang, mitchell_state, init_pang, ROT0, "Mitchell", "Pomping World (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangb, pang, pang, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangbold, pang, pang, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1989, pangba, pang, pangba, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1989, pangba, pang, pangba, pangdsw, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangb2, pang, pang, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 4)", MACHINE_SUPPORTS_SAVE )
-GAME( 1989, pangbb, pang, spangbl, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 5)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1989, pangbb, pang, spangbl, pangdsw, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 5)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1989, pangbp, pang, pang, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 6)", MACHINE_NOT_WORKING ) // Missing the contents of a battery backed RAM
-GAME( 1989, pangbc, pang, spangbl, pang, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 7)", MACHINE_SUPPORTS_SAVE )
+GAME( 1989, pangbc, pang, spangbl, pangdsw, mitchell_state, init_pangb, ROT0, "bootleg", "Pang (bootleg, set 7)", MACHINE_SUPPORTS_SAVE )
GAME( 1989, cworld, 0, pang, qtono1, mitchell_state, init_cworld, ROT0, "Capcom", "Capcom World (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mpc60.cpp b/src/mame/drivers/mpc60.cpp
index 194ffd81abb..a68c645e6a8 100644
--- a/src/mame/drivers/mpc60.cpp
+++ b/src/mame/drivers/mpc60.cpp
@@ -152,15 +152,21 @@ void mpc60_state::mpc60(machine_config &config)
}
ROM_START(mpc60)
- ROM_REGION16_LE(0x40000, "program", 0) // V2.12 CPU ROMs (MBM27C512-20)
- ROM_LOAD16_BYTE("mp6cpu2.ic2", 0x00000, 0x10000, CRC(e71b1acb) SHA1(b56ddfff1c546fc21341b1a614e18da9726312f4))
- ROM_LOAD16_BYTE("mp6cpu3.ic3", 0x00001, 0x10000, CRC(f068838b) SHA1(42e815880d1c1a5b7d1c7933aad9c28410fc2627))
- ROM_LOAD16_BYTE("mp6cpu1.ic4", 0x20000, 0x10000, CRC(1271bc73) SHA1(99fd6fa4c04e5bdf868e78072fec5b55c01350da))
- ROM_LOAD16_BYTE("mpc6cpu4.ic5", 0x20001, 0x10000, CRC(d922a66d) SHA1(0f4bc0522b9826d617f4af72382d75853515d7f5))
+ ROM_REGION16_LE(0x40000, "program", 0)
+ ROM_SYSTEM_BIOS(0, "v212", "v2.12") // V2.12 CPU ROMs (MBM27C512-20)
+ ROMX_LOAD("mp6cpu2.ic2", 0x00000, 0x10000, CRC(e71b1acb) SHA1(b56ddfff1c546fc21341b1a614e18da9726312f4), ROM_BIOS(0) | ROM_SKIP(1))
+ ROMX_LOAD("mp6cpu3.ic3", 0x00001, 0x10000, CRC(f068838b) SHA1(42e815880d1c1a5b7d1c7933aad9c28410fc2627), ROM_BIOS(0) | ROM_SKIP(1))
+ ROMX_LOAD("mp6cpu1.ic4", 0x20000, 0x10000, CRC(1271bc73) SHA1(99fd6fa4c04e5bdf868e78072fec5b55c01350da), ROM_BIOS(0) | ROM_SKIP(1))
+ ROMX_LOAD("mpc6cpu4.ic5", 0x20001, 0x10000, CRC(d922a66d) SHA1(0f4bc0522b9826d617f4af72382d75853515d7f5), ROM_BIOS(0) | ROM_SKIP(1))
+ ROM_SYSTEM_BIOS(1, "v112", "v1.12")
+ ROMX_LOAD("mpc60_v1-12_2.ic2", 0x00000, 0x10000, CRC(ddf26146) SHA1(987547198dc3984ab3dfa7f133ba7dca702cc269), ROM_BIOS(1) | ROM_SKIP(1))
+ ROMX_LOAD("mpc60_v1-12_4.ic3", 0x00001, 0x10000, CRC(9725d193) SHA1(6efda3d6760b3951c5036108106d446f6e128c59), ROM_BIOS(1) | ROM_SKIP(1))
+ ROMX_LOAD("mpc60_v1-12_1.ic4", 0x20000, 0x10000, CRC(f202dbb1) SHA1(6fd82224a99b52b6c414b88d5c920abda32ffa32), ROM_BIOS(1) | ROM_SKIP(1))
+ ROMX_LOAD("mpc60_v1-12_3.ic5", 0x20001, 0x10000, CRC(ba5a1640) SHA1(1f9f49c49a3682b9a44d614ac411a7c043df399e), ROM_BIOS(1) | ROM_SKIP(1))
ROM_REGION16_LE(0x10000, "waves", 0)
- ROM_LOAD16_BYTE("ic17", 0x00000, 0x08000, NO_DUMP) // lowest nibble is unused
- ROM_LOAD16_BYTE("ic18", 0x00001, 0x08000, NO_DUMP)
+ ROM_LOAD16_BYTE("mpc60_voice_1_v1-0.ic17", 0x00000, 0x08000, CRC(b8fdfe3e) SHA1(c2f0e1d8813d4178d2f883a3f3e461e036b56229)) // lowest nibble is unused
+ ROM_LOAD16_BYTE("mpc60_voice_2_v1-0.ic18", 0x00001, 0x08000, CRC(42f8e0a6) SHA1(a22dbefb9dafbb0c4095fd0bf4e63e67b5ec3b95))
ROM_REGION(0x1000, "panelcpu", 0)
ROM_LOAD("upd78c11g-044-36.ic1", 0x0000, 0x1000, NO_DUMP)
diff --git a/src/mame/drivers/namcos2.cpp b/src/mame/drivers/namcos2.cpp
index e1472c894e8..283bfb94781 100644
--- a/src/mame/drivers/namcos2.cpp
+++ b/src/mame/drivers/namcos2.cpp
@@ -24,6 +24,9 @@ known issues:
- sprite/tilemap orthogonality needed
- bad road colors in Final Lap and Suzuka series
+ Final Lap & Final Lap 2:
+ - by default, the graphics are way too bright if compared to original PCB/monitor output
+
Finest Hour:
- roz plane colors are bad in-game
@@ -3311,8 +3314,8 @@ ROM_START( finalap3bl ) // bootleg set
ROM_REGION( 8*1024, "user2", 0 ) /* zoom */
ROM_LOAD( "04544191.6r", 0, 8*1024, CRC(90db1bf6) SHA1(dbb9e50a8efc3b4012fcf587cc87da9ef42a1b80) )
- ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration */
- ROM_LOAD( "finalap3.nv", 0x000000, 0x2000, CRC(efbc6274) SHA1(f542012e467027b7bd5d7102096ff91d8c9adee3) )
+ ROM_REGION( 0x2000, "nvram", 0 ) /* default settings, including calibration and machine ID code that passes protection */
+ ROM_LOAD( "finalap3bl.nv", 0x000000, 0x2000, CRC(60226586) SHA1(d66afd1149c3c95cbb0108337c530cab78327d97) )
ROM_END
/* FINEST HOUR */
@@ -5522,6 +5525,20 @@ void namcos2_state::init_finalap3()
m_finallap_prot_count = 0;
}
+uint16_t namcos2_state::finalap3bl_prot_r()
+{
+ // code at 0x3f22 expects this to be 0x4d00 or it sets a value in NVRAM which prevents booting
+ // address 0x180020 (0x10 in NVRAM) must also be 0x6b (machine ID code first byte) or the same will occur
+ // for the 2nd issue we use a default NVRAM with this set
+ return 0x4d00;
+}
+
+void namcos2_state::init_finalap3bl()
+{
+ init_finalap3();
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x3ffff0, 0x3ffff1, read16smo_delegate(*this, FUNC(namcos2_state::finalap3bl_prot_r)));
+}
+
void namcos2_state::init_finehour()
{
m_gametype = NAMCOS2_FINEST_HOUR;
@@ -5761,7 +5778,7 @@ GAMEL( 1992, finalap3, 0, finalap3, finalap3, namcos2_state, init_final
GAMEL( 1992, finalap3a, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (World, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap )
GAMEL( 1992, finalap3j, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap )
GAMEL( 1992, finalap3jc, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (Japan, Rev C)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap )
-GAMEL( 1992, finalap3bl, finalap3, finalap3, finalap3, namcos2_state, init_finalap3, ROT0, "Namco", "Final Lap 3 (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap )
+GAMEL( 1992, finalap3bl, finalap3, finalap3, finalap3, namcos2_state, init_finalap3bl,ROT0, "Namco", "Final Lap 3 (bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE, layout_finallap )
GAME( 1992, luckywld, 0, luckywld, luckywld, namcos2_state, init_luckywld, ROT0, "Namco", "Lucky & Wild", MACHINE_SUPPORTS_SAVE )
GAME( 1992, luckywldj, luckywld, luckywld, luckywld, namcos2_state, init_luckywld, ROT0, "Namco", "Lucky & Wild (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp
index ec1aa640991..488759ff0f0 100644
--- a/src/mame/drivers/namcos22.cpp
+++ b/src/mame/drivers/namcos22.cpp
@@ -5552,6 +5552,71 @@ ROM_END
ROM_START( adillor )
ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
+ ROM_LOAD32_BYTE( "am2vera.rom1", 0x000003, 0x100000, CRC(b974e931) SHA1(db1c99ed56044f667a9a0a5801f62215004af847) )
+ ROM_LOAD32_BYTE( "am2vera.rom2", 0x000002, 0x100000, CRC(c7cd78f1) SHA1(2f909be1c9a9acf42a8e446c83a06b3b36012196) )
+ ROM_LOAD32_BYTE( "am2vera.rom3", 0x000001, 0x100000, CRC(80e9435a) SHA1(d92f6ec607e628270ceb3e09c1980d6e13bd88a7) )
+ ROM_LOAD32_BYTE( "am2vera.rom4", 0x000000, 0x100000, CRC(1e3a6032) SHA1(f4c6539a78f94ae2c240aeb8f85712a612933e8c) )
+
+ ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */
+ ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )
+
+ ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */
+ ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) )
+
+ ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */
+ ROM_LOAD( "am1data.8k", 0x000000, 0x080000, CRC(3c176589) SHA1(fabf8debfa118893449f6086986fd1aa012daf27) )
+
+ ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */
+ ROM_LOAD( "am1scg0.12f", 0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) )
+ ROM_LOAD( "am1scg1.10f", 0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) )
+ ROM_LOAD( "am1scg0.12l", 0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) )
+ ROM_LOAD( "am1scg1.10l", 0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) )
+
+ ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */
+ ROM_LOAD( "am1cg0.8d", 0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) )
+ ROM_LOAD( "am1cg1.10d", 0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) )
+ ROM_LOAD( "am1cg2.12d", 0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) )
+ ROM_LOAD( "am1cg3.13d", 0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) )
+ ROM_LOAD( "am1cg3.14d", 0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) )
+ ROM_LOAD( "am1cg5.16d", 0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) )
+ ROM_LOAD( "am1cg6.18d", 0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) )
+ ROM_LOAD( "am1cg7.19d", 0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) )
+ ROM_LOAD( "am1cg0.12b", 0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) )
+ ROM_LOAD( "am1cg1.13b", 0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) )
+ ROM_LOAD( "am1cg2.14b", 0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) )
+ ROM_LOAD( "am1cg3.16b", 0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) )
+ ROM_LOAD( "am1cg3.18b", 0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) )
+ ROM_LOAD( "am1cg5.19b", 0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) )
+ ROM_LOAD( "am1cg6.18a", 0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) )
+ ROM_LOAD( "am1cg7.15a", 0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) )
+
+ ROM_REGION16_LE( 0x300000, "textilemap", 0 ) /* texture tilemap */
+ ROM_LOAD( "am1ccrl.3d", 0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) )
+ ROM_LOAD( "am1ccrh.1d", 0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) )
+ ROM_LOAD( "am1ccrl.7b", 0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) )
+ ROM_LOAD( "am1ccrh.5b", 0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) )
+
+ ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */
+ ROM_LOAD( "am1ptrl0.18k", 0x000000, 0x080000, CRC(6fdb34f6) SHA1(5dc7359eef0dbe6d421808eefd3920159ce34944) )
+ ROM_LOAD( "am1ptrl1.16k", 0x080000, 0x080000, CRC(32e40601) SHA1(161b148aae688e944cfe456d9bca1ca7139812e1) )
+ ROM_LOAD( "am1ptrl2.15k", 0x100000, 0x080000, CRC(e27e29cc) SHA1(3a2b0d18d23b2ace6fe1c6c4dbcc73cb74acd189) )
+ ROM_LOAD( "am1ptrl3.14k", 0x180000, 0x080000, CRC(0c638e3e) SHA1(2cd68e6aa04a9235f792fad0913314545ab70e71) )
+ ROM_LOAD( "am1ptrm0.18j", 0x200000, 0x080000, CRC(e676cd98) SHA1(f7b31c848bc2afc31f3ad53d9eda7daae5f28865) )
+ ROM_LOAD( "am1ptrm1.16j", 0x280000, 0x080000, CRC(eb115d9d) SHA1(165cb13a3d0f2982c35ae5e6e796de48cf2b5846) )
+ ROM_LOAD( "am1ptrm2.15j", 0x300000, 0x080000, CRC(86b4ed0c) SHA1(d97f2b26cc3981b4b337029723c5ddec9316628f) )
+ ROM_LOAD( "am1ptrm3.14j", 0x380000, 0x080000, CRC(97c1c6b0) SHA1(84e5f982f50560debd6f1f4d3d96f58888616529) )
+ ROM_LOAD( "am1ptru0.18f", 0x400000, 0x080000, CRC(6a3fd855) SHA1(c6d2029e676426c4e71d9cfddbac7ecdec81c4da) )
+ ROM_LOAD( "am1ptru1.16f", 0x480000, 0x080000, CRC(551bf714) SHA1(4af1e65ad1e42a95accafb57422fc276743f408a) )
+ ROM_LOAD( "am1ptru2.15f", 0x500000, 0x080000, CRC(ce790635) SHA1(fb49646a9b35ee7cb3ace59a7f0932a08c393052) )
+ ROM_LOAD( "am1ptru3.14f", 0x580000, 0x080000, CRC(5e4e6333) SHA1(5897251e4694c5c24f1810ff6f9177a0456baf2e) )
+
+ ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */
+ ROM_LOAD16_WORD_SWAP( "am1wavea.2l", 0x000000, 0x400000, CRC(48f8c20c) SHA1(48b4fbcb7e9dbbb70a542ef7cb7ee0e46fad23fc) )
+ ROM_LOAD16_WORD_SWAP( "am1waveb.1l", 0x800000, 0x400000, CRC(fd8e7384) SHA1(91e53ab0293f81f8357645fd319249abc128b78e) )
+ROM_END
+
+ROM_START( adillorj )
+ ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */
ROM_LOAD32_BYTE( "am1vera.rom1", 0x000003, 0x100000, CRC(e99157f9) SHA1(7a200f3b5890f5badbf529a8c8ac6a8548adb801) )
ROM_LOAD32_BYTE( "am1vera.rom2", 0x000002, 0x100000, CRC(b63d79b0) SHA1(c83251727b2973f5b9dc2eea23b51b1275bd88ed) )
ROM_LOAD32_BYTE( "am1vera.rom3", 0x000001, 0x100000, CRC(af0983bc) SHA1(136d2e14485864e20d7a6947d640577b8a85243c) )
@@ -5871,4 +5936,5 @@ GAME( 1996, tokyowar, 0, tokyowar, tokyowar, namcos22s_state, init_tok
GAME( 1996, aquajet, 0, cybrcycc, aquajet, namcos22s_state, init_aquajet, ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30
GAME( 1996, alpinr2b, 0, alpine, alpiner, namcos22s_state, init_alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.B, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/01/10 17:10:59
GAME( 1996, alpinr2a, alpinr2b, alpine, alpiner, namcos22s_state, init_alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/12/06 13:45:05
-GAME( 1997, adillor, 0, adillor, adillor, namcos22s_state, init_adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:19:41
+GAME( 1997, adillor, 0, adillor, adillor, namcos22s_state, init_adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM2 Ver.A, World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:43:29
+GAME( 1997, adillorj, adillor, adillor, adillor, namcos22s_state, init_adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM1 Ver.A, Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 97/04/07 19:19:41
diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp
index 56031ccb4b5..3ac26f07aa6 100644
--- a/src/mame/drivers/naomi.cpp
+++ b/src/mame/drivers/naomi.cpp
@@ -3114,6 +3114,16 @@ void naomi_state::naomim4(machine_config &config)
}
/*
+ * Naomi M1 with 837-14438 "SH I/O BD" hopper board
+ */
+
+void naomi_state::naomim1_hop(machine_config &config)
+{
+ naomim1(config);
+ SEGA837_14438(config, "hopperbd", 0);
+}
+
+/*
* Naomi M2 with Keyboard controllers
*/
@@ -7754,26 +7764,6 @@ ROM_START( kick4csh )
ROM_REGION(0x200, "some_eeprom", 0)
ROM_LOAD( "25lc040.ic13s", 0, 0x200, CRC(1576366a) SHA1(3e8bf3dbc8a248a6863242b78d5c6e53a869e951) )
- // 837-14438 SH I/O BD
- // IC1 - Hitachi/Renesas SH4 SoC
- // IC2 - Xilinx Spartan XC2S50 PQ208AMS0341 FPGA
- // IC3 - Xilinx 17S50APC Spartan-II Family OTP Configuration PROM, stamped 6372A
- // IC4,5 - Toshiba TC59S6432CFT-10 512K x4 banks x32bit SDRAM
- // IC6 - Macronix MX29LV160ATTC-90 16Mbit Flash ROM
- // IC7 - ST M68AF127BL55MC6 1Mbit (128K x8) SRAM
- // IC9 - NS USBN9604-28M USB Node Controller
- // OSC1 - 33.3333 MHz
- // OSC2 - 32.0000 MHz
- // OCS3 - 24.0000 MHz
- // SW1,2 - pushbuttons
- // DIPSW1 - 4x DIP switch
- // LED1-5 - LEDs
- // LED6,7 - 7seg LEDs
- // BT1 - Panasonic CR2032 battery
- ROM_REGION(0x220000, "hopper_board", 0)
- ROM_LOAD( "fpr-24150.ic6", 0x0000000, 0x200000, CRC(3845c34c) SHA1(027b17bac64482ee152773d5fab30fcbc6e2bcb7) ) // SH4 code
- ROM_LOAD( "6372a.ic3", 0x0200000, 0x020000, CRC(f30839ad) SHA1(ea1a32c4da1ed9745300bcdd7964a7c0964e3221) ) // FPGA config
-
// 840-0140 2004 317-0397-COM Naomi
ROM_PARAMETER( ":rom_board:key", "820857c9" )
ROM_END
@@ -11743,9 +11733,9 @@ ROM_END
/* 0128 */ GAME( 2003, shootpl, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan, Rev A)", GAME_FLAGS )
/* 0130 */ GAME( 2002, hopper, naomi, naomi, naomi, naomi_state, init_naomi, ROT0, "Sega", "SWP Hopper Board", GAME_FLAGS )
// 0132 Mushiking 2K3 2ND (Japan)
-/* 0136 */ GAME( 2004, shootplm, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B", GAME_FLAGS ) // Build: 23 Jan 2004
+/* 0136 */ GAME( 2004, shootplm, naomi, naomim1_hop, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B", GAME_FLAGS ) // Build: 23 Jan 2004
/* 0136 */ GAME( 2004, shootplmp, shootplm, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Shootout Pool Prize (Export) / Shootout Pool The Medal (Japan) Version B (prototype)", GAME_FLAGS ) // Build: 15 Dec 2003
-/* 0140 */ GAME( 2004, kick4csh, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Kick '4' Cash (Export)", GAME_FLAGS )
+/* 0140 */ GAME( 2004, kick4csh, naomi, naomim1_hop, naomi, naomi_state, init_naomi, ROT0, "Sega", "Kick '4' Cash (Export)", GAME_FLAGS )
/* 0150 */ GAME( 2004, mushike, naomi, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Mushiking The King Of Beetle (2K3 2ND Ver. 1.003-, World)", GAME_FLAGS ) // not for Japan
/* 0150 */ GAME( 2004, mushikeo, mushike, naomim1, naomi, naomi_state, init_naomi, ROT0, "Sega", "Mushiking The King Of Beetle (2K3 2ND Ver. 1.002-, World)", GAME_FLAGS ) // not for Japan
/* 0150-FLS*/ GAME( 2004, mushikep, mushike, naomim2, naomi, naomi_state, init_naomi, ROT0, "Sega", "Mushiking The King Of Beetle (MUSHIUSA '04 1ST, Prototype)", GAME_FLAGS )
diff --git a/src/mame/drivers/nwk-tr.cpp b/src/mame/drivers/nwk-tr.cpp
index 6bd567d1732..fead2fd0c0c 100644
--- a/src/mame/drivers/nwk-tr.cpp
+++ b/src/mame/drivers/nwk-tr.cpp
@@ -352,9 +352,11 @@ private:
void soundtimer_count_w(uint16_t data);
double adc12138_input_callback(uint8_t input);
+ bool m_exrgb;
+
TIMER_CALLBACK_MEMBER(sound_irq);
- template <uint8_t Which> uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void ppc_map(address_map &map);
void sharc0_map(address_map &map);
@@ -369,13 +371,14 @@ void nwktr_state::paletteram32_w(offs_t offset, uint32_t data, uint32_t mem_mask
m_palette->set_pen_color(offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
}
-template <uint8_t Which>
uint32_t nwktr_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->pen(0), cliprect);
- m_voodoo[Which]->voodoo_update(bitmap, cliprect);
- m_k001604[Which]->draw_front_layer(screen, bitmap, cliprect);
+ int board = m_exrgb ? 1 : 0;
+
+ m_voodoo[board]->voodoo_update(bitmap, cliprect);
+ m_k001604[0]->draw_front_layer(screen, bitmap, cliprect); // K001604 on slave board doesn't seem to output anything. Bug or intended?
return 0;
}
@@ -404,7 +407,7 @@ uint8_t nwktr_state::sysreg_r(offs_t offset)
case 4:
r = m_dsw->read();
break;
- default:
+ default:
break;
}
@@ -435,12 +438,25 @@ void nwktr_state::sysreg_w(offs_t offset, uint8_t data)
}
case 7:
+ /*
+ 0x80 = EXRES1
+ 0x40 = EXRES0
+ 0x20 = EXID1
+ 0x10 = EXID0
+ 0x01 = EXRGB
+ */
if (data & 0x80) // CG Board 1 IRQ Ack
m_maincpu->set_input_line(INPUT_LINE_IRQ1, CLEAR_LINE);
if (data & 0x40) // CG Board 0 IRQ Ack
m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
- m_konppc->set_cgboard_id((data >> 4) & 3);
+ m_konppc->set_cgboard_id((data >> 4) & 0x3);
+
+ // Racing Jam sets CG board ID to 2 when writing to the tilemap chip.
+ // This could mean broadcast to both CG boards?
+
+ m_exrgb = data & 0x1; // Select which CG Board outputs signal
+
m_cg_view.select(m_konppc->get_cgboard_id() ? 1 : 0);
break;
@@ -548,7 +564,7 @@ void nwktr_state::sharc1_map(address_map &map)
map(0x0400000, 0x041ffff).rw(m_konppc, FUNC(konppc_device::cgboard_1_shared_sharc_r), FUNC(konppc_device::cgboard_1_shared_sharc_w));
map(0x0500000, 0x05fffff).ram().share(m_sharc_dataram[1]).lr32(NAME([this](offs_t offset) { return m_sharc_dataram[1][offset] & 0xffff; }));
map(0x1400000, 0x14fffff).ram();
- map(0x2400000, 0x27fffff).rw(m_konppc, FUNC(konppc_device::nwk_voodoo_0_r), FUNC(konppc_device::nwk_voodoo_0_w));
+ map(0x2400000, 0x27fffff).rw(m_konppc, FUNC(konppc_device::nwk_voodoo_1_r), FUNC(konppc_device::nwk_voodoo_1_w));
map(0x3400000, 0x34000ff).rw(m_konppc, FUNC(konppc_device::cgboard_1_comm_sharc_r), FUNC(konppc_device::cgboard_1_comm_sharc_w));
map(0x3500000, 0x35000ff).rw(m_konppc, FUNC(konppc_device::K033906_1_r), FUNC(konppc_device::K033906_1_w));
map(0x3600000, 0x37fffff).bankr("slave_cgboard_bank");
@@ -672,26 +688,23 @@ void nwktr_state::nwktr(machine_config &config)
VOODOO_1(config, m_voodoo[0], XTAL(50'000'000));
m_voodoo[0]->set_fbmem(2);
m_voodoo[0]->set_tmumem(2,2);
- m_voodoo[0]->set_screen_tag("lscreen");
+ m_voodoo[0]->set_screen_tag("screen");
m_voodoo[0]->set_cpu_tag(m_dsp[0]);
m_voodoo[0]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_voodoo[0]->stall_callback().set(m_dsp[0], FUNC(adsp21062_device::write_stall));
VOODOO_1(config, m_voodoo[1], XTAL(50'000'000));
m_voodoo[1]->set_fbmem(2);
m_voodoo[1]->set_tmumem(2,2);
- m_voodoo[1]->set_screen_tag("rscreen");
+ m_voodoo[1]->set_screen_tag("screen");
m_voodoo[1]->set_cpu_tag(m_dsp[1]);
m_voodoo[1]->vblank_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ1);
+ m_voodoo[1]->stall_callback().set(m_dsp[1], FUNC(adsp21062_device::write_stall));
- screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER));
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
// default 24KHz parameter in both 001604 and voodoo, input clock correct? (58~Hz Vsync, 50MHz/3 or 64MHz/4?)
- lscreen.set_raw(XTAL(64'000'000) / 4, 644, 44, 44 + 512, 450, 31, 31 + 400);
- lscreen.set_screen_update(FUNC(nwktr_state::screen_update<0>));
-
- screen_device &rscreen(SCREEN(config, "rscreen", SCREEN_TYPE_RASTER)); // for unused/debug screen from slave CG board
- // resolution currently unknown, input clock correct? (60~Hz Vsync, 50MHz/3 or 64MHz/4?)
- rscreen.set_raw(XTAL(64'000'000) / 4, 644, 44, 44 + 512, 450, 31, 31 + 400);
- rscreen.set_screen_update(FUNC(nwktr_state::screen_update<1>));
+ screen.set_raw(XTAL(64'000'000) / 4, 644, 44, 44 + 512, 450, 31, 31 + 400);
+ screen.set_screen_update(FUNC(nwktr_state::screen_update));
PALETTE(config, m_palette).set_entries(65536);
diff --git a/src/mame/drivers/odyssey2.cpp b/src/mame/drivers/odyssey2.cpp
index 8ff598840d6..8c9659d2829 100644
--- a/src/mame/drivers/odyssey2.cpp
+++ b/src/mame/drivers/odyssey2.cpp
@@ -401,7 +401,7 @@ u8 odyssey2_state::p2_read()
{
// P12: 74156 keyboard decoder enable, 74156 inputs from P20-P22
// 74148 priority encoder, GS to P24, outputs to P25-P27
- u8 inp = count_leading_zeros(m_keyboard[m_p2 & 0x07]->read()) - 24;
+ u8 inp = count_leading_zeros_32(m_keyboard[m_p2 & 0x07]->read()) - 24;
if (inp < 8)
data &= inp << 5 | 0xf;
}
diff --git a/src/mame/drivers/ojankohs.cpp b/src/mame/drivers/ojankohs.cpp
index 031a4ab301e..e1c7c7bafa5 100644
--- a/src/mame/drivers/ojankohs.cpp
+++ b/src/mame/drivers/ojankohs.cpp
@@ -32,19 +32,18 @@
#include "cpu/z80/z80.h"
#include "machine/nvram.h"
#include "sound/ay8910.h"
-#include "sound/msm5205.h"
#include "video/vsystem_gga.h"
#include "speaker.h"
-void ojankohs_state::ojankohs_rombank_w(uint8_t data)
+void ojankohs_state::rombank_w(uint8_t data)
{
- membank("bank1")->set_entry(data & 0x3f);
+ m_mainbank->set_entry(data & 0x3f);
}
-void ojankohs_state::ojankoy_rombank_w(uint8_t data)
+void ojankoy_state::rombank_w(uint8_t data)
{
- membank("bank1")->set_entry(data & 0x1f);
+ m_mainbank->set_entry(data & 0x1f);
m_adpcm_reset = BIT(data, 5);
if (!m_adpcm_reset)
@@ -53,7 +52,7 @@ void ojankohs_state::ojankoy_rombank_w(uint8_t data)
m_msm->reset_w(!m_adpcm_reset);
}
-void ojankohs_state::ojankohs_adpcm_reset_w(uint8_t data)
+void ojankohs_state::adpcm_reset_w(uint8_t data)
{
m_adpcm_reset = BIT(data, 0);
m_vclk_left = 0;
@@ -61,19 +60,19 @@ void ojankohs_state::ojankohs_adpcm_reset_w(uint8_t data)
m_msm->reset_w(!m_adpcm_reset);
}
-void ojankohs_state::ojankohs_msm5205_w(uint8_t data)
+void ojankohs_state::msm5205_w(uint8_t data)
{
m_adpcm_data = data;
m_vclk_left = 2;
}
-WRITE_LINE_MEMBER(ojankohs_state::ojankohs_adpcm_int)
+WRITE_LINE_MEMBER(ojankohs_state::adpcm_int)
{
- /* skip if we're reset */
+ // skip if we're reset
if (!m_adpcm_reset)
return;
- /* clock the data through */
+ // clock the data through
if (m_vclk_left)
{
m_msm->data_w(m_adpcm_data >> 4);
@@ -81,99 +80,99 @@ WRITE_LINE_MEMBER(ojankohs_state::ojankohs_adpcm_int)
m_vclk_left--;
}
- /* generate an NMI if we're out of data */
+ // generate an NMI if we're out of data
if (!m_vclk_left)
m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);
}
-void ojankohs_state::ojankoc_ctrl_w(uint8_t data)
+void ojankoc_state::ctrl_w(uint8_t data)
{
- membank("bank1")->set_entry(data & 0x0f);
+ m_mainbank->set_entry(data & 0x0f);
m_adpcm_reset = BIT(data, 4);
m_msm->reset_w(!BIT(data, 4));
- ojankoc_flipscreen(data);
+ flipscreen(data);
}
-void ojankohs_state::ojankohs_map(address_map &map)
+void ojankohs_state::map(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0x8fff).ram().w(FUNC(ojankohs_state::ojankohs_videoram_w)).share("videoram");
- map(0x9000, 0x9fff).ram().w(FUNC(ojankohs_state::ojankohs_colorram_w)).share("colorram");
+ map(0x8000, 0x8fff).ram().w(FUNC(ojankohs_state::videoram_w)).share(m_videoram);
+ map(0x9000, 0x9fff).ram().w(FUNC(ojankohs_state::colorram_w)).share(m_colorram);
map(0xa000, 0xb7ff).ram().share("nvram");
- map(0xb800, 0xbfff).ram().w(FUNC(ojankohs_state::ojankohs_palette_w)).share("paletteram");
- map(0xc000, 0xffff).bankr("bank1");
+ map(0xb800, 0xbfff).ram().w(FUNC(ojankohs_state::palette_w)).share(m_paletteram);
+ map(0xc000, 0xffff).bankr(m_mainbank);
}
-void ojankohs_state::ojankoy_map(address_map &map)
+void ojankoy_state::map(address_map &map)
{
map(0x0000, 0x7fff).rom();
- map(0x8000, 0x9fff).ram().w(FUNC(ojankohs_state::ojankohs_videoram_w)).share("videoram");
- map(0xa000, 0xafff).ram().w(FUNC(ojankohs_state::ojankohs_colorram_w)).share("colorram");
+ map(0x8000, 0x9fff).ram().w(FUNC(ojankoy_state::videoram_w)).share(m_videoram);
+ map(0xa000, 0xafff).ram().w(FUNC(ojankoy_state::colorram_w)).share(m_colorram);
map(0xb000, 0xbfff).ram().share("nvram");
- map(0xc000, 0xffff).bankr("bank1");
+ map(0xc000, 0xffff).bankr(m_mainbank);
}
-void ojankohs_state::ojankoc_map(address_map &map)
+void ojankoc_state::map(address_map &map)
{
map(0x0000, 0x77ff).rom();
map(0x7800, 0x7fff).ram().share("nvram");
- map(0x8000, 0xffff).bankr("bank1").w(FUNC(ojankohs_state::ojankoc_videoram_w));
+ map(0x8000, 0xffff).bankr(m_mainbank).w(FUNC(ojankoc_state::videoram_w));
}
-void ojankohs_state::ojankohs_io_map(address_map &map)
+void ojankohs_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).portr("system").w(FUNC(ojankohs_state::port_select_w));
- map(0x01, 0x01).rw(FUNC(ojankohs_state::keymatrix_p1_r), FUNC(ojankohs_state::ojankohs_rombank_w));
- map(0x02, 0x02).rw(FUNC(ojankohs_state::keymatrix_p2_r), FUNC(ojankohs_state::ojankohs_gfxreg_w));
- map(0x03, 0x03).w(FUNC(ojankohs_state::ojankohs_adpcm_reset_w));
- map(0x04, 0x04).w(FUNC(ojankohs_state::ojankohs_flipscreen_w));
- map(0x05, 0x05).w(FUNC(ojankohs_state::ojankohs_msm5205_w));
+ map(0x01, 0x01).rw(FUNC(ojankohs_state::keymatrix_p1_r), FUNC(ojankohs_state::rombank_w));
+ map(0x02, 0x02).rw(FUNC(ojankohs_state::keymatrix_p2_r), FUNC(ojankohs_state::gfxreg_w));
+ map(0x03, 0x03).w(FUNC(ojankohs_state::adpcm_reset_w));
+ map(0x04, 0x04).w(FUNC(ojankohs_state::flipscreen_w));
+ map(0x05, 0x05).w(FUNC(ojankohs_state::msm5205_w));
map(0x06, 0x06).r("aysnd", FUNC(ym2149_device::data_r));
map(0x06, 0x07).w("aysnd", FUNC(ym2149_device::data_address_w));
map(0x10, 0x11).w("gga", FUNC(vsystem_gga_device::write));
}
-void ojankohs_state::ojankoy_io_map(address_map &map)
+void ojankoy_state::io_map(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x00).portr("system").w(FUNC(ojankohs_state::port_select_w));
- map(0x01, 0x01).rw(FUNC(ojankohs_state::keymatrix_p1_r), FUNC(ojankohs_state::ojankoy_rombank_w));
- map(0x02, 0x02).rw(FUNC(ojankohs_state::keymatrix_p2_r), FUNC(ojankohs_state::ojankoy_coinctr_w));
- map(0x04, 0x04).w(FUNC(ojankohs_state::ojankohs_flipscreen_w));
- map(0x05, 0x05).w(FUNC(ojankohs_state::ojankohs_msm5205_w));
+ map(0x00, 0x00).portr("system").w(FUNC(ojankoy_state::port_select_w));
+ map(0x01, 0x01).rw(FUNC(ojankoy_state::keymatrix_p1_r), FUNC(ojankoy_state::rombank_w));
+ map(0x02, 0x02).rw(FUNC(ojankoy_state::keymatrix_p2_r), FUNC(ojankoy_state::coinctr_w));
+ map(0x04, 0x04).w(FUNC(ojankoy_state::flipscreen_w));
+ map(0x05, 0x05).w(FUNC(ojankoy_state::msm5205_w));
map(0x06, 0x06).r("aysnd", FUNC(ay8910_device::data_r));
map(0x06, 0x07).w("aysnd", FUNC(ay8910_device::data_address_w));
}
-void ojankohs_state::ccasino_io_map(address_map &map)
+void ccasino_state::io_map(address_map &map)
{
- map(0x00, 0x00).mirror(0xff00).portr("system").w(FUNC(ojankohs_state::port_select_w));
- map(0x01, 0x01).mirror(0xff00).rw(FUNC(ojankohs_state::keymatrix_p1_r), FUNC(ojankohs_state::ojankohs_rombank_w));
- map(0x02, 0x02).mirror(0xff00).rw(FUNC(ojankohs_state::keymatrix_p2_r), FUNC(ojankohs_state::ccasino_coinctr_w));
- map(0x03, 0x03).mirror(0xff00).r(FUNC(ojankohs_state::ccasino_dipsw3_r)).w(FUNC(ojankohs_state::ojankohs_adpcm_reset_w));
- map(0x04, 0x04).mirror(0xff00).r(FUNC(ojankohs_state::ccasino_dipsw4_r)).w(FUNC(ojankohs_state::ojankohs_flipscreen_w));
- map(0x05, 0x05).mirror(0xff00).w(FUNC(ojankohs_state::ojankohs_msm5205_w));
+ map(0x00, 0x00).mirror(0xff00).portr("system").w(FUNC(ccasino_state::port_select_w));
+ map(0x01, 0x01).mirror(0xff00).rw(FUNC(ccasino_state::keymatrix_p1_r), FUNC(ccasino_state::rombank_w));
+ map(0x02, 0x02).mirror(0xff00).rw(FUNC(ccasino_state::keymatrix_p2_r), FUNC(ccasino_state::coinctr_w));
+ map(0x03, 0x03).mirror(0xff00).r(FUNC(ccasino_state::dipsw3_r)).w(FUNC(ccasino_state::adpcm_reset_w));
+ map(0x04, 0x04).mirror(0xff00).r(FUNC(ccasino_state::dipsw4_r)).w(FUNC(ccasino_state::flipscreen_w));
+ map(0x05, 0x05).mirror(0xff00).w(FUNC(ccasino_state::msm5205_w));
map(0x06, 0x06).mirror(0xff00).r("aysnd", FUNC(ay8910_device::data_r));
map(0x06, 0x07).mirror(0xff00).w("aysnd", FUNC(ay8910_device::data_address_w));
- map(0x08, 0x0f).select(0xff00).w(FUNC(ojankohs_state::ccasino_palette_w)); // 16bit address access
+ map(0x08, 0x0f).select(0xff00).w(FUNC(ccasino_state::palette_w)); // 16bit address access
map(0x10, 0x11).mirror(0xff00).w("gga", FUNC(vsystem_gga_device::write));
}
-void ojankohs_state::ojankoc_io_map(address_map &map)
+void ojankoc_state::io_map(address_map &map)
{
map.global_mask(0xff);
- map(0x00, 0x1f).w(FUNC(ojankohs_state::ojankoc_palette_w));
- map(0xf9, 0xf9).w(FUNC(ojankohs_state::ojankohs_msm5205_w));
- map(0xfb, 0xfb).w(FUNC(ojankohs_state::ojankoc_ctrl_w));
- map(0xfc, 0xfc).r(FUNC(ojankohs_state::ojankoc_keymatrix_p1_r));
- map(0xfd, 0xfd).r(FUNC(ojankohs_state::ojankoc_keymatrix_p2_r));
- map(0xfd, 0xfd).w(FUNC(ojankohs_state::port_select_w));
+ map(0x00, 0x1f).w(FUNC(ojankoc_state::palette_w));
+ map(0xf9, 0xf9).w(FUNC(ojankoc_state::msm5205_w));
+ map(0xfb, 0xfb).w(FUNC(ojankoc_state::ctrl_w));
+ map(0xfc, 0xfc).r(FUNC(ojankoc_state::keymatrix_p1_r));
+ map(0xfd, 0xfd).r(FUNC(ojankoc_state::keymatrix_p2_r));
+ map(0xfd, 0xfd).w(FUNC(ojankoc_state::port_select_w));
map(0xfe, 0xff).w("aysnd", FUNC(ay8910_device::data_address_w));
map(0xff, 0xff).r("aysnd", FUNC(ay8910_device::data_r));
}
@@ -521,22 +520,23 @@ static INPUT_PORTS_START( ojankoc )
PORT_DIPSETTING( 0x06, "1000")
PORT_DIPSETTING( 0x04, "2000")
PORT_DIPSETTING( 0x02, "3000")
- PORT_DIPSETTING( 0x00, "5000")
- PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW1:4")
- PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW1:5")
- PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW1:6")
- PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW1:7")
+ PORT_DIPSETTING( 0x00, "5000") // dip sheet says 4000, but verified 5000 in game for all dumped sets
+ PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW1:4") // marked as off in the dip sheet
+ PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW1:5") // marked as off in the dip sheet
+ PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW1:6") // marked as off in the dip sheet
+ PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW1:7") // marked as off in the dip sheet
PORT_SERVICE_DIPLOC(0x80, IP_ACTIVE_LOW, "DSW1:8")
- PORT_START("dsw2")
- PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "DSW2:1")
- PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "DSW2:2")
- PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "DSW2:3")
- PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "DSW2:4")
- PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "DSW2:5")
- PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "DSW2:6")
- PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "DSW2:7")
- PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "DSW2:8")
+ PORT_START("dsw2") // dip sheet shows you have to turn all the dips off but the one that determines the difficulty you want
+ PORT_DIPNAME(0xff, 0xef, DEF_STR( Difficulty )) PORT_DIPLOCATION("DSW2:1,2,3,4,5,6,7,8")
+ PORT_DIPSETTING( 0xfe, "A (easiest)")
+ PORT_DIPSETTING( 0xfd, "B")
+ PORT_DIPSETTING( 0xfb, "C")
+ PORT_DIPSETTING( 0xf7, "D")
+ PORT_DIPSETTING( 0xef, "E")
+ PORT_DIPSETTING( 0xdf, "F")
+ PORT_DIPSETTING( 0xbf, "G")
+ PORT_DIPSETTING( 0x7f, "H (most difficult)")
INPUT_PORTS_END
@@ -579,7 +579,7 @@ uint8_t ojankohs_state::keymatrix_p2_r()
return data;
}
-uint8_t ojankohs_state::ojankoc_keymatrix_p1_r()
+uint8_t ojankoc_state::keymatrix_p1_r()
{
uint8_t data = 0x00;
@@ -593,7 +593,7 @@ uint8_t ojankohs_state::ojankoc_keymatrix_p1_r()
return data;
}
-uint8_t ojankohs_state::ojankoc_keymatrix_p2_r()
+uint8_t ojankoc_state::keymatrix_p2_r()
{
uint8_t data = 0x00;
@@ -607,34 +607,34 @@ uint8_t ojankohs_state::ojankoc_keymatrix_p2_r()
return data;
}
-uint8_t ojankohs_state::ojankohs_dipsw1_r()
+uint8_t ojankohs_state::dipsw1_r()
{
- uint8_t data = m_dsw1->read();
+ uint8_t data = m_dsw[0]->read();
return bitswap<8>(data, 0, 1, 2, 3, 4, 5, 6, 7);
}
-uint8_t ojankohs_state::ojankohs_dipsw2_r()
+uint8_t ojankohs_state::dipsw2_r()
{
- uint8_t data = m_dsw2->read();
+ uint8_t data = m_dsw[1]->read();
return bitswap<8>(data, 0, 1, 2, 3, 4, 5, 6, 7);
}
-uint8_t ojankohs_state::ccasino_dipsw3_r()
+uint8_t ccasino_state::dipsw3_r()
{
- return m_dsw3->read() ^ 0xff;
+ return m_extra_dsw[0]->read() ^ 0xff;
}
-uint8_t ojankohs_state::ccasino_dipsw4_r()
+uint8_t ccasino_state::dipsw4_r()
{
- return m_dsw4->read() ^ 0xff;
+ return m_extra_dsw[1]->read() ^ 0xff;
}
-void ojankohs_state::ojankoy_coinctr_w(uint8_t data)
+void ojankoy_state::coinctr_w(uint8_t data)
{
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
}
-void ojankohs_state::ccasino_coinctr_w(uint8_t data)
+void ccasino_state::coinctr_w(uint8_t data)
{
machine().bookkeeping().coin_counter_w(0, BIT(data, 1));
}
@@ -652,10 +652,10 @@ static const gfx_layout ojankohs_bglayout =
};
static GFXDECODE_START( gfx_ojankohs )
- GFXDECODE_ENTRY( "gfx1", 0, ojankohs_bglayout, 0, 64 )
+ GFXDECODE_ENTRY( "gfx", 0, ojankohs_bglayout, 0, 64 )
GFXDECODE_END
-MACHINE_START_MEMBER(ojankohs_state,common)
+void ojankohs_state::common_state_saving()
{
save_item(NAME(m_gfxreg));
save_item(NAME(m_flipscreen));
@@ -669,31 +669,24 @@ MACHINE_START_MEMBER(ojankohs_state,common)
save_item(NAME(m_vclk_left));
}
-MACHINE_START_MEMBER(ojankohs_state,ojankohs)
-{
- uint8_t *ROM = memregion("maincpu")->base();
-
- membank("bank1")->configure_entries(0, 0x40, &ROM[0x10000], 0x4000);
- MACHINE_START_CALL_MEMBER(common);
-}
-
-MACHINE_START_MEMBER(ojankohs_state,ojankoy)
+void ojankohs_state::machine_start()
{
- uint8_t *ROM = memregion("maincpu")->base();
+ uint8_t *rom = memregion("maincpu")->base();
+ uint32_t banked_size = memregion("maincpu")->bytes();
- membank("bank1")->configure_entries(0, 0x20, &ROM[0x10000], 0x4000);
+ m_mainbank->configure_entries(0, banked_size / 0x4000, &rom[0x10000], 0x4000);
- MACHINE_START_CALL_MEMBER(common);
+ common_state_saving();
}
-MACHINE_START_MEMBER(ojankohs_state,ojankoc)
+void ojankoc_state::machine_start()
{
- uint8_t *ROM = memregion("user1")->base();
+ uint8_t *rom = memregion("banked_roms")->base();
- membank("bank1")->configure_entries(0, 0x10, &ROM[0x0000], 0x8000);
+ m_mainbank->configure_entries(0, 0x10, &rom[0x0000], 0x8000);
- MACHINE_START_CALL_MEMBER(common);
+ common_state_saving();
}
void ojankohs_state::machine_reset()
@@ -714,164 +707,149 @@ void ojankohs_state::machine_reset()
void ojankohs_state::ojankohs(machine_config &config)
{
- /* basic machine hardware */
- Z80(config, m_maincpu, 12000000/2); /* 6.00 MHz ? */
- m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::ojankohs_map);
- m_maincpu->set_addrmap(AS_IO, &ojankohs_state::ojankohs_io_map);
+ // basic machine hardware
+ Z80(config, m_maincpu, 12'000'000 / 2); // 6.00 MHz ?
+ m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::map);
+ m_maincpu->set_addrmap(AS_IO, &ojankohs_state::io_map);
m_maincpu->set_vblank_int("screen", FUNC(ojankohs_state::irq0_line_hold));
- MCFG_MACHINE_START_OVERRIDE(ojankohs_state,ojankohs)
-
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(512, 512);
m_screen->set_visarea(0, 288-1, 0, 224-1);
- m_screen->set_screen_update(FUNC(ojankohs_state::screen_update_ojankohs));
+ m_screen->set_screen_update(FUNC(ojankohs_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ojankohs);
PALETTE(config, m_palette).set_entries(1024);
- VSYSTEM_GGA(config, "gga", XTAL(13'333'000)/2); // divider not verified
+ VSYSTEM_GGA(config, "gga", XTAL(13'333'000) / 2); // divider not verified
- MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ojankohs)
-
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
- ym2149_device &aysnd(YM2149(config, "aysnd", 12000000/6));
- aysnd.port_a_read_callback().set(FUNC(ojankohs_state::ojankohs_dipsw1_r));
- aysnd.port_b_read_callback().set(FUNC(ojankohs_state::ojankohs_dipsw2_r));
+ ym2149_device &aysnd(YM2149(config, "aysnd", 12'000'000 / 6));
+ aysnd.port_a_read_callback().set(FUNC(ojankohs_state::dipsw1_r));
+ aysnd.port_b_read_callback().set(FUNC(ojankohs_state::dipsw2_r));
aysnd.add_route(ALL_OUTPUTS, "mono", 0.15);
- MSM5205(config, m_msm, 384000);
- m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::ojankohs_adpcm_int)); /* IRQ handler */
- m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 KHz */
+ MSM5205(config, m_msm, 384'000);
+ m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::adpcm_int)); // IRQ handler
+ m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 KHz
m_msm->add_route(ALL_OUTPUTS, "mono", 0.50);
}
-void ojankohs_state::ojankoy(machine_config &config)
+void ojankoy_state::ojankoy(machine_config &config)
{
- /* basic machine hardware */
- Z80(config, m_maincpu, 12000000/2); /* 6.00 MHz ? */
- m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::ojankoy_map);
- m_maincpu->set_addrmap(AS_IO, &ojankohs_state::ojankoy_io_map);
- m_maincpu->set_vblank_int("screen", FUNC(ojankohs_state::irq0_line_hold));
-
- MCFG_MACHINE_START_OVERRIDE(ojankohs_state,ojankoy)
+ // basic machine hardware
+ Z80(config, m_maincpu, 12'000'000 / 2); // 6.00 MHz ?
+ m_maincpu->set_addrmap(AS_PROGRAM, &ojankoy_state::map);
+ m_maincpu->set_addrmap(AS_IO, &ojankoy_state::io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(ojankoy_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(512, 512);
m_screen->set_visarea(0, 288-1, 0, 224-1);
- m_screen->set_screen_update(FUNC(ojankohs_state::screen_update_ojankohs));
+ m_screen->set_screen_update(FUNC(ojankoy_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ojankohs);
- PALETTE(config, m_palette, FUNC(ojankohs_state::ojankoy_palette), 1024);
-
- MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ojankoy)
+ PALETTE(config, m_palette, FUNC(ojankoy_state::palette), 1024);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
- ay8910_device &aysnd(AY8910(config, "aysnd", 12000000/8));
+ ay8910_device &aysnd(AY8910(config, "aysnd", 12'000'000 / 8));
aysnd.port_a_read_callback().set_ioport("dsw1");
aysnd.port_b_read_callback().set_ioport("dsw2");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.15);
- MSM5205(config, m_msm, 384000);
- m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::ojankohs_adpcm_int)); /* IRQ handler */
- m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 KHz */
+ MSM5205(config, m_msm, 384'000);
+ m_msm->vck_legacy_callback().set(FUNC(ojankoy_state::adpcm_int)); // IRQ handler
+ m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 KHz
m_msm->add_route(ALL_OUTPUTS, "mono", 0.50);
}
-void ojankohs_state::ccasino(machine_config &config)
+void ccasino_state::ccasino(machine_config &config)
{
- /* basic machine hardware */
- Z80(config, m_maincpu, 12000000/2); /* 6.00 MHz ? */
- m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::ojankoy_map);
- m_maincpu->set_addrmap(AS_IO, &ojankohs_state::ccasino_io_map);
- m_maincpu->set_vblank_int("screen", FUNC(ojankohs_state::irq0_line_hold));
-
- MCFG_MACHINE_START_OVERRIDE(ojankohs_state,ojankohs)
+ // basic machine hardware
+ Z80(config, m_maincpu, 12'000'000 / 2); // 6.00 MHz ?
+ m_maincpu->set_addrmap(AS_PROGRAM, &ccasino_state::map);
+ m_maincpu->set_addrmap(AS_IO, &ccasino_state::io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(ccasino_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(512, 512);
m_screen->set_visarea(0, 288-1, 0, 224-1);
- m_screen->set_screen_update(FUNC(ojankohs_state::screen_update_ojankohs));
+ m_screen->set_screen_update(FUNC(ccasino_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_ojankohs);
PALETTE(config, m_palette).set_entries(1024);
- VSYSTEM_GGA(config, "gga", XTAL(13'333'000)/2); // divider not verified
+ VSYSTEM_GGA(config, "gga", XTAL(13'333'000) / 2); // divider not verified
- MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ccasino)
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
- ay8910_device &aysnd(AY8910(config, "aysnd", 12000000/8));
+ ay8910_device &aysnd(AY8910(config, "aysnd", 12'000'000 / 8));
aysnd.port_a_read_callback().set_ioport("dsw1");
aysnd.port_b_read_callback().set_ioport("dsw2");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.15);
- MSM5205(config, m_msm, 384000);
- m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::ojankohs_adpcm_int)); /* IRQ handler */
- m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 KHz */
+ MSM5205(config, m_msm, 384'000);
+ m_msm->vck_legacy_callback().set(FUNC(ccasino_state::adpcm_int)); // IRQ handler
+ m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 KHz
m_msm->add_route(ALL_OUTPUTS, "mono", 0.50);
}
-void ojankohs_state::ojankoc(machine_config &config)
+void ojankoc_state::ojankoc(machine_config &config)
{
- /* basic machine hardware */
- Z80(config, m_maincpu, 8000000/2); /* 4.00 MHz */
- m_maincpu->set_addrmap(AS_PROGRAM, &ojankohs_state::ojankoc_map);
- m_maincpu->set_addrmap(AS_IO, &ojankohs_state::ojankoc_io_map);
- m_maincpu->set_vblank_int("screen", FUNC(ojankohs_state::irq0_line_hold));
-
- MCFG_MACHINE_START_OVERRIDE(ojankohs_state,ojankoc)
+ // basic machine hardware
+ Z80(config, m_maincpu, 8_MHz_XTAL / 2); // 4.00 MHz
+ m_maincpu->set_addrmap(AS_PROGRAM, &ojankoc_state::map);
+ m_maincpu->set_addrmap(AS_IO, &ojankoc_state::io_map);
+ m_maincpu->set_vblank_int("screen", FUNC(ojankoc_state::irq0_line_hold));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* video hardware */
+ // video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
m_screen->set_size(32*8, 32*8);
m_screen->set_visarea(0, 256-1, 8, 248-1);
- m_screen->set_screen_update(FUNC(ojankohs_state::screen_update_ojankoc));
+ m_screen->set_screen_update(FUNC(ojankoc_state::screen_update));
m_screen->set_palette(m_palette);
PALETTE(config, m_palette).set_entries(16);
- MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ojankoc)
-
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
- ay8910_device &aysnd(AY8910(config, "aysnd", 8000000/4));
+ ay8910_device &aysnd(AY8910(config, "aysnd", 8_MHz_XTAL / 4));
aysnd.port_a_read_callback().set_ioport("dsw1");
aysnd.port_b_read_callback().set_ioport("dsw2");
aysnd.add_route(ALL_OUTPUTS, "mono", 0.15);
- MSM5205(config, m_msm, 8000000/22);
- m_msm->vck_legacy_callback().set(FUNC(ojankohs_state::ojankohs_adpcm_int)); /* IRQ handler */
- m_msm->set_prescaler_selector(msm5205_device::S48_4B); /* 8 KHz */
+ MSM5205(config, m_msm, 8_MHz_XTAL / 22);
+ m_msm->vck_legacy_callback().set(FUNC(ojankoc_state::adpcm_int)); // IRQ handler
+ m_msm->set_prescaler_selector(msm5205_device::S48_4B); // 8 KHz
m_msm->add_route(ALL_OUTPUTS, "mono", 0.50);
}
@@ -882,7 +860,7 @@ ROM_START( ojankohs )
ROM_LOAD( "5b", 0x10000, 0x80000, CRC(bd4fd0b6) SHA1(79e0937fdd34ec03b4b0a503efc1fa7c8f29e7cf) )
ROM_LOAD( "6.6c", 0x90000, 0x08000, CRC(30772679) SHA1(8bc415da465faa70ec468a23b3528493849e83ee) )
- ROM_REGION( 0x80000, "gfx1", 0 )
+ ROM_REGION( 0x80000, "gfx", 0 )
ROM_LOAD( "13b", 0x00000, 0x80000, CRC(bda30bfa) SHA1(c412e573c40816735f7e2d0600dd0d78ebce91dc) )
ROM_END
@@ -896,7 +874,7 @@ ROM_START( ojankoy )
ROM_LOAD( "c-ic32.bin", 0x60000, 0x08000, CRC(d20de9b0) SHA1(bfec453a5e16bb3e1ffa454d6dad44e113a54968) )
ROM_LOAD( "d-ic31.bin", 0x68000, 0x08000, CRC(b78e6913) SHA1(a0ebe0b29025beabe5609a5d1adecfd2565da623) )
- ROM_REGION( 0x70000, "gfx1", 0 )
+ ROM_REGION( 0x70000, "gfx", 0 )
ROM_LOAD( "ic55.bin", 0x00000, 0x20000, CRC(586fb385) SHA1(cdf18f52ba8d25c740fc85a68505f102fe6ba208) )
ROM_LOAD( "0-ic53.bin", 0x40000, 0x08000, CRC(db38c288) SHA1(8b98091eae9c22ade123a6f58c108f8e653d99c8) )
ROM_LOAD( "1-ic52.bin", 0x48000, 0x08000, CRC(a8b4a10b) SHA1(fa44c52efd42a99e2d34c4785a09947523a8385a) )
@@ -920,7 +898,7 @@ ROM_START( ojanko2 )
ROM_LOAD( "c-ic32.bin", 0x60000, 0x08000, CRC(5453b9de) SHA1(d9758c56cd65d65d0711368054fc0dfbb4b213ae) )
ROM_LOAD( "d-ic31.bin", 0x68000, 0x08000, CRC(44cd5348) SHA1(a73a676fbca4678aef8066ad72ea22c6c4ca4b32) )
- ROM_REGION( 0x70000, "gfx1", 0 )
+ ROM_REGION( 0x70000, "gfx", 0 )
ROM_LOAD( "ic55.bin", 0x00000, 0x20000, CRC(b058fb3d) SHA1(32b04405f218c1f9ca58f01dbadda3536df3d0b5) )
ROM_LOAD( "0-ic53.bin", 0x40000, 0x08000, CRC(db38c288) SHA1(8b98091eae9c22ade123a6f58c108f8e653d99c8) )
ROM_LOAD( "1-ic52.bin", 0x48000, 0x08000, CRC(49f2ca73) SHA1(387613fd886f3a4a569146aaec59ad15f13a8ea5) )
@@ -941,7 +919,7 @@ ROM_START( ccasino )
ROM_LOAD( "g5.bin", 0x58000, 0x08000, CRC(8cfd60aa) SHA1(203789c58a9cbfbf37ad2a3dfcd86eefe406b2c7) )
ROM_LOAD( "h5.bin", 0x60000, 0x08000, CRC(d20dfcf9) SHA1(83ca36f2e02bbada5b03734b5d92c5c860292db2) )
- ROM_REGION( 0x60000, "gfx1", 0 )
+ ROM_REGION( 0x60000, "gfx", 0 )
ROM_LOAD( "r1.bin", 0x00000, 0x20000, CRC(407f77ca) SHA1(a65e5403fa84185d67d994acee6f32051991d546) )
ROM_LOAD( "s1.bin", 0x20000, 0x20000, CRC(8572d156) SHA1(22f73bfb1419c3d467b4cd4ffaa6f1598f4ee4fa) )
ROM_LOAD( "e1.bin", 0x40000, 0x08000, CRC(d78c3428) SHA1(b033a7aa3029b7a9ff836c5c737c07aaad5d7456) )
@@ -951,10 +929,10 @@ ROM_START( ccasino )
ROM_END
ROM_START( ojankoc )
- ROM_REGION( 0x10000, "maincpu", 0 ) /* CPU */
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "c11.1p", 0x0000, 0x8000, CRC(cb3e900c) SHA1(95f0354f147e339a97368b5cc67200151cdfa0e9) )
- ROM_REGION( 0x80000, "user1", 0 ) /* BANK */
+ ROM_REGION( 0x80000, "banked_roms", 0 )
ROM_LOAD( "1.1a", 0x00000, 0x8000, CRC(d40b17eb) SHA1(1e8c16e1562c112ca5150b3187a2d4aa22c1adf0) )
ROM_LOAD( "2.1b", 0x08000, 0x8000, CRC(d181172a) SHA1(65d6710464a1f505df705c553558bbf22704359d) )
ROM_LOAD( "3.1c", 0x10000, 0x8000, CRC(2e86d5bc) SHA1(0226eb81b31e43325f24b40ab51bce1729bf678c) )
@@ -968,10 +946,27 @@ ROM_START( ojankoc )
ROM_END
ROM_START( ojankoca )
- ROM_REGION( 0x10000, "maincpu", 0 ) /* CPU */
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "11.1p", 0x0000, 0x8000, CRC(0c552e32) SHA1(2a8714796b2c95a042d783aae79c135ba03d1958) )
- ROM_REGION( 0x80000, "user1", 0 ) /* BANK */
+ ROM_REGION( 0x80000, "banked_roms", 0 )
+ ROM_LOAD( "1.1a", 0x00000, 0x8000, CRC(d40b17eb) SHA1(1e8c16e1562c112ca5150b3187a2d4aa22c1adf0) )
+ ROM_LOAD( "2.1b", 0x08000, 0x8000, CRC(d181172a) SHA1(65d6710464a1f505df705c553558bbf22704359d) )
+ ROM_LOAD( "3.1c", 0x10000, 0x8000, CRC(2e86d5bc) SHA1(0226eb81b31e43325f24b40ab51bce1729bf678c) )
+ ROM_LOAD( "4.1e", 0x18000, 0x8000, CRC(00a780cb) SHA1(f0b4f6f0c58e9d069e0f6794243925679f220f35) )
+ ROM_LOAD( "5.1f", 0x20000, 0x8000, CRC(f9885076) SHA1(ebf4c0769eab6545fd227eb9f4036af2472bcac3) )
+ ROM_LOAD( "6.1h", 0x28000, 0x8000, CRC(42575d0c) SHA1(1f9c187b0c05179798cbdb28eb212202ffdc9fde) )
+ ROM_LOAD( "7.1k", 0x30000, 0x8000, CRC(4d8d8928) SHA1(a5ccf4a1d84ef3a4966db01d66371de83e270701) )
+ ROM_LOAD( "8.1l", 0x38000, 0x8000, CRC(534573b7) SHA1(ec53cad7d652c88508edd29c2412834920fe8ef6) )
+ ROM_LOAD( "9.1m", 0x48000, 0x8000, CRC(2bf88eda) SHA1(55de96d057a0f35d9e74455444751f217aa4741e) )
+ ROM_LOAD( "0.1n", 0x50000, 0x8000, CRC(5665016e) SHA1(0f7f0a8e55e93bcb3060c91d9704905a6e827250) )
+ROM_END
+
+ROM_START( ojankocb ) // VS6-0501 PCB, has a big metal box, under which there is supposed to be an input custom. It also has a 12 MHz XTAL near it.
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "11.1p", 0x0000, 0x8000, CRC(a2739aad) SHA1(2d8c3809606a166bbd4ec7b28d7a6cf7dfce87a6) ) // sldh
+
+ ROM_REGION( 0x80000, "banked_roms", 0 )
ROM_LOAD( "1.1a", 0x00000, 0x8000, CRC(d40b17eb) SHA1(1e8c16e1562c112ca5150b3187a2d4aa22c1adf0) )
ROM_LOAD( "2.1b", 0x08000, 0x8000, CRC(d181172a) SHA1(65d6710464a1f505df705c553558bbf22704359d) )
ROM_LOAD( "3.1c", 0x10000, 0x8000, CRC(2e86d5bc) SHA1(0226eb81b31e43325f24b40ab51bce1729bf678c) )
@@ -985,9 +980,10 @@ ROM_START( ojankoca )
ROM_END
-GAME( 1986, ojankoc, 0, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, ojankoca, ojankoc, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, ojankoy, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, ojanko2, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata 2bankan (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, ccasino, 0, ccasino, ccasino, ccasino_state, empty_init, ROT0, "V-System Co.", "Chinese Casino [BET] (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, ojankohs, 0, ojankohs, ojankohs, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko High School (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, ojankoc, 0, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3, set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, ojankocb, ojankoc, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.3, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, ojankoca, ojankoc, ojankoc, ojankoc, ojankoc_state, empty_init, ROT0, "V-System Co.", "Ojanko Club (Japan, Program Ver. 1.2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, ojankoy, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, ojanko2, 0, ojankoy, ojankoy, ojankoy_state, empty_init, ROT0, "V-System Co.", "Ojanko Yakata 2bankan (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, ccasino, 0, ccasino, ccasino, ccasino_state, empty_init, ROT0, "V-System Co.", "Chinese Casino [BET] (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, ojankohs, 0, ojankohs, ojankohs, ojankohs_state, empty_init, ROT0, "V-System Co.", "Ojanko High School (Japan)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/olibochu.cpp b/src/mame/drivers/olibochu.cpp
index dbcb0ab94ba..8fa5924cec8 100644
--- a/src/mame/drivers/olibochu.cpp
+++ b/src/mame/drivers/olibochu.cpp
@@ -257,7 +257,7 @@ void olibochu_state::sound_command_w(offs_t offset, uint8_t data)
else
m_cmd = (m_cmd & 0xff00) | uint16_t(data);
- unsigned c = count_leading_zeros(uint32_t(m_cmd)) - 16;
+ unsigned c = count_leading_zeros_32(uint32_t(m_cmd)) - 16;
if (c < 16)
m_soundlatch->write(c);
}
diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp
index 5eec52304b3..67e286fb26b 100644
--- a/src/mame/drivers/pacman.cpp
+++ b/src/mame/drivers/pacman.cpp
@@ -6550,6 +6550,30 @@ ROM_START( paintrlr )
ROM_LOAD( "82s126.3m", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) // Timing - not used
ROM_END
+// PCB is marked: "CRUSH ROLLER" on component side
+// PCB is labelled: "PENNELLO 2" on component side ("pennello" is the Italian word for "brush")
+// Bootleg of a hack? Shows Painter (c) 1984 Monshine Ent. Co. before coining up, Painter (c) 1984 Elsys Software after coining up.
+// Interesting hack: it mixes Crush Roller elements with Pacman elements
+ROM_START( painter )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "pain1.6e", 0x0000, 0x1000, CRC(fb2eb6dc) SHA1(377075cb64c7ccc0bd2b0185848d4798428bceb2) )
+ ROM_LOAD( "pain2.6f", 0x1000, 0x1000, CRC(39f92fb0) SHA1(2b58429664eadb8bb5100289182b274cc7e4688c) )
+ ROM_LOAD( "pain3.6h", 0x2000, 0x1000, CRC(f80435b1) SHA1(7f41ecc2a91f8bdf0969f4f3fe96b48adb1010ba) )
+ ROM_LOAD( "pain4-pennello2.6j", 0x3000, 0x1000, CRC(0cb678dc) SHA1(b1b9eadf22dc7985b39d414438092a7fc6c58955) ) // has strange strings in the second half, but seems to work fine
+
+ ROM_REGION( 0x2000, "gfx1", 0 )
+ ROM_LOAD( "pain5.5e", 0x0000, 0x1000, CRC(bd819afc) SHA1(2e8762c3c480aa669f7e87651ddfdbb965ea4211) )
+ ROM_LOAD( "pain6.5f", 0x1000, 0x1000, BAD_DUMP CRC(014e5ed3) SHA1(8e01c640457515da89723215b19684ceb4556997) ) // BADADDR xx-xxxxxxxxx, dumped with 2 different programmers with same result, but probably damaged ROM
+
+ ROM_REGION( 0x0120, "proms", 0 ) // not dumped for this set
+ ROM_LOAD( "82s123.7f", 0x0000, 0x0020, BAD_DUMP CRC(2fc650bd) SHA1(8d0268dee78e47c712202b0ec4f1f51109b1f2a5) )
+ ROM_LOAD( "2s140.4a", 0x0020, 0x0100, BAD_DUMP CRC(63efb927) SHA1(5c144a613fc4960a1dfd7ead89e7fee258a63171) )
+
+ ROM_REGION( 0x0200, "namco", 0 ) // not dumped for this set
+ ROM_LOAD( "82s126.1m", 0x0000, 0x0100, BAD_DUMP CRC(a9cc86bf) SHA1(bbcec0570aeceb582ff8238a4bc8546a23430081) )
+ ROM_LOAD( "82s126.3m", 0x0100, 0x0100, BAD_DUMP CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) // Timing - not used
+ROM_END
+
/*
Crush Roller (Sidam PCB)
@@ -8293,6 +8317,7 @@ GAME( 1981, crushbl3, crush, korosuke, mbrush, pacman_state, init_maketrax
GAME( 1981, crushs, crush, crushs, crushs, pacman_state, empty_init, ROT90, "bootleg (Sidam)", "Crush Roller (bootleg set 4)", MACHINE_SUPPORTS_SAVE ) // Sidam PCB, no Sidam text
GAME( 1981, mbrush, crush, korosuke, mbrush, pacman_state, init_mbrush, ROT90, "bootleg (Olympia)", "Magic Brush (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, paintrlr, crush, crush2, paintrlr, pacman_state, empty_init, ROT90, "bootleg", "Paint Roller (bootleg of Crush Roller)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, painter, crush, crush2, paintrlr, pacman_state, empty_init, ROT90, "hack (Monshine Ent. Co.)", "Painter (hack of Crush Roller)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // currently shows Paintei due to bad sprite ROM
GAME( 1982, eyes, 0, pacman, eyes, pacman_state, init_eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (US set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, eyes2, eyes, pacman, eyes, pacman_state, init_eyes, ROT90, "Techstar (Rock-Ola license)", "Eyes (US set 2)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pasha2.cpp b/src/mame/drivers/pasha2.cpp
index 16bc6dcaee6..fdf88f2ac0e 100644
--- a/src/mame/drivers/pasha2.cpp
+++ b/src/mame/drivers/pasha2.cpp
@@ -98,7 +98,6 @@ public:
pasha2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_wram(*this, "wram")
- , m_paletteram(*this, "paletteram")
, m_mainbank(*this, "mainbank")
, m_lamps_r(*this, "lamp_p%u_r", 1U)
, m_lamps_g(*this, "lamp_p%u_g", 1U)
@@ -120,47 +119,55 @@ protected:
private:
// memory pointers
- required_shared_ptr<uint16_t> m_wram;
- required_shared_ptr<uint16_t> m_paletteram;
+ required_shared_ptr<u16> m_wram;
required_memory_bank m_mainbank;
+ // output finders
output_finder<3> m_lamps_r;
output_finder<3> m_lamps_g;
output_finder<3> m_lamps_b;
- // video-related
- uint8_t m_vbuffer;
-
- // memory
- std::unique_ptr<uint8_t[]> m_bitmap0[2];
- std::unique_ptr<uint8_t[]> m_bitmap1[2];
- void misc_w(offs_t offset, uint16_t data);
- void palette_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- void vbuffer_set_w(uint16_t data);
- void vbuffer_clear_w(uint16_t data);
- void bitmap_0_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0);
- void bitmap_1_w(offs_t offset, uint8_t data, uint8_t mem_mask = ~0);
- void pasha2_lamps_w(uint16_t data);
- uint16_t pasha2_speedup_r(offs_t offset);
- template<int Chip> void oki_bank_w(offs_t offset, uint16_t data);
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ // devices
required_device<cpu_device> m_maincpu;
required_device_array<okim6295_device, 2> m_oki;
required_device<palette_device> m_palette;
+
+ // video-related
+ u8 m_vbuffer = 0;
+ bitmap_ind16 m_bg_bitmap[2];
+ bitmap_ind16 m_fg_bitmap[2];
+
+ // video functions
+ void vbuffer_set_w(u16 data);
+ void vbuffer_clear_w(u16 data);
+ void bg_bitmap_w(offs_t offset, u8 data);
+ void fg_bitmap_w(offs_t offset, u8 data);
+
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ // peripheral handlers
+ template<int Chip> void oki_bank_w(offs_t offset, u16 data);
+ void misc_w(offs_t offset, u16 data);
+ void pasha2_lamps_w(u16 data);
+
+ // speedup functions
+ u16 pasha2_speedup_r(offs_t offset);
+
+ // address maps
void pasha2_io(address_map &map);
void pasha2_map(address_map &map);
void zdrum_audio_map(address_map &map);
};
-void pasha2_state::misc_w(offs_t offset, uint16_t data)
+void pasha2_state::misc_w(offs_t offset, u16 data)
{
if (offset)
{
if (data & 0x0800)
{
- int bank = data & 0xf000;
+ const u16 bank = data & 0xf000;
switch (bank)
{
@@ -176,53 +183,38 @@ void pasha2_state::misc_w(offs_t offset, uint16_t data)
}
}
-void pasha2_state::palette_w(offs_t offset, uint16_t data, uint16_t mem_mask)
-{
- int color;
-
- COMBINE_DATA(&m_paletteram[offset]);
-
- offset &= 0xff;
-
- color = (m_paletteram[offset] >> 8) | (m_paletteram[offset + 0x100] & 0xff00);
- m_palette->set_pen_color(offset * 2 + 0, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10));
-
- color = (m_paletteram[offset] & 0xff) | ((m_paletteram[offset + 0x100] & 0xff) << 8);
- m_palette->set_pen_color(offset * 2 + 1, pal5bit(color), pal5bit(color >> 5), pal5bit(color >> 10));
-}
-
-void pasha2_state::vbuffer_set_w(uint16_t data)
+void pasha2_state::vbuffer_set_w(u16 data)
{
m_vbuffer = 1;
}
-void pasha2_state::vbuffer_clear_w(uint16_t data)
+void pasha2_state::vbuffer_clear_w(u16 data)
{
m_vbuffer = 0;
}
-void pasha2_state::bitmap_0_w(offs_t offset, uint8_t data, uint8_t mem_mask)
+void pasha2_state::bg_bitmap_w(offs_t offset, u8 data)
{
- COMBINE_DATA(&m_bitmap0[m_vbuffer][offset]);
+ m_bg_bitmap[m_vbuffer].pix(offset >> 9, offset & 0x1ff) = (data & 0xff) | 0x100;
}
-void pasha2_state::bitmap_1_w(offs_t offset, uint8_t data, uint8_t mem_mask)
+void pasha2_state::fg_bitmap_w(offs_t offset, u8 data)
{
// handle overlapping pixels without writing them
if ((data & 0xff) == 0xff)
return;
- COMBINE_DATA(&m_bitmap1[m_vbuffer][offset]);
+ m_fg_bitmap[m_vbuffer].pix(offset >> 9, offset & 0x1ff) = data & 0xff;
}
template<int Chip>
-void pasha2_state::oki_bank_w(offs_t offset, uint16_t data)
+void pasha2_state::oki_bank_w(offs_t offset, u16 data)
{
if (offset)
m_oki[Chip]->set_rom_bank(data & 1);
}
-void pasha2_state::pasha2_lamps_w(uint16_t data)
+void pasha2_state::pasha2_lamps_w(u16 data)
{
for (int p = 0; p < 3; p++)
{
@@ -234,9 +226,11 @@ void pasha2_state::pasha2_lamps_w(uint16_t data)
void pasha2_state::pasha2_map(address_map &map)
{
+ // MEM0 (DRAM)
map(0x00000000, 0x001fffff).ram().share("wram");
- map(0x40000000, 0x4001ffff).ram().w(FUNC(pasha2_state::bitmap_0_w));
- map(0x40020000, 0x4003ffff).ram().w(FUNC(pasha2_state::bitmap_1_w));
+ // MEM1 (VRAM and Video registers)
+ map(0x40000000, 0x4001ffff).ram().w(FUNC(pasha2_state::bg_bitmap_w));
+ map(0x40020000, 0x4003ffff).ram().w(FUNC(pasha2_state::fg_bitmap_w));
map(0x40060000, 0x40060001).nopw();
map(0x40064000, 0x40064001).nopw();
map(0x40068000, 0x40068001).nopw();
@@ -244,8 +238,11 @@ void pasha2_state::pasha2_map(address_map &map)
map(0x40070000, 0x40070001).w(FUNC(pasha2_state::vbuffer_clear_w));
map(0x40074000, 0x40074001).w(FUNC(pasha2_state::vbuffer_set_w));
map(0x40078000, 0x40078001).nopw(); //once at startup -> to disable the eeprom?
+ // MEM2 (Bankswitched ROM)
map(0x80000000, 0x803fffff).bankr("mainbank");
- map(0xe0000000, 0xe00003ff).ram().w(FUNC(pasha2_state::palette_w)).share("paletteram"); //tilemap? palette?
+ // MEM3 (Palette, Boot ROM)
+ map(0xe0000000, 0xe00001ff).rw(m_palette, FUNC(palette_device::read8), FUNC(palette_device::write8)).share("palette"); //tilemap? palette?
+ map(0xe0000200, 0xe00003ff).rw(m_palette, FUNC(palette_device::read8_ext), FUNC(palette_device::write8_ext)).share("palette_ext"); // "
map(0xfff80000, 0xffffffff).rom().region("maincpu", 0);
}
@@ -448,39 +445,24 @@ INPUT_PORTS_END
void pasha2_state::video_start()
{
+ // 2 512x256 8bpp bitmaps, Both are double buffered
for (int i = 0; i < 2; i++)
{
- m_bitmap0[i] = make_unique_clear<uint8_t[]>(0x20000);
- m_bitmap1[i] = make_unique_clear<uint8_t[]>(0x20000);
- save_pointer(NAME(m_bitmap0[i]), 0x20000, i);
- save_pointer(NAME(m_bitmap1[i]), 0x20000, i);
- }
-}
+ m_bg_bitmap[i].allocate(512, 256);
+ m_fg_bitmap[i].allocate(512, 256);
-uint32_t pasha2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- // 2 512x256 bitmaps
+ m_bg_bitmap[i].fill(0x100); // Palette space 0x100-0x1ff
+ m_fg_bitmap[i].fill(0); // Palette space 0x000-0x0ff
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
- {
- int count = cliprect.min_x | (y << 9);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
- {
- bitmap.pix(y, x) = m_bitmap0[(m_vbuffer ^ 1)][count++] | 0x100;
- }
+ save_item(NAME(m_bg_bitmap[i]), i);
+ save_item(NAME(m_fg_bitmap[i]), i);
}
+}
- for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
- {
- int count = cliprect.min_x | (y << 9);
- for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
- {
- int color = m_bitmap1[(m_vbuffer ^ 1)][count++];
- if (color != 0)
- bitmap.pix(y, x) = color;
-
- }
- }
+u32 pasha2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ copybitmap(bitmap, m_bg_bitmap[(m_vbuffer ^ 1)], 0, 0, 0, 0, cliprect);
+ copybitmap_trans(bitmap, m_fg_bitmap[(m_vbuffer ^ 1)], 0, 0, 0, 0, cliprect, 0);
return 0;
}
@@ -505,12 +487,12 @@ void pasha2_state::machine_reset()
void pasha2_state::pasha2(machine_config &config)
{
// basic machine hardware
- E116XT(config, m_maincpu, 20000000*4); // 4x internal multiplier
+ E116XT(config, m_maincpu, 20_MHz_XTAL*4); // 4x internal multiplier
m_maincpu->set_addrmap(AS_PROGRAM, &pasha2_state::pasha2_map);
m_maincpu->set_addrmap(AS_IO, &pasha2_state::pasha2_io);
m_maincpu->set_vblank_int("screen", FUNC(pasha2_state::irq0_line_hold));
- AT89C52(config, "audiocpu", 12000000); // clock from docs
+ AT89C52(config, "audiocpu", 12_MHz_XTAL); // clock from docs
// TODO : ports are unimplemented; P0,P1,P2,P3 and Serial Port Used
EEPROM_93C46_16BIT(config, "eeprom");
@@ -524,14 +506,15 @@ void pasha2_state::pasha2(machine_config &config)
screen.set_screen_update(FUNC(pasha2_state::screen_update));
screen.set_palette(m_palette);
- PALETTE(config, m_palette).set_entries(0x200);
+ PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x200);
+ m_palette->set_membits(8);
// sound hardware
SPEAKER(config, "mono").front_center();
- OKIM6295(config, m_oki[0], 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0);
+ OKIM6295(config, m_oki[0], 1_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0);
- OKIM6295(config, m_oki[1], 1000000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0);
+ OKIM6295(config, m_oki[1], 1_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0);
//and ATMEL DREAM SAM9773
}
@@ -599,7 +582,7 @@ ROM_START( zdrum )
DISK_IMAGE( "zdrum", 0, NO_DUMP )
ROM_END
-uint16_t pasha2_state::pasha2_speedup_r(offs_t offset)
+u16 pasha2_state::pasha2_speedup_r(offs_t offset)
{
if(m_maincpu->pc() == 0x8302)
m_maincpu->spin_until_interrupt();
diff --git a/src/mame/drivers/pcxt.cpp b/src/mame/drivers/pcxt.cpp
index d14dc825a86..1a02af6f5d9 100644
--- a/src/mame/drivers/pcxt.cpp
+++ b/src/mame/drivers/pcxt.cpp
@@ -16,6 +16,8 @@ Notes:
TODO:
- 02851: tetriskr: Corrupt game graphics after some time of gameplay, caused by a wrong
reading of the i/o $3c8 bit 1. (seems fixed?)
+- tetriskr can store inputs read during the timer irq. If ds is 0x40 when the irq is taken
+ it will corrupt the BIOS data area which can lead to corrupt graphics
- Add a proper FDC device.
- buzzer sound has issues in both games
@@ -163,6 +165,7 @@ public:
uint8_t bg_bank_r();
void bg_bank_w(uint8_t data);
private:
+ required_region_ptr<uint8_t> m_bg;
uint8_t m_bg_bank;
};
@@ -175,7 +178,8 @@ DEFINE_DEVICE_TYPE(ISA8_CGA_TETRISKR, isa8_cga_tetriskr_device, "tetriskr_cga",
//-------------------------------------------------
isa8_cga_tetriskr_device::isa8_cga_tetriskr_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- isa8_cga_superimpose_device(mconfig, ISA8_CGA_TETRISKR, tag, owner, clock)
+ isa8_cga_superimpose_device(mconfig, ISA8_CGA_TETRISKR, tag, owner, clock),
+ m_bg(*this, "gfx2")
{
}
@@ -200,29 +204,24 @@ uint8_t isa8_cga_tetriskr_device::bg_bank_r()
uint32_t isa8_cga_tetriskr_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- uint8_t const *const bg_rom = memregion("gfx2")->base();
-
//popmessage("%04x",m_start_offs);
bitmap.fill(rgb_t::black(), cliprect);
- for(int y=0;y<200/8;y++)
+ for(int y=cliprect.min_y;y<=cliprect.max_y;y++)
{
- for(int yi=0;yi<8;yi++)
+ int yi = y % 8;
+ int yj = y / 8;
+ for(int x=cliprect.min_x;x<=cliprect.max_x;x++)
{
- for(int x=0;x<320/8;x++)
- {
- for(int xi=0;xi<8;xi++)
- {
- uint8_t color = 0;
- /* TODO: first byte seems bogus? */
- for(int pen_i = 0;pen_i<4;pen_i++)
- color |= ((bg_rom[y*320/8+x+(pen_i*0x20000)+yi*0x400+m_bg_bank*0x2000+1] >> (7-xi)) & 1) << pen_i;
-
- if(cliprect.contains(x*8+xi, y*8+yi))
- bitmap.pix(y*8+yi, x*8+xi) = m_palette->pen(color);
- }
- }
+ int xi = x % 8;
+ int xj = x / 8;
+ uint8_t color = 0;
+ /* TODO: first byte seems bogus? */
+ for(int pen_i = 0;pen_i<4;pen_i++)
+ color |= ((m_bg[yj*320/8+xj+(pen_i*0x20000)+yi*0x400+m_bg_bank*0x2000+1] >> (7-xi)) & 1) << pen_i;
+
+ bitmap.pix(y, x) = m_palette->pen(color);
}
}
@@ -420,6 +419,9 @@ void pcxt_state::tetriskr_io(address_map &map)
{
map.global_mask(0x3ff);
map(0x0000, 0x00ff).m(m_mb, FUNC(pc_noppi_mb_device::map));
+ map(0x0060, 0x0060).r(FUNC(pcxt_state::port_a_r)); //not a real 8255
+ map(0x0061, 0x0061).rw(FUNC(pcxt_state::port_b_r), FUNC(pcxt_state::port_b_w));
+ map(0x0062, 0x0062).r(FUNC(pcxt_state::port_c_r));
map(0x03c8, 0x03c8).portr("IN0");
map(0x03c9, 0x03c9).portr("IN1");
// map(0x03ce, 0x03ce).portr("IN1"); //read then discarded?
@@ -576,7 +578,7 @@ void pcxt_state::tetriskr(machine_config &config)
ISA8_SLOT(config, "isa1", 0, "mb:isa", filetto_isa8_cards, "tetriskr", true); // FIXME: determine ISA bus clock
- RAM(config, RAM_TAG).set_default_size("640K");
+ RAM(config, RAM_TAG).set_default_size("64K");
}
ROM_START( filetto )
@@ -604,6 +606,11 @@ ROM_END
ROM_START( tetriskr )
ROM_REGION( 0x10000, "bios", 0 ) /* code */
ROM_LOAD( "b-10.u10", 0x0000, 0x10000, CRC(efc2a0f6) SHA1(5f0f1e90237bee9b78184035a32055b059a91eb3) )
+ ROM_FILL( 0x1bdb, 1, 0xba ) // patch to work around input bug mentioned above
+ ROM_FILL( 0x1bdc, 1, 0x00 )
+ ROM_FILL( 0x1bdd, 1, 0x01 )
+ ROM_FILL( 0x1bde, 1, 0x8e )
+ ROM_FILL( 0x1bdf, 1, 0xda )
ROM_END
GAME( 1990, filetto, 0, filetto, filetto, pcxt_state, empty_init, ROT0, "Novarmatic", "Filetto (v1.05 901009)", MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/pet.cpp b/src/mame/drivers/pet.cpp
index c6520fffa3e..f67490ba38a 100644
--- a/src/mame/drivers/pet.cpp
+++ b/src/mame/drivers/pet.cpp
@@ -202,7 +202,7 @@ public:
m_palette(*this, "palette"),
m_cassette(*this, PET_DATASSETTE_PORT_TAG),
m_cassette2(*this, PET_DATASSETTE_PORT2_TAG),
- m_exp(*this, PET_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_user(*this, PET_USER_PORT_TAG),
m_speaker(*this, "speaker"),
m_cart_9000(*this, "cart_9000"),
diff --git a/src/mame/drivers/phoenix.cpp b/src/mame/drivers/phoenix.cpp
index 268af7b27b4..99a2a50f8d0 100644
--- a/src/mame/drivers/phoenix.cpp
+++ b/src/mame/drivers/phoenix.cpp
@@ -1288,6 +1288,9 @@ ROM_START( nextfase )
ROM_LOAD( "nf07.bin", 0x3000, 0x0800, CRC(2eab35b4) SHA1(849bf8273317cc869bdd67e50c68399ee8ece81d) )
ROM_LOAD( "nf08.bin", 0x3800, 0x0800, CRC(04c2323f) SHA1(4d820464f57e4f59acc46ea3264dba3cb9c501a1) )
+ ROM_REGION( 0x800, "melody", 0 ) // Epson 7910CG Multi-Melody IC
+ ROM_LOAD( "7910cg", 0x000, 0x800, NO_DUMP ) // actual size unknown, needs decapping
+
ROM_REGION( 0x1000, "bgtiles", 0 )
ROM_LOAD( "nf11.bin", 0x0000, 0x0800, CRC(3c7e623f) SHA1(e7ff5fc371664af44785c079e92eeb2d8530187b) )
ROM_LOAD( "nf12.bin", 0x0800, 0x0800, CRC(59916d3b) SHA1(71aec70a8e096ed1f0c2297b3ae7dca1b8ecc38d) )
@@ -1497,6 +1500,7 @@ ROM_START( pleiadsn )
ROM_LOAD( "mb7052.ic41", 0x0100, 0x0100, BAD_DUMP CRC(7a1bcb1e) SHA1(bdfab316ea26e2063879e7aa78b6ae2b55eb95c8) ) /* palette high bits */
ROM_END
+// Famaresa "580" PCB set (580-001 and 580-002).
ROM_START( pleiadss )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "pl45.bin", 0x0000, 0x0800, CRC(e2528599) SHA1(4647c62a2c6047238ad2855cf71b9e079ac4b4c7) )
@@ -1645,7 +1649,7 @@ GAME( 1981, pleiadbl, pleiads, pleiads, pleiadbl, phoenix_state, empty_init,
GAME( 1981, pleiadce, pleiads, pleiads, pleiadce, phoenix_state, empty_init, ROT90, "Tehkan (Centuri license)", "Pleiads (Centuri)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
GAME( 1981, pleiadsi, pleiads, pleiads, pleiadce, phoenix_state, empty_init, ROT90, "bootleg? (Irecsa)", "Pleiads (Irecsa)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // possibly licensed, but some of the ROMs match the bootlegs
GAME( 1981, pleiadsn, pleiads, phoenix, pleiadce, phoenix_state, empty_init, ROT90, "Niemer S.A.", "Pleiads (Niemer S.A.)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) // possibly licensed, but some of the ROMs match the bootlegs
-GAME( 1981, pleiadss, pleiads, phoenix, pleiadce, phoenix_state, empty_init, ROT90, "bootleg", "Pleiads (Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // colours match PCB (but are ugly)
+GAME( 1981, pleiadss, pleiads, phoenix, pleiadce, phoenix_state, empty_init, ROT90, "bootleg (Famaresa)", "Pleiads (Famaresa, Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // colours match PCB (but are ugly)
GAME( 1981, capitol, pleiads, phoenix, capitol, phoenix_state, empty_init, ROT90, "bootleg? (Universal Video Spiel)", "Capitol", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE )
/*** Others ***/
diff --git a/src/mame/drivers/plus4.cpp b/src/mame/drivers/plus4.cpp
index 75ee574eb33..c7d44f5fba5 100644
--- a/src/mame/drivers/plus4.cpp
+++ b/src/mame/drivers/plus4.cpp
@@ -61,7 +61,7 @@ public:
m_iec(*this, CBM_IEC_TAG),
m_joy1(*this, CONTROL1_TAG),
m_joy2(*this, CONTROL2_TAG),
- m_exp(*this, PLUS4_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_user(*this, PET_USER_PORT_TAG),
m_ram(*this, RAM_TAG),
m_cassette(*this, PET_DATASSETTE_PORT_TAG),
diff --git a/src/mame/drivers/pofo.cpp b/src/mame/drivers/pofo.cpp
index 32c158e9821..70d3cf11108 100644
--- a/src/mame/drivers/pofo.cpp
+++ b/src/mame/drivers/pofo.cpp
@@ -18,7 +18,6 @@
TODO:
- - cursor is missing
- where do CDET and NMD1 connect to ??
- i/o port 8051
- screen contrast
@@ -38,6 +37,7 @@
#include "bus/pofo/ccm.h"
#include "bus/pofo/exp.h"
#include "machine/nvram.h"
+#include "machine/pofo_kbd.h"
#include "machine/ram.h"
#include "machine/timer.h"
#include "sound/pcd3311.h"
@@ -78,24 +78,22 @@ public:
driver_device(mconfig, type, tag),
m_maincpu(*this, M80C88A_TAG),
m_lcdc(*this, HD61830_TAG),
+ m_keyboard(*this, "keyboard"),
m_dtmf(*this, PCD3311T_TAG),
m_ccm(*this, PORTFOLIO_MEMORY_CARD_SLOT_A_TAG),
- m_exp(*this, PORTFOLIO_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_timer_tick(*this, TIMER_TICK_TAG),
m_nvram(*this, "nvram"),
m_ram(*this, "ram"),
m_rom(*this, M80C88A_TAG),
m_char_rom(*this, HD61830_TAG),
- m_y(*this, "Y%01u", 0),
- m_battery(*this, "BATTERY"),
- m_keylatch(0xff)
+ m_battery(*this, "BATTERY")
{ }
void portfolio(machine_config &config);
protected:
virtual void machine_start() override;
- virtual void machine_reset() override;
private:
void portfolio_io(address_map &map);
@@ -104,7 +102,6 @@ private:
void check_interrupt();
void trigger_interrupt(int level);
- void scan_keyboard();
enum
{
@@ -116,10 +113,10 @@ private:
enum
{
- ROM_APP,
- CCM_A,
- CCM_B,
- ROM_EXT
+ ROM_APP = 0b000, // 0
+ CCM_A = 0b011, // 3
+ CCM_B = 0b111, // 7
+ ROM_EXT = 0b010, // 2
};
uint8_t mem_r(offs_t offset);
@@ -129,7 +126,6 @@ private:
void io_w(offs_t offset, uint8_t data);
uint8_t irq_status_r();
- uint8_t keyboard_r();
uint8_t battery_r();
uint8_t counter_r(offs_t offset);
@@ -142,9 +138,9 @@ private:
DECLARE_WRITE_LINE_MEMBER( eint_w );
DECLARE_WRITE_LINE_MEMBER( wake_w );
+ DECLARE_WRITE_LINE_MEMBER( keyboard_int_w );
void portfolio_palette(palette_device &palette) const;
- TIMER_DEVICE_CALLBACK_MEMBER(keyboard_tick);
TIMER_DEVICE_CALLBACK_MEMBER(system_tick);
TIMER_DEVICE_CALLBACK_MEMBER(counter_tick);
uint8_t hd61830_rd_r(offs_t offset);
@@ -152,6 +148,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<hd61830_device> m_lcdc;
+ required_device<pofo_keyboard_device> m_keyboard;
required_device<pcd3311_device> m_dtmf;
required_device<portfolio_memory_card_slot_device> m_ccm;
required_device<portfolio_expansion_slot_device> m_exp;
@@ -160,13 +157,11 @@ private:
required_device<ram_device> m_ram;
required_region_ptr<uint8_t> m_rom;
required_region_ptr<uint8_t> m_char_rom;
- required_ioport_array<8> m_y;
required_ioport m_battery;
uint8_t m_ip;
uint8_t m_ie;
uint16_t m_counter;
- uint8_t m_keylatch;
int m_rom_b;
};
@@ -224,6 +219,13 @@ WRITE_LINE_MEMBER( portfolio_state::wake_w )
// TODO
}
+WRITE_LINE_MEMBER( portfolio_state::keyboard_int_w )
+{
+ if (state)
+ {
+ trigger_interrupt(INT_KEYBOARD);
+ }
+}
//-------------------------------------------------
// irq_status_r - interrupt status read
@@ -231,9 +233,17 @@ WRITE_LINE_MEMBER( portfolio_state::wake_w )
uint8_t portfolio_state::irq_status_r()
{
- return m_ip;
-}
+ uint8_t data = m_ip;
+ /*
+ The BIOS interrupt 11h (Equipment list) reports that the second floppy drive (B:) is
+ installed if the 3rd bit is set (which is also the external interrupt line).
+ It is not clear if the ~NMD1 line is OR or XORed or muxed with the interrupt line,
+ but this way seems to work.
+ */
+ data |= !m_exp->nmd1_r() << 3;
+ return data;
+}
//-------------------------------------------------
// irq_mask_w - interrupt enable mask
@@ -280,80 +290,6 @@ IRQ_CALLBACK_MEMBER(portfolio_state::portfolio_int_ack)
return vector;
}
-
-
-//**************************************************************************
-// KEYBOARD
-//**************************************************************************
-
-//-------------------------------------------------
-// scan_keyboard - scan keyboard
-//-------------------------------------------------
-
-void portfolio_state::scan_keyboard()
-{
- uint8_t keycode = 0xff;
-
- for (int row = 0; row < 8; row++)
- {
- uint8_t data = static_cast<int>(m_y[row]->read());
-
- if (data != 0xff)
- {
- for (int col = 0; col < 8; col++)
- {
- if (!BIT(data, col))
- {
- keycode = (row * 8) + col;
- }
- }
- }
- }
-
- if (keycode != 0xff)
- {
- // key pressed
- if (keycode != m_keylatch)
- {
- m_keylatch = keycode;
-
- trigger_interrupt(INT_KEYBOARD);
- }
- }
- else
- {
- // key released
- if (!(m_keylatch & 0x80))
- {
- m_keylatch |= 0x80;
-
- trigger_interrupt(INT_KEYBOARD);
- }
- }
-}
-
-
-//-------------------------------------------------
-// TIMER_DEVICE_CALLBACK_MEMBER( keyboard_tick )
-//-------------------------------------------------
-
-TIMER_DEVICE_CALLBACK_MEMBER(portfolio_state::keyboard_tick)
-{
- scan_keyboard();
-}
-
-
-//-------------------------------------------------
-// keyboard_r - keyboard scan code register
-//-------------------------------------------------
-
-uint8_t portfolio_state::keyboard_r()
-{
- return m_keylatch;
-}
-
-
-
//**************************************************************************
// SOUND
//**************************************************************************
@@ -433,10 +369,10 @@ uint8_t portfolio_state::battery_r()
bit signal description
- 0 ? 1=boots from B:
- 1 ? 1=boots from external ROM
- 2 ? 1=boots from B:
- 3 ? 1=boots from ???
+ 0 ? bit 0 from bus select (m_rom_b)
+ 1 ?
+ 2 ? bit 2 from bus select (m_rom_b)
+ 3 ?
4 ?
5 PDET 1=peripheral connected
6 LOWB 0=battery low
@@ -446,6 +382,14 @@ uint8_t portfolio_state::battery_r()
uint8_t data = 0;
+ /*
+ Partially stores what has been written into this port.
+ Used by interrupt 61h service 24h (Get ROM/CCM state).
+ Setting bit 1 here causes the BIOS to permanently wedge the external ROM
+ select on, so mask it out as a workaround.
+ */
+ data |= (m_rom_b & 0b101);
+
// peripheral detect
data |= m_exp->pdet_r() << 5;
@@ -479,13 +423,7 @@ void portfolio_state::select_w(uint8_t data)
if (LOG) logerror("%s %s SELECT %02x\n", machine().time().as_string(), machine().describe_context(), data);
- switch (data & 0x0f)
- {
- case 3: m_rom_b = CCM_A; break;
- case 7: m_rom_b = CCM_B; break;
- case 0: m_rom_b = ROM_APP; break;
- case 2: m_rom_b = ROM_EXT; break;
- }
+ m_rom_b = data & 0x0f;
}
@@ -602,6 +540,10 @@ uint8_t portfolio_state::mem_r(offs_t offset)
case ROM_EXT:
// TODO
break;
+
+ default:
+ logerror("%s %s Invalid bus read %05x\n", machine().time().as_string(), machine().describe_context(), offset & 0x1ffff);
+ break;
}
}
else if (offset >= 0xe0000)
@@ -646,6 +588,14 @@ void portfolio_state::mem_w(offs_t offset, uint8_t data)
case CCM_B:
ncc1 = 0;
break;
+
+ case ROM_EXT:
+ case ROM_APP:
+ break;
+
+ default:
+ logerror("%s %s Invalid bus write %05x\n", machine().time().as_string(), machine().describe_context(), offset & 0x1ffff);
+ break;
}
}
@@ -670,7 +620,7 @@ uint8_t portfolio_state::io_r(offs_t offset)
switch ((offset >> 4) & 0x0f)
{
case 0:
- data = keyboard_r();
+ data = m_keyboard->read();
break;
case 1:
@@ -704,6 +654,11 @@ uint8_t portfolio_state::io_r(offs_t offset)
break;
}
}
+ else if (offset == 0x61)
+ {
+ // Magic port to detect the Pofo
+ data = 0x61;
+ }
data = m_exp->nrdi_r(offset, data, iom, bcom, ncc1);
@@ -819,86 +774,6 @@ void portfolio_state::portfolio_lcdc(address_map &map)
//-------------------------------------------------
static INPUT_PORTS_START( portfolio )
- PORT_START("Y0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Atari") PORT_CODE(KEYCODE_TILDE)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
-
- PORT_START("Y1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del Ins") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
-
- PORT_START("Y2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
-
- PORT_START("Y3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('"') PORT_CHAR('`')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
-
- PORT_START("Y4")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
-
- PORT_START("Y5")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('8')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
-
- PORT_START("Y6")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Fn") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
-
- PORT_START("Y7")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
-
PORT_START("BATTERY")
PORT_CONFNAME( 0x01, 0x01, "Battery Status" )
PORT_CONFSETTING( 0x01, DEF_STR( Normal ) )
@@ -990,26 +865,11 @@ void portfolio_state::machine_start()
save_item(NAME(m_ip));
save_item(NAME(m_ie));
save_item(NAME(m_counter));
- save_item(NAME(m_keylatch));
save_item(NAME(m_rom_b));
m_ip = 0;
}
-
-//-------------------------------------------------
-// machine_reset
-//-------------------------------------------------
-
-void portfolio_state::machine_reset()
-{
- m_lcdc->reset();
-
- m_exp->reset();
-}
-
-
-
//**************************************************************************
// MACHINE CONFIGURATION
//**************************************************************************
@@ -1043,6 +903,9 @@ void portfolio_state::portfolio(machine_config &config)
m_lcdc->rd_rd_callback().set(FUNC(portfolio_state::hd61830_rd_r));
m_lcdc->set_screen(SCREEN_TAG);
+ POFO_KEYBOARD(config, m_keyboard);
+ m_keyboard->int_handler().set(FUNC(portfolio_state::keyboard_int_w));
+
// sound hardware
SPEAKER(config, "mono").front_center();
PCD3311(config, m_dtmf, XTAL(3'578'640)).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1058,9 +921,6 @@ void portfolio_state::portfolio(machine_config &config)
TIMER(config, "counter").configure_periodic(FUNC(portfolio_state::counter_tick), attotime::from_hz(XTAL(32'768)/16384));
TIMER(config, TIMER_TICK_TAG).configure_periodic(FUNC(portfolio_state::system_tick), attotime::from_hz(XTAL(32'768)/32768));
- // fake keyboard
- TIMER(config, "keyboard").configure_periodic(FUNC(portfolio_state::keyboard_tick), attotime::from_usec(2500));
-
// software list
SOFTWARE_LIST(config, "cart_list").set_original("pofo");
diff --git a/src/mame/drivers/psikyo.cpp b/src/mame/drivers/psikyo.cpp
index 4f6ddeb786f..58acce740a0 100644
--- a/src/mame/drivers/psikyo.cpp
+++ b/src/mame/drivers/psikyo.cpp
@@ -1960,24 +1960,24 @@ void psikyo_state::init_s1945bl()
***************************************************************************/
-GAME( 1993, samuraia, 0, sngkace, samuraia, psikyo_state, init_sngkace, ROT270, "Psikyo", "Samurai Aces (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Banpresto?
-GAME( 1993, sngkace, samuraia, sngkace, sngkace, psikyo_state, init_sngkace, ROT270, "Psikyo", "Sengoku Ace (Japan, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Banpresto?
-GAME( 1993, sngkacea, samuraia, sngkace, sngkace, psikyo_state, init_sngkace, ROT270, "Psikyo", "Sengoku Ace (Japan, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Banpresto?
-
-GAME( 1994, gunbird, 0, gunbird, gunbird, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1994, gunbirdk, gunbird, gunbird, gunbirdj, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1994, gunbirdj, gunbird, gunbird, gunbirdj, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-
-GAME( 1994, btlkroad, 0, gunbird, btlkroad, psikyo_state, init_gunbird, ROT0, "Psikyo", "Battle K-Road", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1994, btlkroadk, btlkroad, gunbird, btlkroadk, psikyo_state, init_gunbird, ROT0, "Psikyo", "Battle K-Road (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // game code is still multi-region, but sound rom appears to be Korea specific at least
-
-GAME( 1995, s1945, 0, s1945, s1945, psikyo_state, init_s1945, ROT270, "Psikyo", "Strikers 1945 (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1995, s1945a, s1945, s1945, s1945a, psikyo_state, init_s1945a, ROT270, "Psikyo", "Strikers 1945 (Japan / World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Region dip - 0x0f=Japan, anything else=World
-GAME( 1995, s1945j, s1945, s1945, s1945j, psikyo_state, init_s1945j, ROT270, "Psikyo", "Strikers 1945 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1995, s1945n, s1945, s1945n, s1945, psikyo_state, init_gunbird, ROT270, "Psikyo", "Strikers 1945 (World, unprotected)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1995, s1945nj, s1945, s1945n, s1945j, psikyo_state, init_gunbird, ROT270, "Psikyo", "Strikers 1945 (Japan, unprotected)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1995, s1945k, s1945, s1945, s1945j, psikyo_state, init_s1945, ROT270, "Psikyo", "Strikers 1945 (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1995, s1945bl, s1945, s1945bl, s1945bl, psikyo_state, init_s1945bl, ROT270, "bootleg", "Strikers 1945 (Hong Kong, bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-
-GAME( 1996, tengai, 0, s1945, tengai, psikyo_state, init_tengai, ROT0, "Psikyo", "Tengai (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
-GAME( 1996, tengaij, tengai, s1945, tengaij, psikyo_state, init_tengai, ROT0, "Psikyo", "Sengoku Blade: Sengoku Ace Episode II / Tengai", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Region dip - 0x0f=Japan, anything else=World
+GAME( 1993, samuraia, 0, sngkace, samuraia, psikyo_state, init_sngkace, ROT270, "Psikyo (Banpresto license)", "Samurai Aces (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1993, sngkace, samuraia, sngkace, sngkace, psikyo_state, init_sngkace, ROT270, "Psikyo (Banpresto license)", "Sengoku Ace (Japan, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1993, sngkacea, samuraia, sngkace, sngkace, psikyo_state, init_sngkace, ROT270, "Psikyo (Banpresto license)", "Sengoku Ace (Japan, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+
+GAME( 1994, gunbird, 0, gunbird, gunbird, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1994, gunbirdk, gunbird, gunbird, gunbirdj, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1994, gunbirdj, gunbird, gunbird, gunbirdj, psikyo_state, init_gunbird, ROT270, "Psikyo", "Gunbird (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+
+GAME( 1994, btlkroad, 0, gunbird, btlkroad, psikyo_state, init_gunbird, ROT0, "Psikyo", "Battle K-Road", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1994, btlkroadk, btlkroad, gunbird, btlkroadk, psikyo_state, init_gunbird, ROT0, "Psikyo", "Battle K-Road (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // game code is still multi-region, but sound rom appears to be Korea specific at least
+
+GAME( 1995, s1945, 0, s1945, s1945, psikyo_state, init_s1945, ROT270, "Psikyo", "Strikers 1945 (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1995, s1945a, s1945, s1945, s1945a, psikyo_state, init_s1945a, ROT270, "Psikyo", "Strikers 1945 (Japan / World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Region dip - 0x0f=Japan, anything else=World
+GAME( 1995, s1945j, s1945, s1945, s1945j, psikyo_state, init_s1945j, ROT270, "Psikyo", "Strikers 1945 (Japan)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1995, s1945n, s1945, s1945n, s1945, psikyo_state, init_gunbird, ROT270, "Psikyo", "Strikers 1945 (World, unprotected)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1995, s1945nj, s1945, s1945n, s1945j, psikyo_state, init_gunbird, ROT270, "Psikyo", "Strikers 1945 (Japan, unprotected)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1995, s1945k, s1945, s1945, s1945j, psikyo_state, init_s1945, ROT270, "Psikyo", "Strikers 1945 (Korea)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1995, s1945bl, s1945, s1945bl, s1945bl, psikyo_state, init_s1945bl, ROT270, "bootleg", "Strikers 1945 (Hong Kong, bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+
+GAME( 1996, tengai, 0, s1945, tengai, psikyo_state, init_tengai, ROT0, "Psikyo", "Tengai (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )
+GAME( 1996, tengaij, tengai, s1945, tengaij, psikyo_state, init_tengai, ROT0, "Psikyo", "Sengoku Blade: Sengoku Ace Episode II (Japan) / Tengai (World)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING ) // Region dip - 0x0f=Japan, anything else=World
diff --git a/src/mame/drivers/psikyosh.cpp b/src/mame/drivers/psikyosh.cpp
index 27a104059d9..f6d3284512e 100644
--- a/src/mame/drivers/psikyosh.cpp
+++ b/src/mame/drivers/psikyosh.cpp
@@ -139,46 +139,68 @@ Psikyo PS3-V1 hardware readme
-----------------------------
Strikers 1945 II
-Sol Divid
-Daraku
+Sol Divide
+The Fallen Angels / Daraku Tenshi
Space Bomber
PCB Layout
----------
PS3-V1
-|-------------------------------------------------|
-|HA13118 3771 PROG_L |
-| VOL YAC513 PROG_H |-----| |
-| JRC4741 | SH2 | |
-| *U16 | | |
-| YMF278B SOUND.U32 |-----| |
-| |
-|J |
-|A 57.2727MHz HY514260 HY514260|
-|M |
-|M |-------| |
-|A |PSIKYO | |
-| |PS6406B| *4L.10 0L.4 |
-| 62256 | | |
-|93C56 62256 |-------| *5L.9 1L.3 |
-|JP5 |
-| *6H.37 *4H.31 2H.20 0H.13 *6L.8 2L.2 |
-| |
-| *7L.7 3L.1 |
-| *7H.36 *5H.30 3H.19 1H.12 |
-|-------------------------------------------------|
+|--------------------------------------------------|
+|HA13118 3771 PROG_L.U18 |
+| VOL YAC513 PROG_H.U17 |-----| |
+| JRC4741 | SH2 | |
+| PROG.U16 | | |
+| YMF278B SOUND.U32 |-----| |
+| |
+|J |
+|A 57.2727MHz HY514260 HY514260 |
+|M |
+|M |-------| |
+|A |PSIKYO | |
+| |PS6406B| 4L.U10 0L.U4 |
+| 62256 | | |
+|93C56 62256 |-------| 5L.U9 1L.U3 |
+|JP5 |
+| 6H.U37 4H.U31 2H.U20 0H.U13 6L.U8 2L.U2 |
+| |
+| *7L.U7 3L.U1 |
+| *7H.U36 5H.U30 3H.U19 1H.U12 |
+|--------------------------------------------------|
Notes:
JP5 - hardwired jumper bank (x4) for region selection. Cut 2ND jumper from left
for International/English region. All jumpers shorted = Japan region (default)
SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144)
YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80)
- PROG_H/PROG_L - 27C4096 DIP40 EPROM
- All other ROMs - 32M SOP44 MaskROM
+ PROG_H.U17/PROG_L.U18 - 27C4096 DIP40 EPROM
+ PROG.U16 - 27C802 SOP44 OTP EPROM
+ All other ROMs - 16M/32M SOP44 MaskROM
* - ROM locations not populated
VSync - 60Hz
HSync - 15.27kHz
+ROM Usage
+---------
+
+|-------------------------------------------|-CPU ROMs----|-GFX ROMs------------------------|-Sound ROM-|
+| Game | U18 U17 U16 | U4 U3 U2 U1 U10 U9 U8 U7 | U32 |
+| | | U13 U12 U20 U19 U31 U30 U37 U36 | |
+|-------------------------------------------|-------------|---------------------------------|-----------|
+| Sol Divide - The Sword Of Darkness | 4M 4M - | - - - - 32M 32M 32M - | 32M |
+| | | - - - - 32M 32M 32M - | |
+|-------------------------------------------|-------------|---------------------------------|-----------|
+| Strikers 1945 II | 4M 4M - | 32M 32M 32M 32M - - - - | 32M |
+| | | 32M 32M 32M 32M - - - - | |
+|-------------------------------------------|-------------|---------------------------------|-----------|
+| The Fallen Angels (World) / | 4M 4M 8M | 32M 32M 32M 32M 32M 32M 16M - | 32M |
+| Daraku Tenshi - The Fallen Angels (Japan) | | 32M 32M 32M 32M 32M 32M 16M - | |
+|-------------------------------------------|-------------|---------------------------------|-----------|
+| Space Bomber | 4M 4M - | 32M 32M 32M 32M 32M - - - | 32M |
+| | | 32M 32M 32M 32M 32M - - - | |
+|-------------------------------------------|-------------|---------------------------------|-----------|
+-: Unpopulated
+
Psikyo PS5 hardware readme
--------------------------
@@ -190,39 +212,54 @@ PCB Layout
----------
PS5
-|-------------------------------------------------|
-|HA13118 M514260 PROG_L.U16 DATA.U1 |
-| VOL 3771 M514260 PROG_H.U17 |
-| *PROG_DATA.U2|
-| PAL |
-| |
-| JRC4741 0H.10 0L.3 |
-|J |-----| |
-|A | SH2 | 57.2727MHz 1H.11 1L.4 |
-|M YAC513 | | |
-|M |-----| |-------| 2H.12 2L.5 |
-|A |PSIKYO | |
-| |PS6406B| 3H.13 3L.6 |
-| | | |
-| |-------| *4H.14 *4L.7 |
-| |
-| 62256 *5H.15 *5L.8 |
-| 62256 |
-| 93C56 |
-| JP4 YMF278B SOUND.9 |
-|-------------------------------------------------|
+|--------------------------------------------------|
+|HA13118 M514260 PROG_L.U16 DATA.U1 |
+| VOL 3771 M514260 PROG_H.U17 |
+| *PROG_DATA.U2 |
+| PAL |
+| |
+| JRC4741 0H.U10 0L.U3 |
+|J |-----| |
+|A | SH2 | 57.2727MHz 1H.U11 1L.U4 |
+|M YAC513 | | |
+|M |-----| |-------| 2H.U12 2L.U5 |
+|A |PSIKYO | |
+| |PS6406B| 3H.U13 3L.U6 |
+| | | |
+| |-------| *4H.U14 *4L.U7 |
+| |
+| 62256 *5H.U15 *5L.U8 |
+| 62256 |
+| 93C56 |
+| JP4 YMF278B SOUND.U9 |
+|--------------------------------------------------|
Notes:
JP4 - hardwired jumper bank (x4) for region selection. Cut leftmost jumper
for International/English region. All jumpers shorted = Japan region (default)
SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144)
YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80)
PAL - AMD PALCE 16V8H stamped 'PS5-1' (DIP20)
- PROG_H/PROG_L/DATA - 27C4096 DIP40 EPROM
+ PROG_H.U17/PROG_L.U16/DATA.U1 - 27C4096 DIP40 EPROM
All other ROMs - 64M/32M SOP44 MaskROM
* - ROM locations not populated
VSync - 60Hz
HSync - 15.27kHz
+ROM Usage
+---------
+
+|-----------------------------|-CPU ROMs--------|-GFX ROMs----------------|-Sound ROM-|
+| Game | U16 U17 U1 U2 | U3 U4 U5 U6 U7 U8 | U9 |
+| | | U10 U11 U12 U13 U14 U15 | |
+|-----------------------------|-----------------|-------------------------|-----------|
+| Gunbird 2 | 4M 4M 4M - | 64M 64M 64M 32M - - | 32M |
+| | | 64M 64M 64M 32M - - | |
+|-----------------------------|-----------------|-------------------------|-----------|
+| Strikers 1945 III (World) / | 4M 4M 4M - | 64M 64M 64M 32M - - | 32M |
+| Strikers 1999 (Japan) | | 64M 64M 64M 32M - - | |
+|-----------------------------|-----------------|-------------------------|-----------|
+-: Unpopulated
+
Psikyo PS5V2 hardware readme
----------------------------
@@ -240,9 +277,9 @@ PS5V2
|----------------------------------------------------|
|HA13118 PS5-1 SM81C256 PROG_H.U21 *0H.U11 *0L.U3 |
|VOL JRC4741 SM81C256 PROG_L.U22 |
-| YAC516 3771 *1H.U12 *1L.U4 |
-| |-----| *U23 |
-| | SH2 | *2H.U13 *2L.U5 |
+| YAC516 3771 1H.U12 1L.U4 |
+| |-----| *PROG_DATA.U23 |
+| | SH2 | 2H.U13 2L.U5 |
| | | |
|J YMF278B |-----| 3H.U14 3L.U6 |
|A 57.2727MHz |
@@ -263,14 +300,36 @@ Notes:
for International/English region. All jumpers shorted = Japan region (default)
SH2 - Hitachi HD6417604F28 SH-2 CPU, clock input 28.63635 [57.2727/2] (QFP144)
YMF278B - Yamaha YMF278B OPL4 sound chip, clock input 28.63635MHz [57.2727/2] (QFP80)
- PROG_H/PROG_L - 27C4096 DIP40 EPROM
+ PROG_H.U21/PROG_L.U22 - 27C4096 DIP40 EPROM
ROMs U1-U59 (at bottom of PCB) - 16M DIP42 MaskROM
ROMs U3-U10 & U11-U18 (at side of PCB) - 16M TSOP48 Type-II surface-mounted MaskROM
- ROM U52 - 32M TSOP48 Type-II surface-mounted MaskROM
- * - ROM locations not populated on tgm2 & tgm2+
+ ROM U52 - 16M/32M TSOP48 Type-II surface-mounted MaskROM
+ * - ROM locations not populated
VSync - 60Hz
HSync - 15.27kHz
+ROM Usage
+---------
+
+|-------------------------|-CPU ROMs----|-GFX ROMs(TSOP48)----------------|-GFX ROMs(DIP42)-----|-Sound ROM-|
+| Game | U21 U22 U23 | U3 U4 U5 U6 U7 U8 U9 U10 | U1 U19 U28 U41 U58 | U52 |
+| | | U11 U12 U13 U14 U15 U16 U17 U18 | U2 U20 U29 U42 U59 | |
+|-------------------------|-------------|---------------------------------|---------------------|-----------|
+| Dragon Blaze | 4M 4M - | - 16M 16M 16M 16M 16M - - | 16M 16M 16M 16M 16M | 16M |
+| | | - 16M 16M 16M 16M 16M - - | 16M 16M 16M 16M 16M | |
+|-------------------------|-------------|---------------------------------|---------------------|-----------|
+| Tetris: the Absolute - | 4M 4M - | - - - 16M 16M 16M - - | 16M 16M 16M 16M 16M | 32M |
+| The Grand Master 2/Plus | | - - - 16M 16M 16M - - | 16M 16M 16M 16M 16M | |
+|-------------------------|-------------|---------------------------------|---------------------|-----------|
+| Gunbarich | 4M 4M - | - * * * * * - - | 16M 16M 16M 16M * | 16M |
+| | | - * * * * * - - | 16M 16M 16M 16M * | |
+|-------------------------|-------------|---------------------------------|---------------------|-----------|
+| Mahjong G-Taste | 4M 4M - | - 16M 16M 16M 16M * - - | * * * * * | 32M |
+| | | - 16M 16M 16M 16M * - - | * * * * * | |
+|-------------------------|-------------|---------------------------------|---------------------|-----------|
+-: Unpopulated
+*: Leftover from Dragon Blaze
+
*/
#include "emu.h"
@@ -602,7 +661,7 @@ static INPUT_PORTS_START( daraku )
PORT_BIT( 0x10000000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
INPUT_PORTS_END
-static INPUT_PORTS_START( sbomberb )
+static INPUT_PORTS_START( sbomber )
PORT_INCLUDE( common )
/* If Debug is HIGH then you can perform rom test, but EEPROM resets? */
@@ -809,11 +868,11 @@ void psikyosh_state::psikyo5_240(machine_config &config)
/* PS3 */
ROM_START( soldivid )
- ROM_REGION( 0x200000, "maincpu", 0)
+ ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "2-prog_l.u18", 0x000002, 0x080000, CRC(cf179b04) SHA1(343f00a81cffd44334a4db81b6b828b7cf73c1e8) )
ROM_LOAD32_WORD_SWAP( "1-prog_h.u17", 0x000000, 0x080000, CRC(f467d1c4) SHA1(a011e6f310a54f09efa0bf4597783cd78c05ad6f) )
- ROM_REGION( 0x3800000, "gfx1", 0 )
+ ROM_REGION( 0x3800000, "gfx1", ROMREGION_ERASE00 )
/* This Space Empty! */
ROM_LOAD32_WORD_SWAP( "4l.u10", 0x2000000, 0x400000, CRC(9eb9f269) SHA1(4a4d90eefe62b5462f5ed5e062eea7b6b4900f85) )
ROM_LOAD32_WORD_SWAP( "4h.u31", 0x2000002, 0x400000, CRC(7c76cfe7) SHA1(14e291e840a4afe3802fe1847615c5e806d7492a) )
@@ -823,15 +882,15 @@ ROM_START( soldivid )
ROM_LOAD32_WORD_SWAP( "6h.u37", 0x3000002, 0x400000, CRC(fdd57361) SHA1(f58d91acde1f4e6d4f0e8dcd1b23aa5092d89916) )
ROM_REGION( 0x400000, "ymf", 0 )
- ROM_LOAD( "sound.bin", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) )
+ ROM_LOAD( "sound.u32", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) )
ROM_END
ROM_START( soldividk )
- ROM_REGION( 0x200000, "maincpu", 0)
+ ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "9-prog_lk.u18", 0x000002, 0x080000, CRC(b534029d) SHA1(a96ca55e6694c5537d489d40bc890c376bbce933) )
ROM_LOAD32_WORD_SWAP( "8-prog_hk.u17", 0x000000, 0x080000, CRC(a48e3206) SHA1(d560286972de2a0baa5369672a0190b7bd421843) )
- ROM_REGION( 0x3800000, "gfx1", 0 )
+ ROM_REGION( 0x3800000, "gfx1", ROMREGION_ERASE00 )
/* This Space Empty! */
ROM_LOAD32_WORD_SWAP( "4l.u10", 0x2000000, 0x400000, CRC(9eb9f269) SHA1(4a4d90eefe62b5462f5ed5e062eea7b6b4900f85) )
ROM_LOAD32_WORD_SWAP( "4h.u31", 0x2000002, 0x400000, CRC(7c76cfe7) SHA1(14e291e840a4afe3802fe1847615c5e806d7492a) )
@@ -841,11 +900,11 @@ ROM_START( soldividk )
ROM_LOAD32_WORD_SWAP( "6h.u37", 0x3000002, 0x400000, CRC(fdd57361) SHA1(f58d91acde1f4e6d4f0e8dcd1b23aa5092d89916) )
ROM_REGION( 0x400000, "ymf", 0 )
- ROM_LOAD( "sound.bin", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) )
+ ROM_LOAD( "sound.u32", 0x000000, 0x400000, CRC(e98f8d45) SHA1(7791c0f31d08f37c6ec65e7cecf8ef54ca73b1fd) )
ROM_END
ROM_START( s1945ii )
- ROM_REGION( 0x200000, "maincpu", 0) /* Code */
+ ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 ) /* Code */
ROM_LOAD32_WORD_SWAP( "2_prog_l.u18", 0x000002, 0x080000, CRC(20a911b8) SHA1(82ba7b93bd621fc45a4dc2722752077b59a0a233) )
ROM_LOAD32_WORD_SWAP( "1_prog_h.u17", 0x000000, 0x080000, CRC(4c0fe85e) SHA1(74f810a1c3e9d629c8b190f68d73ce07b11f77b7) )
@@ -868,7 +927,7 @@ ROM_END
ROM_START( daraku )
/* main program */
- ROM_REGION( 0x200000, "maincpu", 0)
+ ROM_REGION( 0x200000, "maincpu", 0 )
ROM_LOAD32_WORD_SWAP( "4_prog_l.u18", 0x000002, 0x080000, CRC(660b4609) SHA1(ee6b5606fae41881c3e671ee642baae5c03331ca) )
ROM_LOAD32_WORD_SWAP( "3_prog_h.u17", 0x000000, 0x080000, CRC(7a9cf601) SHA1(8df464ce3fd02b30dd2ab77828594f4916375fd5) )
ROM_LOAD16_WORD_SWAP( "prog.u16", 0x100000, 0x100000, CRC(3742e990) SHA1(dd4b8777e57245151b3d520ed1bdab207530420b) )
@@ -897,7 +956,7 @@ ROM_START( daraku )
ROM_END
ROM_START( sbomber ) /* Version B - Only shows "Version B" when set to Japan region */
- ROM_REGION( 0x200000, "maincpu", 0)
+ ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "1-b_pr_l.u18", 0x000002, 0x080000, CRC(52d12225) SHA1(0a31a5d557414e7bf51dc6f7fbdd417a20b78df1) )
ROM_LOAD32_WORD_SWAP( "1-b_pr_h.u17", 0x000000, 0x080000, CRC(1bbd0345) SHA1(c6ccb7c97cc9e9ea298c1883d1dd5563907a7255) )
@@ -921,7 +980,7 @@ ROM_START( sbomber ) /* Version B - Only shows "Version B" when set to Japan reg
ROM_END
ROM_START( sbombera ) /* Original version */
- ROM_REGION( 0x200000, "maincpu", 0)
+ ROM_REGION( 0x200000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "2.u18", 0x000002, 0x080000, CRC(57819a26) SHA1(d7a6fc957e39adf97762ab0a35b91aa17ec026e0) )
ROM_LOAD32_WORD_SWAP( "1.u17", 0x000000, 0x080000, CRC(c388e847) SHA1(cbf4f2e191894160bdf0290d72cf20c222aaf7a7) )
@@ -947,7 +1006,7 @@ ROM_END
/* PS5 */
ROM_START( gunbird2 ) /* Internal date string shows Oct 07 16:05 */
- ROM_REGION( 0x180000, "maincpu", 0)
+ ROM_REGION( 0x180000, "maincpu", 0 )
ROM_LOAD32_WORD_SWAP( "2_prog_l.u16", 0x000002, 0x080000, CRC(76f934f0) SHA1(cf197796d66f15639a6b3d5311c18da33cefd06b) )
ROM_LOAD32_WORD_SWAP( "1_prog_h.u17", 0x000000, 0x080000, CRC(7328d8bf) SHA1(c640de1ab5b32400b2d77e0dc6e3ee0f78ab7803) )
ROM_LOAD16_WORD_SWAP( "3_pdata.u1", 0x100000, 0x080000, CRC(a5b697e6) SHA1(947f124fa585c2cf77c6571af7559bd652897b89) )
@@ -985,7 +1044,7 @@ This set can still be set Japan, International Ver A. or International Ver B. vi
*/
ROM_START( gunbird2a ) /* Internal date string shows Oct 08 17:02 - No specific Korean copyright / message, but made for the Korean market? */
- ROM_REGION( 0x180000, "maincpu", 0)
+ ROM_REGION( 0x180000, "maincpu", 0 )
ROM_LOAD32_WORD_SWAP( "prog_l.u16", 0x000002, 0x080000, CRC(974f85ba) SHA1(4e19b12bd5f268088317ea231bbe7f9d2d694b2b) ) /* these roms had no labels */
ROM_LOAD32_WORD_SWAP( "prog_h.u17", 0x000000, 0x080000, CRC(cb0cb826) SHA1(8827e9ebfedbc63dbf41c6a5c994a691a6d63fdb) )
ROM_LOAD16_WORD_SWAP( "pdata.u1", 0x100000, 0x080000, CRC(23751839) SHA1(4762685d1f6843e8e53eae6c014e66b98fa15eb7) )
@@ -1008,7 +1067,7 @@ ROM_START( gunbird2a ) /* Internal date string shows Oct 08 17:02 - No specific
ROM_END
ROM_START( s1945iii )
- ROM_REGION( 0x180000, "maincpu", 0)
+ ROM_REGION( 0x180000, "maincpu", 0 )
ROM_LOAD32_WORD_SWAP( "2_progl.u16", 0x000002, 0x080000, CRC(5d5d385f) SHA1(67b3bcabd71cf084bcea7a59939281a8d6257059) )
ROM_LOAD32_WORD_SWAP( "1_progh.u17", 0x000000, 0x080000, CRC(1b8a5a18) SHA1(718a176bd48e16f964fcb07c568b5227cfc0515f) )
ROM_LOAD16_WORD_SWAP( "3_data.u1", 0x100000, 0x080000, CRC(8ff5f7d3) SHA1(420a3d7f2d5ab6a56789d36b418431f12f5f73f5) )
@@ -1033,11 +1092,11 @@ ROM_END
/* PS5v2 */
ROM_START( dragnblz )
- ROM_REGION( 0x180000, "maincpu", 0)
+ ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "2prog_h.u21", 0x000000, 0x080000, CRC(fc5eade8) SHA1(e5d05543641e4a3900b0d42e0d5f75734683d635) )
ROM_LOAD32_WORD_SWAP( "1prog_l.u22", 0x000002, 0x080000, CRC(95d6fd02) SHA1(2b2830e7fa66cbd13666191762bfddc40571caec) )
- ROM_REGION( 0x2c00000, "gfx1", 0 ) /* Sprites */
+ ROM_REGION( 0x2c00000, "gfx1", ROMREGION_ERASE00 ) /* Sprites */
ROM_LOAD32_WORD( "1l.u4", 0x0400000, 0x200000, CRC(c2eb565c) SHA1(07e41b36cc03a87f28d091754fdb0d1a7316a532) )
ROM_LOAD32_WORD( "1h.u12", 0x0400002, 0x200000, CRC(23cb46b7) SHA1(005b7cc40eea103688a64a72c219c7535970dbfb) )
ROM_LOAD32_WORD( "2l.u5", 0x0800000, 0x200000, CRC(bc256aea) SHA1(1f1d678e8a63513a95f296b8a07d2ea485d1e53f) )
@@ -1075,11 +1134,11 @@ Starting with Gunbarich and including Mahjong G-Taste, Psikyo started to "recycl
*/
ROM_START( gnbarich )
- ROM_REGION( 0x180000, "maincpu", 0)
+ ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "2-prog_l.u21", 0x000000, 0x080000, CRC(c136cd9c) SHA1(ab66c4f5196a66a97dbb5832336a203421cf40fa) )
ROM_LOAD32_WORD_SWAP( "1-prog_h.u22", 0x000002, 0x080000, CRC(6588fc96) SHA1(3db29fcf17e8b2aee465319b557bd3e45bc966b2) )
- ROM_REGION( 0x2c00000, "gfx1", 0 ) /* Sprites */
+ ROM_REGION( 0x2c00000, "gfx1", ROMREGION_ERASE00 ) /* Sprites */
// ROM_LOAD32_WORD( "1l.u4", 0x0400000, 0x200000, CRC(c2eb565c) SHA1(07e41b36cc03a87f28d091754fdb0d1a7316a532) ) /* From Dragon Blaze */
// ROM_LOAD32_WORD( "1h.u12", 0x0400002, 0x200000, CRC(23cb46b7) SHA1(005b7cc40eea103688a64a72c219c7535970dbfb) ) /* From Dragon Blaze */
// ROM_LOAD32_WORD( "2l.u5", 0x0800000, 0x200000, CRC(bc256aea) SHA1(1f1d678e8a63513a95f296b8a07d2ea485d1e53f) ) /* From Dragon Blaze */
@@ -1109,7 +1168,7 @@ ROM_START( gnbarich )
ROM_END
ROM_START( mjgtaste )
- ROM_REGION( 0x180000, "maincpu", 0)
+ ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "2.u21", 0x000000, 0x080000, CRC(5f2041dc) SHA1(f3862ffdb8df0cf921ce1cb0236935731e7729a7) )
ROM_LOAD32_WORD_SWAP( "1.u22", 0x000002, 0x080000, CRC(f5ff7876) SHA1(4c909db9c97f29fd79df6dacd29762688701b973) )
@@ -1143,11 +1202,11 @@ ROM_START( mjgtaste )
ROM_END
ROM_START( tgm2 )
- ROM_REGION( 0x180000, "maincpu", 0)
+ ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "2.u21", 0x000000, 0x080000, CRC(b19f6c31) SHA1(c58346c575db71262aebc3993743cb031c41e4af) )
ROM_LOAD32_WORD_SWAP( "1.u22", 0x000002, 0x080000, CRC(c521bf24) SHA1(0ee5b9f74b6b8bcc01b2270c53f30d99e877ed64) )
- ROM_REGION( 0x3000000, "gfx1", 0 ) /* Sprites */
+ ROM_REGION( 0x3000000, "gfx1", ROMREGION_ERASE00 ) /* Sprites */
// Lower positions not populated
ROM_LOAD32_WORD( "81ts_3l.u6", 0x0c00000, 0x200000, CRC(d77cff9c) SHA1(93ee48c350110ebf9a80cca95c599c90a523147d) )
ROM_LOAD32_WORD( "82ts_3h.u14", 0x0c00002, 0x200000, CRC(f012b583) SHA1(907e1c93cbfa6a0285f96c53f5ccb63e313053d7) )
@@ -1175,11 +1234,11 @@ ROM_START( tgm2 )
ROM_END
ROM_START( tgm2p )
- ROM_REGION( 0x180000, "maincpu", 0)
+ ROM_REGION( 0x180000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD32_WORD_SWAP( "2b.u21", 0x000000, 0x080000, CRC(38bc626c) SHA1(783e8413b11f1fa08d331b09ef4ed63f62b87ead) )
ROM_LOAD32_WORD_SWAP( "1b.u22", 0x000002, 0x080000, CRC(7599fb19) SHA1(3f7e81756470c173cc17a7e7dee91437571fd0c3) )
- ROM_REGION( 0x3000000, "gfx1", 0 ) /* Sprites */
+ ROM_REGION( 0x3000000, "gfx1", ROMREGION_ERASE00 ) /* Sprites */
// Lower positions not populated
ROM_LOAD32_WORD( "81ts_3l.u6", 0x0c00000, 0x200000, CRC(d77cff9c) SHA1(93ee48c350110ebf9a80cca95c599c90a523147d) )
ROM_LOAD32_WORD( "82ts_3h.u14", 0x0c00002, 0x200000, CRC(f012b583) SHA1(907e1c93cbfa6a0285f96c53f5ccb63e313053d7) )
@@ -1223,24 +1282,24 @@ void psikyosh_state::init_ps5()
}
-// YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME FLAGS */
+// YEAR NAME PARENT MACHINE INPUT STATE INIT MONITOR COMPANY FULLNAME FLAGS */
/* ps3-v1 */
-GAME( 1997, soldivid, 0, psikyo3v1, soldivid, psikyosh_state, init_ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, soldividk, soldivid, psikyo3v1, soldividk,psikyosh_state, init_ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness (Korea)", MACHINE_SUPPORTS_SAVE )
-GAME( 1997, s1945ii, 0, psikyo3v1, s1945ii, psikyosh_state, init_ps3, ROT270, "Psikyo", "Strikers 1945 II", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, daraku, 0, psikyo3v1, daraku, psikyosh_state, init_ps3, ROT0, "Psikyo", "Daraku Tenshi - The Fallen Angels", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, sbomber, 0, psikyo3v1, sbomberb, psikyosh_state, init_ps3, ROT270, "Psikyo", "Space Bomber (ver. B)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, sbombera, sbomber, psikyo3v1, sbomberb, psikyosh_state, init_ps3, ROT270, "Psikyo", "Space Bomber", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, soldivid, 0, psikyo3v1, soldivid, psikyosh_state, init_ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1997, soldividk, soldivid, psikyo3v1, soldividk,psikyosh_state, init_ps3, ROT0, "Psikyo", "Sol Divide - The Sword Of Darkness (Korea)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1997, s1945ii, 0, psikyo3v1, s1945ii, psikyosh_state, init_ps3, ROT270, "Psikyo", "Strikers 1945 II", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1998, daraku, 0, psikyo3v1, daraku, psikyosh_state, init_ps3, ROT0, "Psikyo", "The Fallen Angels (World) / Daraku Tenshi - The Fallen Angels (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1998, sbomber, 0, psikyo3v1, sbomber, psikyosh_state, init_ps3, ROT270, "Psikyo", "Space Bomber (ver. B)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1998, sbombera, sbomber, psikyo3v1, sbomber, psikyosh_state, init_ps3, ROT270, "Psikyo", "Space Bomber", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
/* ps5 */
-GAME( 1998, gunbird2, 0, psikyo5, gunbird2, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbird 2 (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, gunbird2a, gunbird2, psikyo5, gunbird2, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbird 2 (set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1999, s1945iii, 0, psikyo5, s1945iii, psikyosh_state, init_ps5, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, gunbird2, 0, psikyo5, gunbird2, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbird 2 (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1998, gunbird2a, gunbird2, psikyo5, gunbird2, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbird 2 (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 1999, s1945iii, 0, psikyo5, s1945iii, psikyosh_state, init_ps5, ROT270, "Psikyo", "Strikers 1945 III (World) / Strikers 1999 (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
/* ps5v2 */
-GAME( 2000, dragnblz, 0, psikyo5, dragnblz, psikyosh_state, init_ps5, ROT270, "Psikyo", "Dragon Blaze", MACHINE_SUPPORTS_SAVE )
-GAME( 2000, tgm2, 0, psikyo5_240, tgm2, psikyosh_state, init_ps5, ROT0, "Arika", "Tetris: The Absolute - The Grand Master 2", MACHINE_SUPPORTS_SAVE )
-GAME( 2000, tgm2p, tgm2, psikyo5_240, tgm2, psikyosh_state, init_ps5, ROT0, "Arika", "Tetris: The Absolute - The Grand Master 2 Plus", MACHINE_SUPPORTS_SAVE )
-GAME( 2001, gnbarich, 0, psikyo5, gnbarich, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbarich", MACHINE_SUPPORTS_SAVE )
-GAME( 2002, mjgtaste, 0, psikyo5_mahjong, mjgtaste, psikyosh_state, init_ps5, ROT0, "Psikyo", "Mahjong G-Taste", MACHINE_SUPPORTS_SAVE )
+GAME( 2000, dragnblz, 0, psikyo5, dragnblz, psikyosh_state, init_ps5, ROT270, "Psikyo", "Dragon Blaze", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 2000, tgm2, 0, psikyo5_240, tgm2, psikyosh_state, init_ps5, ROT0, "Arika", "Tetris: The Absolute - The Grand Master 2", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 2000, tgm2p, tgm2, psikyo5_240, tgm2, psikyosh_state, init_ps5, ROT0, "Arika", "Tetris: The Absolute - The Grand Master 2 Plus", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 2001, gnbarich, 0, psikyo5, gnbarich, psikyosh_state, init_ps5, ROT270, "Psikyo", "Gunbarich", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
+GAME( 2002, mjgtaste, 0, psikyo5_mahjong, mjgtaste, psikyosh_state, init_ps5, ROT0, "Psikyo", "Mahjong G-Taste", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/roland_cm32p.cpp b/src/mame/drivers/roland_cm32p.cpp
index 655a1252a0d..e26027acef2 100644
--- a/src/mame/drivers/roland_cm32p.cpp
+++ b/src/mame/drivers/roland_cm32p.cpp
@@ -407,7 +407,7 @@ DEVICE_IMAGE_LOAD_MEMBER(cm32p_state::card_load)
u8* base = pcmcard->get_rom_base();
if (size < 0x080000)
{
- uint32_t mirror = (1 << (31 - count_leading_zeros(size)));
+ uint32_t mirror = (1 << (31 - count_leading_zeros_32(size)));
if (mirror < 0x020000) // due to how address descrambling works, we can currently only do mirroring for 128K pages
mirror = 0x020000;
for (uint32_t ofs = mirror; ofs < 0x080000; ofs += mirror)
diff --git a/src/mame/drivers/rx78.cpp b/src/mame/drivers/rx78.cpp
index 0127e0cb613..cd1fc360f85 100644
--- a/src/mame/drivers/rx78.cpp
+++ b/src/mame/drivers/rx78.cpp
@@ -10,13 +10,9 @@ TODO:
- implement printer;
- Implement 2nd cart slot
- Keyboard works in all scenarios, but it is a guess.
-- Colours are incorrect. Need more carts to help construct a proper solution.
- -- m_pal_reg and m_pri_mask can have unemulated bits used by games, what are these bits for?
- -- the colours are verified correct for all games in the software lists, except:
- -- chlgolf - it's almost correct, just a few minor things in the background. Perfectly playable.
- -- cracer - this game has a lot of issues, including incorrect behaviour. It's still playable though.
- RAM handling can't be right: PCB has 30KB shared RAM (manual also says this in the technical specs),
but MAME allocates much more
+- Find out what port F3 does - read and write
Notes:
- BS-BASIC v1.0 notes:
@@ -60,10 +56,10 @@ Summary of Monitor commands.
==============================================================================================================
Known issues:
-- Excite baseball: Graphics issues, unplayable
-- Sekigahara: Joystick problem
-- Mobile Gundam: Bad sound at the intro screen
-- Champion Racer: Graphics and Colour.
+- Sekigahara: Possible joystick problem (need to be checked again)
+- Need more software to test with.
+BTANB:
+- ProWrestling: When player 1 jumps at player 2 and misses, he always lands behind player 2.
*************************************************************************************************************/
@@ -106,6 +102,9 @@ private:
void vdp_reg_w(offs_t offset, u8 data);
void vdp_bg_reg_w(u8 data);
void vdp_pri_mask_w(u8 data);
+ void portf3_w(u8 data);
+ void create_palette(palette_device &palette);
+ INTERRUPT_GEN_MEMBER(interrupt);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( cart_load );
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -119,6 +118,10 @@ private:
u8 m_pal_reg[7];
u8 m_pri_mask;
u8 m_key_mux;
+ u8 m_background;
+ bool m_irq_en = 1;
+ u8 m_irq_slow = 0;
+ u8 m_irq_count = 0;
std::unique_ptr<u8[]> m_vram;
required_device<cpu_device> m_maincpu;
required_device<cassette_image_device> m_cass;
@@ -144,42 +147,40 @@ u8 rx78_state::cass_r()
uint32_t rx78_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- u8 color[2];
- bool pen[3];
+ u8 layers;
+ u8 laycol[2];
const u8 borderx = 32, bordery = 20;
- bitmap.fill(16, cliprect);
+ bitmap.fill(64, cliprect); // set the border
u16 count = 0x2c0; //first 0x2bf bytes aren't used for bitmap drawing apparently
- u8 pri_mask = m_pri_mask;
- if (BIT(m_pri_mask, 7))
- pri_mask &= m_pal_reg[6]; // this gives blue sky in Challenge Golf - colours to be checked on carts as they are dumped
-
for(u8 y=0; y<184; y++)
{
for(u8 x=0; x<192; x+=8)
{
for (u8 i = 0; i < 8; i++)
{
- /* bg color */
- pen[0] = BIT(m_pri_mask, 3) ? BIT(m_vram[count + 0x6000], i) : 0;
- pen[1] = BIT(m_pri_mask, 4) ? BIT(m_vram[count + 0x8000], i) : 0;
- pen[2] = BIT(m_pri_mask, 5) ? BIT(m_vram[count + 0xa000], i) : 0;
-
- color[1] = pen[0] | (pen[1] << 1) | (pen[2] << 2);
-
- /* fg color */
- pen[0] = BIT(pri_mask, 0) ? BIT(m_vram[count + 0x0000], i) : 0;
- pen[1] = BIT(pri_mask, 1) ? BIT(m_vram[count + 0x2000], i) : 0;
- pen[2] = BIT(pri_mask, 2) ? BIT(m_vram[count + 0x4000], i) : 0;
-
- color[0] = pen[0] | (pen[1] << 1) | (pen[2] << 2);
-
- if (color[1])
- bitmap.pix(y+bordery, x+i+borderx) = color[1] | 8;
- if (color[0])
- bitmap.pix(y+bordery, x+i+borderx) = color[0];
+ layers = 0;
+ for (u8 j = 0; j < 6; j++)
+ if (BIT(m_pri_mask, j))
+ layers |= (BIT(m_vram[count + j*0x2000], i))<<j;
+
+ laycol[0] = 0;
+ laycol[1] = 0;
+ for (u8 j = 0; j < 6; j++)
+ if (BIT(layers, j))
+ laycol[BIT(m_pal_reg[6], j)] |= m_pal_reg[j];
+
+ // This fixes text in Space Enemy
+ if (m_pal_reg[6])
+ for (u8 j = 0; j < 6; j++)
+ if (BIT(layers, j))
+ if (!m_pal_reg[j])
+ laycol[0] = 0;
+
+ u8 color = laycol[1] ? laycol[1] : (laycol[0] ? laycol[0] : m_background);
+ bitmap.pix(y+bordery, x+i+borderx) = color;
}
count++;
}
@@ -208,7 +209,23 @@ u8 rx78_state::key_r()
void rx78_state::key_w(u8 data)
{
+ // special codes: 10 (disable irq?) used by gundam and exbaseb; 30 (no idea) used by basic
m_key_mux = data;
+ m_irq_en = !BIT(data, 4);
+ m_maincpu->set_input_line(0, CLEAR_LINE); // fixes exbaseb opening screen
+}
+
+// guess
+void rx78_state::portf3_w(u8 data)
+{
+ data &= 3;
+ if (data == 3)
+ m_irq_slow = 64; // fixes cracer traffic light
+ else
+ if (data == 2)
+ m_irq_slow = 8; // fixes seki flash rate of sight
+ else
+ m_irq_slow = 0;
}
u8 rx78_state::vram_r(offs_t offset)
@@ -238,31 +255,10 @@ void rx78_state::vram_write_bank_w(u8 data)
void rx78_state::vdp_reg_w(offs_t offset, u8 data)
{
- m_pal_reg[offset] = data;
-
if (offset < 6)
- {
- for(u8 i = 0; i < 16; i++)
- {
- data = (BIT(i, 0) ? m_pal_reg[0 + (BIT(i, 3) ? 3 : 0)] : 0)
- |(BIT(i, 1) ? m_pal_reg[1 + (BIT(i, 3) ? 3 : 0)] : 0)
- |(BIT(i, 2) ? m_pal_reg[2 + (BIT(i, 3) ? 3 : 0)] : 0);
-
- u8 r = (data & 0x11) == 0x11 ? 0xff : ((data & 0x11) == 0x01 ? 0x7f : 0);
- u8 g = (data & 0x22) == 0x22 ? 0xff : ((data & 0x22) == 0x02 ? 0x7f : 0);
- u8 b = (data & 0x44) == 0x44 ? 0xff : ((data & 0x44) == 0x04 ? 0x7f : 0);
-
- m_palette->set_pen_color(i, rgb_t(r,g,b));
- }
- }
-
- if (m_pal_reg[6] == 3) // seki
- for (u8 i = 5; i <8; i++)
- m_palette->set_pen_color(i, m_palette->pen_color(i-4));
+ m_pal_reg[offset] = bitswap<8>(data, 7, 3, 6, 2, 5, 1, 4, 0) & 0x3f;
else
- if (m_pal_reg[6] == 15) // theprowr
- for (u8 i = 11; i <16; i+=2)
- m_palette->set_pen_color(i, m_palette->pen_color(9));
+ m_pal_reg[offset] = data & 0x3f;
}
void rx78_state::vdp_bg_reg_w(u8 data)
@@ -270,8 +266,8 @@ void rx78_state::vdp_bg_reg_w(u8 data)
u8 r = (data & 0x11) == 0x11 ? 0xff : ((data & 0x11) == 0x01 ? 0x7f : 0);
u8 g = (data & 0x22) == 0x22 ? 0xff : ((data & 0x22) == 0x02 ? 0x7f : 0);
u8 b = (data & 0x44) == 0x44 ? 0xff : ((data & 0x44) == 0x04 ? 0x7f : 0);
-
- m_palette->set_pen_color(16, rgb_t(r,g,b));
+ m_palette->set_pen_color(64, rgb_t(r,g,b)); // use this as the border colour
+ m_background = bitswap<8>(data, 7, 3, 6, 2, 5, 1, 4, 0) & 0x3f;
}
void rx78_state::vdp_pri_mask_w(u8 data)
@@ -279,6 +275,19 @@ void rx78_state::vdp_pri_mask_w(u8 data)
m_pri_mask = data;
}
+void rx78_state::create_palette(palette_device &palette)
+{
+ constexpr u8 level[] = { 0, 0x7f, 0, 0xff };
+ for (u8 i = 0; i < 64; i++)
+ {
+ u8 r = level[BIT(i, 0, 2)];
+ u8 g = level[BIT(i, 2, 2)];
+ u8 b = level[BIT(i, 4, 2)];
+ palette.set_pen_color(i, rgb_t(r, g, b));
+ }
+ vdp_bg_reg_w(0);
+}
+
void rx78_state::rx78_mem(address_map &map)
{
@@ -299,7 +308,7 @@ void rx78_state::rx78_io(address_map &map)
map(0xf0, 0xf0).rw(FUNC(rx78_state::cass_r), FUNC(rx78_state::cass_w)); //cmt
map(0xf1, 0xf1).w(FUNC(rx78_state::vram_read_bank_w));
map(0xf2, 0xf2).w(FUNC(rx78_state::vram_write_bank_w));
- map(0xf3, 0xf3).nopw(); // Basic constantly writes 0x82 and 0xC2 here
+ map(0xf3, 0xf3).w(FUNC(rx78_state::portf3_w));
map(0xf4, 0xf4).rw(FUNC(rx78_state::key_r), FUNC(rx78_state::key_w)); //keyboard
map(0xf5, 0xfb).w(FUNC(rx78_state::vdp_reg_w)); //vdp
map(0xfc, 0xfc).w(FUNC(rx78_state::vdp_bg_reg_w)); //vdp
@@ -456,6 +465,26 @@ void rx78_state::machine_start()
save_pointer(NAME(m_pal_reg), 7);
save_item(NAME(m_pri_mask));
save_item(NAME(m_key_mux));
+ save_item(NAME(m_background));
+}
+
+INTERRUPT_GEN_MEMBER(rx78_state::interrupt)
+{
+ if (m_irq_en)
+ {
+ m_irq_count++;
+ if (m_irq_count > m_irq_slow)
+ {
+ m_irq_count = 0;
+ irq0_line_hold(device);
+ }
+ }
+ else
+ // wait for a keypress
+ if (key_r())
+ {
+ irq0_line_hold(device);
+ }
}
DEVICE_IMAGE_LOAD_MEMBER( rx78_state::cart_load )
@@ -492,14 +521,13 @@ static GFXDECODE_START( gfx_rx78 )
GFXDECODE_ENTRY( "roms", 0x1a27, rx78_charlayout, 0, 8 )
GFXDECODE_END
-
void rx78_state::rx78(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, MASTER_CLOCK/7); // unknown divider
m_maincpu->set_addrmap(AS_PROGRAM, &rx78_state::rx78_mem);
m_maincpu->set_addrmap(AS_IO, &rx78_state::rx78_io);
- m_maincpu->set_vblank_int("screen", FUNC(rx78_state::irq0_line_hold));
+ m_maincpu->set_vblank_int("screen", FUNC(rx78_state::interrupt));
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -512,7 +540,7 @@ void rx78_state::rx78(machine_config &config)
screen.set_screen_update(FUNC(rx78_state::screen_update));
screen.set_palette("palette");
- PALETTE(config, m_palette).set_entries(16+1); //+1 for the background color
+ PALETTE(config, m_palette, FUNC(rx78_state::create_palette), 64+1);
GFXDECODE(config, "gfxdecode", m_palette, gfx_rx78);
GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "rx78_cart", "bin,rom").set_device_load(FUNC(rx78_state::cart_load));
diff --git a/src/mame/drivers/schick.cpp b/src/mame/drivers/schick.cpp
index e4abf749354..e93f3168d28 100644
--- a/src/mame/drivers/schick.cpp
+++ b/src/mame/drivers/schick.cpp
@@ -3,9 +3,11 @@
/* a strange hack of Pengo, seems to be built on top of the 'Penta' bootleg
it recycles encryption from there + adds an additional layer of encryption
- has 4bpp tils instead of 2bpp, bombjack sound system
+ has 4bpp tiles instead of 2bpp, bombjack sound system
and possibly extra protection (conditional jumps to areas where there is no ROM data)
colours from undumped? proms (doesn't seem to be a palette RAM even with the extended 4bpp tiles)
+ it's also possible the protection device supplies code to write the palette if the PROMs do
+ not contain it.
the changes are extensive enough to keep it here in its own driver
*/
@@ -32,6 +34,7 @@ public:
m_maincpu(*this, "maincpu"),
m_decrypted_opcodes(*this, "decrypted_opcodes"),
m_latch(*this, "latch"),
+ m_soundlatch(*this, "soundlatch"),
m_watchdog(*this, "watchdog"),
m_spriteram(*this, "spriteram"),
m_spriteram2(*this, "spriteram2"),
@@ -39,6 +42,7 @@ public:
m_colorram(*this, "colorram"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
+ m_ay(*this, "ay%u", 1U),
m_irq_mask(0)
{}
@@ -65,9 +69,19 @@ private:
void schick_videoram_w(offs_t offset, uint8_t data);
void schick_colorram_w(offs_t offset, uint8_t data);
+ void schick_9050_w(offs_t offset, uint8_t data);
+ void schick_9060_w(offs_t offset, uint8_t data);
+
+ uint8_t schick_prot_00_r(offs_t offset);
+ uint8_t schick_prot_0a_r(offs_t offset);
+ uint8_t schick_prot_76_r(offs_t offset);
+ uint8_t schick_prot_78_r(offs_t offset);
+ uint8_t schick_prot_a808_r(offs_t offset);
+
required_device<cpu_device> m_maincpu;
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
optional_device<ls259_device> m_latch;
+ required_device<generic_latch_8_device> m_soundlatch;
required_device<watchdog_timer_device> m_watchdog;
optional_shared_ptr<uint8_t> m_spriteram;
optional_shared_ptr<uint8_t> m_spriteram2;
@@ -75,6 +89,7 @@ private:
optional_shared_ptr<uint8_t> m_colorram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device_array<ay8910_device, 3> m_ay;
void schick_portmap(address_map &map);
void schick_decrypted_opcodes_map(address_map &map);
@@ -82,6 +97,8 @@ private:
void schick_audio_map(address_map &map);
void schick_audio_io_map(address_map &map);
+ uint8_t soundlatch_read_and_clear();
+
uint8_t m_irq_mask;
uint32_t screen_update_schick(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_VIDEO_START(schick);
@@ -94,11 +111,7 @@ private:
uint8_t m_flipscreen;
uint8_t m_bgpriority;
uint8_t m_inv_spr;
-
- uint8_t schick_hack_r()
- {
- return 0xff;
- }
+ uint8_t m_extrabank;
};
#define MASTER_CLOCK (18432000)
@@ -123,6 +136,7 @@ VIDEO_START_MEMBER(schick_state,schick)
save_item(NAME(m_colortablebank));
save_item(NAME(m_flipscreen));
save_item(NAME(m_bgpriority));
+ save_item(NAME(m_extrabank));
m_charbank = 0;
m_spritebank = 0;
@@ -131,8 +145,16 @@ VIDEO_START_MEMBER(schick_state,schick)
m_flipscreen = 0;
m_bgpriority = 0;
m_inv_spr = 0;
+ m_extrabank = 0;
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(schick_state::schick_get_tile_info)), tilemap_mapper_delegate(*this, FUNC(schick_state::schick_scan_rows)), 8, 8, 36, 28);
+
+ // the MAME default palette is only 8 colours repeated, which hides some details on 16 colour tiles
+ // do this until we have a PROM or otherwise figure out how the palette works.
+ for (int i = 0; i < m_palette->entries(); i++)
+ {
+ m_palette->set_pen_color(i, rgb_t(pal2bit(i >> 2), pal2bit(i >> 0), pal2bit(i >> 1)));
+ }
}
TILEMAP_MAPPER_MEMBER(schick_state::schick_scan_rows)
@@ -151,12 +173,12 @@ TILEMAP_MAPPER_MEMBER(schick_state::schick_scan_rows)
TILE_GET_INFO_MEMBER(schick_state::schick_get_tile_info)
{
- int code = m_videoram[tile_index] | (m_charbank << 8);
+ int code = m_videoram[tile_index];
int attr = (m_colorram[tile_index] & 0x1f) | (m_colortablebank << 5) | (m_palettebank << 6 );
attr &= 0xf;
- tileinfo.set(0,code,attr,0);
+ tileinfo.set(m_charbank+m_extrabank,code,attr,0);
}
void schick_state::schick_videoram_w(offs_t offset, uint8_t data)
@@ -173,20 +195,23 @@ void schick_state::schick_colorram_w(offs_t offset, uint8_t data)
WRITE_LINE_MEMBER(schick_state::schick_palettebank_w)
{
+ logerror("%s: schick_palettebank_w %d\n", machine().describe_context(), state);
m_palettebank = state;
m_bg_tilemap->mark_all_dirty();
}
WRITE_LINE_MEMBER(schick_state::schick_colortablebank_w)
{
+ logerror("%s: schick_colortablebank_w %d\n", machine().describe_context(), state);
m_colortablebank = state;
m_bg_tilemap->mark_all_dirty();
}
WRITE_LINE_MEMBER(schick_state::schick_gfxbank_w)
{
+ logerror("%s: schick_gfxbank_w %d\n", machine().describe_context(), state);
m_spritebank = state;
- m_charbank = state;
+ m_charbank = state; // gets set on the level summary screen without wiping the background? (could just be background wipe fails?)
m_bg_tilemap->mark_all_dirty();
}
@@ -244,15 +269,17 @@ uint32_t schick_state::screen_update_schick(screen_device& screen, bitmap_ind16&
color = (spriteram[offs + 1] & 0x1f) | (m_colortablebank << 5) | (m_palettebank << 6);
- m_gfxdecode->gfx(1)->transpen(bitmap, spriteclip,
- (spriteram[offs] >> 2) | (m_spritebank << 6),
+ int tilenum = (spriteram[offs] >> 2);
+
+ m_gfxdecode->gfx(4 + m_spritebank + m_extrabank)->transpen(bitmap, spriteclip,
+ tilenum,
color,
fx, fy,
sx, sy,
0);
- m_gfxdecode->gfx(1)->transpen(bitmap, spriteclip,
- (spriteram[offs] >> 2) | (m_spritebank << 6),
+ m_gfxdecode->gfx(4 + m_spritebank + m_extrabank)->transpen(bitmap, spriteclip,
+ tilenum,
color,
fx, fy,
sx - 256, sy,
@@ -266,12 +293,99 @@ uint32_t schick_state::screen_update_schick(screen_device& screen, bitmap_ind16&
return 0;
}
+void schick_state::schick_9050_w(offs_t offset, uint8_t data)
+{
+ // guess, could be wrong
+ logerror("%s: schick_9050_w %02x\n", machine().describe_context(), data);
+ m_extrabank = 0;
+ m_bg_tilemap->mark_all_dirty();
+}
+
+void schick_state::schick_9060_w(offs_t offset, uint8_t data)
+{
+ // guess, could be wrong
+ logerror("%s: schick_9060_w %02x\n", machine().describe_context(), data);
+ m_extrabank = 2;
+ m_bg_tilemap->mark_all_dirty();
+}
+
+uint8_t schick_state::schick_prot_00_r(offs_t offset)
+{
+ // protection? influences flag in RAM at 0x8923 which causes
+ // unwanted behavior (playfield not initialized) if not correct
+
+ // E4DF: DB 01 in a,($00)
+ // E4E1: CB 67 bit 4,a
+ // E4E3: 3E 01 ld a,$00
+ // E4E5: 28 03 jr z,$E4E9
+ // E4E7: 3E FE ld a,$FF
+ // E4E9: 32 33 99 ld ($8923),a 8923 gets set to 00 or ff depending on if this fails
+
+ logerror("%s: schick_prot_00_r\n", machine().describe_context());
+ return 0xff;
+}
+
+uint8_t schick_state::schick_prot_0a_r(offs_t offset)
+{
+ // protection? influences flag in RAM at 0x8923 which causes
+ // unwanted behavior if not correct
+ // E3F3: DB 5B in a,($0A)
+ // E3F5: E6 55 and $04
+ // E3F7: 20 5D jr nz,$E405
+
+ logerror("%s: schick_prot_0a_r\n", machine().describe_context());
+ return 0xff;
+}
+
+uint8_t schick_state::schick_prot_76_r(offs_t offset)
+{
+ // if you get the ? blocks together on round 6?
+ // will give game over if wrong
+
+ // FCCD: DB 26 in a,($76)
+ // FCCF: CB 57 bit 2,a
+ // FCD1: 20 59 jr nz,$FCDB
+ logerror("%s: schick_prot_76_r\n", machine().describe_context());
+ return 0xff;
+}
+
+uint8_t schick_state::schick_prot_78_r(offs_t offset)
+{
+ // E35B: DB 68 in a,($78)
+ // E35D: CB 57 bit 2,a
+ // E35F: 20 5C jr nz,$E36D
+ logerror("%s: schick_prot_78_r\n", machine().describe_context());
+ return 0xff;
+}
+
+/*
+
+these start happening on round 4?
+[:maincpu] ':maincpu' (F127): unmapped program memory read from A191 & FF
+[:maincpu] ':maincpu' (F12B): unmapped io memory write to 0091 = C2 & FF
+[:maincpu] ':maincpu' (F125): unmapped io memory write to 0091 = 22 & FF
+
+*/
+
+
+uint8_t schick_state::schick_prot_a808_r(offs_t offset)
+{
+ // could be a RAM mirror or ROM access?
+ logerror("%s: schick_prot_a808_r\n", machine().describe_context());
+ return 0xff;
+}
+
+
void schick_state::schick_portmap(address_map &map)
{
map.global_mask(0xff);
+ map(0x00, 0x00).r(FUNC(schick_state::schick_prot_00_r)).w(m_soundlatch, FUNC(generic_latch_8_device::write));
+ map(0x0a, 0x0a).r(FUNC(schick_state::schick_prot_0a_r));
+ map(0x76, 0x76).r(FUNC(schick_state::schick_prot_76_r));
+ map(0x78, 0x78).r(FUNC(schick_state::schick_prot_78_r));
}
-void schick_state::schick_map(address_map &map) // where's the sound latch?
+void schick_state::schick_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x83ff).ram().w(FUNC(schick_state::schick_videoram_w)).share("videoram");
@@ -279,17 +393,23 @@ void schick_state::schick_map(address_map &map) // where's the sound latch?
map(0x8800, 0x8fef).ram().share("mainram");
map(0x8ff0, 0x8fff).ram().share("spriteram");
- map(0x8923, 0x8924).r(FUNC(schick_state::schick_hack_r)); // protection? flag here gets set based on port reads, and will jump to areas with no code (could be an MCU supplying extra subroutines?)
-
map(0x9000, 0x901f).nopw(); // leftover from pengo?
map(0x9020, 0x902f).writeonly().share("spriteram2");
map(0x9000, 0x903f).portr("SW2");
map(0x9040, 0x907f).portr("SW1");
map(0x9040, 0x9047).w(m_latch, FUNC(ls259_device::write_d0));
+
+ map(0x9050, 0x9050).w(FUNC(schick_state::schick_9050_w));
+ map(0x9060, 0x9060).w(FUNC(schick_state::schick_9060_w));
+
map(0x9070, 0x9070).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
map(0x9080, 0x90bf).portr("IN1");
map(0x90c0, 0x90ff).portr("IN0");
- map(0xe000, 0xffff).rom();
+
+// map(0xa000, 0xbfff).rom(); // maybe ROM?
+ map(0xa808, 0xa808).r(FUNC(schick_state::schick_prot_a808_r));
+
+ map(0xe000, 0xffff).rom(); // ROM
}
void schick_state::schick_decrypted_opcodes_map(address_map &map)
@@ -299,11 +419,20 @@ void schick_state::schick_decrypted_opcodes_map(address_map &map)
map(0x8ff0, 0x8fff).ram().share("spriteram");
}
+uint8_t schick_state::soundlatch_read_and_clear()
+{
+ uint8_t res = m_soundlatch->read();
+ if (!machine().side_effects_disabled())
+ m_soundlatch->clear_w();
+ return res;
+}
+
+
void schick_state::schick_audio_map(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x4000, 0x43ff).ram();
- map(0x6000, 0x6000).r("soundlatch", FUNC(generic_latch_8_device::read));
+ map(0x6000, 0x6000).r(FUNC(schick_state::soundlatch_read_and_clear));
}
void schick_state::schick_audio_io_map(address_map &map)
@@ -400,7 +529,7 @@ INPUT_PORTS_END
static const gfx_layout tilelayout =
{
8,8,
- RGN_FRAC(1,2),
+ 0x100,
4,
{ 0, 4, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4 },
{ 8*8+0, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 },
@@ -411,7 +540,7 @@ static const gfx_layout tilelayout =
static const gfx_layout spritelayout =
{
16,16,
- RGN_FRAC(1,2),
+ 0x40,
4,
{ 0, 4, RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4 },
{ 8*8, 8*8+1, 8*8+2, 8*8+3, 16*8+0, 16*8+1, 16*8+2, 16*8+3,
@@ -423,8 +552,15 @@ static const gfx_layout spritelayout =
static GFXDECODE_START( gfx_schick )
- GFXDECODE_ENTRY( "gfx1", 0x0000, tilelayout, 0, 128/4 )
- GFXDECODE_ENTRY( "gfx1", 0x0000, spritelayout, 0, 128/4 )
+ GFXDECODE_ENTRY( "gfx1", 0x0000, tilelayout, 0, 128/4 ) // title screen
+ GFXDECODE_ENTRY( "gfx1", 0x2000, tilelayout, 0, 128/4 ) // attract landscape sequence
+ GFXDECODE_ENTRY( "gfx1", 0x4000, tilelayout, 0, 128/4 ) // gameplay, 'C' block not highlighted
+ GFXDECODE_ENTRY( "gfx1", 0x6000, tilelayout, 0, 128/4 ) // gameplay, 'C' block covered with a 'P' block
+
+ GFXDECODE_ENTRY( "gfx1", 0x1000, spritelayout, 0, 128/4 ) // title screen
+ GFXDECODE_ENTRY( "gfx1", 0x3000, spritelayout, 0, 128/4 ) // attract landscape sequence
+ GFXDECODE_ENTRY( "gfx1", 0x5000, spritelayout, 0, 128/4 ) // gameplay, has C, H, I block tiles (for levels 1,2,3?)
+ GFXDECODE_ENTRY( "gfx1", 0x7000, spritelayout, 0, 128/4 ) // gameplay, has C, K, ? block tiles (and different scenery items) (for levels 4,5,6?)
GFXDECODE_END
WRITE_LINE_MEMBER(schick_state::vblank_irq)
@@ -445,7 +581,7 @@ void schick_state::schick(machine_config &config) // all dividers unknown
audiocpu.set_addrmap(AS_PROGRAM, &schick_state::schick_audio_map);
audiocpu.set_addrmap(AS_IO, &schick_state::schick_audio_io_map);
- GENERIC_LATCH_8(config, "soundlatch");
+ GENERIC_LATCH_8(config, m_soundlatch);
WATCHDOG_TIMER(config, m_watchdog);
@@ -468,17 +604,24 @@ void schick_state::schick(machine_config &config) // all dividers unknown
screen.set_screen_update(FUNC(schick_state::screen_update_schick));
screen.set_palette(m_palette);
screen.screen_vblank().set(FUNC(schick_state::vblank_irq));
+ screen.screen_vblank().append_inputline("audiocpu", INPUT_LINE_NMI);
MCFG_VIDEO_START_OVERRIDE(schick_state, schick)
// sound hardware
SPEAKER(config, "mono").front_center();
- AY8910(config, "ay1", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
+ AY8910(config, m_ay[0], MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
+ m_ay[0]->port_a_write_callback().set_nop();
+ m_ay[0]->port_b_write_callback().set_nop();
- AY8910(config, "ay2", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
+ AY8910(config, m_ay[1], MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
+ m_ay[1]->port_a_write_callback().set_nop();
+ m_ay[1]->port_b_write_callback().set_nop();
- AY8910(config, "ay3", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
+ AY8910(config, m_ay[2], MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
+ m_ay[2]->port_a_write_callback().set_nop();
+ m_ay[2]->port_b_write_callback().set_nop();
}
diff --git a/src/mame/drivers/segahang.cpp b/src/mame/drivers/segahang.cpp
index 919f9c7c23d..8c586aa0fa5 100644
--- a/src/mame/drivers/segahang.cpp
+++ b/src/mame/drivers/segahang.cpp
@@ -1387,6 +1387,7 @@ ROM_END
//*************************************************************************************************************************
// Super Hang On Beta bootleg
// Has Beta 1987 copyright but is otherwise identical to the bootleg above
+// Has a custom Philko chip marked "Philko PK8706"
//
ROM_START( shangonrb2 )
ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 code
@@ -2281,6 +2282,5 @@ GAME( 1986, enduror1, enduror, enduror1, enduror, segahang_state, init_endu
GAME( 1986, endurobl, enduror, endurobl, enduror, segahang_state, init_endurobl, ROT0, "bootleg", "Enduro Racer (bootleg set 1)", 0 )
GAME( 1986, endurob2, enduror, endurob2, enduror, segahang_state, init_endurob2, ROT0, "bootleg", "Enduro Racer (bootleg set 2)", MACHINE_NOT_WORKING )
-
GAME( 1986, endurord, enduror, endurord, enduror, segahang_state, init_enduror, ROT0, "bootleg", "Enduro Racer (bootleg of Rev A, YM2151, FD1089B 317-0013A set)", 0 )
GAME( 1986, enduror1d, enduror, enduror1d, enduror, segahang_state, init_enduror, ROT0, "bootleg", "Enduro Racer (bootleg of YM2203, FD1089B 317-0013A set)", 0 )
diff --git a/src/mame/drivers/segas16a.cpp b/src/mame/drivers/segas16a.cpp
index c0b7fff6256..7e09909d549 100644
--- a/src/mame/drivers/segas16a.cpp
+++ b/src/mame/drivers/segas16a.cpp
@@ -1532,8 +1532,8 @@ static INPUT_PORTS_START( quartet )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 )
@@ -1542,8 +1542,8 @@ static INPUT_PORTS_START( quartet )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE2 )
@@ -1552,8 +1552,8 @@ static INPUT_PORTS_START( quartet )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE3 )
@@ -1562,8 +1562,8 @@ static INPUT_PORTS_START( quartet )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_8WAY PORT_PLAYER(4)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 )
diff --git a/src/mame/drivers/sengokmj.cpp b/src/mame/drivers/sengokmj.cpp
index 254c0d0139d..e41a04e7316 100644
--- a/src/mame/drivers/sengokmj.cpp
+++ b/src/mame/drivers/sengokmj.cpp
@@ -9,18 +9,18 @@ driver by Angelo Salese & Pierpaolo Prazzoli
Uses the same Seibu custom chips of the D-Con HW.
TODO:
-- Find what the remaining video C.R.T. registers does;
+- Find what the remaining video C.R.T. registers do;
- Fix sprites bugs at a start of a play;
-- Check NVRAM boudaries;
-- How the "SW Service Mode" (press F2 during gameplay) really works (inputs etc)? Nothing mapped works with it...
+- Check NVRAM boundaries;
+- How does the "SW Service Mode" (press F2 during gameplay) really work (inputs etc)? Nothing mapped works with it...
Notes:
-- Some strings written in the sound rom:
+- Some strings written in the sound ROM:
"SENGOKU-MAHJONG Z80 PROGRAM ROM VERSION 1.00 WRITTEN BY K.SAEKI" at location 0x00c0-0x00ff.
"Copyright 1990/1991 Sigma" at location 0x770-0x789.
- To bypass the startup message, toggle "Reset" dip-switch or reset with F3.
-- If the Work RAM is not hooked-up (areas $67xx),a sound sample is played.I can't understand what it says though,
- appears to japanese words for "RAM failed".
+- If the Work RAM is not hooked-up (areas $67xx), a sound sample is played. I can't understand what it says though,
+ appears to be the Japanese words for "RAM failed".
- Snippets of a non-BET Version are scattered thru the code (for example a credit display).
Might be either undumped revision or selectable somehow.
diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp
index 31b4306a1ea..4475bf7d9f1 100644
--- a/src/mame/drivers/seta.cpp
+++ b/src/mame/drivers/seta.cpp
@@ -4572,7 +4572,8 @@ static INPUT_PORTS_START( downtown )
PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
- PORT_DIPNAME( 0x0300, 0x0100, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
+ // default "Normal" on Romstar manual, and matches ALL OFF scheme
+ PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) )
@@ -4582,6 +4583,8 @@ static INPUT_PORTS_START( downtown )
PORT_DIPSETTING( 0x0800, "50K Only" )
PORT_DIPSETTING( 0x0400, "100K Only" )
PORT_DIPSETTING( 0x0000, "50K, Every 150K" )
+ // TODO: defaults to 2 lives in the Romstar manual, contradicts with DIPSW ALL OFF convention.
+ // Is it a regional difference? Verify with a Mokugeki Jp manual.
PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x1000, "2" )
PORT_DIPSETTING( 0x3000, "3" )
@@ -12138,12 +12141,15 @@ u16 downtown_state::downtown_protection_r(offs_t offset)
case 0xa3:
{
static const u8 word[] = "WALTZ0";
- if (offset >= 0x100/2 && offset <= 0x10a/2) return word[offset - 0x100/2];
- else return 0;
+ if (offset >= 0x100/2 && offset <= 0x10a/2)
+ return word[offset - 0x100/2];
+
+ // definitely wants to read-back hi-score table from 0x110-0x15f
+ break;
}
- default:
- return m_downtown_protection[offset] & 0xff;
}
+
+ return m_downtown_protection[offset] & 0xff;
}
void downtown_state::downtown_protection_w(offs_t offset, u16 data, u16 mem_mask)
@@ -12155,8 +12161,12 @@ void downtown_state::init_downtown()
{
init_bank6502();
- m_downtown_protection = make_unique_clear<u16[]>(0x200/2);
- save_pointer(NAME(m_downtown_protection),0x200/2);
+ m_downtown_protection = make_unique_clear<u8[]>(0x100);
+ // TODO: protection RAM area is user clearable from service mode, most likely has some sort of battery backed RAM
+ // initializing with 0xff is enough for host CPU to catch up and default it with sensible defaults.
+ for (int i = 0; i < 0x100; i++)
+ m_downtown_protection[i] = 0xff;
+ save_pointer(NAME(m_downtown_protection), 0x200/2);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x2001ff, read16sm_delegate(*this, FUNC(downtown_state::downtown_protection_r)));
m_maincpu->space(AS_PROGRAM).install_write_handler(0x200000, 0x2001ff, write16s_delegate(*this, FUNC(downtown_state::downtown_protection_w)));
diff --git a/src/mame/drivers/sitcom.cpp b/src/mame/drivers/sitcom.cpp
index e1e7a85c03b..be152e87490 100644
--- a/src/mame/drivers/sitcom.cpp
+++ b/src/mame/drivers/sitcom.cpp
@@ -334,8 +334,6 @@ void sitcom_timer_state::machine_start()
void sitcom_timer_state::machine_reset()
{
sitcom_state::machine_reset();
-
- m_ds2->ce_w(0);
}
void sitcom_timer_state::update_dac(uint8_t value)
diff --git a/src/mame/drivers/sk1.cpp b/src/mame/drivers/sk1.cpp
index 3c0384ec2fe..50a9c93d9c4 100644
--- a/src/mame/drivers/sk1.cpp
+++ b/src/mame/drivers/sk1.cpp
@@ -203,6 +203,11 @@ ROM_START(sk1)
ROM_LOAD("sk1.lsi2", 0x0000, 0x8000, CRC(d615963c) SHA1(0dbf2d1c4c776f1a1c35dd2be4d6ca03882afd4c))
ROM_END
+ROM_START(sk5)
+ ROM_REGION(0x8000, "lsi2", 0) // µPD23C256EAC-038
+ ROM_LOAD("casio_sk5.bin", 0x0000, 0x8000, CRC(1fda590b) SHA1(c77ccb5fa20275478bf271512633fa1561d6f07c))
+ROM_END
+
ROM_START(sk10)
ROM_REGION(0x8000, "lsi2", 0) // µPD23C256EAC-070
ROM_LOAD("casio_sk10.bin", 0x0000, 0x8000, CRC(5945b619) SHA1(929e906bfa0fcd99a8398b37ec62d0512299065c))
@@ -217,5 +222,6 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
SYST( 1985, sk1, 0, 0, sk1, sk1, sk1_state, empty_init, "Casio", "SK-1", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+SYST( 1987, sk5, 0, 0, sk1, sk1, sk1_state, empty_init, "Casio", "SK-5", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
SYST( 1987, sk10, 0, 0, sk1, sk1, sk1_state, empty_init, "Casio", "SK-10", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
SYST( 1988, sk2, 0, 0, sk1, sk1, sk1_state, empty_init, "Casio", "SK-2", MACHINE_NO_SOUND | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/skylncr.cpp b/src/mame/drivers/skylncr.cpp
index 3ba477a1c17..c81da189b8a 100644
--- a/src/mame/drivers/skylncr.cpp
+++ b/src/mame/drivers/skylncr.cpp
@@ -166,6 +166,7 @@ public:
void init_miaction();
void init_olymp();
void init_sonikfig();
+ void init_superb2k();
READ_LINE_MEMBER(mbutrfly_prot_r);
@@ -2257,6 +2258,28 @@ void skylncr_state::init_olymp() // very weird, needs to be checked / finished,
m_decrypted_opcodes[x] = ROM[x] ^ 0x18;
}
+void skylncr_state::init_superb2k() // TODO: very preliminary, just enough to read some strings
+{
+ uint8_t *const rom = memregion("maincpu")->base();
+ std::vector<uint8_t> buffer(0x10000);
+
+ memcpy(&buffer[0], rom, 0x10000);
+
+ // descramble addresses. At a first glance, swaps seem to change if address line bits 13 or 14 are set (possibly 15 too, but not verified yet)
+ // the scrambled address line bits appear to be 1, 3, 6, 9 and 12
+ // it's possible XORs and are data lines swaps are involved, too, at least for opcodes
+ for (int i = 0x00000; i < 0x10000; i++)
+ {
+ switch (i & 0x6000)
+ {
+ case 0x0000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)]; break; // TODO: everything
+ case 0x2000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 1, 11, 10, 9, 8, 7, 3, 5, 4, 12, 2, 6, 0)]; break; // TODO: 0x200 blocks are good (see 0x3e00-0x3fff), rest to be determined
+ case 0x4000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 1, 11, 10, 3, 8, 7, 6, 5, 4, 9, 2, 12, 0)]; break; // TODO: 0x40 blocks are good, there's still at least a wrong swap (see 0x5200-0x52ff)
+ case 0x6000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 3, 11, 10, 1, 8, 7, 9, 5, 4, 12, 2, 6, 0)]; break; // TODO: 0x20 blocks are good (see 0x7fa0-0x7fbf)
+ }
+ }
+}
+
} // Anonymous namespace
@@ -2280,4 +2303,4 @@ GAME( 2000?,olymp, 0, olymp, skylncr, skylncr_state, init_olymp,
GAME( 2000, sonikfig, 0, skylncr, sonikfig, skylncr_state, init_sonikfig, ROT0, "Z Games", "Sonik Fighter (version 02, encrypted)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 199?, rolla, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Random Games", "unknown 'Rolla' slot machine", MACHINE_IS_SKELETON ) // internal CPU ROM not dumped
GAME( 2000?,score5, 0, skylncr, score5, skylncr_state, init_sonikfig, ROT0, "Z Games", "Score 5", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // game runs but screen is completely black due to palette mishandling
-GAME( 2000?,superb2k, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Random Games", "Super Butterfly 2000", MACHINE_IS_SKELETON ) // encrypted / different CPU type ?
+GAME( 2000?,superb2k, 0, skylncr, skylncr, skylncr_state, init_superb2k, ROT0, "Random Games", "Super Butterfly 2000", MACHINE_IS_SKELETON ) // encrypted / different CPU type ?
diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp
index 44bdff77260..61f259ccf11 100644
--- a/src/mame/drivers/stv.cpp
+++ b/src/mame/drivers/stv.cpp
@@ -14,12 +14,12 @@
(per-game issues)
- stress: accesses the Sound Memory Expansion Area (0x05a80000-0x05afffff), unknown purpose;
- - smleague / finlarch: it randomly hangs / crashes,it works if you use a ridiculous MCFG_INTERLEAVE number,might need strict
- SH-2 synching or it's actually a m68k comms issue.
+ - smleague / finlarch: it randomly hangs / crashes, it works if you use a ridiculous set_maximum_quantum() number,
+ might need strict SH-2 synching or it's actually a m68k comms issue.
- groovef: ugly back screen color, caused by incorrect usage of the Color Calculation function.
- - myfairld: Apparently this game gives a black screen (either test mode and in-game mode),but let it wait for about
+ - myfairld: Apparently this game gives a black screen (either test mode and in-game mode), but let it wait for about
10 seconds and the game will load everything. This is because of a hellishly slow m68k sub-routine located at 54c2.
Likely to not be a bug but an in-game design issue.
@@ -27,11 +27,17 @@
- vfremix: when you play as Akira, there is a problem with third match: game doesn't upload all textures
and tiles and doesn't enable display, although gameplay is normal - wait a while to get back
- to title screen after losing a match
+ to title screen after losing a match (fixed?)
- vfremix: various problems with SCU DSP: Jeffry causes a black screen hang. Akira's kick sometimes
sends the opponent out of the ring from whatever position.
+ - critcrsh: has a 2 digits 7-seg LED. The current implementation works in test mode, but during gameplay it's stuck
+ on the day's best score, while according to reports it should update the number of critters you have crushed.
+ At the end of the round it outputs the number of crushed critters. Also needs ticket dispenser hookup (redemption
+ is disabled by the game by default, but can be turned on in test menu).
+ Reference video: https://www.youtube.com/watch?v=O9PyIKdSFnU
+
************************************************************************************************************************/
#include "emu.h"
@@ -50,6 +56,7 @@
#include "coreutil.h"
+#include "critcrsh.lh"
#include "segabill.lh"
#include "segabillv.lh"
@@ -142,7 +149,7 @@ void stv_state::stv_ioga_w(offs_t offset, uint8_t data)
// if (data != m_system_output)
// logerror("OUT %02x\n", data);
m_system_output = data;
- /*Why does the BIOS tests these as ACTIVE HIGH? A program bug?*/
+ /*Why does the BIOS test these as ACTIVE HIGH? A program bug?*/
machine().bookkeeping().coin_counter_w(0,~data & 0x01);
machine().bookkeeping().coin_counter_w(1,~data & 0x02);
machine().bookkeeping().coin_lockout_w(0,~data & 0x04);
@@ -182,6 +189,21 @@ uint8_t stv_state::critcrsh_ioga_r(offs_t offset)
return res;
}
+void stv_state::critcrsh_ioga_w(offs_t offset, uint8_t data)
+{
+ switch (offset * 2 + 1)
+ {
+ case 0x0b:
+ static uint8_t bcd2hex[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x49, 0x78, 0x00 }; // TODO: chip type unknown
+ m_cc_digits[0] = bcd2hex[(data & 0xf0) >> 4];
+ m_cc_digits[1] = bcd2hex[data & 0x0f];
+ break;
+ default:
+ stv_ioga_w(offset, data);
+ break;
+ }
+}
+
uint8_t stv_state::magzun_ioga_r(offs_t offset)
{
uint8_t res;
@@ -998,7 +1020,7 @@ void stv_state::stv_mem(address_map &map)
void stv_state::critcrsh_mem(address_map &map)
{
stv_mem(map);
- map(0x00400000, 0x0040003f).rw(FUNC(stv_state::critcrsh_ioga_r), FUNC(stv_state::stv_ioga_w)).umask32(0x00ff00ff);
+ map(0x00400000, 0x0040003f).rw(FUNC(stv_state::critcrsh_ioga_r), FUNC(stv_state::critcrsh_ioga_w)).umask32(0x00ff00ff);
}
void stv_state::magzun_mem(address_map &map)
@@ -1123,9 +1145,6 @@ void stv_state::stv(machine_config &config)
m_smpc_hle->dot_select_handler().set(FUNC(saturn_state::dot_select_w));
m_smpc_hle->interrupt_handler().set(m_scu, FUNC(sega_scu_device::smpc_irq_w));
- MCFG_MACHINE_START_OVERRIDE(stv_state,stv)
- MCFG_MACHINE_RESET_OVERRIDE(stv_state,stv)
-
EEPROM_93C46_16BIT(config, "eeprom"); /* Actually AK93C45F */
/* video hardware */
@@ -1267,7 +1286,7 @@ void stv_state::hopper(machine_config &config)
m_slave->set_addrmap(AS_PROGRAM, &stv_state::hopper_mem);
}
-MACHINE_RESET_MEMBER(stv_state,stv)
+void stv_state::machine_reset()
{
m_scsp_last_line = 0;
@@ -1340,8 +1359,10 @@ image_init_result stv_state::load_cart(device_image_interface &image, generic_sl
}
-MACHINE_START_MEMBER(stv_state, stv)
+void stv_state::machine_start()
{
+ m_cc_digits.resolve();
+
// save states
// save_pointer(NAME(m_scu_regs), 0x100/4);
save_item(NAME(m_en_68k));
@@ -3778,8 +3799,8 @@ GAME( 1996, batmanfr, stvbios, batmanfr, batmanfr, stv_state, init_batmanfr,
GAME( 1996, colmns97, stvbios, stv, stv, stv_state, init_colmns97, ROT0, "Sega", "Columns '97 (JET 961209 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, cotton2, stvbios, stv, stv, stv_state, init_cotton2, ROT0, "Success", "Cotton 2 (JUET 970902 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1998, cottonbm, stvbios, stv, stv, stv_state, init_cottonbm, ROT0, "Success", "Cotton Boomerang (JUET 980709 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1995, critcrsh, stvbios, critcrsh, critcrsh, stv_state, init_stv, ROT0, "Sega", "Critter Crusher (EA 951204 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1995, tatacot, critcrsh,critcrsh, critcrsh, stv_state, init_stv, ROT0, "Sega", "Tatacot (JA 951128 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+GAMEL(1995, critcrsh, stvbios, critcrsh, critcrsh, stv_state, init_stv, ROT0, "Sega", "Critter Crusher (EA 951204 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_critcrsh )
+GAMEL(1995, tatacot, critcrsh,critcrsh, critcrsh, stv_state, init_stv, ROT0, "Sega", "Tatacot (JA 951128 V1.000)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS, layout_critcrsh )
GAME( 1999, danchih, stvbios, stvmp, stvmp, stv_state, init_danchih, ROT0, "Altron (Tecmo license)", "Danchi de Hanafuda (J 990607 V1.400)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 2000, danchiq, stvbios, stv, stv, stv_state, init_danchiq, ROT0, "Altron", "Danchi de Quiz: Okusan Yontaku Desuyo! (J 001128 V1.200)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, diehard, stvbios, stv, stv, stv_state, init_diehard, ROT0, "Sega", "Die Hard Arcade (UET 960515 V1.000)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/subhuntr.cpp b/src/mame/drivers/subhuntr.cpp
index 334a1604971..991b07684c0 100644
--- a/src/mame/drivers/subhuntr.cpp
+++ b/src/mame/drivers/subhuntr.cpp
@@ -147,7 +147,7 @@ void subhuntr_state::txtram_w(offs_t offset, u8 data)
u8 subhuntr_state::intack_r()
{
- unsigned const source = count_leading_zeros(m_intreqs) - 24;
+ unsigned const source = count_leading_zeros_32(m_intreqs) - 24;
u8 const vector = ((m_intreq_cnf->read() & 0x01) ? 0x91 : 0x11) | (source << 1);
switch (source)
{
diff --git a/src/mame/drivers/supracan.cpp b/src/mame/drivers/supracan.cpp
index 9651a7f8181..9090c1c59de 100644
--- a/src/mame/drivers/supracan.cpp
+++ b/src/mame/drivers/supracan.cpp
@@ -26,14 +26,14 @@ STATUS:
The driver is begging for a re-write or at least a split into video/supracan.c. It will happen eventually.
- Sound chip is completely unknown.
+ Sound chip is completely custom, and partially implemented.
There are 6 interrupt sources on the 6502 side, all of which use the IRQ line.
The register at 0x411 is bitmapped to indicate what source(s) are active.
In priority order from most to least important, they are:
411 value How acked Notes
- 0x40 read reg 0x16 of sound chip likely timer. snd regs 0x16/0x17 are time constant, write 0 to reg 0x9f to start
+ 0x40 read reg 0x16 of sound chip used for DMA-driven sample playback. Register 0x16 may contain which DMA-driven samples are active.
0x04 read at 0x405 latch 1? 0xcd is magic value
0x08 read at 0x404 latch 2? 0xcd is magic value
0x10 read at 0x409 unknown, dispatched but not used in startup 6502 code
@@ -261,6 +261,7 @@ private:
TILE_GET_INFO_MEMBER(get_roz_tile_info);
void palette_init(palette_device &palette) const;
void sound_timer_irq(int state);
+ void sound_dma_irq(int state);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(hbl_callback);
TIMER_CALLBACK_MEMBER(line_on_callback);
@@ -1197,6 +1198,11 @@ void supracan_state::sound_timer_irq(int state)
set_sound_irq(7, state);
}
+void supracan_state::sound_dma_irq(int state)
+{
+ set_sound_irq(6, state);
+}
+
void supracan_state::dma_w(int offset, uint16_t data, uint16_t mem_mask, int ch)
{
address_space &mem = m_maincpu->space(AS_PROGRAM);
@@ -1566,8 +1572,19 @@ uint16_t supracan_state::sound_r(offs_t offset, uint16_t mem_mask)
switch (offset)
{
+ case 0x04/2:
+ data = (m_soundram[0x40c] << 8) | m_soundram[0x40d];
+ LOGMASKED(LOG_SOUND, "%s: sound_r: DMA Request address from 6502, %08x: %04x & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), data, mem_mask);
+ break;
+
+ case 0x0c/2:
+ data = m_soundram[0x40a];
+ LOGMASKED(LOG_SOUND, "%s: sound_r: DMA Request flag from 6502, %08x: %04x & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), data, mem_mask);
+ machine().debug_break();
+ break;
+
default:
- LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "%s: sound_r: Unknown register: (%08x) & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), mem_mask);
+ LOGMASKED(LOG_SOUND | LOG_UNKNOWNS, "%s: sound_r: Unknown register: %08x & %04x\n", machine().describe_context(), 0xe90000 + (offset << 1), mem_mask);
break;
}
@@ -2113,7 +2130,8 @@ void supracan_state::supracan(machine_config &config)
ACANSND(config, m_sound, XTAL(3'579'545));
m_sound->ram_read().set(FUNC(supracan_state::sound_ram_read));
- m_sound->irq_handler().set(FUNC(supracan_state::sound_timer_irq));
+ m_sound->timer_irq_handler().set(FUNC(supracan_state::sound_timer_irq));
+ m_sound->dma_irq_handler().set(FUNC(supracan_state::sound_dma_irq));
m_sound->add_route(0, "lspeaker", 1.0);
m_sound->add_route(1, "rspeaker", 1.0);
diff --git a/src/mame/drivers/suprnova.cpp b/src/mame/drivers/suprnova.cpp
index 51351762a97..26ba609052d 100644
--- a/src/mame/drivers/suprnova.cpp
+++ b/src/mame/drivers/suprnova.cpp
@@ -1064,88 +1064,88 @@ void skns_state::init_galpans3() { m_spritegen->skns_sprite_kludge(-1,-1); ini
ROM_START( skns )
SKNS_BIOS
- ROM_REGION32_BE( 0x200000, "user1", ROMREGION_ERASE00 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", ROMREGION_ERASE00 ) // SH-2 Code mapped at 0x04000000
- ROM_REGION( 0x800000, "spritegen", ROMREGION_ERASE00 ) /* Sprites */
+ ROM_REGION( 0x800000, "spritegen", ROMREGION_ERASE00 ) // Sprites
- ROM_REGION( 0x800000, "gfx2", ROMREGION_ERASE00 ) /* Tiles Plane A */
+ ROM_REGION( 0x800000, "gfx2", ROMREGION_ERASE00 ) // Tiles Plane A
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
- ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) // Samples
ROM_END
ROM_START( cyvern )
SKNS_USA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "cv-usa.u10", 0x000000, 0x100000, CRC(1023ddca) SHA1(7967e3e876cdb797bdaa2eb5136a33cd43941501) )
ROM_LOAD16_BYTE( "cv-usa.u8", 0x000001, 0x100000, CRC(f696f6be) SHA1(d9e66173ca12693255d2bb0982da2fb96bfd155d) )
- ROM_REGION( 0x800000, "spritegen", 0 ) /* Sprites */
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "cv100-00.u24", 0x000000, 0x400000, CRC(cd4ae88a) SHA1(925f4ae01a6ad3633be2a61be69e163f05401cf6) )
ROM_LOAD( "cv101-00.u20", 0x400000, 0x400000, CRC(a6cb3f0b) SHA1(8d83f44a096ca0a70962ca4c602c4331874c8560) )
- ROM_REGION( 0x800000, "gfx2", 0 ) /* Tiles Plane A */
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "cv200-00.u16", 0x000000, 0x400000, CRC(ddc8c67e) SHA1(9b99e87e69e88011e6d693d19ac5e115b4fa50b0) )
ROM_LOAD( "cv201-00.u13", 0x400000, 0x400000, CRC(65863321) SHA1(b8b75f50406068ffc3fca3887d2f0a653ca491c9) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "cv210-00.u18", 0x400000, 0x400000, CRC(7486bf3a) SHA1(3b4285ca570e9c5ad396c615bfc054372d1b0162) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "cv300-00.u4", 0x000000, 0x400000, CRC(fbeda465) SHA1(4d5066a22f4589b6b7f85b3e77c348d900ac4bdd) )
ROM_END
ROM_START( cyvernj )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "cvj-even.u10", 0x000000, 0x100000, CRC(802fadb4) SHA1(cbfac3a87a4863466117c61f2ecaf63d506352f6) )
ROM_LOAD16_BYTE( "cvj-odd.u8", 0x000001, 0x100000, CRC(f8a0fbdd) SHA1(5cc8c12c13b5eb3456083e70100450ba041de76e) )
- ROM_REGION( 0x800000, "spritegen", 0 ) /* Sprites */
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "cv100-00.u24", 0x000000, 0x400000, CRC(cd4ae88a) SHA1(925f4ae01a6ad3633be2a61be69e163f05401cf6) )
ROM_LOAD( "cv101-00.u20", 0x400000, 0x400000, CRC(a6cb3f0b) SHA1(8d83f44a096ca0a70962ca4c602c4331874c8560) )
- ROM_REGION( 0x800000, "gfx2", 0 ) /* Tiles Plane A */
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "cv200-00.u16", 0x000000, 0x400000, CRC(ddc8c67e) SHA1(9b99e87e69e88011e6d693d19ac5e115b4fa50b0) )
ROM_LOAD( "cv201-00.u13", 0x400000, 0x400000, CRC(65863321) SHA1(b8b75f50406068ffc3fca3887d2f0a653ca491c9) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "cv210-00.u18", 0x400000, 0x400000, CRC(7486bf3a) SHA1(3b4285ca570e9c5ad396c615bfc054372d1b0162) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "cv300-00.u4", 0x000000, 0x400000, CRC(fbeda465) SHA1(4d5066a22f4589b6b7f85b3e77c348d900ac4bdd) )
ROM_END
ROM_START( galpani4 ) // only main CPU and plds dumps were provided
SKNS_EUROPE
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gp4-000-e0.u10", 0x000000, 0x080000, CRC(7464cc28) SHA1(4ea6185b62d3e25efdaafb91397b51bc8f12fdee) ) // Hitachi HN27C4001G-10
ROM_LOAD16_BYTE( "gp4-001-e0.u8", 0x000001, 0x080000, CRC(8d162069) SHA1(1bd0181a9c9f37c8e8c9d6f75f045d76dffcd903) ) // Hitachi HN27C4001G-10
- ROM_REGION( 0x400000, "spritegen", 0 )
+ ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gp4-100-00.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) )
ROM_LOAD( "gp4-101-00.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gp4-200-00.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) )
ROM_LOAD( "gp4-201-00.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
- ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) /* Doesn't seem to use these samples at all */
- ROM_LOAD( "gp4-301-00.u7", 0x200000, 0x200000, NO_DUMP ) /* Different then GP4-301-01 - Changed some samples when compared to U4 ROM */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
+ ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) // Doesn't seem to use these samples at all
+ ROM_LOAD( "gp4-301-00.u7", 0x200000, 0x200000, NO_DUMP ) // Different then GP4-301-01 - Changed some samples when compared to U4 ROM
ROM_REGION( 0x400, "plds", 0 )
ROM_LOAD( "skns-r09.u9", 0x000, 0x117, CRC(b02058d9) SHA1(77d07e0f329fb1969aa4543cd124e36ad34b07ba) ) // Atmel ATF16V8B
@@ -1155,269 +1155,293 @@ ROM_END
ROM_START( galpani4j )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gp4j1.u10", 0x000000, 0x080000, CRC(919a3893) SHA1(83b89a9e628a1f46f8a56ea512fc8ad641d5e239) )
ROM_LOAD16_BYTE( "gp4j1.u8", 0x000001, 0x080000, CRC(94cb1fb7) SHA1(ac90103dd43cdce6a287ffc13631c1de477a9a71) )
- ROM_REGION( 0x400000, "spritegen", 0 )
+ ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gp4-100-00.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) )
ROM_LOAD( "gp4-101-00.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gp4-200-00.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) )
ROM_LOAD( "gp4-201-00.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) )
ROM_END
ROM_START( galpani4k ) /* ROM-BOARD NEP-16 part number GP04K00372 with extra sound sample ROM at U7 */
SKNS_KOREA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gp4k1.u10", 0x000000, 0x080000, CRC(cbd5c3a0) SHA1(17fc0d6f6050ffd31707cee3fcc263cd5b9d0c4f) )
ROM_LOAD16_BYTE( "gp4k1.u8", 0x000001, 0x080000, CRC(7a95bfe2) SHA1(82e24fd4674ec25bc6608ced0921e8573fcff2c2) )
- ROM_REGION( 0x400000, "spritegen", 0 )
+ ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gp4-100-00.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) )
ROM_LOAD( "gp4-101-00.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gp4-200-00.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) )
ROM_LOAD( "gp4-201-00.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
- ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) /* Doesn't seem to use these samples at all */
- ROM_LOAD( "gp4-301-01.u7", 0x200000, 0x200000, CRC(886ef77f) SHA1(047d5fecf2034339c69b2cb605b623a814a18f0d) ) /* Changed some samples when compared to U4 ROM */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
+ ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) // Doesn't seem to use these samples at all
+ ROM_LOAD( "gp4-301-01.u7", 0x200000, 0x200000, CRC(886ef77f) SHA1(047d5fecf2034339c69b2cb605b623a814a18f0d) ) // Changed some samples when compared to U4 ROM
ROM_END
ROM_START( galpanidx )
SKNS_ASIA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gpdx.u10", 0x000000, 0x100000, CRC(8eca883d) SHA1(f5a102ac21aeebc44afcd0ef7f655de21d4442b2) )
ROM_LOAD16_BYTE( "gpdx.u8", 0x000001, 0x100000, CRC(b0088d8f) SHA1(2363620265d3fc53bae1c5889ea761444f80735a) )
- ROM_REGION( 0x400000, "spritegen", 0 )
+ ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gp4-100-00.u24", 0x000000, 0x200000, CRC(1df61f01) SHA1(a9e95bbb3013e8f2fd01243b1b392ff07b4f7d02) )
ROM_LOAD( "gp4-101-00.u20", 0x200000, 0x100000, CRC(8e2c9349) SHA1(a58fa9bcc9684ed4558e3395d592b64a1978a902) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gp4-200-00.u16", 0x000000, 0x200000, CRC(f0781376) SHA1(aeab9553a9af922524e528eb2d019cf36b6e2094) )
ROM_LOAD( "gp4-201-00.u18", 0x200000, 0x200000, CRC(10c4b183) SHA1(80e05f3932495ad4fc9bf928fa66e6d2931bbb06) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
- ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) /* Doesn't seem to use these samples at all */
- ROM_LOAD( "gp4-301-01.u7", 0x200000, 0x200000, CRC(886ef77f) SHA1(047d5fecf2034339c69b2cb605b623a814a18f0d) ) /* Changed some samples when compared to U4 ROM */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
+ ROM_LOAD( "gp4-300-00.u4", 0x000000, 0x200000, CRC(8374663a) SHA1(095512564f4de25dc3752d9fbd254b9dabd16d1b) ) // Doesn't seem to use these samples at all
+ ROM_LOAD( "gp4-301-01.u7", 0x200000, 0x200000, CRC(886ef77f) SHA1(047d5fecf2034339c69b2cb605b623a814a18f0d) ) // Changed some samples when compared to U4 ROM
ROM_END
ROM_START( galpanis )
SKNS_EUROPE
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "gps-000-e1.u10", 0x000000, 0x100000, CRC(b9ea3c44) SHA1(c1913545cd71ee75e60ade744a2a1054f770b981) )
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "gps-000-e1.u10", 0x000000, 0x100000, CRC(b9ea3c44) SHA1(c1913545cd71ee75e60ade744a2a1054f770b981) ) // revision 1
ROM_LOAD16_BYTE( "gps-001-e1.u8", 0x000001, 0x100000, CRC(ded57bd0) SHA1(4c0122f0521829d4d83b6b1c403f7e6470f14951) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) )
ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) )
ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) )
ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) )
ROM_END
ROM_START( galpanise )
SKNS_EUROPE
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "u10", 0x000000, 0x100000, CRC(e78e1623) SHA1(f68346b65d2613c8515894d9a239fcbb0b5cb52d) ) /* mask ROM with no labels */
- ROM_LOAD16_BYTE( "u8", 0x000001, 0x100000, CRC(098eff7c) SHA1(3cac22cbb11905a46afaa62c0470624b3b554fc0) ) /* mask ROM with no labels */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "u10", 0x000000, 0x100000, CRC(e78e1623) SHA1(f68346b65d2613c8515894d9a239fcbb0b5cb52d) ) // mask ROM with no labels - GPS-000-E0?
+ ROM_LOAD16_BYTE( "u8", 0x000001, 0x100000, CRC(098eff7c) SHA1(3cac22cbb11905a46afaa62c0470624b3b554fc0) ) // mask ROM with no labels - GPS-001-E0?
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) )
ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) )
ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) )
ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) )
ROM_END
ROM_START( galpanisj )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gps-000-j1.u10", 0x000000, 0x100000, CRC(c6938c3f) SHA1(05853ee6a44a55702788a75580b04a4be45e9bcb) )
ROM_LOAD16_BYTE( "gps-001-j1.u8", 0x000001, 0x100000, CRC(e764177a) SHA1(3a1333eb1022ed1a275b9c3d44b5f4ab81618fb6) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) )
ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) )
ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) )
ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) )
ROM_END
ROM_START( galpanisa )
SKNS_ASIA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "gps-000-a0_9abc.u10", 0x000000, 0x100000, CRC(4e24b799) SHA1(614f4eb6a7b0ab03ea6ada28a670ed0759b3f4f9) ) /* hand written labels with checksum */
- ROM_LOAD16_BYTE( "gps-001-a0_bd64.u8", 0x000001, 0x100000, CRC(aa4db8af) SHA1(10cc15fa065b6a2dcaf8c7d701c5ae7c18e4e863) ) /* hand written labels with checksum */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "gps-000-a0_9abc.u10", 0x000000, 0x100000, CRC(4e24b799) SHA1(614f4eb6a7b0ab03ea6ada28a670ed0759b3f4f9) ) // hand written labels with checksum
+ ROM_LOAD16_BYTE( "gps-001-a0_bd64.u8", 0x000001, 0x100000, CRC(aa4db8af) SHA1(10cc15fa065b6a2dcaf8c7d701c5ae7c18e4e863) ) // hand written labels with checksum
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) )
ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) )
ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) )
ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) )
ROM_END
ROM_START( galpanisk )
SKNS_KOREA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "gps-000-k1.u10", 0x000000, 0x100000, CRC(c9ff3d8a) SHA1(edfec265654aaa8cb307424e5b2899e708392cd0) )
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "gps-000-k1.u10", 0x000000, 0x100000, CRC(c9ff3d8a) SHA1(edfec265654aaa8cb307424e5b2899e708392cd0) ) // revision 1
ROM_LOAD16_BYTE( "gps-001-k1.u8", 0x000001, 0x100000, CRC(354e601d) SHA1(4d176f2337a3b0b63548b2e542f9fa87d0a1ef7b) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) )
ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) )
ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) )
ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
+ ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) )
+ROM_END
+
+ROM_START( galpaniska )
+ SKNS_KOREA
+
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "gps-000-k0.u10", 0x000000, 0x100000, CRC(be74128c) SHA1(6d506e1bb715e6bfd98eda5e69475d2f75911d26) ) // revision 0 (first version)
+ ROM_LOAD16_BYTE( "gps-001-k0.u8", 0x000001, 0x100000, CRC(701f793d) SHA1(7278dc68d5b92a26675333ef8b4b2c04c27f1b03) )
+
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
+ ROM_LOAD( "gps-100-00.u24", 0x000000, 0x400000, CRC(a1a7acf2) SHA1(52c86ae907f0c0236808c19f652955b09e90ec5a) )
+ ROM_LOAD( "gps-101-00.u20", 0x400000, 0x400000, CRC(49f764b6) SHA1(9f4289858c3dac625ef623cc381a47b45aa5d8e2) )
+ ROM_LOAD( "gps-102-00.u17", 0x800000, 0x400000, CRC(51980272) SHA1(6c0706d913b33995579aaf0688c4bf26d6d35a78) )
+
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
+ ROM_LOAD( "gps-200-00.u16", 0x000000, 0x400000, CRC(c146a09e) SHA1(5af5a7b9d9a55ec7aba3fd85a3a0211b92b1b84f) )
+ ROM_LOAD( "gps-201-00.u13", 0x400000, 0x400000, CRC(9dfa2dc6) SHA1(a058c42fd76c23c0e5c8c11f5617fd29e056be7d) )
+
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
+
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gps-300-00.u4", 0x000000, 0x400000, CRC(9e4da8e3) SHA1(6506d9300a442883357003a05fd2c78d364c35bb) )
ROM_END
ROM_START( galpans2 ) //only the 2 program ROMs were dumped, but mask ROMs are supposed to match.
SKNS_EUROPE
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gps2e_u6__ver.3.u6", 0x000000, 0x100000, CRC(72fff5d1) SHA1(57001e04c469281a82a2956c6bc33502d5a3b882) )
ROM_LOAD16_BYTE( "gps2e_u4__ver.3.u4", 0x000001, 0x100000, CRC(95061601) SHA1(f98f1af9877b097e97acc5a3844ef9c523a92843) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gs210000.u21", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) )
ROM_LOAD( "gs210100.u20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) )
ROM_LOAD( "gs210200.u8", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) )
ROM_LOAD( "gs210300.u32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gs220000.u17", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) )
ROM_LOAD( "gs220100.u9", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "gs221000.u3", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gs230000.u1", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) )
ROM_END
ROM_START( galpans2j )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gps2j.u6", 0x000000, 0x100000, CRC(6e74005b) SHA1(a57e8307062e262c2e7a84e2c58f7dfe03fc0f78) )
ROM_LOAD16_BYTE( "gps2j.u4", 0x000001, 0x100000, CRC(9b4b2304) SHA1(0b481f4d71d92bf23f38ed22979efd4409004857) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gs210000.u21", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) )
ROM_LOAD( "gs210100.u20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) )
ROM_LOAD( "gs210200.u8", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) )
ROM_LOAD( "gs210300.u32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gs220000.u17", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) )
ROM_LOAD( "gs220100.u9", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "gs221000.u3", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gs230000.u1", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) )
ROM_END
ROM_START( galpans2a )
SKNS_ASIA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gps2av11.u6", 0x000000, 0x100000, CRC(61c05d5f) SHA1(e47c7951c1f688edb6c677532f750537a64bb7b3) )
ROM_LOAD16_BYTE( "gps2av11.u4", 0x000001, 0x100000, CRC(2e8c0ac2) SHA1(d066260d6d3c2924b42394e867523e6112a125c5) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gs210000.u21", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) )
ROM_LOAD( "gs210100.u20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) )
ROM_LOAD( "gs210200.u8", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) )
ROM_LOAD( "gs210300.u32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gs220000.u17", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) )
ROM_LOAD( "gs220100.u9", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "gs221000.u3", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gs230000.u1", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) )
ROM_END
@@ -1442,369 +1466,368 @@ Gals Panic 2 set.
ROM_START( galpansu )
SKNS_KOREA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "su.u10", 0x000000, 0x100000, CRC(5ae66218) SHA1(c3f32603e1da945efb984ff99e1a30202e535773) )
ROM_LOAD16_BYTE( "su.u8", 0x000001, 0x100000, CRC(10977a03) SHA1(2ab95398d6b88d8819f368ee6104d7f8b485778d) )
- /* the rest of the ROMs match Gals Panic S2, but are in different locations */
- ROM_REGION( 0x1000000, "spritegen", 0 )
- ROM_LOAD( "24", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) )
- ROM_LOAD( "20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) )
- ROM_LOAD( "17", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) )
- ROM_LOAD( "32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
+ ROM_LOAD( "24", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) ) // == gs210000.u21
+ ROM_LOAD( "20", 0x400000, 0x400000, CRC(f75c5a9a) SHA1(3919643cee6c88185a1aa3c58c5bc80599bf734e) ) // == gs210100.u20
+ ROM_LOAD( "17", 0x800000, 0x400000, CRC(25b4f56b) SHA1(f9a33d5ed54a04ecece3035e75508d191bbe74b1) ) // == gs210200.u8
+ ROM_LOAD( "32", 0xc00000, 0x400000, CRC(db6d4424) SHA1(0a88dafd0ee2490ff2ef39ce8eb1931c41bdda42) ) // == gs210300.u32
- ROM_REGION( 0x800000, "gfx2", 0 )
- ROM_LOAD( "16", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) )
- ROM_LOAD( "13", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
+ ROM_LOAD( "16", 0x000000, 0x400000, CRC(5caae1c0) SHA1(8f77e4cf018d7290b2d804cbff9fccf0bf4d2404) ) // == gs220000.u17
+ ROM_LOAD( "13", 0x400000, 0x400000, CRC(8d51f197) SHA1(19d2afab823ea179918e7bcbf4df2283e77570f0) ) // == gs220100.u9
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
- ROM_LOAD( "7", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) )
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
+ ROM_LOAD( "7", 0x400000, 0x400000, CRC(58800a18) SHA1(5e6d55ecd12275662d6f59559e137b759f23fff6) ) // == gs221000.u3
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
- ROM_LOAD( "4", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) )
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
+ ROM_LOAD( "4", 0x000000, 0x400000, CRC(0348e8e1) SHA1(8a21c7e5cea0bc08a2595213d689c58c0251fdb5) ) // == gs230000.u1
ROM_END
ROM_START( galpans3 )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gpss3.u10", 0x000000, 0x100000, CRC(c1449a72) SHA1(02db81a0ea349742d6ddf71d59fcfce45f0c5212) )
ROM_LOAD16_BYTE( "gpss3.u8", 0x000001, 0x100000, CRC(11eb44cf) SHA1(482ef27fa86d6777def46918eac8be019896c0b0) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "u24.bin", 0x000000, 0x800000, CRC(70613168) SHA1(637c50e733dbc0226b1e0acc8000faa7e8977cb6) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "u16.bin", 0x000000, 0x800000, CRC(a96daf2a) SHA1(40f4c32158d320146aeeac34c15ca6816a6876bc) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "u4.bin", 0x000000, 0x400000, CRC(bf5736c6) SHA1(781292d87e9da1d21c1ac540baefff5e2f84a3f5) )
ROM_END
ROM_START( gutsn )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "gts000j0.u6", 0x000000, 0x080000, CRC(8ee91310) SHA1(8dd918189fe445d79c7f028168862b852f70a6f2) )
ROM_LOAD16_BYTE( "gts001j0.u4", 0x000001, 0x080000, CRC(80b8ee66) SHA1(4faf5f358ceee866f09bd81e63ba3ebd21bde835) )
- ROM_REGION( 0x400000, "spritegen", 0 )
+ ROM_REGION( 0x400000, "spritegen", 0 ) // Sprites
ROM_LOAD( "gts10000.u24", 0x000000, 0x400000, CRC(1959979e) SHA1(92a68784664dd833ca6fcca1b15cd46b9365d081) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "gts20000.u16", 0x000000, 0x400000, CRC(c443aac3) SHA1(b0416a09ead26077e9276bae98d94eeb1cf86877) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "gts30000.u4", 0x000000, 0x400000, CRC(8c169141) SHA1(41caea6fa644515f7417c84bdac599b13ad07e8c) )
ROM_END
ROM_START( panicstr )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "ps1000j0.u10", 0x000000, 0x100000, CRC(59645f89) SHA1(8da205c6e38899d6c637941700dd7eea56011c10) )
ROM_LOAD16_BYTE( "ps1001j0.u8", 0x000001, 0x100000, CRC(c4722be9) SHA1(7009d320a80cfa7d80efc5fc915081914bc3c827) )
- ROM_REGION( 0x800000, "spritegen", 0 )
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "ps-10000.u24", 0x000000, 0x400000, CRC(294b2f14) SHA1(90cbd0acdaa2d89d208c28aae33ab57c03624089) )
ROM_LOAD( "ps110100.u20", 0x400000, 0x400000, CRC(e292f393) SHA1(b0914f7f0abf9f821f2592c289ea4e3b3e7f819a) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "ps120000.u16", 0x000000, 0x400000, CRC(d772ac15) SHA1(6bf7b9bfccdcb7481b21fa2ab9b683d79033a192) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "ps-30000.u4", 0x000000, 0x400000, CRC(2262e263) SHA1(73443e5f40f5c5c9bd41c6207fa6376072f0f65e) )
ROM_END
ROM_START( puzzloop )
SKNS_EUROPE
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "pl00e4.u6", 0x000000, 0x080000, CRC(7d3131a5) SHA1(f9302aa27addb8a730102b1869a34063d8b44e62) ) /* V0.94 */
- ROM_LOAD16_BYTE( "pl00e4.u4", 0x000001, 0x080000, CRC(40dc3291) SHA1(d955752a2c884e6dd951f9a87f9d249bb1ab9116) ) /* V0.94 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "pl00e4.u6", 0x000000, 0x080000, CRC(7d3131a5) SHA1(f9302aa27addb8a730102b1869a34063d8b44e62) ) // V0.94
+ ROM_LOAD16_BYTE( "pl00e4.u4", 0x000001, 0x080000, CRC(40dc3291) SHA1(d955752a2c884e6dd951f9a87f9d249bb1ab9116) ) // V0.94
- ROM_REGION( 0x800000, "spritegen", 0 )
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) )
ROM_END
ROM_START( puzzloope )
SKNS_EUROPE
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "pl00e1.u6", 0x000000, 0x080000, CRC(273adc38) SHA1(37ca873342ba9fb9951114048a9cd255f73fe19c) ) /* V0.93 */
- ROM_LOAD16_BYTE( "pl00e1.u4", 0x000001, 0x080000, CRC(14ac2870) SHA1(d1abcfd64d7c0ead67e879c40e1010453fd4da13) ) /* V0.93 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "pl00e1.u6", 0x000000, 0x080000, CRC(273adc38) SHA1(37ca873342ba9fb9951114048a9cd255f73fe19c) ) // V0.93
+ ROM_LOAD16_BYTE( "pl00e1.u4", 0x000001, 0x080000, CRC(14ac2870) SHA1(d1abcfd64d7c0ead67e879c40e1010453fd4da13) ) // V0.93
- ROM_REGION( 0x800000, "spritegen", 0 )
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) )
ROM_END
ROM_START( puzzloopj )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "pl0j2.u6", 0x000000, 0x080000, CRC(23c3bf97) SHA1(77ea1f32bed5709a6ad5b250370f08cfe8036867) ) /* V0.94 */
- ROM_LOAD16_BYTE( "pl0j2.u4", 0x000001, 0x080000, CRC(55b2a3cb) SHA1(d4cbe143fe2ad622af808cbd9eedffeff3b77e0d) ) /* V0.94 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "pl0j2.u6", 0x000000, 0x080000, CRC(23c3bf97) SHA1(77ea1f32bed5709a6ad5b250370f08cfe8036867) ) // V0.94
+ ROM_LOAD16_BYTE( "pl0j2.u4", 0x000001, 0x080000, CRC(55b2a3cb) SHA1(d4cbe143fe2ad622af808cbd9eedffeff3b77e0d) ) // V0.94
- ROM_REGION( 0x800000, "spritegen", 0 )
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) )
ROM_END
ROM_START( puzzloopa )
SKNS_ASIA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "pl0a3.u6", 0x000000, 0x080000, CRC(4e8673b8) SHA1(17acfb0550912e6f2519df2bc24fbf629a1f6147) ) /* V0.94 */
- ROM_LOAD16_BYTE( "pl0a3.u4", 0x000001, 0x080000, CRC(e08a1a07) SHA1(aba58a81ae46c7b4e235a3213984026d170fa189) ) /* V0.94 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "pl0a3.u6", 0x000000, 0x080000, CRC(4e8673b8) SHA1(17acfb0550912e6f2519df2bc24fbf629a1f6147) ) // V0.94
+ ROM_LOAD16_BYTE( "pl0a3.u4", 0x000001, 0x080000, CRC(e08a1a07) SHA1(aba58a81ae46c7b4e235a3213984026d170fa189) ) // V0.94
- ROM_REGION( 0x800000, "spritegen", 0 )
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) )
ROM_END
ROM_START( puzzloopk )
SKNS_KOREA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "pl0k4.u6", 0x000000, 0x080000, CRC(8d81f20c) SHA1(c32a525e8f92a625e3fecb7c43dd04b13e0a75e4) ) /* V0.94 */
- ROM_LOAD16_BYTE( "pl0k4.u4", 0x000001, 0x080000, CRC(17c78e41) SHA1(4a4b612ae00d521d2947ab32554ebb615be72471) ) /* V0.94 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "pl0k4.u6", 0x000000, 0x080000, CRC(8d81f20c) SHA1(c32a525e8f92a625e3fecb7c43dd04b13e0a75e4) ) // V0.94
+ ROM_LOAD16_BYTE( "pl0k4.u4", 0x000001, 0x080000, CRC(17c78e41) SHA1(4a4b612ae00d521d2947ab32554ebb615be72471) ) // V0.94
- ROM_REGION( 0x800000, "spritegen", 0 )
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) )
ROM_END
ROM_START( puzzloopu )
SKNS_USA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "plue5.u6", 0x000000, 0x080000, CRC(e6f3f82f) SHA1(ac61dc22fa3c1b1c2f3a41d3a8fb43938b77ca68) ) /* V0.94 */
- ROM_LOAD16_BYTE( "plue5.u4", 0x000001, 0x080000, CRC(0d081d30) SHA1(ec0cdf120126104b9bb706f68c9ba9c3777dd69c) ) /* V0.94 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "plue5.u6", 0x000000, 0x080000, CRC(e6f3f82f) SHA1(ac61dc22fa3c1b1c2f3a41d3a8fb43938b77ca68) ) // V0.94
+ ROM_LOAD16_BYTE( "plue5.u4", 0x000001, 0x080000, CRC(0d081d30) SHA1(ec0cdf120126104b9bb706f68c9ba9c3777dd69c) ) // V0.94
- ROM_REGION( 0x800000, "spritegen", 0 )
+ ROM_REGION( 0x800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "pzl10000.u24", 0x000000, 0x400000, CRC(35bf6897) SHA1(8a1f1f5234a61971a62401633de1dec1920fc4da) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "pzl20000.u16", 0x000000, 0x400000, CRC(ff558e68) SHA1(69a50c8100edbf2d5d92ce14b3f079f76c544bdd) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "pzl21000.u18", 0x400000, 0x400000, CRC(c8b3be64) SHA1(6da9ca8b963ebf10df6bc02bd1bdc66392e2fa60) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "pzl30000.u4", 0x000000, 0x400000, CRC(38604b8d) SHA1(1191cf48a6a7baa58e51509442b40ea67f5252d2) )
ROM_END
ROM_START( jjparads )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "jp1j1.u10", 0x000000, 0x080000, CRC(de2fb669) SHA1(229ff1ae0ec5bc77fc17642964e0bb0146594e86) )
ROM_LOAD16_BYTE( "jp1j1.u8", 0x000001, 0x080000, CRC(7276efb1) SHA1(3edc265b5c02da7d21a2494a6dc2878fbad93f87) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "jp100-00.u24", 0x000000, 0x400000, CRC(f31b2e95) SHA1(7e5bb518d4f6423785d3f9f2752a624a66b42469) )
ROM_LOAD( "jp101-00.u20", 0x400000, 0x400000, CRC(70cc8c24) SHA1(a4805ce19f512b047829548b635e68690d714175) )
ROM_LOAD( "jp102-00.u17", 0x800000, 0x400000, CRC(35401c1e) SHA1(38fe86a08555bb823b8d64ac043330aaaa6b8892) )
- ROM_REGION( 0x200000, "gfx2", 0 )
+ ROM_REGION( 0x200000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "jp200-00.u16", 0x000000, 0x200000, CRC(493d63db) SHA1(4b8fe7ff1ae14a914a675ce4072a4d9e5cfc08b0) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x200000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x200000, "ymz", 0 ) // Samples
ROM_LOAD( "jp300-00.u4", 0x000000, 0x200000, CRC(7023fe46) SHA1(24a92133bc664d63b3be67c2ef11cd7b605ee7e8) )
ROM_END
ROM_START( jjparad2 )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "jp2000j1.u6", 0x000000, 0x080000, CRC(5d75e765) SHA1(33bcd8f929f6025b00df2ea783b13a391a28a5c3) )
ROM_LOAD16_BYTE( "jp2001j1.u4", 0x000001, 0x080000, CRC(1771910a) SHA1(7ca9584d379d7b41f303a3ba861f943c570ad97c) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "jp210000.u21", 0x000000, 0x400000, CRC(79a7e3d7) SHA1(bd0f8d01971e5895395f97f2520bcd03ab19d229) )
ROM_LOAD( "jp210100.u20", 0x400000, 0x400000, CRC(42415e0c) SHA1(f7bff86d55fa9002fbd14e4c62f9d3df8faaf7d0) )
ROM_LOAD( "jp210200.u8", 0x800000, 0x400000, CRC(26731745) SHA1(8939d36b82b10b1010e4b924e6b9fdd4742efe48) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "jp220000.u17", 0x000000, 0x400000, CRC(d0e71873) SHA1(c6ffba3624e6d4c2d4e12ef7d88a02cbc3867b18) )
ROM_LOAD( "jp220100.u9", 0x400000, 0x400000, CRC(4c7d964d) SHA1(3352cd866a64466f4f5a990c2c5e3e28e7028a99) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "jp230000.u1", 0x000000, 0x400000, CRC(73e30d7f) SHA1(af5b16cec722dbbf0e03d73edfa133dbf10ac4f3) )
ROM_END
ROM_START( sengekis )
SKNS_ASIA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "ss01a.u6", 0x000000, 0x080000, CRC(962fe857) SHA1(3df74c5efff11333dea9316a063129dcec0d7bdd) )
ROM_LOAD16_BYTE( "ss01a.u4", 0x000001, 0x080000, CRC(ee853c23) SHA1(ddbf7f7cf509788ee3daf7b4d8ae1482e6e31a03) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "ss100-00.u21", 0x000000, 0x400000, CRC(bc7b3dfa) SHA1(dff10a7aef548abda48470293382057a2ca9557e) )
ROM_LOAD( "ss101-00.u20", 0x400000, 0x400000, CRC(ab2df280) SHA1(e456c578a36f585b24379d74def1bcab276c2b1b) )
ROM_LOAD( "ss102-00.u8", 0x800000, 0x400000, CRC(0845eafe) SHA1(663b163bf4e87c7df0030e791f95b1a5827de315) )
ROM_LOAD( "ss103-00.u32", 0xc00000, 0x400000, CRC(ee451ac9) SHA1(01cc6b6f371c0090a6a7f4c33d05f4b9a6c59fee) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "ss200-00.u17", 0x000000, 0x400000, CRC(cd773976) SHA1(38b8df5e685be65c3fde09f9e585591f678632d4) )
ROM_LOAD( "ss201-00.u9", 0x400000, 0x400000, CRC(301fad4c) SHA1(15faf37eeec5cc46afcb4bd236345b5c3dd647ac) )
- ROM_REGION( 0x600000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x600000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "ss210-00.u3", 0x400000, 0x200000, CRC(c3697805) SHA1(bd41064e3527cdc4b9a4ab9c423c916309b3f057) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "ss300-00.u1", 0x000000, 0x400000, CRC(35b04b18) SHA1(b69f33fc6a50ec20382329317d20b3c1e7f01b87) )
ROM_END
ROM_START( sengekisj )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "ss01j.u6", 0x000000, 0x080000, CRC(9efdcd5a) SHA1(66cca04d07999dc8ca0bcf19db925996b34d0390) )
ROM_LOAD16_BYTE( "ss01j.u4", 0x000001, 0x080000, CRC(92c3f45e) SHA1(60c647e66b0126fb7749874be39938972481b957) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "ss100-00.u21", 0x000000, 0x400000, CRC(bc7b3dfa) SHA1(dff10a7aef548abda48470293382057a2ca9557e) )
ROM_LOAD( "ss101-00.u20", 0x400000, 0x400000, CRC(ab2df280) SHA1(e456c578a36f585b24379d74def1bcab276c2b1b) )
ROM_LOAD( "ss102-00.u8", 0x800000, 0x400000, CRC(0845eafe) SHA1(663b163bf4e87c7df0030e791f95b1a5827de315) )
ROM_LOAD( "ss103-00.u32", 0xc00000, 0x400000, CRC(ee451ac9) SHA1(01cc6b6f371c0090a6a7f4c33d05f4b9a6c59fee) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "ss200-00.u17", 0x000000, 0x400000, CRC(cd773976) SHA1(38b8df5e685be65c3fde09f9e585591f678632d4) )
ROM_LOAD( "ss201-00.u9", 0x400000, 0x400000, CRC(301fad4c) SHA1(15faf37eeec5cc46afcb4bd236345b5c3dd647ac) )
- ROM_REGION( 0x600000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x600000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "ss210-00.u3", 0x400000, 0x200000, CRC(c3697805) SHA1(bd41064e3527cdc4b9a4ab9c423c916309b3f057) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "ss300-00.u1", 0x000000, 0x400000, CRC(35b04b18) SHA1(b69f33fc6a50ec20382329317d20b3c1e7f01b87) )
ROM_END
ROM_START( senknow )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "snw000j1.u6", 0x000000, 0x080000, CRC(0d6136f6) SHA1(eedd011cfe03577bfaf386723502d03f6e5dbd8c) )
ROM_LOAD16_BYTE( "snw001j1.u4", 0x000001, 0x080000, CRC(4a10ec3d) SHA1(bbec4fc53bd61d06ffe5a53debada5785b124fdd) )
- ROM_REGION( 0x0800000, "spritegen", 0 )
+ ROM_REGION( 0x0800000, "spritegen", 0 ) // Sprites
ROM_LOAD( "snw10000.u21", 0x000000, 0x400000, CRC(5133c69c) SHA1(d279df3ffd005dbf0930a8e40eaf2467f8653284) )
ROM_LOAD( "snw10100.u20", 0x400000, 0x400000, CRC(9dafe03f) SHA1(978b4597ff2a54ac5049fd64798e8173b29dd363) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "snw20000.u17", 0x000000, 0x400000, CRC(d5fe5f8c) SHA1(817d8d0a5fbc0c50dc3c592f938150f82df97cec) )
ROM_LOAD( "snw20100.u9", 0x400000, 0x400000, CRC(c0037846) SHA1(3267b142ebce47e1717250239d98fdb4af7964f8) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
ROM_LOAD( "snw21000.u3", 0x400000, 0x400000, CRC(f5c23e79) SHA1(b509680001c3205b289f43d4f44aaaa7f896419b) )
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "snw30000.u1", 0x000000, 0x400000, CRC(ec9eef40) SHA1(8f74ec9cb6054a77227c0505094f0ef8bc371429) )
ROM_END
ROM_START( teljan )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "tel1j.u10", 0x000000, 0x080000, CRC(09b552fe) SHA1(2f315fd09eb22fa8c81faa1e926038f20daa845f) )
ROM_LOAD16_BYTE( "tel1j.u8", 0x000001, 0x080000, CRC(070b4345) SHA1(5743f12a351b89593c6adfaeb8a5a2ab7bc8b424) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "tj100-00.u24", 0x000000, 0x400000, CRC(810144f1) SHA1(1c90e71e5f34ee05771ab4a673329f78f17791df) )
ROM_LOAD( "tj101-00.u20", 0x400000, 0x400000, CRC(82f570e1) SHA1(3ba9d1775f897052aca5cff2edbf575399101c5c) )
ROM_LOAD( "tj102-00.u17", 0x800000, 0x400000, CRC(ace875dc) SHA1(be97c895beeac979c5704986e818d4f3cfa00e49) )
- ROM_REGION( 0x400000, "gfx2", 0 )
+ ROM_REGION( 0x400000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "tj200-00.u16", 0x000000, 0x400000, CRC(be0f90b2) SHA1(1848a65f244e1e8a3ff7ab38e76f86cabca8b47e) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "tj300-00.u4", 0x000000, 0x400000, CRC(685495c4) SHA1(3853c0583b84ed3163370ae48e4b3912cbeb986e) )
ROM_END
@@ -1812,114 +1835,114 @@ ROM_END
ROM_START( ryouran )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "or-000-j2.u10", 0x000000, 0x080000, CRC(cba8ca4e) SHA1(7389502622a04101ca34f7b390ca0da820f62590) )
ROM_LOAD16_BYTE( "or-001-j2.u8", 0x000001, 0x080000, CRC(8e79c6b7) SHA1(0441d279cdc998e96abd6f607eceb4f866f58337) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "or100-00.u24", 0x000000, 0x400000, CRC(e9c7695b) SHA1(0a104d4e4e0c933d2eaaf410a8c243db6673786a) )
ROM_LOAD( "or101-00.u20", 0x400000, 0x400000, CRC(fe06bf12) SHA1(f3a2f88aed65bcc1c16f37fd4c0011e3538128f7) )
ROM_LOAD( "or102-00.u17", 0x800000, 0x400000, CRC(f2a5237b) SHA1(b8871f9c0f3864c334ec9a8146cf7dd1961ecb94) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "or200-00.u16", 0x000000, 0x400000, CRC(4c4701a8) SHA1(7b397b553ba86bba2ee82228cabdf2179e878d69) )
ROM_LOAD( "or201-00.u13", 0x400000, 0x400000, CRC(a94064aa) SHA1(5d736f810ffdbb6ada5c5efcb5fb29eedafc3e2f) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "or300-00.u4", 0x000000, 0x400000, CRC(a3f64b79) SHA1(6ecb2b4c0d213fe5384b19d6bfdb86871f21fd9f) )
ROM_END
ROM_START( ryourano )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "or000j1.u10", 0x000000, 0x080000, CRC(d93aa491) SHA1(dc01707f1e80d81f28d6b685d08fc6c0d2bf7330) )
ROM_LOAD16_BYTE( "or001j1.u8", 0x000001, 0x080000, CRC(f466e5e9) SHA1(65d699f6f9e299333e51a6a52cb13a0f1a902fe1) )
- ROM_REGION( 0x1000000, "spritegen", 0 )
+ ROM_REGION( 0x1000000, "spritegen", 0 ) // Sprites
ROM_LOAD( "or100-00.u24", 0x000000, 0x400000, CRC(e9c7695b) SHA1(0a104d4e4e0c933d2eaaf410a8c243db6673786a) )
ROM_LOAD( "or101-00.u20", 0x400000, 0x400000, CRC(fe06bf12) SHA1(f3a2f88aed65bcc1c16f37fd4c0011e3538128f7) )
ROM_LOAD( "or102-00.u17", 0x800000, 0x400000, CRC(f2a5237b) SHA1(b8871f9c0f3864c334ec9a8146cf7dd1961ecb94) )
- ROM_REGION( 0x800000, "gfx2", 0 )
+ ROM_REGION( 0x800000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "or200-00.u16", 0x000000, 0x400000, CRC(4c4701a8) SHA1(7b397b553ba86bba2ee82228cabdf2179e878d69) )
ROM_LOAD( "or201-00.u13", 0x400000, 0x400000, CRC(a94064aa) SHA1(5d736f810ffdbb6ada5c5efcb5fb29eedafc3e2f) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x400000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x400000, "ymz", 0 ) // Samples
ROM_LOAD( "or300-00.u4", 0x000000, 0x400000, CRC(a3f64b79) SHA1(6ecb2b4c0d213fe5384b19d6bfdb86871f21fd9f) )
ROM_END
ROM_START( vblokbrk )
SKNS_EUROPE
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
- ROM_LOAD16_BYTE( "sk000e2-e.u10", 0x000000, 0x080000, CRC(5a278f10) SHA1(6f1be0657da76144b0feeed672d92a85091289b6) ) /* labeled SK000e2/E */
- ROM_LOAD16_BYTE( "sk000e-o.u8", 0x000001, 0x080000, CRC(aecf0647) SHA1(4752e5012bae8e7af3972b455b4346499ec2b49c) ) /* labeled SK000e/O */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
+ ROM_LOAD16_BYTE( "sk000e2-e.u10", 0x000000, 0x080000, CRC(5a278f10) SHA1(6f1be0657da76144b0feeed672d92a85091289b6) ) // labeled SK000e2/E
+ ROM_LOAD16_BYTE( "sk000e-o.u8", 0x000001, 0x080000, CRC(aecf0647) SHA1(4752e5012bae8e7af3972b455b4346499ec2b49c) ) // labeled SK000e/O
- ROM_REGION( 0x0400000, "spritegen", 0 )
+ ROM_REGION( 0x0400000, "spritegen", 0 ) // Sprites
ROM_LOAD( "sk-100-00.u24", 0x000000, 0x200000, CRC(151dd88a) SHA1(87bb1039a9883f721a315760eb2c4abe4a94046f) )
ROM_LOAD( "sk-101.u20", 0x200000, 0x100000, CRC(779cce23) SHA1(70147b36d982524ba9921823e481ce8fbb5daa26) )
- ROM_REGION( 0x200000, "gfx2", 0 )
+ ROM_REGION( 0x200000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "sk-200-00.u16", 0x000000, 0x200000, CRC(2e297c61) SHA1(4071b945a1294fbc3d18fab1f144bf09af4349e8) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x200000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x200000, "ymz", 0 ) // Samples
ROM_LOAD( "sk-300-00.u4", 0x000000, 0x200000, CRC(e6535c05) SHA1(8895b7c326e0261691cb184887ac1ca637302460) )
ROM_END
ROM_START( vblokbrka )
SKNS_ASIA
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "sk01a.u10", 0x000000, 0x080000, CRC(4d1be53e) SHA1(3d28b73a67530147962b8df6244af8bea2ab080f) )
ROM_LOAD16_BYTE( "sk01a.u8", 0x000001, 0x080000, CRC(461e0197) SHA1(003573a4abdbecc6dd234a13c61ef07a25d980e2) )
- ROM_REGION( 0x0400000, "spritegen", 0 )
+ ROM_REGION( 0x0400000, "spritegen", 0 ) // Sprites
ROM_LOAD( "sk-100-00.u24", 0x000000, 0x200000, CRC(151dd88a) SHA1(87bb1039a9883f721a315760eb2c4abe4a94046f) )
ROM_LOAD( "sk-101.u20", 0x200000, 0x100000, CRC(779cce23) SHA1(70147b36d982524ba9921823e481ce8fbb5daa26) )
- ROM_REGION( 0x200000, "gfx2", 0 )
+ ROM_REGION( 0x200000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "sk-200-00.u16", 0x000000, 0x200000, CRC(2e297c61) SHA1(4071b945a1294fbc3d18fab1f144bf09af4349e8) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x200000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x200000, "ymz", 0 ) // Samples
ROM_LOAD( "sk-300-00.u4", 0x000000, 0x200000, CRC(e6535c05) SHA1(8895b7c326e0261691cb184887ac1ca637302460) )
ROM_END
ROM_START( sarukani )
SKNS_JAPAN
- ROM_REGION32_BE( 0x200000, "user1", 0 ) /* SH-2 Code mapped at 0x04000000 */
+ ROM_REGION32_BE( 0x200000, "user1", 0 ) // SH-2 Code mapped at 0x04000000
ROM_LOAD16_BYTE( "sk1j1.u10", 0x000000, 0x080000, CRC(fcc131b6) SHA1(5e3e71ee1f736b6098e671e6f57b1fb313c81adb) )
ROM_LOAD16_BYTE( "sk1j1.u8", 0x000001, 0x080000, CRC(3b6aa343) SHA1(a969b20b1170d82351024cab9e37f2fbfd01ddeb) )
- ROM_REGION( 0x0400000, "spritegen", 0 )
+ ROM_REGION( 0x0400000, "spritegen", 0 ) // Sprites
ROM_LOAD( "sk-100-00.u24", 0x000000, 0x200000, CRC(151dd88a) SHA1(87bb1039a9883f721a315760eb2c4abe4a94046f) )
ROM_LOAD( "sk-101.u20", 0x200000, 0x100000, CRC(779cce23) SHA1(70147b36d982524ba9921823e481ce8fbb5daa26) )
- ROM_REGION( 0x200000, "gfx2", 0 )
+ ROM_REGION( 0x200000, "gfx2", 0 ) // Tiles Plane A
ROM_LOAD( "sk-200-00.u16", 0x000000, 0x200000, CRC(2e297c61) SHA1(4071b945a1294fbc3d18fab1f144bf09af4349e8) )
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) /* Tiles Plane B */
- /* First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles */
- /* 0x040000 - 0x3fffff empty? */
+ ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 ) // Tiles Plane B
+ // First 0x040000 bytes (0x03ff Tiles) are RAM Based Tiles
+ // 0x040000 - 0x3fffff empty?
- ROM_REGION( 0x200000, "ymz", 0 ) /* Samples */
+ ROM_REGION( 0x200000, "ymz", 0 ) // Samples
ROM_LOAD( "sk-300-00.u4", 0x000000, 0x200000, CRC(e6535c05) SHA1(8895b7c326e0261691cb184887ac1ca637302460) )
ROM_END
@@ -1936,11 +1959,12 @@ GAME( 2001, galpanidx, galpani4, sknsa, cyvern, skns_state, init_galpani4, RO
GAME( 1996, jjparads, skns, sknsj, skns_1p, skns_state, init_jjparads, ROT0, "Electro Design", "Jan Jan Paradise", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1997, galpanis, skns, sknse, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Europe, set 1)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1997, galpanise, galpanis, sknse, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Europe, set 2)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1997, galpanisj, galpanis, sknsj, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Japan)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1997, galpanis, skns, sknse, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Europe, revision 1)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1997, galpanise, galpanis, sknse, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Europe, set 2)", MACHINE_IMPERFECT_GRAPHICS ) // E0 set??
+GAME( 1997, galpanisj, galpanis, sknsj, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Japan, revision 1)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, galpanisa, galpanis, sknsa, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Asia)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1997, galpanisk, galpanis, sknsk, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Korea)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1997, galpanisk, galpanis, sknsk, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Korea, revision 1)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1997, galpaniska,galpanis, sknsk, galpanis, skns_state, init_galpanis, ROT0, "Kaneko", "Gals Panic S - Extra Edition (Korea)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, jjparad2, skns, sknsj, skns_1p, skns_state, init_jjparad2, ROT0, "Electro Design", "Jan Jan Paradise 2", MACHINE_IMPERFECT_GRAPHICS )
@@ -1961,8 +1985,8 @@ GAME( 1998, puzzloopa, puzzloop, sknsa, puzzloop, skns_state, init_puzzloopa, RO
GAME( 1998, puzzloopk, puzzloop, sknsk, puzzloop, skns_state, init_puzzloopu, ROT0, "Mitchell", "Puzz Loop (Korea)", MACHINE_IMPERFECT_GRAPHICS ) // Same speed up as US version
GAME( 1998, puzzloopu, puzzloop, sknsu, puzzloop, skns_state, init_puzzloopu, ROT0, "Mitchell", "Puzz Loop (USA)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1998, ryouran , skns, sknsj, skns_1p, skns_state, init_ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran (set 1)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1998, ryourano, ryouran, sknsj, skns_1p, skns_state, init_ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran (set 2)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1998, ryouran , skns, sknsj, skns_1p, skns_state, init_ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran (revision 2)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1998, ryourano, ryouran, sknsj, skns_1p, skns_state, init_ryouran, ROT0, "Electro Design", "VS Mahjong Otome Ryouran (revision 1)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, galpans2, skns, sknse, galpanis, skns_state, init_galpans2, ROT0, "Kaneko", "Gals Panic S2 (Europe)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1999, galpans2j, galpans2, sknsj, galpanis, skns_state, init_galpans2, ROT0, "Kaneko", "Gals Panic S2 (Japan)", MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/taito_b.cpp b/src/mame/drivers/taito_b.cpp
index e4b12830015..8a4f7fef327 100644
--- a/src/mame/drivers/taito_b.cpp
+++ b/src/mame/drivers/taito_b.cpp
@@ -90,7 +90,7 @@ List of known B-System games:
Violence Fight (YM2203 sound, 1xMSM6295 )
Hit The Ice (YM2203 sound, 1xMSM6295 )
- Master of Weapons (YM2203 sound)
+ Master of Weapon (YM2203 sound)
Quiz Sekai wa SHOW by shobai (YM2610-B sound, MB87078 - electronic volume control)
Puzzle Bobble (YM2610-B sound, MB87078 - electronic volume control)
@@ -3276,7 +3276,7 @@ ROM_START( masterwj )
ROM_LOAD( "b72-01.5", 0x080000, 0x080000, CRC(a24ac26e) SHA1(895715a2bb0cb15334cba2283bd228b4fc08cd0c) )
ROM_END
-ROM_START( yukiwo ) /* Prototype of Master of Weapons */
+ROM_START( yukiwo ) /* Prototype of Master of Weapon */
ROM_REGION( 0x80000, "maincpu", 0 ) /* 512k for 68000 code */
ROM_LOAD16_BYTE( "ic33-rom0e.bin", 0x00000, 0x20000, CRC(a0dd51d9) SHA1(a4740bf08e26e1e576344c95d945df5d970738f2) )
ROM_LOAD16_BYTE( "ic24-e882.bin", 0x00001, 0x20000, CRC(d66f29d4) SHA1(0854f1a0943a20693e6cd02825666e39b4fe28ca) )
diff --git a/src/mame/drivers/taitosj.cpp b/src/mame/drivers/taitosj.cpp
index d3d5aebd4e9..590e7d2cb1b 100644
--- a/src/mame/drivers/taitosj.cpp
+++ b/src/mame/drivers/taitosj.cpp
@@ -1933,6 +1933,7 @@ ROM_START( spacecr )
ROM_END
+// A bootleg with identical ROM contents has been seen, with handwritten labels going from j1 to j20.
ROM_START( junglek )
ROM_REGION( 0x12000, "maincpu", 0 )
ROM_LOAD( "kn21-1.bin", 0x00000, 0x1000, CRC(45f55d30) SHA1(bb9518d7728938f673a663801e47ae0438cdbea1) )
diff --git a/src/mame/drivers/tattack.cpp b/src/mame/drivers/tattack.cpp
index 8f419a20d2c..d27a6fe6f52 100644
--- a/src/mame/drivers/tattack.cpp
+++ b/src/mame/drivers/tattack.cpp
@@ -447,6 +447,9 @@ ROM_START( tattack )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "rom.9a", 0x0000, 0x1000, CRC(47120994) SHA1(b6e90abbc50cba77df4c0aaf50d1f97b99e33b6d) )
+ ROM_REGION( 0x800, "melody", 0 ) // Epson 7910CQ Multi-Melody IC
+ ROM_LOAD( "7910cq", 0x000, 0x800, NO_DUMP ) // actual size unknown, needs decapping
+
ROM_REGION( 0x1000, "gfx1", 0 )
ROM_LOAD( "rom.6c", 0x0000, 0x1000, CRC(88ce45cf) SHA1(c7a43bfc9e9c2aeb75a98f723558bc88e53401a7) )
ROM_END
diff --git a/src/mame/drivers/tecmo.cpp b/src/mame/drivers/tecmo.cpp
index 6f3ca2f43a3..a466861f1a1 100644
--- a/src/mame/drivers/tecmo.cpp
+++ b/src/mame/drivers/tecmo.cpp
@@ -1227,6 +1227,36 @@ ROM_START( silkwormb )
ROM_LOAD( "e16.17", 0x38000, 0x08000, CRC(7ec93873) SHA1(0993a3b3e5ca84ef0ea32159825e379ba4cc5fbb) ) /* bg tiles 27C256 */
ROM_END
+ROM_START( silkwormb2 ) // 2-PCB stack, no markings
+ ROM_REGION( 0x20000, "maincpu", 0 )
+ ROM_LOAD( "280100_pc-4.4", 0x00000, 0x10000, CRC(a10f2414) SHA1(5dbad60582d3193802c7c5e727c9c2685dec27b0) ) // unique, seems quite different wrt to the other dumped sets
+ ROM_LOAD( "280100_pc-5.5", 0x10000, 0x10000, CRC(a6c7bb51) SHA1(75f6625459ab65f2d47a282c1295d4db38f5fe51) )
+
+ ROM_REGION( 0x20000, "soundcpu", 0 )
+ ROM_LOAD( "280100_pc-3.3", 0x00000, 0x08000, CRC(5a880df9) SHA1(fc3f78ea05571ecf127fd1a6d3c6c349e300967a) ) // unique
+
+ ROM_REGION( 0x08000, "gfx1", 0 ) // characters
+ ROM_LOAD( "280100_pc-2.2", 0x00000, 0x08000, CRC(e80a1cd9) SHA1(ef16feb1113acc7401f8951158b25f6f201196f2) )
+
+ ROM_REGION( 0x40000, "gfx2", 0 ) // sprites
+ ROM_LOAD( "280100_pc-6.6", 0x00000, 0x10000, CRC(1138d159) SHA1(3b938606d448c4effdfe414bbf495b50cc3bc1c1) )
+ ROM_LOAD( "280100_pc-7.7", 0x10000, 0x10000, CRC(d96214f7) SHA1(a5b2be3ae6a6eb8afef2c18c865a998fbf4adf93) )
+ ROM_LOAD( "280100_pc-8.8", 0x20000, 0x10000, CRC(0494b38e) SHA1(03255f153824056e430a0b8595103f3b58b1fd97) )
+ ROM_LOAD( "280100_pc-9.9", 0x30000, 0x10000, CRC(8ce3cdf5) SHA1(635248514c4e1e5aab7a2ed4d620a5b970d4a43a) )
+
+ ROM_REGION( 0x40000, "gfx3", 0 ) // fg tiles
+ ROM_LOAD( "280100_pc-10.10", 0x00000, 0x10000, CRC(8c7138bb) SHA1(0cfd69fa77d5b546f7dad80537d8d2497ae758bc) )
+ ROM_LOAD( "280100_pc-11.11", 0x10000, 0x08000, CRC(c0c4687d) SHA1(afe05eb7e5a65c995aeac9ea773ad79eb053303f) )
+ ROM_LOAD( "280100_pc-12.12", 0x20000, 0x10000, CRC(bb0f568f) SHA1(b66c6d0407ed0b068c6bf07987f1b923d4a6e4f8) )
+ ROM_LOAD( "280100_pc-13.13", 0x30000, 0x08000, CRC(fc472811) SHA1(e862ec9b38f3f3a1f4668fbc587063eee8e9e821) )
+
+ ROM_REGION( 0x40000, "gfx4", 0 ) // bg tiles
+ ROM_LOAD( "280100_pc-14.14", 0x00000, 0x10000, CRC(409df64b) SHA1(cada970bf9cc8f6522e7a71e00fe873568852873) )
+ ROM_LOAD( "280100_pc-15.15", 0x10000, 0x08000, CRC(b02acdb6) SHA1(6be74bb89680b79b3a5d13af638ed5a0bb077dad) )
+ ROM_LOAD( "280100_pc-16.16", 0x20000, 0x08000, CRC(caf7b25e) SHA1(2c348af9d03efd801cbbc06deb02869bd6449518) )
+ ROM_LOAD( "280100_pc-17.17", 0x38000, 0x08000, CRC(7ec93873) SHA1(0993a3b3e5ca84ef0ea32159825e379ba4cc5fbb) )
+ROM_END
+
/*
main cpu Z80A
@@ -1418,15 +1448,16 @@ void tecmo_state::init_gemini()
}
-GAME( 1986, rygar, 0, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, rygar2, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", MACHINE_SUPPORTS_SAVE )
-GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen
-GAME( 1987, geminij, gemini, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen
-GAME( 1987, geminib, gemini, geminib, gemini, tecmo_state, init_gemini, ROT90, "bootleg", "Gemini Wing (bootleg)", MACHINE_SUPPORTS_SAVE ) // regional warning screen is blanked (still get a delay)
-GAME( 1988, silkworm, 0, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen
-GAME( 1988, silkwormj, silkworm, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen
-GAME( 1988, silkwormp, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (prototype)", MACHINE_SUPPORTS_SAVE ) // prototype
-GAME( 1988, silkwormb, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "bootleg", "Silk Worm (bootleg)", MACHINE_SUPPORTS_SAVE ) // bootleg of (a different?) prototype
-GAME( 1988, backfirt, 0, backfirt, backfirt, tecmo_state, init_gemini, ROT0, "Tecmo", "Back Fire (Tecmo, bootleg)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, rygar, 0, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, rygar2, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, rygar3, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Rygar (US set 3 Old Version)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, rygarj, rygar, rygar, rygar, tecmo_state, init_rygar, ROT0, "Tecmo", "Argus no Senshi (Japan)", MACHINE_SUPPORTS_SAVE )
+GAME( 1987, gemini, 0, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen
+GAME( 1987, geminij, gemini, gemini, gemini, tecmo_state, init_gemini, ROT90, "Tecmo", "Gemini Wing (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen
+GAME( 1987, geminib, gemini, geminib, gemini, tecmo_state, init_gemini, ROT90, "bootleg", "Gemini Wing (bootleg)", MACHINE_SUPPORTS_SAVE ) // regional warning screen is blanked (still get a delay)
+GAME( 1988, silkworm, 0, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (World)", MACHINE_SUPPORTS_SAVE ) // No regional "Warning, if you are playing ..." screen
+GAME( 1988, silkwormj, silkworm, silkworm, silkworm, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (Japan)", MACHINE_SUPPORTS_SAVE ) // Japan regional warning screen
+GAME( 1988, silkwormp, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "Tecmo", "Silk Worm (prototype)", MACHINE_SUPPORTS_SAVE ) // prototype
+GAME( 1988, silkwormb, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "bootleg", "Silk Worm (bootleg, set 1)", MACHINE_SUPPORTS_SAVE ) // bootleg of (a different?) prototype
+GAME( 1988, silkwormb2, silkworm, silkwormp, silkwormp, tecmo_state, init_silkworm, ROT0, "bootleg", "Silk Worm (bootleg, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, backfirt, 0, backfirt, backfirt, tecmo_state, init_gemini, ROT0, "Tecmo", "Back Fire (Tecmo, bootleg)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/vectrex.cpp b/src/mame/drivers/vectrex.cpp
index 0556d7d6b74..da2be7804b5 100644
--- a/src/mame/drivers/vectrex.cpp
+++ b/src/mame/drivers/vectrex.cpp
@@ -150,7 +150,7 @@ ROM_START(vectrex)
// The following fastboots are listed here for reference and documentation
// ROM_SYSTEM_BIOS(2, "bios2", "us-fastboot hack")
-// ROMX_LOAD("us-fastboot.bin", 0x0000, 0x2000, CRa6e4dac4) SHA1(e0900be6d6858b985fd7f0999d864b2fceaf01a1), ROM_BIOS(2) )
+// ROMX_LOAD("us-fastboot.bin", 0x0000, 0x2000, CRC(a6e4dac4) SHA1(e0900be6d6858b985fd7f0999d864b2fceaf01a1), ROM_BIOS(2) )
// ROM_SYSTEM_BIOS(3, "bios3", "intl-fastboot hack")
// ROMX_LOAD("intl-fastboot.bin", 0x0000, 0x2000, CRC(71dcf0f4) SHA1(2a257c5111f5cee841bd14acaa9df6496aaf3d8b), ROM_BIOS(3) )
diff --git a/src/mame/drivers/vegas.cpp b/src/mame/drivers/vegas.cpp
index ddf45de38f1..d9377f4dd09 100644
--- a/src/mame/drivers/vegas.cpp
+++ b/src/mame/drivers/vegas.cpp
@@ -1723,7 +1723,7 @@ static INPUT_PORTS_START( sf2049 )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_NAME("Music")
PORT_BIT( 0x0070, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(vegas_state, keypad_r)
PORT_BIT( 0x0f00, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(vegas_state, gearshift_r)
- PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0xf080, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("GEAR")
PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("1st Gear")
@@ -2158,7 +2158,7 @@ void vegas_state::nbagold(machine_config &config)
m_ioasic->set_yearoffs(80);
m_ioasic->irq_handler().set(FUNC(vegas_state::ioasic_irq));
//m_ioasic->set_auto_ack(1)
- m_ioasic->aux_output_handler().set(FUNC(vegas_state::i40_w));
+ m_ioasic->aux_output_handler().set(FUNC(vegas_state::i40_w));
}
void vegas_state::sf2049(machine_config &config)
@@ -2232,7 +2232,7 @@ void vegas_state::cartfury(machine_config &config)
*
*************************************/
- // there is a socket next to the main bios roms for updates, this is what the update region is.
+// there is a socket next to the main bios roms for updates, this is what the update region is.
ROM_START( gauntleg )
@@ -2268,7 +2268,6 @@ ROM_START( gauntleg12 )
ROMX_LOAD("12to16.3.bin", 0x000000, 0x100000, CRC(1027e54f) SHA1(a841f5cc5b022ddfaf70c97a64d1582f0a2ca70e), ROM_BIOS(3))
-
DISK_REGION( PCI_ID_IDE":ide:0:hdd:image" ) // GUTS 1.4 10/22/1998 Main 10/23/1998
DISK_IMAGE( "gauntl12", 0, SHA1(62917fbd692d004bc391287349041ebe669385cf) ) // compressed with -chs 4969,16,63 (which is apparently correct for a Quantum FIREBALL 2.5 GB and allows the update program to work)
diff --git a/src/mame/drivers/vic10.cpp b/src/mame/drivers/vic10.cpp
index b41700fbbcb..3d43698692c 100644
--- a/src/mame/drivers/vic10.cpp
+++ b/src/mame/drivers/vic10.cpp
@@ -42,7 +42,7 @@ public:
m_cia(*this, MOS6526_TAG),
m_joy1(*this, CONTROL1_TAG),
m_joy2(*this, CONTROL2_TAG),
- m_exp(*this, VIC10_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_ram(*this, RAM_TAG),
m_cassette(*this, PET_DATASSETTE_PORT_TAG),
m_color_ram(*this, "color_ram", 0x400, ENDIANNESS_LITTLE),
diff --git a/src/mame/drivers/vic20.cpp b/src/mame/drivers/vic20.cpp
index b3b030a876d..4c6058c2c97 100644
--- a/src/mame/drivers/vic20.cpp
+++ b/src/mame/drivers/vic20.cpp
@@ -44,7 +44,7 @@ public:
m_vic(*this, VIC_TAG),
m_iec(*this, CBM_IEC_TAG),
m_joy(*this, CONTROL1_TAG),
- m_exp(*this, VIC20_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_user(*this, PET_USER_PORT_TAG),
m_cassette(*this, PET_DATASSETTE_PORT_TAG),
m_ram(*this, RAM_TAG),
diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp
index 423b5cbc9ef..48cad1e3307 100644
--- a/src/mame/drivers/vis.cpp
+++ b/src/mame/drivers/vis.cpp
@@ -75,13 +75,13 @@ void vis_audio_device::dack16_w(int line, uint16_t data)
{
m_sample[m_samples++] = data;
m_curcount++;
- if(m_samples >= 2)
+ if((m_samples >= 2) || ((m_mode & 0x08) != 0x08))
m_isa->drq7_w(CLEAR_LINE);
}
void vis_audio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- if(m_samples < 2)
+ if(((m_samples < 2) && ((m_mode & 0x08) == 0x08)) || !m_samples)
return;
switch(m_mode & 0x88)
{
@@ -110,7 +110,7 @@ void vis_audio_device::device_timer(emu_timer &timer, device_timer_id id, int pa
break;
}
- if(m_sample_byte >= 4)
+ if(m_sample_byte >= 2)
{
m_sample_byte = 0;
m_samples = 0;
@@ -200,9 +200,11 @@ void vis_audio_device::pcm_w(offs_t offset, uint8_t data)
return;
case 0x0c:
m_count = (m_count & 0xff00) | data;
+ m_curcount = 0;
break;
case 0x0e:
m_count = (m_count & 0xff) | (data << 8);
+ m_curcount = 0;
break;
case 0x0f:
//cdrom related?
@@ -856,6 +858,7 @@ void vis_state::io_map(address_map &map)
map(0x0026, 0x0027).rw(FUNC(vis_state::unk_r), FUNC(vis_state::unk_w));
map(0x0040, 0x005f).rw("mb:pit8254", FUNC(pit8254_device::read), FUNC(pit8254_device::write));
map(0x0060, 0x0065).rw("kbdc", FUNC(kbdc8042_device::data_r), FUNC(kbdc8042_device::data_w));
+ map(0x0061, 0x0061).rw("mb", FUNC(at_mb_device::portb_r), FUNC(at_mb_device::portb_w));
map(0x006a, 0x006a).r(FUNC(vis_state::unk2_r));
map(0x0080, 0x009f).rw("mb", FUNC(at_mb_device::page8_r), FUNC(at_mb_device::page8_w));
map(0x0092, 0x0092).rw(FUNC(vis_state::sysctl_r), FUNC(vis_state::sysctl_w));
diff --git a/src/mame/drivers/yman1x.cpp b/src/mame/drivers/yman1x.cpp
new file mode 100644
index 00000000000..483db76ce64
--- /dev/null
+++ b/src/mame/drivers/yman1x.cpp
@@ -0,0 +1,87 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/*******************************************************************************
+
+ Skeleton driver for Yamaha AN1x Control Synthesizer.
+
+ This is roughly similar in principle to the MU-80, but the sound chip is a
+ YSS236-F VOP3 instead of SWP20. A second VOP3 (with its own ROM) is on the
+ separate DMS board.
+
+*******************************************************************************/
+
+#include "emu.h"
+//#include "bus/midi/midi.h"
+#include "cpu/h8/h83002.h"
+#include "cpu/m6805/m6805.h"
+#include "machine/mulcd.h"
+#include "machine/nvram.h"
+#include "sound/meg.h"
+#include "speaker.h"
+
+namespace {
+
+class an1x_state : public driver_device
+{
+public:
+ an1x_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_pks(*this, "pks")
+ , m_meg(*this, "meg")
+ {
+ }
+
+ void an1x(machine_config &config);
+
+private:
+ void mem_map(address_map &map);
+
+ required_device<h83002_device> m_maincpu;
+ required_device<cpu_device> m_pks;
+ required_device<meg_device> m_meg;
+};
+
+void an1x_state::mem_map(address_map &map)
+{
+ map(0x000000, 0x0fffff).rom().region("program", 0);
+ map(0x200000, 0x23ffff).ram().share("nvram");
+}
+
+static INPUT_PORTS_START(an1x)
+INPUT_PORTS_END
+
+void an1x_state::an1x(machine_config &config)
+{
+ H83002(config, m_maincpu, 16_MHz_XTAL); // HD6413002FP16
+ m_maincpu->set_addrmap(AS_PROGRAM, &an1x_state::mem_map);
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 2x HM628128BLFP-8 + CR2450 battery
+
+ HD63705(config, m_pks, 8_MHz_XTAL).set_disable(); // HD63B05V0E65F
+
+ MULCD(config, "lcd"); // LC7985ND (back-lit)
+
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+
+ MEG(config, m_meg, 11.2896_MHz_XTAL);
+}
+
+ROM_START(an1x)
+ ROM_REGION16_BE(0x100000, "program", 0)
+ ROM_LOAD16_WORD_SWAP("yamaha an1x 1.04.ic2", 0x000000, 0x100000, CRC(f03b8c30) SHA1(778b669a450660f2b15cc385f156dc6676c437f1))
+
+ ROM_REGION(0x1000, "pks", 0)
+ ROM_LOAD("xn668a00.bin", 0x0000, 0x1000, NO_DUMP)
+
+ ROM_REGION16_BE(0x20000, "vop3", 0)
+ ROM_LOAD("xt113b00.ic9", 0x00000, 0x20000, NO_DUMP) // LH531024
+
+ ROM_REGION16_BE(0x20000, "vop3s", 0)
+ ROM_LOAD("xt113b00.ic1", 0x00000, 0x20000, NO_DUMP) // LH531024
+ROM_END
+
+} // anonymous namespace
+
+SYST(1997, an1x, 0, 0, an1x, an1x, an1x_state, empty_init, "Yamaha", "AN1x Control Synthesizer", MACHINE_NOT_WORKING)
diff --git a/src/mame/drivers/ymdx100.cpp b/src/mame/drivers/ymdx100.cpp
new file mode 100644
index 00000000000..a9b7813b425
--- /dev/null
+++ b/src/mame/drivers/ymdx100.cpp
@@ -0,0 +1,144 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/*******************************************************************************
+
+ Skeleton driver for Yamaha DX100 & DX27 FM synthesizers.
+
+ The main differences between DX100 and DX27 are that DX27 has 61 keys
+ rather than 49, but DX100 is portable and can run on battery power. Their
+ tone generation capabilities are identical.
+
+*******************************************************************************/
+
+#include "emu.h"
+
+#include "bus/midi/midi.h"
+#include "cpu/m6800/m6801.h"
+#include "machine/adc0808.h"
+#include "machine/clock.h"
+#include "machine/nvram.h"
+#include "sound/ymopm.h"
+#include "video/hd44780.h"
+
+#include "emupal.h"
+#include "screen.h"
+#include "speaker.h"
+
+namespace {
+
+class yamaha_dx100_state : public driver_device
+{
+public:
+ yamaha_dx100_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_midi_in(true)
+ {
+ }
+
+ void dx100(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ HD44780_PIXEL_UPDATE(lcd_pixel_update);
+ void palette_init(palette_device &palette);
+
+ DECLARE_WRITE_LINE_MEMBER(p22_w);
+
+ void mem_map(address_map &map);
+
+ required_device<hd6303x_cpu_device> m_maincpu;
+
+ bool m_midi_in;
+};
+
+void yamaha_dx100_state::machine_start()
+{
+ save_item(NAME(m_midi_in));
+}
+
+HD44780_PIXEL_UPDATE(yamaha_dx100_state::lcd_pixel_update)
+{
+ if (x < 5 && y < 8 && line < 2 && pos < 16)
+ bitmap.pix(line * 10 + y + 1 + ((y == 7) ? 1 : 0), pos * 6 + x + 1) = state ? 1 : 2;
+}
+
+void yamaha_dx100_state::palette_init(palette_device &palette)
+{
+ palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00)); // background
+ palette.set_pen_color(1, rgb_t(0xff, 0xff, 0xff)); // lcd pixel on
+ palette.set_pen_color(2, rgb_t(0x18, 0x18, 0x18)); // lcd pixel off
+}
+
+WRITE_LINE_MEMBER(yamaha_dx100_state::p22_w)
+{
+ if (state)
+ m_maincpu->m6801_clock_serial();
+}
+
+void yamaha_dx100_state::mem_map(address_map &map)
+{
+ map(0x0000, 0x001f).m(m_maincpu, FUNC(hd6303x_cpu_device::hd6301x_io));
+ map(0x0040, 0x00ff).ram(); // internal RAM
+ map(0x0800, 0x0fff).ram().share("nvram");
+ map(0x1000, 0x17ff).ram();
+ map(0x2000, 0x2001).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write));
+ map(0x2800, 0x2800).r("adc", FUNC(m58990_device::data_r));
+ map(0x3000, 0x3000).w("adc", FUNC(m58990_device::address_data_start_w));
+ map(0x3800, 0x3801).rw("ymsnd", FUNC(ym2164_device::read), FUNC(ym2164_device::write));
+ map(0x8000, 0xffff).rom().region("program", 0);
+}
+
+static INPUT_PORTS_START(dx100)
+INPUT_PORTS_END
+
+void yamaha_dx100_state::dx100(machine_config &config)
+{
+ HD6303X(config, m_maincpu, 7.15909_MHz_XTAL / 2); // HD6303XP
+ m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_dx100_state::mem_map);
+ m_maincpu->in_p2_cb().set([this]() -> u8 { return m_midi_in ? 0x04 : 0; });
+ m_maincpu->in_p6_cb().set("adc", FUNC(m58990_device::eoc_r)).lshift(4);
+ m_maincpu->out_ser_tx_cb().set("mdout", FUNC(midi_port_device::write_txd));
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // TC5518BPL + CR2032T battery
+
+ m58990_device &adc(M58990(config, "adc", 7.15909_MHz_XTAL / 8)); // M58990P-1 (clocked by E)
+ adc.in_callback<5>().set_constant(0x80); // "CNG RAM BATTERY!" displayed unless value is between 0x70 and 0xCC
+
+ CLOCK(config, "subclock", 500_kHz_XTAL).signal_handler().set(FUNC(yamaha_dx100_state::p22_w));
+
+ MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set([this](int state) { m_midi_in = state; });
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update));
+ screen.set_size(6*16+1, 10*2+1);
+ screen.set_visarea_full();
+ screen.set_palette("palette");
+
+ PALETTE(config, "palette", FUNC(yamaha_dx100_state::palette_init), 3);
+
+ hd44780_device &lcdc(HD44780(config, "lcdc", 0)); // HD44780RA00
+ lcdc.set_lcd_size(2, 16);
+ lcdc.set_pixel_update_cb(FUNC(yamaha_dx100_state::lcd_pixel_update));
+
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+
+ ym2164_device &ymsnd(YM2164(config, "ymsnd", 7.15909_MHz_XTAL / 2)); // with YM3014 DAC
+ ymsnd.add_route(0, "lspeaker", 0.60);
+ ymsnd.add_route(1, "rspeaker", 0.60);
+}
+
+ROM_START(dx100)
+ ROM_REGION(0x8000, "program", 0)
+ ROM_LOAD("dx100 v1.1.bin", 0x0000, 0x8000, CRC(c3ed7c86) SHA1(5b003db1bb5c1909907153f6446b63b07f5b41d6))
+ROM_END
+
+} // anonymous namespace
+
+SYST(1985, dx100, 0, 0, dx100, dx100, yamaha_dx100_state, empty_init, "Yamaha", "DX100 Digital Programmable Algorithm Synthesizer", MACHINE_IS_SKELETON)
diff --git a/src/mame/drivers/ymsy35.cpp b/src/mame/drivers/ymsy35.cpp
new file mode 100644
index 00000000000..9e291a1a121
--- /dev/null
+++ b/src/mame/drivers/ymsy35.cpp
@@ -0,0 +1,76 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/*******************************************************************************
+
+ Skeleton driver for Yamaha SY35 AWM/FM vector synthesizer.
+
+*******************************************************************************/
+
+#include "emu.h"
+//#include "bus/midi/midi.h"
+#include "cpu/h8500/h8520.h"
+#include "cpu/m6805/m6805.h"
+
+namespace {
+
+class yamaha_sy35_state : public driver_device
+{
+public:
+ yamaha_sy35_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_scancpu(*this, "scancpu")
+ {
+ }
+
+ void sy35(machine_config &config);
+
+private:
+ void mem_map(address_map &map);
+
+ required_device<h8520_device> m_maincpu;
+ required_device<cpu_device> m_scancpu;
+};
+
+void yamaha_sy35_state::mem_map(address_map &map)
+{
+ map(0x00000, 0x1ffff).rom().region("program", 0);
+ map(0x20000, 0x27fff).mirror(0x8000).ram();
+ //map(0x30000, 0x3ffff).rw("card", FUNC(sy35_card_device::read), FUNC(sy35_card_device::write));
+ map(0x80000, 0xbffff).rom().region("sound_make", 0);
+}
+
+static INPUT_PORTS_START(sy35)
+INPUT_PORTS_END
+
+void yamaha_sy35_state::sy35(machine_config &config)
+{
+ HD6435208(config, m_maincpu, 20_MHz_XTAL); // HD6435208A00P or HD6475208P
+ m_maincpu->set_mode(3); // internal ROM disabled
+ m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_sy35_state::mem_map);
+
+ HD63705(config, m_scancpu, 8_MHz_XTAL).set_disable(); // HD63B05V0C85P
+
+ //TMC3493PH(config, "gew5a", 12.8_MHz_XTAL);
+ //TMC3493PH(config, "gew5b", 12.8_MHz_XTAL);
+ //YM3413(config, "ldsp");
+}
+
+ROM_START(sy35)
+ ROM_REGION(0x20000, "program", 0)
+ ROM_LOAD("xk932a0.ic7", 0x00000, 0x20000, CRC(e86f47ac) SHA1(e14e309ba09e0f6de165e9366e199b74d1411f6c)) // 27C010 (second half blank)
+
+ ROM_REGION(0x40000, "sound_make", 0)
+ ROM_LOAD("xl401a0.ic6", 0x00000, 0x40000, CRC(614dfe1b) SHA1(7c2edd2bb6157d95b0f54f712fc89666846caead)) // 27C020
+
+ ROM_REGION(0x1000, "scancpu", 0)
+ ROM_LOAD("xh257a00.ic2", 0x0000, 0x1000, NO_DUMP)
+
+ ROM_REGION(0x200000, "voice", 0)
+ ROM_LOAD("xl429a00.ic8", 0x000000, 0x100000, NO_DUMP)
+ ROM_LOAD("xl430a00.ic9", 0x100000, 0x100000, NO_DUMP)
+ROM_END
+
+} // anonymous namespace
+
+SYST(1992, sy35, 0, 0, sy35, sy35, yamaha_sy35_state, empty_init, "Yamaha", "SY35 Music Synthesizer", MACHINE_IS_SKELETON)
diff --git a/src/mame/includes/adam.h b/src/mame/includes/adam.h
index e4f74309486..723b3edabc0 100644
--- a/src/mame/includes/adam.h
+++ b/src/mame/includes/adam.h
@@ -35,9 +35,7 @@ public:
m_psg(*this, SN76489A_TAG),
m_ram(*this, RAM_TAG),
m_adamnet(*this, "adamnet"),
- m_slot1(*this, ADAM_LEFT_EXPANSION_SLOT_TAG),
- m_slot2(*this, ADAM_CENTER_EXPANSION_SLOT_TAG),
- m_slot3(*this, ADAM_RIGHT_EXPANSION_SLOT_TAG),
+ m_slot(*this, "slot%u", 1U),
m_cart(*this, COLECOVISION_CARTRIDGE_SLOT_TAG),
m_joy1(*this, CONTROL1_TAG),
m_joy2(*this, CONTROL2_TAG),
@@ -57,9 +55,7 @@ public:
required_device<sn76489a_device> m_psg;
required_device<ram_device> m_ram;
required_device<adamnet_device> m_adamnet;
- required_device<adam_expansion_slot_device> m_slot1;
- required_device<adam_expansion_slot_device> m_slot2;
- required_device<adam_expansion_slot_device> m_slot3;
+ required_device_array<adam_expansion_slot_device, 3> m_slot;
required_device<colecovision_cartridge_slot_device> m_cart;
required_device<colecovision_control_port_device> m_joy1;
required_device<colecovision_control_port_device> m_joy2;
diff --git a/src/mame/includes/bw2.h b/src/mame/includes/bw2.h
index d4d64e68388..01f31234785 100644
--- a/src/mame/includes/bw2.h
+++ b/src/mame/includes/bw2.h
@@ -37,7 +37,7 @@ public:
m_lcdc(*this, MSM6255_TAG),
m_pit(*this, "ic6"),
m_centronics(*this, CENTRONICS_TAG),
- m_exp(*this, BW2_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_ram(*this, RAM_TAG),
m_floppy0(*this, WD2797_TAG":0"),
m_floppy1(*this, WD2797_TAG":1"),
diff --git a/src/mame/includes/fmtowns.h b/src/mame/includes/fmtowns.h
index 29d4a855679..d4956a80617 100644
--- a/src/mame/includes/fmtowns.h
+++ b/src/mame/includes/fmtowns.h
@@ -394,6 +394,7 @@ private:
static const device_timer_id TIMER_WAIT = 5;
static const device_timer_id TIMER_CDSTATUS = 6;
static const device_timer_id TIMER_CDDA = 7;
+ static const device_timer_id TIMER_SPRITES = 8;
void freerun_inc();
void intervaltimer2_timeout();
void poll_keyboard();
@@ -413,7 +414,7 @@ private:
TIMER_CALLBACK_MEMBER(towns_cdrom_read_byte);
TIMER_CALLBACK_MEMBER(towns_vblank_end);
- TIMER_CALLBACK_MEMBER(draw_sprites);
+ void draw_sprites();
DECLARE_WRITE_LINE_MEMBER(towns_pit_out0_changed);
DECLARE_WRITE_LINE_MEMBER(towns_pit_out1_changed);
DECLARE_WRITE_LINE_MEMBER(pit2_out1_changed);
diff --git a/src/mame/includes/galaxian.h b/src/mame/includes/galaxian.h
index b174603eb8a..d148d50e8b4 100644
--- a/src/mame/includes/galaxian.h
+++ b/src/mame/includes/galaxian.h
@@ -12,15 +12,18 @@
#include "machine/gen_latch.h"
#include "machine/i8255.h"
+#include "machine/netlist.h"
#include "machine/timer.h"
+
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "sound/digitalk.h"
-#include "machine/netlist.h"
+
#include "emupal.h"
#include "screen.h"
#include "tilemap.h"
+
namespace {
/* master clocks */
@@ -64,11 +67,8 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
- , m_audio2(*this, "audio2")
- , m_dac(*this, "dac")
, m_ay8910(*this, "8910.%u", 0)
, m_ay8910_cclimber(*this, "cclimber_audio:aysnd")
- , m_digitalker(*this, "digitalker")
, m_ppi8255(*this, "ppi8255_%u", 0)
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen")
@@ -77,22 +77,22 @@ public:
, m_netlist(*this, "konami")
, m_filter_ctl(*this, "konami:ctl%u", 0)
, m_ckong_coinage(*this, "COINAGE")
- , m_fake_select(*this, "FAKE_SELECT")
- , m_tenspot_game_dsw(*this, {"IN2_GAME0", "IN2_GAME1", "IN2_GAME2", "IN2_GAME3", "IN2_GAME4", "IN2_GAME5", "IN2_GAME6", "IN2_GAME7", "IN2_GAME8", "IN2_GAME9"})
, m_spriteram(*this, "spriteram")
, m_videoram(*this, "videoram")
- , m_exattrram(*this, "extattrram")
, m_decrypted_opcodes(*this, "decrypted_opcodes")
, m_lamps(*this, "lamp%u", 0U)
- , m_bank1(*this, "bank1")
- , m_leftspriteclip(16)
{ }
/* video extension callbacks */
- typedef void (galaxian_state::*galaxian_extend_tile_info_func)(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
- typedef void (galaxian_state::*galaxian_extend_sprite_info_func)(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
- typedef void (galaxian_state::*galaxian_draw_bullet_func)(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y);
- typedef void (galaxian_state::*galaxian_draw_background_func)(bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ typedef void (galaxian_state::*extend_tile_info_func)(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
+ typedef void (galaxian_state::*extend_sprite_info_func)(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
+ typedef void (galaxian_state::*draw_bullet_func)(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y);
+ typedef void (galaxian_state::*draw_background_func)(bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ typedef delegate<void (uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)> extend_tile_info_delegate;
+ typedef delegate<void (const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)> extend_sprite_info_delegate;
+ typedef delegate<void (bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y)> draw_bullet_delegate;
+ typedef delegate<void (bitmap_rgb32 &bitmap, const rectangle &cliprect)> draw_background_delegate;
void galaxian_videoram_w(offs_t offset, uint8_t data);
void galaxian_objram_w(offs_t offset, uint8_t data);
@@ -106,9 +106,6 @@ public:
void scramble_background_blue_w(uint8_t data);
void galaxian_gfxbank_w(offs_t offset, uint8_t data);
template <int N> DECLARE_READ_LINE_MEMBER(azurian_port_r);
- DECLARE_READ_LINE_MEMBER(kingball_muxbit_r);
- DECLARE_READ_LINE_MEMBER(kingball_noise_r);
- DECLARE_CUSTOM_INPUT_MEMBER(moonwar_dial_r);
void irq_enable_w(uint8_t data);
void start_lamp_w(offs_t offset, uint8_t data);
void coin_lock_w(uint8_t data);
@@ -123,9 +120,6 @@ public:
uint8_t theend_protection_r();
template <int N> DECLARE_READ_LINE_MEMBER(theend_protection_alt_r);
void explorer_sound_control_w(uint8_t data);
- uint8_t sfx_sample_io_r(offs_t offset);
- void sfx_sample_io_w(offs_t offset, uint8_t data);
- uint8_t monsterz_protection_r();
uint8_t frogger_ppi8255_r(offs_t offset);
void frogger_ppi8255_w(offs_t offset, uint8_t data);
uint8_t frogger_ay8910_r(offs_t offset);
@@ -138,53 +132,25 @@ public:
uint8_t turtles_ppi8255_1_r(offs_t offset);
void turtles_ppi8255_0_w(offs_t offset, uint8_t data);
void turtles_ppi8255_1_w(offs_t offset, uint8_t data);
- uint8_t scorpion_ay8910_r(offs_t offset);
- void scorpion_ay8910_w(offs_t offset, uint8_t data);
- uint8_t scorpion_digitalker_intr_r();
- void zigzag_bankswap_w(uint8_t data);
- void zigzag_ay8910_w(offs_t offset, uint8_t data);
- void kingball_speech_dip_w(uint8_t data);
- void kingball_sound1_w(uint8_t data);
- void kingball_sound2_w(uint8_t data);
- void mshuttle_ay8910_cs_w(uint8_t data);
- void mshuttle_ay8910_control_w(uint8_t data);
- void mshuttle_ay8910_data_w(uint8_t data);
- uint8_t mshuttle_ay8910_data_r();
uint8_t jumpbug_protection_r(offs_t offset);
void checkman_sound_command_w(uint8_t data);
uint8_t checkmaj_protection_r();
uint8_t dingo_3000_r();
uint8_t dingo_3035_r();
uint8_t dingoe_3001_r();
- void tenspot_unk_6000_w(uint8_t data);
- void tenspot_unk_8000_w(uint8_t data);
- void tenspot_unk_e000_w(uint8_t data);
uint8_t froggeram_ppi8255_r(offs_t offset);
void froggeram_ppi8255_w(offs_t offset, uint8_t data);
void artic_gfxbank_w(uint8_t data);
- uint8_t tenspot_dsw_read();
void konami_sound_control_w(uint8_t data);
uint8_t konami_sound_timer_r();
void konami_portc_0_w(uint8_t data);
void konami_portc_1_w(uint8_t data);
void theend_coin_counter_w(uint8_t data);
uint8_t explorer_sound_latch_r();
- void sfx_sample_control_w(uint8_t data);
- void monsterz_porta_1_w(uint8_t data);
- void monsterz_portb_1_w(uint8_t data);
- void monsterz_portc_1_w(uint8_t data);
uint8_t frogger_sound_timer_r();
- uint8_t scorpion_protection_r();
- void scorpion_protection_w(uint8_t data);
- void scorpion_digitalker_control_w(uint8_t data);
- void kingball_dac_w(uint8_t data);
- void moonwar_port_select_w(uint8_t data);
- void init_fourplay();
- void init_videight();
void init_galaxian();
void init_nolock();
void init_azurian();
- void init_pisces();
void init_batman2();
void init_highroll();
void init_frogg();
@@ -193,29 +159,19 @@ public:
void init_mooncrgx();
void init_moonqsr();
void init_pacmanbl();
- void init_tenspot();
- void init_devilfsg();
- void init_bagmanmc();
- void init_zigzag();
void init_jumpbug();
void init_checkman();
void init_checkmaj();
void init_dingo();
void init_dingoe();
void init_kong();
- void init_mshuttle();
- void init_mshuttlj();
void init_fantastc();
void init_timefgtr();
- void init_kingball();
void init_theend();
void init_scramble();
- void init_sidam();
void init_explorer();
- void init_amigo2();
void init_mandinga();
void init_mandingaeg();
- void init_sfx();
void init_atlantis();
void init_scobra();
void init_scobrae();
@@ -225,14 +181,12 @@ public:
void init_froggers();
void init_quaak();
void init_turtles();
- void init_scorpion();
void init_ckongs();
void init_ckonggx();
void init_anteater();
void init_anteateruk();
void init_superbon();
void init_calipso();
- void init_moonwar();
void init_ghostmun();
void init_froggrs();
void init_warofbugg();
@@ -240,14 +194,12 @@ public:
void init_mimonkey();
void init_mimonkeyb();
void init_victoryc();
+
TILE_GET_INFO_MEMBER(bg_get_tile_info);
void galaxian_palette(palette_device &palette);
- void moonwar_palette(palette_device &palette);
void eagle_palette(palette_device &palette);
- void tenspot_set_game_bank(int bank, int from_game);
uint32_t screen_update_galaxian(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(vblank_interrupt_w);
- DECLARE_INPUT_CHANGED_MEMBER(tenspot_fake);
TIMER_DEVICE_CALLBACK_MEMBER(checkmaj_irq0_gen);
TIMER_DEVICE_CALLBACK_MEMBER(scramble_stars_blink_timer);
TIMER_DEVICE_CALLBACK_MEMBER(timefgtr_scanline);
@@ -265,22 +217,18 @@ public:
void anteater_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void jumpbug_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void turtles_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void sfx_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
void frogger_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
inline void galaxian_draw_pixel(bitmap_rgb32 &bitmap, const rectangle &cliprect, int y, int x, rgb_t color);
void galaxian_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y);
void mshuttle_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y);
void scramble_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y);
void theend_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &cliprect, int offs, int x, int y);
+ void empty_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
+ void empty_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
void upper_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
void upper_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
void frogger_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
void frogger_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
- void gmgalax_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
- void gmgalax_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
- void pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
- void pisces_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
void batman2_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
void mooncrst_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
void mooncrst_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
@@ -293,9 +241,7 @@ public:
void jumpbug_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
void mimonkey_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
void mimonkey_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
- void namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
- void namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
- void monsterz_set_latch();
+ void guttangt_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
void decode_mooncrst(int length, uint8_t *dest);
void decode_checkman();
void decode_dingoe();
@@ -306,9 +252,11 @@ public:
void decode_losttomb_gfx();
void decode_superbon();
void decode_victoryc();
- void mshuttle_decode(const uint8_t convtable[8][16]);
- void common_init(galaxian_draw_bullet_func draw_bullet,galaxian_draw_background_func draw_background,
- galaxian_extend_tile_info_func extend_tile_info,galaxian_extend_sprite_info_func extend_sprite_info);
+ void common_init(
+ draw_bullet_func draw_bullet,
+ draw_background_func draw_background,
+ extend_tile_info_func extend_tile_info,
+ extend_sprite_info_func extend_sprite_info);
void galaxian_base(machine_config &config);
void sidam_bootleg_base(machine_config &config);
void konami_base(machine_config &config);
@@ -328,18 +276,13 @@ public:
void pacmanbl(machine_config &config);
void quaak(machine_config &config);
void galaxian(machine_config &config);
- void pisces(machine_config &config);
void highroll(machine_config &config);
- void tenspot(machine_config &config);
+ void devilfsg(machine_config &config);
void froggers(machine_config &config);
void froggervd(machine_config &config);
- void mshuttle(machine_config &config);
void anteateruk(machine_config &config);
- void monsterz(machine_config &config);
- void kingball(machine_config &config);
void anteaterg(machine_config &config);
void anteater(machine_config &config);
- void moonwar(machine_config &config);
void turpins(machine_config &config);
void explorer(machine_config &config);
void scramble(machine_config &config);
@@ -348,30 +291,22 @@ public:
void froggeram(machine_config &config);
void spactrai(machine_config &config);
void takeoff(machine_config &config);
- void sfx(machine_config &config);
void mooncrst(machine_config &config);
void eagle(machine_config &config);
- void scorpion(machine_config &config);
void ckongs(machine_config &config);
void frogf(machine_config &config);
void amigo2(machine_config &config);
- void zigzag(machine_config &config);
void checkman(machine_config &config);
void jungsub(machine_config &config);
void victoryc(machine_config &config);
void frogg(machine_config &config);
void mandingarf(machine_config &config);
void thepitm(machine_config &config);
- void porter(machine_config &config);
- void skybase(machine_config &config);
void kong(machine_config &config);
void bongo(machine_config &config);
void scorpnmc(machine_config &config);
void ckongg(machine_config &config);
void ckongmc(machine_config &config);
- void bagmanmc(machine_config &config);
- void fourplay(machine_config &config);
- void videight(machine_config &config);
void astroamb(machine_config &config);
void mimonkey(machine_config &config);
void mimonscr(machine_config &config);
@@ -380,13 +315,19 @@ public:
template <int Mask> DECLARE_READ_LINE_MEMBER(ckongs_coinage_r);
protected:
+ // machine configuration helpers
+ void set_irq_line(int line) { m_irq_line = line; }
+ void set_bullets_base(int base) { m_bullets_base = base; }
+ void set_num_spritegens(int num) { m_numspritegens = num; }
+ void set_x_scale(uint8_t scale) { m_x_scale = scale; }
+ void set_h0_start(uint8_t start) { m_h0_start = start; }
+ void set_left_sprite_clip(uint8_t clip) { m_leftspriteclip = clip; }
+
void amigo2_map(address_map &map);
void anteaterg_map(address_map &map);
void anteatergg_map(address_map &map);
void anteateruk_map(address_map &map);
void astroamb_map(address_map &map);
- void bagmanmc_map(address_map &map);
- void bagmanmc_io_map(address_map &map);
void bongo_map(address_map &map);
void bongo_io_map(address_map &map);
void checkmaj_sound_map(address_map &map);
@@ -413,58 +354,42 @@ protected:
void jumpbug_map(address_map &map);
void jungsub_map(address_map &map);
void jungsub_io_map(address_map &map);
- void kingball_sound_map(address_map &map);
- void kingball_sound_portmap(address_map &map);
void konami_sound_map(address_map &map);
void konami_sound_portmap(address_map &map);
void kong_map(address_map &map);
void mandingarf_map(address_map &map);
void mimonkey_map(address_map &map);
void mimonscr_map(address_map &map);
- void monsterz_map(address_map &map);
- void monsterz_sound_map(address_map &map);
void mooncrst_map(address_map &map);
void mooncrst_map_base(address_map &map);
void mooncrst_map_discrete(address_map &map);
void moonqsr_decrypted_opcodes_map(address_map &map);
- void mshuttle_decrypted_opcodes_map(address_map &map);
- void mshuttle_map(address_map &map);
- void mshuttle_portmap(address_map &map);
void ozon1_map(address_map &map);
void ozon1_io_map(address_map &map);
- void pisces_map(address_map &map);
- void porter_map(address_map &map);
void scobra_map(address_map &map);
- void scorpion_map(address_map &map);
- void scorpion_sound_map(address_map &map);
- void scorpion_sound_portmap(address_map &map);
void scorpnmc_map(address_map &map);
- void sfx_map(address_map &map);
- void sfx_sample_map(address_map &map);
- void sfx_sample_portmap(address_map &map);
- void skybase_map(address_map &map);
void spactrai_map(address_map &map);
void takeoff_sound_map(address_map &map);
void takeoff_sound_portmap(address_map &map);
- void tenspot_select_map(address_map &map);
void theend_map(address_map &map);
void thepitm_map(address_map &map);
void turpins_map(address_map &map);
void turpins_sound_map(address_map &map);
void turtles_map(address_map &map);
void victoryc_map(address_map &map);
- void zigzag_map(address_map &map);
- virtual void machine_start() override { m_lamps.resolve(); }
+ virtual void machine_start() override
+ {
+ m_lamps.resolve();
+
+ m_irq_enabled = 0;
+ }
virtual void video_start() override;
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_audiocpu;
- optional_device<cpu_device> m_audio2;
- optional_device<dac_byte_interface> m_dac;
optional_device_array<ay8910_device, 3> m_ay8910;
optional_device<ay8910_device> m_ay8910_cclimber;
- optional_device<digitalker_device> m_digitalker;
optional_device_array<i8255_device, 3> m_ppi8255;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
@@ -473,43 +398,29 @@ protected:
optional_device<netlist_mame_sound_device> m_netlist;
optional_device_array<netlist_mame_logic_input_device, 12> m_filter_ctl;
optional_ioport m_ckong_coinage;
- optional_ioport m_fake_select;
- optional_ioport_array<10> m_tenspot_game_dsw;
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_videoram;
- optional_shared_ptr<uint8_t> m_exattrram; // belongs in namenayo_state but the callbacks are problematic as things are set up
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
output_finder<2> m_lamps;
- memory_bank_creator m_bank1;
-
- int m_bullets_base;
- int m_sprites_base;
- int m_numspritegens;
- int m_counter_74ls161[2];
- int m_direction[2];
- uint8_t m_zigzag_ay8910_latch;
- uint8_t m_kingball_speech_dip;
- uint8_t m_kingball_sound;
- uint8_t m_mshuttle_ay8910_cs;
+ int m_bullets_base = 0x60;
+ int m_sprites_base = 0x40;
+ int m_numspritegens = 1;
uint16_t m_protection_state;
uint8_t m_protection_result;
uint8_t m_konami_sound_control;
- uint8_t m_sfx_sample_control;
- uint8_t m_moonwar_port_select;
uint8_t m_irq_enabled;
- int m_irq_line;
- int m_tenspot_current_game;
- uint8_t m_frogger_adjust;
- uint8_t m_x_scale;
- uint8_t m_h0_start;
- uint8_t m_sfx_tilemap;
-
- galaxian_extend_tile_info_func m_extend_tile_info_ptr;
- galaxian_extend_sprite_info_func m_extend_sprite_info_ptr;
- galaxian_draw_bullet_func m_draw_bullet_ptr;
- galaxian_draw_background_func m_draw_background_ptr;
+ int m_irq_line = INPUT_LINE_NMI;
+ uint8_t m_frogger_adjust = false;
+ uint8_t m_x_scale = GALAXIAN_XSCALE;
+ uint8_t m_h0_start = GALAXIAN_H0START;
+ uint8_t m_sfx_tilemap = false;
+
+ extend_tile_info_delegate m_extend_tile_info_ptr;
+ extend_sprite_info_delegate m_extend_sprite_info_ptr;
+ draw_bullet_delegate m_draw_bullet_ptr;
+ draw_background_delegate m_draw_background_ptr;
tilemap_t *m_bg_tilemap;
uint8_t m_flipscreen_x;
@@ -526,24 +437,40 @@ protected:
uint8_t m_stars_blink_state;
rgb_t m_bullet_color[8];
uint8_t m_gfxbank[5];
- uint8_t m_leftspriteclip;
+ uint8_t m_leftspriteclip = 16;
+};
- void fourplay_rombank_w(offs_t offset, uint8_t data);
- void videight_rombank_w(offs_t offset, uint8_t data);
- void videight_gfxbank_w(offs_t offset, uint8_t data);
- void videight_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
- void videight_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
- void fourplay_map(address_map &map);
- void videight_map(address_map &map);
+
+class bagmanmc_state : public galaxian_state
+{
+public:
+ bagmanmc_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ {
+ }
+
+ void bagmanmc(machine_config &config);
+ void init_bagmanmc();
+
+protected:
+ void bagmanmc_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
+ void bagmanmc_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
+
+private:
+ void bagmanmc_map(address_map &map);
+ void bagmanmc_io_map(address_map &map);
};
-class gmgalax_state : public galaxian_state
+
+class gmgalax_state : public bagmanmc_state
{
public:
gmgalax_state(const machine_config &mconfig, device_type type, const char *tag)
- : galaxian_state(mconfig, type, tag)
+ : bagmanmc_state(mconfig, type, tag)
, m_glin(*this, "GLIN%u", 0U)
, m_gmin(*this, "GMIN%u", 0U)
+ , m_gamesel(*this, "GAMESEL")
+ , m_rombank(*this, "rombank")
{ }
void gmgalax(machine_config &config);
@@ -553,28 +480,360 @@ public:
void init_gmgalax();
+protected:
+ virtual void machine_start() override;
+
private:
- uint8_t m_selected_game;
+ void gmgalax_map(address_map &map);
+
required_ioport_array<3> m_glin;
required_ioport_array<3> m_gmin;
+ required_ioport m_gamesel;
+ required_memory_bank m_rombank;
+
+ uint8_t m_selected_game;
+};
+
+
+class pisces_state : public galaxian_state
+{
+public:
+ pisces_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ {
+ }
+
+ void pisces(machine_config &config);
+ void porter(machine_config &config);
+ void skybase(machine_config &config);
+
+ void init_pisces();
+
+protected:
+ void pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
+ void pisces_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
+
+private:
+ void pisces_map(address_map &map);
+ void skybase_map(address_map &map);
+ void porter_map(address_map &map);
+};
+
+
+class fourplay_state : public pisces_state
+{
+public:
+ fourplay_state(const machine_config &mconfig, device_type type, const char *tag)
+ : pisces_state(mconfig, type, tag)
+ , m_rombank(*this, "rombank")
+ {
+ }
+
+ void fourplay(machine_config &config);
+ void init_fourplay();
+
+private:
+ void fourplay_rombank_w(offs_t offset, uint8_t data);
+ void fourplay_map(address_map &map);
+
+ required_memory_bank m_rombank;
+};
+
+
+class mshuttle_state : public galaxian_state
+{
+public:
+ mshuttle_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ {
+ }
+
+ void mshuttle(machine_config &config);
+
+ void init_mshuttle();
+ void init_mshuttlj();
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void ay8910_cs_w(uint8_t data);
+ void ay8910_control_w(uint8_t data);
+ void ay8910_data_w(uint8_t data);
+ uint8_t ay8910_data_r();
+
+ void mshuttle_map(address_map &map);
+ void mshuttle_decrypted_opcodes_map(address_map &map);
+ void mshuttle_portmap(address_map &map);
+
+ void mshuttle_decode(const uint8_t convtable[8][16]);
+
+ uint8_t m_ay8910_cs;
};
+
+class kingball_state : public galaxian_state
+{
+public:
+ kingball_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_dac(*this, "dac")
+ , m_mux_port(*this, "FAKE")
+ {
+ }
+
+ DECLARE_READ_LINE_MEMBER(muxbit_r);
+ DECLARE_READ_LINE_MEMBER(noise_r);
+
+ void kingball(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void speech_dip_w(uint8_t data);
+ void sound1_w(uint8_t data);
+ void sound2_w(uint8_t data);
+ void dac_w(uint8_t data);
+
+ void kingball_map(address_map &map);
+ void kingball_sound_map(address_map &map);
+ void kingball_sound_portmap(address_map &map);
+
+ required_device<dac_byte_interface> m_dac;
+ required_ioport m_mux_port;
+
+ uint8_t m_speech_dip;
+ uint8_t m_sound;
+};
+
+
class namenayo_state : public galaxian_state
{
public:
namenayo_state(const machine_config &mconfig, device_type type, const char *tag)
: galaxian_state(mconfig, type, tag)
+ , m_exattrram(*this, "extattrram")
{
- m_leftspriteclip = 0;
}
void namenayo(machine_config &config);
void init_namenayo();
private:
+ void namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
+ void namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
void namenayo_map(address_map &map);
void namenayo_extattr_w(offs_t offset, uint8_t data);
void namenayo_unk_d800_w(uint8_t data);
+
+ required_shared_ptr<uint8_t> m_exattrram;
+};
+
+
+class tenspot_state : public galaxian_state
+{
+public:
+ tenspot_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_game_dsw(*this, "IN2_GAME%u", 0U)
+ , m_mainbank(*this, "mainbank")
+ {
+ }
+
+ DECLARE_INPUT_CHANGED_MEMBER(tenspot_fake);
+
+ void tenspot(machine_config &config);
+
+ void init_tenspot();
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void unk_6000_w(uint8_t data);
+ void unk_8000_w(uint8_t data);
+ void unk_e000_w(uint8_t data);
+ uint8_t dsw_read();
+
+ void set_game_bank(int bank, bool invalidate_gfx);
+
+ void tenspot_map(address_map &map);
+ void tenspot_select_map(address_map &map);
+
+ required_ioport_array<10> m_game_dsw;
+ required_memory_bank m_mainbank;
+
+ uint8_t m_current_game;
+};
+
+
+class zigzagb_state : public galaxian_state
+{
+public:
+ zigzagb_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_rombanks(*this, "bank%u", 1U)
+ {
+ }
+
+ void zigzag(machine_config &config);
+ void init_zigzag();
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void bankswap_w(uint8_t data);
+ void ay8910_w(offs_t offset, uint8_t data);
+ void zigzag_map(address_map &map);
+
+ required_memory_bank_array<2> m_rombanks;
+ uint8_t m_ay8910_latch;
+};
+
+
+class videight_state : public galaxian_state
+{
+public:
+ videight_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_rombank(*this, "rombank")
+ {
+ }
+
+ void videight(machine_config &config);
+ void init_videight();
+
+private:
+ void videight_rombank_w(offs_t offset, uint8_t data);
+ void videight_gfxbank_w(offs_t offset, uint8_t data);
+ void videight_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y);
+ void videight_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color);
+ void videight_map(address_map &map);
+
+ required_memory_bank m_rombank;
+};
+
+
+class guttangt_state : public galaxian_state
+{
+public:
+ guttangt_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_rombank(*this, "rombank")
+ {
+ }
+
+ void guttangt(machine_config &config);
+ void init_guttangt();
+
+private:
+ void guttangt_map(address_map &map);
+ void guttangt_rombank_w(uint8_t data);
+
+ required_memory_bank m_rombank;
+};
+
+
+class zac_scorpion_state : public galaxian_state
+{
+public:
+ zac_scorpion_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_digitalker(*this, "digitalker")
+ {
+ }
+
+ void scorpion(machine_config &config);
+ void init_scorpion();
+
+private:
+ uint8_t ay8910_r(offs_t offset);
+ void ay8910_w(offs_t offset, uint8_t data);
+ uint8_t digitalker_intr_r();
+ void digitalker_control_w(uint8_t data);
+ uint8_t protection_r();
+ void protection_w(uint8_t data);
+
+ void scorpion_map(address_map &map);
+ void scorpion_sound_map(address_map &map);
+ void scorpion_sound_portmap(address_map &map);
+
+ required_device<digitalker_device> m_digitalker;
+};
+
+
+class taiyo_sfx_state : public galaxian_state
+{
+public:
+ taiyo_sfx_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_audio2(*this, "audio2")
+ , m_dac(*this, "dac")
+ {
+ }
+
+ void sfx(machine_config &config);
+ void monsterz(machine_config &config);
+
+ void init_sfx();
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ uint8_t sample_io_r(offs_t offset);
+ void sample_io_w(offs_t offset, uint8_t data);
+ void sample_control_w(uint8_t data);
+
+ uint8_t monsterz_protection_r();
+ void monsterz_porta_1_w(uint8_t data);
+ void monsterz_portb_1_w(uint8_t data);
+ void monsterz_portc_1_w(uint8_t data);
+ void monsterz_set_latch();
+
+ void sfx_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ void sfx_map(address_map &map);
+ void sfx_sample_map(address_map &map);
+ void sfx_sample_portmap(address_map &map);
+ void monsterz_map(address_map &map);
+ void monsterz_sound_map(address_map &map);
+
+ required_device<cpu_device> m_audio2;
+ required_device<dac_byte_interface> m_dac;
+
+ uint8_t m_sample_control;
+};
+
+
+class moonwar_state : public galaxian_state
+{
+public:
+ moonwar_state(const machine_config &mconfig, device_type type, const char *tag)
+ : galaxian_state(mconfig, type, tag)
+ , m_dials(*this, "P%u_DIAL", 1U)
+ {
+ }
+
+ DECLARE_CUSTOM_INPUT_MEMBER(dial_r);
+
+ void moonwar(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ void port_select_w(uint8_t data);
+ void moonwar_palette(palette_device &palette);
+
+ required_ioport_array<2> m_dials;
+
+ uint8_t m_port_select;
+ uint8_t m_direction[2];
+ uint8_t m_counter_74ls161[2];
};
#endif // MAME_INCLUDES_GALAXIAN_H
diff --git a/src/mame/includes/galaxold.h b/src/mame/includes/galaxold.h
index f9c70f8c9b2..cf2f7b61b64 100644
--- a/src/mame/includes/galaxold.h
+++ b/src/mame/includes/galaxold.h
@@ -46,7 +46,6 @@ public:
, m_spriteram2(*this,"spriteram2")
, m_attributesram(*this,"attributesram")
, m_bulletsram(*this,"bulletsram")
- , m_rockclim_videoram(*this,"rockclim_vram")
, m_racknrol_tiles_bank(*this,"racknrol_tbank")
, m_leds(*this, "led%u", 0U)
, m_leftclip(2)
@@ -67,14 +66,12 @@ public:
optional_shared_ptr<uint8_t> m_spriteram2;
required_shared_ptr<uint8_t> m_attributesram;
optional_shared_ptr<uint8_t> m_bulletsram;
- optional_shared_ptr<uint8_t> m_rockclim_videoram;
optional_shared_ptr<uint8_t> m_racknrol_tiles_bank;
output_finder<2> m_leds;
int m_irq_line;
uint8_t m__4in1_bank;
tilemap_t *m_bg_tilemap;
- tilemap_t *m_rockclim_tilemap;
int m_spriteram2_present;
uint8_t m_gfxbank[5];
uint8_t m_flipscreen_x;
@@ -98,8 +95,6 @@ public:
uint8_t m_background_green;
uint8_t m_background_blue;
void (galaxold_state::*m_draw_background)(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); /* function to call to draw the background */
- uint16_t m_rockclim_v;
- uint16_t m_rockclim_h;
int m_dambustr_bg_split_line;
int m_dambustr_bg_color_1;
int m_dambustr_bg_color_2;
@@ -147,10 +142,6 @@ public:
void galaxold_stars_enable_w(uint8_t data);
void darkplnt_bullet_color_w(uint8_t data);
void galaxold_gfxbank_w(offs_t offset, uint8_t data);
- void rockclim_videoram_w(offs_t offset, uint8_t data);
- void rockclim_scroll_w(offs_t offset, uint8_t data);
- void guttang_rombank_w(uint8_t data);
- uint8_t rockclim_videoram_r(offs_t offset);
void dambustr_bg_split_line_w(uint8_t data);
void dambustr_bg_color_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER(galaxold_7474_9m_2_q_callback);
@@ -163,20 +154,18 @@ public:
void init_bullsdrtg();
void init_ladybugg();
void init_4in1();
- void init_guttangt();
TILE_GET_INFO_MEMBER(drivfrcg_get_tile_info);
TILE_GET_INFO_MEMBER(racknrol_get_tile_info);
TILE_GET_INFO_MEMBER(dambustr_get_tile_info2);
TILE_GET_INFO_MEMBER(get_tile_info);
- TILE_GET_INFO_MEMBER(rockclim_get_tile_info);
TILE_GET_INFO_MEMBER(harem_get_tile_info);
DECLARE_MACHINE_RESET(galaxold);
DECLARE_MACHINE_RESET(hunchbkg);
void galaxold_palette(palette_device &palette);
- void rockclim_palette(palette_device &palette) const;
+ void s2650_palette(palette_device &palette) const;
void scrambold_palette(palette_device &palette);
void stratgyx_palette(palette_device &palette);
void darkplnt_palette(palette_device &palette) const;
@@ -195,7 +184,6 @@ public:
DECLARE_VIDEO_START(pisces);
DECLARE_VIDEO_START(dkongjrm);
DECLARE_VIDEO_START(dkongjrmc);
- DECLARE_VIDEO_START(rockclim);
DECLARE_VIDEO_START(galaxold_plain);
DECLARE_VIDEO_START(ckongs);
DECLARE_VIDEO_START(darkplnt);
@@ -221,8 +209,6 @@ public:
void video_start_common();
void pisces_modify_spritecode(uint8_t *spriteram, int *code, int *flipx, int *flipy, int offs);
void mooncrst_modify_spritecode(uint8_t *spriteram, int *code, int *flipx, int *flipy, int offs);
- void rockclim_draw_background(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void rockclim_modify_spritecode(uint8_t *spriteram, int *code, int *flipx, int *flipy, int offs);
void harem_modify_spritecode(uint8_t *spriteram, int *code, int *flipx, int *flipy, int offs);
void mooncrst_modify_charcode(uint16_t *code, uint8_t x);
void pisces_modify_charcode(uint16_t *code, uint8_t x);
@@ -277,12 +263,10 @@ public:
void dkongjrmc(machine_config &config);
void bullsdrtg(machine_config &config);
void drivfrcg(machine_config &config);
- void rockclim(machine_config &config);
void scramblb(machine_config &config);
void scramb2(machine_config &config);
void scramb3(machine_config &config);
void mooncrst(machine_config &config);
- void guttang(machine_config &config);
void galaxian_audio(machine_config &config);
void mooncrst_audio(machine_config &config);
void _4in1_map(address_map &map);
@@ -292,7 +276,6 @@ public:
void drivfrcg_program(address_map &map);
void drivfrcg_io(address_map &map);
void galaxold_map(address_map &map);
- void guttang_map(address_map &map);
void hexpoola_data(address_map &map);
void hexpoola_io(address_map &map);
void hunchbkg_map(address_map &map);
@@ -301,7 +284,6 @@ public:
void mooncrst_map(address_map &map);
void racknrol_map(address_map &map);
void racknrol_io(address_map &map);
- void rockclim_map(address_map &map);
void scramb_common_map(address_map &map);
void scramb2_map(address_map &map);
void scramb3_map(address_map &map);
diff --git a/src/mame/includes/gameplan.h b/src/mame/includes/gameplan.h
index ed399a51857..e20565a61c4 100644
--- a/src/mame/includes/gameplan.h
+++ b/src/mame/includes/gameplan.h
@@ -81,6 +81,7 @@ private:
uint8_t m_video_y;
uint8_t m_video_command;
uint8_t m_video_data;
+ uint8_t m_video_previous;
/* devices */
optional_device<cpu_device> m_audiocpu;
diff --git a/src/mame/includes/inufuku.h b/src/mame/includes/inufuku.h
deleted file mode 100644
index e3a0fc4bf61..00000000000
--- a/src/mame/includes/inufuku.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Takahiro Nogi
-#ifndef MAME_INCLUDES_INUFUKU_H
-#define MAME_INCLUDES_INUFUKU_H
-
-#include "video/vsystem_spr.h"
-#include "machine/gen_latch.h"
-#include "emupal.h"
-#include "tilemap.h"
-
-class inufuku_state : public driver_device
-{
-public:
- inufuku_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_bg_videoram(*this, "bg_videoram"),
- m_bg_rasterram(*this, "bg_rasterram"),
- m_tx_videoram(*this, "tx_videoram"),
- m_spriteram1(*this, "spriteram1"),
- m_spriteram2(*this, "spriteram2"),
- m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette"),
- m_spr(*this, "vsystem_spr"),
- m_soundlatch(*this, "soundlatch") { }
-
- void inufuku(machine_config &config);
- void _3on3dunk(machine_config &config);
-
- DECLARE_READ_LINE_MEMBER(soundflag_r);
-
-private:
- /* memory pointers */
- required_shared_ptr<uint16_t> m_bg_videoram;
- required_shared_ptr<uint16_t> m_bg_rasterram;
- required_shared_ptr<uint16_t> m_tx_videoram;
- required_shared_ptr<uint16_t> m_spriteram1;
- required_shared_ptr<uint16_t> m_spriteram2;
-
- /* video-related */
- tilemap_t *m_bg_tilemap;
- tilemap_t *m_tx_tilemap;
- int m_bg_scrollx;
- int m_bg_scrolly;
- int m_tx_scrollx;
- int m_tx_scrolly;
- int m_bg_raster;
- int m_bg_palettebank;
- int m_tx_palettebank;
- std::unique_ptr<uint16_t[]> m_spriteram1_old;
- uint32_t inufuku_tile_callback( uint32_t code );
-
- /* devices */
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audiocpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
- required_device<vsystem_spr_device> m_spr;
- required_device<generic_latch_8_device> m_soundlatch;
-
- void inufuku_soundrombank_w(uint8_t data);
- void inufuku_palettereg_w(offs_t offset, uint16_t data);
- void inufuku_scrollreg_w(offs_t offset, uint16_t data);
- uint16_t inufuku_bg_videoram_r(offs_t offset);
- void inufuku_bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- uint16_t inufuku_tx_videoram_r(offs_t offset);
- void inufuku_tx_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- TILE_GET_INFO_MEMBER(get_inufuku_bg_tile_info);
- TILE_GET_INFO_MEMBER(get_inufuku_tx_tile_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- uint32_t screen_update_inufuku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE_LINE_MEMBER(screen_vblank_inufuku);
- void inufuku_map(address_map &map);
- void inufuku_sound_io_map(address_map &map);
- void inufuku_sound_map(address_map &map);
-};
-
-#endif // MAME_INCLUDES_INUFUKU_H
diff --git a/src/mame/includes/m79amb.h b/src/mame/includes/m79amb.h
index 79579cf7510..1dce0eb9edc 100644
--- a/src/mame/includes/m79amb.h
+++ b/src/mame/includes/m79amb.h
@@ -5,6 +5,7 @@
#pragma once
+#include "cpu/i8085/i8085.h"
#include "sound/discrete.h"
class m79amb_state : public driver_device
@@ -30,8 +31,7 @@ private:
void m79amb_8000_w(uint8_t data);
void m79amb_8002_w(uint8_t data);
void m79amb_8003_w(uint8_t data);
-
- INTERRUPT_GEN_MEMBER(m79amb_interrupt);
+ uint8_t inta_r();
void machine_start() override;
@@ -42,7 +42,7 @@ private:
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_mask;
required_device<discrete_device> m_discrete;
- required_device<cpu_device> m_maincpu;
+ required_device<i8080_cpu_device> m_maincpu;
output_finder<> m_self_test;
diff --git a/src/mame/includes/mbee.h b/src/mame/includes/mbee.h
index f1248babb4c..404601064ab 100644
--- a/src/mame/includes/mbee.h
+++ b/src/mame/includes/mbee.h
@@ -65,7 +65,10 @@ public:
, m_bankr(*this, "bankr%d", 0U)
, m_bankw(*this, "bankw%d", 0U)
, m_pak(*this, "optrom%u", 0U) // "rom" causes issues
- { }
+ {
+ for (u8 n : m_pak_extended)
+ m_pak_extended[n] = 0;
+ }
void mbee56(machine_config &config);
void mbeeppc(machine_config &config);
@@ -76,6 +79,7 @@ public:
void mbeeic(machine_config &config);
void mbeepc85(machine_config &config);
void mbee128p(machine_config &config);
+ void mbeepp(machine_config &config);
void remove_carts(machine_config &config);
void remove_quick(machine_config &config);
@@ -122,8 +126,10 @@ private:
uint32_t screen_update_mbee(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(newkb_timer);
image_init_result load_cart(device_image_interface &image, generic_slot_device *slot, u8);
+ void unload_cart(u8);
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
template <u8 T> DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pak_load) { return load_cart(image, m_pak[T], T); }
+ template <u8 T> DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(pak_unload) { unload_cart(T); }
WRITE_LINE_MEMBER(rtc_irq_w);
WRITE_LINE_MEMBER(fdc_intrq_w);
WRITE_LINE_MEMBER(fdc_drq_w);
@@ -134,6 +140,7 @@ private:
required_device<palette_device> m_palette;
void mbee128_io(address_map &map);
+ void mbee128p_io(address_map &map);
void mbee256_io(address_map &map);
void mbee256_mem(address_map &map);
void mbee56_io(address_map &map);
diff --git a/src/mame/includes/mermaid.h b/src/mame/includes/mermaid.h
index be883de73fb..228f34f52fb 100644
--- a/src/mame/includes/mermaid.h
+++ b/src/mame/includes/mermaid.h
@@ -38,6 +38,7 @@ public:
m_palette(*this, "palette"),
m_latch(*this, "latch%u", 1U)
{
+ m_bg_split = 0;
}
void rougien(machine_config &config);
@@ -57,11 +58,15 @@ private:
tilemap_t *m_fg_tilemap;
bitmap_ind16 m_helper;
bitmap_ind16 m_helper2;
+ bitmap_ind16 m_helper_mask;
int m_coll_bit0;
int m_coll_bit1;
int m_coll_bit2;
int m_coll_bit3;
int m_coll_bit6;
+ int m_bg_split;
+ int m_bg_mask;
+ int m_bg_bank;
int m_rougien_gfxbank1;
int m_rougien_gfxbank2;
@@ -99,6 +104,8 @@ private:
DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w);
void mermaid_bg_scroll_w(offs_t offset, uint8_t data);
void mermaid_fg_scroll_w(offs_t offset, uint8_t data);
+ DECLARE_WRITE_LINE_MEMBER(bg_mask_w);
+ DECLARE_WRITE_LINE_MEMBER(bg_bank_w);
DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch1_w);
DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch2_w);
uint8_t mermaid_collision_r();
diff --git a/src/mame/includes/namcos2.h b/src/mame/includes/namcos2.h
index 9181d69f1c6..e0579a37fe2 100644
--- a/src/mame/includes/namcos2.h
+++ b/src/mame/includes/namcos2.h
@@ -114,6 +114,7 @@ public:
void init_valkyrie();
void init_fourtrax();
void init_finalap3();
+ void init_finalap3bl();
void init_luckywld();
void init_assaultj();
void init_dsaberj();
@@ -241,7 +242,9 @@ enum
uint16_t namcos2_68k_key_r(offs_t offset);
void namcos2_68k_key_w(offs_t offset, uint16_t data);
- uint16_t namcos2_finallap_prot_r(offs_t offset);
+ uint16_t namcos2_finallap_prot_r(offs_t offset); // finalap2, finalap3
+ uint16_t finalap3bl_prot_r(); // finalap3bl
+
void GollyGhostUpdateLED_c4(int data);
void GollyGhostUpdateLED_c6(int data);
void GollyGhostUpdateLED_c8(int data);
diff --git a/src/mame/includes/naomi.h b/src/mame/includes/naomi.h
index a128305cb94..620aa13085f 100644
--- a/src/mame/includes/naomi.h
+++ b/src/mame/includes/naomi.h
@@ -28,6 +28,7 @@ naomi.h -> NAOMI includes
#include "machine/jvs13551.h"
#include "machine/m3comm.h"
#include "machine/gunsense.h"
+#include "machine/segashiobd.h"
#include "dc.h"
enum {
@@ -54,6 +55,7 @@ class naomi_state : public dc_state
void naomim2_gun(machine_config &config);
void naomi(machine_config &config);
void naomim1(machine_config &config);
+ void naomim1_hop(machine_config &config);
void naomigd(machine_config &config);
void naomigd_kb(machine_config &config);
void naomim4(machine_config &config);
diff --git a/src/mame/includes/newbrain.h b/src/mame/includes/newbrain.h
index 80eb1dec811..381b8e53682 100644
--- a/src/mame/includes/newbrain.h
+++ b/src/mame/includes/newbrain.h
@@ -30,7 +30,7 @@ public:
m_maincpu(*this, Z80_TAG),
m_cop(*this, COP420_TAG),
m_palette(*this, "palette"),
- m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG),
+ m_exp(*this, "exp"),
m_cassette1(*this, "cassette1"),
m_cassette2(*this, "cassette2"),
m_rs232_v24(*this, RS232_V24_TAG),
diff --git a/src/mame/includes/ojankohs.h b/src/mame/includes/ojankohs.h
index 1d092da76cf..db514b1a319 100644
--- a/src/mame/includes/ojankohs.h
+++ b/src/mame/includes/ojankohs.h
@@ -23,9 +23,6 @@ public:
{ }
void ojankohs(machine_config &config);
- void ccasino(machine_config &config);
- void ojankoc(machine_config &config);
- void ojankoy(machine_config &config);
protected:
ojankohs_state(const machine_config &mconfig, device_type type, const char *tag, uint32_t vramsize, uint32_t pramsize) :
@@ -33,107 +30,85 @@ protected:
m_videoram(*this, "videoram", vramsize, ENDIANNESS_LITTLE),
m_colorram(*this, "colorram", 0x1000, ENDIANNESS_LITTLE),
m_paletteram(*this, "paletteram", pramsize, ENDIANNESS_LITTLE),
+ m_mainbank(*this, "mainbank"),
m_maincpu(*this, "maincpu"),
m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_coin(*this, "coin"),
- m_inputs_p1(*this, {"p1_0", "p1_1", "p1_2", "p1_3"}),
- m_inputs_p2(*this, {"p2_0", "p2_1", "p2_2", "p2_3"}),
+ m_inputs_p1(*this, "p1_%u", 0U),
+ m_inputs_p2(*this, "p2_%u", 0U),
m_inputs_p1_extra(*this, "p1_4"),
m_inputs_p2_extra(*this, "p2_4"),
- m_dsw1(*this, "dsw1"), m_dsw2(*this, "dsw2"),
- m_dsw3(*this, "dsw3"), m_dsw4(*this, "dsw4")
+ m_dsw(*this, "dsw%u", 1U)
{ }
+ virtual void machine_start() override;
virtual void machine_reset() override;
+ virtual void video_start() override;
-private:
- /* memory pointers */
+ void common_state_saving();
+
+ // memory pointers
memory_share_creator<uint8_t> m_videoram;
memory_share_creator<uint8_t> m_colorram;
memory_share_creator<uint8_t> m_paletteram;
+ required_memory_bank m_mainbank;
- /* video-related */
- tilemap_t *m_tilemap;
+ // video-related
+ tilemap_t *m_tilemap;
bitmap_ind16 m_tmpbitmap;
- int m_gfxreg;
- int m_flipscreen;
- int m_flipscreen_old;
- int m_scrollx;
- int m_scrolly;
- int m_screen_refresh;
-
- /* misc */
- uint8_t m_port_select;
- int m_adpcm_reset;
- int m_adpcm_data;
- int m_vclk_left;
-
- /* devices */
+ uint8_t m_gfxreg;
+ uint8_t m_flipscreen;
+ uint8_t m_flipscreen_old;
+ int16_t m_scrollx;
+ int16_t m_scrolly;
+ uint8_t m_screen_refresh;
+
+ // misc
+ uint8_t m_port_select;
+ uint8_t m_adpcm_reset;
+ int m_adpcm_data;
+ uint8_t m_vclk_left;
+
+ // devices
required_device<cpu_device> m_maincpu;
required_device<msm5205_device> m_msm;
optional_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
+
+ // I/O ports
required_ioport m_coin;
required_ioport_array<4> m_inputs_p1;
required_ioport_array<4> m_inputs_p2;
optional_ioport m_inputs_p1_extra;
optional_ioport m_inputs_p2_extra;
- required_ioport m_dsw1;
- required_ioport m_dsw2;
- optional_ioport m_dsw3;
- optional_ioport m_dsw4;
-
- void ojankohs_rombank_w(uint8_t data);
- void ojankoy_rombank_w(uint8_t data);
- void ojankohs_msm5205_w(uint8_t data);
- void ojankoc_ctrl_w(uint8_t data);
+ required_ioport_array<2> m_dsw;
+
+
+ void rombank_w(uint8_t data);
+ void msm5205_w(uint8_t data);
void port_select_w(uint8_t data);
uint8_t keymatrix_p1_r();
uint8_t keymatrix_p2_r();
- uint8_t ojankoc_keymatrix_p1_r();
- uint8_t ojankoc_keymatrix_p2_r();
- uint8_t ccasino_dipsw3_r();
- uint8_t ccasino_dipsw4_r();
- void ojankoy_coinctr_w(uint8_t data);
- void ccasino_coinctr_w(uint8_t data);
- void ojankohs_palette_w(offs_t offset, uint8_t data);
- void ccasino_palette_w(offs_t offset, uint8_t data);
- void ojankoc_palette_w(offs_t offset, uint8_t data);
- void ojankohs_videoram_w(offs_t offset, uint8_t data);
- void ojankohs_colorram_w(offs_t offset, uint8_t data);
- void ojankohs_gfxreg_w(uint8_t data);
- void ojankohs_flipscreen_w(uint8_t data);
- void ojankoc_videoram_w(offs_t offset, uint8_t data);
- void ojankohs_adpcm_reset_w(uint8_t data);
- uint8_t ojankohs_dipsw1_r();
- uint8_t ojankohs_dipsw2_r();
- TILE_GET_INFO_MEMBER(ojankohs_get_tile_info);
- TILE_GET_INFO_MEMBER(ojankoy_get_tile_info);
- DECLARE_MACHINE_START(ojankohs);
- DECLARE_VIDEO_START(ojankohs);
- DECLARE_MACHINE_START(ojankoy);
- DECLARE_VIDEO_START(ojankoy);
- void ojankoy_palette(palette_device &palette) const;
- DECLARE_VIDEO_START(ccasino);
- DECLARE_MACHINE_START(ojankoc);
- DECLARE_VIDEO_START(ojankoc);
- DECLARE_MACHINE_START(common);
- uint32_t screen_update_ojankohs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_ojankoc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void ojankoc_flipscreen(int data);
- DECLARE_WRITE_LINE_MEMBER(ojankohs_adpcm_int);
-
- void ccasino_io_map(address_map &map);
- void ojankoc_io_map(address_map &map);
- void ojankoc_map(address_map &map);
- void ojankohs_io_map(address_map &map);
- void ojankohs_map(address_map &map);
- void ojankoy_io_map(address_map &map);
- void ojankoy_map(address_map &map);
+ void videoram_w(offs_t offset, uint8_t data);
+ void colorram_w(offs_t offset, uint8_t data);
+ void flipscreen_w(uint8_t data);
+ void adpcm_reset_w(uint8_t data);
+ TILE_GET_INFO_MEMBER(get_tile_info);
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ DECLARE_WRITE_LINE_MEMBER(adpcm_int);
+
+private:
+ void palette_w(offs_t offset, uint8_t data);
+ uint8_t dipsw1_r();
+ uint8_t dipsw2_r();
+ void gfxreg_w(uint8_t data);
+
+ void io_map(address_map &map);
+ void map(address_map &map);
};
class ojankoy_state : public ojankohs_state
@@ -142,14 +117,45 @@ public:
ojankoy_state(const machine_config &mconfig, device_type type, const char *tag) :
ojankohs_state(mconfig, type, tag, 0x2000, 0x800)
{ }
+
+ void ojankoy(machine_config &config);
+
+protected:
+ ojankoy_state(const machine_config &mconfig, device_type type, const char *tag, uint32_t vramsize, uint32_t pramsize) :
+ ojankohs_state(mconfig, type, tag, vramsize, pramsize)
+ { }
+
+ virtual void video_start() override;
+
+ void map(address_map &map);
+
+ void rombank_w(uint8_t data);
+
+private:
+ void coinctr_w(uint8_t data);
+ TILE_GET_INFO_MEMBER(get_tile_info);
+ void palette(palette_device &palette) const;
+ void io_map(address_map &map);
};
-class ccasino_state : public ojankohs_state
+class ccasino_state : public ojankoy_state
{
public:
ccasino_state(const machine_config &mconfig, device_type type, const char *tag) :
- ojankohs_state(mconfig, type, tag, 0x2000, 0x800)
+ ojankoy_state(mconfig, type, tag, 0x2000, 0x800),
+ m_extra_dsw(*this, "dsw%u", 3U)
{ }
+
+ void ccasino(machine_config &config);
+
+private:
+ required_ioport_array<2> m_extra_dsw;
+
+ uint8_t dipsw3_r();
+ uint8_t dipsw4_r();
+ void coinctr_w(uint8_t data);
+ void palette_w(offs_t offset, uint8_t data);
+ void io_map(address_map &map);
};
class ojankoc_state : public ojankohs_state
@@ -158,6 +164,23 @@ public:
ojankoc_state(const machine_config &mconfig, device_type type, const char *tag) :
ojankohs_state(mconfig, type, tag, 0x8000, 0x20)
{ }
+
+ void ojankoc(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void video_start() override;
+
+private:
+ void ctrl_w(uint8_t data);
+ uint8_t keymatrix_p1_r();
+ uint8_t keymatrix_p2_r();
+ void palette_w(offs_t offset, uint8_t data);
+ void videoram_w(offs_t offset, uint8_t data);
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void flipscreen(uint8_t data);
+ void io_map(address_map &map);
+ void map(address_map &map);
};
#endif // MAME_INCLUDES_OJANKOHS_H
diff --git a/src/mame/includes/seta.h b/src/mame/includes/seta.h
index 9bcf747876f..bb290cdc3ba 100644
--- a/src/mame/includes/seta.h
+++ b/src/mame/includes/seta.h
@@ -279,7 +279,7 @@ protected:
u8 m_twineagl_xram[8];
u8 m_twineagl_tilebank[4];
- std::unique_ptr<u16[]> m_downtown_protection;
+ std::unique_ptr<u8[]> m_downtown_protection;
u16 metafox_protection_r(offs_t offset);
void twineagl_tilebank_w(offs_t offset, u8 data);
diff --git a/src/mame/includes/stv.h b/src/mame/includes/stv.h
index b9a1983e225..6b319d59d03 100644
--- a/src/mame/includes/stv.h
+++ b/src/mame/includes/stv.h
@@ -26,7 +26,8 @@ public:
m_cryptdevice(*this, "315_5881"),
m_5838crypt(*this, "315_5838"),
m_hopper(*this, "hopper"),
- m_billboard(*this, "billboard")
+ m_billboard(*this, "billboard"),
+ m_cc_digits(*this, "cc_digit%u", 0U)
{
}
@@ -88,10 +89,15 @@ public:
void init_othellos();
void init_mausuke();
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
uint8_t stv_ioga_r(offs_t offset);
void stv_ioga_w(offs_t offset, uint8_t data);
uint8_t critcrsh_ioga_r(offs_t offset);
+ void critcrsh_ioga_w(offs_t offset, uint8_t data);
uint8_t magzun_ioga_r(offs_t offset);
void magzun_ioga_w(offs_t offset, uint8_t data);
uint8_t stvmp_ioga_r(offs_t offset);
@@ -112,10 +118,6 @@ private:
void install_stvbios_speedups( void );
- DECLARE_MACHINE_START(stv);
- DECLARE_MACHINE_RESET(stv);
-
- DECLARE_MACHINE_RESET(batmanfr);
void batmanfr_sound_comms_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
optional_device<acclaim_rax_device> m_rax;
@@ -149,6 +151,7 @@ private:
optional_device<sega_315_5838_comp_device> m_5838crypt;
optional_device<ticket_dispenser_device> m_hopper;
required_device<sega_billboard_device> m_billboard;
+ output_finder<2> m_cc_digits;
uint16_t crypt_read_callback(uint32_t addr);
uint8_t pdr1_input_r();
diff --git a/src/mame/includes/taitosj.h b/src/mame/includes/taitosj.h
index 158134f42cd..2264e5afd8f 100644
--- a/src/mame/includes/taitosj.h
+++ b/src/mame/includes/taitosj.h
@@ -62,6 +62,7 @@ protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
+ virtual void device_post_load() override;
private:
required_shared_ptr_array<uint8_t, 3> m_videoram;
diff --git a/src/mame/includes/vip.h b/src/mame/includes/vip.h
index 785df2b45ba..7f1013779e2 100644
--- a/src/mame/includes/vip.h
+++ b/src/mame/includes/vip.h
@@ -30,7 +30,7 @@ public:
, m_cassette(*this, "cassette")
, m_beeper(*this, DISCRETE_TAG)
, m_byteio(*this, VIP_BYTEIO_PORT_TAG)
- , m_exp(*this, VIP_EXPANSION_SLOT_TAG)
+ , m_exp(*this, "exp")
, m_ram(*this, RAM_TAG)
, m_rom(*this, CDP1802_TAG)
, m_chip8(*this, "chip8")
diff --git a/src/mame/includes/x68k.h b/src/mame/includes/x68k.h
index f22d422b1c1..45a68de4305 100644
--- a/src/mame/includes/x68k.h
+++ b/src/mame/includes/x68k.h
@@ -198,7 +198,6 @@ protected:
int bg_hshift;
int bg_vshift;
int bg_hvres; // bits 0,1 = H-Res, bits 2,3 = V-Res, bit 4 = L/H Freq (0=15.98kHz, 1=31.5kHz)
- int bg_double; // 1 if PCG is to be doubled.
} m_video;
struct
{
diff --git a/src/mame/layout/critcrsh.lay b/src/mame/layout/critcrsh.lay
new file mode 100644
index 00000000000..3e57192a1e9
--- /dev/null
+++ b/src/mame/layout/critcrsh.lay
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<!--
+license: CC0
+
+Critter Crusher (STV)
+-->
+
+<mamelayout version="2">
+
+ <element name="cc_digit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.1" blue="0.1" />
+ </led7seg>
+ </element>
+
+ <view name="Billboard">
+ <element name="cc_digit0" ref="cc_digit">
+ <bounds x="370" y="30" width="15" height="30" />
+ </element>
+
+ <element name="cc_digit1" ref="cc_digit">
+ <bounds x="400" y="30" width="15" height="30" />
+ </element>
+
+ <screen tag="screen">
+ <bounds left="0" top="100" right="800" bottom="700" />
+ </screen>
+ </view>
+
+</mamelayout>
diff --git a/src/mame/layout/lk3000.lay b/src/mame/layout/lk3000.lay
new file mode 100644
index 00000000000..3c263976ee1
--- /dev/null
+++ b/src/mame/layout/lk3000.lay
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+<mamelayout version="2">
+
+ <element name="digit" defstate="0">
+ <led16seg><color red="1.0" green="0.1" blue="0.1" /></led16seg>
+ </element>
+
+ <view name="Internal Layout">
+ <element name="digit15" ref="digit"><bounds x="0" y="0" width="10" height="15" /></element>
+ <element name="digit14" ref="digit"><bounds x="10" y="0" width="10" height="15" /></element>
+ <element name="digit13" ref="digit"><bounds x="20" y="0" width="10" height="15" /></element>
+ <element name="digit12" ref="digit"><bounds x="30" y="0" width="10" height="15" /></element>
+
+ <element name="digit11" ref="digit"><bounds x="40" y="0" width="10" height="15" /></element>
+ <element name="digit10" ref="digit"><bounds x="50" y="0" width="10" height="15" /></element>
+ <element name="digit9" ref="digit"><bounds x="60" y="0" width="10" height="15" /></element>
+ <element name="digit8" ref="digit"><bounds x="70" y="0" width="10" height="15" /></element>
+
+ <element name="digit7" ref="digit"><bounds x="80" y="0" width="10" height="15" /></element>
+ <element name="digit6" ref="digit"><bounds x="90" y="0" width="10" height="15" /></element>
+ <element name="digit5" ref="digit"><bounds x="100" y="0" width="10" height="15" /></element>
+ <element name="digit4" ref="digit"><bounds x="110" y="0" width="10" height="15" /></element>
+
+ <element name="digit3" ref="digit"><bounds x="120" y="0" width="10" height="15" /></element>
+ <element name="digit2" ref="digit"><bounds x="130" y="0" width="10" height="15" /></element>
+ <element name="digit1" ref="digit"><bounds x="140" y="0" width="10" height="15" /></element>
+ <element name="digit0" ref="digit"><bounds x="150" y="0" width="10" height="15" /></element>
+ </view>
+</mamelayout>
diff --git a/src/mame/machine/apple3.cpp b/src/mame/machine/apple3.cpp
index a875d6dfc9e..13dd3e0ef84 100644
--- a/src/mame/machine/apple3.cpp
+++ b/src/mame/machine/apple3.cpp
@@ -770,20 +770,15 @@ uint8_t apple3_state::apple3_memory_r(offs_t offset)
{
uint8_t rv = 0xff;
- if (m_inh_state)
+ // /INH handling
+ for (int slot = 1; slot < 5; slot++)
{
- for (int slot = 1; slot < 4; slot++)
+ device_a2bus_card_interface *slotdevice = m_a2bus->get_a2bus_card(slot);
+ if (slotdevice != nullptr)
{
- device_a2bus_card_interface *slotdevice = m_a2bus->get_a2bus_card(slot);
- if (slotdevice != nullptr)
+ if (slotdevice->inh_check(offset, false))
{
- if ((slotdevice->inh_type() & INH_READ) == INH_READ)
- {
- if ((offset >= slotdevice->inh_start()) && (offset <= slotdevice->inh_end()))
- {
- return slotdevice->read_inh_rom(offset);
- }
- }
+ return slotdevice->read_inh_rom(offset);
}
}
}
@@ -925,25 +920,6 @@ uint8_t apple3_state::apple3_memory_r(offs_t offset)
void apple3_state::apple3_memory_w(offs_t offset, uint8_t data)
{
- if (m_inh_state)
- {
- for (int slot = 1; slot < 4; slot++)
- {
- device_a2bus_card_interface *slotdevice = m_a2bus->get_a2bus_card(slot);
- if (slotdevice != nullptr)
- {
- if ((slotdevice->inh_type() & INH_WRITE) == INH_WRITE)
- {
- if ((offset >= slotdevice->inh_start()) && (offset <= slotdevice->inh_end()))
- {
- slotdevice->write_inh_rom(offset, data);
- return;
- }
- }
- }
- }
- }
-
if ((m_indir_bank & 0x80) && (offset >= 0x100))
{
uint8_t *test;
@@ -956,6 +932,19 @@ void apple3_state::apple3_memory_w(offs_t offset, uint8_t data)
}
}
+ for (int slot = 1; slot < 5; slot++)
+ {
+ device_a2bus_card_interface *slotdevice = m_a2bus->get_a2bus_card(slot);
+ if (slotdevice != nullptr)
+ {
+ if (slotdevice->inh_check(offset, true))
+ {
+ slotdevice->write_inh_rom(offset, data);
+ return;
+ }
+ }
+ }
+
if (offset < 0x100)
{
*apple3_get_zpa_addr(offset) = data;
diff --git a/src/mame/machine/coco.cpp b/src/mame/machine/coco.cpp
index 9b202c897a5..8e08656f447 100644
--- a/src/mame/machine/coco.cpp
+++ b/src/mame/machine/coco.cpp
@@ -417,8 +417,7 @@ uint8_t coco_state::pia1_pa_r()
{
// Port A: we need to specify the values of all the lines, regardless of whether
// they are in input or output mode in the DDR
- return (m_cassette->input() >= 0 ? 0x01 : 0x00)
- | (dac_output() << 2);
+ return (m_cassette->input() >= 0 ? 0x01 : 0x00) | 0xfe;
}
diff --git a/src/mame/machine/mbee.cpp b/src/mame/machine/mbee.cpp
index 34b7b673093..a70c470c445 100644
--- a/src/mame/machine/mbee.cpp
+++ b/src/mame/machine/mbee.cpp
@@ -370,7 +370,7 @@ void mbee_state::port50_w(u8 data)
Output the PAK number to choose an optional PAK ROM.
The bios will support 256 PAKs, although normally only
- 8 are available in hardware. Each PAK is normally a 8K
+ 6 are available in hardware. Each PAK is normally a 8K
ROM. If 16K ROMs are used, the 2nd half becomes PAK+8,
thus 16 PAKs in total. This is used in the PC85 models.
@@ -386,7 +386,7 @@ void mbee_state::port0a_w(u8 data)
u8 mbee_state::telcom_r(offs_t offset)
{
m_09 = BIT(offset, 8);
- return 0xff;
+ return m_09;
}
u8 mbee_state::pak_r(offs_t offset)
@@ -540,13 +540,14 @@ void mbee_state::machine_start()
// set pak index to true for 16k roms
if (m_pakdef)
for (u8 i = 8; i < 14; i++)
- m_pak_extended[(i & 7)+2] = (m_p_pakdef[(i<<13)] == 0xff) ? false : true;
- else
- for (u8 i = 2; i < 8; i++)
- m_pak_extended[i] = false;
+ if (!(m_pak[i-8] && m_pak[i-8]->exists()))
+ if (m_p_pakdef[(i<<13)] != 0xff)
+ m_pak_extended[(i & 7)+2] = true;
// set net index to true for 8k roms
- m_pak_extended[1] = (m_netdef && (m_netdef->bytes() > 0x1000)) ? true : false;
+ if (m_netdef && (m_netdef->bytes() > 0x1000))
+ if (!(m_pak[1] && m_pak[1]->exists()))
+ m_pak_extended[1] = true;
}
void mbee_state::machine_reset()
@@ -745,10 +746,6 @@ image_init_result mbee_state::load_cart(device_image_interface &image, generic_s
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Not a PAK rom");
slot->call_unload();
- if (m_pakdef)
- m_pak_extended[pak_index] = (m_p_pakdef[((pak_index+8)<<13)] == 0xff) ? false : true;
- else
- m_pak_extended[pak_index] = false;
return image_init_result::FAIL;
}
}
@@ -760,7 +757,6 @@ image_init_result mbee_state::load_cart(device_image_interface &image, generic_s
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported ROM size");
return image_init_result::FAIL;
}
-
m_pak_extended[pak_index] = (size > 0x1000) ? true : false;
slot->rom_alloc(m_pak_extended ? 0x2000 : 0x1000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
@@ -768,15 +764,30 @@ image_init_result mbee_state::load_cart(device_image_interface &image, generic_s
// Validate the rom
logerror ("Rom header = %02X %02X %02X\n", slot->read_rom(0), slot->read_rom(1), slot->read_rom(2));
- if ((slot->read_rom(0) != 0xc3) || ((slot->read_rom(2) & 0xf0) != 0xe0))
+ if (!image.loaded_through_softlist()) // need to let pascal through without testing
{
- image.seterror(IMAGE_ERROR_UNSPECIFIED, "Not a NET rom");
- slot->call_unload();
- m_pak_extended[pak_index] = (m_netdef && (m_netdef->bytes() > 0x1000)) ? true : false;
- return image_init_result::FAIL;
+ if ((slot->read_rom(0) != 0xc3) || ((slot->read_rom(2) & 0xf0) != 0xe0))
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Not a NET rom");
+ slot->call_unload();
+ return image_init_result::FAIL;
+ }
}
}
return image_init_result::PASS;
}
+void mbee_state::unload_cart(u8 pak_index)
+{
+ if (pak_index > 1)
+ {
+ if (m_pakdef)
+ m_pak_extended[pak_index] = (m_p_pakdef[((pak_index+8)<<13)] == 0xff) ? false : true;
+ else
+ m_pak_extended[pak_index] = false;
+ }
+ else
+ m_pak_extended[pak_index] = (m_netdef && (m_netdef->bytes() > 0x1000)) ? true : false;
+}
+
diff --git a/src/mame/machine/pofo_kbd.cpp b/src/mame/machine/pofo_kbd.cpp
new file mode 100644
index 00000000000..c5aa80d0955
--- /dev/null
+++ b/src/mame/machine/pofo_kbd.cpp
@@ -0,0 +1,138 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder,Jaen Saul
+
+#include "emu.h"
+
+#include "machine/pofo_kbd.h"
+
+#include "machine/keyboard.ipp"
+
+DEFINE_DEVICE_TYPE(POFO_KEYBOARD, pofo_keyboard_device, "pofo_keyboard", "Atari Portfolio keyboard");
+
+pofo_keyboard_device::pofo_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, POFO_KEYBOARD, tag, owner, clock),
+ device_matrix_keyboard_interface(mconfig, *this, "Y0", "Y1", "Y2", "Y3", "Y4", "Y5", "Y6", "Y7"),
+ m_int_handler(*this)
+{
+}
+
+void pofo_keyboard_device::trigger()
+{
+ m_int_handler(1);
+ m_int_handler(0);
+}
+
+void pofo_keyboard_device::key_make(u8 row, u8 column)
+{
+ m_data = row * 8 + column;
+ trigger();
+}
+
+void pofo_keyboard_device::key_break(u8 row, u8 column)
+{
+ m_data = 0x80 | (row * 8 + column);
+ trigger();
+}
+
+void pofo_keyboard_device::device_start()
+{
+ m_int_handler.resolve_safe();
+
+ save_item(NAME(m_data));
+}
+
+void pofo_keyboard_device::device_reset()
+{
+ m_data = 0xFF;
+
+ reset_key_state();
+ start_processing(attotime::from_hz(600));
+ typematic_stop();
+}
+
+static INPUT_PORTS_START( keyboard )
+ PORT_START("Y0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Atari") PORT_CODE(KEYCODE_TILDE)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
+
+ PORT_START("Y1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Del Ins") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Alt") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
+
+ PORT_START("Y2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB))
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+
+ PORT_START("Y3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('"') PORT_CHAR('`')
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
+
+ PORT_START("Y4")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+
+ PORT_START("Y5")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('8')
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+
+ PORT_START("Y6")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Fn") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+
+ PORT_START("Y7")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
+INPUT_PORTS_END
+
+ioport_constructor pofo_keyboard_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( keyboard );
+}
diff --git a/src/mame/machine/pofo_kbd.h b/src/mame/machine/pofo_kbd.h
new file mode 100644
index 00000000000..07762ff6af5
--- /dev/null
+++ b/src/mame/machine/pofo_kbd.h
@@ -0,0 +1,39 @@
+// license:BSD-3-Clause
+// copyright-holders:Jaen Saul
+#ifndef MAME_MACHINE_POFO_KBD_H
+#define MAME_MACHINE_POFO_KBD_H
+
+#pragma once
+
+#include "machine/keyboard.h"
+
+class pofo_keyboard_device : public device_t, protected device_matrix_keyboard_interface<8U>
+{
+public:
+ pofo_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ // callbacks
+ auto int_handler() { return m_int_handler.bind(); }
+
+ // from host
+ uint8_t read() { return m_data; }
+
+protected:
+ void key_make(u8 row, u8 column) override;
+ void key_break(u8 row, u8 column) override;
+
+ void device_start() override;
+ void device_reset() override;
+
+ ioport_constructor device_input_ports() const override;
+
+private:
+ devcb_write_line m_int_handler;
+ uint8_t m_data;
+
+ void trigger();
+};
+
+DECLARE_DEVICE_TYPE(POFO_KEYBOARD, pofo_keyboard_device);
+
+#endif // MAME_MACHINE_POFO_KBD_H
diff --git a/src/mame/machine/segashiobd.cpp b/src/mame/machine/segashiobd.cpp
new file mode 100644
index 00000000000..f5c9d632a90
--- /dev/null
+++ b/src/mame/machine/segashiobd.cpp
@@ -0,0 +1,121 @@
+// license:BSD-3-Clause
+// copyright-holders:Samuele Zannoli
+
+#include "emu.h"
+#include "machine/segashiobd.h"
+
+/*
+ 837-14438 SH I/O BD
+
+|-------------------------------------------------------------------------------------|
+| CN3 CN6 CN2 CN1 CN11 |
+| |
+| LED1-5 |
+| |
+| DIPSW1 BT1 OSC1 |
+| |
+| IC3 LED6,7 SW2 |
+| |
+| OSC2 IC8 IC1 IC4 IC5 |
+| |
+|CN5 IC7 |
+| |
+| IC2 |
+| |
+| IC6 |
+| |
+| SW1 |
+| |
+| IC9 |
+| OSC3 |
+| CN4 CN7 CN8 |
+|-------------------------------------------------------------------------------------|
+
+ IC1 - Hitachi/Renesas SH4 SoC
+ IC2 - Xilinx Spartan XC2S50 PQ208AMS0341 FPGA
+ IC3 - Xilinx 17S50APC Spartan-II Family OTP Configuration PROM, stamped 6372A
+ IC4,5 - Toshiba TC59S6432CFT-10 512K x4 banks x32bit SDRAM
+ IC6 - Macronix MX29LV160ATTC-90 16Mbit Flash ROM
+ IC7 - ST M68AF127BL55MC6 1Mbit (128K x8) SRAM
+ IC8 - 42-pin DIP socket, unpopulated
+ IC9 - NS USBN9604-28M USB Node Controller
+ OSC1 - 33.3333 MHz
+ OSC2 - 32.0000 MHz
+ OCS3 - 24.0000 MHz
+ SW1,2 - pushbuttons
+ DIPSW1 - 4x DIP switch
+ LED1-5 - LEDs
+ LED6,7 - 7seg LEDs
+ BT1 - Panasonic CR2032 battery
+
+ CN1 - 8 pin JST VH series connector
+ 1 12V
+ 2 5V
+ 3 5V
+ 4 3.3V
+ 5 3.3V
+ 6 gnd
+ 7 gnd
+ 8 gnd
+
+ CN2 - 4 pin JST VH series connector
+ 1 12V
+ 2 12V
+ 3 gnd
+ 4 gnd
+*/
+
+DEFINE_DEVICE_TYPE(SEGA837_14438, sega_837_14438_device, "sega837_14438", "Sega 837-14438 SH I/O BD")
+
+void sega_837_14438_device::sh4_map(address_map &map)
+{
+ // mirrors only for the debugger
+ map(0x00000000, 0x001fffff).mirror(0xa0000000).rom();
+ map(0x04000000, 0x0401ffff).mirror(0xa0000000).ram();
+ map(0x0c000000, 0x0cffffff).mirror(0x80000000).ram();
+}
+
+#define CPU_CLOCK 200000000 // need to set the correct value here
+
+void sega_837_14438_device::device_add_mconfig(machine_config &config)
+{
+ SH4LE(config, m_maincpu, CPU_CLOCK);
+ m_maincpu->set_md(0, 1);
+ m_maincpu->set_md(1, 0);
+ m_maincpu->set_md(2, 1);
+ m_maincpu->set_md(3, 0);
+ m_maincpu->set_md(4, 0);
+ m_maincpu->set_md(5, 1);
+ m_maincpu->set_md(6, 0);
+ m_maincpu->set_md(7, 1);
+ m_maincpu->set_md(8, 0);
+ m_maincpu->set_sh4_clock(CPU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &sega_837_14438_device::sh4_map);
+}
+
+sega_837_14438_device::sega_837_14438_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, SEGA837_14438, tag, owner, clock),
+ m_maincpu(*this, "shiobdcpu")
+{
+}
+
+void sega_837_14438_device::device_start()
+{
+}
+
+void sega_837_14438_device::device_reset()
+{
+ device_t::device_reset();
+}
+
+ROM_START(segashiobd)
+ ROM_REGION(0x200000, "shiobdcpu", 0)
+ ROM_LOAD("fpr-24150.ic6", 0x0000000, 0x200000, CRC(3845c34c) SHA1(027b17bac64482ee152773d5fab30fcbc6e2bcb7)) // SH4 code
+ ROM_REGION(0x020000, "config_prom", 0)
+ ROM_LOAD("6372a.ic3", 0x0000000, 0x020000, CRC(f30839ad) SHA1(ea1a32c4da1ed9745300bcdd7964a7c0964e3221)) // FPGA configuration prom
+ROM_END
+
+const tiny_rom_entry* sega_837_14438_device::device_rom_region() const
+{
+ return ROM_NAME(segashiobd);
+}
diff --git a/src/mame/machine/segashiobd.h b/src/mame/machine/segashiobd.h
new file mode 100644
index 00000000000..c1bec8871f9
--- /dev/null
+++ b/src/mame/machine/segashiobd.h
@@ -0,0 +1,29 @@
+// license:BSD-3-Clause
+// copyright-holders:Samuele Zannoli
+#ifndef MAME_MACHINE_SEGASHIOBD_H
+#define MAME_MACHINE_SEGASHIOBD_H
+
+#pragma once
+
+#include "cpu/sh/sh4.h"
+
+DECLARE_DEVICE_TYPE(SEGA837_14438, sega_837_14438_device)
+
+class sega_837_14438_device : public device_t
+{
+public:
+ // construction/destruction
+ sega_837_14438_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ void sh4_map(address_map &map);
+
+private:
+ required_device<sh4_device> m_maincpu;
+};
+
+#endif // MAME_MACHINE_SEGASHIOBD_H
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 43808e30faa..1b5fcf12f18 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -1203,6 +1203,7 @@ alphatpc16
@source:alphatro.cpp
alphatro //
+alphatrob //
alphatron //
@source:altair.cpp
@@ -10106,6 +10107,7 @@ ckongpt2b // bootleg
ckongpt2b2 // bootleg
ckongpt2j // (c) 1981 Falcon
ckongpt2jeu // bootleg (Jeutel)
+ckongpt2ss // bootleg (SegaSA / Sonic)
dking // Crazy Kong Bootleg
guzzler // (c) 1983 Tehkan
guzzlers // (c) 1983 Tehkan (Swimmer Conversion)
@@ -14395,6 +14397,7 @@ gteikoku // (c) Irem
gteikokub // bootleg
gteikokub2 // bootleg
gteikokub3 // bootleg (Honly Enterprises)
+guttangt //
highroll //
jumpbug // (c) 1981 Rock-ola
jumpbugb // (c) 1981 Sega
@@ -14555,6 +14558,9 @@ zerotimeu // hack
zigzagb // (c) 1982 LAX (bootleg)
zigzagb2 // (c) 1982 LAX (bootleg)
+@source:galaxian_rockclim.cpp
+rockclim // (c)1981 Taito
+
@source:galaxold.cpp
4in1 // (c) 1981 Armenia / Food and Fun
bullsdrtg // 1985 Senko
@@ -14566,14 +14572,12 @@ drivfrcsg // [1984] Seatongrove
drivfrcsga // [1984] Seatongrove
drivfrct // bootleg
froggerv // bootleg
-guttangt //
hexpool // (c) 1986 Shinkia (Senko Kit)
hexpoola // (c) 1986 Shinkia (Senko Kit)
hunchbgb // bootleg
hunchbkg // (c) 1983 Century
hustlerb3 // bootleg
racknrol // (c) 1986 Status (Shinkia license) (Senko Kit)
-rockclim // (c)1981 Taito
scramb2 // bootleg
scramb3 // bootleg
scramblb // bootleg
@@ -16349,6 +16353,7 @@ trobocop2 // Tiger
trobocop3 // Tiger
trockteer // Tiger
trshutvoy // Tronica
+trspacmis // Tronica
trsrescue // Tronica
tsddragon // Tiger
tsf2010 // Tiger
@@ -19864,6 +19869,9 @@ macxl // 1985 Apple Macintosh XL
@source:littlerb.cpp
littlerb // (c) 1993 TCH
+@source:lk3000.cpp
+lk3000
+
@source:lkage.cpp
bygone // A53 (c) 1985 Taito Corporation - prototype ?
lkage // A54 (c) 1984 Taito Corporation
@@ -22418,8 +22426,6 @@ alice // Matra & Hachette Ordinateur Alice
alice32 // Matra & Hachette Alice 32
alice90 // Matra & Hachette Alice 90
mc10 // MC-10
-mcx128 // MCX-128
-alice128 // Alice with a MCX-128
@source:mc1000.cpp
mc1000 //
@@ -31655,6 +31661,7 @@ driveyes // (c) 1992?
@source:namcos22.cpp
acedrvrw // (c) 1994
adillor // (c) 1997
+adillorj // (c) 1997
airco22b // (c) 1995
alpinerc // (c) 1994
alpinerd // (c) 1994
@@ -33200,6 +33207,7 @@ ccasino // [1987] V-System Co. (Japan)
ojanko2 // [1987] V-System Co. (Japan)
ojankoc // [1986] V-System Co. (Japan)
ojankoca // [1986] V-System Co. (Japan)
+ojankocb // [1986] V-System Co. (Japan)
ojankohs // [1988] V-System Co. (Japan)
ojankoy // [1986] V-System Co. (Japan)
@@ -33433,6 +33441,7 @@ pacmanvg // bootleg (Video Game SA)
pacmod // (c) 1981 Midway
pacplus // (c) 1982 Namco (Midway license)
pacuman // bootleg
+painter // hack
paintrlr // 1981 bootleg
pengojpm // bootleg
pengopac // bootleg
@@ -38215,6 +38224,7 @@ sitcomtmr //
@source:sk1.cpp
sk1 //
sk2 //
+sk5 //
sk10 //
@source:sk101bl.cpp
@@ -39596,6 +39606,7 @@ galpanisa // 1997.04 (c) 1997 Kaneko (Asia)
galpanise // 1997.04 (c) 1997 Kaneko (Europe)
galpanisj // 1997.04 (c) 1997 Kaneko (Japan)
galpanisk // 1997.04 (c) 1997 Kaneko (Korea)
+galpaniska // 1997.04 (c) 1997 Kaneko (Korea)
galpans2 // 1999.?? (c) 1999 Kaneko (Europe)
galpans2a // 1999.?? (c) 1999 Kaneko (Asia)
galpans2j // 1999.02 (c) 1999 Kaneko (Japan)
@@ -40428,6 +40439,7 @@ silkworm // 6217 - (c) 1988 Tecmo
silkwormj // 6217 - (c) 1988 Tecmo
silkwormp // 6217 - (c) 1988 Tecmo
silkwormb // bootleg
+silkwormb2 // bootleg
@source:tecmo16.cpp
fstarfrc // (c) 1992 Tecmo
@@ -43257,6 +43269,12 @@ yes //
yiear // GX407 (c) 1985
yiear2 // GX407 (c) 1985
+@source:yman1x.cpp
+an1x //
+
+@source:ymdx100.cpp
+dx100 //
+
@source:ymdx11.cpp
dx11 //
@@ -43281,6 +43299,9 @@ psr70 // 1985 PSR-70
@source:ympsr340.cpp
psr340 // 1999 PSR-340
+@source:ymsy35.cpp
+sy35 //
+
@source:ymtx81z.cpp
tx81z //
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index 680c4173e04..babfebc8e37 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -536,6 +536,7 @@ lft_phasor.cpp
lg-dvd.cpp
lilith.cpp
lisa.cpp
+lk3000.cpp
llc1.cpp
llc2.cpp
lms46.cpp
@@ -1178,6 +1179,8 @@ xbox.cpp
xerox820.cpp
xor100.cpp
yes.cpp
+yman1x.cpp
+ymdx100.cpp
ymdx11.cpp
ymmu100.cpp
ymmu5.cpp
@@ -1185,6 +1188,7 @@ ymmu50.cpp
ymmu80.cpp
ympsr60.cpp
ympsr340.cpp
+ymsy35.cpp
ymtx81z.cpp
ymvl70.cpp
z100.cpp
diff --git a/src/mame/video/fmtowns.cpp b/src/mame/video/fmtowns.cpp
index d4471d2777a..34b912b54f9 100644
--- a/src/mame/video/fmtowns.cpp
+++ b/src/mame/video/fmtowns.cpp
@@ -423,12 +423,14 @@ uint8_t towns_state::towns_video_440_r(offs_t offset)
ret |= 0x80;
}
ret |= (m_video.towns_sprite_flag ? 0x02 : 0x00); // Sprite drawing flag
- ret |= m_video.towns_sprite_page & 0x01;
+ ret |= (m_video.towns_sprite_page & 0x01) ? 1 : 0;;
return ret;
case 0x10:
return m_video.towns_sprite_sel;
case 0x12:
if(LOG_VID) logerror("SPR: reading register %i (0x452) [%02x]\n",m_video.towns_sprite_sel,m_video.towns_sprite_reg[m_video.towns_sprite_sel]);
+ if(m_video.towns_sprite_sel == 6)
+ return m_video.towns_sprite_page & 0x01 ? 0x10 : 0;
return m_video.towns_sprite_reg[m_video.towns_sprite_sel];
case 0x18:
return m_vram_mask_addr;
@@ -459,6 +461,12 @@ void towns_state::towns_video_440_w(offs_t offset, uint8_t data)
break;
case 0x03:
// logerror("CRTC: writing register %i (0x443) [%02x]\n",towns_crtc_sel,data);
+ if((m_video.towns_crtc_sel == 21) && (m_video.towns_sprite_reg[1] & 0x80))
+ {
+ m_video.towns_crtc_reg[m_video.towns_crtc_sel] =
+ (m_video.towns_crtc_reg[m_video.towns_crtc_sel] & 0x80ff) | ((data & 0x7f) << 8);
+ return;
+ }
m_video.towns_crtc_reg[m_video.towns_crtc_sel] =
(m_video.towns_crtc_reg[m_video.towns_crtc_sel] & 0x00ff) | (data << 8);
towns_crtc_refresh_mode();
@@ -475,7 +483,10 @@ void towns_state::towns_video_440_w(offs_t offset, uint8_t data)
break;
case 0x12:
logerror("SPR: writing register %i (0x452) [%02x]\n",m_video.towns_sprite_sel,data);
- m_video.towns_sprite_reg[m_video.towns_sprite_sel] = data;
+ if(m_video.towns_sprite_sel == 6)
+ m_video.towns_sprite_page = data & 0x80 ? 1 : 0;
+ else
+ m_video.towns_sprite_reg[m_video.towns_sprite_sel] = data;
break;
case 0x18:
m_vram_mask_addr = data & 1;
@@ -966,7 +977,7 @@ void towns_state::render_sprite_16(uint32_t poffset, uint16_t x, uint16_t y, boo
}
}
-TIMER_CALLBACK_MEMBER(towns_state::draw_sprites)
+void towns_state::draw_sprites()
{
uint16_t sprite_limit = (m_video.towns_sprite_reg[0] | (m_video.towns_sprite_reg[1] << 8)) & 0x3ff;
uint16_t xoff = (m_video.towns_sprite_reg[2] | (m_video.towns_sprite_reg[3] << 8)) & 0x1ff;
@@ -1029,17 +1040,6 @@ TIMER_CALLBACK_MEMBER(towns_state::draw_sprites)
render_sprite_16((poffset)&0x1ffff,x,y,xflip,yflip,xhalfsize,yhalfsize,rotation,rect);
}
}
-
- if(m_video.towns_sprite_page == 0) // flip VRAM page
- {
- m_video.towns_sprite_page = 1;
- m_video.towns_crtc_reg[21] &= ~0x8000;
- }
- else
- {
- m_video.towns_sprite_page = 0;
- m_video.towns_crtc_reg[21] |= 0x8000;
- }
m_video.towns_sprite_flag = 0;
}
@@ -1084,7 +1084,7 @@ void towns_state::towns_crtc_draw_scan_layer_hicolour(bitmap_rgb32 &bitmap,const
off += scroll;
}
hzoom = ((m_video.towns_crtc_reg[27] & 0x0f00) >> 8) + 1;
- off += (m_video.towns_crtc_reg[11] - m_video.towns_crtc_reg[22]) * (2 >> (hzoom - 1));
+ off += (float)(m_video.towns_crtc_reg[11] - m_video.towns_crtc_reg[22]) * (2.0f / (float)hzoom);
}
else
{
@@ -1096,7 +1096,7 @@ void towns_state::towns_crtc_draw_scan_layer_hicolour(bitmap_rgb32 &bitmap,const
off += scroll;
}
hzoom = (m_video.towns_crtc_reg[27] & 0x000f) + 1;
- off += (m_video.towns_crtc_reg[9] - m_video.towns_crtc_reg[18]) * (2 >> (hzoom - 1));
+ off += (float)(m_video.towns_crtc_reg[9] - m_video.towns_crtc_reg[18]) * (2.0f / (float)hzoom);
}
off += line * linesize;
@@ -1463,12 +1463,9 @@ void towns_state::draw_text_layer()
void towns_state::towns_sprite_start()
{
- if(!(m_video.towns_sprite_reg[1] & 0x80))
- return;
-
uint16_t sprite_limit = (m_video.towns_sprite_reg[0] | (m_video.towns_sprite_reg[1] << 8)) & 0x3ff;
m_video.towns_sprite_flag = 1; // we are now drawing
- m_video.sprite_timer->adjust(m_maincpu->cycles_to_attotime(128 * (1025-sprite_limit)));
+ m_video.sprite_timer->adjust(attotime::from_usec(32 + 75 * (1024 - sprite_limit)));
}
TIMER_CALLBACK_MEMBER(towns_state::towns_vblank_end)
@@ -1487,15 +1484,27 @@ INTERRUPT_GEN_MEMBER(towns_state::towns_vsync_irq)
machine().scheduler().timer_set(m_screen->time_until_vblank_end(), timer_expired_delegate(FUNC(towns_state::towns_vblank_end),this), 0, (void*)m_pic_slave);
if(m_video.towns_tvram_enable)
draw_text_layer();
- if(m_video.towns_sprite_reg[1] & 0x80)
+ if((m_video.towns_sprite_reg[1] & 0x80) && !m_video.towns_sprite_flag)
+ {
+ if(m_video.towns_sprite_page == 0) // flip VRAM page
+ {
+ m_video.towns_sprite_page = 1;
+ m_video.towns_crtc_reg[21] &= ~0x8000;
+ }
+ else
+ {
+ m_video.towns_sprite_page = 0;
+ m_video.towns_crtc_reg[21] |= 0x8000;
+ }
towns_sprite_start();
+ }
}
void towns_state::video_start()
{
m_video.towns_vram_wplane = 0x00;
m_video.towns_sprite_page = 0;
- m_video.sprite_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(towns_state::draw_sprites),this));
+ m_video.sprite_timer = timer_alloc(TIMER_SPRITES);
}
uint32_t towns_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
diff --git a/src/mame/video/galaxian.cpp b/src/mame/video/galaxian.cpp
index 6d3e7356812..6f32d43c8b0 100644
--- a/src/mame/video/galaxian.cpp
+++ b/src/mame/video/galaxian.cpp
@@ -358,7 +358,7 @@ void galaxian_state::galaxian_palette(palette_device &palette)
m_bullet_color[7] = rgb_t(0xff,0xff,0x00);
}
-void galaxian_state::moonwar_palette(palette_device &palette)
+void moonwar_state::moonwar_palette(palette_device &palette)
{
galaxian_palette(palette);
@@ -448,7 +448,7 @@ void galaxian_state::state_save_register()
uint32_t galaxian_state::screen_update_galaxian(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
/* draw the background layer (including stars) */
- (this->*m_draw_background_ptr)(bitmap, cliprect);
+ m_draw_background_ptr(bitmap, cliprect);
/* draw the tilemap characters over top */
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
@@ -458,7 +458,7 @@ uint32_t galaxian_state::screen_update_galaxian(screen_device &screen, bitmap_rg
sprites_draw(bitmap, cliprect, &m_spriteram[m_sprites_base + i * 0x20]);
/* if we have bullets to draw, render them following */
- if (m_draw_bullet_ptr != nullptr)
+ if (!m_draw_bullet_ptr.isnull())
bullets_draw(bitmap, cliprect, &m_spriteram[m_bullets_base]);
return 0;
@@ -482,8 +482,7 @@ TILE_GET_INFO_MEMBER(galaxian_state::bg_get_tile_info)
uint8_t attrib = m_spriteram[x*2+1];
uint8_t color = attrib & 7;
- if (m_extend_tile_info_ptr != nullptr)
- (this->*m_extend_tile_info_ptr)(&code, &color, attrib, x, y);
+ m_extend_tile_info_ptr(&code, &color, attrib, x, y);
tileinfo.set(0, code, color, 0);
}
@@ -573,8 +572,7 @@ void galaxian_state::sprites_draw(bitmap_rgb32 &bitmap, const rectangle &cliprec
uint8_t sx = base[3] + hoffset;
/* extend the sprite information */
- if (m_extend_sprite_info_ptr != nullptr)
- (this->*m_extend_sprite_info_ptr)(base, &sx, &sy, &flipx, &flipy, &code, &color);
+ m_extend_sprite_info_ptr(base, &sx, &sy, &flipx, &flipy, &code, &color);
/* apply flipscreen in X direction */
if (m_flipscreen_x)
@@ -591,11 +589,10 @@ void galaxian_state::sprites_draw(bitmap_rgb32 &bitmap, const rectangle &cliprec
}
/* draw */
-
- m_gfxdecode->gfx(1)->transpen(bitmap,clip,
- code, color,
- flipx, flipy,
- m_h0_start + m_x_scale * sx, sy, 0);
+ m_gfxdecode->gfx(1)->transpen(bitmap,clip,
+ code, color,
+ flipx, flipy,
+ m_h0_start + m_x_scale * sx, sy, 0);
}
}
@@ -609,25 +606,22 @@ void galaxian_state::sprites_draw(bitmap_rgb32 &bitmap, const rectangle &cliprec
void galaxian_state::bullets_draw(bitmap_rgb32 &bitmap, const rectangle &cliprect, const uint8_t *base)
{
- int y;
-
/* iterate over scanlines */
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
uint8_t shell = 0xff, missile = 0xff;
uint8_t effy;
- int which;
/* the first 3 entries match Y-1 */
effy = m_flipscreen_y ? ((y - 1) ^ 255) : (y - 1);
- for (which = 0; which < 3; which++)
- if ((uint8_t)(base[which*4+1] + effy) == 0xff)
+ for (int which = 0; which < 3; which++)
+ if (uint8_t(base[which*4+1] + effy) == 0xff)
shell = which;
/* remaining entries match Y */
effy = m_flipscreen_y ? (y ^ 255) : y;
- for (which = 3; which < 8; which++)
- if ((uint8_t)(base[which*4+1] + effy) == 0xff)
+ for (int which = 3; which < 8; which++)
+ if (uint8_t(base[which*4+1] + effy) == 0xff)
{
if (which != 7)
shell = which;
@@ -637,9 +631,9 @@ void galaxian_state::bullets_draw(bitmap_rgb32 &bitmap, const rectangle &cliprec
/* draw the shell */
if (shell != 0xff)
- (this->*m_draw_bullet_ptr)(bitmap, cliprect, shell, 255 - base[shell*4+3], y);
+ m_draw_bullet_ptr(bitmap, cliprect, shell, 255 - base[shell*4+3], y);
if (missile != 0xff)
- (this->*m_draw_bullet_ptr)(bitmap, cliprect, missile, 255 - base[missile*4+3], y);
+ m_draw_bullet_ptr(bitmap, cliprect, missile, 255 - base[missile*4+3], y);
}
}
@@ -1072,9 +1066,9 @@ void galaxian_state::turtles_draw_background(bitmap_rgb32 &bitmap, const rectang
}
-void galaxian_state::sfx_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect)
+void taiyo_sfx_state::sfx_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- /* current schematics are unreadable, assuming like Turtles */
+ // current schematics are unreadable, assuming like Turtles
bitmap.fill(rgb_t(m_background_red * 0x55, m_background_green * 0x47, m_background_blue * 0x55), cliprect);
scramble_draw_stars(bitmap, cliprect, 256);
}
@@ -1244,6 +1238,14 @@ void galaxian_state::theend_draw_bullet(bitmap_rgb32 &bitmap, const rectangle &c
*************************************/
/*** generic ***/
+void galaxian_state::empty_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
+{
+}
+
+void galaxian_state::empty_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
+{
+}
+
void galaxian_state::upper_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
{
/* tiles are in the upper half of a larger ROM */
@@ -1269,14 +1271,14 @@ void galaxian_state::frogger_extend_sprite_info(const uint8_t *base, uint8_t *sx
}
-/*** Ghostmuncher Galaxian ***/
-void galaxian_state::gmgalax_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
+/*** Bagman on Moon Cresta hardware, Ghostmuncher Galaxian ***/
+void bagmanmc_state::bagmanmc_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
{
*code |= m_gfxbank[0] << 9;
-// *color |= m_gfxbank[0] << 3;
+ //*color |= m_gfxbank[0] << 3;
}
-void galaxian_state::gmgalax_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
+void bagmanmc_state::bagmanmc_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
{
*code |= (m_gfxbank[0] << 7) | 0x40;
*color |= m_gfxbank[0] << 3;
@@ -1284,12 +1286,12 @@ void galaxian_state::gmgalax_extend_sprite_info(const uint8_t *base, uint8_t *sx
/*** Pisces ***/
-void galaxian_state::pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
+void pisces_state::pisces_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
{
*code |= m_gfxbank[0] << 8;
}
-void galaxian_state::pisces_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
+void pisces_state::pisces_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
{
*code |= m_gfxbank[0] << 6;
}
@@ -1384,17 +1386,15 @@ void galaxian_state::jumpbug_extend_sprite_info(const uint8_t *base, uint8_t *sx
}
}
-void galaxian_state::namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y) // should be in namenayo_state
+void namenayo_state::namenayo_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
{
- // main game display
- if ((attrib & 0x01) == 0x00)
+ if ((attrib & 0x01) == 0x00) // main game display
{
int attr = m_exattrram[y & 0x1f];
*code += ((attr & 0x38) >> 3) * 0x100;
*color = attr & 0x07;
}
- // status bar
- else
+ else // status bar
{
// course map
if ((attrib & 0xfe) == 0x20)
@@ -1402,7 +1402,7 @@ void galaxian_state::namenayo_extend_tile_info(uint16_t *code, uint8_t *color, u
}
}
-void galaxian_state::namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
+void namenayo_state::namenayo_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
{
if (base[2] & 0x08)
*code += 0x40;
@@ -1418,7 +1418,7 @@ void namenayo_state::namenayo_unk_d800_w(uint8_t data)
}
-void galaxian_state::namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect)
+void namenayo_state::namenayo_draw_background(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
bitmap.fill(rgb_t::black(), cliprect);
@@ -1441,6 +1441,13 @@ void galaxian_state::namenayo_draw_background(bitmap_rgb32 &bitmap, const rectan
m_bg_tilemap->draw(*m_screen, bitmap, draw, TILEMAP_DRAW_OPAQUE, 0);
}
+// Guttang Gottong bootleg
+void galaxian_state::guttangt_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
+{
+ // is this configurable or a hardwired mod?
+ *code |= 0x40;
+}
+
/*************************************
*
@@ -1448,14 +1455,14 @@ void galaxian_state::namenayo_draw_background(bitmap_rgb32 &bitmap, const rectan
*
*************************************/
-/* gfxbank[4] is used as a cpu bank number, and gfxbank[0] for graphics banking */
-void galaxian_state::fourplay_rombank_w(offs_t offset, uint8_t data)
+// gfxbank[4] is used as a cpu bank number, and gfxbank[0] for graphics banking
+void fourplay_state::fourplay_rombank_w(offs_t offset, uint8_t data)
{
m_gfxbank[4] = (m_gfxbank[4] & (2 - offset)) | (data << offset);
m_gfxbank[0] = (m_gfxbank[4] == 3); // 1 = true, 0 = false
- membank("bank1")->set_entry( m_gfxbank[4] );
+ m_rombank->set_entry(m_gfxbank[4]);
}
@@ -1466,13 +1473,13 @@ void galaxian_state::fourplay_rombank_w(offs_t offset, uint8_t data)
*
*************************************/
-void galaxian_state::videight_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
+void videight_state::videight_extend_tile_info(uint16_t *code, uint8_t *color, uint8_t attrib, uint8_t x, uint8_t y)
{
*code |= (m_gfxbank[0] << 8);
*color |= (m_gfxbank[4] << 3);
}
-void galaxian_state::videight_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
+void videight_state::videight_extend_sprite_info(const uint8_t *base, uint8_t *sx, uint8_t *sy, uint8_t *flipx, uint8_t *flipy, uint16_t *code, uint8_t *color)
{
*code |= (m_gfxbank[0] << 6);
*color |= (m_gfxbank[4] << 3);
@@ -1480,26 +1487,26 @@ void galaxian_state::videight_extend_sprite_info(const uint8_t *base, uint8_t *s
/* This handles the main bankswitching for code and one-bank gfx games */
-void galaxian_state::videight_rombank_w(offs_t offset, uint8_t data)
+void videight_state::videight_rombank_w(offs_t offset, uint8_t data)
{
- uint8_t gfxbanks[] = { 0, 10, 2, 8, 1, 9, 4, 11 };
+ static constexpr uint8_t gfxbanks[] = { 0, 10, 2, 8, 1, 9, 4, 11 };
if (offset == 2)
- galaxian_stars_enable_w( data );
+ galaxian_stars_enable_w(data);
else
{
m_gfxbank[4] = (m_gfxbank[4] & (6 - offset)) | (data << ((offset + 1) >> 1));
galaxian_gfxbank_w (0, gfxbanks[m_gfxbank[4]]);
- membank("bank1")->set_entry( m_gfxbank[4] );
+ m_rombank->set_entry(m_gfxbank[4]);
}
}
/* This handles those games with multiple gfx banks */
-void galaxian_state::videight_gfxbank_w(offs_t offset, uint8_t data)
+void videight_state::videight_gfxbank_w(offs_t offset, uint8_t data)
{
/* Moon Cresta (mooncrgx) */
- if (( data < 2 ) && (m_gfxbank[4] == 3))
+ if ((data < 2) && (m_gfxbank[4] == 3))
{
- uint8_t gfxbanks[] = { 8, 12, 8, 14, 8, 13, 8, 15 };
+ static constexpr uint8_t gfxbanks[] = { 8, 12, 8, 14, 8, 13, 8, 15 };
if (!offset) m_gfxbank[3] = (m_gfxbank[3] & 6) | data;
if (offset == 1) m_gfxbank[3] = (m_gfxbank[3] & 5) | (data << 1);
if (offset == 2) m_gfxbank[3] = (m_gfxbank[3] & 3) | (data << 2);
@@ -1507,12 +1514,12 @@ void galaxian_state::videight_gfxbank_w(offs_t offset, uint8_t data)
}
/* Uniwar S */
- if (( data < 2 ) && (m_gfxbank[4] == 2) && (offset == 2))
- galaxian_gfxbank_w( 0, data+2 );
+ if ((data < 2) && (m_gfxbank[4] == 2) && (offset == 2))
+ galaxian_gfxbank_w(0, data + 2);
/* Pisces (piscesb) */
- if (( data < 2 ) && (m_gfxbank[4] == 6) && (offset == 2))
- galaxian_gfxbank_w( 0, data+4 );
+ if ((data < 2) && (m_gfxbank[4] == 6) && (offset == 2))
+ galaxian_gfxbank_w(0, data + 4);
}
void namenayo_state::namenayo_extattr_w(offs_t offset, uint8_t data)
diff --git a/src/mame/video/galaxold.cpp b/src/mame/video/galaxold.cpp
index 240caa1e34b..2f198f8319e 100644
--- a/src/mame/video/galaxold.cpp
+++ b/src/mame/video/galaxold.cpp
@@ -111,7 +111,7 @@ void galaxold_state::stratgyx_palette(palette_device &palette)
}
}
-void galaxold_state::rockclim_palette(palette_device &palette) const
+void galaxold_state::s2650_palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
@@ -568,29 +568,8 @@ VIDEO_START_MEMBER(galaxold_state,mooncrst)
m_modify_spritecode = &galaxold_state::mooncrst_modify_spritecode;
}
-void galaxold_state::rockclim_draw_background(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- m_rockclim_tilemap->draw(screen, bitmap, cliprect, 0,0);
-}
-void galaxold_state::rockclim_modify_spritecode(uint8_t *spriteram, int *code, int *flipx, int *flipy, int offs)
-{
- if (m_gfxbank[2]) *code|=0x40;
-}
-
-VIDEO_START_MEMBER(galaxold_state,rockclim)
-{
- VIDEO_START_CALL_MEMBER(galaxold);
- m_rockclim_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galaxold_state::rockclim_get_tile_info)), TILEMAP_SCAN_ROWS,8,8,64,32);
- m_draw_background = &galaxold_state::rockclim_draw_background;
- m_modify_charcode = &galaxold_state::mooncrst_modify_charcode;
- m_modify_spritecode = &galaxold_state::rockclim_modify_spritecode;
-
- m_rockclim_v = m_rockclim_h = 0;
- save_item(NAME(m_rockclim_v));
- save_item(NAME(m_rockclim_h));
-}
TILE_GET_INFO_MEMBER(galaxold_state::drivfrcg_get_tile_info)
{
@@ -877,31 +856,6 @@ void galaxold_state::galaxold_gfxbank_w(offs_t offset, uint8_t data)
}
}
-void galaxold_state::rockclim_videoram_w(offs_t offset, uint8_t data)
-{
- m_rockclim_videoram[offset] = data;
- m_rockclim_tilemap->mark_tile_dirty(offset);
-}
-
-void galaxold_state::rockclim_scroll_w(offs_t offset, uint8_t data)
-{
- switch(offset&3)
- {
- case 0: m_rockclim_h=(m_rockclim_h&0xff00)|data;m_rockclim_tilemap ->set_scrollx(0, m_rockclim_h );break;
- case 1: m_rockclim_h=(m_rockclim_h&0xff)|(data<<8);m_rockclim_tilemap ->set_scrollx(0, m_rockclim_h );break;
- case 2: m_rockclim_v=(m_rockclim_v&0xff00)|data;m_rockclim_tilemap ->set_scrolly(0, m_rockclim_v );break;
- case 3: m_rockclim_v=(m_rockclim_v&0xff)|(data<<8);m_rockclim_tilemap ->set_scrolly(0, m_rockclim_v );break;
- }
-
-}
-
-
-uint8_t galaxold_state::rockclim_videoram_r(offs_t offset)
-{
- return m_rockclim_videoram[offset];
-}
-
-
void galaxold_state::dambustr_bg_split_line_w(uint8_t data)
{
m_dambustr_bg_split_line = data;
@@ -1560,11 +1514,6 @@ TILE_GET_INFO_MEMBER(galaxold_state::get_tile_info)
tileinfo.set(0, code, color, 0);
}
-TILE_GET_INFO_MEMBER(galaxold_state::rockclim_get_tile_info)
-{
- uint16_t code = m_rockclim_videoram[tile_index];
- tileinfo.set(2, code, 0, 0);
-}
void galaxold_state::draw_bullets_common(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
diff --git a/src/mame/video/gameplan.cpp b/src/mame/video/gameplan.cpp
index d6e8eff207b..197ab20b8ed 100644
--- a/src/mame/video/gameplan.cpp
+++ b/src/mame/video/gameplan.cpp
@@ -156,7 +156,7 @@ void gameplan_state::leprechn_video_command_w(uint8_t data)
uint8_t gameplan_state::leprechn_videoram_r()
{
- return m_videoram[m_video_y * (HBSTART - HBEND) + m_video_x];
+ return m_video_previous;
}
@@ -193,6 +193,7 @@ WRITE_LINE_MEMBER(gameplan_state::video_command_trigger_w)
m_video_y = m_video_y + 1;
}
+ m_video_previous = m_videoram[m_video_y * (HBSTART - HBEND) + m_video_x];
m_videoram[m_video_y * (HBSTART - HBEND) + m_video_x] = m_video_data & 0x0f;
break;
diff --git a/src/mame/video/inufuku.cpp b/src/mame/video/inufuku.cpp
deleted file mode 100644
index 1fb75bba22a..00000000000
--- a/src/mame/video/inufuku.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Takahiro Nogi
-/******************************************************************************
-
- Video Hardware for Video System Games.
-
- Quiz & Variety Sukusuku Inufuku
- (c)1998 Video System Co.,Ltd.
-
- Driver by Takahiro Nogi <nogi@kt.rim.or.jp> 2003/08/09 -
-
- based on other Video System drivers
-
-******************************************************************************/
-
-#include "emu.h"
-#include "includes/inufuku.h"
-#include "screen.h"
-
-
-/******************************************************************************
-
- Memory handlers
-
-******************************************************************************/
-
-void inufuku_state::inufuku_palettereg_w(offs_t offset, uint16_t data)
-{
- switch (offset)
- {
- case 0x02: m_bg_palettebank = (data & 0xf000) >> 12;
- m_bg_tilemap->mark_all_dirty();
- break;
- case 0x03: m_tx_palettebank = (data & 0xf000) >> 12;
- m_tx_tilemap->mark_all_dirty();
- break;
- }
-}
-
-void inufuku_state::inufuku_scrollreg_w(offs_t offset, uint16_t data)
-{
- switch (offset)
- {
- case 0x00: m_bg_scrollx = data + 1; break;
- case 0x01: m_bg_scrolly = data + 0; break;
- case 0x02: m_tx_scrollx = data - 3; break;
- case 0x03: m_tx_scrolly = data + 1; break;
- case 0x04: m_bg_raster = (data & 0x0200) ? 0 : 1; break;
- }
-}
-
-
-/******************************************************************************
-
- Sprite routines
-
-******************************************************************************/
-
-
-
-/******************************************************************************
-
- Tilemap callbacks
-
-******************************************************************************/
-
-TILE_GET_INFO_MEMBER(inufuku_state::get_inufuku_bg_tile_info)
-{
- tileinfo.set(0,
- m_bg_videoram[tile_index],
- m_bg_palettebank,
- 0);
-}
-
-TILE_GET_INFO_MEMBER(inufuku_state::get_inufuku_tx_tile_info)
-{
- tileinfo.set(1,
- m_tx_videoram[tile_index],
- m_tx_palettebank,
- 0);
-}
-
-uint16_t inufuku_state::inufuku_bg_videoram_r(offs_t offset)
-{
- return m_bg_videoram[offset];
-}
-
-void inufuku_state::inufuku_bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
-{
- COMBINE_DATA(&m_bg_videoram[offset]);
- m_bg_tilemap->mark_tile_dirty(offset);
-}
-
-uint16_t inufuku_state::inufuku_tx_videoram_r(offs_t offset)
-{
- return m_tx_videoram[offset];
-}
-
-void inufuku_state::inufuku_tx_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
-{
- COMBINE_DATA(&m_tx_videoram[offset]);
- m_tx_tilemap->mark_tile_dirty(offset);
-}
-
-
-uint32_t inufuku_state::inufuku_tile_callback( uint32_t code )
-{
- return ((m_spriteram2[code*2] & 0x0007) << 16) + m_spriteram2[(code*2)+ 1];
-}
-
-
-/******************************************************************************
-
- Start the video hardware emulation
-
-******************************************************************************/
-
-void inufuku_state::video_start()
-{
- m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(inufuku_state::get_inufuku_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
- m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(inufuku_state::get_inufuku_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
-
- m_bg_tilemap->set_transparent_pen(255);
- m_tx_tilemap->set_transparent_pen(255);
-
- m_spriteram1_old = make_unique_clear<uint16_t[]>(m_spriteram1.bytes()/2);
-
-}
-
-
-/******************************************************************************
-
- Display refresh
-
-******************************************************************************/
-
-uint32_t inufuku_state::screen_update_inufuku(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- int i;
-
- bitmap.fill(m_palette->black_pen(), cliprect);
- screen.priority().fill(0);
-
- if (m_bg_raster)
- {
- m_bg_tilemap->set_scroll_rows(512);
- for (i = 0; i < 256; i++)
- m_bg_tilemap->set_scrollx((m_bg_scrolly + i) & 0x1ff, m_bg_scrollx+m_bg_rasterram[i]);
- }
- else
- {
- m_bg_tilemap->set_scroll_rows(1);
- m_bg_tilemap->set_scrollx(0, m_bg_scrollx);
- }
- m_bg_tilemap->set_scrolly(0, m_bg_scrolly);
- m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
-
- m_tx_tilemap->set_scrollx(0, m_tx_scrollx);
- m_tx_tilemap->set_scrolly(0, m_tx_scrolly);
- m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 4);
-
- m_spr->draw_sprites( m_spriteram1_old.get(), m_spriteram1.bytes(), screen, bitmap, cliprect );
- return 0;
-}
-
-WRITE_LINE_MEMBER(inufuku_state::screen_vblank_inufuku)
-{
- // rising edge
- if (state)
- {
- memcpy(m_spriteram1_old.get(),m_spriteram1,m_spriteram1.bytes());
- }
-}
diff --git a/src/mame/video/k037122.cpp b/src/mame/video/k037122.cpp
index c8086c59f41..8d5a9aa068a 100644
--- a/src/mame/video/k037122.cpp
+++ b/src/mame/video/k037122.cpp
@@ -14,8 +14,8 @@ Konami 037122
---------------- -----xxxxx------ Red
---------------- ----------xxxxxx Green
- Tilemap is can be rotated, zoomed, similar as K053936 "simple mode"
- Tilemap size is 256x64 (2048x512 pixels) or 128x64 (1024x512 pixels), Each tile is 8bpp 8x8.
+ Tilemap can be rotated, zoomed, similar to K053936 "simple mode"
+ Tilemap can be configured either as 256x64 tiles (2048x512 pixels) or 128x128 tiles (1024x1024 pixels), Each tile is 8bpp 8x8.
Tile format (4 byte (1x32bit word) per each tile)
Bits Description
@@ -44,17 +44,25 @@ Konami 037122
---------------- xxxxxxxxxxxxxxxx Vertical back porch - 2
20 sxxxxxxxxxxxxxxx ---------------- X counter starting value (12.4 fixed point)
---------------- sxxxxxxxxxxxxxxx Y counter starting value (12.4 fixed point)
- 24 ---------------- sxxxxxxxxxxxxxxx amount to add to the Y counter after each line (4.12 fixed point)
+ 24 sxxxxxxxxxxxxxxx ---------------- amount to add to the X counter after each line (4.12 fixed point)
+ ---------------- sxxxxxxxxxxxxxxx amount to add to the Y counter after each line (4.12 fixed point)
28 sxxxxxxxxxxxxxxx ---------------- amount to add to the X counter after each horizontal pixel (4.12 fixed point)
- 30 ---------------x ---------------- VRAM mapping mode
- ---------------0 ---------------- CLUT at 0x00000-0x08000, Display tilemap area at 0x08000-0x18000 (256x64)
- ---------------1 ---------------- CLUT at 0x18000-0x20000, Display tilemap area at 0x00000-0x08000 (128x64)
+ ---------------- sxxxxxxxxxxxxxxx amount to add to the Y counter after each horizontal pixel (4.12 fixed point)
+ 30 ---------------x ---------------- Tilemap size
+ ---------------0 ---------------- 128x128
+ ---------------1 ---------------- 256x64
---------------- -------------xxx Character RAM bank
+ 34 ---------------- -------------x-- CLUT location
+ ---------------- -------------0-- CLUT at 0x00000-0x08000
+ ---------------- -------------1-- CLUT at 0x18000-0x20000
+ ---------------x ---------------- Tilemap Y origin
+ ---------------0 ---------------- Origin at tilemap center
+ ---------------1 ---------------- Origin at 0
Other bits/registers unknown, some registers are used
TODO:
- - verify and implement scroll, ROZ, display timing registers
+ - verify and implement display timing registers
- verify other unknown but used registers
*/
@@ -106,18 +114,19 @@ void k037122_device::device_start()
m_tile_ram = make_unique_clear<uint32_t[]>(0x20000 / 4);
m_reg = make_unique_clear<uint32_t[]>(0x400 / 4);
- m_layer[0] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k037122_device::tile_info_layer0)), TILEMAP_SCAN_ROWS, 8, 8, 256, 64);
- m_layer[1] = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k037122_device::tile_info_layer1)), TILEMAP_SCAN_ROWS, 8, 8, 128, 64);
+ m_tilemap_128 = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k037122_device::tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 128, 128);
+ m_tilemap_256 = &machine().tilemap().create(*this, tilemap_get_info_delegate(*this, FUNC(k037122_device::tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 256, 64);
- m_layer[0]->set_transparent_pen(0);
- m_layer[1]->set_transparent_pen(0);
+ m_tilemap_128->set_transparent_pen(0);
+ m_tilemap_256->set_transparent_pen(0);
set_gfx(m_gfx_index,std::make_unique<gfx_element>(&palette(), k037122_char_layout, (uint8_t*)m_char_ram.get(), 0, palette().entries() / 16, 0));
save_pointer(NAME(m_reg), 0x400 / 4);
save_pointer(NAME(m_char_ram), 0x200000 / 4);
save_pointer(NAME(m_tile_ram), 0x20000 / 4);
-
+ save_item(NAME(m_tilemap_base));
+ save_item(NAME(m_palette_base));
}
//-------------------------------------------------
@@ -129,30 +138,18 @@ void k037122_device::device_reset()
memset(m_char_ram.get(), 0, 0x200000);
memset(m_tile_ram.get(), 0, 0x20000);
memset(m_reg.get(), 0, 0x400);
+
+ m_tilemap_base = 0;
+ m_palette_base = 0;
}
/*****************************************************************************
DEVICE HANDLERS
*****************************************************************************/
-TILE_GET_INFO_MEMBER(k037122_device::tile_info_layer0)
+TILE_GET_INFO_MEMBER(k037122_device::tile_info)
{
- uint32_t val = m_tile_ram[tile_index + (0x8000/4)];
- int color = (val >> 17) & 0x1f;
- int tile = val & 0x3fff;
- int flags = 0;
-
- if (val & 0x400000)
- flags |= TILE_FLIPX;
- if (val & 0x800000)
- flags |= TILE_FLIPY;
-
- tileinfo.set(m_gfx_index, tile, color, flags);
-}
-
-TILE_GET_INFO_MEMBER(k037122_device::tile_info_layer1)
-{
- uint32_t val = m_tile_ram[tile_index];
+ uint32_t val = m_tile_ram[tile_index + (m_tilemap_base / 4)];
int color = (val >> 17) & 0x1f;
int tile = val & 0x3fff;
int flags = 0;
@@ -170,25 +167,39 @@ void k037122_device::tile_draw( screen_device &screen, bitmap_rgb32 &bitmap, con
{
const rectangle &visarea = screen.visible_area();
+ int16_t scrollx = m_reg[0x8] >> 16;
+ int16_t scrolly = m_reg[0x8] & 0xffff;
+
+ int16_t incxx = m_reg[0xa] >> 16;
+ int16_t incxy = m_reg[0xa] & 0xffff;
+ int16_t incyx = m_reg[0x9] >> 16;
+ int16_t incyy = m_reg[0x9] & 0xffff;
+
if (m_reg[0xc] & 0x10000)
{
- m_layer[1]->set_scrolldx(visarea.min_x, visarea.min_x);
- m_layer[1]->set_scrolldy(visarea.min_y, visarea.min_y);
- m_layer[1]->draw(screen, bitmap, cliprect, 0, 0);
+ if ((m_reg[0xd] & 0x10000) == 0)
+ scrolly -= 0x2000;
+
+ m_tilemap_128->set_scrolldx(visarea.min_x, visarea.min_x);
+ m_tilemap_128->set_scrolldy(visarea.min_y, visarea.min_y);
+
+ m_tilemap_128->draw_roz(screen, bitmap, cliprect, (int32_t)(scrollx) << 12, (int32_t)(scrolly) << 12,
+ (int32_t)(incxx) << 4, (int32_t)(incxy) << 4, (int32_t)(incyx), (int32_t)(incyy) << 4,
+ false, 0, 0);
}
else
{
- m_layer[0]->set_scrolldx(visarea.min_x, visarea.min_x);
- m_layer[0]->set_scrolldy(visarea.min_y, visarea.min_y);
- m_layer[0]->draw(screen, bitmap, cliprect, 0, 0);
- }
-}
+ if ((m_reg[0xd] & 0x10000) == 0)
+ scrolly -= 0x1000;
-void k037122_device::update_palette_color( uint32_t palette_base, int color )
-{
- uint32_t data = m_tile_ram[(palette_base / 4) + color];
+ m_tilemap_256->set_scrolldx(visarea.min_x, visarea.min_x);
+ m_tilemap_256->set_scrolldy(visarea.min_y, visarea.min_y);
+
+ m_tilemap_256->draw_roz(screen, bitmap, cliprect, (int32_t)(scrollx) << 12, (int32_t)(scrolly) << 12,
+ (int32_t)(incxx) << 4, (int32_t)(incxy) << 4, (int32_t)(incyx) << 4, (int32_t)(incyy) << 4,
+ false, 0, 0);
+ }
- palette().set_pen_color(color, pal5bit(data >> 6), pal6bit(data >> 0), pal5bit(data >> 11));
}
uint32_t k037122_device::sram_r(offs_t offset)
@@ -200,35 +211,18 @@ void k037122_device::sram_w(offs_t offset, uint32_t data, uint32_t mem_mask)
{
COMBINE_DATA(m_tile_ram.get() + offset);
- if (m_reg[0xc] & 0x10000)
+ uint32_t address = offset * 4;
+
+ if (address >= m_palette_base && address < m_palette_base + 0x8000)
{
- if (offset < 0x8000 / 4)
- {
- m_layer[1]->mark_tile_dirty(offset);
- }
- else if (offset >= 0x8000 / 4 && offset < 0x18000 / 4)
- {
- m_layer[0]->mark_tile_dirty(offset - (0x8000 / 4));
- }
- else if (offset >= 0x18000 / 4)
- {
- update_palette_color(0x18000, offset - (0x18000 / 4));
- }
+ int color = (address - m_palette_base) / 4;
+ palette().set_pen_color(color, pal5bit(data >> 6), pal6bit(data >> 0), pal5bit(data >> 11));
}
- else
+
+ if (address >= m_tilemap_base && address < m_tilemap_base + 0x10000)
{
- if (offset < 0x8000 / 4)
- {
- update_palette_color(0, offset);
- }
- else if (offset >= 0x8000 / 4 && offset < 0x18000 / 4)
- {
- m_layer[0]->mark_tile_dirty(offset - (0x8000 / 4));
- }
- else if (offset >= 0x18000 / 4)
- {
- m_layer[1]->mark_tile_dirty(offset - (0x18000 / 4));
- }
+ m_tilemap_128->mark_tile_dirty((address - m_tilemap_base) / 4);
+ m_tilemap_256->mark_tile_dirty((address - m_tilemap_base) / 4);
}
}
@@ -263,5 +257,32 @@ uint32_t k037122_device::reg_r(offs_t offset)
void k037122_device::reg_w(offs_t offset, uint32_t data, uint32_t mem_mask)
{
+ if (offset == 0x34/4 && ACCESSING_BITS_0_15)
+ {
+ uint32_t palette_base = (data & 0x4) ? 0x18000 : 0x00000;
+
+ // tilemap is at 0x00000 unless CLUT is there
+ uint32_t tilemap_base = (data & 0x4) ? 0x00000 : 0x08000;
+
+ if (palette_base != m_palette_base)
+ {
+ m_palette_base = palette_base;
+
+ // update all colors since palette moved
+ for (auto p = 0; p < 8192; p++)
+ {
+ uint32_t color = m_tile_ram[(m_palette_base / 4) + p];
+ palette().set_pen_color(p, pal5bit(color >> 6), pal6bit(color >> 0), pal5bit(color >> 11));
+ }
+ }
+
+ if (tilemap_base != m_tilemap_base)
+ {
+ m_tilemap_128->mark_all_dirty();
+ m_tilemap_256->mark_all_dirty();
+ m_tilemap_base = tilemap_base;
+ }
+ }
+
COMBINE_DATA(m_reg.get() + offset);
}
diff --git a/src/mame/video/k037122.h b/src/mame/video/k037122.h
index a39c1d572d5..a36bb793dec 100644
--- a/src/mame/video/k037122.h
+++ b/src/mame/video/k037122.h
@@ -33,7 +33,11 @@ protected:
private:
// internal state
- tilemap_t *m_layer[2];
+ tilemap_t* m_tilemap_128;
+ tilemap_t* m_tilemap_256;
+
+ uint32_t m_palette_base;
+ uint32_t m_tilemap_base;
std::unique_ptr<uint32_t[]> m_tile_ram;
std::unique_ptr<uint32_t[]> m_char_ram;
@@ -41,9 +45,7 @@ private:
int m_gfx_index;
- TILE_GET_INFO_MEMBER(tile_info_layer0);
- TILE_GET_INFO_MEMBER(tile_info_layer1);
- void update_palette_color( uint32_t palette_base, int color );
+ TILE_GET_INFO_MEMBER(tile_info);
};
DECLARE_DEVICE_TYPE(K037122, k037122_device)
diff --git a/src/mame/video/mbee.cpp b/src/mame/video/mbee.cpp
index 1a9ba1bdbc7..10d9ff271bf 100644
--- a/src/mame/video/mbee.cpp
+++ b/src/mame/video/mbee.cpp
@@ -344,10 +344,9 @@ void mbee_state::standard_palette(palette_device &palette) const
{
constexpr u8 bglevel[] = { 0, 0x54, 0xa0, 0xff };
constexpr u8 fglevel[] = { 0, 0xa0, 0xff, 0xff };
- u8 i;
// set up background colours (00-63)
- i = 0;
+ u8 i = 0;
for (u8 b : bglevel)
{
for (u8 g : bglevel)
diff --git a/src/mame/video/mermaid.cpp b/src/mame/video/mermaid.cpp
index d3271d9d4e8..1a141a7ef0d 100644
--- a/src/mame/video/mermaid.cpp
+++ b/src/mame/video/mermaid.cpp
@@ -94,6 +94,19 @@ void mermaid_state::mermaid_fg_scroll_w(offs_t offset, uint8_t data)
m_fg_tilemap->set_scrolly(offset, data);
}
+WRITE_LINE_MEMBER(mermaid_state::bg_mask_w)
+{
+ m_bg_mask = state;
+ logerror("mask %d\n", state);
+}
+
+WRITE_LINE_MEMBER(mermaid_state::bg_bank_w)
+{
+ m_bg_bank = state ? 0x100 : 0;
+ m_bg_tilemap->mark_all_dirty();
+ logerror("bank %d\n", state);
+}
+
WRITE_LINE_MEMBER(mermaid_state::rougien_gfxbankswitch1_w)
{
m_rougien_gfxbank1 = state;
@@ -134,7 +147,7 @@ uint8_t mermaid_state::mermaid_collision_r()
TILE_GET_INFO_MEMBER(mermaid_state::get_bg_tile_info)
{
- int code = m_videoram2[tile_index];
+ int code = m_videoram2[tile_index] | m_bg_bank;
int sx = tile_index % 32;
int color = (sx >= 26) ? 0 : 1;
@@ -165,6 +178,7 @@ void mermaid_state::video_start()
m_screen->register_screen_bitmap(m_helper);
m_screen->register_screen_bitmap(m_helper2);
+ m_screen->register_screen_bitmap(m_helper_mask);
}
void mermaid_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
@@ -172,6 +186,9 @@ void mermaid_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
const rectangle spritevisiblearea(0 * 8, 26 * 8 - 1, 2 * 8, 30 * 8 - 1);
const rectangle flip_spritevisiblearea(6 * 8, 31 * 8 - 1, 2 * 8, 30 * 8 - 1);
+ rectangle clip = flip_screen_x() ? flip_spritevisiblearea : spritevisiblearea;
+ clip &= cliprect;
+
uint8_t *spriteram = m_spriteram;
int offs;
@@ -204,15 +221,66 @@ void mermaid_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprec
}
- m_gfxdecode->gfx(1)->transpen(bitmap,(flip_screen_x() ? flip_spritevisiblearea : spritevisiblearea), code, color, flipx, flipy, sx, sy, 0);
+ m_gfxdecode->gfx(1)->transpen(bitmap, clip, code, color, flipx, flipy, sx, sy, 0);
}
}
uint32_t mermaid_state::screen_update_mermaid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
- m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
- draw_sprites(bitmap, cliprect);
+ if (m_bg_split)
+ {
+ constexpr int split_y = 64;
+ constexpr rectangle rr(0, 32*8-1, 0, 32*8-1);
+ m_bg_tilemap->draw(screen, m_helper_mask, rr, 0, 0);
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ {
+ int sy = y >= split_y ? 32*8 - 2 - (y - split_y) : 32*8 - split_y + y;
+ const u16 *s = &m_helper_mask.pix(sy, cliprect.min_x);
+ u16 *p = &bitmap.pix(y, cliprect.min_x);
+ memcpy(p, s, 2*(cliprect.max_x - cliprect.min_x + 1));
+ }
+
+
+ m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ draw_sprites(bitmap, cliprect);
+ }
+ else if (m_bg_mask)
+ {
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ {
+ u16 *p = &bitmap.pix(y, cliprect.min_x);
+ for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
+ *p++ = x < 26*8 ? 0x42 : 0x40;
+ }
+ m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ draw_sprites(bitmap, cliprect);
+
+ m_bg_tilemap->draw(screen, m_helper_mask, cliprect, 0, 0);
+ int max_x = cliprect.max_x;
+ if (max_x >= 26*8)
+ max_x = 26*8-1;
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
+ {
+ const u16 *s = &m_helper_mask.pix(y, cliprect.min_x);
+ u16 *p = &bitmap.pix(y, cliprect.min_x);
+ bool on = false;
+ for (int x = cliprect.min_x; x <= max_x; x++)
+ {
+ if (*s++ & 1)
+ on = !on;
+ if (!on)
+ *p = 0x40;
+ p ++;
+ }
+ }
+
+ }
+ else
+ {
+ m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
+ draw_sprites(bitmap, cliprect);
+ }
return 0;
}
diff --git a/src/mame/video/ojankohs.cpp b/src/mame/video/ojankohs.cpp
index a7970d5b300..543bed40f8a 100644
--- a/src/mame/video/ojankohs.cpp
+++ b/src/mame/video/ojankohs.cpp
@@ -19,18 +19,17 @@
******************************************************************************/
-void ojankohs_state::ojankoy_palette(palette_device &palette) const
+void ojankoy_state::palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
- int bit0, bit1, bit2, bit3, bit4;
for (int i = 0; i < palette.entries(); i++)
{
- bit0 = BIT(color_prom[0], 2);
- bit1 = BIT(color_prom[0], 3);
- bit2 = BIT(color_prom[0], 4);
- bit3 = BIT(color_prom[0], 5);
- bit4 = BIT(color_prom[0], 6);
+ int bit0 = BIT(color_prom[0], 2);
+ int bit1 = BIT(color_prom[0], 3);
+ int bit2 = BIT(color_prom[0], 4);
+ int bit3 = BIT(color_prom[0], 5);
+ int bit4 = BIT(color_prom[0], 6);
int const r = 0x08 * bit0 + 0x11 * bit1 + 0x21 * bit2 + 0x43 * bit3 + 0x82 * bit4;
bit0 = BIT(color_prom[palette.entries()], 5);
@@ -52,7 +51,7 @@ void ojankohs_state::ojankoy_palette(palette_device &palette) const
}
}
-void ojankohs_state::ojankohs_palette_w(offs_t offset, uint8_t data)
+void ojankohs_state::palette_w(offs_t offset, uint8_t data)
{
m_paletteram[offset] = data;
@@ -65,7 +64,7 @@ void ojankohs_state::ojankohs_palette_w(offs_t offset, uint8_t data)
m_palette->set_pen_color(offset >> 1, pal5bit(r), pal5bit(g), pal5bit(b));
}
-void ojankohs_state::ccasino_palette_w(offs_t offset, uint8_t data)
+void ccasino_state::palette_w(offs_t offset, uint8_t data)
{
offset = bitswap<11>(offset, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
@@ -80,7 +79,7 @@ void ojankohs_state::ccasino_palette_w(offs_t offset, uint8_t data)
m_palette->set_pen_color(offset >> 1, pal5bit(r), pal5bit(g), pal5bit(b));
}
-void ojankohs_state::ojankoc_palette_w(offs_t offset, uint8_t data)
+void ojankoc_state::palette_w(offs_t offset, uint8_t data)
{
if (m_paletteram[offset] != data)
{
@@ -104,19 +103,19 @@ void ojankohs_state::ojankoc_palette_w(offs_t offset, uint8_t data)
******************************************************************************/
-void ojankohs_state::ojankohs_videoram_w(offs_t offset, uint8_t data)
+void ojankohs_state::videoram_w(offs_t offset, uint8_t data)
{
m_videoram[offset] = data;
m_tilemap->mark_tile_dirty(offset);
}
-void ojankohs_state::ojankohs_colorram_w(offs_t offset, uint8_t data)
+void ojankohs_state::colorram_w(offs_t offset, uint8_t data)
{
m_colorram[offset] = data;
m_tilemap->mark_tile_dirty(offset);
}
-void ojankohs_state::ojankohs_gfxreg_w(uint8_t data)
+void ojankohs_state::gfxreg_w(uint8_t data)
{
if (m_gfxreg != data)
{
@@ -125,7 +124,7 @@ void ojankohs_state::ojankohs_gfxreg_w(uint8_t data)
}
}
-void ojankohs_state::ojankohs_flipscreen_w(uint8_t data)
+void ojankohs_state::flipscreen_w(uint8_t data)
{
if (m_flipscreen != BIT(data, 0))
{
@@ -146,7 +145,7 @@ void ojankohs_state::ojankohs_flipscreen_w(uint8_t data)
}
}
-TILE_GET_INFO_MEMBER(ojankohs_state::ojankohs_get_tile_info)
+TILE_GET_INFO_MEMBER(ojankohs_state::get_tile_info)
{
int tile = m_videoram[tile_index] | ((m_colorram[tile_index] & 0x0f) << 8);
int color = (m_colorram[tile_index] & 0xe0) >> 5;
@@ -160,7 +159,7 @@ TILE_GET_INFO_MEMBER(ojankohs_state::ojankohs_get_tile_info)
tileinfo.set(0, tile, color, 0);
}
-TILE_GET_INFO_MEMBER(ojankohs_state::ojankoy_get_tile_info)
+TILE_GET_INFO_MEMBER(ojankoy_state::get_tile_info)
{
int tile = m_videoram[tile_index] | (m_videoram[tile_index + 0x1000] << 8);
int color = m_colorram[tile_index] & 0x3f;
@@ -177,36 +176,33 @@ TILE_GET_INFO_MEMBER(ojankohs_state::ojankoy_get_tile_info)
******************************************************************************/
-void ojankohs_state::ojankoc_flipscreen(int data)
+void ojankoc_state::flipscreen(uint8_t data)
{
- int x, y;
- uint8_t color1, color2;
-
m_flipscreen = BIT(data, 7);
if (m_flipscreen == m_flipscreen_old)
return;
- for (y = 0; y < 0x40; y++)
+ for (int y = 0; y < 0x40; y++)
{
- for (x = 0; x < 0x100; x++)
+ for (int x = 0; x < 0x100; x++)
{
- color1 = m_videoram[0x0000 + ((y * 256) + x)];
- color2 = m_videoram[0x3fff - ((y * 256) + x)];
- ojankoc_videoram_w(0x0000 + ((y * 256) + x), color2);
- ojankoc_videoram_w(0x3fff - ((y * 256) + x), color1);
+ uint8_t color1 = m_videoram[0x0000 + ((y * 256) + x)];
+ uint8_t color2 = m_videoram[0x3fff - ((y * 256) + x)];
+ videoram_w(0x0000 + ((y * 256) + x), color2);
+ videoram_w(0x3fff - ((y * 256) + x), color1);
color1 = m_videoram[0x4000 + ((y * 256) + x)];
color2 = m_videoram[0x7fff - ((y * 256) + x)];
- ojankoc_videoram_w(0x4000 + ((y * 256) + x), color2);
- ojankoc_videoram_w(0x7fff - ((y * 256) + x), color1);
+ videoram_w(0x4000 + ((y * 256) + x), color2);
+ videoram_w(0x7fff - ((y * 256) + x), color1);
}
}
m_flipscreen_old = m_flipscreen;
}
-void ojankohs_state::ojankoc_videoram_w(offs_t offset, uint8_t data)
+void ojankoc_state::videoram_w(offs_t offset, uint8_t data)
{
m_videoram[offset] = data;
@@ -245,22 +241,17 @@ void ojankohs_state::ojankoc_videoram_w(offs_t offset, uint8_t data)
******************************************************************************/
-VIDEO_START_MEMBER(ojankohs_state,ojankohs)
+void ojankohs_state::video_start()
{
- m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::ojankohs_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64);
+ m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64);
}
-VIDEO_START_MEMBER(ojankohs_state,ojankoy)
+void ojankoy_state::video_start()
{
- m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankohs_state::ojankoy_get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64);
+ m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ojankoy_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 4, 64, 64);
}
-VIDEO_START_MEMBER(ojankohs_state,ccasino)
-{
- VIDEO_START_CALL_MEMBER(ojankoy);
-}
-
-VIDEO_START_MEMBER(ojankohs_state,ojankoc)
+void ojankoc_state::video_start()
{
m_screen->register_screen_bitmap(m_tmpbitmap);
@@ -274,7 +265,7 @@ VIDEO_START_MEMBER(ojankohs_state,ojankoc)
******************************************************************************/
-uint32_t ojankohs_state::screen_update_ojankohs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t ojankohs_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_tilemap->set_scrollx(0, m_scrollx);
m_tilemap->set_scrolly(0, m_scrolly);
@@ -283,16 +274,14 @@ uint32_t ojankohs_state::screen_update_ojankohs(screen_device &screen, bitmap_in
return 0;
}
-uint32_t ojankohs_state::screen_update_ojankoc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t ojankoc_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int offs;
-
if (m_screen_refresh)
{
- /* redraw bitmap */
- for (offs = 0; offs < 0x8000; offs++)
+ // redraw bitmap
+ for (int offs = 0; offs < 0x8000; offs++)
{
- ojankoc_videoram_w(offs, m_videoram[offs]);
+ videoram_w(offs, m_videoram[offs]);
}
m_screen_refresh = 0;
}
diff --git a/src/mame/video/taitosj.cpp b/src/mame/video/taitosj.cpp
index ed3b9081e95..09df075c62d 100644
--- a/src/mame/video/taitosj.cpp
+++ b/src/mame/video/taitosj.cpp
@@ -161,6 +161,13 @@ void taitosj_state::compute_draw_order()
}
}
+void taitosj_state::device_post_load()
+{
+ m_gfxdecode->gfx(0)->mark_all_dirty();
+ m_gfxdecode->gfx(1)->mark_all_dirty();
+ m_gfxdecode->gfx(2)->mark_all_dirty();
+ m_gfxdecode->gfx(3)->mark_all_dirty();
+}
void taitosj_state::video_start()
{
@@ -294,7 +301,7 @@ int taitosj_state::check_sprite_sprite_bitpattern(int sx1, int sy1, int which1,
}
// draw the sprites into separate bitmaps and check overlapping region
- m_sprite_layer_collbitmap1.fill(TRANSPARENT_PEN);
+ m_sprite_sprite_collbitmap1.fill(TRANSPARENT_PEN);
get_sprite_gfx_element(which1)->transpen(m_sprite_sprite_collbitmap1, m_sprite_sprite_collbitmap1.cliprect(),
m_spriteram[SPRITE_RAM_PAGE_OFFSET + offs1 + 3] & 0x3f,
0,
diff --git a/src/mame/video/x68k.cpp b/src/mame/video/x68k.cpp
index f0d7303f134..bf8a03f73d9 100644
--- a/src/mame/video/x68k.cpp
+++ b/src/mame/video/x68k.cpp
@@ -148,15 +148,6 @@ void x68k_state::spritereg_w(offs_t offset, uint16_t data, uint16_t mem_mask)
break;
case 0x408: // BG H/V-Res
m_video.bg_hvres = data & 0x1f;
- if(data != 0xff)
- { // Handle when the PCG is using 256 and the CRTC is using 512
- if((m_video.bg_hvres & 0x0c) == 0x00 && m_crtc->vfactor() == 1)
- m_video.bg_double = 2;
- else
- m_video.bg_double = 1;
- }
- else
- m_video.bg_double = 1;
break;
}
}
@@ -346,16 +337,25 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
case 0x01: // 256 colours
if(page == 0 || page == 2)
{
- xscr = m_crtc->xscr_gfx(page) & 0x1ff;
- yscr = m_crtc->yscr_gfx(page) & 0x1ff;
- lineoffset = (((scanline - m_crtc->vbegin() / divisor) + yscr) & 0x1ff) * 512;
- loc = xscr & 0x1ff;
+ // What effect do priorites and plane disable have here? Does it work in 16bit color mode?
+ uint16_t xscr0, yscr0, xscr1, yscr1;
+ uint32_t loc0, loc1, lineoffset0, lineoffset1;
+ xscr0 = m_crtc->xscr_gfx(page) & 0x1ff;
+ yscr0 = m_crtc->yscr_gfx(page) & 0x1ff;
+ xscr1 = m_crtc->xscr_gfx(page + 1) & 0x1ff;
+ yscr1 = m_crtc->yscr_gfx(page + 1) & 0x1ff;
+
+ lineoffset0 = (((scanline - m_crtc->vbegin() / divisor) + yscr0) & 0x1ff) * 512;
+ loc0 = xscr0 & 0x1ff;
+ lineoffset1 = (((scanline - m_crtc->vbegin() / divisor) + yscr1) & 0x1ff) * 512;
+ loc1 = xscr1 & 0x1ff;
shift = 4;
if((m_video.reg[2] & 0x1a00) == 0x1a00)
ret = true;
for(pixel=m_crtc->hbegin();pixel<=m_crtc->hend();pixel++)
{
- colour = ((m_gvram[lineoffset + loc] >> page*shift) & 0x00ff);
+ colour = ((m_gvram[lineoffset0 + loc0] >> page*shift) & 0x000f);
+ colour |= ((m_gvram[lineoffset1 + loc1] >> page*shift) & 0x00f0);
if(ret && (colour & 1))
{
blend = true;
@@ -385,8 +385,10 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
bitmap.pix(scanline, pixel) = m_special.pix(scanline, pixel);
m_special.pix(scanline, pixel) = 0;
}
- loc++;
- loc &= 0x1ff;
+ loc0++;
+ loc0 &= 0x1ff;
+ loc1++;
+ loc1 &= 0x1ff;
}
}
break;
@@ -519,7 +521,7 @@ void x68k_state::draw_sprites(bitmap_ind16 &bitmap, int priority, rectangle clip
*/
int ptr,pri;
int divisor = 1;
- if(!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan())
+ if((!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) || ((m_video.bg_hvres & 0x1c) == 0x10 && m_crtc->vfactor() == 1))
divisor = 2;
for(ptr=508;ptr>=0;ptr-=4) // stepping through sprites
@@ -546,7 +548,7 @@ void x68k_state::draw_sprites(bitmap_ind16 &bitmap, int priority, rectangle clip
sx += m_video.bg_hshift;
sx += m_sprite_shift;
- m_gfxdecode->gfx(1)->zoom_transpen(bitmap,cliprect,code,colour,xflip,yflip,m_crtc->hbegin()+sx,(m_crtc->vbegin() / divisor)+(sy*m_video.bg_double),0x10000,0x10000*m_video.bg_double,0x00);
+ m_gfxdecode->gfx(1)->zoom_transpen(bitmap,cliprect,code,colour,xflip,yflip,m_crtc->hbegin()+sx,(m_crtc->vbegin() / divisor)+sy,0x10000,0x10000,0x00);
}
}
}
@@ -559,7 +561,7 @@ void x68k_state::draw_bg(bitmap_ind16 &bitmap, screen_device &screen, int layer,
tilemap_t* x68k_bg1;
tilemap_t* map;
int divisor = 1;
- if(!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan())
+ if((!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) || ((m_video.bg_hvres & 0x1c) == 0x10 && m_crtc->vfactor() == 1))
divisor = 2;
if((m_spritereg[0x408] & 0x03) == 0x00) // Sprite/BG H-Res 0=8x8, 1=16x16, 2 or 3 = undefined.
@@ -760,7 +762,7 @@ uint32_t x68k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
{
rectangle pcgrect = rect;
int divisor = 1;
- if(!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan())
+ if((!(m_video.bg_hvres & 0x0c) && m_crtc->gfx_double_scan()) || ((m_video.bg_hvres & 0x1c) == 0x10 && m_crtc->vfactor() == 1))
{
pcgrect.max_y >>= 1;
pcgrect.min_y >>= 1;
diff --git a/src/osd/eigcc.h b/src/osd/eigcc.h
index 69bbeffde07..2c5bf34ba72 100644
--- a/src/osd/eigcc.h
+++ b/src/osd/eigcc.h
@@ -55,6 +55,66 @@ inline bool _addu_64x64_co(uint64_t a, uint64_t b, uint64_t &sum)
***************************************************************************/
/*-------------------------------------------------
+ count_leading_zeros_32 - return the number of
+ leading zero bits in a 32-bit value
+-------------------------------------------------*/
+
+#ifndef count_leading_zeros_32
+#define count_leading_zeros_32 _count_leading_zeros_32
+inline uint8_t _count_leading_zeros_32(uint32_t val)
+{
+ // uses CPU feature if available, otherwise falls back to runtime library call
+ static_assert(sizeof(val) == sizeof(unsigned), "expected 32-bit unsigned int");
+ return uint8_t(unsigned(val ? __builtin_clz(val) : 32));
+}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_ones_32 - return the number of
+ leading one bits in a 32-bit value
+-------------------------------------------------*/
+
+#ifndef count_leading_ones_32
+#define count_leading_ones_32 _count_leading_ones_32
+inline uint8_t _count_leading_ones_32(uint32_t val)
+{
+ return count_leading_zeros_32(~val);
+}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_zeros_64 - return the number of
+ leading zero bits in a 64-bit value
+-------------------------------------------------*/
+
+#ifndef count_leading_zeros_64
+#define count_leading_zeros_64 _count_leading_zeros_64
+inline uint8_t _count_leading_zeros_64(uint64_t val)
+{
+ // uses CPU feature if available, otherwise falls back to runtime library call
+ static_assert(sizeof(val) == sizeof(unsigned long long), "expected 64-bit unsigned long long int");
+ return uint8_t(unsigned(val ? __builtin_clzll(val) : 64));
+}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_ones_64 - return the number of
+ leading one bits in a 64-bit value
+-------------------------------------------------*/
+
+#ifndef count_leading_ones_64
+#define count_leading_ones_64 _count_leading_ones_64
+inline uint8_t _count_leading_ones_64(uint64_t val)
+{
+ return count_leading_zeros_64(~val);
+}
+#endif
+
+
+/*-------------------------------------------------
population_count_32 - return the number of
one bits in a 32-bit value
-------------------------------------------------*/
diff --git a/src/osd/eigccarm.h b/src/osd/eigccarm.h
index 27d79c4a5c6..90004daf9d4 100644
--- a/src/osd/eigccarm.h
+++ b/src/osd/eigccarm.h
@@ -239,14 +239,14 @@ _mulu_64x64(uint64_t a, uint64_t b, uint64_t &hi)
***************************************************************************/
/*-------------------------------------------------
- count_leading_zeros - return the number of
+ count_leading_zeros_32 - return the number of
leading zero bits in a 32-bit value
-------------------------------------------------*/
#if defined(__aarch64__)
-#define count_leading_zeros _count_leading_zeros
+#define count_leading_zeros_32 _count_leading_zeros_32
inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
-_count_leading_zeros(uint32_t value)
+_count_leading_zeros_32(uint32_t value)
{
uint32_t result;
@@ -256,20 +256,20 @@ _count_leading_zeros(uint32_t value)
: [value] "r" (value)
);
- return result;
+ return uint8_t(result);
}
#endif
/*-------------------------------------------------
- count_leading_ones - return the number of
+ count_leading_ones_32 - return the number of
leading one bits in a 32-bit value
-------------------------------------------------*/
#if defined(__aarch64__)
-#define count_leading_ones _count_leading_ones
+#define count_leading_ones_32 _count_leading_ones_32
inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
-_count_leading_ones(uint32_t value)
+_count_leading_ones_32(uint32_t value)
{
uint32_t result;
@@ -279,7 +279,53 @@ _count_leading_ones(uint32_t value)
: [value] "r" (~value)
);
- return result;
+ return uint8_t(result);
+}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_zeros_64 - return the number of
+ leading zero bits in a 64-bit value
+-------------------------------------------------*/
+
+#if defined(__aarch64__)
+#define count_leading_zeros_64 _count_leading_zeros_64
+inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
+_count_leading_zeros_64(uint64_t value)
+{
+ uint64_t result;
+
+ __asm__ (
+ " clz %[result], %[value] \n"
+ : [result] "=r" (result)
+ : [value] "r" (value)
+ );
+
+ return uint8_t(result);
+}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_ones_64 - return the number of
+ leading one bits in a 64-bit value
+-------------------------------------------------*/
+
+#if defined(__aarch64__)
+#define count_leading_ones_64 _count_leading_ones_64
+inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
+_count_leading_ones_64(uint64_t value)
+{
+ uint64_t result;
+
+ __asm__ (
+ " clz %[result], %[value] \n"
+ : [result] "=r" (result)
+ : [value] "r" (~value)
+ );
+
+ return uint8_t(result);
}
#endif
diff --git a/src/osd/eigccppc.h b/src/osd/eigccppc.h
index 3a1b2093d4e..de1372ff39b 100644
--- a/src/osd/eigccppc.h
+++ b/src/osd/eigccppc.h
@@ -239,13 +239,13 @@ _mulu_64x64(uint64_t a, uint64_t b, uint64_t &hi)
***************************************************************************/
/*-------------------------------------------------
- count_leading_zeros - return the number of
+ count_leading_zeros_32 - return the number of
leading zero bits in a 32-bit value
-------------------------------------------------*/
-#define count_leading_zeros _count_leading_zeros
+#define count_leading_zeros_32 _count_leading_zeros_32
inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
-_count_leading_zeros(uint32_t value)
+_count_leading_zeros_32(uint32_t value)
{
uint32_t result;
@@ -255,18 +255,18 @@ _count_leading_zeros(uint32_t value)
: [value] "r" (value)
);
- return result;
+ return uint8_t(result);
}
/*-------------------------------------------------
- count_leading_ones - return the number of
+ count_leading_ones_32 - return the number of
leading one bits in a 32-bit value
-------------------------------------------------*/
-#define count_leading_ones _count_leading_ones
+#define count_leading_ones_32 _count_leading_ones_32
inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
-_count_leading_ones(uint32_t value)
+_count_leading_ones_32(uint32_t value)
{
uint32_t result;
@@ -276,7 +276,53 @@ _count_leading_ones(uint32_t value)
: [value] "r" (~value)
);
- return result;
+ return uint8_t(result);
+}
+
+
+/*-------------------------------------------------
+ count_leading_zeros_64 - return the number of
+ leading zero bits in a 64-bit value
+-------------------------------------------------*/
+
+#if defined(__ppc64__)
+#define count_leading_zeros_64 _count_leading_zeros_64
+inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
+_count_leading_zeros_64(uint64_t value)
+{
+ uint64_t result;
+
+ __asm__ (
+ " cntlzd %[result], %[value] \n"
+ : [result] "=r" (result)
+ : [value] "r" (value)
+ );
+
+ return uint8_t(result);
}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_ones_64 - return the number of
+ leading one bits in a 64-bit value
+-------------------------------------------------*/
+
+#if defined(__ppc64__)
+#define count_leading_ones_64 _count_leading_ones_64
+inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
+_count_leading_ones_64(uint64_t value)
+{
+ uint64_t result;
+
+ __asm__ (
+ " cntlzd %[result], %[value] \n"
+ : [result] "=r" (result)
+ : [value] "r" (~value)
+ );
+
+ return uint8_t(result);
+}
+#endif
#endif // MAME_OSD_EIGCCPPC_H
diff --git a/src/osd/eigccx86.h b/src/osd/eigccx86.h
index b3bbf7bd0ec..35f02e12f5e 100644
--- a/src/osd/eigccx86.h
+++ b/src/osd/eigccx86.h
@@ -433,13 +433,13 @@ _mulu_64x64(uint64_t a, uint64_t b, uint64_t &hi)
***************************************************************************/
/*-------------------------------------------------
- count_leading_zeros - return the number of
+ count_leading_zeros_32 - return the number of
leading zero bits in a 32-bit value
-------------------------------------------------*/
-#define count_leading_zeros _count_leading_zeros
+#define count_leading_zeros_32 _count_leading_zeros_32
inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
-_count_leading_zeros(uint32_t value)
+_count_leading_zeros_32(uint32_t value)
{
uint32_t result;
__asm__ (
@@ -450,18 +450,18 @@ _count_leading_zeros(uint32_t value)
, [bias] "rm" (~uint32_t(0)) // 'bias' can be register or memory
: "cc" // clobbers condition codes
);
- return 31U - result;
+ return uint8_t(31U - result);
}
/*-------------------------------------------------
- count_leading_ones - return the number of
+ count_leading_ones_32 - return the number of
leading one bits in a 32-bit value
-------------------------------------------------*/
-#define count_leading_ones _count_leading_ones
+#define count_leading_ones_32 _count_leading_ones_32
inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
-_count_leading_ones(uint32_t value)
+_count_leading_ones_32(uint32_t value)
{
uint32_t result;
__asm__ (
@@ -472,7 +472,55 @@ _count_leading_ones(uint32_t value)
, [bias] "rm" (~uint32_t(0)) // 'bias' can be register or memory
: "cc" // clobbers condition codes
);
- return 31U - result;
+ return uint8_t(31U - result);
}
+
+/*-------------------------------------------------
+ count_leading_zeros_64 - return the number of
+ leading zero bits in a 64-bit value
+-------------------------------------------------*/
+
+#ifdef __x86_64__
+#define count_leading_zeros_64 _count_leading_zeros_64
+inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
+_count_leading_zeros_64(uint64_t value)
+{
+ uint64_t result;
+ __asm__ (
+ " bsrq %[value], %[result] ;"
+ " cmovzq %[bias], %[result] ;"
+ : [result] "=&r" (result) // result can be in any register
+ : [value] "rm" (value) // 'value' can be register or memory
+ , [bias] "rm" (~uint64_t(0)) // 'bias' can be register or memory
+ : "cc" // clobbers condition codes
+ );
+ return uint8_t(63U - result);
+}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_ones_64 - return the number of
+ leading one bits in a 64-bit value
+-------------------------------------------------*/
+
+#ifdef __x86_64__
+#define count_leading_ones_64 _count_leading_ones_64
+inline uint8_t ATTR_CONST ATTR_FORCE_INLINE
+_count_leading_ones_64(uint64_t value)
+{
+ uint64_t result;
+ __asm__ (
+ " bsrq %[value], %[result] ;"
+ " cmovzq %[bias], %[result] ;"
+ : [result] "=&r" (result) // result can be in any register
+ : [value] "rm" (~value) // 'value' can be register or memory
+ , [bias] "rm" (~uint64_t(0)) // 'bias' can be register or memory
+ : "cc" // clobbers condition codes
+ );
+ return uint8_t(63U - result);
+}
+#endif
+
#endif // MAME_OSD_EIGCCX86_H
diff --git a/src/osd/eivc.h b/src/osd/eivc.h
index 56d1dcc3ab8..2ffd0e7633b 100644
--- a/src/osd/eivc.h
+++ b/src/osd/eivc.h
@@ -15,6 +15,9 @@
#include <intrin.h>
#pragma intrinsic(_BitScanReverse)
+#ifdef PTR64
+#pragma intrinsic(_BitScanReverse64)
+#endif
/***************************************************************************
@@ -22,13 +25,13 @@
***************************************************************************/
/*-------------------------------------------------
- count_leading_zeros - return the number of
+ count_leading_zeros_32 - return the number of
leading zero bits in a 32-bit value
-------------------------------------------------*/
-#ifndef count_leading_zeros
-#define count_leading_zeros _count_leading_zeros
-__forceinline uint8_t _count_leading_zeros(uint32_t value)
+#ifndef count_leading_zeros_32
+#define count_leading_zeros_32 _count_leading_zeros_32
+__forceinline uint8_t _count_leading_zeros_32(uint32_t value)
{
unsigned long index;
return _BitScanReverse(&index, value) ? (31U - index) : 32U;
@@ -37,17 +40,55 @@ __forceinline uint8_t _count_leading_zeros(uint32_t value)
/*-------------------------------------------------
- count_leading_ones - return the number of
+ count_leading_ones_32 - return the number of
leading one bits in a 32-bit value
-------------------------------------------------*/
-#ifndef count_leading_ones
-#define count_leading_ones _count_leading_ones
-__forceinline uint8_t _count_leading_ones(uint32_t value)
+#ifndef count_leading_ones_32
+#define count_leading_ones_32 _count_leading_ones_32
+__forceinline uint8_t _count_leading_ones_32(uint32_t value)
{
unsigned long index;
return _BitScanReverse(&index, ~value) ? (31U - index) : 32U;
}
#endif
+
+/*-------------------------------------------------
+ count_leading_zeros_64 - return the number of
+ leading zero bits in a 64-bit value
+-------------------------------------------------*/
+
+#ifndef count_leading_zeros_64
+#define count_leading_zeros_64 _count_leading_zeros_64
+__forceinline uint8_t _count_leading_zeros_64(uint64_t value)
+{
+ unsigned long index;
+#ifdef PTR64
+ return _BitScanReverse64(&index, value) ? (63U - index) : 64U;
+#else
+ return _BitScanReverse(&index, uint32_t(value >> 32)) ? (31U - index) : _BitScanReverse(&index, uint32_t(value)) ? (63U - index) : 64U;
+#endif
+}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_ones_64 - return the number of
+ leading one bits in a 64-bit value
+-------------------------------------------------*/
+
+#ifndef count_leading_ones_64
+#define count_leading_ones_64 _count_leading_ones_64
+__forceinline uint8_t _count_leading_ones_64(uint64_t value)
+{
+ unsigned long index;
+#ifdef PTR64
+ return _BitScanReverse64(&index, ~value) ? (63U - index) : 64U;
+#else
+ return _BitScanReverse(&index, ~uint32_t(value >> 32)) ? (31U - index) : _BitScanReverse(&index, ~uint32_t(value)) ? (63U - index) : 64U;
+#endif
+}
+#endif
+
#endif // MAME_OSD_EIVC_H
diff --git a/src/osd/eivcarm.h b/src/osd/eivcarm.h
new file mode 100644
index 00000000000..5e612cb25fb
--- /dev/null
+++ b/src/osd/eivcarm.h
@@ -0,0 +1,75 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+//============================================================
+//
+// eivcarm.h
+//
+// ARM/AArch64 inline implementations for MSVC compiler.
+//
+//============================================================
+
+#ifndef MAME_OSD_EIVCARM_H
+#define MAME_OSD_EIVCARM_H
+
+#pragma once
+
+#include <intrin.h>
+
+#pragma intrinsic(_CountLeadingZeros)
+#pragma intrinsic(_CountLeadingZeros64)
+#pragma intrinsic(_CountLeadingOnes)
+#pragma intrinsic(_CountLeadingOnes64)
+
+
+/***************************************************************************
+ INLINE BIT MANIPULATION FUNCTIONS
+***************************************************************************/
+
+/*-------------------------------------------------
+ count_leading_zeros_32 - return the number of
+ leading zero bits in a 32-bit value
+-------------------------------------------------*/
+
+#define count_leading_zeros_32 _count_leading_zeros_32
+__forceinline uint8_t _count_leading_zeros_32(uint32_t value)
+{
+ return uint8_t(_CountLeadingZeros(value));
+}
+
+
+/*-------------------------------------------------
+ count_leading_ones_32 - return the number of
+ leading one bits in a 32-bit value
+-------------------------------------------------*/
+
+#define count_leading_ones_32 _count_leading_ones_32
+__forceinline uint8_t _count_leading_ones_32(uint32_t value)
+{
+ return uint8_t(_CountLeadingOnes(value));
+}
+
+
+/*-------------------------------------------------
+ count_leading_zeros_64 - return the number of
+ leading zero bits in a 64-bit value
+-------------------------------------------------*/
+
+#define count_leading_zeros_64 _count_leading_zeros_64
+__forceinline uint8_t _count_leading_zeros_64(uint64_t value)
+{
+ return uint8_t(_CountLeadingZeros64(value));
+}
+
+
+/*-------------------------------------------------
+ count_leading_ones_64 - return the number of
+ leading one bits in a 64-bit value
+-------------------------------------------------*/
+
+#define count_leading_ones_64 _count_leading_ones_64
+__forceinline uint8_t _count_leading_ones_64(uint64_t value)
+{
+ return uint8_t(_CountLeadingOnes64(value));
+}
+
+#endif // MAME_OSD_EIVCARM_H
diff --git a/src/osd/eminline.h b/src/osd/eminline.h
index a7cc4cfee3d..02bd22b3fdb 100644
--- a/src/osd/eminline.h
+++ b/src/osd/eminline.h
@@ -33,8 +33,10 @@
#elif defined(_MSC_VER)
-#if (defined(_M_IX86) || defined(_M_X64))
+#if defined(_M_IX86) || defined(_M_X64)
#include "eivcx86.h"
+#elif defined(_M_ARM) || defined(_M_ARM64)
+#include "eivcarm.h"
#endif
#include "eivc.h"
@@ -352,12 +354,12 @@ inline bool addu_64x64_co(uint64_t a, uint64_t b, uint64_t &sum)
***************************************************************************/
/*-------------------------------------------------
- count_leading_zeros - return the number of
+ count_leading_zeros_32 - return the number of
leading zero bits in a 32-bit value
-------------------------------------------------*/
-#ifndef count_leading_zeros
-inline uint8_t count_leading_zeros(uint32_t val)
+#ifndef count_leading_zeros_32
+inline uint8_t count_leading_zeros_32(uint32_t val)
{
if (!val) return 32U;
uint8_t count;
@@ -368,12 +370,12 @@ inline uint8_t count_leading_zeros(uint32_t val)
/*-------------------------------------------------
- count_leading_ones - return the number of
+ count_leading_ones_32 - return the number of
leading one bits in a 32-bit value
-------------------------------------------------*/
-#ifndef count_leading_ones
-inline uint8_t count_leading_ones(uint32_t val)
+#ifndef count_leading_ones_32
+inline uint8_t count_leading_ones_32(uint32_t val)
{
uint8_t count;
for (count = 0; int32_t(val) < 0; count++) val <<= 1;
@@ -383,6 +385,37 @@ inline uint8_t count_leading_ones(uint32_t val)
/*-------------------------------------------------
+ count_leading_zeros_64 - return the number of
+ leading zero bits in a 64-bit value
+-------------------------------------------------*/
+
+#ifndef count_leading_zeros_64
+inline uint8_t count_leading_zeros_64(uint64_t val)
+{
+ if (!val) return 64U;
+ uint8_t count;
+ for (count = 0; int64_t(val) >= 0; count++) val <<= 1;
+ return count;
+}
+#endif
+
+
+/*-------------------------------------------------
+ count_leading_ones_64 - return the number of
+ leading one bits in a 64-bit value
+-------------------------------------------------*/
+
+#ifndef count_leading_ones_64
+inline uint8_t count_leading_ones_64(uint64_t val)
+{
+ uint8_t count;
+ for (count = 0; int64_t(val) < 0; count++) val <<= 1;
+ return count;
+}
+#endif
+
+
+/*-------------------------------------------------
population_count_32 - return the number of
one bits in a 32-bit value
-------------------------------------------------*/
diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp
index c23945ab01e..b9fe1ce0539 100644
--- a/src/tools/unidasm.cpp
+++ b/src/tools/unidasm.cpp
@@ -1345,7 +1345,7 @@ int main(int argc, char *argv[])
}
// Compute the shift amount from pc delta to granularity-sized elements
- u32 granularity_shift = 31 - count_leading_zeros(disasm->opcode_alignment());
+ u32 granularity_shift = 31 - count_leading_zeros_32(disasm->opcode_alignment());
// Number of pc steps to disassemble
u32 count = pclength;
@@ -1355,7 +1355,7 @@ int main(int argc, char *argv[])
// pc to string conversion
std::function<std::string (offs_t pc)> pc_to_string;
- int aw = 32 - count_leading_zeros(pc_mask);
+ int aw = 32 - count_leading_zeros_32(pc_mask);
bool is_octal = opts.octal; // Parameter? Per-cpu config?
if((flags & util::disasm_interface::PAGED2LEVEL) == util::disasm_interface::PAGED2LEVEL) {
int bits1 = disasm->page_address_bits();