summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Cowering <cowering@users.noreply.github.com>2014-11-06 08:15:05 -0600
committer Cowering <cowering@users.noreply.github.com>2014-11-06 08:15:05 -0600
commit8883f8e820107f63bb4feccd1d08518ac2843769 (patch)
tree09fea0a9bf00d96ef1181a8c11e35796e4cca2c4
parent52f8819348ec3c76714914e1604f7d4dc6d60dba (diff)
parentb559f4ada75d52ca24a25e7e338eb1a7b27e849e (diff)
Merge branch 'master' of https://github.com/mamedev/mame
-rw-r--r--.gitignore1
-rw-r--r--hash/amiga_workbench.xml28
-rw-r--r--hash/apfimag_cass.xml1214
-rw-r--r--hash/dmv.xml74
-rw-r--r--hash/ec1841.xml2
-rw-r--r--hash/epson_cpm.xml168
-rw-r--r--hash/fmtowns_cd.xml2
-rw-r--r--hash/g7400.xml2
-rw-r--r--hash/galaxy.xml401
-rw-r--r--hash/gamate.xml18
-rw-r--r--hash/gamegear.xml12
-rw-r--r--hash/gameking.xml26
-rw-r--r--hash/gbcolor.xml2
-rw-r--r--hash/hx20_flop.xml17
-rw-r--r--hash/ibm5150.xml68
-rw-r--r--hash/ibm5170.xml42
-rw-r--r--hash/intv.xml168
-rw-r--r--hash/m5_cart.xml (renamed from hash/m5.xml)2
-rw-r--r--hash/m5_cass.xml284
-rw-r--r--hash/megadriv.xml946
-rw-r--r--hash/mikrosha.xml64
-rw-r--r--hash/msx1_cart.xml2
-rw-r--r--hash/nes.xml31
-rw-r--r--hash/orao.xml250
-rw-r--r--hash/pecom_cass.xml66
-rw-r--r--hash/pegasus_cart.xml2
-rw-r--r--hash/pet_cass.xml2
-rw-r--r--hash/pokemini.xml55
-rw-r--r--hash/psion.xml364
-rw-r--r--hash/psion1.xml101
-rw-r--r--hash/psion2.xml1014
-rw-r--r--hash/radio86_cass.xml2
-rw-r--r--hash/snes.xml163
-rw-r--r--hash/sol20_cass.xml149
-rw-r--r--hash/sorcerer_cart.xml8
-rw-r--r--hash/sorcerer_cass.xml136
-rw-r--r--hash/spc1000_cass.xml1
-rw-r--r--hash/specpls3_flop.xml (renamed from hash/spectrum_flop.xml)0
-rw-r--r--hash/spectrum_cart.xml (renamed from hash/spectrum.xml)2
-rw-r--r--hash/ut88.xml12
-rw-r--r--hash/vreader.xml1
-rw-r--r--hash/vsmile_cd.xml10
-rw-r--r--hash/x07_cass.xml1385
-rw-r--r--makefile2
-rw-r--r--src/build/flags_clang.mak4
-rw-r--r--src/emu/bus/a2bus/a2pic.c2
-rw-r--r--src/emu/bus/abckb/abc99.c55
-rw-r--r--src/emu/bus/adam/ide.c2
-rw-r--r--src/emu/bus/adamnet/spi.c2
-rw-r--r--src/emu/bus/astrocde/exp.c85
-rw-r--r--src/emu/bus/astrocde/exp.h57
-rw-r--r--src/emu/bus/astrocde/ram.c213
-rw-r--r--src/emu/bus/astrocde/ram.h135
-rw-r--r--src/emu/bus/bus.mak27
-rw-r--r--src/emu/bus/c64/geocable.c2
-rw-r--r--src/emu/bus/cbmiec/c1541.c2
-rw-r--r--src/emu/bus/centronics/ctronics.c5
-rw-r--r--src/emu/bus/centronics/ctronics.h2
-rw-r--r--src/emu/bus/comx35/printer.c12
-rw-r--r--src/emu/bus/cpc/cpcexp.h2
-rw-r--r--src/emu/bus/cpc/playcity.c161
-rw-r--r--src/emu/bus/cpc/playcity.h67
-rw-r--r--src/emu/bus/dmv/dmvbus.c2
-rw-r--r--src/emu/bus/dmv/dmvbus.h5
-rw-r--r--src/emu/bus/dmv/k803.c133
-rw-r--r--src/emu/bus/dmv/k803.h54
-rw-r--r--src/emu/bus/dmv/k806.c17
-rw-r--r--src/emu/bus/dmv/k806.h3
-rw-r--r--src/emu/bus/ecbbus/grip.c3
-rw-r--r--src/emu/bus/econet/e01.c2
-rw-r--r--src/emu/bus/isa/isa_cards.c2
-rw-r--r--src/emu/bus/isa/isa_cards.h1
-rw-r--r--src/emu/bus/isa/lpt.c2
-rw-r--r--src/emu/bus/isa/num9rev.c318
-rw-r--r--src/emu/bus/isa/num9rev.h61
-rw-r--r--src/emu/bus/isa/s3virge.c3
-rw-r--r--src/emu/bus/isa/trident.c3
-rw-r--r--src/emu/bus/lpci/cirrus.c (renamed from src/emu/bus/pci/cirrus.c)0
-rw-r--r--src/emu/bus/lpci/cirrus.h (renamed from src/emu/bus/pci/cirrus.h)2
-rw-r--r--src/emu/bus/lpci/i82371ab.c (renamed from src/emu/bus/pci/i82371ab.c)0
-rw-r--r--src/emu/bus/lpci/i82371ab.h (renamed from src/emu/bus/pci/i82371ab.h)0
-rw-r--r--src/emu/bus/lpci/i82371sb.c (renamed from src/emu/bus/pci/i82371sb.c)0
-rw-r--r--src/emu/bus/lpci/i82371sb.h (renamed from src/emu/bus/pci/i82371sb.h)0
-rw-r--r--src/emu/bus/lpci/i82439tx.c (renamed from src/emu/bus/pci/i82439tx.c)0
-rw-r--r--src/emu/bus/lpci/i82439tx.h (renamed from src/emu/bus/pci/i82439tx.h)0
-rw-r--r--src/emu/bus/lpci/mpc105.c (renamed from src/emu/bus/pci/mpc105.c)0
-rw-r--r--src/emu/bus/lpci/mpc105.h (renamed from src/emu/bus/pci/mpc105.h)0
-rw-r--r--src/emu/bus/lpci/northbridge.c (renamed from src/emu/bus/pci/northbridge.c)0
-rw-r--r--src/emu/bus/lpci/northbridge.h (renamed from src/emu/bus/pci/northbridge.h)0
-rw-r--r--src/emu/bus/lpci/pci.c (renamed from src/emu/bus/pci/pci.c)0
-rw-r--r--src/emu/bus/lpci/pci.h (renamed from src/emu/bus/pci/pci.h)0
-rw-r--r--src/emu/bus/lpci/southbridge.c (renamed from src/emu/bus/pci/southbridge.c)2
-rw-r--r--src/emu/bus/lpci/southbridge.h (renamed from src/emu/bus/pci/southbridge.h)0
-rw-r--r--src/emu/bus/nes/ave.c3
-rw-r--r--src/emu/bus/nes/nes_ines.inc1
-rw-r--r--src/emu/bus/ql/sandy_superdisk.c2
-rw-r--r--src/emu/bus/ql/sandy_superqboard.c2
-rw-r--r--src/emu/bus/snes/sa1.c8
-rw-r--r--src/emu/bus/vtech/ioexp/printer.c2
-rw-r--r--src/emu/cpu/drcfe.c13
-rw-r--r--src/emu/cpu/drcuml.c1
-rw-r--r--src/emu/cpu/i386/i386.c52
-rw-r--r--src/emu/cpu/i386/i386op16.inc143
-rw-r--r--src/emu/cpu/i386/i386op32.inc143
-rw-r--r--src/emu/cpu/mips/mips3drc.c14
-rw-r--r--src/emu/cpu/mips/mips3fe.c14
-rw-r--r--src/emu/cpu/rsp/rsp.h3
-rw-r--r--src/emu/cpu/rsp/rspdrc.c443
-rw-r--r--src/emu/cpu/rsp/rspfe.c12
-rw-r--r--src/emu/cpu/tms0980/tms0980.c42
-rw-r--r--src/emu/cpu/tms57002/tms57002.c1
-rw-r--r--src/emu/cpu/upd7810/upd7810.c445
-rw-r--r--src/emu/cpu/upd7810/upd7810.h26
-rw-r--r--src/emu/drivers/xtal.h1
-rw-r--r--src/emu/machine/ataflash.c5
-rw-r--r--src/emu/machine/ataflash.h1
-rw-r--r--src/emu/machine/i6300esb.c119
-rw-r--r--src/emu/machine/i6300esb.h60
-rw-r--r--src/emu/machine/i82541.c30
-rw-r--r--src/emu/machine/i82541.h27
-rw-r--r--src/emu/machine/i82875p.c71
-rw-r--r--src/emu/machine/i82875p.h52
-rw-r--r--src/emu/machine/idehd.h7
-rw-r--r--src/emu/machine/lpci.c289
-rw-r--r--src/emu/machine/lpci.h81
-rw-r--r--src/emu/machine/machine.mak16
-rw-r--r--src/emu/machine/pc_lpt.c10
-rw-r--r--src/emu/machine/pci-apic.c18
-rw-r--r--src/emu/machine/pci-apic.h20
-rw-r--r--src/emu/machine/pci-sata.c44
-rw-r--r--src/emu/machine/pci-sata.h28
-rw-r--r--src/emu/machine/pci-smbus.c22
-rw-r--r--src/emu/machine/pci-smbus.h23
-rw-r--r--src/emu/machine/pci-usb.c42
-rw-r--r--src/emu/machine/pci-usb.h39
-rw-r--r--src/emu/machine/pci.c502
-rw-r--r--src/emu/machine/pci.h181
-rw-r--r--src/emu/machine/pic8259.c53
-rw-r--r--src/emu/machine/z80ctc.h2
-rw-r--r--src/emu/sound/pci-ac97.c34
-rw-r--r--src/emu/sound/pci-ac97.h26
-rw-r--r--src/emu/sound/sb0400.c22
-rw-r--r--src/emu/sound/sb0400.h25
-rw-r--r--src/emu/sound/sound.mak30
-rw-r--r--src/emu/video/gf6800gt.c30
-rw-r--r--src/emu/video/gf6800gt.h25
-rw-r--r--src/emu/video/pc_vga.c26
-rw-r--r--src/emu/video/pc_vga.h3
-rw-r--r--src/emu/video/snes_ppu.c147
-rw-r--r--src/emu/video/snes_ppu.h2
-rw-r--r--src/emu/video/upd7220.c96
-rw-r--r--src/emu/video/upd7220.h2
-rw-r--r--src/emu/video/video.mak9
-rw-r--r--src/lib/formats/cbm_crt.c146
-rw-r--r--src/lib/formats/d88_dsk.c6
-rw-r--r--src/lib/formats/esq16_dsk.c2
-rw-r--r--src/lib/formats/esq8_dsk.c2
-rw-r--r--src/lib/formats/flopimg.c56
-rw-r--r--src/lib/formats/flopimg.h8
-rw-r--r--src/lib/formats/p6001_cas.c2
-rw-r--r--src/lib/formats/p6001_cas.h2
-rw-r--r--src/lib/formats/pc98fdi_dsk.c2
-rw-r--r--src/lib/formats/victor9k_dsk.c256
-rw-r--r--src/lib/formats/victor9k_dsk.h59
-rw-r--r--src/lib/lib.mak1
-rw-r--r--src/lib/sqlite3/sqlite3.c6
-rw-r--r--src/lib/web/mongoose.c31
-rw-r--r--src/mame/audio/harddriv.c10
-rw-r--r--src/mame/drivers/8080bw.c17
-rw-r--r--src/mame/drivers/adp.c60
-rw-r--r--src/mame/drivers/atarig1.c2
-rw-r--r--src/mame/drivers/atarisy1.c2
-rw-r--r--src/mame/drivers/atarisy2.c15
-rw-r--r--src/mame/drivers/atetris.c11
-rw-r--r--src/mame/drivers/bagman.c59
-rw-r--r--src/mame/drivers/beaminv.c4
-rw-r--r--src/mame/drivers/calchase.c8
-rw-r--r--src/mame/drivers/cclimber.c34
-rw-r--r--src/mame/drivers/chihiro.c2
-rw-r--r--src/mame/drivers/cobra.c2
-rw-r--r--src/mame/drivers/coolridr.c15
-rw-r--r--src/mame/drivers/cps1.c4
-rw-r--r--src/mame/drivers/cv1k.c64
-rw-r--r--src/mame/drivers/cyberbal.c2
-rw-r--r--src/mame/drivers/fruitpc.c2
-rw-r--r--src/mame/drivers/funkball.c2
-rw-r--r--src/mame/drivers/funworld.c15
-rw-r--r--src/mame/drivers/galaxian.c2
-rw-r--r--src/mame/drivers/gamecstl.c2
-rw-r--r--src/mame/drivers/gammagic.c2
-rw-r--r--src/mame/drivers/gauntlet.c2
-rw-r--r--src/mame/drivers/harddriv.c1858
-rw-r--r--src/mame/drivers/kyugo.c2
-rw-r--r--src/mame/drivers/lindbergh.c77
-rw-r--r--src/mame/drivers/magictg.c2
-rw-r--r--src/mame/drivers/maygay1b.c194
-rw-r--r--src/mame/drivers/maygay1bsw.c274
-rw-r--r--src/mame/drivers/mediagx.c2
-rw-r--r--src/mame/drivers/midqslvr.c2
-rw-r--r--src/mame/drivers/mpu4.c6
-rw-r--r--src/mame/drivers/naomi.c275
-rw-r--r--src/mame/drivers/ninjakd2.c44
-rw-r--r--src/mame/drivers/pcxt.c2
-rw-r--r--src/mame/drivers/peplus.c286
-rw-r--r--src/mame/drivers/pgm.c19
-rw-r--r--src/mame/drivers/pgm2.c53
-rw-r--r--src/mame/drivers/photoply.c2
-rw-r--r--src/mame/drivers/pinball2k.c2
-rw-r--r--src/mame/drivers/psychic5.c64
-rw-r--r--src/mame/drivers/queen.c2
-rw-r--r--src/mame/drivers/rampart.c2
-rw-r--r--src/mame/drivers/rockrage.c25
-rw-r--r--src/mame/drivers/savquest.c2
-rw-r--r--src/mame/drivers/segacoin.c142
-rw-r--r--src/mame/drivers/segas18.c175
-rw-r--r--src/mame/drivers/segaufo.c544
-rw-r--r--src/mame/drivers/starwars.c10
-rw-r--r--src/mame/drivers/stv.c3
-rw-r--r--src/mame/drivers/taito_f3.c35
-rw-r--r--src/mame/drivers/taitowlf.c2
-rw-r--r--src/mame/drivers/tmnt.c10
-rw-r--r--src/mame/drivers/toaplan2.c27
-rw-r--r--src/mame/drivers/uapce.c4
-rw-r--r--src/mame/drivers/vigilant.c166
-rw-r--r--src/mame/drivers/vindictr.c2
-rw-r--r--src/mame/drivers/viper.c2
-rw-r--r--src/mame/drivers/voyager.c2
-rw-r--r--src/mame/drivers/xtom3d.c2
-rw-r--r--src/mame/drivers/xybots.c2
-rw-r--r--src/mame/drivers/yunsun16.c82
-rw-r--r--src/mame/includes/atarigx2.h5
-rw-r--r--src/mame/includes/atarisy2.h6
-rw-r--r--src/mame/includes/atetris.h7
-rw-r--r--src/mame/includes/harddriv.h291
-rw-r--r--src/mame/includes/konamigx.h12
-rw-r--r--src/mame/includes/maygay1b.h27
-rw-r--r--src/mame/includes/pgm.h1
-rw-r--r--src/mame/includes/psychic5.h47
-rw-r--r--src/mame/includes/segas18.h8
-rw-r--r--src/mame/includes/slapstic.h173
-rw-r--r--src/mame/includes/starwars.h6
-rw-r--r--src/mame/includes/stv.h10
-rw-r--r--src/mame/includes/tx1.h3
-rw-r--r--src/mame/layout/newufo.lay267
-rw-r--r--src/mame/layout/racedrivpan.lay16
-rw-r--r--src/mame/layout/ufo21.lay247
-rw-r--r--src/mame/layout/ufo800.lay175
-rw-r--r--src/mame/layout/ufomini.lay198
-rw-r--r--src/mame/machine/315-5881_crypt.c817
-rw-r--r--src/mame/machine/315-5881_crypt.h87
-rw-r--r--src/mame/machine/315_5296.h2
-rw-r--r--src/mame/machine/asic65.c2
-rw-r--r--src/mame/machine/atarigen.c31
-rw-r--r--src/mame/machine/atarigen.h2
-rw-r--r--src/mame/machine/harddriv.c52
-rw-r--r--src/mame/machine/n64.c121
-rw-r--r--src/mame/machine/naomim2.c785
-rw-r--r--src/mame/machine/naomim2.h48
-rw-r--r--src/mame/machine/pgmprot_igs025_igs012.c15
-rw-r--r--src/mame/machine/segabb.c30
-rw-r--r--src/mame/machine/segabb.h27
-rw-r--r--src/mame/machine/slapstic.c195
-rw-r--r--src/mame/machine/stvprot.c19
-rw-r--r--src/mame/machine/zndip.h1
-rw-r--r--src/mame/mame.lst71
-rw-r--r--src/mame/mame.mak20
-rw-r--r--src/mame/video/atarisy2.c8
-rw-r--r--src/mame/video/harddriv.c15
-rw-r--r--src/mame/video/k007121.c13
-rw-r--r--src/mame/video/konamigx.c45
-rw-r--r--src/mame/video/konamiic.txt9
-rw-r--r--src/mame/video/psychic5.c186
-rw-r--r--src/mame/video/rdpspn16.c2
-rw-r--r--src/mame/video/rdptpipe.c49
-rw-r--r--src/mame/video/rockrage.c21
-rw-r--r--src/mame/video/tia.c16
-rw-r--r--src/mame/video/twin16.c162
-rw-r--r--src/mame/video/tx1.c37
-rw-r--r--src/mess/drivers/ace.c2
-rw-r--r--src/mess/drivers/amiga.c2
-rw-r--r--src/mess/drivers/amstrad.c9
-rw-r--r--src/mess/drivers/apf.c12
-rw-r--r--src/mess/drivers/applix.c2
-rw-r--r--src/mess/drivers/apricot.c2
-rw-r--r--src/mess/drivers/apricotf.c2
-rw-r--r--src/mess/drivers/apricotp.c2
-rw-r--r--src/mess/drivers/astrocde.c190
-rw-r--r--src/mess/drivers/atarist.c8
-rw-r--r--src/mess/drivers/atom.c4
-rw-r--r--src/mess/drivers/bbc.c6
-rw-r--r--src/mess/drivers/bebox.c6
-rw-r--r--src/mess/drivers/bullet.c4
-rw-r--r--src/mess/drivers/bw12.c2
-rw-r--r--src/mess/drivers/bw2.c2
-rw-r--r--src/mess/drivers/cat.c2
-rw-r--r--src/mess/drivers/clcd.c2
-rw-r--r--src/mess/drivers/compis.c2
-rw-r--r--src/mess/drivers/crvision.c4
-rw-r--r--src/mess/drivers/dmv.c44
-rw-r--r--src/mess/drivers/dvk_ksm.c416
-rw-r--r--src/mess/drivers/einstein.c2
-rw-r--r--src/mess/drivers/elwro800.c2
-rw-r--r--src/mess/drivers/ep64.c2
-rw-r--r--src/mess/drivers/fc100.c2
-rw-r--r--src/mess/drivers/fm7.c10
-rw-r--r--src/mess/drivers/fp1100.c2
-rw-r--r--src/mess/drivers/gamate.c383
-rw-r--r--src/mess/drivers/gimix.c3
-rw-r--r--src/mess/drivers/gmaster.c7
-rw-r--r--src/mess/drivers/hx20.c2
-rw-r--r--src/mess/drivers/isbc.c2
-rw-r--r--src/mess/drivers/jtc.c2
-rw-r--r--src/mess/drivers/kaypro.c4
-rw-r--r--src/mess/drivers/kyocera.c8
-rw-r--r--src/mess/drivers/lviv.c2
-rw-r--r--src/mess/drivers/m5.c6
-rw-r--r--src/mess/drivers/mbee.c4
-rw-r--r--src/mess/drivers/mc1000.c2
-rw-r--r--src/mess/drivers/mc1502.c74
-rw-r--r--src/mess/drivers/merlin.c247
-rw-r--r--src/mess/drivers/msx.c10
-rw-r--r--src/mess/drivers/mtx.c2
-rw-r--r--src/mess/drivers/mz700.c2
-rw-r--r--src/mess/drivers/nc.c2
-rw-r--r--src/mess/drivers/oric.c2
-rw-r--r--src/mess/drivers/pasogo.c2
-rw-r--r--src/mess/drivers/pc1512.c5
-rw-r--r--src/mess/drivers/pc8001.c4
-rw-r--r--src/mess/drivers/pc8801.c2
-rw-r--r--src/mess/drivers/pc9801.c9
-rw-r--r--src/mess/drivers/pencil2.c2
-rw-r--r--src/mess/drivers/phc25.c2
-rw-r--r--src/mess/drivers/portfoli.c2
-rw-r--r--src/mess/drivers/prof180x.c2
-rw-r--r--src/mess/drivers/psion.c8
-rw-r--r--src/mess/drivers/ptcsol.c12
-rw-r--r--src/mess/drivers/px4.c723
-rw-r--r--src/mess/drivers/px8.c3
-rw-r--r--src/mess/drivers/rmnimbus.c2
-rw-r--r--src/mess/drivers/sage2.c2
-rw-r--r--src/mess/drivers/samcoupe.c4
-rw-r--r--src/mess/drivers/sg1000.c2
-rw-r--r--src/mess/drivers/sh4robot.c2
-rw-r--r--src/mess/drivers/simon.c193
-rw-r--r--src/mess/drivers/sorcerer.c3
-rw-r--r--src/mess/drivers/spc1000.c99
-rw-r--r--src/mess/drivers/specpls3.c2
-rw-r--r--src/mess/drivers/spectrum.c4
-rw-r--r--src/mess/drivers/super80.c4
-rw-r--r--src/mess/drivers/svi318.c6
-rw-r--r--src/mess/drivers/tandy2k.c2
-rw-r--r--src/mess/drivers/thomson.c10
-rw-r--r--src/mess/drivers/tiki100.c2
-rw-r--r--src/mess/drivers/tmc600.c2
-rw-r--r--src/mess/drivers/trs80.c2
-rw-r--r--src/mess/drivers/trs80m2.c4
-rw-r--r--src/mess/drivers/tutor.c2
-rw-r--r--src/mess/drivers/tvc.c2
-rw-r--r--src/mess/drivers/v1050.c2
-rw-r--r--src/mess/drivers/victor9k.c570
-rw-r--r--src/mess/drivers/wangpc.c2
-rw-r--r--src/mess/drivers/wswan.c28
-rw-r--r--src/mess/drivers/x07.c3
-rw-r--r--src/mess/drivers/xerox820.c101
-rw-r--r--src/mess/drivers/xor100.c2
-rw-r--r--src/mess/includes/amstrad.h1
-rw-r--r--src/mess/includes/at.h8
-rw-r--r--src/mess/includes/mc1502.h7
-rw-r--r--src/mess/includes/sorcerer.h1
-rwxr-xr-xsrc/mess/includes/ti85.h3
-rw-r--r--src/mess/includes/victor9k.h146
-rw-r--r--src/mess/includes/wswan.h97
-rw-r--r--src/mess/includes/xerox820.h48
-rw-r--r--src/mess/layout/merlin.lay678
-rw-r--r--src/mess/layout/simon.lay180
-rw-r--r--src/mess/machine/at.c2
-rw-r--r--src/mess/machine/bebox.c4
-rw-r--r--src/mess/machine/coco.c18
-rw-r--r--src/mess/machine/genpc.c2
-rw-r--r--src/mess/machine/ms7004.c498
-rw-r--r--src/mess/machine/ms7004.h83
-rw-r--r--src/mess/machine/thomson.c2
-rwxr-xr-xsrc/mess/machine/ti85.c51
-rw-r--r--src/mess/machine/victor9k_fdc.c1198
-rw-r--r--src/mess/machine/victor9k_fdc.h238
-rw-r--r--src/mess/machine/victor9kb.c82
-rw-r--r--src/mess/machine/victor9kb.h2
-rw-r--r--src/mess/machine/wswan.c1009
-rw-r--r--src/mess/machine/x820kb.c390
-rw-r--r--src/mess/machine/x820kb.h90
-rw-r--r--src/mess/mess.lst5
-rw-r--r--src/mess/mess.mak15
-rw-r--r--src/mess/tools/castool/main.c73
-rw-r--r--src/mess/video/wswan.c583
-rw-r--r--src/mess/video/wswan_video.c1211
-rw-r--r--src/mess/video/wswan_video.h147
-rw-r--r--src/osd/sdl/man/castool.12
-rw-r--r--src/osd/sdl/man/chdman.12
-rw-r--r--src/osd/sdl/man/floptool.147
-rw-r--r--src/osd/sdl/man/imgtool.12
-rw-r--r--src/osd/sdl/man/jedutil.12
-rw-r--r--src/osd/sdl/man/ldresample.12
-rw-r--r--src/osd/sdl/man/ldverify.12
-rw-r--r--src/osd/sdl/man/mame.66
-rw-r--r--src/osd/sdl/man/mess.66
-rw-r--r--src/osd/sdl/man/romcmp.12
-rw-r--r--src/osd/sdl/man/testkeys.12
-rw-r--r--src/osd/sdl/sdl.mak9
408 files changed, 23781 insertions, 8563 deletions
diff --git a/.gitignore b/.gitignore
index d55db650fac..f3ee176fc10 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@
/cfg
/diff
/ini
+/inp
/nvram
/obj
/snap
diff --git a/hash/amiga_workbench.xml b/hash/amiga_workbench.xml
index f6585cef478..a995b455c90 100644
--- a/hash/amiga_workbench.xml
+++ b/hash/amiga_workbench.xml
@@ -212,20 +212,21 @@
</part>
</software>
- <software name="wb133r3434" cloneof="wbenc133">
- <description>Workbench 1.3.3 (Rev. 34.34)</description>
+ <!-- 317746-01 Workbench 1.3 (US) -->
+ <!-- 317746-03 Workbench 1.3.2 (US) -->
+
+ <software name="wbenc133_us" cloneof="wbenc133">
+ <description>Workbench 1.3.3 (US)</description>
<year>1990</year>
<publisher>Commodore</publisher>
-
<part name="flop1" interface="floppy_3_5">
- <feature name="part_id" value="Amiga Workbench Version 1.3.3 (Rev. 34.34)" />
+ <feature name="part_id" value="Workbench 1.3.3 (US)" />
<dataarea name="flop" size="901120">
- <rom name="317746-04_workbench.adf" size="901120" crc="bf299bca" sha1="8bac53a89cd1fe5a7762de9bd61a1592f10af2df" offset="0"/>
+ <rom name="317746-04_workbench.adf" size="901120" crc="bf299bca" sha1="8bac53a89cd1fe5a7762de9bd61a1592f10af2df" status="baddump" offset="0"/>
</dataarea>
</part>
-
<part name="flop2" interface="floppy_3_5">
- <feature name="part_id" value="Amiga Extras Amiga Basic Printer Drivers Version 1.3" />
+ <feature name="part_id" value="Extras 1.3 (US)" />
<dataarea name="flop" size="901120">
<rom name="317748-02_extras.adf" size="901120" crc="256a4b82" sha1="465a65aa89fe4b016fee968ef75ab08de9bdfbc6" offset="0"/>
</dataarea>
@@ -496,4 +497,17 @@
</part>
</software>
+ <!-- Version 3.5 -->
+
+ <software name="amigos35">
+ <description>AmigaOS 3.5</description>
+ <year>1999</year>
+ <publisher>Haage &amp; Partner</publisher>
+ <part name="disc" interface="cdrom">
+ <diskarea name="disc">
+ <disk name="amigaos35" sha1="6dcf1e5821717128ac2e763064f1ef31dee3ce8c"/>
+ </diskarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/apfimag_cass.xml b/hash/apfimag_cass.xml
new file mode 100644
index 00000000000..22e89445cf7
--- /dev/null
+++ b/hash/apfimag_cass.xml
@@ -0,0 +1,1214 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<softwarelist name="apfimag_cass" description="APF Imagination cassettes">
+
+<!-- To load a tape, just start APF Imagination with the BASIC cart inserted, and type CLOAD followed by <Return>
+(by default mapped to your ']' key). Then start the tape from the Internal UI and press <Return>.
+
+If you don't press <Return>, the system won't read the tape (this is fairly unusual but it's the way the system works)
+
+Once the tape has finished loading, just type RUN to start the loaded program -->
+
+
+<!-- Games & Programs -->
+
+ <software name="16letter">
+ <description>16K Letter Writter</description>
+ <year>1982</year>
+ <publisher>Milt Perry</publisher>
+ <feature name="usage" value="Requires 16K RAM" />
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1743020">
+ <rom name="m_perry_16k_letter_writter(16k).wav" size="1743020" crc="d1ca5e2d" sha1="4c844e54836d4f1de0bf4d653860c5c20444d304" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="advmurdr">
+ <description>An Adventure in Murder</description>
+ <year>198?</year>
+ <publisher>R. Eisman</publisher>
+ <feature name="usage" value="Requires 16K RAM" />
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="2030598">
+ <rom name="r_eisman_adventure_in_murder(16k).wav" size="2030598" crc="5fbd2aed" sha1="aca54da042c60b96fd7288f6a5df54d7239757c8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="alphabit">
+ <description>ALPHAbit</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <feature name="usage" value="Requires 16K RAM" />
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1750444">
+ <rom name="mr_rs_alphabit(16k).wav" size="1750444" crc="f7eb904d" sha1="19dfca668cc5c54af0278553f5600ba3e8bdd9ee" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="alphacnt" supported="partial">
+ <description>Alpha Centurion</description>
+ <year>1983</year>
+ <publisher>G. Karabin</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1735100">
+ <rom name="g_karabin_alpha_centurion.wav" size="1735100" crc="1ac5af69" sha1="d174a8bb9c739210e294fed005feabeb95b8c50d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="alpinski" supported="partial">
+ <description>Alpine Skiing</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1004972">
+ <rom name="york_10_computerware_alpine_skiing.wav" size="1004972" crc="1980dd7a" sha1="d919ae9c2cc90867321086fb7163353e5010a431" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="apfman">
+ <description>APF-MAN</description>
+ <year>1982</year>
+ <publisher>Carl A. Echols</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1075884">
+ <rom name="carl_echols_apf-man.wav" size="1075884" crc="748df00d" sha1="01c70f9090f1d32a5b2493cfb70ba58574b92896" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- it keeps telling "START ME WITH: GOTO100", but it does not recognize the command -->
+ <software name="artist" supported="no">
+ <description>Artist and Easel</description>
+ <year>1979</year>
+ <publisher>APF Electronics</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="3580144">
+ <rom name="apf_artistandeasel.wav" size="3580144" crc="268b1b70" sha1="587050373ea8582ffcd25214a734f47d89e35ce2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="asteroid" supported="partial">
+ <description>Asteroids</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1039532">
+ <rom name="york_10_computerware_asteroids.wav" size="1039532" crc="89564571" sha1="f71d83afce14586ac507f74f2e2b82338ac02b4c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="astpatrl">
+ <description>Astroid Patrol</description>
+ <year>198?</year>
+ <publisher>Rief Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="906668">
+ <rom name="rief_games_astroid_patrol.wav" size="906668" crc="426ee685" sha1="5d6ee999b1868bb23686fb4a5fb6503e107a3bd1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="baja" supported="partial">
+ <description>Baja</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1009324">
+ <rom name="york_10_computerware_baja.wav" size="1009324" crc="45d6e690" sha1="090462adcb96c2525e7f3ecd981902b815eab5e7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- This requires the BASIC Tutor manual to be used in a profitable way. The program
+checks whether the user is typing the program printed in the manual, for each lesson -->
+ <software name="bastutor">
+ <description>Basic Tutor</description>
+ <year>1980</year>
+ <publisher>APF Electronics</publisher>
+ <part name="cass1" interface="apf_cass">
+ <feature name="part_id" value="Lessons 1-12"/>
+ <dataarea name="cass" size="41412556">
+ <rom name="apf_basictutor_tape1_lessons1-12.wav" size="41412556" crc="c712ccae" sha1="8aec7bc57edd9eac64c5b866d61c3522507ebcf2" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="apf_cass">
+ <feature name="part_id" value="Lessons 13-22"/>
+ <dataarea name="cass" size="29458552">
+ <rom name="apf_basictutor_tape2_lessons13-22.wav" size="29458552" crc="969a7c6d" sha1="95aae528297016c8a01af537b4747cac838b110b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bzone">
+ <description>Battle Zone</description>
+ <year>19??</year>
+ <publisher>IM-1 Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="961708">
+ <rom name="im-1_games_battle_zone.wav" size="961708" crc="83f8b84d" sha1="d22e8ea1326fd12448d4ddc547e6496459789c36" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="biplane">
+ <description>Bi-Plane Rescue</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1007788">
+ <rom name="york_10_computerware_bi-plane_rescue.wav" size="1007788" crc="f1dbccb6" sha1="b73651da4b73b170cc7e68e8076f9977febf0854" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- how to trigger the actual program instead of the demo? -->
+ <software name="billbord">
+ <description>Electronic Billboard</description>
+ <year>1979</year>
+ <publisher>APF Electronics</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1323044">
+ <rom name="apf_billboard.wav" size="1323044" crc="79d80e2d" sha1="08bc1e907ce7082041c475ed7bf91d792282d9ab" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boxing">
+ <description>Boxing</description>
+ <year>198?</year>
+ <publisher>Millivision</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1288876">
+ <rom name="millivision_boxing.wav" size="1288876" crc="881ab481" sha1="c9e1b34dab520c763c14af7e7203761c6ba9a567" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- LINE XXX NO LINE REFERENCED error -->
+ <software name="bugger">
+ <description>Bugger (Bad?)</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1089196">
+ <rom name="mr_rs_bugger.wav" size="1089196" crc="39bf5e65" sha1="29cb8ee3fc263126db659fffd34271015e6efc38" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="burgman">
+ <description>Burger Man</description>
+ <year>198?</year>
+ <publisher>Rief Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1181612">
+ <rom name="rief_games_of_course_burgerman.wav" size="1181612" crc="a263bd55" sha1="212a77dac4a0533bf7f9bf67eae51a313dbdbdfe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="centiped">
+ <description>Centipeed</description>
+ <year>198?</year>
+ <publisher>John Mechalas</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1089452">
+ <rom name="john_machalas_centipeed.wav" size="1089452" crc="0cc4b9ae" sha1="b02402b99cefa0692cc4d37d7a3e5a62f6a85e82" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="choplift" supported="partial">
+ <description>Choplifter</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1050796">
+ <rom name="york_10_computerware_choplifter.wav" size="1050796" crc="d42f556c" sha1="4c67a68ba328709bca14a9df724f57c2916e1468" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="choppint">
+ <description>Chopper Interceptor</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1069484">
+ <rom name="york_10_computerware_chopper_interceptor.wav" size="1069484" crc="be8d0f60" sha1="8012bd1a1454526951f26ad3339044ebc932467b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="concentr" supported="partial">
+ <description>Concentration</description>
+ <year>198?</year>
+ <publisher>G. R. Jones</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1073188">
+ <rom name="g_r_jones_concentration.wav" size="1073188" crc="eafe98f5" sha1="c065c228d361e25b3074d94d9977acddf09c4249" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="copycat">
+ <description>Copy Cat</description>
+ <year>198?</year>
+ <publisher>R. Eisman</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="961964">
+ <rom name="r_eisman_copy_cat.wav" size="961964" crc="f4854e40" sha1="ef78ccb2dc2552be3026a5b309afe8877b718e96" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="deathtnk">
+ <description>Death Tank</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1038252">
+ <rom name="york_10_computerware_death_tank.wav" size="1038252" crc="e9ed81f0" sha1="a357ec0e0acc06008570428f28a68cdb01cd4acb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="defender">
+ <description>Defender (MR R)</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1013676">
+ <rom name="mr_rs_defender.wav" size="1013676" crc="ac655b82" sha1="cfba2b58c3d2090467218505293c2b753b4ae377" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="defendyc" supported="partial">
+ <description>Defender (York 10 Computerware)</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <feature name="alt_title" value="Allien Defender II?" />
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1158572">
+ <rom name="york_10_computerware_allien_defender_ii.wav" size="1158572" crc="9a614370" sha1="9e626a3e32da1a5d2149c7c07b9554532857550f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="defendyca" cloneof="defendyc" supported="partial">
+ <description>Defender (York 10 Computerware, Alt)</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1150636">
+ <rom name="york_10_computerware_defender.wav" size="1150636" crc="1364f5e7" sha1="0ababf7ae66bc0c0f78be42de26a0132712f6d2a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo">
+ <description>Demo</description>
+ <year>197?</year>
+ <publisher>APF Electronics</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1202476">
+ <rom name="apf_demo.wav" size="1202476" crc="9dc09935" sha1="6ae8511a79cb62c1a8c61243b3b830fca8e47255" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="depthchg">
+ <description>Depth Charge!!</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1067180">
+ <rom name="mr_rs_depth_charge.wav" size="1067180" crc="aecaabf0" sha1="095bab2792175e17c1fe0bd0f2bd23b82fcdd676" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dkong2">
+ <description>Donkey Kong II</description>
+ <year>198?</year>
+ <publisher>Rief Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1993004">
+ <rom name="rief_games_of_course_donkey_kong_ii.wav" size="1993004" crc="2428fdf1" sha1="393bb1a136ffa6afcd846b9ca588f2cc6950e0c9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dkong">
+ <description>Donki-Kong</description>
+ <year>198?</year>
+ <publisher>Millivision</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1214636">
+ <rom name="millivision_donki-kong.wav" size="1214636" crc="941cb740" sha1="53cd0e2e0655c0a02654581a5d101952694dc3f3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dkongjr">
+ <description>Donki-Kong Jr</description>
+ <year>198?</year>
+ <publisher>Millivision</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="972972">
+ <rom name="millivision_donki-kong_jr.wav" size="972972" crc="ba1c0f50" sha1="afbeeec2ee6da4b6fe1fe70c6689b3937ca2001a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- I have not been able to paly the game! am I doing something wrong, or is the tape at fault? -->
+ <software name="drawdraw" supported="no">
+ <description>Draw Draw</description>
+ <year>198?</year>
+ <publisher>Rief Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1102508">
+ <rom name="rief_games_draw_draw.wav" size="1102508" crc="9542e1b3" sha1="476183d19adccdb3e47d8efdad5784fb044a39e2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- Not sure whether I don't know how to play, or the game does not load correctly... -->
+ <software name="dungtres" supported="partial">
+ <description>Dungeon_Treasure</description>
+ <year>19??</year>
+ <publisher>IM-1 Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1055148">
+ <rom name="im-1_games_dungeon_treasure.wav" size="1055148" crc="1cf4b27a" sha1="249bf24c3a50884d09368d661241ce14374ac9be" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="et">
+ <description>E.T.</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1045164">
+ <rom name="york_10_computerware_et.wav" size="1045164" crc="13ed31b4" sha1="097a916acc88f27c75560a3d8736a28a98a8fca9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- Escape 2 does not load correctly -->
+ <software name="lg3in1" supported="partial">
+ <description>Escape + 21 + Escape 2 (Bad?)</description>
+ <year>198?</year>
+ <publisher>Lacroix Games</publisher>
+ <feature name="usage" value="Wait 1 or 2 secs from PLAY press and Return" />
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="3539884">
+ <rom name="lacroix_games_(escape_21_escape2).wav" size="3539884" crc="3a799a9e" sha1="d3486a021c7ef45db0e5f553153affbb2accf09a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- LINE <>40 WHAT -->
+ <software name="escape" supported="no">
+ <description>Escape!!!</description>
+ <year>198?</year>
+ <publisher>E. Beckett</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1271980">
+ <rom name="e_beckett_escape!!!.wav" size="1271980" crc="07d54612" sha1="866eba13c2cd0d051e927362b1d20b938107b1f2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="emt">
+ <description>Excape Mommies Tumb</description>
+ <year>19??</year>
+ <publisher>Handy Dandy Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1034156">
+ <rom name="handy_dandy_games_excape_mommies_tumb.wav" size="1034156" crc="abf7fd14" sha1="2ab25b82a6c9373f5561b698d20ba4ddf2c825bd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ferzerx">
+ <description>Ferzerx</description>
+ <year>1983</year>
+ <publisher>G. R. Jones</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1503848">
+ <rom name="g_r_jones_ferzerx.wav" size="1503848" crc="0b90827a" sha1="9685d8d437bae8101c44da9ab5c0da8c056cfdd1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fire">
+ <description>Fire!</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1056172">
+ <rom name="mr_rs_fire.wav" size="1056172" crc="516c170b" sha1="d8a7937fd947c1dc76e87909ee87fca5c3485b85" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="foosebal">
+ <description>FooseBall</description>
+ <year>198?</year>
+ <publisher>E. Beckett</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1167276">
+ <rom name="e_beckett_fooseball.wav" size="1167276" crc="471f4623" sha1="99a65036eb1c9ccb9e648beb3af8b535b4b08b35" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="frogger" supported="partial">
+ <description>Frogger</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1050796">
+ <rom name="york_10_computerware_frogger.wav" size="1050796" crc="5daf7f16" sha1="b0929f68c54f78ece0c7a3611c168647385ccfc0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="froggy" supported="no">
+ <description>Froggy (Bad?)</description>
+ <year>198?</year>
+ <publisher>E. Beckett</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1224492">
+ <rom name="e_beckett_froggy.wav" size="1224492" crc="ef0bf4b9" sha1="b35f53062117c98fbff2903cbd9ae52df91bf80e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- Saucer Shoot does not load correctly -->
+ <software name="mrr2in1" supported="partial">
+ <description>Gondola Pitts + Saucer Shoot</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="2550572">
+ <rom name="mr_rs_gondola_pitts_saucer_shoot.wav" size="2550572" crc="94d89b01" sha1="6e7441b143c4dec1f6795e4d710dcfe45c61edaf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gfxhelp">
+ <description>Graphics Helper</description>
+ <year>1982</year>
+ <publisher>Carl A. Echols</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1162156">
+ <rom name="carl_echols_graphics_editor.wav" size="1162156" crc="d8160190" sha1="9e2f4a91aabf442191495085fd4dc05daafc1454" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="gskull" supported="partial">
+ <description>GraySkull</description>
+ <year>1984</year>
+ <publisher>G. Karabin</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="2033578">
+ <rom name="g_karabin_greyskull.wav" size="2033578" crc="977a672d" sha1="d35924b4b64d085a1b9e122d34ed2bcff6310898" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- LINE XXX NO LINE REFERENCED error -->
+ <software name="headhunt" supported="no">
+ <description>Head-Hunter</description>
+ <year>198?</year>
+ <publisher>G. R. Jones</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1388952">
+ <rom name="g_r_jones_head-hunter.wav" size="1388952" crc="f510ddc7" sha1="f83f55a8534571ba7a227b221772870d5a7decd0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="heartatk">
+ <description>Heart Attack</description>
+ <year>1983</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1147052">
+ <rom name="mr_rs_ekg.wav" size="1147052" crc="95d1da13" sha1="e204cfaede58ef9df5d13b9162318a419191a28a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- It does not load properly -->
+ <software name="tape4" supported="no">
+ <description>IM-1 in a Million Club Newsletter Tape 4</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="5163564">
+ <rom name="im-1_in-a-million_club_tape_4.wav" size="5163564" crc="6b0f57f0" sha1="fc5673baa591dab4e18f4d2c34e13fd1f896ccf5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tape9">
+ <description>IM-1 in a Million Club Newsletter Tape 9</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="5218092">
+ <rom name="im-1_in-a-million_club_tape_9.wav" size="5218092" crc="55ec9fd7" sha1="c1ffc604183ce81d51c12143414ca44665cc3817" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="logiclck">
+ <description>Lord Logic-Locks</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1042092">
+ <rom name="im-1_in-a-million_lord_logic-locks.wav" size="1042092" crc="17793917" sha1="84df70d73adb5ab04b2730362b3d3cfe1ab492f5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- It does not load properly -->
+ <software name="llander" supported="no">
+ <description>Lunar Lander (Bad?)</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1356204">
+ <rom name="im-1_in_a_million_lunar_lander.wav" size="1356204" crc="327e6934" sha1="e8a9b9805c485342275dad13b5c47fb7bcc6877d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="maze">
+ <description>Maze</description>
+ <year>198?</year>
+ <publisher>R. Eisman</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1112748">
+ <rom name="r_eisman_maze.wav" size="1112748" crc="cdaa77d5" sha1="993f9b676e028186847208312af97aea1bea6a14" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mimicmus">
+ <description>Mimic My Music</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1036204">
+ <rom name="im-1_in-a-million_mimic_my_music.wav" size="1036204" crc="99595de5" sha1="c3628b1dae626e46da6697c17d9c07251faea99a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minotaur">
+ <description>Minotaur</description>
+ <year>1982</year>
+ <publisher>G. R. Jones</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1082868">
+ <rom name="g_r_jones_minotaur.wav" size="1082868" crc="de2ac0a7" sha1="aaa79e082076bbffed958d9b61bf181f150ac883" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="missimpa">
+ <description>Mission: Improbable - Mission Alpha</description>
+ <year>1982</year>
+ <publisher>Geo-Grafix</publisher>
+ <feature name="usage" value="Requires 16K RAM" />
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="10269596">
+ <rom name="geo_grafix_mission-improbable_alpha(16k).wav" size="10269596" crc="29a0d823" sha1="75e7b305f2004af57fa9b1347c3e2f12cb68d525" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- LINE XXX NO LINE REFERENCED error -->
+ <software name="missimpb" supported="no">
+ <description>Mission: Improbable - Mission Bravo</description>
+ <year>198?</year>
+ <publisher>Geo-Grafix</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1372972">
+ <rom name="geo_grafix_mission-improbable_bravo.wav" size="1372972" crc="cbe6c418" sha1="1565f15ffd3b1c5fb1d4df2e522e7ffce082acdf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- it complains about missing data and keeps asking to reload the tape -->
+ <software name="musicomp" supported="no">
+ <description>Music Composer Player Piano</description>
+ <year>1979</year>
+ <publisher>APF Electronics</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="3403952">
+ <rom name="apf_musiccomposer_playerpiano.wav" size="3403952" crc="c7507a6c" sha1="e5681cd13d79730c7f3118d451c0efa697899fde" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mystmans">
+ <description>Mystry Mansion</description>
+ <year>19??</year>
+ <publisher>Handy Dandy Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1070054">
+ <rom name="handy_dandy_games_mystry_mansion.wav" size="1070054" crc="2fc4c320" sha1="2c4eaef013f1d501accb6ec34bcec6b27995e229" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pacrat">
+ <description>Pac-Rat</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="957868">
+ <rom name="mr_rs_pack_rat(audio lost).wav" size="957868" crc="dbb4f160" sha1="4d8e3475ee20eff4d25f23da816b5cb46ea12514" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pakman">
+ <description>Pak-Man</description>
+ <year>198?</year>
+ <publisher>E. Beckett</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1267116">
+ <rom name="e_beckett_pak-man.wav" size="1267116" crc="ea2e7f8f" sha1="a68f2d69ce5670485c0f9a65ed1bdfa64499fed2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="pinbwiz" supported="partial">
+ <description>Pinball Wiz</description>
+ <year>1983</year>
+ <publisher>G. Karabin</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1732970">
+ <rom name="g_karabin_wiz.wav" size="1732970" crc="f028bfc9" sha1="cfc24963a37a4e6a2e65a7b71806f0329a3efb4f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="planetat">
+ <description>Planet Atack</description>
+ <year>198?</year>
+ <publisher>Rief Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="956076">
+ <rom name="rief_games_planet_atack.wav" size="956076" crc="ac2c4bd8" sha1="e42f49ec42d9c831f6eb43546e54568de11f9802" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rattler">
+ <description>Rattler</description>
+ <year>198?</year>
+ <publisher>Geo-Grafix</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1199276">
+ <rom name="geo_grafix_rattler.wav" size="1199276" crc="e69724fa" sha1="a997ecd76f164dd4762a5cde6cfb3a3192f47dc7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="recollct">
+ <description>Recollection</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1076652">
+ <rom name="im-1_in-a-million_recollection.wav" size="1076652" crc="02020981" sha1="0d83fff9da0ef86f52352238910a5a5f4ae97fc5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="roadrunn">
+ <description>RoadRunner</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1027884">
+ <rom name="mr_rs_roadrunner.wav" size="1027884" crc="dcdd8fbd" sha1="cbe17a0848fdff532fc9e8419b59732a3a8c9992" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="runar">
+ <description>Run Around</description>
+ <year>198?</year>
+ <publisher>Millivision</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1010604">
+ <rom name="millivision_run_around.wav" size="1010604" crc="4a758098" sha1="46dea87e682d3df86cd970b9d0702005370a8c38" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="safari">
+ <description>Safari in Africa</description>
+ <year>198?</year>
+ <publisher>DataComp</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1751482">
+ <rom name="datacomp_safari_in_africa.wav" size="1751482" crc="4025fe24" sha1="184c3751a99fcbcb15b1b4b769d74de0fb867592" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="sailing" supported="partial">
+ <description>Sailing</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="999340">
+ <rom name="york_10_computerware_sailing.wav" size="999340" crc="5113726f" sha1="210b76a4ef4945ed8a70c9d203f336953a31cd2d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="skydiver" supported="partial">
+ <description>Sky Diver</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1000108">
+ <rom name="york_10_computerware_sky_diver.wav" size="1000108" crc="0f396e8b" sha1="91b9425b1c7cb96020850b5c79eb24a8c97d9502" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- Not sure if controls work fine... to investigate! -->
+ <software name="solarwar">
+ <description>Solar Wars!</description>
+ <year>1983</year>
+ <publisher>Handmade Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="2183084">
+ <rom name="r_k_kretschmer_solar_wars.wav" size="2183084" crc="6b1ad7f1" sha1="22fcc8b21279fad381b4357fb81df44ec8f9e680" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- I have not been able to generate any sound! am I doing something wrong, or is the tape at fault? -->
+ <software name="soundfx" supported="partial">
+ <description>Sound Effects Demo Program</description>
+ <year>19??</year>
+ <publisher>Ralph A. Rodriguez</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1219510">
+ <rom name="r_a_rodriguez_sound_effects_sub_porgram.wav" size="1219510" crc="30e5ae25" sha1="051306fd38482b36eaba75792ba01ce09da10ad2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="spacedst" supported="partial">
+ <description>Space Destroyers</description>
+ <year>1980</year>
+ <publisher>APF Electronics</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1672014">
+ <rom name="apf_space_destroyers.wav" size="1672014" crc="aa380a7f" sha1="2defa25ccac8fbbf594b2238d5f97bdf6188f312" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="sshuttle" supported="partial">
+ <description>Space Shuttle</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <feature name="usage" value="Requires 16K RAM" />
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1759916">
+ <rom name="york_10_computerware_space_shuttle(16k).wav" size="1759916" crc="66a43b5a" sha1="1644bc35920e81876de630feb59d4ab761b87563" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starbtle">
+ <description>Star Battle</description>
+ <year>19??</year>
+ <publisher>Handy Dandy Games</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1126572">
+ <rom name="handy_dandy_games_star_battle.wav" size="1126572" crc="2b5853b5" sha1="1f80dc16bf4d988fce82074e5f44d2075f3a7a43" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="starcstl" supported="partial">
+ <description>Star Castle</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1021100">
+ <rom name="york_10_computerware_star_castle.wav" size="1021100" crc="be300f87" sha1="02b65e64bfa6b6e5779bed28163035def10f663f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- glitched gfx -->
+ <software name="starship" supported="partial">
+ <description>Star Ship</description>
+ <year>198?</year>
+ <publisher>R. Eisman</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1064200">
+ <rom name="r_eisman_star_ship.wav" size="1064200" crc="5b36c175" sha1="287af2d590b308437b31a8ab71b8d827c7a6255e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="startrex">
+ <description>Star Trex</description>
+ <year>1981</year>
+ <publisher>G. R. Jones</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="2250738">
+ <rom name="g_r_jones_star_trex.wav" size="2250738" crc="d8989166" sha1="3a71d7899c72d08e7ce15c4f12c03f8777b5664d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gg2in1">
+ <description>Super 21 + Space Hunt</description>
+ <year>1983</year>
+ <publisher>Geo-Grafix</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="2496414">
+ <rom name="geo_grafix_super_21_space_hunt.wav" size="2496414" crc="c937f096" sha1="9652b6478cf554062d6d6e6e8fb558873a8097f2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- Space Hunt does not seem to load fine, it was listed as an "Improved version of the above"... -->
+ <software name="gg2in1a" cloneof="gg2in1" supported="partial">
+ <description>Super 21 + Space Hunt (Alt?)</description>
+ <year>1983</year>
+ <publisher>Geo-Grafix</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="3931560">
+ <rom name="geo_grafix_super_21ii_space_huntii.wav" size="3931560" crc="d80d3a1b" sha1="41b90a8989a90fb36d1d52b780e7499f192e8519" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- LINE <218 WHAT -->
+ <software name="suprfrog" supported="no">
+ <description>Super Frog</description>
+ <year>198?</year>
+ <publisher>E. Beckett</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1244332">
+ <rom name="e_beckett_super_frog.wav" size="1244332" crc="30080597" sha1="349731435e305a117e9ad44b762f9ae852d0e81a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- LINE XXX NO LINE REFERENCED error -->
+ <software name="sy50diag" supported="no">
+ <description>SY-50 IM-1 Diagnostics</description>
+ <year>1979</year>
+ <publisher>APF Electronics</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="3598780">
+ <rom name="apf_sy-50_im-1_diagnostics.wav" size="3598780" crc="0b3f3d4e" sha1="9185dc1801d50538b636e9fe5a071fc40425a9ec" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- LINE XXX NO LINE REFERENCED error -->
+ <software name="theftam" supported="no">
+ <description>Theft at the Art Museum</description>
+ <year>1982</year>
+ <publisher>Carl A. Echols</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1106348">
+ <rom name="carl_echols_theft_at_the_art_museum.wav" size="1106348" crc="e4e408e6" sha1="b944b36ebc8b6ef9abdb1d560bc30418796e2e8d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="thief">
+ <description>Thief</description>
+ <year>198?</year>
+ <publisher>Millivision</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="988972">
+ <rom name="millivision_thief.wav" size="988972" crc="df0cb1b5" sha1="b1933b1a7e923e57547b0abab3d1ce99f3628d4b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- I cannot load correctly either game -->
+ <software name="c2in1" supported="no">
+ <description>Transport + 15 Matches</description>
+ <year>19??</year>
+ <publisher>R. T. Carman</publisher>
+ <part name="cass" interface="apf_cass">
+ <feature name="usage" value="Transport requires 16K RAM" />
+ <dataarea name="cass" size="3680094">
+ <rom name="r_t_carman_transport(16k)_15_matches.wav" size="3680094" crc="5673884c" sha1="538ea35a11ce95243da6cb6bf568b8f840bbe40d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- it does not complete loading -->
+ <software name="treashnt" supported="no">
+ <description>Treasure Hunt (Bad?)</description>
+ <year>1982</year>
+ <publisher>Carl A. Echols</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1079468">
+ <rom name="carl_echols_treasure_hunt.wav" size="1079468" crc="7a3cbeb9" sha1="3661cf83211758cb6c5827169c077b17953924ef" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- third game does not load correctly -->
+ <software name="3for1" supported="partial">
+ <description>Three-for-One : Space War + Air Fortress + Squeeze Play</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="4647596">
+ <rom name="three_for_one.wav" size="4647596" crc="a5abc06d" sha1="e21a0276ccdbf07dbc84b61a79dcf1d494b2b293" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tronn">
+ <description>Tronn</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="921452">
+ <rom name="mr_rs_tronn.wav" size="921452" crc="69971170" sha1="45f0342cc55ceab089a3dfe6260da6ab4c505319" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turbo">
+ <description>Turbo</description>
+ <year>19??</year>
+ <publisher>York 10 Computerware</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1019052">
+ <rom name="york_10_computerware_turbo.wav" size="1019052" crc="6b7dd4b4" sha1="d572934ed4752d78d527714f57944a81e3114eae" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ubet">
+ <description>UBet</description>
+ <year>19??</year>
+ <publisher>MR R's</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1092076">
+ <rom name="mr_rs_ubet.wav" size="1092076" crc="c93dd547" sha1="795b321ca67a36a63c5cf58cb42433c316366f73" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wallstrt">
+ <description>Wall Street Cartel</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1125804">
+ <rom name="im-1_in-a-million_wall_street_cartel.wav" size="1125804" crc="7fdef1c7" sha1="ada3b0fa518cd71c8522b391685562b0dedb5899" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zap">
+ <description>Zap</description>
+ <year>198?</year>
+ <publisher>R. Eisman</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1558316">
+ <rom name="r_eisman_zap!!.wav" size="1558316" crc="6828de41" sha1="3f2e43c96a473c95e219e5605db682fdf4e574af" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+
+
+<!-- Utils -->
+
+ <software name="40tkinit">
+ <description>40 Track Initialization Program</description>
+ <year>1983</year>
+ <publisher>Hex-Mart Software</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1056684">
+ <rom name="hex_mart_init40v.wav" size="1056684" crc="5b729323" sha1="fe7510d16f21d76d28a31b83099248b440c759bc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="basnum">
+ <description>BasNum</description>
+ <year>1983</year>
+ <publisher>Hex-Mart Software</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1183404">
+ <rom name="hex_mart_super_basnum.wav" size="1183404" crc="d46bfbd5" sha1="7aba4ab227b838492b3c61f36fd149d6dd64ef10" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bastrace">
+ <description>Basic Trace</description>
+ <year>1982</year>
+ <publisher>Carl A. Echols</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="983724">
+ <rom name="carl_echols_basic_trace_function.wav" size="983724" crc="f5ab7059" sha1="43c90cfe44ec866e14ca9d520f6122419ddc1446" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="diskmod">
+ <description>Disk Modification Program</description>
+ <year>1983</year>
+ <publisher>Hex-Mart Software</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1083308">
+ <rom name="hex_mart_diskmod.wav" size="1083308" crc="8fd9a616" sha1="96eee304a5a64a1d42c12dfcfee600578d81e1b5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="disktest">
+ <description>Disk Test</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1268736">
+ <rom name="im-1_in-a-million_disk_test.wav" size="1268736" crc="79ef0a19" sha1="9052bcd301c26c1aad8039c5066cfe3e1b32829c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gfxtablt">
+ <description>Graphics Tablet</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1210540">
+ <rom name="im-1_in-a-million_graphics_tablet.wav" size="1210540" crc="7550af5a" sha1="4a0a6e8f0c818c29f12f8867af1c7ee9af8f09ba" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hiresplt">
+ <description>Hi-res Plot</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="997036">
+ <rom name="im-1_in-a-million_hi-res_plot.wav" size="997036" crc="cfb5a4ed" sha1="466deacb1d28ab9bd62ac8401b10c2899d6633ad" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="loresplt">
+ <description>Lo-res Plot</description>
+ <year>19??</year>
+ <publisher>IM-1 in a Million Club Newsletter</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="983980">
+ <rom name="im-1_in-a-million_lo-res_plot.wav" size="983980" crc="1e0a5894" sha1="54464ff325787478eca7bed1118350c37c8144a2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- MAE stands for MacroAssemblerEditor -->
+ <software name="mae">
+ <description>MAE</description>
+ <year>1981</year>
+ <publisher>David Donnelly</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="5422378">
+ <rom name="mae(macroassemblereditor).wav" size="5422378" crc="29c99097" sha1="b749f5d7a394f030001ec6e35882a6bb93a6dca0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="renumber">
+ <description>Renumber</description>
+ <year>1982</year>
+ <publisher>Carl A. Echols</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1035948">
+ <rom name="carl_echols_basic_renumber.wav" size="1035948" crc="83a60951" sha1="e62769ffb7f85bd7948508f35f0a5d04c612c00d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sy40dasm">
+ <description>SY-40 Disassembler</description>
+ <year>1979</year>
+ <publisher>APF Electronics</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="1729574">
+ <rom name="apf_sy-40 disassembler.wav" size="1729574" crc="601088a8" sha1="ce364a5e7544239b5167c70e5575568e225ab0bc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+
+<!-- Unsure what this is... Investigate! -->
+
+ <software name="primera">
+ <description>Primera? (Bad?)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cass" interface="apf_cass">
+ <dataarea name="cass" size="226280">
+ <rom name="primera.apt" size="226280" crc="15505290" sha1="c71e0fbc4dce843ef7c8be52109790a836af2bc7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/dmv.xml b/hash/dmv.xml
index c1620d32ccd..3230286466c 100644
--- a/hash/dmv.xml
+++ b/hash/dmv.xml
@@ -939,6 +939,74 @@
</part>
</software>
+ <software name="drdrawc"> <!-- CP/M-86 -->
+ <description>DR Draw (Color)</description>
+ <year>1983</year>
+ <publisher>Digital Research</publisher>
+ <info name="usage" value="Requires K208, K235 and K806" />
+ <part name="flop" interface="floppy_5_25">
+ <dataarea name="flop" size="281212">
+ <rom name="86drdraw.td0" size="281212" crc="451350ce" sha1="3d710e12241850988c88ca8c16528da3cdbdc2fd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="drdrawm"> <!-- CP/M-86 -->
+ <description>DR Draw (Monochrome)</description>
+ <year>1983</year>
+ <publisher>Digital Research</publisher>
+ <info name="usage" value="Requires CP/M-86" />
+ <part name="flop" interface="floppy_5_25">
+ <dataarea name="flop" size="189140">
+ <rom name="86drmo-m.td0" size="189140" crc="61543ccf" sha1="b8e33a0076bd1568a40d403bb6b391e6c45f9569" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tgdemo"> <!-- CP/M-80 -->
+ <description>TUTBOGRAPH Demonstration Programs</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="flop" interface="floppy_5_25">
+ <dataarea name="flop" size="259406">
+ <rom name="80tgraf.td0" size="259406" crc="d22d403f" sha1="8b1182f42faa68c1e5d879e79375683e48dd8bae" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cpm86qd"> <!-- CP/M-86 -->
+ <description>CP/M-86 1.1 with quad-density FDD support</description>
+ <year>1983</year>
+ <publisher>NCR Corporation</publisher>
+ <part name="flop" interface="floppy_5_25">
+ <dataarea name="flop" size="221628">
+ <rom name="586-4896.td0" size="221628" crc="383d54d3" sha1="be36d161f72c12bf6263f9577d609fd21b352c47" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gsx86tst"> <!-- CP/M-86 -->
+ <description>GSX-86 Test Suite</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="flop" interface="floppy_5_25">
+ <dataarea name="flop" size="1128529">
+ <rom name="5-gsx86-test.mfi" size="1128529" crc="353821bc" sha1="ce977ea324ef6faf8245b4e1bcac84f2504f0c37" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="msdosqd"> <!-- MS-DOS -->
+ <description>MS-DOS v2.11 with quad-density FDD support</description>
+ <year>1983</year>
+ <publisher>Microsoft</publisher>
+ <part name="flop" interface="floppy_5_25">
+ <dataarea name="flop" size="611287">
+ <rom name="5_dos_96.mfi" size="611287" crc="c0f9d426" sha1="bccb7e04b320150435ee20e3d563dd163f6ab241" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="dbase238"> <!-- CP/M-80 -->
<description>dBASE II v2.38</description>
<year>198?</year>
@@ -1043,7 +1111,7 @@
</part>
</software>
- <software name="acad" supported="no"> <!-- MS-DOS --> <!-- graphic mode doesn't works -->
+ <software name="acad"> <!-- MS-DOS -->
<description>AutoCAD</description>
<year>1987</year>
<publisher>&lt;unknown&gt;</publisher>
@@ -1060,7 +1128,7 @@
</part>
</software>
- <software name="acada" cloneof="acad" supported="no"> <!-- MS-DOS --> <!-- graphic mode doesn't works -->
+ <software name="acada" cloneof="acad"> <!-- MS-DOS -->
<description>AutoCAD (Alt 1)</description>
<year>1987</year>
<publisher>&lt;unknown&gt;</publisher>
@@ -1087,7 +1155,7 @@
</part>
</software>
- <software name="acadb" cloneof="acad" supported="no"> <!-- MS-DOS --> <!-- graphic mode doesn't works -->
+ <software name="acadb" cloneof="acad"> <!-- MS-DOS -->
<description>AutoCAD (Alt 2)</description>
<year>1987</year>
<publisher>&lt;unknown&gt;</publisher>
diff --git a/hash/ec1841.xml b/hash/ec1841.xml
index 22c117a89a7..eb4bea92fb8 100644
--- a/hash/ec1841.xml
+++ b/hash/ec1841.xml
@@ -131,7 +131,7 @@
<publisher>??</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="205475">
- <rom name="ec1841-voice41.td0" size="205475" sha1="5561649fde90bccc743ce61a5d4a50e07cd5a674" crc="1f85afad" offset="0" />
+ <rom name="ec1841-voice41.td0" size="205475" sha1="5561649fde90bccc743ce61a5d4a50e07cd5a674" crc="f8082286" offset="0" />
</dataarea>
</part>
</software>
diff --git a/hash/epson_cpm.xml b/hash/epson_cpm.xml
new file mode 100644
index 00000000000..9ba907ee5c5
--- /dev/null
+++ b/hash/epson_cpm.xml
@@ -0,0 +1,168 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<!-- Generic software list for the Epson HX-20, PX-4 and PX-8 systems -->
+
+<softwarelist name="epson_cpm" description="Epson CPM systems floppy disks">
+
+ <!-- This disk is used to boot the intelligent TF-20 floppy drive -->
+
+ <software name="tf20boot">
+ <description>TF-20 boot disk</description>
+ <year>198?</year>
+ <publisher>Epson</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="TF-20 boot disk" />
+ <dataarea name="flop" size="35124">
+ <rom name="tf20boot.td0" size="35124" crc="806311eb" sha1="b67433746ed5ab84be06003f850846565e19f44c" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- The following disks are part of the vfloppy distribution -->
+
+ <software name="arcs">
+ <description>Archivers</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Archivers" />
+ <dataarea name="flop" size="348848">
+ <rom name="arcs.d88" size="348848" crc="ab56993a" sha1="1e7c0512bea0adf9673527c5976497531837e8a3" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="editor">
+ <description>VDE 2.66</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="VDE 2.66" />
+ <dataarea name="flop" size="348848">
+ <rom name="editor.d88" size="348848" crc="871d30ce" sha1="4f0d8342e7d92ba78fd922f0a2e13b2724a921df" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="extrauti">
+ <description>Extra Utilities</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Extra Utilities" />
+ <dataarea name="flop" size="348848">
+ <rom name="extrautil.d88" size="348848" crc="baaeb509" sha1="bc339742cc6d087c11b8aae010311473edfdf734" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="modems">
+ <description>Modem Sample &amp; M80 &amp; L80</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Modem Sample &amp; M80 &amp; L80" />
+ <dataarea name="flop" size="348848">
+ <rom name="ms_m80_l80.d88" size="348848" crc="7af5815a" sha1="4e7bf6a4f7d5ac66ab432ec0e2760e265a53f72d" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="promprog">
+ <description>PROM Progs</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="PROM Progs" />
+ <dataarea name="flop" size="348848">
+ <rom name="promprogs.d88" size="348848" crc="1cc048fc" sha1="6cbd0f9c1c36bca213accf9da9b0a69896c9a88a" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="px4util1">
+ <description>PX-4 Utils</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="PX-4 Utils" />
+ <dataarea name="flop" size="348848">
+ <rom name="px4util.d88" size="348848" crc="f39d899d" sha1="c2e8051116d87e090025c41a260a85fb46b86b10" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="px4util2">
+ <description>PX-4 Utility Disk</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="PX-4 Utility Disk" />
+ <dataarea name="flop" size="348848">
+ <rom name="px4utilitydisk.d88" size="348848" crc="df17aae8" sha1="4be08583c079f092db95bdad2abf693639e439b9" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="px4util3">
+ <description>PX-4 Utility Disk 2</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="PX-4 Utility Disk 2" />
+ <dataarea name="flop" size="348848">
+ <rom name="px4utils.d88" size="348848" crc="93320c5f" sha1="a256f500bafab4e6eba7031e05267dc6cb39a64e" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="px4wand">
+ <description>PX-4 Wanderer</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="PX-4 Wanderer" />
+ <dataarea name="flop" size="348848">
+ <rom name="px4wand.d88" size="348848" crc="1ab716cc" sha1="4f6a83476b76f1dc42f38b3c6cd0835181b523e3" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="px8epstf">
+ <description>PX-8 EPS (TF-20 bootdisk)</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="PX-8 EPS (TF-20 bootdisk)" />
+ <dataarea name="flop" size="348848">
+ <rom name="px8_eps-tf20.d88" size="348848" crc="ed627d6e" sha1="eee223a63235ef6fa311527f0c961d003ca669f0" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="px8games">
+ <description>PX-8 Games</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="PX-8 Games" />
+ <dataarea name="flop" size="348848">
+ <rom name="px8games.d88" size="348848" crc="c724e5df" sha1="a0bfc9af1f4fcd6949f9b667ea49879284d94ba2" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="scratch">
+ <description>Scratch</description>
+ <year>?????</year>
+ <publisher>&lt;unofficial&gt;</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Scratch" />
+ <dataarea name="flop" size="348848">
+ <rom name="scratch.d88" size="348848" crc="163fc594" sha1="ae2451d9226ff1a69db5f78f1101f60735ae2789" offset="0"/>
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/fmtowns_cd.xml b/hash/fmtowns_cd.xml
index f6d18346620..d5aa57beb6a 100644
--- a/hash/fmtowns_cd.xml
+++ b/hash/fmtowns_cd.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
-<softwarelist name="fmtowns" description="FM Towns CD-ROMs">
+<softwarelist name="fmtowns_cd" description="FM Towns CD-ROMs">
<!-- skeleton test list -->
<!-- works well on fmtmarty, keyboard seems to interfere with movements on fmtowns -->
diff --git a/hash/g7400.xml b/hash/g7400.xml
index 33c8906c1a6..123e6111789 100644
--- a/hash/g7400.xml
+++ b/hash/g7400.xml
@@ -33,7 +33,7 @@ Interpol (USA)
-->
-<softwarelist name="vg7400" description="Philips Videopac Plus G7400 cartridges">
+<softwarelist name="g7400" description="Philips Videopac Plus G7400 cartridges">
<!-- Phillips Videopac+ G7400 carts -->
diff --git a/hash/galaxy.xml b/hash/galaxy.xml
index afed437e5a3..d3ad6174f27 100644
--- a/hash/galaxy.xml
+++ b/hash/galaxy.xml
@@ -5,11 +5,11 @@
<software name="asteroid">
<description>Asteroidi</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1984</year>
+ <publisher>GAC Software</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1298">
- <rom name="asteroidi.gtp" size="1298" crc="70aa80a3" sha1="1bc96cdf7602bbb24b02f5f9cb9aac709f3a7080" offset="0x0000" />
+ <rom name="asteroidi.gtp" size="1298" crc="70aa80a3" sha1="1bc96cdf7602bbb24b02f5f9cb9aac709f3a7080" offset="0" />
</dataarea>
</part>
</software>
@@ -20,40 +20,40 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1017">
- <rom name="biljar.gtp" size="1017" crc="469ba6a2" sha1="b93a3a968e3fe004958f61d6fcf63268be01517d" offset="0x0000" />
+ <rom name="biljar.gtp" size="1017" crc="469ba6a2" sha1="b93a3a968e3fe004958f61d6fcf63268be01517d" offset="0" />
</dataarea>
</part>
</software>
- <software name="biorita1">
- <description>Bioritam1</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="bioritam">
+ <description>Bioritam</description>
+ <year>1984</year>
+ <publisher>Galaxy Computer</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2996">
- <rom name="bioritam1.gtp" size="2996" crc="86d9274a" sha1="b71ef12740d0cb10d8ae0b5eb30d6f3fd1f7fb86" offset="0x0000" />
+ <rom name="bioritam1.gtp" size="2996" crc="86d9274a" sha1="b71ef12740d0cb10d8ae0b5eb30d6f3fd1f7fb86" offset="0" />
</dataarea>
</part>
</software>
<software name="biorita2">
- <description>Bioritam2</description>
+ <description>Bioritam (Alt)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1366">
- <rom name="bioritam2.gtp" size="1366" crc="997e491e" sha1="b61d390bc33e2568526af5a2116ec87d7ac7e505" offset="0x0000" />
+ <rom name="bioritam2.gtp" size="1366" crc="997e491e" sha1="b61d390bc33e2568526af5a2116ec87d7ac7e505" offset="0" />
</dataarea>
</part>
</software>
- <software name="bladall">
- <description>BladeAlley</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="bladeall">
+ <description>Blade Alley</description>
+ <year>1985</year>
+ <publisher>Jasmin Halilovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1879">
- <rom name="bladealley.gtp" size="1879" crc="723da222" sha1="b8d7978a67595ef1107919771cbe7b9919ad2fe5" offset="0x0000" />
+ <rom name="bladealley.gtp" size="1879" crc="723da222" sha1="b8d7978a67595ef1107919771cbe7b9919ad2fe5" offset="0" />
</dataarea>
</part>
</software>
@@ -61,21 +61,21 @@
<software name="bombard">
<description>Bombarder</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Nenad Balint</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1880">
- <rom name="bombarder.gtp" size="1880" crc="7d584b08" sha1="a0629636f015381f8d4132af8d95577fdef12ed7" offset="0x0000" />
+ <rom name="bombarder.gtp" size="1880" crc="7d584b08" sha1="a0629636f015381f8d4132af8d95577fdef12ed7" offset="0" />
</dataarea>
</part>
</software>
<software name="charfire">
- <description>ChariotsOfFire</description>
+ <description>Chariots of Fire</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Dragan Yujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="290">
- <rom name="chariotsoffire.gtp" size="290" crc="33e9fad9" sha1="7e80787f2314c6dad333856b2a1683ddcffafdf4" offset="0x0000" />
+ <rom name="chariotsoffire.gtp" size="290" crc="33e9fad9" sha1="7e80787f2314c6dad333856b2a1683ddcffafdf4" offset="0" />
</dataarea>
</part>
</software>
@@ -86,29 +86,29 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="411">
- <rom name="comets.gtp" size="411" crc="8ccc82a6" sha1="e283c077c660182ffba71f1f5300f893eaf13915" offset="0x0000" />
+ <rom name="comets.gtp" size="411" crc="8ccc82a6" sha1="e283c077c660182ffba71f1f5300f893eaf13915" offset="0" />
</dataarea>
</part>
</software>
<software name="dijamant">
- <description>DijamantskiRudnik</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Dijamantski Rudnik</description>
+ <year>1985</year>
+ <publisher>Nenad Balint</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2754">
- <rom name="dijamantskirudnik.gtp" size="2754" crc="d7c5a9ba" sha1="f1669e88644fe4fca1387b00f617aff80162028e" offset="0x0000" />
+ <rom name="dijamantskirudnik.gtp" size="2754" crc="d7c5a9ba" sha1="f1669e88644fe4fca1387b00f617aff80162028e" offset="0" />
</dataarea>
</part>
</software>
<software name="dijamanta" cloneof="dijamant">
- <description>DijamantskiRudnik_ALT</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Dijamantski Rudnik (Alt Format)</description>
+ <year>1985</year>
+ <publisher>Nenad Balint</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="8244">
- <rom name="dr.gal" size="8244" crc="c73c2187" sha1="9e2fe7856657df1db846f54f008e7e8a823aa8ac" offset="0x0000" />
+ <rom name="dr.gal" size="8244" crc="c73c2187" sha1="9e2fe7856657df1db846f54f008e7e8a823aa8ac" offset="0" />
</dataarea>
</part>
</software>
@@ -119,171 +119,171 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2913">
- <rom name="egemond.gtp" size="2913" crc="7c85c513" sha1="ca001178ba823a3a7258147473723321f424c535" offset="0x0000" />
+ <rom name="egemond.gtp" size="2913" crc="7c85c513" sha1="ca001178ba823a3a7258147473723321f424c535" offset="0" />
</dataarea>
</part>
</software>
<software name="evolucia">
<description>Evolucija</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1984</year>
+ <publisher>Dejan Ristanovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1063">
- <rom name="evolucija.gtp" size="1063" crc="c3a8c0f1" sha1="b195af2a260db880166aae754054d1a89a34f73f" offset="0x0000" />
+ <rom name="evolucija.gtp" size="1063" crc="c3a8c0f1" sha1="b195af2a260db880166aae754054d1a89a34f73f" offset="0" />
</dataarea>
</part>
</software>
<software name="f1">
- <description>Formula1</description>
+ <description>Formula 1</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1194">
- <rom name="formula1.gtp" size="1194" crc="3efb14c1" sha1="8a48a4bf98c59ae2ed373f6c2db30dfb1cbf14be" offset="0x0000" />
+ <rom name="formula1.gtp" size="1194" crc="3efb14c1" sha1="8a48a4bf98c59ae2ed373f6c2db30dfb1cbf14be" offset="0" />
</dataarea>
</part>
</software>
<software name="four">
<description>Four</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1986</year>
+ <publisher>Dragan Yujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2631">
- <rom name="four.gtp" size="2631" crc="9ee92e36" sha1="9c7b83ba138e77bc258d3e495146e8971779b4d2" offset="0x0000" />
+ <rom name="four.gtp" size="2631" crc="9ee92e36" sha1="9c7b83ba138e77bc258d3e495146e8971779b4d2" offset="0" />
</dataarea>
</part>
</software>
<software name="galakrat">
- <description>GalaktickiRat</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Galakticki Rat</description>
+ <year>1985</year>
+ <publisher>Antonic Voja</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2238">
- <rom name="galaktickirat.gtp" size="2238" crc="e7a5260e" sha1="510c411b524b80b621655f4038581811818dc7d2" offset="0x0000" />
+ <rom name="galaktickirat.gtp" size="2238" crc="e7a5260e" sha1="510c411b524b80b621655f4038581811818dc7d2" offset="0" />
</dataarea>
</part>
</software>
<software name="hhorace">
- <description>HungryHorace</description>
+ <description>Hungry Horace</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="797">
- <rom name="hungryhorace.gtp" size="797" crc="f3c15d57" sha1="e1217926da7560e9a6a6582df3bbe22ca59e2ed1" offset="0x0000" />
+ <rom name="hungryhorace.gtp" size="797" crc="f3c15d57" sha1="e1217926da7560e9a6a6582df3bbe22ca59e2ed1" offset="0" />
</dataarea>
</part>
</software>
<software name="igradisk">
- <description>IgraDiskova</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Igra Diskova</description>
+ <year>1985</year>
+ <publisher>Yojislav Mihailovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1768">
- <rom name="igradiskova.gtp" size="1768" crc="7e37f44d" sha1="c60e55ff82287c7f0d610c1f403de7f75f206054" offset="0x0000" />
+ <rom name="igradiskova.gtp" size="1768" crc="7e37f44d" sha1="c60e55ff82287c7f0d610c1f403de7f75f206054" offset="0" />
</dataarea>
</part>
</software>
<software name="spiridon">
- <description>InspektorSpiridon</description>
+ <description>Inspektor Spiridon</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="4112">
- <rom name="inspektorspiridon.gtp" size="4112" crc="15a1ef41" sha1="0f173c16aec2abde535fdb88438a8408c1c114ec" offset="0x0000" />
+ <rom name="inspektorspiridon.gtp" size="4112" crc="15a1ef41" sha1="0f173c16aec2abde535fdb88438a8408c1c114ec" offset="0" />
</dataarea>
</part>
<part name="cass2" interface="galaxy_cass">
<dataarea name="cass" size="2255">
- <rom name="inspektorspiridonupustvo.gtp" size="2255" crc="01056c67" sha1="d658f2a5b749f20bdb0bd31b33e2a7a95cf3d378" offset="0x0000" />
+ <rom name="inspektorspiridonupustvo.gtp" size="2255" crc="01056c67" sha1="d658f2a5b749f20bdb0bd31b33e2a7a95cf3d378" offset="0" />
</dataarea>
</part>
<part name="cass3" interface="galaxy_cass">
<dataarea name="cass" size="549">
- <rom name="inspektorspiridonvaranje.gtp" size="549" crc="3c780376" sha1="5bd7015082a350dda324ca8d497e5cbd0d73a289" offset="0x0000" />
+ <rom name="inspektorspiridonvaranje.gtp" size="549" crc="3c780376" sha1="5bd7015082a350dda324ca8d497e5cbd0d73a289" offset="0" />
</dataarea>
</part>
</software>
<software name="jumpjack">
- <description>JumpingJack</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Jumping Jack</description>
+ <year>1985</year>
+ <publisher>Antonic Voja</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1891">
- <rom name="jumpingjack.gtp" size="1891" crc="4b158c1d" sha1="fb6019ac9fbefd87ffcba592178b6568607680b0" offset="0x0000" />
+ <rom name="jumpingjack.gtp" size="1891" crc="4b158c1d" sha1="fb6019ac9fbefd87ffcba592178b6568607680b0" offset="0" />
</dataarea>
</part>
</software>
<software name="lightcyc">
- <description>LightCycles</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Light Cycles</description>
+ <year>1985</year>
+ <publisher>Bojan Stanojevic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1245">
- <rom name="lightcycles.gtp" size="1245" crc="838cf2e2" sha1="6da589007fbf3688f63da88ced241907e8bee774" offset="0x0000" />
+ <rom name="lightcycles.gtp" size="1245" crc="838cf2e2" sha1="6da589007fbf3688f63da88ced241907e8bee774" offset="0" />
</dataarea>
</part>
</software>
<software name="lightcy2">
- <description>LightCycles2</description>
+ <description>Light Cycles (Alt)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1550">
- <rom name="lightcycles2.gtp" size="1550" crc="f271a8a9" sha1="00dc59dfa6dd6a33edbbedc18f6300e445f170a0" offset="0x0000" />
+ <rom name="lightcycles2.gtp" size="1550" crc="f271a8a9" sha1="00dc59dfa6dd6a33edbbedc18f6300e445f170a0" offset="0" />
</dataarea>
</part>
</software>
<software name="lightshw">
- <description>LightShow</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Light Show</description>
+ <year>1987</year>
+ <publisher>Dragan Vujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="3001">
- <rom name="lightshow.gtp" size="3001" crc="27ae9809" sha1="d8a95e689dd8c84b71cf375c5f57010e8a9ae4b4" offset="0x0000" />
+ <rom name="lightshow.gtp" size="3001" crc="27ae9809" sha1="d8a95e689dd8c84b71cf375c5f57010e8a9ae4b4" offset="0" />
</dataarea>
</part>
</software>
<software name="mminer">
- <description>ManicMiner</description>
+ <description>Manic Miner</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="4378">
- <rom name="manicminer.gtp" size="4378" crc="2ab18f85" sha1="ad12006ccc3bc5c8e27c60eaeac83164ab1b86eb" offset="0x0000" />
+ <rom name="manicminer.gtp" size="4378" crc="2ab18f85" sha1="ad12006ccc3bc5c8e27c60eaeac83164ab1b86eb" offset="0" />
</dataarea>
</part>
</software>
<software name="mastrmnd">
<description>Mastermajnd</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1984</year>
+ <publisher>Dejan Ristanovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2077">
- <rom name="mastermajnd.gtp" size="2077" crc="6daf8f56" sha1="fe6f3f6fbbc75cded96d3217c7f4475f81bb3065" offset="0x0000" />
+ <rom name="mastermajnd.gtp" size="2077" crc="6daf8f56" sha1="fe6f3f6fbbc75cded96d3217c7f4475f81bb3065" offset="0" />
</dataarea>
</part>
</software>
<software name="mastrmn2">
- <description>Mastermind2</description>
+ <description>Mastermind</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1035">
- <rom name="mastermind2.gtp" size="1035" crc="f27a7818" sha1="b8b93ce87792bd48e59e11e583838e2a8eea937d" offset="0x0000" />
+ <rom name="mastermind2.gtp" size="1035" crc="f27a7818" sha1="b8b93ce87792bd48e59e11e583838e2a8eea937d" offset="0" />
</dataarea>
</part>
</software>
@@ -294,7 +294,7 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2530">
- <rom name="maze.gtp" size="2530" crc="9a2eb6e9" sha1="89fc487ef0f8e505525e98396ecc5a16a70379d5" offset="0x0000" />
+ <rom name="maze.gtp" size="2530" crc="9a2eb6e9" sha1="89fc487ef0f8e505525e98396ecc5a16a70379d5" offset="0" />
</dataarea>
</part>
</software>
@@ -305,7 +305,7 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2357">
- <rom name="memorija.gtp" size="2357" crc="c5db1192" sha1="8d1c475f1b18f5b9e05583bfdafda1c2e45378c3" offset="0x0000" />
+ <rom name="memorija.gtp" size="2357" crc="c5db1192" sha1="8d1c475f1b18f5b9e05583bfdafda1c2e45378c3" offset="0" />
</dataarea>
</part>
</software>
@@ -313,21 +313,21 @@
<software name="monitor">
<description>Monitor</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Antonic Voja</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2073">
- <rom name="monitor.gtp" size="2073" crc="f22eceb3" sha1="c9830a9d419681b9f345b44b091c0d82d4239a08" offset="0x0000" />
+ <rom name="monitor.gtp" size="2073" crc="f22eceb3" sha1="c9830a9d419681b9f345b44b091c0d82d4239a08" offset="0" />
</dataarea>
</part>
</software>
<software name="nightpil">
- <description>NightPilot</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Night Pilot</description>
+ <year>1985</year>
+ <publisher>Dragutin Vukotic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="4854">
- <rom name="nightpilot.gtp" size="4854" crc="97f02860" sha1="44c4cec4abb012e81dfdc4255f4c42b82e9ff167" offset="0x0000" />
+ <rom name="nightpilot.gtp" size="4854" crc="97f02860" sha1="44c4cec4abb012e81dfdc4255f4c42b82e9ff167" offset="0" />
</dataarea>
</part>
</software>
@@ -335,65 +335,65 @@
<software name="oscil">
<description>Oscilacije</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Dragan Vujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="504">
- <rom name="oscilacije.gtp" size="504" crc="83392fb3" sha1="bce729ee54a326ee7db9c9dd7dd33145b0cc64db" offset="0x0000" />
+ <rom name="oscilacije.gtp" size="504" crc="83392fb3" sha1="bce729ee54a326ee7db9c9dd7dd33145b0cc64db" offset="0" />
</dataarea>
</part>
</software>
<software name="pacmanp">
- <description>PacManPlus</description>
+ <description>Pac Man (Plus)</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Josip Perusanec</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="12572">
- <rom name="pacmanplus.gtp" size="12572" crc="cbb8af07" sha1="e3f048454c4a9d62835f80256fdfebbfaef5561b" offset="0x0000" />
+ <rom name="pacmanplus.gtp" size="12572" crc="cbb8af07" sha1="e3f048454c4a9d62835f80256fdfebbfaef5561b" offset="0" />
</dataarea>
</part>
</software>
<software name="pamtilic">
<description>Pamtilice</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1985</year>
+ <publisher>Peca Milosavljevic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="3076">
- <rom name="pamtilice.gtp" size="3076" crc="1ae4d73f" sha1="60332bc1ac30abe9f737a8524fcb581003fd7077" offset="0x0000" />
+ <rom name="pamtilice.gtp" size="3076" crc="1ae4d73f" sha1="60332bc1ac30abe9f737a8524fcb581003fd7077" offset="0" />
</dataarea>
</part>
</software>
<software name="poker">
<description>Poker</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1985</year>
+ <publisher>Nenad Balint</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="4424">
- <rom name="poker.gtp" size="4424" crc="ff4d5af3" sha1="59258c130121ac718ca8f256f293ef2e4e9742df" offset="0x0000" />
+ <rom name="poker.gtp" size="4424" crc="ff4d5af3" sha1="59258c130121ac718ca8f256f293ef2e4e9742df" offset="0" />
</dataarea>
</part>
</software>
<software name="pozivniz">
- <description>PozivniZnak</description>
+ <description>Pozivni Znak</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Dragan Vujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="414">
- <rom name="pozivniznak.gtp" size="414" crc="2d7273a3" sha1="694c770409781f96b422a5b55f9222700fa08531" offset="0x0000" />
+ <rom name="pozivniznak.gtp" size="414" crc="2d7273a3" sha1="694c770409781f96b422a5b55f9222700fa08531" offset="0" />
</dataarea>
</part>
</software>
<software name="raindrop">
- <description>RainDrops</description>
+ <description>Rain Drops</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="573">
- <rom name="raindrops.gtp" size="573" crc="02642e02" sha1="d9880a1cb0180c8203cc71fab09687a808244d9a" offset="0x0000" />
+ <rom name="raindrops.gtp" size="573" crc="02642e02" sha1="d9880a1cb0180c8203cc71fab09687a808244d9a" offset="0" />
</dataarea>
</part>
</software>
@@ -404,7 +404,7 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1892">
- <rom name="scater.gtp" size="1892" crc="bd4be810" sha1="59d027a4111b15fd30b9290e87a2edb438e1614f" offset="0x0000" />
+ <rom name="scater.gtp" size="1892" crc="bd4be810" sha1="59d027a4111b15fd30b9290e87a2edb438e1614f" offset="0" />
</dataarea>
</part>
</software>
@@ -412,186 +412,186 @@
<software name="sintesaj">
<description>Sintesajzer</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Dragan Vujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="901">
- <rom name="sintesajzer.gtp" size="901" crc="f747478d" sha1="51b9f20f154f5631fbee88c6df906c95f8929de6" offset="0x0000" />
+ <rom name="sintesajzer.gtp" size="901" crc="f747478d" sha1="51b9f20f154f5631fbee88c6df906c95f8929de6" offset="0" />
</dataarea>
</part>
</software>
<software name="slalom2">
- <description>Slalom2</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Slalom II</description>
+ <year>1985</year>
+ <publisher>Zeljko Gerovac</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1328">
- <rom name="slalom2.gtp" size="1328" crc="722f26ed" sha1="d9b87941fd19606d53b72cb319c4d3dc7e6880d6" offset="0x0000" />
+ <rom name="slalom2.gtp" size="1328" crc="722f26ed" sha1="d9b87941fd19606d53b72cb319c4d3dc7e6880d6" offset="0" />
</dataarea>
</part>
</software>
<software name="snake">
- <description>Snake</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Snake (Nenad Balint)</description>
+ <year>1984</year>
+ <publisher>Nenad Balint</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="3173">
- <rom name="snake.gtp" size="3173" crc="ae7e097b" sha1="8b90a3ba49711ea7bd6fc7058a71c0699fc49cb1" offset="0x0000" />
+ <rom name="snake.gtp" size="3173" crc="ae7e097b" sha1="8b90a3ba49711ea7bd6fc7058a71c0699fc49cb1" offset="0" />
</dataarea>
</part>
</software>
- <software name="snake2">
- <description>Snake2</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="snakedv">
+ <description>Snake (Dragan Vujkov)</description>
+ <year>1987</year>
+ <publisher>Dragan Vujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1686">
- <rom name="snake2.gtp" size="1686" crc="18127599" sha1="c37d5cf13704b374b3c76d4ac7b80787dfb88dc8" offset="0x0000" />
+ <rom name="snake2.gtp" size="1686" crc="18127599" sha1="c37d5cf13704b374b3c76d4ac7b80787dfb88dc8" offset="0" />
</dataarea>
</part>
</software>
<software name="squash">
<description>Squash</description>
- <year>19??</year>
+ <year>1986</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1504">
- <rom name="squash.gtp" size="1504" crc="ad4657df" sha1="b5a781c1a97086a3ae2da08f1ed975253a4a035b" offset="0x0000" />
+ <rom name="squash.gtp" size="1504" crc="ad4657df" sha1="b5a781c1a97086a3ae2da08f1ed975253a4a035b" offset="0" />
</dataarea>
</part>
</software>
<software name="squasha" cloneof="squash">
- <description>Squash_ALT</description>
+ <description>Squash (Alt Format)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="8244">
- <rom name="squash.gal" size="8244" crc="a54b6d45" sha1="140530381ea8964bd32cecd13659f7131fcdb709" offset="0x0000" />
+ <rom name="squash.gal" size="8244" crc="a54b6d45" sha1="140530381ea8964bd32cecd13659f7131fcdb709" offset="0" />
</dataarea>
</part>
</software>
<software name="scruiser">
- <description>SuperCruiser</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Super Cruiser</description>
+ <year>1985</year>
+ <publisher>Jasmin Halilovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2569">
- <rom name="supercruiser.gtp" size="2569" crc="b9faec35" sha1="a68d01975952c117e9620cfcdeb9ca7350964c54" offset="0x0000" />
+ <rom name="supercruiser.gtp" size="2569" crc="b9faec35" sha1="a68d01975952c117e9620cfcdeb9ca7350964c54" offset="0" />
</dataarea>
</part>
</software>
<software name="scruisera" cloneof="scruiser">
- <description>SuperCruiser_ALT</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Super Cruiser (Alt Format)</description>
+ <year>1985</year>
+ <publisher>Jasmin Halilovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="8244">
- <rom name="sc.gal" size="8244" crc="8ae78ffb" sha1="7e4217afd4d725dd14af55bf7d0796dd51cc868d" offset="0x0000" />
+ <rom name="sc.gal" size="8244" crc="8ae78ffb" sha1="7e4217afd4d725dd14af55bf7d0796dd51cc868d" offset="0" />
</dataarea>
</part>
</software>
<software name="supersah">
- <description>SuperSah</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Super-Sah</description>
+ <year>1984</year>
+ <publisher>Page Software</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="5773">
- <rom name="supersah.gtp" size="5773" crc="9d24e956" sha1="8bb4898a2e5a538ab6f896b0f0d9f796d9e366d5" offset="0x0000" />
+ <rom name="supersah.gtp" size="5773" crc="9d24e956" sha1="8bb4898a2e5a538ab6f896b0f0d9f796d9e366d5" offset="0" />
</dataarea>
</part>
</software>
<software name="strgovac">
- <description>SvemirskiTrgovac</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Svemirski Trgovac</description>
+ <year>198?</year>
+ <publisher>Ilija Vitanov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2982">
- <rom name="svemirskitrgovac.gtp" size="2982" crc="a01a1594" sha1="7cca6dc667a29de5f53b105287dc889869aad383" offset="0x0000" />
+ <rom name="svemirskitrgovac.gtp" size="2982" crc="a01a1594" sha1="7cca6dc667a29de5f53b105287dc889869aad383" offset="0" />
</dataarea>
</part>
</software>
<software name="svetleci">
- <description>SvetleciBicikliPlus</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Svetleci Bicikli (Plus)</description>
+ <year>1986</year>
+ <publisher>Nenad Balint</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2583">
- <rom name="svetlecibicikliplus.gtp" size="2583" crc="2d4000fe" sha1="de2b47c73c3a324a223147e41c327a52c372875e" offset="0x0000" />
+ <rom name="svetlecibicikliplus.gtp" size="2583" crc="2d4000fe" sha1="de2b47c73c3a324a223147e41c327a52c372875e" offset="0" />
</dataarea>
</part>
</software>
<software name="tenis">
<description>Tenis</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1985</year>
+ <publisher>Nenad Balint</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2389">
- <rom name="tenis.gtp" size="2389" crc="6f158ac7" sha1="3dd52ce8f6dbc1d5114c4a63ed5c40666e79c40f" offset="0x0000" />
+ <rom name="tenis.gtp" size="2389" crc="6f158ac7" sha1="3dd52ce8f6dbc1d5114c4a63ed5c40666e79c40f" offset="0" />
</dataarea>
</part>
</software>
<software name="tenis3">
- <description>Tenis3</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tenis 3</description>
+ <year>1986</year>
+ <publisher>Dragan Yujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1874">
- <rom name="tenis3.gtp" size="1874" crc="bc263558" sha1="2bdfcc96e8e4844cc9edae7670710f72d7bf3e1f" offset="0x0000" />
+ <rom name="tenis3.gtp" size="1874" crc="bc263558" sha1="2bdfcc96e8e4844cc9edae7670710f72d7bf3e1f" offset="0" />
</dataarea>
</part>
</software>
<software name="tetris">
<description>Tetris</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1988</year>
+ <publisher>Dragoljub Obradovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2709">
- <rom name="tetrisplus.gtp" size="2709" crc="5a6a819b" sha1="7a60930d6269b3ac9898ce0dc2bada8e5626f270" offset="0x0000" />
+ <rom name="tetrisplus.gtp" size="2709" crc="5a6a819b" sha1="7a60930d6269b3ac9898ce0dc2bada8e5626f270" offset="0" />
</dataarea>
</part>
</software>
<software name="tetrisp">
- <description>TetrisPlus</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tetris (Plus)</description>
+ <year>1988</year>
+ <publisher>Dragoljub Obradovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2706">
- <rom name="tetrisplusq.gtp" size="2706" crc="64015b12" sha1="1d062b4abd1bfdc977568378a61f2bbdf65e2602" offset="0x0000" />
+ <rom name="tetrisplusq.gtp" size="2706" crc="64015b12" sha1="1d062b4abd1bfdc977568378a61f2bbdf65e2602" offset="0" />
</dataarea>
</part>
</software>
<software name="tetrisa" cloneof="tetris">
- <description>Tetris_ALT</description>
+ <description>Tetris (Alt Format)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="8244">
- <rom name="tetris.gal" size="8244" crc="12bc9373" sha1="008d85b379861416c38e3300477a3772959344a1" offset="0x0000" />
+ <rom name="tetris.gal" size="8244" crc="12bc9373" sha1="008d85b379861416c38e3300477a3772959344a1" offset="0" />
</dataarea>
</part>
</software>
<software name="wall">
<description>Wall</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1986</year>
+ <publisher>Dragan Vujkov</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1328">
- <rom name="wall.gtp" size="1328" crc="602db525" sha1="fe31a2455376427436e2638e3452633a2a0f2c9a" offset="0x0000" />
+ <rom name="wall.gtp" size="1328" crc="602db525" sha1="fe31a2455376427436e2638e3452633a2a0f2c9a" offset="0" />
</dataarea>
</part>
</software>
@@ -602,51 +602,51 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2863">
- <rom name="wonderer.gtp" size="2863" crc="0e7310b7" sha1="e7dd10af2970ada6ca4d7c3eaaa0b3c3b9b929e9" offset="0x0000" />
+ <rom name="wonderer.gtp" size="2863" crc="0e7310b7" sha1="e7dd10af2970ada6ca4d7c3eaaa0b3c3b9b929e9" offset="0" />
</dataarea>
</part>
</software>
<software name="wonder2">
- <description>Wonderer2</description>
+ <description>Wonderer 2</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1866">
- <rom name="wonderer2.gtp" size="1866" crc="cd4ae466" sha1="1e5f8e9be2be400ceed8d547d41f3cfe3d9eb072" offset="0x0000" />
+ <rom name="wonderer2.gtp" size="1866" crc="cd4ae466" sha1="1e5f8e9be2be400ceed8d547d41f3cfe3d9eb072" offset="0" />
</dataarea>
</part>
</software>
<software name="zamak">
<description>Zamak</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1984</year>
+ <publisher>Antonic Voja</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="3015">
- <rom name="zamak.gtp" size="3015" crc="7d0cc0c9" sha1="e10d2cf3be1a79febc062ade3f8d5c3713bd43ca" offset="0x0000" />
+ <rom name="zamak.gtp" size="3015" crc="7d0cc0c9" sha1="e10d2cf3be1a79febc062ade3f8d5c3713bd43ca" offset="0" />
</dataarea>
</part>
</software>
<software name="zid">
<description>Zid</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1984</year>
+ <publisher>GAC Software</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="2142">
- <rom name="zid.gtp" size="2142" crc="2302a824" sha1="19b34c1ad8ce33e638e297d68221fffc6c8e9e56" offset="0x0000" />
+ <rom name="zid.gtp" size="2142" crc="2302a824" sha1="19b34c1ad8ce33e638e297d68221fffc6c8e9e56" offset="0" />
</dataarea>
</part>
</software>
<software name="ziul">
<description>Ziul</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1984</year>
+ <publisher>Dejan Ristanovic</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="6673">
- <rom name="ziul.gtp" size="6673" crc="f8322dad" sha1="d2988be278dc7328257841789042976799cf39ef" offset="0x0000" />
+ <rom name="ziul.gtp" size="6673" crc="f8322dad" sha1="d2988be278dc7328257841789042976799cf39ef" offset="0" />
</dataarea>
</part>
</software>
@@ -657,20 +657,75 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="1584">
- <rom name="zvezdice.gtp" size="1584" crc="d45e9a5b" sha1="63cf1089407873e2eb4a43703985e41f6b0623f7" offset="0x0000" />
+ <rom name="zvezdice.gtp" size="1584" crc="d45e9a5b" sha1="63cf1089407873e2eb4a43703985e41f6b0623f7" offset="0" />
</dataarea>
</part>
</software>
<software name="zvjezdan">
- <description>ZvjezdaneStaze</description>
- <year>19??</year>
+ <description>Zvjezdane Staze</description>
+ <year>1985</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="galaxy_cass">
<dataarea name="cass" size="4950">
- <rom name="zvjezdanestaze.gtp" size="4950" crc="40fcf0b0" sha1="c44d72cead914b31d5f7f26eebb2f3dc9acea498" offset="0x0000" />
+ <rom name="zvjezdanestaze.gtp" size="4950" crc="40fcf0b0" sha1="c44d72cead914b31d5f7f26eebb2f3dc9acea498" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fire">
+ <description>Fire</description>
+ <year>2007</year>
+ <publisher>Tomaz Solc</publisher>
+ <part name="cass1" interface="galaxy_cass">
+ <dataarea name="cass" size="772">
+ <rom name="fire (2007-06-27)(solc, tomaz).gtp" size="772" crc="4c5758a9" sha1="4d9072f6fa5180e70d7ad4b05555678daf61d4ea" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hardware">
+ <description>Hardware</description>
+ <year>2007</year>
+ <publisher>Tomaz Solc</publisher>
+ <part name="cass1" interface="galaxy_cass">
+ <dataarea name="cass" size="670">
+ <rom name="hardware (2007-09-22)(solc, tomaz).gtp" size="670" crc="daf12925" sha1="46c9e4a8039a6e4a8e9a2c7715c05fb65da05f5a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="highres">
+ <description>Highres</description>
+ <year>2009</year>
+ <publisher>Tomaz Solc</publisher>
+ <part name="cass1" interface="galaxy_cass">
+ <dataarea name="cass" size="2838">
+ <rom name="highres (2009-01-22)(solc, tomaz).gtp" size="2838" crc="663aaef2" sha1="bf60334e341682683bb658a5a5fa9dc00011dfbf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="particle">
+ <description>Particle</description>
+ <year>2007</year>
+ <publisher>Tomaz Solc</publisher>
+ <part name="cass1" interface="galaxy_cass">
+ <dataarea name="cass" size="631">
+ <rom name="particle (2007-07-12)(solc, tomaz).gtp" size="631" crc="7f9a2b90" sha1="025169e080857de663f41d3a809325c544fb9de7" offset="0" />
</dataarea>
</part>
</software>
+ <software name="stars">
+ <description>Stars</description>
+ <year>2007</year>
+ <publisher>Tomaz Solc</publisher>
+ <part name="cass1" interface="galaxy_cass">
+ <dataarea name="cass" size="573">
+ <rom name="stars (2007-07-12)(solc, tomaz).gtp" size="573" crc="6329e68d" sha1="3c6657ae167ce5ff1076458530da75dc3228e739" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/gamate.xml b/hash/gamate.xml
new file mode 100644
index 00000000000..9fff1320ff1
--- /dev/null
+++ b/hash/gamate.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<softwarelist name="gamate" description="Bit Corp Gamate cartridges">
+
+ <software name="cubeup" supported="no">
+ <description>Cube Up</description>
+ <year>19??</year>
+ <publisher>Bit Corp</publisher>
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="16384">
+ <rom name="cube up.bin" size="16384" crc="2a911e57" sha1="9d3b28887b6f375600bff29f8f233087b9152a60" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+
+</softwarelist>
diff --git a/hash/gamegear.xml b/hash/gamegear.xml
index 805b3957d50..8dd194e843c 100644
--- a/hash/gamegear.xml
+++ b/hash/gamegear.xml
@@ -7,7 +7,6 @@ The following games existed according to VGRebirth
- NFL Quarterback Club 95 (Jpn) by Acclaim
- Robocop 3 (Jpn) by Acclaim
- Sonic Drift (Euro) by Sega
- - Super Golf (USA) by Sage's Creations
- Terminator 2 - Judgement Day (Jpn) by Acclaim
Other undumped games:
@@ -8415,6 +8414,17 @@ a certain item) -->
</software>
<software name="supgolf">
+ <description>Super Golf (USA)</description>
+ <year>1991</year>
+ <publisher>Sage's Creations</publisher>
+ <part name="cart" interface="gamegear_cart">
+ <dataarea name="rom" size="131072">
+ <rom name="super golf (usa).bin" size="131072" crc="e9570f36" sha1="ed9b5e1264b4ed6d8969ba1c4e3f2d9446c3c9ca" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="supgolfj" cloneof="supgolf">
<description>Super Golf (Jpn)</description>
<year>1991</year>
<publisher>Sigma Enterprises</publisher>
diff --git a/hash/gameking.xml b/hash/gameking.xml
index 0764a60e97a..5ab4e90c849 100644
--- a/hash/gameking.xml
+++ b/hash/gameking.xml
@@ -5,7 +5,7 @@
<softwarelist name="gameking" description="TimeTop GameKing cartridges">
- <software name="2004">
+ <software name="2004" supported="no">
<description>2004</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -16,7 +16,7 @@
</part>
</software>
- <software name="alcarlo">
+ <software name="alcarlo" supported="no">
<description>Adventure Legend Carlo</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -27,7 +27,7 @@
</part>
</software>
- <software name="aries">
+ <software name="aries" supported="no">
<description>Aries</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -38,7 +38,7 @@
</part>
</software>
- <software name="dinoadv">
+ <software name="dinoadv" supported="no">
<description>Dino Adventure Legend</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -49,7 +49,7 @@
</part>
</software>
- <software name="duckman">
+ <software name="duckman" supported="no">
<description>Duck Man</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -60,7 +60,7 @@
</part>
</software>
- <software name="happybal">
+ <software name="happybal" supported="no">
<description>Happy Ball</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -71,7 +71,7 @@
</part>
</software>
- <software name="happykil">
+ <software name="happykil" supported="no">
<description>Happy Killer</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -82,7 +82,7 @@
</part>
</software>
- <software name="lanner">
+ <software name="lanner" supported="no">
<description>Lanneret</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -93,7 +93,7 @@
</part>
</software>
- <software name="penguin">
+ <software name="penguin" supported="no">
<description>Penguin</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -104,7 +104,7 @@
</part>
</software>
- <software name="popper">
+ <software name="popper" supported="no">
<description>Popper</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -115,7 +115,7 @@
</part>
</software>
- <software name="sthero">
+ <software name="sthero" supported="no">
<description>Street Hero</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -126,7 +126,7 @@
</part>
</software>
- <software name="smotor">
+ <software name="smotor" supported="no">
<description>Supermotor</description>
<year>200?</year>
<publisher>TimeTop</publisher>
@@ -137,7 +137,7 @@
</part>
</software>
- <software name="trojanl">
+ <software name="trojanl" supported="no">
<description>Trojan Legend</description>
<year>200?</year>
<publisher>TimeTop</publisher>
diff --git a/hash/gbcolor.xml b/hash/gbcolor.xml
index a1aa94e5170..6e89d1d352f 100644
--- a/hash/gbcolor.xml
+++ b/hash/gbcolor.xml
@@ -10286,7 +10286,7 @@ List of unconfirmed retail cartridge roms
<feature name="slot" value="rom_mbc5" />
<!-- cartridge ram -->
<dataarea name="rom" size="1048576">
- <rom name="hello kitty no magical museum (japan).bin" size="1048576" crc="5174584f" sha1="f274c780fc3bf4f95b5c17afd0ec73824bedee5c" offset="000000" />
+ <rom name="hello kitty no magical museum (japan).bin" size="1048576" crc="f6768930" sha1="462e5120831c2298bb5138bf25b4c8c72b372407" offset="000000" />
</dataarea>
<dataarea name="nvram" size="8192">
</dataarea>
diff --git a/hash/hx20_flop.xml b/hash/hx20_flop.xml
deleted file mode 100644
index cd292e690f9..00000000000
--- a/hash/hx20_flop.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
-<softwarelist name="hx20_flop" description="Epson HX-20 diskettes">
-
- <software name="hx20boot">
- <description>Epson TF-20 / HX-20 boot disk</description>
- <year>1982</year>
- <publisher>Epson</publisher>
-
- <part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="25002">
- <rom name="hx20boot.imd" size="25002" crc="b8fea298" sha1="0ff2aed3ba9d32a8d9deaff9f8a45c7de4939afc" offset="0" />
- </dataarea>
- </part>
- </software>
-
-</softwarelist>
diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml
index b268f5e93db..a67aa753a4d 100644
--- a/hash/ibm5150.xml
+++ b/hash/ibm5150.xml
@@ -2822,4 +2822,72 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went
</dataarea>
</part>
</software>
+
+ <software name="kingqst4">
+ <!-- Dumped via Kryoflux, shows as good and unmodified -->
+ <description>King's Quest IV: The Perils of Rosella (Version #2.2, 3.5")</description>
+ <year>1988</year>
+ <publisher>Sierra</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 1 of 3" />
+ <dataarea name="flop" size="737280">
+ <rom name="disk1_35.img" size="737280" crc="afc8464c" sha1="a8a40b48be021b070378834d2ceb428f32f9b883" offset="0" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 2 of 3" />
+ <dataarea name="flop" size="737280">
+ <rom name="disk2_35.img" size="737280" crc="022c3c12" sha1="89a4b0a4145257ae4d4270d4546dcf238c6b8b1d" offset="0" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <feature name="part_id" value="Disk 3 of 3" />
+ <dataarea name="flop" size="737280">
+ <rom name="disk3_35.img" size="737280" crc="c2230f34" sha1="28173b45a4b605fa99234b3567bf49e606bae78f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kingqst4m" cloneof="kingqst4">
+ <!-- Dumped via Kryoflux, shows as good and unmodified -->
+ <description>King's Quest IV: The Perils of Rosella (Version #2.2, 5.25")</description>
+ <year>1988</year>
+ <publisher>Sierra</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="part_id" value="Disk 1 of 6" />
+ <dataarea name="flop" size="368640">
+ <rom name="disk1_525.img" size="368640" crc="d183e114" sha1="1569458b0588a1667ca99ef0a5206102742a34b5" offset="0" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_5_25">
+ <feature name="part_id" value="Disk 2 of 6" />
+ <dataarea name="flop" size="368640">
+ <rom name="disk2_525.img" size="368640" crc="a22e8248" sha1="cf6b5e0bd7847d0021ccc992cc7fd10b5d01a754" offset="0" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_5_25">
+ <feature name="part_id" value="Disk 3 of 6" />
+ <dataarea name="flop" size="368640">
+ <rom name="disk3_525.img" size="368640" crc="43943dd4" sha1="375a2d158563a1148bd17b8c383d984ae43ea209" offset="0" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_5_25">
+ <feature name="part_id" value="Disk 4 of 6" />
+ <dataarea name="flop" size="368640">
+ <rom name="disk4_525.img" size="368640" crc="e39c62f4" sha1="8f579c93d72b1d362d94ba2fb493ebad77b4fafd" offset="0" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_5_25">
+ <feature name="part_id" value="Disk 5 of 6" />
+ <dataarea name="flop" size="368640">
+ <rom name="disk5_525.img" size="368640" crc="3d1517b0" sha1="8e5b3ff93b858e11e808776f440546da1858f20c" offset="0" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_5_25">
+ <feature name="part_id" value="Disk 6 of 6" />
+ <dataarea name="flop" size="368640">
+ <rom name="disk6_525.img" size="368640" crc="3852ba12" sha1="09767b94985c3ef81547bca74964d6bff95faf00" offset="0" />
+ </dataarea>
+ </part>
+ </software>
</softwarelist>
diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml
index 82509238371..631ba7c1f4f 100644
--- a/hash/ibm5170.xml
+++ b/hash/ibm5170.xml
@@ -3966,6 +3966,48 @@ Missing files come here
</part>
</software>
+ <software name="samnmax">
+ <!-- Dumped via Kryoflux, track 0 shows as modified on all disks -->
+ <description>Sam &amp; Max Hit the Road</description>
+ <year>1993</year>
+ <publisher>LucasArts</publisher>
+ <part name="flop1" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="disk1.img" size="1474560" crc="918a2aee" sha1="9293235f0efbbe19e9bb7c979911a2371e61f773" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="flop2" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="disk2.img" size="1474560" crc="59f7507a" sha1="e43bfd7cb3f120566845a9efe489f6c59d57d384" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="flop3" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="disk3.img" size="1474560" crc="05541aff" sha1="03497aae8e443aada4c9234a6dd19563b8235450" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="flop4" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="disk4.img" size="1474560" crc="2174d87c" sha1="407eeb5293c9e02b38b1c8c314a8b23ae8a24fc9" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="flop5" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="disk5.img" size="1474560" crc="cfd03ddc" sha1="c7ce4de481715bd03f1ecca31af4ce1ceaa2be66" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="flop6" interface="floppy_3_5">
+ <dataarea name="flop" size="1474560">
+ <rom name="disk6.img" size="1474560" crc="af792c0f" sha1="1df1e0b4ff74b5b4aa9b3c416da99880f58826cd" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="flop7" interface="floppy_3_5">
+ <dataarea name="flop" size="737280">
+ <rom name="disk7.img" size="737280" crc="077b9c18" sha1="8d299cd5fe2ed0dd93253d383c12e3fa889a4b39" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="sserv2">
<!-- Dumped via Kryoflux, shows as good and unmodified -->
<description>Silent Service II (Version 457.01)</description>
diff --git a/hash/intv.xml b/hash/intv.xml
index 6dd05d4c996..f8a0d47d26f 100644
--- a/hash/intv.xml
+++ b/hash/intv.xml
@@ -31,6 +31,7 @@
<year>1982</year>
<publisher>Mattel Electronics</publisher>
<info name="serial" value="3410"/>
+ <info name="alt_title" value="Advanced Dungeons &amp; Dragons - Cloudy Mountain"/>
<part name="cart" interface="intv_cart">
<feature name="slot" value="intv_rom" />
<dataarea name="5000" size="0x3000">
@@ -90,6 +91,20 @@
</part>
</software>
+<!-- Originally AstroSmash was planned to be an Asteroid clone, titled Meteor. The code is still inside
+ the final AstroSmash cart, and this version makes the game selectable -->
+ <software name="astrosmsm" cloneof="astrosms">
+ <description>AstroSmash - Meteor (Hacked?)</description>
+ <year>1981</year>
+ <publisher>Mattel Electronics</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="8192">
+ <rom name="astrosmash - meteor (1981) (mattel).50" size="8192" crc="00be8bba" sha1="7da15a0b713cfc79e577650bd372b37cb3f6d7a4" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="atlantis">
<description>Atlantis</description>
<year>1982</year>
@@ -502,6 +517,7 @@
</part>
</software>
+<!-- At title screen, press 4+7 in both keypads to start Deadly Dogs, a TRON Deadly Disks hack with BurgerTime gfx -->
<software name="digdug">
<description>Dig Dug</description>
<year>1987</year>
@@ -1823,6 +1839,18 @@
</part>
</software>
+ <software name="adventur" cloneof="add">
+ <description>Adventure (Prototype)</description>
+ <year>1982</year>
+ <publisher>Mattel Electronics</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="adventure (ad&amp;d - cloudy mountain) (1982) (mattel).50" size="16384" crc="11c3bcfa" sha1="009683f3a40adbdd97b7256d64614feff12469ae" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="advtron">
<description>Adventures of TRON (Unreleased)</description>
<year>1982</year>
@@ -1874,6 +1902,18 @@
</part>
</software>
+ <software name="crazycln">
+ <description>Crazy Clones (Unfinished)</description>
+ <year>1981</year>
+ <publisher>Mattel Electronics</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="0x2000">
+ <rom name="crazy clones.50" size="0x2000" crc="e1ee408f" sha1="9a45cd3b59ddb6c9e0fcff0cd4dc6f71afd6953d" offset="0x0000"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="choplift">
<description>Choplifter! (Prototype)</description>
<year>1983</year>
@@ -1904,6 +1944,18 @@
</part>
</software>
+ <software name="dfactorp" cloneof="dfactor">
+ <description>The Dreadnaught Factor (Prototype)</description>
+ <year>1982</year>
+ <publisher>Activision</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="dreadnaught factor, the (prototype) (1983) (activision).50" size="16384" crc="bf4d0e9b" sha1="bede92706fbd137de5c24cff335f80e3447718fc" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="gftgold">
<description>Go for the Gold! (Prototype)</description>
<year>1983</year>
@@ -2035,7 +2087,7 @@
</part>
</software>
- <software name="league">
+ <software name="llight">
<description>League of Light (Prototype)</description>
<year>1983</year>
<publisher>Activision</publisher>
@@ -2047,6 +2099,30 @@
</part>
</software>
+ <software name="llight1" cloneof="llight">
+ <description>League of Light (Prototype, Alt)</description>
+ <year>1983</year>
+ <publisher>Activision</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="league of light (prototype) (1983) (activision) [a1][!].50" size="16384" crc="19360442" sha1="9c36d2fec6c1c2bc01bb3863997e267f74325e06" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="llight2" cloneof="llight" supported="no">
+ <description>League of Light (Prototype, Alt 2)</description>
+ <year>1983</year>
+ <publisher>Activision</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="league of light (prototype) (1983) (activision) [a2].50" size="16384" crc="75ee64f6" sha1="43693f63b502029a15b93fc63be8e06cafa38085" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="magic">
<description>Magic Carousel (Prototype)</description>
<year>1983</year>
@@ -2075,6 +2151,42 @@
</part>
</software>
+ <software name="minotaur" cloneof="addtot">
+ <description>Minotaur (Prototype)</description>
+ <year>1981</year>
+ <publisher>Mattel Electronics</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="minotaur (1981) (mattel).50" size="16384" crc="bd731e3c" sha1="1cf301a48856cff7ac5e2162889fd0f3956d911c" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minotaur2" cloneof="addtot">
+ <description>Minotaur (Prototype, v2)</description>
+ <year>1981</year>
+ <publisher>Mattel Electronics</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="minotaur v2 (1981) (mattel) [!].50" size="16384" crc="5a4ce519" sha1="3f6939a673f0ace5d02d7ebb5d9e44dfd4d80413" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minotaur11" cloneof="addtot" supported="no">
+ <description>Minotaur (Prototype, v1.1)</description>
+ <year>1981</year>
+ <publisher>Mattel Electronics</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="minotaur v1.1 (1981) (mattel) [!].50" size="16384" crc="6746607b" sha1="227d64182bc8adf46a17903c57c553353dd5e65a" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mycastle" cloneof="thcastle">
<description>Mystic Castle (Prototype)</description>
<year>1982</year>
@@ -2144,6 +2256,18 @@
</part>
</software>
+ <software name="riveraidp" cloneof="riveraid">
+ <description>River Raid (Prototype)</description>
+ <year>1983?</year>
+ <publisher>Activision</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="river raid v1 (prototype) (1982-83) (activision).50" size="16384" crc="95466ad3" sha1="2e148e09261ed89be0578abbb568b7225fc8621b" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="rrubble">
<description>Robot Rubble (Prototype)</description>
<year>1983</year>
@@ -2156,6 +2280,30 @@
</part>
</software>
+ <software name="rrubble2" cloneof="rrubble">
+ <description>Robot Rubble (Prototype, v2)</description>
+ <year>1983</year>
+ <publisher>Activision</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="8192">
+ <rom name="robot rubble v2 (prototype) (1983) (activision).50" size="8192" crc="a5e28783" sha1="7dfc58a14d57c7bd520007b2fb7e9173f3175752" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rrubble1" cloneof="rrubble">
+ <description>Robot Rubble (Prototype, v1)</description>
+ <year>1983</year>
+ <publisher>Activision</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="8192">
+ <rom name="robot rubble v1 (prototype) (1983) (activision).50" size="8192" crc="7473916d" sha1="99da0316641a7639ef4be71e5904b2399f36d4cb" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="rockybw">
<description>Rocky &amp; Bullwinckle (Unreleased)</description>
<year>1983</year>
@@ -2243,6 +2391,18 @@
</part>
</software>
+ <software name="thinicep" cloneof="thinice">
+ <description>Thin Ice (Prototype)</description>
+ <year>1983</year>
+ <publisher>Mattel Electronics</publisher>
+ <part name="cart" interface="intv_cart">
+ <feature name="slot" value="intv_rom" />
+ <dataarea name="5000" size="16384">
+ <rom name="thin ice (prototype) (1983) (intv corp) [!].50" size="16384" crc="d6495910" sha1="e038024463fc6b5577983621d861152602b281a6" offset="0x0000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="yogi">
<description>Yogi's Frustration (Unreleased)</description>
<year>1983</year>
@@ -2393,10 +2553,10 @@
</part>
</software>
- <software name="spacecnt">
+ <software name="spacecnt" cloneof="sspartan">
<description>Space Cunt</description>
- <year>200?</year>
- <publisher>IntelligentVision</publisher>
+ <year>1983</year>
+ <publisher>Mattel Electronics</publisher>
<info name="usage" value="Uses Intellivoice"/>
<part name="cart" interface="intv_cart">
<feature name="slot" value="intv_rom" />
diff --git a/hash/m5.xml b/hash/m5_cart.xml
index 6794057c899..3836952aace 100644
--- a/hash/m5.xml
+++ b/hash/m5_cart.xml
@@ -71,7 +71,7 @@ and why some of the dumps below have weird size?
-->
-<softwarelist name="m5" description="Sord M5 cartridges">
+<softwarelist name="m5_cart" description="Sord M5 cartridges">
<!-- Games -->
diff --git a/hash/m5_cass.xml b/hash/m5_cass.xml
new file mode 100644
index 00000000000..457d2c3b2e4
--- /dev/null
+++ b/hash/m5_cass.xml
@@ -0,0 +1,284 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<!--
+ Cassettes that load with CHAIN cannot auto-start correctly.
+ Mount the BASIC-I cart first, then the cassette to load + run them.
+
+ Other tapes should auto-load and run.
+-->
+
+<softwarelist name="m5_cass" description="Sord M5 cassettes">
+ <software name="barricad">
+ <description>Barricade</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3840">
+ <rom name="barricade.cas" size="3840" crc="453b03b7" sha1="4bd1fd674ecc1348de82705df65c9968d17f4371" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="barrier">
+ <description>Barrier Attack</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3386">
+ <rom name="b.attack.cas" size="3386" crc="f84b6cf6" sha1="58007c3f59591717ea15f89c7cf0501a956d0e03" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="baseball">
+ <description>Baseball</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="11221">
+ <rom name="baseball.cas" size="11221" crc="91ba7884" sha1="5b15b6f9d1ec625c5fd12dbaa1108c0645a3c543" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="biorhyth">
+ <description>Biorhythm Diagnosis</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="19071">
+ <rom name="biorhythm.cas" size="19071" crc="7fdf95ff" sha1="c8a0d5dacb629e9793dce36036bd3e50cceb1640" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="blackjac">
+ <description>Blackjack</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="16980">
+ <rom name="blackjack.cas" size="16980" crc="0ba87b33" sha1="5fb0f2d186a3c1c32738e5162f32bf0831681367" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cowboy">
+ <description>Cowboy</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3767">
+ <rom name="cowboy.cas" size="3767" crc="f4cc6900" sha1="52bbfa6aed885c6c2d818a331423217971806dfa" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="graphic">
+ <description>Graphic Designer</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3417">
+ <rom name="p-editor.cas" size="3417" crc="c57f6d10" sha1="e6774256941073e7d46472bfec1a1a47fb8d20fd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jogging">
+ <description>Jogging</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="8537">
+ <rom name="jogging.cas" size="8537" crc="ee87bee5" sha1="4e7a3a4a436aac78272384a160bd1118421efbd6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lastday">
+ <description>Last Day of the Earth</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="19184">
+ <rom name="neutron.cas" size="19184" crc="d8b699da" sha1="7e33a89c3bfcb5f73ef117a992dc67f74a3640d9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="startrek">
+ <description>Mini Star Trek</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="4744">
+ <rom name="startrek.cas" size="4744" crc="bbc88a19" sha1="d066e9baf5576e338ba7122ecca497e01e451071" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mustone">
+ <description>Music Tone</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3423">
+ <rom name="music tone (19xx)(-)[chain].cas" size="3423" crc="296671e0" sha1="a5bd05aa110879317e19566936264de21ec34195" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="numsrch">
+ <description>Number Search</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3244">
+ <rom name="n.search.cas" size="3244" crc="5ac28495" sha1="052e3696c2342df39cb35f4cef781cfce8d159c7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sidewind">
+ <description>Sidewinder</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3628">
+ <rom name="s.winder.cas" size="3628" crc="a4405fe0" sha1="679969f20907cb4bd2fe62340b868316d2c3aaba" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="slotmach">
+ <description>Slot Machine</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="5207">
+ <rom name="slot.cas" size="5207" crc="60f5678b" sha1="4f11ddac8909af685f67c30c47ae472101f94c1e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="snaky">
+ <description>Snaky</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3213">
+ <rom name="snaky.cas" size="3213" crc="6f66a0b3" sha1="731fb6c43b240eb701ac10ed4c73103f11af0414" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="solitair">
+ <description>Solitaire</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3278">
+ <rom name="solitaire.cas" size="3278" crc="c7d4f0af" sha1="58938d626ee291e79783f9656d1e26701662808d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="3circles">
+ <description>Three Circles</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="3568">
+ <rom name="3-circles.cas" size="3568" crc="c8436fcc" sha1="3c03ee9ee6ac3b51d0ca990f72fc83816d747ba1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hanoi">
+ <description>Tower of Hanoi</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Mount together with &quot;BASIC-I&quot; and load with CHAIN"/>
+ <!--<sharedfeat name="requirement" value="m5_cart:basici"/>-->
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="4108">
+ <rom name="hanoi.cas" size="4108" crc="a91c50be" sha1="b81e42cabf4b7d0d8389a4e4cae1ea8a49f628f2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvadjust">
+ <description>TV Adjust</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="1345">
+ <rom name="tvadjust.cas" size="1345" crc="6b2980fc" sha1="88490185fae07f8ef848b2153fbd954c12066fcd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zacbanic">
+ <description>Zac Banic</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="m5_cass">
+ <dataarea name="cass" size="4746">
+ <rom name="zacbanic.cas" size="4746" crc="05026a99" sha1="463bdea30de9e67db98f7c2a2c5bb7e3799ef96d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/megadriv.xml b/hash/megadriv.xml
index cc17ffcfa1a..78a55a06ecc 100644
--- a/hash/megadriv.xml
+++ b/hash/megadriv.xml
@@ -3,7 +3,6 @@
<!--
UNDUMPED / TO BE REDUMPED LIST
- 2IN1 (COSMIC SPACEHEAD FANTASTIC DIZZY) PAL
ADVANCED DAISENRYAKU JAPAN we have Rev A, Rev 0 needed (does it exist?)
CAPTAIN PLANET ASIA
DAVIS CUP TENNIS JAPAN
@@ -14,7 +13,6 @@
FERRARI GRAND PRIX CHALLENGE PAL we have Rev A, Rev 0 needed (does it exist?)
FIFA SOCCER JAPAN
FIRE SHARK PAL dump check
- GAIN GROUND PAL revision order check
GALAXY FORCE II ALL we have Rev B, Rev 0 and Rev A needed (does it exist?)
INTERNATIONAL SUPERSTAR SOCCER BRAZIL
JEWEL MASTER USA/PAL we have Rev A, Rev 0 needed (does it match Japanese release?)
@@ -42,7 +40,6 @@ Known undumped protos
* Ghoul Patrol
* Beethoven's 2nd
* Iron Hammer (from http://www.youtube.com/watch?v=uQG0tZQaKUg )
- * Bill's Tomato Game (from http://www.youtube.com/watch?v=GeCuBe2xd8A )
* Total Carnage
* Monster Hunter
* Brown 60
@@ -110,6 +107,25 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<!-- Fully documented: confirmed dumps + PCB pics -->
+ <!-- Game is switched on reset -->
+ <software name="2fdizcsp">
+ <description>2 in 1 - Fantastic Dizzy &amp; Cosmic Spacehead (Euro)</description>
+ <year>1994</year>
+ <publisher>Codemasters</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_cm2in1"/>
+ <feature name="pcb" value="SR16V7-2"/>
+ <feature name="u1" value="COSMIC SPACEHEAD MD MDCS E4F7"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <feature name="u2" value="FANTASTIC DIZZY MD MDFD BB07"/> <!-- location not really marked on PCB, using u2 for consistency -->
+ <feature name="left" value="GD74HC00"/>
+ <feature name="right" value="GD74HC74"/>
+ <dataarea name="rom" width="16" endianness="big" size="2621440">
+ <rom name="cosmic spacehead md mdcs e4f7.u1" size="1048576" crc="cb89e605" sha1="b5bc4a786639d1b8ae6de76f40dbe907b3f0b642" offset="0x000000"/>
+ <rom name="fantastic dizzy md mdfd bb07.u2" size="524288" crc="46447e7a" sha1="b320174d3b43f30b477818a27b4da30462a52003" offset="0x200000"/>
+ </dataarea>
+ </part>
+ </software>
+
<!-- Both Euro and USA confirmed -->
<software name="688atsub">
<description>688 Attack Sub (Euro, USA)</description>
@@ -825,6 +841,28 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- Only Euro is confirmed -->
+ <software name="barkley">
+ <description>Barkley Shut Up and Jam! (Euro, USA)</description>
+ <year>1993</year>
+ <publisher>Accolade</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="ACSGPC291 REV B"/>
+ <feature name="ic1" value="9406 LHR ACBBSG"/>
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="9406 lhr acbbsg.ic1" size="1048576" crc="63fbf497" sha1="fc60a682412b4f7f851c5eb7f6ae68fcee3d2dd1" offset="0x000000"/>
+ </dataarea>
+ </part>
+<!-- LABEL(S)
+
+ ACCOLADE, INC.
+ 9406 LHR
+ ACBBSG
+ (C)1994 ACCOLADE
+-->
+ </software>
+
+
<software name="batman">
<description>Batman (Euro)</description>
<year>1992</year>
@@ -1106,6 +1144,36 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<!-- Only Euro confirmed -->
+ <software name="bubsy">
+ <description>Bubsy in Claws Encounters of the Furred Kind (Euro, USA)</description>
+ <year>1993</year>
+ <publisher>Accolade</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="ACSGPC291 REV B"/>
+ <feature name="u1" value="9330 LHR ACBUSG"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="9330 lhr acbusg.u1" size="2097152" crc="3e30d365" sha1="719140754763e5062947ef9e76ee748cfad38202" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
+<!-- Only Euro confirmed -->
+ <software name="bubsy2">
+ <description>Bubsy II (Euro, USA)</description>
+ <year>1994</year>
+ <publisher>Accolade</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="7100-00002 REV C"/>
+ <feature name="ic1" value="BU2SG 7500-00032 B"/>
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="bu2sg 7500-00032 b.ic1" size="2097152" crc="f8beff56" sha1="0cfb6c619798ba47f35069dea094fbc96f974ecb" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
+<!-- Only Euro confirmed -->
<software name="buckrog">
<description>Buck Rogers - Countdown to Doomsday (Euro, USA)</description>
<year>1991</year>
@@ -1153,6 +1221,21 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- Only Euro is confirmed -->
+ <software name="bullvsla">
+ <description>Bulls Vs Lakers and the NBA Playoffs (Euro, USA)</description>
+ <year>1992</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="PWB SC42X1 REV D"/>
+ <feature name="u1" value="BULLS 7099 BUL04"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="bulls 7099 bul04.u1" size="1048576" crc="e56023a0" sha1="102652dcd218e3420ea9c4116231fa62f8fcd770" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="burnforc">
<!-- Namcot PCB (blob epoxy chip) -->
<description>Burning Force (Euro)</description>
@@ -1481,6 +1564,20 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="clue">
+ <description>Clue (USA)</description>
+ <year>1992</year>
+ <publisher>Parker Brothers</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5703"/>
+ <feature name="ic1" value="MPR-15228-S"/>
+ <dataarea name="rom" width="16" endianness="big" size="524288">
+ <rom name="mpr-15228-s.ic1" size="524288" crc="7753a296" sha1="d1f9114f41a3d6237e24392629fea5fbeb3f0b87" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="collslam">
<description>College Slam (USA)</description>
<year>1996</year>
@@ -2197,6 +2294,23 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="ejim2">
+ <description>Earthworm Jim 2 (Euro)</description>
+ <year>1995</year>
+ <publisher>Virgin Interactive</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-6570A"/>
+ <feature name="ic1" value="MPR-18589-MX"/>
+ <feature name="ic2" value="MPR-18677-MX"/>
+ <feature name="ic3" value="SN74HC00N"/>
+ <dataarea name="rom" width="16" endianness="big" size="3145728">
+ <rom name="mpr-18589-mx.ic1" size="2097152" crc="2619cfc6" sha1="e4effd2801e1825f62b548d58edad09af4c8a97a" offset="0x000000"/>
+ <rom name="mpr-18677-mx.ic2" size="1048576" crc="8e6a0ea8" sha1="b853945408fb945437a485684880d16e27c6a939" offset="0x200000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Only Euro is confirmed -->
<software name="ecco">
<description>Ecco the Dolphin (Euro, USA, Kor)</description>
@@ -2909,6 +3023,34 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="formula1" cloneof="f1">
+ <description>Formula One (USA)</description>
+ <year>1993</year>
+ <publisher>Tengen</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5978B"/>
+ <feature name="u1" value="MPR-15987-SM"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="mpr-15987-sm.u1" size="1048576" crc="ccd73738" sha1="8f8edd8e6846cbba1b46f8eb9015b195ccc4acf9" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
+ <software name="funngame">
+ <description>Fun 'N Games (Euro)</description>
+ <year>1993</year>
+ <publisher>Sony Imagesoft</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5978BA"/>
+ <feature name="u1" value="MPR-17016 T69"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="mpr-17016 t69.u1" size="1048576" crc="da4ab3cd" sha1="3677dfe5450c0800d29cfff31f226389696bfb32" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Only Euro is confirmed -->
<software name="gground">
<description>Gain Ground (World, Rev. A)</description>
@@ -3007,6 +3149,20 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="sbtank">
+ <description>Garry Kitchen's Super Battletank - War in the Gulf (USA)</description>
+ <year>1992</year>
+ <publisher>Absolute Entertainment</publisher>
+ <feature name="pcb" value="171-5703"/>
+ <feature name="ic1" value="MPR-15273 W95"/>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="524288">
+ <rom name="mpr-15273 w95.ic1" size="524288" crc="b0b5e3c9" sha1="4ce9aaaa9d3f98e1747af12ad488b6bdbde1afb4" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Only Euro is confirmed -->
<software name="genchaos">
<description>General Chaos (Euro, USA)</description>
@@ -3326,6 +3482,21 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<!-- Only Euro is confirmed -->
+ <software name="hardball">
+ <description>HardBall! (Euro, USA)</description>
+ <year>1991</year>
+ <publisher>Ballistic</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="ACSGPC291 REV B"/>
+ <feature name="ic1" value="ACHBSG491 W40"/>
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="achbsg491 w40.ic1" size="1048576" crc="bd1b9a04" sha1="42d42af36b4a69f0adb38aaa7fec32eb8c44c349" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
+<!-- Only Euro is confirmed -->
<software name="hardbl94">
<description>HardBall '94 (Euro, USA)</description>
<year>1994</year>
@@ -3554,6 +3725,20 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="indycrusu" cloneof="indycrus">
+ <description>Indiana Jones and the Last Crusade (USA)</description>
+ <year>1992</year>
+ <publisher>U.S. Gold</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5978BA"/>
+ <feature name="u1" value="MPR-15235-T"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="mpr-15235-t.u1" size="1048576" crc="3599a3fd" sha1="82758a8a47c4f1f0e990bd50b773b2c4300f616e" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="intrugby">
<description>International Rugby (Euro)</description>
<year>1993</year>
@@ -3642,6 +3827,26 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- Only Euro is confirmed -->
+ <software name="nicklaus">
+ <description>Jack Nicklaus' Power Challenge Golf (Euro, USA)</description>
+ <year>1993</year>
+ <publisher>Accolade</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_sram"/>
+ <feature name="pcb" value="ACSGEE1191 REV A"/>
+ <feature name="u1" value="9323 LHR ACJVSG"/>
+ <feature name="u2" value="KM28C16-20"/>
+ <feature name="u3" value="74HC00AP"/>
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="9323 lhr acjvsg.u1" size="1048576" crc="5545e909" sha1="8d7edfe87da732ecd9820a6afbb9c5700cce43b2" offset="0x000000"/>
+ </dataarea>
+ <dataarea name="sram" size="4096">
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Only Euro is confirmed, USA with label C55-01? needs to be verified -->
<software name="jbdougko">
<description>James 'Buster' Douglas Knockout Boxing (Euro, USA)</description>
@@ -3736,6 +3941,20 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="jennifct" cloneof="grandsl">
+ <description>Jennifer Capriati Tennis (USA)</description>
+ <year>1992</year>
+ <publisher>Renovation</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5703"/>
+ <feature name="ic1" value="MPR-15055 W87"/>
+ <dataarea name="rom" width="16" endianness="big" size="524288">
+ <rom name="mpr-15055 w87.ic1" size="524288" crc="ab2abc8e" sha1="8d72ea31c87b1a229098407e9c59a46e65f996a2" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Only Euro is confirmed -->
<software name="jewelms">
<description>Jewel Master (Euro, USA, Rev. A)</description>
@@ -4780,6 +4999,38 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- same dump confirmed on a no J-cart cart -->
+ <software name="micromc2">
+ <description>Micro Machines 2 - Turbo Tournament (Euro, J-Cart)</description>
+ <year>1994</year>
+ <publisher>Codemasters</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_codemast"/>
+ <feature name="pcb" value="SR16V4-1, SRJCV2-1 (J-CART)"/>
+ <feature name="u1" value="MICRO MACHINES2 MDM 2BEAD"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <!-- J-cart version also contains additional ICs for the controller ports -->
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="micro machines2 mdm 2bead.u1" size="1048576" crc="42bfb7eb" sha1="ab29077a6a5c2ccc777b0bf22f4d5908401f4d47" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
+<!-- Only Euro is confirmed -->
+ <software name="cosmic">
+ <description>Cosmic Spacehead (Euro, USA)</description>
+ <year>1993</year>
+ <publisher>Codemasters</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="SR16V4-1"/>
+ <feature name="u1" value="COSMIC SPACEHEAD MDCS 2D2E"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="cosmic spacehead mdcs 2d2e.u1" size="1048576" crc="c593d31c" sha1="95a3eb13e5d28db8c8ea5ff3e95b0d3e614def69" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="mmprtm">
<description>Mighty Morphin Power Rangers - The Movie (Euro)</description>
<year>1995</year>
@@ -5130,6 +5381,28 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- Only Euro is confirmed -->
+ <software name="nbaliv97">
+ <description>NBA Live 97 (Euro, USA)</description>
+ <year>1996</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_sram"/>
+ <feature name="pcb" value="PWA P10002 REV M"/>
+ <feature name="u1" value="NBA 97 B2"/>
+ <feature name="u2" value="GM76C88ALK-15"/>
+ <feature name="u3" value="74HC138N"/>
+ <feature name="u4" value="BA6162"/>
+ <feature name="batt" value="(Lithium Cell)"/>
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="nba 97 b2.u1" size="2097152" crc="7024843a" sha1="1671451ab4ab6991e13db70671054c0f2c652a95" offset="0x000000"/>
+ </dataarea>
+ <dataarea name="sram" size="16384">
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="bullvslaj" cloneof="bullvsla">
<description>NBA Pro Basketball - Bulls Vs Lakers (Jpn)</description>
<year>1993</year>
@@ -5633,6 +5906,28 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<!-- Only Euro is confirmed -->
+ <software name="pgaeuro">
+ <description>PGA European Tour (Euro, USA)</description>
+ <year>1994</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_sram"/>
+ <feature name="pcb" value="PWA P10002 REV H"/>
+ <feature name="u1" value="EURO EUR003"/>
+ <feature name="u2" value="GM76C88ALK-15"/>
+ <feature name="u3" value="GD74LS138"/>
+ <feature name="u4" value="331-1026B"/>
+ <feature name="batt" value="(Lithium Cell)"/>
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="euro euro03.u1" size="1048576" crc="8ca45acd" sha1="640615be6891a8457d94bb81b0e8e1fa7c5119a8" offset="0x000000"/>
+ </dataarea>
+ <dataarea name="sram" size="16384">
+ </dataarea>
+ </part>
+ </software>
+
+
+<!-- Only Euro is confirmed -->
<software name="pga96">
<description>PGA Tour 96 (Euro, USA)</description>
<year>1995</year>
@@ -5723,6 +6018,28 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- Only Euro is confirmed -->
+ <software name="pga3">
+ <description>PGA Tour Golf III (Euro, USA)</description>
+ <year>1994</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_sram"/>
+ <feature name="pcb" value="PWA P10002 REV K"/>
+ <feature name="u1" value="PGA3 PGA3B2"/>
+ <feature name="u2" value="GM76C88ALK-15"/>
+ <feature name="u3" value="GD74LS138"/>
+ <feature name="u4" value="438-1026B"/>
+ <feature name="batt" value="(Lithium Cell)"/>
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="pga3 pga3b2.u1" size="2097152" crc="aeb3f65f" sha1="702707efcbfe229f6e190f2b6c71b6f53ae9ec36" offset="0x000000"/>
+ </dataarea>
+ <dataarea name="sram" size="16384">
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="phantom">
<description>Phantom 2040 (Euro)</description>
<year>1995</year>
@@ -5873,6 +6190,24 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- does mpr-18875 belong to the US version or to an alt PCB with a single ROM? -->
+ <software name="pocahont">
+ <description>Pocahontas (Euro)</description>
+ <year>1996</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-6570A"/>
+ <feature name="ic1" value="MPR-19084-MX"/>
+ <feature name="ic2" value="MPR-19085-MX"/>
+ <feature name="ic3" value="SN74HC00N"/>
+ <dataarea name="rom" width="16" endianness="big" size="4194304">
+ <rom name="mpr-19084-mx.ic1" size="2097152" crc="6bcf72de" sha1="d1823b946980d9e0763e35e2d794f3c931c99db5" offset="0x000000"/>
+ <rom name="mpr-19085-mx.ic2" size="2097152" crc="cc453625" sha1="a711ae8cf75d88af0d14ceda79c5c0bb3b318efe" offset="0x200000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="pdrive">
<description>Power Drive (Euro)</description>
<year>1994</year>
@@ -5902,13 +6237,13 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
-<!-- Only Euro is confirmed -->
+<!-- Both Euro and USA are confirmed -->
<software name="predatr2">
<description>Predator 2 (Euro, USA)</description>
<year>1992</year>
<publisher>Arena</publisher>
<part name="cart" interface="megadriv_cart">
- <feature name="pcb" value="670100 REV 1"/>
+ <feature name="pcb" value="670100 REV 1 (EUR), 670100 REV 5 (USA)"/>
<feature name="ic1" value="MPR-15069 W71"/>
<dataarea name="rom" width="16" endianness="big" size="1048576">
<rom name="mpr-15069 w71.ic1" size="1048576" crc="bdba113e" sha1="0d482bae2922c81c8bc7500a62c396b038978114" offset="0x000000"/>
@@ -5917,6 +6252,28 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="prmanger">
+ <description>Premier Manager (Euro)</description>
+ <year>1995</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_sram"/>
+ <feature name="pcb" value="171-6021A"/>
+ <feature name="ic1" value="MPR-18473-U"/>
+ <feature name="ic2" value="UM62256D-70LL"/>
+ <feature name="ic3" value="BA6162"/>
+ <feature name="ic4" value="SN74HC00N"/>
+ <feature name="ic5" value="SN74HC00N"/>
+ <feature name="bat" value="(Lithium Cell)"/>
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="mpr-18473-u.ic1" size="1048576" crc="303b889f" sha1="2916e5ef628e077cde87be873e0ea2507ef5c844" offset="0x000000"/>
+ </dataarea>
+ <dataarea name="sram" size="65536">
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="prmang97">
<description>Premier Manager 97 (Euro)</description>
<year>1996</year>
@@ -5985,6 +6342,20 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="psycho1" cloneof="psycho">
+ <description>Psycho Pinball (Euro, 199409)</description>
+ <year>1994</year>
+ <publisher>Codemasters</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="SR16V4-0"/>
+ <feature name="u1" value="CODEMASTERS PSYCHO PINBALL MDPP021F"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="codemasters psycho pinball mdpp021f.u1" size="2097152" crc="1ab8f1a1" sha1="810688f1ffb736ae1790803e1c6804caaa24c15a" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="puggsy">
<description>Puggsy (Euro)</description>
<year>1993</year>
@@ -6426,6 +6797,23 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="slammast">
+ <description>Saturday Night Slammasters (Euro)</description>
+ <year>1994</year>
+ <publisher>Capcom</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-6570A"/>
+ <feature name="ic1" value="MPR-17902-F"/>
+ <feature name="ic2" value="MPR-17903-F"/>
+ <feature name="ic3" value="74HC00N"/>
+ <dataarea name="rom" width="16" endianness="big" size="4194304">
+ <rom name="mpr-17902-f.ic1" size="2097152" crc="bfacdf54" sha1="2c9e878c0a9bb44ec7d71caf7da986f1a7ebdaf8" offset="0x000000"/>
+ <rom name="mpr-17903-f.ic2" size="2097152" crc="3a20db0a" sha1="f48873b2662c1ccf5635d5331d92f58175982e6f" offset="0x200000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="slammastu" cloneof="slammast">
<description>Saturday Night Slammasters (USA)</description>
<year>1994</year>
@@ -6732,13 +7120,13 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
-<!-- Only Euro is confirmed -->
+<!-- Both Euro and USA are confirmed -->
<software name="bartnigh">
<description>The Simpsons - Bart's Nightmare (Euro, USA)</description>
<year>1993</year>
<publisher>Flying Edge</publisher>
<part name="cart" interface="megadriv_cart">
- <feature name="pcb" value="171-5978BA"/>
+ <feature name="pcb" value="171-5978BA (EUR), 171-5978B (USA)"/>
<feature name="u1" value="MPR-15762 T53"/> <!-- location not really marked on PCB, using u1 for consistency -->
<dataarea name="rom" width="16" endianness="big" size="1048576">
<rom name="mpr-15762 t53.u1" size="1048576" crc="24d7507c" sha1="fb95b7fdf12dcf62883dabf65d2bf8ffa83786fc" offset="0x000000"/>
@@ -6859,6 +7247,20 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="sspinu" cloneof="sspin">
+ <description>Sonic Spinball (USA)</description>
+ <year>1993</year>
+ <publisher>Sega</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5978BA"/>
+ <feature name="u1" value="MPR-15753 T71"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="mpr-15753 t71.u1" size="1048576" crc="677206cb" sha1="24bf6342b98c09775089c9f39cfb2f6fbe7806f7" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Both Euro and USA confirmed -->
<software name="sonic">
<description>Sonic the Hedgehog (Euro, USA)</description>
@@ -6874,6 +7276,24 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- Jpn only is confirmed -->
+ <software name="sonicj" cloneof="sonic">
+ <description>Sonic the Hedgehog (Jpn, Kor)</description>
+ <year>1991</year>
+ <publisher>Sega</publisher>
+ <info name="serial" value="G-4049"/>
+ <info name="release" value="19910726"/>
+ <info name="alt_title" value="ソニック・ザ・ヘッジホッグ"/>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="171-5703"/>
+ <feature name="ic1" value="MPR-13933 W33"/>
+ <dataarea name="rom" width="16" endianness="big" size="524288">
+ <rom name="mpr-13933 w33.ic1" size="524288" crc="afe05eee" sha1="69e102855d4389c3fd1a8f3dc7d193f8eee5fe5b" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Euro and Jpn are confirmed -->
<software name="sonic2">
<description>Sonic the Hedgehog 2 (World, Rev. A)</description>
@@ -6944,6 +7364,20 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="sparkstr">
+ <description>Sparkster (Euro)</description>
+ <year>1994</year>
+ <publisher>Konami</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="353536"/>
+ <feature name="u1" value="FX011A1"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="fx011a1.u1" size="1048576" crc="d63e9f2d" sha1="91057f22c5cea9bf08edf62862c56b939d570770" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<software name="speedbl2">
<description>Speedball 2 (Euro)</description>
<year>1992</year>
@@ -7948,7 +8382,7 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
-<!-- Only Euro is confirmed -->
+<!-- Euro and USA confirmed -->
<software name="toejama" cloneof="toejam">
<description>Toe Jam &amp; Earl (World)</description>
<year>1992</year>
@@ -7958,7 +8392,7 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<info name="alt_title" value="トージャム&amp;アール"/>
<part name="cart" interface="megadriv_cart">
<feature name="pcb" value="171-5978BA"/>
- <feature name="u1" value="MPR-14236-F"/> <!-- location not really marked on PCB, using u1 for consistency -->
+ <feature name="u1" value="MPR-14236-F, MPR-14236-H"/> <!-- location not really marked on PCB, using u1 for consistency -->
<dataarea name="rom" width="16" endianness="big" size="1048576">
<rom name="mpr-14236-f.ic1" size="1048576" crc="d1b36786" sha1="7f82d8b57fff88bdca5d8aff85b01e231dc1239a" offset="0x000000"/>
</dataarea>
@@ -8352,6 +8786,28 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- Only Euro is confirmed -->
+ <software name="vpinball">
+ <description>Virtual Pinball (Euro, USA)</description>
+ <year>1993</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="slot" value="rom_sram"/>
+ <feature name="pcb" value="PWA P10002 REV H"/>
+ <feature name="u1" value="PINBALL VPBALL03"/>
+ <feature name="u2" value="GM76C88ALK-15"/>
+ <feature name="u3" value="GD74LS138"/>
+ <feature name="u4" value="365-1026B"/>
+ <feature name="batt" value="(Lithium Cell)"/>
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="pinball vpball03.u1" size="1048576" crc="d63473aa" sha1="cd066bb54e0a4c21821639728893462b0218597e" offset="0x000000"/>
+ </dataarea>
+ <dataarea name="sram" size="16384">
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Both Euro and USA confirmed -->
<software name="vrtroop">
<description>VR Troopers (Euro, USA)</description>
@@ -8465,7 +8921,7 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<publisher>Ballistic</publisher>
<part name="cart" interface="megadriv_cart">
<feature name="pcb" value="ACSGEE1191 REV A"/>
- <feature name="u1" value="9341 (c) 1/92 ACWCSG-1"/>
+ <feature name="u1" value="9341 (c) 1/92 ACWCSG-1"/> <!-- Also found with 9341 replaced by 9240, and 9405 -->
<feature name="u2" value="AT28C1616E, KM28C16-20"/>
<feature name="u3" value="KS74HCTLS00N"/>
<dataarea name="rom" width="16" endianness="big" size="1048576">
@@ -8756,12 +9212,9 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<!-- Only Euro is confirmed -->
<software name="wwfroyal">
- <description>WWF Royal Rumble (World)</description>
+ <description>WWF Royal Rumble (Euro)</description>
<year>1994</year>
- <publisher>Flying Edge</publisher> <!-- This has been published by Acclaim in Jpn, in fact -->
- <info name="serial" value="T-81043 (JPN)"/>
- <info name="release" value="19940325"/>
- <info name="alt_title" value="WWFロイヤルランブル"/>
+ <publisher>Flying Edge</publisher>
<part name="cart" interface="megadriv_cart">
<feature name="pcb" value="670116 REV 2"/>
<feature name="ic1" value="WWFRR-GEN LO VER 1.00"/>
@@ -8784,6 +9237,24 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+<!-- Only USA is confirmed -->
+ <software name="wwfroyalu" cloneof="wwfroyal">
+ <description>WWF Royal Rumble (Jpn, USA)</description>
+ <year>1994</year>
+ <publisher>Flying Edge</publisher> <!-- This has been published by Acclaim in Jpn, in fact -->
+ <info name="serial" value="T-81043 (JPN)"/>
+ <info name="release" value="19940325"/>
+ <info name="alt_title" value="WWFロイヤルランブル"/>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="670115 REV 4"/>
+ <feature name="ic1" value="MPR-15935-SM"/>
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="mpr-15935-sm.ic1" size="2097152" crc="b69dc53e" sha1="34e85015b8681ce15ad4777a60c81297ccf718b1" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Only Euro is confirmed -->
<software name="wwfsup">
<description>WWF Super WrestleMania (Euro, USA)</description>
@@ -8917,6 +9388,36 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</software>
+ <software name="zool">
+ <description>Zool (Euro)</description>
+ <year>1993</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="alt_title" value="Zool - Ninja of the &quot;Nth&quot; Dimension (Box)"/>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="PWA P10001 REV H"/>
+ <feature name="u1" value="ZOOL ZOOL04"/>
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="zool zool04.u1" size="1048576" crc="1ee58b03" sha1="cab14f63b7d00b35a11a3a7f60cf231199121dc8" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
+<!-- Only Euro is confirmed -->
+ <software name="rugbywc">
+ <description>Rugby World Cup 1995 (Euro, USA)</description>
+ <year>1994</year>
+ <publisher>Electronic Arts</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <feature name="pcb" value="PWA P10001 REV H"/>
+ <feature name="u1" value="RUGBY RUGBYB21"/>
+ <dataarea name="rom" width="16" endianness="big" size="2097152">
+ <rom name="rugby rugbyb21.u1" size="2097152" crc="61f90a8a" sha1="9b435c82b612e23cb512efaebf4d35b203339e44" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
+
<!-- Only Euro is confirmed -->
<software name="zoom">
<description>Zoom! (World)</description>
@@ -8938,22 +9439,6 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<!-- Partially documented: confirmed dumps, missing additional info (a PCB pic would be of help to fill missing details) -->
- <software name="micromc2">
- <description>Micro Machines 2 - Turbo Tournament (Euro, J-Cart)</description>
- <year>1994</year>
- <publisher>Codemasters</publisher>
- <part name="cart" interface="megadriv_cart">
- <feature name="slot" value="rom_codemast"/>
- <feature name="pcb" value="SRJCV2-1"/>
- <feature name="u1" value="MICRO MACHINES2 MDM 2BEAD"/> <!-- location not really marked on PCB, using u1 for consistency -->
- <!-- J-cart version also contains additional ICs for the controller ports -->
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="micro machines2 mdm 2bead.u1" size="1048576" crc="42bfb7eb" sha1="ab29077a6a5c2ccc777b0bf22f4d5908401f4d47" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
-
<software name="microm96">
<description>Micro Machines Turbo Tournament 96 (Euro, v1.1, J-Cart)</description>
<year>1995</year>
@@ -9098,18 +9583,6 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
</part>
</software>
- <software name="psycho1" cloneof="psycho">
- <description>Psycho Pinball (Euro, 199409)</description>
- <year>1994</year>
- <publisher>Codemasters</publisher>
- <part name="cart" interface="megadriv_cart">
- <feature name="pcb" value="SR16V4-0"/>
- <dataarea name="rom" width="16" endianness="big" size="2097152">
- <rom name="mdpp021f.bin" size="2097152" crc="1ab8f1a1" sha1="810688f1ffb736ae1790803e1c6804caaa24c15a" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="micromac">
<description>Micro Machines (Euro, USA)</description>
<year>1993</year>
@@ -9131,7 +9604,7 @@ Info on Sega chip labels (from Sunbeam / Digital Corruption)
<feature name="slot" value="rom_cm2in1"/>
<dataarea name="rom" width="16" endianness="big" size="2621440">
<rom name="mdppf821.bin" size="2097152" crc="32dd8351" sha1="928f46ca87886c6e72d10f7c9db29b09e483bc49" offset="0x000000"/>
- <rom name="mdmm_acd3.bin" size="524288" crc="50081a0b" sha1="56a8844c376f2e79e92cf128681fa3fef81c36d6" offset="0x200000"/>
+ <rom name="mdmm acd3.bin" size="524288" crc="50081a0b" sha1="56a8844c376f2e79e92cf128681fa3fef81c36d6" offset="0x200000"/>
</dataarea>
</part>
</software>
@@ -9901,16 +10374,14 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="arrow1" cloneof="arrow">
- <description>Arrow Flash (World, Alt)</description>
+<!-- This dump was originally tagged as Alt, but it matched Jeckidy's proto dump (cart with label ARROW FLASH #625A) -->
+ <software name="arrowp" cloneof="arrow">
+ <description>Arrow Flash (USA, Prototype)</description>
<year>1990</year>
- <publisher>Sega</publisher>
- <info name="serial" value="G-4039 (JPN)"/>
- <info name="release" value="19901020 (JPN)"/>
- <info name="alt_title" value="アローフラッシュ"/>
+ <publisher>Renovation</publisher>
<part name="cart" interface="megadriv_cart">
<dataarea name="rom" width="16" endianness="big" size="524288">
- <rom name="arrow flash (world) (alt).bin" size="524288" crc="4d89e66b" sha1="916524d2b403a633108cf457eec13b4df7384d95" offset="0x000000"/>
+ <rom name="arrowflash.a04c.bin" size="524288" crc="4d89e66b" sha1="916524d2b403a633108cf457eec13b4df7384d95" offset="0x000000"/>
</dataarea>
</part>
</software>
@@ -10374,17 +10845,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="barkley">
- <description>Barkley Shut Up and Jam! (Euro, USA)</description>
- <year>1993</year>
- <publisher>Accolade</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="barkley shut up and jam! (euro, usa).bin" size="1048576" crc="63fbf497" sha1="fc60a682412b4f7f851c5eb7f6ae68fcee3d2dd1" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="barkley2">
<description>Barkley Shut Up and Jam! 2 (USA)</description>
<year>1995</year>
@@ -11380,34 +11840,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="bubsy">
- <description>Bubsy in Claws Encounters of the Furred Kind (Euro, USA)</description>
- <year>1993</year>
- <publisher>Accolade</publisher>
- <part name="cart" interface="megadriv_cart">
- <!-- Dump To Be Confirmed -->
- <feature name="pcb" value="ACSGBSW"/>
- <feature name="u1" value="ACBUSGM"/> <!-- location not really marked on PCB, using u1 for consistency -->
- <dataarea name="rom" width="16" endianness="big" size="2097152">
- <rom name="acbusgm.u1" size="2097152" crc="3e30d365" sha1="719140754763e5062947ef9e76ee748cfad38202" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
- <software name="bubsy2">
- <description>Bubsy II (Euro, USA)</description>
- <year>1994</year>
- <publisher>Accolade</publisher>
- <part name="cart" interface="megadriv_cart">
- <!-- Dump To Be Confirmed -->
- <feature name="pcb" value="7100 00002"/>
- <feature name="u1" value="BU2SG"/> <!-- location not really marked on PCB, using u1 for consistency -->
- <dataarea name="rom" width="16" endianness="big" size="2097152">
- <rom name="bu2sg.u1" size="2097152" crc="f8beff56" sha1="0cfb6c619798ba47f35069dea094fbc96f974ecb" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="budokanu" cloneof="budokan">
<description>Budokan - The Martial Spirit (USA)</description>
<year>1990</year>
@@ -11441,17 +11873,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="bullvsla">
- <description>Bulls Vs Lakers and the NBA Playoffs (Euro, USA)</description>
- <year>1992</year>
- <publisher>Electronic Arts</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="bulls vs lakers and the nba playoffs (euro, usa).bin" size="1048576" crc="e56023a0" sha1="102652dcd218e3420ea9c4116231fa62f8fcd770" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="burnforcu" cloneof="burnforc">
<description>Burning Force (USA)</description>
<year>1990</year>
@@ -11883,17 +12304,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="clue">
- <description>Clue (USA)</description>
- <year>1992</year>
- <publisher>Parker Brothers</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="524288">
- <rom name="clue (usa).bin" size="524288" crc="7753a296" sha1="d1f9114f41a3d6237e24392629fea5fbeb3f0b87" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="coachk">
<description>Coach K College Basketball (USA)</description>
<year>1995</year>
@@ -12511,17 +12921,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="cosmic">
- <description>Cosmic Spacehead (Euro, USA)</description>
- <year>1993</year>
- <publisher>Codemasters</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="cosmic spacehead (euro, usa).bin" size="1048576" crc="c593d31c" sha1="95a3eb13e5d28db8c8ea5ff3e95b0d3e614def69" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="crkdownu" cloneof="crkdown">
<description>Crack Down (USA)</description>
<year>1991</year>
@@ -13761,17 +14160,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="ejim2">
- <description>Earthworm Jim 2 (Euro)</description>
- <year>1995</year>
- <publisher>Virgin Interactive</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="3145728">
- <rom name="earthworm jim 2 (euro).bin" size="3145728" crc="af235fdf" sha1="b8e93ea8b42c688a218b83797e4a18eda659f3e0" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="ejim2u" cloneof="ejim2">
<description>Earthworm Jim 2 (USA)</description>
<year>1996</year>
@@ -14414,17 +14802,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="formula1" cloneof="f1">
- <description>Formula One (USA)</description>
- <year>1993</year>
- <publisher>Tengen</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="formula one (usa).bin" size="1048576" crc="ccd73738" sha1="8f8edd8e6846cbba1b46f8eb9015b195ccc4acf9" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="f1wcp" cloneof="f1wc">
<description>F1 - World Championship Edition (Euro, Prototype)</description>
<year>1993</year>
@@ -14952,17 +15329,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="funngame">
- <description>Fun 'N Games (Euro)</description>
- <year>1993</year>
- <publisher>Sony Imagesoft</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="fun 'n' games (euro).bin" size="1048576" crc="da4ab3cd" sha1="3677dfe5450c0800d29cfff31f226389696bfb32" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="funngameu" cloneof="funngame">
<description>Fun 'N' Games (USA)</description>
<year>1993</year>
@@ -15021,16 +15387,14 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="gground1a" cloneof="gground">
- <description>Gain Ground (World, Alt)</description>
+<!-- This dump was originally tagged as Alt, but it matched Jeckidy's proto dump (cart with label GAIN GROUND #DFE7) -->
+ <software name="gground1p" cloneof="gground">
+ <description>Gain Ground (USA, Prototype)</description>
<year>1991</year>
- <publisher>Sega</publisher>
- <info name="serial" value="G-4036 (JPN)"/>
- <info name="release" value="19910103 (JPN)"/>
- <info name="alt_title" value="ゲイングランド"/>
+ <publisher>Renovation</publisher>
<part name="cart" interface="megadriv_cart">
<dataarea name="rom" width="16" endianness="big" size="524288">
- <rom name="gain ground (world) (alt).bin" size="524288" crc="83e7b8ae" sha1="3cc501086f794ac663aad14d5c5a75b648041151" offset="0x000000"/>
+ <rom name="gainground.a760.bin" size="524288" crc="83e7b8ae" sha1="3cc501086f794ac663aad14d5c5a75b648041151" offset="0x000000"/>
</dataarea>
</part>
</software>
@@ -15458,17 +15822,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="jennifct" cloneof="grandsl">
- <description>Jennifer Capriati Tennis (USA)</description>
- <year>1992</year>
- <publisher>Renovation</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="524288">
- <rom name="jennifer capriati tennis (usa).bin" size="524288" crc="ab2abc8e" sha1="8d72ea31c87b1a229098407e9c59a46e65f996a2" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="greatcirj" cloneof="mickeycm">
<description>Great Circus Mystery - Mickey to Minnie Magical Adventure 2 (Jpn)</description>
<year>1994</year>
@@ -15637,17 +15990,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="hardball">
- <description>HardBall! (USA)</description>
- <year>1991</year>
- <publisher>Ballistic</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="hardball! (usa).bin" size="1048576" crc="bd1b9a04" sha1="42d42af36b4a69f0adb38aaa7fec32eb8c44c349" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="havocu" cloneof="havoc">
<description>High Seas Havoc (USA)</description>
<year>1993</year>
@@ -15917,17 +16259,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="indycrusu" cloneof="indycrus">
- <description>Indiana Jones and the Last Crusade (USA)</description>
- <year>1992</year>
- <publisher>U.S. Gold</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="indiana jones and the last crusade (usa).bin" size="1048576" crc="3599a3fd" sha1="82758a8a47c4f1f0e990bd50b773b2c4300f616e" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="insectx">
<description>Insector X (USA)</description>
<year>1990</year>
@@ -16166,21 +16497,6 @@ but dumps still have to be confirmed.
</part>
</software>
- <software name="nicklaus">
- <description>Jack Nicklaus' Power Challenge Golf (Euro, USA)</description>
- <year>1993</year>
- <publisher>Accolade</publisher>
- <part name="cart" interface="megadriv_cart">
- <feature name="slot" value="rom_sram"/>
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="jack nicklaus' power challenge golf (euro, usa).bin" size="1048576" crc="5545e909" sha1="8d7edfe87da732ecd9820a6afbb9c5700cce43b2" offset="0x000000"/>
- </dataarea>
- <!-- Correct? size taken from the header -->
- <dataarea name="sram" size="2048">
- </dataarea>
- </part>
- </software>
-
<software name="finalb" cloneof="jbdougko">
<description>Final Blow (Jpn)</description>
<year>1990</year>
@@ -19159,20 +19475,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="nbaliv97">
- <description>NBA Live 97 (Euro, USA)</description>
- <year>1996</year>
- <publisher>Electronic Arts</publisher>
- <part name="cart" interface="megadriv_cart">
- <feature name="slot" value="rom_sram"/>
- <dataarea name="rom" width="16" endianness="big" size="2097152">
- <rom name="nba live 97 (euro, usa).bin" size="2097152" crc="7024843a" sha1="1671451ab4ab6991e13db70671054c0f2c652a95" offset="0x000000"/>
- </dataarea>
- <dataarea name="sram" size="16384">
- </dataarea>
- </part>
- </software>
-
<software name="nbaliv98">
<description>NBA Live 98 (USA)</description>
<year>1997</year>
@@ -20494,6 +20796,20 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="pcottonp" cloneof="pcotton">
+ <description>Panorama Cotton (Jpn, Prototype 19931127)</description>
+ <year>1993</year>
+ <publisher>Sunsoft</publisher>
+ <info name="serial" value="T-15103"/>
+ <info name="release" value="19940812"/>
+ <info name="alt_title" value="パノラマコットン"/>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="4194304">
+ <rom name="flying.bin" size="4194304" crc="54d82f86" sha1="aa7d052268ef439a3e289379003d7e7d6fc356f2" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="paperboyj" cloneof="paperboy">
<description>Paperboy (Jpn)</description>
<year>1992</year>
@@ -20622,27 +20938,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="pgaeuro">
- <description>PGA European Tour (Euro, USA)</description>
- <year>1994</year>
- <publisher>Electronic Arts</publisher>
- <part name="cart" interface="megadriv_cart">
- <feature name="slot" value="rom_sram"/>
- <!-- Dump To Be Confirmed -->
- <feature name="pcb" value="PWA P10002 REV H"/>
- <feature name="u1" value="EURO EUR003"/>
- <feature name="u2" value="GM76C88ALK-15"/>
- <feature name="u3" value="GD74LS138"/>
- <feature name="u4" value="331-1026B"/>
- <feature name="batt" value="(Lithium Cell)"/>
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="euro euro03.u1" size="1048576" crc="8ca45acd" sha1="640615be6891a8457d94bb81b0e8e1fa7c5119a8" offset="0x000000"/>
- </dataarea>
- <dataarea name="sram" size="16384">
- </dataarea>
- </part>
- </software>
-
<software name="pga2">
<description>PGA Tour Golf II (Euro, USA, v1.1)</description>
<year>1992</year>
@@ -20674,20 +20969,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="pga3">
- <description>PGA Tour Golf III (Euro, USA)</description>
- <year>1994</year>
- <publisher>Electronic Arts</publisher>
- <part name="cart" interface="megadriv_cart">
- <feature name="slot" value="rom_sram"/>
- <dataarea name="rom" width="16" endianness="big" size="2097152">
- <rom name="pga tour golf iii (euro, usa).bin" size="2097152" crc="aeb3f65f" sha1="702707efcbfe229f6e190f2b6c71b6f53ae9ec36" offset="0x000000"/>
- </dataarea>
- <dataarea name="sram" size="16384">
- </dataarea>
- </part>
- </software>
-
<software name="pstar2a" cloneof="pstar2">
<description>Phantasy Star II (Euro, USA)</description>
<year>1989</year>
@@ -21086,17 +21367,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="pocahont">
- <description>Pocahontas (Euro)</description>
- <year>1996</year>
- <publisher>Sega</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="4194304">
- <rom name="mpr-18875.bin" size="4194304" crc="165e7987" sha1="5ffcdc3e01151837e707ae225a3a845a8b6d3394" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="pocahontu" cloneof="pocahont">
<description>Pocahontas (USA)</description>
<year>1996</year>
@@ -21247,28 +21517,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="prmanger">
- <description>Premier Manager (Euro)</description>
- <year>1995</year>
- <publisher>Sega</publisher>
- <part name="cart" interface="megadriv_cart">
- <feature name="slot" value="rom_sram"/>
- <!-- Dump To Be Confirmed -->
- <feature name="pcb" value="?? (Sega)"/>
- <feature name="ic1" value="MPR-18473-U"/>
- <feature name="ic2" value="UM62256D-70LL"/>
- <feature name="ic3" value="BA6162"/>
- <feature name="ic4" value="74HC00N"/>
- <feature name="ic5" value="74HC00N"/>
- <feature name="bat" value="(Lithium Cell)"/>
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="mpr-18473-u.ic1" size="1048576" crc="303b889f" sha1="2916e5ef628e077cde87be873e0ea2507ef5c844" offset="0x000000"/>
- </dataarea>
- <dataarea name="sram" size="65536">
- </dataarea>
- </part>
- </software>
-
<software name="primetim">
<description>Prime Time NFL Starring Deion Sanders (USA)</description>
<year>1995</year>
@@ -22321,6 +22569,17 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
+ <software name="rocketup" cloneof="rocket">
+ <description>Rocket Knight Adventures (USA, Prototype 19930615)</description>
+ <year>1993</year>
+ <publisher>Konami</publisher>
+ <part name="cart" interface="megadriv_cart">
+ <dataarea name="rom" width="16" endianness="big" size="1048576">
+ <rom name="rocketknightadventcdfb.bin" size="1048576" crc="9cbee37b" sha1="9e2335dc00f95754a2cdce1f6bc7142e467d173d" offset="0x000000"/>
+ </dataarea>
+ </part>
+ </software>
+
<software name="mvpbb">
<description>Roger Clements MVP Baseball (USA)</description>
<year>1992</year>
@@ -22458,17 +22717,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="rugbywc">
- <description>Rugby World Cup 1995 (Euro, USA)</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="rugby world cup 1995 (euro, usa).bin" size="2097152" crc="61f90a8a" sha1="9b435c82b612e23cb512efaebf4d35b203339e44" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="sagaia">
<description>Sagaia (USA)</description>
<year>1991</year>
@@ -22615,17 +22863,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="slammast">
- <description>Saturday Night Slammasters (Euro)</description>
- <year>1994</year>
- <publisher>Capcom</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="4194304">
- <rom name="saturday night slammasters (euro).bin" size="4194304" crc="08fa5a3f" sha1="f67f324165abdf148f80aabb319375dc3a504e17" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="scooby">
<description>Scooby-Doo Mystery (USA)</description>
<year>1995</year>
@@ -23745,17 +23982,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="sspinu" cloneof="sspin">
- <description>Sonic Spinball (USA)</description>
- <year>1993</year>
- <publisher>Sega</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="sonic spinball (usa).bin" size="1048576" crc="677206cb" sha1="24bf6342b98c09775089c9f39cfb2f6fbe7806f7" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="sspinua" cloneof="sspin">
<description>Sonic Spinball (USA, Alt)</description>
<year>1993</year>
@@ -23767,20 +23993,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="sonicj" cloneof="sonic">
- <description>Sonic the Hedgehog (Jpn, Kor)</description>
- <year>1991</year>
- <publisher>Sega</publisher>
- <info name="serial" value="G-4049"/>
- <info name="release" value="19910726"/>
- <info name="alt_title" value="ソニック・ザ・ヘッジホッグ"/>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="524288">
- <rom name="mpr-13933.bin" size="524288" crc="afe05eee" sha1="69e102855d4389c3fd1a8f3dc7d193f8eee5fe5b" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="sonicpir" cloneof="sonic">
<description>Sonic the Hedgehog (Pirate, Ripped from Golden 10 in 1)</description>
<year>1991?</year>
@@ -24059,20 +24271,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="sparkstr">
- <description>Sparkster (Euro)</description>
- <year>1994</year>
- <publisher>Konami</publisher>
- <part name="cart" interface="megadriv_cart">
- <!-- Dump To Be Confirmed, PCB info based on US cart -->
- <feature name="pcb" value="353536"/>
- <feature name="u1" value="FX004"/> <!-- location not really marked on PCB, using u1 for consistency -->
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="fx004.u1" size="1048576" crc="d63e9f2d" sha1="91057f22c5cea9bf08edf62862c56b939d570770" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="sparkstru" cloneof="sparkstr">
<description>Sparkster (USA)</description>
<year>1994</year>
@@ -25096,17 +25294,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="sbtank">
- <description>Garry Kitchen's Super Battletank - War in the Gulf (USA)</description>
- <year>1992</year>
- <publisher>Absolute Entertainment</publisher>
- <part name="cart" interface="megadriv_cart">
- <dataarea name="rom" width="16" endianness="big" size="524288">
- <rom name="super battletank - war in the gulf (usa).bin" size="524288" crc="b0b5e3c9" sha1="4ce9aaaa9d3f98e1747af12ad488b6bdbde1afb4" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="sfzone">
<description>Super Fantasy Zone (Euro)</description>
<year>1993</year>
@@ -27074,20 +27261,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="vpinball">
- <description>Virtual Pinball (Euro, USA)</description>
- <year>1993</year>
- <publisher>Electronic Arts</publisher>
- <part name="cart" interface="megadriv_cart">
- <feature name="slot" value="rom_sram"/>
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="virtual pinball (euro, usa).bin" size="1048576" crc="d63473aa" sha1="cd066bb54e0a4c21821639728893462b0218597e" offset="0x000000"/>
- </dataarea>
- <dataarea name="sram" size="16384">
- </dataarea>
- </part>
- </software>
-
<software name="vixen357">
<description>Vixen 357 (Jpn)</description>
<year>1992</year>
@@ -29166,21 +29339,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i
</part>
</software>
- <software name="zool">
- <description>Zool (Euro)</description>
- <year>1993</year>
- <publisher>Electronic Arts</publisher>
- <info name="alt_title" value="Zool - Ninja of the &quot;Nth&quot; Dimension (Box)"/>
- <part name="cart" interface="megadriv_cart">
- <!-- Dump To Be Confirmed -->
- <feature name="pcb" value="PWA P10001 REV H"/>
- <feature name="u1" value="ZOOL ZOOL04"/>
- <dataarea name="rom" width="16" endianness="big" size="1048576">
- <rom name="zool zool04.u1" size="1048576" crc="1ee58b03" sha1="cab14f63b7d00b35a11a3a7f60cf231199121dc8" offset="0x000000"/>
- </dataarea>
- </part>
- </software>
-
<software name="zoolu" cloneof="zool">
<description>Zool (USA)</description>
<year>1993</year>
diff --git a/hash/mikrosha.xml b/hash/mikrosha.xml
index 88b98781e0b..f46a03eff58 100644
--- a/hash/mikrosha.xml
+++ b/hash/mikrosha.xml
@@ -16,9 +16,9 @@
</software>
<software name="alambush">
- <description>ALAMBUSH</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Alien Ambush</description>
+ <year>1990</year>
+ <publisher>Sedov E. A.</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="5604">
<rom name="alambush.rkm" size="5604" crc="4b247561" sha1="5f6130c571bb4877b27c1e4c37a17db680e8b2ab" offset="0" />
@@ -27,9 +27,9 @@
</software>
<software name="ball">
- <description>BALL</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>The Ball Game</description>
+ <year>1990</year>
+ <publisher>Sandy Pat Corp.</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="2620">
<rom name="ball.rkm" size="2620" crc="ff43291b" sha1="f7fbdae6169c08a4140d685d0d504cc84be82375" offset="0" />
@@ -38,9 +38,9 @@
</software>
<software name="barmen">
- <description>BARMEN</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Barmen (v1.5)</description>
+ <year>1988</year>
+ <publisher>ALG</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="4102">
<rom name="barmen.rkm" size="4102" crc="01a1e046" sha1="f129df0395d261edf50c4c79a8d3375249a935ef" offset="0" />
@@ -49,9 +49,9 @@
</software>
<software name="bomber">
- <description>BOMBER</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Bomber Aircraft</description>
+ <year>1990</year>
+ <publisher>Jup Corp</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="4627">
<rom name="bomber.rkm" size="4627" crc="8ba227ef" sha1="a15ad12ec2981b53607f4ae755acecbb69939b3c" offset="0" />
@@ -59,10 +59,10 @@
</part>
</software>
- <software name="boulder">
- <description>BOULDER</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="bdash">
+ <description>Boulder Dash (v2)</description>
+ <year>1989</year>
+ <publisher>Clever Hands Software</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="15367">
<rom name="boulder.rkm" size="15367" crc="2da99b60" sha1="2620046d21618cf22607827c19334ba000902c27" offset="0" />
@@ -71,7 +71,7 @@
</software>
<software name="chess">
- <description>CHESS</description>
+ <description>Chess</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass" interface="mikrosha_cass">
@@ -81,10 +81,10 @@
</part>
</software>
- <software name="circus">
- <description>CIRCUS</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="cirk">
+ <description>Cirk (v1.2)</description>
+ <year>1986</year>
+ <publisher>Popov S.N.</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="7655">
<rom name="circus.rkm" size="7655" crc="bd44cf25" sha1="2cc3472632e962b0e32637a4eea9090b5307eba9" offset="0" />
@@ -93,9 +93,9 @@
</software>
<software name="crossfir">
- <description>CROSSFIR</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Cross Fire (v004)</description>
+ <year>1988</year>
+ <publisher>Zyryanov A.V.</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="11127">
<rom name="crossfir.rkm" size="11127" crc="0e204a60" sha1="f41be5612ea4648ce51a2495fa2c2b20c4e910fb" offset="0" />
@@ -566,9 +566,9 @@
</software>
<software name="xonmicr">
- <description>XONMICR</description>
+ <description>Xonix (Micron)</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Micron</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="2822">
<rom name="xonmicr.rkm" size="2822" crc="a2658748" sha1="561ac9989c2b8605719d0b340a513fb5a691d7dd" offset="0" />
@@ -576,10 +576,10 @@
</part>
</software>
- <software name="zstation">
- <description>ZSTATION</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="zstanciy">
+ <description>Z-Stanciya</description>
+ <year>1987</year>
+ <publisher>SNP</publisher>
<part name="cass" interface="mikrosha_cass">
<dataarea name="cass" size="1895">
<rom name="zstation.rkm" size="1895" crc="d496dea7" sha1="4aabce2dc4349a82c1ba59be8705f2f8cac77401" offset="0" />
@@ -591,7 +591,7 @@
<!-- System -->
<software name="basic">
- <description>BASIC</description>
+ <description>Mikrosha BASIC</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass" interface="mikrosha_cass">
@@ -602,7 +602,7 @@
</software>
<software name="disasm">
- <description>DISASM</description>
+ <description>Disassembler Mikron</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass" interface="mikrosha_cass">
diff --git a/hash/msx1_cart.xml b/hash/msx1_cart.xml
index c4863b1214c..557bff34a45 100644
--- a/hash/msx1_cart.xml
+++ b/hash/msx1_cart.xml
@@ -13654,7 +13654,7 @@ kept for now until finding out what those bytes affect...
<software name="cheese" supported="partial">
<description>Cheese (Jpn)</description>
<year>1984</year>
- <publisher>Nihon ELectronics</publisher>
+ <publisher>Nihon Electronics</publisher>
<part name="cart" interface="msx_cart">
<feature name="mapper" value="NOMAPPER" />
<dataarea name="rom" size="16384">
diff --git a/hash/nes.xml b/hash/nes.xml
index 834b9152f5b..4bdfdb738c4 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -11218,6 +11218,7 @@
<part name="cart" interface="nes_cart">
<feature name="slot" value="nina006" />
<feature name="pcb" value="AVE-NINA-06" />
+ <feature name="mirroring" value="horizontal" />
<dataarea name="prg" size="32768">
<rom name="f-15 pgm rev 11 db78" size="32768" crc="e1b511cf" sha1="de66004bd0d88aee42c9efe6c65fb1937ab6b9bb" offset="00000" />
</dataarea>
@@ -20454,7 +20455,7 @@
</part>
</software>
- <software name="krazykr" supported="no">
+ <software name="krazykr">
<description>Krazy Kreatures (USA, v1.1)</description>
<year>1990</year>
<publisher>American Video Entertainment</publisher>
@@ -20473,7 +20474,7 @@
</software>
<!-- this was originally included as proto, but it's documented at bootgod's place as v1.0... was it really a prototype? track down the dump... -->
- <software name="krazykrp" cloneof="krazykr" supported="no">
+ <software name="krazykrp" cloneof="krazykr">
<description>Krazy Kreatures (USA, v1.0)</description>
<year>1990</year>
<publisher>American Video Entertainment</publisher>
@@ -23815,7 +23816,7 @@
</part>
</software>
- <software name="mermatl" supported="no">
+ <software name="mermatl">
<description>Mermaids of Atlantis - The Riddle of the Magic Bubble (USA)</description>
<year>1991</year>
<publisher>American Video Entertainment</publisher>
@@ -45717,6 +45718,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<part name="cart" interface="nes_cart">
<feature name="slot" value="nina006" />
<feature name="pcb" value="AVE-NINA-06" />
+ <feature name="mirroring" value="horizontal" />
<dataarea name="chr" size="65536">
<rom name="futebol (brazil) (unl).chr" size="65536" crc="9fddfc61" sha1="feb234b9cb39996542ab4f9a0d76e0c6239fccc3" offset="00000" status="baddump" />
</dataarea>
@@ -45855,6 +45857,23 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</part>
</software>
+ <software name="ghostbstjp" cloneof="ghostbst">
+ <description>Ghostbusters (Jpn, Prototype)</description>
+ <year>1986</year>
+ <publisher>Tokuma Shoten</publisher>
+ <info name="alt_title" value="ゴーストãƒã‚¹ã‚¿ãƒ¼ã‚º"/>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="cnrom" />
+ <feature name="mirroring" value="horizontal" />
+ <dataarea name="chr" size="32768">
+ <rom name="ghostbusters (prototype).chr" size="32768" crc="b7e28707" sha1="ca3d601f1f8f3171c5d46777673159c9c79243c3" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="32768">
+ <rom name="ghostbusters (prototype).prg" size="32768" crc="56bd6db9" sha1="c7989b51c2a361c84c1d6829dc79006fef94537b" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="goalj" cloneof="goal2">
<description>Goal!! (Jpn)</description>
<year>1992</year>
@@ -48398,6 +48417,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<part name="cart" interface="nes_cart">
<feature name="slot" value="nina006" />
<feature name="pcb" value="AVE-NINA-06" />
+ <feature name="mirroring" value="vertical" />
<dataarea name="chr" size="32768">
<rom name="robert byrnes pool challenge (usa) (proto) (unl).chr" size="32768" crc="01005a00" sha1="e47a5a225990eca7aa6dc3853ca2c243f7d29136" offset="00000" status="baddump" />
</dataarea>
@@ -49911,6 +49931,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<part name="cart" interface="nes_cart">
<feature name="slot" value="nina006" />
<feature name="pcb" value="AVE-NINA-03" />
+ <feature name="mirroring" value="horizontal" />
<dataarea name="chr" size="65536">
<rom name="ultimate league soccer (italy) (unl).chr" size="65536" crc="201e9c71" sha1="3ede735b03708783b1ebb9c203d6e702e90cf0c6" offset="00000" status="baddump" />
</dataarea>
@@ -52745,6 +52766,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<part name="cart" interface="nes_cart">
<feature name="slot" value="nina006" />
<feature name="pcb" value="AVE-NINA-06" />
+ <feature name="mirroring" value="horizontal" />
<dataarea name="chr" size="32768">
<rom name="poke block (asia) (unl).chr" size="32768" crc="edce1b2f" sha1="2628650db3c27b2b3232b627db4ed2bcc69d6e17" offset="00000" status="baddump" />
</dataarea>
@@ -57136,6 +57158,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<part name="cart" interface="nes_cart">
<feature name="slot" value="nina006" />
<feature name="pcb" value="AVE-NINA-03" />
+ <feature name="mirroring" value="horizontal" />
<dataarea name="chr" size="65536">
<rom name="av dragon mahjang (japan) (unl).chr" size="65536" crc="a203df20" sha1="2a24122bfb37b9a62771e740c911a5cbb349178e" offset="00000" status="baddump" />
</dataarea>
@@ -57443,7 +57466,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<part name="cart" interface="nes_cart">
<feature name="slot" value="nina006" />
<feature name="pcb" value="AVE-NINA-06" />
- <feature name="mirroring" value="horizontal" />
+ <feature name="mirroring" value="vertical" />
<dataarea name="chr" size="32768">
<rom name="metal fighter (asia) (hacker) (unl).chr" size="32768" crc="fe69de4b" sha1="11bcf115fa146923a87763f8f5f224a8ddb027ce" offset="00000" status="baddump" />
</dataarea>
diff --git a/hash/orao.xml b/hash/orao.xml
index b45a1773a8c..48e7ffbf954 100644
--- a/hash/orao.xml
+++ b/hash/orao.xml
@@ -4,12 +4,12 @@
<softwarelist name="orao" description="PEL Varazdin Orao cassettes">
<software name="6502step">
- <description>6502Step</description>
+ <description>6502 Step (v1.0)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="4099">
- <rom name="6502step.tap" size="4099" crc="18b959be" sha1="9ded3c41aa3d56bc057a8db4ce5d562695723e37" offset="0x0000" />
+ <rom name="6502step.tap" size="4099" crc="18b959be" sha1="9ded3c41aa3d56bc057a8db4ce5d562695723e37" offset="0" />
</dataarea>
</part>
</software>
@@ -17,32 +17,32 @@
<software name="ajnc">
<description>Ajnc</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>PEL Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="17806">
- <rom name="ajnc.tap" size="17806" crc="de341625" sha1="ea157993ea1c70e5f22cb4cf0e8cb1c7acd034da" offset="0x0000" />
+ <rom name="ajnc.tap" size="17806" crc="de341625" sha1="ea157993ea1c70e5f22cb4cf0e8cb1c7acd034da" offset="0" />
</dataarea>
</part>
</software>
<software name="avion">
<description>Avion</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1986</year>
+ <publisher>Emil Herceg - Igor Kos</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="6798">
- <rom name="avion.tap" size="6798" crc="eb4143a9" sha1="c350137a5c6084d8990b9b0856329f5b94aa338f" offset="0x0000" />
+ <rom name="avion.tap" size="6798" crc="eb4143a9" sha1="c350137a5c6084d8990b9b0856329f5b94aa338f" offset="0" />
</dataarea>
</part>
</software>
<software name="bdash">
- <description>BoulderDash</description>
+ <description>Boulder Dash</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Nenad Mihailovic - Mihajlo Dapjas</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="17998">
- <rom name="boulderdash.tap" size="17998" crc="11ab14ed" sha1="4a7541bdcba4f03538c3659ad9c1bb36b6d34263" offset="0x0000" />
+ <rom name="boulderdash.tap" size="17998" crc="11ab14ed" sha1="4a7541bdcba4f03538c3659ad9c1bb36b6d34263" offset="0" />
</dataarea>
</part>
</software>
@@ -50,10 +50,10 @@
<software name="breakout">
<description>Breakout</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Stan Rimox Software</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="18992">
- <rom name="breakout.tap" size="18992" crc="7737b9af" sha1="9d9a9e5b06ede99cb7326bab980d7f5a85ba0723" offset="0x0000" />
+ <rom name="breakout.tap" size="18992" crc="7737b9af" sha1="9d9a9e5b06ede99cb7326bab980d7f5a85ba0723" offset="0" />
</dataarea>
</part>
</software>
@@ -64,73 +64,67 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="4035">
- <rom name="brojke.tap" size="4035" crc="f46a50c8" sha1="edf486d95df1935effa01f77a36d36c0a24829f8" offset="0x0000" />
+ <rom name="brojke.tap" size="4035" crc="f46a50c8" sha1="edf486d95df1935effa01f77a36d36c0a24829f8" offset="0" />
</dataarea>
</part>
</software>
<software name="crtanje">
<description>Crtanje</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1987</year>
+ <publisher>Suzy Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="4698">
- <rom name="crtanje.tap" size="4698" crc="30ef56cb" sha1="7a77d75da0a0b34639b987e0d5cf14d7859d80c6" offset="0x0000" />
+ <rom name="crtanje.tap" size="4698" crc="30ef56cb" sha1="7a77d75da0a0b34639b987e0d5cf14d7859d80c6" offset="0" />
</dataarea>
</part>
</software>
<software name="crvic">
<description>Crvic</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1986</year>
+ <publisher>PEL Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="14050">
- <rom name="crvic.tap" size="14050" crc="6feb9576" sha1="f9f31884a3899731350a2931818b5945afba0bae" offset="0x0000" />
+ <rom name="crvic.tap" size="14050" crc="6feb9576" sha1="f9f31884a3899731350a2931818b5945afba0bae" offset="0" />
</dataarea>
</part>
</software>
- <software name="demo1">
- <description>Demo 1</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="microrac">
+ <description>Mikroracunalo Orao</description>
+ <year>1988</year>
+ <publisher>PEL Varazdin</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="31432">
- <rom name="demo1.tap" size="31432" crc="9e7ba4ec" sha1="3a0c5c8412383a5cd676394308637a8a54238475" offset="0x0000" />
+ <rom name="demo1.tap" size="31432" crc="9e7ba4ec" sha1="3a0c5c8412383a5cd676394308637a8a54238475" offset="0" />
</dataarea>
</part>
- </software>
-
- <software name="demo2">
- <description>Demo 2</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
- <part name="cass1" interface="orao_cass">
+ <part name="cass2" interface="orao_cass">
<dataarea name="cass" size="18450">
- <rom name="demo2.tap" size="18450" crc="8bad5b68" sha1="155a06ebfc964642d902b47b49ee7a3ccf2cef0a" offset="0x0000" />
+ <rom name="demo2.tap" size="18450" crc="8bad5b68" sha1="155a06ebfc964642d902b47b49ee7a3ccf2cef0a" offset="0" />
</dataarea>
</part>
</software>
<software name="demograf">
- <description>DemoGrafika</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Demo Grafika</description>
+ <year>1985</year>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="22996">
- <rom name="demografika.tap" size="22996" crc="1a3f6740" sha1="aeca6893a530b27a0428f33d40fb10c683f450fb" offset="0x0000" />
+ <rom name="demografika.tap" size="22996" crc="1a3f6740" sha1="aeca6893a530b27a0428f33d40fb10c683f450fb" offset="0" />
</dataarea>
</part>
</software>
<software name="eagle">
<description>Eagle</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1986</year>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="9132">
- <rom name="eagle.tap" size="9132" crc="b3a8886c" sha1="80409c7ca7fe3fa70e4133a96f4f04c9806d6c5d" offset="0x0000" />
+ <rom name="eagle.tap" size="9132" crc="b3a8886c" sha1="80409c7ca7fe3fa70e4133a96f4f04c9806d6c5d" offset="0" />
</dataarea>
</part>
</software>
@@ -138,131 +132,131 @@
<software name="jugador">
<description>Jugador</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Mario Vuletic</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="4932">
- <rom name="jugador.tap" size="4932" crc="a42f9cdf" sha1="adbf785606b093925eae1c42d1bb6611372c8f89" offset="0x0000" />
+ <rom name="jugador.tap" size="4932" crc="a42f9cdf" sha1="adbf785606b093925eae1c42d1bb6611372c8f89" offset="0" />
</dataarea>
</part>
</software>
<software name="jumpjack">
- <description>JumpingJack</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Jumping Jack</description>
+ <year>1986</year>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="9133">
- <rom name="jumpingjack.tap" size="9133" crc="2bb70986" sha1="269820989ab16c73594abeb6935736c08e07b5f3" offset="0x0000" />
+ <rom name="jumpingjack.tap" size="9133" crc="2bb70986" sha1="269820989ab16c73594abeb6935736c08e07b5f3" offset="0" />
</dataarea>
</part>
</software>
<software name="karate">
- <description>Karate</description>
+ <description>Internacional Karate</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="25106">
- <rom name="karate.tap" size="25106" crc="021024a0" sha1="90620ceafe258c7bbec195670b629426bf32b82c" offset="0x0000" />
+ <rom name="karate.tap" size="25106" crc="021024a0" sha1="90620ceafe258c7bbec195670b629426bf32b82c" offset="0" />
</dataarea>
</part>
</software>
<software name="kuki">
<description>Kuki</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1986</year>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="9998">
- <rom name="kuki.tap" size="9998" crc="90cddb34" sha1="211de24d98205f1b8dde0057f5294a7fb569483c" offset="0x0000" />
+ <rom name="kuki.tap" size="9998" crc="90cddb34" sha1="211de24d98205f1b8dde0057f5294a7fb569483c" offset="0" />
</dataarea>
</part>
</software>
<software name="kvadrat">
- <description>Kvadrat</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Magicni Kvadrat</description>
+ <year>1985</year>
+ <publisher>Mario Ranogajec - Boris Korpar</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="17078">
- <rom name="kvadrat.tap" size="17078" crc="9ee09595" sha1="9ac6e8046765b6656f27046955eeea3672c4509c" offset="0x0000" />
+ <rom name="kvadrat.tap" size="17078" crc="9ee09595" sha1="9ac6e8046765b6656f27046955eeea3672c4509c" offset="0" />
</dataarea>
</part>
</software>
<software name="labirint">
<description>Labirint</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1985</year>
+ <publisher>Bibi Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="5698">
- <rom name="labirint.tap" size="5698" crc="864f7643" sha1="6201f6dfa20178ca782ac1cde73364d0c5f5ce64" offset="0x0000" />
+ <rom name="labirint.tap" size="5698" crc="864f7643" sha1="6201f6dfa20178ca782ac1cde73364d0c5f5ce64" offset="0" />
</dataarea>
</part>
</software>
<software name="labirinm">
- <description>LabirintM</description>
+ <description>Labirint M</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="15237">
- <rom name="labirintm.tap" size="15237" crc="9e0790cf" sha1="89706cf82798956410facce1613c54a4c898979f" offset="0x0000" />
+ <rom name="labirintm.tap" size="15237" crc="9e0790cf" sha1="89706cf82798956410facce1613c54a4c898979f" offset="0" />
</dataarea>
</part>
</software>
<software name="mminer">
- <description>ManicMiner</description>
+ <description>Manic Miner</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Nenad Mihailovic</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="18001">
- <rom name="manicminer.tap" size="18001" crc="27380ee9" sha1="b37abeb1df684a1ae3b5bd19795ac90e69853176" offset="0x0000" />
+ <rom name="manicminer.tap" size="18001" crc="27380ee9" sha1="b37abeb1df684a1ae3b5bd19795ac90e69853176" offset="0" />
</dataarea>
</part>
</software>
<software name="matchfis">
- <description>MatchFishing</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Match Fishing</description>
+ <year>1986</year>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="23228">
- <rom name="matchfishing.tap" size="23228" crc="fa01ad6c" sha1="88a3af7de00440910212aeb6f5360b32fc9062a1" offset="0x0000" />
+ <rom name="matchfishing.tap" size="23228" crc="fa01ad6c" sha1="88a3af7de00440910212aeb6f5360b32fc9062a1" offset="0" />
</dataarea>
</part>
</software>
- <software name="memonona">
- <description>MemoNoName</description>
+ <software name="memo">
+ <description>Memo</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>PEL Soft</publisher>
<part name="cass1" interface="orao_cass">
- <dataarea name="cass" size="10198">
- <rom name="memononame.tap" size="10198" crc="1166e752" sha1="f17f7917ccf8399ef2231cc26be1e9056a3b0a86" offset="0x0000" />
+ <dataarea name="cass" size="16500">
+ <rom name="memopel.tap" size="16500" crc="128ffc0b" sha1="60daee51376dd59b5623a0072cd842ecd5db7257" offset="0" />
</dataarea>
</part>
</software>
- <software name="memopel">
- <description>Memo PEL</description>
+ <software name="memoa" cloneof="memo">
+ <description>Memo (No Loading Screen)</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>PEL Soft</publisher>
<part name="cass1" interface="orao_cass">
- <dataarea name="cass" size="16500">
- <rom name="memopel.tap" size="16500" crc="128ffc0b" sha1="60daee51376dd59b5623a0072cd842ecd5db7257" offset="0x0000" />
+ <dataarea name="cass" size="10198">
+ <rom name="memononame.tap" size="10198" crc="1166e752" sha1="f17f7917ccf8399ef2231cc26be1e9056a3b0a86" offset="0" />
</dataarea>
</part>
</software>
<software name="nevid">
<description>Nevidljivi</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1987</year>
+ <publisher>Suzy Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="4198">
- <rom name="nevidljivi.tap" size="4198" crc="513373fb" sha1="56bd74d57bafe8eccaeba5ac7d5ac6bae3412403" offset="0x0000" />
+ <rom name="nevidljivi.tap" size="4198" crc="513373fb" sha1="56bd74d57bafe8eccaeba5ac7d5ac6bae3412403" offset="0" />
</dataarea>
</part>
</software>
@@ -270,65 +264,65 @@
<software name="obelix">
<description>Obelix</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="8639">
- <rom name="obelix.tap" size="8639" crc="f79019d1" sha1="0de7854d67905fcc476838fba064924c27bbef4b" offset="0x0000" />
+ <rom name="obelix.tap" size="8639" crc="f79019d1" sha1="0de7854d67905fcc476838fba064924c27bbef4b" offset="0" />
</dataarea>
</part>
</software>
<software name="othello">
<description>Othello</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1985</year>
+ <publisher>Sasa Ivkovic</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="18828">
- <rom name="othello.tap" size="18828" crc="d488a8e3" sha1="a35d5b56882b07c10f98b011d6aa0006a1578452" offset="0x0000" />
+ <rom name="othello.tap" size="18828" crc="d488a8e3" sha1="a35d5b56882b07c10f98b011d6aa0006a1578452" offset="0" />
</dataarea>
</part>
</software>
<software name="pacman">
- <description>PacMan</description>
+ <description>Pac-Man</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Sasa Ivkovic</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="30114">
- <rom name="pacman.tap" size="30114" crc="3a6479ea" sha1="b1cbde718d491b4324d9ed13e70e7df0c108f398" offset="0x0000" />
+ <rom name="pacman.tap" size="30114" crc="3a6479ea" sha1="b1cbde718d491b4324d9ed13e70e7df0c108f398" offset="0" />
</dataarea>
</part>
</software>
<software name="pcelicam">
- <description>PcelicaMaja</description>
+ <description>Pcelica Maja</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="16998">
- <rom name="pcelicamaja.tap" size="16998" crc="e1add5c2" sha1="fcaca49c82855c5fe493bb4741c7e855b1bd1402" offset="0x0000" />
+ <rom name="pcelicamaja.tap" size="16998" crc="e1add5c2" sha1="fcaca49c82855c5fe493bb4741c7e855b1bd1402" offset="0" />
</dataarea>
</part>
</software>
<software name="podsjet">
<description>Podsjetnik</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1987</year>
+ <publisher>Suzy Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="10515">
- <rom name="podsjetnik.tap" size="10515" crc="ea6c2bb4" sha1="fef66d98d23b1b2f675e3d0ed45ccb53829250da" offset="0x0000" />
+ <rom name="podsjetnik.tap" size="10515" crc="ea6c2bb4" sha1="fef66d98d23b1b2f675e3d0ed45ccb53829250da" offset="0" />
</dataarea>
</part>
</software>
<software name="pomorska">
- <description>PomorskaBitka</description>
+ <description>Pomorska Bitka</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="9608">
- <rom name="pomorskabitka.tap" size="9608" crc="8c5dda11" sha1="d25fbedf844ce43ee2eb0cb32546c3abcc9111c0" offset="0x0000" />
+ <rom name="pomorskabitka.tap" size="9608" crc="8c5dda11" sha1="d25fbedf844ce43ee2eb0cb32546c3abcc9111c0" offset="0" />
</dataarea>
</part>
</software>
@@ -339,7 +333,7 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="3179">
- <rom name="porno.tap" size="3179" crc="212bb659" sha1="ab422b4548d279a6961e77499f33b602eaacdd0b" offset="0x0000" />
+ <rom name="porno.tap" size="3179" crc="212bb659" sha1="ab422b4548d279a6961e77499f33b602eaacdd0b" offset="0" />
</dataarea>
</part>
</software>
@@ -350,29 +344,29 @@
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="5950">
- <rom name="reversi.tap" size="5950" crc="3964ff16" sha1="2a735bc3ab917c8b2f16d012318aed9f8aa62a52" offset="0x0000" />
+ <rom name="reversi.tap" size="5950" crc="3964ff16" sha1="2a735bc3ab917c8b2f16d012318aed9f8aa62a52" offset="0" />
</dataarea>
</part>
</software>
- <software name="sah">
- <description>Sah</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="figchess">
+ <description>Figure Chess</description>
+ <year>1986</year>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="19745">
- <rom name="sah.tap" size="19745" crc="02513ff4" sha1="29586a75f9a6ef7b9bb0f370b5eb7f9a00dee37a" offset="0x0000" />
+ <rom name="sah.tap" size="19745" crc="02513ff4" sha1="29586a75f9a6ef7b9bb0f370b5eb7f9a00dee37a" offset="0" />
</dataarea>
</part>
</software>
<software name="sintetiz">
- <description>SintetizatorZvuka</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Sintetizator Zvuka</description>
+ <year>1987</year>
+ <publisher>Suzy Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="3422">
- <rom name="sintetizatorzvuka.tap" size="3422" crc="26da3240" sha1="96b4ec2a5b521e27e4fcc91081126aa274ab9230" offset="0x0000" />
+ <rom name="sintetizatorzvuka.tap" size="3422" crc="26da3240" sha1="96b4ec2a5b521e27e4fcc91081126aa274ab9230" offset="0" />
</dataarea>
</part>
</software>
@@ -380,43 +374,43 @@
<software name="sokoban">
<description>Sokoban</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>J.P.</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="13829">
- <rom name="sokoban.tap" size="13829" crc="ffcf7e0c" sha1="12c435c68b2203b68f29c2450740b958e16e0405" offset="0x0000" />
+ <rom name="sokoban.tap" size="13829" crc="ffcf7e0c" sha1="12c435c68b2203b68f29c2450740b958e16e0405" offset="0" />
</dataarea>
</part>
</software>
<software name="spaceinv">
- <description>SpaceInvaders</description>
+ <description>Space Invaders</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>PEL Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="21150">
- <rom name="spaceinvaders.tap" size="21150" crc="31230e8b" sha1="8021e562130d2b11eb916f3623e65794d93b2a93" offset="0x0000" />
+ <rom name="spaceinvaders.tap" size="21150" crc="31230e8b" sha1="8021e562130d2b11eb916f3623e65794d93b2a93" offset="0" />
</dataarea>
</part>
</software>
<software name="stripajn">
- <description>StripAjnc</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Strip Ajnc</description>
+ <year>1985</year>
+ <publisher>Z. Bistrovic</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="8750">
- <rom name="stripajnc.tap" size="8750" crc="68032c11" sha1="3a49a90b7915491eecdec149a5cfb2f90e1a03da" offset="0x0000" />
+ <rom name="stripajnc.tap" size="8750" crc="68032c11" sha1="3a49a90b7915491eecdec149a5cfb2f90e1a03da" offset="0" />
</dataarea>
</part>
</software>
<software name="stripgam">
- <description>StripGameAinc</description>
+ <description>Strip Game Ainc</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>KMI Borovo</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="31615">
- <rom name="stripgameainc.tap" size="31615" crc="03e38de8" sha1="c5df30d030f44f19182c86fcb6448116f7f92be1" offset="0x0000" />
+ <rom name="stripgameainc.tap" size="31615" crc="03e38de8" sha1="c5df30d030f44f19182c86fcb6448116f7f92be1" offset="0" />
</dataarea>
</part>
</software>
@@ -424,43 +418,43 @@
<software name="tornjev">
<description>Tornjevi</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Tom</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="3966">
- <rom name="tornjevi.tap" size="3966" crc="38d905d7" sha1="2b21e99b9e847a5bde4acadc03b62ca2e628c93d" offset="0x0000" />
+ <rom name="tornjevi.tap" size="3966" crc="38d905d7" sha1="2b21e99b9e847a5bde4acadc03b62ca2e628c93d" offset="0" />
</dataarea>
</part>
</software>
<software name="ukletidv">
- <description>UkletiDvorac</description>
+ <description>Ukleti Dvorac</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="12398">
- <rom name="ukletidvorac.tap" size="12398" crc="850123a7" sha1="d867f072832e8c6dd87fe4bbda14cbb720e9ca25" offset="0x0000" />
+ <rom name="ukletidvorac.tap" size="12398" crc="850123a7" sha1="d867f072832e8c6dd87fe4bbda14cbb720e9ca25" offset="0" />
</dataarea>
</part>
</software>
<software name="zid">
<description>Zid</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1985</year>
+ <publisher>PEL Zabavni Programi</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="11345">
- <rom name="zid.tap" size="11345" crc="c7524e54" sha1="4ee43911a7c49899d2ef7e89308ab3213d1cedac" offset="0x0000" />
+ <rom name="zid.tap" size="11345" crc="c7524e54" sha1="4ee43911a7c49899d2ef7e89308ab3213d1cedac" offset="0" />
</dataarea>
</part>
</software>
<software name="znakovi">
<description>Znakovi</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1987</year>
+ <publisher>Suzy Soft</publisher>
<part name="cass1" interface="orao_cass">
<dataarea name="cass" size="4618">
- <rom name="znakovi.tap" size="4618" crc="a834c22e" sha1="49340c62aa1f1109f610e95878eb75de24916928" offset="0x0000" />
+ <rom name="znakovi.tap" size="4618" crc="a834c22e" sha1="49340c62aa1f1109f610e95878eb75de24916928" offset="0" />
</dataarea>
</part>
</software>
diff --git a/hash/pecom_cass.xml b/hash/pecom_cass.xml
index 09368ba772f..e163452d764 100644
--- a/hash/pecom_cass.xml
+++ b/hash/pecom_cass.xml
@@ -6,109 +6,109 @@
<software name="adresar">
<description>Adresar</description>
<year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="6382680">
- <rom name="adresar.wav" size="6382680" crc="e0032321" sha1="f6c9d19941175561c942c803aedc87d5c2dd1903" offset="0x0000" />
+ <rom name="adresar.wav" size="6382680" crc="e0032321" sha1="f6c9d19941175561c942c803aedc87d5c2dd1903" offset="0" />
</dataarea>
</part>
</software>
<software name="bioritam">
<description>Bioritam</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1985</year>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="5094680">
- <rom name="bioritam.wav" size="5094680" crc="9fead1c7" sha1="7ed80372fdd57cc68997acc3a7eb1e1628236dfe" offset="0x0000" />
+ <rom name="bioritam.wav" size="5094680" crc="9fead1c7" sha1="7ed80372fdd57cc68997acc3a7eb1e1628236dfe" offset="0" />
</dataarea>
</part>
</software>
<software name="lavirint">
<description>Lavirint</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1987</year>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="13222360">
- <rom name="lavirint.wav" size="13222360" crc="9f0aa1b4" sha1="854e9bbe45e42e09c7e57b561b311a98ff078661" offset="0x0000" />
+ <rom name="lavirint.wav" size="13222360" crc="9f0aa1b4" sha1="854e9bbe45e42e09c7e57b561b311a98ff078661" offset="0" />
</dataarea>
</part>
</software>
<software name="lopovbnk">
- <description>LopovIBankar</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Lopov i Bankar</description>
+ <year>1985</year>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="7996248">
- <rom name="lopov i bankar.wav" size="7996248" crc="e02b73bc" sha1="6b817af8638a94aa7f7c395467237adf3e226d12" offset="0x0000" />
+ <rom name="lopov i bankar.wav" size="7996248" crc="e02b73bc" sha1="6b817af8638a94aa7f7c395467237adf3e226d12" offset="0" />
</dataarea>
</part>
</software>
<software name="osvajaci">
- <description>OsvajaciSvemira</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Osvajaci Svemira</description>
+ <year>1985</year>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="19538520">
- <rom name="osvajaci svemira.wav" size="19538520" crc="a9000525" sha1="6758cac948d3fd1400e4f90dd9c1d281dfd42d0e" offset="0x0000" />
+ <rom name="osvajaci svemira.wav" size="19538520" crc="a9000525" sha1="6758cac948d3fd1400e4f90dd9c1d281dfd42d0e" offset="0" />
</dataarea>
</part>
</software>
<software name="pecomrat">
- <description>PecomRatuje</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pecom Ratuje</description>
+ <year>1985</year>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="7595800">
- <rom name="pecom ratuje.wav" size="7595800" crc="9837c657" sha1="d481df682df097de3e9b87f28d0be47939e87098" offset="0x0000" />
+ <rom name="pecom ratuje.wav" size="7595800" crc="9837c657" sha1="d481df682df097de3e9b87f28d0be47939e87098" offset="0" />
</dataarea>
</part>
</software>
<software name="kompozit">
- <description>SamSvojKompozitor</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Sam Svoj Kompozitor</description>
+ <year>1987</year>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="3567832">
- <rom name="sam svoj kompozitor.wav" size="3567832" crc="16a53a50" sha1="6ae2a28f0dfb8c6909240b28051c70149257847b" offset="0x0000" />
+ <rom name="sam svoj kompozitor.wav" size="3567832" crc="16a53a50" sha1="6ae2a28f0dfb8c6909240b28051c70149257847b" offset="0" />
</dataarea>
</part>
</software>
<software name="sljive">
<description>Sljive</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1986</year>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="7898072">
- <rom name="shljive.wav" size="7898072" crc="1c5d5a07" sha1="d63a217571ee0e5216708380844f028875533c4b" offset="0x0000" />
+ <rom name="shljive.wav" size="7898072" crc="1c5d5a07" sha1="d63a217571ee0e5216708380844f028875533c4b" offset="0" />
</dataarea>
</part>
</software>
<software name="suviajnc">
- <description>SuviAjnc</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Suvi Ajnc</description>
+ <year>1986</year>
+ <publisher>Ei Racunari</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="11266136">
- <rom name="suvi ajnc.wav" size="11266136" crc="c922dc59" sha1="8679f34599d6929ce969d3ff16c007358924bd80" offset="0x0000" />
+ <rom name="suvi ajnc.wav" size="11266136" crc="c922dc59" sha1="8679f34599d6929ce969d3ff16c007358924bd80" offset="0" />
</dataarea>
</part>
</software>
<software name="trkakonj">
- <description>TrkaKonja</description>
+ <description>Trka Konja</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass1" interface="pecom_cass">
<dataarea name="cass" size="6658904">
- <rom name="trka konja.wav" size="6658904" crc="f388087b" sha1="5dfc064b154a06409e2f57832318097756384ba3" offset="0x0000" />
+ <rom name="trka konja.wav" size="6658904" crc="f388087b" sha1="5dfc064b154a06409e2f57832318097756384ba3" offset="0" />
</dataarea>
</part>
</software>
diff --git a/hash/pegasus_cart.xml b/hash/pegasus_cart.xml
index 1ec677ca794..7ecc8e8e923 100644
--- a/hash/pegasus_cart.xml
+++ b/hash/pegasus_cart.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
-<softwarelist name="pegasus" description="Technosys Aamber Pegasus ROM expansions">
+<softwarelist name="pegasus_cart" description="Technosys Aamber Pegasus ROM expansions">
<software name="basic">
diff --git a/hash/pet_cass.xml b/hash/pet_cass.xml
index 8fce47a0149..0d9268ebab5 100644
--- a/hash/pet_cass.xml
+++ b/hash/pet_cass.xml
@@ -77,7 +77,7 @@
<publisher>Avalon Hill</publisher>
<part name="cass" interface="cbm_cass">
<dataarea name="cass" size="10001002">
- <rom name="Bomber Attack (1982)(avalon hill).wav" size="10001002" crc="4ff57e9c" sha1="b795a4d8c2f7891088ee6cf7147d785948d7b887" offset="0" />
+ <rom name="bomber attack (1982)(avalon hill).wav" size="10001002" crc="4ff57e9c" sha1="b795a4d8c2f7891088ee6cf7147d785948d7b887" offset="0" />
</dataarea>
</part>
</software>
diff --git a/hash/pokemini.xml b/hash/pokemini.xml
index 690f4371ea8..e8ae6775104 100644
--- a/hash/pokemini.xml
+++ b/hash/pokemini.xml
@@ -101,6 +101,17 @@
</software>
<software name="pokezcrd">
+ <description>Pok&#233;mon Zany Cards (Aus, Euro, USA)</description>
+ <year>2001</year>
+ <publisher>Nintendo</publisher>
+ <part name="cart" interface="pokemini_cart">
+ <dataarea name="rom" size="524288">
+ <rom name="cards_u.bin" size="524288" crc="8a2fc063" sha1="f34909ed7d1c1d432819ff774c0767ebfa42fb84" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pokezcrdf" cloneof="pokezcrd">
<description>Pok&#233;mon Zany Cards (Fra)</description>
<year>2001</year>
<publisher>Nintendo</publisher>
@@ -133,8 +144,19 @@
</part>
</software>
+ <software name="ppartyj" cloneof="pparty" supported="partial">
+ <description>Pok&#233;mon Party Mini (Jpn)</description>
+ <year>2001</year>
+ <publisher>Nintendo</publisher>
+ <part name="cart" interface="pokemini_cart">
+ <dataarea name="rom" size="524288">
+ <rom name="party_j.bin" size="524288" crc="ae2dde60" sha1="4db4568b990077c21320b50dee6a3ceb258809db" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="ppartyu" cloneof="pparty" supported="partial">
- <description>Pok&#233;mon Party Mini (USA)</description>
+ <description>Pok&#233;mon Party Mini (Aus, USA)</description>
<year>2001</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="pokemini_cart">
@@ -145,7 +167,7 @@
</software>
<software name="ppinb">
- <description>Pok&#233;mon Pinball Mini (USA)</description>
+ <description>Pok&#233;mon Pinball Mini (Aus, Euro, USA)</description>
<year>2001</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="pokemini_cart">
@@ -288,7 +310,7 @@
</software>
<software name="ppuzzlc" supported="partial">
- <description>Pok&#233;mon Puzzle Collection (USA)</description>
+ <description>Pok&#233;mon Puzzle Collection (Aus, Euro, USA)</description>
<year>2001</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="pokemini_cart">
@@ -298,13 +320,24 @@
</part>
</software>
- <software name="ppuzzlc2" supported="partial">
- <description>Pok&#233;mon Puzzle Collection Vol. 2 (Jpn)</description>
- <year>2002</year>
+ <software name="ppuzzlcp" cloneof="ppuzzlc" supported="partial">
+ <description>Pok&#233;mon Puzzle Collection (USA, GameCube Preview)</description>
+ <year>2001</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="pokemini_cart">
<dataarea name="rom" size="524288">
- <rom name="pokemon puzzle collection vol. 2 (japan).bin" size="524288" crc="76a1bbf8" sha1="11775bbac2e985ef90d4192ed6322dd3b8352ac9" offset="000000" />
+ <rom name="pokemon puzzle collection (usa) (gamecube preview).bin" size="524288" crc="6f8ae656" sha1="048bb1d30d6ff21be14dd123c52a375e12611238" offset="000000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ppuzzlcf" cloneof="ppuzzlc" supported="partial">
+ <description>Pok&#233;mon Puzzle Collection (Fra)</description>
+ <year>2001</year>
+ <publisher>Nintendo</publisher>
+ <part name="cart" interface="pokemini_cart">
+ <dataarea name="rom" size="524288">
+ <rom name="puzzle_f.bin" size="524288" crc="3004c354" sha1="5a2927770c1e2c7df3f8cc80c9252bb1111ca3a6" offset="000000" />
</dataarea>
</part>
</software>
@@ -364,13 +397,13 @@
</part>
</software>
- <software name="ppuzzlcp" cloneof="ppuzzlc" supported="partial">
- <description>Pok&#233;mon Puzzle Collection (USA, GameCube Preview)</description>
- <year>2001</year>
+ <software name="ppuzzlc2" supported="partial">
+ <description>Pok&#233;mon Puzzle Collection Vol. 2 (Jpn)</description>
+ <year>2002</year>
<publisher>Nintendo</publisher>
<part name="cart" interface="pokemini_cart">
<dataarea name="rom" size="524288">
- <rom name="pokemon puzzle collection (usa) (gamecube preview).bin" size="524288" crc="6f8ae656" sha1="048bb1d30d6ff21be14dd123c52a375e12611238" offset="000000" />
+ <rom name="pokemon puzzle collection vol. 2 (japan).bin" size="524288" crc="76a1bbf8" sha1="11775bbac2e985ef90d4192ed6322dd3b8352ac9" offset="000000" />
</dataarea>
</part>
</software>
diff --git a/hash/psion.xml b/hash/psion.xml
deleted file mode 100644
index 2a0167ce83c..00000000000
--- a/hash/psion.xml
+++ /dev/null
@@ -1,364 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
-
-<!--
-Info taken from: http://www.retroisle.com/others/psion/organiser2/software.php
-
-Undumped datapack:
- - Backup (Gene Code Software)
- - Banking(Psoftshare)
- - BanKmaN (Computer Solutions)
- - Calctime (Psoftshare)
- - Carfax (CLS Software)
- - ChrCodes (ZIP-Software)
- - Data Organiser (Harvester Information Systems Ltd)
- - Easy-Writer (Monad International Ltd)
- - Enigma (ZIP-Software)
- - Files (ZIP-Software)
- - Games Organiser (Harvester Information Systems Ltd)
- - Games 1 (Kirsta Products Ltd)
- - HB Games Pack (HB Consultants)
- - HB Games 2 (HB Consultants)
- - IFILES (EMF In Control)
- - Index Manager (EMF In Control)
- - Informed Organiser (Harvester Information Systems Ltd)
- - Justex (MHS)
- - Keyb3 (Gene Code Software)
- - KProg (Kirsta Products Ltd)
- - LACE (Beachcomber Software)
- - LACE II (Beachcomber Software)
- - Language Prakpak (Mackay Language Software)
- - Letter Organiser (Harvester Information Systems Ltd)
- - List (ZIP-Software)
- - Mfile
- - Music Prakpak (Mackay Language Software)
- - Notepad (Psoftshare)
- - ODBTran (Sycom Services)
- - Oxford Concise Spelling Checker Psion Ltd)
- - PEEK (ZIP-Software)
- - Portfolio
- - Pro Finance
- - Psion Assembler (Transform Ltd)
- - Pure Finance
- - Qbase (Gene Code Software)
- - Routewise (Titan Computers Ltd)
- - SAMS (Harvester Information Systems Ltd)
- - Sightmaster Navigation Program Waypoint Software)
- - Sums (ZIP-Software)
- - Thesaurus & Spelling Checker (Psion Ltd)
- - Utilities for Programmers
- - Watch (ZIP-Software)
- - XBase (Cubsoft|)
- - Xday (ZIP-Software)
- - XP-Booster (Mackay Language Software)
- - Yahtzee (Psoftshare)
-
--->
-
-<softwarelist name="psion" description="Psion Organiser II Datapack">
- <software name="abcode">
- <!-- Compatible series XP/LZ -->
- <description>Anteta Barcode Reader</description>
- <year>198?</year>
- <publisher>Anteta</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="31046">
- <rom name="abcode.opk" size="31046" crc="0ca68683" sha1="2599a7240f3d361a375e61e4d3d11e4ba2d63fef" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="airnav">
- <!-- Compatible series LZ -->
- <description>Airnav Professional 2c</description>
- <year>198?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="64978">
- <rom name="airnav.opk" size="64978" crc="e5e5b8b4" sha1="0a11ee4eb491962faacdac4dfe296a97475c0b6e" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="ascribe">
- <!-- Compatible series CM/XP/LZ -->
- <description>AutoScribe Plus</description>
- <year>1989</year>
- <publisher>Widget Software</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="16328">
- <rom name="ascribe.opk" size="16328" crc="62c9fda6" sha1="f49b48b82eed30e4dc862f1e7d256e94f3c80f24" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="assem">
- <!-- Compatible series XP/LZ -->
- <description>Assembler Pack 1.0</description>
- <year>1989</year>
- <publisher>AR Software</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="30276">
- <rom name="assem.opk" size="30276" crc="a3f863c7" sha1="505afa975ed0068c5cce0a004c924824f8004674" offset="0" />
- </dataarea>
- </part>
- </software>
-
-
- <software name="clink" supported="no">
- <!-- Internal software of Comms Link device -->
- <description>Comms Link</description>
- <year>1987</year>
- <publisher>Psion Ltd</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="32312">
- <rom name="commslink.opk" size="32312" crc="9d210b51" sha1="2307a773b30a95f3f09225821d619ff6cdd8ae7d" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="clip">
- <!-- Compatible series LZ -->
- <description>Clipboard Inspection System</description>
- <year>1991</year>
- <publisher>Rafiq Mahmood</publisher>
- <part name="cart1" interface="psion_pack">
- <dataarea name="rom" size="32270">
- <rom name="clip.opk" size="32270" crc="6c7afbdd" sha1="6505cb269ec5cc63cd57cc54b0b12181f155f9f3" offset="0" />
- </dataarea>
- </part>
- <part name="cart2" interface="psion_pack">
- <dataarea name="rom" size="16007">
- <rom name="notice.opk" size="16007" crc="e1a5d6e0" sha1="46e4f89ba13381e8684fe40194ea2ddaa4f8c924" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="coastal">
- <!-- Compatible series CM/XP/LZ -->
- <description>Coastal v4.2a</description>
- <year>198?</year>
- <publisher>Maritek Ltd</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="32659">
- <rom name="coastal.opk" size="32659" crc="380bf6a2" sha1="46fd072f43bf92afadf0bb3e0f7a5beef9c8443d" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="finance">
- <!-- Compatible series CM/XP/LZ -->
- <description>Finance</description>
- <year>198?</year>
- <publisher>Aware</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="16379">
- <rom name="finance.opk" size="16379" crc="1c34e46b" sha1="5ada96fe015abfc6712236c65d9e6644ac0826e7" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="finance2">
- <!-- Compatible series XP/LZ -->
- <description>Finance II</description>
- <year>198?</year>
- <publisher>Aware</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="32709">
- <rom name="finance2.opk" size="32709" crc="e9295ae2" sha1="e168479fd171777e63441d7dd63ec6a46914d678" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="finger">
- <!-- Compatible series CM/XP/LZ -->
- <description>Finger Organiser</description>
- <year>1988</year>
- <publisher>Harvester Information Systems</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="13890">
- <rom name="finger.opk" size="13890" crc="36785487" sha1="51a6abfcb68846425ae90e63ee228b39eba6ebb2" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="fish">
- <!-- Compatible series CM/XP/LZ -->
- <description>Fish</description>
- <year>198?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="9365">
- <rom name="fish.opk" size="9365" crc="92bc7d19" sha1="feaf62bc4349e91ac9c7beb6bd4a5e5cb548d520" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="fm">
- <!-- Compatible series CM/XP/LZ -->
- <description>FileMaster v3.76</description>
- <year>1988</year>
- <publisher>Widget Software</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="16201">
- <rom name="fm.opk" size="16201" crc="1c8cd832" sha1="6fe29328f19d3c36780a261c6df7e6cef5c291f8" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="fnkey">
- <!-- Compatible series LZ -->
- <description>FNkey v3.1</description>
- <year>1989</year>
- <publisher>Cubsoft</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="4333">
- <rom name="fnkey.opk" size="4333" crc="46c198dc" sha1="1f9a94216c738649f00b51e3e5d07a0487a1bff9" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="gpack">
- <!-- Compatible series LZ -->
- <description>Game Pack</description>
- <year>198?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="16559">
- <rom name="gpack.opk" size="16559" crc="508604b2" sha1="866639b6ae22011a40f47cbdfdee684790f073a0" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="inkas">
- <!-- Compatible series LZ/POS -->
- <description>Inkasencki v6.1</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="48983">
- <rom name="inkas.opk" size="48983" crc="fbade179" sha1="803c827124a59ff45ceaaf9f66b76b8ff08aba23" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="maths">
- <!-- Compatible series CM/XP/LZ -->
- <description>Maths</description>
- <year>198?</year>
- <publisher>Psion</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="16089">
- <rom name="maths.opk" size="16089" crc="8cce0583" sha1="9b847068e2f6af575b1ba760245007f436bdf1dd" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="paralink">
- <!-- Compatible series XP/LZ -->
- <description>ParaLink v2.0</description>
- <year>198?</year>
- <publisher>Silvertree</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="6062">
- <rom name="paralink.opk" size="6062" crc="75a3596d" sha1="43dfdd4b39d9da00ccb7aa74b66d610e90867b75" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="persfin">
- <!-- Compatible series XP/LZ -->
- <description>Personal Finance</description>
- <year>1987</year>
- <publisher>Willow Enterprises Limited</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="16179">
- <rom name="persfin.opk" size="16179" crc="2fb0f433" sha1="21bedf9bd3de307650c9b6cad3f11dc9094d0a92" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="result">
- <!-- Compatible series LZ -->
- <description>Result Vers 4L</description>
- <year>1989</year>
- <publisher>Terrace Software</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="16382">
- <rom name="result.opk" size="16382" crc="8a7cd79f" sha1="40a385ab126c4a6b5ee23ed2097da15ec73aceb1" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="ssheet">
- <!-- Compatible series XP/LZ -->
- <description>Spreadsheet</description>
- <year>1987</year>
- <publisher>Psion Ltd</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="32508">
- <rom name="ssheet.opk" size="32508" crc="6afc6dcc" sha1="b0b2059fd1c59ba7c7b55235745fd36186bdd5ca" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="topfin">
- <!-- Compatible series LZ -->
- <description>Top Finance v2.1f</description>
- <year>1988</year>
- <publisher>Aware</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="16338">
- <rom name="topfin.opk" size="16338" crc="480d3056" sha1="4d869fd7429465db78ceaa0f59ca5a447316474b" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="travel">
- <!-- Compatible series XP/LZ -->
- <description>Travel Pack 1.5</description>
- <year>1988</year>
- <publisher>Organized Solutions Ltd</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="65493">
- <rom name="travel.opk" size="65493" crc="38310574" sha1="5be0e7b121998c7d238fe8c639b732d0272d70ea" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="xform">
- <!-- Compatible series XP/LZ -->
- <description>Formulator</description>
- <year>198?</year>
- <publisher>Psion Ltd</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="32407">
- <rom name="xform.opk" size="32407" crc="cf3fd9c4" sha1="712ebace6fb711bd98ea7053105f3a072ffa695c" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="xforma">
- <!-- Compatible series XP/LZ -->
- <description>Formulator (Alt)</description>
- <year>198?</year>
- <publisher>Psion Ltd</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="32773">
- <rom name="xforma.opk" size="32773" crc="462ad96e" sha1="221235da3ecf22ac71a7ab248afc2d681ccd6d6d" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="xformtop">
- <!-- Compatible series XP/LZ -->
- <description>Formulator Top</description>
- <year>198?</year>
- <publisher>Psion Ltd</publisher>
- <part name="cart" interface="psion_pack">
- <dataarea name="rom" size="47862">
- <rom name="xformtop.opk" size="47862" crc="9e109d42" sha1="a91e9eb195ce865c38099cd56ceb29ec52323377" offset="0" />
- </dataarea>
- </part>
- </software>
-</softwarelist>
diff --git a/hash/psion1.xml b/hash/psion1.xml
new file mode 100644
index 00000000000..f0e6bfd1dab
--- /dev/null
+++ b/hash/psion1.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<softwarelist name="psion1" description="Psion Organiser I Datapack">
+ <software name="financep" supported="no">
+ <description>Finance Pack</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16390">
+ <rom name="finance.op1" size="16390" crc="5e4b1e5a" sha1="b2bf3f2a79597dfaed454d97bcc5ff2740b32b3c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="linkup" supported="no">
+ <description>Link Up Pack</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="4299">
+ <rom name="link-up.op1" size="4299" crc="f6cd6491" sha1="12ed6ab4e05fd068e91736826ec7473824fdc54a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mathspac" supported="no">
+ <description>Maths Pack</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16317">
+ <rom name="maths.op1" size="16317" crc="5dc289af" sha1="31c08efc37313e866b4876be4114a0ebe5fb7979" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sciencep" supported="no">
+ <description>Science Pack</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart1" interface="psion_pack">
+ <dataarea name="rom" size="16390">
+ <rom name="science1.op1" size="16390" crc="374728d0" sha1="55f1e1517640d694e05102d72dd01f2dcb852664" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cart2" interface="psion_pack">
+ <dataarea name="rom" size="16390">
+ <rom name="science2.op1" size="16390" crc="6f9a3006" sha1="0f33b5f413fc658dc5c33623845e8236374cea0f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="softpack" supported="no">
+ <description>Software Pack</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16390">
+ <rom name="software.op1" size="16390" crc="df02f390" sha1="aebfe3a74409b2c52b009d8d4f9d4c4d5732e222" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="utilityp" supported="no">
+ <description>Utility Pack</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart1" interface="psion_pack">
+ <dataarea name="rom" size="8198">
+ <rom name="utility1.op1" size="8198" crc="62460a38" sha1="ca299aebdafa5d80d6e6f838e0d4de5900db511d" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cart2" interface="psion_pack">
+ <dataarea name="rom" size="8105">
+ <rom name="utility2.op1" size="8105" crc="5fded4c4" sha1="65f44d0ce0885fbbb219b3cdc2f48269a997b4f5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="construc" supported="no">
+ <description>Construction Pack</description>
+ <year>198?</year>
+ <publisher>Wessex</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="15063">
+ <rom name="wessex.op1" size="15063" crc="44a1d7ef" sha1="3c5e0d103952aafd55c456692e9eaad1eb0f0ceb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="restaur" supported="no">
+ <description>Restaurant Guide </description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="11343">
+ <rom name="restguide.op1" size="11343" crc="7224f817" sha1="37d2548f18556bd2fbb7d592fe2a36811a1b1aaf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+</softwarelist>
diff --git a/hash/psion2.xml b/hash/psion2.xml
new file mode 100644
index 00000000000..894caa4907a
--- /dev/null
+++ b/hash/psion2.xml
@@ -0,0 +1,1014 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<!--
+Info taken from: http://www.retroisle.com/others/psion/organiser2/software.php
+
+Undumped datapack:
+ - Backup (Gene Code Software)
+ - Banking(Psoftshare)
+ - BanKmaN (Computer Solutions)
+ - Calctime (Psoftshare)
+ - Carfax (CLS Software)
+ - ChrCodes (ZIP-Software)
+ - Easy-Writer (Monad International Ltd)
+ - Enigma (ZIP-Software)
+ - Files (ZIP-Software)
+ - Games 1 (Kirsta Products Ltd)
+ - HB Games Pack (HB Consultants)
+ - HB Games 2 (HB Consultants)
+ - IFILES (EMF In Control)
+ - Index Manager (EMF In Control)
+ - Informed Organiser (Harvester Information Systems Ltd)
+ - Justex (MHS)
+ - Keyb3 (Gene Code Software)
+ - KProg (Kirsta Products Ltd)
+ - LACE (Beachcomber Software)
+ - LACE II (Beachcomber Software)
+ - Language Prakpak (Mackay Language Software)
+ - Letter Organiser (Harvester Information Systems Ltd)
+ - List (ZIP-Software)
+ - Mfile
+ - Music Prakpak (Mackay Language Software)
+ - Notepad (Psoftshare)
+ - ODBTran (Sycom Services)
+ - PEEK (ZIP-Software)
+ - Pro Finance
+ - Psion Assembler (Transform Ltd)
+ - Pure Finance
+ - Qbase (Gene Code Software)
+ - Routewise (Titan Computers Ltd)
+ - SAMS (Harvester Information Systems Ltd)
+ - Sightmaster Navigation Program (Waypoint Software)
+ - Sums (ZIP-Software)
+ - Utilities for Programmers
+ - Watch (ZIP-Software)
+ - Xday (ZIP-Software)
+ - XP-Booster (Mackay Language Software)
+ - Yahtzee (Psoftshare)
+
+-->
+
+<softwarelist name="psion2" description="Psion Organiser II Datapack">
+ <software name="abcode">
+ <description>Anteta Barcode Reader</description>
+ <year>198?</year>
+ <publisher>Anteta</publisher>
+ <sharedfeat name="compatibility" value="XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="31046">
+ <rom name="abcode.opk" size="31046" crc="0ca68683" sha1="2599a7240f3d361a375e61e4d3d11e4ba2d63fef" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="airnav">
+ <description>Airnav Professional 2c</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="64978">
+ <rom name="airnav.opk" size="64978" crc="e5e5b8b4" sha1="0a11ee4eb491962faacdac4dfe296a97475c0b6e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="anglerpa">
+ <description>Angler Pack</description>
+ <year>198?</year>
+ <publisher>Skyfact Software</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="9365">
+ <rom name="angler.opk" size="9365" crc="92bc7d19" sha1="feaf62bc4349e91ac9c7beb6bd4a5e5cb548d520" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ascribe4">
+ <description>AutoScribe Plus v4.11</description>
+ <year>1989</year>
+ <publisher>Widget Software</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16328">
+ <rom name="ascribe411.opk" size="16328" crc="62c9fda6" sha1="f49b48b82eed30e4dc862f1e7d256e94f3c80f24" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ascribe5">
+ <description>AutoScribe Plus v5.11</description>
+ <year>198?</year>
+ <publisher>Widget Software</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16026">
+ <rom name="ascribe511.opk" size="16026" crc="f15837ff" sha1="a23eba4ba8e94bdc3d3e3245cf13aad82093a03d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="assem">
+ <description>Assembler Pack v1.0</description>
+ <year>1989</year>
+ <publisher>A.R. Software</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="30276">
+ <rom name="assem.opk" size="30276" crc="a3f863c7" sha1="505afa975ed0068c5cce0a004c924824f8004674" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bcprinte">
+ <description>Barcode Printer I v1.42</description>
+ <year>198?</year>
+ <publisher>Gaascom Ltd.</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16389">
+ <rom name="barcodeprinter.opk" size="16389" crc="9db80aad" sha1="2b39f10c9d09d3b473c816e434929893bffe8b62" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clip">
+ <description>Clipboard Inspection System</description>
+ <year>1991</year>
+ <publisher>Rafiq Mahmood</publisher>
+ <sharedfeat name="compatibility" value="LZ"/>
+ <part name="cart1" interface="psion_pack">
+ <dataarea name="rom" size="32270">
+ <rom name="clip.opk" size="32270" crc="6c7afbdd" sha1="6505cb269ec5cc63cd57cc54b0b12181f155f9f3" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cart2" interface="psion_pack">
+ <dataarea name="rom" size="16007">
+ <rom name="notice.opk" size="16007" crc="e1a5d6e0" sha1="46e4f89ba13381e8684fe40194ea2ddaa4f8c924" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="coastal">
+ <description>Coastal v4.2a</description>
+ <year>198?</year>
+ <publisher>Maritek Ltd</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32659">
+ <rom name="coastal.opk" size="32659" crc="380bf6a2" sha1="46fd072f43bf92afadf0bb3e0f7a5beef9c8443d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dataorg">
+ <description>The Data Organiser v2.4</description>
+ <year>198?</year>
+ <publisher>Harvester Information Systems</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16254">
+ <rom name="dataorg24.opk" size="16254" crc="c1718598" sha1="f18ee33dcdeb7ccb1d3d80ef9c4bd6c806476ff9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ferreth">
+ <description>Ferret Helper v5.1N</description>
+ <year>198?</year>
+ <publisher>Ferret Information Systems</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16357">
+ <rom name="ferret51n.opk" size="16357" crc="0c374de4" sha1="604308fbaeadc8f4bc0b6d79de1ac9e03bd7bfab" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fm375">
+ <description>FileMaster v3.75</description>
+ <year>1988</year>
+ <publisher>Widget Software</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16335">
+ <rom name="filemaster375.opk" size="16335" crc="810554d7" sha1="505c7a52dc9f4563908532706d2b0e8122d59ce5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fm376">
+ <description>FileMaster v3.76</description>
+ <year>1988</year>
+ <publisher>Widget Software</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16201">
+ <rom name="filemaster376.opk" size="16201" crc="1c8cd832" sha1="6fe29328f19d3c36780a261c6df7e6cef5c291f8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fm3762">
+ <description>FileMaster v3.762</description>
+ <year>1988</year>
+ <publisher>Widget Software</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16194">
+ <rom name="filemaster3762.opk" size="16194" crc="f626ed8a" sha1="08d70630ecf3b0160ee7a5c509bece1e1cc5bc39" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="finance">
+ <description>Finance Pack</description>
+ <year>198?</year>
+ <publisher>Aware</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart1" interface="psion_pack">
+ <dataarea name="rom" size="16379">
+ <rom name="finance1b.opk" size="16379" crc="1c34e46b" sha1="5ada96fe015abfc6712236c65d9e6644ac0826e7" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cart2" interface="psion_pack">
+ <dataarea name="rom" size="16359">
+ <rom name="finance1a.opk" size="16359" crc="33cca342" sha1="89d90fbeb27c30dae069db392cc06fd914dc2652" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="finance2">
+ <description>Finance Pack II</description>
+ <year>198?</year>
+ <publisher>Aware</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32709">
+ <rom name="finance2.opk" size="32709" crc="e9295ae2" sha1="e168479fd171777e63441d7dd63ec6a46914d678" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="finger13">
+ <description>Finger Organiser v1.3</description>
+ <year>198?</year>
+ <publisher>Harvester Information Systems</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="13753">
+ <rom name="finger13.opk" size="13753" crc="84d9d158" sha1="9dcc8f2abfa9808e151686d5342dbfb0115167f4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="finger14">
+ <description>Finger Organiser v1.4</description>
+ <year>198?</year>
+ <publisher>Harvester Information Systems</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="13890">
+ <rom name="finger14.opk" size="13890" crc="36785487" sha1="51a6abfcb68846425ae90e63ee228b39eba6ebb2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="flightma">
+ <description>Flightmaster v2.19</description>
+ <year>1993</year>
+ <publisher>Software 2000, Inc.</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart1" interface="psion_pack">
+ <dataarea name="rom" size="130236">
+ <rom name="flightmastr1.opk" size="130236" crc="47ad1343" sha1="f228c64bf9fc5a849f38fd52bc24f22f94c0c9b3" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cart2" interface="psion_pack">
+ <dataarea name="rom" size="130806">
+ <rom name="flightmastr2.opk" size="130806" crc="a8dbcfd4" sha1="36826de1fcc552b4698ee6a10d06a269fc1f8977" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fnkey31">
+ <description>FnKey v3.1</description>
+ <year>1989</year>
+ <publisher>Cubsoft</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="4333">
+ <rom name="fnkey31.opk" size="4333" crc="46c198dc" sha1="1f9a94216c738649f00b51e3e5d07a0487a1bff9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fnkey40">
+ <description>FnKey v4.0</description>
+ <year>1989</year>
+ <publisher>Cubsoft</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="6822">
+ <rom name="fnkey40.opk" size="6822" crc="39ca0011" sha1="6a40cdb13c895ff5ac8e37894389b99a2bfbc4fe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="formmast">
+ <description>Form Master</description>
+ <year>198?</year>
+ <publisher>Cascade Systems Ltd.</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16234">
+ <rom name="formmaster.opk" size="16234" crc="9e457b90" sha1="04d1f60543faeec8d4aa7fd7134ed3a636c954c8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="formul11">
+ <description>Formulator v1.1</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="31604">
+ <rom name="xform1.opk" size="31604" crc="5a690ead" sha1="c226ade8e78bbbcccadfb4cf5007107f1ffe06d2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="formul21">
+ <description>Formulator v2.1</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32407">
+ <rom name="xform2.opk" size="32407" crc="cf3fd9c4" sha1="712ebace6fb711bd98ea7053105f3a072ffa695c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gamesorg">
+ <description>Games Organiser v0.2</description>
+ <year>198?</year>
+ <publisher>Harvester Information Systems</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32770">
+ <rom name="harvgames.opk" size="32770" crc="7120b260" sha1="5e707aacb669960406ece6d1d304c1e1009502c0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gpack">
+ <description>Games Pack</description>
+ <year>198?</year>
+ <publisher>S.I.S. Ltd, Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32633">
+ <rom name="games.opk" size="32633" crc="1e31b975" sha1="66cd712eb36ce145b465a32f5c256a315452a31c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gpackma">
+ <description>Games Pack (Mick Andon)</description>
+ <year>198?</year>
+ <publisher>Mick Andon</publisher>
+ <sharedfeat name="compatibility" value="LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16559">
+ <rom name="gpack.opk" size="16559" crc="508604b2" sha1="866639b6ae22011a40f47cbdfdee684790f073a0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="superc">
+ <description>Harvester Superchip v1.2</description>
+ <year>198?</year>
+ <publisher>Harvester Information Systems</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="31521">
+ <rom name="harvsup12.opk" size="31521" crc="51fe98ea" sha1="9579f63e3f2991ceeb1933645a038620eee62361" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="inkas">
+ <description>Inkasencki v6.1</description>
+ <year>199?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <sharedfeat name="compatibility" value="LZ/POS"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="48983">
+ <rom name="inkas.opk" size="48983" crc="fbade179" sha1="803c827124a59ff45ceaaf9f66b76b8ff08aba23" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jotter25">
+ <description>Jotter v2.5</description>
+ <year>198?</year>
+ <publisher>Camel Systems Ltd</publisher>
+ <sharedfeat name="compatibility" value="XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32749">
+ <rom name="jotter25.opk" size="32749" crc="4129ad0a" sha1="8f602c2fb1d84c9315e204098f4a32af5a759cb5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="maths">
+ <description>Maths Pack</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16089">
+ <rom name="maths.opk" size="16089" crc="8cce0583" sha1="9b847068e2f6af575b1ba760245007f436bdf1dd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="persfin">
+ <description>Personal Finance</description>
+ <year>1987</year>
+ <publisher>Willow Enterprises Ltd</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16179">
+ <rom name="persfin.opk" size="16179" crc="2fb0f433" sha1="21bedf9bd3de307650c9b6cad3f11dc9094d0a92" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="portfoli">
+ <description>Portfolio Pack</description>
+ <year>198?</year>
+ <publisher>DIP, Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16361">
+ <rom name="portfolio.opk" size="16361" crc="d2836be1" sha1="ca207dedec6f14c0c32ed1092ef13bdb60431ad4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="result">
+ <description>Result Vers 4L</description>
+ <year>1989</year>
+ <publisher>Terrace Software</publisher>
+ <sharedfeat name="compatibility" value="LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16382">
+ <rom name="result.opk" size="16382" crc="8a7cd79f" sha1="40a385ab126c4a6b5ee23ed2097da15ec73aceb1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sdrp">
+ <description>SDRP 01.05</description>
+ <year>198?</year>
+ <publisher>Datacom Group Ltd.</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="52878">
+ <rom name="sdrp.opk" size="52878" crc="550d0a7e" sha1="53669d69ec7aada6ea73f86697cd2eca6ed98a90" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cosc">
+ <description>Concise Oxford Spelling Checker</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="65537">
+ <rom name="spllchk.opk" size="65537" crc="39348a17" sha1="ba85c07037bcc84774d00c58811d664af5b0338b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ssheet12">
+ <description>Spreadsheet v1.2</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="29806">
+ <rom name="sprdsht_v12.opk" size="29806" crc="3eaf213f" sha1="b0cbc97cc42a98738b3fcc3ea7af79415234d041" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ssheet13">
+ <description>Spreadsheet v1.3</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="30385">
+ <rom name="sprdsht_v13.opk" size="30385" crc="435e34ab" sha1="10e2c95d668e2b27c9a9326a54fc0adc7010e954" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ssheet34">
+ <description>Spreadsheet v3.4</description>
+ <year>1987</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32508">
+ <rom name="sprdsht_v34.opk" size="32508" crc="6afc6dcc" sha1="b0b2059fd1c59ba7c7b55235745fd36186bdd5ca" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tsc" supported="no">
+ <description>Thesaurus and Spelling Checker</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="262150">
+ <rom name="thesaurus.opk" size="262150" crc="b24ca0af" sha1="31ba8482e5a0c17e2fe83341f393668c0bdcae0f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="topfin">
+ <description>Top Finance 2.1f</description>
+ <year>1988</year>
+ <publisher>Aware</publisher>
+ <sharedfeat name="compatibility" value="LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16338">
+ <rom name="topfinance.opk" size="16338" crc="480d3056" sha1="4d869fd7429465db78ceaa0f59ca5a447316474b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="travel12">
+ <description>Travel Pack v1.2</description>
+ <year>1988</year>
+ <publisher>Organised Solutions Ltd, Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="65458">
+ <rom name="travel12.opk" size="65458" crc="03946bc2" sha1="49be125001d557ea654aabd2dabab5c4f71f626f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="travel15">
+ <description>Travel Pack v1.5</description>
+ <year>1988</year>
+ <publisher>Organised Solutions Ltd, Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="65493">
+ <rom name="travel15.opk" size="65493" crc="38310574" sha1="5be0e7b121998c7d238fe8c639b732d0272d70ea" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="travel20">
+ <description>Travel Pack v2.0</description>
+ <year>198?</year>
+ <publisher>Organised Solutions Ltd, Psion</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="65535">
+ <rom name="travel20.opk" size="65535" crc="2f00fb63" sha1="ec1898eb489ba01c137d712d9dd604f4da699124" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="xbase20">
+ <description>XBase v2.0</description>
+ <year>198?</year>
+ <publisher>Cubsoft</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16350">
+ <rom name="xbase.opk" size="16350" crc="faecaac5" sha1="6bcc4d0fed68fdac3c628ab5858c6a81da7627a7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="xbase30">
+ <description>XBase v3.0</description>
+ <year>198?</year>
+ <publisher>Cubsoft</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16350">
+ <rom name="xbase3.opk" size="16336" crc="4a97fe68" sha1="a1dde293b421ffbb248459e2af465fdbdba7f2bb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="xforma">
+ <description>Formulator (Alt)</description>
+ <year>198?</year>
+ <publisher>Psion Ltd</publisher>
+ <sharedfeat name="compatibility" value="XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32773">
+ <rom name="xforma.opk" size="32773" crc="462ad96e" sha1="221235da3ecf22ac71a7ab248afc2d681ccd6d6d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="xformtop">
+ <description>Formulator Top</description>
+ <year>198?</year>
+ <publisher>Psion Ltd</publisher>
+ <sharedfeat name="compatibility" value="XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="47862">
+ <rom name="xformtop.opk" size="47862" crc="9e109d42" sha1="a91e9eb195ce865c38099cd56ceb29ec52323377" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="diallink">
+ <!-- Software to control the Dial-Link dialler device (which does not have built-in ROM software). -->
+ <description>Dial-Link</description>
+ <year>198?</year>
+ <publisher>Widget Software</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16275">
+ <rom name="diallink.opk" size="16275" crc="e435edd2" sha1="394e343881b669d8764304706d788df4fd029632" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="digit110">
+ <!-- Software to control the Digitron SF10 Logger device (which does not have built-in ROM software) and for logging its readings. -->
+ <description>Digitron SF10 v1.10</description>
+ <year>198?</year>
+ <publisher>Silvertree Eng., Digitron Inst.</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="29134">
+ <rom name="digitron110.opk" size="29134" crc="37d2dcee" sha1="05a17b8fdd0206fe1dd4e496aed1a973b9591402" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="digit114">
+ <!-- Software to control the Digitron SF10 Logger device (which does not have built-in ROM software) and for logging its readings. -->
+ <description>Digitron SF10 v1.14</description>
+ <year>198?</year>
+ <publisher>Silvertree Eng., Digitron Inst.</publisher>
+ <sharedfeat name="compatibility" value="CM/XP"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="29326">
+ <rom name="digitron114.opk" size="29326" crc="a838a41c" sha1="22b2e76828dafcdf8caab7c651f7078e730f1a39" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fpakdriv">
+ <!-- A datapak with the flashpak driver, which can be used to reformat a flashpak in the other slot. -->
+ <description>FlashPak Driver v1.9</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <sharedfeat name="compatibility" value="XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="7135">
+ <rom name="flashpak.opk" size="7135" crc="1138998a" sha1="954a60febab3c86233e2d62ddf42d6e4940eb858" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="msp100">
+ <!-- Software to control the KDG Mobrey Smart device (which does not have built-in ROM software) and use that to communicate with their MSP100 ultrasonic liquid level transmitter. -->
+ <description>KDG Mobrey MSP100 v1.0</description>
+ <year>198?</year>
+ <publisher>KDG Mobrey</publisher>
+ <sharedfeat name="compatibility" value="LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="54730">
+ <rom name="msp100.opk" size="54730" crc="62bac741" sha1="c6af1491665adf744142ad354b6f52b1dcfde813" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="onewayin">
+ <!-- The device does not have built-in software, but needs a separate pack containing the software. -->
+ <!-- This file contains the software that should be installed on a pack using the Organiser Developer kit. -->
+ <description>One-Way Interface</description>
+ <year>198?</year>
+ <publisher>On-Line Design Inc</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="2430">
+ <rom name="owi.bin" size="2430" crc="958509a9" sha1="934a729911d070c7de106684c354eebf16ee78ae" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="psitex20">
+ <!-- Software used for programming the Microtima Series 4 Year -->
+ <!-- Programmable Controller which is connected through the Comms Link. -->
+ <description>PsiTex v2.000</description>
+ <year>198?</year>
+ <publisher>Microtima</publisher>
+ <sharedfeat name="compatibility" value="LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16238">
+ <rom name="psitex200.opk" size="16238" crc="cce04194" sha1="f6498b365ddff6e0df07b7286a69d1e78f4a2f4d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sigset20">
+ <!-- Software used for programming type 141 Traffic Light Controllers -->
+ <!-- which are connected through the Comms Link. -->
+ <description>SigSet v2.01</description>
+ <year>198?</year>
+ <publisher>Microtima</publisher>
+ <sharedfeat name="compatibility" value="LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="8248">
+ <rom name="sigset201.opk" size="8248" crc="8696fb8a" sha1="ada45c41b083b68c1823da0a951b7a8a593d1648" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sonylisa">
+ <!-- Software to control the Sony Lisa-1 device (which does not have built-in ROM software). -->
+ <!-- This pack image is for use with TR45E and TR75E camcorders. -->
+ <description>Sony Lisa-1 v3.0</description>
+ <year>198?</year>
+ <publisher>Sony</publisher>
+ <sharedfeat name="compatibility" value="CM/XP/LZ"/>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16521">
+ <rom name="sony_lisa1.opk" size="16521" crc="417a9b34" sha1="b2747bcf6be33f0c27f263dbbdfe2512e68e1810" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+
+
+ <!-- Devices -->
+
+ <software name="rs232l11" supported="no">
+ <!-- Early version of Comms Link. Has no Psion protocol. -->
+ <description>RS232 Link 1.1</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="8137">
+ <rom name="comms11.opk" size="8137" crc="48c1564b" sha1="2c81bc1174290ed825945508f5ff4f62505831d6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rs232l15" supported="no">
+ <description>RS232 Link 1.5</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="7736">
+ <rom name="comms15.opk" size="7736" crc="b11cd524" sha1="b7d09c946c45915f854ac79cab24f652914ebd68" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clink24" supported="no">
+ <description>Comms Link 2.4</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="22515">
+ <rom name="comms24.opk" size="22515" crc="3a42d92f" sha1="b7603f07f5479b1939e0486d819e1552a0e7dcac" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clink25" supported="no">
+ <description>Comms Link 2.5</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="22510">
+ <rom name="comms25.opk" size="22510" crc="5c985379" sha1="dd4e5d17b83883cac75c5220dad0c51ddb6ba1c1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clink30" supported="no">
+ <description>Comms Link 3.0</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="25112">
+ <rom name="comms30.opk" size="25112" crc="58770787" sha1="129ec0fd2642bdef02a92e8432825f650cfacfbd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clink40" supported="no">
+ <description>Comms Link 4.0</description>
+ <year>1987</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32312">
+ <rom name="comms40.opk" size="32312" crc="9d210b51" sha1="2307a773b30a95f3f09225821d619ff6cdd8ae7d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clink41" supported="no">
+ <description>Comms Link 4.1</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32403">
+ <rom name="comms41.opk" size="32403" crc="dfb1dc85" sha1="4f0a6dd1cdeb4d3ed0d8e84017e2d73ac7f5e0c2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clink42" supported="no">
+ <description>Comms Link 4.2</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="32411">
+ <rom name="comms42.opk" size="32411" crc="9d7aa280" sha1="2d31f4c48f222ffa67fafe5689cc19d8187eafed" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ecp2" supported="no">
+ <!-- The Extech Comms Printer II contains Comms Link version 4.3 together with software for the Bar Code Reader, Magnetic Card reader, and its printer. -->
+ <description>Extech Comms Printer II 4.3</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="46397">
+ <rom name="extprt43.opk" size="46397" crc="443d0905" sha1="10a3576786f5ac65082b2856bc1578373f30d6fc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dynapen" supported="no">
+ <!-- The Dynapen contains Comms Link version 4.4 together with Bar Code Reader menu item and utilities. -->
+ <description>Dynapen 4.4</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="55408">
+ <rom name="dynapen.opk" size="55408" crc="fecb74ce" sha1="452c3776029475d025d9f7cfd562e3c5f24fe310" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pprint16" supported="no">
+ <description>Psion Printer 1.6</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="4550">
+ <rom name="printer16.opk" size="4550" crc="cb3c7bff" sha1="b3d3ef91ce07584504a5ddc92503e2bc291c8832" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pprint21" supported="no">
+ <description>Psion Printer 2.1</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="4913">
+ <rom name="printer21.opk" size="4913" crc="701f489e" sha1="784d07d2ad525bed5dc9511bd1716029cc91f1fc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pprint22" supported="no">
+ <description>Psion Printer 2.2</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="4945">
+ <rom name="printer22.opk" size="4945" crc="d12a5b5d" sha1="18b2b5e7d84c8dbe7fe96c9c046e8239af65b9e6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mcr20" supported="no">
+ <description>Magnetic Card Reader 2.0</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="748">
+ <rom name="swipe20.opk" size="748" crc="a7d1d051" sha1="325ac98d9330bb68d23d72610899c9176998a26b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bcread31" supported="no">
+ <description>Bad Code Reader 3.1</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="11263">
+ <rom name="bar31.opk" size="11263" crc="3951726d" sha1="4ae19527dee89dc2909e716d1dbff40f17a1f361" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bcread32" supported="no">
+ <description>Bad Code Reader 3.2</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="11375">
+ <rom name="bar32.opk" size="11375" crc="d5c7079c" sha1="a04eeafcc3125131d18a0063b7db56e7a59f5108" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pager13" supported="no">
+ <description>Pager 1.3</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="15226">
+ <rom name="pager13.opk" size="15226" crc="05045d72" sha1="4ccc8d32d34e65ec0bc3b0f50cda9b1146d1b6af" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="plink20" supported="no">
+ <description>Paralink 2.0</description>
+ <year>198?</year>
+ <publisher>Silvertree Engineering Ltd.</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="6062">
+ <rom name="paralink20.opk" size="6062" crc="75a3596d" sha1="43dfdd4b39d9da00ccb7aa74b66d610e90867b75" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="plink33" supported="no">
+ <description>Paralink 3.3</description>
+ <year>198?</year>
+ <publisher>Silvertree Engineering Ltd.</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16352">
+ <rom name="paralink33.opk" size="16352" crc="b672445b" sha1="b3b49dd46fa6b0753d8aa5df4e447c263dbb58f5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="plink34" supported="no">
+ <description>Paralink 3.4</description>
+ <year>198?</year>
+ <publisher>Silvertree Engineering Ltd.</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="16352">
+ <rom name="paralink34.opk" size="16352" crc="3a22f0ae" sha1="e55cf03aed678da812096a926e70355f26ea2229" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="andoverc" supported="no">
+ <description>Andover Controls Hand-Held Operator's Terminal</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="12959">
+ <rom name="andover.opk" size="12959" crc="dee5a895" sha1="a2fe553b3d0d5dc38ec5efb393e665676223b3dd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cnf41hi" supported="no">
+ <description>CNF41 HART interface 1.0</description>
+ <year>198?</year>
+ <publisher>Psion</publisher>
+ <part name="cart" interface="psion_pack">
+ <dataarea name="rom" size="60686">
+ <rom name="cnf41_10.opk" size="60686" crc="720be551" sha1="74b7162acbada7f35a77010c201cf5506d909aae" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/radio86_cass.xml b/hash/radio86_cass.xml
index 00a1a28510d..e6bd9cffad6 100644
--- a/hash/radio86_cass.xml
+++ b/hash/radio86_cass.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
-<softwarelist name="radio86" description="Radio-86RK cassettes">
+<softwarelist name="radio86_cass" description="Radio-86RK cassettes">
<!-- GAMES -->
diff --git a/hash/snes.xml b/hash/snes.xml
index 61d94cdec84..b02227f2749 100644
--- a/hash/snes.xml
+++ b/hash/snes.xml
@@ -428,33 +428,6 @@ Beyond that last category are the roms waiting to be classified.
</part>
</software>
- <software name="ggoemon3rb" cloneof="ggoemon3">
- <description>Ganbare Goemon 3 - Shishi Juurokubee no Karakuri Manjigatame (Jpn, Rev. B)</description>
- <year>1994</year>
- <publisher>Konami</publisher>
- <info name="serial" value="SHVC-2U" />
- <info name="release" value="19941216" />
- <info name="alt_title" value="ãŒã‚“ã°ã‚Œã‚´ã‚¨ãƒ¢ãƒ³3 ç…å­é‡ç¦„兵衛ã®ã‹ã‚‰ãã‚Šå固ã‚" />
- <sharedfeat name="compatibility" value="NTSC"/>
- <part name="cart" interface="snes_cart">
- <feature name="pcb" value="SHVC-1A3M-30" />
- <feature name="u1" value="U1 MASK ROM(N)" />
- <feature name="u2" value="U2 64K SRAM" />
- <feature name="u3" value="U3 MAD-1" />
- <feature name="u4" value="U4 CIC" />
- <feature name="lockout" value="" />
- <feature name="battery" value="BATT CR2032" />
- <feature name="cart_revision" value="B" />
- <feature name="cart_model" value="SHVC-006" />
- <feature name="cart_back_label" value="920214" />
- <dataarea name="rom" size="2097152">
- <rom name="shvc-2u-2.u1" size="2097152" crc="af984bc1" offset="0x000000" />
- </dataarea>
- <dataarea name="nvram" size="8192">
- </dataarea>
- </part>
- </software>
-
<software name="shinkoukra" cloneof="shinkouk">
<description>Shinchou Kouki (Jpn, Rev. A)</description>
<year>1993</year>
@@ -15249,7 +15222,7 @@ more investigation needed...
</part>
</software>
- <software name="powyak2a" cloneof="powyak2">
+ <software name="powyak2b" cloneof="powyak2">
<description>Jikkyou Powerful Pro Yakyuu 2 (Jpn)</description>
<year>1995</year>
<publisher>Konami</publisher>
@@ -17348,7 +17321,7 @@ more investigation needed...
</part>
</software>
- <software name="mjtaika2">
+ <software name="mjtaika2a" cloneof="mjtaika2">
<description>Mahjong Taikai II (Jpn)</description>
<year>1994</year>
<publisher>Koei</publisher>
@@ -26411,7 +26384,7 @@ more investigation needed...
</part>
</software>
- <software name="supermjtc" cloneof="supermjt">
+ <software name="supermjtd" cloneof="supermjt">
<description>Super Mahjong Taikai (Jpn)</description>
<year>1992</year>
<publisher>Koei</publisher>
@@ -26437,7 +26410,7 @@ more investigation needed...
</part>
</software>
- <software name="supermjtb" cloneof="supermjt">
+ <software name="supermjtc" cloneof="supermjt">
<description>Super Mahjong Taikai (Jpn, Rev. A)</description>
<year>1992</year>
<publisher>Koei</publisher>
@@ -32492,7 +32465,7 @@ Alternate board (XL-1)
</part>
</software>
- <software name="powyak2">
+ <software name="powyak2a" cloneof="powyak2">
<!-- single cartridge source: Yakushi~Kabuto -->
<description>Jikkyou Powerful Pro Yakyuu 2 (Jpn, Rev. A)</description>
<year>1995</year>
@@ -33158,7 +33131,7 @@ Alternate board (XL-1)
</part>
</software>
- <software name="supermjt">
+ <software name="supermjta" cloneof="supermjt">
<!-- single cartridge source: Yakushi~Kabuto -->
<description>Super Mahjong Taikai (Jpn, Rev. D)</description>
<year>1992</year>
@@ -35697,6 +35670,20 @@ List of unclassified roms
</part>
</software>
+<!-- Prototype for the European version of Jim Power -->
+ <software name="buckrog" cloneof="jimpower">
+ <description>Buck Rogers - The Arcade Game (Euro, Prototype)</description>
+ <year>1993</year>
+ <publisher>Electro Brain</publisher>
+ <sharedfeat name="compatibility" value="PAL"/>
+ <part name="cart" interface="snes_cart">
+ <feature name="slot" value="lorom" />
+ <dataarea name="rom" size="1048576">
+ <rom name="buck rogers - the arcade game (beta jim power).sfc" size="1048576" crc="d75f5abb" sha1="9d8b0fcf803fb6d0d60cbc84573a45e08c38f777" offset="0x000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="bullvsbl">
<description>Bulls vs Blazers and the NBA Playoffs (Euro, Rev. A)</description>
<year>1992</year>
@@ -40045,7 +40032,7 @@ List of unclassified roms
</part>
</software>
- <software name="ggoemon3">
+ <software name="ggoemon3a" cloneof="ggoemon3">
<description>Ganbare Goemon 3 - Shishi Juurokubee no Karakuri Manjigatame (Jpn)</description>
<year>1994</year>
<publisher>Konami</publisher>
@@ -40063,6 +40050,33 @@ List of unclassified roms
</part>
</software>
+ <software name="ggoemon3">
+ <description>Ganbare Goemon 3 - Shishi Juurokubee no Karakuri Manjigatame (Jpn, Rev. B)</description>
+ <year>1994</year>
+ <publisher>Konami</publisher>
+ <info name="serial" value="SHVC-2U" />
+ <info name="release" value="19941216" />
+ <info name="alt_title" value="ãŒã‚“ã°ã‚Œã‚´ã‚¨ãƒ¢ãƒ³3 ç…å­é‡ç¦„兵衛ã®ã‹ã‚‰ãã‚Šå固ã‚" />
+ <sharedfeat name="compatibility" value="NTSC"/>
+ <part name="cart" interface="snes_cart">
+ <feature name="pcb" value="SHVC-1A3M-30" />
+ <feature name="u1" value="U1 MASK ROM(N)" />
+ <feature name="u2" value="U2 64K SRAM" />
+ <feature name="u3" value="U3 MAD-1" />
+ <feature name="u4" value="U4 CIC" />
+ <feature name="lockout" value="" />
+ <feature name="battery" value="BATT CR2032" />
+ <feature name="cart_revision" value="B" />
+ <feature name="cart_model" value="SHVC-006" />
+ <feature name="cart_back_label" value="920214" />
+ <dataarea name="rom" size="2097152">
+ <rom name="shvc-2u-2.u1" size="2097152" crc="af984bc1" sha1="2732b810694880f9a388657ffb4cfb79d7d3ea7c" offset="0x000000" />
+ </dataarea>
+ <dataarea name="nvram" size="8192">
+ </dataarea>
+ </part>
+ </software>
+
<software name="ggoemkir">
<description>Ganbare Goemon Kirakira Douchuu - Boku ga Dancer ni Natta Wake (Jpn, Rev. B, NP)</description>
<year>1995</year>
@@ -43057,6 +43071,24 @@ List of unclassified roms
</part>
</software>
+ <software name="powyak2">
+ <description>Jikkyou Powerful Pro Yakyuu 2 (Jpn, Rev. B)</description>
+ <year>1995</year>
+ <publisher>Konami</publisher>
+ <info name="serial" value="SHVC-AP2J-JPN" />
+ <info name="release" value="19950224" />
+ <info name="alt_title" value="実æ³ãƒ‘ワフルプロ野çƒ2" />
+ <sharedfeat name="compatibility" value="NTSC"/>
+ <part name="cart" interface="snes_cart">
+ <feature name="slot" value="lorom" />
+ <dataarea name="rom" size="2621440">
+ <rom name="pawafurupuroyakyu.29b03.sfc" size="2621440" crc="855e3deb" sha1="508b86da019645e787a87ead558b7f8c24864f68" offset="0x000000" />
+ </dataarea>
+ <dataarea name="nvram" size="8192">
+ </dataarea>
+ </part>
+ </software>
+
<software name="powyk397">
<description>Jikkyou Powerful Pro Yakyuu 3 - '97 Haru (Jpn, Rev. A)</description>
<year>1997</year>
@@ -46106,6 +46138,21 @@ List of unclassified roms
</part>
</software>
+ <software name="magdrop2bh" cloneof="magdrop2">
+ <description>Magical Drop 2 (Jpn, Bunka Housou Special Version)</description>
+ <year>1996</year>
+ <publisher>Data East</publisher>
+ <info name="serial" value="SHVC-AOQJ-JPN" />
+ <info name="release" value="19960920" />
+ <info name="alt_title" value="マジカルドロップ2" />
+ <part name="cart" interface="snes_cart">
+ <feature name="slot" value="hirom" />
+ <dataarea name="rom" size="2097152">
+ <rom name="magicaldrop2bunka.b9ee.sfc" size="2097152" crc="569a1cec" sha1="2602129615be0b06e9e4e431ab7f987a41c87b2b" offset="0x000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="magpopn">
<description>Magical Pop'n (Jpn)</description>
<year>1995</year>
@@ -46267,6 +46314,23 @@ List of unclassified roms
</part>
</software>
+ <software name="mjtaika2">
+ <description>Mahjong Taikai II (Jpn, Rev. A)</description>
+ <year>1994</year>
+ <publisher>Koei</publisher>
+ <info name="serial" value="SHVC-AIQJ-JPN" />
+ <info name="release" value="19940930" />
+ <info name="alt_title" value="麻雀大会II" />
+ <part name="cart" interface="snes_cart">
+ <feature name="slot" value="lorom" />
+ <dataarea name="rom" size="1048576">
+ <rom name="mahjongtaikai2.758b.sfc" size="1048576" crc="5695cc12" sha1="0249fda5aa715a45fef50be25d521fdfcb61e9be" offset="0x000000" />
+ </dataarea>
+ <dataarea name="nvram" size="8192">
+ </dataarea>
+ </part>
+ </software>
+
<software name="mjtouhai">
<description>The Mahjong Touhaiden (Jpn)</description>
<year>1993</year>
@@ -50629,6 +50693,18 @@ List of unclassified roms
</part>
</software>
+ <software name="pinkie">
+ <description>Pinkie (USA, Prototype)</description>
+ <year>1995</year>
+ <publisher>Data Design</publisher>
+ <part name="cart" interface="snes_cart">
+ <feature name="slot" value="lorom" />
+ <dataarea name="rom" size="1048576">
+ <rom name="pink2.sfc" size="1048576" crc="91c9d645" sha1="74e2204c1a1c03fb4db322130b9d03e1350b5b58" offset="0x000000" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="pinocj" cloneof="pinoc">
<description>Pinocchio (Jpn)</description>
<year>1996</year>
@@ -57256,7 +57332,7 @@ List of unclassified roms
</part>
</software>
- <software name="supermjta" cloneof="supermjt">
+ <software name="supermjtb" cloneof="supermjt">
<description>Super Mahjong Taikai (Jpn, Rev. C)</description>
<year>1992</year>
<publisher>Koei</publisher>
@@ -57273,6 +57349,23 @@ List of unclassified roms
</part>
</software>
+ <software name="supermjt">
+ <description>Super Mahjong Taikai (Jpn, Rev. E)</description>
+ <year>1992</year>
+ <publisher>Koei</publisher>
+ <info name="serial" value="SHVC-IQ" />
+ <info name="release" value="19920912" />
+ <info name="alt_title" value="スーパー麻雀大会" />
+ <part name="cart" interface="snes_cart">
+ <feature name="slot" value="lorom" />
+ <dataarea name="rom" size="524288">
+ <rom name="supermahjongtaikai.a6f9.sfc" size="524288" crc="732740ec" sha1="e2d0e493d8b9cfba98338a80de942f45968d1f25" offset="0x000000" />
+ </dataarea>
+ <dataarea name="nvram" size="8192">
+ </dataarea>
+ </part>
+ </software>
+
<software name="smw2ja" cloneof="smw2">
<description>Super Mario - Yossy Island (Jpn, Rev. A)</description>
<year>1995</year>
diff --git a/hash/sol20_cass.xml b/hash/sol20_cass.xml
new file mode 100644
index 00000000000..1e110c44f4a
--- /dev/null
+++ b/hash/sol20_cass.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<softwarelist name="sol20_cass" description="PTC SOL-20 cassettes">
+ <software name="2progs" supported="no">
+ <description>2 Programs in 1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="25383">
+ <rom name="2 programs in 1 (19xx)(-).svt" size="25383" crc="d2e097e3" sha1="52eb5e4036201c8bcb7eea656cd1d4b42d80d58b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="metron" supported="no">
+ <description>Metron Computerware</description>
+ <year>1977</year>
+ <publisher>Tiny C Associates</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="30719">
+ <rom name="metron computerware (1977)(tiny c associates).svt" size="30719" crc="6140c147" sha1="294487f58ec607decb69900b169a6b03208a61b4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pilot" supported="no">
+ <description>Pilot</description>
+ <year>19??</year>
+ <publisher>Processor Techonolgy</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="51064">
+ <rom name="pilot (19xx)(processor techonolgy).svt" size="51064" crc="e192a999" sha1="628b8e364f22a1a38b6f5487a2dcd518182ec5de" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="proteus1" supported="no">
+ <description>Proteus Cassete #1</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="77646">
+ <rom name="proteus cassete #1 (19xx)(-).svt" size="77646" crc="f40fd39a" sha1="fe0b70607dd556ba8dc5ffca7d087b68778cdbcf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="proteus2" supported="no">
+ <description>Proteus Cassete #2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="95354">
+ <rom name="proteus cassete #2 (19xx)(-).svt" size="95354" crc="2b480f7b" sha1="06376865d8a0ce671c4a647c39f4ad2c4cef952d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="proteus3" supported="no">
+ <description>Proteus Cassete #3</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="57116">
+ <rom name="proteus cassete #3 (19xx)(-).svt" size="57116" crc="b2ee57f0" sha1="561f205f37affbaeba6ef7060f36044f268bf133" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="proteus7" supported="no">
+ <description>Proteus Cassete #7</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="178406">
+ <rom name="proteus cassete #7 (19xx)(-).svt" size="178406" crc="da305795" sha1="e9ce5023d288f52c303beb480e2a63531661ff90" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="proteus8" supported="no">
+ <description>Proteus Cassete #8</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="79094">
+ <rom name="proteus cassete #8 (19xx)(-).svt" size="79094" crc="d338d05a" sha1="8264f731acc676243e54d149d29b6cb13e691fa1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="solprint" supported="no">
+ <description>Sol Printer</description>
+ <year>19??</year>
+ <publisher>Processor Techonolgy</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="56307">
+ <rom name="sol printer (19xx)(processor techonolgy).svt" size="56307" crc="46a4e367" sha1="8e5f0226dde3ea450077a945f9bf12c3c5b7ede3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spacegam" supported="no">
+ <description>Spaces Games</description>
+ <year>19??</year>
+ <publisher>Creative Computing Software</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="47421">
+ <rom name="spaces games (19xx)(creative computing software).svt" size="47421" crc="4f1b8108" sha1="fc6cd419b45b7c1f88a16dba0df12d901edc5753" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="strategy" supported="no">
+ <description>Strategy Games</description>
+ <year>19??</year>
+ <publisher>Creative Computing Software</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="67400">
+ <rom name="strategy games (19xx)(creative computing software).svt" size="67400" crc="54d95385" sha1="54c8ca1542d9ec7cd711866bae3ceb3645735508" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="strategya" cloneof="strategy" supported="no">
+ <description>Strategy Games (Alt)</description>
+ <year>19??</year>
+ <publisher>Creative Computing Software</publisher>
+
+ <part name="cass1" interface="sol20_cass">
+ <dataarea name="cass" size="67359">
+ <rom name="strategy games (19xx)(creative computing software)[a].svt" size="67359" crc="3f7a6908" sha1="230a8e72996f625959c77cd8350a9f7de087db80" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/hash/sorcerer_cart.xml b/hash/sorcerer_cart.xml
index 9bfab8170b5..ba30c26fb39 100644
--- a/hash/sorcerer_cart.xml
+++ b/hash/sorcerer_cart.xml
@@ -17,7 +17,7 @@ Four cartridges were made for this computer one of which was a hardware device,
<software name="basicpac">
<description>Exidy Standard Basic v1.0</description>
<year>1978</year>
- <publisher>Exidy Inc.</publisher>
+ <publisher>Exidy</publisher>
<info name="serial" value="DP 2002" />
<part name="cart" interface="sorcerer_cart">
<dataarea name="rom" size="8192">
@@ -29,7 +29,7 @@ Four cartridges were made for this computer one of which was a hardware device,
<software name="devpac">
<description>Exidy Z80 Development Pac</description>
<year>1979</year>
- <publisher>Exidy Inc.</publisher>
+ <publisher>Exidy</publisher>
<info name="serial" value="DP 2003" />
<part name="cart" interface="sorcerer_cart">
<dataarea name="rom" size="8192">
@@ -41,7 +41,7 @@ Four cartridges were made for this computer one of which was a hardware device,
<software name="wordpac">
<description>Exidy Word Processor Pac</description>
<year>1978</year>
- <publisher>Exidy Inc.</publisher>
+ <publisher>Exidy</publisher>
<info name="serial" value="DP 2004" />
<part name="cart" interface="sorcerer_cart">
<dataarea name="rom" size="8192">
@@ -50,7 +50,7 @@ Four cartridges were made for this computer one of which was a hardware device,
</part>
</software>
- <software name="basicm">
+ <software name="basicmod">
<description>Exidy Standard Modified Basic v1.01</description>
<!-- Unofficial Hack Release -->
<year>1980</year>
diff --git a/hash/sorcerer_cass.xml b/hash/sorcerer_cass.xml
index b6db7dd7b12..6d05dcf0276 100644
--- a/hash/sorcerer_cass.xml
+++ b/hash/sorcerer_cass.xml
@@ -5,10 +5,11 @@
<!-- These came from mp3s, so they're marked as bad dumps until they're redumped properly -->
- <software name="chomp" supported="no">
+ <software name="chomp">
<description>Chomp</description>
<year>1981</year>
<publisher>W. S. King</publisher>
+ <info name="usage" value="Load in Monitor with &quot;LO&quot; command, then type &quot;GO 0100&quot;" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="23392316">
<rom name="chomp (1981)(w.s.king).wav" size="23392316" crc="95971024" sha1="62672de80e5139af35424184c76f1c9c18493c3a" offset="0" status="baddump" />
@@ -16,10 +17,11 @@
</part>
</software>
- <software name="eliza" supported="no">
+ <software name="eliza">
<description>Eliza</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="12578876">
<rom name="eliza (19xx)(-).wav" size="12578876" crc="9173759e" sha1="23d35784fd1ab492cb0371552bd1a981214c0192" offset="0" status="baddump" />
@@ -27,10 +29,11 @@
</part>
</software>
- <software name="galaxian" supported="no">
+ <software name="galaxian">
<description>Galaxians</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in Monitor with &quot;LO&quot; command, then type &quot;GO 0100&quot;" />
<part name="cass" interface="sorcerer_cass">
<dataarea name="cass" size="16506020">
<rom name="galaxians (19xx)(-).wav" size="16506020" crc="c6f686b2" sha1="41928aa796e6609de37301b3594d3a9a9eb975ac" offset="0" status="baddump" />
@@ -38,4 +41,129 @@
</part>
</software>
-</softwarelist> \ No newline at end of file
+
+
+<!-- These come from tapes -->
+
+ <software name="elizaa" cloneof="eliza">
+ <description>Eliza (Alt)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="11908260">
+ <rom name="eliza.wav" size="11908260" crc="67868b2a" sha1="bd219fa2b29881add2f06fc7cdf1dc0c63bec0b0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo1" supported="no">
+ <description>DEMO1 (Bad?)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Gives CRC Error" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="12770008">
+ <rom name="demo1.wav" size="12770008" crc="e53951a5" sha1="612b60f3f179fa05a86305761e951211e535238e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo2">
+ <description>DEMO2</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="8202538">
+ <rom name="demo2.wav" size="8202538" crc="922dede4" sha1="92005d8e4957a658e2e513083cd240af575fc048" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo3">
+ <description>DEMO3</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="7263870">
+ <rom name="demo3.wav" size="7263870" crc="38e5b0d7" sha1="2400651c816b33d67c461c7eee561d80568891be" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo4">
+ <description>DEMO4</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="3896482">
+ <rom name="demo4.wav" size="3896482" crc="e66fa049" sha1="d956b3ff42ac7b3178ee76ecb3d2ad388fed81f5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo5">
+ <description>DEMO5</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="5980780">
+ <rom name="demo5.wav" size="5980780" crc="32e5879c" sha1="07d08cb8d35e591d9f5a358fcc6f611df5922c7e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo6">
+ <description>DEMO6</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="11295052">
+ <rom name="demo6.wav" size="11295052" crc="1c3a212f" sha1="a641a1cfaa3c3dc272c31803c738ff3f908f4604" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo7">
+ <description>DEMO7</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="11678280">
+ <rom name="demo7.wav" size="11678280" crc="320e3eba" sha1="f2ab46c0b33b5ea42a6ae26fdd06294b62e1331f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo8">
+ <description>DEMO8</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="7556546">
+ <rom name="demo8.wav" size="7556546" crc="baf9361f" sha1="30ab8a8ccafd65fbe82cbfbf5f77f27e0dfc4a78" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="martian" supported="no">
+ <description>Martian Invaders (Bad?)</description>
+ <year>1980?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Gives CRC Error" />
+ <part name="cass" interface="sorcerer_cass">
+ <dataarea name="cass" size="843548">
+ <rom name="m- martian invaders (1980).wav" size="843548" crc="355d94ea" sha1="048ef7fa3a321cdcada962135de3f42161de86ab" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+
+</softwarelist>
diff --git a/hash/spc1000_cass.xml b/hash/spc1000_cass.xml
index a227099faaa..5c2635ae55c 100644
--- a/hash/spc1000_cass.xml
+++ b/hash/spc1000_cass.xml
@@ -1005,6 +1005,7 @@
<description>Toiyar</description>
<year>198?</year>
<publisher>Sammi Computer</publisher>
+ <info name="alt_title" value="토ì´ì•¼" />
<part name="cass" interface="spc1000_cass">
<dataarea name="cass" size="68050">
<rom name="toyar-4852-mayhouse.cas" size="68050" crc="ed454d5c" sha1="18b1ac12709136e4e03d3a7d4ead4a1d00c232ca" offset="0" />
diff --git a/hash/spectrum_flop.xml b/hash/specpls3_flop.xml
index c44232fe56f..c44232fe56f 100644
--- a/hash/spectrum_flop.xml
+++ b/hash/specpls3_flop.xml
diff --git a/hash/spectrum.xml b/hash/spectrum_cart.xml
index 3d6867c1241..e181f9feb3b 100644
--- a/hash/spectrum.xml
+++ b/hash/spectrum_cart.xml
@@ -7,7 +7,7 @@
7 unreleased prototypes are included in this collection.
-->
-<softwarelist name="spectrum" description="Sinclair ZX Spectrum cartridges">
+<softwarelist name="spectrum_cart" description="Sinclair ZX Spectrum cartridges">
<software name="backgamm">
<description>Backgammon</description>
diff --git a/hash/ut88.xml b/hash/ut88.xml
index e9ca0a4771b..54ecab9550d 100644
--- a/hash/ut88.xml
+++ b/hash/ut88.xml
@@ -4,7 +4,7 @@
<software name="basic80">
- <description>BASIC80</description>
+ <description>Mikro/80 BASIC</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass" interface="ut88_cass">
@@ -15,7 +15,7 @@
</software>
<software name="chscom">
- <description>CH$COM</description>
+ <description>Changer (v1.1) (CP/M)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass" interface="ut88_cass">
@@ -26,7 +26,7 @@
</software>
<software name="cpm35">
- <description>CPM35</description>
+ <description>CP/M (v2.2, 35K)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass" interface="ut88_cass">
@@ -36,8 +36,8 @@
</part>
</software>
- <software name="cpm64">
- <description>CPM64</description>
+ <software name="cpm256">
+ <description>CP/M (v2.2, 256K)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass" interface="ut88_cass">
@@ -48,7 +48,7 @@
</software>
<software name="tetris">
- <description>TETRIS</description>
+ <description>Tetris</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cass" interface="ut88_cass">
diff --git a/hash/vreader.xml b/hash/vreader.xml
index 75837b8844e..6379cd82362 100644
--- a/hash/vreader.xml
+++ b/hash/vreader.xml
@@ -47,3 +47,4 @@ Language:
-->
+</softwarelist>
diff --git a/hash/vsmile_cd.xml b/hash/vsmile_cd.xml
index f91b29c92b8..0658e971fdc 100644
--- a/hash/vsmile_cd.xml
+++ b/hash/vsmile_cd.xml
@@ -17,8 +17,8 @@ Language:
********7 = Spain
80-093000(US) | The Crystal Ball Adventures
-80-093004(GE) | Das zauberhafte Märchenabenteuer
-80-093005(FR) | L'aventure enchantée
+80-093004(GE) | Das zauberhafte Märchenabenteuer
+80-093005(FR) | L'aventure enchantée
80-093007(SP) | El Castillo de las Princesas
-
80-093020(US) | The Incredibles - Mission Incredible
@@ -33,7 +33,7 @@ Language:
-
80-093060(US) | The Amazing Spider-Man - Countdown to Doom
80-093064(GE) | Spiderman - Angriff der Superschurken
-80-093065(FR) | Spider-Man - Course-poursuite à Manhattan
+80-093065(FR) | Spider-Man - Course-poursuite à Manhattan
80-093067(SP) | El Asombroso Spider-Man - Persecucion en la Cuidad
-
80-093080(US) | Scooby-Doo! - Ancient Adventure
@@ -43,12 +43,12 @@ Language:
80-093087(SP) | Scooby-Doo - Viaje al Pasdao
-
80-093100(US) | Cars - In The Fast Lane
-80-093104(GE) | Cars - Auf der Überholspur
+80-093104(GE) | Cars - Auf der Ãœberholspur
80-093105(FR) | Cars - A Fond la Caisse!
80-093107(SP) | Cars - El Carril Rapido
-
80-093120(US) | Wacky Race on Jumpin' Bean Island
-80-093124(GE) | Das verrückte Rennen auf der Hüpf-Bohnen-Insel
+80-093124(GE) | Das verrückte Rennen auf der Hüpf-Bohnen-Insel
80-093127(SP) | Carrera Loca - En La Isla de las Vainas Fritas (real# unknown)
-
80-093140(US) | Shrek The Third - The Search for Arthur
diff --git a/hash/x07_cass.xml b/hash/x07_cass.xml
new file mode 100644
index 00000000000..f21bb05e504
--- /dev/null
+++ b/hash/x07_cass.xml
@@ -0,0 +1,1385 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<softwarelist name="x07_cass" description="Canon X-07 cassettes">
+
+<!-- This comes from a real cassette -->
+ <software name="x07calc">
+ <description>Canon X-07 Calc (Fra)</description>
+ <year>19??</year>
+ <publisher>Logi'stick</publisher>
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="957292">
+ <rom name="x07_calc_logistick.wav" size="957292" crc="626b14be" sha1="b4f30523b3c40170c2b2781a73dffb29e5c67d42" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+
+
+<!-- These are tapes created from listings published on the French magazine "Hebdogiciel" -->
+
+ <software name="3dlabyr">
+ <description>3-D Labyrinthe (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 123" />
+ <info name="release" value="19860221" />
+ <info name="author" value="M. Grillet" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="13406">
+ <rom name="labyrinthe 3d.cas" size="13406" crc="bcb4213e" sha1="22a4faa1bed2594885f55d0aa41ffd75e75563ba" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="3dmunch" supported="no">
+ <description>3D Munch (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 146" />
+ <info name="release" value="198608xx" />
+ <info name="author" value="Ignace Vantorre" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="2833">
+ <rom name="3dmunch#1.cas" size="2833" crc="e78972cc" sha1="affcc1b24159a2f8a6d5dbb948010c95c831ea4c" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="6263">
+ <rom name="3dmunch#2.cas" size="6263" crc="c6d3f9d9" sha1="58c1bbd5e98d3f6d73b0a68507648b3140ed31c0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="3dturbo" supported="no">
+ <description>3D-Turbo (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 146" />
+ <info name="release" value="198608xx" />
+ <info name="author" value="Emmanuel De Lapparent" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="5361">
+ <rom name="turbo1.cas" size="5361" crc="ca6ec209" sha1="ea199a6f83741f79222d46266340ec552bf4f40d" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="5732">
+ <rom name="turbo2.cas" size="5732" crc="90d8a0e2" sha1="d2da55977ecfeb5496263ce5e45f022128a4a11c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="advland">
+ <description>Adventure-Land (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 93" />
+ <info name="release" value="19850726" />
+ <info name="author" value="Pascal Aoumade" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="11467">
+ <rom name="adventure land.cas" size="11467" crc="6f5cfa75" sha1="822426b512a493a1e5c33cb6c7017edbeaa270c5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- when is the 2nd part supposed to be loaded? -->
+ <software name="amerinca" supported="partial">
+ <description>Amerinca Gold (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 111" />
+ <info name="release" value="19851129" />
+ <info name="author" value="N. Allaire" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="5025">
+ <rom name="amer1 gold.cas" size="5025" crc="dbbdbccc" sha1="ec7a8eab7cd4fb33f0fde5ab38addbb65fc288a1" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="6103">
+ <rom name="amer2 gold.cas" size="6103" crc="50f9bb93" sha1="d6b31fcc6e8a9e2650cfd49d07d54594343a765b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="amidar">
+ <description>Amidar - Le Peintre (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="alt_title" value="Painter" />
+ <info name="magazine" value="Hebdogiciel 73" />
+ <info name="release" value="19850308" />
+ <info name="author" value="P. Breton" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="8811">
+ <rom name="painter.cas" size="8811" crc="1d9410f5" sha1="9c54fbcbdd9b0b47988b4f5cff609e7eab698220" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="assdesas">
+ <description>Assembleur Désassembleur (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="alt_title" value="L'As desAs" />
+ <info name="magazine" value="Hebdogiciel 59" />
+ <info name="release" value="19841130" />
+ <info name="author" value="S. Doczekaski" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="10058">
+ <rom name="assdes_as.cas" size="10058" crc="281dfe99" sha1="d7f8f01246d6e8edafb22f6b748c7deffa57300b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="aventur">
+ <description>Aventurier (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 125" />
+ <info name="release" value="19860307" />
+ <info name="author" value="Pierre Dor" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="9412">
+ <rom name="aventurier.cas" size="9412" crc="0e5897ee" sha1="66bb20b82f6be5c9ca171ff60cb7b9b623311a29" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="extbas">
+ <description>BASIC Étendu (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 88" />
+ <info name="release" value="19850621" />
+ <info name="author" value="R. Van Leeuwen" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="2592">
+ <rom name="extbas.cas" size="2592" crc="dfc2d408" sha1="94dbe746d3cdb436a5492808dcb3151cd3868020" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="basix07" supported="no">
+ <description>BASIX 07 (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 106" />
+ <info name="release" value="19851025" />
+ <info name="author" value="Stephane Shirvanian" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="4121">
+ <rom name="basix-07.cas" size="4121" crc="8e4de221" sha1="706d40ce2d434c5b1aaea93e1ef03bcdf7ea15f4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="batgalax">
+ <description>Bataille dans la Galaxie (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 146" />
+ <info name="release" value="198608xx" />
+ <info name="author" value="J. P. Blanchard" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3788">
+ <rom name="bataille dans la galaxie.cas" size="3788" crc="889efc64" sha1="b2c2887a8b20abc23e957ef0fd2957b26e496eda" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- The listing was supposed to be completed in Hebdogiciel 169, which was not published -->
+ <software name="beachead">
+ <description>Beach-Head (Fra, Incomplete)</description>
+ <year>1987</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 168" />
+ <info name="release" value="19870102" />
+ <info name="author" value="S. Doczekaski" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="3811">
+ <rom name="beach1_head.cas" size="3811" crc="414bae15" sha1="9d550544753c441a815efc2a1b330ba2cfe94057" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="1807">
+ <rom name="beach2_head[incomplet].cas" size="1807" crc="61f83215" sha1="989f2a74219a2c7799592f9b85a7f35b1881a469" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="belote">
+ <description>Belote (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 62" />
+ <info name="release" value="19841221" />
+ <info name="author" value="J. C. Adagas Cau" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="9082">
+ <rom name="belote.cas" size="9082" crc="a86e4fdf" sha1="a5370ff8c4dc1f3593864fdb2efd3694f23f44e3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="calcul">
+ <description>Calcul (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 42" />
+ <info name="release" value="198408xx" />
+ <info name="author" value="E. Madeuf" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5857">
+ <rom name="calcul.cas" size="5857" crc="edf90613" sha1="de5ab65ecb4263b050e82f1ac8a980627cf45e35" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="calculat">
+ <description>Calculatrice (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 98" />
+ <info name="release" value="19850830" />
+ <info name="author" value="M. Lameyse" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5200">
+ <rom name="calculatrice.cas" size="5200" crc="e6615324" sha1="e4f8f2f0c2fd013c26958d0ce3e2c5deb10c390a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cburger">
+ <description>Canon Burger (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 135" />
+ <info name="release" value="19860516" />
+ <info name="author" value="Pierre Dor" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5142">
+ <rom name="canon burger.cas" size="5142" crc="ef232f49" sha1="d96776fcdf11c183c833f14324e402c55be6132d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="crun">
+ <description>Canon Runner (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 107" />
+ <info name="release" value="19851101" />
+ <info name="author" value="C. Gautier" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="7965">
+ <rom name="canon runner1.cas" size="7965" crc="119bf353" sha1="644d52edd3d249f5b6a9d4c2a605fb4e3b2b6a4b" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="4879">
+ <rom name="canon runner2.cas" size="4879" crc="fcc5e6a6" sha1="423653b7df8336f2cd0da4905214f0ceac5d72fa" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ccalc">
+ <description>Canon-Calc (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 136" />
+ <info name="release" value="19860523" />
+ <info name="author" value="François Bernez" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="8500">
+ <rom name="canon-calc.cas" size="8500" crc="f3308e5d" sha1="a03f369f560b07ba2f397faa1d92cff6bc563891" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cgraff">
+ <description>Canon-Graff (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 69" />
+ <info name="release" value="19850208" />
+ <info name="author" value="F. Devargas" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5434">
+ <rom name="canon-graff.cas" size="5434" crc="eea27bcd" sha1="338f7ef5753897a7905e50027137f2b33cd6ccbd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cardiab2">
+ <description>Carré Diabolique II (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 106" />
+ <info name="release" value="19851025" />
+ <info name="author" value="M. Bollaert" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="1809">
+ <rom name="carre diabolique2.cas" size="1809" crc="20d3ae95" sha1="16ee404143a4b8072071ea516ebd3772fc0571dd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="carwar">
+ <description>CarWar (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 81" />
+ <info name="release" value="19850503" />
+ <info name="author" value="G. Bouquet" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3621">
+ <rom name="carwar.cas" size="3621" crc="046666ed" sha1="9fc30dd1eee95d1fc0c131cb33084eb4a1714623" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="catchmn">
+ <description>Catch-Mean (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 127" />
+ <info name="release" value="19860321" />
+ <info name="author" value="F. Trancart" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="2079">
+ <rom name="catch1-mean.cas" size="2079" crc="fce4704f" sha1="4e1cb7cf94f02c7797f502fac7e0b81dcf2477d7" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="6052">
+ <rom name="catch2-mean.cas" size="6052" crc="54f1b4f0" sha1="f96a7a542d73ed90136523cd4d3fb71eb88ef2e9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="chenille">
+ <description>Chenille (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 36" />
+ <info name="release" value="19840615" />
+ <info name="author" value="O. Beranger" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="1942">
+ <rom name="chenille.cas" size="1942" crc="06422b4a" sha1="8f2ee920d3b7beb3238543b0fac977401549feff" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lancelot">
+ <description>Chevalier Lancelot. (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 54" />
+ <info name="release" value="19841026" />
+ <info name="author" value="I. Hary" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="2478">
+ <rom name="cheva1_lancelot.cas" size="2478" crc="7ab67b9e" sha1="a32c41d92445006f04c29a8181bbaee0511d9c8b" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="7625">
+ <rom name="cheva2_lancelot.cas" size="7625" crc="40d296a8" sha1="add91d92f5a1dd231db86947250ded246a25b40e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="chatmaud">
+ <description>Le Chateau Maudit (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 104" />
+ <info name="release" value="19851011" />
+ <info name="author" value="Emmanuel De Lapparent" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="4447">
+ <rom name="cm1_chateaumaudit.cas" size="4447" crc="043254fa" sha1="1e50e09acbf7265bf9674c8ef6d60a5c188cb991" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="6359">
+ <rom name="cm2_chateaumaudit.cas" size="6359" crc="7c696f3e" sha1="8b6b6b7a570a2b117d3673f58803f8f2ae34cc83" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="courbes">
+ <description>Courbes (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="alt_title" value="Tracé de Courbe" />
+ <info name="magazine" value="Hebdogiciel 124" />
+ <info name="release" value="19860228" />
+ <info name="author" value="A. Nogues" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="10185">
+ <rom name="courbes.cas" size="10185" crc="e30ceaa1" sha1="d6506ccdc1d60108856128b316d7df94f79f0505" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="defenser">
+ <description>Defenseur (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 55" />
+ <info name="release" value="19841102" />
+ <info name="author" value="G. Forest" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="9975">
+ <rom name="defenseur.cas" size="9975" crc="cf0bace2" sha1="b7c8f8282f3da6aaabaaaad96a1d137bf6edbedf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="desass">
+ <description>Desassembleur (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="alt_title" value="Monit. Désassembleur" />
+ <info name="magazine" value="Hebdogiciel 117" />
+ <info name="release" value="19860110" />
+ <info name="author" value="Y. E. Proy" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="4639">
+ <rom name="desass.cas" size="4639" crc="ae98dba9" sha1="d3b13a0d181295366c51bc07cba8d69770e47a8a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="desasm">
+ <description>DESASS-ASM (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 162-164" />
+ <info name="release" value="19861121" />
+ <info name="author" value="Emmanuel De Lapparent" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="191">
+ <rom name="desassembleur[loader].cas" size="191" crc="beff77d6" sha1="bb2d3f4de3a3d0c2faecff21effa058c61ecafa9" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="2317">
+ <rom name="desassembleur[codes].cas" size="2317" crc="5559879b" sha1="6c42a850aeed5d61308ef55d2cc86eb7f5ab97ef" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="destruct">
+ <description>Destruction (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 101" />
+ <info name="release" value="19850920" />
+ <info name="author" value="F. Fargeot" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="2318">
+ <rom name="destr1_destruction.cas" size="2318" crc="7e383541" sha1="104db3a013b2bec3df6999edaa19eaa1260de1de" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="5488">
+ <rom name="destr2_destruction.cas" size="5488" crc="3d2ed37c" sha1="f78e7940a515c6d4b6e93afcee47fe5a91743886" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="x07_cass">
+ <dataarea name="cass" size="4805">
+ <rom name="destr3_destruction.cas" size="4805" crc="d9860e13" sha1="455f612d1e9eecf0c3c7a3d6f33ce2af35c6d52e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="donjon">
+ <description>Donjon (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 28" />
+ <info name="release" value="19840420" />
+ <info name="author" value="I. Hary" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5617">
+ <rom name="donjon.cas" size="5617" crc="2f6103d1" sha1="bd869c8164b2813ab6dda9b63e2bf28b911db65d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="edf">
+ <description>E.D.F. (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 99" />
+ <info name="release" value="19850906" />
+ <info name="author" value="M. Bollaert" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="2136">
+ <rom name="edf1.cas" size="2136" crc="e3101e24" sha1="aef2bae2382e2ed1ba3aab3f6d5dbc312000c5ed" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="14334">
+ <rom name="edf2.cas" size="14334" crc="3c600f67" sha1="5fb93f970847b8df2109cd604495f9feff4d4c89" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="eudipe">
+ <description>Eudipe (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 72" />
+ <info name="release" value="19850301" />
+ <info name="author" value="Stephane Shirvanian" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="4708">
+ <rom name="eudipe.cas" size="4708" crc="3416daf4" sha1="1fcf066ec54bac4851a27d100174ee7ef31e2359" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fifine">
+ <description>Fifine la Tortue (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 60" />
+ <info name="release" value="19841207" />
+ <info name="author" value="B. Rouleau" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="6001">
+ <rom name="fifine la tortue.cas" size="6001" crc="de092ba4" sha1="3f788248cc5e18f1db34f522a25b14a268b7dae5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="finances">
+ <description>Finances (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 61" />
+ <info name="release" value="19841214" />
+ <info name="author" value="C. Bureau" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5574">
+ <rom name="finances.cas" size="5574" crc="cd0992fe" sha1="48e4612b81a0c0daaeadaf5b15dc7daa9e88abb9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fontix">
+ <description>FONTIX+ (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 103" />
+ <info name="release" value="19851004" />
+ <info name="author" value="P. Diogo" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="2803">
+ <rom name="fontix+_asm.cas" size="2803" crc="00c66e4c" sha1="ba8982331a4fb3c286720849d94584fd5cbc43bf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="force8">
+ <description>Force 8 (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 57" />
+ <info name="release" value="19841116" />
+ <info name="author" value="M. Boucher" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="9070">
+ <rom name="force8.cas" size="9070" crc="085272a4" sha1="c86a7fd6e37715e47588974aa36ea93d167957ca" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="f1">
+ <description>Formule 1 (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 129-131" />
+ <info name="release" value="19860404" />
+ <info name="author" value="A. Fousse" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="8029">
+ <rom name="formule1_loader.cas" size="8029" crc="ece2373c" sha1="fce835cbdb28d3b8d96748d05a430d117f5d4c36" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="10518">
+ <rom name="formule1_car3.cas" size="10518" crc="7f8e2d51" sha1="b1231a72baef84044b980dae848f196a4c79ec3e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="france">
+ <description>France (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 15" />
+ <info name="release" value="19840120" />
+ <info name="author" value="C. Danes" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3154">
+ <rom name="france.cas" size="3154" crc="4d703f4e" sha1="8b57f83ffc62b872ab85ae5ef9bf5f8422475c28" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="genmusic">
+ <description>Générateur Musical (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 47" />
+ <info name="release" value="19840907" />
+ <info name="author" value="P. Lotz" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="2343">
+ <rom name="generateur musical.cas" size="2343" crc="4fab9406" sha1="2d7f96604680caba36fab49559f397d4508a7054" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- OM ERROR -->
+ <software name="gcambri" supported="no">
+ <description>Gentleman Cambrioleur (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 90" />
+ <info name="release" value="19850705" />
+ <info name="author" value="S. Madrange" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="14656">
+ <rom name="gentleman cambrioleur.cas" size="14656" crc="4bd81683" sha1="2a4d98470ae6f3a795cb797e89ded2cf74d6b2a7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minigolf">
+ <description>Golf Miniature (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 126" />
+ <info name="release" value="19860314" />
+ <info name="author" value="Philippe Desmartin" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5904">
+ <rom name="mini-golf.cas" size="5904" crc="6dc32653" sha1="a8393c9b4460087c7396e6a995c11527d23dc07e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ponts">
+ <description>Jeu de Ponts (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 132" />
+ <info name="release" value="19860425" />
+ <info name="author" value="F. M. Bollaert" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3498">
+ <rom name="ponts.cas" size="3498" crc="d11481d4" sha1="5628f66f185b7f21f52bd7690ad3efd32a35b374" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jeuxhivr">
+ <description>Jeux d'Hiver (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 133" />
+ <info name="release" value="19860502" />
+ <info name="author" value="Emmanuel De Lapparent" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="4245">
+ <rom name="jeux olympiques d'hivers1.cas" size="4245" crc="71e0b058" sha1="e9314180607a52b6aedf8384a57144859327a084" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="6162">
+ <rom name="jeux olympiques d'hivers2.cas" size="6162" crc="1c479bac" sha1="ea5fefc11c0e5864c639bd7639c9e316b3575e41" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="joedkid">
+ <description>Joe Dalt'Kid (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 86-87" />
+ <info name="release" value="19850607" />
+ <info name="author" value="P. Fagnant" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="4008">
+ <rom name="joe1_joe dalt'kid.cas" size="4008" crc="65523d35" sha1="f3c4a832cdfef89768f00ea0baeee98aeb047033" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="6289">
+ <rom name="joe2_joe dalt'kid.cas" size="6289" crc="f1177d7f" sha1="cf64a88d8763d5e70e9bd7635a97bdcd67b14d16" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="judoka">
+ <description>Judoka (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 128" />
+ <info name="release" value="19860328" />
+ <info name="author" value="Pierre Dor" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="6151">
+ <rom name="judoka.cas" size="6151" crc="85221b8e" sha1="2992b9e7887099034e462e9ef7190a46820fd840" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jump">
+ <description>Jump (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 50" />
+ <info name="release" value="19840928" />
+ <info name="author" value="F. Trancart" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5293">
+ <rom name="jump.cas" size="5293" crc="1283d8a1" sha1="11d2fd1476898771bac0f4bfecd6cbf14b28324b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="keyprog">
+ <description>Key Programmer (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 134" />
+ <info name="release" value="19860509" />
+ <info name="author" value="A. Jacquot" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3681">
+ <rom name="key programmer.cas" size="3681" crc="87a59f55" sha1="d16deda00b3ed76345a61f2842e82cada5e0e902" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="labyr">
+ <description>LABYR (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 32" />
+ <info name="release" value="19840518" />
+ <info name="author" value="F. Benoist" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="2592">
+ <rom name="labyr.cas" size="2592" crc="6200bdad" sha1="91b75344e87b8ea9385a1cd70f1183fcad35a720" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="liaisons">
+ <description>Liaisons (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 87" />
+ <info name="release" value="19850614" />
+ <info name="author" value="C. Flores" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="6212">
+ <rom name="liaisons.cas" size="6212" crc="1865efb1" sha1="4c63c50be58cacc85d8e55cc7a8dd52361b3ae7b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lion">
+ <description>Lion (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 76" />
+ <info name="release" value="19850329" />
+ <info name="author" value="Emmanuel Lecharny" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5402">
+ <rom name="lion.cas" size="5402" crc="610d18ca" sha1="ea0d5126fc20d6877fb73af91a11c3d95ac64cb5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="luckyjoe">
+ <description>Lucky Joe (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 80" />
+ <info name="release" value="19850426" />
+ <info name="author" value="M. Salaum" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="4864">
+ <rom name="lucky joe.cas" size="4864" crc="a6c45719" sha1="6d8468290ca15aea374c79f8c56663bcdad5bdb6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="math">
+ <description>Mathématiques (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 75" />
+ <info name="release" value="19850322" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="12569">
+ <rom name="mathematiques.cas" size="12569" crc="1f634d41" sha1="c647020112d53434894eeed50739135ddbc70771" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mines">
+ <description>Mines (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 121" />
+ <info name="release" value="19860207" />
+ <info name="author" value="S. Guiochon" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="4611">
+ <rom name="mines.cas" size="4611" crc="d3bdd399" sha1="c41455447d337db79177e4345d6fdc8aa49055cf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minigeo">
+ <description>Mini-Géo (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 81" />
+ <info name="release" value="19850503" />
+ <info name="author" value="Philippe Desmartin" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="7315">
+ <rom name="mini-geographe.cas" size="7315" crc="c7e9aa4a" sha1="0eaf1bf43f93949412319eec4903798807d214b1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="multigrp">
+ <description>Multigraph (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 85" />
+ <info name="release" value="19850531" />
+ <info name="author" value="Olivier Faugeras" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="6491">
+ <rom name="multigraph.cas" size="6491" crc="1f413ac2" sha1="ec7ffa7fe34d7cad11e851beb6baa28c603c5d71" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="musicmak">
+ <description>Music Maker (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 141" />
+ <info name="release" value="19860627" />
+ <info name="author" value="S. Friedelmeyer" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="6738">
+ <rom name="music1 maker.cas" size="6738" crc="5e315fca" sha1="d178d5bfed16f49393b8ad66893d872f57920f57" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="4566">
+ <rom name="music2 maker.cas" size="4566" crc="65935eae" sha1="3016e51310bae5d97a0665bd8cc0a065d63f2e78" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pacman">
+ <description>Pac-Man (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="alt_title" value="Bacman" />
+ <info name="magazine" value="Hebdogiciel 58" />
+ <info name="release" value="19841123" />
+ <info name="author" value="S. Doczekaski" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3873">
+ <rom name="bacman.cas" size="3873" crc="618431f1" sha1="8357e1aed5b9e116caf0939c7bdf48b29a17e7ac" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="panicbnk">
+ <description>Panic Bank (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 89" />
+ <info name="release" value="19850628" />
+ <info name="author" value="E. Capellari" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="1932">
+ <rom name="panic1 bank.cas" size="1932" crc="b287bed7" sha1="dfaf30c541654b0a220e88b152c52ada5ab35ec6" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="5268">
+ <rom name="panic2 bank.cas" size="5268" crc="9c595c9f" sha1="dd069484435482ae1845a063dffab6b488c6ca8d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="patrolsp">
+ <description>Patrouilleur de l'Espace (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 52" />
+ <info name="release" value="19841012" />
+ <info name="author" value="X. Vannerau" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="2317">
+ <rom name="patr1_patrouilleur de l espace.cas" size="2317" crc="7a3d1252" sha1="3a6e3b2780230c2ff2fa72cb48b1c8ea6b9c194c" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="6067">
+ <rom name="patr2_patrouilleur de l espace.cas" size="6067" crc="b60b25c1" sha1="28d09765da024a815ae905bcb297f86b3e30c4a1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pinup">
+ <description>Pin-Up (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 119-120" />
+ <info name="release" value="19860124" />
+ <info name="author" value="Philippe Desmartin" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="13091">
+ <rom name="pin-up.cas" size="13091" crc="e9c72785" sha1="477dc6603142fb3649dad9464d022933d6f313c1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piste">
+ <description>Piste (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 49" />
+ <info name="release" value="19840921" />
+ <info name="author" value="C. Peletier" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="1391">
+ <rom name="piste.cas" size="1391" crc="20c4ce2c" sha1="d9a93b119ddd3a23ae893c5fac6d51314659e341" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="prixdang">
+ <description>Le Prix du Danger (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 46" />
+ <info name="release" value="19840831" />
+ <info name="author" value="F. Bernez" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5895">
+ <rom name="le prix du danger.cas" size="5895" crc="5bd08843" sha1="e8ef2fc908a1bbedd0ccc182cb78ab305c29202f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="puzzle">
+ <description>Puzzle (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 53" />
+ <info name="release" value="19841019" />
+ <info name="author" value="E. Lapouyade" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="6357">
+ <rom name="puzzle.cas" size="6357" crc="f878e0b6" sha1="0e8bfe129ba42abbace0fd63ec5206d3c263c7b0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rdv">
+ <description>Rendez-Vous (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 146" />
+ <info name="release" value="198608xx" />
+ <info name="author" value="J. L. Vitre" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="3439">
+ <rom name="rendez-vous1.cas" size="3439" crc="5624de8e" sha1="b36b088335699bb6b3eb0f0762496d8d444eaffd" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="12168">
+ <rom name="rendez-vous2.cas" size="12168" crc="654836c9" sha1="8d52f3694267b38aa0341da994ecbd021ff16f14" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="renum">
+ <description>Renum Auto (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 154" />
+ <info name="release" value="19861010" />
+ <info name="author" value="R. Santini" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="1816">
+ <rom name="renumauto.cas" size="1816" crc="cf404520" sha1="2801cf02ccb435f00b545ac8283ab575a5a3b0de" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="runner">
+ <description>Runner (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 100" />
+ <info name="release" value="19850913" />
+ <info name="author" value="M. Marciacq" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="9044">
+ <rom name="runner.cas" size="9044" crc="55fc5340" sha1="2a96fc3e60594a44d1c8d11132e8239bec1c5a4b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- OM ERROR -->
+ <software name="sante7" supported="no">
+ <description>Sante7 (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 78" />
+ <info name="release" value="19850412" />
+ <info name="author" value="F. Costa Dos Santos" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="13903">
+ <rom name="sante7.cas" size="13903" crc="b1ae8127" sha1="9ff5feb84968596e901874c8b4cc8635efc127f6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="seawart">
+ <description>Sea War (Fra, Trancart)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 71" />
+ <info name="release" value="19850222" />
+ <info name="author" value="F. Trancart" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="2823">
+ <rom name="seawar 1_loader.cas" size="2823" crc="ec39ba2c" sha1="58814335387a9bfabe13c9953cc8f22f86e89f05" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="4910">
+ <rom name="seawar 1.cas" size="4910" crc="8bf81881" sha1="b5f5d4d63d109b1d941655dd9c52ca70b2c3e535" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="seawarj">
+ <description>SeaWar (Fra, Jorden)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 165-167" />
+ <info name="release" value="19861212" />
+ <info name="author" value="F. X. Jorden" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="6857">
+ <rom name="seawar_presentation_l1.cas" size="6857" crc="679ff2f6" sha1="d4c427ccfb35d98be7338a003bec6fdb40e94331" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="12644">
+ <rom name="seawar_seawar_l2.cas" size="12644" crc="bebef275" sha1="51bbb5a6d2375ae3c2aa52b4c921f32e2d67b2c2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="serpent">
+ <description>Serpentine (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 115" />
+ <info name="release" value="19851227" />
+ <info name="author" value="F. Vacher" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="4818">
+ <rom name="serpentine_loader.cas" size="4818" crc="ced74fd6" sha1="18723d2e7393f6b97e52905491e9708121d32725" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="615">
+ <rom name="serpentine_auto_datas.cas" size="615" crc="328c035e" sha1="81159c395c87fe4ecd37fae6864311bcb7969b86" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sorcmaud">
+ <description>Le Sorcier Maudit (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 160-161" />
+ <info name="release" value="19861107" />
+ <info name="author" value="Emmanuel De Lapparent" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="6104">
+ <rom name="le sorcier maudit1.cas" size="6104" crc="99f96d33" sha1="789be9860b0562c2128c2deca2a7310a17da29d0" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="10157">
+ <rom name="le sorcier maudit2.cas" size="10157" crc="60cfd3ab" sha1="2917f6e6e64df4cb18f0ffb8791272af454bb1ea" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="space">
+ <description>Space (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 94" />
+ <info name="release" value="198508xx" />
+ <info name="author" value="J. M. Joudrier" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="6018">
+ <rom name="space.cas" size="6018" crc="99a8b56e" sha1="2011713b7f0968759b020e874a595d9bcc004651" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spacepan">
+ <description>Space-Panic (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 92" />
+ <info name="release" value="19850719" />
+ <info name="author" value="H. Cimadomo" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="1121">
+ <rom name="panik1_space panik.cas" size="1121" crc="d558063d" sha1="5015e73cb00cb7f1dd32e2b3b67791cc2e4bbdd0" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="4943">
+ <rom name="panik2_space panik.cas" size="4943" crc="9cb639b5" sha1="bf3a208b751294ccfc76b69a294f7eec9ea74558" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="x07_cass">
+ <dataarea name="cass" size="3985">
+ <rom name="panik3_space panik.cas" size="3985" crc="4feb422c" sha1="ae3bec50e6a6e6546f3df5b999e952f2aab16bcf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starwar">
+ <description>Star-War (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 30" />
+ <info name="release" value="19840504" />
+ <info name="author" value="Y. Burgalieres" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5406">
+ <rom name="starwar.cas" size="5406" crc="87d68cbb" sha1="e59eb2b9733f0d8b5e9532a086f160ede1011430" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- FC ERROR -->
+ <software name="stat" supported="no">
+ <description>Stat (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 24" />
+ <info name="release" value="19840323" />
+ <info name="author" value="F. Berthet" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="2096">
+ <rom name="stat.cas" size="2096" crc="3f117b61" sha1="b218de49081c4ede7885da412c79bcf625065eb7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stripx07">
+ <description>Strip X07 (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 116" />
+ <info name="release" value="19860103" />
+ <info name="author" value="C. Marguet" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="11693">
+ <rom name="strip x07.cas" size="11693" crc="34f2320f" sha1="ba2e8b82f2452a8ad1b6a19f3bb0dafd83bae802" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="supglout">
+ <description>Super Glouton (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 84" />
+ <info name="release" value="19850524" />
+ <info name="author" value="J. Chauvin" />
+ <part name="cass1" interface="x07_cass">
+ <dataarea name="cass" size="2243">
+ <rom name="super1_loader.cas" size="2243" crc="ab55c3f3" sha1="bf9d44f3ba25caa67c948c128607d6a19c828b62" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <dataarea name="cass" size="5187">
+ <rom name="super2_super glouton.cas" size="5187" crc="4fe78828" sha1="9d4219d830062a4a3161547744cc79136f7e6560" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="synth">
+ <description>Synthétiseur (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 77" />
+ <info name="release" value="19850405" />
+ <info name="author" value="S. Madrange" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="5288">
+ <rom name="synthetiseur.cas" size="5288" crc="7b4760a8" sha1="b5d43b28b432c1774e641eb8aed93799f20aa0cc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="temple">
+ <description>Temple (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 38" />
+ <info name="release" value="19840629" />
+ <info name="author" value="P. Leon" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3249">
+ <rom name="temple.cas" size="3249" crc="79c08cc7" sha1="adf2cc98258f731281dbcbf042ac897f75eb1e24" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tictacto">
+ <description>Tic-Tac-Toe (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="alt_title" value="Tridi 4" />
+ <info name="magazine" value="Hebdogiciel 67" />
+ <info name="release" value="19850125" />
+ <info name="author" value="C. Gautier" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="4948">
+ <rom name="tridi4.cas" size="4948" crc="c95fb36a" sha1="f2062db2fe281c22c0b99f7e664035f337bdb618" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tron">
+ <description>Tron (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 51" />
+ <info name="release" value="19841005" />
+ <info name="author" value="Jean Spriet" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3224">
+ <rom name="tron.cas" size="3224" crc="63ec9046" sha1="4bf08d39e8d7bd03fa056bb1967911fd8b54fc3e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="uboat">
+ <description>U~Boat (Fra)</description>
+ <year>1986</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 137" />
+ <info name="release" value="19860530" />
+ <info name="author" value="G. Combret" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="3253">
+ <rom name="uboat1.cas" size="3253" crc="bf7fcdb3" sha1="d55e91e7fef23c99cda9f9b94396c595bd81617c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hommeabt">
+ <description>Un Homme à Abattre (Fra)</description>
+ <year>1985</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 66" />
+ <info name="release" value="19850118" />
+ <info name="author" value="Cyril Giroux &amp; Denis Leluc" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="12197">
+ <rom name="un homme a abattre.cas" size="12197" crc="2b7d3490" sha1="1d5d696b0d58655492afe641725f7f63e9e60237" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="x07car">
+ <description>X07 CAR (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 39" />
+ <info name="release" value="19840706" />
+ <info name="author" value="G. Bouquet" />
+ <part name="cass" interface="x07_cass">
+ <dataarea name="cass" size="1803">
+ <rom name="x07car.cas" size="1803" crc="81cdfce6" sha1="e841ed70f7a10cda1d87b359be869b0473bcae28" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="utils">
+ <description>Utilitaires (Fra)</description>
+ <year>1984</year>
+ <publisher>&lt;type-in&gt;</publisher>
+ <info name="magazine" value="Hebdogiciel 19" />
+ <info name="release" value="19840217" />
+ <info name="author" value="Bernard Dupin" />
+ <part name="cass1" interface="x07_cass">
+ <feature name="part_id" value="DIR" />
+ <dataarea name="cass" size="289">
+ <rom name="4utilitaires_dir.cas" size="289" crc="1884630b" sha1="b175b2e2271b92fbafecd3bb172924271eef1f7b" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="x07_cass">
+ <feature name="part_id" value="DATEUR" />
+ <dataarea name="cass" size="250">
+ <rom name="4utilitaires_dateur.cas" size="250" crc="77b155ff" sha1="38f535eacbaf8e5cc5e0e6b435ab9c8e4dd9b24d" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="x07_cass">
+ <feature name="part_id" value="NUMERO" />
+ <dataarea name="cass" size="244">
+ <rom name="4utilitaires_numero.cas" size="244" crc="24b49d0d" sha1="aaaf368ae838e7c948767782f4ff1b1958ccf5ff" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass4" interface="x07_cass">
+ <feature name="part_id" value="DATE" />
+ <dataarea name="cass" size="278">
+ <rom name="4utilitaires_date.cas" size="278" crc="f2840be8" sha1="ce75ecdd3e5cfdd87afbc563570e446d2a601090" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+</softwarelist>
diff --git a/makefile b/makefile
index 0c7aac71a64..5584f847e92 100644
--- a/makefile
+++ b/makefile
@@ -910,7 +910,7 @@ $(EMULATOR): $(EMUINFOOBJ) $(DRIVLISTOBJ) $(DRVLIBS) $(LIBOSD) $(LIBBUS) $(LIBOP
$(CC) $(CDEFS) $(CFLAGS) -c $(SRC)/version.c -o $(VERSIONOBJ)
@echo Linking $@...
ifeq ($(TARGETOS),emscripten)
- # Emscripten's linker seems to be stricter about the ordering of .a files
+# Emscripten's linker seems to be stricter about the ordering of .a files
$(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) -Wl,--start-group $^ -Wl,--end-group $(LIBS) -o $@
else
$(LD) $(LDFLAGS) $(LDFLAGSEMULATOR) $(VERSIONOBJ) $^ $(LIBS) -o $@
diff --git a/src/build/flags_clang.mak b/src/build/flags_clang.mak
index 5aaa56d1c8b..daa2fee187c 100644
--- a/src/build/flags_clang.mak
+++ b/src/build/flags_clang.mak
@@ -20,10 +20,8 @@ ifeq ($(findstring 3.5,$(TEST_CLANG)),3.5)
CCOMFLAGS += -Wno-inline-new-delete
# caused by src/mess/drivers/x07.c, src/osd/sdl/window.c, src/emu/sound/disc_mth.inc
CCOMFLAGS += -Wno-absolute-value
-# caused by src/emu/bus/isa/s3virge.c, src/emu/cpu/drcfe.c, src/emu/video/pc_vga.c
-CCOMFLAGS +=-Wno-dynamic-class-memaccess
# these were disabled because of bugs in older clang versions
-CCOMFLAGS += -Wformat-security
+CCOMFLAGS += -Wformat-security -Wconstant-logical-operand
# these show up when compiling as c++11
CCOMFLAGS += -Wno-deprecated-register -Wno-reserved-user-defined-literal -Wno-c++11-narrowing
# TODO: add proper detection of XCode 6.0.1
diff --git a/src/emu/bus/a2bus/a2pic.c b/src/emu/bus/a2bus/a2pic.c
index f22f89177c5..1e59f3673c9 100644
--- a/src/emu/bus/a2bus/a2pic.c
+++ b/src/emu/bus/a2bus/a2pic.c
@@ -22,7 +22,7 @@ const device_type A2BUS_PIC = &device_creator<a2bus_pic_device>;
#define PIC_CENTRONICS_TAG "pic_ctx"
MACHINE_CONFIG_FRAGMENT( pic )
- MCFG_CENTRONICS_ADD(PIC_CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(PIC_CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_DATA_INPUT_BUFFER("ctx_data_in")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(a2bus_pic_device, ack_w))
diff --git a/src/emu/bus/abckb/abc99.c b/src/emu/bus/abckb/abc99.c
index a4272a52213..972067ddf23 100644
--- a/src/emu/bus/abckb/abc99.c
+++ b/src/emu/bus/abckb/abc99.c
@@ -49,7 +49,6 @@ Notes:
- verify cursor keys
- language DIP
- mouse
- - investigate unknown ROMs
- MCS-48 PC:01DC - Unimplemented opcode = 75
- 75 = ENT0 CLK : enable CLK (unscaled_clock/3) output on T0
- halt Z2 when Z5 is reset, resume Z2 when Z5 executes ENT0 CLK instruction
@@ -81,15 +80,17 @@ const device_type ABC99 = &device_creator<abc99_device>;
//-------------------------------------------------
ROM_START( abc99 )
- ROM_REGION( 0x800, I8035_Z2_TAG, 0 )
- ROM_LOAD( "107268-17.z3", 0x000, 0x800, CRC(2f60cc35) SHA1(ebc6af9cd0a49a0d01698589370e628eebb6221c) )
+ ROM_DEFAULT_BIOS("107268")
+ ROM_SYSTEM_BIOS( 0, "107268", "107268-17" )
+ ROM_SYSTEM_BIOS( 1, "106819", "106819-09" )
- ROM_REGION( 0x800, I8035_Z5_TAG, 0 )
- ROM_LOAD( "107268-16.z6", 0x000, 0x800, CRC(785ec0c6) SHA1(0b261beae20dbc06fdfccc50b19ea48b5b6e22eb) )
+ ROM_REGION( 0x1000, I8035_Z2_TAG, 0 )
+ ROMX_LOAD( "107268-17.z3", 0x0000, 0x0800, CRC(2f60cc35) SHA1(ebc6af9cd0a49a0d01698589370e628eebb6221c), ROM_BIOS(1) )
+ ROMX_LOAD( "106819-09.z3", 0x0000, 0x1000, CRC(ffe32a71) SHA1(fa2ce8e0216a433f9bbad0bdd6e3dc0b540f03b7), ROM_BIOS(2) ) // ABC 99 6490423-01
- ROM_REGION( 0x1800, "unknown", 0)
- ROM_LOAD( "106819-09.bin", 0x0000, 0x1000, CRC(ffe32a71) SHA1(fa2ce8e0216a433f9bbad0bdd6e3dc0b540f03b7) )
- ROM_LOAD( "107268-64.bin", 0x1000, 0x0800, CRC(e33683ae) SHA1(0c1d9e320f82df05f4804992ef6f6f6cd20623f3) )
+ ROM_REGION( 0x800, I8035_Z5_TAG, 0 )
+ ROMX_LOAD( "107268-16.z6", 0x0000, 0x0800, CRC(785ec0c6) SHA1(0b261beae20dbc06fdfccc50b19ea48b5b6e22eb), ROM_BIOS(1) )
+ ROMX_LOAD( "107268-64.z6", 0x0000, 0x0800, CRC(e33683ae) SHA1(0c1d9e320f82df05f4804992ef6f6f6cd20623f3), ROM_BIOS(2) )
ROM_END
@@ -108,7 +109,7 @@ const rom_entry *abc99_device::device_rom_region() const
//-------------------------------------------------
static ADDRESS_MAP_START( abc99_z2_mem, AS_PROGRAM, 8, abc99_device )
- AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION(I8035_Z2_TAG, 0)
+ AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION(I8035_Z2_TAG, 0)
ADDRESS_MAP_END
@@ -488,24 +489,24 @@ inline void abc99_device::scan_mouse()
// abc99_device - constructor
//-------------------------------------------------
-abc99_device::abc99_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, ABC99, "Luxor ABC 99", tag, owner, clock, "abc99", __FILE__),
- abc_keyboard_interface(mconfig, *this),
- m_maincpu(*this, I8035_Z2_TAG),
- m_mousecpu(*this, I8035_Z5_TAG),
- m_speaker(*this, "speaker"),
- m_z14(*this, "Z14"),
- m_mouseb(*this, "MOUSEB"),
- m_si(1),
- m_si_en(1),
- m_so_z2(1),
- m_so_z5(1),
- m_keydown(0),
- m_t1_z2(0),
- m_t1_z5(0),
- m_led_en(0),
- m_reset(1),
- m_txd(1)
+abc99_device::abc99_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, ABC99, "Luxor ABC 99", tag, owner, clock, "abc99", __FILE__),
+ abc_keyboard_interface(mconfig, *this),
+ m_maincpu(*this, I8035_Z2_TAG),
+ m_mousecpu(*this, I8035_Z5_TAG),
+ m_speaker(*this, "speaker"),
+ m_z14(*this, "Z14"),
+ m_mouseb(*this, "MOUSEB"),
+ m_si(1),
+ m_si_en(1),
+ m_so_z2(1),
+ m_so_z5(1),
+ m_keydown(0),
+ m_t1_z2(0),
+ m_t1_z5(0),
+ m_led_en(0),
+ m_reset(1),
+ m_txd(1)
{
}
diff --git a/src/emu/bus/adam/ide.c b/src/emu/bus/adam/ide.c
index 8b8772b3292..0eb1dd087ea 100644
--- a/src/emu/bus/adam/ide.c
+++ b/src/emu/bus/adam/ide.c
@@ -65,7 +65,7 @@ const rom_entry *powermate_ide_device::device_rom_region() const
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( adam_ata )
MCFG_ATA_INTERFACE_ADD(ATA_TAG, ata_devices, "hdd", NULL, false)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
MACHINE_CONFIG_END
diff --git a/src/emu/bus/adamnet/spi.c b/src/emu/bus/adamnet/spi.c
index f45abbe2672..8b0c5e15d52 100644
--- a/src/emu/bus/adamnet/spi.c
+++ b/src/emu/bus/adamnet/spi.c
@@ -85,7 +85,7 @@ static MACHINE_CONFIG_FRAGMENT( adam_spi )
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_DATA_INPUT_BUFFER("cent_data_in")
MCFG_DEVICE_ADD("cent_data_in", INPUT_BUFFER, 0)
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/emu/bus/astrocde/exp.c b/src/emu/bus/astrocde/exp.c
new file mode 100644
index 00000000000..53ff66213d7
--- /dev/null
+++ b/src/emu/bus/astrocde/exp.c
@@ -0,0 +1,85 @@
+// license:BSD-3-Clause
+// copyright-holders:etabeta
+/***********************************************************************************************************
+
+ Bally Astrocade Expansion port
+
+ ***********************************************************************************************************/
+
+
+#include "emu.h"
+#include "exp.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+const device_type ASTROCADE_EXP_SLOT = &device_creator<astrocade_exp_device>;
+
+
+device_astrocade_card_interface::device_astrocade_card_interface(const machine_config &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+{
+}
+
+
+device_astrocade_card_interface::~device_astrocade_card_interface()
+{
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// astrocade_exp_device - constructor
+//-------------------------------------------------
+astrocade_exp_device::astrocade_exp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, ASTROCADE_EXP_SLOT, "Bally Astrocade expansion", tag, owner, clock, "astrocde_exp", __FILE__),
+ device_slot_interface(mconfig, *this),
+ m_card_mounted(false)
+{
+}
+
+
+//-------------------------------------------------
+// astrocade_exp_device - destructor
+//-------------------------------------------------
+
+astrocade_exp_device::~astrocade_exp_device()
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void astrocade_exp_device::device_start()
+{
+ m_card = dynamic_cast<device_astrocade_card_interface *>(get_card_device());
+ if (m_card)
+ m_card_mounted = true;
+}
+
+/*-------------------------------------------------
+ read
+ -------------------------------------------------*/
+
+READ8_MEMBER(astrocade_exp_device::read)
+{
+ if (m_card)
+ return m_card->read(space, offset);
+ else
+ return 0xff;
+}
+
+/*-------------------------------------------------
+ write
+ -------------------------------------------------*/
+
+WRITE8_MEMBER(astrocade_exp_device::write)
+{
+ if (m_card)
+ m_card->write(space, offset, data);
+}
diff --git a/src/emu/bus/astrocde/exp.h b/src/emu/bus/astrocde/exp.h
new file mode 100644
index 00000000000..bbd8c0b6465
--- /dev/null
+++ b/src/emu/bus/astrocde/exp.h
@@ -0,0 +1,57 @@
+// license:BSD-3-Clause
+// copyright-holders:etabeta
+#ifndef __ASTROCADE_EXP_H
+#define __ASTROCADE_EXP_H
+
+// ======================> device_astrocade_card_interface
+
+class device_astrocade_card_interface : public device_slot_card_interface
+{
+public:
+ // construction/destruction
+ device_astrocade_card_interface(const machine_config &mconfig, device_t &device);
+ virtual ~device_astrocade_card_interface();
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read) { return 0xff; }
+ virtual DECLARE_WRITE8_MEMBER(write) {}
+
+protected:
+};
+
+
+// ======================> astrocade_exp_device
+
+class astrocade_exp_device : public device_t,
+ public device_slot_interface
+{
+public:
+ // construction/destruction
+ astrocade_exp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ virtual ~astrocade_exp_device();
+
+ // device-level overrides
+ virtual void device_start();
+
+ bool get_card_mounted() { return m_card_mounted; }
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read);
+ virtual DECLARE_WRITE8_MEMBER(write);
+
+protected:
+ bool m_card_mounted;
+ device_astrocade_card_interface* m_card;
+};
+
+
+
+// device type definition
+extern const device_type ASTROCADE_EXP_SLOT;
+
+
+#define MCFG_ASTROCADE_EXPANSION_SLOT_ADD(_tag, _slot_intf, _def_slot) \
+ MCFG_DEVICE_ADD(_tag, ASTROCADE_EXP_SLOT, 0) \
+ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
+
+#endif
diff --git a/src/emu/bus/astrocde/ram.c b/src/emu/bus/astrocde/ram.c
new file mode 100644
index 00000000000..41f79e176e9
--- /dev/null
+++ b/src/emu/bus/astrocde/ram.c
@@ -0,0 +1,213 @@
+// license:BSD-3-Clause
+// copyright-holders:etabeta
+/***********************************************************************************************************
+
+
+ Bally Astrocade RAM expansion emulation
+
+ RAM Expansions (info below courtesy of Paul Thacker)
+
+ Several third party RAM expansions have been made for the Astrocade. These
+ allow access to various ranges of the expansion memory ($5000 to $FFFF).
+ A RAM expansion is required to use extended BASIC programs like Blue RAM BASIC
+ and VIPERSoft BASIC. All of the expansions also have a RAM protect switch, which
+ can be flipped at any time to make the RAM act like ROM. Extended BASIC
+ programs need access to the RAM and won't work with RAM protect enabled, but
+ this can be useful with Bally and Astrocade BASIC. They also have a range switch
+ (not implemented). The default position is 6K, but it can be switched to
+ 2K. This means that the expanded memory starting at $6000 will instead be
+ mapped to the cartridge memory starting at $2000. So it would be possible to
+ load a cartridge program from tape into the expansion memory, then flip the range
+ switch and run it as a cartridge. This is useful for cartridge development.
+
+ Blue RAM -- available in 4K, 16K, and 32K. These also use an INS8154 chip,
+ (not yet implemented) which has an additional $80 bytes of RAM mapped
+ immediately after the end of the expansion address space. This memory
+ can't be write protected. The INS8154 has I/O features needed for loading
+ tape programs into Blue RAM BASIC, as well as running the Blue RAM Utility cart.
+ 4K: $6000 to $6FFF (can't run VIPERSoft BASIC, because this program needs memory
+ past this range)
+ 16K: $6000 to $9FFF
+ 32K: $6000 to $DFFF
+
+ VIPER System 1 -- This is available in 16K only. It also includes a keyboard (not implemented).
+ 16K: $6000 to $9FFF
+
+ Lil' WHITE RAM -- This is available in 32K only. Attempts to read and write
+ to memory outside of its address range ($D000 to $FFFF) are mapped to the expansion
+ memory $5000 to $7FFF. The current implementation won't allow the shadow RAM area
+ to be accessed when RAM protect is on, but there is no known software that will
+ access the upper range of the expansion RAM when RAM protect is enabled.
+ 32K: $5000 to $CFFF
+
+ R&L 64K RAM Board -- This is a highly configurable kit. RAM can be installed in
+ 2K increments. So, the entire 44K expansion memory can be filled. It is also
+ possible to override the rest of the memory map with RAM (not implemented).
+ There are 32 switches allowing users to activate and deactivate each 2K block (not implemented).
+ RAM write protection can be implemented in three ranges through jumpers or by
+ installing switches. The ranges are $0000 to $0FFF (first 4K), $0000 to $3FFF (first 16K),
+ and $0000 to $FFFF (all 64K). The current implementation is for 44K expansion memory mapped from
+ $5000 to $FFFF, with only a single write protect covering this entire range.
+
+ ***********************************************************************************************************/
+
+
+#include "emu.h"
+#include "ram.h"
+
+
+//-------------------------------------------------
+// astrocade_rom_device - constructor
+//-------------------------------------------------
+
+const device_type ASTROCADE_BLUERAM_4K = &device_creator<astrocade_blueram_4k_device>;
+const device_type ASTROCADE_BLUERAM_16K = &device_creator<astrocade_blueram_16k_device>;
+const device_type ASTROCADE_BLUERAM_32K = &device_creator<astrocade_blueram_32k_device>;
+const device_type ASTROCADE_VIPER_SYS1 = &device_creator<astrocade_viper_sys1_device>;
+const device_type ASTROCADE_WHITERAM = &device_creator<astrocade_whiteram_device>;
+const device_type ASTROCADE_RL64RAM = &device_creator<astrocade_rl64ram_device>;
+
+
+astrocade_blueram_4k_device::astrocade_blueram_4k_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
+ device_astrocade_card_interface(mconfig, *this),
+ m_write_prot(*this, "RAM_PROTECT")
+{
+}
+
+astrocade_blueram_4k_device::astrocade_blueram_4k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, ASTROCADE_BLUERAM_4K, "Bally Astrocade Blue RAM 4K", tag, owner, clock, "astrocade_br4", __FILE__),
+ device_astrocade_card_interface(mconfig, *this),
+ m_write_prot(*this, "RAM_PROTECT")
+{
+}
+
+astrocade_blueram_16k_device::astrocade_blueram_16k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : astrocade_blueram_4k_device(mconfig, ASTROCADE_BLUERAM_16K, "Bally Astrocade Blue RAM 16K", tag, owner, clock, "astrocade_br16", __FILE__)
+{
+}
+
+astrocade_blueram_32k_device::astrocade_blueram_32k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : astrocade_blueram_4k_device(mconfig, ASTROCADE_BLUERAM_32K, "Bally Astrocade Blue RAM 32K", tag, owner, clock, "astrocade_br32", __FILE__)
+{
+}
+
+astrocade_viper_sys1_device::astrocade_viper_sys1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, ASTROCADE_VIPER_SYS1, "Bally Astrocade Viper System 1", tag, owner, clock, "astrocade_vs1", __FILE__),
+ device_astrocade_card_interface(mconfig, *this),
+ m_write_prot(*this, "RAM_PROTECT")
+{
+}
+
+astrocade_whiteram_device::astrocade_whiteram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, ASTROCADE_WHITERAM, "Bally Astrocade Lil' White RAM 32K", tag, owner, clock, "astrocade_lwr", __FILE__),
+ device_astrocade_card_interface(mconfig, *this),
+ m_write_prot(*this, "RAM_PROTECT")
+{
+}
+
+astrocade_rl64ram_device::astrocade_rl64ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, ASTROCADE_RL64RAM, "Bally Astrocade R&L RAM 64K", tag, owner, clock, "astrocade_rl64", __FILE__),
+ device_astrocade_card_interface(mconfig, *this),
+ m_write_prot(*this, "RAM_PROTECT")
+{
+}
+
+
+//-------------------------------------------------
+// RAM Write protect switch
+//-------------------------------------------------
+
+static INPUT_PORTS_START( exp_switches )
+ PORT_START("RAM_PROTECT")
+ PORT_CONFNAME( 0x01, 0x00, "Write Protect RAM")
+ PORT_CONFSETTING( 0x00, DEF_STR(Off))
+ PORT_CONFSETTING( 0x01, DEF_STR(On))
+INPUT_PORTS_END
+
+
+ioport_constructor astrocade_blueram_4k_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( exp_switches );
+}
+
+ioport_constructor astrocade_viper_sys1_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( exp_switches );
+}
+
+ioport_constructor astrocade_whiteram_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( exp_switches );
+}
+
+ioport_constructor astrocade_rl64ram_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( exp_switches );
+}
+
+/*-------------------------------------------------
+ specific handlers
+ -------------------------------------------------*/
+
+// Blue RAM expansions have RAM starting at 0x6000, up to the RAM size
+READ8_MEMBER(astrocade_blueram_4k_device::read)
+{
+ if (offset >= 0x1000 && offset < 0x1000 + m_ram.bytes())
+ return m_ram[offset - 0x1000];
+ else
+ return 0;
+}
+
+WRITE8_MEMBER(astrocade_blueram_4k_device::write)
+{
+ if (offset >= 0x1000 && offset < 0x1000 + m_ram.bytes() && !m_write_prot->read())
+ m_ram[offset - 0x1000] = data;
+}
+
+
+
+// Viper System 1 expansion has RAM in 0x6000-0x9fff
+READ8_MEMBER(astrocade_viper_sys1_device::read)
+{
+ if (offset >= 0x1000 && offset < 0xa000)
+ return m_ram[offset - 0x1000];
+ else
+ return 0;
+}
+
+WRITE8_MEMBER(astrocade_viper_sys1_device::write)
+{
+ if (offset >= 0x1000 && offset < 0xa000 && !m_write_prot->read())
+ m_ram[offset - 0x1000] = data;
+}
+
+
+
+// Lil' WHITE RAM expansion has RAM in 0x5000-0xcfff + a mirror of the first 0x3000 bytes up to 0xffff
+READ8_MEMBER(astrocade_whiteram_device::read)
+{
+ return m_ram[offset % 0x8000];
+}
+
+WRITE8_MEMBER(astrocade_whiteram_device::write)
+{
+ if (!m_write_prot->read())
+ m_ram[offset % 0x8000] = data;
+}
+
+
+
+// R&L 64K RAM Board (44KB installed) has RAM in 0x5000-0xffff
+READ8_MEMBER(astrocade_rl64ram_device::read)
+{
+ return m_ram[offset];
+}
+
+WRITE8_MEMBER(astrocade_rl64ram_device::write)
+{
+ if (!m_write_prot->read())
+ m_ram[offset] = data;
+}
+
+
diff --git a/src/emu/bus/astrocde/ram.h b/src/emu/bus/astrocde/ram.h
new file mode 100644
index 00000000000..8434249cdee
--- /dev/null
+++ b/src/emu/bus/astrocde/ram.h
@@ -0,0 +1,135 @@
+// license:BSD-3-Clause
+// copyright-holders:etabeta
+#ifndef __ASTROCADE_RAM_H
+#define __ASTROCADE_RAM_H
+
+#include "exp.h"
+
+
+// ======================> astrocade_blueram_4k_device
+
+class astrocade_blueram_4k_device : public device_t,
+ public device_astrocade_card_interface
+{
+public:
+ // construction/destruction
+ astrocade_blueram_4k_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+ astrocade_blueram_4k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start() { m_ram.resize(0x1000); save_item(NAME(m_ram)); }
+ virtual void device_reset() {}
+ virtual ioport_constructor device_input_ports() const;
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read);
+ virtual DECLARE_WRITE8_MEMBER(write);
+
+protected:
+ dynamic_buffer m_ram;
+ required_ioport m_write_prot;
+};
+
+// ======================> astrocade_blueram_16k_device
+
+class astrocade_blueram_16k_device : public astrocade_blueram_4k_device
+{
+public:
+ // construction/destruction
+ astrocade_blueram_16k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ virtual void device_start() { m_ram.resize(0x4000); save_item(NAME(m_ram)); }
+};
+
+// ======================> astrocade_blueram_32k_device
+
+class astrocade_blueram_32k_device : public astrocade_blueram_4k_device
+{
+public:
+ // construction/destruction
+ astrocade_blueram_32k_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ virtual void device_start() { m_ram.resize(0x8000); save_item(NAME(m_ram)); }
+};
+
+// ======================> astrocade_viper_sys1_device
+
+class astrocade_viper_sys1_device : public device_t,
+ public device_astrocade_card_interface
+{
+public:
+ // construction/destruction
+ astrocade_viper_sys1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start() { m_ram.resize(0x4000); save_item(NAME(m_ram)); }
+ virtual void device_reset() {}
+ virtual ioport_constructor device_input_ports() const;
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read);
+ virtual DECLARE_WRITE8_MEMBER(write);
+
+private:
+ dynamic_buffer m_ram;
+ required_ioport m_write_prot;
+};
+
+// ======================> astrocade_whiteram_device
+
+class astrocade_whiteram_device : public device_t,
+ public device_astrocade_card_interface
+{
+public:
+ // construction/destruction
+ astrocade_whiteram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start() { m_ram.resize(0x8000); save_item(NAME(m_ram)); }
+ virtual void device_reset() {}
+ virtual ioport_constructor device_input_ports() const;
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read);
+ virtual DECLARE_WRITE8_MEMBER(write);
+
+private:
+ dynamic_buffer m_ram;
+ required_ioport m_write_prot;
+};
+
+// ======================> astrocade_rl64ram_device
+
+class astrocade_rl64ram_device : public device_t,
+ public device_astrocade_card_interface
+{
+public:
+ // construction/destruction
+ astrocade_rl64ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start() { m_ram.resize(0xb000); save_item(NAME(m_ram)); }
+ virtual void device_reset() {}
+ virtual ioport_constructor device_input_ports() const;
+
+ // reading and writing
+ virtual DECLARE_READ8_MEMBER(read);
+ virtual DECLARE_WRITE8_MEMBER(write);
+
+private:
+ dynamic_buffer m_ram;
+ required_ioport m_write_prot;
+};
+
+
+
+// device type definition
+extern const device_type ASTROCADE_BLUERAM_4K;
+extern const device_type ASTROCADE_BLUERAM_16K;
+extern const device_type ASTROCADE_BLUERAM_32K;
+extern const device_type ASTROCADE_VIPER_SYS1;
+extern const device_type ASTROCADE_WHITERAM;
+extern const device_type ASTROCADE_RL64RAM;
+
+
+#endif
diff --git a/src/emu/bus/bus.mak b/src/emu/bus/bus.mak
index f7e8b67e8d8..9a7420d11a9 100644
--- a/src/emu/bus/bus.mak
+++ b/src/emu/bus/bus.mak
@@ -129,6 +129,8 @@ ifneq ($(filter ASTROCADE,$(BUSES)),)
OBJDIRS += $(BUSOBJ)/astrocde
BUSOBJS += $(BUSOBJ)/astrocde/slot.o
BUSOBJS += $(BUSOBJ)/astrocde/rom.o
+BUSOBJS += $(BUSOBJ)/astrocde/exp.o
+BUSOBJS += $(BUSOBJ)/astrocde/ram.o
endif
@@ -331,6 +333,7 @@ BUSOBJS += $(BUSOBJ)/dmv/dmvbus.o
BUSOBJS += $(BUSOBJ)/dmv/k220.o
BUSOBJS += $(BUSOBJ)/dmv/k230.o
BUSOBJS += $(BUSOBJ)/dmv/k233.o
+BUSOBJS += $(BUSOBJ)/dmv/k803.o
BUSOBJS += $(BUSOBJ)/dmv/k806.o
BUSOBJS += $(BUSOBJ)/dmv/ram.o
endif
@@ -508,6 +511,7 @@ BUSOBJS += $(BUSOBJ)/isa/xsu_cards.o
BUSOBJS += $(BUSOBJ)/isa/sc499.o
BUSOBJS += $(BUSOBJ)/isa/aga.o
BUSOBJS += $(BUSOBJ)/isa/svga_trident.o
+BUSOBJS += $(BUSOBJ)/isa/num9rev.o
endif
#-------------------------------------------------
@@ -987,19 +991,19 @@ endif
#-------------------------------------------------
#
-#@src/emu/bus/pci/pci.h,BUSES += PCI
+#@src/emu/bus/lpci/pci.h,BUSES += LPCI
#-------------------------------------------------
-ifneq ($(filter PCI,$(BUSES)),)
-OBJDIRS += $(BUSOBJ)/pci
-BUSOBJS += $(BUSOBJ)/pci/pci.o
-BUSOBJS += $(BUSOBJ)/pci/cirrus.o
-BUSOBJS += $(BUSOBJ)/pci/i82371ab.o
-BUSOBJS += $(BUSOBJ)/pci/i82371sb.o
-BUSOBJS += $(BUSOBJ)/pci/i82439tx.o
-BUSOBJS += $(BUSOBJ)/pci/northbridge.o
-BUSOBJS += $(BUSOBJ)/pci/southbridge.o
-BUSOBJS += $(BUSOBJ)/pci/mpc105.o
+ifneq ($(filter LPCI,$(BUSES)),)
+OBJDIRS += $(BUSOBJ)/lpci
+BUSOBJS += $(BUSOBJ)/lpci/pci.o
+BUSOBJS += $(BUSOBJ)/lpci/cirrus.o
+BUSOBJS += $(BUSOBJ)/lpci/i82371ab.o
+BUSOBJS += $(BUSOBJ)/lpci/i82371sb.o
+BUSOBJS += $(BUSOBJ)/lpci/i82439tx.o
+BUSOBJS += $(BUSOBJ)/lpci/northbridge.o
+BUSOBJS += $(BUSOBJ)/lpci/southbridge.o
+BUSOBJS += $(BUSOBJ)/lpci/mpc105.o
endif
#-------------------------------------------------
@@ -1292,6 +1296,7 @@ BUSOBJS += $(BUSOBJ)/cpc/cpc_rs232.o
BUSOBJS += $(BUSOBJ)/cpc/mface2.o
BUSOBJS += $(BUSOBJ)/cpc/symbfac2.o
BUSOBJS += $(BUSOBJ)/cpc/amdrum.o
+BUSOBJS += $(BUSOBJ)/cpc/playcity.o
endif
#-------------------------------------------------
diff --git a/src/emu/bus/c64/geocable.c b/src/emu/bus/c64/geocable.c
index 3f7b9f0f719..98deb96f93e 100644
--- a/src/emu/bus/c64/geocable.c
+++ b/src/emu/bus/c64/geocable.c
@@ -33,7 +33,7 @@ const device_type C64_GEOCABLE = &device_creator<c64_geocable_device>;
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( c64_geocable )
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(c64_geocable_device, output_b))
MACHINE_CONFIG_END
diff --git a/src/emu/bus/cbmiec/c1541.c b/src/emu/bus/cbmiec/c1541.c
index 7f00594f35c..a2dc778bbd5 100644
--- a/src/emu/bus/cbmiec/c1541.c
+++ b/src/emu/bus/cbmiec/c1541.c
@@ -887,7 +887,7 @@ static MACHINE_CONFIG_FRAGMENT( c1541pdc )
MCFG_PIA_WRITEPB_HANDLER(WRITE8(c1541_prologic_dos_classic_device, pia_pb_w))
MCFG_PIA_CA2_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(MC6821_TAG, pia6821_device, ca1_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
MACHINE_CONFIG_END
diff --git a/src/emu/bus/centronics/ctronics.c b/src/emu/bus/centronics/ctronics.c
index 024d348171d..b7c87a3b79b 100644
--- a/src/emu/bus/centronics/ctronics.c
+++ b/src/emu/bus/centronics/ctronics.c
@@ -120,12 +120,15 @@ device_centronics_peripheral_interface::~device_centronics_peripheral_interface(
#include "epson_ex800.h"
#include "epson_lx800.h"
#include "printer.h"
+#include "covox.h"
-SLOT_INTERFACE_START(centronics_printers)
+SLOT_INTERFACE_START(centronics_devices)
SLOT_INTERFACE("pl80", COMX_PL80)
SLOT_INTERFACE("ex800", EPSON_EX800)
SLOT_INTERFACE("lx800", EPSON_LX800)
SLOT_INTERFACE("lx810l", EPSON_LX810L)
SLOT_INTERFACE("ap2000", EPSON_AP2000)
SLOT_INTERFACE("printer", CENTRONICS_PRINTER)
+ SLOT_INTERFACE("covox", CENTRONICS_COVOX)
+ SLOT_INTERFACE("covox_stereo", CENTRONICS_COVOX_STEREO)
SLOT_INTERFACE_END
diff --git a/src/emu/bus/centronics/ctronics.h b/src/emu/bus/centronics/ctronics.h
index 9dc450cc2e0..5f7d5df0048 100644
--- a/src/emu/bus/centronics/ctronics.h
+++ b/src/emu/bus/centronics/ctronics.h
@@ -218,6 +218,6 @@ protected:
};
-SLOT_INTERFACE_EXTERN( centronics_printers );
+SLOT_INTERFACE_EXTERN( centronics_devices );
#endif
diff --git a/src/emu/bus/comx35/printer.c b/src/emu/bus/comx35/printer.c
index 82bbe30fe44..1851865b73f 100644
--- a/src/emu/bus/comx35/printer.c
+++ b/src/emu/bus/comx35/printer.c
@@ -54,21 +54,11 @@ const rom_entry *comx_prn_device::device_rom_region() const
//-------------------------------------------------
-// SLOT_INTERFACE( comx_centronics_printer )
-//-------------------------------------------------
-
-SLOT_INTERFACE_START(comx_centronics_printer)
- SLOT_INTERFACE("printer", CENTRONICS_PRINTER)
- //SLOT_INTERFACE("pl80", COMX_PL80)
-SLOT_INTERFACE_END
-
-
-//-------------------------------------------------
// MACHINE_CONFIG_FRAGMENT( comx_prn )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( comx_prn )
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, comx_centronics_printer, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit0))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit1))
MCFG_CENTRONICS_PERROR_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit2))
diff --git a/src/emu/bus/cpc/cpcexp.h b/src/emu/bus/cpc/cpcexp.h
index f7ac370b86b..06cf61e1e70 100644
--- a/src/emu/bus/cpc/cpcexp.h
+++ b/src/emu/bus/cpc/cpcexp.h
@@ -78,6 +78,7 @@ public:
// reset
virtual void cpc_reset_w() { };
+ virtual WRITE_LINE_MEMBER( cursor_w ) { };
void set_rom_bank(UINT8 sel) { m_rom_sel = sel; } // tell device the currently selected ROM
UINT8 get_rom_bank() { return m_rom_sel; }
@@ -108,6 +109,7 @@ public:
DECLARE_WRITE_LINE_MEMBER( romdis_w );
void set_rom_bank(UINT8 sel) { if(m_card) m_card->set_rom_bank(sel); } // tell device the currently selected ROM
+ DECLARE_WRITE_LINE_MEMBER( cursor_w ) { if(m_card) m_card->cursor_w(state); } // pass on CRTC Cursor signal
protected:
// device-level overrides
diff --git a/src/emu/bus/cpc/playcity.c b/src/emu/bus/cpc/playcity.c
new file mode 100644
index 00000000000..e6803ffb049
--- /dev/null
+++ b/src/emu/bus/cpc/playcity.c
@@ -0,0 +1,161 @@
+/*
+ PlayCity expansion device
+
+ Z80 CTC
+ 2x YMZ294 (clocks provided by CTC)
+
+ TODO:
+ IRQs aren't working currently, the Z80CTC core requires the daisy chain setup to acknowledge IRQs properly, and that can't be used in a slot device currently.
+*/
+
+#include "playcity.h"
+#include "includes/amstrad.h"
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type CPC_PLAYCITY = &device_creator<cpc_playcity_device>;
+
+// device machine config
+static MACHINE_CONFIG_FRAGMENT( cpc_playcity )
+ MCFG_DEVICE_ADD("ctc", Z80CTC, XTAL_4MHz)
+ MCFG_Z80CTC_ZC1_CB(WRITELINE(cpc_playcity_device,ctc_zc1_cb))
+ MCFG_Z80CTC_ZC2_CB(DEVWRITELINE("ctc",z80ctc_device,trg3))
+ MCFG_Z80CTC_INTR_CB(WRITELINE(cpc_playcity_device,ctc_intr_cb))
+
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker")
+ MCFG_SOUND_ADD("ymz_1",YMZ294,XTAL_4MHz) // when timer is not set, operates at 4MHz (interally divided by 2, so equivalent to the ST)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.30)
+ MCFG_SOUND_ADD("ymz_2",YMZ294,XTAL_4MHz)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.30)
+
+ // pass-through
+ MCFG_DEVICE_ADD("exp", CPC_EXPANSION_SLOT, 0)
+ MCFG_DEVICE_SLOT_INTERFACE(cpc_exp_cards, NULL, false)
+ MCFG_CPC_EXPANSION_SLOT_OUT_IRQ_CB(DEVWRITELINE("^", cpc_expansion_slot_device, irq_w))
+ MCFG_CPC_EXPANSION_SLOT_OUT_NMI_CB(DEVWRITELINE("^", cpc_expansion_slot_device, nmi_w))
+ MCFG_CPC_EXPANSION_SLOT_OUT_ROMDIS_CB(DEVWRITELINE("^", cpc_expansion_slot_device, romdis_w)) // ROMDIS
+
+MACHINE_CONFIG_END
+
+
+machine_config_constructor cpc_playcity_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( cpc_playcity );
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+cpc_playcity_device::cpc_playcity_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, CPC_PLAYCITY, "PlayCity", tag, owner, clock, "cpc_playcity", __FILE__),
+ device_cpc_expansion_card_interface(mconfig, *this),
+ m_ctc(*this,"ctc"),
+ m_ymz1(*this,"ymz_1"),
+ m_ymz2(*this,"ymz_2")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void cpc_playcity_device::device_start()
+{
+ device_t* cpu = machine().device("maincpu");
+ address_space& space = cpu->memory().space(AS_IO);
+ m_slot = dynamic_cast<cpc_expansion_slot_device *>(owner());
+
+ space.install_readwrite_handler(0xf880,0xf883,0,0,read8_delegate(FUNC(cpc_playcity_device::ctc_r),this),write8_delegate(FUNC(cpc_playcity_device::ctc_w),this));
+ space.install_readwrite_handler(0xf884,0xf884,0,0,read8_delegate(FUNC(cpc_playcity_device::ymz1_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz1_data_w),this));
+ space.install_readwrite_handler(0xf888,0xf888,0,0,read8_delegate(FUNC(cpc_playcity_device::ymz2_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz2_data_w),this));
+ space.install_write_handler(0xf984,0xf984,0,0,write8_delegate(FUNC(cpc_playcity_device::ymz1_address_w),this));
+ space.install_write_handler(0xf988,0xf988,0,0,write8_delegate(FUNC(cpc_playcity_device::ymz2_address_w),this));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void cpc_playcity_device::device_reset()
+{
+}
+
+
+READ8_MEMBER(cpc_playcity_device::ctc_r)
+{
+ return m_ctc->read(space,offset);
+}
+
+WRITE8_MEMBER(cpc_playcity_device::ctc_w)
+{
+ m_ctc->write(space,offset,data);
+ if(offset == 0)
+ update_ymz_clock();
+}
+
+WRITE8_MEMBER(cpc_playcity_device::ymz1_address_w)
+{
+ m_ymz1->address_w(space,offset,data);
+}
+
+WRITE8_MEMBER(cpc_playcity_device::ymz2_address_w)
+{
+ m_ymz2->address_w(space,offset,data);
+}
+
+WRITE8_MEMBER(cpc_playcity_device::ymz1_data_w)
+{
+ m_ymz1->data_w(space,offset,data);
+}
+
+WRITE8_MEMBER(cpc_playcity_device::ymz2_data_w)
+{
+ m_ymz2->data_w(space,offset,data);
+}
+
+READ8_MEMBER(cpc_playcity_device::ymz1_data_r)
+{
+ return m_ymz1->data_r(space,offset);
+}
+
+READ8_MEMBER(cpc_playcity_device::ymz2_data_r)
+{
+ return m_ymz2->data_r(space,offset);
+}
+
+void cpc_playcity_device::update_ymz_clock()
+{
+ // Bit of a hack job here, since there is no way currently to connect the CTC channel output directly to the YMZ clocks.
+ UINT8 rate = m_ctc->get_channel_constant(0);
+ UINT32 clk = XTAL_4MHz;
+
+ switch(rate)
+ {
+ case 0x00: clk = 3980000; break;
+ case 0x01: clk = 2000000; break;
+ case 0x02: clk = 3000000; break;
+ case 0x03: clk = 3330000; break;
+ case 0x04: clk = 3500000; break;
+ case 0x05: clk = 3600000; break;
+ case 0x06: clk = 3670000; break;
+ case 0x07: clk = 3710000; break;
+ case 0x08: clk = 3750000; break;
+ case 0x09: clk = 3780000; break;
+ case 0x0a: clk = 3800000; break;
+ case 0x0b: clk = 3820000; break;
+ case 0x0c: clk = 3830000; break;
+ case 0x0d: clk = 3850000; break;
+ case 0x0e: clk = 3860000; break;
+ case 0x0f: clk = 3870000; break;
+ }
+
+ clk = clk / 2; // YMZ294 has an internal /2 divider (not handled in AY core?)
+ m_ymz1->ay_set_clock(clk);
+ m_ymz2->ay_set_clock(clk);
+ popmessage("YMZ clocks set to %d Hz",clk);
+}
+
diff --git a/src/emu/bus/cpc/playcity.h b/src/emu/bus/cpc/playcity.h
new file mode 100644
index 00000000000..0f904da3bc3
--- /dev/null
+++ b/src/emu/bus/cpc/playcity.h
@@ -0,0 +1,67 @@
+/*
+ PlayCity expansion device
+
+ I/O ports:
+ * F880 - Z80CTC channel 0 (input is system clock (4MHz), output to YMZ294 clock)
+ * F881 - Z80CTC channel 1 (input from CRTC CURSOR, output to /NMI)
+ * F882 - Z80CTC channel 2 (input is system clock (4MHz), output to channel 3 input)
+ * F883 - Z80CTC channel 3 (input is channel 2 output)
+ * F884 - YMZ294 #1 (right) data
+ * F888 - YMZ294 #2 (left) data
+ * F984 - YMZ294 #1 (right) register select
+ * F988 - YMZ294 #2 (left) register select
+*/
+
+#ifndef CPC_PLAYCITY_H_
+#define CPC_PLAYCITY_H_
+
+
+#include "emu.h"
+#include "cpcexp.h"
+#include "sound/ay8910.h"
+#include "machine/z80ctc.h"
+
+class cpc_playcity_device : public device_t,
+ public device_cpc_expansion_card_interface
+{
+public:
+ // construction/destruction
+ cpc_playcity_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+ DECLARE_READ8_MEMBER(ctc_r);
+ DECLARE_WRITE8_MEMBER(ctc_w);
+ DECLARE_WRITE8_MEMBER(ymz1_address_w);
+ DECLARE_WRITE8_MEMBER(ymz2_address_w);
+ DECLARE_WRITE8_MEMBER(ymz1_data_w);
+ DECLARE_WRITE8_MEMBER(ymz2_data_w);
+ DECLARE_READ8_MEMBER(ymz1_data_r);
+ DECLARE_READ8_MEMBER(ymz2_data_r);
+ DECLARE_WRITE_LINE_MEMBER(ctc_zc1_cb) { if(state) { m_slot->nmi_w(1); m_slot->nmi_w(0); } }
+ DECLARE_WRITE_LINE_MEMBER(ctc_intr_cb) { m_slot->irq_w(state); }
+
+ virtual WRITE_LINE_MEMBER(cursor_w) { m_ctc->trg1(state); }
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ cpc_expansion_slot_device *m_slot;
+
+ required_device<z80ctc_device> m_ctc;
+ required_device<ymz294_device> m_ymz1;
+ required_device<ymz294_device> m_ymz2;
+
+ void update_ymz_clock();
+};
+
+// device type definition
+extern const device_type CPC_PLAYCITY;
+
+
+#endif /* CPC_PLAYCITY_H_ */
+
diff --git a/src/emu/bus/dmv/dmvbus.c b/src/emu/bus/dmv/dmvbus.c
index 0484b539752..ba40d69dd30 100644
--- a/src/emu/bus/dmv/dmvbus.c
+++ b/src/emu/bus/dmv/dmvbus.c
@@ -199,6 +199,7 @@ dmvcart_slot_device::dmvcart_slot_device(const machine_config &mconfig, const ch
device_slot_interface(mconfig, *this),
m_prog_read_cb(*this),
m_prog_write_cb(*this),
+ m_out_int_cb(*this),
m_out_irq_cb(*this),
m_out_thold_cb(*this)
{
@@ -224,6 +225,7 @@ void dmvcart_slot_device::device_start()
// resolve callbacks
m_prog_read_cb.resolve_safe(0);
m_prog_write_cb.resolve_safe();
+ m_out_int_cb.resolve_safe();
m_out_irq_cb.resolve_safe();
m_out_thold_cb.resolve_safe();
}
diff --git a/src/emu/bus/dmv/dmvbus.h b/src/emu/bus/dmv/dmvbus.h
index a5c827402bb..e4a3d035677 100644
--- a/src/emu/bus/dmv/dmvbus.h
+++ b/src/emu/bus/dmv/dmvbus.h
@@ -58,6 +58,7 @@ public:
template<class _Object> static devcb_base &set_prog_read_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_prog_read_cb.set_callback(object); }
template<class _Object> static devcb_base &set_prog_write_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_prog_write_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_out_int_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_out_int_cb.set_callback(object); }
template<class _Object> static devcb_base &set_out_irq_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_out_irq_cb.set_callback(object); }
template<class _Object> static devcb_base &set_out_thold_callback(device_t &device, _Object object) { return downcast<dmvcart_slot_device &>(device).m_out_thold_cb.set_callback(object); }
@@ -86,6 +87,7 @@ public:
// internal state
devcb_read8 m_prog_read_cb;
devcb_write8 m_prog_write_cb;
+ devcb_write_line m_out_int_cb;
devcb_write_line m_out_irq_cb;
devcb_write_line m_out_thold_cb;
device_dmvslot_interface* m_cart;
@@ -104,6 +106,9 @@ extern const device_type DMVCART_SLOT;
devcb = &dmvcart_slot_device::set_prog_read_callback(*device, DEVCB_##_read_devcb); \
devcb = &dmvcart_slot_device::set_prog_write_callback(*device, DEVCB_##_write_devcb);
+#define MCFG_DMVCART_SLOT_OUT_INT_CB(_devcb) \
+ devcb = &dmvcart_slot_device::set_out_int_callback(*device, DEVCB_##_devcb);
+
#define MCFG_DMVCART_SLOT_OUT_IRQ_CB(_devcb) \
devcb = &dmvcart_slot_device::set_out_irq_callback(*device, DEVCB_##_devcb);
diff --git a/src/emu/bus/dmv/k803.c b/src/emu/bus/dmv/k803.c
new file mode 100644
index 00000000000..4e57aea8280
--- /dev/null
+++ b/src/emu/bus/dmv/k803.c
@@ -0,0 +1,133 @@
+// license:BSD-3-Clause
+// copyright-holders:Sandro Ronco
+/***************************************************************************
+
+ K803 RTC module
+
+***************************************************************************/
+
+#include "emu.h"
+#include "k803.h"
+
+
+/***************************************************************************
+ IMPLEMENTATION
+***************************************************************************/
+
+static MACHINE_CONFIG_FRAGMENT( dmv_k803 )
+ MCFG_DEVICE_ADD("rtc", MM58167, XTAL_32_768kHz)
+ MCFG_MM58167_IRQ_CALLBACK(WRITELINE(dmv_k803_device, rtc_irq_w))
+MACHINE_CONFIG_END
+
+static INPUT_PORTS_START( dmv_k803 )
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x0f, 0x09, "K803 IFSEL" ) PORT_DIPLOCATION("S:!4,S:!3,S:!2,S:!1")
+ PORT_DIPSETTING( 0x00, "0A" )
+ PORT_DIPSETTING( 0x01, "0B" )
+ PORT_DIPSETTING( 0x02, "1A" )
+ PORT_DIPSETTING( 0x03, "1B" )
+ PORT_DIPSETTING( 0x04, "2A" )
+ PORT_DIPSETTING( 0x05, "2B" )
+ PORT_DIPSETTING( 0x06, "3A" )
+ PORT_DIPSETTING( 0x07, "3B" )
+ PORT_DIPSETTING( 0x08, "4A" )
+ PORT_DIPSETTING( 0x09, "4B" ) // default
+INPUT_PORTS_END
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+const device_type DMV_K803 = &device_creator<dmv_k803_device>;
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dmv_k803_device - constructor
+//-------------------------------------------------
+
+dmv_k803_device::dmv_k803_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, DMV_K803, "K803 RTC", tag, owner, clock, "dmv_k803", __FILE__),
+ device_dmvslot_interface( mconfig, *this ),
+ m_rtc(*this, "rtc"),
+ m_dsw(*this, "DSW")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dmv_k803_device::device_start()
+{
+ m_bus = static_cast<dmvcart_slot_device*>(owner());
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void dmv_k803_device::device_reset()
+{
+ m_latch = 0;
+ m_rtc_int = CLEAR_LINE;
+}
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor dmv_k803_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( dmv_k803 );
+}
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor dmv_k803_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( dmv_k803 );
+}
+
+void dmv_k803_device::io_read(address_space &space, int ifsel, offs_t offset, UINT8 &data)
+{
+ UINT8 dsw = m_dsw->read() & 0x0f;
+ if ((dsw >> 1) == ifsel && BIT(offset, 3) == BIT(dsw, 0))
+ {
+ if (offset & 0x04)
+ data = m_rtc->read(space, ((m_latch & 0x07) << 2) | (offset & 0x03));
+ }
+}
+
+void dmv_k803_device::io_write(address_space &space, int ifsel, offs_t offset, UINT8 data)
+{
+ UINT8 dsw = m_dsw->read() & 0x0f;
+ if ((dsw >> 1) == ifsel && BIT(offset, 3) == BIT(dsw, 0))
+ {
+ if (offset & 0x04)
+ m_rtc->write(space, ((m_latch & 0x07) << 2) | (offset & 0x03), data);
+ else
+ {
+ m_latch = data;
+ update_int();
+ }
+ }
+}
+
+WRITE_LINE_MEMBER(dmv_k803_device::rtc_irq_w)
+{
+ m_rtc_int = state;
+ update_int();
+}
+
+void dmv_k803_device::update_int()
+{
+ bool state = ((m_latch & 0x80) && m_rtc_int);
+ m_bus->m_out_irq_cb(state ? ASSERT_LINE : CLEAR_LINE);
+}
diff --git a/src/emu/bus/dmv/k803.h b/src/emu/bus/dmv/k803.h
new file mode 100644
index 00000000000..51fd9eaaa9c
--- /dev/null
+++ b/src/emu/bus/dmv/k803.h
@@ -0,0 +1,54 @@
+// license:BSD-3-Clause
+// copyright-holders:Sandro Ronco
+#pragma once
+
+#ifndef __DMV_K803_H__
+#define __DMV_K803_H__
+
+#include "emu.h"
+#include "dmvbus.h"
+#include "machine/mm58167.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> dmv_k803_device
+
+class dmv_k803_device :
+ public device_t,
+ public device_dmvslot_interface
+{
+public:
+ // construction/destruction
+ dmv_k803_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual ioport_constructor device_input_ports() const;
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+ DECLARE_WRITE_LINE_MEMBER(rtc_irq_w);
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ virtual void io_read(address_space &space, int ifsel, offs_t offset, UINT8 &data);
+ virtual void io_write(address_space &space, int ifsel, offs_t offset, UINT8 data);
+
+ void update_int();
+
+private:
+ required_device<mm58167_device> m_rtc;
+ required_ioport m_dsw;
+ dmvcart_slot_device * m_bus;
+ UINT8 m_latch;
+ int m_rtc_int;
+};
+
+
+// device type definition
+extern const device_type DMV_K803;
+
+#endif /* __DMV_K803_H__ */
diff --git a/src/emu/bus/dmv/k806.c b/src/emu/bus/dmv/k806.c
index 2fae2b93f3b..66509a0d095 100644
--- a/src/emu/bus/dmv/k806.c
+++ b/src/emu/bus/dmv/k806.c
@@ -20,7 +20,8 @@ ROM_START( dmv_k806 )
ROM_END
static ADDRESS_MAP_START( k806_io, AS_IO, 8, dmv_k806_device )
- AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(port1_r, port1_w)
+ AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(port1_r)
+ AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(port2_w)
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(portt1_r)
ADDRESS_MAP_END
@@ -75,6 +76,7 @@ dmv_k806_device::dmv_k806_device(const machine_config &mconfig, const char *tag,
void dmv_k806_device::device_start()
{
+ m_bus = static_cast<dmvcart_slot_device*>(owner());
}
//-------------------------------------------------
@@ -129,6 +131,15 @@ void dmv_k806_device::io_write(address_space &space, int ifsel, offs_t offset, U
READ8_MEMBER( dmv_k806_device::port1_r )
{
+ // ---- ---x Left button
+ // ---- --x- Middle button
+ // ---- -x-- Right button
+ // ---- x--- XA / Y1
+ // ---x ---- XB / Y2
+ // --x- ---- YA / X2
+ // -x-- ---- YB / X1
+ // x--- ---- not used
+
// TODO
return 0xff;
}
@@ -138,7 +149,7 @@ READ8_MEMBER( dmv_k806_device::portt1_r )
return BIT(m_jumpers->read(), 7) ? 0 : 1;
}
-WRITE8_MEMBER( dmv_k806_device::port1_w )
+WRITE8_MEMBER( dmv_k806_device::port2_w )
{
- // TODO
+ m_bus->m_out_int_cb((data & 1) ? CLEAR_LINE : ASSERT_LINE);
};
diff --git a/src/emu/bus/dmv/k806.h b/src/emu/bus/dmv/k806.h
index 9fc0ca8712b..af2ce0aae3a 100644
--- a/src/emu/bus/dmv/k806.h
+++ b/src/emu/bus/dmv/k806.h
@@ -31,7 +31,7 @@ public:
DECLARE_READ8_MEMBER(portt1_r);
DECLARE_READ8_MEMBER(port1_r);
- DECLARE_WRITE8_MEMBER(port1_w);
+ DECLARE_WRITE8_MEMBER(port2_w);
protected:
// device-level overrides
@@ -44,6 +44,7 @@ protected:
private:
required_device<upi41_cpu_device> m_mcu;
required_ioport m_jumpers;
+ dmvcart_slot_device * m_bus;
};
diff --git a/src/emu/bus/ecbbus/grip.c b/src/emu/bus/ecbbus/grip.c
index 397c985aa1e..1a1b333d4b8 100644
--- a/src/emu/bus/ecbbus/grip.c
+++ b/src/emu/bus/ecbbus/grip.c
@@ -500,7 +500,7 @@ static MACHINE_CONFIG_FRAGMENT( grip )
MCFG_Z80STI_OUT_TCO_CB(DEVWRITELINE(Z80STI_TAG, z80sti_device, tc_w))
MCFG_Z80STI_OUT_TDO_CB(DEVWRITELINE(Z80STI_TAG, z80sti_device, tc_w))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(grip_device, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(grip_device, write_centronics_fault))
@@ -681,6 +681,7 @@ void grip_device::device_reset()
{
m_base = m_j7->read();
m_page = 0;
+ m_lps = 0;
}
diff --git a/src/emu/bus/econet/e01.c b/src/emu/bus/econet/e01.c
index d2874048db0..45f17d72b21 100644
--- a/src/emu/bus/econet/e01.c
+++ b/src/emu/bus/econet/e01.c
@@ -259,7 +259,7 @@ static MACHINE_CONFIG_FRAGMENT( e01 )
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", e01_floppies, "35dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", e01_floppies, "35dd", floppy_image_device::default_floppy_formats)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_ca1))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/emu/bus/isa/isa_cards.c b/src/emu/bus/isa/isa_cards.c
index 5913486424a..4bd09ba9c7f 100644
--- a/src/emu/bus/isa/isa_cards.c
+++ b/src/emu/bus/isa/isa_cards.c
@@ -19,6 +19,7 @@ SLOT_INTERFACE_START( pc_isa8_cards )
SLOT_INTERFACE("aga_pc200", ISA8_AGA_PC200)
SLOT_INTERFACE("ega", ISA8_EGA)
SLOT_INTERFACE("svga_et4k", ISA8_SVGA_ET4K)
+ SLOT_INTERFACE("num9rev",ISA8_NUM_9_REV)
SLOT_INTERFACE("com", ISA8_COM)
SLOT_INTERFACE("fdc", ISA8_FDC_SUPERIO)
SLOT_INTERFACE("fdc_xt", ISA8_FDC_XT)
@@ -57,6 +58,7 @@ SLOT_INTERFACE_START( pc_isa16_cards )
SLOT_INTERFACE("vga", ISA8_VGA)
SLOT_INTERFACE("svga_et4k", ISA8_SVGA_ET4K)
SLOT_INTERFACE("svga_dm",ISA8_SVGA_CIRRUS)
+ SLOT_INTERFACE("num9rev",ISA8_NUM_9_REV)
SLOT_INTERFACE("com", ISA8_COM)
SLOT_INTERFACE("comat", ISA8_COM_AT)
SLOT_INTERFACE("fdc", ISA8_FDC_AT)
diff --git a/src/emu/bus/isa/isa_cards.h b/src/emu/bus/isa/isa_cards.h
index 8c3f11b9145..d7762ab4bcf 100644
--- a/src/emu/bus/isa/isa_cards.h
+++ b/src/emu/bus/isa/isa_cards.h
@@ -25,6 +25,7 @@
#include "svga_s3.h"
#include "svga_tseng.h"
#include "svga_trident.h"
+#include "num9rev.h"
// storage
#include "fdc.h"
diff --git a/src/emu/bus/isa/lpt.c b/src/emu/bus/isa/lpt.c
index 50388be4f58..491f7abe1e6 100644
--- a/src/emu/bus/isa/lpt.c
+++ b/src/emu/bus/isa/lpt.c
@@ -7,8 +7,6 @@
#include "emu.h"
#include "lpt.h"
#include "machine/pc_lpt.h"
-#include "bus/centronics/covox.h"
-#include "bus/centronics/printer.h"
const device_type ISA8_LPT = &device_creator<isa8_lpt_device>;
diff --git a/src/emu/bus/isa/num9rev.c b/src/emu/bus/isa/num9rev.c
new file mode 100644
index 00000000000..891c10600c9
--- /dev/null
+++ b/src/emu/bus/isa/num9rev.c
@@ -0,0 +1,318 @@
+// license:BSD-3-Clause
+// Number Nine Revolution 512x32/1024x8
+// TODO: for 1024x768 mode the 7220 is programmed for 512x768, how does that work?
+
+#include "emu.h"
+#include "num9rev.h"
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+const device_type ISA8_NUM_9_REV = &device_creator<isa8_number_9_rev_device>;
+
+static ADDRESS_MAP_START( upd7220_map, AS_0, 8, isa8_number_9_rev_device )
+ AM_RANGE(0x00000, 0x3ffff) AM_NOP
+ADDRESS_MAP_END
+
+UPD7220_DISPLAY_PIXELS_MEMBER( isa8_number_9_rev_device::hgdc_display_pixels )
+{
+ palette_t *pal = m_palette->palette();
+ if(!m_1024)
+ {
+ rgb_t color(0);
+ UINT16 overlay;
+ if(((address << 3) + 0xc0008) > (1024*1024))
+ return;
+ for(int i = 0; i < 8; i++)
+ {
+ UINT32 addr = (address << 3) + i;
+ overlay = m_ram[addr + 0xc0000] << 1;
+ overlay = m_overlay[overlay + ((m_mode & 8) ? 512 : 0)] | (m_overlay[overlay + 1 + ((m_mode & 8) ? 512 : 0)] << 8);
+ color.set_r(pal->entry_color(m_ram[addr] | ((overlay & 0xf) << 8)).r());
+ color.set_g(pal->entry_color(m_ram[addr + 0x40000] | ((overlay & 0xf0) << 4)).g());
+ color.set_b(pal->entry_color(m_ram[addr + 0x80000] | (overlay & 0xf00)).b());
+ bitmap.pix32(y, x + i) = color;
+ }
+ }
+ else
+ {
+ if(((address << 3) + 8) > (1024*1024))
+ return;
+ for(int i = 0; i < 8; i++)
+ bitmap.pix32(y, x + i) = pal->entry_color(m_ram[(address << 3) + i]);
+ }
+}
+
+static MACHINE_CONFIG_FRAGMENT( num_9_rev )
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_SIZE(512, 448)
+ MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 448-1)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_UPDATE_DRIVER(isa8_number_9_rev_device, screen_update)
+ MCFG_PALETTE_ADD("palette", 4096)
+
+ MCFG_DEVICE_ADD("upd7220", UPD7220, XTAL_4_433619MHz/2) // unknown clock
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_map)
+ MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(isa8_number_9_rev_device, hgdc_display_pixels)
+ MCFG_VIDEO_SET_SCREEN("screen")
+MACHINE_CONFIG_END
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor isa8_number_9_rev_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( num_9_rev );
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// isa16_vga_device - constructor
+//-------------------------------------------------
+
+isa8_number_9_rev_device::isa8_number_9_rev_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, ISA8_NUM_9_REV, "Number Nine Revolution 512x32/1024x8", tag, owner, clock, "number_9_rev", __FILE__),
+ device_isa8_card_interface(mconfig, *this),
+ m_upd7220(*this, "upd7220"),
+ m_palette(*this, "palette"),
+ m_ram(1024*1024),
+ m_overlay(1024)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void isa8_number_9_rev_device::device_start()
+{
+ set_isa_device();
+
+ m_isa->install_memory(0xc0000, 0xc0001, 0, 0, read8_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220));
+ m_isa->install_memory(0xc0100, 0xc03ff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::pal8_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal8_w), this));
+ m_isa->install_memory(0xc0400, 0xc0401, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::bank_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::bank_w), this));
+ m_isa->install_memory(0xc0500, 0xc06ff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::overlay_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::overlay_w), this));
+ m_isa->install_memory(0xc0700, 0xc070f, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::ctrl_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::ctrl_w), this));
+ m_isa->install_memory(0xc1000, 0xc3fff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::pal12_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal12_w), this));
+ m_isa->install_memory(0xa0000, 0xaffff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::read8), this), write8_delegate(FUNC(isa8_number_9_rev_device::write8), this));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void isa8_number_9_rev_device::device_reset()
+{
+ m_bank = 0;
+ m_mode = 0;
+ m_1024 = false;
+}
+
+READ8_MEMBER(isa8_number_9_rev_device::read8)
+{
+ if((m_mode & 1) && !m_1024)
+ return m_ram[offset + ((m_mode & 0xc) << 14)];
+ else if((m_mode & 4) && !m_1024)
+ {
+ UINT32 newoff = ((offset & 3) << 18) | (m_bank << 14) | ((offset >> 2) & 0x3fff);
+ return m_ram[newoff];
+ }
+ else
+ return m_ram[offset + (m_bank << 16)];
+}
+
+WRITE8_MEMBER(isa8_number_9_rev_device::write8)
+{
+ if(m_1024 || ((m_mode & 6) == 0))
+ m_ram[offset + (m_bank << 16)] = data;
+ else if((m_mode & 1) || ((m_mode & 6) == 2))
+ {
+ UINT8 bank = m_bank;
+ if(m_mode & 1)
+ bank = (m_mode & 0xc) >> 2;
+ else
+ {
+ if(m_bank >= 12)
+ {
+ m_ram[offset + (m_bank << 16)] = data;
+ return;
+ }
+ bank &= 3;
+ }
+
+ m_ram[offset + (bank << 16)] = data;
+ m_ram[offset + ((bank + 4) << 16)] = data;
+ m_ram[offset + ((bank + 8) << 16)] = data;
+ }
+ else if(m_mode & 4)
+ {
+ UINT32 newoff = ((offset & 3) << 18) | (m_bank << 14) | ((offset >> 2) & 0x3fff);
+ if((newoff >= 0xc0000) && ((m_mode & 6) == 6))
+ return;
+ m_ram[newoff] = data;
+ }
+}
+
+READ8_MEMBER(isa8_number_9_rev_device::pal8_r)
+{
+ offset += 0x100;
+ palette_t *pal = m_palette->palette();
+ switch(offset & 0xf00)
+ {
+ case 0x100:
+ return pal->entry_color(offset).r();
+ case 0x200:
+ return pal->entry_color(offset).g();
+ case 0x300:
+ return pal->entry_color(offset).b();
+ }
+ return 0;
+}
+
+WRITE8_MEMBER(isa8_number_9_rev_device::pal8_w)
+{
+ offset += 0x100;
+ palette_t *pal = m_palette->palette();
+ rgb_t pen = pal->entry_color(offset);
+ switch(offset & 0xf00)
+ {
+ case 0x100:
+ pen.set_r(data);
+ break;
+ case 0x200:
+ pen.set_g(data);
+ break;
+ case 0x300:
+ pen.set_b(data);
+ break;
+ }
+ pal->entry_set_color(offset, pen);
+}
+
+READ8_MEMBER(isa8_number_9_rev_device::pal12_r)
+{
+ UINT16 color = offset & 0xfff;
+ palette_t *pal = m_palette->palette();
+ switch(offset & 0xf000)
+ {
+ case 0x0000:
+ return pal->entry_color(color).r();
+ case 0x1000:
+ return pal->entry_color(color).g();
+ case 0x2000:
+ return pal->entry_color(color).b();
+ }
+ return 0;
+}
+
+WRITE8_MEMBER(isa8_number_9_rev_device::pal12_w)
+{
+ UINT16 color = offset & 0xfff;
+ palette_t *pal = m_palette->palette();
+ rgb_t pen = pal->entry_color(color);
+ switch(offset & 0xf000)
+ {
+ case 0x0000:
+ pen.set_r(data);
+ break;
+ case 0x1000:
+ pen.set_g(data);
+ break;
+ case 0x2000:
+ pen.set_b(data);
+ break;
+ }
+ pal->entry_set_color(color, pen);
+}
+
+READ8_MEMBER(isa8_number_9_rev_device::overlay_r)
+{
+ return m_overlay[offset + ((m_mode & 8) ? 512 : 0)];
+}
+WRITE8_MEMBER(isa8_number_9_rev_device::overlay_w)
+{
+ m_overlay[offset + ((m_mode & 8) ? 512 : 0)] = data;
+}
+
+READ8_MEMBER(isa8_number_9_rev_device::bank_r)
+{
+ return m_bank;
+}
+
+WRITE8_MEMBER(isa8_number_9_rev_device::bank_w)
+{
+ m_bank = data & 0xf;
+}
+
+READ8_MEMBER(isa8_number_9_rev_device::ctrl_r)
+{
+ switch(offset & 0xf)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ // zoom, set to same value as 7220 external zoom factor
+ break;
+ case 4:
+ return (m_mode & 2) ? 0xff : 0;
+ case 5:
+ return (m_mode & 4) ? 0xff : 0;
+ case 6:
+ return (m_mode & 8) ? 0xff : 0;
+ case 15:
+ return (m_mode & 1) ? 0xff : 0;
+ }
+ return 0;
+}
+
+WRITE8_MEMBER(isa8_number_9_rev_device::ctrl_w)
+{
+ switch(offset & 0xf)
+ {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ // zoom
+ break;
+ case 4:
+ if(data & 0x80)
+ m_mode |= 2;
+ else
+ m_mode &= ~2;
+ break;
+ case 5:
+ if(data & 0x80)
+ m_mode |= 4;
+ else
+ m_mode &= ~4;
+ break;
+ case 6:
+ if(data & 0x80)
+ m_mode |= 8;
+ else
+ m_mode &= ~8;
+ break;
+ case 15:
+ if(data & 0x80)
+ m_mode |= 1;
+ else
+ m_mode &= ~1;
+ break;
+ }
+}
+
+UINT32 isa8_number_9_rev_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ rectangle visarea = screen.visible_area();
+ // try to support the 1024x8 or at least don't crash as there's no way to detect it
+ m_1024 = (visarea.width() * visarea.height()) > (512 * 512);
+ return m_upd7220->screen_update(screen, bitmap, cliprect);
+}
diff --git a/src/emu/bus/isa/num9rev.h b/src/emu/bus/isa/num9rev.h
new file mode 100644
index 00000000000..5bace1297f5
--- /dev/null
+++ b/src/emu/bus/isa/num9rev.h
@@ -0,0 +1,61 @@
+#pragma once
+
+#ifndef __NUM9REV_H__
+#define __NUM9REV_H__
+
+#include "emu.h"
+#include "isa.h"
+#include "video/upd7220.h"
+#include "machine/bankdev.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> isa16_vga_device
+
+class isa8_number_9_rev_device :
+ public device_t,
+ public device_isa8_card_interface
+{
+public:
+ // construction/destruction
+ isa8_number_9_rev_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+ UPD7220_DISPLAY_PIXELS_MEMBER(hgdc_display_pixels);
+ DECLARE_READ8_MEMBER(pal8_r);
+ DECLARE_WRITE8_MEMBER(pal8_w);
+ DECLARE_READ8_MEMBER(pal12_r);
+ DECLARE_WRITE8_MEMBER(pal12_w);
+ DECLARE_READ8_MEMBER(overlay_r);
+ DECLARE_WRITE8_MEMBER(overlay_w);
+ DECLARE_READ8_MEMBER(bank_r);
+ DECLARE_WRITE8_MEMBER(bank_w);
+ DECLARE_READ8_MEMBER(ctrl_r);
+ DECLARE_WRITE8_MEMBER(ctrl_w);
+ DECLARE_READ8_MEMBER(read8);
+ DECLARE_WRITE8_MEMBER(write8);
+
+ UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+private:
+ required_device<upd7220_device> m_upd7220;
+ required_device<palette_device> m_palette;
+ dynamic_buffer m_ram;
+ dynamic_buffer m_overlay;
+
+ UINT8 m_bank;
+ UINT8 m_mode;
+ bool m_1024;
+};
+
+// device type definition
+extern const device_type ISA8_NUM_9_REV;
+
+#endif /* __NUM9REV_H__ */
diff --git a/src/emu/bus/isa/s3virge.c b/src/emu/bus/isa/s3virge.c
index 2e6ba49e279..fdd4c3b8ed7 100644
--- a/src/emu/bus/isa/s3virge.c
+++ b/src/emu/bus/isa/s3virge.c
@@ -45,8 +45,7 @@ s3virgedx_rev1_vga_device::s3virgedx_rev1_vga_device(const machine_config &mconf
void s3virge_vga_device::device_start()
{
- memset(&vga, 0, sizeof(vga));
- memset(&svga, 0, sizeof(svga));
+ zero();
int x;
int i;
diff --git a/src/emu/bus/isa/trident.c b/src/emu/bus/isa/trident.c
index a4afa62d9f8..0d8b2134808 100644
--- a/src/emu/bus/isa/trident.c
+++ b/src/emu/bus/isa/trident.c
@@ -155,8 +155,7 @@ void trident_vga_device::WRITEPIXEL(INT16 x,INT16 y, UINT32 data)
void trident_vga_device::device_start()
{
- memset(&vga, 0, sizeof(vga));
- memset(&svga, 0, sizeof(svga));
+ zero();
int i;
for (i = 0; i < 0x100; i++)
diff --git a/src/emu/bus/pci/cirrus.c b/src/emu/bus/lpci/cirrus.c
index ac001b09b74..ac001b09b74 100644
--- a/src/emu/bus/pci/cirrus.c
+++ b/src/emu/bus/lpci/cirrus.c
diff --git a/src/emu/bus/pci/cirrus.h b/src/emu/bus/lpci/cirrus.h
index 8a458039650..9027f6827e4 100644
--- a/src/emu/bus/pci/cirrus.h
+++ b/src/emu/bus/lpci/cirrus.h
@@ -9,7 +9,7 @@
#ifndef CIRRUS_H
#define CIRRUS_H
-#include "bus/pci/pci.h"
+#include "bus/lpci/pci.h"
// ======================> cirrus_device
diff --git a/src/emu/bus/pci/i82371ab.c b/src/emu/bus/lpci/i82371ab.c
index 649d1ed3b78..649d1ed3b78 100644
--- a/src/emu/bus/pci/i82371ab.c
+++ b/src/emu/bus/lpci/i82371ab.c
diff --git a/src/emu/bus/pci/i82371ab.h b/src/emu/bus/lpci/i82371ab.h
index c90468e0481..c90468e0481 100644
--- a/src/emu/bus/pci/i82371ab.h
+++ b/src/emu/bus/lpci/i82371ab.h
diff --git a/src/emu/bus/pci/i82371sb.c b/src/emu/bus/lpci/i82371sb.c
index 7d173663596..7d173663596 100644
--- a/src/emu/bus/pci/i82371sb.c
+++ b/src/emu/bus/lpci/i82371sb.c
diff --git a/src/emu/bus/pci/i82371sb.h b/src/emu/bus/lpci/i82371sb.h
index c9ccbff9a8c..c9ccbff9a8c 100644
--- a/src/emu/bus/pci/i82371sb.h
+++ b/src/emu/bus/lpci/i82371sb.h
diff --git a/src/emu/bus/pci/i82439tx.c b/src/emu/bus/lpci/i82439tx.c
index daa612c70ac..daa612c70ac 100644
--- a/src/emu/bus/pci/i82439tx.c
+++ b/src/emu/bus/lpci/i82439tx.c
diff --git a/src/emu/bus/pci/i82439tx.h b/src/emu/bus/lpci/i82439tx.h
index 3e8d1514e49..3e8d1514e49 100644
--- a/src/emu/bus/pci/i82439tx.h
+++ b/src/emu/bus/lpci/i82439tx.h
diff --git a/src/emu/bus/pci/mpc105.c b/src/emu/bus/lpci/mpc105.c
index 57b448bd49d..57b448bd49d 100644
--- a/src/emu/bus/pci/mpc105.c
+++ b/src/emu/bus/lpci/mpc105.c
diff --git a/src/emu/bus/pci/mpc105.h b/src/emu/bus/lpci/mpc105.h
index ae3f4f2b1cc..ae3f4f2b1cc 100644
--- a/src/emu/bus/pci/mpc105.h
+++ b/src/emu/bus/lpci/mpc105.h
diff --git a/src/emu/bus/pci/northbridge.c b/src/emu/bus/lpci/northbridge.c
index 83db12613b9..83db12613b9 100644
--- a/src/emu/bus/pci/northbridge.c
+++ b/src/emu/bus/lpci/northbridge.c
diff --git a/src/emu/bus/pci/northbridge.h b/src/emu/bus/lpci/northbridge.h
index 1f0600deaaf..1f0600deaaf 100644
--- a/src/emu/bus/pci/northbridge.h
+++ b/src/emu/bus/lpci/northbridge.h
diff --git a/src/emu/bus/pci/pci.c b/src/emu/bus/lpci/pci.c
index 1f13b78dfe4..1f13b78dfe4 100644
--- a/src/emu/bus/pci/pci.c
+++ b/src/emu/bus/lpci/pci.c
diff --git a/src/emu/bus/pci/pci.h b/src/emu/bus/lpci/pci.h
index 97d7b45d988..97d7b45d988 100644
--- a/src/emu/bus/pci/pci.h
+++ b/src/emu/bus/lpci/pci.h
diff --git a/src/emu/bus/pci/southbridge.c b/src/emu/bus/lpci/southbridge.c
index d6797fdef06..bb1a8cf629b 100644
--- a/src/emu/bus/pci/southbridge.c
+++ b/src/emu/bus/lpci/southbridge.c
@@ -203,7 +203,7 @@ void southbridge_device::device_start()
void southbridge_device::device_reset()
{
m_at_spkrdata = 0;
- m_pit_out2 = 0;
+ m_pit_out2 = 1;
m_dma_channel = -1;
m_cur_eop = false;
m_nmi_enabled = 0;
diff --git a/src/emu/bus/pci/southbridge.h b/src/emu/bus/lpci/southbridge.h
index 1fde011f414..1fde011f414 100644
--- a/src/emu/bus/pci/southbridge.h
+++ b/src/emu/bus/lpci/southbridge.h
diff --git a/src/emu/bus/nes/ave.c b/src/emu/bus/nes/ave.c
index aecf875d000..4280286519b 100644
--- a/src/emu/bus/nes/ave.c
+++ b/src/emu/bus/nes/ave.c
@@ -79,7 +79,6 @@ void nes_nina006_device::pcb_reset()
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
prg32(0);
chr8(0, m_chr_source);
- set_nt_mirroring(PPU_MIRROR_HORZ);
}
@@ -164,7 +163,7 @@ WRITE8_MEMBER(nes_nina006_device::write_l)
if (!(offset & 0x0100))
{
prg32(data >> 3);
- chr8(data, CHRROM);
+ chr8(data & 7, CHRROM);
}
}
diff --git a/src/emu/bus/nes/nes_ines.inc b/src/emu/bus/nes/nes_ines.inc
index 45ea6d40324..b99dea5cda2 100644
--- a/src/emu/bus/nes/nes_ines.inc
+++ b/src/emu/bus/nes/nes_ines.inc
@@ -693,6 +693,7 @@ void nes_cart_slot_device::call_load_ines()
logerror("-- PRG 0x%x (%d x 16k chunks)\n", prg_size, prg_size / 0x4000);
logerror("-- VROM 0x%x (%d x 8k chunks)\n", vrom_size, vrom_size / 0x2000);
logerror("-- VRAM 0x%x (%d x 8k chunks)\n", vram_size, vram_size / 0x2000);
+ logerror("-- Mirroring %s\n", BIT(header[6], 0) ? "Vertical" : "Horizontal");
if (battery_size)
logerror("-- Battery found\n");
if (m_cart->get_trainer())
diff --git a/src/emu/bus/ql/sandy_superdisk.c b/src/emu/bus/ql/sandy_superdisk.c
index 0bc2a426dbd..3ee38632534 100644
--- a/src/emu/bus/ql/sandy_superdisk.c
+++ b/src/emu/bus/ql/sandy_superdisk.c
@@ -88,7 +88,7 @@ static MACHINE_CONFIG_FRAGMENT( sandy_super_disk )
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", sandy_super_disk_floppies, "35dd", sandy_super_disk_t::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":1", sandy_super_disk_floppies, NULL, sandy_super_disk_t::floppy_formats)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(sandy_super_disk_t, busy_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD(TTL74273_TAG, CENTRONICS_TAG)
MACHINE_CONFIG_END
diff --git a/src/emu/bus/ql/sandy_superqboard.c b/src/emu/bus/ql/sandy_superqboard.c
index f3e3464e551..16459fe2822 100644
--- a/src/emu/bus/ql/sandy_superqboard.c
+++ b/src/emu/bus/ql/sandy_superqboard.c
@@ -109,7 +109,7 @@ static MACHINE_CONFIG_FRAGMENT( sandy_superqboard )
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", sandy_superqboard_floppies, "35hd", sandy_superqboard_t::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":1", sandy_superqboard_floppies, NULL, sandy_superqboard_t::floppy_formats)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(sandy_superqboard_t, busy_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD(TTL74273_TAG, CENTRONICS_TAG)
MACHINE_CONFIG_END
diff --git a/src/emu/bus/snes/sa1.c b/src/emu/bus/snes/sa1.c
index 620d1db1285..9b715d135e8 100644
--- a/src/emu/bus/snes/sa1.c
+++ b/src/emu/bus/snes/sa1.c
@@ -96,11 +96,15 @@ sns_sa1_device::sns_sa1_device(const machine_config &mconfig, const char *tag, d
void sns_sa1_device::device_start()
{
+ m_scpu_ctrl = 0;
+ m_nmi_vector = 0;
+ m_bank_c_hi = 0;
+ m_bank_c_rom = 0;
}
void sns_sa1_device::device_reset()
{
- memset(m_internal_ram, 0, 0x800);
+ memset(m_internal_ram, 0, sizeof(m_internal_ram));
m_sa1_ctrl = 0x20;
m_scpu_ctrl = 0;
@@ -127,7 +131,7 @@ void sns_sa1_device::device_reset()
m_iram_write_sa1 = 1;
m_src_addr = 0;
m_dst_addr = 0;
- memset(m_brf_reg, 0, 0x10);
+ memset(m_brf_reg, 0, sizeof(m_brf_reg));
m_math_ctlr = 0;
m_math_overflow = 0;
m_math_a = 0;
diff --git a/src/emu/bus/vtech/ioexp/printer.c b/src/emu/bus/vtech/ioexp/printer.c
index c4b5c7735f4..b3342d54a0a 100644
--- a/src/emu/bus/vtech/ioexp/printer.c
+++ b/src/emu/bus/vtech/ioexp/printer.c
@@ -25,7 +25,7 @@ const device_type PRINTER_INTERFACE = &device_creator<printer_interface_device>;
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( printer_interface )
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(printer_interface_device, busy_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("latch", "centronics")
MACHINE_CONFIG_END
diff --git a/src/emu/cpu/drcfe.c b/src/emu/cpu/drcfe.c
index 698bee17bfe..c3969be84fe 100644
--- a/src/emu/cpu/drcfe.c
+++ b/src/emu/cpu/drcfe.c
@@ -160,11 +160,20 @@ opcode_desc *drc_frontend::describe_one(offs_t curpc, const opcode_desc *prevdes
{
// initialize the description
opcode_desc *desc = m_desc_allocator.alloc();
- // TODO: this kills the opcode_desc.delay vptr
- memset(desc, 0, sizeof(*desc));
+ desc->m_next = NULL;
+ desc->branch = NULL;
desc->pc = curpc;
desc->physpc = curpc;
desc->targetpc = BRANCH_TARGET_DYNAMIC;
+ memset(&desc->opptr, 0x00, sizeof(desc->opptr));
+ desc->length = 0;
+ desc->delayslots = 0;
+ desc->skipslots = 0;
+ desc->flags = 0;
+ desc->cycles = 0;
+ memset(desc->regin, 0x00, sizeof(desc->regin));
+ memset(desc->regout, 0x00, sizeof(desc->regout));
+ memset(desc->regreq, 0x00, sizeof(desc->regreq));
// call the callback to describe an instruction
if (!describe(*desc, prevdesc))
diff --git a/src/emu/cpu/drcuml.c b/src/emu/cpu/drcuml.c
index 9096f0b8d8c..e3893039b9f 100644
--- a/src/emu/cpu/drcuml.c
+++ b/src/emu/cpu/drcuml.c
@@ -274,6 +274,7 @@ void drcuml_state::log_printf(const char *format, ...)
va_start(va, format);
vfprintf(m_umllog, format, va);
va_end(va);
+ fflush(m_umllog);
}
}
diff --git a/src/emu/cpu/i386/i386.c b/src/emu/cpu/i386/i386.c
index bbd83a7aa93..32374631565 100644
--- a/src/emu/cpu/i386/i386.c
+++ b/src/emu/cpu/i386/i386.c
@@ -125,6 +125,16 @@ UINT32 i386_device::i386_load_protected_mode_segment(I386_SREG *seg, UINT64 *des
UINT32 base, limit;
int entry;
+ if(!seg->selector)
+ {
+ seg->flags = 0;
+ seg->base = 0;
+ seg->limit = 0;
+ seg->d = 0;
+ seg->valid = false;
+ return 0;
+ }
+
if ( seg->selector & 0x4 )
{
base = m_ldtr.base;
@@ -147,7 +157,7 @@ UINT32 i386_device::i386_load_protected_mode_segment(I386_SREG *seg, UINT64 *des
if (seg->flags & 0x8000)
seg->limit = (seg->limit << 12) | 0xfff;
seg->d = (seg->flags & 0x4000) ? 1 : 0;
- seg->valid = (seg->selector & ~3)?(true):(false);
+ seg->valid = true;
if(desc)
*desc = ((UINT64)v2<<32)|v1;
@@ -212,7 +222,8 @@ void i386_device::i386_load_segment_descriptor(int segment )
if (!V8086_MODE)
{
i386_load_protected_mode_segment(&m_sreg[segment], NULL );
- i386_set_descriptor_accessed(m_sreg[segment].selector);
+ if(m_sreg[segment].selector)
+ i386_set_descriptor_accessed(m_sreg[segment].selector);
}
else
{
@@ -752,6 +763,15 @@ void i386_device::i386_trap(int irq, int irq_gate, int trap_level)
logerror("IRQ (%08x): Software IRQ - gate DPL is less than CPL.\n",m_pc);
FAULT_EXP(FAULT_GP,entry+2)
}
+ if(V8086_MODE)
+ {
+ if((!m_IOP1 || !m_IOP2) && (m_opcode != 0xcc))
+ {
+ logerror("IRQ (%08x): Is in Virtual 8086 mode and IOPL != 3.\n",m_pc);
+ FAULT(FAULT_GP,0)
+ }
+
+ }
}
if((flags & 0x0080) == 0)
@@ -1666,17 +1686,17 @@ void i386_device::i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect,
}
if (operand32 != 0) // if 32-bit
{
- if(REG32(ESP) < 8)
+ if(i386_limit_check(SS, REG32(ESP) - 8))
{
- logerror("CALL: Stack has no room for return address.\n");
+ logerror("CALL (%08x): Stack has no room for return address.\n",m_pc);
FAULT(FAULT_SS,0) // #SS(0)
}
}
else
{
- if(REG16(SP) < 4)
+ if(i386_limit_check(SS, (REG16(SP) - 4) & 0xffff))
{
- logerror("CALL: Stack has no room for return address.\n");
+ logerror("CALL (%08x): Stack has no room for return address.\n",m_pc);
FAULT(FAULT_SS,0) // #SS(0)
}
}
@@ -1716,9 +1736,9 @@ void i386_device::i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect,
logerror("CALL: TSS: TSS is busy.\n");
FAULT(FAULT_TS,selector & ~0x03) // #TS(selector)
}
- if(desc.flags & 0x0080)
+ if((desc.flags & 0x0080) == 0)
{
- logerror("CALL: TSS: Segment is not present.\n");
+ logerror("CALL: TSS: Segment %02x is not present.\n",selector);
FAULT(FAULT_NP,selector & ~0x03) // #NP(selector)
}
if(desc.flags & 0x08)
@@ -1924,7 +1944,7 @@ void i386_device::i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect,
/* same privilege */
if (operand32 != 0) // if 32-bit
{
- if(REG32(ESP) < 8)
+ if(i386_limit_check(SS, REG32(ESP) - 8))
{
logerror("CALL: Stack has no room for return address.\n");
FAULT(FAULT_SS,0) // #SS(0)
@@ -1934,7 +1954,7 @@ void i386_device::i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect,
}
else
{
- if(REG16(SP) < 4)
+ if(i386_limit_check(SS, (REG16(SP) - 4) & 0xffff))
{
logerror("CALL: Stack has no room for return address.\n");
FAULT(FAULT_SS,0) // #SS(0)
@@ -1966,7 +1986,7 @@ void i386_device::i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect,
logerror("CALL: Task Gate: Gate DPL is less than RPL.\n");
FAULT(FAULT_TS,selector & ~0x03) // #TS(selector)
}
- if(gate.ar & 0x0080)
+ if((gate.ar & 0x0080) == 0)
{
logerror("CALL: Task Gate: Gate is not present.\n");
FAULT(FAULT_NP,selector & ~0x03) // #NP(selector)
@@ -1992,7 +2012,7 @@ void i386_device::i386_protected_mode_call(UINT16 seg, UINT32 off, int indirect,
logerror("CALL: Task Gate: TSS is busy.\n");
FAULT(FAULT_TS,gate.selector & ~0x03) // #TS(selector)
}
- if(desc.flags & 0x0080)
+ if((desc.flags & 0x0080) == 0)
{
logerror("CALL: Task Gate: TSS is not present.\n");
FAULT(FAULT_NP,gate.selector & ~0x03) // #TS(selector)
@@ -3124,6 +3144,7 @@ void i386_device::i386_common_init(int tlbsize)
m_vtlb = vtlb_alloc(this, AS_PROGRAM, 0, tlbsize);
m_smi = false;
m_debugger_temp = 0;
+ m_lock = false;
zero_state();
@@ -3132,26 +3153,32 @@ void i386_device::i386_common_init(int tlbsize)
save_item(NAME(m_sreg[ES].base));
save_item(NAME(m_sreg[ES].limit));
save_item(NAME(m_sreg[ES].flags));
+ save_item(NAME(m_sreg[ES].d));
save_item(NAME(m_sreg[CS].selector));
save_item(NAME(m_sreg[CS].base));
save_item(NAME(m_sreg[CS].limit));
save_item(NAME(m_sreg[CS].flags));
+ save_item(NAME(m_sreg[CS].d));
save_item(NAME(m_sreg[SS].selector));
save_item(NAME(m_sreg[SS].base));
save_item(NAME(m_sreg[SS].limit));
save_item(NAME(m_sreg[SS].flags));
+ save_item(NAME(m_sreg[SS].d));
save_item(NAME(m_sreg[DS].selector));
save_item(NAME(m_sreg[DS].base));
save_item(NAME(m_sreg[DS].limit));
save_item(NAME(m_sreg[DS].flags));
+ save_item(NAME(m_sreg[DS].d));
save_item(NAME(m_sreg[FS].selector));
save_item(NAME(m_sreg[FS].base));
save_item(NAME(m_sreg[FS].limit));
save_item(NAME(m_sreg[FS].flags));
+ save_item(NAME(m_sreg[FS].d));
save_item(NAME(m_sreg[GS].selector));
save_item(NAME(m_sreg[GS].base));
save_item(NAME(m_sreg[GS].limit));
save_item(NAME(m_sreg[GS].flags));
+ save_item(NAME(m_sreg[GS].d));
save_item(NAME(m_eip));
save_item(NAME(m_prev_eip));
save_item(NAME(m_CF));
@@ -3545,7 +3572,6 @@ void i386_device::device_reset()
m_smi_latched = false;
m_nmi_masked = false;
m_nmi_latched = false;
- m_lock = false;
m_a20_mask = ~0;
diff --git a/src/emu/cpu/i386/i386op16.inc b/src/emu/cpu/i386/i386op16.inc
index 81aaf8f025b..7c327d12621 100644
--- a/src/emu/cpu/i386/i386op16.inc
+++ b/src/emu/cpu/i386/i386op16.inc
@@ -1746,8 +1746,12 @@ void i386_device::i386_popf() // Opcode 0x9d
void i386_device::i386_push_ax() // Opcode 0x50
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(REG16(AX) );
else
FAULT(FAULT_SS,0)
@@ -1756,8 +1760,12 @@ void i386_device::i386_push_ax() // Opcode 0x50
void i386_device::i386_push_cx() // Opcode 0x51
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(REG16(CX) );
else
FAULT(FAULT_SS,0)
@@ -1766,8 +1774,12 @@ void i386_device::i386_push_cx() // Opcode 0x51
void i386_device::i386_push_dx() // Opcode 0x52
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(REG16(DX) );
else
FAULT(FAULT_SS,0)
@@ -1776,8 +1788,12 @@ void i386_device::i386_push_dx() // Opcode 0x52
void i386_device::i386_push_bx() // Opcode 0x53
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(REG16(BX) );
else
FAULT(FAULT_SS,0)
@@ -1786,8 +1802,12 @@ void i386_device::i386_push_bx() // Opcode 0x53
void i386_device::i386_push_sp() // Opcode 0x54
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(REG16(SP) );
else
FAULT(FAULT_SS,0)
@@ -1796,8 +1816,12 @@ void i386_device::i386_push_sp() // Opcode 0x54
void i386_device::i386_push_bp() // Opcode 0x55
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(REG16(BP) );
else
FAULT(FAULT_SS,0)
@@ -1806,8 +1830,12 @@ void i386_device::i386_push_bp() // Opcode 0x55
void i386_device::i386_push_si() // Opcode 0x56
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(REG16(SI) );
else
FAULT(FAULT_SS,0)
@@ -1816,8 +1844,12 @@ void i386_device::i386_push_si() // Opcode 0x56
void i386_device::i386_push_di() // Opcode 0x57
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(REG16(DI) );
else
FAULT(FAULT_SS,0)
@@ -1826,8 +1858,12 @@ void i386_device::i386_push_di() // Opcode 0x57
void i386_device::i386_push_cs16() // Opcode 0x0e
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(m_sreg[CS].selector );
else
FAULT(FAULT_SS,0)
@@ -1836,8 +1872,12 @@ void i386_device::i386_push_cs16() // Opcode 0x0e
void i386_device::i386_push_ds16() // Opcode 0x1e
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(m_sreg[DS].selector );
else
FAULT(FAULT_SS,0)
@@ -1846,8 +1886,12 @@ void i386_device::i386_push_ds16() // Opcode 0x1e
void i386_device::i386_push_es16() // Opcode 0x06
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(m_sreg[ES].selector );
else
FAULT(FAULT_SS,0)
@@ -1856,8 +1900,12 @@ void i386_device::i386_push_es16() // Opcode 0x06
void i386_device::i386_push_fs16() // Opcode 0x0f a0
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(m_sreg[FS].selector );
else
FAULT(FAULT_SS,0)
@@ -1866,8 +1914,12 @@ void i386_device::i386_push_fs16() // Opcode 0x0f a0
void i386_device::i386_push_gs16() // Opcode 0x0f a8
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(m_sreg[GS].selector );
else
FAULT(FAULT_SS,0)
@@ -1876,8 +1928,12 @@ void i386_device::i386_push_gs16() // Opcode 0x0f a8
void i386_device::i386_push_ss16() // Opcode 0x16
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(m_sreg[SS].selector );
else
FAULT(FAULT_SS,0)
@@ -1887,8 +1943,12 @@ void i386_device::i386_push_ss16() // Opcode 0x16
void i386_device::i386_push_i16() // Opcode 0x68
{
UINT16 value = FETCH16();
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(value);
else
FAULT(FAULT_SS,0)
@@ -1898,8 +1958,12 @@ void i386_device::i386_push_i16() // Opcode 0x68
void i386_device::i386_pusha() // Opcode 0x60
{
UINT16 temp = REG16(SP);
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-16) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 16;
+ else
+ offset = (REG16(SP) - 16) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
{
PUSH16(REG16(AX) );
PUSH16(REG16(CX) );
@@ -1917,8 +1981,12 @@ void i386_device::i386_pusha() // Opcode 0x60
void i386_device::i386_pushf() // Opcode 0x9c
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-2) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 2;
+ else
+ offset = (REG16(SP) - 2) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH16(get_flags() & 0xffff );
else
FAULT(FAULT_SS,0)
@@ -3133,9 +3201,14 @@ void i386_device::i386_group0F00_16() // Opcode 0x0f 00
memset(&seg, 0, sizeof(seg));
seg.selector = m_task.segment;
i386_load_protected_mode_segment(&seg,NULL);
+
+ UINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5;
+ i386_translate_address(TRANSLATE_READ, &addr, NULL);
+ m_program->write_byte(addr, (seg.flags & 0xff) | 2);
+
m_task.limit = seg.limit;
m_task.base = seg.base;
- m_task.flags = seg.flags;
+ m_task.flags = seg.flags | 2;
}
else
{
diff --git a/src/emu/cpu/i386/i386op32.inc b/src/emu/cpu/i386/i386op32.inc
index ea6a6ea5672..18b4ab46f20 100644
--- a/src/emu/cpu/i386/i386op32.inc
+++ b/src/emu/cpu/i386/i386op32.inc
@@ -1599,8 +1599,12 @@ void i386_device::i386_popfd() // Opcode 0x9d
void i386_device::i386_push_eax() // Opcode 0x50
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(REG32(EAX) );
else
FAULT(FAULT_SS,0)
@@ -1609,8 +1613,12 @@ void i386_device::i386_push_eax() // Opcode 0x50
void i386_device::i386_push_ecx() // Opcode 0x51
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(REG32(ECX) );
else
FAULT(FAULT_SS,0)
@@ -1619,8 +1627,12 @@ void i386_device::i386_push_ecx() // Opcode 0x51
void i386_device::i386_push_edx() // Opcode 0x52
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(REG32(EDX) );
else
FAULT(FAULT_SS,0)
@@ -1629,8 +1641,12 @@ void i386_device::i386_push_edx() // Opcode 0x52
void i386_device::i386_push_ebx() // Opcode 0x53
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(REG32(EBX) );
else
FAULT(FAULT_SS,0)
@@ -1639,8 +1655,12 @@ void i386_device::i386_push_ebx() // Opcode 0x53
void i386_device::i386_push_esp() // Opcode 0x54
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(REG32(ESP) );
else
FAULT(FAULT_SS,0)
@@ -1649,8 +1669,12 @@ void i386_device::i386_push_esp() // Opcode 0x54
void i386_device::i386_push_ebp() // Opcode 0x55
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(REG32(EBP) );
else
FAULT(FAULT_SS,0)
@@ -1659,8 +1683,12 @@ void i386_device::i386_push_ebp() // Opcode 0x55
void i386_device::i386_push_esi() // Opcode 0x56
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(REG32(ESI) );
else
FAULT(FAULT_SS,0)
@@ -1669,8 +1697,12 @@ void i386_device::i386_push_esi() // Opcode 0x56
void i386_device::i386_push_edi() // Opcode 0x57
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(REG32(EDI) );
else
FAULT(FAULT_SS,0)
@@ -1679,8 +1711,12 @@ void i386_device::i386_push_edi() // Opcode 0x57
void i386_device::i386_push_cs32() // Opcode 0x0e
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(m_sreg[CS].selector );
else
FAULT(FAULT_SS,0)
@@ -1689,8 +1725,12 @@ void i386_device::i386_push_cs32() // Opcode 0x0e
void i386_device::i386_push_ds32() // Opcode 0x1e
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(m_sreg[DS].selector );
else
FAULT(FAULT_SS,0)
@@ -1699,8 +1739,12 @@ void i386_device::i386_push_ds32() // Opcode 0x1e
void i386_device::i386_push_es32() // Opcode 0x06
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(m_sreg[ES].selector );
else
FAULT(FAULT_SS,0)
@@ -1709,8 +1753,12 @@ void i386_device::i386_push_es32() // Opcode 0x06
void i386_device::i386_push_fs32() // Opcode 0x0f a0
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(m_sreg[FS].selector );
else
FAULT(FAULT_SS,0)
@@ -1719,8 +1767,12 @@ void i386_device::i386_push_fs32() // Opcode 0x0f a0
void i386_device::i386_push_gs32() // Opcode 0x0f a8
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(m_sreg[GS].selector );
else
FAULT(FAULT_SS,0)
@@ -1729,8 +1781,12 @@ void i386_device::i386_push_gs32() // Opcode 0x0f a8
void i386_device::i386_push_ss32() // Opcode 0x16
{
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(m_sreg[SS].selector );
else
FAULT(FAULT_SS,0)
@@ -1740,8 +1796,12 @@ void i386_device::i386_push_ss32() // Opcode 0x16
void i386_device::i386_push_i32() // Opcode 0x68
{
UINT32 value = FETCH32();
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(value);
else
FAULT(FAULT_SS,0)
@@ -1751,8 +1811,12 @@ void i386_device::i386_push_i32() // Opcode 0x68
void i386_device::i386_pushad() // Opcode 0x60
{
UINT32 temp = REG32(ESP);
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-32) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 32;
+ else
+ offset = (REG16(SP) - 32) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
{
PUSH32(REG32(EAX) );
PUSH32(REG32(ECX) );
@@ -1772,8 +1836,12 @@ void i386_device::i386_pushfd() // Opcode 0x9c
{
if(!m_IOP1 && !m_IOP2 && V8086_MODE)
FAULT(FAULT_GP,0)
- UINT32 offset = (STACK_32BIT ? REG32(ESP) : REG16(SP));
- if(i386_limit_check(SS,offset-4) == 0)
+ UINT32 offset;
+ if(STACK_32BIT)
+ offset = REG32(ESP) - 4;
+ else
+ offset = (REG16(SP) - 4) & 0xffff;
+ if(i386_limit_check(SS,offset) == 0)
PUSH32(get_flags() & 0x00fcffff );
else
FAULT(FAULT_SS,0)
@@ -2939,9 +3007,14 @@ void i386_device::i386_group0F00_32() // Opcode 0x0f 00
memset(&seg, 0, sizeof(seg));
seg.selector = m_task.segment;
i386_load_protected_mode_segment(&seg,NULL);
+
+ UINT32 addr = ((seg.selector & 4) ? m_ldtr.base : m_gdtr.base) + (seg.selector & ~7) + 5;
+ i386_translate_address(TRANSLATE_READ, &addr, NULL);
+ m_program->write_byte(addr, (seg.flags & 0xff) | 2);
+
m_task.limit = seg.limit;
m_task.base = seg.base;
- m_task.flags = seg.flags;
+ m_task.flags = seg.flags | 2;
}
else
{
diff --git a/src/emu/cpu/mips/mips3drc.c b/src/emu/cpu/mips/mips3drc.c
index b8c67dc8694..8727bc18bd9 100644
--- a/src/emu/cpu/mips/mips3drc.c
+++ b/src/emu/cpu/mips/mips3drc.c
@@ -1387,7 +1387,7 @@ int mips3_device::generate_opcode(drcuml_block *block, compiler_state *compiler,
case 0x0f: /* LUI - MIPS I */
if (RTREG != 0)
- UML_DMOV(block, R64(RTREG), SIMMVAL << 16); // dmov <rtreg>,SIMMVAL << 16
+ UML_DMOV(block, R64(RTREG), UIMMVAL << 16); // dmov <rtreg>,UIMMVAL << 16
return TRUE;
case 0x08: /* ADDI - MIPS I */
@@ -2764,9 +2764,17 @@ int mips3_device::generate_cop1(drcuml_block *block, compiler_state *compiler, c
case 0x07:
if (IS_SINGLE(op)) /* NEG.S - MIPS I */
+ {
UML_FSNEG(block, FPR32(FDREG), FPR32(FSREG)); // fsneg <fdreg>,<fsreg>
+ UML_CMP(block, FPR32(FSREG), 0); // cmp <fsreg>,0.0
+ UML_MOVc(block, COND_E, FPR32(FDREG), 0x80000000); // mov <fdreg>,-0.0,e
+ }
else /* NEG.D - MIPS I */
+ {
UML_FDNEG(block, FPR64(FDREG), FPR64(FSREG)); // fdneg <fdreg>,<fsreg>
+ UML_CMP(block, FPR64(FSREG), 0); // cmp <fsreg>,0.0
+ UML_DMOVc(block, COND_E, FPR64(FDREG), 0x8000000000000000L);// dmov <fdreg>,-0.0,e
+ }
return TRUE;
case 0x08:
@@ -2774,6 +2782,7 @@ int mips3_device::generate_cop1(drcuml_block *block, compiler_state *compiler, c
UML_FSTOINT(block, FPR64(FDREG), FPR32(FSREG), SIZE_QWORD, ROUND_ROUND);// fstoint <fdreg>,<fsreg>,qword,round
else /* ROUND.L.D - MIPS III */
UML_FDTOINT(block, FPR64(FDREG), FPR64(FSREG), SIZE_QWORD, ROUND_ROUND);// fdtoint <fdreg>,<fsreg>,qword,round
+ UML_DSEXT(block, FPR64(FDREG), FPR64(FDREG), SIZE_DWORD);
return TRUE;
case 0x09:
@@ -2781,6 +2790,7 @@ int mips3_device::generate_cop1(drcuml_block *block, compiler_state *compiler, c
UML_FSTOINT(block, FPR64(FDREG), FPR32(FSREG), SIZE_QWORD, ROUND_TRUNC);// fstoint <fdreg>,<fsreg>,qword,trunc
else /* TRUNC.L.D - MIPS III */
UML_FDTOINT(block, FPR64(FDREG), FPR64(FSREG), SIZE_QWORD, ROUND_TRUNC);// fdtoint <fdreg>,<fsreg>,qword,trunc
+ UML_DSEXT(block, FPR64(FDREG), FPR64(FDREG), SIZE_DWORD);
return TRUE;
case 0x0a:
@@ -2788,6 +2798,7 @@ int mips3_device::generate_cop1(drcuml_block *block, compiler_state *compiler, c
UML_FSTOINT(block, FPR64(FDREG), FPR32(FSREG), SIZE_QWORD, ROUND_CEIL);// fstoint <fdreg>,<fsreg>,qword,ceil
else /* CEIL.L.D - MIPS III */
UML_FDTOINT(block, FPR64(FDREG), FPR64(FSREG), SIZE_QWORD, ROUND_CEIL);// fdtoint <fdreg>,<fsreg>,qword,ceil
+ UML_DSEXT(block, FPR64(FDREG), FPR64(FDREG), SIZE_DWORD);
return TRUE;
case 0x0b:
@@ -2795,6 +2806,7 @@ int mips3_device::generate_cop1(drcuml_block *block, compiler_state *compiler, c
UML_FSTOINT(block, FPR64(FDREG), FPR32(FSREG), SIZE_QWORD, ROUND_FLOOR);// fstoint <fdreg>,<fsreg>,qword,floor
else /* FLOOR.L.D - MIPS III */
UML_FDTOINT(block, FPR64(FDREG), FPR64(FSREG), SIZE_QWORD, ROUND_FLOOR);// fdtoint <fdreg>,<fsreg>,qword,floor
+ UML_DSEXT(block, FPR64(FDREG), FPR64(FDREG), SIZE_DWORD);
return TRUE;
case 0x0c:
diff --git a/src/emu/cpu/mips/mips3fe.c b/src/emu/cpu/mips/mips3fe.c
index da713856e65..7d031c32407 100644
--- a/src/emu/cpu/mips/mips3fe.c
+++ b/src/emu/cpu/mips/mips3fe.c
@@ -106,7 +106,7 @@ bool mips3_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.regin[0] |= REGFLAG_R(RSREG) | REGFLAG_R(RTREG);
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
}
- desc.targetpc = desc.pc + 4 + (SIMMVAL << 2);
+ desc.targetpc = desc.pc + 4 + SIMMVAL * 4;
desc.delayslots = 1;
desc.skipslots = (opswitch & 0x10) ? 1 : 0;
return true;
@@ -122,7 +122,7 @@ bool mips3_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.regin[0] |= REGFLAG_R(RSREG);
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
}
- desc.targetpc = desc.pc + 4 + (SIMMVAL << 2);
+ desc.targetpc = desc.pc + 4 + SIMMVAL * 4;
desc.delayslots = 1;
desc.skipslots = (opswitch & 0x10) ? 1 : 0;
return true;
@@ -396,7 +396,7 @@ bool mips3_frontend::describe_regimm(UINT32 op, opcode_desc &desc)
desc.regin[0] |= REGFLAG_R(RSREG);
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
}
- desc.targetpc = desc.pc + 4 + (SIMMVAL << 2);
+ desc.targetpc = desc.pc + 4 + SIMMVAL * 4;
desc.delayslots = 1;
desc.skipslots = (RTREG & 0x02) ? 1 : 0;
return true;
@@ -423,7 +423,7 @@ bool mips3_frontend::describe_regimm(UINT32 op, opcode_desc &desc)
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
}
desc.regout[0] |= REGFLAG_R(31);
- desc.targetpc = desc.pc + 4 + (SIMMVAL << 2);
+ desc.targetpc = desc.pc + 4 + SIMMVAL * 4;
desc.delayslots = 1;
desc.skipslots = (RTREG & 0x02) ? 1 : 0;
return true;
@@ -508,7 +508,7 @@ bool mips3_frontend::describe_cop0(UINT32 op, opcode_desc &desc)
case 0x00: // BCzF
case 0x01: // BCzT
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
- desc.targetpc = desc.pc + 4 + (SIMMVAL << 2);
+ desc.targetpc = desc.pc + 4 + SIMMVAL * 4;
desc.delayslots = 1;
return true;
}
@@ -580,7 +580,7 @@ bool mips3_frontend::describe_cop1(UINT32 op, opcode_desc &desc)
case 0x03: // BCzTL
desc.regin[2] |= REGFLAG_FCC;
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
- desc.targetpc = desc.pc + 4 + (SIMMVAL << 2);
+ desc.targetpc = desc.pc + 4 + SIMMVAL * 4;
desc.delayslots = 1;
desc.skipslots = (RTREG & 0x02) ? 1 : 0;
return true;
@@ -730,7 +730,7 @@ bool mips3_frontend::describe_cop2(UINT32 op, opcode_desc &desc)
case 0x00: // BCzF
case 0x01: // BCzT
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
- desc.targetpc = desc.pc + 4 + (SIMMVAL << 2);
+ desc.targetpc = desc.pc + 4 + SIMMVAL * 4;
desc.delayslots = 1;
return true;
}
diff --git a/src/emu/cpu/rsp/rsp.h b/src/emu/cpu/rsp/rsp.h
index 3d0ec785156..38e63a7a787 100644
--- a/src/emu/cpu/rsp/rsp.h
+++ b/src/emu/cpu/rsp/rsp.h
@@ -299,6 +299,7 @@ public:
void ccfunc_rsp_vabs_scalar();
void ccfunc_rsp_vaddc_scalar();
void ccfunc_rsp_vsubc_scalar();
+ void ccfunc_rsp_vaddb_scalar();
void ccfunc_rsp_vsaw_scalar();
void ccfunc_rsp_vlt_scalar();
void ccfunc_rsp_veq_scalar();
@@ -325,6 +326,7 @@ public:
void ccfunc_mtc2_scalar();
void ccfunc_ctc2_scalar();
#endif
+ void ccfunc_rsp_vrsq_scalar();
#if USE_SIMD && SIMUL_SIMD
void ccfunc_backup_regs();
void ccfunc_restore_regs();
@@ -541,6 +543,7 @@ private:
void generate_checksum_block(drcuml_block *block, compiler_state *compiler, const opcode_desc *seqhead, const opcode_desc *seqlast);
void generate_sequence_instruction(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc);
void generate_delay_slot_and_branch(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, UINT8 linkreg);
+ void generate_branch(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc);
int generate_vector_opcode(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc);
int generate_opcode(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc);
int generate_special(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc);
diff --git a/src/emu/cpu/rsp/rspdrc.c b/src/emu/cpu/rsp/rspdrc.c
index e2f5e9bb805..24154b985fc 100644
--- a/src/emu/cpu/rsp/rspdrc.c
+++ b/src/emu/cpu/rsp/rspdrc.c
@@ -4686,7 +4686,7 @@ inline void rsp_device::ccfunc_rsp_vaddc_scalar()
INT32 s2 = (UINT32)(UINT16)w2;
INT32 r = s1 + s2;
- vres[i] = (INT16)r;
+ vres[i] = (INT16)(r);
SET_ACCUM_L((INT16)r, i);
if (r & 0xffff0000)
@@ -4754,7 +4754,6 @@ inline void rsp_device::ccfunc_rsp_vsubc_scalar()
{
int op = m_rsp_state->arg0;
-
CLEAR_ZERO_FLAGS();
CLEAR_CARRY_FLAGS();
@@ -4789,6 +4788,67 @@ static void cfunc_rsp_vsubc_scalar(void *param)
}
#endif
+// VADDB
+//
+// 31 25 24 20 15 10 5 0
+// ------------------------------------------------------
+// | 010010 | 1 | EEEE | SSSSS | TTTTT | DDDDD | 010110 |
+// ------------------------------------------------------
+//
+// Adds two vector registers bytewise with rounding
+inline void rsp_device::ccfunc_rsp_vaddb_scalar()
+{
+ const int op = m_rsp_state->arg0;
+ const int round = (EL == 0) ? 0 : (1 << (EL - 1));
+
+ INT16 vres[8];
+ for (int i = 0; i < 8; i++)
+ {
+ UINT16 w1, w2;
+ SCALAR_GET_VS1(w1, i);
+ SCALAR_GET_VS2(w2, i);
+
+ UINT8 hb1 = w1 >> 8;
+ UINT8 lb1 = w1 & 0xff;
+ UINT8 hb2 = w2 >> 8;
+ UINT8 lb2 = w2 & 0xff;
+
+ UINT16 hs = hb1 + hb2 + round;
+ UINT16 ls = lb1 + lb2 + round;
+
+ SET_ACCUM_L((hs << 8) | ls, i);
+
+ hs >>= EL;
+ if (hs > 255)
+ {
+ hs = 255;
+ }
+ else if (hs < 0)
+ {
+ hs = 0;
+ }
+
+ ls >>= EL;
+ if (ls > 255)
+ {
+ ls = 255;
+ }
+ else if (ls < 0)
+ {
+ ls = 0;
+ }
+
+ vres[i] = 0; // VD writeback disabled on production hardware
+ // vres[i] = (hs << 8) | ls;
+ }
+ WRITEBACK_RESULT();
+}
+
+static void cfunc_rsp_vaddb_scalar(void *param)
+{
+ ((rsp_device *)param)->ccfunc_rsp_vaddb_scalar();
+}
+
#if USE_SIMD
// VSAW
//
@@ -6318,13 +6378,15 @@ inline void rsp_device::ccfunc_rsp_vrcpl_simd()
UINT16 urec;
SIMD_EXTRACT16(m_xv[VS2REG], urec, EL);
- INT32 rec = (urec | m_reciprocal_high);
-
+ INT32 rec = (INT16)urec;
INT32 datainput = rec;
- if (rec < 0)
+ if (m_dp_allowed)
{
- if (m_dp_allowed)
+ rec = (rec & 0x0000ffff) | m_reciprocal_high;
+ datainput = rec;
+
+ if (rec < 0)
{
if (rec < -32768)
{
@@ -6335,12 +6397,13 @@ inline void rsp_device::ccfunc_rsp_vrcpl_simd()
datainput = -datainput;
}
}
- else
- {
- datainput = -datainput;
- }
}
+ else if (datainput < 0)
+ {
+ datainput = -datainput;
+ shifter = 0x10;
+ }
if (datainput)
{
@@ -6353,25 +6416,12 @@ inline void rsp_device::ccfunc_rsp_vrcpl_simd()
}
}
}
- else
- {
- if (m_dp_allowed)
- {
- shifter = 0;
- }
- else
- {
- shifter = 0x10;
- }
- }
INT32 address = ((datainput << shifter) & 0x7fc00000) >> 22;
INT32 fetchval = rsp_divtable[address];
INT32 temp = (0x40000000 | (fetchval << 14)) >> ((~shifter) & 0x1f);
- if (rec < 0)
- {
- temp = ~temp;
- }
+ temp ^= rec >> 31;
+
if (!rec)
{
temp = 0x7fffffff;
@@ -6408,12 +6458,15 @@ inline void rsp_device::ccfunc_rsp_vrcpl_scalar()
int op = m_rsp_state->arg0;
INT32 shifter = 0;
- INT32 rec = ((UINT16)(VREG_S(VS2REG, EL & 7)) | m_reciprocal_high);
+ INT32 rec = (INT16)VREG_S(VS2REG, EL & 7);
INT32 datainput = rec;
- if (rec < 0)
+ if (m_dp_allowed)
{
- if (m_dp_allowed)
+ rec = (rec & 0x0000ffff) | m_reciprocal_high;
+ datainput = rec;
+
+ if (rec < 0)
{
if (rec < -32768)
{
@@ -6424,12 +6477,13 @@ inline void rsp_device::ccfunc_rsp_vrcpl_scalar()
datainput = -datainput;
}
}
- else
- {
- datainput = -datainput;
- }
}
+ else if (datainput < 0)
+ {
+ datainput = -datainput;
+ shifter = 0x10;
+ }
if (datainput)
{
@@ -6442,25 +6496,11 @@ inline void rsp_device::ccfunc_rsp_vrcpl_scalar()
}
}
}
- else
- {
- if (m_dp_allowed)
- {
- shifter = 0;
- }
- else
- {
- shifter = 0x10;
- }
- }
- INT32 address = ((datainput << shifter) & 0x7fc00000) >> 22;
- INT32 fetchval = rsp_divtable[address];
+ UINT32 address = (datainput << shifter) >> 22;
+ INT32 fetchval = rsp_divtable[address & 0x1ff];
INT32 temp = (0x40000000 | (fetchval << 14)) >> ((~shifter) & 0x1f);
- if (rec < 0)
- {
- temp = ~temp;
- }
+ temp ^= rec >> 31;
if (!rec)
{
temp = 0x7fffffff;
@@ -6592,6 +6632,136 @@ static void cfunc_rsp_vmov_scalar(void *param)
}
#endif
+// VRSQ
+//
+// 31 25 24 20 15 10 5 0
+// ------------------------------------------------------
+// | 010010 | 1 | EEEE | SSSSS | ?FFFF | DDDDD | 110100 |
+// ------------------------------------------------------
+//
+// Calculates reciprocal square-root
+
+inline void rsp_device::ccfunc_rsp_vrsq_scalar()
+{
+ int op = m_rsp_state->arg0;
+
+ INT32 shifter = 0;
+ INT32 rec = (INT16)VREG_S(VS2REG, EL & 7);
+ INT32 datainput = (rec < 0) ? (-rec) : (rec);
+
+ if (rec < 0)
+ {
+ if (rec < -32768)
+ {
+ datainput = ~datainput;
+ }
+ else
+ {
+ datainput = -datainput;
+ }
+ }
+
+ if (datainput)
+ {
+ for (int i = 0; i < 32; i++)
+ {
+ if (datainput & (1 << ((~i) & 0x1f)))
+ {
+ shifter = i;
+ break;
+ }
+ }
+ }
+ else
+ {
+ shifter = 0;
+ }
+
+ INT32 address = ((datainput << shifter) & 0x7fc00000) >> 22;
+ address = ((address | 0x200) & 0x3fe) | (shifter & 1);
+
+ INT32 fetchval = rsp_divtable[address];
+ INT32 temp = (0x40000000 | (fetchval << 14)) >> (((~shifter) & 0x1f) >> 1);
+ if (rec < 0)
+ {
+ temp = ~temp;
+ }
+ if (!rec)
+ {
+ temp = 0x7fffffff;
+ }
+ else if (rec == 0xffff8000)
+ {
+ temp = 0xffff0000;
+ }
+ rec = temp;
+
+ if (rec < 0)
+ {
+ if (m_dp_allowed)
+ {
+ if (rec < -32768)
+ {
+ datainput = ~datainput;
+ }
+ else
+ {
+ datainput = -datainput;
+ }
+ }
+ else
+ {
+ datainput = -datainput;
+ }
+ }
+
+ if (datainput)
+ {
+ for (int i = 0; i < 32; i++)
+ {
+ if (datainput & (1 << ((~i) & 0x1f)))
+ {
+ shifter = i;
+ break;
+ }
+ }
+ }
+ else
+ {
+ shifter = 0;
+ }
+
+ address = ((datainput << shifter) & 0x7fc00000) >> 22;
+ address = ((address | 0x200) & 0x3fe) | (shifter & 1);
+
+ fetchval = rsp_divtable[address];
+ temp = (0x40000000 | (fetchval << 14)) >> (((~shifter) & 0x1f) >> 1);
+ if (rec < 0)
+ {
+ temp = ~temp;
+ }
+ if (!rec)
+ {
+ temp = 0x7fff;
+ }
+ else if (rec == 0xffff8000)
+ {
+ temp = 0x0000;
+ }
+ rec = temp;
+
+ W_VREG_S(VDREG, VS1REG & 7) = (UINT16)rec;
+ for (int i = 0; i < 8; i++)
+ {
+ SET_ACCUM_L(VREG_S(VS2REG, VEC_EL_2(EL, i)), i);
+ }
+}
+
+static void cfunc_rsp_vrsq_scalar(void *param)
+{
+ ((rsp_device *)param)->ccfunc_rsp_vrsq_scalar();
+}
+
#if USE_SIMD
// VRSQL
//
@@ -6615,12 +6785,15 @@ inline void rsp_device::ccfunc_rsp_vrsql_simd()
INT32 shifter = 0;
UINT16 val;
SIMD_EXTRACT16(m_xv[VS2REG], val, EL);
- INT32 rec = m_reciprocal_high | val;
+ INT32 rec = (INT16)val;
INT32 datainput = rec;
- if (rec < 0)
+ if (m_dp_allowed)
{
- if (m_dp_allowed)
+ rec = (rec & 0x0000ffff) | m_reciprocal_high;
+ datainput = rec;
+
+ if (rec < 0)
{
if (rec < -32768)
{
@@ -6631,10 +6804,12 @@ inline void rsp_device::ccfunc_rsp_vrsql_simd()
datainput = -datainput;
}
}
- else
- {
- datainput = -datainput;
- }
+ }
+ else if (datainput < 0)
+ {
+ datainput = -datainput;
+
+ shifter = 0x10;
}
if (datainput)
@@ -6648,27 +6823,14 @@ inline void rsp_device::ccfunc_rsp_vrsql_simd()
}
}
}
- else
- {
- if (m_dp_allowed)
- {
- shifter = 0;
- }
- else
- {
- shifter = 0x10;
- }
- }
INT32 address = ((datainput << shifter) & 0x7fc00000) >> 22;
address = ((address | 0x200) & 0x3fe) | (shifter & 1);
INT32 fetchval = rsp_divtable[address];
INT32 temp = (0x40000000 | (fetchval << 14)) >> (((~shifter) & 0x1f) >> 1);
- if (rec < 0)
- {
- temp = ~temp;
- }
+ temp ^= rec >> 31;
+
if (!rec)
{
temp = 0x7fffffff;
@@ -6699,12 +6861,15 @@ inline void rsp_device::ccfunc_rsp_vrsql_scalar()
int op = m_rsp_state->arg0;
INT32 shifter = 0;
- INT32 rec = m_reciprocal_high | (UINT16)VREG_S(VS2REG, EL & 7);
+ INT32 rec = (INT16)VREG_S(VS2REG, EL & 7);
INT32 datainput = rec;
- if (rec < 0)
+ if (m_dp_allowed)
{
- if (m_dp_allowed)
+ rec = (rec & 0x0000ffff) | m_reciprocal_high;
+ datainput = rec;
+
+ if (rec < 0)
{
if (rec < -32768)
{
@@ -6715,10 +6880,12 @@ inline void rsp_device::ccfunc_rsp_vrsql_scalar()
datainput = -datainput;
}
}
- else
- {
- datainput = -datainput;
- }
+ }
+ else if (datainput < 0)
+ {
+ datainput = -datainput;
+
+ shifter = 0x10;
}
if (datainput)
@@ -6732,27 +6899,14 @@ inline void rsp_device::ccfunc_rsp_vrsql_scalar()
}
}
}
- else
- {
- if (m_dp_allowed)
- {
- shifter = 0;
- }
- else
- {
- shifter = 0x10;
- }
- }
INT32 address = ((datainput << shifter) & 0x7fc00000) >> 22;
address = ((address | 0x200) & 0x3fe) | (shifter & 1);
INT32 fetchval = rsp_divtable[address];
INT32 temp = (0x40000000 | (fetchval << 14)) >> (((~shifter) & 0x1f) >> 1);
- if (rec < 0)
- {
- temp = ~temp;
- }
+ temp ^= rec >> 31;
+
if (!rec)
{
temp = 0x7fffffff;
@@ -7361,6 +7515,30 @@ void rsp_device::generate_sequence_instruction(drcuml_block *block, compiler_sta
}
/*------------------------------------------------------------------
+ generate_branch
+------------------------------------------------------------------*/
+
+void rsp_device::generate_branch(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc)
+{
+ compiler_state compiler_temp = *compiler;
+
+ /* update the cycles and jump through the hash table to the target */
+ if (desc->targetpc != BRANCH_TARGET_DYNAMIC)
+ {
+ generate_update_cycles(block, &compiler_temp, desc->targetpc, TRUE); // <subtract cycles>
+ if (desc->flags & OPFLAG_INTRABLOCK_BRANCH)
+ UML_JMP(block, desc->targetpc | 0x80000000); // jmp desc->targetpc
+ else
+ UML_HASHJMP(block, 0, desc->targetpc, *m_nocode); // hashjmp <mode>,desc->targetpc,nocode
+ }
+ else
+ {
+ generate_update_cycles(block, &compiler_temp, mem(&m_rsp_state->jmpdest), TRUE); // <subtract cycles>
+ UML_HASHJMP(block, 0, mem(&m_rsp_state->jmpdest), *m_nocode); // hashjmp <mode>,<rsreg>,nocode
+ }
+}
+
+/*------------------------------------------------------------------
generate_delay_slot_and_branch
------------------------------------------------------------------*/
@@ -7386,23 +7564,7 @@ void rsp_device::generate_delay_slot_and_branch(drcuml_block *block, compiler_st
assert(desc->delay.first() != NULL);
generate_sequence_instruction(block, &compiler_temp, desc->delay.first()); // <next instruction>
- /* update the cycles and jump through the hash table to the target */
- if (desc->targetpc != BRANCH_TARGET_DYNAMIC)
- {
- generate_update_cycles(block, &compiler_temp, desc->targetpc, TRUE); // <subtract cycles>
- if (desc->flags & OPFLAG_INTRABLOCK_BRANCH)
- UML_JMP(block, desc->targetpc | 0x80000000); // jmp desc->targetpc
- else
- UML_HASHJMP(block, 0, desc->targetpc, *m_nocode);
- // hashjmp <mode>,desc->targetpc,nocode
- }
- else
- {
- generate_update_cycles(block, &compiler_temp, mem(&m_rsp_state->jmpdest), TRUE);
- // <subtract cycles>
- UML_HASHJMP(block, 0, mem(&m_rsp_state->jmpdest), *m_nocode);
- // hashjmp <mode>,<rsreg>,nocode
- }
+ generate_branch(block, compiler, desc);
/* update the label */
compiler->labelnum = compiler_temp.labelnum;
@@ -7618,6 +7780,26 @@ int rsp_device::generate_vector_opcode(drcuml_block *block, compiler_state *comp
#endif
return TRUE;
+ case 0x16: /* VADDB */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vaddb_scalar, this);
+ return TRUE;
+
+ case 0x17: /* VSUBB (reserved, functionally identical to VADDB) */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vaddb_scalar, this);
+ return TRUE;
+
+ case 0x18: /* VACCB (reserved, functionally identical to VADDB) */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vaddb_scalar, this);
+ return TRUE;
+
+ case 0x19: /* VSUCB (reserved, functionally identical to VADDB) */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vaddb_scalar, this);
+ return TRUE;
+
case 0x1d: /* VSAW */
UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
UML_CALLC(block, cfunc_rsp_vsaw_simd, this);
@@ -7827,6 +8009,11 @@ int rsp_device::generate_vector_opcode(drcuml_block *block, compiler_state *comp
#endif
return TRUE;
+ case 0x34: /* VRSQ */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC_block, cfunc_rsp_vrsq_scalar, this);
+ return TRUE;
+
case 0x35: /* VRSQL */
UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
UML_CALLC(block, cfunc_rsp_vrsql_simd, this);
@@ -7849,6 +8036,10 @@ int rsp_device::generate_vector_opcode(drcuml_block *block, compiler_state *comp
#endif
return TRUE;
+ case 0x37: /* VNOP */
+ case 0x3F: /* VNULL */
+ return TRUE;
+
default:
UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
UML_CALLC(block, cfunc_unimplemented_opcode, this);
@@ -7954,6 +8145,26 @@ int rsp_device::generate_vector_opcode(drcuml_block *block, compiler_state *comp
UML_CALLC(block, cfunc_rsp_vsubc_scalar, this);
return TRUE;
+ case 0x16: /* VADDB */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vaddb_scalar, this);
+ return TRUE;
+
+ case 0x17: /* VSUBB (reserved, functionally identical to VADDB) */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vaddb_scalar, this);
+ return TRUE;
+
+ case 0x18: /* VACCB (reserved, functionally identical to VADDB) */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vaddb_scalar, this);
+ return TRUE;
+
+ case 0x19: /* VSUCB (reserved, functionally identical to VADDB) */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vaddb_scalar, this);
+ return TRUE;
+
case 0x1d: /* VSAW */
UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
UML_CALLC(block, cfunc_rsp_vsaw_scalar, this);
@@ -8049,6 +8260,11 @@ int rsp_device::generate_vector_opcode(drcuml_block *block, compiler_state *comp
UML_CALLC(block, cfunc_rsp_vmov_scalar, this);
return TRUE;
+ case 0x34: /* VRSQ */
+ UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
+ UML_CALLC(block, cfunc_rsp_vrsq_scalar, this);
+ return TRUE;
+
case 0x35: /* VRSQL */
UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
UML_CALLC(block, cfunc_rsp_vrsql_scalar, this);
@@ -8059,6 +8275,10 @@ int rsp_device::generate_vector_opcode(drcuml_block *block, compiler_state *comp
UML_CALLC(block, cfunc_rsp_vrsqh_scalar, this);
return TRUE;
+ case 0x37: /* VNOP */
+ case 0x3F: /* VNULL */
+ return TRUE;
+
default:
UML_MOV(block, mem(&m_rsp_state->arg0), desc->opptr.l[0]); // mov [arg0],desc->opptr.l
UML_CALLC(block, cfunc_unimplemented_opcode, this);
@@ -8421,6 +8641,9 @@ int rsp_device::generate_special(drcuml_block *block, compiler_state *compiler,
UML_MOV(block, mem(&m_rsp_state->arg0), 3); // mov [arg0],3
UML_CALLC(block, cfunc_sp_set_status_cb, this); // callc cfunc_sp_set_status_cb
UML_MOV(block, mem(&m_rsp_state->icount), 0); // mov icount, #0
+ UML_MOV(block, mem(&m_rsp_state->jmpdest), desc->targetpc);
+
+ generate_branch(block, compiler, desc);
UML_EXIT(block, EXECUTE_OUT_OF_CYCLES);
return TRUE;
diff --git a/src/emu/cpu/rsp/rspfe.c b/src/emu/cpu/rsp/rspfe.c
index 85d6a36021b..bd610bca661 100644
--- a/src/emu/cpu/rsp/rspfe.c
+++ b/src/emu/cpu/rsp/rspfe.c
@@ -83,7 +83,7 @@ bool rsp_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.regin[0] |= REGFLAG_R(RSREG) | REGFLAG_R(RTREG);
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
}
- desc.targetpc = ((desc.pc + 4 + (SIMMVAL << 2)) & 0x00000fff) | 0x1000;
+ desc.targetpc = ((desc.pc + 4 + SIMMVAL * 4) & 0x00000fff) | 0x1000;
desc.delayslots = 1;
desc.skipslots = (opswitch & 0x10) ? 1 : 0;
return true;
@@ -97,7 +97,7 @@ bool rsp_frontend::describe(opcode_desc &desc, const opcode_desc *prev)
desc.regin[0] |= REGFLAG_R(RSREG);
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
}
- desc.targetpc = ((desc.pc + 4 + (SIMMVAL << 2)) & 0x00000fff) | 0x1000;
+ desc.targetpc = ((desc.pc + 4 + SIMMVAL * 4) & 0x00000fff) | 0x1000;
desc.delayslots = 1;
desc.skipslots = (opswitch & 0x10) ? 1 : 0;
return true;
@@ -207,8 +207,8 @@ bool rsp_frontend::describe_special(UINT32 op, opcode_desc &desc)
return true;
case 0x0d: // BREAK
- desc.flags |= OPFLAG_END_SEQUENCE;
- desc.targetpc = BRANCH_TARGET_DYNAMIC;
+ desc.flags |= OPFLAG_IS_UNCONDITIONAL_BRANCH | OPFLAG_END_SEQUENCE;
+ desc.targetpc = (op >> 5) & 0x000fffff;
return true;
}
@@ -234,7 +234,7 @@ bool rsp_frontend::describe_regimm(UINT32 op, opcode_desc &desc)
desc.regin[0] |= REGFLAG_R(RSREG);
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
}
- desc.targetpc = ((desc.pc + 4 + (SIMMVAL << 2)) & 0x00000fff) | 0x1000;
+ desc.targetpc = ((desc.pc + 4 + SIMMVAL * 4) & 0x00000fff) | 0x1000;
desc.delayslots = 1;
desc.skipslots = (RTREG & 0x02) ? 1 : 0;
return true;
@@ -249,7 +249,7 @@ bool rsp_frontend::describe_regimm(UINT32 op, opcode_desc &desc)
desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH;
}
desc.regout[0] |= REGFLAG_R(31);
- desc.targetpc = ((desc.pc + 4 + (SIMMVAL << 2)) & 0x00000fff) | 0x1000;
+ desc.targetpc = ((desc.pc + 4 + SIMMVAL * 4) & 0x00000fff) | 0x1000;
desc.delayslots = 1;
desc.skipslots = (RTREG & 0x02) ? 1 : 0;
return true;
diff --git a/src/emu/cpu/tms0980/tms0980.c b/src/emu/cpu/tms0980/tms0980.c
index bf95bccca8d..06a438521a1 100644
--- a/src/emu/cpu/tms0980/tms0980.c
+++ b/src/emu/cpu/tms0980/tms0980.c
@@ -123,7 +123,6 @@ unknown cycle: CME, SSE, SSS
#include "debugger.h"
#include "tms0980.h"
-#define LOG 0
const device_type TMS0980 = &device_creator<tms0980_cpu_device>;
@@ -236,20 +235,11 @@ const device_type TMS1300 = &device_creator<tms1300_cpu_device>;
#define I_YNEC ( MICRO_MASK | M_YTP | M_CKN | M_NE )
-static const UINT8 tms0980_c2_value[4] =
-{
- 0x00, 0x02, 0x01, 0x03
-};
-static const UINT8 tms0980_c3_value[8] =
-{
- 0x00, 0x04, 0x02, 0x06, 0x01, 0x05, 0x03, 0x07
-};
-static const UINT8 tms0980_c4_value[16] =
-{
- 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E, 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
-};
+static const UINT8 tms0980_c2_value[4] = { 0, 2, 1, 3 };
+static const UINT8 tms0980_c3_value[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
+static const UINT8 tms0980_c4_value[16] = { 0x0, 0x8, 0x4, 0xC, 0x2, 0xA, 0x6, 0xE, 0x1, 0x9, 0x5, 0xD, 0x3, 0xB, 0x7, 0xF };
static const UINT8 tms0980_bit_value[4] = { 1, 4, 2, 8 };
-static const UINT8 tms0980_nbit_value[4] = { 0x0E, 0x0B, 0x0D, 0x07 };
+static const UINT8 tms0980_nbit_value[4] = { 0xE, 0xB, 0xD, 0x7 };
static const UINT32 tms0980_decode[512] =
@@ -329,7 +319,8 @@ static const UINT32 tms0980_decode[512] =
};
-static const UINT32 tms1000_default_decode[256] = {
+static const UINT32 tms1000_default_decode[256] =
+{
/* 0x00 */
F_COMX, I_A8AAC, I_YNEA, I_TAM, I_TAMZA, I_A10AAC, I_A6AAC, I_DAN,
I_TKA, I_KNEZ, F_TDO, F_CLO, F_RSTR, F_SETR, I_IA, F_RETN,
@@ -371,7 +362,8 @@ static const UINT32 tms1000_default_decode[256] = {
};
-static const UINT32 tms1100_default_decode[256] = {
+static const UINT32 tms1100_default_decode[256] =
+{
/* 0x00 */
I_MNEA, I_ALEM, I_YNEA, I_XMA, I_DYN, I_IYC, I_AMAAC, I_DMAN,
I_TKA, F_COMX, F_TDO, F_COMC, F_RSTR, F_SETR, I_KNEZ, F_RETN,
@@ -504,8 +496,8 @@ void tms1xxx_cpu_device::device_start()
void tms1xxx_cpu_device::device_reset()
{
- m_pa = 0x0F;
- m_pb = 0x0F;
+ m_pa = 0xF;
+ m_pb = 0xF;
m_pc = 0;
m_dam = 0;
m_ca = 0;
@@ -620,7 +612,8 @@ location{1:0} = ( pc{5:4} == 00 && pc{0} == 0 ) => 11
( pc{5:4} == 11 && pc{0} == 1 ) => 10
*/
-static const UINT8 tms1000_next_pc[64] = {
+static const UINT8 tms1000_next_pc[64] =
+{
0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F,
0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A, 0x3C, 0x3F,
0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E,
@@ -711,7 +704,6 @@ void tms1xxx_cpu_device::execute_run()
{
do
{
-// debugger_instruction_hook( this, ( ( m_pa << m_pc_size ) | m_pc ) << 1 );
m_icount--;
switch( m_subcycle )
{
@@ -811,12 +803,10 @@ void tms1xxx_cpu_device::execute_run()
}
if ( m_decode & M_STO )
{
-//printf("write ram %02x data %01x\n", m_ram_address, m_a );
m_data->write_byte( m_ram_address, m_a );
}
if ( m_decode & M_CKM )
{
-//printf("write ram %02x data %01x\n", m_ram_address, m_cki_bus );
m_data->write_byte( m_ram_address, m_cki_bus );
}
}
@@ -824,12 +814,10 @@ void tms1xxx_cpu_device::execute_run()
{
if ( m_decode & F_SBIT )
{
-//printf("write ram %02x data %01x\n", m_ram_address, m_ram_data | tms0980_bit_value[ m_opcode & 0x03 ] );
m_data->write_byte( m_ram_address, m_ram_data | tms0980_bit_value[ m_opcode & 0x03 ] );
}
if ( m_decode & F_RBIT )
{
-//printf("write ram %02x data %01x\n", m_ram_address, m_ram_data & tms0980_nbit_value[ m_opcode & 0x03 ] );
m_data->write_byte( m_ram_address, m_ram_data & tms0980_nbit_value[ m_opcode & 0x03 ] );
}
if ( m_decode & F_SETR )
@@ -850,10 +838,6 @@ void tms1xxx_cpu_device::execute_run()
{
logerror("unknown output pla mapping for status latch = %d and a = %X\n", m_status_latch, m_a);
}
-//if ( ( c_output_pla[ ( m_status_latch << 4 ) | m_a ] & 0xFF00 ) == 0xFF00 )
-//printf("****** o output m_status_latch = %X, m_a = %X\n", m_status_latch, m_a);
-//else
-//printf("o output m_status_latch = %X, m_a = %X\n", m_status_latch, m_a);
m_write_o( 0, m_o & m_o_mask, 0xffff );
}
@@ -951,8 +935,6 @@ void tms1xxx_cpu_device::execute_run()
m_opcode = m_program->read_byte( m_rom_address );
}
next_pc();
- if (LOG)
- logerror( "tms0980: read opcode %04x from %04x. Set pc to %04x\n", m_opcode, m_rom_address, m_pc );
/* ram address */
m_ram_address = ( m_x << 4 ) | m_y;
diff --git a/src/emu/cpu/tms57002/tms57002.c b/src/emu/cpu/tms57002/tms57002.c
index bb8698f9661..fb55dfa916c 100644
--- a/src/emu/cpu/tms57002/tms57002.c
+++ b/src/emu/cpu/tms57002/tms57002.c
@@ -23,6 +23,7 @@ ADDRESS_MAP_END
tms57002_device::tms57002_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: cpu_device(mconfig, TMS57002, "TMS57002", tag, owner, clock, "tms57002", __FILE__),
device_sound_interface(mconfig, *this),
+ txrd(0),
program_config("program", ENDIANNESS_LITTLE, 32, 8, -2, ADDRESS_MAP_NAME(internal_pgm)),
data_config("data", ENDIANNESS_LITTLE, 8, 20)
{
diff --git a/src/emu/cpu/upd7810/upd7810.c b/src/emu/cpu/upd7810/upd7810.c
index 1232fd20271..70bdeafe766 100644
--- a/src/emu/cpu/upd7810/upd7810.c
+++ b/src/emu/cpu/upd7810/upd7810.c
@@ -567,8 +567,8 @@ UINT8 upd7810_device::RP(offs_t port)
data = (data & ~0x02) | (m_rxd & 1 ? 0x02 : 0x00);
if (m_mcc & 0x04) /* PC2 = SCK input/output */
data = (data & ~0x04) | (m_sck & 1 ? 0x04 : 0x00);
- if (m_mcc & 0x08) /* PC3 = TI input */
- data = (data & ~0x08) | (m_ti & 1 ? 0x08 : 0x00);
+ if (m_mcc & 0x08) /* PC3 = TI/INT2 input */
+ data = (data & ~0x08) | (m_int2 & 1 ? 0x08 : 0x00);
if (m_mcc & 0x10) /* PC4 = TO output */
data = (data & ~0x10) | (m_to & 1 ? 0x10 : 0x00);
if (m_mcc & 0x20) /* PC5 = CI input */
@@ -648,8 +648,8 @@ void upd7810_device::WP(offs_t port, UINT8 data)
data = (data & ~0x02) | (m_rxd & 1 ? 0x02 : 0x00);
if (m_mcc & 0x04) /* PC2 = SCK input/output */
data = (data & ~0x04) | (m_sck & 1 ? 0x04 : 0x00);
- if (m_mcc & 0x08) /* PC3 = TI input */
- data = (data & ~0x08) | (m_ti & 1 ? 0x08 : 0x00);
+ if (m_mcc & 0x08) /* PC3 = TI/INT2 input */
+ data = (data & ~0x08) | (m_int2 & 1 ? 0x08 : 0x00);
if (m_mcc & 0x10) /* PC4 = TO output */
data = (data & ~0x10) | (m_to & 1 ? 0x10 : 0x00);
if (m_mcc & 0x20) /* PC5 = CI input */
@@ -709,6 +709,14 @@ void upd7810_device::upd7810_take_irq()
return;
/* check the interrupts in priority sequence */
+ if (IRR & INTNMI)
+ {
+ /* Nonmaskable interrupt */
+ irqline = INPUT_LINE_NMI;
+ vector = 0x0004;
+ IRR &= ~INTNMI;
+ }
+ else
if ((IRR & INTFT0) && 0 == (MKL & 0x02))
{
vector = 0x0008;
@@ -1174,84 +1182,78 @@ void upd7810_device::upd7810_sio_input()
}
}
-void upd7810_device::handle_timers(int cycles)
+void upd7810_device::upd7810_handle_timer0(int cycles, int clkdiv)
{
- /**** TIMER 0 ****/
- if (TMM & 0x10) /* timer 0 upcounter reset ? */
- CNT0 = 0;
- else
+ OVC0 += cycles;
+ while (OVC0 >= clkdiv)
{
- switch (TMM & 0x0c) /* timer 0 clock source */
+ OVC0 -= clkdiv;
+ CNT0++;
+ if (CNT0 == TM0)
{
- case 0x00: /* clock divided by 12 */
- OVC0 += cycles;
- while (OVC0 >= 12)
+ CNT0 = 0;
+ IRR |= INTFT0;
+ /* timer F/F source is timer 0 ? */
+ if (0x00 == (TMM & 0x03))
{
- OVC0 -= 12;
- CNT0++;
- if (CNT0 == TM0)
- {
- CNT0 = 0;
- IRR |= INTFT0;
- /* timer F/F source is timer 0 ? */
- if (0x00 == (TMM & 0x03))
- {
- TO ^= 1;
- m_to_func(TO);
- }
- /* timer 1 chained with timer 0 ? */
- if ((TMM & 0xe0) == 0x60)
- {
- CNT1++;
- if (CNT1 == TM1)
- {
- IRR |= INTFT1;
- CNT1 = 0;
- /* timer F/F source is timer 1 ? */
- if (0x01 == (TMM & 0x03))
- {
- TO ^= 1;
- m_to_func(TO);
- }
- }
- }
- }
+ TO ^= 1;
+ m_to_func(TO);
}
- break;
- case 0x04: /* clock divided by 384 */
- OVC0 += cycles;
- while (OVC0 >= 384)
+ /* timer 1 chained with timer 0 ? */
+ if ((TMM & 0xe0) == 0x60)
{
- OVC0 -= 384;
- CNT0++;
- if (CNT0 == TM0)
+ CNT1++;
+ if (CNT1 == TM1)
{
- CNT0 = 0;
- IRR |= INTFT0;
- /* timer F/F source is timer 0 ? */
- if (0x00 == (TMM & 0x03))
+ CNT1 = 0;
+ IRR |= INTFT1;
+ /* timer F/F source is timer 1 ? */
+ if (0x01 == (TMM & 0x03))
{
TO ^= 1;
m_to_func(TO);
}
- /* timer 1 chained with timer 0 ? */
- if ((TMM & 0xe0) == 0x60)
- {
- CNT1++;
- if (CNT1 == TM1)
- {
- CNT1 = 0;
- IRR |= INTFT1;
- /* timer F/F source is timer 1 ? */
- if (0x01 == (TMM & 0x03))
- {
- TO ^= 1;
- m_to_func(TO);
- }
- }
- }
}
}
+ }
+ }
+}
+
+void upd7810_device::upd7810_handle_timer1(int cycles, int clkdiv)
+{
+ OVC1 += cycles;
+ while (OVC1 >= clkdiv)
+ {
+ OVC1 -= clkdiv;
+ CNT1++;
+ if (CNT1 == TM1)
+ {
+ CNT1 = 0;
+ IRR |= INTFT1;
+ /* timer F/F source is timer 1 ? */
+ if (0x01 == (TMM & 0x03))
+ {
+ TO ^= 1;
+ m_to_func(TO);
+ }
+ }
+ }
+}
+
+void upd7810_device::handle_timers(int cycles)
+{
+ /**** TIMER 0 ****/
+ if (TMM & 0x10) /* timer 0 upcounter reset ? */
+ CNT0 = 0;
+ else
+ {
+ switch (TMM & 0x0c) /* timer 0 clock source */
+ {
+ case 0x00: /* clock divided by 12 */
+ upd7810_handle_timer0(cycles, 12);
+ break;
+ case 0x04: /* clock divided by 384 */
+ upd7810_handle_timer0(cycles, 384);
break;
case 0x08: /* external signal at TI */
break;
@@ -1268,42 +1270,10 @@ void upd7810_device::handle_timers(int cycles)
switch (TMM & 0x60) /* timer 1 clock source */
{
case 0x00: /* clock divided by 12 */
- OVC1 += cycles;
- while (OVC1 >= 12)
- {
- OVC1 -= 12;
- CNT1++;
- if (CNT1 == TM1)
- {
- CNT1 = 0;
- IRR |= INTFT1;
- /* timer F/F source is timer 1 ? */
- if (0x01 == (TMM & 0x03))
- {
- TO ^= 1;
- m_to_func(TO);
- }
- }
- }
+ upd7810_handle_timer1(cycles, 12);
break;
case 0x20: /* clock divided by 384 */
- OVC1 += cycles;
- while (OVC1 >= 384)
- {
- OVC1 -= 384;
- CNT1++;
- if (CNT1 == TM1)
- {
- CNT1 = 0;
- IRR |= INTFT1;
- /* timer F/F source is timer 1 ? */
- if (0x01 == (TMM & 0x03))
- {
- TO ^= 1;
- m_to_func(TO);
- }
- }
- }
+ upd7810_handle_timer1(cycles, 384);
break;
case 0x40: /* external signal at TI */
break;
@@ -1338,6 +1308,12 @@ void upd7810_device::handle_timers(int cycles)
{
OVCE -= 12;
ECNT++;
+ /* Interrupt Control Circuit */
+ if (ETM0 == ECNT)
+ IRR |= INTFE0;
+ if (ETM1 == ECNT)
+ IRR |= INTFE1;
+ /* How and When ECNT is Cleared */
switch (ETMM & 0x0c)
{
case 0x00: /* clear ECNT */
@@ -1353,117 +1329,43 @@ void upd7810_device::handle_timers(int cycles)
ECNT = 0;
break;
}
- switch (ETMM & 0x30)
+ /* Conditions When ECNT Causes a CO0 Output Change */
+ if (((0x00 == (ETMM & 0x30)) && (ETM0 == ECNT)) || /* set CO0 if ECNT == ETM0 */
+ /* ((0x10 == (ETMM & 0x30)) prohibited */
+ ((0x20 == (ETMM & 0x30)) && (ETM0 == ECNT)) || /* set CO0 if ECNT == ETM0 or at falling CI input */
+ ((0x30 == (ETMM & 0x30)) && (ETM0 == ECNT || ETM1 == ECNT))) /* latch CO0 if ECNT == ETM0 or ECNT == ETM1 */
{
- case 0x00: /* set CO0 if ECNT == ETM0 */
- if (ETM0 == ECNT)
+ switch (EOM & 0x0e)
{
- switch (EOM & 0x0e)
- {
- case 0x02: /* toggle CO0 */
- CO0 = (CO0 >> 1) | ((CO0 ^ 2) & 2);
- break;
- case 0x04: /* reset CO0 */
- CO0 = 0;
- break;
- case 0x08: /* set CO0 */
- CO0 = 1;
- break;
- }
- }
- break;
- case 0x10: /* prohibited */
- break;
- case 0x20: /* set CO0 if ECNT == ETM0 or at falling CI input */
- if (ETM0 == ECNT)
- {
- switch (EOM & 0x0e)
- {
- case 0x02: /* toggle CO0 */
- CO0 = (CO0 >> 1) | ((CO0 ^ 2) & 2);
- break;
- case 0x04: /* reset CO0 */
- CO0 = 0;
- break;
- case 0x08: /* set CO0 */
- CO0 = 1;
- break;
- }
- }
- break;
- case 0x30: /* latch CO0 if ECNT == ETM0 or ECNT == ETM1 */
- if (ETM0 == ECNT || ETM1 == ECNT)
- {
- switch (EOM & 0x0e)
- {
- case 0x02: /* toggle CO0 */
- CO0 = (CO0 >> 1) | ((CO0 ^ 2) & 2);
- break;
- case 0x04: /* reset CO0 */
- CO0 = 0;
- break;
- case 0x08: /* set CO0 */
- CO0 = 1;
- break;
- }
+ case 0x02: /* toggle CO0 */
+ CO0 = (CO0 >> 1) | ((CO0 ^ 2) & 2);
+ break;
+ case 0x04: /* reset CO0 */
+ CO0 = 0;
+ break;
+ case 0x08: /* set CO0 */
+ CO0 = 1;
+ break;
}
- break;
}
- switch (ETMM & 0xc0)
+ /* Conditions When ECNT Causes a CO1 Output Change */
+ if (((0x00 == (ETMM & 0xc0)) && (ETM0 == ECNT)) || /* set CO1 if ECNT == ETM0 */
+ /* ((0x40 == (ETMM & 0xc0)) prohibited */
+ ((0x80 == (ETMM & 0xc0)) && (ETM0 == ECNT)) || /* set CO1 if ECNT == ETM0 or at falling CI input */
+ ((0xc0 == (ETMM & 0xc0)) && (ETM0 == ECNT || ETM1 == ECNT))) /* latch CO1 if ECNT == ETM0 or ECNT == ETM1 */
{
- case 0x00: /* lacth CO1 if ECNT == ETM1 */
- if (ETM1 == ECNT)
+ switch (EOM & 0xe0)
{
- switch (EOM & 0xe0)
- {
- case 0x20: /* toggle CO1 */
- CO1 = (CO1 >> 1) | ((CO1 ^ 2) & 2);
- break;
- case 0x40: /* reset CO1 */
- CO1 = 0;
- break;
- case 0x80: /* set CO1 */
- CO1 = 1;
- break;
- }
- }
- break;
- case 0x40: /* prohibited */
- break;
- case 0x80: /* latch CO1 if ECNT == ETM1 or falling edge of CI input */
- if (ETM1 == ECNT)
- {
- switch (EOM & 0xe0)
- {
- case 0x20: /* toggle CO1 */
- CO1 = (CO1 >> 1) | ((CO1 ^ 2) & 2);
- break;
- case 0x40: /* reset CO1 */
- CO1 = 0;
- break;
- case 0x80: /* set CO1 */
- CO1 = 1;
- break;
- }
- }
- break;
- case 0xc0: /* latch CO1 if ECNT == ETM0 or ECNT == ETM1 */
- if (ETM0 == ECNT || ETM1 == ECNT)
- {
- switch (EOM & 0xe0)
- {
- case 0x20: /* toggle CO1 */
- CO1 = (CO1 >> 1) | ((CO1 ^ 2) & 2);
- break;
- case 0x40: /* reset CO1 */
- CO1 = 0;
- break;
- case 0x80: /* set CO1 */
- CO1 = 1;
- break;
- }
+ case 0x20: /* toggle CO1 */
+ CO1 = (CO1 >> 1) | ((CO1 ^ 2) & 2);
+ break;
+ case 0x40: /* reset CO1 */
+ CO1 = 0;
+ break;
+ case 0x80: /* set CO1 */
+ CO1 = 1;
+ break;
}
- break;
}
}
}
@@ -1508,6 +1410,7 @@ void upd7810_device::handle_timers(int cycles)
else
m_adtot = 192;
m_adout = 0;
+ m_shdone = 0;
if (ANM & 0x01)
{
/* select mode */
@@ -1524,62 +1427,70 @@ void upd7810_device::handle_timers(int cycles)
if (ANM & 0x01)
{
/* select mode */
- while (m_adcnt > m_adtot)
+ if (m_shdone == 0)
{
- UINT8 cr = 0;
- m_adcnt -= m_adtot;
switch (m_adin)
{
- case 0: cr = m_an0_func(); break;
- case 1: cr = m_an1_func(); break;
- case 2: cr = m_an2_func(); break;
- case 3: cr = m_an3_func(); break;
- case 4: cr = m_an4_func(); break;
- case 5: cr = m_an5_func(); break;
- case 6: cr = m_an6_func(); break;
- case 7: cr = m_an7_func(); break;
+ case 0: m_tmpcr = m_an0_func(); break;
+ case 1: m_tmpcr = m_an1_func(); break;
+ case 2: m_tmpcr = m_an2_func(); break;
+ case 3: m_tmpcr = m_an3_func(); break;
+ case 4: m_tmpcr = m_an4_func(); break;
+ case 5: m_tmpcr = m_an5_func(); break;
+ case 6: m_tmpcr = m_an6_func(); break;
+ case 7: m_tmpcr = m_an7_func(); break;
}
+ m_shdone = 1;
+ }
+ if (m_adcnt > m_adtot)
+ {
+ m_adcnt -= m_adtot;
switch (m_adout)
{
- case 0: CR0 = cr; break;
- case 1: CR1 = cr; break;
- case 2: CR2 = cr; break;
- case 3: CR3 = cr; break;
+ case 0: CR0 = m_tmpcr; break;
+ case 1: CR1 = m_tmpcr; break;
+ case 2: CR2 = m_tmpcr; break;
+ case 3: CR3 = m_tmpcr; break;
}
- m_adout = (m_adout + 1) & 0x07;
+ m_adout = (m_adout + 1) & 0x03;
if (m_adout == 0)
IRR |= INTFAD;
+ m_shdone = 0;
}
}
else
{
/* scan mode */
- while (m_adcnt > m_adtot)
+ if (m_shdone == 0)
{
- UINT8 cr = 0;
- m_adcnt -= m_adtot;
switch (m_adin | m_adrange)
{
- case 0: cr = m_an0_func(); break;
- case 1: cr = m_an1_func(); break;
- case 2: cr = m_an2_func(); break;
- case 3: cr = m_an3_func(); break;
- case 4: cr = m_an4_func(); break;
- case 5: cr = m_an5_func(); break;
- case 6: cr = m_an6_func(); break;
- case 7: cr = m_an7_func(); break;
+ case 0: m_tmpcr = m_an0_func(); break;
+ case 1: m_tmpcr = m_an1_func(); break;
+ case 2: m_tmpcr = m_an2_func(); break;
+ case 3: m_tmpcr = m_an3_func(); break;
+ case 4: m_tmpcr = m_an4_func(); break;
+ case 5: m_tmpcr = m_an5_func(); break;
+ case 6: m_tmpcr = m_an6_func(); break;
+ case 7: m_tmpcr = m_an7_func(); break;
}
+ m_shdone = 1;
+ }
+ if (m_adcnt > m_adtot)
+ {
+ m_adcnt -= m_adtot;
switch (m_adout)
{
- case 0: CR0 = cr; break;
- case 1: CR1 = cr; break;
- case 2: CR2 = cr; break;
- case 3: CR3 = cr; break;
+ case 0: CR0 = m_tmpcr; break;
+ case 1: CR1 = m_tmpcr; break;
+ case 2: CR2 = m_tmpcr; break;
+ case 3: CR3 = m_tmpcr; break;
}
m_adin = (m_adin + 1) & 0x07;
- m_adout = (m_adout + 1) & 0x07;
+ m_adout = (m_adout + 1) & 0x03;
if (m_adout == 0)
IRR |= INTFAD;
+ m_shdone = 0;
}
}
@@ -1705,6 +1616,7 @@ void upd7810_device::base_device_start()
save_item(NAME(m_ovcf));
save_item(NAME(m_ovcs));
save_item(NAME(m_edges));
+ save_item(NAME(m_nmi));
save_item(NAME(m_int1));
save_item(NAME(m_int2));
@@ -1886,6 +1798,7 @@ void upd7810_device::device_reset()
m_co1 = 0;
m_irr = 0;
m_itf = 0;
+ m_nmi = 0;
m_int1 = 0;
m_int2 = 0;
@@ -1902,6 +1815,8 @@ void upd7810_device::device_reset()
m_edges = 0;
m_adcnt = 0;
m_adtot = 0;
+ m_tmpcr = 0;
+ m_shdone = 0;
m_adout = 0;
m_adin = 0;
m_adrange = 0;
@@ -2057,37 +1972,31 @@ void upd7801_device::execute_set_input(int irqline, int state)
void upd7810_device::execute_set_input(int irqline, int state)
{
- if (state != CLEAR_LINE)
- {
- if (irqline == INPUT_LINE_NMI)
- {
- /* no nested NMIs ? */
-// if (0 == (IRR & INTNMI))
- {
- IRR |= INTNMI;
- SP--;
- WM( SP, PSW );
- SP--;
- WM( SP, PCH );
- SP--;
- WM( SP, PCL );
- IFF = 0;
- PSW &= ~(SK|L0|L1);
- PC = 0x0004;
- }
- }
- else
- if (irqline == UPD7810_INTF1)
+ switch (irqline) {
+ case INPUT_LINE_NMI:
+ /* NMI is falling edge sensitive */
+ if ( m_nmi == ASSERT_LINE && state == CLEAR_LINE )
+ IRR |= INTNMI;
+
+ m_nmi = state;
+ break;
+ case UPD7810_INTF1:
+ /* INT1 is rising edge sensitive */
+ if ( m_int1 == CLEAR_LINE && state == ASSERT_LINE )
IRR |= INTF1;
- else
- if ( irqline == UPD7810_INTF2 && ( MKL & 0x20 ) )
+
+ m_int1 = state;
+ break;
+ case UPD7810_INTF2:
+ /* INT2 is falling edge sensitive */
+ if ( m_int2 == ASSERT_LINE && state == CLEAR_LINE )
IRR |= INTF2;
- // gamemaster hack
- else
- if (irqline == UPD7810_INTFE1)
- IRR |= INTFE1;
- else
- logerror("upd7810_set_irq_line invalid irq line #%d\n", irqline);
+
+ m_int2 = state;
+ break;
+ default:
+ logerror("upd7810_set_irq_line invalid irq line #%d\n", irqline);
+ break;
}
/* resetting interrupt requests is done with the SKIT/SKNIT opcodes only! */
}
diff --git a/src/emu/cpu/upd7810/upd7810.h b/src/emu/cpu/upd7810/upd7810.h
index 3be3177040c..45dbbfc8df9 100644
--- a/src/emu/cpu/upd7810/upd7810.h
+++ b/src/emu/cpu/upd7810/upd7810.h
@@ -169,17 +169,20 @@ protected:
virtual void handle_timers(int cycles);
virtual void upd7810_take_irq();
+ void upd7810_handle_timer0(int cycles, int clkdiv);
+ void upd7810_handle_timer1(int cycles, int clkdiv);
+
devcb_write_line m_to_func;
devcb_write_line m_txd_func;
devcb_read_line m_rxd_func;
- devcb_read_line m_an0_func;
- devcb_read_line m_an1_func;
- devcb_read_line m_an2_func;
- devcb_read_line m_an3_func;
- devcb_read_line m_an4_func;
- devcb_read_line m_an5_func;
- devcb_read_line m_an6_func;
- devcb_read_line m_an7_func;
+ devcb_read8 m_an0_func;
+ devcb_read8 m_an1_func;
+ devcb_read8 m_an2_func;
+ devcb_read8 m_an3_func;
+ devcb_read8 m_an4_func;
+ devcb_read8 m_an5_func;
+ devcb_read8 m_an6_func;
+ devcb_read8 m_an7_func;
typedef void (upd7810_device::*opcode_func)();
@@ -291,8 +294,9 @@ protected:
UINT8 m_co1;
UINT16 m_irr; /* interrupt request register */
UINT16 m_itf; /* interrupt test flag register */
- int m_int1; /* keep track of current int1 state. Needed for 7801 irq checking. */
- int m_int2; /* keep track to current int2 state. Needed for 7801 irq checking. */
+ int m_nmi; /* keep track of current nmi state. Needed for 7810 irq checking. */
+ int m_int1; /* keep track of current int1 state. Needed for irq checking. */
+ int m_int2; /* keep track to current int2 state. Needed for irq checking. */
/* internal helper variables */
UINT16 m_txs; /* transmitter shift register */
@@ -308,6 +312,8 @@ protected:
UINT8 m_edges; /* rising/falling edge flag for serial I/O */
UINT16 m_adcnt; /* A/D converter cycle count */
UINT8 m_adtot; /* A/D converter total cycles per conversion */
+ UINT8 m_tmpcr; /* temporary analog digital conversion register */
+ int m_shdone; /* A/D converter sample and hold done */
int m_adout; /* currently selected A/D converter output register */
int m_adin; /* currently selected A/D converter input */
int m_adrange;/* in scan mode, A/D converter range (AN0-AN3 or AN4-AN7) */
diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h
index 7aed2542f26..032f91fc466 100644
--- a/src/emu/drivers/xtal.h
+++ b/src/emu/drivers/xtal.h
@@ -133,6 +133,7 @@ enum
XTAL_14_7456MHz = 14745600, /* Namco System 12 & System Super 22/23 for JVS */
XTAL_15MHz = 15000000, /* Sinclair QL, Amusco Poker */
XTAL_15_36MHz = 15360000, /* Visual 1050 */
+ XTAL_15_4MHz = 15400000, /* DVK KSM */
XTAL_15_468MHz = 15468480, /* Bank Panic h/w, Sega G80 */
XTAL_15_8976MHz = 15897600, /* IAI Swyft */
XTAL_16MHz = 16000000, /* Extremely common, used on 100's of PCBs */
diff --git a/src/emu/machine/ataflash.c b/src/emu/machine/ataflash.c
index 0e0b3221540..226e887d80e 100644
--- a/src/emu/machine/ataflash.c
+++ b/src/emu/machine/ataflash.c
@@ -202,3 +202,8 @@ void ata_flash_pccard_device::process_buffer()
ide_hdd_device::process_buffer();
}
}
+
+attotime ata_flash_pccard_device::seek_time()
+{
+ return attotime::zero;
+}
diff --git a/src/emu/machine/ataflash.h b/src/emu/machine/ataflash.h
index b2a1c9f1901..9c067e1ecc3 100644
--- a/src/emu/machine/ataflash.h
+++ b/src/emu/machine/ataflash.h
@@ -26,6 +26,7 @@ protected:
virtual void device_start();
virtual void device_reset();
+ virtual attotime seek_time();
virtual void process_command();
virtual void process_buffer();
virtual bool is_ready();
diff --git a/src/emu/machine/i6300esb.c b/src/emu/machine/i6300esb.c
new file mode 100644
index 00000000000..59fc013a226
--- /dev/null
+++ b/src/emu/machine/i6300esb.c
@@ -0,0 +1,119 @@
+#include "i6300esb.h"
+
+const device_type I6300ESB_WATCHDOG = &device_creator<i6300esb_watchdog_device>;
+const device_type I6300ESB_LPC = &device_creator<i6300esb_lpc_device>;
+
+DEVICE_ADDRESS_MAP_START(map, 32, i6300esb_watchdog_device)
+ADDRESS_MAP_END
+
+i6300esb_watchdog_device::i6300esb_watchdog_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, I6300ESB_WATCHDOG, "i6300ESB southbridge watchdog", tag, owner, clock, "i6300esb_watchdog", __FILE__)
+{
+}
+
+void i6300esb_watchdog_device::device_start()
+{
+ pci_device::device_start();
+ add_map(16, M_MEM, FUNC(i6300esb_watchdog_device::map));
+}
+
+void i6300esb_watchdog_device::device_reset()
+{
+ pci_device::device_reset();
+}
+
+
+DEVICE_ADDRESS_MAP_START(config_map, 32, i6300esb_lpc_device)
+ AM_RANGE(0x58, 0x5b) AM_READWRITE (gpio_base_r, gpio_base_w)
+ AM_RANGE(0x5c, 0x5f) AM_READWRITE8 (gpio_cntl_r, gpio_cntl_w, 0x000000ff)
+ AM_RANGE(0xe4, 0xe7) AM_READWRITE16(gen1_dec_r, gen1_dec_w, 0x0000ffff)
+ AM_RANGE(0xe4, 0xe7) AM_READWRITE16(lpc_en_r, lpc_en_w, 0xffff0000)
+ AM_RANGE(0xe8, 0xeb) AM_READWRITE (fwh_sel1_r, fwh_sel1_w)
+
+ AM_INHERIT_FROM(pci_device::config_map)
+ADDRESS_MAP_END
+
+
+i6300esb_lpc_device::i6300esb_lpc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, I6300ESB_LPC, "i6300ESB southbridge ISA/LPC bridge", tag, owner, clock, "i6300esb_lpc", __FILE__)
+{
+}
+
+void i6300esb_lpc_device::device_start()
+{
+ pci_device::device_start();
+}
+
+void i6300esb_lpc_device::device_reset()
+{
+ pci_device::device_reset();
+ gpio_base = 0;
+ gpio_cntl = 0x00;
+ gen1_dec = 0x0000;
+ lpc_en = 0x0000;
+ fwh_sel1 = 0x00112233;
+}
+
+READ32_MEMBER (i6300esb_lpc_device::gpio_base_r)
+{
+ return gpio_base | 1;
+}
+
+WRITE32_MEMBER(i6300esb_lpc_device::gpio_base_w)
+{
+ COMBINE_DATA(&gpio_base);
+ gpio_base &= 0x0000ffc0;
+ logerror("%s: gpio_base = %08x\n", tag(), gpio_base);
+}
+
+READ8_MEMBER (i6300esb_lpc_device::gpio_cntl_r)
+{
+ return gpio_cntl;
+}
+
+WRITE8_MEMBER (i6300esb_lpc_device::gpio_cntl_w)
+{
+ COMBINE_DATA(&gpio_cntl);
+ logerror("%s: gpio_cntl = %02x\n", tag(), gpio_cntl);
+}
+
+READ16_MEMBER (i6300esb_lpc_device::gen1_dec_r)
+{
+ return gen1_dec;
+}
+
+WRITE16_MEMBER(i6300esb_lpc_device::gen1_dec_w)
+{
+ COMBINE_DATA(&gen1_dec);
+ logerror("%s: gen1_dec = %04x\n", tag(), gen1_dec);
+}
+
+READ16_MEMBER (i6300esb_lpc_device::lpc_en_r)
+{
+ return lpc_en;
+}
+
+WRITE16_MEMBER(i6300esb_lpc_device::lpc_en_w)
+{
+ COMBINE_DATA(&lpc_en);
+ logerror("%s: lpc_en = %04x\n", tag(), lpc_en);
+}
+
+READ32_MEMBER (i6300esb_lpc_device::fwh_sel1_r)
+{
+ return fwh_sel1;
+}
+
+WRITE32_MEMBER(i6300esb_lpc_device::fwh_sel1_w)
+{
+ COMBINE_DATA(&fwh_sel1);
+ logerror("%s: fwh_sel1 = %08x\n", tag(), fwh_sel1);
+}
+
+void i6300esb_lpc_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
+{
+ memory_space->install_rom(0xfff00000, 0xffffffff, m_region->base());
+ memory_space->install_rom(0x000f0000, 0x000fffff, m_region->base()+0xf0000);
+}
+
diff --git a/src/emu/machine/i6300esb.h b/src/emu/machine/i6300esb.h
new file mode 100644
index 00000000000..1749b6dcefb
--- /dev/null
+++ b/src/emu/machine/i6300esb.h
@@ -0,0 +1,60 @@
+// Intel i6300ESB southbridge
+
+#ifndef I6300ESB_H
+#define I6300ESB_H
+
+#include "pci.h"
+
+#define MCFG_I6300ESB_LPC_ADD(_tag) \
+ MCFG_PCI_DEVICE_ADD(_tag, I6300ESB_LPC, 0x808625a1, 0x02, 0x060100, 0x00000000)
+
+#define MCFG_I6300ESB_WATCHDOG_ADD(_tag, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, I6300ESB_WATCHDOG, 0x808625ab, 0x02, 0x088000, _subdevice_id)
+
+class i6300esb_lpc_device : public pci_device {
+public:
+ i6300esb_lpc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ virtual void map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space);
+
+ virtual DECLARE_ADDRESS_MAP(config_map, 32);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ UINT32 gpio_base, fwh_sel1;
+ UINT16 gen1_dec, lpc_en;
+ UINT8 gpio_cntl;
+
+ DECLARE_READ32_MEMBER (gpio_base_r); // 58
+ DECLARE_WRITE32_MEMBER(gpio_base_w);
+ DECLARE_READ8_MEMBER (gpio_cntl_r); // 5c
+ DECLARE_WRITE8_MEMBER (gpio_cntl_w);
+
+ DECLARE_READ16_MEMBER (gen1_dec_r); // e4
+ DECLARE_WRITE16_MEMBER(gen1_dec_w);
+ DECLARE_READ16_MEMBER (lpc_en_r); // e6
+ DECLARE_WRITE16_MEMBER(lpc_en_w);
+ DECLARE_READ32_MEMBER (fwh_sel1_r); // e8
+ DECLARE_WRITE32_MEMBER(fwh_sel1_w);
+};
+
+class i6300esb_watchdog_device : public pci_device {
+public:
+ i6300esb_watchdog_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(map, 32);
+};
+
+extern const device_type I6300ESB_LPC;
+extern const device_type I6300ESB_WATCHDOG;
+
+#endif
diff --git a/src/emu/machine/i82541.c b/src/emu/machine/i82541.c
new file mode 100644
index 00000000000..e6d415c6dd7
--- /dev/null
+++ b/src/emu/machine/i82541.c
@@ -0,0 +1,30 @@
+#include "i82541.h"
+
+const device_type I82541 = &device_creator<i82541_device>;
+
+DEVICE_ADDRESS_MAP_START(registers_map, 32, i82541_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(flash_map, 32, i82541_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(registers_io_map, 32, i82541_device)
+ADDRESS_MAP_END
+
+i82541_device::i82541_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, I82541, "I82541 ethernet controller", tag, owner, clock, "i82541", __FILE__)
+{
+}
+
+void i82541_device::device_start()
+{
+ pci_device::device_start();
+ add_map(128*1024, M_MEM, FUNC(i82541_device::registers_map));
+ add_map(128*1024, M_MEM, FUNC(i82541_device::flash_map));
+ add_map(32, M_IO, FUNC(i82541_device::registers_io_map));
+}
+
+void i82541_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/emu/machine/i82541.h b/src/emu/machine/i82541.h
new file mode 100644
index 00000000000..eaf57e54f60
--- /dev/null
+++ b/src/emu/machine/i82541.h
@@ -0,0 +1,27 @@
+// Intel I82541 ethernet controller
+
+#ifndef I82541_H
+#define I82541_H
+
+#include "pci.h"
+
+#define MCFG_I82541PI_ADD(_tag, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, I82541, 0x8086107c, 0x05, 0x020000, _subdevice_id)
+
+class i82541_device : public pci_device {
+public:
+ i82541_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(registers_map, 32);
+ DECLARE_ADDRESS_MAP(flash_map, 32);
+ DECLARE_ADDRESS_MAP(registers_io_map, 32);
+};
+
+extern const device_type I82541;
+
+#endif
diff --git a/src/emu/machine/i82875p.c b/src/emu/machine/i82875p.c
new file mode 100644
index 00000000000..9df538d9209
--- /dev/null
+++ b/src/emu/machine/i82875p.c
@@ -0,0 +1,71 @@
+#include "i82875p.h"
+
+const device_type I82875P_HOST = &device_creator<i82875p_host_device>;
+const device_type I82875P_AGP = &device_creator<i82875p_agp_device>;
+
+DEVICE_ADDRESS_MAP_START(agp_translation_map, 32, i82875p_host_device)
+ADDRESS_MAP_END
+
+i82875p_host_device::i82875p_host_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_host_device(mconfig, I82875P_HOST, "i82875p northbridge", tag, owner, clock, "i82875p_host", __FILE__)
+{
+}
+
+void i82875p_host_device::set_cpu_tag(const char *_cpu_tag)
+{
+ cpu_tag = _cpu_tag;
+}
+
+void i82875p_host_device::set_ram_size(int _ram_size)
+{
+ ram_size = _ram_size;
+}
+
+void i82875p_host_device::device_start()
+{
+ pci_host_device::device_start();
+ cpu = machine().device<cpu_device>(cpu_tag);
+ memory_space = &cpu->space(AS_PROGRAM);
+ io_space = &cpu->space(AS_IO);
+
+ memory_window_start = 0;
+ memory_window_end = 0xffffffff;
+ memory_offset = 0;
+ io_window_start = 0;
+ io_window_end = 0xffff;
+ io_offset = 0;
+
+ ram.resize(ram_size/4);
+
+ // Resizeable with the apsize register
+ add_map(256*1024*1024, M_MEM, FUNC(i82875p_host_device::agp_translation_map));
+}
+
+void i82875p_host_device::device_reset()
+{
+ pci_host_device::device_reset();
+}
+
+void i82875p_host_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
+{
+ io_space->install_device(0, 0xffff, *static_cast<pci_host_device *>(this), &pci_host_device::io_configuration_access_map);
+}
+
+
+
+
+i82875p_agp_device::i82875p_agp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : agp_bridge_device(mconfig, I82875P_AGP, "i82875p AGP bridge", tag, owner, clock, "i82875p_agp", __FILE__)
+{
+}
+
+void i82875p_agp_device::device_start()
+{
+ agp_bridge_device::device_start();
+}
+
+void i82875p_agp_device::device_reset()
+{
+ agp_bridge_device::device_reset();
+}
diff --git a/src/emu/machine/i82875p.h b/src/emu/machine/i82875p.h
new file mode 100644
index 00000000000..2f3d67f7570
--- /dev/null
+++ b/src/emu/machine/i82875p.h
@@ -0,0 +1,52 @@
+// Intel i82875p northbridge
+
+#ifndef I82875P_H
+#define I82875P_H
+
+#include "pci.h"
+
+#define MCFG_I82875P_HOST_ADD(_tag, _subdevice_id, _cpu_tag, _ram_size) \
+ MCFG_PCI_HOST_ADD(_tag, I82875P_HOST, 0x80862578, 0x02, _subdevice_id) \
+ downcast<i82875p_host_device *>(device)->set_cpu_tag(_cpu_tag); \
+ downcast<i82875p_host_device *>(device)->set_ram_size(_ram_size);
+
+#define MCFG_I82875P_AGP_ADD(_tag) \
+ MCFG_AGP_BRIDGE_ADD(_tag, I82875P_AGP, 0x80862579, 0x02)
+
+class i82875p_host_device : public pci_host_device {
+public:
+ i82875p_host_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ void set_cpu_tag(const char *tag);
+ void set_ram_size(int ram_size);
+
+ virtual void map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(agp_translation_map, 32);
+
+ const char *cpu_tag;
+ int ram_size;
+ cpu_device *cpu;
+ dynamic_array<UINT32> ram;
+};
+
+class i82875p_agp_device : public agp_bridge_device {
+public:
+ i82875p_agp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+};
+
+extern const device_type I82875P_HOST;
+extern const device_type I82875P_AGP;
+
+
+#endif
diff --git a/src/emu/machine/idehd.h b/src/emu/machine/idehd.h
index 090d39a7ddc..f00f055d60d 100644
--- a/src/emu/machine/idehd.h
+++ b/src/emu/machine/idehd.h
@@ -44,6 +44,7 @@ protected:
virtual int read_sector(UINT32 lba, void *buffer) = 0;
virtual int write_sector(UINT32 lba, const void *buffer) = 0;
+ virtual attotime seek_time();
void ide_build_identify_device();
@@ -72,7 +73,6 @@ private:
void security_error();
void read_first_sector();
void soft_reset();
- attotime seek_time();
UINT32 m_cur_lba;
UINT16 m_block_count;
@@ -93,9 +93,6 @@ public:
ide_hdd_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
ide_hdd_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
- virtual int read_sector(UINT32 lba, void *buffer) { if (m_disk == NULL) return 0; return hard_disk_read(m_disk, lba, buffer); }
- virtual int write_sector(UINT32 lba, const void *buffer) { if (m_disk == NULL) return 0; return hard_disk_write(m_disk, lba, buffer); }
-
protected:
// device-level overrides
virtual void device_start();
@@ -104,6 +101,8 @@ protected:
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const;
+ virtual int read_sector(UINT32 lba, void *buffer) { if (m_disk == NULL) return 0; return hard_disk_read(m_disk, lba, buffer); }
+ virtual int write_sector(UINT32 lba, const void *buffer) { if (m_disk == NULL) return 0; return hard_disk_write(m_disk, lba, buffer); }
virtual UINT8 calculate_status();
chd_file *m_handle;
diff --git a/src/emu/machine/lpci.c b/src/emu/machine/lpci.c
new file mode 100644
index 00000000000..03eff2d5d6e
--- /dev/null
+++ b/src/emu/machine/lpci.c
@@ -0,0 +1,289 @@
+/***************************************************************************
+
+ machine/lpci.c
+
+ Legacy PCI bus
+
+ The PCI bus is a 32-bit bus introduced by Intel, so it is little endian
+
+ Control word:
+ bit 31: Enable bit
+ bits 30-24: Reserved
+ bits 23-16: PCI bus number
+ bits 15-11: PCI device number
+ bits 10- 8: PCI function number
+ bits 7- 0: Offset address
+
+ Standard PCI registers:
+ 0x00 2 Vendor ID
+ 0x02 2 Device ID
+ 0x04 2 PCI Command
+ 0x06 2 PCI Status
+ 0x08 1 Revision ID
+ 0x09 1 Programming Interface
+ 0x0A 1 Subclass Code
+ 0x0B 1 Class Code
+
+ Class Code/Subclass Code/Programming Interface
+ 0x00XXXX Pre-PCI 2.0 devices
+ 0x000000 Non-VGA device
+ 0x000101 VGA device
+ 0x01XXXX Storage Controller
+ 0x010000 SCSI
+ 0x0101XX IDE
+ 0x0102XX Floppy
+ 0x0103XX IPI
+ 0x0104XX RAID
+ 0x0180XX Other
+ 0x02XXXX Network Card
+ 0x020000 Ethernet
+ 0x020100 Tokenring
+ 0x020200 FDDI
+ 0x020300 ATM
+ 0x028000 Other
+ 0x03XXXX Display Controller
+ 0x030000 VGA
+ 0x030001 8514 Compatible
+ 0x030100 XGA
+ 0x038000 Other
+ 0x04XXXX Multimedia
+ 0x040000 Video
+ 0x040100 Audio
+ 0x048000 Other
+ 0x05XXXX Memory Controller
+ 0x050000 RAM
+ 0x050100 Flash
+ 0x058000 Other
+ 0x06XXXX Bridge
+ 0x060000 Host/PCI
+ 0x060100 PCI/ISA
+ 0x060200 PCI/EISA
+ 0x060300 PCI/Micro Channel
+ 0x060400 PCI/PCI
+ 0x060500 PCI/PCMCIA
+ 0x060600 PCI/NuBus
+ 0x060700 PCI/CardBus
+ 0x068000 Other
+
+ Information on PCI vendors can be found at http://www.pcidatabase.com/
+
+***************************************************************************/
+
+#include "emu.h"
+#include "machine/lpci.h"
+
+#define LOG_PCI 0
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+const device_type PCI_BUS_LEGACY = &device_creator<pci_bus_legacy_device>;
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// pci_bus_legacy_device - constructor
+//-------------------------------------------------
+pci_bus_legacy_device::pci_bus_legacy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, PCI_BUS_LEGACY, "PCI Bus Legacy", tag, owner, clock, "pci_bus_legacy", __FILE__),
+ m_father(NULL)
+{
+ for (int i = 0; i < ARRAY_LENGTH(m_devtag); i++) {
+ m_devtag[i]= NULL;
+ m_read_callback[i] = NULL;
+ m_write_callback[i] = NULL;
+ }
+ m_siblings_count = 0;
+}
+
+/***************************************************************************
+ INLINE FUNCTIONS
+***************************************************************************/
+
+READ32_MEMBER( pci_bus_legacy_device::read )
+{
+ UINT32 result = 0xffffffff;
+ int function, reg;
+
+ offset %= 2;
+
+ switch (offset)
+ {
+ case 0:
+ result = m_address;
+ break;
+
+ case 1:
+ if (m_devicenum != -1)
+ {
+ pci_read_func read = m_busnumaddr->m_read_callback[m_devicenum];
+ if (read != NULL)
+ {
+ function = (m_address >> 8) & 0x07;
+ reg = (m_address >> 0) & 0xfc;
+ result = (*read)(m_busnumaddr, m_busnumaddr->m_device[m_devicenum], function, reg, mem_mask);
+ }
+ }
+ break;
+ }
+
+ if (LOG_PCI)
+ logerror("read('%s'): offset=%d result=0x%08X\n", tag(), offset, result);
+
+ return result;
+}
+
+
+
+pci_bus_legacy_device *pci_bus_legacy_device::pci_search_bustree(int busnum, int devicenum, pci_bus_legacy_device *pcibus)
+{
+ int a;
+ pci_bus_legacy_device *ret;
+
+ if (pcibus->m_busnum == busnum)
+ {
+ return pcibus;
+ }
+ for (a = 0; a < pcibus->m_siblings_count; a++)
+ {
+ ret = pci_search_bustree(busnum, devicenum, pcibus->m_siblings[a]);
+ if (ret != NULL)
+ return ret;
+ }
+ return NULL;
+}
+
+
+
+WRITE32_MEMBER( pci_bus_legacy_device::write )
+{
+ offset %= 2;
+
+ if (LOG_PCI)
+ logerror("write('%s'): offset=%d data=0x%08X\n", tag(), offset, data);
+
+ switch (offset)
+ {
+ case 0:
+ m_address = data;
+
+ /* lookup current device */
+ if (m_address & 0x80000000)
+ {
+ int busnum = (m_address >> 16) & 0xff;
+ int devicenum = (m_address >> 11) & 0x1f;
+ m_busnumaddr = pci_search_bustree(busnum, devicenum, this);
+ if (m_busnumaddr != NULL)
+ {
+ m_busnumber = busnum;
+ m_devicenum = devicenum;
+ }
+ else
+ m_devicenum = -1;
+ if (LOG_PCI)
+ logerror(" bus:%d device:%d\n", busnum, devicenum);
+ }
+ break;
+
+ case 1:
+ if (m_devicenum != -1)
+ {
+ pci_write_func write = m_busnumaddr->m_write_callback[m_devicenum];
+ if (write != NULL)
+ {
+ int function = (m_address >> 8) & 0x07;
+ int reg = (m_address >> 0) & 0xfc;
+ (*write)(m_busnumaddr, m_busnumaddr->m_device[m_devicenum], function, reg, data, mem_mask);
+ }
+ if (LOG_PCI)
+ logerror(" function:%d register:%d\n", (m_address >> 8) & 0x07, (m_address >> 0) & 0xfc);
+ }
+ break;
+ }
+}
+
+
+
+READ64_MEMBER(pci_bus_legacy_device::read_64be)
+{
+ UINT64 result = 0;
+ mem_mask = FLIPENDIAN_INT64(mem_mask);
+ if (ACCESSING_BITS_0_31)
+ result |= (UINT64)read(space, offset * 2 + 0, mem_mask >> 0) << 0;
+ if (ACCESSING_BITS_32_63)
+ result |= (UINT64)read(space, offset * 2 + 1, mem_mask >> 32) << 32;
+ return FLIPENDIAN_INT64(result);
+}
+
+WRITE64_MEMBER(pci_bus_legacy_device::write_64be)
+{
+ data = FLIPENDIAN_INT64(data);
+ mem_mask = FLIPENDIAN_INT64(mem_mask);
+ if (ACCESSING_BITS_0_31)
+ write(space, offset * 2 + 0, data >> 0, mem_mask >> 0);
+ if (ACCESSING_BITS_32_63)
+ write(space, offset * 2 + 1, data >> 32, mem_mask >> 32);
+}
+
+
+void pci_bus_legacy_device::add_sibling(pci_bus_legacy_device *sibling, int busnum)
+{
+ m_siblings[m_siblings_count] = sibling;
+ m_siblings_busnum[m_siblings_count] = busnum;
+ m_siblings_count++;
+}
+
+
+//-------------------------------------------------
+// device_post_load - handle updating after a
+// restore
+//-------------------------------------------------
+
+void pci_bus_legacy_device::device_post_load()
+{
+ if (m_devicenum != -1)
+ {
+ m_busnumaddr = pci_search_bustree(m_busnumber, m_devicenum, this);
+ }
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void pci_bus_legacy_device::device_start()
+{
+ /* store a pointer back to the device */
+ m_devicenum = -1;
+
+ /* find all our devices */
+ for (int i = 0; i < ARRAY_LENGTH(m_devtag); i++)
+ if (m_devtag[i] != NULL)
+ m_device[i] = machine().device(m_devtag[i]);
+
+ if (m_father != NULL) {
+ pci_bus_legacy_device *father = machine().device<pci_bus_legacy_device>(m_father);
+ if (father)
+ father->add_sibling(this, m_busnum);
+ }
+
+ /* register pci states */
+ save_item(NAME(m_address));
+ save_item(NAME(m_devicenum));
+ save_item(NAME(m_busnum));
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void pci_bus_legacy_device::device_reset()
+{
+ /* reset the drive state */
+ m_devicenum = -1;
+ m_address = 0;
+}
diff --git a/src/emu/machine/lpci.h b/src/emu/machine/lpci.h
new file mode 100644
index 00000000000..f3c47a6a82c
--- /dev/null
+++ b/src/emu/machine/lpci.h
@@ -0,0 +1,81 @@
+/***************************************************************************
+
+ machine/lpci.h
+
+ Legacy PCI bus
+
+***************************************************************************/
+
+#ifndef LPCI_H
+#define LPCI_H
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+typedef UINT32 (*pci_read_func)(device_t *pcibus, device_t *device, int function, int reg, UINT32 mem_mask);
+typedef void (*pci_write_func)(device_t *pcibus, device_t *device, int function, int reg, UINT32 data, UINT32 mem_mask);
+
+// ======================> pci_bus_legacy_device
+
+class pci_bus_legacy_device : public device_t
+{
+public:
+ // construction/destruction
+ pci_bus_legacy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ DECLARE_READ32_MEMBER( read );
+ DECLARE_WRITE32_MEMBER( write );
+
+ DECLARE_READ64_MEMBER( read_64be );
+ DECLARE_WRITE64_MEMBER( write_64be );
+
+ void set_busnum(int busnum) { m_busnum = busnum; }
+ void set_father(const char *father) { m_father = father; }
+ void set_device(int num, const char *tag, pci_read_func read_func, pci_write_func write_func) {
+ m_devtag[num] = tag; m_read_callback[num] = read_func; m_write_callback[num] = write_func; }
+
+ pci_bus_legacy_device *pci_search_bustree(int busnum, int devicenum, pci_bus_legacy_device *pcibus);
+ void add_sibling(pci_bus_legacy_device *sibling, int busnum);
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void device_post_load();
+
+private:
+ UINT8 m_busnum;
+ const char * m_devtag[32];
+ pci_read_func m_read_callback[32];
+ pci_write_func m_write_callback[32];
+ const char * m_father;
+ device_t * m_device[32];
+ pci_bus_legacy_device * m_siblings[8];
+ UINT8 m_siblings_busnum[8];
+ int m_siblings_count;
+
+ offs_t m_address;
+ INT8 m_devicenum; // device number we are addressing
+ INT8 m_busnumber; // pci bus number we are addressing
+ pci_bus_legacy_device * m_busnumaddr; // pci bus we are addressing
+};
+
+// device type definition
+extern const device_type PCI_BUS_LEGACY;
+
+
+/***************************************************************************
+ DEVICE CONFIGURATION MACROS
+***************************************************************************/
+
+#define MCFG_PCI_BUS_LEGACY_ADD(_tag, _busnum) \
+ MCFG_DEVICE_ADD(_tag, PCI_BUS_LEGACY, 0) \
+ downcast<pci_bus_legacy_device *>(device)->set_busnum(_busnum);
+#define MCFG_PCI_BUS_LEGACY_DEVICE(_devnum, _devtag, _configread, _configwrite) \
+ downcast<pci_bus_legacy_device *>(device)->set_device(_devnum, _devtag,_configread,_configwrite);
+#define MCFG_PCI_BUS_LEGACY_SIBLING(_father_tag) \
+ downcast<pci_bus_legacy_device *>(device)->set_father(_father_tag);
+
+
+#endif /* PCI_H */
diff --git a/src/emu/machine/machine.mak b/src/emu/machine/machine.mak
index dc8bca8373a..98ffdd4c8b1 100644
--- a/src/emu/machine/machine.mak
+++ b/src/emu/machine/machine.mak
@@ -1221,11 +1221,27 @@ endif
#-------------------------------------------------
#
+#@src/emu/machine/lpci.h,MACHINES += LPCI
+#-------------------------------------------------
+
+ifneq ($(filter LPCI,$(MACHINES)),)
+MACHINEOBJS += $(MACHINEOBJ)/lpci.o
+endif
+
+#-------------------------------------------------
+#
#@src/emu/machine/pci.h,MACHINES += PCI
#-------------------------------------------------
ifneq ($(filter PCI,$(MACHINES)),)
MACHINEOBJS += $(MACHINEOBJ)/pci.o
+MACHINEOBJS += $(MACHINEOBJ)/pci-usb.o
+MACHINEOBJS += $(MACHINEOBJ)/pci-sata.o
+MACHINEOBJS += $(MACHINEOBJ)/pci-apic.o
+MACHINEOBJS += $(MACHINEOBJ)/pci-smbus.o
+MACHINEOBJS += $(MACHINEOBJ)/i82541.o
+MACHINEOBJS += $(MACHINEOBJ)/i82875p.o
+MACHINEOBJS += $(MACHINEOBJ)/i6300esb.o
endif
#-------------------------------------------------
diff --git a/src/emu/machine/pc_lpt.c b/src/emu/machine/pc_lpt.c
index d489ad02361..40ae6f1852e 100644
--- a/src/emu/machine/pc_lpt.c
+++ b/src/emu/machine/pc_lpt.c
@@ -6,8 +6,6 @@
#include "emu.h"
#include "pc_lpt.h"
-#include "bus/centronics/covox.h"
-#include "bus/centronics/printer.h"
const device_type PC_LPT = &device_creator<pc_lpt_device>;
@@ -46,14 +44,8 @@ void pc_lpt_device::device_reset()
m_cent_ctrl_out->write(m_control);
}
-static SLOT_INTERFACE_START(pc_centronics)
- SLOT_INTERFACE("printer", CENTRONICS_PRINTER)
- SLOT_INTERFACE("covox", CENTRONICS_COVOX)
- SLOT_INTERFACE("covox_stereo", CENTRONICS_COVOX_STEREO)
-SLOT_INTERFACE_END
-
static MACHINE_CONFIG_FRAGMENT( pc_lpt )
- MCFG_CENTRONICS_ADD("centronics", pc_centronics, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_DATA_INPUT_BUFFER("cent_data_in")
MCFG_CENTRONICS_FAULT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit3))
MCFG_CENTRONICS_SELECT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit4))
diff --git a/src/emu/machine/pci-apic.c b/src/emu/machine/pci-apic.c
new file mode 100644
index 00000000000..7b61167d1d4
--- /dev/null
+++ b/src/emu/machine/pci-apic.c
@@ -0,0 +1,18 @@
+#include "pci-apic.h"
+
+const device_type APIC = &device_creator<apic_device>;
+
+apic_device::apic_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, APIC, "I/O Advanced Programmable Interrupt Controller", tag, owner, clock, "apic", __FILE__)
+{
+}
+
+void apic_device::device_start()
+{
+ pci_device::device_start();
+}
+
+void apic_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/emu/machine/pci-apic.h b/src/emu/machine/pci-apic.h
new file mode 100644
index 00000000000..30e4f900185
--- /dev/null
+++ b/src/emu/machine/pci-apic.h
@@ -0,0 +1,20 @@
+#ifndef PCI_APIC_H
+#define PCI_APIC_H
+
+#include "pci.h"
+
+#define MCFG_APIC_ADD(_tag, _main_id, _revision, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, APIC, _main_id, _revision, 0x0c0320, _subdevice_id)
+
+class apic_device : public pci_device {
+public:
+ apic_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+};
+
+extern const device_type APIC;
+
+#endif
diff --git a/src/emu/machine/pci-sata.c b/src/emu/machine/pci-sata.c
new file mode 100644
index 00000000000..55980ee20fe
--- /dev/null
+++ b/src/emu/machine/pci-sata.c
@@ -0,0 +1,44 @@
+#include "pci-sata.h"
+
+const device_type SATA = &device_creator<sata_device>;
+
+sata_device::sata_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, SATA, "SATA AHCI interface", tag, owner, clock, "sata", __FILE__)
+{
+}
+
+DEVICE_ADDRESS_MAP_START(primary_command_map, 32, sata_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(primary_control_map, 32, sata_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(secondary_command_map, 32, sata_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(secondary_control_map, 32, sata_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(bus_master_map, 32, sata_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(ide_command_posting_map, 32, sata_device)
+ADDRESS_MAP_END
+
+
+void sata_device::device_start()
+{
+ pci_device::device_start();
+
+ add_map(8, M_IO, FUNC(sata_device::primary_command_map));
+ add_map(4, M_IO, FUNC(sata_device::primary_control_map));
+ add_map(8, M_IO, FUNC(sata_device::secondary_command_map));
+ add_map(4, M_IO, FUNC(sata_device::secondary_control_map));
+ add_map(16, M_IO, FUNC(sata_device::bus_master_map));
+ add_map(1024, M_MEM, FUNC(sata_device::ide_command_posting_map));
+}
+
+void sata_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/emu/machine/pci-sata.h b/src/emu/machine/pci-sata.h
new file mode 100644
index 00000000000..baf2e96aada
--- /dev/null
+++ b/src/emu/machine/pci-sata.h
@@ -0,0 +1,28 @@
+#ifndef PCI_SATA_H
+#define PCI_SATA_H
+
+#include "pci.h"
+
+#define MCFG_SATA_ADD(_tag, _main_id, _revision, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, SATA, _main_id, _revision, 0x01018a, _subdevice_id)
+
+class sata_device : public pci_device {
+public:
+ sata_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(primary_command_map, 32);
+ DECLARE_ADDRESS_MAP(primary_control_map, 32);
+ DECLARE_ADDRESS_MAP(secondary_command_map, 32);
+ DECLARE_ADDRESS_MAP(secondary_control_map, 32);
+ DECLARE_ADDRESS_MAP(bus_master_map, 32);
+ DECLARE_ADDRESS_MAP(ide_command_posting_map, 32);
+};
+
+extern const device_type SATA;
+
+#endif
diff --git a/src/emu/machine/pci-smbus.c b/src/emu/machine/pci-smbus.c
new file mode 100644
index 00000000000..bc631951808
--- /dev/null
+++ b/src/emu/machine/pci-smbus.c
@@ -0,0 +1,22 @@
+#include "pci-smbus.h"
+
+const device_type SMBUS = &device_creator<smbus_device>;
+
+DEVICE_ADDRESS_MAP_START(map, 32, smbus_device)
+ADDRESS_MAP_END
+
+smbus_device::smbus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, SMBUS, "SMBUS interface", tag, owner, clock, "smbus", __FILE__)
+{
+}
+
+void smbus_device::device_start()
+{
+ pci_device::device_start();
+ add_map(32, M_IO, FUNC(smbus_device::map));
+}
+
+void smbus_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/emu/machine/pci-smbus.h b/src/emu/machine/pci-smbus.h
new file mode 100644
index 00000000000..90c06aebee1
--- /dev/null
+++ b/src/emu/machine/pci-smbus.h
@@ -0,0 +1,23 @@
+#ifndef PCI_SMBUS_H
+#define PCI_SMBUS_H
+
+#include "pci.h"
+
+#define MCFG_SMBUS_ADD(_tag, _main_id, _revision, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, SMBUS, _main_id, _revision, 0x0c0500, _subdevice_id)
+
+class smbus_device : public pci_device {
+public:
+ smbus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(map, 32);
+};
+
+extern const device_type SMBUS;
+
+#endif
diff --git a/src/emu/machine/pci-usb.c b/src/emu/machine/pci-usb.c
new file mode 100644
index 00000000000..b7bc2d96556
--- /dev/null
+++ b/src/emu/machine/pci-usb.c
@@ -0,0 +1,42 @@
+#include "pci-usb.h"
+
+const device_type USB_UHCI = &device_creator<usb_uhci_device>;
+const device_type USB_EHCI = &device_creator<usb_ehci_device>;
+
+DEVICE_ADDRESS_MAP_START(map, 32, usb_uhci_device)
+ADDRESS_MAP_END
+
+usb_uhci_device::usb_uhci_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, USB_UHCI, "USB 1.1 UHCI interface", tag, owner, clock, "usb_uhci", __FILE__)
+{
+}
+
+void usb_uhci_device::device_start()
+{
+ pci_device::device_start();
+ add_map(32, M_IO, FUNC(usb_uhci_device::map));
+}
+
+void usb_uhci_device::device_reset()
+{
+ pci_device::device_reset();
+}
+
+DEVICE_ADDRESS_MAP_START(map, 32, usb_ehci_device)
+ADDRESS_MAP_END
+
+usb_ehci_device::usb_ehci_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, USB_EHCI, "USB 2.0 EHCI interface", tag, owner, clock, "usb_ehci", __FILE__)
+{
+}
+
+void usb_ehci_device::device_start()
+{
+ pci_device::device_start();
+ add_map(1024, M_MEM, FUNC(usb_ehci_device::map));
+}
+
+void usb_ehci_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/emu/machine/pci-usb.h b/src/emu/machine/pci-usb.h
new file mode 100644
index 00000000000..5cc6c931031
--- /dev/null
+++ b/src/emu/machine/pci-usb.h
@@ -0,0 +1,39 @@
+#ifndef PCI_USB_H
+#define PCI_USB_H
+
+#include "pci.h"
+
+#define MCFG_USB_UHCI_ADD(_tag, _main_id, _revision, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, USB_UHCI, _main_id, _revision, 0x0c0300, _subdevice_id)
+
+#define MCFG_USB_EHCI_ADD(_tag, _main_id, _revision, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, USB_EHCI, _main_id, _revision, 0x0c0320, _subdevice_id)
+
+class usb_uhci_device : public pci_device {
+public:
+ usb_uhci_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(map, 32);
+};
+
+class usb_ehci_device : public pci_device {
+public:
+ usb_ehci_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(map, 32);
+};
+
+extern const device_type USB_UHCI;
+extern const device_type USB_EHCI;
+
+#endif
diff --git a/src/emu/machine/pci.c b/src/emu/machine/pci.c
index ae611d67cae..33baec75ad8 100644
--- a/src/emu/machine/pci.c
+++ b/src/emu/machine/pci.c
@@ -1,289 +1,291 @@
-/***************************************************************************
-
- machine/pci.c
-
- PCI bus
-
- The PCI bus is a 32-bit bus introduced by Intel, so it is little endian
-
- Control word:
- bit 31: Enable bit
- bits 30-24: Reserved
- bits 23-16: PCI bus number
- bits 15-11: PCI device number
- bits 10- 8: PCI function number
- bits 7- 0: Offset address
-
- Standard PCI registers:
- 0x00 2 Vendor ID
- 0x02 2 Device ID
- 0x04 2 PCI Command
- 0x06 2 PCI Status
- 0x08 1 Revision ID
- 0x09 1 Programming Interface
- 0x0A 1 Subclass Code
- 0x0B 1 Class Code
-
- Class Code/Subclass Code/Programming Interface
- 0x00XXXX Pre-PCI 2.0 devices
- 0x000000 Non-VGA device
- 0x000101 VGA device
- 0x01XXXX Storage Controller
- 0x010000 SCSI
- 0x0101XX IDE
- 0x0102XX Floppy
- 0x0103XX IPI
- 0x0104XX RAID
- 0x0180XX Other
- 0x02XXXX Network Card
- 0x020000 Ethernet
- 0x020100 Tokenring
- 0x020200 FDDI
- 0x020300 ATM
- 0x028000 Other
- 0x03XXXX Display Controller
- 0x030000 VGA
- 0x030001 8514 Compatible
- 0x030100 XGA
- 0x038000 Other
- 0x04XXXX Multimedia
- 0x040000 Video
- 0x040100 Audio
- 0x048000 Other
- 0x05XXXX Memory Controller
- 0x050000 RAM
- 0x050100 Flash
- 0x058000 Other
- 0x06XXXX Bridge
- 0x060000 Host/PCI
- 0x060100 PCI/ISA
- 0x060200 PCI/EISA
- 0x060300 PCI/Micro Channel
- 0x060400 PCI/PCI
- 0x060500 PCI/PCMCIA
- 0x060600 PCI/NuBus
- 0x060700 PCI/CardBus
- 0x068000 Other
-
- Information on PCI vendors can be found at http://www.pcidatabase.com/
-
-***************************************************************************/
-
-#include "emu.h"
-#include "machine/pci.h"
-
-#define LOG_PCI 0
-
-//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-const device_type PCI_BUS_LEGACY = &device_creator<pci_bus_legacy_device>;
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// pci_bus_legacy_device - constructor
-//-------------------------------------------------
-pci_bus_legacy_device::pci_bus_legacy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
- device_t(mconfig, PCI_BUS_LEGACY, "PCI Bus Legacy", tag, owner, clock, "pci_bus_legacy", __FILE__),
- m_father(NULL)
-{
- for (int i = 0; i < ARRAY_LENGTH(m_devtag); i++) {
- m_devtag[i]= NULL;
- m_read_callback[i] = NULL;
- m_write_callback[i] = NULL;
- }
- m_siblings_count = 0;
-}
-
-/***************************************************************************
- INLINE FUNCTIONS
-***************************************************************************/
-
-READ32_MEMBER( pci_bus_legacy_device::read )
-{
- UINT32 result = 0xffffffff;
- int function, reg;
-
- offset %= 2;
-
- switch (offset)
- {
- case 0:
- result = m_address;
- break;
-
- case 1:
- if (m_devicenum != -1)
- {
- pci_read_func read = m_busnumaddr->m_read_callback[m_devicenum];
- if (read != NULL)
- {
- function = (m_address >> 8) & 0x07;
- reg = (m_address >> 0) & 0xfc;
- result = (*read)(m_busnumaddr, m_busnumaddr->m_device[m_devicenum], function, reg, mem_mask);
- }
- }
- break;
- }
+#include "pci.h"
- if (LOG_PCI)
- logerror("read('%s'): offset=%d result=0x%08X\n", tag(), offset, result);
+const device_type PCI_ROOT = &device_creator<pci_root_device>;
+const device_type PCI_BRIDGE = &device_creator<pci_bridge_device>;
- return result;
+DEVICE_ADDRESS_MAP_START(config_map, 32, pci_device)
+ADDRESS_MAP_END
+
+pci_device::pci_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
+{
+ main_id = 0xffffffff;
+ revision = 0x00;
+ pclass = 0xffffff;
+ subdevice_id = 0xffffffff;
}
+void pci_device::set_ids(UINT32 _main_id, UINT8 _revision, UINT32 _pclass, UINT32 _subdevice_id)
+{
+ main_id = _main_id;
+ revision = _revision;
+ pclass = _pclass;
+ subdevice_id = _subdevice_id;
+}
+void pci_device::device_start()
+{
+}
-pci_bus_legacy_device *pci_bus_legacy_device::pci_search_bustree(int busnum, int devicenum, pci_bus_legacy_device *pcibus)
+void pci_device::device_reset()
{
- int a;
- pci_bus_legacy_device *ret;
+}
- if (pcibus->m_busnum == busnum)
- {
- return pcibus;
- }
- for (a = 0; a < pcibus->m_siblings_count; a++)
- {
- ret = pci_search_bustree(busnum, devicenum, pcibus->m_siblings[a]);
- if (ret != NULL)
- return ret;
- }
- return NULL;
-}
-
-
-
-WRITE32_MEMBER( pci_bus_legacy_device::write )
-{
- offset %= 2;
-
- if (LOG_PCI)
- logerror("write('%s'): offset=%d data=0x%08X\n", tag(), offset, data);
-
- switch (offset)
- {
- case 0:
- m_address = data;
-
- /* lookup current device */
- if (m_address & 0x80000000)
- {
- int busnum = (m_address >> 16) & 0xff;
- int devicenum = (m_address >> 11) & 0x1f;
- m_busnumaddr = pci_search_bustree(busnum, devicenum, this);
- if (m_busnumaddr != NULL)
- {
- m_busnumber = busnum;
- m_devicenum = devicenum;
- }
- else
- m_devicenum = -1;
- if (LOG_PCI)
- logerror(" bus:%d device:%d\n", busnum, devicenum);
- }
- break;
-
- case 1:
- if (m_devicenum != -1)
- {
- pci_write_func write = m_busnumaddr->m_write_callback[m_devicenum];
- if (write != NULL)
- {
- int function = (m_address >> 8) & 0x07;
- int reg = (m_address >> 0) & 0xfc;
- (*write)(m_busnumaddr, m_busnumaddr->m_device[m_devicenum], function, reg, data, mem_mask);
- }
- if (LOG_PCI)
- logerror(" function:%d register:%d\n", (m_address >> 8) & 0x07, (m_address >> 0) & 0xfc);
- }
- break;
- }
+void pci_device::scan_sub_devices(pci_device **devices, dynamic_array<pci_device *> &all, dynamic_array<pci_device *> &bridges, device_t *root)
+{
}
+void pci_device::reset_all_mappings()
+{
+}
+void pci_device::map_device(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
+{
+ map_extra(memory_window_start, memory_window_end, memory_offset, memory_space,
+ io_window_start, io_window_end, io_offset, io_space);
+}
-READ64_MEMBER(pci_bus_legacy_device::read_64be)
+void pci_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
{
- UINT64 result = 0;
- mem_mask = FLIPENDIAN_INT64(mem_mask);
- if (ACCESSING_BITS_0_31)
- result |= (UINT64)read(space, offset * 2 + 0, mem_mask >> 0) << 0;
- if (ACCESSING_BITS_32_63)
- result |= (UINT64)read(space, offset * 2 + 1, mem_mask >> 32) << 32;
- return FLIPENDIAN_INT64(result);
}
-WRITE64_MEMBER(pci_bus_legacy_device::write_64be)
+void pci_device::map_config(UINT8 device, address_space *config_space)
{
- data = FLIPENDIAN_INT64(data);
- mem_mask = FLIPENDIAN_INT64(mem_mask);
- if (ACCESSING_BITS_0_31)
- write(space, offset * 2 + 0, data >> 0, mem_mask >> 0);
- if (ACCESSING_BITS_32_63)
- write(space, offset * 2 + 1, data >> 32, mem_mask >> 32);
+ config_space->install_device(device << 12, (device << 12) | 0xfff, *this, &pci_device::config_map);
}
+void pci_device::add_map(UINT64 size, int flags, address_map_delegate &map)
+{
+ logerror("Device %s (%s) has 0x%" I64FMT "x bytes of %s named %s\n", tag(), name(), size, flags & M_IO ? "io" : "memory", map.name());
+}
-void pci_bus_legacy_device::add_sibling(pci_bus_legacy_device *sibling, int busnum)
+agp_device::agp_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
+ : pci_device(mconfig, type, name, tag, owner, clock, shortname, source)
{
- m_siblings[m_siblings_count] = sibling;
- m_siblings_busnum[m_siblings_count] = busnum;
- m_siblings_count++;
+}
+
+void agp_device::device_start()
+{
+ pci_device::device_start();
+}
+
+void agp_device::device_reset()
+{
+ pci_device::device_reset();
}
-//-------------------------------------------------
-// device_post_load - handle updating after a
-// restore
-//-------------------------------------------------
-void pci_bus_legacy_device::device_post_load()
+pci_bridge_device::pci_bridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, PCI_BRIDGE, "PCI-PCI Bridge", tag, owner, clock, "pci_bridge", __FILE__),
+ device_memory_interface(mconfig, *this),
+ configure_space_config("configuration_space", ENDIANNESS_LITTLE, 32, 20)
{
- if (m_devicenum != -1)
- {
- m_busnumaddr = pci_search_bustree(m_busnumber, m_devicenum, this);
- }
}
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
+pci_bridge_device::pci_bridge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
+ : pci_device(mconfig, type, name, tag, owner, clock, shortname, source),
+ device_memory_interface(mconfig, *this),
+ configure_space_config("configuration_space", ENDIANNESS_LITTLE, 32, 20)
+{
+}
-void pci_bus_legacy_device::device_start()
+const address_space_config *pci_bridge_device::memory_space_config(address_spacenum spacenum) const
{
- /* store a pointer back to the device */
- m_devicenum = -1;
+ return spacenum == AS_PROGRAM ? &configure_space_config : NULL;
+}
- /* find all our devices */
- for (int i = 0; i < ARRAY_LENGTH(m_devtag); i++)
- if (m_devtag[i] != NULL)
- m_device[i] = machine().device(m_devtag[i]);
+device_t *pci_bridge_device::bus_root()
+{
+ return this;
+}
- if (m_father != NULL) {
- pci_bus_legacy_device *father = machine().device<pci_bus_legacy_device>(m_father);
- if (father)
- father->add_sibling(this, m_busnum);
+void pci_bridge_device::device_start()
+{
+ pci_device::device_start();
+
+ for(int i=0; i<32*8; i++)
+ sub_devices[i] = NULL;
+
+ for(device_t *d = bus_root()->first_subdevice(); d != NULL; d = d->next()) {
+ if(d == this)
+ continue;
+ const char *t = d->tag();
+ int l = strlen(t);
+ if(l <= 4 || t[l-5] != ':' || t[l-2] != '.')
+ continue;
+ int id = strtol(t+l-4, 0, 16);
+ int fct = t[l-1] - '0';
+ sub_devices[(id << 3) | fct] = downcast<pci_device *>(d);
}
+ for(int i=0; i<32*8; i++)
+ if(sub_devices[i]) {
+ all_devices.append(sub_devices[i]);
+ pci_bridge_device *bridge = dynamic_cast<pci_bridge_device *>(sub_devices[i]);
+ if(bridge)
+ all_bridges.append(bridge);
+ }
+}
+
+void pci_bridge_device::device_reset()
+{
+ pci_device::device_reset();
+ regenerate_config_mapping();
+}
+
+void pci_bridge_device::reset_all_mappings()
+{
+ for(int i=0; i != all_devices.count(); i++)
+ all_devices[i]->reset_all_mappings();
+}
+
+
+void pci_bridge_device::map_device(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
+{
+ for(int i = all_devices.count()-1; i>=0; i--)
+ all_devices[i]->map_device(memory_window_start, memory_window_end, memory_offset, memory_space,
+ io_window_start, io_window_end, io_offset, io_space);
+
+ map_extra(memory_window_start, memory_window_end, memory_offset, memory_space,
+ io_window_start, io_window_end, io_offset, io_space);
+}
+
+
+void pci_bridge_device::regenerate_config_mapping()
+{
+ address_space *config_space = &space(AS_PROGRAM);
+ config_space->unmap_readwrite(0x00000, 0xfffff);
+ for(int i=0; i<32*8; i++)
+ if(sub_devices[i])
+ sub_devices[i]->map_config(i, config_space);
+}
+
+
+agp_bridge_device::agp_bridge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
+ : pci_bridge_device(mconfig, type, name, tag, owner, clock, shortname, source)
+{
+}
- /* register pci states */
- save_item(NAME(m_address));
- save_item(NAME(m_devicenum));
- save_item(NAME(m_busnum));
+void agp_bridge_device::device_start()
+{
+ pci_bridge_device::device_start();
+}
+
+void agp_bridge_device::device_reset()
+{
+ pci_bridge_device::device_reset();
+}
+
+
+
+DEVICE_ADDRESS_MAP_START(io_configuration_access_map, 32, pci_host_device)
+ AM_RANGE(0xcf8, 0xcfb) AM_READWRITE(config_address_r, config_address_w)
+ AM_RANGE(0xcfc, 0xcff) AM_READWRITE(config_data_r, config_data_w)
+ADDRESS_MAP_END
+
+
+pci_host_device::pci_host_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
+ : pci_bridge_device(mconfig, type, name, tag, owner, clock, shortname, source)
+{
+}
+
+device_t *pci_host_device::bus_root()
+{
+ return owner();
+}
+
+void pci_host_device::device_start()
+{
+ pci_bridge_device::device_start();
+
+ memory_window_start = memory_window_end = memory_offset = 0;
+ io_window_start = io_window_end = io_offset = 0;
+}
+
+void pci_host_device::device_reset()
+{
+ pci_bridge_device::device_reset();
+ for(int i=0; i != all_devices.count(); i++)
+ all_devices[i]->reset_all_mappings();
+ regenerate_mapping();
+
+ config_address = 0;
+}
+
+void pci_host_device::regenerate_mapping()
+{
+ memory_space->unmap_readwrite(memory_window_start, memory_window_end);
+ io_space->unmap_readwrite(io_window_start, io_window_end);
+
+ map_device(memory_window_start, memory_window_end, memory_offset, memory_space,
+ io_window_start, io_window_end, io_offset, io_space);
}
+void pci_host_device::regenerate_config_mapping()
+{
+ pci_bridge_device::regenerate_config_mapping();
+ map_config(0, &space(AS_PROGRAM));
+}
+
+READ32_MEMBER(pci_host_device::config_address_r)
+{
+ return config_address;
+}
+
+WRITE32_MEMBER(pci_host_device::config_address_w)
+{
+ COMBINE_DATA(&config_address);
+}
+
+READ32_MEMBER(pci_host_device::config_data_r)
+{
+ return config_address & 0x80000000 ? config_read((config_address >> 16) & 0xff, (config_address >> 8) & 0xff, config_address & 0xfc, mem_mask) : 0xffffffff;
+}
+
+WRITE32_MEMBER(pci_host_device::config_data_w)
+{
+ if(config_address & 0x80000000)
+ config_write((config_address >> 16) & 0xff, (config_address >> 8) & 0xff, config_address & 0xfc, data, mem_mask);
+}
+
+UINT32 pci_host_device::config_read(UINT8 bus, UINT8 device, UINT16 reg, UINT32 mem_mask)
+{
+ UINT32 data = 0xffffffff;
+ if(!bus) {
+ if(sub_devices[device]) {
+ data = space(AS_PROGRAM).read_dword((device << 12) | reg, mem_mask);
+ logerror("config_read %02x:%02x.%x:%02x %08x @ %08x\n", bus, device >> 3, device & 7, reg, data, mem_mask);
+ }
+ } else
+ abort();
+
+ return data;
+}
+
+void pci_host_device::config_write(UINT8 bus, UINT8 device, UINT16 reg, UINT32 data, UINT32 mem_mask)
+{
+ if(!bus) {
+ if(sub_devices[device]) {
+ space(AS_PROGRAM).write_dword((device << 12) | reg, data, mem_mask);
+ logerror("config_write %02x:%02x.%x:%02x %08x @ %08x\n", bus, device >> 3, device & 7, reg, data, mem_mask);
+ }
+ } else
+ abort();
+}
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-void pci_bus_legacy_device::device_reset()
+pci_root_device::pci_root_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, PCI_ROOT,"PCI virtual root", tag, owner, clock, "pci_root", __FILE__)
+{
+}
+
+void pci_root_device::device_start()
+{
+}
+
+void pci_root_device::device_reset()
{
- /* reset the drive state */
- m_devicenum = -1;
- m_address = 0;
}
diff --git a/src/emu/machine/pci.h b/src/emu/machine/pci.h
index c878ebd2d71..a2e48ddc7e8 100644
--- a/src/emu/machine/pci.h
+++ b/src/emu/machine/pci.h
@@ -1,81 +1,152 @@
-/***************************************************************************
+#ifndef PCI_H
+#define PCI_H
- machine/pci.h
+#include "emu.h"
- PCI bus
+#define MCFG_PCI_ROOT_ADD(_tag) \
+ MCFG_DEVICE_ADD(_tag, PCI_ROOT, 0)
-***************************************************************************/
+#define MCFG_PCI_DEVICE_ADD(_tag, _type, _main_id, _revision, _pclass, _subdevice_id) \
+ MCFG_DEVICE_ADD(_tag, _type, 0) \
+ downcast<pci_device *>(device)->set_ids(_main_id, _revision, _pclass, _subdevice_id);
-#ifndef PCI_H
-#define PCI_H
+#define MCFG_AGP_DEVICE_ADD(_tag, _type, _main_id, _revision, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, _type, _main_id, _revision, 0x030000, _subdevice_id)
-//**************************************************************************
-// TYPE DEFINITIONS
-//**************************************************************************
+#define MCFG_PCI_HOST_ADD(_tag, _type, _main_id, _revision, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, _type, _main_id, _revision, 0x060000, _subdevice_id)
-typedef UINT32 (*pci_read_func)(device_t *pcibus, device_t *device, int function, int reg, UINT32 mem_mask);
-typedef void (*pci_write_func)(device_t *pcibus, device_t *device, int function, int reg, UINT32 data, UINT32 mem_mask);
+#define MCFG_PCI_BRIDGE_ADD(_tag, _main_id, _revision) \
+ MCFG_PCI_DEVICE_ADD(_tag, PCI_BRIDGE, _main_id, _revision, 0x060400, 0x00000000)
-// ======================> pci_bus_legacy_device
+#define MCFG_AGP_BRIDGE_ADD(_tag, _type, _main_id, _revision) \
+ MCFG_PCI_DEVICE_ADD(_tag, _type, _main_id, _revision, 0x060400, 0x00000000)
-class pci_bus_legacy_device : public device_t
-{
+class pci_device : public device_t {
public:
- // construction/destruction
- pci_bus_legacy_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ pci_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
- DECLARE_READ32_MEMBER( read );
- DECLARE_WRITE32_MEMBER( write );
+ void set_ids(UINT32 main_id, UINT8 revision, UINT32 pclass, UINT32 subdevice_id);
- DECLARE_READ64_MEMBER( read_64be );
- DECLARE_WRITE64_MEMBER( write_64be );
+ virtual void reset_all_mappings();
+ virtual void map_device(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space);
+ virtual void map_extra(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space);
- void set_busnum(int busnum) { m_busnum = busnum; }
- void set_father(const char *father) { m_father = father; }
- void set_device(int num, const char *tag, pci_read_func read_func, pci_write_func write_func) {
- m_devtag[num] = tag; m_read_callback[num] = read_func; m_write_callback[num] = write_func; }
+ void map_config(UINT8 device, address_space *config_space);
- pci_bus_legacy_device *pci_search_bustree(int busnum, int devicenum, pci_bus_legacy_device *pcibus);
- void add_sibling(pci_bus_legacy_device *sibling, int busnum);
+ virtual DECLARE_ADDRESS_MAP(config_map, 32);
protected:
- // device-level overrides
+ enum {
+ M_MEM = 0,
+ M_IO = 1,
+ M_64D = 2,
+ M_64A = 4,
+ M_PREF = 8
+ };
+
+ UINT32 main_id, subdevice_id;
+ UINT32 pclass;
+ UINT8 revision;
+
virtual void device_start();
virtual void device_reset();
- virtual void device_post_load();
+
+ static void scan_sub_devices(pci_device **devices, dynamic_array<pci_device *> &all, dynamic_array<pci_device *> &bridges, device_t *root);
+
+ void add_map(UINT64 size, int flags, address_map_delegate &map);
+ template <typename T> void add_map(UINT64 size, int flags, void (T::*map)(address_map &map, device_t &device), const char *name) {
+ address_map_delegate delegate(map, name, static_cast<T *>(this));
+ add_map(size, flags, delegate);
+ }
+};
+
+class agp_device : public pci_device {
+public:
+ agp_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+};
+
+class pci_bridge_device : public pci_device, public device_memory_interface {
+public:
+ pci_bridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ pci_bridge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+
+ virtual void map_device(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
+ UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space);
+ virtual void reset_all_mappings();
+
+protected:
+ pci_device *sub_devices[32*8];
+ dynamic_array<pci_device *> all_devices;
+ dynamic_array<pci_device *> all_bridges;
+
+ virtual void device_start();
+ virtual void device_reset();
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum) const;
+
+ virtual device_t *bus_root();
+ virtual void regenerate_config_mapping();
private:
- UINT8 m_busnum;
- const char * m_devtag[32];
- pci_read_func m_read_callback[32];
- pci_write_func m_write_callback[32];
- const char * m_father;
- device_t * m_device[32];
- pci_bus_legacy_device * m_siblings[8];
- UINT8 m_siblings_busnum[8];
- int m_siblings_count;
-
- offs_t m_address;
- INT8 m_devicenum; // device number we are addressing
- INT8 m_busnumber; // pci bus number we are addressing
- pci_bus_legacy_device * m_busnumaddr; // pci bus we are addressing
+ address_space_config configure_space_config;
};
-// device type definition
-extern const device_type PCI_BUS_LEGACY;
+class agp_bridge_device : public pci_bridge_device {
+public:
+ agp_bridge_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+};
+
+class pci_host_device : public pci_bridge_device {
+public:
+ DECLARE_ADDRESS_MAP(io_configuration_access_map, 32);
+
+ pci_host_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+
+protected:
+ address_space *memory_space, *io_space;
+
+ UINT64 memory_window_start, memory_window_end, memory_offset;
+ UINT64 io_window_start, io_window_end, io_offset;
+
+ virtual void device_start();
+ virtual void device_reset();
+
+ virtual device_t *bus_root();
+
+ UINT32 config_address;
+
+ DECLARE_READ32_MEMBER(config_address_r);
+ DECLARE_WRITE32_MEMBER(config_address_w);
+ DECLARE_READ32_MEMBER(config_data_r);
+ DECLARE_WRITE32_MEMBER(config_data_w);
+
+ UINT32 config_read(UINT8 bus, UINT8 device, UINT16 reg, UINT32 mem_mask);
+ void config_write(UINT8 bus, UINT8 device, UINT16 reg, UINT32 data, UINT32 mem_mask);
+
+ void regenerate_mapping();
+ virtual void regenerate_config_mapping();
+};
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
-***************************************************************************/
+class pci_root_device : public device_t {
+public:
+ pci_root_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-#define MCFG_PCI_BUS_LEGACY_ADD(_tag, _busnum) \
- MCFG_DEVICE_ADD(_tag, PCI_BUS_LEGACY, 0) \
- downcast<pci_bus_legacy_device *>(device)->set_busnum(_busnum);
-#define MCFG_PCI_BUS_LEGACY_DEVICE(_devnum, _devtag, _configread, _configwrite) \
- downcast<pci_bus_legacy_device *>(device)->set_device(_devnum, _devtag,_configread,_configwrite);
-#define MCFG_PCI_BUS_LEGACY_SIBLING(_father_tag) \
- downcast<pci_bus_legacy_device *>(device)->set_father(_father_tag);
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+};
+extern const device_type PCI_ROOT;
+extern const device_type PCI_BRIDGE;
-#endif /* PCI_H */
+#endif
diff --git a/src/emu/machine/pic8259.c b/src/emu/machine/pic8259.c
index b11fc023b1b..ea91fa1240b 100644
--- a/src/emu/machine/pic8259.c
+++ b/src/emu/machine/pic8259.c
@@ -14,8 +14,6 @@
#include "emu.h"
#include "machine/pic8259.h"
-#define IRQ_COUNT 8
-
#define LOG_ICW 0
#define LOG_OCW 0
#define LOG_GENERAL 0
@@ -24,20 +22,17 @@ ALLOW_SAVE_TYPE(pic8259_device::pic8259_state_t); // allow save_item on a non-fu
void pic8259_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- int irq;
- UINT8 mask;
-
/* check the various IRQs */
- for (irq = 0; irq < IRQ_COUNT; irq++)
+ for (int n = 0, irq = m_prio; n < 8; n++, irq = (irq + 1) & 7)
{
- mask = 1 << irq;
+ UINT8 mask = 1 << irq;
- /* is this IRQ in service? */
- if (m_isr & mask)
+ /* is this IRQ in service and not cascading and sfnm? */
+ if ((m_isr & mask) && !(m_master && m_cascade && m_nested && (m_slave & mask)))
{
if (LOG_GENERAL)
{
- logerror("pic8259_timerproc(): PIC IRQ #%d still in service\n", irq);
+ logerror("pic8259_timerproc() %s: PIC IRQ #%d still in service\n", tag(), irq);
}
break;
}
@@ -47,7 +42,7 @@ void pic8259_device::device_timer(emu_timer &timer, device_timer_id id, int para
{
if (LOG_GENERAL)
{
- logerror("pic8259_timerproc(): PIC triggering IRQ #%d\n", irq);
+ logerror("pic8259_timerproc() %s: PIC triggering IRQ #%d\n", tag(), irq);
}
if (!BIT(m_ocw3, 2))
{
@@ -55,6 +50,9 @@ void pic8259_device::device_timer(emu_timer &timer, device_timer_id id, int para
}
return;
}
+ // if sfnm and in-service don't continue
+ if((m_isr & mask) && m_master && m_cascade && m_nested && (m_slave & mask))
+ break;
}
if (!BIT(m_ocw3, 2))
{
@@ -71,7 +69,7 @@ void pic8259_device::set_irq_line(int irq, int state)
{
/* setting IRQ line */
if (LOG_GENERAL)
- logerror("pic8259_set_irq_line(): PIC set IRQ line #%d\n", irq);
+ logerror("pic8259_set_irq_line() %s: PIC set IRQ line #%d\n", tag(), irq);
if(m_level_trig_mode || (!m_level_trig_mode && !(m_irq_lines & mask)))
{
@@ -84,7 +82,7 @@ void pic8259_device::set_irq_line(int irq, int state)
/* clearing IRQ line */
if (LOG_GENERAL)
{
- logerror("pic8259_device::set_irq_line(): PIC cleared IRQ line #%d\n", irq);
+ logerror("pic8259_device::set_irq_line() %s: PIC cleared IRQ line #%d\n", tag(), irq);
}
m_irq_lines &= ~mask;
@@ -96,19 +94,16 @@ void pic8259_device::set_irq_line(int irq, int state)
UINT32 pic8259_device::acknowledge()
{
- UINT8 mask;
- int irq;
-
- for (irq = 0; irq < IRQ_COUNT; irq++)
+ for (int n = 0, irq = m_prio; n < 8; n++, irq = (irq + 1) & 7)
{
- mask = 1 << irq;
+ UINT8 mask = 1 << irq;
/* is this IRQ pending and enabled? */
if ((m_irr & mask) && !(m_imr & mask))
{
if (LOG_GENERAL)
{
- logerror("pic8259_acknowledge(): PIC acknowledge IRQ #%d\n", irq);
+ logerror("pic8259_acknowledge() %s: PIC acknowledge IRQ #%d\n", tag(), irq);
}
if (!m_level_trig_mode)
{
@@ -170,8 +165,8 @@ READ8_MEMBER( pic8259_device::read )
if ( m_irr & ~m_imr )
{
- int irq;
- for ( irq = 0; irq < IRQ_COUNT; irq++ )
+ /* check the various IRQs */
+ for (int n = 0, irq = m_prio; n < 8; n++, irq = (irq + 1) & 7)
{
if ( ( 1 << irq ) & m_irr & ~m_imr )
{
@@ -216,7 +211,7 @@ WRITE8_MEMBER( pic8259_device::write )
/* write ICW1 - this pretty much resets the chip */
if (LOG_ICW)
{
- logerror("pic8259_device::write(): ICW1; data=0x%02X\n", data);
+ logerror("pic8259_device::write() %s: ICW1; data=0x%02X\n", tag(), data);
}
m_imr = 0x00;
@@ -237,7 +232,7 @@ WRITE8_MEMBER( pic8259_device::write )
/* write OCW3 */
if (LOG_OCW)
{
- logerror("pic8259_device::write(): OCW3; data=0x%02X\n", data);
+ logerror("pic8259_device::write() %s: OCW3; data=0x%02X\n", tag(), data);
}
m_ocw3 = data;
@@ -250,7 +245,7 @@ WRITE8_MEMBER( pic8259_device::write )
/* write OCW2 */
if (LOG_OCW)
{
- logerror("pic8259_device::write(): OCW2; data=0x%02X\n", data);
+ logerror("pic8259_device::write() %s: OCW2; data=0x%02X\n", tag(), data);
}
switch (data & 0xe0)
@@ -291,13 +286,13 @@ WRITE8_MEMBER( pic8259_device::write )
}
break;
case 0xc0:
- m_prio = n & 7;
+ m_prio = (n + 1) & 7;
break;
case 0xe0:
if( m_isr & mask )
{
m_isr &= ~mask;
- m_prio = (m_prio + 1) & 7;
+ m_prio = (n + 1) & 7;
}
break;
}
@@ -315,7 +310,7 @@ WRITE8_MEMBER( pic8259_device::write )
/* write ICW2 */
if (LOG_ICW)
{
- logerror("pic8259_device::write(): ICW2; data=0x%02X\n", data);
+ logerror("pic8259_device::write() %s: ICW2; data=0x%02X\n", tag(), data);
}
m_base = data & 0xf8;
@@ -334,7 +329,7 @@ WRITE8_MEMBER( pic8259_device::write )
/* write ICW3 */
if (LOG_ICW)
{
- logerror("pic8259_device::write(): ICW3; data=0x%02X\n", data);
+ logerror("pic8259_device::write() %s: ICW3; data=0x%02X\n", tag(), data);
}
m_slave = data;
@@ -345,7 +340,7 @@ WRITE8_MEMBER( pic8259_device::write )
/* write ICW4 */
if (LOG_ICW)
{
- logerror("pic8259_device::write(): ICW4; data=0x%02X\n", data);
+ logerror("pic8259_device::write() %s: ICW4; data=0x%02X\n", tag(), data);
}
m_nested = (data & 0x10) ? 1 : 0;
diff --git a/src/emu/machine/z80ctc.h b/src/emu/machine/z80ctc.h
index 4e395517092..a9945d547bf 100644
--- a/src/emu/machine/z80ctc.h
+++ b/src/emu/machine/z80ctc.h
@@ -74,6 +74,8 @@ public:
DECLARE_WRITE_LINE_MEMBER( trg2 );
DECLARE_WRITE_LINE_MEMBER( trg3 );
+ UINT16 get_channel_constant(UINT8 channel) { return m_channel[channel].m_tconst; }
+
protected:
// device-level overrides
virtual void device_start();
diff --git a/src/emu/sound/pci-ac97.c b/src/emu/sound/pci-ac97.c
new file mode 100644
index 00000000000..6890b6add73
--- /dev/null
+++ b/src/emu/sound/pci-ac97.c
@@ -0,0 +1,34 @@
+#include "pci-ac97.h"
+
+const device_type AC97 = &device_creator<ac97_device>;
+
+DEVICE_ADDRESS_MAP_START(native_audio_mixer_map, 32, ac97_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(native_audio_bus_mastering_map, 32, ac97_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(mixer_map, 32, ac97_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(bus_mastering_map, 32, ac97_device)
+ADDRESS_MAP_END
+
+ac97_device::ac97_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, AC97, "AC97 audio", tag, owner, clock, "ac97", __FILE__)
+{
+}
+
+void ac97_device::device_start()
+{
+ pci_device::device_start();
+ add_map(256, M_IO, FUNC(ac97_device::native_audio_mixer_map));
+ add_map(64, M_IO, FUNC(ac97_device::native_audio_bus_mastering_map));
+ add_map(512, M_MEM, FUNC(ac97_device::mixer_map));
+ add_map(256, M_MEM, FUNC(ac97_device::bus_mastering_map));
+}
+
+void ac97_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/emu/sound/pci-ac97.h b/src/emu/sound/pci-ac97.h
new file mode 100644
index 00000000000..ffe7c8165df
--- /dev/null
+++ b/src/emu/sound/pci-ac97.h
@@ -0,0 +1,26 @@
+#ifndef PCI_AC97_H
+#define PCI_AC97_H
+
+#include "machine/pci.h"
+
+#define MCFG_AC97_ADD(_tag, _main_id, _revision, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, AC97, _main_id, _revision, 0x040300, _subdevice_id)
+
+class ac97_device : public pci_device {
+public:
+ ac97_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(native_audio_mixer_map, 32);
+ DECLARE_ADDRESS_MAP(native_audio_bus_mastering_map, 32);
+ DECLARE_ADDRESS_MAP(mixer_map, 32);
+ DECLARE_ADDRESS_MAP(bus_mastering_map, 32);
+};
+
+extern const device_type AC97;
+
+#endif
diff --git a/src/emu/sound/sb0400.c b/src/emu/sound/sb0400.c
new file mode 100644
index 00000000000..6a8c522a525
--- /dev/null
+++ b/src/emu/sound/sb0400.c
@@ -0,0 +1,22 @@
+#include "sb0400.h"
+
+const device_type SB0400 = &device_creator<sb0400_device>;
+
+DEVICE_ADDRESS_MAP_START(map, 32, sb0400_device)
+ADDRESS_MAP_END
+
+sb0400_device::sb0400_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, SB0400, "Creative Labs SB0400 Audigy2 Value", tag, owner, clock, "sb0400", __FILE__)
+{
+}
+
+void sb0400_device::device_start()
+{
+ pci_device::device_start();
+ add_map(64, M_IO, FUNC(sb0400_device::map));
+}
+
+void sb0400_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/emu/sound/sb0400.h b/src/emu/sound/sb0400.h
new file mode 100644
index 00000000000..cea968503d9
--- /dev/null
+++ b/src/emu/sound/sb0400.h
@@ -0,0 +1,25 @@
+// Creative labs SB0400 Audigy2 Value
+
+#ifndef SB0400_H
+#define SB0400_H
+
+#include "machine/pci.h"
+
+#define MCFG_SB0400_ADD(_tag, _subdevice_id) \
+ MCFG_PCI_DEVICE_ADD(_tag, SB0400, 0x11020008, 0x00, 0x040100, _subdevice_id)
+
+class sb0400_device : public pci_device {
+public:
+ sb0400_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(map, 32);
+};
+
+extern const device_type SB0400;
+
+#endif
diff --git a/src/emu/sound/sound.mak b/src/emu/sound/sound.mak
index 6a6a0cf0d0d..de4f8024a5d 100644
--- a/src/emu/sound/sound.mak
+++ b/src/emu/sound/sound.mak
@@ -70,6 +70,17 @@ $(SOUNDOBJ)/discrete.o: $(SOUNDSRC)/discrete.c \
#-------------------------------------------------
+# AC97
+#@src/emu/sound/pic-ac97.h,SOUNDS += AC97
+#-------------------------------------------------
+
+ifneq ($(filter AC97,$(SOUNDS)),)
+SOUNDOBJS += $(SOUNDOBJ)/pci-ac97.o
+endif
+
+
+
+#-------------------------------------------------
# Apple custom sound chips
#@src/emu/sound/asc.h,SOUNDS += ASC
#@src/emu/sound/awacs.h,SOUNDS += AWACS
@@ -123,6 +134,14 @@ endif
#-------------------------------------------------
+#-------------------------------------------------
+# AC97
+#@src/emu/sound/pic-ac97.h,SOUNDS += AC97
+#-------------------------------------------------
+
+ifneq ($(filter AC97,$(SOUNDS)),)
+SOUNDOBJS += $(SOUNDOBJ)/pci-ac97.o
+endif
# CEM 3394 analog synthesizer chip
#@src/emu/sound/cem3394.h,SOUNDS += CEM3394
#-------------------------------------------------
@@ -134,6 +153,17 @@ endif
#-------------------------------------------------
+# Creative Labs SB0400 Audigy2 Value
+#@src/emu/sound/sb0400.h,SOUNDS += AC97
+#-------------------------------------------------
+
+ifneq ($(filter SB0400,$(SOUNDS)),)
+SOUNDOBJS += $(SOUNDOBJ)/sb0400.o
+endif
+
+
+
+#-------------------------------------------------
# Data East custom sound chips
#@src/emu/sound/bsmt2000.h,SOUNDS += BSMT2000
#-------------------------------------------------
diff --git a/src/emu/video/gf6800gt.c b/src/emu/video/gf6800gt.c
new file mode 100644
index 00000000000..578ee56da90
--- /dev/null
+++ b/src/emu/video/gf6800gt.c
@@ -0,0 +1,30 @@
+#include "gf6800gt.h"
+
+const device_type GEFORCE_6800GT = &device_creator<geforce_6800gt_device>;
+
+DEVICE_ADDRESS_MAP_START(map1, 32, geforce_6800gt_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(map2, 32, geforce_6800gt_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(map3, 32, geforce_6800gt_device)
+ADDRESS_MAP_END
+
+geforce_6800gt_device::geforce_6800gt_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, GEFORCE_6800GT, "NVidia GeForce 6800GT", tag, owner, clock, "geforce_6800gt", __FILE__)
+{
+}
+
+void geforce_6800gt_device::device_start()
+{
+ pci_device::device_start();
+ add_map( 16*1024*1024, M_MEM, FUNC(geforce_6800gt_device::map1));
+ add_map(256*1024*1024, M_MEM, FUNC(geforce_6800gt_device::map2));
+ add_map( 16*1024*1024, M_MEM, FUNC(geforce_6800gt_device::map3));
+}
+
+void geforce_6800gt_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/emu/video/gf6800gt.h b/src/emu/video/gf6800gt.h
new file mode 100644
index 00000000000..cdd6a3bc184
--- /dev/null
+++ b/src/emu/video/gf6800gt.h
@@ -0,0 +1,25 @@
+#ifndef GF6800GT_H
+#define GF6800GT_H
+
+#include "machine/pci.h"
+
+#define MCFG_GEFORCE_6800GT_ADD(_tag, _subdevice_id) \
+ MCFG_AGP_DEVICE_ADD(_tag, GEFORCE_6800GT, 0x10de00f9, 0xa1, _subdevice_id)
+
+class geforce_6800gt_device : public pci_device {
+public:
+ geforce_6800gt_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(map1, 32);
+ DECLARE_ADDRESS_MAP(map2, 32);
+ DECLARE_ADDRESS_MAP(map3, 32);
+};
+
+extern const device_type GEFORCE_6800GT;
+
+#endif
diff --git a/src/emu/video/pc_vga.c b/src/emu/video/pc_vga.c
index 93e7e2a6354..da2ea0ec5d6 100644
--- a/src/emu/video/pc_vga.c
+++ b/src/emu/video/pc_vga.c
@@ -198,6 +198,27 @@ mach8_device::mach8_device(const machine_config &mconfig, const char *tag, devic
{
}
+// zero everything, keep vtbls
+void vga_device::zero()
+{
+ memset(&vga.svga_intf, 0, sizeof(vga.svga_intf));
+ vga.memory.resize(0);
+ memset(vga.pens, 0, sizeof(vga.pens));
+ vga.miscellaneous_output = 0;
+ vga.feature_control = 0;
+ memset(&vga.sequencer, 0, sizeof(vga.sequencer));
+ memset(&vga.crtc, 0, sizeof(vga.crtc));
+ memset(&vga.gc, 0, sizeof(vga.gc));
+ memset(&vga.attribute, 0, sizeof(vga.attribute));
+ memset(&vga.dac, 0, sizeof(vga.dac));
+ memset(&vga.oak, 0, sizeof(vga.oak));
+}
+
+void svga_device::zero()
+{
+ vga_device::zero();
+ memset(&svga, 0, sizeof(svga));
+}
/* VBLANK callback, start address definitely updates AT vblank, not before. */
TIMER_CALLBACK_MEMBER(vga_device::vblank_timer_cb)
@@ -208,7 +229,7 @@ TIMER_CALLBACK_MEMBER(vga_device::vblank_timer_cb)
void vga_device::device_start()
{
- memset(&vga, 0, sizeof(vga));
+ zero();
int i;
for (i = 0; i < 0x100; i++)
@@ -241,8 +262,7 @@ void svga_device::device_start()
void cirrus_vga_device::device_start()
{
- memset(&vga, 0, sizeof(vga));
- memset(&svga, 0, sizeof(svga));
+ zero();
int i;
for (i = 0; i < 0x100; i++)
diff --git a/src/emu/video/pc_vga.h b/src/emu/video/pc_vga.h
index 7869955ecde..be658c147d7 100644
--- a/src/emu/video/pc_vga.h
+++ b/src/emu/video/pc_vga.h
@@ -26,7 +26,7 @@ public:
vga_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
vga_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
-
+ virtual void zero();
virtual UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
virtual READ8_MEMBER(port_03b0_r);
@@ -205,6 +205,7 @@ public:
// construction/destruction
svga_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+ virtual void zero();
virtual UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
protected:
void svga_vh_rgb8(bitmap_rgb32 &bitmap, const rectangle &cliprect);
diff --git a/src/emu/video/snes_ppu.c b/src/emu/video/snes_ppu.c
index 526e449ae85..e41f2f00bd3 100644
--- a/src/emu/video/snes_ppu.c
+++ b/src/emu/video/snes_ppu.c
@@ -214,51 +214,10 @@ void snes_ppu_device::device_start()
{
m_openbus_cb.resolve_safe(0);
-#if SNES_LAYER_DEBUG
- memset(&m_debug_options, 0, sizeof(m_debug_options));
-#endif
-
m_vram = auto_alloc_array(machine(), UINT8, SNES_VRAM_SIZE);
m_cgram = auto_alloc_array(machine(), UINT16, SNES_CGRAM_SIZE/2);
m_oam_ram = auto_alloc_array(machine(), UINT16, SNES_OAM_SIZE/2);
- /* Inititialize registers/variables */
- m_update_windows = 1;
- m_beam.latch_vert = 0;
- m_beam.latch_horz = 0;
- m_beam.current_vert = 0;
- m_beam.current_horz = 0;
- m_beam.last_visible_line = 225; /* TODO: PAL setting */
- m_mode = 0;
- m_ppu1_version = 1; // 5C77 chip version number, read by STAT77, only '1' is known
- m_ppu2_version = 3; // 5C78 chip version number, read by STAT78, only '2' & '3' encountered so far.
-
- m_cgram_address = 0;
- m_read_ophct = 0;
- m_read_opvct = 0;
-
- PPU_REG(VMAIN) = 0x80;
- // what about other regs?
-
- /* Inititialize mosaic table */
- for (int j = 0; j < 16; j++)
- {
- for (int i = 0; i < 4096; i++)
- m_mosaic_table[j][i] = (i / (j + 1)) * (j + 1);
- }
-
- /* Init VRAM */
- memset(m_vram, 0, SNES_VRAM_SIZE);
-
- /* Init Palette RAM */
- memset((UINT8 *)m_cgram, 0, SNES_CGRAM_SIZE);
-
- /* Init oam RAM */
- memset((UINT8 *)m_oam_ram, 0xff, SNES_OAM_SIZE);
-
- m_stat78 = 0;
- memset(m_regs, 0x00, sizeof(m_regs));
-
for (int i = 0; i < 2; i++)
{
save_item(NAME(m_scanlines[i].enable), i);
@@ -400,7 +359,113 @@ void snes_ppu_device::device_start()
save_pointer(NAME(m_oam_ram), SNES_OAM_SIZE/2);
}
+void snes_ppu_device::device_reset()
+{
+
+#if SNES_LAYER_DEBUG
+ memset(&m_debug_options, 0, sizeof(m_debug_options));
+#endif
+
+ /* Inititialize registers/variables */
+ m_update_windows = 1;
+ m_beam.latch_vert = 0;
+ m_beam.latch_horz = 0;
+ m_beam.current_vert = 0;
+ m_beam.current_horz = 0;
+ m_beam.last_visible_line = 225; /* TODO: PAL setting */
+ m_mode = 0;
+ m_ppu1_version = 1; // 5C77 chip version number, read by STAT77, only '1' is known
+ m_ppu2_version = 3; // 5C78 chip version number, read by STAT78, only '2' & '3' encountered so far.
+
+ m_cgram_address = 0;
+ m_read_ophct = 0;
+ m_read_opvct = 0;
+ m_vmadd = 0;
+
+ PPU_REG(VMAIN) = 0x80;
+ // what about other regs?
+
+ /* Inititialize mosaic table */
+ for (int j = 0; j < 16; j++)
+ {
+ for (int i = 0; i < 4096; i++)
+ m_mosaic_table[j][i] = (i / (j + 1)) * (j + 1);
+ }
+
+ /* Init VRAM */
+ memset(m_vram, 0, SNES_VRAM_SIZE);
+
+ /* Init Palette RAM */
+ memset((UINT8 *)m_cgram, 0, SNES_CGRAM_SIZE);
+
+ /* Init oam RAM */
+ memset((UINT8 *)m_oam_ram, 0xff, SNES_OAM_SIZE);
+
+ m_stat78 = 0;
+
+ // other initializations to 0
+ memset(m_regs, 0, sizeof(m_regs));
+ memset(m_oam_itemlist, 0, sizeof(m_oam_itemlist));
+ memset(&m_oam, 0, sizeof(m_oam));
+ memset(&m_mode7, 0, sizeof(m_mode7));
+
+ for (int i = 0; i < 2; i++)
+ {
+ m_scanlines[i].enable = 0;
+ m_scanlines[i].clip = 0;
+ memset(m_scanlines[i].buffer, 0, SNES_SCR_WIDTH);
+ memset(m_scanlines[i].priority, 0, SNES_SCR_WIDTH);
+ memset(m_scanlines[i].layer, 0, SNES_SCR_WIDTH);
+ memset(m_scanlines[i].blend_exception, 0, SNES_SCR_WIDTH);
+ }
+
+ for (int i = 0; i < 6; i++)
+ {
+ m_layer[i].window1_enabled = 0;
+ m_layer[i].window1_invert = 0;
+ m_layer[i].window2_enabled = 0;
+ m_layer[i].window2_invert = 0;
+ m_layer[i].wlog_mask = 0;
+ m_layer[i].color_math = 0;
+ m_layer[i].charmap = 0;
+ m_layer[i].tilemap = 0;
+ m_layer[i].tilemap_size = 0;
+ m_layer[i].tile_size = 0;
+ m_layer[i].mosaic_enabled = 0;
+ m_layer[i].main_window_enabled = 0;
+ m_layer[i].sub_window_enabled = 0;
+ m_layer[i].main_bg_enabled = 0;
+ m_layer[i].sub_bg_enabled = 0;
+ m_layer[i].hoffs = 0;
+ m_layer[i].voffs = 0;
+
+ memset(m_clipmasks[i], 0, SNES_SCR_WIDTH);
+ }
+
+ for (int i = 0; i < ARRAY_LENGTH(m_oam_spritelist); i++)
+ {
+ m_oam_spritelist[i].tile = 0;
+ m_oam_spritelist[i].x = 0;
+ m_oam_spritelist[i].y = 0;
+ m_oam_spritelist[i].size = 0;
+ m_oam_spritelist[i].vflip = 0;
+ m_oam_spritelist[i].hflip = 0;
+ m_oam_spritelist[i].priority_bits = 0;
+ m_oam_spritelist[i].pal = 0;
+ m_oam_spritelist[i].height = 0;
+ m_oam_spritelist[i].width = 0;
+ }
+
+ for (int i = 0; i < ARRAY_LENGTH(m_oam_tilelist); i++)
+ {
+ m_oam_tilelist[i].x = 0;
+ m_oam_tilelist[i].priority = 0;
+ m_oam_tilelist[i].pal = 0;
+ m_oam_tilelist[i].tileaddr = 0;
+ m_oam_tilelist[i].hflip = 0;
+ }
+}
/*****************************************
* get_bgcolor()
diff --git a/src/emu/video/snes_ppu.h b/src/emu/video/snes_ppu.h
index 5f628e76259..7b1e4eeb401 100644
--- a/src/emu/video/snes_ppu.h
+++ b/src/emu/video/snes_ppu.h
@@ -271,7 +271,7 @@ public:
protected:
// device-level overrides
virtual void device_start();
- virtual void device_reset() {};
+ virtual void device_reset();
private:
devcb_read16 m_openbus_cb;
diff --git a/src/emu/video/upd7220.c b/src/emu/video/upd7220.c
index d869b16f052..c930853dac3 100644
--- a/src/emu/video/upd7220.c
+++ b/src/emu/video/upd7220.c
@@ -371,17 +371,20 @@ inline void upd7220_device::update_blank_timer(int state)
inline void upd7220_device::recompute_parameters()
{
- int horiz_mult;
+ int horiz_mult = 16, vert_mult = 1;
/* TODO: assume that the pitch also controls number of horizontal pixels in a single cell */
// horiz_mult = 4 if both mixed and interlace?
- if(((m_mode & UPD7220_MODE_DISPLAY_MASK) == UPD7220_MODE_DISPLAY_MIXED) ||
- ((m_mode & UPD7220_MODE_INTERLACE_MASK) == UPD7220_MODE_INTERLACE_ON))
+ if((m_mode & UPD7220_MODE_DISPLAY_MASK) == UPD7220_MODE_DISPLAY_MIXED)
horiz_mult = 8;
- else
- horiz_mult = 16;
+ else if((m_mode & UPD7220_MODE_INTERLACE_MASK) == UPD7220_MODE_INTERLACE_ON)
+ {
+ // in interlaced mode every line contains both fields
+ horiz_mult = 8;
+ vert_mult = 2;
+ }
int horiz_pix_total = (m_hs + m_hbp + m_hfp + m_aw) * horiz_mult;
- int vert_pix_total = m_vs + m_vbp + m_al + m_vfp;
+ int vert_pix_total = (m_vs + m_vbp + m_al + m_vfp) * vert_mult;
//printf("%d %d %d %d\n",m_hs,m_hbp,m_aw,m_hfp);
//printf("%d %d\n",m_aw * 8,m_pitch * 8);
@@ -394,9 +397,9 @@ inline void upd7220_device::recompute_parameters()
rectangle visarea;
visarea.min_x = 0; //(m_hs + m_hbp) * 8;
- visarea.min_y = 0; //m_vs + m_vbp;
+ visarea.min_y = m_vbp; //m_vs + m_vbp;
visarea.max_x = m_aw * horiz_mult - 1;//horiz_pix_total - (m_hfp * 8) - 1;
- visarea.max_y = m_al - 1;//vert_pix_total - m_vfp - 1;
+ visarea.max_y = m_al * vert_mult + m_vbp - 1;//vert_pix_total - m_vfp - 1;
LOG(("uPD7220 '%s' Screen: %u x %u @ %f Hz\n", tag(), horiz_pix_total, vert_pix_total, 1 / ATTOSECONDS_TO_DOUBLE(refresh)));
LOG(("Visible Area: (%u, %u) - (%u, %u)\n", visarea.min_x, visarea.min_y, visarea.max_x, visarea.max_y));
@@ -798,31 +801,47 @@ void upd7220_device::draw_pixel(int x, int y, int xi, UINT16 tile_data)
void upd7220_device::draw_line(int x, int y)
{
- int line_size,i;
- const int line_x_dir[8] = { 0, 1, 1, 0, 0,-1,-1, 0};
- const int line_y_dir[8] = { 1, 0, 0,-1,-1, 0, 0, 1};
- const int line_x_step[8] = { 1, 0, 0, 1,-1, 0, 0,-1 };
- const int line_y_step[8] = { 0, 1,-1, 0, 0,-1, 1, 0 };
+ int xi, yi;
+ int d = (m_figs.m_d & 0x2000) ? (INT16)(m_figs.m_d | 0xe000) : m_figs.m_d;
+ int d2 = (m_figs.m_d2 & 0x2000) ? (INT16)(m_figs.m_d2 | 0xe000) : m_figs.m_d2;
UINT16 pattern = (m_ra[8]) | (m_ra[9]<<8);
- int line_step = 0;
+ const int dot_dir[4] = {1, -1, -1, 1};
LOG(("uPD7220 line check: %d %d %02x %08x %d %d %d\n",x,y,m_figs.m_dir,m_ead,m_figs.m_d1,m_figs.m_dc,m_bitmap_mod));
- line_size = m_figs.m_dc;
-
- for(i = 0;i<line_size;i++)
+ for(yi = xi = 0; yi <= m_figs.m_dc; yi++)
{
- line_step = (m_figs.m_d1 * i);
- line_step/= m_figs.m_dc;
- ++line_step >>= 1;
- draw_pixel(x + (line_step*line_x_step[m_figs.m_dir]),y + (line_step*line_y_step[m_figs.m_dir]),i,pattern);
- x += line_x_dir[m_figs.m_dir];
- y += line_y_dir[m_figs.m_dir];
+ switch(m_figs.m_dir & 3)
+ {
+ case 1:
+ case 2:
+ draw_pixel(yi * dot_dir[((m_figs.m_dir >> 1) + 3) & 3] + x, xi * dot_dir[m_figs.m_dir >> 1] + y, yi, pattern);
+ break;
+ default:
+ draw_pixel(xi * dot_dir[((m_figs.m_dir >> 1) + 3) & 3] + x, yi * dot_dir[m_figs.m_dir >> 1] + y, yi, pattern);
+ break;
+ }
+ if(d > 0)
+ {
+ xi++;
+ d += d2;
+ }
+ else
+ d += m_figs.m_d1;
}
- /* TODO: check me*/
- x += (line_step*line_x_step[m_figs.m_dir]);
- y += (line_step*line_y_step[m_figs.m_dir]);
+ switch(m_figs.m_dir & 3)
+ {
+ case 1:
+ case 2:
+ x += yi * dot_dir[((m_figs.m_dir >> 1) + 3) & 3];
+ y += xi * dot_dir[m_figs.m_dir >> 1];
+ break;
+ default:
+ x += xi * dot_dir[((m_figs.m_dir >> 1) + 3) & 3];
+ y += yi * dot_dir[m_figs.m_dir >> 1];
+ break;
+ }
m_ead = (x >> 4) + (y * (m_pitch >> m_figs.m_gd));
m_dad = x & 0x0f;
@@ -854,7 +873,7 @@ void upd7220_device::draw_arc(int x, int y)
LOG(("uPD7220 arc check: %d %d %02x %08x %d %d %d\n",x,y,m_figs.m_dir,m_ead,m_figs.m_dm,m_figs.m_dc,m_figs.m_d));
- for(int i = 0; i < m_figs.m_dc; i++)
+ for(int i = 0; i <= m_figs.m_dc; i++)
{
if(i >= m_figs.m_dm)
{
@@ -882,10 +901,10 @@ void upd7220_device::draw_arc(int x, int y)
{
case 1:
case 2:
- x += m_figs.m_dc * dot_dir[((m_figs.m_dir >> 1) + 3) & 3];
+ x += (m_figs.m_dc + 1) * dot_dir[((m_figs.m_dir >> 1) + 3) & 3];
break;
default:
- y += m_figs.m_dc * dot_dir[m_figs.m_dir >> 1];
+ y += (m_figs.m_dc + 1) * dot_dir[m_figs.m_dir >> 1];
break;
}
@@ -1535,7 +1554,7 @@ void upd7220_device::update_text(bitmap_rgb32 &bitmap, const rectangle &cliprect
addr = sad + (y * m_pitch);
if (!m_draw_text_cb.isnull())
- m_draw_text_cb(bitmap, addr, (y * m_lr), wd, m_pitch, m_lr, m_dc, m_ead);
+ m_draw_text_cb(bitmap, addr, (y * m_lr) + m_vbp, wd, m_pitch, m_lr, m_dc, m_ead);
}
sy = y + 1;
@@ -1547,13 +1566,13 @@ void upd7220_device::update_text(bitmap_rgb32 &bitmap, const rectangle &cliprect
// draw_graphics_line -
//-------------------------------------------------
-void upd7220_device::draw_graphics_line(bitmap_rgb32 &bitmap, UINT32 addr, int y, int wd)
+void upd7220_device::draw_graphics_line(bitmap_rgb32 &bitmap, UINT32 addr, int y, int wd, int pitch)
{
- int sx;
+ int sx, al = bitmap.cliprect().height();
- for (sx = 0; sx < 80; sx++)
+ for (sx = 0; sx < pitch; sx++)
{
- if((sx << 3) < m_aw * 16 && y < m_al)
+ if((sx << 3) < m_aw * 16 && y < al)
m_display_cb(bitmap, y, sx << 3, addr);
addr+= wd + 1;
@@ -1571,6 +1590,8 @@ void upd7220_device::update_graphics(bitmap_rgb32 &bitmap, const rectangle &clip
UINT16 len;
int im, wd, area;
int y = 0, tsy = 0, bsy = 0;
+ bool mixed = ((m_mode & UPD7220_MODE_DISPLAY_MASK) == UPD7220_MODE_DISPLAY_MIXED);
+ UINT8 interlace = ((m_mode & UPD7220_MODE_INTERLACE_MASK) == UPD7220_MODE_INTERLACE_ON) ? 0 : 1;
for (area = 0; area < 4; area++)
{
@@ -1583,6 +1604,9 @@ void upd7220_device::update_graphics(bitmap_rgb32 &bitmap, const rectangle &clip
if(area >= 3) // TODO: most likely to be correct, Quarth (PC-98xx) definitely draws with area 2. We might see an area 3 someday ...
break;
+ if(!interlace)
+ len <<= 1;
+
for (y = 0; y < len; y++)
{
/* TODO: again correct?
@@ -1592,7 +1616,7 @@ void upd7220_device::update_graphics(bitmap_rgb32 &bitmap, const rectangle &clip
addr = ((sad << 1) & 0x3ffff) + (y * (m_pitch << (im ? 0 : 1)));
if (!m_display_cb.isnull())
- draw_graphics_line(bitmap, addr, y + (bsy / m_lr), wd);
+ draw_graphics_line(bitmap, addr, y + ((bsy + m_vbp) / (mixed ? 1 : m_lr)), wd, (m_pitch << interlace));
}
}
else
@@ -1606,7 +1630,7 @@ void upd7220_device::update_graphics(bitmap_rgb32 &bitmap, const rectangle &clip
addr = (sad & 0x3ffff) + ((y / m_lr) * m_pitch);
if (!m_draw_text_cb.isnull())
- m_draw_text_cb(bitmap, addr, y + tsy, wd, m_pitch, m_lr, m_dc, m_ead);
+ m_draw_text_cb(bitmap, addr, y + tsy + m_vbp, wd, m_pitch, m_lr, m_dc, m_ead);
}
}
}
diff --git a/src/emu/video/upd7220.h b/src/emu/video/upd7220.h
index affbe531c40..d91ed53c24a 100644
--- a/src/emu/video/upd7220.h
+++ b/src/emu/video/upd7220.h
@@ -150,7 +150,7 @@ private:
void process_fifo();
void continue_command();
void update_text(bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void draw_graphics_line(bitmap_rgb32 &bitmap, UINT32 addr, int y, int wd);
+ void draw_graphics_line(bitmap_rgb32 &bitmap, UINT32 addr, int y, int wd, int pitch);
void update_graphics(bitmap_rgb32 &bitmap, const rectangle &cliprect, int force_bitmap);
upd7220_display_pixels_delegate m_display_cb;
diff --git a/src/emu/video/video.mak b/src/emu/video/video.mak
index 25f724ebae4..67cef5683bf 100644
--- a/src/emu/video/video.mak
+++ b/src/emu/video/video.mak
@@ -174,6 +174,15 @@ endif
#-------------------------------------------------
#
+#@src/emu/video/gf6800gt.h,VIDEOS += GF6800GT
+#-------------------------------------------------
+
+ifneq ($(filter GF6800GT,$(VIDEOS)),)
+VIDEOOBJS+= $(VIDEOOBJ)/gf6800gt.o
+endif
+
+#-------------------------------------------------
+#
#@src/emu/video/h63484.h,VIDEOS += H63484
#-------------------------------------------------
diff --git a/src/lib/formats/cbm_crt.c b/src/lib/formats/cbm_crt.c
index fd44e061376..6ce4cc992d8 100644
--- a/src/lib/formats/cbm_crt.c
+++ b/src/lib/formats/cbm_crt.c
@@ -4,14 +4,44 @@
cbm_crt.c
- Commodore C64 cartridge images
+ Commodore C64 cartridge images in .CRT format
+
+ This format was introduced in the CCS64 emulator by Per Hakan
+ Sundell.
+
+ Header info based on the VICE manual chapter 15.11, which in turn
+ is based on CRT.txt rev 1.14 compiled by Peter Schepers, with
+ additional contributions by Per Hakan Sundell, Markus Brenner,
+ and Marco Van Den Heuvel.
+ Relevant links:
+ http://vice-emu.sourceforge.net/vice_15.html#SEC300
+ http://ist.uwaterloo.ca/~schepers/formats/CRT.TXT (version 1.13, outdated)
+
+ Header Contents (bytes $0000-003F):
+ Bytes $0000-000F - 16-byte cartridge signature "C64 CARTRIDGE" (padded with spaces)
+ $0010-0013 - File header length
+ $0014-0015 - Cartridge version (high/low, presently 01.00)
+ $0016-0017 - Cartridge hardware type ($0000, high/low), see below
+ $0018 - Cartridge port EXROM line status (0 = inactive, 1 = active)
+ $0019 - Cartridge port GAME line status (0 = inactive, 1 = active)
+ $001A-001F - Reserved for future use
+ $0020-003F - 32-byte cartridge name (uppercase, padded with null characters)
+
+ CHIP Packet Contents (starting from $0040; there can be multiple CHIP packets
+ in a single CRT file):
+ Bytes $0040-0043 - Contained ROM signature "CHIP"
+ $0044-0047 - Total packet length (ROM image size and header combined) (high/low format)
+ $0048-0049 - Chip type (0 = ROM, 1 = RAM (no ROM data), 2 = Flash ROM)
+ $004A-004B - Bank number
+ $004C-004D - Starting load address (high/low format)
+ $004E-004F - ROM image size in bytes (high/low format, typically $2000 or $4000)
+ $0050-xxxx - ROM data
*********************************************************************/
#include "cbm_crt.h"
-
//**************************************************************************
// MACROS/CONSTANTS
//**************************************************************************
@@ -22,62 +52,62 @@
// slot names for the C64 cartridge types
static const char * CRT_C64_SLOT_NAMES[_CRT_C64_COUNT] =
{
- "standard",
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- "simons_basic",
- "ocean",
- UNSUPPORTED,
- "fun_play",
- "super_games",
- UNSUPPORTED,
- "epyxfastload",
- "westermann",
- "rex",
- UNSUPPORTED,
- "magic_formel",
- "system3",
- "warp_speed",
- "dinamic",
- "zaxxon",
- "magic_desk",
- UNSUPPORTED,
- "comal80",
- "struct_basic",
- "ross",
- "ep64",
- "ep7x8",
- "dela_ep256",
- "rex_ep256",
- "mikroasm",
- UNSUPPORTED,
- UNSUPPORTED,
- "stardos",
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- "ieee488",
- UNSUPPORTED,
- UNSUPPORTED,
- "exos",
- UNSUPPORTED,
- UNSUPPORTED,
- UNSUPPORTED,
- "super_explode",
- UNSUPPORTED,
- UNSUPPORTED,
- "mach5",
- UNSUPPORTED,
- "pagefox",
- UNSUPPORTED,
- "silverrock"
+ "standard", // 0 - Normal cartridge
+ UNSUPPORTED, // 1 - Action Replay
+ UNSUPPORTED, // 2 - KCS Power Cartridge
+ "final3", // 3 - Final Cartridge III
+ "simons_basic", // 4 - Simons' BASIC
+ "ocean", // 5 - Ocean type 1
+ UNSUPPORTED, // 6 - Expert Cartridge
+ "fun_play", // 7 - Fun Play, Power Play
+ "super_games", // 8 - Super Games
+ UNSUPPORTED, // 9 - Atomic Power
+ "epyxfastload", // 10 - Epyx Fastload
+ "westermann", // 11 - Westermann Learning
+ "rex", // 12 - Rex Utility
+ "final", // 13 - Final Cartridge I
+ "magic_formel", // 14 - Magic Formel
+ "system3", // 15 - C64 Game System, System 3
+ "warp_speed", // 16 - Warp Speed
+ "dinamic", // 17 - Dinamic
+ "zaxxon", // 18 - Zaxxon, Super Zaxxon (SEGA)
+ "magic_desk", // 19 - Magic Desk, Domark, HES Australia
+ UNSUPPORTED, // 20 - Super Snapshot V5
+ "comal80", // 21 - Comal-80
+ "struct_basic", // 22 - Structured BASIC
+ "ross", // 23 - Ross
+ "ep64", // 24 - Dela EP64
+ "ep7x8", // 25 - Dela EP7x8
+ "dela_ep256", // 26 - Dela EP256
+ "rex_ep256", // 27 - Rex EP256
+ "mikroasm", // 28 - Mikro Assembler
+ UNSUPPORTED, // 29 - Final Cartridge Plus
+ UNSUPPORTED, // 30 - Action Replay 4
+ "stardos", // 31 - Stardos
+ "easyflash", // 32 - EasyFlash
+ UNSUPPORTED, // 33 - EasyFlash Xbank
+ UNSUPPORTED, // 34 - Capture
+ UNSUPPORTED, // 35 - Action Replay 3
+ UNSUPPORTED, // 36 - Retro Replay
+ UNSUPPORTED, // 37 - MMC64
+ UNSUPPORTED, // 38 - MMC Replay
+ "ide64", // 39 - IDE64
+ UNSUPPORTED, // 40 - Super Snapshot V4
+ "ieee488", // 41 - IEEE-488
+ UNSUPPORTED, // 42 - Game Killer
+ "prophet64", // 43 - Prophet64
+ "exos", // 44 - EXOS
+ UNSUPPORTED, // 45 - Freeze Frame
+ UNSUPPORTED, // 46 - Freeze Machine
+ UNSUPPORTED, // 47 - Snapshot64
+ "super_explode", // 48 - Super Explode V5.0
+ "magic_voice", // 49 - Magic Voice
+ UNSUPPORTED, // 50 - Action Replay 2
+ "mach5", // 51 - MACH 5
+ UNSUPPORTED, // 52 - Diashow-Maker
+ "pagefox", // 53 - Pagefox
+ UNSUPPORTED, // 54 - ?
+ "silverrock" // 55 - Silverrock
};
diff --git a/src/lib/formats/d88_dsk.c b/src/lib/formats/d88_dsk.c
index 658205e97ba..1df91cc94c9 100644
--- a/src/lib/formats/d88_dsk.c
+++ b/src/lib/formats/d88_dsk.c
@@ -492,8 +492,12 @@ bool d88_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
pos += 16;
UINT16 size = LITTLE_ENDIANIZE_INT16(*(UINT16 *)(hs+14));
- if(i == 0)
+ if(i == 0) {
sector_count = LITTLE_ENDIANIZE_INT16(*(UINT16 *)(hs+4));
+ // Support broken vfman converter
+ if(sector_count == 0x1000)
+ sector_count = 0x10;
+ }
sects[i].track = hs[0];
sects[i].head = hs[1];
diff --git a/src/lib/formats/esq16_dsk.c b/src/lib/formats/esq16_dsk.c
index e5d5c0f65cd..4b370cfe0bd 100644
--- a/src/lib/formats/esq16_dsk.c
+++ b/src/lib/formats/esq16_dsk.c
@@ -50,7 +50,7 @@ esqimg_format::esqimg_format()
const char *esqimg_format::name() const
{
- return "img";
+ return "esq16";
}
const char *esqimg_format::description() const
diff --git a/src/lib/formats/esq8_dsk.c b/src/lib/formats/esq8_dsk.c
index 08fcb5bd7d1..8af0bc46a84 100644
--- a/src/lib/formats/esq8_dsk.c
+++ b/src/lib/formats/esq8_dsk.c
@@ -52,7 +52,7 @@ esq8img_format::esq8img_format()
const char *esq8img_format::name() const
{
- return "img";
+ return "esq8";
}
const char *esq8img_format::description() const
diff --git a/src/lib/formats/flopimg.c b/src/lib/formats/flopimg.c
index 00c393939bf..1e0f42a5b35 100644
--- a/src/lib/formats/flopimg.c
+++ b/src/lib/formats/flopimg.c
@@ -1071,6 +1071,8 @@ bool floppy_image_format_t::type_no_data(int type) const
type == CRC_CBM_START ||
type == CRC_MACHEAD_START ||
type == CRC_FCS_START ||
+ type == CRC_VICTOR_HDR_START ||
+ type == CRC_VICTOR_DATA_START ||
type == CRC_END ||
type == SECTOR_LOOP_START ||
type == SECTOR_LOOP_END ||
@@ -1112,6 +1114,12 @@ void floppy_image_format_t::collect_crcs(const desc_e *desc, gen_crc_info *crcs)
case CRC_FCS_START:
crcs[desc[i].p1].type = CRC_FCS;
break;
+ case CRC_VICTOR_HDR_START:
+ crcs[desc[i].p1].type = CRC_VICTOR_HDR;
+ break;
+ case CRC_VICTOR_DATA_START:
+ crcs[desc[i].p1].type = CRC_VICTOR_DATA;
+ break;
}
for(int i=0; desc[i].type != END; i++)
@@ -1131,6 +1139,8 @@ int floppy_image_format_t::crc_cells_size(int type) const
case CRC_CBM: return 10;
case CRC_MACHEAD: return 8;
case CRC_FCS: return 20;
+ case CRC_VICTOR_HDR: return 10;
+ case CRC_VICTOR_DATA: return 20;
default: return 0;
}
}
@@ -1271,17 +1281,40 @@ void floppy_image_format_t::fixup_crc_fcs(UINT32 *buffer, const gen_crc_info *cr
// TODO
}
+void floppy_image_format_t::fixup_crc_victor_header(UINT32 *buffer, const gen_crc_info *crc)
+{
+ UINT8 v = 0;
+ for(int o = crc->start; o < crc->end; o+=10) {
+ v += ((gcr5bw_tb[bitn_r(buffer, o, 5)] << 4) | gcr5bw_tb[bitn_r(buffer, o+5, 5)]);
+ }
+ int offset = crc->write;
+ gcr5_w(buffer, offset, 10, v);
+}
+
+void floppy_image_format_t::fixup_crc_victor_data(UINT32 *buffer, const gen_crc_info *crc)
+{
+ UINT16 v = 0;
+ for(int o = crc->start; o < crc->end; o+=10) {
+ v += ((gcr5bw_tb[bitn_r(buffer, o, 5)] << 4) | gcr5bw_tb[bitn_r(buffer, o+5, 5)]);
+ }
+ int offset = crc->write;
+ gcr5_w(buffer, offset, 10, v & 0xff);
+ gcr5_w(buffer, offset, 10, v >> 8);
+}
+
void floppy_image_format_t::fixup_crcs(UINT32 *buffer, gen_crc_info *crcs)
{
for(int i=0; i != MAX_CRC_COUNT; i++)
if(crcs[i].write != -1) {
switch(crcs[i].type) {
- case CRC_AMIGA: fixup_crc_amiga(buffer, crcs+i); break;
- case CRC_CBM: fixup_crc_cbm(buffer, crcs+i); break;
- case CRC_CCITT: fixup_crc_ccitt(buffer, crcs+i); break;
- case CRC_CCITT_FM:fixup_crc_ccitt_fm(buffer, crcs+i); break;
- case CRC_MACHEAD: fixup_crc_machead(buffer, crcs+i); break;
- case CRC_FCS: fixup_crc_fcs(buffer, crcs+i); break;
+ case CRC_AMIGA: fixup_crc_amiga(buffer, crcs+i); break;
+ case CRC_CBM: fixup_crc_cbm(buffer, crcs+i); break;
+ case CRC_CCITT: fixup_crc_ccitt(buffer, crcs+i); break;
+ case CRC_CCITT_FM: fixup_crc_ccitt_fm(buffer, crcs+i); break;
+ case CRC_MACHEAD: fixup_crc_machead(buffer, crcs+i); break;
+ case CRC_FCS: fixup_crc_fcs(buffer, crcs+i); break;
+ case CRC_VICTOR_HDR: fixup_crc_victor_header(buffer, crcs+i); break;
+ case CRC_VICTOR_DATA: fixup_crc_victor_data(buffer, crcs+i); break;
}
if(crcs[i].fixup_mfm_clock) {
int offset = crcs[i].write + crc_cells_size(crcs[i].type);
@@ -1403,6 +1436,11 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
raw_w(buffer, offset, desc[index].p2, desc[index].p1);
break;
+ case SYNC_GCR5:
+ for(int i=0; i<desc[index].p1; i++)
+ raw_w(buffer, offset, 10, 0xffff);
+ break;
+
case TRACK_ID:
mfm_w(buffer, offset, 8, track);
break;
@@ -1427,6 +1465,10 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
_8n1_w(buffer, offset, 8, track);
break;
+ case TRACK_ID_VICTOR_GCR5:
+ gcr5_w(buffer, offset, 10, 1 + track + (head * 0x80));
+ break;
+
case HEAD_ID:
mfm_w(buffer, offset, 8, head);
break;
@@ -1536,6 +1578,8 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
case CRC_CCITT_FM_START:
case CRC_MACHEAD_START:
case CRC_FCS_START:
+ case CRC_VICTOR_HDR_START:
+ case CRC_VICTOR_DATA_START:
crcs[desc[index].p1].start = offset;
break;
diff --git a/src/lib/formats/flopimg.h b/src/lib/formats/flopimg.h
index 4f2d85d43cc..b53744578df 100644
--- a/src/lib/formats/flopimg.h
+++ b/src/lib/formats/flopimg.h
@@ -307,12 +307,14 @@ protected:
RAW, //!< One 16 bits word in p1 to be written raw, msb first, repeated p2 times
RAWBYTE, //!< One 8 bit byte in p1 to be written raw, msb first, repeated p2 times
RAWBITS, //!< A value of p2 bits in p1 to be copied as-is, msb first
+ SYNC_GCR5, //!< gcr5 sync byte
TRACK_ID, //!< Track id byte, mfm-encoded
TRACK_ID_FM, //!< Track id byte, fm-encoded
TRACK_ID_DOS2_GCR5, //!< Track id byte, gcr5-encoded
TRACK_ID_DOS25_GCR5, //!< Track id byte, gcr5-encoded
TRACK_ID_GCR6, //!< Track id low 6 bits, gcr6-encoded
TRACK_ID_8N1, //!< Track id byte, 8N1-encoded
+ TRACK_ID_VICTOR_GCR5, //!< Track id byte, gcr5-encoded
HEAD_ID, //!< Head id byte, mfm-encoded
HEAD_ID_FM, //!< Head id byte, fm-encoded
HEAD_ID_SWAP, //!< Head id byte swapped (0->1, 1->0), mfm-encoded
@@ -346,6 +348,8 @@ protected:
CRC_CBM_START, //!< Start a CBM checksum calculation (xor of original data values, gcr5-encoded), p1 = crc id
CRC_MACHEAD_START, //!< Start of the mac gcr6 sector header checksum calculation (xor of pre-encode 6-bits values, gcr6-encoded)
CRC_FCS_START, //!< Start a Compucolor File Control System checksum calculation, p1 = crc id
+ CRC_VICTOR_HDR_START, //!< Start a Victor 9000 checksum calculation, p1 = crc id
+ CRC_VICTOR_DATA_START, //!< Start a Victor 9000 checksum calculation, p1 = crc id
CRC_END, //!< End the checksum, p1 = crc id
CRC, //!< Write a checksum in the apporpriate format, p1 = crc id
@@ -565,7 +569,7 @@ protected:
UINT8 sbyte_mfm_r(const UINT8 *bitstream, int &pos, int track_size);
private:
- enum { CRC_NONE, CRC_AMIGA, CRC_CBM, CRC_CCITT, CRC_CCITT_FM, CRC_MACHEAD, CRC_FCS };
+ enum { CRC_NONE, CRC_AMIGA, CRC_CBM, CRC_CCITT, CRC_CCITT_FM, CRC_MACHEAD, CRC_FCS, CRC_VICTOR_HDR, CRC_VICTOR_DATA };
enum { MAX_CRC_COUNT = 64 };
//! Holds data used internally for generating CRCs.
@@ -587,6 +591,8 @@ private:
void fixup_crc_ccitt_fm(UINT32 *buffer, const gen_crc_info *crc);
void fixup_crc_machead(UINT32 *buffer, const gen_crc_info *crc);
void fixup_crc_fcs(UINT32 *buffer, const gen_crc_info *crc);
+ void fixup_crc_victor_header(UINT32 *buffer, const gen_crc_info *crc);
+ void fixup_crc_victor_data(UINT32 *buffer, const gen_crc_info *crc);
void fixup_crcs(UINT32 *buffer, gen_crc_info *crcs);
void collect_crcs(const desc_e *desc, gen_crc_info *crcs);
diff --git a/src/lib/formats/p6001_cas.c b/src/lib/formats/p6001_cas.c
index baf223d060f..78e5e929963 100644
--- a/src/lib/formats/p6001_cas.c
+++ b/src/lib/formats/p6001_cas.c
@@ -1,5 +1,5 @@
/*
- * Nec PC-6001 cassette format handling
+ * NEC PC-6001 cassette format handling
*/
#include "p6001_cas.h"
diff --git a/src/lib/formats/p6001_cas.h b/src/lib/formats/p6001_cas.h
index a79a3a149b1..2006bbb9794 100644
--- a/src/lib/formats/p6001_cas.h
+++ b/src/lib/formats/p6001_cas.h
@@ -1,5 +1,5 @@
/*
- * Nec PC-6001 cassette format handling
+ * NEC PC-6001 cassette format handling
*/
#ifndef PC6001_CAS_H_
diff --git a/src/lib/formats/pc98fdi_dsk.c b/src/lib/formats/pc98fdi_dsk.c
index d1859981305..81aeaf7a42b 100644
--- a/src/lib/formats/pc98fdi_dsk.c
+++ b/src/lib/formats/pc98fdi_dsk.c
@@ -17,7 +17,7 @@ pc98fdi_format::pc98fdi_format()
const char *pc98fdi_format::name() const
{
- return "pc98-fdi";
+ return "pc98_fdi";
}
const char *pc98fdi_format::description() const
diff --git a/src/lib/formats/victor9k_dsk.c b/src/lib/formats/victor9k_dsk.c
new file mode 100644
index 00000000000..db2a75b21e7
--- /dev/null
+++ b/src/lib/formats/victor9k_dsk.c
@@ -0,0 +1,256 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/*********************************************************************
+
+ formats/victor9k_dsk.c
+
+ Victor 9000 sector disk image format
+
+*********************************************************************/
+
+/*
+
+ Sector format
+ -------------
+
+ Header sync
+ Sector header (header ID, track ID, sector ID, and checksum)
+ Gap 1
+ Data Sync
+ Data field (data sync, data ID, data bytes, and checksum)
+ Gap 2
+
+ Track format
+ ------------
+
+ ZONE LOWER HEAD UPPER HEAD SECTORS ROTATIONAL RPM
+ NUMBER TRACKS TRACKS PER TRACK PERIOD (MS)
+
+ 0 0-3 unused 19 237.9 252
+ 1 4-15 0-7 18 224.5 267
+ 2 16-26 8-18 17 212.2 283
+ 3 27-37 19-29 16 199.9 300
+ 4 38-48 30-40 15 187.6 320
+ 5 49-59 41-51 14 175.3 342
+ 6 60-70 52-62 13 163.0 368
+ 7 71-79 63-74 12 149.6 401
+ 8 unused 75-79 11 144.0 417
+
+ Interleave factor 3
+ cell 2.13 usec
+
+*/
+
+#include "emu.h"
+#include "formats/victor9k_dsk.h"
+
+victor9k_format::victor9k_format()
+{
+}
+
+const char *victor9k_format::name() const
+{
+ return "victor9k";
+}
+
+const char *victor9k_format::description() const
+{
+ return "Victor 9000 disk image";
+}
+
+const char *victor9k_format::extensions() const
+{
+ return "img";
+}
+
+int victor9k_format::find_size(io_generic *io, UINT32 form_factor)
+{
+ UINT64 size = io_generic_size(io);
+ for(int i=0; formats[i].sector_count; i++) {
+ const format &f = formats[i];
+ if(size == (UINT32) f.sector_count*f.sector_base_size*f.head_count)
+ return i;
+ }
+ return -1;
+}
+
+int victor9k_format::identify(io_generic *io, UINT32 form_factor)
+{
+ int type = find_size(io, form_factor);
+
+ if (type != -1)
+ return 50;
+
+ return 0;
+}
+
+floppy_image_format_t::desc_e* victor9k_format::get_sector_desc(const format &f, int &current_size, int sector_count)
+{
+ static floppy_image_format_t::desc_e desc[] = {
+ /* 00 */ { SECTOR_INTERLEAVE_SKEW, 0, 0},
+ /* 01 */ { SECTOR_LOOP_START, 0, -1 },
+ /* 02 */ { SYNC_GCR5, 6 },
+ /* 03 */ { GCR5, 0x07, 1 },
+ /* 04 */ { CRC_VICTOR_HDR_START, 1 },
+ /* 05 */ { TRACK_ID_VICTOR_GCR5 },
+ /* 06 */ { SECTOR_ID_GCR5 },
+ /* 07 */ { CRC_END, 1 },
+ /* 08 */ { CRC, 1 },
+ /* 09 */ { RAWBYTE, 0x55, 8 },
+ /* 10 */ { SYNC_GCR5, 5 },
+ /* 11 */ { GCR5, 0x08, 1 },
+ /* 12 */ { CRC_VICTOR_DATA_START, 2 },
+ /* 13 */ { SECTOR_DATA_GCR5, -1 },
+ /* 14 */ { CRC_END, 2 },
+ /* 15 */ { CRC, 2 },
+ /* 16 */ { RAWBYTE, 0x55, 8 },
+ /* 17 */ { SECTOR_LOOP_END },
+ /* 18 */ { RAWBYTE, 0x55, 0 },
+ /* 19 */ { RAWBITS, 0x5555, 0 },
+ /* 20 */ { END }
+ };
+
+ current_size = 60 + (1+1+1+1)*10 + 8*8 + 50 + (1+f.sector_base_size+2)*10 + 8*8;
+
+ current_size *= sector_count;
+ return desc;
+}
+
+void victor9k_format::build_sector_description(const format &f, UINT8 *sectdata, offs_t sect_offs, desc_s *sectors, int sector_count) const
+{
+ for (int i = 0; i < sector_count; i++) {
+ sectors[i].data = sectdata + sect_offs;
+ sectors[i].size = f.sector_base_size;
+ sectors[i].sector_id = i;
+
+ sect_offs += sectors[i].size;
+ }
+}
+
+bool victor9k_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
+{
+ int type = find_size(io, form_factor);
+ if(type == -1)
+ return false;
+
+ const format &f = formats[type];
+
+ UINT64 size = io_generic_size(io);
+ dynamic_buffer img;
+ img.resize(size);
+
+ io_generic_read(io, img, 0, size);
+
+ int track_offset = 0;
+
+ for (int head = 0; head < f.head_count; head++) {
+ for (int track = 0; track < f.track_count; track++) {
+ int current_size = 0;
+ int total_size = 200000000./cell_size[speed_zone[head][track]];
+ int sector_count = sectors_per_track[head][track];
+ int track_size = sector_count*f.sector_base_size;
+
+ floppy_image_format_t::desc_e *desc = get_sector_desc(f, current_size, sector_count);
+
+ int remaining_size = total_size - current_size;
+ if(remaining_size < 0)
+ throw emu_fatalerror("victor9k_format: Incorrect track layout, max_size=%d, current_size=%d", total_size, current_size);
+
+ // Fixup the end gap
+ desc[18].p2 = remaining_size / 8;
+ desc[19].p2 = remaining_size & 7;
+ desc[19].p1 >>= remaining_size & 0x01;
+
+ desc_s sectors[40];
+
+ build_sector_description(f, img, track_offset, sectors, sector_count);
+ generate_track(desc, track, head, sectors, sector_count, total_size, image);
+
+ track_offset += track_size;
+ }
+ }
+
+ image->set_variant(f.variant);
+
+ return true;
+}
+
+bool victor9k_format::supports_save() const
+{
+ return false;
+}
+
+int victor9k_format::get_rpm(int head, int track)
+{
+ return rpm[speed_zone[head][track]];
+}
+
+const victor9k_format::format victor9k_format::formats[] = {
+ { //
+ floppy_image::FF_525, floppy_image::SSDD, 1224, 80, 1, 512
+ },
+ { //
+ floppy_image::FF_525, floppy_image::DSDD, 2448, 80, 2, 512
+ },
+ {}
+};
+
+const UINT32 victor9k_format::cell_size[9] =
+{
+ 1789, 1896, 2009, 2130, 2272, 2428, 2613, 2847, 2961
+};
+
+const int victor9k_format::sectors_per_track[2][80] =
+{
+ {
+ 19, 19, 19, 19,
+ 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12
+ },
+ {
+ 18, 18, 18, 18, 18, 18, 18, 18,
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+ 11, 11, 11, 11, 11
+ }
+};
+
+const int victor9k_format::speed_zone[2][80] =
+{
+ {
+ 0, 0, 0, 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7
+ },
+ {
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 8, 8, 8, 8, 8
+ }
+};
+
+const int victor9k_format::rpm[9] =
+{
+ 252, 267, 283, 300, 320, 342, 368, 401, 417
+};
+
+const floppy_format_type FLOPPY_VICTOR_9000_FORMAT = &floppy_image_format_creator<victor9k_format>;
diff --git a/src/lib/formats/victor9k_dsk.h b/src/lib/formats/victor9k_dsk.h
new file mode 100644
index 00000000000..2fb24a6534a
--- /dev/null
+++ b/src/lib/formats/victor9k_dsk.h
@@ -0,0 +1,59 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/*********************************************************************
+
+ formats/victor9k_dsk.h
+
+ Victor 9000 sector disk image format
+
+*********************************************************************/
+
+#ifndef VICTOR9K_DSK_H_
+#define VICTOR9K_DSK_H_
+
+#include "flopimg.h"
+
+class victor9k_format : public floppy_image_format_t {
+public:
+ struct format {
+ UINT32 form_factor; // See floppy_image for possible values
+ UINT32 variant; // See floppy_image for possible values
+
+ UINT16 sector_count;
+ UINT8 track_count;
+ UINT8 head_count;
+ UINT16 sector_base_size;
+ };
+
+ victor9k_format();
+
+ virtual const char *name() const;
+ virtual const char *description() const;
+ virtual const char *extensions() const;
+
+ int find_size(io_generic *io, UINT32 form_factor);
+ virtual int identify(io_generic *io, UINT32 form_factor);
+ floppy_image_format_t::desc_e* get_sector_desc(const format &f, int &current_size, int sector_count);
+ void build_sector_description(const format &f, UINT8 *sectdata, offs_t sect_offs, desc_s *sectors, int sector_count) const;
+ virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image);
+ virtual bool supports_save() const;
+
+ static int get_rpm(int head, int track);
+
+protected:
+ static const format formats[];
+
+ static const UINT32 cell_size[9];
+ static const int sectors_per_track[2][80];
+ static const int speed_zone[2][80];
+ static const int rpm[9];
+};
+
+extern const floppy_format_type FLOPPY_VICTOR_9000_FORMAT;
+
+
+FLOPPY_IDENTIFY( victor9k_dsk_identify );
+
+FLOPPY_CONSTRUCT( victor9k_dsk_construct );
+
+#endif
diff --git a/src/lib/lib.mak b/src/lib/lib.mak
index b7014a926c8..57140d0da4d 100644
--- a/src/lib/lib.mak
+++ b/src/lib/lib.mak
@@ -215,6 +215,7 @@ FORMATSOBJS = \
$(LIBOBJ)/formats/tzx_cas.o \
$(LIBOBJ)/formats/uef_cas.o \
$(LIBOBJ)/formats/upd765_dsk.o \
+ $(LIBOBJ)/formats/victor9k_dsk.o\
$(LIBOBJ)/formats/vg5k_cas.o \
$(LIBOBJ)/formats/vt_cas.o \
$(LIBOBJ)/formats/vt_dsk.o \
diff --git a/src/lib/sqlite3/sqlite3.c b/src/lib/sqlite3/sqlite3.c
index 8243bf2c637..becc84a5e69 100644
--- a/src/lib/sqlite3/sqlite3.c
+++ b/src/lib/sqlite3/sqlite3.c
@@ -8494,9 +8494,13 @@ SQLITE_PRIVATE const int sqlite3one;
/*
** Disable MMAP on platforms where it is known to not work
*/
-#if defined(__OpenBSD__) || defined(__QNXNTO__)
+#if defined(__OpenBSD__) || defined(__QNXNTO__) || defined(__OS2__)
# undef SQLITE_MAX_MMAP_SIZE
# define SQLITE_MAX_MMAP_SIZE 0
+# ifdef __OS2__
+# undef SQLITE_OMIT_WAL
+# define SQLITE_OMIT_WAL 0
+# endif
#endif
/*
diff --git a/src/lib/web/mongoose.c b/src/lib/web/mongoose.c
index e9305981bac..3482875b7b8 100644
--- a/src/lib/web/mongoose.c
+++ b/src/lib/web/mongoose.c
@@ -72,6 +72,9 @@
#include <stdlib.h>
#include <string.h>
#include <time.h>
+#ifdef __OS2__
+#include <sys/time.h> // struct timeval
+#endif
#include <signal.h>
#ifdef _WIN32
@@ -120,7 +123,11 @@ typedef SOCKET sock_t;
#include <sys/socket.h>
#include <sys/select.h>
#define closesocket(x) close(x)
+#ifdef __OS2__
+typedef int socklen_t;
+#else
#define __cdecl
+#endif
#define INVALID_SOCKET (-1)
#define to64(x) strtoll(x, NULL, 10)
typedef int sock_t;
@@ -1170,7 +1177,9 @@ typedef HANDLE process_id_t;
#include <dlfcn.h>
#include <inttypes.h>
#include <pwd.h>
+#ifndef __OS2__
#define O_BINARY 0
+#endif
#define INT64_FMT PRId64
typedef struct stat file_stat_t;
typedef pid_t process_id_t;
@@ -5152,6 +5161,28 @@ static void *mmap(void *addr, int64_t len, int prot, int flags, int fd,
#define MAP_FAILED NULL
#define MAP_PRIVATE 0
#define PROT_READ 0
+#elif defined(__OS2__)
+static void *mmap(void *addr, int64_t len, int prot, int flags, int fd,
+ int offset) {
+ void *p;
+ off_t curpos;
+
+ p = malloc(len);
+ if (!p)
+ return NULL;
+
+ curpos = lseek(fd, 0, SEEK_CUR);
+ lseek(fd, offset, SEEK_SET);
+ read(fd, p, len);
+ lseek(fd, curpos, SEEK_SET);
+
+ return p;
+}
+
+#define munmap(x, y) free(x)
+#define MAP_FAILED NULL
+#define MAP_PRIVATE 0
+#define PROT_READ 0
#else
#include <sys/mman.h>
#endif
diff --git a/src/mame/audio/harddriv.c b/src/mame/audio/harddriv.c
index da3d51a96b9..a1aafc76405 100644
--- a/src/mame/audio/harddriv.c
+++ b/src/mame/audio/harddriv.c
@@ -39,8 +39,8 @@ void harddriv_state::hdsnd_init()
void harddriv_state::update_68k_interrupts()
{
- m_soundcpu->set_input_line(1, m_mainflag ? ASSERT_LINE : CLEAR_LINE);
- m_soundcpu->set_input_line(3, m_irq68k ? ASSERT_LINE : CLEAR_LINE);
+ if (m_soundcpu) m_soundcpu->set_input_line(1, m_mainflag ? ASSERT_LINE : CLEAR_LINE);
+ if (m_soundcpu) m_soundcpu->set_input_line(3, m_irq68k ? ASSERT_LINE : CLEAR_LINE);
}
@@ -82,8 +82,8 @@ WRITE16_MEMBER(harddriv_state::hd68k_snd_data_w)
WRITE16_MEMBER(harddriv_state::hd68k_snd_reset_w)
{
- m_soundcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
- m_soundcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ if (m_soundcpu) m_soundcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ if (m_soundcpu) m_soundcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
m_mainflag = m_soundflag = 0;
update_68k_interrupts();
logerror("%06X:Reset sound\n", space.device().safe_pcbase());
@@ -235,7 +235,7 @@ READ16_MEMBER(harddriv_state::hdsnd68k_320ports_r)
WRITE16_MEMBER(harddriv_state::hdsnd68k_320ports_w)
{
- m_sounddsp->space(AS_IO).write_word((offset & 7) << 1, data);
+ if (m_sounddsp) m_sounddsp->space(AS_IO).write_word((offset & 7) << 1, data);
}
diff --git a/src/mame/drivers/8080bw.c b/src/mame/drivers/8080bw.c
index 262741d7b4d..70bb3cffdc4 100644
--- a/src/mame/drivers/8080bw.c
+++ b/src/mame/drivers/8080bw.c
@@ -3361,6 +3361,22 @@ ROM_START( spaceat2 )
ROM_LOAD( "spaceatt.e", 0x1800, 0x0800, CRC(7cf6f604) SHA1(469557de15178c4b2d686e5724e1006f7c20d7a4) )
ROM_END
+ROM_START( galmonst )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "h.5m", 0x0000, 0x0400, CRC(8a0395e9) SHA1(f456aaa0301a1d0f3f9f45cbe39c5ff14909ecd3) )
+ ROM_LOAD( "g.5n", 0x0400, 0x0400, CRC(6183ed16) SHA1(8e0bc13cafa237daa5fdeda9a5d6df8f491eabc2) )
+ ROM_LOAD( "f.5p", 0x0800, 0x0400, CRC(b6047fdd) SHA1(bc324a9bf7829a2c2bb2bbf965d64272b0d07223) )
+ ROM_LOAD( "c.5t", 0x1400, 0x0400, CRC(e88e8c96) SHA1(43108ddb328914c68977c7c49b4c1f71073ca36b) )
+ ROM_LOAD( "b.5u", 0x1800, 0x0400, CRC(34678b80) SHA1(17f01facb3272c963a8bca290c4ca36411b8de31) )
+ ROM_LOAD( "a.5v", 0x1c00, 0x0400, CRC(05a6806b) SHA1(ea884110d0ea6463801cbc2f87ce9c4921b49e33) )
+ROM_END
+
+
+
+
+
+
+
ROM_START( spacecom )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "1f.ic67", 0x0000, 0x0400, BAD_DUMP CRC(703f2cbe) SHA1(b183f9fbedd8658399555c0ba21ecab6370e86cb) )
@@ -4680,6 +4696,7 @@ GAMEL(1979, cosmicm2, invaders, cosmicmo, cosmicmo, driver_device, 0, ROT270
GAMEL(1980?,sinvzen, invaders, invaders, sinvzen, driver_device, 0, ROT270, "Taito / Zenitone-Microsec Ltd.", "Super Invaders (Zenitone-Microsec)", GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
GAMEL(1980, ultrainv, invaders, invaders, sicv, driver_device, 0, ROT270, "Taito / Konami", "Ultra Invaders", GAME_SUPPORTS_SAVE, layout_invaders ) // unclassified, licensed or bootleg?
GAMEL(1978, spaceatt, invaders, invaders, sicv, driver_device, 0, ROT270, "bootleg (Video Games GmbH)", "Space Attack (bootleg of Space Invaders)", GAME_SUPPORTS_SAVE, layout_invaders )
+GAMEL(1978, galmonst, invaders, invaders, sicv, driver_device, 0, ROT270, "bootleg (Laguna S.A.)", "Galaxy Monsters (Laguna S.A. Spanish bootleg of Space Invaders)", GAME_SUPPORTS_SAVE, layout_invaders )
GAMEL(1980, spaceat2, invaders, invaders, spaceat2, driver_device, 0, ROT270, "bootleg (Video Games UK)", "Space Attack II (bootleg of Super Invaders)", GAME_SUPPORTS_SAVE, layout_invaders ) // bootleg of Zenitone-Microsec Super Invaders
GAMEL(1979, spacecom, invaders, spacecom, spacecom, _8080bw_state, spacecom, ROT270, "bootleg", "Space Combat (bootleg of Space Invaders)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE, layout_spacecom )
GAME( 1978, spacerng, invaders, spacerng, sitv, driver_device, 0, ROT90, "bootleg (Leisure Time Electronics)", "Space Ranger (bootleg of Space Invaders)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND ) // many modifications
diff --git a/src/mame/drivers/adp.c b/src/mame/drivers/adp.c
index cd1e660426e..7ed941ecb33 100644
--- a/src/mame/drivers/adp.c
+++ b/src/mame/drivers/adp.c
@@ -193,8 +193,25 @@ public:
DECLARE_PALETTE_INIT(fstation);
DECLARE_WRITE_LINE_MEMBER(duart_irq_handler);
//INTERRUPT_GEN_MEMBER(adp_int);
+ void skattva_nvram_init(nvram_device &nvram, void *base, size_t size);
};
+void adp_state::skattva_nvram_init(nvram_device &nvram, void *base, size_t size)
+{
+/*
+ 00F6FA: 4EB9 0001 A4B2 jsr $1a4b2.l
+ 00F700: 0CB8 2400 0018 E450 cmpi.l #$24000018, $e450.w
+ 00F708: 6606 bne $f710
+ 00F70A: 4EB9 0001 D7F4 jsr $1d7f4.l ; initializes the HD63484
+ 00F710: 11FC 0010 E8AD move.b #$10, $e8ad.w
+*/
+ UINT16 *ram = (UINT16 *)base;
+ ram[0x2450 >> 1] = 0x2400;
+ ram[0x2452 >> 1] = 0x0018;
+ ram[0x0000 >> 1] = 0x3141;
+ ram[0x0002 >> 1] = 0x5926;
+}
+
/***************************************************************************
@@ -277,6 +294,17 @@ static ADDRESS_MAP_START( skattv_mem, AS_PROGRAM, 16, adp_state )
AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("nvram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START( skattva_mem, AS_PROGRAM, 16, adp_state )
+ AM_RANGE(0x000000, 0x03ffff) AM_ROM
+ AM_RANGE(0x400000, 0x40001f) AM_DEVREADWRITE8("rtc",msm6242_device, read, write, 0x00ff)
+ AM_RANGE(0x800080, 0x800081) AM_DEVREADWRITE("h63484", h63484_device, status_r, address_w)
+ AM_RANGE(0x800082, 0x800083) AM_DEVREADWRITE("h63484", h63484_device, data_r, data_w)
+ AM_RANGE(0x800100, 0x800101) AM_READ_PORT("IN0")
+ AM_RANGE(0x800140, 0x800143) AM_DEVREADWRITE8("aysnd", ay8910_device, data_r, address_data_w, 0x00ff) //18b too
+ AM_RANGE(0x800180, 0x80019f) AM_DEVREADWRITE8("duart68681", mc68681_device, read, write, 0xff )
+ AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("nvram")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( quickjac_mem, AS_PROGRAM, 16, adp_state )
AM_RANGE(0x000000, 0x01ffff) AM_ROM
AM_RANGE(0x400000, 0x40001f) AM_DEVREADWRITE8("rtc",msm6242_device, read, write, 0x00ff)
@@ -313,7 +341,6 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( fstation_mem, AS_PROGRAM, 16, adp_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
- //400000-40001f?
AM_RANGE(0x800080, 0x800081) AM_DEVREADWRITE("h63484", h63484_device, status_r, address_w)
AM_RANGE(0x800082, 0x800083) AM_DEVREADWRITE("h63484", h63484_device, data_r, data_w)
AM_RANGE(0x800100, 0x800101) AM_READWRITE(input_r, input_w)
@@ -400,6 +427,28 @@ static INPUT_PORTS_START( skattv )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN1 )
INPUT_PORTS_END
+static INPUT_PORTS_START( skattva )
+ PORT_START("PA")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_HBLANK("screen")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0x9e, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON3 )
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON2 )
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_START1 )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
+
+ PORT_START("DSW1")
+ PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNKNOWN )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( fstation )
PORT_START("PA")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -527,6 +576,13 @@ static MACHINE_CONFIG_DERIVED( skattv, quickjac )
MCFG_CPU_PROGRAM_MAP(skattv_mem)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( skattva, quickjac )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(skattva_mem)
+
+ MCFG_NVRAM_REPLACE_CUSTOM_DRIVER("nvram", adp_state, skattva_nvram_init)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( backgamn, skattv )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(backgamn_mem)
@@ -664,7 +720,7 @@ ROM_END
GAME( 1990, backgamn, 0, backgamn, skattv, driver_device, 0, ROT0, "ADP", "Backgammon", GAME_NOT_WORKING )
GAME( 1993, quickjac, 0, quickjac, quickjac, driver_device, 0, ROT0, "ADP", "Quick Jack", GAME_NOT_WORKING )
GAME( 1994, skattv, 0, skattv, skattv, driver_device, 0, ROT0, "ADP", "Skat TV", GAME_NOT_WORKING )
-GAME( 1995, skattva, skattv, skattv, skattv, driver_device, 0, ROT0, "ADP", "Skat TV (version TS3)", GAME_NOT_WORKING )
+GAME( 1995, skattva, skattv, skattva, skattva, driver_device, 0, ROT0, "ADP", "Skat TV (version TS3)", GAME_NOT_WORKING )
GAME( 1997, fashiong, 0, fashiong, skattv, driver_device, 0, ROT0, "ADP", "Fashion Gambler (set 1)", GAME_NOT_WORKING )
GAME( 1997, fashiong2, fashiong, fashiong, skattv, driver_device, 0, ROT0, "ADP", "Fashion Gambler (set 2)", GAME_NOT_WORKING )
GAME( 1999, funlddlx, 0, funland, skattv, driver_device, 0, ROT0, "Stella", "Funny Land de Luxe", GAME_NOT_WORKING )
diff --git a/src/mame/drivers/atarig1.c b/src/mame/drivers/atarig1.c
index 6eb7775bae4..5c16f59afed 100644
--- a/src/mame/drivers/atarig1.c
+++ b/src/mame/drivers/atarig1.c
@@ -428,6 +428,8 @@ static MACHINE_CONFIG_START( atarig1, atarig1_state )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_MACHINE_START_OVERRIDE(atarig1_state,atarig1)
MCFG_MACHINE_RESET_OVERRIDE(atarig1_state,atarig1)
diff --git a/src/mame/drivers/atarisy1.c b/src/mame/drivers/atarisy1.c
index e86a64be198..6b9c7636357 100644
--- a/src/mame/drivers/atarisy1.c
+++ b/src/mame/drivers/atarisy1.c
@@ -713,6 +713,8 @@ static MACHINE_CONFIG_START( atarisy1, atarisy1_state )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
MCFG_CPU_PROGRAM_MAP(sound_map)
diff --git a/src/mame/drivers/atarisy2.c b/src/mame/drivers/atarisy2.c
index 9b42d5d8519..5a94bf0defb 100644
--- a/src/mame/drivers/atarisy2.c
+++ b/src/mame/drivers/atarisy2.c
@@ -126,7 +126,6 @@
#include "emu.h"
-#include "includes/slapstic.h"
#include "includes/atarisy2.h"
#include "sound/tms5220.h"
#include "sound/2151intf.h"
@@ -222,7 +221,7 @@ MACHINE_START_MEMBER(atarisy2_state,atarisy2)
MACHINE_RESET_MEMBER(atarisy2_state,atarisy2)
{
atarigen_state::machine_reset();
- slapstic_reset();
+ m_slapstic->slapstic_reset();
scanline_timer_reset(*m_screen, 64);
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(atarisy2_state::atarisy2_direct_handler), this));
@@ -1208,6 +1207,8 @@ static MACHINE_CONFIG_START( atarisy2, atarisy2_state )
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_DEVICE_PERIODIC_INT_DEVICE("soundcomm", atari_sound_comm_device, sound_irq_gen, (double)MASTER_CLOCK/2/16/16/16/10)
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_MACHINE_START_OVERRIDE(atarisy2_state,atarisy2)
MCFG_MACHINE_RESET_OVERRIDE(atarisy2_state,atarisy2)
@@ -3143,7 +3144,7 @@ DRIVER_INIT_MEMBER(atarisy2_state,paperboy)
int i;
UINT8 *cpu1 = memregion("maincpu")->base();
- slapstic_init(machine(), 105);
+ m_slapstic->slapstic_init(machine(), 105);
/* expand the 16k program ROMs into full 64k chunks */
for (i = 0x10000; i < 0x90000; i += 0x20000)
@@ -3164,7 +3165,7 @@ DRIVER_INIT_MEMBER(atarisy2_state,720)
/* without the default EEPROM, 720 hangs at startup due to communication
issues with the sound CPU; temporarily increasing the sound CPU frequency
to ~2.2MHz "fixes" the problem */
- slapstic_init(machine(), 107);
+ m_slapstic->slapstic_init(machine(), 107);
m_pedal_count = -1;
m_has_tms5220 = 1;
@@ -3177,7 +3178,7 @@ DRIVER_INIT_MEMBER(atarisy2_state,ssprint)
int i;
UINT8 *cpu1 = memregion("maincpu")->base();
- slapstic_init(machine(), 108);
+ m_slapstic->slapstic_init(machine(), 108);
/* expand the 32k program ROMs into full 64k chunks */
for (i = 0x10000; i < 0x90000; i += 0x20000)
@@ -3193,7 +3194,7 @@ DRIVER_INIT_MEMBER(atarisy2_state,csprint)
int i;
UINT8 *cpu1 = memregion("maincpu")->base();
- slapstic_init(machine(), 109);
+ m_slapstic->slapstic_init(machine(), 109);
/* expand the 32k program ROMs into full 64k chunks */
for (i = 0x10000; i < 0x90000; i += 0x20000)
@@ -3206,7 +3207,7 @@ DRIVER_INIT_MEMBER(atarisy2_state,csprint)
DRIVER_INIT_MEMBER(atarisy2_state,apb)
{
- slapstic_init(machine(), 110);
+ m_slapstic->slapstic_init(machine(), 110);
m_pedal_count = 2;
m_has_tms5220 = 1;
diff --git a/src/mame/drivers/atetris.c b/src/mame/drivers/atetris.c
index 6d51ace6ef9..4e39cf7ae9d 100644
--- a/src/mame/drivers/atetris.c
+++ b/src/mame/drivers/atetris.c
@@ -49,7 +49,6 @@
#include "emu.h"
#include "cpu/m6502/m6502.h"
-#include "includes/slapstic.h"
#include "includes/atetris.h"
#include "sound/sn76496.h"
#include "sound/pokey.h"
@@ -115,8 +114,8 @@ void atetris_state::machine_start()
void atetris_state::machine_reset()
{
/* reset the slapstic */
- slapstic_reset();
- m_current_bank = slapstic_bank() & 1;
+ m_slapstic_device->slapstic_reset();
+ m_current_bank = m_slapstic_device->slapstic_bank() & 1;
reset_bank();
/* start interrupts going (32V clocked by 16V) */
@@ -134,7 +133,7 @@ void atetris_state::machine_reset()
READ8_MEMBER(atetris_state::atetris_slapstic_r)
{
int result = m_slapstic_base[0x2000 + offset];
- int new_bank = slapstic_tweak(space, offset) & 1;
+ int new_bank = m_slapstic_device->slapstic_tweak(space, offset) & 1;
/* update for the new bank */
if (new_bank != m_current_bank)
@@ -308,6 +307,8 @@ static MACHINE_CONFIG_START( atetris, atetris_state )
MCFG_CPU_ADD("maincpu", M6502,MASTER_CLOCK/8)
MCFG_CPU_PROGRAM_MAP(main_map)
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_NVRAM_ADD_1FILL("nvram")
/* video hardware */
@@ -456,7 +457,7 @@ DRIVER_INIT_MEMBER(atetris_state,atetris)
{
UINT8 *rgn = memregion("maincpu")->base();
- slapstic_init(machine(), 101);
+ m_slapstic_device->slapstic_init(machine(), 101);
m_slapstic_source = &rgn[0x10000];
m_slapstic_base = &rgn[0x04000];
}
diff --git a/src/mame/drivers/bagman.c b/src/mame/drivers/bagman.c
index 20ae3877ca6..fb662795fe9 100644
--- a/src/mame/drivers/bagman.c
+++ b/src/mame/drivers/bagman.c
@@ -256,10 +256,18 @@ static INPUT_PORTS_START( pickin )
PORT_DIPSETTING( 0x00, DEF_STR( French ) )
INPUT_PORTS_END
-static INPUT_PORTS_START( botanic )
+static INPUT_PORTS_START( botanicf )
PORT_INCLUDE( bagman )
PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x03, "2" )
+ PORT_DIPSETTING( 0x02, "3" )
+ PORT_DIPSETTING( 0x01, "4" )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "1C/1C 1C/2C 1C/6C 1C/14C" )
+ PORT_DIPSETTING( 0x04, "2C/1C 1C/2C 1C/3C 1C/7C" )
PORT_DIPNAME( 0x08, 0x08, "Invulnerability Fruits" ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x08, "3" )
PORT_DIPSETTING( 0x00, DEF_STR( None ) )
@@ -268,6 +276,27 @@ static INPUT_PORTS_START( botanic )
PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
INPUT_PORTS_END
+static INPUT_PORTS_START( botanici )
+ PORT_INCLUDE( botanicf )
+
+ PORT_MODIFY("P2") // only seems to have 2 coin slots
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("DSW") // dipswitches are a bit messy on this set
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x00, "1C/1C 1C/2C" )
+ PORT_DIPSETTING( 0x04, "2C/1C 1C/2C" )
+ PORT_DIPNAME( 0x18, 0x18, "Invulnerability Fruits" ) PORT_DIPLOCATION("SW1:4,5")
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x08, "3" )
+ PORT_DIPSETTING( 0x10, "3 (duplicate 1)" )
+ PORT_DIPSETTING( 0x18, "3 (duplicate 2)" )
+ PORT_DIPNAME( 0x20, 0x20, "Language / Disable Invlunerability Fruits" ) PORT_DIPLOCATION("SW1:6") // changing this off, even in game, seems to remove all fruits you have?
+ PORT_DIPSETTING( 0x20, "Fruits On, English" )
+ PORT_DIPSETTING( 0x00, "Fruits Off, Spanish" )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( squaitsa )
PORT_START("P1")
@@ -834,8 +863,33 @@ ROM_START( pickin )
ROM_LOAD( "6331-1.3r", 0x0020, 0x0020, CRC(14ee1603) SHA1(f3c071399606b727ae7dd0bfc21e1c6ca2d43c7c) )
ROM_END
+
+
+
ROM_START( botanic )
ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "5.9e", 0x0000, 0x1000, CRC(907f01c7) SHA1(156b6b6bbc2176998fb0c18ad453fc42185ae490) )
+ ROM_LOAD( "06.9f", 0x1000, 0x1000, CRC(ff2533fb) SHA1(808a1555c16470b87fca0aea73e0291dbe0b9355) )
+ ROM_LOAD( "07.9j", 0x2000, 0x1000, CRC(b7c544ef) SHA1(75b5224c313e97c2c02ca7e9bc3f682278cb7a5c) )
+ ROM_LOAD( "08.9k", 0x3000, 0x1000, CRC(2df22793) SHA1(d1f27c915e7563abba4d14ec3fd6757a4d6137be) )
+ ROM_LOAD( "09.9m", 0x4000, 0x1000, CRC(f7d908ec) SHA1(ee5827f84505c1f37bebf48181d3e7759421fada) )
+ ROM_LOAD( "10.9n", 0x5000, 0x1000, CRC(7ce9fbc8) SHA1(cd2ba01470964640fad9ccf6ff23cbd76c0c2aeb) )
+
+ ROM_REGION( 0x2000, "gfx1", 0 )
+ ROM_LOAD( "2.1e", 0x0000, 0x1000, CRC(bea449a6) SHA1(fe06208996d15a4d50753fb62a3020063a0a6620) )
+ ROM_LOAD( "4.1j", 0x1000, 0x1000, CRC(a5deb8ed) SHA1(b6b38daffdda263a366656168a6d094ad2b1458f) )
+
+ ROM_REGION( 0x2000, "gfx2", 0 )
+ ROM_LOAD( "1.1c", 0x0000, 0x1000, CRC(a1148d89) SHA1(b1424693cebc410749216457d07bae54b903bc07) )
+ ROM_LOAD( "3.1f", 0x1000, 0x1000, CRC(70be5565) SHA1(a7eab667a82d3e7321f393073f29c6e5e865ec6b) )
+
+ ROM_REGION( 0x0040, "proms", 0 )
+ ROM_LOAD( "prom.3p", 0x0000, 0x0020, CRC(a8a2ddd2) SHA1(fc2da863d13e92f7682f393a08bc9357841ae7ea) )
+ ROM_LOAD( "prom.3r", 0x0020, 0x0020, CRC(edf88f34) SHA1(b9c342d51303d552f87df2543a34e38c30acd07c) )
+ROM_END
+
+ROM_START( botanicf )
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "bota_05.9e", 0x0000, 0x1000, CRC(cc66e6f8) SHA1(251481b16f8925a11f02f49e5a79f6524460aa6c) )
ROM_LOAD( "bota_06.9f", 0x1000, 0x1000, CRC(59892f41) SHA1(eb01601a9163679560b878366aaf7cc0fb54a3e9) )
ROM_LOAD( "bota_07.9j", 0x2000, 0x1000, CRC(b7c544ef) SHA1(75b5224c313e97c2c02ca7e9bc3f682278cb7a5c) )
@@ -934,6 +988,7 @@ GAME( 1984, sbagmans, sbagman, bagman, sbagman, driver_device, 0, ROT270,
GAME( 1983, pickin, 0, pickin, pickin, driver_device, 0, ROT270, "Valadon Automation", "Pickin'", 0 )
-GAME( 1984, botanic, 0, botanic, botanic, driver_device, 0, ROT270, "Itisa (Valadon Automation license)", "Botanic (French)", 0 ) // the game was made by Itisa, there is a Spanish original (not yet dumped)
+GAME( 1983, botanic, 0, botanic, botanici,driver_device, 0, ROT90, "Itisa", "Botanic (English / Spanish)", 0 )
+GAME( 1984, botanicf, botanic, botanic, botanicf,driver_device, 0, ROT270, "Itisa (Valadon Automation license)", "Botanic (French)", 0 )
GAME( 1984, squaitsa, 0, squaitsa,squaitsa, driver_device,0, ROT0, "Itisa", "Squash (Itisa)", 0 )
diff --git a/src/mame/drivers/beaminv.c b/src/mame/drivers/beaminv.c
index ed9e128ec01..e015621efaf 100644
--- a/src/mame/drivers/beaminv.c
+++ b/src/mame/drivers/beaminv.c
@@ -1,6 +1,6 @@
/***************************************************************************
- Tekunon Kougyou Beam Invader hardware
+ Tekunon Kougyou(Teknon Kogyo) Beam Invader hardware
driver by Zsolt Vasvari
@@ -385,5 +385,5 @@ ROM_END
*
*************************************/
-GAMEL( 1979, beaminv, 0, beaminv, beaminv, driver_device, 0, ROT270, "Tekunon Kougyou", "Beam Invader", GAME_NO_SOUND | GAME_SUPPORTS_SAVE, layout_beaminv )
+GAMEL( 1979, beaminv, 0, beaminv, beaminv, driver_device, 0, ROT270, "Teknon Kogyo", "Beam Invader", GAME_NO_SOUND | GAME_SUPPORTS_SAVE, layout_beaminv )
GAMEL( 1979, pacominv, beaminv, beaminv, pacominv, driver_device, 0, ROT270, "Pacom Corporation", "Pacom Invader", GAME_NO_SOUND | GAME_SUPPORTS_SAVE, layout_beaminv )
diff --git a/src/mame/drivers/calchase.c b/src/mame/drivers/calchase.c
index 5672fd5eca5..4b5f0256bf2 100644
--- a/src/mame/drivers/calchase.c
+++ b/src/mame/drivers/calchase.c
@@ -121,12 +121,13 @@ something wrong in the disk geometry reported by calchase.chd (20,255,63) since
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
#include "video/pc_vga.h"
#include "sound/dac.h"
#include "machine/pcshare.h"
+#include "machine/ds128x.h"
#include "bus/isa/trident.h"
@@ -661,6 +662,11 @@ static MACHINE_CONFIG_START( calchase, calchase_state )
/* video hardware */
MCFG_FRAGMENT_ADD( pcvideo_trident_vga )
+ MCFG_DEVICE_REMOVE("rtc")
+ MCFG_DS12885_ADD("rtc")
+ MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir0_w))
+ MCFG_MC146818_CENTURY_INDEX(0x32)
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker")
MCFG_DAC_ADD("dac_l")
diff --git a/src/mame/drivers/cclimber.c b/src/mame/drivers/cclimber.c
index d05a2babcf9..fbabbf700f0 100644
--- a/src/mame/drivers/cclimber.c
+++ b/src/mame/drivers/cclimber.c
@@ -1788,6 +1788,37 @@ ROM_START( dking )
ROM_END
+ROM_START( ckongdks )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "ck13.bin", 0x0800, 0x0800, CRC(f97ba8ae) SHA1(ae4a578ad77a8d3252f2f99a1afa6f38bc00471e) ) // 97.509766%
+ ROM_CONTINUE( 0x0000, 0x0800 )
+ ROM_LOAD( "ck09.bin", 0x1000, 0x1000, CRC(fe89dea4) SHA1(c39372ebe9950808ebc1ff7909c291496b206026) )
+ ROM_LOAD( "ck11.bin", 0x2000, 0x1000, CRC(b3947d06) SHA1(1c5e66e1f11313e11de760cda406c1fe237ce09a) ) // 99.975586%
+ ROM_LOAD( "ck12.bin", 0x3000, 0x1000, CRC(23d0657d) SHA1(dfebf3902186a3ab3b36c6d07bdbc832885347b4) ) // 95.214844%
+ ROM_LOAD( "ck10.bin", 0x4800, 0x0800, CRC(c27a13f1) SHA1(14f11976bc0e643829a4d4d2d5bb27971979be6f) ) // 94.921875%
+ ROM_CONTINUE( 0x4000, 0x0800 )
+
+ ROM_REGION( 0x4000, "gfx1", 0 )
+ ROM_LOAD( "ck06.bin", 0x0000, 0x1000, CRC(a8916dc8) SHA1(472520aae3837e6026f2a7577d3b2aff371a316c) )
+ ROM_LOAD( "ck05.bin", 0x1000, 0x1000, CRC(cd3b5dde) SHA1(2319a2be04d70989b01f4fc703756ba6e1c1f388) )
+ ROM_LOAD( "ck04.bin", 0x2000, 0x1000, CRC(b62a0367) SHA1(8c285cbc714d7e6589bd63b3cef7c841ed1c2a4e) )
+ ROM_LOAD( "ck03.bin", 0x3000, 0x1000, CRC(61122c5e) SHA1(978b6dbec35f3adc651fddf332db17625099a92e) )
+
+ ROM_REGION( 0x1000, "gfx2", 0 )
+ ROM_LOAD( "ck02.bin", 0x0000, 0x0800, CRC(085b5f90) SHA1(cce771fbd76c2bc7749325d71c95810898e5b0d9) ) // 98.730469%
+ ROM_LOAD( "ck01.bin", 0x0800, 0x0800, CRC(16fd47e2) SHA1(43e5ea70e99482db90681e401a7e1e2d2d36b6f4) ) // 98.339844%
+
+ ROM_REGION( 0x0160, "proms", 0 ) // not dumped, assuming to be the same as dking
+ ROM_LOAD( "ck6v.bin", 0x0000, 0x0020, CRC(751c3325) SHA1(edce2bc883996c1d72dc6c1c9f62799b162d415a) ) // 82s123.1v
+ ROM_LOAD( "ck6u.bin", 0x0020, 0x0020, CRC(ab1940fa) SHA1(8d98e05cbaa6f55770c12e0a9a8ed9c73cc54423) ) // 82s123.1u
+ ROM_LOAD( "ck6t.bin", 0x0040, 0x0020, CRC(b4e827a5) SHA1(31a5a5ad54417a474d22bb16c473415d99a2b6f1) ) // 82s123.1t
+ ROM_LOAD( "82s129.5g", 0x0060, 0x0100, CRC(9e11550d) SHA1(b8cba8e16e10e23fba1f11551102ab77b680bdf0) ) // Decryption Table?
+
+ ROM_REGION( 0x2000, "samples", 0 ) /* samples */
+ ROM_LOAD( "ck08.bin", 0x0000, 0x1000, CRC(31c0a7de) SHA1(ace23fde4cb3c336b8377c1a1e940607d545e8c3) ) // 97.241211%
+ ROM_LOAD( "ck07.bin", 0x1000, 0x1000, CRC(9003ffbd) SHA1(fd016056aabc23957643f37230f03842294f795e) )
+ROM_END
+
/* This set came from a 'Silver Land' board with Silver Land GFX roms, however, the program roms are nearly
the same as River Patrol but appear to have an original ORCA copyright
@@ -2363,7 +2394,8 @@ GAME( 1980, cclimbroper, cclimber, cclimber, cclimber, driver_device, 0,
GAME( 1981, ckong, 0, cclimber, ckong, driver_device, 0, ROT270, "Kyoei / Falcon", "Crazy Kong", 0 ) // on a Falcon FCK-01 PCB, but doesn't display any Falcon copyright
GAME( 1981, ckongalc, ckong, cclimber, ckong, driver_device, 0, ROT270, "bootleg (Alca)", "Crazy Kong (Alca bootleg)", 0 )
GAME( 1981, monkeyd, ckong, cclimber, ckong, driver_device, 0, ROT270, "bootleg", "Monkey Donkey", 0 )
-GAME( 1981, dking, ckong , cclimber, ckong, cclimber_state, dking, ROT270, "bootleg", "Donkey King", 0 )
+GAME( 1981, dking, ckong, cclimber, ckong, cclimber_state, dking, ROT270, "bootleg", "Donkey King", 0 )
+GAME( 1981, ckongdks, ckong, cclimber, ckong, cclimber_state, dking, ROT270, "bootleg", "Donkey Kong (Spanish Crazy Kong bootleg)", 0 )
/* 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
diff --git a/src/mame/drivers/chihiro.c b/src/mame/drivers/chihiro.c
index 09513f3e383..b59273997ba 100644
--- a/src/mame/drivers/chihiro.c
+++ b/src/mame/drivers/chihiro.c
@@ -358,7 +358,7 @@ Thanks to Alex, Mr Mudkips, and Philip Burke for this info.
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pic8259.h"
#include "machine/pit8253.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/cobra.c b/src/mame/drivers/cobra.c
index 2dc25d4bc10..f6ec50c7432 100644
--- a/src/mame/drivers/cobra.c
+++ b/src/mame/drivers/cobra.c
@@ -313,7 +313,7 @@
#include "emu.h"
#include "cpu/powerpc/ppc.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/ataintf.h"
#include "machine/idehd.h"
#include "machine/jvshost.h"
diff --git a/src/mame/drivers/coolridr.c b/src/mame/drivers/coolridr.c
index 52a400c8eb1..98ed5b45bd0 100644
--- a/src/mame/drivers/coolridr.c
+++ b/src/mame/drivers/coolridr.c
@@ -18,17 +18,20 @@
- i8237 purpose is unknown (missing ROM for comms?).
- verify zooming etc. our current algorithm is a bit ugly for text
-
+ Also known to exist on this hardware is Aqua Stage (Coin pusher):
+ 833-12000 AQUA STAGE
+ Program roms EPR-18279 through EPR-18282
+ 12 MASK roms (MPR numbers unknown)
+ SUB CPU program rom EPR-18278
=======================================================================================================
Cool Riders
Sega 1994
-This game runs on SYSTEM-H1 hardware. Only one known game exists on this
-PCB and this is it. The hardware seems overly complex for a 2D bike
-racing game? The design of the PCB is very similar to vanilla Model 2
-(i.e. Daytona etc). However instead of fully custom-badged chips,
-many of the custom chips are off-the-shelf Hitachi/Toshiba gate-arrays.
+This game runs on SYSTEM-H1 hardware. The hardware seems overly complex for a
+2D bike racing game? The design of the PCB is very similar to vanilla Model 2
+(i.e. Daytona etc). However instead of fully custom-badged chips, many of the
+custom chips are off-the-shelf Hitachi/Toshiba gate-arrays.
PCB Layouts
diff --git a/src/mame/drivers/cps1.c b/src/mame/drivers/cps1.c
index f8af1c4c607..1bd2918c13c 100644
--- a/src/mame/drivers/cps1.c
+++ b/src/mame/drivers/cps1.c
@@ -4002,7 +4002,7 @@ ROM_START( striderjr )
ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "sth63b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "sth63b.1a", 0x0000, 0x0117, BAD_DUMP CRC(c706b773) SHA1(ddfe2e747637eec081a5125cfefcb478a4ba9e76) ) /* Handcrafted but works on actual PCB. Redump needed */
ROM_LOAD( "iob1.12d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_LOAD( "bprg1.11d", 0x0000, 0x0117, CRC(31793da7) SHA1(400fa7ac517421c978c1ee7773c30b9ed0c5d3f3) )
@@ -4483,7 +4483,7 @@ ROM_START( area88r )
ROM_LOAD( "sou1", 0x0000, 0x0117, CRC(84f4b2fe) SHA1(dcc9e86cc36316fe42eace02d6df75d08bc8bb6d) )
ROM_REGION( 0x0200, "bboardplds", 0 )
- ROM_LOAD( "ara63b.1a", 0x0000, 0x0117, NO_DUMP )
+ ROM_LOAD( "ara63b.1a", 0x0000, 0x0117, BAD_DUMP CRC(f5569c93) SHA1(7db7cf23639036590eef1e5e309f08560859efaf) ) /* Handcrafted but works on actual PCB. Redump needed */
ROM_LOAD( "iob1.12d", 0x0000, 0x0117, CRC(3abc0700) SHA1(973043aa46ec6d5d1db20dc9d5937005a0f9f6ae) )
ROM_LOAD( "bprg1.11d", 0x0000, 0x0117, CRC(31793da7) SHA1(400fa7ac517421c978c1ee7773c30b9ed0c5d3f3) )
diff --git a/src/mame/drivers/cv1k.c b/src/mame/drivers/cv1k.c
index 5177b9ecf83..5b09619e1a9 100644
--- a/src/mame/drivers/cv1k.c
+++ b/src/mame/drivers/cv1k.c
@@ -514,7 +514,6 @@ ROM_START( mushisama )
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
-// ROM_LOAD("mushisama_u2", 0x000000, 0x8400000, CRC(f1e0cf65) SHA1(d00d950422309fdf08efe1e2d5f040beb45ee6fb) ) // bad rom, one corrupt asset vs. below
ROM_LOAD("mushisam_u2", 0x000000, 0x8400000, CRC(4f0a842a) SHA1(33f3550ec676a7088b6348cd72c16cc6594afb84) ) /* (2004/10/12.MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
@@ -528,7 +527,6 @@ ROM_START( mushisamb )
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
-// ROM_LOAD("mushisamb_u2", 0x000000, 0x8400000, CRC(6cc9d1a9) SHA1(17907798dce1defadd10354cec6c8d364e045570) ) // bad rom, one corrupt asset vs. below
ROM_LOAD("mushisam_u2", 0x000000, 0x8400000, CRC(4f0a842a) SHA1(33f3550ec676a7088b6348cd72c16cc6594afb84) ) /* (2004/10/12.MASTER VER.) */
ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
@@ -616,7 +614,20 @@ ROM_START( futari10 )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(c631a766) SHA1(8bb6934a2f5b8a9841c3dcf85192b1743773dd8b) )
ROM_END
-ROM_START( futaribl )
+ROM_START( futaribl ) /* Title screen shows (c) 2007 despite the 2009 "master" date - Also prints "Another Ver" to the title screen */
+ ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD16_WORD_SWAP( "futaribli_u4", 0x000000, 0x200000, CRC(1971dd16) SHA1(e75993f2978cbaaf925b4b8bb33d094a5a7cebf0) )
+ ROM_RELOAD(0x200000,0x200000)
+
+ ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
+ ROM_LOAD( "futariblk_u2", 0x000000, 0x8400000, CRC(08c6fd62) SHA1(e1fc386b2b0e41906c724287cbf82304297e0150) )
+
+ ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
+ ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) )
+ ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(c631a766) SHA1(8bb6934a2f5b8a9841c3dcf85192b1743773dd8b) )
+ROM_END
+
+ROM_START( futariblj )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "futariblk_u4", 0x000000, 0x200000, CRC(6db13c62) SHA1(6a53ce7f70b754936ccbb3a4674d4b2f03979644) ) /* (2007/12/11 BLACK LABEL VER) */
ROM_RELOAD(0x200000,0x200000)
@@ -844,50 +855,51 @@ DRIVER_INIT_MEMBER(cv1k_state,espgal2)
// The black label versions are intentionally not set as clones, they were re-releases with different game codes, not bugfixes.
// CA011 Mushihime-Sama
-GAME( 2004, mushisam, 0, cv1k, cv1k, cv1k_state, mushisama, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12.MASTER VER.)", 0 )
-GAME( 2004, mushisama, mushisam, cv1k, cv1k, cv1k_state, mushisam, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12 MASTER VER.)", 0 )
-GAME( 2004, mushisamb, mushisam, cv1k, cv1k, cv1k_state, mushisama, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12 MASTER VER)", 0 )
+GAME( 2004, mushisam, 0, cv1k, cv1k, cv1k_state, mushisama, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12.MASTER VER.)", 0 )
+GAME( 2004, mushisama, mushisam, cv1k, cv1k, cv1k_state, mushisam, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12 MASTER VER.)", 0 )
+GAME( 2004, mushisamb, mushisam, cv1k, cv1k, cv1k_state, mushisama, ROT270, "Cave (AMI license)", "Mushihime-Sama (2004/10/12 MASTER VER)", 0 )
// CA012 Ibara
-GAME( 2005, ibara, 0, cv1k, cv1k, cv1k_state, mushisam, ROT270, "Cave (AMI license)", "Ibara (2005/03/22 MASTER VER..)", 0 )
+GAME( 2005, ibara, 0, cv1k, cv1k, cv1k_state, mushisam, ROT270, "Cave (AMI license)", "Ibara (2005/03/22 MASTER VER..)", 0 )
// CA012B Ibara Kuro Black Label
-GAME( 2006, ibarablk, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Ibara Kuro Black Label (2006/02/06. MASTER VER.)", 0 )
-GAME( 2006, ibarablka, ibarablk, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Ibara Kuro Black Label (2006/02/06 MASTER VER.)", 0 )
+GAME( 2006, ibarablk, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Ibara Kuro Black Label (2006/02/06. MASTER VER.)", 0 )
+GAME( 2006, ibarablka, ibarablk, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Ibara Kuro Black Label (2006/02/06 MASTER VER.)", 0 )
// CA013 Espgaluda II
-GAME( 2005, espgal2, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Espgaluda II (2005/11/14 MASTER VER)", 0 )
+GAME( 2005, espgal2, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Espgaluda II (2005/11/14 MASTER VER)", 0 )
// CA??? Puzzle! Mushihime-Tama
-GAME( 2005, mushitam, 0, cv1k, cv1k, cv1k_state, mushisam, ROT0, "Cave (AMI license)", "Puzzle! Mushihime-Tama (2005/09/09.MASTER VER)", 0 )
-GAME( 2005, mushitama, mushitam, cv1k, cv1k, cv1k_state, mushisam, ROT0, "Cave (AMI license)", "Puzzle! Mushihime-Tama (2005/09/09 MASTER VER)", 0 )
+GAME( 2005, mushitam, 0, cv1k, cv1k, cv1k_state, mushisam, ROT0, "Cave (AMI license)", "Puzzle! Mushihime-Tama (2005/09/09.MASTER VER)", 0 )
+GAME( 2005, mushitama, mushitam, cv1k, cv1k, cv1k_state, mushisam, ROT0, "Cave (AMI license)", "Puzzle! Mushihime-Tama (2005/09/09 MASTER VER)", 0 )
// CA014 Pink Sweets: Ibara Sorekara
-GAME( 2006, pinkswts, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....)", 0 )
-GAME( 2006, pinkswtsa, pinkswts, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...)", 0 )
-GAME( 2006, pinkswtsb, pinkswts, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.)", 0 )
-GAME( 2006, pinkswtsx, pinkswts, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.)", 0 ) // defaults to freeplay, possibly bootlegged from show/dev version?
+GAME( 2006, pinkswts, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER....)", 0 )
+GAME( 2006, pinkswtsa, pinkswts, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER...)", 0 )
+GAME( 2006, pinkswtsb, pinkswts, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/04/06 MASTER VER.)", 0 )
+GAME( 2006, pinkswtsx, pinkswts, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Pink Sweets: Ibara Sorekara (2006/xx/xx MASTER VER.)", 0 ) // defaults to freeplay, possibly bootlegged from show/dev version?
// CA015 Mushihime-Sama Futari
-GAME( 2006, futari15, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.5 (2006/12/8.MASTER VER. 1.54.)", 0 )
-GAME( 2006, futari15a, futari15, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54)", 0 )
-GAME( 2006, futari10, futari15, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.0 (2006/10/23 MASTER VER.)", 0 )
+GAME( 2006, futari15, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.5 (2006/12/8.MASTER VER. 1.54.)", 0 )
+GAME( 2006, futari15a, futari15, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.5 (2006/12/8 MASTER VER 1.54)", 0 )
+GAME( 2006, futari10, futari15, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Ver 1.0 (2006/10/23 MASTER VER.)", 0 )
// CA016 Muchi Muchi Pork!
-GAME( 2007, mmpork, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Muchi Muchi Pork! (2007/ 4/17 MASTER VER.)", 0 )
+GAME( 2007, mmpork, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Muchi Muchi Pork! (2007/ 4/17 MASTER VER.)", 0 )
// CA015B Mushihime-Sama Futari Black Label
-GAME( 2007, futaribl, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER)", 0 )
+GAME( 2007, futaribl, 0, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Black Label (2009/11/27 INTERNATIONAL BL)", 0 )
+GAME( 2007, futariblj, futaribl, cv1k, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "Mushihime-Sama Futari Black Label (2007/12/11 BLACK LABEL VER)", 0 )
// CA017 Deathsmiles
-GAME( 2007, deathsml, 0, cv1k, cv1k, cv1k_state, espgal2, ROT0, "Cave (AMI license)", "Deathsmiles (2007/10/09 MASTER VER)", 0 )
+GAME( 2007, deathsml, 0, cv1k, cv1k, cv1k_state, espgal2, ROT0, "Cave (AMI license)", "Deathsmiles (2007/10/09 MASTER VER)", 0 )
// CA017B Deathsmiles Black Label
-GAME( 2008, dsmbl, 0, cv1k_d, cv1k, cv1k_state, espgal2, ROT0, "Cave (AMI license)", "Deathsmiles MegaBlack Label (2008/10/06 MEGABLACK LABEL VER)", 0 )
+GAME( 2008, dsmbl, 0, cv1k_d, cv1k, cv1k_state, espgal2, ROT0, "Cave (AMI license)", "Deathsmiles MegaBlack Label (2008/10/06 MEGABLACK LABEL VER)", 0 )
// CA019 Do-Don-Pachi Dai-Fukkatsu
-GAME( 2008, ddpdfk, 0, cv1k_d, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5)", 0 )
-GAME( 2008, ddpdfk10, ddpdfk, cv1k_d, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER)", 0 )
+GAME( 2008, ddpdfk, 0, cv1k_d, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Ver 1.5 (2008/06/23 MASTER VER 1.5)", 0 )
+GAME( 2008, ddpdfk10, ddpdfk, cv1k_d, cv1k, cv1k_state, espgal2, ROT270, "Cave (AMI license)", "DoDonPachi Dai-Fukkatsu Ver 1.0 (2008/05/16 MASTER VER)", 0 )
// CMDL01 Medal Mahjong Moukari Bancho
-GAME( 2007, mmmbanc, 0, cv1k, cv1k, cv1k_state, espgal2, ROT0, "Cave (AMI license)", "Medal Mahjong Moukari Bancho (2007/06/05 MASTER VER.)", GAME_NOT_WORKING )
+GAME( 2007, mmmbanc, 0, cv1k, cv1k, cv1k_state, espgal2, ROT0, "Cave (AMI license)", "Medal Mahjong Moukari Bancho (2007/06/05 MASTER VER.)", GAME_NOT_WORKING )
diff --git a/src/mame/drivers/cyberbal.c b/src/mame/drivers/cyberbal.c
index e595b7a7461..138bdb6d9b6 100644
--- a/src/mame/drivers/cyberbal.c
+++ b/src/mame/drivers/cyberbal.c
@@ -389,6 +389,8 @@ static MACHINE_CONFIG_START( cyberbal, cyberbal_state )
MCFG_CPU_ADD("maincpu", M68000, ATARI_CLOCK_14MHz/2)
MCFG_CPU_PROGRAM_MAP(main_map)
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_DEVICE_PERIODIC_INT_DEVICE("soundcomm", atari_sound_comm_device, sound_irq_gen, (double)ATARI_CLOCK_14MHz/4/4/16/16/14)
diff --git a/src/mame/drivers/fruitpc.c b/src/mame/drivers/fruitpc.c
index c326897f676..69e0e84dc0c 100644
--- a/src/mame/drivers/fruitpc.c
+++ b/src/mame/drivers/fruitpc.c
@@ -13,7 +13,7 @@
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
#include "video/pc_vga.h"
diff --git a/src/mame/drivers/funkball.c b/src/mame/drivers/funkball.c
index 0e0530077dd..d96872f921c 100644
--- a/src/mame/drivers/funkball.c
+++ b/src/mame/drivers/funkball.c
@@ -71,7 +71,7 @@ Notes:
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
#include "video/voodoo.h"
diff --git a/src/mame/drivers/funworld.c b/src/mame/drivers/funworld.c
index 569fcfe1d22..f27c3e12cfb 100644
--- a/src/mame/drivers/funworld.c
+++ b/src/mame/drivers/funworld.c
@@ -6352,8 +6352,9 @@ DRIVER_INIT_MEMBER(funworld_state, rcdino4)
}
j = 1;
+ i = 0x81;
- for (i = 0x81; i < (0x81 + ARRAY_LENGTH(rcdino4_keys80));)
+ do
{
UINT8 key;
@@ -6418,9 +6419,14 @@ DRIVER_INIT_MEMBER(funworld_state, rcdino4)
while (j < 0x100);
j &= 0xff;
- do {
- assert((i+1 - 0x81) >= 0 && (i+1 - 0x81) < ARRAY_LENGTH(rcdino4_keys80));
- } while (!rcdino4_keys80[++i - 0x81]);
+
+ do {} while (((++i - 0x81) < ARRAY_LENGTH(rcdino4_keys80))
+ && !rcdino4_keys80[i - 0x81]);
+
+ if ((i - 0x81) == ARRAY_LENGTH(rcdino4_keys80))
+ {
+ break;
+ }
if ((i == 0xa4)
|| (i == 0xb0)
@@ -6430,6 +6436,7 @@ DRIVER_INIT_MEMBER(funworld_state, rcdino4)
j = 0; /* re-align offset after skipping some pages */
}
}
+ while (1);
}
DRIVER_INIT_MEMBER(funworld_state, rcdinch)
diff --git a/src/mame/drivers/galaxian.c b/src/mame/drivers/galaxian.c
index 1076c031eeb..db91e8e579c 100644
--- a/src/mame/drivers/galaxian.c
+++ b/src/mame/drivers/galaxian.c
@@ -10798,7 +10798,7 @@ GAME( 198?, kong, 0, mooncrst, kong, galaxian_state, kong,
GAME( 198?, fantastc, 0, fantastc, fantastc, galaxian_state, fantastc, ROT90, "Taito do Brasil", "Fantastic (Galaga conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE ) // rewrite of Galaga (!) not a clone
/* like fantastc, plus larger spriteram, and maybe different bullet hw(?) */
-GAME( 198?, timefgtr, 0, timefgtr, timefgtr, galaxian_state, timefgtr, ROT90, "Taito do Brasil", "Time Fighter (Time Pilot conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE | GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // rewrite of Time Pilot (!) not a clone
+GAME( 198?, timefgtr, 0, timefgtr, timefgtr, galaxian_state, timefgtr, ROT90, "Taito do Brasil", "Time Fighter (Time Pilot conversion on Galaxian hardware)", GAME_SUPPORTS_SAVE | GAME_WRONG_COLORS ) // rewrite of Time Pilot (!) not a clone
/* extra ROMs, protection, and sound hardware replaced with AY8910 */
GAME( 1981, jumpbug, 0, jumpbug, jumpbug, galaxian_state, jumpbug, ROT90, "Hoei (Rock-Ola license)", "Jump Bug", GAME_SUPPORTS_SAVE ) // or by Alpha Denshi Co. under contract from Hoei?
diff --git a/src/mame/drivers/gamecstl.c b/src/mame/drivers/gamecstl.c
index 362fcd82f89..06408abc5a0 100644
--- a/src/mame/drivers/gamecstl.c
+++ b/src/mame/drivers/gamecstl.c
@@ -64,7 +64,7 @@
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/gammagic.c b/src/mame/drivers/gammagic.c
index 13148732ac6..d9a320d5926 100644
--- a/src/mame/drivers/gammagic.c
+++ b/src/mame/drivers/gammagic.c
@@ -32,7 +32,7 @@ Additional CD-ROM games: "99 Bottles of Beer"
#include "machine/cr589.h"
//#include "machine/i82371sb.h"
//#include "machine/i82439tx.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "video/pc_vga.h"
diff --git a/src/mame/drivers/gauntlet.c b/src/mame/drivers/gauntlet.c
index b80b0dd5cd0..ef8253a71d5 100644
--- a/src/mame/drivers/gauntlet.c
+++ b/src/mame/drivers/gauntlet.c
@@ -499,6 +499,8 @@ static MACHINE_CONFIG_START( gauntlet, gauntlet_state )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_CPU_ADD("audiocpu", M6502, ATARI_CLOCK_14MHz/8)
MCFG_CPU_PROGRAM_MAP(sound_map)
diff --git a/src/mame/drivers/harddriv.c b/src/mame/drivers/harddriv.c
index 09eeb04e65a..bba37a26373 100644
--- a/src/mame/drivers/harddriv.c
+++ b/src/mame/drivers/harddriv.c
@@ -330,6 +330,7 @@ Notes:
#include "includes/slapstic.h"
#include "includes/harddriv.h"
+#include "racedrivpan.lh"
/*************************************
*
@@ -337,6 +338,195 @@ Notes:
*
*************************************/
+const device_type HARDDRIV_DEVICE = &device_creator<harddriv_state>;
+
+harddriv_state::harddriv_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, HARDDRIV_DEVICE, "Hard Drivin' PCB Family", tag, owner, clock, "harddriv_pcb", __FILE__),
+/* device_video_interface(mconfig, *this, false), */
+ m_maincpu(*this, "maincpu"),
+ m_gsp(*this, "gsp"),
+ m_msp(*this, "msp"),
+ m_adsp(*this, "adsp"),
+ m_soundcpu(*this, "soundcpu"),
+ m_sounddsp(*this, "sounddsp"),
+ m_jsacpu(*this, "jsacpu"),
+ m_dsp32(*this, "dsp32"),
+ m_ds3sdsp(*this, "ds3sdsp"),
+ m_ds3xdsp(*this, "ds3xdsp"),
+ m_ds3dac1(*this, "ds3dac1"),
+ m_ds3dac2(*this, "ds3dac2"),
+ m_jsa(*this, "jsa"),
+ m_hd34010_host_access(0),
+ m_dsk_pio_access(0),
+ m_msp_ram(*this, "msp_ram"),
+ m_dsk_ram(0),
+ m_dsk_rom(0),
+ m_dsk_10c(*this, "dsk_10c"),
+ m_dsk_30c(*this, "dsk_30c"),
+ m_m68k_slapstic_base(0),
+ m_m68k_sloop_alt_base(0),
+ m_200e(*this, "200e"),
+ m_210e(*this, "210e"),
+ m_adsp_data_memory(*this, "adsp_data"),
+ m_adsp_pgm_memory(*this, "adsp_pgm_memory"),
+ m_ds3sdsp_data_memory(*this, "ds3sdsp_data"),
+ m_ds3sdsp_pgm_memory(*this, "ds3sdsp_pgm"),
+ m_ds3xdsp_pgm_memory(*this, "ds3xdsp_pgm"),
+ m_gsp_protection(0),
+ m_gsp_speedup_pc(0),
+ m_msp_speedup_addr(0),
+ m_msp_speedup_pc(0),
+ m_ds3_speedup_addr(0),
+ m_ds3_speedup_pc(0),
+ m_ds3_transfer_pc(0),
+ m_sounddsp_ram(*this, "sounddsp_ram"),
+ m_gsp_multisync(0),
+ m_gsp_vram(*this, "gsp_vram", 16),
+ m_gsp_control_lo(*this, "gsp_control_lo"),
+ m_gsp_control_hi(*this, "gsp_control_hi"),
+ m_gsp_paletteram_lo(*this, "gsp_palram_lo"),
+ m_gsp_paletteram_hi(*this, "gsp_palram_hi"),
+ m_irq_state(0),
+ m_gsp_irq_state(0),
+ m_msp_irq_state(0),
+ m_adsp_irq_state(0),
+ m_ds3sdsp_irq_state(0),
+ m_duart_irq_state(0),
+ m_last_gsp_shiftreg(0),
+ m_m68k_zp1(0),
+ m_m68k_zp2(0),
+ m_m68k_adsp_buffer_bank(0),
+ m_adsp_halt(0),
+ m_adsp_br(0),
+ m_adsp_xflag(0),
+ m_adsp_sim_address(0),
+ m_adsp_som_address(0),
+ m_adsp_eprom_base(0),
+ m_sim_memory(0),
+ m_sim_memory_size(0),
+ m_adsp_pgm_memory_word(0),
+ m_ds3_sdata_memory(0),
+ m_ds3_sdata_memory_size(0),
+ m_ds3_gcmd(0),
+ m_ds3_gflag(0),
+ m_ds3_g68irqs(0),
+ m_ds3_gfirqs(0),
+ m_ds3_g68flag(0),
+ m_ds3_send(0),
+ m_ds3_reset(0),
+ m_ds3_gdata(0),
+ m_ds3_g68data(0),
+ m_ds3_sim_address(0),
+ m_ds3_scmd(0),
+ m_ds3_sflag(0),
+ m_ds3_s68irqs(0),
+ m_ds3_sfirqs(0),
+ m_ds3_s68flag(0),
+ m_ds3_sreset(0),
+ m_ds3_sdata(0),
+ m_ds3_s68data(0),
+ m_ds3_sdata_address(0),
+ m_ds3sdsp_timer_en(0),
+ m_ds3sdsp_sdata(0),
+ m_ds3sdsp_internal_timer(*this, "ds3sdsp_timer"),
+ m_ds3xdsp_timer_en(0),
+ m_ds3xdsp_sdata(0),
+ m_ds3xdsp_internal_timer(*this, "ds3xdsp_timer"),
+ m_adc_control(0),
+ m_adc8_select(0),
+ m_adc8_data(0),
+ m_adc12_select(0),
+ m_adc12_byte(0),
+ m_adc12_data(0),
+ m_hdc68k_last_wheel(0),
+ m_hdc68k_last_port1(0),
+ m_hdc68k_wheel_edge(0),
+ m_hdc68k_shifter_state(0),
+ m_st68k_sloop_bank(0),
+ m_st68k_last_alt_sloop_offset(0),
+ m_next_msp_sync(0),
+ m_soundflag(0),
+ m_mainflag(0),
+ m_sounddata(0),
+ m_maindata(0),
+ m_dacmute(0),
+ m_cramen(0),
+ m_irq68k(0),
+ m_sound_rom_offs(0),
+ m_rombase(0),
+ m_romsize(0),
+ m_last_bio_cycles(0),
+ m_vram_mask(0),
+ m_shiftreg_enable(0),
+ m_gsp_shiftreg_source(0),
+ m_gfx_finescroll(0),
+ m_gfx_palettebank(0),
+ m_dac(*this, "dac"),
+ m_duart(*this, "duartn68681"),
+ m_asic65(*this, "asic65"),
+ m_palette(*this, "palette"),
+ m_slapstic_device(*this, "slapstic")
+{
+ int i;
+
+ for (i = 0; i < 2; i++)
+ {
+ m_gsp_speedup_addr[i] = 0;
+ m_rddsp32_sync[i] = 0;
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ m_gsp_speedup_count[i] = 0;
+ m_msp_speedup_count[i] = 0;
+ m_adsp_speedup_count[i] = 0;
+ }
+
+ for (i = 0; i < 32; i++)
+ {
+ m_ds3sdsp_regs[i] = 0;
+ m_ds3xdsp_regs[i] = 0;
+ }
+
+ for (i = 0; i < 0x8000 / 2; i++)
+ {
+ m_som_memory[i] = 0;
+ }
+
+ for (i = 0; i < MAX_MSP_SYNC; i++)
+ {
+ m_dataptr[i] = 0;
+ m_dataval[i] = 0;
+ }
+
+ for (i = 0; i < 0x400 / 2; i++)
+ {
+ m_comram[i] = 0;
+ }
+
+ for (i = 0; i < 65536 * 4; i++)
+ {
+ m_mask_table[i] = 0;
+ }
+}
+
+
+class harddriv_new_state : public driver_device
+{
+public:
+ harddriv_new_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ { }
+
+
+};
+
+
+WRITE16_MEMBER( harddriv_state::watchdog_reset16_w )
+{
+
+}
+
static ADDRESS_MAP_START( driver_68k_map, AS_PROGRAM, 16, harddriv_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x0fffff) AM_ROM
@@ -345,7 +535,7 @@ static ADDRESS_MAP_START( driver_68k_map, AS_PROGRAM, 16, harddriv_state )
AM_RANGE(0x608000, 0x60bfff) AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x60c000, 0x60ffff) AM_WRITE(hd68k_irq_ack_w)
AM_RANGE(0xa00000, 0xa7ffff) AM_WRITE(hd68k_wr0_write)
- AM_RANGE(0xa80000, 0xafffff) AM_READ_PORT("a80000") AM_WRITE(hd68k_wr1_write)
+ AM_RANGE(0xa80000, 0xafffff) AM_READ(hd68k_a80000_r) AM_WRITE(hd68k_wr1_write)
AM_RANGE(0xb00000, 0xb7ffff) AM_READWRITE(hd68k_adc8_r, hd68k_wr2_write)
AM_RANGE(0xb80000, 0xbfffff) AM_READWRITE(hd68k_adc12_r, hd68k_adc_control_w)
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(hd68k_gsp_io_r, hd68k_gsp_io_w)
@@ -392,7 +582,7 @@ static ADDRESS_MAP_START( multisync_68k_map, AS_PROGRAM, 16, harddriv_state )
AM_RANGE(0x608000, 0x60bfff) AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x60c000, 0x60ffff) AM_READWRITE(hd68k_port0_r, hd68k_irq_ack_w)
AM_RANGE(0xa00000, 0xa7ffff) AM_WRITE(hd68k_wr0_write)
- AM_RANGE(0xa80000, 0xafffff) AM_READ_PORT("a80000") AM_WRITE(hd68k_wr1_write)
+ AM_RANGE(0xa80000, 0xafffff) AM_READ(hd68k_a80000_r) AM_WRITE(hd68k_wr1_write)
AM_RANGE(0xb00000, 0xb7ffff) AM_READWRITE(hd68k_adc8_r, hd68k_wr2_write)
AM_RANGE(0xb80000, 0xbfffff) AM_READWRITE(hd68k_adc12_r, hd68k_adc_control_w)
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(hd68k_gsp_io_r, hd68k_gsp_io_w)
@@ -430,7 +620,7 @@ static ADDRESS_MAP_START( multisync2_68k_map, AS_PROGRAM, 16, harddriv_state )
AM_RANGE(0x608000, 0x60bfff) AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x60c000, 0x60ffff) AM_READWRITE(hd68k_port0_r, hd68k_irq_ack_w)
AM_RANGE(0xa00000, 0xa7ffff) AM_WRITE(hd68k_wr0_write)
- AM_RANGE(0xa80000, 0xafffff) AM_READ_PORT("a80000") AM_WRITE(hd68k_wr1_write)
+ AM_RANGE(0xa80000, 0xafffff) AM_READ(hd68k_a80000_r) AM_WRITE(hd68k_wr1_write)
AM_RANGE(0xb00000, 0xb7ffff) AM_READWRITE(hd68k_adc8_r, hd68k_wr2_write)
AM_RANGE(0xb80000, 0xbfffff) AM_READWRITE(hd68k_adc12_r, hd68k_adc_control_w)
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(hd68k_gsp_io_r, hd68k_gsp_io_w)
@@ -597,6 +787,7 @@ ADDRESS_MAP_END
+
/*************************************
*
* Port definitions
@@ -604,19 +795,19 @@ ADDRESS_MAP_END
*************************************/
static INPUT_PORTS_START( harddriv )
- PORT_START("IN0") /* 600000 */
+ PORT_START("mainpcb:IN0") /* 600000 */
PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("mainpcb:screen")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_START("SW1") /* 600002 */
+ PORT_START("mainpcb:SW1") /* 600002 */
PORT_DIPNAME( 0x01, 0x01, "SW1:8" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -642,64 +833,65 @@ static INPUT_PORTS_START( harddriv )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_START("a80000")
+ PORT_START("mainpcb:a80000")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Abort") /* abort */
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Key") /* key */
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) /* aux coin */
PORT_BIT( 0xfff8, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
+ PORT_START("mainpcb:8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20) PORT_NAME("Gas Pedal")
- PORT_START("8BADC1") /* b00000 - 8 bit ADC 1 - clutch pedal */
+ PORT_START("mainpcb:8BADC1") /* b00000 - 8 bit ADC 1 - clutch pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL3 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(100) PORT_NAME("Clutch Pedal")
- PORT_START("8BADC2") /* b00000 - 8 bit ADC 2 - seat */
+ PORT_START("mainpcb:8BADC2") /* b00000 - 8 bit ADC 2 - seat */
PORT_BIT( 0xff, 0x80, IPT_SPECIAL )
- PORT_START("8BADC3") /* b00000 - 8 bit ADC 3 - shifter lever Y */
+ PORT_START("mainpcb:8BADC3") /* b00000 - 8 bit ADC 3 - shifter lever Y */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(128) PORT_CODE_DEC(KEYCODE_R) PORT_CODE_INC(KEYCODE_F) PORT_NAME("Shifter Lever Y")
- PORT_START("8BADC4") /* b00000 - 8 bit ADC 4 - shifter lever X*/
+ PORT_START("mainpcb:8BADC4") /* b00000 - 8 bit ADC 4 - shifter lever X*/
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(128) PORT_CODE_DEC(KEYCODE_D) PORT_CODE_INC(KEYCODE_G) PORT_NAME("Shifter Lever X")
- PORT_START("8BADC5") /* b00000 - 8 bit ADC 5 - wheel */
+ PORT_START("mainpcb:8BADC5") /* b00000 - 8 bit ADC 5 - wheel */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_NAME("Wheel")
- PORT_START("8BADC6") /* b00000 - 8 bit ADC 6 - line volts */
+ PORT_START("mainpcb:8BADC6") /* b00000 - 8 bit ADC 6 - line volts */
PORT_BIT( 0xff, 0x80, IPT_SPECIAL )
- PORT_START("8BADC7") /* b00000 - 8 bit ADC 7 - shift force */
+ PORT_START("mainpcb:8BADC7") /* b00000 - 8 bit ADC 7 - shift force */
PORT_BIT( 0xff, 0x80, IPT_SPECIAL )
- PORT_START("12BADC0") /* b80000 - 12 bit ADC 0 - steering wheel */
+ PORT_START("mainpcb:12BADC0") /* b80000 - 12 bit ADC 0 - steering wheel */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_NAME("Steering Wheel")
- PORT_START("12BADC1") /* b80000 - 12 bit ADC 1 - force brake */
+ PORT_START("mainpcb:12BADC1") /* b80000 - 12 bit ADC 1 - force brake */
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(40) PORT_REVERSE PORT_NAME("Force Brake")
- PORT_START("12BADC2") /* b80000 - 12 bit ADC 2 */
+ PORT_START("mainpcb:12BADC2") /* b80000 - 12 bit ADC 2 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC3") /* b80000 - 12 bit ADC 3 */
+ PORT_START("mainpcb:12BADC3") /* b80000 - 12 bit ADC 3 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+
INPUT_PORTS_END
static INPUT_PORTS_START( racedriv )
- PORT_START("IN0") /* 600000 */
+ PORT_START("mainpcb:IN0") /* 600000 */
PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("mainpcb:screen")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_START("SW1") /* 600002 */
+ PORT_START("mainpcb:SW1") /* 600002 */
PORT_DIPNAME( 0x01, 0x01, "SW1:8" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -725,64 +917,104 @@ static INPUT_PORTS_START( racedriv )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_START("a80000")
+ PORT_START("mainpcb:a80000")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Abort") /* abort */
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Key") /* key */
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) /* aux coin */
PORT_BIT( 0xfff8, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
+ PORT_START("mainpcb:8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20) PORT_NAME("Gas Pedal")
- PORT_START("8BADC1") /* b00000 - 8 bit ADC 1 - clutch pedal */
+ PORT_START("mainpcb:8BADC1") /* b00000 - 8 bit ADC 1 - clutch pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL3 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(100) PORT_NAME("Clutch Pedal")
- PORT_START("8BADC2") /* b00000 - 8 bit ADC 2 - seat */
+ PORT_START("mainpcb:8BADC2") /* b00000 - 8 bit ADC 2 - seat */
PORT_BIT( 0xff, 0x80, IPT_SPECIAL )
- PORT_START("8BADC3") /* b00000 - 8 bit ADC 3 - shifter lever Y */
+ PORT_START("mainpcb:8BADC3") /* b00000 - 8 bit ADC 3 - shifter lever Y */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(128) PORT_CODE_DEC(KEYCODE_R) PORT_CODE_INC(KEYCODE_F) PORT_NAME("Shifter Lever Y")
- PORT_START("8BADC4") /* b00000 - 8 bit ADC 4 - shifter lever X*/
+ PORT_START("mainpcb:8BADC4") /* b00000 - 8 bit ADC 4 - shifter lever X*/
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(128) PORT_CODE_DEC(KEYCODE_D) PORT_CODE_INC(KEYCODE_G) PORT_NAME("Shifter Lever X")
- PORT_START("8BADC5") /* b00000 - 8 bit ADC 5 - wheel */
+ PORT_START("mainpcb:8BADC5") /* b00000 - 8 bit ADC 5 - wheel */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_NAME("Wheel")
- PORT_START("8BADC6") /* b00000 - 8 bit ADC 6 - line volts */
+ PORT_START("mainpcb:8BADC6") /* b00000 - 8 bit ADC 6 - line volts */
PORT_BIT( 0xff, 0x80, IPT_SPECIAL )
- PORT_START("8BADC7") /* b00000 - 8 bit ADC 7 */
+ PORT_START("mainpcb:8BADC7") /* b00000 - 8 bit ADC 7 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC0") /* b80000 - 12 bit ADC 0 - steering wheel */
+ PORT_START("mainpcb:12BADC0") /* b80000 - 12 bit ADC 0 - steering wheel */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_NAME("Steering Wheel")
- PORT_START("12BADC1") /* b80000 - 12 bit ADC 1 - force brake */
+ PORT_START("mainpcb:12BADC1") /* b80000 - 12 bit ADC 1 - force brake */
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(40) PORT_REVERSE PORT_NAME("Force Brake")
- PORT_START("12BADC2") /* b80000 - 12 bit ADC 2 */
+ PORT_START("mainpcb:12BADC2") /* b80000 - 12 bit ADC 2 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC3") /* b80000 - 12 bit ADC 3 */
+ PORT_START("mainpcb:12BADC3") /* b80000 - 12 bit ADC 3 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
+static INPUT_PORTS_START( racedriv_pan )
+ PORT_INCLUDE( racedriv )
+
+ PORT_START("leftpcb:IN0") /* 600000 */
+ PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper (Left)" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("leftpcb:screen")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
+ PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
+
+ PORT_START("rightpcb:IN0") /* 600000 */
+ PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper (Right)" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("rightpcb:screen")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
+ PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
+#if 1 // needed to navigate sub-screen test menus
+ PORT_START("leftpcb:a80000")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Abort") /* abort */
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Key") /* key */
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) /* aux coin */
+ PORT_BIT( 0xfff8, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("rightpcb:a80000")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Abort") /* abort */
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Key") /* key */
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) /* aux coin */
+ PORT_BIT( 0xfff8, IP_ACTIVE_LOW, IPT_UNUSED )
+#endif
+INPUT_PORTS_END
static INPUT_PORTS_START( racedrivc )
- PORT_START("IN0") /* 60c000 */
+ PORT_START("mainpcb:IN0") /* 60c000 */
PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("mainpcb:screen")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_START("SW1") /* 60c002 */
+ PORT_START("mainpcb:SW1") /* 60c002 */
PORT_DIPNAME( 0x01, 0x01, "SW1:8" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -808,7 +1040,7 @@ static INPUT_PORTS_START( racedrivc )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_START("a80000")
+ PORT_START("mainpcb:a80000")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("Abort")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Key")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) /* aux coin */
@@ -821,57 +1053,57 @@ static INPUT_PORTS_START( racedrivc )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SPECIAL ) /* center edge on steering wheel */
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
+ PORT_START("mainpcb:8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20) PORT_NAME("Gas Pedal")
- PORT_START("8BADC1") /* b00000 - 8 bit ADC 1 - clutch pedal */
+ PORT_START("mainpcb:8BADC1") /* b00000 - 8 bit ADC 1 - clutch pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL3 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(100) PORT_NAME("Clutch Pedal")
- PORT_START("8BADC2") /* b00000 - 8 bit ADC 2 */
+ PORT_START("mainpcb:8BADC2") /* b00000 - 8 bit ADC 2 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC3") /* b00000 - 8 bit ADC 3 */
+ PORT_START("mainpcb:8BADC3") /* b00000 - 8 bit ADC 3 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC4") /* b00000 - 8 bit ADC 4 */
+ PORT_START("mainpcb:8BADC4") /* b00000 - 8 bit ADC 4 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC5") /* b00000 - 8 bit ADC 5 */
+ PORT_START("mainpcb:8BADC5") /* b00000 - 8 bit ADC 5 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC6") /* b00000 - 8 bit ADC 6 - force brake */
+ PORT_START("mainpcb:8BADC6") /* b00000 - 8 bit ADC 6 - force brake */
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(40) PORT_REVERSE PORT_NAME("Force Brake")
- PORT_START("8BADC7") /* b00000 - 8 bit ADC 7 */
+ PORT_START("mainpcb:8BADC7") /* b00000 - 8 bit ADC 7 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC0") /* 400000 - steering wheel */
+ PORT_START("mainpcb:12BADC0") /* 400000 - steering wheel */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_NAME("Steering Wheel")
/* dummy ADC ports to end up with the same number as the full version */
- PORT_START("12BADC1")
+ PORT_START("mainpcb:12BADC1")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC2")
+ PORT_START("mainpcb:12BADC2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC3")
+ PORT_START("mainpcb:12BADC3")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( stunrun )
- PORT_START("IN0") /* 60c000 */
+ PORT_START("mainpcb:IN0") /* 60c000 */
PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("mainpcb:screen")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_START("SW1") /* 60c002 */
+ PORT_START("mainpcb:SW1") /* 60c002 */
PORT_DIPNAME( 0x01, 0x00, "SW1:8" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -897,46 +1129,46 @@ static INPUT_PORTS_START( stunrun )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_START("a80000")
+ PORT_START("mainpcb:a80000")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xfff8, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC0") /* b00000 - 8 bit ADC 0 */
+ PORT_START("mainpcb:8BADC0") /* b00000 - 8 bit ADC 0 */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10)
- PORT_START("8BADC1") /* b00000 - 8 bit ADC 1 */
+ PORT_START("mainpcb:8BADC1") /* b00000 - 8 bit ADC 1 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC2") /* b00000 - 8 bit ADC 2 */
+ PORT_START("mainpcb:8BADC2") /* b00000 - 8 bit ADC 2 */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10)
- PORT_START("8BADC3") /* b00000 - 8 bit ADC 3 */
+ PORT_START("mainpcb:8BADC3") /* b00000 - 8 bit ADC 3 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC4") /* b00000 - 8 bit ADC 4 */
+ PORT_START("mainpcb:8BADC4") /* b00000 - 8 bit ADC 4 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC5") /* b00000 - 8 bit ADC 5 */
+ PORT_START("mainpcb:8BADC5") /* b00000 - 8 bit ADC 5 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC6") /* b00000 - 8 bit ADC 6 */
+ PORT_START("mainpcb:8BADC6") /* b00000 - 8 bit ADC 6 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC7") /* b00000 - 8 bit ADC 7 */
+ PORT_START("mainpcb:8BADC7") /* b00000 - 8 bit ADC 7 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC0") /* b80000 - 12 bit ADC 0 */
+ PORT_START("mainpcb:12BADC0") /* b80000 - 12 bit ADC 0 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC1") /* b80000 - 12 bit ADC 1 */
+ PORT_START("mainpcb:12BADC1") /* b80000 - 12 bit ADC 1 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC2") /* b80000 - 12 bit ADC 2 */
+ PORT_START("mainpcb:12BADC2") /* b80000 - 12 bit ADC 2 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC3") /* b80000 - 12 bit ADC 3 */
+ PORT_START("mainpcb:12BADC3") /* b80000 - 12 bit ADC 3 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
/* stunrun has its own coins */
@@ -948,19 +1180,19 @@ INPUT_PORTS_END
static INPUT_PORTS_START( steeltal )
- PORT_START("IN0") /* 60c000 */
+ PORT_START("mainpcb:IN0") /* 60c000 */
PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("mainpcb:screen")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_START("SW1") /* 60c002 */
+ PORT_START("mainpcb:SW1") /* 60c002 */
PORT_DIPNAME( 0x01, 0x00, "SW1:8" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -986,47 +1218,47 @@ static INPUT_PORTS_START( steeltal )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_START("a80000")
+ PORT_START("mainpcb:a80000")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Trigger")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Thumb")
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Zoom")
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Real Helicopter Flight")
PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC0") /* b00000 - 8 bit ADC 0 */
+ PORT_START("mainpcb:8BADC0") /* b00000 - 8 bit ADC 0 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC1") /* b00000 - 8 bit ADC 1 */
+ PORT_START("mainpcb:8BADC1") /* b00000 - 8 bit ADC 1 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED ) /* volume control */
- PORT_START("8BADC2") /* b00000 - 8 bit ADC 2 */
+ PORT_START("mainpcb:8BADC2") /* b00000 - 8 bit ADC 2 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC3") /* b00000 - 8 bit ADC 3 */
+ PORT_START("mainpcb:8BADC3") /* b00000 - 8 bit ADC 3 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC4") /* b00000 - 8 bit ADC 4 */
+ PORT_START("mainpcb:8BADC4") /* b00000 - 8 bit ADC 4 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC5") /* b00000 - 8 bit ADC 5 */
+ PORT_START("mainpcb:8BADC5") /* b00000 - 8 bit ADC 5 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC6") /* b00000 - 8 bit ADC 6 */
+ PORT_START("mainpcb:8BADC6") /* b00000 - 8 bit ADC 6 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC7") /* b00000 - 8 bit ADC 7 */
+ PORT_START("mainpcb:8BADC7") /* b00000 - 8 bit ADC 7 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC0") /* b80000 - 12 bit ADC 0 */
+ PORT_START("mainpcb:12BADC0") /* b80000 - 12 bit ADC 0 */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) /* left/right */
- PORT_START("12BADC1") /* b80000 - 12 bit ADC 1 */
+ PORT_START("mainpcb:12BADC1") /* b80000 - 12 bit ADC 1 */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) /* up/down */
- PORT_START("12BADC2") /* b80000 - 12 bit ADC 2 */
+ PORT_START("mainpcb:12BADC2") /* b80000 - 12 bit ADC 2 */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Z ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_NAME("Collective") PORT_REVERSE /* collective */
- PORT_START("12BADC3") /* b80000 - 12 bit ADC 3 */
+ PORT_START("mainpcb:12BADC3") /* b80000 - 12 bit ADC 3 */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_NAME("Rudder") PORT_PLAYER(2) /* rudder */
/* steeltal has its own coins */
@@ -1038,19 +1270,19 @@ INPUT_PORTS_END
static INPUT_PORTS_START( strtdriv )
- PORT_START("IN0") /* 60c000 */
+ PORT_START("mainpcb:IN0") /* 60c000 */
PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("mainpcb:screen")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_START("SW1") /* 60c002 */
+ PORT_START("mainpcb:SW1") /* 60c002 */
PORT_DIPNAME( 0x01, 0x01, "SW1:8" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -1076,7 +1308,7 @@ static INPUT_PORTS_START( strtdriv )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_START("a80000")
+ PORT_START("mainpcb:a80000")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START2 ) /* abort */
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 ) /* start */
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) /* aux coin */
@@ -1090,57 +1322,57 @@ static INPUT_PORTS_START( strtdriv )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SPECIAL ) /* center edge on steering wheel */
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
+ PORT_START("mainpcb:8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20) PORT_NAME("Gas Pedal")
- PORT_START("8BADC1") /* b00000 - 8 bit ADC 1 */
+ PORT_START("mainpcb:8BADC1") /* b00000 - 8 bit ADC 1 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC2") /* b00000 - 8 bit ADC 2 - voice mic */
+ PORT_START("mainpcb:8BADC2") /* b00000 - 8 bit ADC 2 - voice mic */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC3") /* b00000 - 8 bit ADC 3 - volume */
+ PORT_START("mainpcb:8BADC3") /* b00000 - 8 bit ADC 3 - volume */
PORT_BIT( 0xff, 0X80, IPT_UNUSED )
- PORT_START("8BADC4") /* b00000 - 8 bit ADC 4 - elevator */
+ PORT_START("mainpcb:8BADC4") /* b00000 - 8 bit ADC 4 - elevator */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_NAME("Elevator") PORT_REVERSE /* up/down */
- PORT_START("8BADC5") /* b00000 - 8 bit ADC 5 - canopy */
+ PORT_START("mainpcb:8BADC5") /* b00000 - 8 bit ADC 5 - canopy */
PORT_BIT( 0xff, 0X80, IPT_UNUSED )
- PORT_START("8BADC6") /* b00000 - 8 bit ADC 6 - brake */
+ PORT_START("mainpcb:8BADC6") /* b00000 - 8 bit ADC 6 - brake */
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(40) PORT_NAME("Brake") PORT_REVERSE
- PORT_START("8BADC7") /* b00000 - 8 bit ADC 7 - seat adjust */
+ PORT_START("mainpcb:8BADC7") /* b00000 - 8 bit ADC 7 - seat adjust */
PORT_BIT( 0xff, 0X80, IPT_UNUSED )
- PORT_START("12BADC0") /* 400000 - steering wheel */
+ PORT_START("mainpcb:12BADC0") /* 400000 - steering wheel */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_NAME("Steering Wheel")
/* dummy ADC ports to end up with the same number as the full version */
- PORT_START("12BADC1") /* FAKE */
+ PORT_START("mainpcb:12BADC1") /* FAKE */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC2") /* FAKE */
+ PORT_START("mainpcb:12BADC2") /* FAKE */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC3") /* FAKE */
+ PORT_START("mainpcb:12BADC3") /* FAKE */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( hdrivair )
- PORT_START("IN0") /* 60c000 */
+ PORT_START("mainpcb:IN0") /* 60c000 */
PORT_DIPNAME( 0x01, 0x01, "Diagnostic jumper" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SPECIAL ) /* HBLANK */
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("mainpcb:screen")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 12-bit EOC */
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* 8-bit EOC */
PORT_SERVICE( 0x20, IP_ACTIVE_LOW )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_START("SW1") /* 60c002 */
+ PORT_START("mainpcb:SW1") /* 60c002 */
PORT_DIPNAME( 0x01, 0x01, "SW1:8" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -1166,7 +1398,7 @@ static INPUT_PORTS_START( hdrivair )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_START("a80000")
+ PORT_START("mainpcb:a80000")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START2 ) /* abort */
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START1 ) /* start */
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) /* aux coin */
@@ -1180,39 +1412,39 @@ static INPUT_PORTS_START( hdrivair )
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_SPECIAL ) /* center edge on steering wheel */
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
+ PORT_START("mainpcb:8BADC0") /* b00000 - 8 bit ADC 0 - gas pedal */
PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20) PORT_NAME("Gas Pedal")
- PORT_START("8BADC1") /* b00000 - 8 bit ADC 1 */
+ PORT_START("mainpcb:8BADC1") /* b00000 - 8 bit ADC 1 */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC2") /* b00000 - 8 bit ADC 2 - voice mic */
+ PORT_START("mainpcb:8BADC2") /* b00000 - 8 bit ADC 2 - voice mic */
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("8BADC3") /* b00000 - 8 bit ADC 3 - volume */
+ PORT_START("mainpcb:8BADC3") /* b00000 - 8 bit ADC 3 - volume */
PORT_BIT( 0xff, 0X80, IPT_UNUSED )
- PORT_START("8BADC4") /* b00000 - 8 bit ADC 4 - elevator */
+ PORT_START("mainpcb:8BADC4") /* b00000 - 8 bit ADC 4 - elevator */
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_REVERSE PORT_NAME("Elevator") /* up/down */
- PORT_START("8BADC5") /* b00000 - 8 bit ADC 5 - canopy */
+ PORT_START("mainpcb:8BADC5") /* b00000 - 8 bit ADC 5 - canopy */
PORT_BIT( 0xff, 0X80, IPT_UNUSED )
- PORT_START("8BADC6") /* b00000 - 8 bit ADC 6 - brake */
+ PORT_START("mainpcb:8BADC6") /* b00000 - 8 bit ADC 6 - brake */
PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(25) PORT_KEYDELTA(40) PORT_REVERSE PORT_NAME("Brake")
- PORT_START("8BADC7") /* b00000 - 8 bit ADC 7 - seat adjust */
+ PORT_START("mainpcb:8BADC7") /* b00000 - 8 bit ADC 7 - seat adjust */
PORT_BIT( 0xff, 0X80, IPT_UNUSED )
- PORT_START("12BADC0") /* 400000 - steering wheel */
+ PORT_START("mainpcb:12BADC0") /* 400000 - steering wheel */
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_MINMAX(0x10,0xf0) PORT_SENSITIVITY(25) PORT_KEYDELTA(5) PORT_REVERSE PORT_NAME("Steering Wheel")
/* dummy ADC ports to end up with the same number as the full version */
- PORT_START("12BADC1")
+ PORT_START("mainpcb:12BADC1")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC2")
+ PORT_START("mainpcb:12BADC2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("12BADC3")
+ PORT_START("mainpcb:12BADC3")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
@@ -1223,15 +1455,25 @@ INPUT_PORTS_END
*
*************************************/
+INTERRUPT_GEN_MEMBER(harddriv_state::video_int_gen)
+{
+ m_video_int_state = 1;
+ update_interrupts();
+}
+
+
/* Driver board without MSP (used by Race Drivin' cockpit) */
-static MACHINE_CONFIG_START( driver_nomsp, harddriv_state )
+static MACHINE_CONFIG_FRAGMENT( driver_nomsp )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68010, HARDDRIV_MASTER_CLOCK/4)
MCFG_CPU_PROGRAM_MAP(driver_68k_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
+ MCFG_DEVICE_VBLANK_INT_DRIVER("screen", harddriv_state, video_int_gen)
MCFG_CPU_PERIODIC_INT_DRIVER(harddriv_state, hd68k_irq_gen, (double)HARDDRIV_MASTER_CLOCK/16/16/16/16/2)
+ MCFG_SLAPSTIC_ADD("slapstic")
+ MCFG_SLAPSTIC_68K_ACCESS(1)
+
MCFG_CPU_ADD("gsp", TMS34010, HARDDRIV_GSP_CLOCK)
MCFG_CPU_PROGRAM_MAP(driver_gsp_map)
MCFG_TMS340X0_HALT_ON_RESET(TRUE) /* halt on reset */
@@ -1241,12 +1483,10 @@ static MACHINE_CONFIG_START( driver_nomsp, harddriv_state )
MCFG_TMS340X0_OUTPUT_INT_CB(WRITELINE(harddriv_state, hdgsp_irq_gen))
MCFG_TMS340X0_TO_SHIFTREG_CB(harddriv_state, hdgsp_write_to_shiftreg)
MCFG_TMS340X0_FROM_SHIFTREG_CB(harddriv_state, hdgsp_read_from_shiftreg)
+ MCFG_VIDEO_SET_SCREEN("screen")
MCFG_QUANTUM_TIME(attotime::from_hz(30000))
- MCFG_MACHINE_START_OVERRIDE(harddriv_state,harddriv)
- MCFG_MACHINE_RESET_OVERRIDE(harddriv_state,harddriv)
-
MCFG_M48T02_ADD("200e") // MK48T02
MCFG_EEPROM_2816_ADD("210e") // MK48Z02
@@ -1261,13 +1501,13 @@ static MACHINE_CONFIG_START( driver_nomsp, harddriv_state )
MCFG_SCREEN_UPDATE_DEVICE("gsp", tms34010_device, tms340x0_ind16)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
MCFG_SCREEN_PALETTE("palette")
-
- MCFG_VIDEO_START_OVERRIDE(harddriv_state,harddriv)
MACHINE_CONFIG_END
/* Driver board with MSP (used by Hard Drivin' cockpit) */
-static MACHINE_CONFIG_DERIVED( driver_msp, driver_nomsp )
+static MACHINE_CONFIG_FRAGMENT( driver_msp )
+
+ MCFG_FRAGMENT_ADD( driver_nomsp )
/* basic machine hardware */
MCFG_CPU_ADD("msp", TMS34010, XTAL_50MHz)
@@ -1276,11 +1516,15 @@ static MACHINE_CONFIG_DERIVED( driver_msp, driver_nomsp )
MCFG_TMS340X0_PIXEL_CLOCK(5000000) /* pixel clock */
MCFG_TMS340X0_PIXELS_PER_CLOCK(2) /* pixels per clock */
MCFG_TMS340X0_OUTPUT_INT_CB(WRITELINE(harddriv_state, hdmsp_irq_gen))
+ MCFG_VIDEO_SET_SCREEN("screen")
+
MACHINE_CONFIG_END
/* Multisync board without MSP (used by STUN Runner, Steel Talons, Race Drivin' compact) */
-static MACHINE_CONFIG_DERIVED( multisync_nomsp, driver_nomsp )
+static MACHINE_CONFIG_FRAGMENT( multisync_nomsp )
+
+ MCFG_FRAGMENT_ADD( driver_nomsp )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -1299,7 +1543,9 @@ MACHINE_CONFIG_END
/* Multisync board with MSP (used by Hard Drivin' compact) */
-static MACHINE_CONFIG_DERIVED( multisync_msp, multisync_nomsp )
+static MACHINE_CONFIG_FRAGMENT( multisync_msp )
+
+ MCFG_FRAGMENT_ADD( multisync_nomsp )
/* basic machine hardware */
MCFG_CPU_ADD("msp", TMS34010, XTAL_50MHz)
@@ -1308,11 +1554,15 @@ static MACHINE_CONFIG_DERIVED( multisync_msp, multisync_nomsp )
MCFG_TMS340X0_PIXEL_CLOCK(5000000) /* pixel clock */
MCFG_TMS340X0_PIXELS_PER_CLOCK(2) /* pixels per clock */
MCFG_TMS340X0_OUTPUT_INT_CB(WRITELINE(harddriv_state, hdmsp_irq_gen))
+ MCFG_VIDEO_SET_SCREEN("screen")
+
MACHINE_CONFIG_END
/* Multisync II board (used by Hard Drivin's Airborne) */
-static MACHINE_CONFIG_DERIVED( multisync2, multisync_nomsp )
+static MACHINE_CONFIG_FRAGMENT( multisync2 )
+
+ MCFG_FRAGMENT_ADD( multisync_nomsp )
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
@@ -1444,23 +1694,23 @@ MACHINE_CONFIG_END
*
*************************************/
-static MACHINE_CONFIG_DERIVED( harddriv, driver_msp )
-
+static MACHINE_CONFIG_FRAGMENT( harddriv )
+ MCFG_FRAGMENT_ADD( driver_msp )
/* basic machine hardware */ /* original driver board with MSP */
MCFG_FRAGMENT_ADD( adsp ) /* ADSP board */
MCFG_FRAGMENT_ADD( driversnd ) /* driver sound board */
MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_DERIVED( harddrivc, multisync_msp )
+static MACHINE_CONFIG_FRAGMENT( harddrivc )
+ MCFG_FRAGMENT_ADD( multisync_msp )
/* basic machine hardware */ /* multisync board with MSP */
MCFG_FRAGMENT_ADD( adsp ) /* ADSP board */
MCFG_FRAGMENT_ADD( driversnd ) /* driver sound board */
MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_DERIVED( racedriv, driver_nomsp )
+static MACHINE_CONFIG_FRAGMENT( racedriv )
+ MCFG_FRAGMENT_ADD( driver_nomsp )
/* basic machine hardware */ /* original driver board without MSP */
MCFG_FRAGMENT_ADD( adsp ) /* ADSP board */
@@ -1468,8 +1718,9 @@ static MACHINE_CONFIG_DERIVED( racedriv, driver_nomsp )
MCFG_FRAGMENT_ADD( driversnd ) /* driver sound board */
MACHINE_CONFIG_END
+static MACHINE_CONFIG_FRAGMENT( racedrivc )
-static MACHINE_CONFIG_DERIVED( racedrivc, multisync_nomsp )
+ MCFG_FRAGMENT_ADD( multisync_nomsp )
/* basic machine hardware */ /* multisync board without MSP */
MCFG_FRAGMENT_ADD( adsp ) /* ADSP board */
@@ -1478,7 +1729,26 @@ static MACHINE_CONFIG_DERIVED( racedrivc, multisync_nomsp )
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( stunrun, multisync_nomsp )
+static MACHINE_CONFIG_FRAGMENT( racedrivc_panorama_side )
+
+ MCFG_FRAGMENT_ADD( multisync_nomsp )
+
+ /* basic machine hardware */ /* multisync board without MSP */
+ MCFG_FRAGMENT_ADD( adsp ) /* ADSP board */
+// MCFG_FRAGMENT_ADD( dsk ) /* DSK board */
+// MCFG_FRAGMENT_ADD( driversnd ) /* driver sound board */
+MACHINE_CONFIG_END
+
+WRITE_LINE_MEMBER(harddriv_state::sound_int_write_line)
+{
+ m_sound_int_state = state;
+ update_interrupts();
+}
+
+
+static MACHINE_CONFIG_FRAGMENT( stunrun )
+
+ MCFG_FRAGMENT_ADD( multisync_nomsp )
/* basic machine hardware */ /* multisync board without MSP */
MCFG_CPU_MODIFY("gsp")
@@ -1492,13 +1762,13 @@ static MACHINE_CONFIG_DERIVED( stunrun, multisync_nomsp )
/* sund hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_ATARI_JSA_II_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line))
+ MCFG_ATARI_JSA_II_ADD("jsa", WRITELINE(harddriv_state, sound_int_write_line))
MCFG_ATARI_JSA_TEST_PORT("IN0", 5)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_DERIVED( steeltal, multisync_msp )
+static MACHINE_CONFIG_FRAGMENT( steeltal )
+ MCFG_FRAGMENT_ADD( multisync_msp )
/* basic machine hardware */ /* multisync board with MSP */
MCFG_FRAGMENT_ADD( ds3 ) /* DS III board */
@@ -1514,13 +1784,14 @@ static MACHINE_CONFIG_DERIVED( steeltal, multisync_msp )
/* sund hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_ATARI_JSA_III_ADD("jsa", WRITELINE(atarigen_state, sound_int_write_line))
+ MCFG_ATARI_JSA_III_ADD("jsa", WRITELINE(harddriv_state, sound_int_write_line))
MCFG_ATARI_JSA_TEST_PORT("IN0", 5)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_FRAGMENT( strtdriv )
-static MACHINE_CONFIG_DERIVED( strtdriv, multisync_nomsp )
+ MCFG_FRAGMENT_ADD( multisync_nomsp )
/* basic machine hardware */ /* multisync board */
MCFG_FRAGMENT_ADD( ds3 ) /* DS III board */
@@ -1530,16 +1801,301 @@ static MACHINE_CONFIG_DERIVED( strtdriv, multisync_nomsp )
MCFG_FRAGMENT_ADD( dsk ) /* DSK board */
MACHINE_CONFIG_END
+static MACHINE_CONFIG_FRAGMENT( hdrivair )
-static MACHINE_CONFIG_DERIVED( hdrivair, multisync2 )
+ MCFG_FRAGMENT_ADD( multisync2 )
/* basic machine hardware */ /* multisync II board */
MCFG_FRAGMENT_ADD( ds3 ) /* DS IV board */
MCFG_FRAGMENT_ADD( dsk2 ) /* DSK II board */
MACHINE_CONFIG_END
+const device_type HARDDRIV_BOARD_DEVICE = &device_creator<harddriv_board_device_state>;
+
+harddriv_board_device_state::harddriv_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : harddriv_state(mconfig, tag, owner, clock)
+{
+}
+
+machine_config_constructor harddriv_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( harddriv );
+}
+
+void harddriv_board_device_state::device_start()
+{
+ init_harddriv();
+ harddriv_state::device_start();
+}
+
+/* Compact */
+
+void harddrivc_board_device_state::device_start()
+{
+ init_harddrivc();
+ harddriv_state::device_start();
+}
+
+const device_type HARDDRIVC_BOARD_DEVICE = &device_creator<harddrivc_board_device_state>;
+
+harddrivc_board_device_state::harddrivc_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : harddriv_state(mconfig, tag, owner, clock)
+{
+}
+
+machine_config_constructor harddrivc_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( harddrivc );
+}
+
+
+/* Race Drivin */
+
+void racedriv_board_device_state::device_start()
+{
+ init_racedriv();
+ harddriv_state::device_start();
+}
+
+void racedrivb1_board_device_state::device_start()
+{
+ init_racedrivb1();
+ harddriv_state::device_start();
+}
+
+const device_type RACEDRIV_BOARD_DEVICE = &device_creator<racedriv_board_device_state>;
+const device_type RACEDRIVB1_BOARD_DEVICE = &device_creator<racedrivb1_board_device_state>;
+
+racedriv_board_device_state::racedriv_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : harddriv_state(mconfig, tag, owner, clock)
+{
+}
+
+machine_config_constructor racedriv_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( racedriv );
+}
+
+
+/* Race Drivin Compact */
+
+void racedrivc_board_device_state::device_start()
+{
+ init_racedrivc();
+ harddriv_state::device_start();
+}
+
+void racedrivc1_board_device_state::device_start()
+{
+ init_racedrivc1();
+ harddriv_state::device_start();
+}
+
+void racedrivc_panorama_side_board_device_state::device_start()
+{
+ init_racedrivc_panorama_side();
+ harddriv_state::device_start();
+}
+
+
+
+const device_type RACEDRIVC_BOARD_DEVICE = &device_creator<racedrivc_board_device_state>;
+const device_type RACEDRIVC1_BOARD_DEVICE = &device_creator<racedrivc1_board_device_state>;
+const device_type RACEDRIVC_PANORAMA_SIDE_BOARD_DEVICE = &device_creator<racedrivc_panorama_side_board_device_state>;
+
+racedrivc_board_device_state::racedrivc_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : harddriv_state(mconfig, tag, owner, clock)
+{
+}
+
+machine_config_constructor racedrivc_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( racedrivc );
+}
+
+machine_config_constructor racedrivc_panorama_side_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( racedrivc_panorama_side );
+}
+
+
+/* Stun Runner */
+
+void stunrun_board_device_state::device_start()
+{
+ init_stunrun();
+ harddriv_state::device_start();
+}
+
+const device_type STUNRUN_BOARD_DEVICE = &device_creator<stunrun_board_device_state>;
+
+stunrun_board_device_state::stunrun_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : harddriv_state(mconfig, tag, owner, clock)
+{
+}
+
+machine_config_constructor stunrun_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( stunrun );
+}
+
+/* Steel Talons */
+
+void steeltal_board_device_state::device_start()
+{
+ init_steeltal();
+ harddriv_state::device_start();
+}
+
+void steeltal1_board_device_state::device_start()
+{
+ init_steeltal1();
+ harddriv_state::device_start();
+}
+
+void steeltalp_board_device_state::device_start()
+{
+ init_steeltalp();
+ harddriv_state::device_start();
+}
+
+const device_type STEELTAL_BOARD_DEVICE = &device_creator<steeltal_board_device_state>;
+const device_type STEELTAL1_BOARD_DEVICE = &device_creator<steeltal1_board_device_state>;
+const device_type STEELTALP_BOARD_DEVICE = &device_creator<steeltalp_board_device_state>;
+
+steeltal_board_device_state::steeltal_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : harddriv_state(mconfig, tag, owner, clock)
+{
+}
+
+machine_config_constructor steeltal_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( steeltal );
+}
+
+/* Street Drivin' */
+
+void strtdriv_board_device_state::device_start()
+{
+ init_strtdriv();
+ harddriv_state::device_start();
+}
+
+const device_type STRTDRIV_BOARD_DEVICE = &device_creator<strtdriv_board_device_state>;
+
+strtdriv_board_device_state::strtdriv_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : harddriv_state(mconfig, tag, owner, clock)
+{
+}
+
+machine_config_constructor strtdriv_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( strtdriv );
+}
+
+/* Hard Drivin' Airbourne */
+
+void hdrivair_board_device_state::device_start()
+{
+ init_hdrivair();
+ harddriv_state::device_start();
+}
+
+void hdrivairp_board_device_state::device_start()
+{
+ init_hdrivairp();
+ harddriv_state::device_start();
+}
+
+const device_type HDRIVAIR_BOARD_DEVICE = &device_creator<hdrivair_board_device_state>;
+const device_type HDRIVAIRP_BOARD_DEVICE = &device_creator<hdrivairp_board_device_state>;
+
+hdrivair_board_device_state::hdrivair_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : harddriv_state(mconfig, tag, owner, clock)
+{
+}
+
+machine_config_constructor hdrivair_board_device_state::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( hdrivair );
+}
+
+
+
+static MACHINE_CONFIG_START( harddriv_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", HARDDRIV_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( harddrivc_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", HARDDRIVC_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( racedriv_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", RACEDRIV_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( racedrivb1_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", RACEDRIVB1_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( racedrivc_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", RACEDRIVC_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( racedrivc1_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", RACEDRIVC1_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( stunrun_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", STUNRUN_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( strtdriv_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", STRTDRIV_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( hdrivair_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", HDRIVAIR_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( hdrivairp_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", HDRIVAIRP_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( steeltal_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", STEELTAL_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( steeltal1_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", STEELTAL1_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( steeltalp_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", STEELTALP_BOARD_DEVICE, 0)
+MACHINE_CONFIG_END
+
+WRITE_LINE_MEMBER(racedriv_board_device_state::tx_a)
+{
+ // passive connection, one way, to both screens
+ mc68681_device* left = machine().device<mc68681_device>(":leftpcb:duartn68681");
+ mc68681_device* right = machine().device<mc68681_device>(":rightpcb:duartn68681");
+ left->rx_a_w(state);
+ right->rx_a_w(state);
+}
+
+static MACHINE_CONFIG_START( racedriv_panorama_machine, harddriv_new_state )
+ MCFG_DEVICE_ADD("mainpcb", RACEDRIV_BOARD_DEVICE, 0) // if this is anything except the first screen the partial updates / rasters glitch, mame bug? something assuming primary_screen? other screens suffer from the same issue, not related to new code, you could reproduce it before just by adding a dummy screen
+ MCFG_DEVICE_ADD("leftpcb", RACEDRIVC_PANORAMA_SIDE_BOARD_DEVICE, 0)
+ MCFG_DEVICE_ADD("rightpcb", RACEDRIVC_PANORAMA_SIDE_BOARD_DEVICE, 0)
+
+ MCFG_QUANTUM_TIME(attotime::from_hz(100000))
+ MCFG_DEVICE_MODIFY("mainpcb:duartn68681")
+ MCFG_MC68681_A_TX_CALLBACK(WRITELINE(racedriv_board_device_state,tx_a ))
+
+MACHINE_CONFIG_END
+
/*************************************
*
* ROM definition(s)
@@ -1554,7 +2110,7 @@ MACHINE_CONFIG_END
*/
ROM_START( harddriv )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-7105.200r", 0x000000, 0x010000, CRC(af5d5c3e) SHA1(09ccf4aa933413b71b6a42796d42299e1334902f) )
ROM_LOAD16_BYTE( "136052-7113.210r", 0x000001, 0x010000, CRC(3330a942) SHA1(b9210f6befd875be8bc1dbd31f44d0cb63166748) )
ROM_LOAD16_BYTE( "136052-2106.200s", 0x020000, 0x010000, CRC(a668db0e) SHA1(8ac405a0ba12bac9acabdb64970608d1b2b1a99b) )
@@ -1564,32 +2120,33 @@ ROM_START( harddriv )
ROM_LOAD16_BYTE( "136052-1111.200x", 0x0c0000, 0x010000, CRC(e1f455a3) SHA1(68462a33bbfcc526d8f27ec082e55937a26ead8b) )
ROM_LOAD16_BYTE( "136052-1119.210x", 0x0c0001, 0x010000, CRC(a7fc3aaa) SHA1(ce8d4a8f83e25008cafa2a2242ed26b90b8517da) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
- ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
+ ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
+
ROM_START( harddrivg )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-7205.200r", 0x000000, 0x010000, CRC(b50b1968) SHA1(b6fd9f0600cba995bf31fd0f30f15f091bbbfb09) )
ROM_LOAD16_BYTE( "136052-7213.210r", 0x000001, 0x010000, CRC(e6d57108) SHA1(a4eda6db4ec67b1cb8f9bfee17d8adc93675ef8a) )
ROM_LOAD16_BYTE( "136052-4206.200s", 0x020000, 0x010000, CRC(70f78c50) SHA1(6baed202937c455c7c6e4baa74ee7858673a37fc) )
@@ -1599,32 +2156,32 @@ ROM_START( harddrivg )
ROM_LOAD16_BYTE( "136052-4211.200x", 0x0c0000, 0x010000, CRC(20d1b3d5) SHA1(b7c4a2cf6ba729530c24980704989b3a3efb343b) )
ROM_LOAD16_BYTE( "136052-4219.210x", 0x0c0001, 0x010000, CRC(105e7052) SHA1(a8d13c35418e58410cfd74c243b74963f1553068) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddrivj )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-7805.200r", 0x000000, 0x010000, CRC(f170c842) SHA1(842cef66646a664300a7e2b827c0bbd53e5f27ad) )
ROM_LOAD16_BYTE( "136052-7813.210r", 0x000001, 0x010000, CRC(e5a3367d) SHA1(96b3a6fb5561fa59d7ac4b840fa1891d02f1bd8c) )
ROM_LOAD16_BYTE( "136052-6806.200s", 0x020000, 0x010000, CRC(bd68696e) SHA1(33b173f210183fef84c4c04b3bff515d79b4924d) )
@@ -1636,32 +2193,32 @@ ROM_START( harddrivj )
ROM_LOAD16_BYTE( "136052-6811.200x", 0x0c0000, 0x010000, CRC(7bc5c8da) SHA1(ac228d6391bc9ac4238f953f9ad6eb93b3ff9958) )
ROM_LOAD16_BYTE( "136052-6819.210x", 0x0c0001, 0x010000, CRC(368b7e17) SHA1(e8742edec6961173df4450073a427cf3b9f3ff57) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddrivb )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-7905.200r", 0x000000, 0x010000, CRC(c4379a2e) SHA1(41dc66c1576c591520543343a798e0d80def2188) )
ROM_LOAD16_BYTE( "136052-7913.210r", 0x000001, 0x010000, CRC(1e76fa17) SHA1(80ec1de4c8a4622fb5c65ec3e8c194a8eabacc38) )
ROM_LOAD16_BYTE( "136052-6906.200s", 0x020000, 0x010000, CRC(47c4498b) SHA1(aad3463f29ffc733ab42a7abf739ca698cdd8ec1) )
@@ -1671,32 +2228,32 @@ ROM_START( harddrivb )
ROM_LOAD16_BYTE( "136052-5911.200x", 0x0c0000, 0x010000, CRC(564ac427) SHA1(f71d5a8d06681fc96e753e7cd18e16b32ba6907f) )
ROM_LOAD16_BYTE( "136052-5919.210x", 0x0c0001, 0x010000, CRC(752d9a6d) SHA1(28edb54c7217f5ccdcb2b5614d4e8c2290d96b2a) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddrivb6 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-6905.200r", 0x000000, 0x010000, CRC(b1f38593) SHA1(958622128c7c687071211343ef657c38f928e25a) )
ROM_LOAD16_BYTE( "136052-6913.210r", 0x000001, 0x010000, CRC(15eb0da5) SHA1(0200328582c77d4d64e9f7df1f8755f7f4975ac3) )
ROM_LOAD16_BYTE( "136052-6906.200s", 0x020000, 0x010000, CRC(47c4498b) SHA1(aad3463f29ffc733ab42a7abf739ca698cdd8ec1) )
@@ -1706,32 +2263,32 @@ ROM_START( harddrivb6 )
ROM_LOAD16_BYTE( "136052-5911.200x", 0x0c0000, 0x010000, CRC(564ac427) SHA1(f71d5a8d06681fc96e753e7cd18e16b32ba6907f) )
ROM_LOAD16_BYTE( "136052-5919.210x", 0x0c0001, 0x010000, CRC(752d9a6d) SHA1(28edb54c7217f5ccdcb2b5614d4e8c2290d96b2a) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddrivj6 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-6805.200r", 0x000000, 0x010000, CRC(e61ce7af) SHA1(38115a5a44f330abf1f7d684e630a1a232769f7c) )
ROM_LOAD16_BYTE( "136052-6813.210r", 0x000001, 0x010000, CRC(adfef1e7) SHA1(dc1bdb5ce9143a94d734ce9ecdf9195589608b65) )
ROM_LOAD16_BYTE( "136052-6806.200s", 0x020000, 0x010000, CRC(bd68696e) SHA1(33b173f210183fef84c4c04b3bff515d79b4924d) )
@@ -1743,32 +2300,32 @@ ROM_START( harddrivj6 )
ROM_LOAD16_BYTE( "136052-6811.200x", 0x0c0000, 0x010000, CRC(7bc5c8da) SHA1(ac228d6391bc9ac4238f953f9ad6eb93b3ff9958) )
ROM_LOAD16_BYTE( "136052-6819.210x", 0x0c0001, 0x010000, CRC(368b7e17) SHA1(e8742edec6961173df4450073a427cf3b9f3ff57) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddrivb5 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-5905.200r", 0x000000, 0x010000, CRC(6dd28313) SHA1(c1f860470070dad7d8865aca508ecf5eb92fa8c5) )
ROM_LOAD16_BYTE( "136052-5913.210r", 0x000001, 0x010000, CRC(2e5a006f) SHA1(8a2da1868bbad54b33e993f5bf9ba61186caef5b) )
ROM_LOAD16_BYTE( "136052-5906.200s", 0x020000, 0x010000, CRC(206b59db) SHA1(2bbae0ac4af9cdda44d6d8b5fcf6b3b1c3103796) )
@@ -1778,32 +2335,32 @@ ROM_START( harddrivb5 )
ROM_LOAD16_BYTE( "136052-5911.200x", 0x0c0000, 0x010000, CRC(564ac427) SHA1(f71d5a8d06681fc96e753e7cd18e16b32ba6907f) )
ROM_LOAD16_BYTE( "136052-5919.210x", 0x0c0001, 0x010000, CRC(752d9a6d) SHA1(28edb54c7217f5ccdcb2b5614d4e8c2290d96b2a) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddrivg4 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-4205.200r", 0x000000, 0x010000, CRC(94db6d9e) SHA1(98a509daacb9f18c7171246d1782d09a6456e241) )
ROM_LOAD16_BYTE( "136052-4213.210r", 0x000001, 0x010000, CRC(cacaf671) SHA1(7bd0f531402b2f10cb00bb8f7ca0b62eed23bffa) )
ROM_LOAD16_BYTE( "136052-4206.200s", 0x020000, 0x010000, CRC(70f78c50) SHA1(6baed202937c455c7c6e4baa74ee7858673a37fc) )
@@ -1813,32 +2370,32 @@ ROM_START( harddrivg4 )
ROM_LOAD16_BYTE( "136052-4211.200x", 0x0c0000, 0x010000, CRC(20d1b3d5) SHA1(b7c4a2cf6ba729530c24980704989b3a3efb343b) )
ROM_LOAD16_BYTE( "136052-4219.210x", 0x0c0001, 0x010000, CRC(105e7052) SHA1(a8d13c35418e58410cfd74c243b74963f1553068) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddriv3 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-3105.200r", 0x000000, 0x010000, CRC(a42a2c69) SHA1(66233f25533106aab69df21db69f96368f1399a9) )
ROM_LOAD16_BYTE( "136052-3113.210r", 0x000001, 0x010000, CRC(358995b5) SHA1(f18c0da58ec7befefc61d5f0d35787516b775c92) )
ROM_LOAD16_BYTE( "136052-2106.200s", 0x020000, 0x010000, CRC(a668db0e) SHA1(8ac405a0ba12bac9acabdb64970608d1b2b1a99b) )
@@ -1848,32 +2405,32 @@ ROM_START( harddriv3 )
ROM_LOAD16_BYTE( "136052-1111.200x", 0x0c0000, 0x010000, CRC(e1f455a3) SHA1(68462a33bbfcc526d8f27ec082e55937a26ead8b) )
ROM_LOAD16_BYTE( "136052-1119.210x", 0x0c0001, 0x010000, CRC(a7fc3aaa) SHA1(ce8d4a8f83e25008cafa2a2242ed26b90b8517da) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddriv2 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-2105.200r", 0x000000, 0x010000, CRC(967903b9) SHA1(4363f3b3f08d00819f47a3682462fd0e5dc4e0ac) )
ROM_LOAD16_BYTE( "136052-2113.210r", 0x000001, 0x010000, CRC(c87f7067) SHA1(3d85d2ba818739ed05086502cd8e57438251b20b) )
ROM_LOAD16_BYTE( "136052-2106.200s", 0x020000, 0x010000, CRC(a668db0e) SHA1(8ac405a0ba12bac9acabdb64970608d1b2b1a99b) )
@@ -1883,32 +2440,32 @@ ROM_START( harddriv2 )
ROM_LOAD16_BYTE( "136052-1111.200x", 0x0c0000, 0x010000, CRC(e1f455a3) SHA1(68462a33bbfcc526d8f27ec082e55937a26ead8b) )
ROM_LOAD16_BYTE( "136052-1119.210x", 0x0c0001, 0x010000, CRC(a7fc3aaa) SHA1(ce8d4a8f83e25008cafa2a2242ed26b90b8517da) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddriv1 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136052-1105.200r", 0x000000, 0x010000, CRC(1dfda789) SHA1(83be0d66fe21e974f8d4582b0ab60245f1db7e55) )
ROM_LOAD16_BYTE( "136052-1113.210r", 0x000001, 0x010000, CRC(db2f6593) SHA1(864ea5604cea2507b180a91b35e349d3924bf9bc) )
ROM_LOAD16_BYTE( "136052-1106.200s", 0x020000, 0x010000, CRC(e82210fd) SHA1(916e674017f5187531c2de7961791c060f8412c7) )
@@ -1918,32 +2475,32 @@ ROM_START( harddriv1 )
ROM_LOAD16_BYTE( "136052-1111.200x", 0x0c0000, 0x010000, CRC(e1f455a3) SHA1(68462a33bbfcc526d8f27ec082e55937a26ead8b) )
ROM_LOAD16_BYTE( "136052-1119.210x", 0x0c0001, 0x010000, CRC(a7fc3aaa) SHA1(ce8d4a8f83e25008cafa2a2242ed26b90b8517da) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-1121.45n", 0x000001, 0x008000, CRC(04316e6f) SHA1(9836b8d16cebd6013834432c9e5a5aca0050c889) )
ROM_LOAD16_BYTE( "136052-1122.70n", 0x000000, 0x008000, CRC(0c446eec) SHA1(53576c2800484d098cf250ab9a865314167c9d96) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-1125.45a", 0x020000, 0x010000, CRC(ebf391af) SHA1(3c4097db8d625b994b39d46fe652585a74378ca0) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddriv.200e", 0x000000, 0x000800, CRC(aed020f7) SHA1(494fc2eb74b4924c07f18bef5e69efd5476deec2) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddriv.210e", 0x000000, 0x000800, CRC(4a91835b) SHA1(96f0087ba7e577748758a2fbe61225048862bb65) )
ROM_END
ROM_START( harddrivc )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136068-2102.200r", 0x000000, 0x010000, CRC(6252048b) SHA1(64caf3adfad6965768fc6d39a8bcde62fe6dfa9e) )
ROM_LOAD16_BYTE( "136068-2101.210r", 0x000001, 0x010000, CRC(4805ba06) SHA1(e0c2d935ced05b8162f2925520422184a81d5294) )
ROM_LOAD16_BYTE( "136068-2104.200s", 0x020000, 0x010000, CRC(8246f945) SHA1(633b6c9a5d3e33d3035ccdb7b6ad883c334a4db9) )
@@ -1953,32 +2510,32 @@ ROM_START( harddrivc )
ROM_LOAD16_BYTE( "136068-1114.200x", 0x0c0000, 0x010000, CRC(293c153b) SHA1(6300a50766b19ad203b5c7da28d51bf22054b39e) )
ROM_LOAD16_BYTE( "136068-1113.210x", 0x0c0001, 0x010000, CRC(5630390d) SHA1(cd1932cee70cddd1fb2110d1aeebb573a13f1339) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-3122.70n", 0x000000, 0x008000, CRC(3f20a396) SHA1(f34819796087c543083f6baac6c778e0cdb7340a) )
ROM_LOAD16_BYTE( "136052-3121.45n", 0x000001, 0x008000, CRC(6346bca3) SHA1(707dc86305142722a4757ba431cf6c7e9cf116b3) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddrivc.200e", 0x000000, 0x000800, CRC(560a0106) SHA1(7295a4f1255869c43c3cf146ddebaea62c30b850) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddrivc.210e", 0x000000, 0x000800, CRC(208bba53) SHA1(c9a36015a66917df528b84d20d255b6b96a90e76) )
ROM_END
ROM_START( harddrivcg )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136068-2202.200r", 0x000000, 0x010000, CRC(ea09bdc2) SHA1(9e38ed0a47a2bfb6b80cbf1e0b3e891b94f30c10) )
ROM_LOAD16_BYTE( "136068-2201.210r", 0x000001, 0x010000, CRC(a5e9947f) SHA1(75973346c9399752d8ae82fbada3a24c6d5fec94) )
ROM_LOAD16_BYTE( "136068-2204.200s", 0x020000, 0x010000, CRC(65792c94) SHA1(89e93cf0d2afc4bd8a01155ba908c9aa7149dc78) )
@@ -1988,32 +2545,32 @@ ROM_START( harddrivcg )
ROM_LOAD16_BYTE( "136068-1114.200x", 0x0c0000, 0x010000, CRC(293c153b) SHA1(6300a50766b19ad203b5c7da28d51bf22054b39e) )
ROM_LOAD16_BYTE( "136068-1113.210x", 0x0c0001, 0x010000, CRC(5630390d) SHA1(cd1932cee70cddd1fb2110d1aeebb573a13f1339) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-3122.70n", 0x000000, 0x008000, CRC(3f20a396) SHA1(f34819796087c543083f6baac6c778e0cdb7340a) )
ROM_LOAD16_BYTE( "136052-3121.45n", 0x000001, 0x008000, CRC(6346bca3) SHA1(707dc86305142722a4757ba431cf6c7e9cf116b3) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddrivc.200e", 0x000000, 0x000800, CRC(560a0106) SHA1(7295a4f1255869c43c3cf146ddebaea62c30b850) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddrivc.210e", 0x000000, 0x000800, CRC(208bba53) SHA1(c9a36015a66917df528b84d20d255b6b96a90e76) )
ROM_END
ROM_START( harddrivcb )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136068-2102.200r", 0x000000, 0x010000, CRC(6252048b) SHA1(64caf3adfad6965768fc6d39a8bcde62fe6dfa9e) )
ROM_LOAD16_BYTE( "136068-2101.210r", 0x000001, 0x010000, CRC(4805ba06) SHA1(e0c2d935ced05b8162f2925520422184a81d5294) )
ROM_LOAD16_BYTE( "136068-2104.200s", 0x020000, 0x010000, CRC(8246f945) SHA1(633b6c9a5d3e33d3035ccdb7b6ad883c334a4db9) )
@@ -2023,32 +2580,32 @@ ROM_START( harddrivcb )
ROM_LOAD16_BYTE( "136068-2914.200x", 0x0c0000, 0x010000, CRC(dd2998a5) SHA1(36c71549d114309b9072ced83ed149cad1d23646) )
ROM_LOAD16_BYTE( "136068-2913.210x", 0x0c0001, 0x010000, CRC(a211754d) SHA1(b93d4867f664caa76f2170ef0934194de29a5516) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-3122.70n", 0x000000, 0x008000, CRC(3f20a396) SHA1(f34819796087c543083f6baac6c778e0cdb7340a) )
ROM_LOAD16_BYTE( "136052-3121.45n", 0x000001, 0x008000, CRC(6346bca3) SHA1(707dc86305142722a4757ba431cf6c7e9cf116b3) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddrivc.200e", 0x000000, 0x000800, CRC(560a0106) SHA1(7295a4f1255869c43c3cf146ddebaea62c30b850) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddrivc.210e", 0x000000, 0x000800, CRC(208bba53) SHA1(c9a36015a66917df528b84d20d255b6b96a90e76) )
ROM_END
ROM_START( harddrivc1 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136068-1102.200r", 0x000000, 0x010000, CRC(f1d3779f) SHA1(1ab84fc920f6810aa7c1af80b0472ea17d07e58b) )
ROM_LOAD16_BYTE( "136068-1101.210r", 0x000001, 0x010000, CRC(3ea4d3d9) SHA1(3901e8c07bed35bf6a55ab92f5c7eb9335675792) )
ROM_LOAD16_BYTE( "136068-1104.200s", 0x020000, 0x010000, CRC(34133511) SHA1(71c56607cecd379761f700d181f6e91e7bb6fdfc) )
@@ -2058,32 +2615,32 @@ ROM_START( harddrivc1 )
ROM_LOAD16_BYTE( "136068-1114.200x", 0x0c0000, 0x010000, CRC(293c153b) SHA1(6300a50766b19ad203b5c7da28d51bf22054b39e) )
ROM_LOAD16_BYTE( "136068-1113.210x", 0x0c0001, 0x010000, CRC(5630390d) SHA1(cd1932cee70cddd1fb2110d1aeebb573a13f1339) )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136052-3122.70n", 0x000000, 0x008000, CRC(3f20a396) SHA1(f34819796087c543083f6baac6c778e0cdb7340a) )
ROM_LOAD16_BYTE( "136052-3121.45n", 0x000001, 0x008000, CRC(6346bca3) SHA1(707dc86305142722a4757ba431cf6c7e9cf116b3) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136052-1101.10h", 0x000000, 0x010000, CRC(1b77f171) SHA1(10434e492e4e9de5cd8543271914d5ba37c52b50) )
ROM_LOAD16_BYTE( "136052-1103.10k", 0x000001, 0x010000, CRC(e50bec32) SHA1(30c504c730e8e568e78e06c756a23b8923e85b4b) )
ROM_LOAD16_BYTE( "136052-1102.10j", 0x020000, 0x010000, CRC(998d3da2) SHA1(6ed560c2132e33858c91b1f4ab0247399665b5fd) )
ROM_LOAD16_BYTE( "136052-1104.10l", 0x020001, 0x010000, CRC(bc59a2b7) SHA1(7dfde5bbaa0cf349b1ef5d6b076baded7330376a) )
- ROM_REGION( 0x40000, "serialroms", 0 ) /* 4*128k for audio serial ROMs */
+ ROM_REGION( 0x40000, "mainpcb:serialroms", 0 ) /* 4*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "harddrivc.200e", 0x000000, 0x000800, CRC(560a0106) SHA1(7295a4f1255869c43c3cf146ddebaea62c30b850) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "harddrivc.210e", 0x000000, 0x000800, CRC(208bba53) SHA1(c9a36015a66917df528b84d20d255b6b96a90e76) )
ROM_END
ROM_START( stunrun )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-6104.200s", 0x020000, 0x010000, CRC(f469f91c) SHA1(488ea6251ff4028edaf00bb1ded74cefdc71a373) )
@@ -2097,11 +2654,11 @@ ROM_START( stunrun )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2109,22 +2666,22 @@ ROM_START( stunrun )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrunj )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-3402.200r", 0x000000, 0x010000, CRC(d8d56923) SHA1(248b22dab791c2d9ee6e6097dac9f3bf85d572be) )
ROM_LOAD16_BYTE( "136070-3401.210r", 0x000001, 0x010000, CRC(ce11126c) SHA1(cf27b56103048cc23dc6763763b7419583a27c76) )
ROM_LOAD16_BYTE( "136070-7404.200s", 0x020000, 0x010000, CRC(81da3e74) SHA1(38864aac479a8927d168ee977fd0981a7926d0fd) )
@@ -2138,11 +2695,11 @@ ROM_START( stunrunj )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2150,22 +2707,22 @@ ROM_START( stunrunj )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrun5 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-5104.200s", 0x020000, 0x010000, CRC(d5c601fe) SHA1(ab61e11723ab9b92fb98b6f8e520a7b323caae64) )
@@ -2179,11 +2736,11 @@ ROM_START( stunrun5 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2191,22 +2748,22 @@ ROM_START( stunrun5 )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrune )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-5004.200s", 0x020000, 0x010000, CRC(c2e4bde8) SHA1(766242455b0be6dc7b698cc6fe86d90991ca2e0a) )
@@ -2220,11 +2777,11 @@ ROM_START( stunrune )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2232,22 +2789,22 @@ ROM_START( stunrune )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrun4 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-4104.200s", 0x020000, 0x010000, CRC(62c7700b) SHA1(31d7a39df7353e60b806c204bfdd75c06b17c984) )
@@ -2261,11 +2818,11 @@ ROM_START( stunrun4 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2273,22 +2830,22 @@ ROM_START( stunrun4 )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrun3 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-2104.200s", 0x020000, 0x010000, CRC(6acdeeaa) SHA1(a4cbe648ad2fee3bb945fbc8055b76be1f5c03d1) )
@@ -2302,11 +2859,11 @@ ROM_START( stunrun3 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2314,22 +2871,22 @@ ROM_START( stunrun3 )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrun3e )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-3004.200s", 0x020000, 0x010000, CRC(d9474678) SHA1(090b78f9e9d2ecf4218821fc102861df1e27d95a) )
@@ -2343,11 +2900,11 @@ ROM_START( stunrun3e )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2355,22 +2912,22 @@ ROM_START( stunrun3e )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrun2 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-2104.200s", 0x020000, 0x010000, CRC(6acdeeaa) SHA1(a4cbe648ad2fee3bb945fbc8055b76be1f5c03d1) )
@@ -2384,11 +2941,11 @@ ROM_START( stunrun2 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2396,22 +2953,22 @@ ROM_START( stunrun2 )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrun2e )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-2004.200s", 0x020000, 0x010000, CRC(30303326) SHA1(49a279b5b02af97395dfb8c66410319a807aa4b9) )
@@ -2425,11 +2982,11 @@ ROM_START( stunrun2e )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2437,22 +2994,22 @@ ROM_START( stunrun2e )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrun0 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "136070-0304.200s", 0x020000, 0x010000, CRC(e7968b1b) SHA1(f2e5b4f64e553041abbe2610968f59cca425a4d4) )
@@ -2466,11 +3023,11 @@ ROM_START( stunrun0 )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2478,22 +3035,22 @@ ROM_START( stunrun0 )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( stunrunp )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136070-2102.200r", 0x000000, 0x010000, CRC(e0ed54d8) SHA1(15850568d8308b6499cbe55b5d8308041d906a29) )
ROM_LOAD16_BYTE( "136070-2101.210r", 0x000001, 0x010000, CRC(3008bcf8) SHA1(9d3a20b639969bab68441f76467ed60e395c10e3) )
ROM_LOAD16_BYTE( "prog-hi0.s20", 0x020000, 0x010000, CRC(0be15a99) SHA1(52b152b23af305e95765c72052bb7aba846510d6) )
@@ -2507,11 +3064,11 @@ ROM_START( stunrunp )
ROM_LOAD16_BYTE( "136070-2112.200w", 0x0a0000, 0x010000, CRC(3f896aaf) SHA1(817136ddc37566108de15f6bfedc6e0da13a2df2) )
ROM_LOAD16_BYTE( "136070-2111.210w", 0x0a0001, 0x010000, CRC(47f010ad) SHA1(a2587ce1d01c78f1d757fb3e4512be9655d17f9c) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136070-2123.10c", 0x010000, 0x004000, CRC(121ab09a) SHA1(c26b8ddbcb011416e6ab695980d2cf37e672e973) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136070-2121.90h", 0x000000, 0x010000, CRC(0ebf8e58) SHA1(b6bf3e020b29a34ef3eaca6b5e1f17bb89fdc476) )
ROM_LOAD16_BYTE( "136070-2118.90k", 0x000001, 0x010000, CRC(fb98abaf) SHA1(6a141effee644f34634b57d1fe4c03f56981f966) )
ROM_LOAD16_BYTE( "136070-2122.10h", 0x020000, 0x010000, CRC(bd5380bd) SHA1(e1e2b3c9f9bfc988f0dcc9a9f520f51957e13a97) )
@@ -2519,22 +3076,22 @@ ROM_START( stunrunp )
ROM_LOAD16_BYTE( "136070-2120.9h", 0x040000, 0x010000, CRC(55a30976) SHA1(045a04d3d24e783a6a643cab08e8974ee5dc2128) )
ROM_LOAD16_BYTE( "136070-2117.9k", 0x040001, 0x010000, CRC(d4a9696d) SHA1(574e5f3758ac2e18423ae350e8509aa135ca6da0) )
- ROM_REGION( 0x40000, "jsa:oki1", 0 ) /* 256k for ADPCM samples */
+ ROM_REGION( 0x40000, "mainpcb:jsa:oki1", 0 ) /* 256k for ADPCM samples */
ROM_LOAD( "136070-2124.1fh", 0x000000, 0x010000, CRC(4dc14fe8) SHA1(c7cc00715f6687ced9d69ec793d6e9d4bc1b5287) )
ROM_LOAD( "136070-2125.1ef", 0x010000, 0x010000, CRC(cbdabbcc) SHA1(4d102a5677d96e68d27c1960dc3a237ae6751c2f) )
ROM_LOAD( "136070-2126.1de", 0x020000, 0x010000, CRC(b973d9d1) SHA1(a74a3c981497a9c5557f793d49381a9b776cb025) )
ROM_LOAD( "136070-2127.1cd", 0x030000, 0x010000, CRC(3e419f4e) SHA1(e382e047f02591a934a53e5fbf07cccf285abb29) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( racedriv )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-5002.200r", 0x000000, 0x010000, CRC(0a78adca) SHA1(a44722340ff7c99253107be092bec2e87cae340b) )
ROM_LOAD16_BYTE( "136077-5001.210r", 0x000001, 0x010000, CRC(74b4cd49) SHA1(48fc4344c092c9eb14249874ac305b87bba53e7e) )
ROM_LOAD16_BYTE( "136077-5004.200s", 0x020000, 0x010000, CRC(c0cbdf4e) SHA1(8c7f4f79e90dc7206d9d83d588822000a7a53c52) )
@@ -2552,40 +3109,40 @@ ROM_START( racedriv )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-4030.30e", 0x000000, 0x010000, CRC(4207c784) SHA1(5ec410bd75c281ac57d9856d08ce65431f3af994) )
ROM_LOAD16_BYTE( "136077-4031.10e", 0x000001, 0x010000, CRC(796486b3) SHA1(937e27c012c5fb457bee1b43fc8e075b3e9405b4) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedrivb )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-5002.200r", 0x000000, 0x010000, CRC(0a78adca) SHA1(a44722340ff7c99253107be092bec2e87cae340b) )
ROM_LOAD16_BYTE( "136077-5001.210r", 0x000001, 0x010000, CRC(74b4cd49) SHA1(48fc4344c092c9eb14249874ac305b87bba53e7e) )
ROM_LOAD16_BYTE( "136077-5004.200s", 0x020000, 0x010000, CRC(c0cbdf4e) SHA1(8c7f4f79e90dc7206d9d83d588822000a7a53c52) )
@@ -2603,40 +3160,40 @@ ROM_START( racedrivb )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-4030.30e", 0x000000, 0x010000, CRC(4207c784) SHA1(5ec410bd75c281ac57d9856d08ce65431f3af994) )
ROM_LOAD16_BYTE( "136077-4031.10e", 0x000001, 0x010000, CRC(796486b3) SHA1(937e27c012c5fb457bee1b43fc8e075b3e9405b4) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedrivg )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-5202.200r", 0x000000, 0x010000, CRC(69016b69) SHA1(8da1314b4b6da6fc95479b9034190181bf778b25) )
ROM_LOAD16_BYTE( "136077-5201.210r", 0x000001, 0x010000, CRC(439a1ce7) SHA1(fc376c654c494d2895bcf85d5d8a9d6f17b6887e) )
ROM_LOAD16_BYTE( "136077-5204.200s", 0x020000, 0x010000, CRC(15df2b3d) SHA1(49235687b7be684dcd491b854f80c1d849894956) )
@@ -2654,40 +3211,40 @@ ROM_START( racedrivg )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-4030.30e", 0x000000, 0x010000, CRC(4207c784) SHA1(5ec410bd75c281ac57d9856d08ce65431f3af994) )
ROM_LOAD16_BYTE( "136077-4031.10e", 0x000001, 0x010000, CRC(796486b3) SHA1(937e27c012c5fb457bee1b43fc8e075b3e9405b4) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedriv4 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-4002.200r", 0x000000, 0x010000, CRC(afe1beb5) SHA1(66dba58f2a02eaa2d6306e53adffb662a8021031) )
ROM_LOAD16_BYTE( "136077-4001.210r", 0x000001, 0x010000, CRC(8a449e44) SHA1(03800b96a3992baa4bd37db20e559e08b12e55d1) )
ROM_LOAD16_BYTE( "136077-4004.200s", 0x020000, 0x010000, CRC(6d886150) SHA1(514de55de66a2b7fb14d6e2d896911e1b1af62f2) )
@@ -2705,40 +3262,40 @@ ROM_START( racedriv4 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-4030.30e", 0x000000, 0x010000, CRC(4207c784) SHA1(5ec410bd75c281ac57d9856d08ce65431f3af994) )
ROM_LOAD16_BYTE( "136077-4031.10e", 0x000001, 0x010000, CRC(796486b3) SHA1(937e27c012c5fb457bee1b43fc8e075b3e9405b4) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedrivb4 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-4002.200r", 0x000000, 0x010000, CRC(afe1beb5) SHA1(66dba58f2a02eaa2d6306e53adffb662a8021031) )
ROM_LOAD16_BYTE( "136077-4001.210r", 0x000001, 0x010000, CRC(8a449e44) SHA1(03800b96a3992baa4bd37db20e559e08b12e55d1) )
ROM_LOAD16_BYTE( "136077-4004.200s", 0x020000, 0x010000, CRC(6d886150) SHA1(514de55de66a2b7fb14d6e2d896911e1b1af62f2) )
@@ -2756,40 +3313,40 @@ ROM_START( racedrivb4 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-4030.30e", 0x000000, 0x010000, CRC(4207c784) SHA1(5ec410bd75c281ac57d9856d08ce65431f3af994) )
ROM_LOAD16_BYTE( "136077-4031.10e", 0x000001, 0x010000, CRC(796486b3) SHA1(937e27c012c5fb457bee1b43fc8e075b3e9405b4) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedrivg4 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-4202.200r", 0x000000, 0x010000, CRC(a8c7e15e) SHA1(6aa4b819e5c8562c8eef92a411b2dc91ed35ae4c) )
ROM_LOAD16_BYTE( "136077-4201.210r", 0x000001, 0x010000, CRC(1dfa4df2) SHA1(1db0676f0ff1e7996c9791b041d9cd4ca9c70261) )
ROM_LOAD16_BYTE( "136077-4204.200s", 0x020000, 0x010000, CRC(29eea8c1) SHA1(1a8020efc0b963bbd05bd33dc3176db7c3234fcc) )
@@ -2807,40 +3364,40 @@ ROM_START( racedrivg4 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-4030.30e", 0x000000, 0x010000, CRC(4207c784) SHA1(5ec410bd75c281ac57d9856d08ce65431f3af994) )
ROM_LOAD16_BYTE( "136077-4031.10e", 0x000001, 0x010000, CRC(796486b3) SHA1(937e27c012c5fb457bee1b43fc8e075b3e9405b4) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedriv3 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-3002.200r", 0x000000, 0x010000, CRC(78771253) SHA1(88fdae99eb4feb40db8ad171b3435315db3adedb) )
ROM_LOAD16_BYTE( "136077-3001.210r", 0x000001, 0x010000, CRC(c75373a4) SHA1(d2f14190218cfedf4478806a26c77edd4d7c73eb) )
ROM_LOAD16_BYTE( "136077-2004.200s", 0x020000, 0x010000, CRC(4eb19582) SHA1(52359d7839f3459aec4fdc16a659a29fa60feee4) )
@@ -2858,40 +3415,40 @@ ROM_START( racedriv3 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-1030.30e", 0x000000, 0x010000, CRC(ff575b3d) SHA1(7f2202db7ec9dac06499c9535b4852defb192eb3) )
ROM_LOAD16_BYTE( "136077-1031.10e", 0x000001, 0x010000, CRC(2ae2ac35) SHA1(e2a050a6e24dc6fef86b3556b69b2c3e2993febc) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedriv2 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-2002.200r", 0x000000, 0x010000, CRC(6b440e10) SHA1(8074a1de01e2cdc497a51339f9c05329d6f540b0) )
ROM_LOAD16_BYTE( "136077-2001.210r", 0x000001, 0x010000, CRC(eee12973) SHA1(0cd2e88c431d08fba5a73c903327f39f8692f3aa) )
ROM_LOAD16_BYTE( "136077-2004.200s", 0x020000, 0x010000, CRC(4eb19582) SHA1(52359d7839f3459aec4fdc16a659a29fa60feee4) )
@@ -2909,40 +3466,40 @@ ROM_START( racedriv2 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-1030.30e", 0x000000, 0x010000, CRC(ff575b3d) SHA1(7f2202db7ec9dac06499c9535b4852defb192eb3) )
ROM_LOAD16_BYTE( "136077-1031.10e", 0x000001, 0x010000, CRC(2ae2ac35) SHA1(e2a050a6e24dc6fef86b3556b69b2c3e2993febc) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedriv1 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-1002.200r", 0x000000, 0x010000, CRC(d39f6d53) SHA1(c278cd4109a65304a21dd1d8ba27375713a8b107) )
ROM_LOAD16_BYTE( "136077-1001.210r", 0x000001, 0x010000, CRC(e29e011c) SHA1(7044e7f9c8551309b5867a06672796411007a427) )
ROM_LOAD16_BYTE( "136077-1004.200s", 0x020000, 0x010000, CRC(809831e8) SHA1(681160deceff4df0f000c23f8514086dbbcc0c8d) )
@@ -2960,40 +3517,40 @@ ROM_START( racedriv1 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-1030.30e", 0x000000, 0x010000, CRC(ff575b3d) SHA1(7f2202db7ec9dac06499c9535b4852defb192eb3) )
ROM_LOAD16_BYTE( "136077-1031.10e", 0x000001, 0x010000, CRC(2ae2ac35) SHA1(e2a050a6e24dc6fef86b3556b69b2c3e2993febc) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedrivg1 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-1202.200r", 0x000000, 0x010000, CRC(bd363903) SHA1(8f0937725adabf5ee9e0ac015c83916e2575670a) )
ROM_LOAD16_BYTE( "136077-1201.210r", 0x000001, 0x010000, CRC(748c3be4) SHA1(ddf149f333d23e9c782ae447f6fb3f780680b3f5) )
ROM_LOAD16_BYTE( "136077-1204.200s", 0x020000, 0x010000, CRC(aef103bb) SHA1(52831858d3a45ad00e156c5b2a11e7fddf06bead) )
@@ -3011,40 +3568,40 @@ ROM_START( racedrivg1 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-2021.10h", 0x000000, 0x010000, CRC(8b2a98da) SHA1(264b7ec218e423ea85c54e586f8ff091f033d472) )
ROM_LOAD16_BYTE( "136077-2023.10k", 0x000001, 0x010000, CRC(c6d83d38) SHA1(e42c186a7fc0d88982b26eafdb834406b4ed3c8a) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-1030.30e", 0x000000, 0x010000, CRC(ff575b3d) SHA1(7f2202db7ec9dac06499c9535b4852defb192eb3) )
ROM_LOAD16_BYTE( "136077-1031.10e", 0x000001, 0x010000, CRC(2ae2ac35) SHA1(e2a050a6e24dc6fef86b3556b69b2c3e2993febc) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedrivb1 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136077-2002.200r", 0x000000, 0x010000, CRC(6b440e10) SHA1(8074a1de01e2cdc497a51339f9c05329d6f540b0) )
ROM_LOAD16_BYTE( "136077-2001.210r", 0x000001, 0x010000, CRC(eee12973) SHA1(0cd2e88c431d08fba5a73c903327f39f8692f3aa) )
ROM_LOAD16_BYTE( "136077-1104.200s", 0x020000, 0x010000, CRC(a9495f53) SHA1(68e7d983c0e1a84f5ad0743a230e6126169a6fd6) )
@@ -3062,40 +3619,40 @@ ROM_START( racedrivb1 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136077-1030.30e", 0x000000, 0x010000, CRC(ff575b3d) SHA1(7f2202db7ec9dac06499c9535b4852defb192eb3) )
ROM_LOAD16_BYTE( "136077-1031.10e", 0x000001, 0x010000, CRC(2ae2ac35) SHA1(e2a050a6e24dc6fef86b3556b69b2c3e2993febc) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
ROM_END
ROM_START( racedrivc )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136078-5002.200r", 0x000000, 0x010000, CRC(ae8f79bd) SHA1(054f2d1948d6d03832c4557c3dd7667c0784716d) )
ROM_LOAD16_BYTE( "136078-5001.210r", 0x000001, 0x010000, CRC(ad896e7f) SHA1(7b047f0c972fac075db00faf19cdf9ccdcef5c63) )
ROM_LOAD16_BYTE( "136078-5004.200s", 0x020000, 0x010000, CRC(b8650bee) SHA1(a9905081e622e4a4fcec9aa08b87566ecdb9198b) )
@@ -3113,40 +3670,40 @@ ROM_START( racedrivc )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136078-1030.30e", 0x000000, 0x010000, CRC(d355a1c2) SHA1(6b0fb52dbecbe574959739f49c3c0fccdd5cebdb) )
ROM_LOAD16_BYTE( "136078-1031.10e", 0x000001, 0x010000, CRC(18fd5f44) SHA1(1c3bd780b72cfa61bcbd82683da18b4ee8d03a6d) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedrivc.200e", 0x000000, 0x000800, CRC(2c0f7715) SHA1(79cf3a6cd48fc4a86cd94e823243fc0cd4bffa57) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedrivc.210e", 0x000000, 0x000800, CRC(2e843742) SHA1(bc73ab0270cdf45aaa1a19703e8c3aa916578ef0) )
ROM_END
ROM_START( racedrivcb )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136078-5002.200r", 0x000000, 0x010000, CRC(ae8f79bd) SHA1(054f2d1948d6d03832c4557c3dd7667c0784716d) )
ROM_LOAD16_BYTE( "136078-5001.210r", 0x000001, 0x010000, CRC(ad896e7f) SHA1(7b047f0c972fac075db00faf19cdf9ccdcef5c63) )
ROM_LOAD16_BYTE( "136078-5004.200s", 0x020000, 0x010000, CRC(b8650bee) SHA1(a9905081e622e4a4fcec9aa08b87566ecdb9198b) )
@@ -3164,40 +3721,40 @@ ROM_START( racedrivcb )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136078-1030.30e", 0x000000, 0x010000, CRC(d355a1c2) SHA1(6b0fb52dbecbe574959739f49c3c0fccdd5cebdb) )
ROM_LOAD16_BYTE( "136078-1031.10e", 0x000001, 0x010000, CRC(18fd5f44) SHA1(1c3bd780b72cfa61bcbd82683da18b4ee8d03a6d) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedrivc.200e", 0x000000, 0x000800, CRC(2c0f7715) SHA1(79cf3a6cd48fc4a86cd94e823243fc0cd4bffa57) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedrivc.210e", 0x000000, 0x000800, CRC(2e843742) SHA1(bc73ab0270cdf45aaa1a19703e8c3aa916578ef0) )
ROM_END
ROM_START( racedrivcg )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136078-5202.200r", 0x000000, 0x010000, CRC(c37b5281) SHA1(1ff7a879853dd1e10881fd56e8ae0962676ef319) )
ROM_LOAD16_BYTE( "136078-5201.210r", 0x000001, 0x010000, CRC(80072dad) SHA1(ba33465f639431cf6e9ce377ed31e538a0304dc5) )
ROM_LOAD16_BYTE( "136078-5204.200s", 0x020000, 0x010000, CRC(5d45fbd2) SHA1(5279c814c2876c642630fed5c114eccea6d703b0) )
@@ -3215,40 +3772,40 @@ ROM_START( racedrivcg )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136078-1030.30e", 0x000000, 0x010000, CRC(d355a1c2) SHA1(6b0fb52dbecbe574959739f49c3c0fccdd5cebdb) )
ROM_LOAD16_BYTE( "136078-1031.10e", 0x000001, 0x010000, CRC(18fd5f44) SHA1(1c3bd780b72cfa61bcbd82683da18b4ee8d03a6d) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedrivc.200e", 0x000000, 0x000800, CRC(2c0f7715) SHA1(79cf3a6cd48fc4a86cd94e823243fc0cd4bffa57) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedrivc.210e", 0x000000, 0x000800, CRC(2e843742) SHA1(bc73ab0270cdf45aaa1a19703e8c3aa916578ef0) )
ROM_END
ROM_START( racedrivc4 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136078-4002.200r", 0x000000, 0x010000, CRC(d6522b97) SHA1(0e4c4ce9f6147cc3878a3f1e60cf58f00bfe9e4c) )
ROM_LOAD16_BYTE( "136078-4001.210r", 0x000001, 0x010000, CRC(d658a8ed) SHA1(59d823d8150de62ba5c4fddf87584bd2044e87f7) )
ROM_LOAD16_BYTE( "136078-4004.200s", 0x020000, 0x010000, CRC(c8520b01) SHA1(f0bd0505cbf24f7e43dc2e775ecbbf0db5419b6e) )
@@ -3266,40 +3823,40 @@ ROM_START( racedrivc4 )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136078-1030.30e", 0x000000, 0x010000, CRC(d355a1c2) SHA1(6b0fb52dbecbe574959739f49c3c0fccdd5cebdb) )
ROM_LOAD16_BYTE( "136078-1031.10e", 0x000001, 0x010000, CRC(18fd5f44) SHA1(1c3bd780b72cfa61bcbd82683da18b4ee8d03a6d) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedrivc.200e", 0x000000, 0x000800, CRC(2c0f7715) SHA1(79cf3a6cd48fc4a86cd94e823243fc0cd4bffa57) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedrivc.210e", 0x000000, 0x000800, CRC(2e843742) SHA1(bc73ab0270cdf45aaa1a19703e8c3aa916578ef0) )
ROM_END
ROM_START( racedrivcb4 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136078-4002.200r", 0x000000, 0x010000, CRC(d6522b97) SHA1(0e4c4ce9f6147cc3878a3f1e60cf58f00bfe9e4c) )
ROM_LOAD16_BYTE( "136078-4001.210r", 0x000001, 0x010000, CRC(d658a8ed) SHA1(59d823d8150de62ba5c4fddf87584bd2044e87f7) )
ROM_LOAD16_BYTE( "136078-4004.200s", 0x020000, 0x010000, CRC(c8520b01) SHA1(f0bd0505cbf24f7e43dc2e775ecbbf0db5419b6e) )
@@ -3317,40 +3874,40 @@ ROM_START( racedrivcb4 )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136078-1030.30e", 0x000000, 0x010000, CRC(d355a1c2) SHA1(6b0fb52dbecbe574959739f49c3c0fccdd5cebdb) )
ROM_LOAD16_BYTE( "136078-1031.10e", 0x000001, 0x010000, CRC(18fd5f44) SHA1(1c3bd780b72cfa61bcbd82683da18b4ee8d03a6d) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedrivc.200e", 0x000000, 0x000800, CRC(2c0f7715) SHA1(79cf3a6cd48fc4a86cd94e823243fc0cd4bffa57) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedrivc.210e", 0x000000, 0x000800, CRC(2e843742) SHA1(bc73ab0270cdf45aaa1a19703e8c3aa916578ef0) )
ROM_END
ROM_START( racedrivcg4 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136078-4202.200r", 0x000000, 0x010000, CRC(be58215d) SHA1(0497efbd696e8d2db4e42678dd6cfe6cd3f78688) )
ROM_LOAD16_BYTE( "136078-4201.210r", 0x000001, 0x010000, CRC(609c5f23) SHA1(a66e1f10f8ad9d25fca5b681ad543967287f2036) )
ROM_LOAD16_BYTE( "136078-4204.200s", 0x020000, 0x010000, CRC(2e590c4f) SHA1(dcb56bacdde17eade5b347d5549cec1de89774e6) )
@@ -3368,40 +3925,40 @@ ROM_START( racedrivcg4 )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136078-1030.30e", 0x000000, 0x010000, CRC(d355a1c2) SHA1(6b0fb52dbecbe574959739f49c3c0fccdd5cebdb) )
ROM_LOAD16_BYTE( "136078-1031.10e", 0x000001, 0x010000, CRC(18fd5f44) SHA1(1c3bd780b72cfa61bcbd82683da18b4ee8d03a6d) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedrivc.200e", 0x000000, 0x000800, CRC(2c0f7715) SHA1(79cf3a6cd48fc4a86cd94e823243fc0cd4bffa57) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedrivc.210e", 0x000000, 0x000800, CRC(2e843742) SHA1(bc73ab0270cdf45aaa1a19703e8c3aa916578ef0) )
ROM_END
ROM_START( racedrivc2 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136078-2002.200r", 0x000000, 0x010000, CRC(669fe6fe) SHA1(1775ee3ef4817f553113772cf0fb35cbbe2e73a5) )
ROM_LOAD16_BYTE( "136078-2001.210r", 0x000001, 0x010000, CRC(9312fd5f) SHA1(9dd1b30ebceedf50fb18d744540e2003a8110d09) )
ROM_LOAD16_BYTE( "136078-1004.200s", 0x020000, 0x010000, CRC(4a1beb65) SHA1(3a4e3dd07a1415aef27e8bbebe0503296dfc7586) )
@@ -3419,40 +3976,40 @@ ROM_START( racedrivc2 )
ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) )
ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136078-1030.30e", 0x000000, 0x010000, CRC(d355a1c2) SHA1(6b0fb52dbecbe574959739f49c3c0fccdd5cebdb) )
ROM_LOAD16_BYTE( "136078-1031.10e", 0x000001, 0x010000, CRC(18fd5f44) SHA1(1c3bd780b72cfa61bcbd82683da18b4ee8d03a6d) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedrivc.200e", 0x000000, 0x000800, CRC(2c0f7715) SHA1(79cf3a6cd48fc4a86cd94e823243fc0cd4bffa57) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedrivc.210e", 0x000000, 0x000800, CRC(2e843742) SHA1(bc73ab0270cdf45aaa1a19703e8c3aa916578ef0) )
ROM_END
ROM_START( racedrivc1 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136078-1002.200r", 0x000000, 0x010000, CRC(ed997f08) SHA1(9512f347120174345dbe8c756e5c239fdce438a5) )
ROM_LOAD16_BYTE( "136078-1001.210r", 0x000001, 0x010000, CRC(5540ee7d) SHA1(f1d16cfa20b61f1cf075e3275ea4af0b46aa5470) )
ROM_LOAD16_BYTE( "136078-1004.200s", 0x020000, 0x010000, CRC(4a1beb65) SHA1(3a4e3dd07a1415aef27e8bbebe0503296dfc7586) )
@@ -3470,34 +4027,34 @@ ROM_START( racedrivc1 )
ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) )
ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "136077-1032.70n", 0x000000, 0x008000, CRC(fbc903a6) SHA1(047240a5192918ced52d90b0555ba2e19a26329e) )
ROM_LOAD16_BYTE( "136077-1033.45n", 0x000001, 0x008000, CRC(e032ca7c) SHA1(a80c980c8e58cf8cada72140e42a3cd1ea987b3d) )
- ROM_REGION16_BE( 0x60000, "user1", 0 ) /* 384k for ADSP object ROM */
+ ROM_REGION16_BE( 0x60000, "mainpcb:user1", 0 ) /* 384k for ADSP object ROM */
ROM_LOAD16_BYTE( "136077-1021.10h", 0x000000, 0x010000, CRC(9831fe73) SHA1(5215ee89a0014399b7d829e443b16590a4679844) )
ROM_LOAD16_BYTE( "136077-1023.10k", 0x000001, 0x010000, CRC(74bf0e0e) SHA1(a3d91ecf13c3619e073324517a4a5afaae831982) )
ROM_LOAD16_BYTE( "136077-1022.10j", 0x020000, 0x010000, CRC(c0393c31) SHA1(31726c01eb0d4650936908c90d45161197b7efba) )
ROM_LOAD16_BYTE( "136077-1024.10l", 0x020001, 0x010000, CRC(1e2fb25f) SHA1(4940091bbad6144bce091d2737191d266d4b0310) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136078-1030.30e", 0x000000, 0x010000, CRC(d355a1c2) SHA1(6b0fb52dbecbe574959739f49c3c0fccdd5cebdb) )
ROM_LOAD16_BYTE( "136078-1031.10e", 0x000001, 0x010000, CRC(18fd5f44) SHA1(1c3bd780b72cfa61bcbd82683da18b4ee8d03a6d) )
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 10*128k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 10*128k for audio serial ROMs */
ROM_LOAD( "136052-1123.65a", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "136052-1124.55a", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "136052-3125.45a", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "136052-1126.30a", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "136077-1017.45c", 0x040000, 0x010000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedrivc.200e", 0x000000, 0x000800, CRC(2c0f7715) SHA1(79cf3a6cd48fc4a86cd94e823243fc0cd4bffa57) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedrivc.210e", 0x000000, 0x000800, CRC(2e843742) SHA1(bc73ab0270cdf45aaa1a19703e8c3aa916578ef0) )
ROM_END
@@ -3573,8 +4130,10 @@ Filename Location Label Board
*/
+// if the side video boards die you have to hook up inputs to them to reconfigure so we'll need some default NVRAMs
+
ROM_START( racedrivpan )
- ROM_REGION( 0x200000, "maincpu", 0 ) /* 2MB for 68000 code */
+ ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* 2MB for 68000 code */
// Multisync PBB A045988 - Central Monitor
// boots with 'PROGRAM OK' when using standard Hard Drivin' board type (needs 137412-115 slapstic)
ROM_LOAD16_BYTE( "088-1002.bin", 0x000000, 0x010000, CRC(49a97391) SHA1(dbe4086cd87669a02d2a2133d0d9e2895946b383) )
@@ -3597,7 +4156,7 @@ ROM_START( racedrivpan )
// Multisync PCB (A046901) - Side Monitor
// these will boot with 'PROGRAM OK' and display an empty side view, if you use the 'compact' type board driver
// there should be one board for each side. (needs 137412-117 slapstic)
- ROM_REGION( 0x200000, "sidecpu", 0 ) /* 2MB for 68000 code */
+ ROM_REGION( 0x200000, "mainpcb:sidecpu", 0 ) /* 2MB for 68000 code */
ROM_LOAD16_BYTE( "088-2002.bin", 0x000000, 0x010000, CRC(77724070) SHA1(5862f30f7e2ab9c0beb06cf5599bcb1ff97f3a47) )
ROM_LOAD16_BYTE( "088-2001.bin", 0x000001, 0x010000, CRC(16ab2fff) SHA1(bf6dcefc98e1fe27bef0ddacc265d8782c486c83) )
ROM_LOAD16_BYTE( "088-2004.bin", 0x020000, 0x010000, CRC(dccdb16b) SHA1(330cf39bcbdb9c73da48b4e947086a7988e37496) )
@@ -3615,7 +4174,7 @@ ROM_START( racedrivpan )
ROM_LOAD16_BYTE( "088-2016.bin", 0x0e0000, 0x010000, CRC(6a42b7e2) SHA1(2e0ff4b7e391106a976cb872f6311f6d35dca5b0) )
ROM_LOAD16_BYTE( "088-2015.bin", 0x0e0001, 0x010000, CRC(334e2a3b) SHA1(a19bfa7652845b9453c722091c773819ba248569) )
- ROM_REGION( 0x60000, "user1", 0 ) /* 384k for object ROM */
+ ROM_REGION( 0x60000, "mainpcb:user1", 0 ) /* 384k for object ROM */
ROM_LOAD16_BYTE( "088-1017.bin", 0x00000, 0x10000, CRC(d92251e8) SHA1(deeeec54c4a61c3adf62f6b1b910135559090ee5) )
ROM_LOAD16_BYTE( "088-1018.bin", 0x00001, 0x10000, CRC(11a0a8f5) SHA1(d4ccc83fc99331d741bc9b8027ef20d72e3ad71a) )
ROM_LOAD16_BYTE( "088-1019.bin", 0x20000, 0x10000, CRC(5bb00676) SHA1(cad1cea8e43f9590fc71c00fab4eff0d447f9296) ) // == 136091-0019.2k (strtdriv)
@@ -3625,37 +4184,102 @@ ROM_START( racedrivpan )
/* ----------------------- */
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
/* ADSP board */
- ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
+ ROM_REGION( 0x20000, "mainpcb:soundcpu", 0 ) /* 2*64k for audio 68000 code */
ROM_LOAD16_BYTE( "rdps1032.bin", 0x000000, 0x010000, CRC(33005f2a) SHA1(e4037a76f122b271a9675d9187ab847a11738640) )
ROM_LOAD16_BYTE( "rdps1033.bin", 0x000001, 0x010000, CRC(4fc800ac) SHA1(dd8cfdb727d6a65274f4f871a589a36796ae1e57) )
/* DSK board */
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "rdpd1026.bin", 0x000000, 0x020000, CRC(16572618) SHA1(08d9f7f76e6e75d5233240d4deab96808825994b) )
ROM_LOAD16_BYTE( "rdpd1025.bin", 0x000001, 0x020000, CRC(57b8a266) SHA1(257246d42841aa30220caeb91945e29978ee8fc0) )
/* Audio ROMs - show up as bad in self-test but so do racedriv's */
- ROM_REGION( 0x50000, "serialroms", 0 ) /* 5*64k for audio serial ROMs */
+ ROM_REGION( 0x50000, "mainpcb:serialroms", 0 ) /* 5*64k for audio serial ROMs */
ROM_LOAD( "rdps1123.bin", 0x000000, 0x010000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD( "rdps1124.bin", 0x010000, 0x010000, CRC(071a4309) SHA1(c623bd51d6a4a56503fbf138138854d6a30b11d6) )
ROM_LOAD( "rdps3125.bin", 0x020000, 0x010000, CRC(856548ff) SHA1(e8a17b274185c5e4ecf5f9f1c211e18b3ef2456d) )
ROM_LOAD( "rdps1126.bin", 0x030000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
ROM_LOAD( "rdps1017.bin", 0x040000, 0x010000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "racedriv.200e", 0x000000, 0x000800, CRC(bfdf633c) SHA1(b930f90c388e6773e6ba4254214a3a6076e610b0) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "racedriv.210e", 0x000000, 0x000800, CRC(3d7c732e) SHA1(e7de81d4a54327514fdd339e93c888c63a344d2c) )
+
+ /* Left PCB*/
+ ROM_REGION( 0x200000, "leftpcb:maincpu", 0 ) /* 2MB for 68000 code */
+ ROM_LOAD16_BYTE( "088-2002.bin", 0x000000, 0x010000, CRC(77724070) SHA1(5862f30f7e2ab9c0beb06cf5599bcb1ff97f3a47) )
+ ROM_LOAD16_BYTE( "088-2001.bin", 0x000001, 0x010000, CRC(16ab2fff) SHA1(bf6dcefc98e1fe27bef0ddacc265d8782c486c83) )
+ ROM_LOAD16_BYTE( "088-2004.bin", 0x020000, 0x010000, CRC(dccdb16b) SHA1(330cf39bcbdb9c73da48b4e947086a7988e37496) )
+ ROM_LOAD16_BYTE( "088-2003.bin", 0x020001, 0x010000, CRC(132ef986) SHA1(106f1a23ac200a868959181fa1c47419806e8366) )
+ ROM_LOAD16_BYTE( "088-2006.bin", 0x040000, 0x010000, CRC(de3a0c24) SHA1(1121b8a16ac11b2480f1c4336a5aa3271364f80e))
+ ROM_LOAD16_BYTE( "088-2005.bin", 0x040001, 0x010000, CRC(96ad705f) SHA1(cc0bc7fdd2a5f91a5929b889607dcf7ad015bb95) )
+ ROM_LOAD16_BYTE( "088-2008.bin", 0x060000, 0x010000, CRC(452d991c) SHA1(42dad0a93839a900c3571ce9e252e1c991a1da56) )
+ ROM_LOAD16_BYTE( "088-2007.bin", 0x060001, 0x010000, CRC(d6f526d3) SHA1(8406917c91c1d3690379cb0bca5809d1db27abec) )
+ ROM_LOAD16_BYTE( "088-2010.bin", 0x080000, 0x010000, CRC(775bca3d) SHA1(926b460faeb2aa46899432b3a9973381ffd7781d) )
+ ROM_LOAD16_BYTE( "088-2009.bin", 0x080001, 0x010000, CRC(6aedccc5) SHA1(9189881802969ecdde2fd41a20ff6ea0471ce2c0) )
+ ROM_LOAD16_BYTE( "088-2012.bin", 0x0a0000, 0x010000, CRC(bacf08c0) SHA1(2f7ddaf4ef350ee3e6ab886759d88c03aa94784b) )
+ ROM_LOAD16_BYTE( "088-2011.bin", 0x0a0001, 0x010000, CRC(1e0c2f71) SHA1(bcdd9089442934df78109df7c0dcf170873cf992) )
+ ROM_LOAD16_BYTE( "088-2014.bin", 0x0c0000, 0x010000, CRC(3512537c) SHA1(896975ef2685358bd98f7a9b45dda11e8bfa3a13) )
+ ROM_LOAD16_BYTE( "088-2013.bin", 0x0c0001, 0x010000, CRC(8d7c4e80) SHA1(eda8d02e51b18234fc0912eaca8171d75ae643c7) )
+ ROM_LOAD16_BYTE( "088-2016.bin", 0x0e0000, 0x010000, CRC(6a42b7e2) SHA1(2e0ff4b7e391106a976cb872f6311f6d35dca5b0) )
+ ROM_LOAD16_BYTE( "088-2015.bin", 0x0e0001, 0x010000, CRC(334e2a3b) SHA1(a19bfa7652845b9453c722091c773819ba248569) )
+
+ ROM_REGION( 0x60000, "leftpcb:user1", 0 ) /* 384k for object ROM */
+ ROM_LOAD16_BYTE( "088-1017.bin", 0x00000, 0x10000, CRC(d92251e8) SHA1(deeeec54c4a61c3adf62f6b1b910135559090ee5) )
+ ROM_LOAD16_BYTE( "088-1018.bin", 0x00001, 0x10000, CRC(11a0a8f5) SHA1(d4ccc83fc99331d741bc9b8027ef20d72e3ad71a) )
+ ROM_LOAD16_BYTE( "088-1019.bin", 0x20000, 0x10000, CRC(5bb00676) SHA1(cad1cea8e43f9590fc71c00fab4eff0d447f9296) ) // == 136091-0019.2k (strtdriv)
+ ROM_LOAD16_BYTE( "088-1020.bin", 0x20001, 0x10000, CRC(311cef99) SHA1(9c466aabad7e80581e477253ec6f2fd245f9b9fd) ) // == 136091-0020.2r (strtdriv)
+ ROM_LOAD16_BYTE( "088-1021.bin", 0x40000, 0x10000, CRC(ce8e4886) SHA1(d29cd4761deb80ed179d0e503243739eebc0edb4) )
+ ROM_LOAD16_BYTE( "088-1022.bin", 0x40001, 0x10000, CRC(4f1e1c5d) SHA1(3e72813129cae9e9bf084bfb1b747aa46b92591e) )
+
+ ROM_REGION( 0x800, "leftpcb:200e", 0 ) // set to display left monitor, controls not calibrated with valid values (don't think they need to be)
+ ROM_LOAD( "leftpcb_200e", 0x000000, 0x000800, CRC(a618d02e) SHA1(cc1068fe4f6ec9a26b6e8fdbe05f4364a64559c1) )
+ ROM_REGION( 0x800, "leftpcb:210e", 0 )
+ ROM_LOAD( "leftpcb_210e", 0x000000, 0x000800, CRC(108ea834) SHA1(d7aec78287647dc52f92143cdb6d7765de0b4e39) )
+
+
+ /* Right PCB*/
+ ROM_REGION( 0x200000, "rightpcb:maincpu", 0 ) /* 2MB for 68000 code */
+ ROM_LOAD16_BYTE( "088-2002.bin", 0x000000, 0x010000, CRC(77724070) SHA1(5862f30f7e2ab9c0beb06cf5599bcb1ff97f3a47) )
+ ROM_LOAD16_BYTE( "088-2001.bin", 0x000001, 0x010000, CRC(16ab2fff) SHA1(bf6dcefc98e1fe27bef0ddacc265d8782c486c83) )
+ ROM_LOAD16_BYTE( "088-2004.bin", 0x020000, 0x010000, CRC(dccdb16b) SHA1(330cf39bcbdb9c73da48b4e947086a7988e37496) )
+ ROM_LOAD16_BYTE( "088-2003.bin", 0x020001, 0x010000, CRC(132ef986) SHA1(106f1a23ac200a868959181fa1c47419806e8366) )
+ ROM_LOAD16_BYTE( "088-2006.bin", 0x040000, 0x010000, CRC(de3a0c24) SHA1(1121b8a16ac11b2480f1c4336a5aa3271364f80e))
+ ROM_LOAD16_BYTE( "088-2005.bin", 0x040001, 0x010000, CRC(96ad705f) SHA1(cc0bc7fdd2a5f91a5929b889607dcf7ad015bb95) )
+ ROM_LOAD16_BYTE( "088-2008.bin", 0x060000, 0x010000, CRC(452d991c) SHA1(42dad0a93839a900c3571ce9e252e1c991a1da56) )
+ ROM_LOAD16_BYTE( "088-2007.bin", 0x060001, 0x010000, CRC(d6f526d3) SHA1(8406917c91c1d3690379cb0bca5809d1db27abec) )
+ ROM_LOAD16_BYTE( "088-2010.bin", 0x080000, 0x010000, CRC(775bca3d) SHA1(926b460faeb2aa46899432b3a9973381ffd7781d) )
+ ROM_LOAD16_BYTE( "088-2009.bin", 0x080001, 0x010000, CRC(6aedccc5) SHA1(9189881802969ecdde2fd41a20ff6ea0471ce2c0) )
+ ROM_LOAD16_BYTE( "088-2012.bin", 0x0a0000, 0x010000, CRC(bacf08c0) SHA1(2f7ddaf4ef350ee3e6ab886759d88c03aa94784b) )
+ ROM_LOAD16_BYTE( "088-2011.bin", 0x0a0001, 0x010000, CRC(1e0c2f71) SHA1(bcdd9089442934df78109df7c0dcf170873cf992) )
+ ROM_LOAD16_BYTE( "088-2014.bin", 0x0c0000, 0x010000, CRC(3512537c) SHA1(896975ef2685358bd98f7a9b45dda11e8bfa3a13) )
+ ROM_LOAD16_BYTE( "088-2013.bin", 0x0c0001, 0x010000, CRC(8d7c4e80) SHA1(eda8d02e51b18234fc0912eaca8171d75ae643c7) )
+ ROM_LOAD16_BYTE( "088-2016.bin", 0x0e0000, 0x010000, CRC(6a42b7e2) SHA1(2e0ff4b7e391106a976cb872f6311f6d35dca5b0) )
+ ROM_LOAD16_BYTE( "088-2015.bin", 0x0e0001, 0x010000, CRC(334e2a3b) SHA1(a19bfa7652845b9453c722091c773819ba248569) )
+
+ ROM_REGION( 0x60000, "rightpcb:user1", 0 ) /* 384k for object ROM */
+ ROM_LOAD16_BYTE( "088-1017.bin", 0x00000, 0x10000, CRC(d92251e8) SHA1(deeeec54c4a61c3adf62f6b1b910135559090ee5) )
+ ROM_LOAD16_BYTE( "088-1018.bin", 0x00001, 0x10000, CRC(11a0a8f5) SHA1(d4ccc83fc99331d741bc9b8027ef20d72e3ad71a) )
+ ROM_LOAD16_BYTE( "088-1019.bin", 0x20000, 0x10000, CRC(5bb00676) SHA1(cad1cea8e43f9590fc71c00fab4eff0d447f9296) ) // == 136091-0019.2k (strtdriv)
+ ROM_LOAD16_BYTE( "088-1020.bin", 0x20001, 0x10000, CRC(311cef99) SHA1(9c466aabad7e80581e477253ec6f2fd245f9b9fd) ) // == 136091-0020.2r (strtdriv)
+ ROM_LOAD16_BYTE( "088-1021.bin", 0x40000, 0x10000, CRC(ce8e4886) SHA1(d29cd4761deb80ed179d0e503243739eebc0edb4) )
+ ROM_LOAD16_BYTE( "088-1022.bin", 0x40001, 0x10000, CRC(4f1e1c5d) SHA1(3e72813129cae9e9bf084bfb1b747aa46b92591e) )
+
+ ROM_REGION( 0x800, "rightpcb:200e", 0 ) // set to display right monitor, controls not calibrated with valid values (don't think they need to be)
+ ROM_LOAD( "rightpcb_200e", 0x000000, 0x000800, CRC(6f1b7094) SHA1(6194a5b99aebe43f02c8d267290207b32c5bdbbd) )
+ ROM_REGION( 0x800, "rightpcb:210e", 0 )
+ ROM_LOAD( "rightpcb_210e", 0x000000, 0x000800, CRC(108ea834) SHA1(d7aec78287647dc52f92143cdb6d7765de0b4e39) )
ROM_END
ROM_START( steeltal )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136087-1002.200r", 0x000000, 0x010000, CRC(31bf01a9) SHA1(cd08a839dbb5283a6e2bb35bc9e1578a14e3c2e6) )
ROM_LOAD16_BYTE( "136087-1001.210r", 0x000001, 0x010000, CRC(b4fa2900) SHA1(5e92ab4af31321b891c072305f8b8ef30a3e1fb0) )
ROM_LOAD16_BYTE( "136087-1004.200s", 0x020000, 0x010000, CRC(c31ca924) SHA1(8d7d2a3d204e69d759cf767b57570c18db5a3fd8) )
@@ -3673,27 +4297,27 @@ ROM_START( steeltal )
ROM_LOAD16_BYTE( "136087-1016.200y", 0x0e0000, 0x010000, CRC(db62362e) SHA1(e1d392aa00ac36296728257fa26c6aa68a4ebe5f) )
ROM_LOAD16_BYTE( "136087-1015.210y", 0x0e0001, 0x010000, CRC(ef517db7) SHA1(16e7e351326391480bf36c58d6b34ef4128b6627) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
- ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */
+ ROM_REGION( 0x10000, "mainpcb:cpu6", 0 ) /* 64k for DSP communications */
ROM_LOAD( "136087-1025.5f", 0x000000, 0x010000, CRC(4c645933) SHA1(7a1cf049e368059a79b03598de73c30d8dae5e90) )
- ROM_REGION16_BE( 0xc0000, "user1", 0 ) /* 768k for object ROM */
+ ROM_REGION16_BE( 0xc0000, "mainpcb:user1", 0 ) /* 768k for object ROM */
ROM_LOAD16_BYTE( "136087-1018.2t", 0x000000, 0x020000, CRC(a5882384) SHA1(157707b5b114fa584893dec07dc456d4a5520f44) )
ROM_LOAD16_BYTE( "136087-1017.2lm", 0x000001, 0x020000, CRC(0a29db30) SHA1(f11ad7fe27989ffd66e9bef2c14ec040a4125d8a) )
- ROM_REGION( 0x80000, "jsa:oki1", 0 )
+ ROM_REGION( 0x80000, "mainpcb:jsa:oki1", 0 )
ROM_LOAD( "136087-5002.1m", 0x000000, 0x020000, CRC(c904db9c) SHA1(d25fff3da87d2b716cd65fb7dd157c3f1f5e5909) )
ROM_LOAD( "136087-5003.1n", 0x020000, 0x020000, CRC(164580b3) SHA1(03118c8323d8a49a65addc61c1402d152d42d7f9) )
ROM_LOAD( "136087-5004.1p", 0x040000, 0x020000, CRC(296290a0) SHA1(8a3441a5618233f561531fe456e1f5ed22183421) )
ROM_LOAD( "136087-5005.1r", 0x060000, 0x020000, CRC(c029d037) SHA1(0ae736c0ca3a1974911464328dd5a6b41a939130) )
- ROM_REGION( 0x015D, "plds", 0 )
+ ROM_REGION( 0x015D, "mainpcb:plds", 0 )
/* GAL's located on Sound board */
ROM_LOAD( "136085-1038.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL16V8A at location 2F */
ROM_LOAD( "136085-1039.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL16V8A at location 2L */
@@ -3710,16 +4334,16 @@ ROM_START( steeltal )
/* GAL's located on "Multisync" board */
ROM_LOAD( "136087-9001.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL6001 at location 200K (SLOOP) */
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( steeltalg )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136087-1002.200r", 0x000000, 0x010000, CRC(31bf01a9) SHA1(cd08a839dbb5283a6e2bb35bc9e1578a14e3c2e6) )
ROM_LOAD16_BYTE( "136087-1001.210r", 0x000001, 0x010000, CRC(b4fa2900) SHA1(5e92ab4af31321b891c072305f8b8ef30a3e1fb0) )
ROM_LOAD16_BYTE( "136087-2004.200s", 0x020000, 0x010000, CRC(11fcba15) SHA1(031fc4c46a25ba8b5e15257f7443899bb484c09e) )
@@ -3737,27 +4361,27 @@ ROM_START( steeltalg )
ROM_LOAD16_BYTE( "136087-1016.200y", 0x0e0000, 0x010000, CRC(db62362e) SHA1(e1d392aa00ac36296728257fa26c6aa68a4ebe5f) )
ROM_LOAD16_BYTE( "136087-1015.210y", 0x0e0001, 0x010000, CRC(ef517db7) SHA1(16e7e351326391480bf36c58d6b34ef4128b6627) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
- ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */
+ ROM_REGION( 0x10000, "mainpcb:cpu6", 0 ) /* 64k for DSP communications */
ROM_LOAD( "136087-1025.5f", 0x000000, 0x010000, CRC(4c645933) SHA1(7a1cf049e368059a79b03598de73c30d8dae5e90) )
- ROM_REGION16_BE( 0xc0000, "user1", 0 ) /* 768k for object ROM */
+ ROM_REGION16_BE( 0xc0000, "mainpcb:user1", 0 ) /* 768k for object ROM */
ROM_LOAD16_BYTE( "136087-1018.2t", 0x000000, 0x020000, CRC(a5882384) SHA1(157707b5b114fa584893dec07dc456d4a5520f44) )
ROM_LOAD16_BYTE( "136087-1017.2lm", 0x000001, 0x020000, CRC(0a29db30) SHA1(f11ad7fe27989ffd66e9bef2c14ec040a4125d8a) )
- ROM_REGION( 0x80000, "jsa:oki1", 0 )
+ ROM_REGION( 0x80000, "mainpcb:jsa:oki1", 0 )
ROM_LOAD( "136087-5002.1m", 0x000000, 0x020000, CRC(c904db9c) SHA1(d25fff3da87d2b716cd65fb7dd157c3f1f5e5909) )
ROM_LOAD( "136087-5003.1n", 0x020000, 0x020000, CRC(164580b3) SHA1(03118c8323d8a49a65addc61c1402d152d42d7f9) )
ROM_LOAD( "136087-5004.1p", 0x040000, 0x020000, CRC(296290a0) SHA1(8a3441a5618233f561531fe456e1f5ed22183421) )
ROM_LOAD( "136087-5005.1r", 0x060000, 0x020000, CRC(c029d037) SHA1(0ae736c0ca3a1974911464328dd5a6b41a939130) )
- ROM_REGION( 0x015D, "plds", 0 )
+ ROM_REGION( 0x015D, "mainpcb:plds", 0 )
/* GAL's located on Sound board */
ROM_LOAD( "136085-1038.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL16V8A at location 2F */
ROM_LOAD( "136085-1039.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL16V8A at location 2L */
@@ -3774,16 +4398,16 @@ ROM_START( steeltalg )
/* GAL's located on "Multisync" board */
ROM_LOAD( "136087-9001.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL6001 at location 200K (SLOOP) */
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( steeltal1 )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "136087-1002.200r", 0x000000, 0x010000, CRC(31bf01a9) SHA1(cd08a839dbb5283a6e2bb35bc9e1578a14e3c2e6) )
ROM_LOAD16_BYTE( "136087-1001.210r", 0x000001, 0x010000, CRC(b4fa2900) SHA1(5e92ab4af31321b891c072305f8b8ef30a3e1fb0) )
ROM_LOAD16_BYTE( "136087-a004.200s", 0x020000, 0x010000, CRC(392c992d) SHA1(10d1606214df675e6e59185e6b97034c4a47055a) )
@@ -3801,27 +4425,27 @@ ROM_START( steeltal1 )
ROM_LOAD16_BYTE( "136087-1016.200y", 0x0e0000, 0x010000, CRC(db62362e) SHA1(e1d392aa00ac36296728257fa26c6aa68a4ebe5f) )
ROM_LOAD16_BYTE( "136087-1015.210y", 0x0e0001, 0x010000, CRC(ef517db7) SHA1(16e7e351326391480bf36c58d6b34ef4128b6627) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
- ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */
+ ROM_REGION( 0x10000, "mainpcb:cpu6", 0 ) /* 64k for DSP communications */
ROM_LOAD( "136087-1025.5f", 0x000000, 0x010000, CRC(4c645933) SHA1(7a1cf049e368059a79b03598de73c30d8dae5e90) )
- ROM_REGION16_BE( 0xc0000, "user1", 0 ) /* 768k for object ROM */
+ ROM_REGION16_BE( 0xc0000, "mainpcb:user1", 0 ) /* 768k for object ROM */
ROM_LOAD16_BYTE( "136087-1018.2t", 0x000000, 0x020000, CRC(a5882384) SHA1(157707b5b114fa584893dec07dc456d4a5520f44) )
ROM_LOAD16_BYTE( "136087-1017.2lm", 0x000001, 0x020000, CRC(0a29db30) SHA1(f11ad7fe27989ffd66e9bef2c14ec040a4125d8a) )
- ROM_REGION( 0x80000, "jsa:oki1", 0 )
+ ROM_REGION( 0x80000, "mainpcb:jsa:oki1", 0 )
ROM_LOAD( "136087-5002.1m", 0x000000, 0x020000, CRC(c904db9c) SHA1(d25fff3da87d2b716cd65fb7dd157c3f1f5e5909) )
ROM_LOAD( "136087-5003.1n", 0x020000, 0x020000, CRC(164580b3) SHA1(03118c8323d8a49a65addc61c1402d152d42d7f9) )
ROM_LOAD( "136087-5004.1p", 0x040000, 0x020000, CRC(296290a0) SHA1(8a3441a5618233f561531fe456e1f5ed22183421) )
ROM_LOAD( "136087-5005.1r", 0x060000, 0x020000, CRC(c029d037) SHA1(0ae736c0ca3a1974911464328dd5a6b41a939130) )
- ROM_REGION( 0x015D, "plds", 0 )
+ ROM_REGION( 0x015D, "mainpcb:plds", 0 )
/* GAL's located on Sound board */
ROM_LOAD( "136085-1038.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL16V8A at location 2F */
ROM_LOAD( "136085-1039.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL16V8A at location 2L */
@@ -3838,16 +4462,16 @@ ROM_START( steeltal1 )
/* GAL's located on "Multisync" board */
ROM_LOAD( "136087-9001.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL6001 at location 200K (SLOOP) */
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( steeltalp )
- ROM_REGION( 0x100000, "maincpu", 0 ) /* 1MB for 68000 code */
+ ROM_REGION( 0x100000, "mainpcb:maincpu", 0 ) /* 1MB for 68000 code */
ROM_LOAD16_BYTE( "rom-200r.bin", 0x00000, 0x10000, CRC(72a9ce3b) SHA1(6706ff32173735d16d9da1321b64a4a9bb317b2e) )
ROM_LOAD16_BYTE( "rom-210r.bin", 0x00001, 0x10000, CRC(46d83b42) SHA1(85b178781f0595b5af0375fee32d0dd8cdba8fca) )
ROM_LOAD16_BYTE( "rom-200s.bin", 0x20000, 0x10000, CRC(bf1b31ae) SHA1(f2d7f13854b8a3dd4de9ae98cc3034dfcf3846b8) )
@@ -3865,27 +4489,27 @@ ROM_START( steeltalp )
ROM_LOAD16_BYTE( "rom-200y.bin", 0xe0000, 0x10000, CRC(b568e1be) SHA1(5d62037892e040515e4262db43057f33436fa12d) )
ROM_LOAD16_BYTE( "rom-210y.bin", 0xe0001, 0x10000, CRC(3f5cdd3e) SHA1(c33c155158a5c69a7f2e61cd88b297dc14ecd479) )
- ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 64k for 6502 code */
+ ROM_REGION( 0x14000, "mainpcb:jsa:cpu", 0 ) /* 64k for 6502 code */
ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_CONTINUE( 0x004000, 0x00c000 )
- ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
+ ROM_REGION( 0x2000, "mainpcb:asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
- ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */
+ ROM_REGION( 0x10000, "mainpcb:cpu6", 0 ) /* 64k for DSP communications */
ROM_LOAD( "136087-1025.5f", 0x000000, 0x010000, CRC(4c645933) SHA1(7a1cf049e368059a79b03598de73c30d8dae5e90) )
- ROM_REGION16_BE( 0xc0000, "user1", 0 ) /* 768k for object ROM */
+ ROM_REGION16_BE( 0xc0000, "mainpcb:user1", 0 ) /* 768k for object ROM */
ROM_LOAD16_BYTE( "rom.2t", 0x00000, 0x20000, CRC(05284504) SHA1(03b81c077f8ff073713f4bcc10b82087743b0d84) )
ROM_LOAD16_BYTE( "rom.2lm", 0x00001, 0x20000, CRC(d6e65b87) SHA1(ac4b2f292f6e28a15e3a12f09f6c2f9523e8b178) )
- ROM_REGION( 0x80000, "jsa:oki1", 0 )
+ ROM_REGION( 0x80000, "mainpcb:jsa:oki1", 0 )
ROM_LOAD( "136087-5002.1m", 0x000000, 0x020000, CRC(c904db9c) SHA1(d25fff3da87d2b716cd65fb7dd157c3f1f5e5909) )
ROM_LOAD( "136087-5003.1n", 0x020000, 0x020000, CRC(164580b3) SHA1(03118c8323d8a49a65addc61c1402d152d42d7f9) )
ROM_LOAD( "136087-5004.1p", 0x040000, 0x020000, CRC(296290a0) SHA1(8a3441a5618233f561531fe456e1f5ed22183421) )
ROM_LOAD( "136087-5005.1r", 0x060000, 0x020000, CRC(c029d037) SHA1(0ae736c0ca3a1974911464328dd5a6b41a939130) )
- ROM_REGION( 0x015D, "plds", 0 )
+ ROM_REGION( 0x015D, "mainpcb:plds", 0 )
/* GAL's located on Sound board */
ROM_LOAD( "136085-1038.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL16V8A at location 2F */
ROM_LOAD( "136085-1039.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL16V8A at location 2L */
@@ -3902,16 +4526,16 @@ ROM_START( steeltalp )
/* GAL's located on "Multisync" board */
ROM_LOAD( "136087-9001.bin", 0x0000, 0x0001, NO_DUMP ) /* GAL6001 at location 200K (SLOOP) */
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( strtdriv )
- ROM_REGION( 0x200000, "maincpu", 0 ) /* 2MB for 68000 code */
+ ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* 2MB for 68000 code */
ROM_LOAD16_BYTE( "136091-0002.200r", 0x000000, 0x010000, CRC(d28f2629) SHA1(266b4a80fd366fec2329ed2cec7fb570cef34291) )
ROM_LOAD16_BYTE( "136091-0001.210r", 0x000001, 0x010000, CRC(443428d1) SHA1(d93fd21a2c9d1e24c599867a110c1031d72e81b7) )
ROM_LOAD16_BYTE( "136091-0004.200s", 0x020000, 0x010000, CRC(379b9d18) SHA1(8cd903cc4e970cc45d7ef431233730b53dabeb1d) )
@@ -3929,10 +4553,10 @@ ROM_START( strtdriv )
ROM_LOAD16_BYTE( "136091-0016.200y", 0x0e0000, 0x010000, CRC(f85ad532) SHA1(f9d2480104a7487c23d33b05aa044b7f4ca08c67) )
ROM_LOAD16_BYTE( "136091-0015.210y", 0x0e0001, 0x010000, CRC(a2e406f3) SHA1(a7266508011c892cb1032fa4d77ccbafedc844e8) )
- ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
+ ROM_REGION( 0x10000 + 0x10000, "mainpcb:asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
ROM_LOAD( "136091-0033.10j", 0x000000, 0x010000, CRC(57504ab6) SHA1(ec8361b7da964c07ca0da48a87537badc3986fe0) )
- ROM_REGION( 0x60000, "user1", 0 ) /* 384k for object ROM */
+ ROM_REGION( 0x60000, "mainpcb:user1", 0 ) /* 384k for object ROM */
ROM_LOAD16_BYTE( "136091-0017.2lm", 0x00000, 0x10000, CRC(b0454074) SHA1(9530ea1ef215116da1f0843776fa7a6b4637049d) )
ROM_LOAD16_BYTE( "136091-0018.2t", 0x00001, 0x10000, CRC(ef432aa8) SHA1(56bce13c111db7874c9b669d479f6ef47976ee14) )
ROM_LOAD16_BYTE( "136091-0019.2k", 0x20000, 0x10000, CRC(5bb00676) SHA1(cad1cea8e43f9590fc71c00fab4eff0d447f9296) )
@@ -3940,17 +4564,17 @@ ROM_START( strtdriv )
ROM_LOAD16_BYTE( "136091-0021.2j", 0x40000, 0x10000, CRC(14f2caae) SHA1(ff40dbced58dc910a2b5825b846a5e52933cb8fc) )
ROM_LOAD16_BYTE( "136091-0022.2p", 0x40001, 0x10000, CRC(bc4dd071) SHA1(ca182451a0a18d343dce1be56090d51950d43906) )
- ROM_REGION16_BE( 0x50000, "user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
+ ROM_REGION16_BE( 0x50000, "mainpcb:user3", 0 ) /* 256k for DSK ROMs + 64k for RAM */
ROM_LOAD16_BYTE( "136091-0026.30e", 0x000000, 0x020000, CRC(47705109) SHA1(fa40275b71b74be8591282d2fba4215b98fc29c9) )
ROM_LOAD16_BYTE( "136091-0025.10e", 0x000001, 0x020000, CRC(ead9254e) SHA1(92152d3ca77b542b3bb3398ccf414df28c95abfd) )
- ROM_REGION16_BE( 0x100000, "ds3sdsp", 0 ) /* DS III sound ADSP-2105 */
+ ROM_REGION16_BE( 0x100000, "mainpcb:ds3sdsp", 0 ) /* DS III sound ADSP-2105 */
ROM_LOAD( "136091-0033.10j", 0x000000, 0x010000, CRC(57504ab6) SHA1(ec8361b7da964c07ca0da48a87537badc3986fe0) )
- ROM_REGION16_BE( 0x100000, "ds3xdsp", 0 ) /* DS III auxillary ADSP-2105 (unused) */
+ ROM_REGION16_BE( 0x100000, "mainpcb:ds3xdsp", 0 ) /* DS III auxillary ADSP-2105 (unused) */
ROM_FILL( 0x000000, 0x010000, 0x00)
- ROM_REGION( 0x80000, "ds3sdsp_data", 0 )
+ ROM_REGION( 0x80000, "mainpcb:ds3sdsp_data", 0 )
ROM_LOAD16_BYTE( "136052-1123.12lm",0x00000, 0x10000, CRC(a88411dc) SHA1(1fd53c7eadffa163d5423df2f8338757e58d5f2e) )
ROM_LOAD16_BYTE( "136077-1017.12t", 0x00001, 0x10000, CRC(e93129a3) SHA1(1221b08c8efbfd8cf6bfbfd956545f10bef48663) )
@@ -3963,15 +4587,15 @@ ROM_START( strtdriv )
ROM_FILL( 0x60000, 0x20000, 0xff) /* 12N */
ROM_LOAD16_BYTE( "136052-1126.12h", 0x60000, 0x10000, CRC(f46ef09c) SHA1(ba62f73ee3b33d8f26b430ffa468f8792dca23de) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "stunrun.200e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "stunrun.210e", 0x000000, 0x000800, CRC(f1e8ba9e) SHA1(605db3fdbaff4ba13729371ad0c4fbab3889378e) )
ROM_END
ROM_START( hdrivair )
- ROM_REGION( 0x200000, "maincpu", 0 ) /* 2MB for 68000 code */
+ ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* 2MB for 68000 code */
ROM_LOAD16_BYTE( "stesthi.bin", 0x000000, 0x20000, CRC(b4bfa451) SHA1(002a5d213ba8ec76ad83a87d76aefbd98b1e4c94) )
ROM_LOAD16_BYTE( "stestlo.bin", 0x000001, 0x20000, CRC(58758419) SHA1(7951d4c8cf0b28b4fac3fe172ea3bc56f61bd9ff) )
ROM_LOAD16_BYTE( "drivehi.bin", 0x040000, 0x20000, CRC(d15f5119) SHA1(c2c7e9675c14ba41effa6f721602f6471b348758) )
@@ -3985,10 +4609,10 @@ ROM_START( hdrivair )
ROM_LOAD16_BYTE( "coprochi.bin",0x1c0000, 0x20000, CRC(5d2ca109) SHA1(e1a94d3fbfd5d542732555bf60268e73d66b3a06) )
ROM_LOAD16_BYTE( "coproclo.bin",0x1c0001, 0x20000, CRC(5f98b04d) SHA1(9c4fa4092fd85f1d67be44f2ff91a907a87db51a) )
- ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
+ ROM_REGION( 0x10000 + 0x10000, "mainpcb:asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
ROM_LOAD( "sboot.bin", 0x000000, 0x010000, CRC(cde4d010) SHA1(853f4b813ff70fe74cd87e92131c46fca045610d) )
- ROM_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */
+ ROM_REGION( 0xc0000, "mainpcb:user1", 0 ) /* 768k for object ROM */
ROM_LOAD16_BYTE( "obj0l.bin", 0x00000, 0x20000, CRC(1f835f2e) SHA1(9d3419f2c1aa65ddfe9ace4e70ca1212d634afbf) )
ROM_LOAD16_BYTE( "obj0h.bin", 0x00001, 0x20000, CRC(c321ab55) SHA1(e095e40bb1ebda7c9ff04a5086c10ab41dec2f16) )
ROM_LOAD16_BYTE( "obj1l.bin", 0x40000, 0x20000, CRC(3d65f264) SHA1(e9232f5bf439bf4e1cf99cc7e81b7f9550563f15) )
@@ -3996,23 +4620,23 @@ ROM_START( hdrivair )
ROM_LOAD16_BYTE( "obj2l.bin", 0x80000, 0x20000, CRC(b206cc7e) SHA1(17f05e906c41b804fe99dd6cd8acbade919a6a10) )
ROM_LOAD16_BYTE( "obj2h.bin", 0x80001, 0x20000, CRC(a666e98c) SHA1(90e380ff87538c7d557cf005a4a5bcedc250eb72) )
- ROM_REGION16_BE( 0x140000, "user3", 0 )/* 1MB for DSK ROMs + 256k for RAM */
+ ROM_REGION16_BE( 0x140000, "mainpcb:user3", 0 )/* 1MB for DSK ROMs + 256k for RAM */
ROM_LOAD16_BYTE( "dsk2phi.bin", 0x00000, 0x80000, CRC(71c268e0) SHA1(c089248a7dfadf2eba3134fe40ebb777c115a886) )
ROM_LOAD16_BYTE( "dsk2plo.bin", 0x00001, 0x80000, CRC(edf96363) SHA1(47f0608c2b0ab983681de021a16b1d10d4feb800) )
- ROM_REGION32_LE( 0x200000, "user4", 0 )/* 2MB for ASIC61 ROMs */
+ ROM_REGION32_LE( 0x200000, "mainpcb:user4", 0 )/* 2MB for ASIC61 ROMs */
ROM_LOAD32_BYTE( "roads0.bin", 0x000000, 0x80000, CRC(5028eb41) SHA1(abe9d73e74d4f0308f07cbe9c18c8a77456fdbc7) )
ROM_LOAD32_BYTE( "roads1.bin", 0x000001, 0x80000, CRC(c3f2c201) SHA1(c73933d7e46f3c63c4ca86af40eb4f0abb09aedf) )
ROM_LOAD32_BYTE( "roads2.bin", 0x000002, 0x80000, CRC(527923fe) SHA1(839de8486bb7489f059b5a629ab229ad96de7eac) )
ROM_LOAD32_BYTE( "roads3.bin", 0x000003, 0x80000, CRC(2f2023b2) SHA1(d474892443db2f0710c2be0d6b90735a2fbee12a) )
- ROM_REGION16_BE( 0x10000, "ds3sdsp", 0 ) /* DS IV sound ADSP-2105 */
+ ROM_REGION16_BE( 0x10000, "mainpcb:ds3sdsp", 0 ) /* DS IV sound ADSP-2105 */
ROM_LOAD( "sboot.bin", 0x00000, 0x10000, CRC(cde4d010) SHA1(853f4b813ff70fe74cd87e92131c46fca045610d) )
- ROM_REGION16_BE( 0x10000, "ds3xdsp", 0 ) /* DS IV auxillary ADSP-2105 */
+ ROM_REGION16_BE( 0x10000, "mainpcb:ds3xdsp", 0 ) /* DS IV auxillary ADSP-2105 */
ROM_LOAD( "xboot.bin", 0x00000, 0x10000, CRC(054b46a0) SHA1(038eec17e678f2755239d6795acfda621796802e) )
- ROM_REGION16_BE( 0x400000, "ds3sdsp_data", 0 ) /* DS IV sound data */
+ ROM_REGION16_BE( 0x400000, "mainpcb:ds3sdsp_data", 0 ) /* DS IV sound data */
ROM_LOAD16_BYTE( "ds3rom4.bin", 0x000000, 0x80000, CRC(15ffb19a) SHA1(030dc90b7cabcd7fc5f231b09d2aa2eaf6e60b98) )
ROM_LOAD16_BYTE( "ds3rom0.bin", 0x000001, 0x80000, CRC(90b8dbb6) SHA1(fff693cb81e88bc00e048bb71406295fe7be5122) )
ROM_LOAD16_BYTE( "ds3rom5.bin", 0x100000, 0x80000, CRC(8d0e9b27) SHA1(76556f48bdf14475260c268ebdb16ecb494b2f36) )
@@ -4022,16 +4646,16 @@ ROM_START( hdrivair )
ROM_LOAD16_BYTE( "ds3rom7.bin", 0x300000, 0x80000, CRC(323eff0b) SHA1(5d4945d77191ee44b4fbf125bc0816217321829e) )
ROM_LOAD16_BYTE( "ds3rom3.bin", 0x300001, 0x80000, CRC(63965868) SHA1(d61d9d6709a3a3c37c2652602e97fdee52e0e7cb) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "hdrivair.200e", 0x000000, 0x000800, CRC(6270b696) SHA1(e302880dbca53ee725108ca4f7e45a176e85e96d) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "hdrivair.210e", 0x000000, 0x000800, CRC(a1c39919) SHA1(92799a7a73f545dad6684eacf7009a6c4d52d8f7) )
ROM_END
ROM_START( hdrivairp )
- ROM_REGION( 0x200000, "maincpu", 0 ) /* 2MB for 68000 code */
+ ROM_REGION( 0x200000, "mainpcb:maincpu", 0 ) /* 2MB for 68000 code */
ROM_LOAD16_BYTE( "stest.0h", 0x000000, 0x20000, CRC(bf4bb6a0) SHA1(e38ec5ce245f98bfe8084ba684bffc85dc19d3be) )
ROM_LOAD16_BYTE( "stest.0l", 0x000001, 0x20000, CRC(f462b511) SHA1(d88efb8cc30322a8332a1f50de775a204758e176) )
ROM_LOAD16_BYTE( "drive.hi", 0x040000, 0x20000, CRC(56571590) SHA1(d0362b8bd438cd7dfa9ff7cf71307f44c2cfe843) )
@@ -4045,13 +4669,13 @@ ROM_START( hdrivairp )
ROM_LOAD16_BYTE( "ms2cproc.0h", 0x1c0000, 0x20000, CRC(19024f2d) SHA1(a94e8836cdc147cea5816b99b8a1ad5ff669d984) )
ROM_LOAD16_BYTE( "ms2cproc.0l", 0x1c0001, 0x20000, CRC(1e48bd46) SHA1(1a903d889f48604bd8d2d9a0bda4ee20e7ad968b) )
- ROM_REGION( 0x10000 + 0x10000, "dsp32", 0 ) /* dummy region for ADSP 2105 */
+ ROM_REGION( 0x10000 + 0x10000, "mainpcb:dsp32", 0 ) /* dummy region for ADSP 2105 */
ROM_LOAD( "sboota.bin", 0x10000 + 0x00000, 0x10000, CRC(3ef819cd) SHA1(c547b869a3a37a82fb46584fe0ef0cfe21a4f882) )
- ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
+ ROM_REGION( 0x10000 + 0x10000, "mainpcb:asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
ROM_LOAD( "xboota.bin", 0x10000 + 0x00000, 0x10000, CRC(d9c49901) SHA1(9f90ae3a47eb1ef00c3ec3661f60402c2eae2108) )
- ROM_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */
+ ROM_REGION( 0xc0000, "mainpcb:user1", 0 ) /* 768k for object ROM */
ROM_LOAD16_BYTE( "objects.0l", 0x00000, 0x20000, CRC(3c9e9078) SHA1(f1daf32117236401f3cb97f332708632003e55f8) )
ROM_LOAD16_BYTE( "objects.0h", 0x00001, 0x20000, CRC(4480dbae) SHA1(6a455173c38e80093f58bdc322cffcf25e70b6ae) )
ROM_LOAD16_BYTE( "objects.1l", 0x40000, 0x20000, CRC(700bd978) SHA1(5cd63d4eee00d90fe29fb9697b6a0ea6b86704ae) )
@@ -4059,23 +4683,23 @@ ROM_START( hdrivairp )
ROM_LOAD16_BYTE( "objects.2l", 0x80000, 0x20000, CRC(e3b512f0) SHA1(080c5a21cb76edcb55d1c2488e9d91cf29cb0665) )
ROM_LOAD16_BYTE( "objects.2h", 0x80001, 0x20000, CRC(3f83742b) SHA1(4b6e0134a806bcc9bd56432737047f86d0a16424) )
- ROM_REGION16_BE( 0x140000, "user3", 0 )/* 1MB for DSK ROMs + 256k for RAM */
+ ROM_REGION16_BE( 0x140000, "mainpcb:user3", 0 )/* 1MB for DSK ROMs + 256k for RAM */
ROM_LOAD16_BYTE( "dskpics.hi", 0x00000, 0x80000, CRC(eaa88101) SHA1(ed0ebf8a9a9514d810242b9b552126f6717f9e25) )
ROM_LOAD16_BYTE( "dskpics.lo", 0x00001, 0x80000, CRC(8c6f0750) SHA1(4cb23cedc500c1509dc875c3291a5771c8473f73) )
- ROM_REGION32_LE( 0x200000, "user4", 0 )/* 2MB for ASIC61 ROMs */
+ ROM_REGION32_LE( 0x200000, "mainpcb:user4", 0 )/* 2MB for ASIC61 ROMs */
ROM_LOAD16_BYTE( "roads.0", 0x000000, 0x80000, CRC(cab2e335) SHA1(914996c5b7905f1c20fcda6972af88debbee59cd) )
ROM_LOAD16_BYTE( "roads.1", 0x000001, 0x80000, CRC(62c244ba) SHA1(f041a269f35a9d187c90241c5b64173663ad5268) )
ROM_LOAD16_BYTE( "roads.2", 0x000002, 0x80000, CRC(ba57f415) SHA1(1daf5a014e9bef15466b282bcca2395fec2b0628) )
ROM_LOAD16_BYTE( "roads.3", 0x000003, 0x80000, CRC(1e6a4ca0) SHA1(2cf06d6c73be11cf10515246fca2baa05ce5091b) )
- ROM_REGION( 0x10000, "ds3sdsp", 0 ) /* DS IV sound ADSP-2105 */
+ ROM_REGION( 0x10000, "mainpcb:ds3sdsp", 0 ) /* DS IV sound ADSP-2105 */
ROM_LOAD( "sboota.bin", 0x00000, 0x10000, CRC(3ef819cd) SHA1(c547b869a3a37a82fb46584fe0ef0cfe21a4f882) )
- ROM_REGION( 0x10000, "ds3xdsp", 0 ) /* DS IV auxillary ADSP-2105 */
+ ROM_REGION( 0x10000, "mainpcb:ds3xdsp", 0 ) /* DS IV auxillary ADSP-2105 */
ROM_LOAD( "xboota.bin", 0x00000, 0x10000, CRC(d9c49901) SHA1(9f90ae3a47eb1ef00c3ec3661f60402c2eae2108) )
- ROM_REGION16_BE( 0x400000, "ds3sdsp_data", 0 )
+ ROM_REGION16_BE( 0x400000, "mainpcb:ds3sdsp_data", 0 )
ROM_LOAD16_BYTE( "ds3rom.5", 0x000000, 0x80000, CRC(6ef9ed90) SHA1(8bd927a56fe99f7db96d203c1daeb8c8c83f2c17) )
ROM_LOAD16_BYTE( "ds3rom.1", 0x000001, 0x80000, CRC(03673d8d) SHA1(13596f7acb58fba78d6e4f2ac7bb21d9d2589668) )
ROM_LOAD16_BYTE( "ds3rom.6", 0x100000, 0x80000, CRC(cd4cd6bc) SHA1(95689ab7cb18af54ff09aebf223f6346f13dfd7b) )
@@ -4085,10 +4709,10 @@ ROM_START( hdrivairp )
ROM_LOAD16_BYTE( "ds3rom.0", 0x300000, 0x80000, CRC(90b8dbb6) SHA1(fff693cb81e88bc00e048bb71406295fe7be5122) )
ROM_LOAD16_BYTE( "ds3rom.4", 0x300001, 0x80000, CRC(6281efee) SHA1(47d0f3ff973166d818877996c45dccf1d3a85fe1) )
- ROM_REGION( 0x800, "200e", 0 )
+ ROM_REGION( 0x800, "mainpcb:200e", 0 )
ROM_LOAD( "hdrivair.200e", 0x000000, 0x000800, CRC(6270b696) SHA1(e302880dbca53ee725108ca4f7e45a176e85e96d) )
- ROM_REGION( 0x800, "210e", 0 )
+ ROM_REGION( 0x800, "mainpcb:210e", 0 )
ROM_LOAD( "hdrivair.210e", 0x000000, 0x000800, CRC(a1c39919) SHA1(92799a7a73f545dad6684eacf7009a6c4d52d8f7) )
ROM_END
@@ -4331,7 +4955,7 @@ void harddriv_state::init_driver_sound()
*
*************************************/
-DRIVER_INIT_MEMBER(harddriv_state,harddriv)
+void harddriv_state::init_harddriv(void)
{
/* initialize the boards */
init_driver();
@@ -4354,7 +4978,7 @@ DRIVER_INIT_MEMBER(harddriv_state,harddriv)
}
-DRIVER_INIT_MEMBER(harddriv_state,harddrivc)
+void harddriv_state::init_harddrivc(void)
{
/* initialize the boards */
init_multisync(1);
@@ -4377,7 +5001,7 @@ DRIVER_INIT_MEMBER(harddriv_state,harddrivc)
}
-DRIVER_INIT_MEMBER(harddriv_state,stunrun)
+void harddriv_state::init_stunrun(void)
{
/* initialize the boards */
init_multisync(0);
@@ -4394,7 +5018,7 @@ DRIVER_INIT_MEMBER(harddriv_state,stunrun)
}
-DRIVER_INIT_MEMBER(harddriv_state,racedriv)
+void harddriv_state::init_racedriv(void)
{
/* initialize the boards */
init_driver();
@@ -4403,7 +5027,7 @@ DRIVER_INIT_MEMBER(harddriv_state,racedriv)
init_driver_sound();
/* set up the slapstic */
- slapstic_init(machine(), 117);
+ m_slapstic_device->slapstic_init(machine(), 117);
m_m68k_slapstic_base = m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xe0000, 0xfffff, read16_delegate(FUNC(harddriv_state::rd68k_slapstic_r), this), write16_delegate(FUNC(harddriv_state::rd68k_slapstic_w), this));
/* synchronization */
@@ -4424,7 +5048,7 @@ void harddriv_state::racedrivc_init_common(offs_t gsp_protection)
init_driver_sound();
/* set up the slapstic */
- slapstic_init(machine(), 117);
+ m_slapstic_device->slapstic_init(machine(), 117);
m_m68k_slapstic_base = m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xe0000, 0xfffff, read16_delegate(FUNC(harddriv_state::rd68k_slapstic_r), this), write16_delegate(FUNC(harddriv_state::rd68k_slapstic_w), this));
/* synchronization */
@@ -4443,10 +5067,39 @@ void harddriv_state::racedrivc_init_common(offs_t gsp_protection)
m_adsp->space(AS_DATA).install_read_handler(0x1fff, 0x1fff, read16_delegate(FUNC(harddriv_state::hdadsp_speedup_r), this));
}
-DRIVER_INIT_MEMBER(harddriv_state,racedrivc) { racedrivc_init_common(0xfff95cd0); }
-DRIVER_INIT_MEMBER(harddriv_state,racedrivc1) { racedrivc_init_common(0xfff7ecd0); }
+void harddriv_state::init_racedrivc(void) { racedrivc_init_common(0xfff95cd0); }
+void harddriv_state::init_racedrivc1(void) { racedrivc_init_common(0xfff7ecd0); }
-DRIVER_INIT_MEMBER(harddriv_state,racedrivb1)
+void harddriv_state::init_racedrivc_panorama_side()
+{
+ int gsp_protection = 0xfff960a0; // correct? same as strtdriv
+ /* initialize the boards */
+ init_multisync(1);
+ init_adsp();
+// init_dsk();
+// init_driver_sound();
+
+ /* set up the slapstic */
+ m_slapstic_device->slapstic_init(machine(), 117);
+ m_m68k_slapstic_base = m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xe0000, 0xfffff, read16_delegate(FUNC(harddriv_state::rd68k_slapstic_r), this), write16_delegate(FUNC(harddriv_state::rd68k_slapstic_w), this));
+
+ /* synchronization */
+// m_rddsp32_sync[0] = m_dsp32->space(AS_PROGRAM).install_write_handler(0x613c00, 0x613c03, write32_delegate(FUNC(harddriv_state::rddsp32_sync0_w), this));
+// m_rddsp32_sync[1] = m_dsp32->space(AS_PROGRAM).install_write_handler(0x613e00, 0x613e03, write32_delegate(FUNC(harddriv_state::rddsp32_sync1_w), this));
+
+ /* set up protection hacks */
+ m_gsp_protection = m_gsp->space(AS_PROGRAM).install_write_handler(gsp_protection, gsp_protection + 0x0f, write16_delegate(FUNC(harddriv_state::hdgsp_protection_w), this));
+
+ /* set up gsp speedup handler */
+// m_gsp_speedup_addr[0] = m_gsp->space(AS_PROGRAM).install_write_handler(0xfff76f60, 0xfff76f6f, write16_delegate(FUNC(harddriv_state::rdgsp_speedup1_w), this));
+// m_gsp->space(AS_PROGRAM).install_read_handler(0xfff76f60, 0xfff76f6f, read16_delegate(FUNC(harddriv_state::rdgsp_speedup1_r), this));
+// m_gsp_speedup_pc = 0xfff43a00;
+
+ /* set up adsp speedup handlers */
+ m_adsp->space(AS_DATA).install_read_handler(0x1fff, 0x1fff, read16_delegate(FUNC(harddriv_state::hdadsp_speedup_r), this));
+}
+
+void harddriv_state::init_racedrivb1(void)
{
/* this unpleasantness prevents racedriv1/racedrivb1/racedrivg1 from crashing MAME during boot */
/* they clear the DSP32C's RAM and then release it from reset, causing it to run through */
@@ -4499,23 +5152,23 @@ void harddriv_state::steeltal_init_common(offs_t ds3_transfer_pc, int proto_sloo
}
-DRIVER_INIT_MEMBER(harddriv_state,steeltal)
+void harddriv_state::init_steeltal(void)
{
steeltal_init_common(0x4fc18, 0);
}
-DRIVER_INIT_MEMBER(harddriv_state,steeltal1)
+void harddriv_state::init_steeltal1(void)
{
steeltal_init_common(0x4f9c6, 0);
}
-DRIVER_INIT_MEMBER(harddriv_state,steeltalp)
+void harddriv_state::init_steeltalp(void)
{
steeltal_init_common(0x52290, 1);
}
-DRIVER_INIT_MEMBER(harddriv_state,strtdriv)
+void harddriv_state::init_strtdriv(void)
{
/* initialize the boards */
init_multisync(1);
@@ -4523,7 +5176,7 @@ DRIVER_INIT_MEMBER(harddriv_state,strtdriv)
init_dsk();
/* set up the slapstic */
- slapstic_init(machine(), 117);
+ m_slapstic_device->slapstic_init(machine(), 117);
m_m68k_slapstic_base = m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xe0000, 0xfffff, read16_delegate(FUNC(harddriv_state::rd68k_slapstic_r), this), write16_delegate(FUNC(harddriv_state::rd68k_slapstic_w), this));
m_maincpu->space(AS_PROGRAM).install_read_handler(0xa80000, 0xafffff, read16_delegate(FUNC(harddriv_state::hda68k_port1_r), this));
@@ -4544,7 +5197,7 @@ DRIVER_INIT_MEMBER(harddriv_state,strtdriv)
}
-DRIVER_INIT_MEMBER(harddriv_state,hdrivair)
+void harddriv_state::init_hdrivair(void)
{
/* initialize the boards */
init_multisync(1);
@@ -4569,7 +5222,7 @@ DRIVER_INIT_MEMBER(harddriv_state,hdrivair)
}
-DRIVER_INIT_MEMBER(harddriv_state,hdrivairp)
+void harddriv_state::init_hdrivairp(void)
{
/* initialize the boards */
init_multisync(1);
@@ -4594,71 +5247,72 @@ DRIVER_INIT_MEMBER(harddriv_state,hdrivairp)
}
-
/*************************************
*
* Game driver(s)
*
*************************************/
-GAME( 1988, harddriv, 0, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, rev 7)", 0 )
-GAME( 1988, harddrivb, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, British, rev 7)", 0 )
-GAME( 1988, harddrivg, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, German, rev 7)", 0 )
-GAME( 1988, harddrivj, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, Japan, rev 7)", 0 )
-GAME( 1988, harddrivb6, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, British, rev 6)", 0 )
-GAME( 1988, harddrivj6, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, Japan, rev 6)", 0 )
-GAME( 1988, harddrivb5, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, British, rev 5)", 0 )
-GAME( 1988, harddrivg4, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, German, rev 4)", 0 )
-GAME( 1988, harddriv3, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, rev 3)", 0 )
-GAME( 1988, harddriv2, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, rev 2)", 0 )
-GAME( 1988, harddriv1, harddriv, harddriv, harddriv, harddriv_state, harddriv, ROT0, "Atari Games", "Hard Drivin' (cockpit, rev 1)", 0 )
-
-GAME( 1990, harddrivc, harddriv, harddrivc, racedrivc, harddriv_state, harddrivc, ROT0, "Atari Games", "Hard Drivin' (compact, rev 2)", 0 )
-GAME( 1990, harddrivcg, harddriv, harddrivc, racedrivc, harddriv_state, harddrivc, ROT0, "Atari Games", "Hard Drivin' (compact, German, rev 2)", 0 )
-GAME( 1990, harddrivcb, harddriv, harddrivc, racedrivc, harddriv_state, harddrivc, ROT0, "Atari Games", "Hard Drivin' (compact, British, rev 2)", 0 )
-GAME( 1990, harddrivc1, harddriv, harddrivc, racedrivc, harddriv_state, harddrivc, ROT0, "Atari Games", "Hard Drivin' (compact, rev 1)", 0 )
-
-GAME( 1989, stunrun, 0, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 6)", 0 )
-GAME( 1989, stunrunj, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 7, Japan)", 0 )
-GAME( 1989, stunrun5, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 5)", 0 )
-GAME( 1989, stunrune, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 5, Europe)", 0 )
-GAME( 1989, stunrun4, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 4)", 0 )
-GAME( 1989, stunrun3, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 3)", 0 )
-GAME( 1989, stunrun3e, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 3, Europe)", 0 )
-GAME( 1989, stunrun2, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 2)", 0 )
-GAME( 1989, stunrun2e, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 2, Europe)", 0 )
-GAME( 1989, stunrun0, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (rev 0)", 0 )
-GAME( 1989, stunrunp, stunrun, stunrun, stunrun, harddriv_state, stunrun, ROT0, "Atari Games", "S.T.U.N. Runner (upright prototype)", 0 )
-
-GAME( 1990, racedriv, 0, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 5)", 0 )
-GAME( 1990, racedrivb, racedriv, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' (cockpit, British, rev 5)", 0 )
-GAME( 1990, racedrivg, racedriv, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' (cockpit, German, rev 5)", 0 )
-GAME( 1990, racedriv4, racedriv, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 4)", 0 )
-GAME( 1990, racedrivb4, racedriv, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' (cockpit, British, rev 4)", 0 )
-GAME( 1990, racedrivg4, racedriv, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' (cockpit, German, rev 4)", 0 )
-GAME( 1990, racedriv3, racedriv, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 3)", 0 )
-GAME( 1990, racedriv2, racedriv, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 2)", 0 )
-GAME( 1990, racedriv1, racedriv, racedriv, racedriv, harddriv_state, racedrivb1, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 1)", 0 )
-GAME( 1990, racedrivb1, racedriv, racedriv, racedriv, harddriv_state, racedrivb1, ROT0, "Atari Games", "Race Drivin' (cockpit, British, rev 1)", 0 )
-GAME( 1990, racedrivg1, racedriv, racedriv, racedriv, harddriv_state, racedrivb1, ROT0, "Atari Games", "Race Drivin' (cockpit, German, rev 2)", 0 )
-
-GAME( 1990, racedrivc, racedriv, racedrivc, racedrivc, harddriv_state, racedrivc, ROT0, "Atari Games", "Race Drivin' (compact, rev 5)", 0 )
-GAME( 1990, racedrivcb, racedriv, racedrivc, racedrivc, harddriv_state, racedrivc, ROT0, "Atari Games", "Race Drivin' (compact, British, rev 5)", 0 )
-GAME( 1990, racedrivcg, racedriv, racedrivc, racedrivc, harddriv_state, racedrivc, ROT0, "Atari Games", "Race Drivin' (compact, German, rev 5)", 0 )
-GAME( 1990, racedrivc4, racedriv, racedrivc, racedrivc, harddriv_state, racedrivc, ROT0, "Atari Games", "Race Drivin' (compact, rev 4)", 0 )
-GAME( 1990, racedrivcb4, racedriv, racedrivc, racedrivc, harddriv_state, racedrivc, ROT0, "Atari Games", "Race Drivin' (compact, British, rev 4)", 0 )
-GAME( 1990, racedrivcg4, racedriv, racedrivc, racedrivc, harddriv_state, racedrivc, ROT0, "Atari Games", "Race Drivin' (compact, German, rev 4)", 0 )
-GAME( 1990, racedrivc2, racedriv, racedrivc, racedrivc, harddriv_state, racedrivc1,ROT0, "Atari Games", "Race Drivin' (compact, rev 2)", 0 )
-GAME( 1990, racedrivc1, racedriv, racedrivc, racedrivc, harddriv_state, racedrivc1,ROT0, "Atari Games", "Race Drivin' (compact, rev 1)", 0 )
-
-GAME( 1990, racedrivpan, racedriv, racedriv, racedriv, harddriv_state, racedriv, ROT0, "Atari Games", "Race Drivin' Panorama (prototype, rev 2.1)", GAME_NOT_WORKING )
-
-GAME( 1991, steeltal, 0, steeltal, steeltal, harddriv_state, steeltal, ROT0, "Atari Games", "Steel Talons (rev 2)", 0 )
-GAME( 1991, steeltalg, steeltal, steeltal, steeltal, harddriv_state, steeltal, ROT0, "Atari Games", "Steel Talons (German, rev 2)", 0 )
-GAME( 1991, steeltal1, steeltal, steeltal, steeltal, harddriv_state, steeltal1,ROT0, "Atari Games", "Steel Talons (rev 1)", 0 )
-GAME( 1991, steeltalp, steeltal, steeltal, steeltal, harddriv_state, steeltalp,ROT0, "Atari Games", "Steel Talons (prototype)", GAME_NOT_WORKING )
-
-GAME( 1993, strtdriv, 0, strtdriv, strtdriv, harddriv_state, strtdriv, ROT0, "Atari Games", "Street Drivin' (prototype)", 0 )
-
-GAME( 1993, hdrivair, 0, hdrivair, hdrivair, harddriv_state, hdrivair, ROT0, "Atari Games", "Hard Drivin's Airborne (prototype)", GAME_IMPERFECT_SOUND )
-GAME( 1993, hdrivairp, hdrivair, hdrivair, hdrivair, harddriv_state, hdrivairp,ROT0, "Atari Games", "Hard Drivin's Airborne (prototype, early rev)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
+GAME( 1999, harddriv, 0, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, rev 7)", 0 )
+GAME( 1988, harddrivb, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, British, rev 7)", 0 )
+GAME( 1988, harddrivg, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, German, rev 7)", 0 )
+GAME( 1988, harddrivj, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, Japan, rev 7)", 0 )
+GAME( 1988, harddrivb6, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, British, rev 6)", 0 )
+GAME( 1988, harddrivj6, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, Japan, rev 6)", 0 )
+GAME( 1988, harddrivb5, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, British, rev 5)", 0 )
+GAME( 1988, harddrivg4, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, German, rev 4)", 0 )
+GAME( 1988, harddriv3, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, rev 3)", 0 )
+GAME( 1988, harddriv2, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, rev 2)", 0 )
+GAME( 1988, harddriv1, harddriv, harddriv_machine, harddriv, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (cockpit, rev 1)", 0 )
+
+GAME( 1990, harddrivc, harddriv, harddrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (compact, rev 2)", 0 )
+GAME( 1990, harddrivcg, harddriv, harddrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (compact, German, rev 2)", 0 )
+GAME( 1990, harddrivcb, harddriv, harddrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (compact, British, rev 2)", 0 )
+GAME( 1990, harddrivc1, harddriv, harddrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Hard Drivin' (compact, rev 1)", 0 )
+
+GAME( 1989, stunrun, 0, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 6)", 0 )
+GAME( 1989, stunrunj, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 7, Japan)", 0 )
+GAME( 1989, stunrun5, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 5)", 0 )
+GAME( 1989, stunrune, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 5, Europe)", 0 )
+GAME( 1989, stunrun4, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 4)", 0 )
+GAME( 1989, stunrun3, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 3)", 0 )
+GAME( 1989, stunrun3e, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 3, Europe)", 0 )
+GAME( 1989, stunrun2, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 2)", 0 )
+GAME( 1989, stunrun2e, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 2, Europe)", 0 )
+GAME( 1989, stunrun0, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (rev 0)", 0 )
+GAME( 1989, stunrunp, stunrun, stunrun_machine, stunrun, driver_device, 0, ROT0, "Atari Games", "S.T.U.N. Runner (upright prototype)", 0 )
+
+GAME( 1990, racedriv, 0, racedriv_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 5)", 0 )
+GAME( 1990, racedrivb, racedriv, racedriv_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, British, rev 5)", 0 )
+GAME( 1990, racedrivg, racedriv, racedriv_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, German, rev 5)", 0 )
+GAME( 1990, racedriv4, racedriv, racedriv_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 4)", 0 )
+GAME( 1990, racedrivb4, racedriv, racedriv_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, British, rev 4)", 0 )
+GAME( 1990, racedrivg4, racedriv, racedriv_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, German, rev 4)", 0 )
+GAME( 1990, racedriv3, racedriv, racedriv_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 3)", 0 )
+GAME( 1990, racedriv2, racedriv, racedriv_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 2)", 0 )
+GAME( 1990, racedriv1, racedriv, racedrivb1_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, rev 1)", 0 )
+GAME( 1990, racedrivb1, racedriv, racedrivb1_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, British, rev 1)", 0 )
+GAME( 1990, racedrivg1, racedriv, racedrivb1_machine, racedriv, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (cockpit, German, rev 2)", 0 )
+
+GAME( 1990, racedrivc, racedriv, racedrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (compact, rev 5)", 0 )
+GAME( 1990, racedrivcb, racedriv, racedrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (compact, British, rev 5)", 0 )
+GAME( 1990, racedrivcg, racedriv, racedrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (compact, German, rev 5)", 0 )
+GAME( 1990, racedrivc4, racedriv, racedrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (compact, rev 4)", 0 )
+GAME( 1990, racedrivcb4, racedriv, racedrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (compact, British, rev 4)", 0 )
+GAME( 1990, racedrivcg4, racedriv, racedrivc_machine, racedrivc, driver_device, 0, ROT0, "Atari Games", "Race Drivin' (compact, German, rev 4)", 0 )
+GAME( 1990, racedrivc2, racedriv, racedrivc1_machine, racedrivc, driver_device, 0,ROT0, "Atari Games", "Race Drivin' (compact, rev 2)", 0 )
+GAME( 1990, racedrivc1, racedriv, racedrivc1_machine, racedrivc, driver_device, 0,ROT0, "Atari Games", "Race Drivin' (compact, rev 1)", 0 )
+
+GAMEL( 1990, racedrivpan, racedriv, racedriv_panorama_machine, racedriv_pan, driver_device, 0, ROT0, "Atari Games", "Race Drivin' Panorama (prototype, rev 2.1)", GAME_NOT_WORKING, layout_racedrivpan )
+
+GAME( 1991, steeltal, 0, steeltal_machine, steeltal, driver_device, 0, ROT0, "Atari Games", "Steel Talons (rev 2)", 0 )
+GAME( 1991, steeltalg, steeltal, steeltal_machine, steeltal, driver_device, 0, ROT0, "Atari Games", "Steel Talons (German, rev 2)", 0 )
+GAME( 1991, steeltal1, steeltal, steeltal1_machine, steeltal, driver_device, 0,ROT0, "Atari Games", "Steel Talons (rev 1)", 0 )
+GAME( 1991, steeltalp, steeltal, steeltalp_machine, steeltal, driver_device, 0,ROT0, "Atari Games", "Steel Talons (prototype)", GAME_NOT_WORKING )
+
+GAME( 1993, strtdriv, 0, strtdriv_machine, strtdriv, driver_device, 0, ROT0, "Atari Games", "Street Drivin' (prototype)", 0 )
+
+GAME( 1993, hdrivair, 0, hdrivair_machine, hdrivair, driver_device, 0, ROT0, "Atari Games", "Hard Drivin's Airborne (prototype)", GAME_IMPERFECT_SOUND )
+GAME( 1993, hdrivairp, hdrivair, hdrivairp_machine, hdrivair, driver_device, 0,ROT0, "Atari Games", "Hard Drivin's Airborne (prototype, early rev)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
+
+
diff --git a/src/mame/drivers/kyugo.c b/src/mame/drivers/kyugo.c
index 7e2afd7fc16..75380c0970a 100644
--- a/src/mame/drivers/kyugo.c
+++ b/src/mame/drivers/kyugo.c
@@ -1379,7 +1379,7 @@ GAME( 1986, fx, srdmissn, srdmissn, srdmissn, kyugo_state, srdmissn, R
GAME( 1986, legend, 0, legend, legend, kyugo_state, srdmissn, ROT0, "Kyugo / Sega", "Legend", GAME_SUPPORTS_SAVE ) // no copyright (maybe also a bootleg?)
GAME( 1986, legendb, legend, legend, legend, kyugo_state, srdmissn, ROT0, "bootleg", "Legion (bootleg of Legend)", GAME_SUPPORTS_SAVE ) // no copyright
GAME( 1987, airwolf, 0, srdmissn, airwolf, kyugo_state, srdmissn, ROT0, "Kyugo", "Airwolf", GAME_SUPPORTS_SAVE )
-GAME( 1987, airwolfa, airwolf, srdmissn, airwolf, kyugo_state, srdmissn, ROT0, "Kyugo (UA Theatre license)", "Airwolf (US)", GAME_SUPPORTS_SAVE )
+GAME( 1987, airwolfa, airwolf, srdmissn, airwolf, kyugo_state, srdmissn, ROT0, "Kyugo (United Amusements license)", "Airwolf (US)", GAME_SUPPORTS_SAVE )
GAME( 1987, skywolf, airwolf, srdmissn, skywolf, kyugo_state, srdmissn, ROT0, "bootleg", "Sky Wolf (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1987, skywolf2, airwolf, srdmissn, airwolf, kyugo_state, srdmissn, ROT0, "bootleg", "Sky Wolf (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1987, skywolf3, airwolf, srdmissn, airwolf, kyugo_state, srdmissn, ROT0, "bootleg", "Sky Wolf (set 3)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/lindbergh.c b/src/mame/drivers/lindbergh.c
index a29a7fe00d4..8e575b4c3fc 100644
--- a/src/mame/drivers/lindbergh.c
+++ b/src/mame/drivers/lindbergh.c
@@ -221,12 +221,20 @@ Sega 2005
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pcshare.h"
-#include "machine/pckeybrd.h"
-#include "video/pc_vga.h"
#include "machine/pci.h"
-
-class lindbergh_state : public pcat_base_state
+#include "machine/i82875p.h"
+#include "machine/i6300esb.h"
+#include "machine/pci-usb.h"
+#include "machine/pci-apic.h"
+#include "machine/pci-sata.h"
+#include "machine/pci-smbus.h"
+#include "machine/i82541.h"
+#include "machine/segabb.h"
+#include "sound/pci-ac97.h"
+#include "sound/sb0400.h"
+#include "video/gf6800gt.h"
+
+class lindbergh_state : public driver_device
{
public:
lindbergh_state(const machine_config &mconfig, device_type type, const char *tag);
@@ -235,24 +243,26 @@ public:
virtual void machine_reset();
};
+#if 0
static ADDRESS_MAP_START(lindbergh_map, AS_PROGRAM, 32, lindbergh_state)
AM_RANGE(0x00000000, 0x0009ffff) AM_RAM
- AM_RANGE(0x000a0000, 0x000bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffffffff)
- AM_RANGE(0x000c0000, 0x000cffff) AM_ROM AM_REGION("vid_bios", 0)
+ // AM_RANGE(0x000a0000, 0x000bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffffffff)
+ // AM_RANGE(0x000c0000, 0x000cffff) AM_ROM AM_REGION("vid_bios", 0)
// 0xd0000 - 0xdffff tested, wants 0x414d ("AM") in there
AM_RANGE(0x000f0000, 0x000fffff) AM_ROM AM_REGION("mb_bios", 0xf0000)
- AM_RANGE(0xfd000000, 0xfd3fffff) AM_ROM AM_REGION("jvs_bios", 0) /* Hack to see the data */
+// AM_RANGE(0xfd000000, 0xfd3fffff) AM_ROM AM_REGION("jvs_bios", 0) /* Hack to see the data */
AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION("mb_bios", 0) /* System BIOS */
ADDRESS_MAP_END
static ADDRESS_MAP_START(lindbergh_io, AS_IO, 32, lindbergh_state)
- AM_IMPORT_FROM(pcat32_io_common)
+// AM_IMPORT_FROM(pcat32_io_common)
- AM_RANGE(0x00e8, 0x00ef) AM_NOP
- AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_legacy_device, read, write)
+// AM_RANGE(0x00e8, 0x00ef) AM_NOP
+// AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_legacy_device, read, write)
ADDRESS_MAP_END
+#endif
-lindbergh_state::lindbergh_state(const machine_config &mconfig, device_type type, const char *tag) : pcat_base_state(mconfig, type, tag)
+lindbergh_state::lindbergh_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag)
{
}
@@ -267,18 +277,37 @@ void lindbergh_state::machine_reset()
static MACHINE_CONFIG_START(lindbergh, lindbergh_state)
// MCFG_CPU_ADD("maincpu", PENTIUM, 2800000000U) /* Actually Celeron D at 2,8 GHz */
MCFG_CPU_ADD("maincpu", PENTIUM4, 28000000U*5) /* Actually Celeron D at 2,8 GHz */
- MCFG_CPU_PROGRAM_MAP(lindbergh_map)
- MCFG_CPU_IO_MAP(lindbergh_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb)
-
- MCFG_FRAGMENT_ADD( pcat_common )
- MCFG_FRAGMENT_ADD( pcvideo_vga )
-
- MCFG_PCI_BUS_LEGACY_ADD("pcibus", 0)
+// MCFG_CPU_PROGRAM_MAP(lindbergh_map)
+// MCFG_CPU_IO_MAP(lindbergh_io)
+// MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb)
+
+// MCFG_FRAGMENT_ADD( pcat_common )
+// MCFG_FRAGMENT_ADD( pcvideo_vga )
+
+// MCFG_PCI_BUS_LEGACY_ADD("pcibus", 0)
+
+ MCFG_PCI_ROOT_ADD( ":pci")
+ MCFG_I82875P_HOST_ADD( ":pci:00.0", 0x103382c0, ":maincpu", 512*1024*1024)
+ MCFG_I82875P_AGP_ADD( ":pci:01.0")
+ MCFG_GEFORCE_6800GT_ADD( ":pci:01.0:00.0", 0x10de0204)
+ MCFG_PCI_BRIDGE_ADD( ":pci:1c.0", 0x808625ae, 0x02)
+ MCFG_I82541PI_ADD( ":pci:1c.0:00.0", 0x103382c0)
+ MCFG_USB_UHCI_ADD( ":pci:1d.0", 0x808625a9, 0x02, 0x103382c0)
+ MCFG_USB_UHCI_ADD( ":pci:1d.1", 0x808625aa, 0x02, 0x103382c0)
+ MCFG_I6300ESB_WATCHDOG_ADD( ":pci:1d.4", 0x103382c0)
+ MCFG_APIC_ADD( ":pci:1d.5", 0x808625ac, 0x02, 0x103382c0)
+ MCFG_USB_EHCI_ADD( ":pci:1d.7", 0x808625ad, 0x02, 0x103382c0)
+ MCFG_PCI_BRIDGE_ADD( ":pci:1e.0", 0x8086244e, 0x0a)
+ MCFG_SB0400_ADD( ":pci:1e.0:02.0", 0x11021101)
+ MCFG_SEGA_LINDBERGH_BASEBOARD_ADD(":pci:1e.0:03.0")
+ MCFG_I6300ESB_LPC_ADD( ":pci:1f.0")
+ MCFG_SATA_ADD( ":pci:1f.2", 0x808625a3, 0x02, 0x103382c0)
+ MCFG_SMBUS_ADD( ":pci:1f.3", 0x808625a4, 0x02, 0x103382c0)
+ MCFG_AC97_ADD( ":pci:1f.5", 0x808625a6, 0x02, 0x103382c0)
MACHINE_CONFIG_END
ROM_START(lindbios)
- ROM_REGION32_LE(0x100000, "mb_bios", 0) // location 3j7
+ ROM_REGION32_LE(0x100000, ":pci:1f.0", 0) // PC bios, location 3j7
ROM_SYSTEM_BIOS(0, "bios0", "6.0.0010 alternate version")
ROMX_LOAD("6.0.0010a.bin", 0x00000, 0x100000, CRC(10dd9b76) SHA1(1fdf1f921bc395846a7c3180fbdbc4ca287a9670), ROM_BIOS(1) )
ROM_SYSTEM_BIOS(1, "bios1", "6.0.0009")
@@ -287,11 +316,11 @@ ROM_START(lindbios)
ROMX_LOAD("6.0.0010.bin", 0x00000, 0x100000, CRC(ea2bf888) SHA1(c9c5b6f0d4f4f36620939b15dd2f128a74347e37), ROM_BIOS(3) )
- ROM_REGION(0x400000, "jvs_bios", 0)
+ ROM_REGION(0x400000, ":pci:1e.0:03.0", 0) // Baseboard MPC firmware
ROM_LOAD("fpr-24370b.ic6", 0x000000, 0x400000, CRC(c3b021a4) SHA1(1b6938a50fe0e4ae813864649eb103838c399ac0))
- ROM_REGION(0x10000, "vid_bios", 0)
+ ROM_REGION32_LE(0x10000, ":pci:01.0:00.0", 0) // Geforce bios extension (custom or standard?)
ROM_LOAD("vid_bios.u504", 0x00000, 0x10000, CRC(f78d14d7) SHA1(f129787e487984edd23bf344f2e9500c85052275))
ROM_END
-GAME(1999, lindbios, 0, lindbergh, at_keyboard, driver_device, 0, ROT0, "Sega Lindbergh", "Sega Lindbergh Bios", GAME_IS_SKELETON)
+GAME(1999, lindbios, 0, lindbergh, 0, driver_device, 0, ROT0, "Sega Lindbergh", "Sega Lindbergh Bios", GAME_IS_SKELETON)
diff --git a/src/mame/drivers/magictg.c b/src/mame/drivers/magictg.c
index 035e8555f80..3214736ad09 100644
--- a/src/mame/drivers/magictg.c
+++ b/src/mame/drivers/magictg.c
@@ -118,7 +118,7 @@ Medium size chip with heat sink on it
#include "cpu/adsp2100/adsp2100.h"
#include "sound/dmadac.h"
#include "video/voodoo.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
/* TODO: Two 3Dfx Voodoo chipsets are used in SLI configuration */
diff --git a/src/mame/drivers/maygay1b.c b/src/mame/drivers/maygay1b.c
index 1636ee987d7..e2c3ff64ee5 100644
--- a/src/mame/drivers/maygay1b.c
+++ b/src/mame/drivers/maygay1b.c
@@ -96,6 +96,7 @@ void maygay1b_state::machine_reset()
{
m_vfd->reset(); // reset display1
m1_stepper_reset();
+ m_Vmm=false;
}
///////////////////////////////////////////////////////////////////////////
@@ -111,7 +112,6 @@ void maygay1b_state::cpu0_firq(int data)
WRITE_LINE_MEMBER(maygay1b_state::duart_irq_handler)
{
m_maincpu->set_input_line(M6809_IRQ_LINE, state?ASSERT_LINE:CLEAR_LINE);
- LOG(("6809 irq%d \n",state));
}
// FIRQ, related to the sample playback?
@@ -122,34 +122,34 @@ READ8_MEMBER( maygay1b_state::m1_firq_trg_r )
{
cpu0_firq(1);
}
- return nar;
+ return 0xff;
}
READ8_MEMBER( maygay1b_state::m1_firq_clr_r )
{
cpu0_firq(0);
- return 0;
+ return 0xff;
}
// NMI is periodic? or triggered by a write?
TIMER_DEVICE_CALLBACK_MEMBER( maygay1b_state::maygay1b_nmitimer_callback )
{
-//disabling for now
- if (m_NMIENABLE)
- {
- LOG(("6809 nmi\n"));
- m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
- m_NMIENABLE=0;
- }
-
+ m_Vmm = !m_Vmm;
+ cpu0_nmi();
}
-/*
-void maygay1b_state::cpu0_nmi(int data)
+void maygay1b_state::cpu0_nmi()
{
- m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+ if (m_Vmm && m_NMIENABLE)
+ {
+ m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+ }
+ else
+ {
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ }
}
-*/
+
/***************************************************************************
6821 PIA
***************************************************************************/
@@ -286,7 +286,7 @@ INPUT_PORTS_START( maygay_m1 )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("68")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("69")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("70")
- PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("72")
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("RESET")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("73")
INPUT_PORTS_END
@@ -376,10 +376,13 @@ WRITE8_MEMBER(maygay1b_state::m1_latch_w)
m_ALARMEN = (data & 1);
break;
case 2: // Enable
- if ( m_NMIENABLE == 0 && ( data & 1 ) )
{
- m_NMIENABLE = (data & 1);
- //cpu0_nmi(1);
+ if ( m_NMIENABLE == 0 && ( data & 1 ))
+ {
+ m_NMIENABLE = (data & 1);
+ cpu0_nmi();
+ }
+ m_NMIENABLE = (data & 1);
}
break;
case 3: // RTS
@@ -395,7 +398,7 @@ WRITE8_MEMBER(maygay1b_state::m1_latch_w)
case 6: // Srsel
// this is the ROM banking?
printf("rom bank %02x\n",data);
- m_SRSEL = (data & 1);
+ m_bank1->set_entry(data & 1);
break;
}
}
@@ -410,13 +413,13 @@ WRITE8_MEMBER(maygay1b_state::latch_ch2_w)
READ8_MEMBER(maygay1b_state::latch_st_hi)
{
m_msm6376->st_w(1);
- return 0;
+ return 0xff;
}
READ8_MEMBER(maygay1b_state::latch_st_lo)
{
m_msm6376->st_w(0);
- return 0;
+ return 0xff;
}
READ8_MEMBER(maygay1b_state::m1_meter_r)
@@ -469,7 +472,92 @@ static ADDRESS_MAP_START( m1_memmap, AS_PROGRAM, 8, maygay1b_state )
AM_RANGE(0x2420, 0x2421) AM_WRITE(latch_ch2_w ) // oki
- AM_RANGE(0x2800, 0xffff) AM_ROM
+ AM_RANGE(0x2800, 0xdfff) AM_ROM
+ AM_RANGE(0xe000, 0xffff) AM_ROMBANK("bank1") /* 64k paged ROM (4 pages) */
+
+ADDRESS_MAP_END
+
+/*************************************************
+ *
+ * NEC uPD7759 handling (used as OKI replacement)
+ *
+ *************************************************/
+READ8_MEMBER(maygay1b_state::m1_firq_nec_r)
+{
+ int busy = m_upd7759->busy_r();
+ if (!busy)
+ {
+ cpu0_firq(1);
+ }
+ return 0xff;
+}
+
+READ8_MEMBER(maygay1b_state::nec_reset_r)
+{
+ m_upd7759->reset_w(0);
+ m_upd7759->reset_w(1);
+ return 0xff;
+}
+
+WRITE8_MEMBER(maygay1b_state::nec_bank0_w)
+{
+ m_upd7759->set_bank_base(0x00000);
+ m_upd7759->port_w(space, 0, data);
+ m_upd7759->start_w(0);
+ m_upd7759->start_w(1);
+}
+
+WRITE8_MEMBER(maygay1b_state::nec_bank1_w)
+{
+ m_upd7759->set_bank_base(0x20000);
+ m_upd7759->port_w(space, 0, data);
+ m_upd7759->start_w(0);
+ m_upd7759->start_w(1);
+}
+
+static ADDRESS_MAP_START( m1_nec_memmap, AS_PROGRAM, 8, maygay1b_state )
+ AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("nvram")
+
+ AM_RANGE(0x2000, 0x2000) AM_WRITE(reel12_w)
+ AM_RANGE(0x2010, 0x2010) AM_WRITE(reel34_w)
+ AM_RANGE(0x2020, 0x2020) AM_WRITE(reel56_w)
+
+ // there is actually an 8279 and an 8051 (which I guess is the MCU?).
+ AM_RANGE(0x2030, 0x2030) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w )
+ AM_RANGE(0x2031, 0x2031) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w)
+
+ //8051
+ AM_RANGE(0x2040, 0x2040) AM_DEVREADWRITE("i8279_2", i8279_device, data_r, data_w )
+ AM_RANGE(0x2041, 0x2041) AM_DEVREADWRITE("i8279_2", i8279_device, status_r, cmd_w)
+// AM_RANGE(0x2050, 0x2050)// SCAN on M1B
+
+ AM_RANGE(0x2070, 0x207f) AM_DEVREADWRITE("duart68681", mc68681_device, read, write )
+
+ AM_RANGE(0x2090, 0x2091) AM_DEVWRITE("aysnd", ay8910_device, data_address_w)
+ AM_RANGE(0x20B0, 0x20B0) AM_READ(m1_meter_r)
+
+ AM_RANGE(0x20A0, 0x20A3) AM_DEVWRITE("pia", pia6821_device, write)
+ AM_RANGE(0x20A0, 0x20A3) AM_DEVREAD("pia", pia6821_device, read)
+
+ AM_RANGE(0x20C0, 0x20C7) AM_WRITE(m1_latch_w)
+
+ AM_RANGE(0x2400, 0x2401) AM_DEVWRITE("ymsnd", ym2413_device, write)
+ AM_RANGE(0x2404, 0x2405) AM_WRITE(nec_bank0_w)
+ AM_RANGE(0x2406, 0x2407) AM_WRITE(nec_bank1_w)
+
+ AM_RANGE(0x2408, 0x2409) AM_READ(nec_reset_r)
+
+ AM_RANGE(0x240c, 0x240d) AM_READ(m1_firq_clr_r)
+
+ AM_RANGE(0x240e, 0x240f) AM_READ(m1_firq_nec_r)
+
+ AM_RANGE(0x2412, 0x2412) AM_READ(m1_firq_trg_r) // firq, sample playback?
+
+ AM_RANGE(0x2420, 0x2421) AM_WRITE(latch_ch2_w ) // oki
+
+ AM_RANGE(0x2800, 0xdfff) AM_ROM
+ AM_RANGE(0xe000, 0xffff) AM_ROMBANK("bank1") /* 64k paged ROM (4 pages) */
+
ADDRESS_MAP_END
@@ -530,8 +618,6 @@ WRITE8_MEMBER( maygay1b_state::lamp_data_2_w )
// machine driver for maygay m1 board /////////////////////////////////
-
-
MACHINE_CONFIG_START( maygay_m1, maygay1b_state )
MCFG_CPU_ADD("maincpu", M6809, M1_MASTER_CLOCK/2)
@@ -546,16 +632,20 @@ MACHINE_CONFIG_START( maygay_m1, maygay1b_state )
MCFG_PIA_WRITEPB_HANDLER(WRITE8(maygay1b_state, m1_pia_portb_w))
MCFG_S16LF01_ADD("vfd",0)
- MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("aysnd", YM2149, M1_MASTER_CLOCK)
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(maygay1b_state, m1_meter_w))
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(maygay1b_state, m1_lockout_w))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_SOUND_ADD("ymsnd", YM2413, M1_MASTER_CLOCK/4)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
- MCFG_SOUND_ADD("msm6376", OKIM6376, M1_MASTER_CLOCK/4) //?
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_SOUND_ADD("msm6376", OKIM6376, 102400) //? Seems to work well with samples, but unconfirmed
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MCFG_TIMER_DRIVER_ADD_PERIODIC("nmitimer", maygay1b_state, maygay1b_nmitimer_callback, attotime::from_hz(75)) // freq?
MCFG_DEVICE_ADD("i8279", I8279, M1_MASTER_CLOCK/4) // unknown clock
@@ -571,27 +661,29 @@ MACHINE_CONFIG_START( maygay_m1, maygay1b_state )
MACHINE_CONFIG_END
+MACHINE_CONFIG_DERIVED( maygay_m1_nec, maygay_m1 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(m1_nec_memmap)
-
-
-
-
+ MCFG_DEVICE_REMOVE("msm6376")
+
+ MCFG_SOUND_ADD("upd", UPD7759, UPD7759_STANDARD_CLOCK)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
+MACHINE_CONFIG_END
WRITE8_MEMBER(maygay1b_state::m1ab_no_oki_w)
{
popmessage("write to OKI, but no OKI rom");
}
-DRIVER_INIT_MEMBER(maygay1b_state,m1)
+DRIVER_INIT_MEMBER(maygay1b_state,m1common)
{
- //AM_RANGE(0x2420, 0x2421) AM_WRITE(latch_ch2_w ) // oki
- // if there is no OKI region disable writes here, the rom might be missing, so alert user
-
- UINT8 *okirom = memregion( "msm6376" )->base();
+ //Initialise paging for non-extended ROM space
+ UINT8 *rom = memregion("maincpu")->base();
+ membank("bank1")->configure_entries(0, 1, &rom[0x0e000], 0x10000);
+ membank("bank1")->set_entry(0);
- if (!okirom) {
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x2420, 0x2421, write8_delegate(FUNC(maygay1b_state::m1ab_no_oki_w), this));
- }
// print out the rom id / header info to give us some hints
// note this isn't always correct, alley cat has 'Calpsyo' still in the ident string?
{
@@ -618,3 +710,23 @@ DRIVER_INIT_MEMBER(maygay1b_state,m1)
}
}
}
+
+
+DRIVER_INIT_MEMBER(maygay1b_state,m1nec)
+{
+ DRIVER_INIT_CALL(m1common);
+}
+
+DRIVER_INIT_MEMBER(maygay1b_state,m1)
+{
+ DRIVER_INIT_CALL(m1common);
+
+ //AM_RANGE(0x2420, 0x2421) AM_WRITE(latch_ch2_w ) // oki
+ // if there is no OKI region disable writes here, the rom might be missing, so alert user
+
+ UINT8 *okirom = memregion( "msm6376" )->base();
+
+ if (!okirom) {
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0x2420, 0x2421, write8_delegate(FUNC(maygay1b_state::m1ab_no_oki_w), this));
+ }
+}
diff --git a/src/mame/drivers/maygay1bsw.c b/src/mame/drivers/maygay1bsw.c
index 1069ef38903..3c3e6b3ca81 100644
--- a/src/mame/drivers/maygay1bsw.c
+++ b/src/mame/drivers/maygay1bsw.c
@@ -49,17 +49,17 @@ GAME( 199?, m1blkhol ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT
// uPD7759 rom?
#define m1_bargn_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "bgsnd", 0x0000, 0x020000, CRC(abe7c01d) SHA1(21caadcd149772dfd79a9d30ebc1d8da91ff36f4) )
ROM_START( m1bargn ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa4-077.bin", 0x0000, 0x010000, CRC(7ae8ea12) SHA1(537f828bdaba3c63abb83b5417a4ec115834a48a) ) m1_bargn_sound ROM_END_M1A_MCU
ROM_START( m1bargnp ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa4-078.bin", 0x0000, 0x010000, CRC(dcc0b83e) SHA1(a85e3f60decb7dbc2de77b93dd8a79ff137d85b7) ) m1_bargn_sound ROM_END_M1A_MCU
ROM_START( m1bargnc ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa2-141", 0x0000, 0x010000, CRC(9dcaaaa9) SHA1(6cd015990036c2e20e4f4a2e19a363e6c565b473) ) m1_bargn_sound ROM_END_M1A_MCU
ROM_START( m1bargncp ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa2-142", 0x0000, 0x010000, CRC(2972747a) SHA1(6854a3cd9c6a834a24a0d8c763fa2a18c1d26a10) ) m1_bargn_sound ROM_END_M1A_MCU
-GAME( 1990, m1bargn ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bar-gain (Maygay) v7.1 (M1A/B)",GAME_FLAGS )
-GAME( 1990, m1bargnp ,m1bargn ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bar-gain (Maygay) v7.1 (Protocol) (M1A/B)",GAME_FLAGS )
-GAME( 1990, m1bargnc ,m1bargn ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Casino Bar-gain (Maygay) v5.1 (M1A/B)",GAME_FLAGS )
-GAME( 1990, m1bargncp ,m1bargn ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Casino Bar-gain (Maygay) v5.1 (Protocol)(M1A/B)",GAME_FLAGS )
+GAME( 1990, m1bargn ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Bar-gain (Maygay) v7.1 (M1A/B)",GAME_FLAGS )
+GAME( 1990, m1bargnp ,m1bargn ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Bar-gain (Maygay) v7.1 (Protocol) (M1A/B)",GAME_FLAGS )
+GAME( 1990, m1bargnc ,m1bargn ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Casino Bar-gain (Maygay) v5.1 (M1A/B)",GAME_FLAGS )
+GAME( 1990, m1bargncp ,m1bargn ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Casino Bar-gain (Maygay) v5.1 (Protocol)(M1A/B)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Bounty Hunter Club
@@ -67,13 +67,13 @@ GAME( 1990, m1bargncp ,m1bargn ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT
// uPD7759 rom?
#define m1_bounty_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "bgsnd", 0x0000, 0x020000, CRC(abe7c01d) SHA1(21caadcd149772dfd79a9d30ebc1d8da91ff36f4) )
ROM_START( m1bountc ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sc4-107.bin", 0x0000, 0x010000, CRC(0bdf41b3) SHA1(ce3564433a708ba50ca4099a26b1f75cf3cec947) ) m1_bounty_sound ROM_END_M1A_MCU //1.3
ROM_START( m1bountcp ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sc4-108.bin", 0x0000, 0x010000, CRC(adf7139f) SHA1(5b2bd367df31e3c76d9fac2a71a90800d95c4719) ) m1_bounty_sound ROM_END_M1A_MCU //1.3P
-GAME( 199?, m1bountc ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bounty Hunter Club (Maygay) v1.3 (M1A/B)",GAME_FLAGS )
-GAME( 199?, m1bountcp ,m1bountc ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Bounty Hunter Club (Maygay) v1.3 (Protocol) (M1A/B)",GAME_FLAGS )
+GAME( 199?, m1bountc ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Bounty Hunter Club (Maygay) v1.3 (M1A/B)",GAME_FLAGS )
+GAME( 199?, m1bountcp ,m1bountc ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Bounty Hunter Club (Maygay) v1.3 (Protocol) (M1A/B)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Criss Cross Club (Dutch)
@@ -81,11 +81,11 @@ GAME( 199?, m1bountcp ,m1bountc ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT
// uPD7759 rom?
#define m1_criss_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "ccsound.bin", 0x0000, 0x040000, CRC(8742981e) SHA1(1ba33c59ec5f878ebab111a77551213aad4b0993) )
ROM_START( m1criss ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sdt-050", 0x0000, 0x010000, CRC(422c5c6d) SHA1(b3a86f7482f0376b93899d28d4e6c610200fcd3a) ) m1_criss_sound ROM_END_M1A_MCU
-GAME( 199?, m1criss ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Criss Cross Club (Maygay) (Dutch) (M1A/B)",GAME_FLAGS )
+GAME( 199?, m1criss ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Criss Cross Club (Maygay) (Dutch) (M1A/B)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Diamond Hearts
@@ -343,7 +343,7 @@ GAME( 1997, m1cik11np ,m1cik ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT
// uPD7759 rom?
#define m1_dxmono_sound\
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 )\
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 )\
ROM_LOAD( "delmonopolysound.bin", 0x0000, 0x040000, CRC(8742981e) SHA1(1ba33c59ec5f878ebab111a77551213aad4b0993) )
ROM_START( m1dxmono ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa6-018", 0x0000, 0x010000, CRC(134e772a) SHA1(e85a90ed475cd3b38e9174146b15c66c958116e5) ) m1_dxmono_sound ROM_END_M1A_MCU //M5.1 (code 48)
ROM_START( m1dxmonop ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa6-019", 0x0000, 0x010000, CRC(fba6eacc) SHA1(80576722f5862c1f27eb6e6d43d9a0a665e611c6) ) m1_dxmono_sound ROM_END_M1A_MCU //M5.1 Protocol (code 48)
@@ -366,26 +366,26 @@ ROM_START( m1dxmono11o ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_START( m1dxmono11m ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa3-007", 0x0000, 0x010000, CRC(303bea68) SHA1(987f015818a1d97299af824c0ab58c9c6f8a2acb) ) m1_dxmono_sound ROM_END_M1A_MCU //sa3007 M 1.1 92
ROM_START( m1dxmono11mb ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa2-356", 0x0000, 0x010000, CRC(3d4394e9) SHA1(43da2007f1408d45764f0eba8594c800ad7ffc60) ) m1_dxmono_sound ROM_END_M1A_MCU //m1.1 sa2356
-GAME( 1992, m1dxmono ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmonop ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (Protocol) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono12n ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.2 (Newer) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono31b ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.1 (BwB set) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono31p ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.1 (Protocol) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono31h ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.1 (Hack) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono31h2,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.1 (Alternate Hack) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono51 ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono12 ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.2 (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono12p ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.2 (Protocol) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono12a ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.2 (Alternate) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono21p ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v2.1 (Protocol) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono11p ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (Protocol) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono11 ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono51o ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B) (alt?)",GAME_FLAGS )
-GAME( 1992, m1dxmono51p ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (Older) (Protocol) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono30h ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.0 (Hack) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono11o ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (Older) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono11m ,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (Code M) (M1A/B)",GAME_FLAGS )
-GAME( 1992, m1dxmono11mb,m1dxmono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (Code M, Alternate) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmonop ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (Protocol) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono12n ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.2 (Newer) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono31b ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.1 (BwB set) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono31p ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.1 (Protocol) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono31h ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.1 (Hack) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono31h2,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.1 (Alternate Hack) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono51 ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono12 ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.2 (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono12p ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.2 (Protocol) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono12a ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.2 (Alternate) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono21p ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v2.1 (Protocol) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono11p ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (Protocol) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono11 ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono51o ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (Older) (M1A/B) (alt?)",GAME_FLAGS )
+GAME( 1992, m1dxmono51p ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v5.1 (Older) (Protocol) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono30h ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v3.0 (Hack) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono11o ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (Older) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono11m ,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (Code M) (M1A/B)",GAME_FLAGS )
+GAME( 1992, m1dxmono11mb,m1dxmono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Deluxe Monopoly (Maygay) v1.1 (Code M, Alternate) (M1A/B)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Cluedo
@@ -415,10 +415,8 @@ ROM_START( m1cluedob2 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_START( m1cluedob2p ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa5-303", 0x0000, 0x010000, CRC(e0eb84c2) SHA1(3c2db9d41b9c561a483293f2258b654547d937d4) ) m1_cluedo_sound ROM_END_M1A_MCU //pbu 2.1 BwB 1995
ROM_START( m1cluedob1 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa5-326", 0x0000, 0x010000, CRC(0ace83db) SHA1(3387ac8583bc4ba7933abe001bc64a2b06a5451f) ) m1_cluedo_sound ROM_END_M1A_MCU //nbu 1.1 BwB 1995 (newer) cl_x6___.2o1
ROM_START( m1cluedob1p ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa5-327", 0x0000, 0x010000, CRC(e2261e3d) SHA1(50be56d1c28a31fcdb12a83c230a983bd6c60f62) ) m1_cluedo_sound ROM_END_M1A_MCU //pbu 1.1 BwB 1995 (newer)cl_x6_d_.2o1
-#ifdef MISSING_GAME // these being disabled is likely a mistake
ROM_START( m1cluedobi2 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa5-328", 0x0000, 0x010000, CRC(7aa2e6bd) SHA1(82752cd0e89d487016ccb50e55d2d7e11e5bb0ad) ) m1_cluedo_sound ROM_END_M1A_MCU //nbu 2.1 BwB 1995 (IoM) clix6___.2o1
ROM_START( m1cluedobi2p ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "sa5-329", 0x0000, 0x010000, CRC(924a7b5b) SHA1(102fba24040c9f968f80747b830fda05444c69aa) ) m1_cluedo_sound ROM_END_M1A_MCU //pbu 2.1 BwB 1995 (IoM) clix6_d_.2o1
-#endif
ROM_START( m1cluedob2h ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "clu5p8", 0x0000, 0x010000, CRC(fb6c6527) SHA1(e42683512c537d653593c67a8d238069ac2f2d0e) ) m1_cluedo_sound ROM_END_M1A_MCU //nbu 2.0 - nop'd copyright string
ROM_START( m1cluedob1h ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "clu55", 0x0000, 0x010000, CRC(c852a989) SHA1(ff79e65f80d4230a0e0f9e87a9dcc544a5197a1a) ) m1_cluedo_sound ROM_END_M1A_MCU //nbu 1.0 - nop'd copyright string
@@ -433,6 +431,8 @@ GAME( 1995, m1cluedonp ,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT
GAME( 1995, m1cluedob2 ,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay/BwB", "Cluedo (Maygay/BwB) v2.1 (M1A/B)",GAME_FLAGS )
GAME( 1995, m1cluedob2p ,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay/BwB", "Cluedo (Maygay/BwB) v2.1 (Protocol) (M1A/B)",GAME_FLAGS )
GAME( 1995, m1cluedob2h ,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay/BwB", "Cluedo (Maygay/BwB) v2.1 (Hack?) (M1A/B)",GAME_FLAGS )
+GAME( 1995, m1cluedobi2 ,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay/BwB", "Cluedo (Maygay/BwB) v2.1 (Isle of Man) (M1A/B)",GAME_FLAGS )
+GAME( 1995, m1cluedobi2p,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay/BwB", "Cluedo (Maygay/BwB) v2.1 (Isle of Man) (Protocol) (M1A/B)",GAME_FLAGS )
GAME( 1995, m1cluedob1 ,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay/BwB", "Cluedo (Maygay/BwB) v1.1 (M1A/B)",GAME_FLAGS )
GAME( 1995, m1cluedob1p ,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay/BwB", "Cluedo (Maygay/BwB) v1.1 (Protocol) (M1A/B)",GAME_FLAGS )
GAME( 1995, m1cluedob1h ,m1cluedo ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay/BwB", "Cluedo (Maygay/BwB) v1.1 (Hack?) (M1A/B)",GAME_FLAGS )
@@ -1146,80 +1146,80 @@ GAME( 199?, m1itsko8 ,m1itsko ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT
// uPD7759 rom?
#define m1_mono_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "monopolysnd.bin", 0x0000, 0x020000, CRC(f93ef281) SHA1(b2c2bf361c44499a13731d494af66d2aa45ccebd) )
ROM_START( m1mono ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("maygaymonopoly delx 5p-10p 6.bin", 0x0000, 0x010000, CRC(ed3c5997) SHA1(5a1e82894bd71073e08136a9071528833b529f5e) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
+GAME( 199?, m1mono ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
ROM_START( m1monoa ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("mon deluxe old 6 5_10.bin", 0x0000, 0x010000, CRC(f6ff2c55) SHA1(dec0be9c5584285b47943dd7d8751acd5e244daf) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoa ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
+GAME( 199?, m1monoa ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
ROM_START( m1monoc ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("mon5p5cbin", 0x0000, 0x010000, CRC(5589d97d) SHA1(d8776200d5c85fc1946ab4a4d0f7b7fb721a08f0) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoc ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
+GAME( 199?, m1monoc ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
ROM_START( m1monod ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("mono10", 0x0000, 0x010000, CRC(25b617b9) SHA1(adffbae086c83c1d9342e0fdded0ec8651f4efdd) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monod ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
+GAME( 199?, m1monod ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
ROM_START( m1monoe ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("mono10p", 0x0000, 0x010000, CRC(e7eead08) SHA1(94a512ff43487c4294afa3f280759ae86489ccbf) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoe ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 6)",GAME_FLAGS )
+GAME( 199?, m1monoe ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 6)",GAME_FLAGS )
ROM_START( m1monof ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("mono8", 0x0000, 0x010000, CRC(e19cf85b) SHA1(24bfa0086bda37f9ca9b5cf4cdc7d7873c305e76) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monof ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 7)",GAME_FLAGS )
+GAME( 199?, m1monof ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 7)",GAME_FLAGS )
ROM_START( m1monog ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("monopoly 5p.bin", 0x0000, 0x010000, CRC(75125a1d) SHA1(20a16835b39d3eaa38c88ed885aef04bdb08bb65) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monog ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 8)",GAME_FLAGS )
+GAME( 199?, m1monog ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 8)",GAME_FLAGS )
ROM_START( m1monoh ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("monopoly6jp.bin", 0x0000, 0x010000, CRC(4a5bc1a5) SHA1(09d576ef92ac03a1e5e5d852851414830ee7ebe9) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoh ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 9)",GAME_FLAGS )
+GAME( 199?, m1monoh ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 9)",GAME_FLAGS )
ROM_START( m1monoi ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("monopoly_5p10p_ndp_6pound-sa5-015.bin", 0x0000, 0x010000, CRC(03e359b7) SHA1(e469adaf5d0ed6e44c17a5881bbb42b391d680ee) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoi ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 10)",GAME_FLAGS )
+GAME( 199?, m1monoi ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 10)",GAME_FLAGS )
ROM_START( m1monok ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-005", 0x0000, 0x010000, CRC(6aeecc7e) SHA1(2d2d077c26e01f35a7b76533a4d27a7266e1a1cb) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monok ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 12)",GAME_FLAGS )
+GAME( 199?, m1monok ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 12)",GAME_FLAGS )
ROM_START( m1monol ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-314", 0x0000, 0x010000, CRC(708a92ea) SHA1(0f5b9123e4356447215a6d76764c6a124a5206e2) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monol ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 13)",GAME_FLAGS )
+GAME( 199?, m1monol ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 13)",GAME_FLAGS )
ROM_START( m1monom ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-315", 0x0000, 0x010000, CRC(98620f0c) SHA1(a92f3ccf36dde20dc5ba8e655212f8a7d8888ce4) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monom ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 14)",GAME_FLAGS )
+GAME( 199?, m1monom ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 14)",GAME_FLAGS )
ROM_START( m1monon ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-316", 0x0000, 0x010000, CRC(b0c9b2d2) SHA1(4d6efe7453a398cd8f8a7290a4ea13ee1027425c) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monon ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 15)",GAME_FLAGS )
+GAME( 199?, m1monon ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 15)",GAME_FLAGS )
ROM_START( m1monoo ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-317", 0x0000, 0x010000, CRC(58212f34) SHA1(04ee3037861ca97d874fa24954ce3c76fca7e815) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoo ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 16)",GAME_FLAGS )
+GAME( 199?, m1monoo ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 16)",GAME_FLAGS )
ROM_START( m1monop ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa5-035", 0x0000, 0x010000, CRC(a4e07340) SHA1(c566e5ddb780755a8e16454eec8aecfa8d4130a6) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monop ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 17)",GAME_FLAGS )
+GAME( 199?, m1monop ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 17)",GAME_FLAGS )
ROM_START( m1monoq ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa5-036", 0x0000, 0x010000, CRC(1058ad93) SHA1(2a53a5af56e148526ddc47deb49bf3d5aa3063b5) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoq ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 18)",GAME_FLAGS )
+GAME( 199?, m1monoq ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 18)",GAME_FLAGS )
ROM_START( m1monor ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa6-005", 0x0000, 0x010000, CRC(6b3655bb) SHA1(cd600a6a1730765bf271cc195343712fb2ba3ad7) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monor ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 19)",GAME_FLAGS )
+GAME( 199?, m1monor ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 19)",GAME_FLAGS )
ROM_START( m1monos ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa6-007", 0x0000, 0x010000, CRC(ac7c3a2f) SHA1(50d734a2b58d78bfe3fce6455caca0524c464d7e) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monos ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 20)",GAME_FLAGS )
+GAME( 199?, m1monos ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 20)",GAME_FLAGS )
ROM_START( m1monot ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa6-008", 0x0000, 0x010000, CRC(0a546803) SHA1(6122bf392f37c420cf194ff3b21d5b1e615c437f) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monot ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 21)",GAME_FLAGS )
+GAME( 199?, m1monot ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 21)",GAME_FLAGS )
ROM_START( m1monou ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa6-009", 0x0000, 0x010000, CRC(07f82db9) SHA1(a46a4a62d7d4ca9fcf9674301f9960e04b879b20) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monou ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 22)",GAME_FLAGS )
+GAME( 199?, m1monou ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 22)",GAME_FLAGS )
ROM_START( m1monov ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa6-010", 0x0000, 0x010000, CRC(876ed0d1) SHA1(6af96a7e0ff2757836741054f19cfe3469bc0bb5) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monov ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 23)",GAME_FLAGS )
+GAME( 199?, m1monov ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 23)",GAME_FLAGS )
ROM_START( m1monow ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("mono5p", 0x0000, 0x010000, CRC(805d33e8) SHA1(4d946ee37f8d25f0f7bb3497a538974e1bae14b1) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monow ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 24)",GAME_FLAGS )
+GAME( 199?, m1monow ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 24)",GAME_FLAGS )
ROM_START( m1monox ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("mox3&1", 0x0000, 0x010000, CRC(8a790928) SHA1(91594136eb133b6112beb036a973756d0b54b648) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monox ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 25)",GAME_FLAGS )
+GAME( 199?, m1monox ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 25)",GAME_FLAGS )
ROM_START( m1monoy ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-205.bin", 0x0000, 0x010000, CRC(7461f169) SHA1(5d54d259d252fddd0c222790cdcd098267a8f9a7) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoy ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 26)",GAME_FLAGS )
+GAME( 199?, m1monoy ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 26)",GAME_FLAGS )
ROM_START( m1monoz ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-206.bin", 0x0000, 0x010000, CRC(c0d92fba) SHA1(c6ef33c26bbdd522107622235f4d429d4043fe9e) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoz ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 27)",GAME_FLAGS )
+GAME( 199?, m1monoz ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 27)",GAME_FLAGS )
ROM_START( m1mono0 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-207.bin", 0x0000, 0x010000, CRC(de05924e) SHA1(fa5ff4383161989481765c8cbf73322d180104ed) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono0 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 28)",GAME_FLAGS )
+GAME( 199?, m1mono0 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 28)",GAME_FLAGS )
ROM_START( m1mono1 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-208.bin", 0x0000, 0x010000, CRC(782dc062) SHA1(bd43e37b02db247f0c5c41c273dc67a8b80ca7d9) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono1 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 29)",GAME_FLAGS )
+GAME( 199?, m1mono1 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 29)",GAME_FLAGS )
ROM_START( m1mono2 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-211.bin", 0x0000, 0x010000, CRC(faac3556) SHA1(13b7dd369994669eb971807620c0434ce425f918) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono2 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 30)",GAME_FLAGS )
+GAME( 199?, m1mono2 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 30)",GAME_FLAGS )
ROM_START( m1mono3 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-212.bin", 0x0000, 0x010000, CRC(4e14eb85) SHA1(eb26b5593e250d0b508b346821ee7591d800dacf) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono3 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 31)",GAME_FLAGS )
+GAME( 199?, m1mono3 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 31)",GAME_FLAGS )
ROM_START( m1mono4 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-601", 0x0000, 0x010000, CRC(1b5ad34d) SHA1(4f32fa4c8a667b19b09e5b4e4a1dee2e2f8b4bf0) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono4 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 32)",GAME_FLAGS )
+GAME( 199?, m1mono4 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 32)",GAME_FLAGS )
ROM_START( m1mono5 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-602", 0x0000, 0x010000, CRC(afe20d9e) SHA1(5f1648443c46138d1256f8da92179b2c58ddfd4b) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono5 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 33)",GAME_FLAGS )
+GAME( 199?, m1mono5 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 33)",GAME_FLAGS )
ROM_START( m1mono6 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-603", 0x0000, 0x010000, CRC(98fe65f2) SHA1(4944291118d5ed7a642d15441bf7e67ab489ffda) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono6 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 34)",GAME_FLAGS )
+GAME( 199?, m1mono6 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 34)",GAME_FLAGS )
ROM_START( m1mono7 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-604", 0x0000, 0x010000, CRC(94e63d4b) SHA1(81c549ebc8b28c005fdfc430d49e548403d72ce0) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono7 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 35)",GAME_FLAGS )
+GAME( 199?, m1mono7 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 35)",GAME_FLAGS )
ROM_START( m1mono8 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa5-016", 0x0000, 0x010000, CRC(b75b8764) SHA1(91513702719d6a3049f264c5e547b8a69058b82c) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono8 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 36)",GAME_FLAGS )
+GAME( 199?, m1mono8 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 36)",GAME_FLAGS )
ROM_START( m1mono9 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa5-184", 0x0000, 0x010000, CRC(51a8fde3) SHA1(c73441f79b877aaed57791629de9f9b02ff544da) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1mono9 ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 37)",GAME_FLAGS )
+GAME( 199?, m1mono9 ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 37)",GAME_FLAGS )
ROM_START( m1monoaa ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa5-185", 0x0000, 0x010000, CRC(b9406005) SHA1(f1b025140ba7579b1eeb497a64c348df5a341d5d) ) m1_mono_sound ROM_END_M1A_MCU
-GAME( 199?, m1monoaa ,m1mono ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 38)",GAME_FLAGS )
+GAME( 199?, m1monoaa ,m1mono ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Maygay) (M1A/B) (set 38)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Gladiators
@@ -1518,46 +1518,46 @@ GAME( 199?, m1jbondq ,m1jbond ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "M
// uPD7759 rom?
#define m1_pinkp_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD("digi16.bin", 0x0000, 0x040000, CRC(ee8bc3ea) SHA1(b58fad236055db30a75bb12946e8ad76638865a0) )
ROM_START( m1pinkp ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("pink2010", 0x0000, 0x010000, CRC(a098952f) SHA1(d62351d16aa6f34b20774dd6f38ffdada09b49be) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkp ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
+GAME( 199?, m1pinkp ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
ROM_START( m1pinkpa ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("pink58c", 0x0000, 0x010000, CRC(fb0ee333) SHA1(3af5362486de70971f606dd914f8e658015dcf82) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpa ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
+GAME( 199?, m1pinkpa ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
ROM_START( m1pinkpb ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("pink5p5bin", 0x0000, 0x010000, CRC(97f6cda4) SHA1(338362a2dc0538feea08c98c27af2aec1ec46c08) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpb ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
+GAME( 199?, m1pinkpb ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
ROM_START( m1pinkpc ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("pinkp.bin", 0x0000, 0x010000, CRC(659d8067) SHA1(86cdeab73dd610dc9a0c69b95e74cf2d9bb36830) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpc ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
+GAME( 199?, m1pinkpc ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
ROM_START( m1pinkpd ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("pinkp206", 0x0000, 0x010000, CRC(baf9dbe2) SHA1(5293294abd0713aff969012d818dd6e8b637b74a) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpd ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
+GAME( 199?, m1pinkpd ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
ROM_START( m1pinkpe ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("pinkp8s", 0x0000, 0x010000, CRC(aaf4c565) SHA1(e2d04852e3700b3d19e5245aec2ce57725c728cb) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpe ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 6)",GAME_FLAGS )
+GAME( 199?, m1pinkpe ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 6)",GAME_FLAGS )
ROM_START( m1pinkpf ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("pinkpanther8key20p.bin", 0x0000, 0x010000, CRC(6888e768) SHA1(8b1f076ad6905367956097f7ac2ca3d49a3ed97f) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpf ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 7)",GAME_FLAGS )
+GAME( 199?, m1pinkpf ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 7)",GAME_FLAGS )
ROM_START( m1pinkpg ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("ppanthersa3-026 nd.bin", 0x0000, 0x010000, CRC(189bc301) SHA1(2b9a190e3b5e008b291d0f4b14fa5874c6f867c4) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpg ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 8)",GAME_FLAGS )
+GAME( 199?, m1pinkpg ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 8)",GAME_FLAGS )
ROM_START( m1pinkph ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-122.bin", 0x0000, 0x010000, CRC(3bc43552) SHA1(a8c6f314de3148b1b75fb89816e26ac07ee2ef93) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkph ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 9)",GAME_FLAGS )
+GAME( 199?, m1pinkph ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 9)",GAME_FLAGS )
ROM_START( m1pinkpi ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-123.bin", 0x0000, 0x010000, CRC(d32ca8b4) SHA1(ebf64436e10f9eb40b938f55845b82e70753fef4) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpi ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 10)",GAME_FLAGS )
+GAME( 199?, m1pinkpi ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 10)",GAME_FLAGS )
ROM_START( m1pinkpj ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-060.bin", 0x0000, 0x010000, CRC(bae6af78) SHA1(2ac64db6cbbf41314787db0c6a14666d0a16aa63) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpj ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 11)",GAME_FLAGS )
+GAME( 199?, m1pinkpj ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 11)",GAME_FLAGS )
ROM_START( m1pinkpk ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-137.bin", 0x0000, 0x010000, CRC(64a22d91) SHA1(e1d08950da85bf5e1146633d53ab8149d639c3e1) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpk ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 12)",GAME_FLAGS )
+GAME( 199?, m1pinkpk ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 12)",GAME_FLAGS )
ROM_START( m1pinkpl ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-139", 0x0000, 0x010000, CRC(e7a170dc) SHA1(120b136b54401755a8ef169ec9f2a510a9b01899) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpl ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 13)",GAME_FLAGS )
+GAME( 199?, m1pinkpl ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 13)",GAME_FLAGS )
ROM_START( m1pinkpm ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-140", 0x0000, 0x010000, CRC(8701fb2d) SHA1(003f24baa72d56eae9027af557592ccf8c150fa2) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpm ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 14)",GAME_FLAGS )
+GAME( 199?, m1pinkpm ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 14)",GAME_FLAGS )
ROM_START( m1pinkpn ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-612", 0x0000, 0x010000, CRC(d7d4e529) SHA1(f41bf31b68421010d6ab507da250e8eefdda2376) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpn ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 15)",GAME_FLAGS )
+GAME( 199?, m1pinkpn ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 15)",GAME_FLAGS )
ROM_START( m1pinkpo ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-613", 0x0000, 0x010000, CRC(3f3c78cf) SHA1(bf2c84bf81c0bd9d32a2c3ca3eef132efed6baea) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpo ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 16)",GAME_FLAGS )
+GAME( 199?, m1pinkpo ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 16)",GAME_FLAGS )
ROM_START( m1pinkpp ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-614", 0x0000, 0x010000, CRC(632e1f05) SHA1(1fbae16a0addc8baf10f6332860bb98a56b0e94a) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpp ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 17)",GAME_FLAGS )
+GAME( 199?, m1pinkpp ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 17)",GAME_FLAGS )
ROM_START( m1pinkpq ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-615", 0x0000, 0x010000, CRC(8bc682e3) SHA1(39f2eb7e4e9c36f64b0efe2b347f93638d9b6e09) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpq ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 18)",GAME_FLAGS )
+GAME( 199?, m1pinkpq ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 18)",GAME_FLAGS )
ROM_START( m1pinkpr ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("ppix6___.281", 0x0000, 0x010000, CRC(386c7d02) SHA1(67a52332a76d82909455174cce5067469654ccd0) ) m1_pinkp_sound ROM_END_M1A_MCU
-GAME( 199?, m1pinkpr ,m1pinkp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 19)",GAME_FLAGS )
+GAME( 199?, m1pinkpr ,m1pinkp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (Maygay) (M1A/B) (set 19)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Nudge Banker
@@ -2353,10 +2353,10 @@ GAME( 199?, m1manhat ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0,
// uPD7759 rom?
#define m1_monodt_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "monopolysnddutch.bin", 0x0000, 0x040000, CRC(8742981e) SHA1(1ba33c59ec5f878ebab111a77551213aad4b0993) )
ROM_START( m1monodt ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "monopoly.bin", 0x0000, 0x010000, CRC(b7a2911b) SHA1(74507dd3a947d1b4d7bd0b58adb53d4f6e7ce200) ) m1_monodt_sound ROM_END_M1A_MCU
-GAME( 199?, m1monodt ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly (Dutch) (Maygay) (M1A/B)",GAME_FLAGS )
+GAME( 199?, m1monodt ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly (Dutch) (Maygay) (M1A/B)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Pink Panther (Dutch)
@@ -2364,10 +2364,10 @@ GAME( 199?, m1monodt ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0,
// uPD7759 rom?
#define m1_ppdt_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "ppsound.bin", 0x0000, 0x040000, CRC(8742981e) SHA1(1ba33c59ec5f878ebab111a77551213aad4b0993) )
ROM_START( m1ppdt ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "pinkpanther.bin", 0x0000, 0x010000, CRC(09040f9d) SHA1(25c545e599711bf5ff2361c51e6629b69673da33) ) m1_ppdt_sound ROM_END_M1A_MCU
-GAME( 199?, m1ppdt ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Pink Panther (German) (Maygay) (M1A/B)",GAME_FLAGS )
+GAME( 199?, m1ppdt ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Pink Panther (German) (Maygay) (M1A/B)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Supernova
@@ -2375,10 +2375,10 @@ GAME( 199?, m1ppdt ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0
// uPD7759 rom?
#define m1_sprnov_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "supernovasnd.bin", 0x0000, 0x020000, CRC(f91e2c05) SHA1(e189c14214f4637d6a803893d79a41ad0fc8ebba) )
ROM_START( m1sprnov ) ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD( "supernovaprg.bin", 0x0000, 0x010000, CRC(6d533247) SHA1(475ecdcc10c9da558eb4d7c5e288d4724f65a5ce) ) m1_sprnov_sound ROM_END_M1A_MCU
-GAME( 199?, m1sprnov ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Super Nova (Dutch) (Maygay) (M1A/B)",GAME_FLAGS )
+GAME( 199?, m1sprnov ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Super Nova (Dutch) (Maygay) (M1A/B)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Take Note
@@ -2560,14 +2560,14 @@ GAME( 199?, m1winencc ,m1winenc ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "
// uPD7759 rom?
#define m1_mongam_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "mgamesnd", 0x0000, 0x040000, CRC(80ea7b3d) SHA1(a26dbc55ba205fc94c9b224c549516ba149627d7) )
ROM_START( m1mongam ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("mgame200", 0x0000, 0x010000, CRC(4cfe0ef2) SHA1(8dae7d1fdb6481902bcc38f3f993b55c7acc919b) ) m1_mongam_sound ROM_END_M1A_MCU
-GAME( 199?, m1mongam ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Money Game Club (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
+GAME( 199?, m1mongam ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Money Game Club (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
ROM_START( m1mongama ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sc5-114", 0x0000, 0x010000, CRC(63dbb45e) SHA1(3ccb45ae290b5e2d2249a36268a9e690846bf3d9) ) m1_mongam_sound ROM_END_M1A_MCU
-GAME( 199?, m1mongama ,m1mongam ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Money Game Club (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
+GAME( 199?, m1mongama ,m1mongam ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Money Game Club (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
ROM_START( m1mongamb ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sc5-115", 0x0000, 0x010000, CRC(8b3329b8) SHA1(2c89ac10ad82d8425104a74a7bc24aa9c28cbe01) ) m1_mongam_sound ROM_END_M1A_MCU
-GAME( 199?, m1mongamb ,m1mongam ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Money Game Club (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
+GAME( 199?, m1mongamb ,m1mongam ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Money Game Club (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Monopoly Classic
@@ -2575,18 +2575,18 @@ GAME( 199?, m1mongamb ,m1mongam ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "
// uPD7759 rom?
#define m1_moncls_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "classicmonopoly(maygay)soundromdig1-027.bin", 0x0000, 0x040000, CRC(d5243b51) SHA1(c7e3a61071c566e8ea9c8842839b70242ca67308) )
ROM_START( m1moncls ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-316", 0x0000, 0x010000, CRC(98f9d6b0) SHA1(f30fa1fb88bfd4098b189cf03a7e0b9dcc5bfdef) ) m1_moncls_sound ROM_END_M1A_MCU
-GAME( 199?, m1moncls ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
+GAME( 199?, m1moncls ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
ROM_START( m1monclsa ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-318", 0x0000, 0x010000, CRC(01e8224c) SHA1(dfad509c00d6311eb1e8bbbfe1ca5fd6aeb9da43) ) m1_moncls_sound ROM_END_M1A_MCU
-GAME( 199?, m1monclsa ,m1moncls ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
+GAME( 199?, m1monclsa ,m1moncls ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
ROM_START( m1monclsb ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-319", 0x0000, 0x010000, CRC(e900bfaa) SHA1(ce6f1021234979d0c27d5668b470fd31594ca222) ) m1_moncls_sound ROM_END_M1A_MCU
-GAME( 199?, m1monclsb ,m1moncls ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
+GAME( 199?, m1monclsb ,m1moncls ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
ROM_START( m1monclsc ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-120", 0x0000, 0x010000, CRC(c594d56d) SHA1(4a48f3d80c575025de7624528647891c179c1b0d) ) m1_moncls_sound ROM_END_M1A_MCU
-GAME( 199?, m1monclsc ,m1moncls ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
+GAME( 199?, m1monclsc ,m1moncls ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
ROM_START( m1monclsd ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-121", 0x0000, 0x010000, CRC(2d7c488b) SHA1(ee63973447cb21fa2872ed74612f431add2b7a46) ) m1_moncls_sound ROM_END_M1A_MCU
-GAME( 199?, m1monclsd ,m1moncls ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
+GAME( 199?, m1monclsd ,m1moncls ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Monopoly Classic (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Return Of The Pink Panther
@@ -2594,19 +2594,19 @@ GAME( 199?, m1monclsd ,m1moncls ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "
// uPD7759 rom?
#define m1_retpp_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
/* ROM_LOAD( "rotppsnd.bin", 0x0000, 0x002000, CRC(a8c8ff9a) SHA1(8069cf08f3a8481ebc589ad0c25887ea316facd5) ) */ /* bad dump of rom below */ \
ROM_LOAD( "roppsnd.bin", 0x0000, 0x040000, CRC(9f3484b3) SHA1(9d454644c967b22cf6583335807a0ed8495492cb) )
ROM_START( m1retpp ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("pinkpstd.bin", 0x0000, 0x010000, CRC(92bb56d8) SHA1(e033578c693f0faf1e91b76392106f0e6850d0dc) ) m1_retpp_sound ROM_END_M1A_MCU
-GAME( 199?, m1retpp ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
+GAME( 199?, m1retpp ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
ROM_START( m1retppa ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-519.bin", 0x0000, 0x010000, CRC(b8e04479) SHA1(3be940b433174623d177ffd892d8bc59170422b8) ) m1_retpp_sound ROM_END_M1A_MCU
-GAME( 199?, m1retppa ,m1retpp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
+GAME( 199?, m1retppa ,m1retpp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
ROM_START( m1retppb ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-520.bin", 0x0000, 0x010000, CRC(679b6b66) SHA1(a21e82221da54ba48a43c68d5c2c2f07ee9c2f34) ) m1_retpp_sound ROM_END_M1A_MCU
-GAME( 199?, m1retppb ,m1retpp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
+GAME( 199?, m1retppb ,m1retpp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
ROM_START( m1retppc ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-044.bin", 0x0000, 0x010000, CRC(9ea30e61) SHA1(1812582ac4f6069354e0f1b5a8f5bd1981cd6e8f) ) m1_retpp_sound ROM_END_M1A_MCU
-GAME( 199?, m1retppc ,m1retpp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
+GAME( 199?, m1retppc ,m1retpp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
ROM_START( m1retppd ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-230", 0x0000, 0x010000, CRC(42cd661a) SHA1(b5f5e3e9898155e8696eb97a7cf5e1855e190be1) ) m1_retpp_sound ROM_END_M1A_MCU
-GAME( 199?, m1retppd ,m1retpp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
+GAME( 199?, m1retppd ,m1retpp ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "Return Of The Pink Panther (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
That's Life
@@ -2614,18 +2614,18 @@ GAME( 199?, m1retppd ,m1retpp ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "M
// uPD7759 rom?
#define m1_thatlf_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "thatslifesound", 0x0000, 0x040000, CRC(5ac3a1f6) SHA1(5be73deb23d58fdc27dd41d210702b627e7ed324) )
ROM_START( m1thatlf ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa3-327.bin", 0x0000, 0x010000, CRC(634fc46e) SHA1(84e166a182384b3b6f29653a0542af74c268d766) ) m1_thatlf_sound ROM_END_M1A_MCU
-GAME( 199?, m1thatlf ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
+GAME( 199?, m1thatlf ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 1)",GAME_FLAGS )
ROM_START( m1thatlfa ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-075.bin", 0x0000, 0x010000, CRC(b5922c08) SHA1(c71cd3629436576c381b4f1b45011c34a49c66b7) ) m1_thatlf_sound ROM_END_M1A_MCU
-GAME( 199?, m1thatlfa ,m1thatlf ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
+GAME( 199?, m1thatlfa ,m1thatlf ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 2)",GAME_FLAGS )
ROM_START( m1thatlfb ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("sa4-076.bin", 0x0000, 0x010000, CRC(012af2db) SHA1(d6f1a24fe6674a423d190e9e04390cb01768bf4a) ) m1_thatlf_sound ROM_END_M1A_MCU
-GAME( 199?, m1thatlfb ,m1thatlf ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
+GAME( 199?, m1thatlfb ,m1thatlf ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 3)",GAME_FLAGS )
ROM_START( m1thatlfc ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("thatslifegame", 0x0000, 0x010000, CRC(8dafbe30) SHA1(9a7e8a66b73ddf6564a34363342a8b7290e0dc4f) ) m1_thatlf_sound ROM_END_M1A_MCU
-GAME( 199?, m1thatlfc ,m1thatlf ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
+GAME( 199?, m1thatlfc ,m1thatlf ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 4)",GAME_FLAGS )
ROM_START( m1thatlfd ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("thtslf5p", 0x0000, 0x010000, CRC(31507a65) SHA1(607b16cf3fde90f97e22247158f09d859a43c1ae) ) m1_thatlf_sound ROM_END_M1A_MCU
-GAME( 199?, m1thatlfd ,m1thatlf ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
+GAME( 199?, m1thatlfd ,m1thatlf ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Maygay", "That's Life (Maygay) (M1A/B) (set 5)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Big Ghoulies
@@ -2811,44 +2811,44 @@ GAME( 199?, m1thrillc ,m1thrill ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "
// uPD7759 rom?
#define m1_startr_sound \
- ROM_REGION( 0x100000, "msm6376", ROMREGION_ERASE00 ) \
+ ROM_REGION( 0x100000, "upd", ROMREGION_ERASE00 ) \
ROM_LOAD( "mdmstartrekkingsound.rom", 0x0000, 0x040000, CRC(4b673184) SHA1(dd90719ebc8644b4aa50091dc9ddd79f5d0f3395) )
ROM_START( m1startr ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk20d3_1.bin", 0x0000, 0x010000, CRC(a911ebc7) SHA1(7e74df1ca0fd5e0d04ece5ca307f4b1ab817c044) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startr ,0 ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 1)",GAME_FLAGS )
+GAME( 199?, m1startr ,0 ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 1)",GAME_FLAGS )
ROM_START( m1startra ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("st58dt", 0x0000, 0x010000, CRC(29b73d2d) SHA1(f4bfcce7b8f158e8ec964936c365a2c6f27f7945) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startra ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 2)",GAME_FLAGS )
+GAME( 199?, m1startra ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 2)",GAME_FLAGS )
ROM_START( m1startrb ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("st58st", 0x0000, 0x010000, CRC(b4b4c3f3) SHA1(7179d970c0e903ae3b4ba925fba29b9777bf969d) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrb ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 3)",GAME_FLAGS )
+GAME( 199?, m1startrb ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 3)",GAME_FLAGS )
ROM_START( m1startrc ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("startrekking-20p_8_5.bin", 0x0000, 0x010000, CRC(6455ae3b) SHA1(9521b69cdd4a0d6ed306ad713fd9a3924eae1e8d) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrc ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 4)",GAME_FLAGS )
+GAME( 199?, m1startrc ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 4)",GAME_FLAGS )
ROM_START( m1startrd ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk05d3_1.bin", 0x0000, 0x010000, CRC(b53552ca) SHA1(7b3fd9c5e858a0e1462c755ebfbc089879001c7c) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrd ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 5)",GAME_FLAGS )
+GAME( 199?, m1startrd ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 5)",GAME_FLAGS )
ROM_START( m1startre ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk05d5_0.bin", 0x0000, 0x010000, CRC(629a4c8c) SHA1(766933e4c6d352273c72e40ac0f2af73896d513d) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startre ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 6)",GAME_FLAGS )
+GAME( 199?, m1startre ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 6)",GAME_FLAGS )
ROM_START( m1startrf ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk05s3_1.bin", 0x0000, 0x010000, CRC(871db7ce) SHA1(4aac90a6ecab6d2c6b5d8b7af69059ef260c9c0c) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrf ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 7)",GAME_FLAGS )
+GAME( 199?, m1startrf ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 7)",GAME_FLAGS )
ROM_START( m1startrg ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk05s5_0.bin", 0x0000, 0x010000, CRC(6a600631) SHA1(1c85cd63db5225ca55ef0f26fc65008cb4af340b) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrg ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 8)",GAME_FLAGS )
+GAME( 199?, m1startrg ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 8)",GAME_FLAGS )
ROM_START( m1startrh ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk10d3_2.bin", 0x0000, 0x010000, CRC(5cebc22d) SHA1(6e6dd4c98ceb0c3cf541c6f8d00e3928f43dc763) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrh ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 9)",GAME_FLAGS )
+GAME( 199?, m1startrh ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 9)",GAME_FLAGS )
ROM_START( m1startri ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk10d5_0.bin", 0x0000, 0x010000, CRC(349855d0) SHA1(e83d764169e85b1f24b3cb7a0d9b1ce3228148c3) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startri ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 10)",GAME_FLAGS )
+GAME( 199?, m1startri ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 10)",GAME_FLAGS )
ROM_START( m1startrj ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk10s3_2.bin", 0x0000, 0x010000, CRC(7955d544) SHA1(1151e2b5dd3bd60846d28fa0fb49fe6bee06b765) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrj ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 11)",GAME_FLAGS )
+GAME( 199?, m1startrj ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 11)",GAME_FLAGS )
ROM_START( m1startrk ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk10s5_0.bin", 0x0000, 0x010000, CRC(6e871dcb) SHA1(cb74b94537f7cdbba6e254042f2b59409eb3b00c) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrk ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 12)",GAME_FLAGS )
+GAME( 199?, m1startrk ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 12)",GAME_FLAGS )
ROM_START( m1startrm ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk20d5_0.bin", 0x0000, 0x010000, CRC(ca3d3faa) SHA1(f19465212d3bc094a61d04c6c1c20e524a36dcf8) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrm ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 14)",GAME_FLAGS )
+GAME( 199?, m1startrm ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 14)",GAME_FLAGS )
ROM_START( m1startrn ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk20s3_1.bin", 0x0000, 0x010000, CRC(0193af35) SHA1(40094dd44da8d1d0d38ac95d4e951e6c88516eee) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrn ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 15)",GAME_FLAGS )
+GAME( 199?, m1startrn ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 15)",GAME_FLAGS )
ROM_START( m1startro ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk20s5_0.bin", 0x0000, 0x010000, CRC(b0532d71) SHA1(d3e111a4bc5638788bb67faebdd046224895cbb1) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startro ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 16)",GAME_FLAGS )
+GAME( 199?, m1startro ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 16)",GAME_FLAGS )
ROM_START( m1startrp ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk3.1c", 0x0000, 0x010000, CRC(affb3ea4) SHA1(64a670b074cd2f151e820428e0f7f485ec710efd) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrp ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 17)",GAME_FLAGS )
+GAME( 199?, m1startrp ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 17)",GAME_FLAGS )
ROM_START( m1startrq ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk5-5_0x.bin", 0x0000, 0x010000, CRC(1d32480d) SHA1(670c9d371755c500c29a31a350b3447bd2788c62) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrq ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 18)",GAME_FLAGS )
+GAME( 199?, m1startrq ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 18)",GAME_FLAGS )
ROM_START( m1startrr ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_LOAD("tk5_0x.bin", 0x0000, 0x010000, CRC(20a796f2) SHA1(1d46dbf3693294733595cd601e5be6f16ff685d3) ) m1_startr_sound ROM_END_M1A_MCU
-GAME( 199?, m1startrr ,m1startr ,maygay_m1,maygay_m1, maygay1b_state,m1, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 19)",GAME_FLAGS )
+GAME( 199?, m1startrr ,m1startr ,maygay_m1_nec,maygay_m1, maygay1b_state,m1nec, ROT0, "Mdm", "Star Trekking (Mdm) (M1A/B) (set 19)",GAME_FLAGS )
/*******************************************************************************************************************************************************************************************************
Tick Tock Cash
diff --git a/src/mame/drivers/mediagx.c b/src/mame/drivers/mediagx.c
index dff598dcf18..c900f16dc0a 100644
--- a/src/mame/drivers/mediagx.c
+++ b/src/mame/drivers/mediagx.c
@@ -66,7 +66,7 @@
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/midqslvr.c b/src/mame/drivers/midqslvr.c
index af631ee7206..d4995155e92 100644
--- a/src/mame/drivers/midqslvr.c
+++ b/src/mame/drivers/midqslvr.c
@@ -24,7 +24,7 @@
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/mpu4.c b/src/mame/drivers/mpu4.c
index 364da84d81b..572b2ad9236 100644
--- a/src/mame/drivers/mpu4.c
+++ b/src/mame/drivers/mpu4.c
@@ -2501,9 +2501,9 @@ GAME(199?, m4wildtm ,0 ,mod4oki ,mpu4 , mpu4_state,m4a
GAME(199?, m4frtgm ,0 ,mod4oki ,mpu4 , mpu4_state,m4altreels ,ROT0, "Barcrest","Fruit Game (Barcrest) (MPU4)",GAME_FLAGS ) // SAMPLE EEPROM ALARM (and has a weird sample rom..)
GAME(199?, m4reeltm ,0 ,mod4oki ,mpu4 , mpu4_state,m4altreels ,ROT0, "Barcrest","Reel Timer (Barcrest) (MPU4) (DWT)",GAME_FLAGS ) // SAMPLE EEPROM ALARM
-GAME(199?, m4fortcb ,0 ,mod4oki ,mpu4 , mpu4_state,m4altreels ,ROT0, "Barcrest","Fortune Club (Barcrest) (MPU4) (set 1)",GAME_FLAGS ) // INVALID ALARM
-GAME(199?, m4fortcba ,m4fortcb ,mod4oki ,mpu4 , mpu4_state,m4altreels ,ROT0, "Barcrest","Fortune Club (Barcrest) (MPU4) (set 2)",GAME_FLAGS ) // INVALID ALARM
-GAME(199?, m4fortcbb ,m4fortcb ,mod4oki ,mpu4 , mpu4_state,m4altreels ,ROT0, "Barcrest","Fortune Club (Barcrest) (MPU4) (set 3)",GAME_FLAGS ) // INVALID ALARM
+GAME(199?, m4fortcb ,0 ,mod4oki ,mpu4 , mpu4_state,m4altreels ,ROT0, "Barcrest","Fortune Club (Barcrest) (MPU4) (set 1)",GAME_FLAGS ) // INVALID ALARM
+GAME(199?, m4fortcba,m4fortcb ,mod4oki ,mpu4 , mpu4_state,m4altreels ,ROT0, "Barcrest","Fortune Club (Barcrest) (MPU4) (set 2)",GAME_FLAGS ) // INVALID ALARM
+GAME(199?, m4fortcbb,m4fortcb ,mod4oki ,mpu4 , mpu4_state,m4altreels ,ROT0, "Barcrest","Fortune Club (Barcrest) (MPU4) (set 3)",GAME_FLAGS ) // INVALID ALARM
diff --git a/src/mame/drivers/naomi.c b/src/mame/drivers/naomi.c
index 1e439fd66be..87dea74c617 100644
--- a/src/mame/drivers/naomi.c
+++ b/src/mame/drivers/naomi.c
@@ -207,7 +207,7 @@ NAOMI ROM cart usage
There are 6 known types of carts manufactured by Sega: 171-7885A, 171-7919A, 171-7930B, 171-7978B, 171-8132B, 171-8346C
There are also 2 types of carts manufactured by Namco: MASK-B, MASK-C
-837-14124 171-7885A (C) Sega 1998
+837-13591 171-7885A (C) Sega 1998
|------------------------------------------------------------|
| ----CN2---- -|
| JJ |
@@ -254,11 +254,15 @@ Games known to use this PCB include....
Sticker EPROM MASKROMs X76F100 EPM7064S FPGA
Game on cart IC22# # of SOP56 IC37# IC41# IC42# Notes
-------------------------------------------------------------------------------------------------------------------------
-Crackin' DJ part 2 840-0068C 23674 20 (64Mb) present present 317-0311-COM
+Club Kart European Session (2003, prototype) * 21 (64Mb) present present not present *instead of EPROM have tiny PCB with 2 flashroms on it
+Crackin' DJ part 2 840-0068C 23674 20 (64Mb) present present 317-0311-COM PCB have label 840-0068B-01 837-14124
+House of the Dead 2 (prototype) A1E2 21 (64Mb) present present present, no label
Inu No Osanpo / Dog Walking (Rev A) 840-0073C 22294A 16 (64Mb) present present 317-0316-JPN
+Samba de Amigo (prototype) * 21 (64Mb) present present 317-0270-COM *instead of EPROM have tiny PCB with 2 flashroms on it
Soul Surfer (Rev A) 840-0095C 23838C 21 (64Mb) present present not present todo: verify if it's Rev A or Rev C
Star Horse (server) 840-0055C 23626 17 (64Mb) present present not present
The King of Route 66 (Rev A) 840-0087C 23819A 20 (64Mb) present present not present
+Virtua NBA (prototype) * 21 (64Mb) present present 317-0271-COM *instead of EPROM have tiny PCB with 2 flashroms on it
@@ -291,55 +295,55 @@ Notes:
CN1/2/3 - connectors joining to main board
Games known to use this PCB include....
- Sticker EPROM MASKROMs X76F100 XC9536 315-5881
-Game on cart IC22# # of SOP44 IC37# IC41# IC42# Notes
+ Sticker EPROM MASKROMs X76F100 XC9536 315-5881
+Game on cart IC22# # of SOP44 IC37# IC41# IC42# Notes
-------------------------------------------------------------------------------------------------------------------------
-18 Wheeler (Deluxe) (Rev A) 840-0023C 22185A 20 (64Mb) present 315-6213 317-0273-COM
-18 Wheeler (Standard) 840-0036C 23298 20 (64Mb) present 315-6213 317-0273-COM
-18 Wheeler (Upright) 840-0037C 23299 20 (64Mb) present 315-6213 317-0273-COM
-Airline Pilots (Rev A) 840-0005C 21739A 11 (64Mb) present 315-6213 317-0251-COM
-Airline Pilots Deluxe (Rev B) ? 21787B 11 (64Mb) present 315-6213 317-0251-COM 2 know BIOS 21801 (USA), 21802 (EXP)
-Cosmic Smash 840-0044C 23428 8 (64Mb) ? 315-6213 317-0289-COM joystick + 2 buttons
-Cosmic Smash (Rev A) 840-0044C 23428A 8 (64Mb) ? 315-6213 317-0289-COM joystick + 2 buttons
-Crazy Taxi 840-0002C 21684 13 (64Mb)* ? 315-6213 317-0248-COM * ic8 and ic9 are not present
-Dead Or Alive 2 841-0003C 22121 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
-Dead Or Alive 2 Millennium 841-0003C DOA2 M 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
-Death Crimson OX 841-0016C 23524 10 (64Mb) present 315-6213 317-5066-COM
-Dengen Tenshi Taisen Janshi Shangri-La 841-0004C 22060 12 (64Mb) ? 315-6213 317-5050-JPN
-Derby Owners Club (Rev B) 840-0016C 22099B 14 (64Mb) ? 315-6213 317-0262-JPN touch panel + 2 buttons + card reader
-Derby Owners Club 2000 Ver.2 (Rev A) 840-0052C 22284A 16 (64Mb) present 315-6213 not present
-Dynamite Baseball '99 / World Series'99 (Rev B) 840-0019C 22141B 19 (64Mb) ? 315-6213 317-0269-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
-Dynamite Baseball Naomi 840-0001C 21575 21 (64Mb) ? 315-6213 317-0246-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
-Ferrari F355 Challenge 834-13842 21902 21 (64Mb) present 315-6213 317-0254-COM
-Ferrari F355 Challenge 2 Twin 840-0042C 23399 21 (64Mb) ? 315-6213 317-0287-COM 2 know BIOS 22850 (USA), 22851 (EXP)
-Ferrari F355 Challenge Twin 834-13950 22848 21 (64Mb) present 315-6213 317-0267-COM 2 know BIOS 22850 (USA), 22851 (EXP)
-Giant Gram: All Japan Pro Wrestling 2 840-0007C 21820 9 (64Mb) ? 315-6213 317-0253-JPN joystick + 3 buttons
-Guilty Gear X 841-0013C 23356 14 (64Mb) ? 315-6213 317-5063-COM
-Gun Spike / Cannon Spike 841-0012C 23210 12 (64Mb) present 315-6213 317-5060-COM
-Heavy Metal Geomatrix (Rev A) HMG016007 23716A 11 (64Mb) present 315-6213 317-5071-COM joystick + 2 buttons
-Idol Janshi Suchie-Pai 3 841-0002C 21979 14 (64Mb) ? 315-6213 317-5047-JPN requires special I/O board and mahjong panel
-Jambo! Safari (Rev A) 840-0013C 22826A 8 (64Mb) ? 315-6213 317-0264-COM
-Mars TV 840-0025C 22993 15 (64Mb) present 315-6213 317-0074-JPN
-OutTrigger 840-0017C 22163 19 (64Mb) ? 315-6213 317-0266-COM requires analog controllers/special panel
-Power Stone 841-0001C 21597 8 (64Mb) present 315-6213 317-5046-COM joystick + 3 buttons
-Power Stone 2 841-0008C 23127 9 (64Mb) present 315-6213 317-5054-COM joystick + 3 buttons
-Puyo Puyo Da! 841-0006C 22206 20 (64Mb) ? ? ?
-Ring Out 4x4 840-0004C 21779 10 (64Mb) ? ? ?
-Samba de Amigo (prototype) 840-0020C proto 16 (64Mb) ? 315-6213 317-0270-COM will boot but requires special controller to play it
-Samba de Amigo (Rev B) 840-0020C 22966B 16 (64Mb) ? 315-6213 317-0270-COM will boot but requires special controller to play it
-Sega Marine Fishing 840-0027C 22221 10 (64Mb) ? 315-6213 not present ROM 3&4 not present. Requires special I/O board and fishing controller
-Sega Strike Fighter (Rev A) 840-0035C 23323A 20 (64Mb) present 315-6213 317-0281-COM
-Sega Tetris 840-0018C 22909 6 (64Mb) present 315-6213 317-0268-COM
-Slashout 840-0041C 23341 17 (64Mb) ? 315-6213 317-0286-COM joystick + 4 buttons
-Spawn In the Demon's Hand (Rev B) 841-0005C 22977B 10 (64Mb) ? 315-6213 317-5051-COM joystick + 4 buttons
-The Typing of the Dead (Rev A) 840-0026C 23021A 20 (64Mb) present 315-6213 not present
-Touch de UNO! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN
-Toy Fighter / Waffupu 840-0011C 22035 10 (64Mb) present 315-6212 317-0257-COM joystick + 3 buttons
-Virtua NBA 840-0021C 23073 21 (64Mb) present 315-6213 not present
-Virtua NBA (original) 840-0021C 23073 21 (64Mb) ? 315-6213 not present
-Virtua Striker 2 Ver. 2000 (Rev C) 840-0010C 21929C 14 (64Mb)* present 315-6213 317-0258-COM joystick + 3 buttons *(+1x 32Mb)
-Virtua Tennis / Power Smash 840-0015C 22927 11 (64Mb) present 315-6213 317-0263-COM
-Zombie Revenge 840-0003C 21707 19 (64Mb) ? 315-6213 317-0249-COM joystick + 3 buttons
+18 Wheeler (Deluxe) (Rev A) 840-0023C 22185A 20 (64Mb) present 315-6213 317-0273-COM
+18 Wheeler (Standard) 840-0036C 23298 20 (64Mb) present 315-6213 317-0273-COM
+18 Wheeler (Upright) 840-0037C 23299 20 (64Mb) present 315-6213 317-0273-COM
+Airline Pilots (Rev A) 840-0005C 21739A 11 (64Mb) present 315-6213 317-0251-COM
+Airline Pilots Deluxe (Rev B) ? 21787B 11 (64Mb) present 315-6213 317-0251-COM 2 know BIOS 21801 (USA), 21802 (EXP)
+Cosmic Smash 840-0044C 23428 8 (64Mb) ? 315-6213 317-0289-COM joystick + 2 buttons
+Cosmic Smash (Rev A) 840-0044C 23428A 8 (64Mb) ? 315-6213 317-0289-COM joystick + 2 buttons
+Crazy Taxi 840-0002C 21684 13 (64Mb)* none 315-6213 317-0248-COM * ic8 and ic9 are not present
+Dead Or Alive 2 841-0003C 22121 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
+Dead Or Alive 2 Millennium 841-0003C DOA2 M 21 (64Mb) present 315-6213 317-5048-COM joystick + 3 buttons
+Death Crimson OX 841-0016C 23524 10 (64Mb) present 315-6213 317-5066-COM
+Dengen Tenshi Taisen Janshi Shangri-La 841-0004C 22060 12 (64Mb) ? 315-6213 317-5050-JPN
+Derby Owners Club (Rev B) 840-0016C 22099B 14 (64Mb) ? 315-6213 317-0262-JPN touch panel + 2 buttons + card reader
+Derby Owners Club 2000 Ver.2 (Rev A) 840-0052C 22284A 16 (64Mb) present 315-6213 not present
+Dynamite Baseball '99 / World Series'99 (Rev B) 840-0019C 22141B 19 (64Mb) ? 315-6213 317-0269-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
+Dynamite Baseball Naomi 840-0001C 21575 21 (64Mb) ? 315-6213 317-0246-JPN requires special panel (joystick + 2 buttons + bat controller for each player)
+Ferrari F355 Challenge 834-13842 21902 21 (64Mb) present 315-6213 317-0254-COM
+Ferrari F355 Challenge 2 Twin 840-0042C 23399 21 (64Mb) present 315-6213 317-0287-COM 2 know BIOS 22850 (USA), 22851 (EXP)
+Ferrari F355 Challenge Twin 834-13950 22848 21 (64Mb) present 315-6213 317-0267-COM 2 know BIOS 22850 (USA), 22851 (EXP)
+Giant Gram: All Japan Pro Wrestling 2 840-0007C 21820 9 (64Mb) ? 315-6213 317-0253-JPN joystick + 3 buttons
+Guilty Gear X 841-0013C 23356 14 (64Mb) ? 315-6213 317-5063-COM
+Gun Spike / Cannon Spike 841-0012C 23210 12 (64Mb) present 315-6213 317-5060-COM
+Heavy Metal Geomatrix (Rev A) HMG016007 23716A 11 (64Mb) present 315-6213 317-5071-COM joystick + 2 buttons
+House of the Dead 2 834-13636 21385 20 (64Mb) none 315-6213 not present
+Idol Janshi Suchie-Pai 3 841-0002C 21979 14 (64Mb) ? 315-6213 317-5047-JPN requires special I/O board and mahjong panel
+Jambo! Safari (Rev A) 840-0013C 22826A 8 (64Mb) ? 315-6213 317-0264-COM
+Mars TV 840-0025C 22993 15 (64Mb) present 315-6213 317-0074-JPN
+OutTrigger 840-0017C 22163 19 (64Mb) ? 315-6213 317-0266-COM requires analog controllers/special panel
+Power Stone 841-0001C 21597 8 (64Mb) present 315-6213 317-5046-COM joystick + 3 buttons
+Power Stone 2 841-0008C 23127 9 (64Mb) present 315-6213 317-5054-COM joystick + 3 buttons
+Puyo Puyo Da! 841-0006C 22206 20 (64Mb) ? ? ?
+Ring Out 4x4 840-0004C 21779 10 (64Mb) present 315-6213 317-0250-COM
+Samba de Amigo (Rev B) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it
+Sega Marine Fishing 840-0027C 22221 10 (64Mb) ? 315-6213 not present ROM 3&4 not present. Requires special I/O board and fishing controller
+Sega Strike Fighter (Rev A) 840-0035C 23323A 20 (64Mb) present 315-6213 317-0281-COM
+Sega Tetris 840-0018C 22909 6 (64Mb) present 315-6213 317-0268-COM
+Slashout 840-0041C 23341 17 (64Mb) ? 315-6213 317-0286-COM joystick + 4 buttons
+Spawn In the Demon's Hand (Rev B) 841-0005C 22977B 10 (64Mb) ? 315-6213 317-5051-COM joystick + 4 buttons
+The Typing of the Dead (Rev A) 840-0026C 23021A 20 (64Mb) present 315-6213 not present
+Touch de UNO! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN
+Toy Fighter / Waffupu 840-0011C 22035 10 (64Mb) present 315-6212 317-0257-COM joystick + 3 buttons
+Virtua NBA 840-0021C-01 23073 21 (64Mb) present 315-6213 not present
+Virtua NBA (original) 840-0021C 22949 21 (64Mb) present 315-6213 317-0271-COM
+Virtua Striker 2 Ver. 2000 (Rev C) 840-0010C 21929C 14 (64Mb)* present 315-6213 317-0258-COM joystick + 3 buttons *(+1x 32Mb)
+Virtua Tennis / Power Smash 840-0015C 22927 11 (64Mb) present 315-6213 317-0263-COM
+Zombie Revenge 840-0003C 21707 19 (64Mb) ? 315-6213 317-0249-COM joystick + 3 buttons
@@ -494,8 +498,9 @@ Capcom Vs. SNK Millennium Fight 2000 841-0011C 23511 7 (128Mb) 3
Capcom Vs. SNK Millennium Fight 2000 (Rev A) 841-0011C 23511A 7 (128Mb) 315-6219 present 317-5059-COM (000804)
Capcom Vs. SNK Millennium Fight 2000 (Rev C) 841-0011C 23511C 7 (128Mb) 315-6319 present 317-5059-COM (000904)
Club Kart: European Session 840-0062C 23704 11 (128Mb) 315-6319A present 317-0313-COM
-Club Kart: European Session (Rev D) 840-0062C 21473D 11 (128Mb) 315-6319A present 317-0313-COM
-Crackin' DJ 840-0043C 23450D 10 (128Mb) 315-6319 present ?
+Club Kart: European Session (Rev D) 840-0062C 23704D 11 (128Mb) 315-6319A present 317-0313-COM
+Club Kart: European Session (Rev C) 840-0062C 11 (128Mb) 315-6319A present 317-0313-COM EPR have handwritten Japanese label possible readable as 'teteto 74 lcl'
+Crackin' DJ 840-0043C 23450 10 (128Mb) 315-6319 present 317-0288-COM
Derby Owners Club II (Rev B) 840-0083C 22306B 11 (128Mb) 315-6319A present not present
Derby Owners Club World Edition (Rev C) 840-0088C 22336C 7 (128Mb) 315-6319A present not present
Derby Owners Club World Edition (Rev D) 840-0088C 22336D 7 (128Mb) 315-6319A present not present 2 MaskROM are different from Rev C
@@ -504,10 +509,11 @@ Mobile Suit Gundam: Federation Vs. Zeon 841-0017C 23638 10 (128Mb) 3
Moero Justice Gakuen / Project Justice (Rev A) 841-0015C 23548A 11 (128Mb) 315-6319A present 317-5065-COM
Mushiking 2K5 1ST (Ver 1.000) 840-0158C 24286 7 (128Mb) 315-6319A present not present
Oinori-daimyoujin Matsuri 840-0126B 24053 5 (128Mb) 315-6319A present not present
-Samba de Amigo Ver. 2000 840-0047C 23600 21 (64Mb) 315-6319A present 317-0295-COM
+Samba de Amigo Ver. 2000 840-0047C 23600 11 (128Mb) 315-6319A present 317-0295-COM
Star Horse (big screens) 840-0054C 23625 4 (128Mb) 315-6319 present not present
Star Horse (client) 840-0056C 23627 6 (128Mb)* 315-6319 present not present * +1 (64Mb)
Star Horse Progress (Rev A) 840-0123C 24122A 7 (128Mb) 315-6319A present not present requires an additional middle board n? 837-13785
+The King of Route 66 (Rev A) 840-0087C 23819A 10 (128Mb) 315-6319A present not present
Virtua Striker 3 (Rev B) 840-0061C 23663B 11 (128Mb) 315-6319A present 317-0310-COM
Virtua Striker 3 (Rev C) 840-0061C 23663C 11 (128Mb) 315-6319A present 317-0310-COM
Wave Runner GP 840-0064C 24059 6 (128Mb) 315-6319A present not present
@@ -4181,30 +4187,19 @@ ROM_START( samba2k )
NAOMI_BIOS
NAOMI_DEFAULT_EEPROM
- ROM_REGION( 0xb000000, "rom_board", ROMREGION_ERASEFF)
- ROM_LOAD( "epr-23600.ic22", 0x0000000, 0x400000, CRC(8b6fed00) SHA1(72842f266ad272e4c02be42a6529c2462fd8b63f) )
- ROM_LOAD( "mpr-23579.ic1", 0x0800000, 0x800000, CRC(ded76d71) SHA1(9187434587173f2fcc50af817222121703c253b7) )
- ROM_LOAD( "mpr-23580.ic2", 0x1000000, 0x800000, CRC(a9b29be1) SHA1(4f71b37b21623d87d805cb8d7b9da73bca1d22f3) )
- ROM_LOAD( "mpr-23581.ic3", 0x1800000, 0x800000, CRC(7c44d4c9) SHA1(a2c6e7392a2b52c1b5c0b133bb95fbe53736ca3e) )
- ROM_LOAD( "mpr-23582.ic4", 0x2000000, 0x800000, CRC(99b1af20) SHA1(598abe358d6c97a0ad6d68f5273cea1b96f73237) )
- ROM_LOAD( "mpr-23583.ic5", 0x2800000, 0x800000, CRC(7a81bbd1) SHA1(e36895d8964d1cdd3f316f0ec27356faa3d3f6e0) )
- ROM_LOAD( "mpr-23584.ic6", 0x3000000, 0x800000, CRC(e478b1df) SHA1(5b316feb618a0a61974c3fb5b4c5527873055a5b) )
- ROM_LOAD( "mpr-23585.ic7", 0x3800000, 0x800000, CRC(2f378c38) SHA1(881c6001c173c1ef8ddbb3ae15667e45fac11f96) )
- ROM_LOAD( "mpr-23586.ic8", 0x4000000, 0x800000, CRC(23bec2a7) SHA1(960a6613966bedf20c19454bbc5ec52d14c3f308) )
- ROM_LOAD( "mpr-23587.ic9", 0x4800000, 0x800000, CRC(f52a356b) SHA1(4e3783f5e8d02d09f474cc5ece457af5c4296508) )
- ROM_LOAD( "mpr-23588.ic10", 0x5000000, 0x800000, CRC(4bae020b) SHA1(e3750f87309c7ac9ab6fc504a9377971451ccb5a) )
- ROM_LOAD( "mpr-23589.ic11", 0x5800000, 0x800000, CRC(f6a09854) SHA1(d4ae9d7ddc349e353196cb145f732798a692e560) )
- ROM_LOAD( "mpr-23590.ic12s", 0x6000000, 0x800000, CRC(88e29d52) SHA1(42b66f13302772729920b9af546123c771ecec6b) )
- ROM_LOAD( "mpr-23591.ic13s", 0x6800000, 0x800000, CRC(8736d9b1) SHA1(d829d499dc147f0d14413554ff33187c7df9134f) )
- ROM_LOAD( "mpr-23592.ic14s", 0x7000000, 0x800000, CRC(c7dbeefd) SHA1(7b84d2f5532668936f60314fb3e112b1350bcc51) )
- ROM_LOAD( "mpr-23593.ic15s", 0x7800000, 0x800000, CRC(c8d63355) SHA1(64b06027ebbcfb72ead1d2041423ffd2fe4dcd97) )
- ROM_LOAD( "mpr-23594.ic16s", 0x8000000, 0x800000, CRC(30a04934) SHA1(5b3e5226b1eef9f2d9a64b89307380e2b347547e) )
- ROM_LOAD( "mpr-23595.ic17s", 0x8800000, 0x800000, CRC(1fea68ad) SHA1(d4615f6ea0b9ce6483cb688810ef7ae287aef082) )
- ROM_LOAD( "mpr-23596.ic18s", 0x9000000, 0x800000, CRC(2e57f934) SHA1(9231d3b881e210fa83dda8f03a1702166eb48750) )
- ROM_LOAD( "mpr-23597.ic19s", 0x9800000, 0x800000, CRC(fb50cfdb) SHA1(2e95407b1c8660ae8e85b2d06c13bdc474b93d6e) )
- ROM_LOAD( "mpr-23598.ic20s", 0xa000000, 0x800000, CRC(897c2304) SHA1(e21b68fd935092b5bd019e3087647e9612be1169) )
- ROM_LOAD( "mpr-23599.ic21s", 0xa800000, 0x800000, CRC(f2d1f73f) SHA1(40ac3ef9b1c3797e986fc4a0c593dd4e49df8892) )
- // maskrom labels and number/size needs verification
+ ROM_REGION( 0xb800000, "rom_board", ROMREGION_ERASEFF)
+ ROM_LOAD( "epr-23600.ic22", 0x00000000, 0x0400000, CRC(8b6fed00) SHA1(72842f266ad272e4c02be42a6529c2462fd8b63f) )
+ ROM_LOAD( "mpr-23589.ic1", 0x00800000, 0x1000000, CRC(11c442ed) SHA1(07a463148744a4e254bd88e51eda34f27f92f1cd) )
+ ROM_LOAD( "mpr-23590.ic2", 0x01800000, 0x1000000, CRC(8e5959e6) SHA1(bafd00399cf3ffa50f2b55942e8424a8ae3b351d) )
+ ROM_LOAD( "mpr-23591.ic3", 0x02800000, 0x1000000, CRC(bc9ad236) SHA1(d6f89fce7e5da0d71a536beed99aacb856455b80) )
+ ROM_LOAD( "mpr-23592.ic4", 0x03800000, 0x1000000, CRC(eed8c7a8) SHA1(1a25b9e080ec68c42a4866bc3fd28aeae3567e86) )
+ ROM_LOAD( "mpr-23593.ic5", 0x04800000, 0x1000000, CRC(8f704190) SHA1(6d13456fdddba70ad3e2449a002fb776b2315744) )
+ ROM_LOAD( "mpr-23594.ic6", 0x05800000, 0x1000000, CRC(4986f81d) SHA1(8e56aa8e513a2fae087e6f6d7d0b1e3bff5f53de) )
+ ROM_LOAD( "mpr-23595.ic7", 0x06800000, 0x1000000, CRC(f44e62a6) SHA1(51ccfa875e3f6e78ea13edcc016f9e643077d697) )
+ ROM_LOAD( "mpr-23596.ic8", 0x07800000, 0x1000000, CRC(47b89407) SHA1(d40b71b7861b296944624ca8c0a3a306094c9db5) )
+ ROM_LOAD( "mpr-23597.ic9", 0x08800000, 0x1000000, CRC(ef5bd4e8) SHA1(b4371e5dfbf3b011f2668b1522b0bc7def47b8ae) )
+ ROM_LOAD( "mpr-23598.ic10", 0x09800000, 0x1000000, CRC(e06ee3dd) SHA1(21985e45e1ab5e3a79dd52492a582324a1a36d56) )
+ ROM_LOAD( "mpr-23599.ic11", 0x0a800000, 0x1000000, CRC(1fd2e792) SHA1(6f299e527be529f85d0e8b4ce0e7a06ac0d25fe9) )
ROM_REGION( 4, "rom_key", 0 )
ROM_LOAD( "samba2k-key.bin", 0, 4, CRC(01c0d74a) SHA1(4461cfd761919ba4bc6f1d1839a880f11eaf8d0f) )
@@ -6348,17 +6343,16 @@ ROM_START( ringout )
ROM_REGION( 0x5800000, "rom_board", ROMREGION_ERASEFF)
ROM_LOAD( "epr-21779a.ic22",0x0000000, 0x400000, CRC(1d419767) SHA1(33065006ef437845abcf32a59e78f4bc202c4460) )
- ROM_LOAD( "mpr-21769.ic1", 0x0800000, 0x800000, CRC(493199fc) SHA1(189cd9a20c9207f0238e6d2e867f1479a476dfaa) )
- ROM_LOAD( "mpr-21770.ic2", 0x1000000, 0x800000, CRC(68173ace) SHA1(0869072915543dd5dfa6d3cdb95205521b4a3bf4) )
- ROM_LOAD( "mpr-21771.ic3", 0x1800000, 0x800000, CRC(41badfc3) SHA1(d4062bdbb994b8c18dac20948db9a9550f030865) )
- ROM_LOAD( "mpr-21772.ic4", 0x2000000, 0x800000, CRC(a8dfb537) SHA1(9f6c98ee23842b22fa3b701dad0a384a24a9bc6a) )
- ROM_LOAD( "mpr-21773.ic5", 0x2800000, 0x800000, CRC(3f1f5ed4) SHA1(a7d6e65fba9732efbd99e10a609f41dd03fd3bb8) )
- ROM_LOAD( "mpr-21774.ic6", 0x3000000, 0x800000, CRC(5a1114f0) SHA1(a45fc82bccb40e582f107b86403409651476180e) )
- ROM_LOAD( "mpr-21775.ic7", 0x3800000, 0x800000, CRC(5645a95c) SHA1(f0e97ff5b744972a1fa4e03e6d16a19ba20fb930) )
- ROM_LOAD( "mpr-21776.ic8", 0x4000000, 0x800000, CRC(22fc33dc) SHA1(922c41f7fb22b26037446bdfb4f9788a8e0c3e46) )
- ROM_LOAD( "mpr-21777.ic9", 0x4800000, 0x800000, CRC(6d22d29d) SHA1(382dcd62065437b34fe101144b1c047eb261f047) )
- ROM_LOAD( "mpr-21778.ic10", 0x5000000, 0x800000, CRC(c5308e61) SHA1(e51f8026351d5ffbda2a5bed39aeef543366febf) )
- // maskrom labels needs verification
+ ROM_LOAD( "mpr-21761.ic1", 0x0800000, 0x800000, CRC(493199fc) SHA1(189cd9a20c9207f0238e6d2e867f1479a476dfaa) )
+ ROM_LOAD( "mpr-21762.ic2", 0x1000000, 0x800000, CRC(68173ace) SHA1(0869072915543dd5dfa6d3cdb95205521b4a3bf4) )
+ ROM_LOAD( "mpr-21763.ic3", 0x1800000, 0x800000, CRC(41badfc3) SHA1(d4062bdbb994b8c18dac20948db9a9550f030865) )
+ ROM_LOAD( "mpr-21764.ic4", 0x2000000, 0x800000, CRC(a8dfb537) SHA1(9f6c98ee23842b22fa3b701dad0a384a24a9bc6a) )
+ ROM_LOAD( "mpr-21765.ic5", 0x2800000, 0x800000, CRC(3f1f5ed4) SHA1(a7d6e65fba9732efbd99e10a609f41dd03fd3bb8) )
+ ROM_LOAD( "mpr-21766.ic6", 0x3000000, 0x800000, CRC(5a1114f0) SHA1(a45fc82bccb40e582f107b86403409651476180e) )
+ ROM_LOAD( "mpr-21767.ic7", 0x3800000, 0x800000, CRC(5645a95c) SHA1(f0e97ff5b744972a1fa4e03e6d16a19ba20fb930) )
+ ROM_LOAD( "mpr-21768.ic8", 0x4000000, 0x800000, CRC(22fc33dc) SHA1(922c41f7fb22b26037446bdfb4f9788a8e0c3e46) )
+ ROM_LOAD( "mpr-21769.ic9", 0x4800000, 0x800000, CRC(6d22d29d) SHA1(382dcd62065437b34fe101144b1c047eb261f047) )
+ ROM_LOAD( "mpr-21770.ic10", 0x5000000, 0x800000, CRC(c5308e61) SHA1(e51f8026351d5ffbda2a5bed39aeef543366febf) )
ROM_REGION( 4, "rom_key", 0 )
ROM_LOAD( "ringout-key.bin", 0, 4, CRC(8f8c4eb2) SHA1(9bc59c69d04d9ce876415af048f39095ed680a5e) )
@@ -6370,20 +6364,19 @@ ROM_START( vonot )
ROM_REGION( 0x7000000, "rom_board", ROMREGION_ERASEFF)
ROM_LOAD( "epr-23198.ic22", 0x0000000, 0x400000, CRC(9852eda2) SHA1(71ded8cbdf567afeff30bd593071ce3b7d84a260) )
- ROM_LOAD( "mpr-23185.ic1", 0x0800000, 0x800000, CRC(c4fc1d45) SHA1(cfeff71ac1cccf274f00731fe1ffc182fb85f7a6) )
- ROM_LOAD( "mpr-23186.ic2", 0x1000000, 0x800000, CRC(b17f9924) SHA1(a9aa9f10b76964042b337b25430acff072aaa7c7) )
- ROM_LOAD( "mpr-23187.ic3", 0x1800000, 0x800000, CRC(575f73e8) SHA1(fe6ffeab120ad788bd692b33eca1cf22db881ac3) )
- ROM_LOAD( "mpr-23188.ic4", 0x2000000, 0x800000, CRC(0004ef34) SHA1(926de996549421a5835f3c8c0895a07978519215) )
- ROM_LOAD( "mpr-23189.ic5", 0x2800000, 0x800000, CRC(554eea29) SHA1(c82c24270dee0dd7309b117e1632827ca314615d) )
- ROM_LOAD( "mpr-23190.ic6", 0x3000000, 0x800000, CRC(b74ae1c5) SHA1(003fadbaa03cf43757b686f316d1104d26ae9ce8) )
- ROM_LOAD( "mpr-23191.ic7", 0x3800000, 0x800000, CRC(9f2a88af) SHA1(b1caf9cbf026ee6d0f12ab66cddf120e7ba9884c) )
- ROM_LOAD( "mpr-23192.ic8", 0x4000000, 0x800000, CRC(83014196) SHA1(cc4801534e0f0e649fc3f368af4bd3ac01288732) )
- ROM_LOAD( "mpr-23193.ic9", 0x4800000, 0x800000, CRC(2fde8ecf) SHA1(6da95fb04f141f2c45564460c49834bb945fb1af) )
- ROM_LOAD( "mpr-23194.ic10", 0x5000000, 0x800000, CRC(92f045e5) SHA1(70f741e55a47682725c7d6dcdd0e60982187fc87) )
- ROM_LOAD( "mpr-23195.ic11", 0x5800000, 0x800000, CRC(9e708834) SHA1(2f454688ea5b8b041bbfffaa12047afad01d020f) )
- ROM_LOAD( "mpr-23196.ic12s", 0x6000000, 0x800000, CRC(c86a5b9b) SHA1(4b8dda85003289e1464e12c3abf449bb8df20e3a) )
- ROM_LOAD( "mpr-23197.ic13s", 0x6800000, 0x800000, CRC(5adea0bd) SHA1(f8614ba83d5f61556c3db1a1796a02ed2c51ce2a) )
- // maskrom labels needs verification
+ ROM_LOAD( "mpr-23182.ic1", 0x0800000, 0x800000, CRC(c4fc1d45) SHA1(cfeff71ac1cccf274f00731fe1ffc182fb85f7a6) )
+ ROM_LOAD( "mpr-23183.ic2", 0x1000000, 0x800000, CRC(b17f9924) SHA1(a9aa9f10b76964042b337b25430acff072aaa7c7) )
+ ROM_LOAD( "mpr-23184.ic3", 0x1800000, 0x800000, CRC(575f73e8) SHA1(fe6ffeab120ad788bd692b33eca1cf22db881ac3) )
+ ROM_LOAD( "mpr-23185.ic4", 0x2000000, 0x800000, CRC(0004ef34) SHA1(926de996549421a5835f3c8c0895a07978519215) )
+ ROM_LOAD( "mpr-23186.ic5", 0x2800000, 0x800000, CRC(554eea29) SHA1(c82c24270dee0dd7309b117e1632827ca314615d) )
+ ROM_LOAD( "mpr-23187.ic6", 0x3000000, 0x800000, CRC(b74ae1c5) SHA1(003fadbaa03cf43757b686f316d1104d26ae9ce8) )
+ ROM_LOAD( "mpr-23188.ic7", 0x3800000, 0x800000, CRC(9f2a88af) SHA1(b1caf9cbf026ee6d0f12ab66cddf120e7ba9884c) )
+ ROM_LOAD( "mpr-23189.ic8", 0x4000000, 0x800000, CRC(83014196) SHA1(cc4801534e0f0e649fc3f368af4bd3ac01288732) )
+ ROM_LOAD( "mpr-23190.ic9", 0x4800000, 0x800000, CRC(2fde8ecf) SHA1(6da95fb04f141f2c45564460c49834bb945fb1af) )
+ ROM_LOAD( "mpr-23191.ic10", 0x5000000, 0x800000, CRC(92f045e5) SHA1(70f741e55a47682725c7d6dcdd0e60982187fc87) )
+ ROM_LOAD( "mpr-23192.ic11", 0x5800000, 0x800000, CRC(9e708834) SHA1(2f454688ea5b8b041bbfffaa12047afad01d020f) )
+ ROM_LOAD( "mpr-23193.ic12s", 0x6000000, 0x800000, CRC(c86a5b9b) SHA1(4b8dda85003289e1464e12c3abf449bb8df20e3a) )
+ ROM_LOAD( "mpr-23194.ic13s", 0x6800000, 0x800000, CRC(5adea0bd) SHA1(f8614ba83d5f61556c3db1a1796a02ed2c51ce2a) )
ROM_REGION( 4, "rom_key", 0 )
ROM_LOAD( "vonot-key.bin", 0, 4, CRC(021ac707) SHA1(af57844331226d3b1722aedca1a7aef024468b39) )
@@ -7785,27 +7778,17 @@ ROM_START( kingrt66 )
NAOMI_DEFAULT_EEPROM
ROM_REGION( 0xa800000, "rom_board", ROMREGION_ERASEFF)
- ROM_LOAD( "epr-23819a.ic22", 0x0000000, 0x400000, CRC(92f11b29) SHA1(b33f7eefb849754cfe194be1d48d770ed77ff69a) )
- ROM_LOAD( "ic1s.bin", 0x0800000, 0x800000, CRC(03da8f81) SHA1(01f9b33ffc485d8ccb2630c8cc1fcc0d90da171d) )
- ROM_LOAD( "ic2s.bin", 0x1000000, 0x800000, CRC(1bbbf549) SHA1(0c5269f3e8a88298408bb612dc8da4d545ce329e) )
- ROM_LOAD( "ic3s.bin", 0x1800000, 0x800000, CRC(6c81d0a9) SHA1(2301350098062e16afd6d4c13eeb1e46040d398f) )
- ROM_LOAD( "ic4s.bin", 0x2000000, 0x800000, CRC(fe245803) SHA1(3b5c4d20c447ca02306a74914c027c9193d2bb48) )
- ROM_LOAD( "ic5s.bin", 0x2800000, 0x800000, CRC(d8376c76) SHA1(62a64d0ff4b63a2de3b8668c0ca1d69d4cdac00e) )
- ROM_LOAD( "ic6s.bin", 0x3000000, 0x800000, CRC(d184a4b3) SHA1(db00cf005da52b8add695ec89f8a81cf21fc9bad) )
- ROM_LOAD( "ic7s.bin", 0x3800000, 0x800000, CRC(6e92fb39) SHA1(d992272e474424221c87bb71e269e10cbba1cac9) )
- ROM_LOAD( "ic8s.bin", 0x4000000, 0x800000, CRC(fd4c128f) SHA1(7778920f59b8bc1e9718d685bfd556f73e5c3895) )
- ROM_LOAD( "ic9s.bin", 0x4800000, 0x800000, CRC(5bcb3759) SHA1(57baa595eaee826ffadc17c885cb73174558feb1) )
- ROM_LOAD( "ic10s.bin", 0x5000000, 0x800000, CRC(7d66c409) SHA1(fa8d08587ebcd70ec39237366c5de6948efce881) )
- ROM_LOAD( "ic11s.bin", 0x5800000, 0x800000, CRC(322abecc) SHA1(476a751dc9849a5167e7e7e17e27987b96b1cb00) )
- ROM_LOAD( "ic12s.bin", 0x6000000, 0x800000, CRC(a47fff36) SHA1(5c0088e140654b89749c5dd5d729c4799afc224e) )
- ROM_LOAD( "ic13s.bin", 0x6800000, 0x800000, CRC(f502b666) SHA1(fa483f327cab15d10861efcbf6bdf4a2c5d0a763) )
- ROM_LOAD( "ic14s.bin", 0x7000000, 0x800000, CRC(ed664a57) SHA1(54421ce642208fd1f14fbbe2e326d9c8da7c9944) )
- ROM_LOAD( "ic15s.bin", 0x7800000, 0x800000, CRC(3f905393) SHA1(d63bbe8099b323ad4fd95401e0097b4c7151b44c) )
- ROM_LOAD( "ic16s.bin", 0x8000000, 0x800000, CRC(80756e62) SHA1(9b2f14ed10775ee56f245c75ee23534c99db23d4) )
- ROM_LOAD( "ic17s.bin", 0x8800000, 0x800000, CRC(7404e74e) SHA1(a427bf9f5e8338d34d1091de69460e374ddc6ee6) )
- ROM_LOAD( "ic18s.bin", 0x9000000, 0x800000, CRC(58a7fbac) SHA1(7132e018e73e68a355f92fe26121da7c3c0c927a) )
- ROM_LOAD( "ic19s.bin", 0x9800000, 0x800000, CRC(fd6fb2cf) SHA1(b2bf8a11d42141237db0254506ee73d9cef8b9d1) )
- ROM_LOAD( "ic20s.bin", 0xa000000, 0x800000, CRC(be902c2b) SHA1(1f1aa6933da528bdcef45942a0caa33cb24e7ddd) )
+ ROM_LOAD( "epr-23819a.ic22", 0x0000000, 0x00400000, CRC(92f11b29) SHA1(b33f7eefb849754cfe194be1d48d770ed77ff69a) )
+ ROM_LOAD("mpr-23808.ic1", 0x00800000, 0x01000000, CRC(e911bc86) SHA1(0dc658851e20425b2e697e538bb4297a221f6ae8) )
+ ROM_LOAD("mpr-23809.ic2", 0x01800000, 0x01000000, CRC(2716aba0) SHA1(4c245874da244926bf9ac6636af4fa67e07a21e8) )
+ ROM_LOAD("mpr-23810.ic3", 0x02800000, 0x01000000, CRC(2226accb) SHA1(c4dc71e87c2ccd866f4180129181b7ced8caf22c) )
+ ROM_LOAD("mpr-23811.ic4", 0x03800000, 0x01000000, CRC(bbad4a93) SHA1(724c3376102b2dc79b852af1e90748b2e0023b82) )
+ ROM_LOAD("mpr-23812.ic5", 0x04800000, 0x01000000, CRC(7beabe22) SHA1(d3cd926fc768d480ff45f1e30024bb0e31bd7d2c) )
+ ROM_LOAD("mpr-23813.ic6", 0x05800000, 0x01000000, CRC(fe0b94ea) SHA1(0e46dff932036bec49c78a612bcfd27e07b516e8) )
+ ROM_LOAD("mpr-23814.ic7", 0x06800000, 0x01000000, CRC(0cdf7325) SHA1(41668f873b7842dac1bc85aa2b6bd6512edc9b64) )
+ ROM_LOAD("mpr-23815.ic8", 0x07800000, 0x01000000, CRC(ef327ab8) SHA1(9dfc564084a75b9c3935374347f1709d2e86e469) )
+ ROM_LOAD("mpr-23816.ic9", 0x08800000, 0x01000000, CRC(bbaf0765) SHA1(3b79a4eff504b2156bea8b86c6cdd8e41e7bf268) )
+ ROM_LOAD("mpr-23817.ic10", 0x09800000, 0x01000000, CRC(e179cfb6) SHA1(1120036238439f8ac1041150396e4b60e4a243bc) )
ROM_REGION( 4, "rom_key", ROMREGION_ERASE00 )
ROM_END
@@ -7917,7 +7900,29 @@ ROM_START( clubkrtd )
NAOMI_DEFAULT_EEPROM
ROM_REGION( 0xb800000, "rom_board", ROMREGION_ERASEFF)
- ROM_LOAD( "epr-21473d.ic22",0x0000000, 0x0400000, CRC(60ac770c) SHA1(2f1688f2046e794d1c1e06912b46c1573d934608) )
+ ROM_LOAD( "epr-23704d.ic22",0x0000000, 0x0400000, CRC(60ac770c) SHA1(2f1688f2046e794d1c1e06912b46c1573d934608) )
+ ROM_LOAD( "mpr-23693.ic1", 0x0800000, 0x1000000, CRC(28995764) SHA1(a1457f9935dde2e5aaa5ef245c736c0f2f8c74b7) )
+ ROM_LOAD( "mpr-23694.ic2", 0x1800000, 0x1000000, CRC(37d30111) SHA1(4c07df8cd548cac79d48709e61f692d762471f8f) )
+ ROM_LOAD( "mpr-23695.ic3", 0x2800000, 0x1000000, CRC(41ac1510) SHA1(01b889b627fdfc1f12a0c84fcc36debdfb1cf377) )
+ ROM_LOAD( "mpr-23696.ic4", 0x3800000, 0x1000000, CRC(6f2da455) SHA1(b655757bc513398820bfeae07dca8a4f3ea9752c) )
+ ROM_LOAD( "mpr-23697.ic5", 0x4800000, 0x1000000, CRC(1383c742) SHA1(6efd17632a277a4bb0e47cc912fbc9865a8b14c3) )
+ ROM_LOAD( "mpr-23698.ic6", 0x5800000, 0x1000000, CRC(da79cd06) SHA1(fdfe068caca1eb764dec28ab327e56b39144f3ae) )
+ ROM_LOAD( "mpr-23699.ic7", 0x6800000, 0x1000000, CRC(ea77f000) SHA1(35aa8ee804d9429e72f516137a3b06c585a57b6d) )
+ ROM_LOAD( "mpr-23700.ic8", 0x7800000, 0x1000000, CRC(db9e5c1d) SHA1(db918c0fa1860f4345806e574d44354aba5fcd54) )
+ ROM_LOAD( "mpr-23701.ic9", 0x8800000, 0x1000000, CRC(0fa92fd7) SHA1(67a1cf085101884a17a4783d0d509ab198aa6425) )
+ ROM_LOAD( "mpr-23702.ic10", 0x9800000, 0x1000000, CRC(e302b582) SHA1(787192ed9f9a08541eecc3128855485cad802a42) )
+ ROM_LOAD( "mpr-23703.ic11", 0xa800000, 0x1000000, CRC(702b8b4a) SHA1(3a8dfde458f341e7db20664382b9fce2b6e5d462) )
+
+ ROM_REGION( 4, "rom_key", 0 )
+ ROM_LOAD( "clubkrte-key.bin", 0, 4, CRC(db426a5d) SHA1(6a6a0b80ec0416605541159efea379dc19fe796d) )
+ROM_END
+
+ROM_START( clubkrtc )
+ NAOMI2_BIOS
+ NAOMI_DEFAULT_EEPROM
+
+ ROM_REGION( 0xb800000, "rom_board", ROMREGION_ERASEFF)
+ ROM_LOAD( "epr-23704c.ic22",0x0000000, 0x0400000, CRC(45ea13c3) SHA1(48cddba0506010dc705f04457f784a1d455ef3a6) )
ROM_LOAD( "mpr-23693.ic1", 0x0800000, 0x1000000, CRC(28995764) SHA1(a1457f9935dde2e5aaa5ef245c736c0f2f8c74b7) )
ROM_LOAD( "mpr-23694.ic2", 0x1800000, 0x1000000, CRC(37d30111) SHA1(4c07df8cd548cac79d48709e61f692d762471f8f) )
ROM_LOAD( "mpr-23695.ic3", 0x2800000, 0x1000000, CRC(41ac1510) SHA1(01b889b627fdfc1f12a0c84fcc36debdfb1cf377) )
@@ -8032,9 +8037,8 @@ ROM_START( clubk2k3 )
ROM_LOAD( "clubk2k3-key.bin", 0x000000, 0x000004, CRC(96c3b4f6) SHA1(9b85a418153c70f56aaeeb1ed0bbbbd31a1bbad7) )
ROM_END
-// source was some kind of (developer/proto?) flash cart, needs verification
-// uses the same mask roms as clubk2k3, but EPR doesn't have checksumms for them, so rom test shows all roms as BAD
-ROM_START( clubk2kf )
+// uses the same mask roms data as clubk2k3, but most likely not in 32bit dissected form, EPR doesn't have checksumms for them, so rom test shows all roms as BAD
+ROM_START( clubk2kp )
NAOMI2_BIOS
NAOMI_DEFAULT_EEPROM
@@ -8931,6 +8935,7 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
/* 0061 */ GAME( 2001, vstrik3cb,vstrik3c,naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Striker 3 (USA, EXP, KOR, AUS) (Cart, Rev B)", GAME_FLAGS )
/* 0062 */ GAME( 2001, clubkrte, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session", GAME_FLAGS )
/* 0062 */ GAME( 2001, clubkrtd, clubkrte,naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (Rev D)", GAME_FLAGS )
+/* 0062 */ GAME( 2001, clubkrtc, clubkrte,naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (Rev C)", GAME_FLAGS )
/* 0080 */ GAME( 2002, vf4cart, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Virtua Fighter 4 (Cartridge)", GAME_FLAGS )
/* 0087 */ GAME( 2002, kingrt66, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "King of Route 66 (Rev A)", GAME_FLAGS )
/* 0095 */ GAME( 2002, soulsurf, naomi2, naomi2m2, naomi, naomi_state, naomi2, ROT0, "Sega", "Soul Surfer (Rev A)", GAME_FLAGS )
@@ -8940,8 +8945,7 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
/* 0137 */ GAME( 2004, clubkpzb, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart Prize Ver. B", GAME_FLAGS )
// needs verification is this dump really from 840-0139C cart
/* 0139 */ GAME( 2003, clubk2k3, naomi2, naomi2m1, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (2003)", GAME_FLAGS )
-// source is some kind of (developer/proto?) flash cart, needs verification
-/* ??? */ GAME( 2003, clubk2kf, clubk2k3,naomi2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (2003, not protected)", GAME_FLAGS )
+/* ??? */ GAME( 2003, clubk2kp, clubk2k3,naomi2, naomi, naomi_state, naomi2, ROT0, "Sega", "Club Kart: European Session (2003, prototype)", GAME_FLAGS )
/* 841-xxxxx ("Licensed by Sega" Naomi cart games)*/
/* 0001 */ GAME( 1999, pstone, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Capcom", "Power Stone (JPN, USA, EUR, ASI, AUS)", GAME_FLAGS )
@@ -9068,7 +9072,6 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
// 00?? Dragon Treasure
// 00?? Dragon Treasure 2
// 00?? Get Bass 2
-// 00?? Kodai Ouja Kyouryuu King
/* GDL-xxxx ("licensed by Sega" GD-ROM games) */
/* 0001 */ GAME( 2001, gundmgd, naomigd, naomigd, naomi, naomi_state, naomigd, ROT0,"Capcom / Banpresto","Mobile Suit Gundam: Federation Vs. Zeon (GDL-0001)", GAME_FLAGS )
@@ -9134,13 +9137,6 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
// 10015 CD - World Club Champion Football European Clubs 2004-2005 Ver.1.1 (Sega, 2005)
// 10015P CD - World Club Champion Football European Clubs 2004-2005 Ver.3.22 (Sega, 2005)
// 10027 CD - World Club Champion Football European Clubs 2005-2006 (Sega, 2006)
-// 10030 DVD - Mobile Suit Gundam 0083 Card Builder (Banpresto, 2007)
-// ????? ??? - Mobile Suit Gundam 0079 Card Builder (Banpresto, 2005)
-// ????? ??? - Mobile Suit Gundam 0079 Card Builder (Ver.1.007) (Banpresto, 2006)
-// ????? ??? - Mobile Suit Gundam 0079 Card Builder (Ver.2.00) (Banpresto, 2006)
-// ????? ??? - Mobile Suit Gundam 0079 Card Builder (Ver.2.01) (Banpresto, 2006)
-// ????? ??? - Mobile Suit Gundam 0079 Card Builder (Ver.2.02) (Banpresto, 2006)
-// ????? ??? - Mobile Suit Gundam 0083 Card Builder Ryouyuu Gekitotsu (Banpresto, 2007)
// ????? ??? - World Club Champion Football Serie A 2001-2002 (Sega, 2002)
// ????? ??? - World Club Champion Football Serie A 2001-2002 Ver.1.2 (Sega, 2002)
// ????? ??? - World Club Champion Football Serie A 2001-2002 Ver.2 (Sega, 2003)
@@ -9149,6 +9145,11 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", "
// ????? ??? - World Club Champion Football European Clubs 2004-2005 Ver.1.2 (Sega, 2005)
// ????? ??? - World Club Champion Football European Clubs 2005-2006 bugfix (Sega, 2006)
+/* MDA-Gxxxx (Compact Flash replacement of Naomi 2 GD-ROM releases) */
+// 0001 - Club Kart Cycraft Edition (GDS-0029)
+// 0003 - Initial D Arcade Stage Ver. 1 (Export) (GDS-0025A)
+// 0005 - Initial D Arcade Stage Ver. 2 (Export) (GDS-0027)
+// 0007 - Initial D Arcade Stage Ver. 3 (Export) (GDS-0033)
/* Atomiswave */
diff --git a/src/mame/drivers/ninjakd2.c b/src/mame/drivers/ninjakd2.c
index 33f69cd6390..4515dcb116d 100644
--- a/src/mame/drivers/ninjakd2.c
+++ b/src/mame/drivers/ninjakd2.c
@@ -1133,6 +1133,47 @@ ROM_START( rdaction )
ROM_LOAD( "nk2_09.rom", 0x0000, 0x10000, CRC(c1d2d170) SHA1(0f325815086fde90fd85360d3660042b0b68ba96) ) // 9.6c unsigned 8-bit pcm samples
ROM_END
+// Is this official? works with any program rom set, but nowhere in any program roms is the title JT-104 mentioned.
+// It was found on a board with RAD ACTION program roms.
+//
+// In addition to the title screen text change the new graphic ROM has 'UNITED AMUSEMENTS' license text replacing
+// the regular UPL copyright (used on the interludes) however because it is using the RAD ACTION program roms the
+// title screen still shows the 'World Games' license text.
+//
+// Did this board have incorrect program roms, or is this just how it was?
+
+
+ROM_START( jt104 ) // identical to radaction set with different gfx rom and decrypted sound rom
+ ROM_REGION( 0x30000, "maincpu", 0 )
+ ROM_LOAD( "1.3u", 0x00000, 0x8000, CRC(5c475611) SHA1(2da88a95b5d68b259c8ae48af1438a82a1d601c1) )
+ ROM_LOAD( "2.3s", 0x10000, 0x8000, CRC(a1e23bd2) SHA1(c3b6574dc9fa66b4f41c37754a0d20a865f8bc28) ) // banked at 8000-bfff
+ ROM_LOAD( "nk2_03.rom", 0x18000, 0x8000, CRC(ad275654) SHA1(7d29a17132adb19aeee9b98be5b76bd6e91f308e) ) // 3.3r
+ ROM_LOAD( "nk2_04.rom", 0x20000, 0x8000, CRC(e7692a77) SHA1(84beb8b02c564bffa9cc00313214e8f109bd40f9) ) // 4.3p
+ ROM_LOAD( "nk2_05.bin", 0x28000, 0x8000, CRC(960725fb) SHA1(160c8bfaf089cbeeef2023f12379793079bff93b) ) // 5.3m
+
+ ROM_REGION( 2*0x10000, "soundcpu", 0 )
+ ROM_LOAD( "nk2_06.bin", 0x10000, 0x8000, CRC(7bfe6c9e) SHA1(aef8cbeb0024939bf65f77113a5cf777f6613722) ) // decrypted opcodes
+ ROM_CONTINUE( 0x00000, 0x8000 ) // decrypted data
+
+ ROM_REGION( 0x2000, "user1", 0 ) /* MC8123 key */
+ ROM_LOAD( "ninjakd2.key", 0x0000, 0x2000, CRC(ec25318f) SHA1(619da3f69f9919e1457f79ee1d38e7ec80c4ebb0) )
+
+ ROM_REGION( 0x08000, "gfx1", 0 ) // fg tiles (need lineswapping)
+ ROM_LOAD( "jt_104_12.bin", 0x00000, 0x08000, CRC(c038fadb) SHA1(59e9b125ead3e9bdc9d66de75dffd58956eb922e) ) // this rom contains the new title / license
+
+ ROM_REGION( 0x20000, "gfx2", 0 ) // sprites (need lineswapping)
+ ROM_LOAD( "nk2_08.rom", 0x00000, 0x10000, CRC(1b79c50a) SHA1(8954bc51cb9fbbe16b09381f35c84ccc56a803f3) )
+ ROM_LOAD( "nk2_07.rom", 0x10000, 0x10000, CRC(0be5cd13) SHA1(8f94a8fef6668aaf13329715fee81302dbd6c685) )
+
+ ROM_REGION( 0x20000, "gfx3", 0 ) // bg tiles (need lineswapping)
+ ROM_LOAD( "nk2_11.rom", 0x00000, 0x10000, CRC(41a714b3) SHA1(b05f48d71a9837914c12c13e0b479c8a6dc8c25e) )
+ ROM_LOAD( "nk2_10.rom", 0x10000, 0x10000, CRC(c913c4ab) SHA1(f822c5621b3e32c1a284f6367bdcace81c1c74b3) )
+
+ ROM_REGION( 0x10000, "pcm", 0 )
+ ROM_LOAD( "nk2_09.rom", 0x0000, 0x10000, CRC(c1d2d170) SHA1(0f325815086fde90fd85360d3660042b0b68ba96) ) // unsigned 8-bit pcm samples
+ROM_END
+
+
ROM_START( mnight )
ROM_REGION( 0x30000, "maincpu", 0 )
ROM_LOAD( "mn6-j19.bin", 0x00000, 0x8000, CRC(56678d14) SHA1(acf3a97ca29db8ab9cad69599c5567464af3ae44) )
@@ -1490,7 +1531,8 @@ DRIVER_INIT_MEMBER(ninjakd2_state,robokidj)
GAME( 1987, ninjakd2, 0, ninjakd2, ninjakd2, ninjakd2_state, ninjakd2, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1987, ninjakd2a, ninjakd2, ninjakd2, ninjakd2, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 2, bootleg?)", GAME_SUPPORTS_SAVE )
GAME( 1987, ninjakd2b, ninjakd2, ninjakd2, rdaction, ninjakd2_state, bootleg, ROT0, "UPL", "Ninja-Kid II / NinjaKun Ashura no Shou (set 3, bootleg?)", GAME_SUPPORTS_SAVE )
-GAME( 1987, rdaction, ninjakd2, ninjakd2, rdaction, ninjakd2_state, ninjakd2, ROT0, "UPL (World Games license)", "Rad Action / NinjaKun Ashura no Shou", GAME_SUPPORTS_SAVE )
+GAME( 1987, rdaction, ninjakd2, ninjakd2, rdaction, ninjakd2_state, ninjakd2, ROT0, "UPL (World Games license)", "Rad Action / NinjaKun Ashura no Shou", GAME_SUPPORTS_SAVE )
+GAME( 1987, jt104, ninjakd2, ninjakd2, rdaction, ninjakd2_state, bootleg, ROT0, "UPL (United Amusements license)", "JT-104 (title screen modification of Rad Action)", GAME_SUPPORTS_SAVE )
GAME( 1987, mnight, 0, mnight, mnight, ninjakd2_state, mnight, ROT0, "UPL (Kawakus license)", "Mutant Night", GAME_SUPPORTS_SAVE )
GAME( 1988, arkarea, 0, arkarea, arkarea, ninjakd2_state, mnight, ROT0, "UPL", "Ark Area", GAME_SUPPORTS_SAVE )
GAME( 1988, robokid, 0, robokid, robokid, ninjakd2_state, robokid, ROT0, "UPL", "Atomic Robo-kid", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pcxt.c b/src/mame/drivers/pcxt.c
index 2b1f984da8a..b8971ada485 100644
--- a/src/mame/drivers/pcxt.c
+++ b/src/mame/drivers/pcxt.c
@@ -685,7 +685,7 @@ void pcxt_state::machine_reset()
m_lastvalue = -1;
m_pc_spkrdata = 0;
- m_pit_out2 = 0;
+ m_pit_out2 = 1;
m_wss2_data = 0;
m_speaker->level_w(0);
}
diff --git a/src/mame/drivers/peplus.c b/src/mame/drivers/peplus.c
index f85142c8335..38fa2795d86 100644
--- a/src/mame/drivers/peplus.c
+++ b/src/mame/drivers/peplus.c
@@ -10,10 +10,6 @@
--- Technical Notes ---
- Name: Player's Edge Plus (PP0516) Double Bonus Draw Poker.
- Company: IGT - International Game Technology
- Year: 1987
-
Hardware:
CPU = INTEL 80C32 ; I8052 compatible
@@ -45,7 +41,7 @@ Additional notes
1) What are "set chips" ?
- They are meant to be used after you have already sucessfully put a new game in your machine.
+ They are meant to be used after you have already successfully put a new game in your machine.
Lets say you have 'pepp0516' installed and you go through the setup. In a real machine,
you may want to add a bill validator. The only way to do that is to un-socket the 'pepp0516'
chip and put in the 'peset038' chip and then reboot the machine. Then this chip's program
@@ -102,12 +98,9 @@ Additional notes
3a) About the "autohold" feature
- Depending on laws which vary from cities/country, this feature can available or not in the
- "operator mode". By default, it isn't available. To have this feature available in the
- "operator mode", a new chip has to be burnt with a bit set and a new checksum (game ID
- doesn't change though). Each program rom requires a specific address to be set to 0x01
- to enable this option. It is beyond the scope of this driver to provide that information
- for each set that is supported. Only PP0197 & PP0419 have support for Autohold enabled.
+ Depending on local laws which vary from one jurisdiction to another, this feature may be
+ available in the "operator mode". This requires a specific build for said jurisdiction.
+ Currently the only dumped sets with the Auto Hold feature enabled are PP0197 & PP0419.
Stephh's log (2007.11.28) :
@@ -149,9 +142,11 @@ Super PE+
XnnnnnnP Poker Data. Contains poker game + paytable percentages
Data roms will not work with every Program rom. Incompatible combos report: Incompatible Data EPROM
X000055P is a good example, it works with 19 XP000xxx Program roms. Others may be as few as 2.
- XMPnnnnn Multi-Poker Programs. Different options for each set, but all use the same XMnnnnnP data roms
- XMP00002 through XMP00006 & XMP00024 Use the XM000xxP Poker Data
+ XMPnnnnn Multi-Poker Programs. Different options for each set, but all use the same XMnnnnnP data
+ XMP00002 through XMP00006 & XMP00024 Use the XM000xxP Multi-Poker Data
XMP00014, XMP00017 & XMP00030 Use the WING Board add-on and use the XnnnnnnP Poker Data (Not all are compatible!)
+ XMP00013, XMP00022 & XMP00026 Use the WING Board add-on & CG2346 + CAPX2346 for Spanish paytables
+ XMP00025 Uses the Wing Board add-on and is for the International markets. Auto Hold always enabled.
XMnnnnnP Multi-Poker Data. Contains poker games + paytable percentages: Requires specific CG graphics + CAP color prom
XKnnnnnn Spot Keno Programs. Different options for each set, but all use the same XnnnnnnK data roms
XnnnnnnK Spot Keno Data. Uses CG2120 with CAP1267
@@ -308,11 +303,6 @@ protected:
static const UINT8 id_022[8] = { 0x00, 0x01, 0x04, 0x09, 0x13, 0x16, 0x18, 0x00 };
static const UINT16 id_023[8] = { 0x4a6c, 0x4a7b, 0x4a4b, 0x4a5a, 0x4a2b, 0x4a0a, 0x4a19, 0x4a3a };
-#define MASTER_CLOCK XTAL_20MHz
-#define CPU_CLOCK ((MASTER_CLOCK)/2) /* divided by 2 - 7474 */
-#define MC6845_CLOCK ((MASTER_CLOCK)/8/3)
-#define SOUND_CLOCK ((MASTER_CLOCK)/12)
-
/**************
* Memory Copy *
@@ -1297,7 +1287,7 @@ void peplus_state::machine_reset()
static MACHINE_CONFIG_START( peplus, peplus_state )
// basic machine hardware
- MCFG_CPU_ADD("maincpu", I80C32, CPU_CLOCK)
+ MCFG_CPU_ADD("maincpu", I80C32, XTAL_20MHz/2) /* 10MHz */
MCFG_CPU_PROGRAM_MAP(peplus_map)
MCFG_CPU_IO_MAP(peplus_iomap)
@@ -1315,7 +1305,7 @@ static MACHINE_CONFIG_START( peplus, peplus_state )
MCFG_PALETTE_ADD("palette", 16*16*2)
MCFG_PALETTE_INIT_OWNER(peplus_state, peplus)
- MCFG_MC6845_ADD("crtc", R6545_1, "screen", MC6845_CLOCK)
+ MCFG_MC6845_ADD("crtc", R6545_1, "screen", XTAL_20MHz/8/3)
MCFG_MC6845_SHOW_BORDER_AREA(false)
MCFG_MC6845_CHAR_WIDTH(8)
MCFG_MC6845_ADDR_CHANGED_CB(peplus_state, crtc_addr)
@@ -1326,7 +1316,7 @@ static MACHINE_CONFIG_START( peplus, peplus_state )
// sound hardware
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("aysnd", AY8912, SOUND_CLOCK)
+ MCFG_SOUND_ADD("aysnd", AY8912, XTAL_20MHz/12)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
MACHINE_CONFIG_END
@@ -1379,7 +1369,7 @@ DRIVER_INIT_MEMBER(peplus_state,peplussbw)
* Rom Load *
*************************/
-ROM_START( peset001 ) /* Normal board : Set Chip (Set001) - Use for PP0542 */
+ROM_START( peset001 ) /* Normal board : Set Chip (Set001) - PE+ Set Denomination */
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "set001.u68", 0x00000, 0x10000, CRC(03397ced) SHA1(89d8ba7e6706e6d34ae9aae09a8a631fff06a36f) )
@@ -1393,7 +1383,23 @@ ROM_START( peset001 ) /* Normal board : Set Chip (Set001) - Use for PP0542 */
ROM_LOAD( "cap740.u50", 0x0000, 0x0100, CRC(6fe619c4) SHA1(49e43dafd010ce0fe9b2a63b96a4ddedcb933c6d) ) /* BPROM type DM74LS471 (compatible with N82S135N) verified */
ROM_END
-ROM_START( peset038 ) /* Normal board : Set Chip (Set038) */
+ROM_START( peset004 ) /* Normal board : Set Chip (Set004) - PE+ Set Denomination / Enable Validator */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "set004.u68", 0x00000, 0x10000, CRC(b5729571) SHA1(fa3bb1fec81692a898213f9521ac0b2a4d1a8968) )
+
+ ROM_REGION( 0x020000, "gfx1", 0 )
+ ROM_LOAD( "mro-cg740.u72", 0x00000, 0x8000, CRC(72667f6c) SHA1(89843f472cc0329317cfc643c63bdfd11234b194) )
+ ROM_LOAD( "mgo-cg740.u73", 0x08000, 0x8000, CRC(7437254a) SHA1(bba166dece8af58da217796f81117d0b05752b87) )
+ ROM_LOAD( "mbo-cg740.u74", 0x10000, 0x8000, CRC(92e8c33e) SHA1(05344664d6fdd3f4205c50fa4ca76fc46c18cf8f) )
+ ROM_LOAD( "mxo-cg740.u75", 0x18000, 0x8000, CRC(ce4cbe0b) SHA1(4bafcd68be94a5deaae9661584fa0fc940b834bb) )
+
+ ROM_REGION( 0x100, "proms", 0 )
+ ROM_LOAD( "cap740.u50", 0x0000, 0x0100, CRC(6fe619c4) SHA1(49e43dafd010ce0fe9b2a63b96a4ddedcb933c6d) ) /* BPROM type DM74LS471 (compatible with N82S135N) verified */
+ROM_END
+
+/* Known to exsist SET033 - PE+ Set Denomination / Enable Validator / SAS 4.0 */
+
+ROM_START( peset038 ) /* Normal board : Set Chip (Set038) - PE+ Set Denomination / Enable Validator */
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "set038.u68", 0x00000, 0x10000, CRC(9c4b1d1a) SHA1(8a65cd1d8e2d74c7b66f4dfc73e7afca8458e979) )
@@ -1407,6 +1413,21 @@ ROM_START( peset038 ) /* Normal board : Set Chip (Set038) */
ROM_LOAD( "cap740.u50", 0x0000, 0x0100, CRC(6fe619c4) SHA1(49e43dafd010ce0fe9b2a63b96a4ddedcb933c6d) ) /* BPROM type DM74LS471 (compatible with N82S135N) verified */
ROM_END
+ROM_START( peivc006 ) /* Normal board : Clear Chip (IVC006) - PE+ Clear CMOS / E-Square */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "ivc006.u68", 0x00000, 0x8000, CRC(9a408727) SHA1(cc2d9ba66c461ae81f9fae1e068981d8de093416) ) /* 27C256 EPROM */
+ ROM_RELOAD( 0x08000, 0x8000)
+
+ ROM_REGION( 0x020000, "gfx1", 0 )
+ ROM_LOAD( "mro-cg740.u72", 0x00000, 0x8000, CRC(72667f6c) SHA1(89843f472cc0329317cfc643c63bdfd11234b194) )
+ ROM_LOAD( "mgo-cg740.u73", 0x08000, 0x8000, CRC(7437254a) SHA1(bba166dece8af58da217796f81117d0b05752b87) )
+ ROM_LOAD( "mbo-cg740.u74", 0x10000, 0x8000, CRC(92e8c33e) SHA1(05344664d6fdd3f4205c50fa4ca76fc46c18cf8f) )
+ ROM_LOAD( "mxo-cg740.u75", 0x18000, 0x8000, CRC(ce4cbe0b) SHA1(4bafcd68be94a5deaae9661584fa0fc940b834bb) )
+
+ ROM_REGION( 0x100, "proms", 0 )
+ ROM_LOAD( "cap740.u50", 0x0000, 0x0100, CRC(6fe619c4) SHA1(49e43dafd010ce0fe9b2a63b96a4ddedcb933c6d) ) /* BPROM type DM74LS471 (compatible with N82S135N) verified */
+ROM_END
+
ROM_START( pepk1024 ) /* Normal (non-plus) board : Aces and Faces 4 of a Kind Bonus Poker (PK1024) */
/*
2-10 J-A
@@ -4597,6 +4618,20 @@ PayTable Js+ 2PR 3K STR FL FH 4K SF RF (Bonus)
ROM_LOAD( "cap656.u50", 0x0000, 0x0100, CRC(038cabc6) SHA1(c6514b4f9dbed6ab2631f563f7e00648661ebdbb) )
ROM_END
+ROM_START( pemg0252 ) /* Normal board : Player's Choice Multi-Game MG0252 - Requires a Printer (not yet supported) */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "mg0252.u68", 0x00000, 0x10000, CRC(1d0ba4f1) SHA1(f906a11d171318a06fb0bb09783bd8e3b99f1ca9) ) /* Stalls with "PRINTER ERROR" */
+
+ ROM_REGION( 0x020000, "gfx1", 0 )
+ ROM_LOAD( "mro-cg2076.u72", 0x00000, 0x8000, CRC(84634f0e) SHA1(8f1b9aaa92e861f00569053c1112c2fb7eb577e8) )
+ ROM_LOAD( "mgo-cg2076.u73", 0x08000, 0x8000, CRC(cd5dad56) SHA1(60c61f107860151c31be61504eb42fa93d0d41d9) )
+ ROM_LOAD( "mbo-cg2076.u74", 0x10000, 0x8000, CRC(cda4ac28) SHA1(84a722f782563f713978403cd6b21492252721cf) )
+ ROM_LOAD( "mxo-cg2076.u75", 0x18000, 0x8000, CRC(8e087d93) SHA1(25172001f5e0221aeda52fd51f4605eed24df806) )
+
+ ROM_REGION( 0x100, "proms", 0 )
+ ROM_LOAD( "cap1426.u50", 0x0000, 0x0100, CRC(6c7c3462) SHA1(b5481b548f4db460d27a4bfebb08188f36ca0c11) )
+ROM_END
+
ROM_START( pebe0014 ) /* Normal board : Blackjack (BE0014) */
/*
Paytable ID: BJ7
@@ -4643,6 +4678,21 @@ Known to exist:
ROM_LOAD( "cap707.u50", 0x0000, 0x0100, CRC(9851ba36) SHA1(5a0a43c1e212ae8c173102ede9c57a3d95752f99) )
ROM_END
+ROM_START( peke0017 ) /* Normal board : Keno 1-10 Spot (KE0017) */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "ke0017_560-a07.u68", 0x00000, 0x08000, CRC(a0f70116) SHA1(15808cd3245e2e5934f3365f95590da0be552e8b) ) /* Game Version: 560, Library Version: A07 */
+ ROM_RELOAD( 0x08000, 0x8000) /* 32K version built using earlier gaming libraries */
+
+ ROM_REGION( 0x020000, "gfx1", 0 )
+ ROM_LOAD( "mro-cg1016.u72", 0x00000, 0x8000, CRC(92072064) SHA1(ccd12303afb559a57f135f5feff1eada4394c45b) )
+ ROM_LOAD( "mgo-cg1016.u73", 0x08000, 0x8000, CRC(fd54f031) SHA1(0990338d00574d798bed2c13ed2cf65118698a65) )
+ ROM_LOAD( "mbo-cg1016.u74", 0x10000, 0x8000, CRC(6325ff0b) SHA1(cca693b42d458024d11badf02923f0aedc5252ba) )
+ ROM_LOAD( "mxo-cg1016.u75", 0x18000, 0x8000, CRC(54345a8c) SHA1(928f1633343a1d81ef193ebd09de0d36c52057ca) )
+
+ ROM_REGION( 0x100, "proms", 0 )
+ ROM_LOAD( "cap1016.u50", 0x0000, 0x0100, CRC(12e1be25) SHA1(501487bc729eb80fcf9e61705d3546de5e0d7cde) )
+ROM_END
+
ROM_START( peke1012 ) /* Normal board : Keno 1-10 Spot (KE1012) - Payout 90.27%, Paytable 90-P */
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "ke1012_576-a3u.u68", 0x00000, 0x10000, CRC(470e8c10) SHA1(f8a65a3a73477e9e9d2f582eeefa93b470497dfa) ) /* Game Version: 576, Library Version: A3U */
@@ -8716,8 +8766,10 @@ ROM_END
/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
/* Set chips */
-GAMEL(1987, peset001, 0, peplus, peplus_schip, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (Set001) Set Chip", 0, layout_pe_schip )
-GAMEL(1987, peset038, 0, peplus, peplus_schip, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (Set038) Set Chip", 0, layout_pe_schip )
+GAMEL(1987, peset001, 0, peplus, peplus_schip, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (SET001) Set Chip", 0, layout_pe_schip )
+GAMEL(1987, peset004, 0, peplus, peplus_schip, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (SET004) Set Chip", 0, layout_pe_schip )
+GAMEL(1987, peset038, 0, peplus, peplus_schip, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (SET038) Set Chip", 0, layout_pe_schip )
+GAMEL(1987, peivc006, 0, peplus, peplus_schip, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IVC006) Clear EEPROM Chip", 0, layout_pe_schip )
/* Normal (non-plus) board : Poker */
GAMEL(1987, pepk1024, 0, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK1024) Aces and Faces Bonus Poker", 0, layout_pe_poker )
@@ -8734,10 +8786,10 @@ GAMEL(1987, pepp0023, pepp0002, peplus, peplus_poker, peplus_state, nonplus,
GAMEL(1987, pepp0040, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0040) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0041, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0041) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0043, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0043) 10's or Better", 0, layout_pe_poker )
-GAMEL(1987, pepp0043a, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0043) 10's or Better (International)", 0, layout_pe_poker )
+GAMEL(1987, pepp0043a, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0043) 10's or Better (International)",0, layout_pe_poker )
GAMEL(1987, pepp0045, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0045) 10's or Better", 0, layout_pe_poker )
GAMEL(1987, pepp0046, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0046) 10's or Better (set 1)", 0, layout_pe_poker )
-GAMEL(1987, pepp0046a, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0046) 10's or Better (International)", 0, layout_pe_poker )
+GAMEL(1987, pepp0046a, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0046) 10's or Better (International)",0, layout_pe_poker )
GAMEL(1987, pepp0046b, pepp0002, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0046) 10's or Better (set 2)", 0, layout_pe_poker )
GAMEL(1987, pepp0051, pepp0053, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0051) Joker Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0053, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0053) Joker Poker (Aces or Better)", 0, layout_pe_poker )
@@ -8762,10 +8814,10 @@ GAMEL(1987, pepp0125, pepp0055, peplus, peplus_poker, peplus_state, nonplus,
GAMEL(1987, pepp0126, pepp0055, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0126) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0127, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0127) Deuces Joker Wild Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0127a, pepp0127, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0127) Deuces Joker Wild Poker (International)", 0, layout_pe_poker )
-GAMEL(1987, pepp0158, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 1)", 0, layout_pe_poker )
-GAMEL(1987, pepp0158a, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 2)", 0, layout_pe_poker )
-GAMEL(1987, pepp0158b, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 3)", 0, layout_pe_poker )
-GAMEL(1987, pepp0158c, pepp0158, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 4)", 0, layout_pe_poker )
+GAMEL(1987, pepp0158, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 1)", 0, layout_pe_poker )
+GAMEL(1987, pepp0158a, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 2)", 0, layout_pe_poker )
+GAMEL(1987, pepp0158b, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 3)", 0, layout_pe_poker )
+GAMEL(1987, pepp0158c, pepp0158, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0158) 4 of a Kind Bonus Poker (set 4)", 0, layout_pe_poker )
GAMEL(1987, pepp0159, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0159) Standard Draw Poker (International)", 0, layout_pe_poker )
GAMEL(1987, pepp0171, pepp0053, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0171) Joker Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0171a, pepp0053, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0171) Joker Poker (International)", 0, layout_pe_poker )
@@ -8790,8 +8842,8 @@ GAMEL(1987, pepp0230, pepp0002, peplus, peplus_poker, peplus_state, peplus,
GAMEL(1987, pepp0242, pepp0055, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0242) Deuces Wild Poker (International English/Spanish)", 0, layout_pe_poker )
GAMEL(1987, pepp0249, pepp0055, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0249) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0250, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0250) Double Down Stud Poker", 0, layout_pe_poker )
-GAMEL(1987, pepp0265, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 1)", 0, layout_pe_poker )
-GAMEL(1987, pepp0265a, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 2)", 0, layout_pe_poker )
+GAMEL(1987, pepp0265, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 1)", 0, layout_pe_poker )
+GAMEL(1987, pepp0265a, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (set 2)", 0, layout_pe_poker )
GAMEL(1987, pepp0265b, pepp0158, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0265) 4 of a Kind Bonus Poker (International)", 0, layout_pe_poker )
GAMEL(1987, pepp0274, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0274) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0288, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0288) Standard Draw Poker (Spanish)", 0, layout_pe_poker )
@@ -8818,7 +8870,7 @@ GAMEL(1987, pepp0454, pepp0434, peplus, peplus_poker, peplus_state, peplus,
GAMEL(1987, pepp0455, pepp0053, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0455) Joker Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0458, pepp0053, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0458) Joker Poker (Aces or Better)", 0, layout_pe_poker )
GAMEL(1985, pepp0488, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0488) Standard Draw Poker (Arizona Charlie's)", 0, layout_pe_poker )
-GAMEL(1987, pepp0508, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker", 0, layout_pe_poker )
+GAMEL(1987, pepp0508, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0508) Loose Deuce Deuces Wild! Poker",0, layout_pe_poker )
GAMEL(1987, pepp0509, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0509) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0510, pepp0002, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0510) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1987, pepp0514, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PP0514) Double Bonus Poker (set 1)", 0, layout_pe_poker )
@@ -8850,7 +8902,7 @@ GAMEL(1987, pepp0816, 0, peplus, peplus_poker, peplus_state, peplus,
GAMEL(1987, peip0028, 0, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0028) Joker Poker - French", 0, layout_pe_poker )
GAMEL(1987, peip0029, peip0028, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0029) Joker Poker - French", 0, layout_pe_poker )
GAMEL(1987, peip0031, 0, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0031) Standard Draw Poker - French", 0, layout_pe_poker )
-GAMEL(1987, peip0041, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0041) Double Deuces Wild Poker - French", 0, layout_pe_poker )
+GAMEL(1987, peip0041, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0041) Double Deuces Wild Poker - French", 0, layout_pe_poker )
GAMEL(1987, peip0051, peip0028, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0051) Joker Poker - French", 0, layout_pe_poker )
GAMEL(1987, peip0058, peip0031, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0058) Standard Draw Poker - French", 0, layout_pe_poker )
GAMEL(1987, peip0062, peip0028, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0062) Joker Poker - French", 0, layout_pe_poker )
@@ -8868,114 +8920,118 @@ GAMEL(1987, peip0116, peip0031, peplus, peplus_poker, peplus_state, nonplus,
GAMEL(1987, peip0118, peip0031, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0118) Standard Draw Poker - French", 0, layout_pe_poker )
GAMEL(1987, peip0120, peip0031, peplus, peplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (IP0120) Standard Draw Poker - French", 0, layout_pe_poker )
+/* Normal board : Multi-Game - Player's Choice - Some sets require a printer (not yet supported) */
+GAMEL(1994, pemg0252, 0, peplus, peplus_poker, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Choice (MG0252) Multi-Game", GAME_NOT_WORKING, layout_pe_poker) /* Needs printer support */
+
/* Normal board : Blackjack */
-GAMEL(1994, pebe0014, 0, peplus, peplus_bjack, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (BE0014) Blackjack", 0, layout_pe_bjack )
+GAMEL(1994, pebe0014, 0, peplus, peplus_bjack, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (BE0014) Blackjack", 0, layout_pe_bjack )
/* Normal board : Keno */
-GAMEL(1994, peke1012, 0, peplus, peplus_keno, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (KE1012) Keno", 0, layout_pe_keno )
-GAMEL(1994, peke1013, peke1012, peplus, peplus_keno, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (KE1013) Keno", 0, layout_pe_keno )
+GAMEL(1994, peke0017, 0, peplus, peplus_keno, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (KE0017) Keno", GAME_NOT_WORKING, layout_pe_keno )
+GAMEL(1994, peke1012, 0, peplus, peplus_keno, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (KE1012) Keno", 0, layout_pe_keno )
+GAMEL(1994, peke1013, peke1012, peplus, peplus_keno, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (KE1013) Keno", 0, layout_pe_keno )
/* Normal board : Slots machine */
-GAMEL(1996, peps0014, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0014) Super Joker Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0021, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0021) Red White & Blue Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0022, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0022) Red White & Blue Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0042, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0042) Double Diamond Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0043, peps0042, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0043) Double Diamond Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0045, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0045) Red White & Blue Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0047, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0047) Wild Cherry Slots", GAME_NOT_WORKING, layout_pe_slots ) /* Needs MxO-CG1004.Uxx graphics roms redumped */
-GAMEL(1996, peps0092, peps0047, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0092) Wild Cherry Slots", GAME_NOT_WORKING, layout_pe_slots ) /* Needs MxO-CG1004.Uxx graphics roms redumped */
-GAMEL(1996, peps0206, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0206) Red White & Blue Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0207, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0207) Red White & Blue Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0296, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0296) Haywire Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0298, peps0042, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0298) Double Diamond Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0308, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0308) Double Jackpot Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0364, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0364) Red White & Blue Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0426, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0426) Sizzling Sevens Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0581, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0581) Red White & Blue Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0615, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0615) Chaos Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0631, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0631) Red White & Blue Slots", 0, layout_pe_slots )
-GAMEL(1996, peps0716, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0716) River Gambler Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0014, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0014) Super Joker Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0021, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0021) Red White & Blue Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0022, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0022) Red White & Blue Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0042, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0042) Double Diamond Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0043, peps0042, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0043) Double Diamond Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0045, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0045) Red White & Blue Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0047, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0047) Wild Cherry Slots", GAME_NOT_WORKING, layout_pe_slots ) /* Needs MxO-CG1004.Uxx graphics roms redumped */
+GAMEL(1996, peps0092, peps0047, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0092) Wild Cherry Slots", GAME_NOT_WORKING, layout_pe_slots ) /* Needs MxO-CG1004.Uxx graphics roms redumped */
+GAMEL(1996, peps0206, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0206) Red White & Blue Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0207, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0207) Red White & Blue Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0296, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0296) Haywire Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0298, peps0042, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0298) Double Diamond Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0308, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0308) Double Jackpot Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0364, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0364) Red White & Blue Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0426, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0426) Sizzling Sevens Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0581, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0581) Red White & Blue Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0615, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0615) Chaos Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0631, peps0021, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0631) Red White & Blue Slots", 0, layout_pe_slots )
+GAMEL(1996, peps0716, 0, peplus, peplus_slots, peplus_state, peplus, ROT0, "IGT - International Game Technology", "Player's Edge Plus (PS0716) River Gambler Slots", 0, layout_pe_slots )
/* Superboard : Poker */
GAMEL(1995, pex0002p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000002P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1995, pex0002pa, pex0002p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000002P+XP000109) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1995, pex0040p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000040P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0045p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000045P+XP000038) 10's or Better", 0, layout_pe_poker )
-GAMEL(1995, pex0046p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000046P+XP000038) 10's or Better", 0, layout_pe_poker )
+GAMEL(1995, pex0045p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000045P+XP000038) 10's or Better", 0, layout_pe_poker )
+GAMEL(1995, pex0046p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000046P+XP000038) 10's or Better", 0, layout_pe_poker )
GAMEL(1995, pex0053p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000053P+XP000038) Joker Poker (Aces or Better)", 0, layout_pe_poker )
-GAMEL(1995, pex0054p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000054P+XP000038) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000019) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0054p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000054P+XP000038) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000019) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1995, pex0055pa, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000022) Deuces Wild Poker (The Orleans)", 0, layout_pe_poker )
GAMEL(1995, pex0055pb, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000023) Deuces Wild Poker (The Fun Ships)", 0, layout_pe_poker )
-GAMEL(1995, pex0055pc, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000028) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pd, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000035) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pe, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000038) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pf, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000040) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pg, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055ph, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000055) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pi, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000063) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pj, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000075) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pk, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000079) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pl, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000094) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pm, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000095) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pn, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000098) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055po, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000102) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pp, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000104) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pq, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000112) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0055pr, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000126) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pc, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000028) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pd, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000035) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pe, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000038) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pf, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000040) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pg, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055ph, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000055) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pi, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000063) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pj, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000075) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pk, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000079) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pl, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000094) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pm, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000095) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pn, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000098) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055po, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000102) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pp, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000104) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pq, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000112) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0055pr, pex0055p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000055P+XP000126) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1995, pex0060p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000060P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0124p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000124P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0124p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000124P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1995, pex0150p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000150P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1995, pex0158p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000158P+XP000038) 4 of a Kind Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0171p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000171P+XP000038) Joker Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0171p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000171P+XP000038) Joker Poker", 0, layout_pe_poker )
GAMEL(1995, pex0188p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000188P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0190p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000190P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0190p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000190P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1995, pex0197p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000197P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1995, pex0203p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000203P+XP000038) 4 of a Kind Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0224p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000224P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0224p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000224P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1995, pex0225p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000225P+XP000079) Dueces Joker Wild Poker", 0,layout_pe_poker )
-GAMEL(1995, pex0242p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000242P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0242p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000242P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1995, pex0265p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000265P+XP000038) 4 of a Kind Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0291p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000291P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0417p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000417P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0291p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000291P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0417p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000417P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1995, pex0430p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000430P+XP000079) Dueces Joker Wild Poker", 0,layout_pe_poker )
-GAMEL(1995, pex0434p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000434P+XP000038) Bonus Poker Deluxe", 0, layout_pe_poker )
+GAMEL(1995, pex0434p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000434P+XP000038) Bonus Poker Deluxe", 0, layout_pe_poker )
GAMEL(1995, pex0447p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000447P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1995, pex0449p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000449P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0451p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000451P+XP000038) Bonus Poker Deluxe", 0, layout_pe_poker )
+GAMEL(1995, pex0451p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000451P+XP000038) Bonus Poker Deluxe", 0, layout_pe_poker )
GAMEL(1995, pex0452p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000452P+XP000038) Double Deuces Wild Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0454p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000454P+XP000038) Bonus Poker Deluxe", 0, layout_pe_poker )
+GAMEL(1995, pex0454p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000454P+XP000038) Bonus Poker Deluxe", 0, layout_pe_poker )
GAMEL(1995, pex0458p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000458P+XP000038) Joker Poker (Aces or Better)", 0, layout_pe_poker )
-GAMEL(1995, pex0459p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000459P+XP000038) Joker Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0459pa, pex0459p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000459P+XP000155) Joker Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0459p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000459P+XP000038) Joker Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0459pa, pex0459p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000459P+XP000155) Joker Poker", 0, layout_pe_poker )
GAMEL(1995, pex0508p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000508P+XP000038) Loose Deuce Deuces Wild! Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0514p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000514P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0515p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000515P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0516p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000516P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0536p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000536P+XP000038) Joker Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0514p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000514P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0515p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000515P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0516p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000516P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0536p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000536P+XP000038) Joker Poker", 0, layout_pe_poker )
GAMEL(1995, pex0537p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000537P+XP000038) Standard Draw Poker", 0, layout_pe_poker )
GAMEL(1995, pex0550p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000550P+XP000055) Joker Poker (Two Pair or Better)", 0, layout_pe_poker )
-GAMEL(1995, pex0568p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000568P+XP000038) Joker Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0568p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000568P+XP000038) Joker Poker", 0, layout_pe_poker )
GAMEL(1995, pex0581p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000581P+XP000038) 4 of a Kind Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0588p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000588P+XP000038) Joker Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0725p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000725P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0726p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000726P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex0727p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000727P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0588p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000588P+XP000038) Joker Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0725p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000725P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0726p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000726P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex0727p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000727P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex0763p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000763P+XP000038) 4 of a Kind Bonus Poker", 0,layout_pe_poker )
GAMEL(1995, pex2018p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002018P+XP000038) Full House Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2025p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002025P+XP000019) Deuces Wild Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2026p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002026P+XP000019) Deuces Wild Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2027p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002027P+XP000019) Deuces Wild Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2029p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002029P+XP000019) Deuces Wild Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2031p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002031P+XP000112) Lucky Deal Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2031p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002031P+XP000112) Lucky Deal Poker", 0, layout_pe_poker )
GAMEL(1995, pex2035p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002035P+XP000112) White Hot Aces Poker", 0, layout_pe_poker )
GAMEL(1995, pex2036p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002036P+XP000112) White Hot Aces Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2038p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002038P+XP000038) Nevada Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2040p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002040P+XP000038) Nevada Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2042p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002042P+XP000038) Triple Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2043p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002043P+XP000038) Triple Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2044p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002044P+XP000038) Triple Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2045p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002045P+XP000038) Triple Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2038p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002038P+XP000038) Nevada Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2040p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002040P+XP000038) Nevada Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2042p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002042P+XP000038) Triple Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2043p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002043P+XP000038) Triple Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2044p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002044P+XP000038) Triple Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2045p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002045P+XP000038) Triple Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2066p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002066P+XP000038) Double Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2067p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002067P+XP000038) Double Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2068p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002068P+XP000038) Double Double Bonus Poker", 0, layout_pe_poker )
@@ -8984,21 +9040,21 @@ GAMEL(1995, pex2070p, 0, peplus, peplus_poker, peplus_state, peplussb,
GAMEL(1995, pex2121p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002121P+XP000038) Standard Draw Poker", 0,layout_pe_poker )
GAMEL(1995, pex2121pa, pex2121p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002121P+XP000037) Standard Draw Poker", 0,layout_pe_poker )
GAMEL(1995, pex2150p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002150P+XP000038) 4 of a Kind Bonus Poker", 0,layout_pe_poker )
-GAMEL(1995, pex2172p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002172P+XP000112) Ace$ Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2173p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002173P+XP000038) Ace$ Bonus Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2180p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002180P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2172p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002172P+XP000112) Ace$ Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2173p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002173P+XP000038) Ace$ Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2180p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002180P+XP000038) Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2241p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002241P+XP000079) 4 of a Kind Bonus Poker", 0,layout_pe_poker )
-GAMEL(1995, pex2244p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002244P+XP000079) Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2244p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002244P+XP000079) Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2245p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002245P+XP000055) Standard Draw Poker", 0,layout_pe_poker )
GAMEL(1995, pex2245pa, pex2245p, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002245P+XP000079) Standard Draw Poker", 0,layout_pe_poker )
-GAMEL(1995, pex2250p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002250P+XP000050) Shockwave Poker", 0, layout_pe_poker )
-GAMEL(1995, pex2251p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002251P+XP000050) Shockwave Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2250p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002250P+XP000050) Shockwave Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2251p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002251P+XP000050) Shockwave Poker", 0, layout_pe_poker )
GAMEL(1995, pex2272p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002272P+XP000055) Black Jack Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2275p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002275P+XP000055) Black Jack Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2276p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002276P+XP000055) Black Jack Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2283p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002283P+XP000057) Dealt Deuces Wild Bonus Poker", 0, layout_pe_poker ) /* Undumped color CAP but should have correct colors anyways */
GAMEL(1995, pex2284p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002284P+XP000057) Barbaric Decues Wild Bonus Poker", 0, layout_pe_poker ) /* Undumped color CAP but should have correct colors anyways */
-GAMEL(1995, pex2302p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002302P+XP000038) Bonus Poker Deluxe", 0, layout_pe_poker )
+GAMEL(1995, pex2302p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002302P+XP000038) Bonus Poker Deluxe", 0, layout_pe_poker )
GAMEL(1995, pex2303p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002303P+XP000112) White Hot Aces Poker", 0, layout_pe_poker )
GAMEL(1995, pex2306p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002306P+XP000112) Triple Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2307p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002307P+XP000112) Triple Double Bonus Poker", 0, layout_pe_poker )
@@ -9010,7 +9066,7 @@ GAMEL(1995, pex2377p, 0, peplus, peplus_poker, peplus_state, peplussb,
GAMEL(1995, pex2419p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002419P+XP000064) Deuces Wild Bonus Poker - French", 0, layout_pe_poker )
GAMEL(1995, pex2420p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002420P+XP000064) Deuces Wild Bonus Poker - French", 0, layout_pe_poker )
GAMEL(1995, pex2421p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002421P+XP000064) Deuces Wild Bonus Poker - French", 0, layout_pe_poker )
-GAMEL(1995, pex2440p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002440P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2440p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002440P+XP000053) Deuces Wild Poker", 0, layout_pe_poker )
GAMEL(1995, pex2461p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002461P+XP000055) Joker Poker (Two Pair or Better)", 0, layout_pe_poker )
/* Superboard : Poker (Key On Credit) */
@@ -9046,7 +9102,7 @@ GAMEL(1995, pexmp026, 0, peplus, peplus_poker, peplus_state, peplussbw,
GAMEL(1995, pexmp030, 0, peplus, peplus_poker, peplus_state, peplussbw,ROT0, "IGT - International Game Technology", "Player's Edge Plus (XMP00030) 5-in-1 Wingboard (CG2426)", 0, layout_pe_poker )
/* Superboard : Slots machine */
-GAMEL(1997, pex0838s, 0, peplus, peplus_slots, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000838S+XS000002) Five Times Pay Slots", 0, layout_pe_slots )
-GAMEL(1997, pex0841s, pex0838s, peplus, peplus_slots, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000841S+XS000002) Five Times Pay Slots", 0, layout_pe_slots )
+GAMEL(1997, pex0838s, 0, peplus, peplus_slots, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000838S+XS000002) Five Times Pay Slots", 0, layout_pe_slots )
+GAMEL(1997, pex0841s, pex0838s, peplus, peplus_slots, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000841S+XS000002) Five Times Pay Slots", 0, layout_pe_slots )
GAMEL(1997, pex0998s, 0, peplus, peplus_slots, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X000998S+XS000006) Triple Triple Diamond Slots", 0, layout_pe_slots )
GAMEL(1997, pex1087s, 0, peplus, peplus_slots, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X001087S+XS000006) Double Double Diamond Slots", GAME_IMPERFECT_GRAPHICS, layout_pe_slots ) /* CAPX2415 not dumped */
diff --git a/src/mame/drivers/pgm.c b/src/mame/drivers/pgm.c
index 6cb8a8bc532..a437b9aff13 100644
--- a/src/mame/drivers/pgm.c
+++ b/src/mame/drivers/pgm.c
@@ -980,6 +980,24 @@ ROM_START( drgw2j )
PGM_AUDIO_BIOS
ROM_END
+ROM_START( drgw2hk ) // the IGS025 has a "DRAGON-II 0004-1" sticker, the IGS012 has no per-game marking
+ ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
+ PGM_68K_BIOS
+ ROM_LOAD16_WORD_SWAP( "dragon_ii_v-100-h.u2", 0x100000, 0x080000, CRC(c6e2e6ec) SHA1(84145dfb26857ea20efb233363f175bc9bb25b0c) )
+
+ ROM_REGION( 0x800000, "tiles", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ PGM_VIDEO_BIOS
+ ROM_LOAD( "pgmt0200.u7", 0x180000, 0x400000, CRC(b0f6534d) SHA1(174cacd81169a0e0d14790ac06d03caed737e05d) )
+
+ ROM_REGION( 0x400000, "sprcol", 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "pgma0200.u5", 0x0000000, 0x400000, CRC(13b95069) SHA1(4888b06002afb18eab81c010e9362629045767af) )
+
+ ROM_REGION( 0x400000, "sprmask", 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "pgmb0200.u9", 0x0000000, 0x400000, CRC(932d0f13) SHA1(4b8e008f9c617cb2b95effeb81abc065b30e5c86) )
+
+ ROM_REGION( 0x400000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ PGM_AUDIO_BIOS
+ROM_END
/*
@@ -4145,6 +4163,7 @@ GAME( 1997, drgw2, pgm, pgm_012_025_drgw2, pgm, pgm_012_025_sta
GAME( 1997, dw2v100x, drgw2, pgm_012_025_drgw2, pgm, pgm_012_025_state, dw2v100x, ROT0, "IGS", "Dragon World II (ver. 100X, Export)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1997, drgw2j, drgw2, pgm_012_025_drgw2, pgm, pgm_012_025_state, drgw2j, ROT0, "IGS", "Chuugokuryuu II (ver. 100J, Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1997, drgw2c, drgw2, pgm_012_025_drgw2, pgm, pgm_012_025_state, drgw2c, ROT0, "IGS", "Zhong Guo Long II (ver. 100C, China)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1997, drgw2hk, drgw2, pgm_012_025_drgw2, pgm, pgm_012_025_state, drgw2hk, ROT0, "IGS", "Dragon World II (ver. 100H, Hong Kong [Hokg Kong])", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE | GAME_NOT_WORKING ) // correct title? (region is shown as Hokg Kong, Dragon World 3 is the same)
GAME( 1998, killbld, pgm, pgm_022_025_killbld, killbld, pgm_022_025_state, killbld, ROT0, "IGS", "The Killing Blade (ver. 109, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, killbld104, killbld, pgm_022_025_killbld, killbld, pgm_022_025_state, killbld, ROT0, "IGS", "The Killing Blade (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
diff --git a/src/mame/drivers/pgm2.c b/src/mame/drivers/pgm2.c
index 4f224fe046e..8ae370f4cce 100644
--- a/src/mame/drivers/pgm2.c
+++ b/src/mame/drivers/pgm2.c
@@ -278,6 +278,32 @@ ROM_START( orleg2o )
ROM_LOAD16_WORD_SWAP( "ig-a_sp.u2", 0x00000000, 0x1000000, CRC(8250688c) SHA1(d2488477afc528aeee96826065deba2bce4f0a7d) )
ROM_END
+ROM_START( orleg2oa )
+ ROM_REGION( 0x04000, "maincpu", 0 )
+ ROM_LOAD( "xyj2_igs036.rom", 0x00000000, 0x0004000, NO_DUMP )
+
+ ROM_REGION( 0x800000, "user1", 0 )
+ ROM_LOAD( "orleg2_xyj2_v101cn.u7", 0x000000, 0x800000, CRC(45805b53) SHA1(f2a8399c821b75fadc53e914f6f318707e70787c) )
+
+ ROM_REGION( 0x200000, "tiles", ROMREGION_ERASEFF )
+ ROM_LOAD( "ig-a_text.u4", 0x00000000, 0x0200000, CRC(fa444c32) SHA1(31e5e3efa92d52bf9ab97a0ece51e3b77f52ce8a) )
+
+ ROM_REGION( 0x1000000, "bgtile", 0 )
+ ROM_LOAD32_WORD( "ig-a_bgl.u35", 0x00000000, 0x0800000, CRC(083a8315) SHA1(0dba25e132fbb12faa59ced648c27b881dc73478) )
+ ROM_LOAD32_WORD( "ig-a_bgh.u36", 0x00000002, 0x0800000, CRC(e197221d) SHA1(5574b1e3da4b202db725be906dd868edc2fd4634) )
+
+ ROM_REGION( 0x2000000, "spritesa", 0 ) // 1bpp sprite mask data
+ ROM_LOAD32_WORD( "ig-a_bml.u12", 0x00000000, 0x1000000, CRC(113a331c) SHA1(ee6b31bb2b052cc8799573de0d2f0a83f0ab4f6a) )
+ ROM_LOAD32_WORD( "ig-a_bmh.u16", 0x00000002, 0x1000000, CRC(fbf411c8) SHA1(5089b5cc9bbf6496ef1367c6255e63e9ab895117) )
+
+ ROM_REGION( 0x4000000, "spritesb", 0 ) // sprite colour data
+ ROM_LOAD32_WORD( "ig-a_cgl.u18", 0x00000000, 0x2000000, CRC(43501fa6) SHA1(58ccce6d393964b771fec3f5c583e3ede57482a3) )
+ ROM_LOAD32_WORD( "ig-a_cgh.u26", 0x00000002, 0x2000000, CRC(7051d020) SHA1(3d9b24c6fda4c9699bb9f00742e0888059b623e1) )
+
+ ROM_REGION( 0x1000000, "ymz770", ROMREGION_ERASEFF ) /* ymz770 */
+ ROM_LOAD16_WORD_SWAP( "ig-a_sp.u2", 0x00000000, 0x1000000, CRC(8250688c) SHA1(d2488477afc528aeee96826065deba2bce4f0a7d) )
+ROM_END
+
ROM_START( kov2nl )
ROM_REGION( 0x04000, "maincpu", 0 )
ROM_LOAD( "gsyx_igs036.rom", 0x00000000, 0x0004000, NO_DUMP )
@@ -330,6 +356,31 @@ ROM_START( kov2nlo )
ROM_LOAD16_WORD_SWAP( "ig-a3_sp.u37", 0x00000000, 0x2000000, CRC(45cdf422) SHA1(8005d284bcee73cff37a147fcd1c3e9f039a7203) )
ROM_END
+ROM_START( kov2nloa )
+ ROM_REGION( 0x04000, "maincpu", 0 )
+ ROM_LOAD( "gsyx_igs036.rom", 0x00000000, 0x0004000, NO_DUMP )
+
+ ROM_REGION( 0x800000, "user1", 0 )
+ ROM_LOAD( "kov2nl_gsyx_v300tw.u7", 0x000000, 0x800000, CRC(08da7552) SHA1(303b97d7694405474c8133a259303ccb49db48b1) )
+
+ ROM_REGION( 0x200000, "tiles", ROMREGION_ERASEFF )
+ ROM_LOAD( "ig-a3_text.u4", 0x00000000, 0x0200000, CRC(214530ff) SHA1(4231a02054b0345392a077042b95779fd45d6c22) )
+
+ ROM_REGION( 0x1000000, "bgtile", 0 )
+ ROM_LOAD32_WORD( "ig-a3_bgl.u35", 0x00000000, 0x0800000, CRC(2d46b1f6) SHA1(ea8c805eda6292e86a642e9633d8fee7054d10b1) )
+ ROM_LOAD32_WORD( "ig-a3_bgh.u36", 0x00000002, 0x0800000, CRC(df710c36) SHA1(f826c3f496c4f17b46d18af1d8e02cac7b7027ac) )
+
+ ROM_REGION( 0x2000000, "spritesa", 0 ) // 1bpp sprite mask data
+ ROM_LOAD32_WORD( "ig-a3_bml.u12", 0x00000000, 0x1000000, CRC(0bf63836) SHA1(b8e4f1951f8074b475b795bd7840c5a375b6f5ef) )
+ ROM_LOAD32_WORD( "ig-a3_bmh.u16", 0x00000002, 0x1000000, CRC(4a378542) SHA1(5d06a8a8796285a786ebb690c34610f923ef5570) )
+
+ ROM_REGION( 0x4000000, "spritesb", 0 ) // sprite colour data
+ ROM_LOAD32_WORD( "ig-a3_cgl.u18", 0x00000000, 0x2000000, CRC(8d923e1f) SHA1(14371cf385dd8857017d3111cd4710f4291b1ae2) )
+ ROM_LOAD32_WORD( "ig-a3_cgh.u26", 0x00000002, 0x2000000, CRC(5b6fbf3f) SHA1(d1f52e230b91ee6cde939d7c2b74da7fd6527e73) )
+
+ ROM_REGION( 0x2000000, "ymz770", ROMREGION_ERASEFF ) /* ymz770 */
+ ROM_LOAD16_WORD_SWAP( "ig-a3_sp.u37", 0x00000000, 0x2000000, CRC(45cdf422) SHA1(8005d284bcee73cff37a147fcd1c3e9f039a7203) )
+ROM_END
ROM_START( ddpdojh )
ROM_REGION( 0x04000, "maincpu", 0 )
@@ -496,10 +547,12 @@ DRIVER_INIT_MEMBER(pgm2_state,kov3)
/* PGM2 */
GAME( 2007, orleg2, 0, pgm2, pgm2, pgm2_state, orleg2, ROT0, "IGS", "Oriental Legend 2 (V104, China)", GAME_IS_SKELETON )
GAME( 2007, orleg2o, orleg2, pgm2, pgm2, pgm2_state, orleg2, ROT0, "IGS", "Oriental Legend 2 (V103, China)", GAME_IS_SKELETON )
+GAME( 2007, orleg2oa, orleg2, pgm2, pgm2, pgm2_state, orleg2, ROT0, "IGS", "Oriental Legend 2 (V101, China)", GAME_IS_SKELETON )
// should be earlier verisons too.
GAME( 2008, kov2nl, 0, pgm2, pgm2, pgm2_state, kov2nl, ROT0, "IGS", "Knights of Valour 2 New Legend (V302, China)", GAME_IS_SKELETON )
GAME( 2008, kov2nlo, kov2nl, pgm2, pgm2, pgm2_state, kov2nl, ROT0, "IGS", "Knights of Valour 2 New Legend (V301, China)", GAME_IS_SKELETON )
+GAME( 2008, kov2nloa, kov2nl, pgm2, pgm2, pgm2_state, kov2nl, ROT0, "IGS", "Knights of Valour 2 New Legend (V300, Taiwan)", GAME_IS_SKELETON )
// should be earlier verisons too.
GAME( 2010, ddpdojh, 0, pgm2, pgm2, pgm2_state, ddpdojh, ROT270, "IGS", "Dodonpachi Daioujou Tamashii (V201, China)", GAME_IS_SKELETON )
diff --git a/src/mame/drivers/photoply.c b/src/mame/drivers/photoply.c
index 381abdd8c40..a1d1626eb24 100644
--- a/src/mame/drivers/photoply.c
+++ b/src/mame/drivers/photoply.c
@@ -13,7 +13,7 @@ TODO:
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/pinball2k.c b/src/mame/drivers/pinball2k.c
index 6f0f5a5e5b3..71c16c3f2b1 100644
--- a/src/mame/drivers/pinball2k.c
+++ b/src/mame/drivers/pinball2k.c
@@ -19,7 +19,7 @@
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/psychic5.c b/src/mame/drivers/psychic5.c
index 1184564424d..4ba9d2c8a86 100644
--- a/src/mame/drivers/psychic5.c
+++ b/src/mame/drivers/psychic5.c
@@ -407,8 +407,8 @@ WRITE8_MEMBER(psychic5_state::bombsa_flipscreen_w)
static ADDRESS_MAP_START( psychic5_main_map, AS_PROGRAM, 8, psychic5_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_RAMBANK("bank1")
- AM_RANGE(0xc000, 0xdfff) AM_READWRITE(psychic5_paged_ram_r, psychic5_paged_ram_w)
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
+ AM_RANGE(0xc000, 0xdfff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
AM_RANGE(0xe000, 0xefff) AM_RAM
AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch_byte_w)
AM_RANGE(0xf001, 0xf001) AM_READNOP AM_WRITE(psychic5_coin_counter_w)
@@ -421,6 +421,28 @@ static ADDRESS_MAP_START( psychic5_main_map, AS_PROGRAM, 8, psychic5_state )
AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( psychic5_vrambank_map, AS_PROGRAM, 8, psychic5_state )
+ AM_RANGE(0x0000, 0x0fff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram")
+ AM_RANGE(0x1000, 0x1fff) AM_RAM
+
+ AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x2001, 0x2001) AM_READ_PORT("P1")
+ AM_RANGE(0x2002, 0x2002) AM_READ_PORT("P2")
+ AM_RANGE(0x2003, 0x2003) AM_READ_PORT("DSW1")
+ AM_RANGE(0x2004, 0x2004) AM_READ_PORT("DSW2")
+
+ AM_RANGE(0x2308, 0x230c) AM_RAM AM_SHARE("bg_control")
+
+ AM_RANGE(0x2400, 0x25ff) AM_RAM_WRITE(sprite_col_w) AM_SHARE("palette_ram_sp")
+ AM_RANGE(0x2800, 0x29ff) AM_RAM_WRITE(bg_col_w) AM_SHARE("palette_ram_bg")
+ AM_RANGE(0x2a00, 0x2bff) AM_RAM_WRITE(tx_col_w) AM_SHARE("palette_ram_tx")
+
+ AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram")
+
+ADDRESS_MAP_END
+
+
static ADDRESS_MAP_START( psychic5_sound_map, AS_PROGRAM, 8, psychic5_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xc000, 0xc7ff) AM_RAM
@@ -436,7 +458,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( bombsa_main_map, AS_PROGRAM, 8, psychic5_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_RAMBANK("bank1")
+ AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xcfff) AM_RAM
/* ports look like the other games */
@@ -450,7 +472,7 @@ static ADDRESS_MAP_START( bombsa_main_map, AS_PROGRAM, 8, psychic5_state )
AM_RANGE(0xd200, 0xd7ff) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0xd800, 0xdfff) AM_RAM
- AM_RANGE(0xe000, 0xffff) AM_READWRITE(psychic5_paged_ram_r, bombsa_paged_ram_w)
+ AM_RANGE(0xe000, 0xffff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
ADDRESS_MAP_END
static ADDRESS_MAP_START( bombsa_sound_map, AS_PROGRAM, 8, psychic5_state )
@@ -466,6 +488,24 @@ static ADDRESS_MAP_START( bombsa_soundport_map, AS_IO, 8, psychic5_state )
AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ym2", ym2203_device, read, write)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( bombsa_vrambank_map, AS_PROGRAM, 8, psychic5_state )
+ AM_RANGE(0x0000, 0x1fff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram")
+
+ AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SYSTEM")
+ AM_RANGE(0x2001, 0x2001) AM_READ_PORT("P1")
+ AM_RANGE(0x2002, 0x2002) AM_READ_PORT("P2")
+ AM_RANGE(0x2003, 0x2003) AM_READ_PORT("DSW1")
+ AM_RANGE(0x2004, 0x2004) AM_READ_PORT("DSW2")
+
+ AM_RANGE(0x2308, 0x230c) AM_RAM AM_SHARE("bg_control")
+
+ AM_RANGE(0x3000, 0x31ff) AM_RAM_WRITE(sprite_col_w) AM_SHARE("palette_ram_sp")
+ AM_RANGE(0x3200, 0x33ff) AM_RAM_WRITE(bg_col_w) AM_SHARE("palette_ram_bg")
+ AM_RANGE(0x3400, 0x35ff) AM_RAM_WRITE(tx_col_w) AM_SHARE("palette_ram_tx")
+
+ AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram")
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( psychic5 )
PORT_START("SYSTEM") /* system control */
@@ -655,6 +695,13 @@ static MACHINE_CONFIG_START( psychic5, psychic5_state )
MCFG_CPU_PROGRAM_MAP(psychic5_main_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", psychic5_state, psychic5_scanline, "screen", 0, 1)
+ MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(psychic5_vrambank_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(14)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000)
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_5MHz)
MCFG_CPU_PROGRAM_MAP(psychic5_sound_map)
MCFG_CPU_IO_MAP(psychic5_soundport_map)
@@ -700,6 +747,13 @@ static MACHINE_CONFIG_START( bombsa, psychic5_state )
MCFG_CPU_PROGRAM_MAP(bombsa_main_map)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", psychic5_state, psychic5_scanline, "screen", 0, 1)
+ MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(bombsa_vrambank_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(14)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000)
+
MCFG_CPU_ADD("audiocpu", Z80, XTAL_5MHz )
MCFG_CPU_PROGRAM_MAP(bombsa_sound_map)
MCFG_CPU_IO_MAP(bombsa_soundport_map)
@@ -718,7 +772,7 @@ static MACHINE_CONFIG_START( bombsa, psychic5_state )
MCFG_PALETTE_ADD("palette", 768)
MCFG_VIDEO_START_OVERRIDE(psychic5_state,bombsa)
- MCFG_VIDEO_RESET_OVERRIDE(psychic5_state,bombsa)
+ MCFG_VIDEO_RESET_OVERRIDE(psychic5_state,psychic5)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/queen.c b/src/mame/drivers/queen.c
index 7d82b8e8a64..25329d10b2a 100644
--- a/src/mame/drivers/queen.c
+++ b/src/mame/drivers/queen.c
@@ -26,7 +26,7 @@ processor speed is 533MHz <- likely to be a Celeron or a Pentium III class CPU -
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/rampart.c b/src/mame/drivers/rampart.c
index 229aa7d9b30..39d055fe4e1 100644
--- a/src/mame/drivers/rampart.c
+++ b/src/mame/drivers/rampart.c
@@ -339,6 +339,8 @@ static MACHINE_CONFIG_START( rampart, rampart_state )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_MACHINE_RESET_OVERRIDE(rampart_state,rampart)
MCFG_ATARI_EEPROM_2816_ADD("eeprom")
diff --git a/src/mame/drivers/rockrage.c b/src/mame/drivers/rockrage.c
index fc528523bc9..ae9af041943 100644
--- a/src/mame/drivers/rockrage.c
+++ b/src/mame/drivers/rockrage.c
@@ -210,8 +210,8 @@ static const gfx_layout spritelayout =
};
static GFXDECODE_START( rockrage )
- GFXDECODE_ENTRY( "gfx1", 0, charlayout, 64, 32 ) /* colors 00..31, but using 2 lookup tables */
- GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 32, 1 ) /* colors 32..63 */
+ GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 ) /* colors 00..31, using 2 lookup tables */
+ GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 512, 16 ) /* colors 32..47, using lookup table */
GFXDECODE_END
/***************************************************************************
@@ -227,7 +227,6 @@ void rockrage_state::machine_start()
m_rombank->configure_entries(0, 8, &ROM[0x10000], 0x2000);
save_item(NAME(m_vreg));
- save_item(NAME(m_layer_colorbase));
}
void rockrage_state::machine_reset()
@@ -268,7 +267,7 @@ static MACHINE_CONFIG_START( rockrage, rockrage_state )
MCFG_K007420_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", rockrage)
- MCFG_PALETTE_ADD("palette", 64 + 2*16*16)
+ MCFG_PALETTE_ADD("palette", 16*16*3)
MCFG_PALETTE_INDIRECT_ENTRIES(64)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_ENDIANNESS(ENDIANNESS_LITTLE)
@@ -310,10 +309,10 @@ ROM_START( rockrage )
ROM_LOAD( "620l10.8g", 0x020000, 0x20000, CRC(06d108e0) SHA1(cae8c5f2fc4e84bc7adbf27f71a18a74968c4296) ) /* One "K" & one "L" code version??? */
ROM_REGION( 0x0300, "proms", 0 )
- ROM_LOAD( "620k09.11g", 0x00000, 0x00100, CRC(9f0e0608) SHA1(c95bdb370e4a91f27afbd5ff3b39b2e0ad87da73) ) /* layer 0 lookup table */
+ ROM_LOAD( "620k07.13g", 0x00000, 0x00100, CRC(b6135ee0) SHA1(248a978987cff86c2bbad10ef332f63a6abd5bee) ) /* layer 0 lookup table */
ROM_LOAD( "620k08.12g", 0x00100, 0x00100, CRC(b499800c) SHA1(46fa4e071ebceed12027de109be1e16dde5e846e) ) /* layer 1 lookup table */
- ROM_LOAD( "620k07.13g", 0x00200, 0x00100, CRC(b6135ee0) SHA1(248a978987cff86c2bbad10ef332f63a6abd5bee) ) /* sprite lookup table, but its not used */
- /* because it's always 0 1 2 ... f */
+ ROM_LOAD( "620k09.11g", 0x00200, 0x00100, CRC(9f0e0608) SHA1(c95bdb370e4a91f27afbd5ff3b39b2e0ad87da73) ) /* sprite lookup table */
+
ROM_REGION( 0x08000, "vlm", 0 ) /* VLM3050 data */
ROM_LOAD( "620k04.6e", 0x00000, 0x08000, CRC(8be969f3) SHA1(9856b4c13fac77b645aed67a08cb4965b4966492) )
ROM_END
@@ -339,10 +338,10 @@ ROM_START( rockragea )
ROM_LOAD( "620g10b.8f", 0x030000, 0x10000, CRC(1618854a) SHA1(0afb34a9ed97f13c1910acd7767cb8546ea7e6cd) )
ROM_REGION( 0x0300, "proms", 0 )
- ROM_LOAD( "620k09.11g", 0x00000, 0x00100, CRC(9f0e0608) SHA1(c95bdb370e4a91f27afbd5ff3b39b2e0ad87da73) ) /* layer 0 lookup table */
+ ROM_LOAD( "620k07.13g", 0x00000, 0x00100, CRC(b6135ee0) SHA1(248a978987cff86c2bbad10ef332f63a6abd5bee) ) /* layer 0 lookup table */
ROM_LOAD( "620k08.12g", 0x00100, 0x00100, CRC(b499800c) SHA1(46fa4e071ebceed12027de109be1e16dde5e846e) ) /* layer 1 lookup table */
- ROM_LOAD( "620k07.13g", 0x00200, 0x00100, CRC(b6135ee0) SHA1(248a978987cff86c2bbad10ef332f63a6abd5bee) ) /* sprite lookup table, but its not used */
- /* because it's always 0 1 2 ... f */
+ ROM_LOAD( "620k09.11g", 0x00200, 0x00100, CRC(9f0e0608) SHA1(c95bdb370e4a91f27afbd5ff3b39b2e0ad87da73) ) /* sprite lookup table */
+
ROM_REGION( 0x08000, "vlm", 0 ) /* VLM3050 data */
ROM_LOAD( "620k04.6e", 0x00000, 0x08000, CRC(8be969f3) SHA1(9856b4c13fac77b645aed67a08cb4965b4966492) ) /* Same rom but labeled as ver "G" */
ROM_END
@@ -364,10 +363,10 @@ ROM_START( rockragej )
ROM_LOAD( "620k10.8g", 0x020000, 0x20000, CRC(0d1a95ab) SHA1(be565424f17af31dcd07004c6be03bbb00aef514) )
ROM_REGION( 0x0300, "proms", 0 )
- ROM_LOAD( "620k09.11g", 0x00000, 0x00100, CRC(9f0e0608) SHA1(c95bdb370e4a91f27afbd5ff3b39b2e0ad87da73) ) /* layer 0 lookup table */
+ ROM_LOAD( "620k07.13g", 0x00000, 0x00100, CRC(b6135ee0) SHA1(248a978987cff86c2bbad10ef332f63a6abd5bee) ) /* layer 0 lookup table */
ROM_LOAD( "620k08.12g", 0x00100, 0x00100, CRC(b499800c) SHA1(46fa4e071ebceed12027de109be1e16dde5e846e) ) /* layer 1 lookup table */
- ROM_LOAD( "620k07.13g", 0x00200, 0x00100, CRC(b6135ee0) SHA1(248a978987cff86c2bbad10ef332f63a6abd5bee) ) /* sprite lookup table, but its not used */
- /* because it's always 0 1 2 ... f */
+ ROM_LOAD( "620k09.11g", 0x00200, 0x00100, CRC(9f0e0608) SHA1(c95bdb370e4a91f27afbd5ff3b39b2e0ad87da73) ) /* sprite lookup table */
+
ROM_REGION( 0x08000, "vlm", 0 ) /* VLM3050 data */
ROM_LOAD( "620k04.6e", 0x00000, 0x08000, CRC(8be969f3) SHA1(9856b4c13fac77b645aed67a08cb4965b4966492) )
ROM_END
diff --git a/src/mame/drivers/savquest.c b/src/mame/drivers/savquest.c
index 18901d3b6bf..c622728014d 100644
--- a/src/mame/drivers/savquest.c
+++ b/src/mame/drivers/savquest.c
@@ -46,7 +46,7 @@
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/segacoin.c b/src/mame/drivers/segacoin.c
new file mode 100644
index 00000000000..6a34018ef1b
--- /dev/null
+++ b/src/mame/drivers/segacoin.c
@@ -0,0 +1,142 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/***************************************************************************
+
+ Sega Z80 Coin Pusher hardware
+
+ 1992 - Western Dream
+ * 2 x Z80 (prg, sound), 3 x YM3438 (6ch), ..
+ Hexagon shaped cab, with a toy train riding circles in the top compartment.
+ 6 players, each with a coin pusher, and a LED roulette on the back panel.
+
+ more...
+
+
+TODO:
+- everything
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/z80/z80.h"
+//#include "sound/2612intf.h"
+
+
+class segacoin_state : public driver_device
+{
+public:
+ segacoin_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_audiocpu(*this, "audiocpu")
+ { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+};
+
+
+/***************************************************************************
+
+ I/O
+
+***************************************************************************/
+
+/* Memory maps */
+
+static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, segacoin_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0xe000, 0xffff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( main_portmap, AS_IO, 8, segacoin_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segacoin_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0xe000, 0xffff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segacoin_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ADDRESS_MAP_END
+
+
+
+/***************************************************************************
+
+ Inputs
+
+***************************************************************************/
+
+static INPUT_PORTS_START( westdrm )
+ // just some test stuff
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 )
+
+ PORT_START("IN1")
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x01, "SW1:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x02, "SW1:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x04, "SW1:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x08, "SW1:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x10, "SW1:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x20, "SW1:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x40, "SW1:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x80, "SW1:8" )
+INPUT_PORTS_END
+
+
+
+/***************************************************************************
+
+ Machine Config
+
+***************************************************************************/
+
+static MACHINE_CONFIG_START( westdrm, segacoin_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", Z80, 8000000) // clock frequency unknown
+ MCFG_CPU_PROGRAM_MAP(main_map)
+ MCFG_CPU_IO_MAP(main_portmap)
+
+ MCFG_CPU_ADD("audiocpu", Z80, 8000000) // clock frequency unknown
+ MCFG_CPU_PROGRAM_MAP(sound_map)
+ MCFG_CPU_IO_MAP(sound_portmap)
+
+ /* no video! */
+
+ /* sound hardware */
+ //..
+MACHINE_CONFIG_END
+
+
+
+/***************************************************************************
+
+ Game drivers
+
+***************************************************************************/
+
+ROM_START( westdrm )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "epr-15151a.bin", 0x00000, 0x10000, CRC(b0911826) SHA1(77435d2b9c78275f2c21db994d2203528e69fe1f) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_LOAD( "epr-15152.bin", 0x00000, 0x10000, CRC(565d6559) SHA1(2c7d961b6dc5020994cbd005efbfd27ccf59569d) ) // mostly empty
+ ROM_IGNORE( 0x10000 )
+ROM_END
+
+
+GAME (1992, westdrm, 0, westdrm, westdrm, driver_device, 0, ROT0, "Sega", "Western Dream", GAME_IS_SKELETON_MECHANICAL )
diff --git a/src/mame/drivers/segas18.c b/src/mame/drivers/segas18.c
index f6f13b0b593..ba3114362ce 100644
--- a/src/mame/drivers/segas18.c
+++ b/src/mame/drivers/segas18.c
@@ -73,6 +73,7 @@ void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 ind
switch (m_romboard)
{
case ROM_BOARD_171_SHADOW: break; // ???
+ case ROM_BOARD_837_7525:
case ROM_BOARD_171_5874:
case ROM_BOARD_171_5987: mapper.map_as_handler(0x00000, 0x00010, 0xfffff0, read16_delegate(FUNC(segas18_state::genesis_vdp_r), this), write16_delegate(FUNC(segas18_state::genesis_vdp_w), this)); break;
default: assert(false);
@@ -89,6 +90,9 @@ void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 ind
else
mapper.map_as_rom(0x00000,0x100000, 0xf00000, "rom1base",0x100000, write16_delegate(FUNC(segas18_state::rom_5987_bank_w), this));
break;
+ case ROM_BOARD_837_7525: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom1base", 0x80000, write16_delegate(FUNC(segas18_state::rom_837_7525_bank_w), this));
+ break;
+
default: assert(false);
}
break;
@@ -98,6 +102,7 @@ void segas18_state::memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 ind
{
case ROM_BOARD_171_SHADOW:
case ROM_BOARD_171_5874: mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0x00000, write16_delegate()); break;
+ case ROM_BOARD_837_7525:
case ROM_BOARD_171_5987: if (romsize <= 0x100000)
mapper.map_as_rom(0x00000, 0x80000, 0xf80000, "rom0base", 0x00000, write16_delegate());
else
@@ -390,6 +395,33 @@ WRITE16_MEMBER( segas18_state::rom_5987_bank_w )
}
}
+WRITE16_MEMBER( segas18_state::rom_837_7525_bank_w )
+{
+ if (!ACCESSING_BITS_0_7)
+ return;
+
+ offset &= 0xf;
+ data &= 0xff;
+
+ // tile banking
+ if (offset < 8)
+ {
+ // int maxbanks = m_gfxdecode->gfx(0)->elements() / 1024;
+ data &= 0x9f;
+
+ if (data & 0x80) data += 0x20;
+ data &= 0x3f;
+
+ m_segaic16vid->segaic16_tilemap_set_bank(0, offset, data);
+ }
+
+ // sprite banking
+ else
+ {
+ //printf("%02x %02x\n", offset, data);
+ // not needed?
+ }
+}
/*************************************
@@ -729,10 +761,8 @@ static INPUT_PORTS_START( astorm )
PORT_DIPSETTING( 0x00, "1" )
//"SW2:7" unused
//"SW2:8" unused
-
INPUT_PORTS_END
-
static INPUT_PORTS_START( astorm2p )
PORT_INCLUDE( system18_generic )
@@ -757,7 +787,6 @@ static INPUT_PORTS_START( astorm2p )
PORT_DIPSETTING( 0x00, "1" )
//"SW2:7" unused
//"SW2:8" unused
-
INPUT_PORTS_END
@@ -876,7 +905,6 @@ static INPUT_PORTS_START( ddcrew )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
-
static INPUT_PORTS_START( ddcrew2p )
PORT_INCLUDE( system18_generic )
@@ -903,7 +931,6 @@ static INPUT_PORTS_START( ddcrew2p )
PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
-
INPUT_PORTS_END
static INPUT_PORTS_START( ddcrew3p )
@@ -922,9 +949,9 @@ static INPUT_PORTS_START( ddcrew3p )
PORT_MODIFY("SERVICE")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
-
INPUT_PORTS_END
+
static INPUT_PORTS_START( desertbr )
PORT_INCLUDE( system18_generic )
@@ -973,6 +1000,31 @@ static INPUT_PORTS_START( desertbr )
INPUT_PORTS_END
+static INPUT_PORTS_START( hamaway )
+ PORT_INCLUDE( system18_generic )
+
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
+ PORT_DIPSETTING( 0x02, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:3,4")
+ PORT_DIPSETTING( 0x08, "1" )
+ PORT_DIPSETTING( 0x04, "2" )
+ PORT_DIPSETTING( 0x0c, "3" )
+ PORT_DIPSETTING( 0x00, "5" )
+ //"SW2:5" is unknown - Not listed in the service mode
+ //"SW2:6" is unknown - Not listed in the service mode
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "2 Credits to Start" ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( lghost )
PORT_INCLUDE( system18_generic )
@@ -1184,7 +1236,6 @@ static INPUT_PORTS_START( wwally )
INPUT_PORTS_END
-
/*************************************
*
* Graphics definitions
@@ -1228,6 +1279,15 @@ WRITE_LINE_MEMBER(segas18_state::vdp_lv4irqline_callback_s18)
*
*************************************/
+WRITE_LINE_MEMBER(segas18_state::ym3438_irq_handler)
+{
+ if (state)
+ m_soundcpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE );
+ else
+ m_soundcpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE );
+}
+
+
static MACHINE_CONFIG_START( system18, segas18_state )
// basic machine hardware
@@ -1276,6 +1336,7 @@ static MACHINE_CONFIG_START( system18, segas18_state )
MCFG_SOUND_ADD("ym1", YM3438, 8000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
+ MCFG_YM2612_IRQ_HANDLER(WRITELINE(segas18_state, ym3438_irq_handler))
MCFG_SOUND_ADD("ym2", YM3438, 8000000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
@@ -1871,6 +1932,45 @@ ROM_END
/**************************************************************************************************************************
**************************************************************************************************************************
**************************************************************************************************************************
+ Hammer Away, Sega System 18 (prototype / unreleased)
+ CPU: M68000
+ ROM Board: 837-7525
+
+ Japanese text on the mission screens, but no "For use in Japan..." warning. There are screen shots of a version without
+ the Japanese text on mission screens and an alternate title screen, so a "World" proto might exist.
+*/
+ROM_START( hamaway )
+ ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "4.bin", 0x000000, 0x40000, CRC(cc0981e1) SHA1(63528bd36f27e62fdf40715101e6d05b73e48f16) ) // 1xxxxxxxxxxxxxxxxx = 0xFF
+ ROM_LOAD16_BYTE( "6.bin", 0x000001, 0x40000, CRC(e8599ee6) SHA1(3e32b025403aecbaecfcdd0325e4acd676e99c4e) ) // 1xxxxxxxxxxxxxxxxx = 0xFF
+ ROM_LOAD16_BYTE( "5.bin", 0x080000, 0x40000, CRC(fdb247fd) SHA1(ee9db799fb5de27f81904f8ef792203415b6d4a6) )
+ ROM_LOAD16_BYTE( "7.bin", 0x080001, 0x40000, CRC(63711470) SHA1(6c4be3a0cf0f897c34ef0b3bf549f52b185bb915) )
+
+ ROM_REGION( 0x180000, "gfx1", 0 ) // tiles
+ ROM_LOAD( "c10.bin", 0x000000, 0x40000, CRC(c55cb5cf) SHA1(396179632b29ac5f8b7f8f3c91d7cf834e548bdf) )
+ ROM_LOAD( "1.bin", 0x040000, 0x40000, CRC(33be003f) SHA1(134fa6b3347c306d9e30882dfcf24632b49f85ea) )
+ ROM_LOAD( "c11.bin", 0x080000, 0x40000, CRC(37787915) SHA1(c8d251be6c41de3aed2da6da70aa87071b70b1f6) )
+ ROM_LOAD( "2.bin", 0x0c0000, 0x40000, CRC(60ca5c9f) SHA1(6358ea00125a5e3f55acf73aeb9c36b1db6e711e) )
+ ROM_LOAD( "c12.bin", 0x100000, 0x40000, CRC(f12f1cf3) SHA1(45e883029c58e617a2a20ac1ab5c5f598c95f4bd) )
+ ROM_LOAD( "3.bin", 0x140000, 0x40000, CRC(520aa7ae) SHA1(9584206aedd8be5ce9dca0ed370f8fe77aabaf76) )
+
+ ROM_REGION16_BE( 0x200000, "sprites", ROMREGION_ERASEFF ) // sprites
+ ROM_LOAD16_BYTE( "c17.bin", 0x000001, 0x40000, CRC(aa28d7aa) SHA1(3dd5d95b05e408c023f9bd77753c37080714239d) )
+ ROM_LOAD16_BYTE( "10.bin", 0x000000, 0x40000, CRC(c4c95161) SHA1(2e313a4ca9506f53a2062b4a8e5ba7b381ba93ae) )
+ ROM_LOAD16_BYTE( "c18.bin", 0x080001, 0x40000, CRC(0f8fe8bb) SHA1(e6f68442b8d4def29b106458496a47344f70d511) )
+ ROM_LOAD16_BYTE( "11.bin", 0x080000, 0x40000, CRC(2b5eacbc) SHA1(ba3690501588b9c88a31022b44bc3c82b44ae26b) )
+ ROM_LOAD16_BYTE( "c19.bin", 0x100001, 0x40000, CRC(3c616caa) SHA1(d48a6239b7a52ac13971f7513a65a17af492bfdf) ) // 11xxxxxxxxxxxxxxxx = 0xFF
+ ROM_LOAD16_BYTE( "12.bin", 0x100000, 0x40000, CRC(c7bbd579) SHA1(ab87bfdad66ea241cb23c9bbfea05f5a1574d6c9) ) // 1ST AND 2ND HALF IDENTICAL (but ok, because pairing ROM has no data in the 2nd half anyway)
+
+ ROM_REGION( 0x210000, "soundcpu", ROMREGION_ERASEFF ) // sound CPU
+ ROM_LOAD( "c16.bin", 0x010000, 0x40000, CRC(913cc18c) SHA1(4bf4ec14937586c3ae77fcad57dcb21f6433ef81) )
+ ROM_LOAD( "c15.bin", 0x090000, 0x40000, CRC(b53694fc) SHA1(0e42be2730abce1b52ea94a9fe61cbd1c9a0ccae) )
+ROM_END
+
+
+/**************************************************************************************************************************
+ **************************************************************************************************************************
+ **************************************************************************************************************************
Laser Ghost, Sega System 18
CPU: FD1094 (317-0166)
ROM Board: 171-5873B
@@ -2262,7 +2362,6 @@ ROM_START( wwallyja )
ROM_END
-
/*************************************
*
* Generic driver initialization
@@ -2284,6 +2383,10 @@ DRIVER_INIT_MEMBER(segas18_state,generic_5987)
init_generic(ROM_BOARD_171_5987);
}
+DRIVER_INIT_MEMBER(segas18_state,hamaway)
+{
+ init_generic(ROM_BOARD_837_7525);
+}
/*************************************
@@ -2314,37 +2417,37 @@ DRIVER_INIT_MEMBER(segas18_state,wwally)
}
-
/*************************************
*
* Game driver(s)
*
*************************************/
-// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR,COMPANY,FULLNAME,FLAGS
-GAME( 1990, astorm, 0, system18_fd1094, astorm2p, segas18_state,generic_5874, ROT0, "Sega", "Alien Storm (World, 2 Players, FD1094 317-0154)", 0 )
-GAME( 1990, astorm3, astorm, system18_fd1094, astorm, segas18_state,generic_5874, ROT0, "Sega", "Alien Storm (World, 3 Players, FD1094 317-0148)", 0 )
-GAME( 1990, astormu, astorm, system18_fd1094, astorm, segas18_state,generic_5874, ROT0, "Sega", "Alien Storm (US, 3 Players, FD1094 317-0147)", 0 )
-GAME( 1990, astormj, astorm, system18_fd1094, astorm2p, segas18_state,generic_5874, ROT0, "Sega", "Alien Storm (Japan, 2 Players, FD1094 317-0146)", 0 )
-GAME( 1989, bloxeed, 0, system18_fd1094, bloxeed, segas18_state,generic_5874, ROT0, "Sega", "Bloxeed (Japan, FD1094 317-0139)", 0 )
-GAME( 1991, cltchitr, 0, system18_fd1094, cltchitr, segas18_state,generic_5987, ROT0, "Sega", "Clutch Hitter (US, FD1094 317-0176)", 0 )
-GAME( 1991, cltchitrj, cltchitr, system18_fd1094, cltchitr, segas18_state,generic_5987, ROT0, "Sega", "Clutch Hitter (Japan, FD1094 317-0175)", 0 )
-GAME( 1992, desertbr, 0, system18_fd1094, desertbr, segas18_state,generic_5987, ROT270, "Sega", "Desert Breaker (World, FD1094 317-0196)", 0 )
-GAME( 1992, desertbrj, desertbr, system18_fd1094, desertbr, segas18_state,generic_5987, ROT270, "Sega", "Desert Breaker (Japan, FD1094 317-0194)", 0 )
-GAME( 1991, ddcrew, 0, system18_fd1094, ddcrew3p, segas18_state,ddcrew, ROT0, "Sega", "D. D. Crew (World, 3 Players, FD1094 317-0190)", 0 )
-GAME( 1991, ddcrewu, ddcrew, system18_fd1094, ddcrew, segas18_state,ddcrew, ROT0, "Sega", "D. D. Crew (US, 4 Players, FD1094 317-0186)", 0 )
-GAME( 1991, ddcrew2, ddcrew, system18_fd1094, ddcrew2p, segas18_state,ddcrew, ROT0, "Sega", "D. D. Crew (World, 2 Players, FD1094 317-0184)", 0 )
-GAME( 1991, ddcrew1, ddcrew, system18_fd1094, ddcrew, segas18_state,ddcrew, ROT0, "Sega", "D. D. Crew (World, 4 Players, FD1094 317-0187)", 0 )
-GAME( 1991, ddcrewj, ddcrew, system18_fd1094, ddcrew, segas18_state,ddcrew, ROT0, "Sega", "D. D. Crew (Japan, 4 Players, FD1094 317-0185)", 0 )
-GAME( 1991, ddcrewj2, ddcrew, system18_fd1094, ddcrew2p, segas18_state,ddcrew, ROT0, "Sega", "D. D. Crew (Japan, 2 Players, FD1094 317-0182)", 0 )
-GAME( 1990, lghost, 0, system18_fd1094, lghost, segas18_state,lghost, ROT0, "Sega", "Laser Ghost (World, FD1094 317-0166)", 0 )
-GAME( 1990, lghostu, lghost, system18_fd1094, lghost, segas18_state,lghost, ROT0, "Sega", "Laser Ghost (US, FD1094 317-0165)", 0 )
-GAME( 1990, mwalk, 0, system18_fd1094_i8751,mwalk, segas18_state,generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (World, FD1094/8751 317-0159)", 0 )
-GAME( 1990, mwalku, mwalk, system18_fd1094_i8751,mwalka, segas18_state,generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (US, FD1094/8751 317-0158)", 0 )
-GAME( 1990, mwalkj, mwalk, system18_fd1094_i8751,mwalk, segas18_state,generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (Japan, FD1094/8751 317-0157)", 0 )
-GAME( 1989, pontoon, 0, system18_fd1094, shdancer, segas18_state,generic_5874, ROT0, "Sega", "Pontoon (FD1094 317-0153)", GAME_NOT_WORKING ) // satellite/networked gambling game?
-GAME( 1989, shdancer, 0, system18, shdancer, segas18_state,generic_shad, ROT0, "Sega", "Shadow Dancer (World)", 0 )
-GAME( 1989, shdancerj, shdancer, system18, shdancer, segas18_state,generic_shad, ROT0, "Sega", "Shadow Dancer (Japan)", 0 )
-GAME( 1989, shdancer1, shdancer, system18, shdancer, segas18_state,generic_shad, ROT0, "Sega", "Shadow Dancer (US)", 0 )
-GAME( 1992, wwallyj, 0, system18_fd1094, wwally, segas18_state,wwally, ROT0, "Sega", "Wally wo Sagase! (rev B, Japan, FD1094 317-0197B)", 0) // the roms do contain an english logo so maybe there is a world / us set too
-GAME( 1992, wwallyja, wwallyj, system18_fd1094, wwally, segas18_state,wwally, ROT0, "Sega", "Wally wo Sagase! (rev A, Japan, FD1094 317-0197A)", 0 )
+// YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR, COMPANY, FULLNAME, FLAGS
+GAME( 1990, astorm, 0, system18_fd1094, astorm2p, segas18_state, generic_5874, ROT0, "Sega", "Alien Storm (World, 2 Players, FD1094 317-0154)", 0 )
+GAME( 1990, astorm3, astorm, system18_fd1094, astorm, segas18_state, generic_5874, ROT0, "Sega", "Alien Storm (World, 3 Players, FD1094 317-0148)", 0 )
+GAME( 1990, astormu, astorm, system18_fd1094, astorm, segas18_state, generic_5874, ROT0, "Sega", "Alien Storm (US, 3 Players, FD1094 317-0147)", 0 )
+GAME( 1990, astormj, astorm, system18_fd1094, astorm2p, segas18_state, generic_5874, ROT0, "Sega", "Alien Storm (Japan, 2 Players, FD1094 317-0146)", 0 )
+GAME( 1989, bloxeed, 0, system18_fd1094, bloxeed, segas18_state, generic_5874, ROT0, "Sega", "Bloxeed (Japan, FD1094 317-0139)", 0 )
+GAME( 1991, cltchitr, 0, system18_fd1094, cltchitr, segas18_state, generic_5987, ROT0, "Sega", "Clutch Hitter (US, FD1094 317-0176)", 0 )
+GAME( 1991, cltchitrj, cltchitr, system18_fd1094, cltchitr, segas18_state, generic_5987, ROT0, "Sega", "Clutch Hitter (Japan, FD1094 317-0175)", 0 )
+GAME( 1992, desertbr, 0, system18_fd1094, desertbr, segas18_state, generic_5987, ROT270, "Sega", "Desert Breaker (World, FD1094 317-0196)", 0 )
+GAME( 1992, desertbrj, desertbr, system18_fd1094, desertbr, segas18_state, generic_5987, ROT270, "Sega", "Desert Breaker (Japan, FD1094 317-0194)", 0 )
+GAME( 1991, ddcrew, 0, system18_fd1094, ddcrew3p, segas18_state, ddcrew, ROT0, "Sega", "D. D. Crew (World, 3 Players, FD1094 317-0190)", 0 )
+GAME( 1991, ddcrewu, ddcrew, system18_fd1094, ddcrew, segas18_state, ddcrew, ROT0, "Sega", "D. D. Crew (US, 4 Players, FD1094 317-0186)", 0 )
+GAME( 1991, ddcrew2, ddcrew, system18_fd1094, ddcrew2p, segas18_state, ddcrew, ROT0, "Sega", "D. D. Crew (World, 2 Players, FD1094 317-0184)", 0 )
+GAME( 1991, ddcrew1, ddcrew, system18_fd1094, ddcrew, segas18_state, ddcrew, ROT0, "Sega", "D. D. Crew (World, 4 Players, FD1094 317-0187)", 0 )
+GAME( 1991, ddcrewj, ddcrew, system18_fd1094, ddcrew, segas18_state, ddcrew, ROT0, "Sega", "D. D. Crew (Japan, 4 Players, FD1094 317-0185)", 0 )
+GAME( 1991, ddcrewj2, ddcrew, system18_fd1094, ddcrew2p, segas18_state, ddcrew, ROT0, "Sega", "D. D. Crew (Japan, 2 Players, FD1094 317-0182)", 0 )
+GAME( 1991, hamaway, 0, system18, hamaway, segas18_state, hamaway, ROT90, "Sega / Santos", "Hammer Away (Japan, prototype)", 0 )
+GAME( 1990, lghost, 0, system18_fd1094, lghost, segas18_state, lghost, ROT0, "Sega", "Laser Ghost (World, FD1094 317-0166)", 0 )
+GAME( 1990, lghostu, lghost, system18_fd1094, lghost, segas18_state, lghost, ROT0, "Sega", "Laser Ghost (US, FD1094 317-0165)", 0 )
+GAME( 1990, mwalk, 0, system18_fd1094_i8751,mwalk, segas18_state, generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (World, FD1094/8751 317-0159)", 0 )
+GAME( 1990, mwalku, mwalk, system18_fd1094_i8751,mwalka, segas18_state, generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (US, FD1094/8751 317-0158)", 0 )
+GAME( 1990, mwalkj, mwalk, system18_fd1094_i8751,mwalk, segas18_state, generic_5874, ROT0, "Sega", "Michael Jackson's Moonwalker (Japan, FD1094/8751 317-0157)", 0 )
+GAME( 1989, pontoon, 0, system18_fd1094, shdancer, segas18_state, generic_5874, ROT0, "Sega", "Pontoon (FD1094 317-0153)", GAME_NOT_WORKING ) // satellite/networked gambling game?
+GAME( 1989, shdancer, 0, system18, shdancer, segas18_state, generic_shad, ROT0, "Sega", "Shadow Dancer (World)", 0 )
+GAME( 1989, shdancerj, shdancer, system18, shdancer, segas18_state, generic_shad, ROT0, "Sega", "Shadow Dancer (Japan)", 0 )
+GAME( 1989, shdancer1, shdancer, system18, shdancer, segas18_state, generic_shad, ROT0, "Sega", "Shadow Dancer (US)", 0 )
+GAME( 1992, wwallyj, 0, system18_fd1094, wwally, segas18_state, wwally, ROT0, "Sega", "Wally wo Sagase! (rev B, Japan, FD1094 317-0197B)", 0) // the roms do contain an english logo so maybe there is a world / us set too
+GAME( 1992, wwallyja, wwallyj, system18_fd1094, wwally, segas18_state, wwally, ROT0, "Sega", "Wally wo Sagase! (rev A, Japan, FD1094 317-0197A)", 0 )
diff --git a/src/mame/drivers/segaufo.c b/src/mame/drivers/segaufo.c
index 63e41ea4029..63ac036d559 100644
--- a/src/mame/drivers/segaufo.c
+++ b/src/mame/drivers/segaufo.c
@@ -23,7 +23,7 @@
- # School Kids (1993)
4th gen - EX brd
- * Z80, 2 Sega 315-5296(I/O), YM3438, NEC uPD71054C, optional NEC uPD7759C
+ * Z80, 2 Sega 315-5296(I/O), 315-5338A, YM3438, NEC uPD71054C, optional NEC uPD7759C
- # Dream Palace (1992)
- # Dream Kitchen (1994)
- # UFO Catcher Excellent (1994)
@@ -35,10 +35,9 @@
More games were released after 2000, assumed to be on more modern hardware.
-
TODO:
- - make the other games work (for now only newufo+clones work)
- - add layout
+ - add dipswitches
+ - prize sensor for ufo21/ufo800
***************************************************************************/
@@ -47,19 +46,26 @@
#include "machine/pit8253.h"
#include "machine/315_5296.h"
#include "sound/2612intf.h"
+#include "sound/upd7759.h"
+
+// the layouts are very similar to eachother
+#include "newufo.lh"
+#include "ufomini.lh"
+#include "ufo21.lh"
+#include "ufo800.lh"
/* simulation parameters */
// x/y/z cabinet dimensions per player (motor range)
#define CABINET_WIDTH 400
#define CABINET_DEPTH 400
-#define CABINET_HEIGHT 250
+#define CABINET_HEIGHT 300
// x/y/z motor speed in hertz
#define MOTOR_SPEED 100
// crane size (stepper motor range)
-// note: the game expects this to be around 350 steps per quarter rotation
+// note: UFO board/EX board expects this to be around 350 steps per quarter rotation
#define CRANE_SIZE 350
@@ -69,10 +75,16 @@ class ufo_state : public driver_device
public:
ufo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
+ m_maincpu(*this, "maincpu"),
+ m_io1(*this, "io1"),
+ m_io2(*this, "io2"),
+ m_upd(*this, "upd")
{ }
required_device<cpu_device> m_maincpu;
+ required_device<sega_315_5296_device> m_io1;
+ required_device<sega_315_5296_device> m_io2;
+ optional_device<upd7759_device> m_upd;
struct Player
{
@@ -99,15 +111,25 @@ public:
DECLARE_WRITE8_MEMBER(cp_digits_w);
DECLARE_WRITE8_MEMBER(crane_xyz_w);
DECLARE_WRITE8_MEMBER(ufo_lamps_w);
+
+ DECLARE_READ8_MEMBER(ex_crane_limits_r);
+ DECLARE_READ8_MEMBER(ex_crane_open_r);
+ DECLARE_WRITE8_MEMBER(ex_stepper_w);
+ DECLARE_WRITE8_MEMBER(ex_cp_lamps_w);
+ DECLARE_WRITE8_MEMBER(ex_crane_xyz_w);
+ DECLARE_WRITE8_MEMBER(ex_ufo21_lamps_w);
+ DECLARE_WRITE8_MEMBER(ex_ufo800_lamps_w);
+ DECLARE_READ8_MEMBER(ex_upd_busy_r);
+ DECLARE_WRITE8_MEMBER(ex_upd_start_w);
virtual void machine_reset();
virtual void machine_start();
TIMER_DEVICE_CALLBACK_MEMBER(simulate_xyz);
+ TIMER_DEVICE_CALLBACK_MEMBER(update_info);
};
-
void ufo_state::motor_tick(int p, int m)
{
float delta = m_player[p].motor[m].speed;
@@ -123,7 +145,6 @@ void ufo_state::motor_tick(int p, int m)
m_player[p].motor[m].position = 1;
}
-
TIMER_DEVICE_CALLBACK_MEMBER(ufo_state::simulate_xyz)
{
for (int p = 0; p < 2; p++)
@@ -131,6 +152,32 @@ TIMER_DEVICE_CALLBACK_MEMBER(ufo_state::simulate_xyz)
motor_tick(p, m);
}
+
+TIMER_DEVICE_CALLBACK_MEMBER(ufo_state::update_info)
+{
+ // output ufo motor positions
+ // 0 X: 000 = right, 100 = left (player 1)
+ // 1 Y: 000 = front, 100 = back
+ // 2 Z: 000 = up, 100 = down
+ // 3 C: 000 = closed, 100 = open
+ for (int p = 0; p < 2; p++)
+ for (int m = 0; m < 4; m++)
+ output_set_indexed_value("counter", p*4 + m, (UINT8)(m_player[p].motor[m].position * 100));
+
+#if 0
+ char msg1[0x100] = {0};
+ char msg2[0x100] = {0};
+ for (int i = 0; i < 8; i++)
+ {
+ sprintf(msg2, "%02X ", m_io2->debug_peek_output(i));
+ strcat(msg1, msg2);
+ }
+ popmessage("%s", msg1);
+#endif
+}
+
+
+
/***************************************************************************
I/O
@@ -144,17 +191,50 @@ WRITE_LINE_MEMBER(ufo_state::pit_out0)
WRITE_LINE_MEMBER(ufo_state::pit_out1)
{
- // ?
+ // NMI?
+ if (state)
+ m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
WRITE_LINE_MEMBER(ufo_state::pit_out2)
{
- // NMI?
- if (state)
- m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
+ // ?
}
+/* generic / UFO board handlers */
+
+/* io1 */
+
+READ8_MEMBER(ufo_state::crane_limits_r)
+{
+ int p = offset & 1;
+ UINT8 ret = 0x7f;
+
+ // d0: left limit sw (right for p2)
+ // d1: right limit sw (left for p2)
+ // d2: back limit sw
+ // d3: front limit sw
+ // d4: down limit sw
+ // d5: up limit sw
+ for (int m = 0; m < 3; m++)
+ {
+ ret ^= (m_player[p].motor[m].position >= 1) << (m*2 + 0);
+ ret ^= (m_player[p].motor[m].position <= 0) << (m*2 + 1);
+ }
+
+ // d6: crane open sensor (reflective sticker on the stepper motor rotation disc)
+ if (m_player[p].motor[3].position >= 0.97)
+ ret ^= 0x40;
+
+ // d7: prize sensor (mirror?)
+ ret |= (ioport(p ? "IN2" : "IN1")->read() & 0x80);
+
+ return ret;
+}
+
+/* io2 */
+
WRITE8_MEMBER(ufo_state::stepper_w)
{
for (int p = 0; p < 2; p++)
@@ -227,38 +307,142 @@ WRITE8_MEMBER(ufo_state::crane_xyz_w)
WRITE8_MEMBER(ufo_state::ufo_lamps_w)
{
- ;
+ // d0-d3: ufo leds (2 bits per player)
+ // 3 sets of two red/green leds, each set is wired to the same control 2 bits
+ // 00 = off, off
+ // 11 = red, red
+ // 01 = green, red
+ // 10 = red, green
+ output_set_lamp_value(10, data & 3);
+ output_set_lamp_value(11, data >> 2 & 3);
+
+ // d4,d5: ?
+ // d6,d7: coincounters
+ coin_counter_w(machine(), 0, data & 0x40); // 100 Y
+ coin_counter_w(machine(), 1, data & 0x80); // 500 Y
}
-READ8_MEMBER(ufo_state::crane_limits_r)
+/* EX board specific handlers */
+
+/* io1 */
+
+READ8_MEMBER(ufo_state::ex_crane_limits_r)
{
int p = offset & 1;
- UINT8 ret = 0xff;
+ UINT8 ret = 0xf0;
+
+ // d0: left limit sw (invert)
+ // d1: right limit sw (invert)
+ // d2: back limit sw (invert)
+ // d3: front limit sw (invert)
+ // d4: ?
+ // d5: down limit sw
+ // d6: up limit sw
+ // d7: ?
+ for (int m = 0; m < 3; m++)
+ {
+ int shift = (m*2) + (m == 2);
+ ret ^= (m_player[p].motor[m].position >= 1) << shift;
+ ret ^= (m_player[p].motor[m].position <= 0) << (shift+1);
+ }
+
+ return ret;
+}
- // d0: left limit sw (right for p2)
- // d1: right limit sw (left for p2)
- // d2: back limit sw
- // d3: front limit sw
- // d4: down limit sw
- // d5: up limit sw
- for (int i = 0; i < 3; i++)
+READ8_MEMBER(ufo_state::ex_crane_open_r)
+{
+ // d0-d3: p1, d4-d7: p2
+ UINT8 ret = 0xff;
+
+ for (int p = 0; p < 2; p++)
{
- ret ^= (m_player[p].motor[i].position >= 1) << (i*2 + 0);
- ret ^= (m_player[p].motor[i].position <= 0) << (i*2 + 1);
+ // d0: crane open sensor
+ if (m_player[p].motor[3].position >= 0.97)
+ ret ^= (1 << (p*4));
+
+ // d1: coincounter is plugged in (ufo800 gives error 14 otherwise)
+ // d2,d3: ?
}
+
+ return ret;
+}
- // d6: crane open sensor (reflective sticker on the stepper motor rotation disc)
- if (m_player[p].motor[3].position >= 0.97)
- ret ^= 0x40;
+/* io2 */
+
+WRITE8_MEMBER(ufo_state::ex_stepper_w)
+{
+ // stepper motor sequence is: 6 c 9 3 6 c 9 3..
+ // which means d0 and d3 are swapped when compared with UFO board hardware
+ stepper_w(space, offset, BITSWAP8(data,4,6,5,7,0,2,1,3));
+}
+
+WRITE8_MEMBER(ufo_state::ex_cp_lamps_w)
+{
+ // d0,d1,d4,d5: p1/p2 button lamps
+ for (int i = 0; i < 4; i++)
+ output_set_lamp_value(i, ~data >> ((i&1) + (i&2) * 2) & 1);
+
+ // d2,d3,d6,d7: p1/p2 coincounters
+ for (int i = 0; i < 4; i++)
+ coin_counter_w(machine(), i, data >> (2 + (i&1) + (i&2) * 2) & 1);
+}
+
+WRITE8_MEMBER(ufo_state::ex_crane_xyz_w)
+{
+ int p = offset & 1;
+ // more straightforward setup than on UFO board hardware
+ // d0: move left
+ // d1: move right
+ // d2: move back
+ // d3: move front
+ // d4: move down
+ // d5: move up
+ for (int m = 0; m < 3; m++)
+ {
+ int bits = data >> (m*2) & 3;
+ m_player[p].motor[m].running = (bits == 1 || bits == 2) ? 1 : 0;
+ m_player[p].motor[m].direction = bits & 2;
+ }
+}
+
+WRITE8_MEMBER(ufo_state::ex_ufo800_lamps_w)
+{
+ // d0-d4: 5 red leds on ufo
+ // other bits: ?
+ for (int i = 0; i < 5; i++)
+ output_set_lamp_value(10 + i, data >> i & 1);
+}
+
+/* 315-5338A */
+
+WRITE8_MEMBER(ufo_state::ex_ufo21_lamps_w)
+{
+ // d0: ? (ufo21 reads from it too, but value is discarded)
+ // d1-d6 are the 6 red leds on each ufo
// d7: ?
+ for (int i = 1; i < 7; i++)
+ output_set_lamp_value(10 + offset * 10 + i, data >> i & 1);
+}
- return ret;
+WRITE8_MEMBER(ufo_state::ex_upd_start_w)
+{
+ // d0: upd7759c start sample
+ // other bits: unused?
+ m_upd->start_w(~data & 1);
}
+READ8_MEMBER(ufo_state::ex_upd_busy_r)
+{
+ // d0: upd7759c busy
+ // other bits: unused?
+ int d0 = m_upd->busy_r() ? 1 : 0;
+ return 0xfe | d0;
+}
+/* Memory maps */
static ADDRESS_MAP_START( ufo_map, AS_PROGRAM, 8, ufo_state )
AM_RANGE(0x0000, 0xbfff) AM_ROM
@@ -270,8 +454,24 @@ static ADDRESS_MAP_START( ufo_portmap, AS_IO, 8, ufo_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("pit", pit8254_device, read, write)
AM_RANGE(0x40, 0x43) AM_DEVREADWRITE("ym", ym3438_device, read, write)
- AM_RANGE(0x80, 0x8f) AM_DEVREADWRITE("io1", sega_315_5296_device, read, write)
- AM_RANGE(0xc0, 0xcf) AM_DEVREADWRITE("io2", sega_315_5296_device, read, write)
+ AM_RANGE(0x80, 0xbf) AM_DEVREADWRITE("io1", sega_315_5296_device, read, write)
+ AM_RANGE(0xc0, 0xff) AM_DEVREADWRITE("io2", sega_315_5296_device, read, write)
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( ex_ufo21_portmap, AS_IO, 8, ufo_state )
+ AM_RANGE(0x20, 0x20) AM_DEVWRITE("upd", upd7759_device, port_w)
+ AM_RANGE(0x60, 0x60) AM_WRITE(ex_upd_start_w) AM_READNOP
+ AM_RANGE(0x61, 0x61) AM_READ(ex_upd_busy_r)
+ AM_RANGE(0x64, 0x65) AM_WRITE(ex_ufo21_lamps_w) AM_READNOP
+// AM_RANGE(0x68, 0x68) AM_WRITENOP // ?
+ AM_IMPORT_FROM( ufo_portmap )
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ex_ufo800_portmap, AS_IO, 8, ufo_state )
+// AM_RANGE(0x60, 0x67) AM_NOP // unused?
+// AM_RANGE(0x68, 0x68) AM_WRITENOP // ?
+ AM_IMPORT_FROM( ufo_portmap )
ADDRESS_MAP_END
@@ -282,26 +482,26 @@ ADDRESS_MAP_END
***************************************************************************/
-static INPUT_PORTS_START( ufo )
- PORT_START("P1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("P1 Coin 1")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("P1 Coin 2")
+static INPUT_PORTS_START( newufo )
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("P1 Coin 1") // 100 Y
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("P1 Coin 2") // 500 Y
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("P1 Test")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P1 Service Coin")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE3 ) PORT_NAME("P1 Credit Clear")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Prize Fell")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Prize Sensor")
- PORT_START("P2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("P2 Coin 1")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("P2 Coin 2")
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("P2 Coin 1") // 100 Y
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_NAME("P2 Coin 2") // 500 Y
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Test") PORT_CODE(KEYCODE_F1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("P2 Service Coin")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE4 ) PORT_NAME("P2 Credit Clear")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Prize Fell")
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Prize Sensor")
PORT_START("DSW1") // coinage
PORT_DIPNAME( 0x01, 0x01, "UNK1-01" )
@@ -342,7 +542,157 @@ static INPUT_PORTS_START( ufo )
PORT_DIPNAME( 0x08, 0x08, "UNK2-08" )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, "UNK2-10 Enable Prize Sensor" )
+ PORT_DIPNAME( 0x10, 0x10, "UNK2-10 Disable Prize Sensor" )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "UNK2-20" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "UNK2-40" )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "UNK2-80" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( ufomini )
+ PORT_INCLUDE( newufo )
+
+ PORT_MODIFY("IN2")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( ufo21 )
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test Button")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P1 Service Coin")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("P1 Coin 1")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("P2 Service Coin")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_NAME("P2 Coin 1")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(2)
+
+ PORT_START("DSW1") // coinage
+ PORT_DIPNAME( 0x01, 0x01, "UNK1-01" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "UNK1-02" )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "UNK1-04" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, "UNK1-08" )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, "UNK1-10" )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "UNK1-20" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "UNK1-40" )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "UNK1-80" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x01, 0x01, "UNK2-01" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "UNK2-02" )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "UNK2-04" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, "UNK2-08 Demo Music On" )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, "UNK2-10" )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "UNK2-20" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "UNK2-40" )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "UNK2-80" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( ufo800 )
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Test Button")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("P1 Service Coin")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_NAME("P1 Coin 1")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("P1 Coin 2")
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("DSW1") // coinage
+ PORT_DIPNAME( 0x01, 0x01, "UNK1-01" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "UNK1-02" )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "UNK1-04" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, "UNK1-08" )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, "UNK1-10" )
+ PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x20, "UNK1-20" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "UNK1-40" )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "UNK1-80" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x01, 0x01, "UNK2-01 BGM Select" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "UNK2-02 BGM Select" )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "UNK2-04" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, "UNK2-08" )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x10, "UNK2-10" )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, "UNK2-20" )
@@ -370,20 +720,31 @@ void ufo_state::machine_reset()
void ufo_state::machine_start()
{
- // init/zerofill
+ // init/zerofill/register for savestates
static const float motor_speeds[4] =
{ 1.0f/CABINET_WIDTH, 1.0f/CABINET_DEPTH, 1.0f/CABINET_HEIGHT, 1.0f/CRANE_SIZE };
- for (int p = 0; p < 2; p++)
+ for (int m = 0; m < 4; m++)
{
- for (int m = 0; m < 4; m++)
+ for (int p = 0; p < 2; p++)
{
m_player[p].motor[m].running = 0;
m_player[p].motor[m].direction = 0;
m_player[p].motor[m].position = 0.5;
m_player[p].motor[m].speed = motor_speeds[m];
}
+
+ save_item(NAME(m_player[0].motor[m].running), m);
+ save_item(NAME(m_player[0].motor[m].direction), m);
+ save_item(NAME(m_player[0].motor[m].position), m);
+
+ save_item(NAME(m_player[1].motor[m].running), m);
+ save_item(NAME(m_player[1].motor[m].direction), m);
+ save_item(NAME(m_player[1].motor[m].position), m);
}
+
+ m_stepper = 0;
+ save_item(NAME(m_stepper));
}
WRITE_LINE_MEMBER(ufo_state::ym3438_irq)
@@ -391,27 +752,26 @@ WRITE_LINE_MEMBER(ufo_state::ym3438_irq)
m_maincpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
}
-static MACHINE_CONFIG_START( ufo, ufo_state )
+static MACHINE_CONFIG_START( newufo, ufo_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80, 8000000)
+ MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz/2)
MCFG_CPU_PROGRAM_MAP(ufo_map)
MCFG_CPU_IO_MAP(ufo_portmap)
MCFG_TIMER_DRIVER_ADD_PERIODIC("motor_timer", ufo_state, simulate_xyz, attotime::from_hz(MOTOR_SPEED))
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("update_timer", ufo_state, update_info, attotime::from_hz(60))
- MCFG_DEVICE_ADD("io1", SEGA_315_5296, 16000000)
+ MCFG_DEVICE_ADD("io1", SEGA_315_5296, XTAL_16MHz)
// all ports set to input
MCFG_315_5296_IN_PORTA_CB(READ8(ufo_state, crane_limits_r))
MCFG_315_5296_IN_PORTB_CB(READ8(ufo_state, crane_limits_r))
-// MCFG_315_5296_IN_PORTC_CB(NOOP)
-// MCFG_315_5296_IN_PORTD_CB(NOOP)
- MCFG_315_5296_IN_PORTE_CB(IOPORT("P1"))
+ MCFG_315_5296_IN_PORTE_CB(IOPORT("IN1"))
MCFG_315_5296_IN_PORTF_CB(IOPORT("DSW1"))
MCFG_315_5296_IN_PORTG_CB(IOPORT("DSW2"))
- MCFG_315_5296_IN_PORTH_CB(IOPORT("P2"))
+ MCFG_315_5296_IN_PORTH_CB(IOPORT("IN2"))
- MCFG_DEVICE_ADD("io2", SEGA_315_5296, 16000000)
+ MCFG_DEVICE_ADD("io2", SEGA_315_5296, XTAL_16MHz)
// all ports set to output
MCFG_315_5296_OUT_PORTA_CB(WRITE8(ufo_state, stepper_w))
MCFG_315_5296_OUT_PORTB_CB(WRITE8(ufo_state, cp_lamps_w))
@@ -420,14 +780,13 @@ static MACHINE_CONFIG_START( ufo, ufo_state )
MCFG_315_5296_OUT_PORTE_CB(WRITE8(ufo_state, crane_xyz_w))
MCFG_315_5296_OUT_PORTF_CB(WRITE8(ufo_state, crane_xyz_w))
MCFG_315_5296_OUT_PORTG_CB(WRITE8(ufo_state, ufo_lamps_w))
-// MCFG_315_5296_OUT_PORTH_CB(NOOP)
- MCFG_DEVICE_ADD("pit", PIT8254, 0) // uPD71054C, configuration is unknown
- MCFG_PIT8253_CLK0(8000000/256)
+ MCFG_DEVICE_ADD("pit", PIT8254, XTAL_16MHz/2) // uPD71054C, configuration is unknown
+ MCFG_PIT8253_CLK0(XTAL_16MHz/2/256)
MCFG_PIT8253_OUT0_HANDLER(WRITELINE(ufo_state, pit_out0))
- MCFG_PIT8253_CLK1(8000000/256)
+ MCFG_PIT8253_CLK1(XTAL_16MHz/2/256)
MCFG_PIT8253_OUT1_HANDLER(WRITELINE(ufo_state, pit_out1))
- MCFG_PIT8253_CLK2(8000000/256)
+ MCFG_PIT8253_CLK2(XTAL_16MHz/2/256)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(ufo_state, pit_out2))
/* no video! */
@@ -435,12 +794,67 @@ static MACHINE_CONFIG_START( ufo, ufo_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("ym", YM3438, 8000000)
+ MCFG_SOUND_ADD("ym", YM3438, XTAL_16MHz/2)
MCFG_YM2612_IRQ_HANDLER(WRITELINE(ufo_state, ym3438_irq))
MCFG_SOUND_ROUTE(0, "mono", 0.40)
MCFG_SOUND_ROUTE(1, "mono", 0.40)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( ufomini, newufo )
+
+ /* basic machine hardware */
+ MCFG_DEVICE_MODIFY("io1")
+ MCFG_315_5296_IN_PORTC_CB(IOPORT("IN1"))
+ MCFG_315_5296_IN_PORTE_CB(NULL)
+ MCFG_315_5296_IN_PORTH_CB(NULL)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( ufo21, newufo )
+
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_IO_MAP(ex_ufo21_portmap)
+
+ MCFG_DEVICE_MODIFY("io1")
+ MCFG_315_5296_IN_PORTA_CB(READ8(ufo_state, ex_crane_limits_r))
+ MCFG_315_5296_IN_PORTB_CB(READ8(ufo_state, ex_crane_limits_r))
+ MCFG_315_5296_IN_PORTC_CB(READ8(ufo_state, ex_crane_open_r))
+
+ MCFG_DEVICE_MODIFY("io2")
+ MCFG_315_5296_OUT_PORTA_CB(WRITE8(ufo_state, ex_stepper_w))
+ MCFG_315_5296_OUT_PORTB_CB(WRITE8(ufo_state, ex_cp_lamps_w))
+ MCFG_315_5296_OUT_PORTE_CB(WRITE8(ufo_state, ex_crane_xyz_w))
+ MCFG_315_5296_OUT_PORTF_CB(WRITE8(ufo_state, ex_crane_xyz_w))
+ MCFG_315_5296_OUT_PORTG_CB(NULL)
+
+ /* sound hardware */
+ MCFG_SOUND_ADD("upd", UPD7759, UPD7759_STANDARD_CLOCK)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( ufo800, newufo )
+
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_IO_MAP(ex_ufo800_portmap)
+
+ MCFG_DEVICE_MODIFY("io1")
+ MCFG_315_5296_IN_PORTA_CB(READ8(ufo_state, ex_crane_limits_r))
+ MCFG_315_5296_IN_PORTB_CB(IOPORT("IN2"))
+ MCFG_315_5296_IN_PORTC_CB(READ8(ufo_state, ex_crane_open_r))
+ MCFG_315_5296_IN_PORTD_CB(IOPORT("IN1"))
+ MCFG_315_5296_IN_PORTE_CB(NULL)
+ MCFG_315_5296_IN_PORTH_CB(NULL)
+
+ MCFG_DEVICE_MODIFY("io2")
+ MCFG_315_5296_OUT_PORTA_CB(WRITE8(ufo_state, ex_stepper_w))
+ MCFG_315_5296_OUT_PORTB_CB(WRITE8(ufo_state, ex_cp_lamps_w))
+ MCFG_315_5296_OUT_PORTE_CB(WRITE8(ufo_state, ex_crane_xyz_w))
+ MCFG_315_5296_OUT_PORTF_CB(WRITE8(ufo_state, ex_ufo800_lamps_w))
+ MCFG_315_5296_OUT_PORTG_CB(NULL)
+MACHINE_CONFIG_END
+
/***************************************************************************
@@ -490,10 +904,10 @@ ROM_START( ufo800 )
ROM_END
-GAME (1991, newufo, 0, ufo, ufo, driver_device, 0, ROT0, "Sega", "New UFO Catcher (standard)", GAME_MECHANICAL )
-GAME (1991, newufo_sonic, newufo, ufo, ufo, driver_device, 0, ROT0, "Sega", "New UFO Catcher (Sonic The Hedgehog)", GAME_MECHANICAL )
-GAME (1991, newufo_nfl, newufo, ufo, ufo, driver_device, 0, ROT0, "Sega", "New UFO Catcher (Team NFL)", GAME_MECHANICAL )
-GAME (1991, newufo_xmas, newufo, ufo, ufo, driver_device, 0, ROT0, "Sega", "New UFO Catcher (Christmas season ROM kit)", GAME_MECHANICAL )
-GAME (1991, ufomini, 0, ufo, ufo, driver_device, 0, ROT0, "Sega", "UFO Catcher Mini", GAME_NOT_WORKING | GAME_MECHANICAL )
-GAME (1996, ufo21, 0, ufo, ufo, driver_device, 0, ROT0, "Sega", "UFO Catcher 21", GAME_NOT_WORKING | GAME_MECHANICAL )
-GAME (1998, ufo800, 0, ufo, ufo, driver_device, 0, ROT0, "Sega", "UFO Catcher 800", GAME_NOT_WORKING | GAME_MECHANICAL )
+GAMEL( 1991, newufo, 0, newufo, newufo, driver_device, 0, ROT0, "Sega", "New UFO Catcher (standard)", GAME_MECHANICAL | GAME_SUPPORTS_SAVE, layout_newufo )
+GAMEL( 1991, newufo_sonic, newufo, newufo, newufo, driver_device, 0, ROT0, "Sega", "New UFO Catcher (Sonic The Hedgehog)", GAME_MECHANICAL | GAME_SUPPORTS_SAVE, layout_newufo )
+GAMEL( 1991, newufo_nfl, newufo, newufo, newufo, driver_device, 0, ROT0, "Sega", "New UFO Catcher (Team NFL)", GAME_MECHANICAL | GAME_SUPPORTS_SAVE, layout_newufo )
+GAMEL( 1991, newufo_xmas, newufo, newufo, newufo, driver_device, 0, ROT0, "Sega", "New UFO Catcher (Christmas season ROM kit)", GAME_MECHANICAL | GAME_SUPPORTS_SAVE, layout_newufo )
+GAMEL( 1991, ufomini, 0, ufomini, ufomini, driver_device, 0, ROT0, "Sega", "UFO Catcher Mini", GAME_MECHANICAL | GAME_SUPPORTS_SAVE, layout_ufomini )
+GAMEL( 1996, ufo21, 0, ufo21, ufo21, driver_device, 0, ROT0, "Sega", "UFO Catcher 21", GAME_MECHANICAL | GAME_SUPPORTS_SAVE, layout_ufo21 )
+GAMEL( 1998, ufo800, 0, ufo800, ufo800, driver_device, 0, ROT0, "Sega", "UFO Catcher 800", GAME_MECHANICAL | GAME_SUPPORTS_SAVE, layout_ufo800 )
diff --git a/src/mame/drivers/starwars.c b/src/mame/drivers/starwars.c
index 9784ec386cd..a4bbcc7df49 100644
--- a/src/mame/drivers/starwars.c
+++ b/src/mame/drivers/starwars.c
@@ -62,8 +62,8 @@ void starwars_state::machine_reset()
address_space &space = m_maincpu->space(AS_PROGRAM);
/* reset the slapstic */
- slapstic_reset();
- m_slapstic_current_bank = slapstic_bank();
+ m_slapstic_device->slapstic_reset();
+ m_slapstic_current_bank = m_slapstic_device->slapstic_bank();
memcpy(m_slapstic_base, &m_slapstic_source[m_slapstic_current_bank * 0x2000], 0x2000);
/* reset all the banks */
@@ -97,7 +97,7 @@ WRITE8_MEMBER(starwars_state::irq_ack_w)
void starwars_state::esb_slapstic_tweak(address_space &space, offs_t offset)
{
- int new_bank = slapstic_tweak(space, offset);
+ int new_bank = m_slapstic_device->slapstic_tweak(space, offset);
/* update for the new bank */
if (new_bank != m_slapstic_current_bank)
@@ -331,6 +331,8 @@ static MACHINE_CONFIG_START( starwars, starwars_state )
MCFG_CPU_PERIODIC_INT_DRIVER(starwars_state, irq0_line_assert, CLOCK_3KHZ / 12)
MCFG_WATCHDOG_TIME_INIT(attotime::from_hz(CLOCK_3KHZ / 128))
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_CPU_ADD("audiocpu", M6809, MASTER_CLOCK / 8)
MCFG_CPU_PROGRAM_MAP(sound_map)
@@ -524,7 +526,7 @@ DRIVER_INIT_MEMBER(starwars_state,esb)
UINT8 *rom = memregion("maincpu")->base();
/* init the slapstic */
- slapstic_init(machine(), 101);
+ m_slapstic_device->slapstic_init(machine(), 101);
m_slapstic_source = &rom[0x14000];
m_slapstic_base = &rom[0x08000];
diff --git a/src/mame/drivers/stv.c b/src/mame/drivers/stv.c
index a3dcc5c7f61..4f15d799d73 100644
--- a/src/mame/drivers/stv.c
+++ b/src/mame/drivers/stv.c
@@ -1021,6 +1021,9 @@ static MACHINE_CONFIG_START( stv, stv_state )
MCFG_SOUND_ADD("cdda", CDDA, 0)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
+
+ MCFG_DEVICE_ADD("315_5881", SEGA315_5881_CRYPT, 0)
+ MCFG_SET_READ_CALLBACK(stv_state, crypt_read_callback)
MACHINE_CONFIG_END
/*
diff --git a/src/mame/drivers/taito_f3.c b/src/mame/drivers/taito_f3.c
index 0e0a55240ef..2290a0346d8 100644
--- a/src/mame/drivers/taito_f3.c
+++ b/src/mame/drivers/taito_f3.c
@@ -3178,6 +3178,40 @@ ROM_START( arkretrn )
ROM_LOAD( "palce16v8-d77-14.bin", 0x0800, 0x0117, CRC(7427e777) SHA1(e692cedb13e5bc02edc4b25e9dcea51e6715de85) )
ROM_END
+ROM_START( arkretrnu )
+ ROM_REGION(0x200000, "maincpu", 0) /* 68020 code */
+ ROM_LOAD32_BYTE("e36-11.20", 0x000000, 0x040000, CRC(b50cfb92) SHA1(dac69fc9ef03315b11bb94d19e3dfdc8867b08ed) )
+ ROM_LOAD32_BYTE("e36-10.19", 0x000001, 0x040000, CRC(c940dba1) SHA1(ec87c9e4250f8b2f15094681a4783bca8c68f576) )
+ ROM_LOAD32_BYTE("e36-09.18", 0x000002, 0x040000, CRC(f16985e0) SHA1(a74cfee8f958e7a32354d4353eeb199a7fb1ce64) )
+ ROM_LOAD32_BYTE("e36-14.17", 0x000003, 0x040000, CRC(3360cfa1) SHA1(b06afc392b3864a895aed3a406d5d9886b1d0894) )
+
+ ROM_REGION(0x180000, "audiocpu", 0) /* Sound CPU */
+ ROM_LOAD16_BYTE("e36-12.32", 0x100000, 0x40000, CRC(3bae39be) SHA1(777142ecc24799b934ed51ac4cd8700bb6da7e3c) )
+ ROM_LOAD16_BYTE("e36-13.33", 0x100001, 0x40000, CRC(94448e82) SHA1(d7766490318623be770545918391c5e6144dd619) )
+
+ ROM_REGION(0x100000, "gfx1" , 0) /* Sprites */
+ ROM_LOAD16_BYTE("e36-03.12", 0x000000, 0x040000, CRC(1ea8558b) SHA1(b8ea4d6e1fb551b3c47f336a5e60ec33f7be525f) )
+ ROM_LOAD16_BYTE("e36-02.8", 0x000001, 0x040000, CRC(694eda31) SHA1(1a6f85057395052571491f85c633d5632ab64865) )
+ ROM_LOAD ("e36-01.4", 0x0c0000, 0x040000, CRC(54b9b2cd) SHA1(55ae964ea1d2cc40a6578c5339754a270096f01f) )
+ ROM_FILL ( 0x080000, 0x040000, 0 )
+
+ ROM_REGION(0x200000, "gfx2" , 0) /* Tiles */
+ ROM_LOAD16_BYTE("e36-07.47", 0x000000, 0x080000, CRC(266bf1c1) SHA1(489549478d7016400af2e643d4b98bf605237d34) )
+ ROM_LOAD16_BYTE("e36-06.45", 0x000001, 0x080000, CRC(110ab729) SHA1(0ccc0a5abbcfd79a069daf5162cd344a5fb225d5) )
+ ROM_LOAD ("e36-05.43", 0x180000, 0x080000, CRC(db18bce2) SHA1(b6653facc7f5c624f5710a51f2b2abfe640177e2) )
+ ROM_FILL ( 0x100000, 0x080000, 0 )
+
+ ROM_REGION16_BE(0x400000, "ensoniq.0" , ROMREGION_ERASE00 ) // V2: 4 banks, only 1 populated
+ ROM_LOAD16_BYTE("e36-04.38", 0x000000, 0x200000, CRC(2250959b) SHA1(06943f1b72bdf325485356a01278d88aeae93d87) ) // C8 C9 CA CB
+
+ ROM_REGION( 0x0a00, "plds", 0 )
+ ROM_LOAD( "pal16l8a-d77-09.bin", 0x0000, 0x0104, CRC(b371532b) SHA1(7f875f380e69d14326a036a09d2fda7554b73664) )
+ ROM_LOAD( "pal16l8a-d77-10.bin", 0x0200, 0x0104, CRC(42f59227) SHA1(1f0db7489b49c00603ea51d130c9dfc237545390) )
+ ROM_LOAD( "palce16v8-d77-11.bin", 0x0400, 0x0117, CRC(eacc294e) SHA1(90679d523d90c1f8d2ecbd7b6fac2861f94cf107) )
+ ROM_LOAD( "palce16v8-d77-12.bin", 0x0600, 0x0117, CRC(e9920cfe) SHA1(58b73fe65f118d57fdce56d781593fc70c797f1b) )
+ ROM_LOAD( "palce16v8-d77-14.bin", 0x0800, 0x0117, CRC(7427e777) SHA1(e692cedb13e5bc02edc4b25e9dcea51e6715de85) )
+ROM_END
+
ROM_START( arkretrnj )
ROM_REGION(0x200000, "maincpu", 0) /* 68020 code */
ROM_LOAD32_BYTE("e36-11.20", 0x000000, 0x040000, CRC(b50cfb92) SHA1(dac69fc9ef03315b11bb94d19e3dfdc8867b08ed) )
@@ -4120,6 +4154,7 @@ GAME( 1996, pbobble3, 0, f3, f3, taito_f3_state, pbobble3, ROT0, "
GAME( 1996, pbobble3u,pbobble3, f3, f3, taito_f3_state, pbobble3, ROT0, "Taito Corporation", "Puzzle Bobble 3 (Ver 2.1A 1996/09/27)", 0 )
GAME( 1996, pbobble3j,pbobble3, f3, f3, taito_f3_state, pbobble3, ROT0, "Taito Corporation", "Puzzle Bobble 3 (Ver 2.1J 1996/09/27)", 0 )
GAME( 1997, arkretrn, 0, f3, f3, taito_f3_state, arkretrn, ROT0, "Taito Corporation", "Arkanoid Returns (Ver 2.02O 1997/02/10)", 0 )
+GAME( 1997, arkretrnu,arkretrn, f3, f3, taito_f3_state, arkretrn, ROT0, "Taito Corporation", "Arkanoid Returns (Ver 2.02A 1997/02/10)", 0 )
GAME( 1997, arkretrnj,arkretrn, f3, f3, taito_f3_state, arkretrn, ROT0, "Taito Corporation", "Arkanoid Returns (Ver 2.02J 1997/02/10)", 0 )
GAME( 1997, kirameki, 0, f3_224a, f3, taito_f3_state, kirameki, ROT0, "Taito Corporation", "Kirameki Star Road (Ver 2.10J 1997/08/29)", 0 )
GAME( 1997, puchicar, 0, f3, f3, taito_f3_state, puchicar, ROT0, "Taito Corporation", "Puchi Carat (Ver 2.02O 1997/10/29)", 0 )
diff --git a/src/mame/drivers/taitowlf.c b/src/mame/drivers/taitowlf.c
index 3cdbbde6b68..e08ece8bac7 100644
--- a/src/mame/drivers/taitowlf.c
+++ b/src/mame/drivers/taitowlf.c
@@ -27,7 +27,7 @@ clocks 50MHz (near 3DFX) and 14.31818MHz (near RAMDAC)
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#if ENABLE_VGA
diff --git a/src/mame/drivers/tmnt.c b/src/mame/drivers/tmnt.c
index 55b83b16dad..2e4e9072412 100644
--- a/src/mame/drivers/tmnt.c
+++ b/src/mame/drivers/tmnt.c
@@ -2894,13 +2894,12 @@ ROM_START( tmhta )
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
-
ROM_START( tmhtb ) // the code is closest to tmntua near the start, and the data is closest to all the UK sets, especially tmhta, so I'm guessing it's a UK revision of the tmntua codebase
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
- ROM_LOAD16_BYTE( "unk3.i17", 0x00000, 0x20000, CRC(537eb047) SHA1(97e6dbc486c7d057355db7fcbdc0a2c2cad2c653) )
+ ROM_LOAD16_BYTE( "unk3.i17", 0x00000, 0x20000, CRC(537eb047) SHA1(97e6dbc486c7d057355db7fcbdc0a2c2cad2c653) ) /* unknown 963 xxx Konami code for this set */
ROM_LOAD16_BYTE( "unk4.k17", 0x00001, 0x20000, CRC(5afae564) SHA1(8d5fbf9530ad8d095c12b7e0f8c499c1436c4d47) )
- ROM_LOAD16_BYTE( "unk2.j15", 0x40000, 0x10000, CRC(ee34de05) SHA1(507d7fb178dbbe87dd373a81ad3f350ee2f7d923))
- ROM_LOAD16_BYTE( "unk1.k15", 0x40001, 0x10000, NO_DUMP )
+ ROM_LOAD16_BYTE( "unk2.j15", 0x40000, 0x10000, CRC(ee34de05) SHA1(507d7fb178dbbe87dd373a81ad3f350ee2f7d923) )
+ ROM_LOAD16_BYTE( "unk5.k15", 0x40001, 0x10000, CRC(5ef58d4e) SHA1(5df71c61a90c3e9d28ec3b8055d7ee97bc283e01) )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "963e20.g13", 0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
@@ -2929,7 +2928,6 @@ ROM_START( tmhtb ) // the code is closest to tmntua near the start, and the data
ROM_LOAD( "963a25.d5", 0x00000, 0x80000, CRC(fca078c7) SHA1(3e1124d72c9db4cb11d8de6c44b7aeca967f44e1) )
ROM_END
-
ROM_START( tmntj )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 2*128k and 2*64k for 68000 code */
ROM_LOAD16_BYTE( "963_223.j17", 0x00000, 0x20000, CRC(0d34a5ff) SHA1(a387f3e7c727dc66ebb0e1f40e4ab8dc83f647e5) )
@@ -4102,7 +4100,7 @@ GAME( 1989, tmntu, tmnt, tmnt, tmnt, tmnt_state, tmnt,
GAME( 1989, tmntua, tmnt, tmnt, tmnt, tmnt_state, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (US 4 Players, set 2)", GAME_SUPPORTS_SAVE )
GAME( 1989, tmht, tmnt, tmnt, tmnt, tmnt_state, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 4 Players, set 1)", GAME_SUPPORTS_SAVE )
GAME( 1989, tmhta, tmnt, tmnt, tmnt, tmnt_state, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 4 Players, set 2)", GAME_SUPPORTS_SAVE )
-GAME( 1989, tmhtb, tmnt, tmnt, tmnt, tmnt_state, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK?, unknown revision)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // incomplete dump
+GAME( 1989, tmhtb, tmnt, tmnt, tmnt, tmnt_state, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 4 Players, set 3)", GAME_SUPPORTS_SAVE )
GAME( 1990, tmntj, tmnt, tmnt, tmnt, tmnt_state, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Japan 4 Players)", GAME_SUPPORTS_SAVE )
GAME( 1989, tmht2p, tmnt, tmnt, tmnt2p, tmnt_state, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 2 Players, set 1)", GAME_SUPPORTS_SAVE )
GAME( 1989, tmht2pa, tmnt, tmnt, tmnt2p, tmnt_state, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 2 Players, set 2)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/toaplan2.c b/src/mame/drivers/toaplan2.c
index 80d038d3ef1..31ff351c572 100644
--- a/src/mame/drivers/toaplan2.c
+++ b/src/mame/drivers/toaplan2.c
@@ -5206,6 +5206,32 @@ ROM_START( bbakraid )
ROM_END
+ROM_START( bbakraidc )
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* Main 68k code */
+ ROM_LOAD16_BYTE( "prg0u022_china.bin", 0x000000, 0x080000, CRC(760be084) SHA1(096c8a2336492d7370ae25f3385faebf6e9c3eca) )
+ ROM_LOAD16_BYTE( "prg1u023.new", 0x000001, 0x080000, CRC(4ae9aa64) SHA1(45fdf72141c4c9f24a38d4218c65874799b9c868) )
+ ROM_LOAD16_BYTE( "prg2u021.bin", 0x100000, 0x080000, CRC(ffba8656) SHA1(6526bb65fad3384de3f301a7d1095cbf03757433) )
+ ROM_LOAD16_BYTE( "prg3u024.bin", 0x100001, 0x080000, CRC(834b8ad6) SHA1(0dd6223bb0749819ad29811eeb04fd08d937abb0) )
+
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Sound Z80 code */
+ ROM_LOAD( "sndu0720.bin", 0x00000, 0x20000, CRC(e62ab246) SHA1(00d23689dd423ecd4024c58b5903d16e890f1dff) )
+
+ ROM_REGION( 0x1000000, "gp9001", 0 )
+ ROM_LOAD( "gfxu0510.bin", 0x000000, 0x400000, CRC(9cca3446) SHA1(1123f8b8bfbe59a2c572cdf61f1ad27ff37f0f0d) )
+ ROM_LOAD( "gfxu0512.bin", 0x400000, 0x400000, CRC(a2a281d5) SHA1(d9a6623f9433ad682223f9780c26cd1523ebc5c5) )
+ ROM_LOAD( "gfxu0511.bin", 0x800000, 0x400000, CRC(e16472c0) SHA1(6068d679a8b3b65e05acd58a7ce9ead90177049f) )
+ ROM_LOAD( "gfxu0513.bin", 0xc00000, 0x400000, CRC(8bb635a0) SHA1(9064f1a2d8bb88ddbca702fb8556d0dfe6a5cadc) )
+
+ ROM_REGION( 0x0c00000, "ymz", 0 ) /* YMZ280B Samples */
+ ROM_LOAD( "rom6.829", 0x000000, 0x400000, CRC(8848b4a0) SHA1(e0dce136c5d5a4c1a92b863e57848cd5927d06f1) )
+ ROM_LOAD( "rom7.830", 0x400000, 0x400000, CRC(d6224267) SHA1(5c9b7b13effbef9f707811f84bfe50ca85e605e3) )
+ ROM_LOAD( "rom8.831", 0x800000, 0x400000, CRC(a101dfb0) SHA1(4b729b0d562e09df35438e9e6b457b8de2690a6e) )
+
+ ROM_REGION( 0x200, "eeprom", 0 )
+ ROM_LOAD( "eeprom-bbakraid-new.bin", 0x000, 0x200, CRC(35c9275a) SHA1(1282034adf3c7a24545fd273729867058dc93027) )
+ROM_END
+
+
ROM_START( bbakraidj )
ROM_REGION( 0x200000, "maincpu", 0 ) /* Main 68k code */
ROM_LOAD16_BYTE( "prg0u022.new", 0x000000, 0x080000, CRC(fa8d38d3) SHA1(aba91d87a8a62d3fe1139b4437b16e2f844264ad) )
@@ -5344,6 +5370,7 @@ GAME( 1998, batridert, batrider, batrider, batrider, toaplan2_state, batrider,
// Battle Bakraid
// the 'unlimited' version is a newer revision of the code
GAME( 1999, bbakraid, 0, bbakraid, bbakraid, toaplan2_state, bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (USA) (Tue Jun 8 1999)", GAME_SUPPORTS_SAVE )
+GAME( 1999, bbakraidc, bbakraid, bbakraid, bbakraid, toaplan2_state, bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (China) (Tue Jun 8 1999)", GAME_SUPPORTS_SAVE )
GAME( 1999, bbakraidj, bbakraid, bbakraid, bbakraid, toaplan2_state, bbakraid, ROT270, "Eighting", "Battle Bakraid - Unlimited Version (Japan) (Tue Jun 8 1999)", GAME_SUPPORTS_SAVE )
// older revision of the code
GAME( 1999, bbakraidja, bbakraid, bbakraid, bbakraid, toaplan2_state, bbakraid, ROT270, "Eighting", "Battle Bakraid (Japan) (Wed Apr 7 1999)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/uapce.c b/src/mame/drivers/uapce.c
index 6717e65d346..96da81b95ca 100644
--- a/src/mame/drivers/uapce.c
+++ b/src/mame/drivers/uapce.c
@@ -1,6 +1,6 @@
/*
- United Amusement PC-Engine based hardware
+ United Amusements PC-Engine based hardware
Driver by Mariusz Wojcieszek
Thanks for Charles MacDonald for hardware docs
@@ -12,7 +12,7 @@
History
- In 1989 United Amusement (a large operator of arcades in the US at that
+ In 1989 United Amusements (a large operator of arcades in the US at that
time) developed a JAMMA interface for the PC-Engine with NEC's blessing. NEC
pulled funding for the project before mass production began, and it never
took off.
diff --git a/src/mame/drivers/vigilant.c b/src/mame/drivers/vigilant.c
index 4df1ad1c28e..5f405152a6b 100644
--- a/src/mame/drivers/vigilant.c
+++ b/src/mame/drivers/vigilant.c
@@ -606,84 +606,82 @@ MACHINE_CONFIG_END
***************************************************************************/
+
ROM_START( vigilant )
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
- ROM_LOAD( "g07_c03.bin", 0x00000, 0x08000, CRC(9dcca081) SHA1(6d086b70e6bf1fbafa746ef5c82334645f199be9) )
- ROM_LOAD( "j07_c04.bin", 0x10000, 0x10000, CRC(e0159105) SHA1(da6d74ec075863c67c0ce21b07a54029d138f688) )
+ ROM_LOAD( "vg_a-8h-e.ic55", 0x00000, 0x10000, CRC(64735989) SHA1(0d1330eacbbe54fd98b3d6f81e770462a3a2372d) ) // 1ST AND 2ND HALF IDENTICAL (correct)
+ ROM_LOAD( "vg_a-8l-a.ic57", 0x10000, 0x10000, CRC(690d812f) SHA1(60d6513f8b27411018cdca1b25f94bc281476ae7) )
/* 0x20000-0x2ffff empty */
ROM_REGION( 0x10000, "soundcpu", 0 ) /* 64k for sound */
- ROM_LOAD( "g05_c02.bin", 0x00000, 0x10000, CRC(10582b2d) SHA1(6e7e5f07c49b347b427572efeb180c89f49bf2c7) )
+ ROM_LOAD( "vg_a-5j-.ic37", 0x00000, 0x10000, CRC(10582b2d) SHA1(6e7e5f07c49b347b427572efeb180c89f49bf2c7) )
ROM_REGION( 0x20000, "gfx1", 0 )
- ROM_LOAD( "f05_c08.bin", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
- ROM_LOAD( "h05_c09.bin", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
-
- ROM_REGION( 0x80000, "gfx2", 0 )
- ROM_LOAD( "n07_c12.bin", 0x00000, 0x10000, CRC(10af8eb2) SHA1(664b178b248babc43a9af0fe140fe57bc7367762) )
- ROM_LOAD( "k07_c10.bin", 0x10000, 0x10000, CRC(9576f304) SHA1(0ec2a7d3d82208e2a9a4ef9ab2824e6fe26ebbe5) )
- ROM_LOAD( "o07_c13.bin", 0x20000, 0x10000, CRC(b1d9d4dc) SHA1(1aacf6b0ff8d102880d3dce3b55cd1488edb90cf) )
- ROM_LOAD( "l07_c11.bin", 0x30000, 0x10000, CRC(4598be4a) SHA1(6b68ec94bdee0e58133a8d3891054ef44a8ff0e5) )
- ROM_LOAD( "t07_c16.bin", 0x40000, 0x10000, CRC(f5425e42) SHA1(c401263b6a266d3e9cd23133f1d823fb4b095e3d) )
- ROM_LOAD( "p07_c14.bin", 0x50000, 0x10000, CRC(cb50a17c) SHA1(eb15704f715b6475ae7096f8d82f1b20f8277c71) )
- ROM_LOAD( "v07_c17.bin", 0x60000, 0x10000, CRC(959ba3c7) SHA1(dcd2a885ae7b61210cbd55a38ccbe91c73d071b0) )
- ROM_LOAD( "s07_c15.bin", 0x70000, 0x10000, CRC(7f2e91c5) SHA1(27dcc9b696834897c36c0b7a1c6202d93f41ad8d) )
+ ROM_LOAD( "vg_b-4f-.ic33", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
+ ROM_LOAD( "vg_b-4j-.ic34", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 ) // confirmed original board uses 4 roms
+ ROM_LOAD( "vg_b-6l-.ic61", 0x00000, 0x10000, CRC(fbe9552d) SHA1(3c7c218f13c0a94bb624745d81d63db9423777ea) )
+ ROM_CONTINUE(0x20000,0x10000)
+ ROM_LOAD( "vg_b-6k-.ic60", 0x10000, 0x10000, CRC(ae09d5c0) SHA1(9da5b824b148c1e1478e3f4b44ba4348376ed7d5) )
+ ROM_CONTINUE(0x30000,0x10000)
+ ROM_LOAD( "vg_b-6p-.ic63", 0x40000, 0x10000, CRC(afb77461) SHA1(18707768a4768b579c94092a260e286d3214b977) )
+ ROM_CONTINUE(0x60000,0x10000)
+ ROM_LOAD( "vg_b-6n-.ic62", 0x50000, 0x10000, CRC(5065cd35) SHA1(9a03c5af024fcae6b3371bb04be3e811ecc390d7) )
+ ROM_CONTINUE(0x70000,0x10000)
ROM_REGION( 0x40000, "gfx3", 0 )
- ROM_LOAD( "d01_c05.bin", 0x00000, 0x10000, CRC(81b1ee5c) SHA1(2014165ec71f089fecb5a3e60b939cc0f565d7f1) )
- ROM_LOAD( "e01_c06.bin", 0x10000, 0x10000, CRC(d0d33673) SHA1(39761d97a71deaf7f17233d5bd5a55dbb1e6b30e) )
- ROM_LOAD( "f01_c07.bin", 0x20000, 0x10000, CRC(aae81695) SHA1(ca8e136eca3543b27f3a61b105d4a280711cd6ea) )
+ ROM_LOAD( "vg_b-1d-.ic1", 0x00000, 0x10000, CRC(81b1ee5c) SHA1(2014165ec71f089fecb5a3e60b939cc0f565d7f1) )
+ ROM_LOAD( "vg_b-1f-.ic2", 0x10000, 0x10000, CRC(d0d33673) SHA1(39761d97a71deaf7f17233d5bd5a55dbb1e6b30e) )
+ ROM_LOAD( "vg_b-1h-.ic3", 0x20000, 0x10000, CRC(aae81695) SHA1(ca8e136eca3543b27f3a61b105d4a280711cd6ea) )
ROM_REGION( 0x10000, "samples", 0 ) /* samples */
- ROM_LOAD( "d04_c01.bin", 0x00000, 0x10000, CRC(9b85101d) SHA1(6b8a0f33b9b66bb968f7b61e49d19a6afad8db95) )
+ ROM_LOAD( "vg_a-4d-.ic26", 0x00000, 0x10000, CRC(9b85101d) SHA1(6b8a0f33b9b66bb968f7b61e49d19a6afad8db95) )
ROM_REGION( 0x0600, "plds", 0 ) /* All are pal16l8 - protected */
ROM_LOAD( "vg_b-8r.ic90", 0x0000, 0x0117, CRC(df368a7a) SHA1(597d85d1f90b7ee0188f2d849792ee02ff2ea48b) )
ROM_LOAD( "vg_b-4m.ic38", 0x0200, 0x0117, CRC(dbca4204) SHA1(d8e190f2dc4d6285f22be331d01ed402520d2017) )
- ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
+ ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
ROM_END
-
-
ROM_START( vigilant1 )
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
- ROM_LOAD( "vg_a-8h-c.rom", 0x00000, 0x08000, CRC(d72682e8) SHA1(2401a6397164ff66d96f6023f021c615d70108a5) ) /* Slot labeled 27256 = 256kb = 32KB confirmed */
- ROM_LOAD( "vg_a-8l-a.rom", 0x10000, 0x10000, CRC(690d812f) SHA1(60d6513f8b27411018cdca1b25f94bc281476ae7) )
+ ROM_LOAD( "vg_a-8h-c.ic55", 0x00000, 0x08000, CRC(d72682e8) SHA1(2401a6397164ff66d96f6023f021c615d70108a5) ) /* Slot labeled 27256 = 256kb = 32KB confirmed */
+ ROM_LOAD( "vg_a-8l-a.ic57", 0x10000, 0x10000, CRC(690d812f) SHA1(60d6513f8b27411018cdca1b25f94bc281476ae7) )
/* 0x20000-0x2ffff empty */
ROM_REGION( 0x10000, "soundcpu", 0 ) /* 64k for sound */
- ROM_LOAD( "g05_c02.bin", 0x00000, 0x10000, CRC(10582b2d) SHA1(6e7e5f07c49b347b427572efeb180c89f49bf2c7) )
+ ROM_LOAD( "vg_a-5j-.ic37", 0x00000, 0x10000, CRC(10582b2d) SHA1(6e7e5f07c49b347b427572efeb180c89f49bf2c7) )
ROM_REGION( 0x20000, "gfx1", 0 )
- ROM_LOAD( "f05_c08.bin", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
- ROM_LOAD( "h05_c09.bin", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
-
- ROM_REGION( 0x80000, "gfx2", 0 )
- ROM_LOAD( "n07_c12.bin", 0x00000, 0x10000, CRC(10af8eb2) SHA1(664b178b248babc43a9af0fe140fe57bc7367762) )
- ROM_LOAD( "k07_c10.bin", 0x10000, 0x10000, CRC(9576f304) SHA1(0ec2a7d3d82208e2a9a4ef9ab2824e6fe26ebbe5) )
- ROM_LOAD( "o07_c13.bin", 0x20000, 0x10000, CRC(b1d9d4dc) SHA1(1aacf6b0ff8d102880d3dce3b55cd1488edb90cf) )
- ROM_LOAD( "l07_c11.bin", 0x30000, 0x10000, CRC(4598be4a) SHA1(6b68ec94bdee0e58133a8d3891054ef44a8ff0e5) )
- ROM_LOAD( "t07_c16.bin", 0x40000, 0x10000, CRC(f5425e42) SHA1(c401263b6a266d3e9cd23133f1d823fb4b095e3d) )
- ROM_LOAD( "p07_c14.bin", 0x50000, 0x10000, CRC(cb50a17c) SHA1(eb15704f715b6475ae7096f8d82f1b20f8277c71) )
- ROM_LOAD( "v07_c17.bin", 0x60000, 0x10000, CRC(959ba3c7) SHA1(dcd2a885ae7b61210cbd55a38ccbe91c73d071b0) )
- ROM_LOAD( "s07_c15.bin", 0x70000, 0x10000, CRC(7f2e91c5) SHA1(27dcc9b696834897c36c0b7a1c6202d93f41ad8d) )
+ ROM_LOAD( "vg_b-4f-.ic33", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
+ ROM_LOAD( "vg_b-4j-.ic34", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 ) // confirmed original board uses 4 roms
+ ROM_LOAD( "vg_b-6l-.ic61", 0x00000, 0x10000, CRC(fbe9552d) SHA1(3c7c218f13c0a94bb624745d81d63db9423777ea) )
+ ROM_CONTINUE(0x20000,0x10000)
+ ROM_LOAD( "vg_b-6k-.ic60", 0x10000, 0x10000, CRC(ae09d5c0) SHA1(9da5b824b148c1e1478e3f4b44ba4348376ed7d5) )
+ ROM_CONTINUE(0x30000,0x10000)
+ ROM_LOAD( "vg_b-6p-.ic63", 0x40000, 0x10000, CRC(afb77461) SHA1(18707768a4768b579c94092a260e286d3214b977) )
+ ROM_CONTINUE(0x60000,0x10000)
+ ROM_LOAD( "vg_b-6n-.ic62", 0x50000, 0x10000, CRC(5065cd35) SHA1(9a03c5af024fcae6b3371bb04be3e811ecc390d7) )
+ ROM_CONTINUE(0x70000,0x10000)
ROM_REGION( 0x40000, "gfx3", 0 )
- ROM_LOAD( "d01_c05.bin", 0x00000, 0x10000, CRC(81b1ee5c) SHA1(2014165ec71f089fecb5a3e60b939cc0f565d7f1) )
- ROM_LOAD( "e01_c06.bin", 0x10000, 0x10000, CRC(d0d33673) SHA1(39761d97a71deaf7f17233d5bd5a55dbb1e6b30e) )
- ROM_LOAD( "f01_c07.bin", 0x20000, 0x10000, CRC(aae81695) SHA1(ca8e136eca3543b27f3a61b105d4a280711cd6ea) )
+ ROM_LOAD( "vg_b-1d-.ic1", 0x00000, 0x10000, CRC(81b1ee5c) SHA1(2014165ec71f089fecb5a3e60b939cc0f565d7f1) )
+ ROM_LOAD( "vg_b-1f-.ic2", 0x10000, 0x10000, CRC(d0d33673) SHA1(39761d97a71deaf7f17233d5bd5a55dbb1e6b30e) )
+ ROM_LOAD( "vg_b-1h-.ic3", 0x20000, 0x10000, CRC(aae81695) SHA1(ca8e136eca3543b27f3a61b105d4a280711cd6ea) )
ROM_REGION( 0x10000, "samples", 0 ) /* samples */
- ROM_LOAD( "d04_c01.bin", 0x00000, 0x10000, CRC(9b85101d) SHA1(6b8a0f33b9b66bb968f7b61e49d19a6afad8db95) )
+ ROM_LOAD( "vg_a-4d-.ic26", 0x00000, 0x10000, CRC(9b85101d) SHA1(6b8a0f33b9b66bb968f7b61e49d19a6afad8db95) )
ROM_REGION( 0x0600, "plds", 0 ) /* All are pal16l8 - protected */
ROM_LOAD( "vg_b-8r.ic90", 0x0000, 0x0117, CRC(df368a7a) SHA1(597d85d1f90b7ee0188f2d849792ee02ff2ea48b) )
ROM_LOAD( "vg_b-4m.ic38", 0x0200, 0x0117, CRC(dbca4204) SHA1(d8e190f2dc4d6285f22be331d01ed402520d2017) )
- ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
+ ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
ROM_END
-
-ROM_START( vigilantu )
+ROM_START( vigilantu ) /* Need to determine the correct original roms & IC locations for this set */
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
ROM_LOAD( "a-8h", 0x00000, 0x08000, CRC(8d15109e) SHA1(9ef57047a0b53cd0143a260193b33e3d5680ca71) )
ROM_LOAD( "a-8l", 0x10000, 0x10000, CRC(7f95799b) SHA1(a371671c3c26976314aaac4e410bff0f13a8a085) )
@@ -696,7 +694,7 @@ ROM_START( vigilantu )
ROM_LOAD( "f05_c08.bin", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
ROM_LOAD( "h05_c09.bin", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
- ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_REGION( 0x80000, "gfx2", 0 ) // 8 roms is a bootleg configuration?
ROM_LOAD( "n07_c12.bin", 0x00000, 0x10000, CRC(10af8eb2) SHA1(664b178b248babc43a9af0fe140fe57bc7367762) )
ROM_LOAD( "k07_c10.bin", 0x10000, 0x10000, CRC(9576f304) SHA1(0ec2a7d3d82208e2a9a4ef9ab2824e6fe26ebbe5) )
ROM_LOAD( "o07_c13.bin", 0x20000, 0x10000, CRC(b1d9d4dc) SHA1(1aacf6b0ff8d102880d3dce3b55cd1488edb90cf) )
@@ -717,10 +715,10 @@ ROM_START( vigilantu )
ROM_REGION( 0x0600, "plds", 0 ) /* All are pal16l8 - protected */
ROM_LOAD( "vg_b-8r.ic90", 0x0000, 0x0117, CRC(df368a7a) SHA1(597d85d1f90b7ee0188f2d849792ee02ff2ea48b) )
ROM_LOAD( "vg_b-4m.ic38", 0x0200, 0x0117, CRC(dbca4204) SHA1(d8e190f2dc4d6285f22be331d01ed402520d2017) )
- ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
+ ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
ROM_END
-ROM_START( vigilantu2 )
+ROM_START( vigilantu2 ) /* Need to determine the correct original roms & IC locations for this set */
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
ROM_LOAD( "vg-a-8h-g.bin", 0x00000, 0x08000, CRC(9444c04e) SHA1(463d2dae48df2d237bd19d5e16cab032df0d9052) ) /* labeled Rev. G */
ROM_LOAD( "a-8l", 0x10000, 0x10000, CRC(7f95799b) SHA1(a371671c3c26976314aaac4e410bff0f13a8a085) )
@@ -733,7 +731,7 @@ ROM_START( vigilantu2 )
ROM_LOAD( "f05_c08.bin", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
ROM_LOAD( "h05_c09.bin", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
- ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_REGION( 0x80000, "gfx2", 0 ) // 8 roms is a bootleg configuration?
ROM_LOAD( "n07_c12.bin", 0x00000, 0x10000, CRC(10af8eb2) SHA1(664b178b248babc43a9af0fe140fe57bc7367762) )
ROM_LOAD( "k07_c10.bin", 0x10000, 0x10000, CRC(9576f304) SHA1(0ec2a7d3d82208e2a9a4ef9ab2824e6fe26ebbe5) )
ROM_LOAD( "o07_c13.bin", 0x20000, 0x10000, CRC(b1d9d4dc) SHA1(1aacf6b0ff8d102880d3dce3b55cd1488edb90cf) )
@@ -754,13 +752,50 @@ ROM_START( vigilantu2 )
ROM_REGION( 0x0600, "plds", 0 ) /* All are pal16l8 - protected - sourced from this board */
ROM_LOAD( "vg_b-8r.ic90", 0x0000, 0x0117, CRC(df368a7a) SHA1(597d85d1f90b7ee0188f2d849792ee02ff2ea48b) )
ROM_LOAD( "vg_b-4m.ic38", 0x0200, 0x0117, CRC(dbca4204) SHA1(d8e190f2dc4d6285f22be331d01ed402520d2017) )
- ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
+ ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
ROM_END
ROM_START( vigilantj )
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
- ROM_LOAD( "vg_a-8h.rom", 0x00000, 0x08000, CRC(ba848713) SHA1(b357cbf404fb1874d555797ed9fb37f946cc4340) )
- ROM_LOAD( "vg_a-8l.rom", 0x10000, 0x10000, CRC(3b12b1d8) SHA1(2f9207f8d8ec41ea1b8f5bf3c69a97d1d09f6c3f) )
+ ROM_LOAD( "vg_a-8h-d.ic55", 0x00000, 0x10000, CRC(6480bd03) SHA1(f238811b9618ac6be441fcce211e769678b54a05) ) // 1ST AND 2ND HALF IDENTICAL (correct)
+ ROM_LOAD( "vg_a-8l-d.ic57", 0x10000, 0x10000, CRC(3b12b1d8) SHA1(2f9207f8d8ec41ea1b8f5bf3c69a97d1d09f6c3f) )
+ /* 0x20000-0x2ffff empty */
+
+ ROM_REGION( 0x10000, "soundcpu", 0 ) /* 64k for sound */
+ ROM_LOAD( "vg_a-5j-.ic37", 0x00000, 0x10000, CRC(10582b2d) SHA1(6e7e5f07c49b347b427572efeb180c89f49bf2c7) )
+
+ ROM_REGION( 0x20000, "gfx1", 0 )
+ ROM_LOAD( "vg_b-4f-.ic33", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
+ ROM_LOAD( "vg_b-4j-.ic34", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
+
+ ROM_REGION( 0x80000, "gfx2", 0 ) // confirmed original board uses 4 roms
+ ROM_LOAD( "vg_b-6l-.ic61", 0x00000, 0x10000, CRC(fbe9552d) SHA1(3c7c218f13c0a94bb624745d81d63db9423777ea) )
+ ROM_CONTINUE(0x20000,0x10000)
+ ROM_LOAD( "vg_b-6k-.ic60", 0x10000, 0x10000, CRC(ae09d5c0) SHA1(9da5b824b148c1e1478e3f4b44ba4348376ed7d5) )
+ ROM_CONTINUE(0x30000,0x10000)
+ ROM_LOAD( "vg_b-6p-.ic63", 0x40000, 0x10000, CRC(afb77461) SHA1(18707768a4768b579c94092a260e286d3214b977) )
+ ROM_CONTINUE(0x60000,0x10000)
+ ROM_LOAD( "vg_b-6n-.ic62", 0x50000, 0x10000, CRC(5065cd35) SHA1(9a03c5af024fcae6b3371bb04be3e811ecc390d7) )
+ ROM_CONTINUE(0x70000,0x10000)
+
+ ROM_REGION( 0x40000, "gfx3", 0 ) // this should be 2x 23C1000 on Japan sets
+ ROM_LOAD( "vg_b-1d-.ic1", 0x00000, 0x10000, CRC(81b1ee5c) SHA1(2014165ec71f089fecb5a3e60b939cc0f565d7f1) )
+ ROM_LOAD( "vg_b-1f-.ic2", 0x10000, 0x10000, CRC(d0d33673) SHA1(39761d97a71deaf7f17233d5bd5a55dbb1e6b30e) )
+ ROM_LOAD( "vg_b-1h-.ic3", 0x20000, 0x10000, CRC(aae81695) SHA1(ca8e136eca3543b27f3a61b105d4a280711cd6ea) )
+
+ ROM_REGION( 0x10000, "samples", 0 ) /* samples */
+ ROM_LOAD( "vg_a-4d-.ic26", 0x00000, 0x10000, CRC(9b85101d) SHA1(6b8a0f33b9b66bb968f7b61e49d19a6afad8db95) )
+
+ ROM_REGION( 0x0600, "plds", 0 ) /* All are pal16l8 - protected */
+ ROM_LOAD( "vg_b-8r.ic90", 0x0000, 0x0117, CRC(df368a7a) SHA1(597d85d1f90b7ee0188f2d849792ee02ff2ea48b) )
+ ROM_LOAD( "vg_b-4m.ic38", 0x0200, 0x0117, CRC(dbca4204) SHA1(d8e190f2dc4d6285f22be331d01ed402520d2017) )
+ ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
+ROM_END
+
+ROM_START( vigilantb ) /* Likely a bootleg */
+ ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
+ ROM_LOAD( "g07_c03.bin", 0x00000, 0x08000, CRC(9dcca081) SHA1(6d086b70e6bf1fbafa746ef5c82334645f199be9) )
+ ROM_LOAD( "j07_c04.bin", 0x10000, 0x10000, CRC(e0159105) SHA1(da6d74ec075863c67c0ce21b07a54029d138f688) )
/* 0x20000-0x2ffff empty */
ROM_REGION( 0x10000, "soundcpu", 0 ) /* 64k for sound */
@@ -770,7 +805,7 @@ ROM_START( vigilantj )
ROM_LOAD( "f05_c08.bin", 0x00000, 0x10000, CRC(01579d20) SHA1(e58d8ca0ea0ac9d77225bf55faa499d1565924f9) )
ROM_LOAD( "h05_c09.bin", 0x10000, 0x10000, CRC(4f5872f0) SHA1(6af21ba1c94097eecce30585983b4b07528c8635) )
- ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_REGION( 0x80000, "gfx2", 0 ) // 8 roms is a bootleg configuration?
ROM_LOAD( "n07_c12.bin", 0x00000, 0x10000, CRC(10af8eb2) SHA1(664b178b248babc43a9af0fe140fe57bc7367762) )
ROM_LOAD( "k07_c10.bin", 0x10000, 0x10000, CRC(9576f304) SHA1(0ec2a7d3d82208e2a9a4ef9ab2824e6fe26ebbe5) )
ROM_LOAD( "o07_c13.bin", 0x20000, 0x10000, CRC(b1d9d4dc) SHA1(1aacf6b0ff8d102880d3dce3b55cd1488edb90cf) )
@@ -788,12 +823,13 @@ ROM_START( vigilantj )
ROM_REGION( 0x10000, "samples", 0 ) /* samples */
ROM_LOAD( "d04_c01.bin", 0x00000, 0x10000, CRC(9b85101d) SHA1(6b8a0f33b9b66bb968f7b61e49d19a6afad8db95) )
- ROM_REGION( 0x0600, "plds", 0 ) /* All are pal16l8 */
+ ROM_REGION( 0x0600, "plds", 0 ) /* All are pal16l8 - protected */
ROM_LOAD( "vg_b-8r.ic90", 0x0000, 0x0117, CRC(df368a7a) SHA1(597d85d1f90b7ee0188f2d849792ee02ff2ea48b) )
ROM_LOAD( "vg_b-4m.ic38", 0x0200, 0x0117, CRC(dbca4204) SHA1(d8e190f2dc4d6285f22be331d01ed402520d2017) )
- ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
+ ROM_LOAD( "vg_b-1b.ic1", 0x0400, 0x0117, CRC(922e5167) SHA1(08efdfdfeb35f3f73b6fd3d5c0c2a386dea5f617) )
ROM_END
+
ROM_START( kikcubic )
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
ROM_LOAD( "mqj-p0", 0x00000, 0x08000, CRC(9cef394a) SHA1(be9cc78420b4c35f8f9523b529bd56315749762c) )
@@ -853,6 +889,7 @@ ROM_START( kikcubicb )
ROM_LOAD( "7s", 0x0120, 0x0020, CRC(face0cbb) SHA1(c56aea3b7aaabbd4ff1b4546fcad94f51b473cde) ) /* unknown (bad read?) */
ROM_END
+
ROM_START( buccanrs )
ROM_REGION( 0x30000, "maincpu", 0 ) /* 64k for code + 128k for bankswitching */
ROM_LOAD( "11.u58", 0x00000, 0x10000, CRC(bf1d7e6f) SHA1(55dcf993515b57c3eb1fab98097a2171df3e38ed) ) // both halves are identical (correct for rom type on this board tho)
@@ -926,12 +963,15 @@ ROM_START( buccanrsa )
ROM_LOAD( "prom2.u99", 0x0300, 0x0100, CRC(e0aa8869) SHA1(ac8bdfeba69420ba56ec561bf3d0f1229d02cea2) )
ROM_END
-GAME( 1988, vigilant, 0, vigilant, vigilant, driver_device, 0, ROT0, "Irem", "Vigilante (World, set 1)", GAME_NO_COCKTAIL )
-GAME( 1988, vigilant1,vigilant, vigilant, vigilant, driver_device, 0, ROT0, "Irem", "Vigilante (World, set 2)", GAME_NO_COCKTAIL )
-GAME( 1988, vigilantu,vigilant, vigilant, vigilant, driver_device, 0, ROT0, "Irem (Data East USA license)", "Vigilante (US)", GAME_NO_COCKTAIL )
-GAME( 1988, vigilantu2,vigilant,vigilant, vigilant, driver_device, 0, ROT0, "Irem (Data East USA license)", "Vigilante (US) - Rev. G", GAME_NO_COCKTAIL )
-GAME( 1988, vigilantj,vigilant, vigilant, vigilant, driver_device, 0, ROT0, "Irem", "Vigilante (Japan)", GAME_NO_COCKTAIL )
-GAME( 1988, kikcubic, 0, kikcubic, kikcubic, driver_device, 0, ROT0, "Irem", "Meikyu Jima (Japan)", GAME_NO_COCKTAIL ) /* English title is Kickle Cubicle */
-GAME( 1988, kikcubicb,kikcubic, kikcubic, kikcubic, driver_device, 0, ROT0, "bootleg", "Kickle Cubele", GAME_NO_COCKTAIL )
-GAME( 1989, buccanrs, 0, buccanrs, buccanrs, driver_device, 0, ROT0, "Duintronic", "Buccaneers (set 1)", GAME_NO_COCKTAIL )
-GAME( 1989, buccanrsa,buccanrs, buccanrs, buccanra, driver_device, 0, ROT0, "Duintronic", "Buccaneers (set 2)", GAME_NO_COCKTAIL )
+GAME( 1988, vigilant, 0, vigilant, vigilant, driver_device, 0, ROT0, "Irem", "Vigilante (World, Rev E)", GAME_NO_COCKTAIL )
+GAME( 1988, vigilant1, vigilant, vigilant, vigilant, driver_device, 0, ROT0, "Irem", "Vigilante (World, Rev C)", GAME_NO_COCKTAIL )
+GAME( 1988, vigilantu, vigilant, vigilant, vigilant, driver_device, 0, ROT0, "Irem (Data East USA license)", "Vigilante (US)", GAME_NO_COCKTAIL )
+GAME( 1988, vigilantu2,vigilant, vigilant, vigilant, driver_device, 0, ROT0, "Irem (Data East USA license)", "Vigilante (US, Rev G)", GAME_NO_COCKTAIL )
+GAME( 1988, vigilantj, vigilant, vigilant, vigilant, driver_device, 0, ROT0, "Irem", "Vigilante (Japan, Rev D)", GAME_NO_COCKTAIL )
+GAME( 1988, vigilantb, vigilant, vigilant, vigilant, driver_device, 0, ROT0, "bootleg", "Vigilante (bootleg)", GAME_NO_COCKTAIL )
+
+GAME( 1988, kikcubic, 0, kikcubic, kikcubic, driver_device, 0, ROT0, "Irem", "Meikyu Jima (Japan)", GAME_NO_COCKTAIL ) /* English title is Kickle Cubicle */
+GAME( 1988, kikcubicb, kikcubic, kikcubic, kikcubic, driver_device, 0, ROT0, "bootleg", "Kickle Cubele", GAME_NO_COCKTAIL )
+
+GAME( 1989, buccanrs, 0, buccanrs, buccanrs, driver_device, 0, ROT0, "Duintronic", "Buccaneers (set 1)", GAME_NO_COCKTAIL )
+GAME( 1989, buccanrsa, buccanrs, buccanrs, buccanra, driver_device, 0, ROT0, "Duintronic", "Buccaneers (set 2)", GAME_NO_COCKTAIL )
diff --git a/src/mame/drivers/vindictr.c b/src/mame/drivers/vindictr.c
index ade2ce54585..b36a516eb63 100644
--- a/src/mame/drivers/vindictr.c
+++ b/src/mame/drivers/vindictr.c
@@ -184,6 +184,8 @@ static MACHINE_CONFIG_START( vindictr, vindictr_state )
MCFG_CPU_ADD("maincpu", M68010, ATARI_CLOCK_14MHz/2)
MCFG_CPU_PROGRAM_MAP(main_map)
+ MCFG_SLAPSTIC_ADD("slapstic") // where is this hooked up here?
+
MCFG_MACHINE_RESET_OVERRIDE(vindictr_state,vindictr)
MCFG_ATARI_EEPROM_2804_ADD("eeprom")
diff --git a/src/mame/drivers/viper.c b/src/mame/drivers/viper.c
index de35287dc6d..449d2c5874d 100644
--- a/src/mame/drivers/viper.c
+++ b/src/mame/drivers/viper.c
@@ -283,7 +283,7 @@ An additional control PCB is used for Mocap Golf for the golf club sensor. It co
#include "emu.h"
#include "cpu/powerpc/ppc.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/ataintf.h"
#include "machine/idehd.h"
#include "machine/timekpr.h"
diff --git a/src/mame/drivers/voyager.c b/src/mame/drivers/voyager.c
index 542b225f255..0cd0af108be 100644
--- a/src/mame/drivers/voyager.c
+++ b/src/mame/drivers/voyager.c
@@ -14,7 +14,7 @@ TODO: VIA KT133a chipset support, GeForce 2MX video support, lots of things ;-)
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/xtom3d.c b/src/mame/drivers/xtom3d.c
index 5d42912f4eb..7bf0d85c94d 100644
--- a/src/mame/drivers/xtom3d.c
+++ b/src/mame/drivers/xtom3d.c
@@ -40,7 +40,7 @@ MX29F1610MC 16M FlashROM (x7)
#include "emu.h"
#include "cpu/i386/i386.h"
-#include "machine/pci.h"
+#include "machine/lpci.h"
#include "machine/pcshare.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
diff --git a/src/mame/drivers/xybots.c b/src/mame/drivers/xybots.c
index 9bfc3adee36..948e7aa33ae 100644
--- a/src/mame/drivers/xybots.c
+++ b/src/mame/drivers/xybots.c
@@ -184,6 +184,8 @@ static MACHINE_CONFIG_START( xybots, xybots_state )
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
+ MCFG_SLAPSTIC_ADD("slapstic")
+
MCFG_MACHINE_RESET_OVERRIDE(xybots_state,xybots)
MCFG_ATARI_EEPROM_2804_ADD("eeprom")
diff --git a/src/mame/drivers/yunsun16.c b/src/mame/drivers/yunsun16.c
index aefa02ab5b6..f4cf6cd16e0 100644
--- a/src/mame/drivers/yunsun16.c
+++ b/src/mame/drivers/yunsun16.c
@@ -578,11 +578,11 @@ WRITE_LINE_MEMBER(yunsun16_state::soundirq)
static MACHINE_CONFIG_START( magicbub, yunsun16_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M68000, 16000000)
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz)
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", yunsun16_state, irq2_line_hold)
- MCFG_CPU_ADD("audiocpu", Z80, 3000000) /* ? */
+ MCFG_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4)
MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_IO_MAP(sound_port_map)
@@ -601,12 +601,12 @@ static MACHINE_CONFIG_START( magicbub, yunsun16_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_SOUND_ADD("ymsnd", YM3812, 4000000)
+ MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_16MHz/4)
MCFG_YM3812_IRQ_HANDLER(WRITELINE(yunsun16_state, soundirq))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80)
- MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH)
+ MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.80)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80)
MACHINE_CONFIG_END
@@ -619,7 +619,7 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( shocking, yunsun16_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M68000, 16000000)
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz)
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", yunsun16_state, irq2_line_hold)
@@ -637,7 +637,7 @@ static MACHINE_CONFIG_START( shocking, yunsun16_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
- MCFG_OKIM6295_ADD("oki", 1000000, OKIM6295_PIN7_HIGH)
+ MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
MACHINE_CONFIG_END
@@ -715,7 +715,7 @@ ROM_START( magicbub )
ROM_LOAD16_BYTE( "magbuble.u32", 0x000001, 0x040000, CRC(f6ea7004) SHA1(069541e37b60370810451616ee66bbd05dc10137) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */
- ROM_LOAD( "magbuble.143", 0x00000, 0x10000, CRC(04192753) SHA1(9c56ba70e1d074906ea1dc593c2a8516c6ba2074) )
+ ROM_LOAD( "u143.bin", 0x00000, 0x10000, CRC(04192753) SHA1(9c56ba70e1d074906ea1dc593c2a8516c6ba2074) )
ROM_REGION( 0x200000*8, "gfx1", ROMREGION_ERASEFF ) /* 16x16x8 */
ROMX_LOAD( "magbuble.u67", 0x000000, 0x080000, CRC(6355e57d) SHA1(5e9234dd474ddcf0a9e1001080f3de11c7d0ee55) , ROM_GROUPWORD | ROM_SKIP(6))
@@ -724,13 +724,13 @@ ROM_START( magicbub )
ROMX_LOAD( "magbuble.u70", 0x000006, 0x080000, CRC(37794837) SHA1(11597614e1e048544326fbbe281b364278d6350d) , ROM_GROUPWORD | ROM_SKIP(6))
ROM_REGION( 0x080000, "gfx2", 0 ) /* 16x16x4 */
- ROM_LOAD( "magbuble.u20", 0x000000, 0x020000, CRC(f70e3b8c) SHA1(d925c27bbd0f915228d22589a98e3ea7181a87ca) )
- ROM_LOAD( "magbuble.u21", 0x020000, 0x020000, CRC(ad082cf3) SHA1(0bc3cf6c54d47be4f1940192fc1585cb48767e97) )
- ROM_LOAD( "magbuble.u22", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) )
- ROM_LOAD( "magbuble.u23", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) )
+ ROM_LOAD( "u20.bin", 0x000000, 0x020000, CRC(f70e3b8c) SHA1(d925c27bbd0f915228d22589a98e3ea7181a87ca) )
+ ROM_LOAD( "u21.bin", 0x020000, 0x020000, CRC(ad082cf3) SHA1(0bc3cf6c54d47be4f1940192fc1585cb48767e97) )
+ ROM_LOAD( "u22.bin", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) )
+ ROM_LOAD( "u23.bin", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
- ROM_LOAD( "magbuble.131", 0x000000, 0x020000, CRC(03e04e89) SHA1(7d80e6a7be2322e32e40acae72bedd8d7e90ad33) )
+ ROM_LOAD( "u131.bin", 0x000000, 0x020000, CRC(03e04e89) SHA1(7d80e6a7be2322e32e40acae72bedd8d7e90ad33) )
ROM_END
@@ -741,7 +741,7 @@ ROM_START( magicbuba )
ROM_LOAD16_BYTE( "u32.bin", 0x000001, 0x040000, CRC(58f885ad) SHA1(e66f5bb1ac0acd9abc2def439af7f932c3a09cbd) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 Code */
- ROM_LOAD( "magbuble.143", 0x00000, 0x10000, CRC(04192753) SHA1(9c56ba70e1d074906ea1dc593c2a8516c6ba2074) )
+ ROM_LOAD( "u143.bin", 0x00000, 0x10000, CRC(04192753) SHA1(9c56ba70e1d074906ea1dc593c2a8516c6ba2074) )
ROM_REGION( 0x200000*8, "gfx1", ROMREGION_ERASEFF ) /* 16x16x8 */
ROMX_LOAD( "u67.bin", 0x000000, 0x080000, CRC(89523dcd) SHA1(edea2bbec615aa253d940bbc3bbdb33f6873a8ee) , ROM_GROUPWORD | ROM_SKIP(6))
@@ -754,13 +754,43 @@ ROM_START( magicbuba )
ROMX_LOAD( "u74.bin", 0x200006, 0x080000, CRC(81ff4910) SHA1(69241fe2d20b53984aa67f17d8da32e1b74ce696) , ROM_GROUPWORD | ROM_SKIP(6))
ROM_REGION( 0x080000, "gfx2", 0 ) /* 16x16x4 */
- ROM_LOAD( "magbuble.u20", 0x000000, 0x020000, CRC(f70e3b8c) SHA1(d925c27bbd0f915228d22589a98e3ea7181a87ca) )
- ROM_LOAD( "magbuble.u21", 0x020000, 0x020000, CRC(ad082cf3) SHA1(0bc3cf6c54d47be4f1940192fc1585cb48767e97) )
- ROM_LOAD( "magbuble.u22", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) )
- ROM_LOAD( "magbuble.u23", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) )
+ ROM_LOAD( "u20.bin", 0x000000, 0x020000, CRC(f70e3b8c) SHA1(d925c27bbd0f915228d22589a98e3ea7181a87ca) )
+ ROM_LOAD( "u21.bin", 0x020000, 0x020000, CRC(ad082cf3) SHA1(0bc3cf6c54d47be4f1940192fc1585cb48767e97) )
+ ROM_LOAD( "u22.bin", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) )
+ ROM_LOAD( "u23.bin", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) )
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
- ROM_LOAD( "magbuble.131", 0x000000, 0x020000, CRC(03e04e89) SHA1(7d80e6a7be2322e32e40acae72bedd8d7e90ad33) )
+ ROM_LOAD( "u131.bin", 0x000000, 0x020000, CRC(03e04e89) SHA1(7d80e6a7be2322e32e40acae72bedd8d7e90ad33) )
+
+ROM_END
+
+ROM_START( magicbubb ) /* Found on a YS-0211 PCB like below */
+
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "u33", 0x000000, 0x040000, CRC(db651555) SHA1(41dbf35147e1c646db585437b378529559d3decb) )
+ ROM_LOAD16_BYTE( "u32", 0x000001, 0x040000, CRC(c9cb4d88) SHA1(ee41b9b307b423db7a9d706dfa9718efefa3b625) )
+
+ ROM_REGION( 0x200000*8, "gfx1", ROMREGION_ERASEFF ) /* 16x16x8 */
+ ROMX_LOAD( "u67.bin", 0x000000, 0x080000, CRC(89523dcd) SHA1(edea2bbec615aa253d940bbc3bbdb33f6873a8ee) , ROM_GROUPWORD | ROM_SKIP(6))
+ ROMX_LOAD( "u68.bin", 0x000002, 0x080000, CRC(30e01a70) SHA1(3a98c2ef61307b44bf4e155663117199587ff4a4) , ROM_GROUPWORD | ROM_SKIP(6))
+ ROMX_LOAD( "u69.bin", 0x000004, 0x080000, CRC(fe357f52) SHA1(5aff9a0bf70fc8a78820c4d13838ad238852c594) , ROM_GROUPWORD | ROM_SKIP(6))
+ ROMX_LOAD( "u70.bin", 0x000006, 0x080000, CRC(1398a473) SHA1(f58bda6cbf5f553a9632d910b2ffef5d5bfedf18) , ROM_GROUPWORD | ROM_SKIP(6))
+ ROMX_LOAD( "u71.bin", 0x200000, 0x080000, CRC(0844e017) SHA1(2ae5c9da521fea7aa5811627d7b3eca82cdc0821) , ROM_GROUPWORD | ROM_SKIP(6))
+ ROMX_LOAD( "u72.bin", 0x200002, 0x080000, CRC(591db1cb) SHA1(636fbfe9e048d6418d43f947004b281f61081fd8) , ROM_GROUPWORD | ROM_SKIP(6))
+ ROMX_LOAD( "u73.bin", 0x200004, 0x080000, CRC(cb4f3c3c) SHA1(fbd804bb70f09c2471557675af4c5b4abedea3b2) , ROM_GROUPWORD | ROM_SKIP(6))
+ ROMX_LOAD( "u74.bin", 0x200006, 0x080000, CRC(81ff4910) SHA1(69241fe2d20b53984aa67f17d8da32e1b74ce696) , ROM_GROUPWORD | ROM_SKIP(6))
+
+ ROM_REGION( 0x080000, "gfx2", 0 ) /* 16x16x4 */
+ ROM_LOAD( "u20.bin", 0x000000, 0x020000, CRC(f70e3b8c) SHA1(d925c27bbd0f915228d22589a98e3ea7181a87ca) )
+ ROM_LOAD( "u21.bin", 0x020000, 0x020000, CRC(ad082cf3) SHA1(0bc3cf6c54d47be4f1940192fc1585cb48767e97) )
+ ROM_LOAD( "u22.bin", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) )
+ ROM_LOAD( "u23.bin", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) )
+
+ ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
+ ROM_LOAD( "u131", 0x000000, 0x040000, CRC(9bdb08e4) SHA1(4d8bdeb9b503b0959a6ae3f3fb3574350b01b1a1) )
+ ROM_RELOAD( 0x040000, 0x040000 )
+ ROM_RELOAD( 0x080000, 0x040000 )
+ ROM_RELOAD( 0x0c0000, 0x040000 )
ROM_END
@@ -772,6 +802,7 @@ YunSung YS-0211 based games:
Paparazzi (c) 1996 (no PCB label but looks identical)
Shocking (c) 1997
Bomb Kick (c) 1998
+Magic Bubble (c) 199?
PCB Layout
----------
@@ -956,10 +987,11 @@ ROM_END
***************************************************************************/
-GAME( 199?, magicbub, 0, magicbub, magicbub, yunsun16_state, magicbub, ROT0, "Yun Sung", "Magic Bubble", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 199?, magicbuba, magicbub, magicbub, magicbua, yunsun16_state, magicbub, ROT0, "Yun Sung", "Magic Bubble (Adult version)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1996, paprazzi, 0, shocking, paprazzi, driver_device, 0, ROT270, "Yun Sung", "Paparazzi", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1997, shocking, 0, shocking, shocking, driver_device, 0, ROT0, "Yun Sung", "Shocking", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1997, shockingk, shocking, shocking, shocking, driver_device, 0, ROT0, "Yun Sung", "Shocking (Korea)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1998, bombkick, 0, shocking, bombkick, driver_device, 0, ROT0, "Yun Sung", "Bomb Kick (set 1)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
-GAME( 1998, bombkicka, bombkick, shocking, bombkick, driver_device, 0, ROT0, "Yun Sung", "Bomb Kick (set 2)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 199?, magicbub, 0, magicbub, magicbub, yunsun16_state, magicbub, ROT0, "Yun Sung", "Magic Bubble", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 199?, magicbuba, magicbub, magicbub, magicbua, yunsun16_state, magicbub, ROT0, "Yun Sung", "Magic Bubble (Adult version, YS-1302 PCB)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 199?, magicbubb, magicbub, shocking, magicbua, driver_device, 0, ROT0, "Yun Sung", "Magic Bubble (Adult version, YS-0211 PCB)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1996, paprazzi, 0, shocking, paprazzi, driver_device, 0, ROT270, "Yun Sung", "Paparazzi", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1997, shocking, 0, shocking, shocking, driver_device, 0, ROT0, "Yun Sung", "Shocking", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1997, shockingk, shocking, shocking, shocking, driver_device, 0, ROT0, "Yun Sung", "Shocking (Korea)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1998, bombkick, 0, shocking, bombkick, driver_device, 0, ROT0, "Yun Sung", "Bomb Kick (set 1)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1998, bombkicka, bombkick, shocking, bombkick, driver_device, 0, ROT0, "Yun Sung", "Bomb Kick (set 2)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/atarigx2.h b/src/mame/includes/atarigx2.h
index 2fd3bf9fc94..c68d9fd6693 100644
--- a/src/mame/includes/atarigx2.h
+++ b/src/mame/includes/atarigx2.h
@@ -8,6 +8,8 @@
#include "machine/atarigen.h"
#include "audio/atarijsa.h"
+#include "includes/slapstic.h"
+
class atarigx2_state : public atarigen_state
{
@@ -19,7 +21,8 @@ public:
m_protection_base(*this, "protection_base"),
m_playfield_tilemap(*this, "playfield"),
m_alpha_tilemap(*this, "alpha"),
- m_rle(*this, "rle") { }
+ m_rle(*this, "rle")
+ { }
UINT16 m_playfield_base;
diff --git a/src/mame/includes/atarisy2.h b/src/mame/includes/atarisy2.h
index f350e5d9d23..05345676cbe 100644
--- a/src/mame/includes/atarisy2.h
+++ b/src/mame/includes/atarisy2.h
@@ -10,6 +10,7 @@
#include "video/atarimo.h"
#include "cpu/m6502/m6502.h"
#include "cpu/t11/t11.h"
+#include "slapstic.h"
class atarisy2_state : public atarigen_state
{
@@ -25,7 +26,9 @@ public:
m_alpha_tilemap(*this, "alpha"),
m_rombank1(*this, "rombank1"),
m_rombank2(*this, "rombank2"),
- m_generic_paletteram_16(*this, "paletteram") { }
+ m_generic_paletteram_16(*this, "paletteram"),
+ m_slapstic(*this, "slapstic")
+ { }
required_device<t11_device> m_maincpu;
required_device<m6502_device> m_audiocpu;
@@ -50,6 +53,7 @@ public:
required_shared_ptr<UINT16> m_rombank1;
required_shared_ptr<UINT16> m_rombank2;
required_shared_ptr<UINT16> m_generic_paletteram_16;
+ required_device<atari_slapstic_device> m_slapstic;
UINT8 m_sound_reset_state;
diff --git a/src/mame/includes/atetris.h b/src/mame/includes/atetris.h
index 612f843f85c..5d0d258aa36 100644
--- a/src/mame/includes/atetris.h
+++ b/src/mame/includes/atetris.h
@@ -4,6 +4,8 @@
*************************************************************************/
+#include "includes/slapstic.h"
+
class atetris_state : public driver_device
{
public:
@@ -13,7 +15,9 @@ public:
m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_screen(*this, "screen") { }
+ m_screen(*this, "screen"),
+ m_slapstic_device(*this, "slapstic")
+ { }
required_shared_ptr<UINT8> m_nvram;
required_shared_ptr<UINT8> m_videoram;
@@ -40,4 +44,5 @@ public:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
+ optional_device<atari_slapstic_device> m_slapstic_device;
};
diff --git a/src/mame/includes/harddriv.h b/src/mame/includes/harddriv.h
index 7025820e41b..2ac368ec555 100644
--- a/src/mame/includes/harddriv.h
+++ b/src/mame/includes/harddriv.h
@@ -13,7 +13,6 @@
#include "cpu/dsp32/dsp32.h"
#include "audio/atarijsa.h"
#include "sound/dac.h"
-#include "machine/atarigen.h"
#include "machine/mc68681.h"
#include "machine/asic65.h"
#include "machine/timekpr.h"
@@ -21,45 +20,29 @@
#define HARDDRIV_MASTER_CLOCK XTAL_32MHz
#define HARDDRIV_GSP_CLOCK XTAL_48MHz
-class harddriv_state : public atarigen_state
+extern const device_type HARDDRIV_DEVICE;
+extern const device_type HARDDRIV_BOARD_DEVICE;
+extern const device_type HARDDRIVC_BOARD_DEVICE;
+extern const device_type RACEDRIV_BOARD_DEVICE;
+extern const device_type RACEDRIVC_BOARD_DEVICE;
+extern const device_type RACEDRIVC1_BOARD_DEVICE;
+extern const device_type RACEDRIVB1_BOARD_DEVICE;
+extern const device_type RACEDRIVC_PANORAMA_SIDE_BOARD_DEVICE;
+extern const device_type STUNRUN_BOARD_DEVICE;
+extern const device_type STEELTAL_BOARD_DEVICE;
+extern const device_type STEELTAL1_BOARD_DEVICE;
+extern const device_type STEELTALP_BOARD_DEVICE;
+extern const device_type STRTDRIV_BOARD_DEVICE;
+extern const device_type HDRIVAIR_BOARD_DEVICE;
+extern const device_type HDRIVAIRP_BOARD_DEVICE;
+
+
+class harddriv_state : public device_t
+ /* public device_video_interface */
{
public:
- harddriv_state(const machine_config &mconfig, device_type type, const char *tag)
- : atarigen_state(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_gsp(*this, "gsp"),
- m_msp(*this, "msp"),
- m_adsp(*this, "adsp"),
- m_soundcpu(*this, "soundcpu"),
- m_sounddsp(*this, "sounddsp"),
- m_jsacpu(*this, "jsacpu"),
- m_dsp32(*this, "dsp32"),
- m_ds3sdsp(*this, "ds3sdsp"),
- m_ds3xdsp(*this, "ds3xdsp"),
- m_ds3dac1(*this, "ds3dac1"),
- m_ds3dac2(*this, "ds3dac2"),
- m_jsa(*this, "jsa"),
- m_msp_ram(*this, "msp_ram"),
- m_dsk_10c(*this, "dsk_10c"),
- m_dsk_30c(*this, "dsk_30c"),
- m_200e(*this, "200e"),
- m_210e(*this, "210e"),
- m_adsp_data_memory(*this, "adsp_data"),
- m_adsp_pgm_memory(*this, "adsp_pgm_memory"),
- m_ds3sdsp_data_memory(*this, "ds3sdsp_data"),
- m_ds3sdsp_pgm_memory(*this, "ds3sdsp_pgm"),
- m_ds3xdsp_pgm_memory(*this, "ds3xdsp_pgm"),
- m_sounddsp_ram(*this, "sounddsp_ram"),
- m_gsp_vram(*this, "gsp_vram", 16),
- m_gsp_control_lo(*this, "gsp_control_lo"),
- m_gsp_control_hi(*this, "gsp_control_hi"),
- m_gsp_paletteram_lo(*this, "gsp_palram_lo"),
- m_gsp_paletteram_hi(*this, "gsp_palram_hi"),
- m_ds3sdsp_internal_timer(*this, "ds3sdsp_timer"),
- m_ds3xdsp_internal_timer(*this, "ds3xdsp_timer"),
- m_dac(*this, "dac"),
- m_duart(*this, "duartn68681"),
- m_asic65(*this, "asic65") {}
+ harddriv_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
required_device<cpu_device> m_maincpu;
required_device<tms34010_device> m_gsp;
@@ -268,22 +251,30 @@ public:
void init_driver_sound();
void racedrivc_init_common(offs_t gsp_protection);
void steeltal_init_common(offs_t ds3_transfer_pc, int proto_sloop);
- DECLARE_DRIVER_INIT(strtdriv);
- DECLARE_DRIVER_INIT(harddrivc);
- DECLARE_DRIVER_INIT(hdrivairp);
- DECLARE_DRIVER_INIT(racedriv);
- DECLARE_DRIVER_INIT(hdrivair);
- DECLARE_DRIVER_INIT(steeltal1);
- DECLARE_DRIVER_INIT(racedrivc);
- DECLARE_DRIVER_INIT(steeltal);
- DECLARE_DRIVER_INIT(racedrivc1);
- DECLARE_DRIVER_INIT(racedrivb1);
- DECLARE_DRIVER_INIT(harddriv);
- DECLARE_DRIVER_INIT(steeltalp);
- DECLARE_DRIVER_INIT(stunrun);
- DECLARE_MACHINE_START(harddriv);
- DECLARE_MACHINE_RESET(harddriv);
- DECLARE_VIDEO_START(harddriv);
+
+ void init_strtdriv(void);
+
+ void init_harddriv(void);
+
+ void init_harddrivc(void);
+
+ void init_racedriv(void);
+ void init_racedrivb1(void);
+
+ void init_racedrivc(void);
+ void init_racedrivc1(void);
+
+ void init_hdrivair(void);
+ void init_hdrivairp(void);
+
+ void init_steeltal(void);
+ void init_steeltal1(void);
+ void init_steeltalp(void);
+
+ void init_stunrun(void);
+ void init_racedrivc_panorama_side();
+
+ void init_video();
INTERRUPT_GEN_MEMBER(hd68k_irq_gen);
TIMER_CALLBACK_MEMBER(deferred_adsp_bank_switch);
TIMER_CALLBACK_MEMBER(rddsp32_sync_cb);
@@ -310,6 +301,7 @@ public:
DECLARE_READ16_MEMBER( hd68k_msp_io_r );
DECLARE_WRITE16_MEMBER( hd68k_msp_io_w );
+ DECLARE_READ16_MEMBER( hd68k_a80000_r );
DECLARE_READ16_MEMBER( hd68k_port0_r );
DECLARE_READ16_MEMBER( hd68k_adc8_r );
DECLARE_READ16_MEMBER( hd68k_adc12_r );
@@ -469,4 +461,195 @@ public:
TMS340X0_SCANLINE_IND16_CB_MEMBER(scanline_driver);
TMS340X0_SCANLINE_IND16_CB_MEMBER(scanline_multisync);
+
+ UINT8 m_sound_int_state;
+ UINT8 m_video_int_state;
+
+ optional_device<palette_device> m_palette;
+ int get_hblank(screen_device &screen) const { return (screen.hpos() > (screen.width() * 9 / 10)); }
+ WRITE16_MEMBER( watchdog_reset16_w );
+ INTERRUPT_GEN_MEMBER(video_int_gen);
+ DECLARE_WRITE_LINE_MEMBER(sound_int_write_line);
+ optional_device<atari_slapstic_device> m_slapstic_device;
+protected:
+ //virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+ virtual void device_reset();
+};
+
+/* Hard Drivin' */
+
+class harddriv_board_device_state : public harddriv_state
+{
+public:
+ harddriv_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+// virtual void device_reset();
+};
+
+/* Hard Drivin' Compact */
+
+class harddrivc_board_device_state : public harddriv_state
+{
+public:
+ harddrivc_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+// virtual void device_reset();
+};
+
+/* Race Drivin' */
+
+class racedriv_board_device_state : public harddriv_state
+{
+public:
+ racedriv_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ DECLARE_WRITE_LINE_MEMBER(tx_a);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+// virtual void device_reset();
+};
+
+class racedrivb1_board_device_state : public racedriv_board_device_state
+{
+public:
+ racedrivb1_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ racedriv_board_device_state(mconfig, tag, owner, clock)
+ {};
+
+protected:
+ virtual void device_start();
+};
+
+/* Race Drivin' Compact */
+
+class racedrivc_board_device_state : public harddriv_state
+{
+public:
+ racedrivc_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+// virtual void device_reset();
+};
+
+class racedrivc1_board_device_state : public racedrivc_board_device_state
+{
+public:
+ racedrivc1_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ racedrivc_board_device_state(mconfig, tag, owner, clock)
+ {};
+protected:
+ virtual void device_start();
+};
+
+class racedrivc_panorama_side_board_device_state : public racedrivc_board_device_state
+{
+public:
+ racedrivc_panorama_side_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ racedrivc_board_device_state(mconfig, tag, owner, clock)
+ {};
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+};
+
+
+/* Stun Runner */
+
+class stunrun_board_device_state : public harddriv_state
+{
+public:
+ stunrun_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+// virtual void device_reset();
+};
+
+/* Steel Talons */
+
+class steeltal_board_device_state : public harddriv_state
+{
+public:
+ steeltal_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+// virtual void device_reset();
+};
+
+class steeltal1_board_device_state : public steeltal_board_device_state
+{
+public:
+ steeltal1_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ steeltal_board_device_state(mconfig, tag, owner, clock)
+ {};
+
+protected:
+ virtual void device_start();
+};
+
+class steeltalp_board_device_state : public steeltal_board_device_state
+{
+public:
+ steeltalp_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ steeltal_board_device_state(mconfig, tag, owner, clock)
+ {};
+
+protected:
+ virtual void device_start();
+};
+
+
+
+/* Street Drivin' */
+
+class strtdriv_board_device_state : public harddriv_state
+{
+public:
+ strtdriv_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+// virtual void device_reset();
};
+
+/* Hard Drivin' Airbourne */
+
+class hdrivair_board_device_state : public harddriv_state
+{
+public:
+ hdrivair_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual void device_start();
+// virtual void device_reset();
+};
+
+class hdrivairp_board_device_state : public hdrivair_board_device_state
+{
+public:
+ hdrivairp_board_device_state(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ hdrivair_board_device_state(mconfig, tag, owner, clock)
+ {};
+
+protected:
+ virtual void device_start();
+};
+
+
+
+
diff --git a/src/mame/includes/konamigx.h b/src/mame/includes/konamigx.h
index 0a4f1a497cd..b0bc8c01441 100644
--- a/src/mame/includes/konamigx.h
+++ b/src/mame/includes/konamigx.h
@@ -199,6 +199,11 @@ public:
UINT16 m_prot_data[0x20];
+ UINT16 *m_gx_spriteram;
+
+ // mirrored K054338 settings
+ int *m_K054338_shdRGB;
+
// 1st-Tier GX/MW Variables
// frequently used registers
int m_k053247_vrcbk[4];
@@ -236,14 +241,17 @@ public:
unsupported flipping modes (probably due to the way it's hooked up to the
rest of the chips) which is causing entirely the wrong output.
- -- furthermore video/konamigx.c contains it's own implementation of
- the K053936_zoom_draw named K053936GP_zoom_draw ...
+ -- furthermore video\k053936.c contains an implementation of
+ the K053936_zoom_draw named K053936GP_zoom_draw that's only used in konamigx ...
*/
bitmap_ind16 *m_gxtype1_roz_dstbitmap;
bitmap_ind16 *m_gxtype1_roz_dstbitmap2;
rectangle m_gxtype1_roz_dstbitmapclip;
+
+ int m_konamigx_type3_psac2_actual_bank;
+ //int m_konamigx_type3_psac2_actual_last_bank = 0;
};
// Sprite Callbacks
diff --git a/src/mame/includes/maygay1b.h b/src/mame/includes/maygay1b.h
index 0fc609a833a..44c2b7048fe 100644
--- a/src/mame/includes/maygay1b.h
+++ b/src/mame/includes/maygay1b.h
@@ -1,7 +1,7 @@
-#define VERBOSE 1
+#define VERBOSE 0
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
#define M1_MASTER_CLOCK (XTAL_8MHz)
@@ -20,6 +20,9 @@
#include "sound/2413intf.h"
#include "sound/okim6376.h"
#include "machine/nvram.h"
+#include "sound/upd7759.h"
+
+#include "sound/okim6295.h"
class maygay1b_state : public driver_device
{
@@ -30,6 +33,8 @@ public:
m_vfd(*this, "vfd"),
m_ay(*this, "aysnd"),
m_msm6376(*this, "msm6376"),
+ m_upd7759(*this, "upd"),
+ m_okim6295(*this, "oki"),
m_duart68681(*this, "duart68681"),
m_sw1_port(*this, "SW1"),
m_sw2_port(*this, "SW2"),
@@ -38,13 +43,16 @@ public:
m_s4_port(*this, "STROBE4"),
m_s5_port(*this, "STROBE5"),
m_s6_port(*this, "STROBE6"),
- m_s7_port(*this, "STROBE7")
+ m_s7_port(*this, "STROBE7"),
+ m_bank1(*this, "bank1")
{}
required_device<cpu_device> m_maincpu;
optional_device<s16lf01_t> m_vfd;
required_device<ay8910_device> m_ay;
optional_device<okim6376_device> m_msm6376;
+ optional_device<upd7759_device> m_upd7759;
+ optional_device<okim6295_device> m_okim6295;
required_device<mc68681_device> m_duart68681;
required_ioport m_sw1_port;
required_ioport m_sw2_port;
@@ -54,6 +62,7 @@ public:
required_ioport m_s5_port;
required_ioport m_s6_port;
required_ioport m_s7_port;
+ required_memory_bank m_bank1;
UINT8 m_lamppos;
int m_lamp_strobe;
@@ -63,8 +72,8 @@ public:
int m_RAMEN;
int m_ALARMEN;
int m_PSUrelay;
+ bool m_Vmm;
int m_WDOG;
- int m_SRSEL;
int m_NMIENABLE;
int m_meter;
TIMER_DEVICE_CALLBACK_MEMBER( maygay1b_nmitimer_callback );
@@ -89,12 +98,22 @@ public:
DECLARE_READ8_MEMBER(m1_meter_r);
DECLARE_READ8_MEMBER(m1_firq_clr_r);
DECLARE_READ8_MEMBER(m1_firq_trg_r);
+ DECLARE_READ8_MEMBER(m1_firq_nec_r);
+ DECLARE_READ8_MEMBER(nec_reset_r);
+ DECLARE_WRITE8_MEMBER(nec_bank0_w);
+ DECLARE_WRITE8_MEMBER(nec_bank1_w);
DECLARE_WRITE_LINE_MEMBER(duart_irq_handler);
DECLARE_READ8_MEMBER(m1_duart_r);
DECLARE_DRIVER_INIT(m1);
+ DECLARE_DRIVER_INIT(m1common);
+ DECLARE_DRIVER_INIT(m1nec);
virtual void machine_start();
virtual void machine_reset();
void cpu0_firq(int data);
- void cpu0_nmi(int data);
+ void cpu0_nmi();
void m1_stepper_reset();
};
+
+MACHINE_CONFIG_EXTERN( maygay_m1 );
+MACHINE_CONFIG_EXTERN( maygay_m1_nec );
+MACHINE_CONFIG_EXTERN( maygay_m1_empire );
diff --git a/src/mame/includes/pgm.h b/src/mame/includes/pgm.h
index eff96270e29..6c5ea3ada51 100644
--- a/src/mame/includes/pgm.h
+++ b/src/mame/includes/pgm.h
@@ -411,6 +411,7 @@ public:
DECLARE_DRIVER_INIT(dw2v100x);
DECLARE_DRIVER_INIT(drgw2c);
DECLARE_DRIVER_INIT(drgw2j);
+ DECLARE_DRIVER_INIT(drgw2hk);
DECLARE_MACHINE_RESET(drgw2);
diff --git a/src/mame/includes/psychic5.h b/src/mame/includes/psychic5.h
index ed97cb56c3b..9fd56c781ba 100644
--- a/src/mame/includes/psychic5.h
+++ b/src/mame/includes/psychic5.h
@@ -1,3 +1,5 @@
+#include "machine/bankdev.h"
+
class psychic5_state : public driver_device
{
public:
@@ -7,23 +9,25 @@ public:
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_vrambank(*this, "vrambank"),
+ m_fg_videoram(*this, "fg_videoram"),
+ m_bg_videoram(*this, "bg_videoram"),
+ m_bg_control(*this, "bg_control"),
+
+ m_ps5_palette_ram_bg(*this, "palette_ram_bg"),
+ m_ps5_palette_ram_sp(*this, "palette_ram_sp"),
+ m_ps5_palette_ram_tx(*this, "palette_ram_tx")
+
+ { }
UINT8 m_bank_latch;
UINT8 m_ps5_vram_page;
UINT8 m_bg_clip_mode;
UINT8 m_title_screen;
- UINT8 m_bg_status;
- UINT8 *m_ps5_pagedram[2];
- UINT8 *m_bg_videoram;
- UINT8 *m_ps5_dummy_bg_ram;
- UINT8 *m_ps5_io_ram;
- UINT8 *m_ps5_palette_ram;
- UINT8 *m_fg_videoram;
+
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
- int m_bg_palette_ram_base;
- int m_bg_palette_base;
UINT16 m_palette_intensity;
UINT8 m_bombsa_unknown;
int m_sx1;
@@ -38,9 +42,6 @@ public:
DECLARE_READ8_MEMBER(psychic5_vram_page_select_r);
DECLARE_WRITE8_MEMBER(psychic5_vram_page_select_w);
DECLARE_WRITE8_MEMBER(psychic5_title_screen_w);
- DECLARE_READ8_MEMBER(psychic5_paged_ram_r);
- DECLARE_WRITE8_MEMBER(psychic5_paged_ram_w);
- DECLARE_WRITE8_MEMBER(bombsa_paged_ram_w);
DECLARE_WRITE8_MEMBER(bombsa_unknown_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
@@ -48,11 +49,10 @@ public:
DECLARE_VIDEO_START(psychic5);
DECLARE_VIDEO_RESET(psychic5);
DECLARE_VIDEO_START(bombsa);
- DECLARE_VIDEO_RESET(bombsa);
UINT32 screen_update_psychic5(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
UINT32 screen_update_bombsa(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(psychic5_scanline);
- void psychic5_change_palette(int color, int offset);
+ void psychic5_change_palette(int offset, UINT8* palram, int palbase);
void psychic5_change_bg_palette(int color, int lo_offs, int hi_offs);
void set_background_palette_intensity();
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -62,4 +62,21 @@ public:
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ optional_device<address_map_bank_device> m_vrambank;
+ required_shared_ptr<UINT8> m_fg_videoram;
+ required_shared_ptr<UINT8> m_bg_videoram;
+ required_shared_ptr<UINT8> m_bg_control;
+
+ required_shared_ptr<UINT8> m_ps5_palette_ram_bg;
+ required_shared_ptr<UINT8> m_ps5_palette_ram_sp;
+ required_shared_ptr<UINT8> m_ps5_palette_ram_tx;
+
+
+
+ DECLARE_WRITE8_MEMBER(fg_videoram_w);
+ DECLARE_WRITE8_MEMBER(bg_videoram_w);
+ DECLARE_WRITE8_MEMBER(sprite_col_w);
+ DECLARE_WRITE8_MEMBER(bg_col_w);
+ DECLARE_WRITE8_MEMBER(tx_col_w);
+
};
diff --git a/src/mame/includes/segas18.h b/src/mame/includes/segas18.h
index d7b1bcffcc0..2cf27fddfbd 100644
--- a/src/mame/includes/segas18.h
+++ b/src/mame/includes/segas18.h
@@ -55,6 +55,7 @@ public:
DECLARE_DRIVER_INIT(generic_5874);
DECLARE_DRIVER_INIT(wwally);
DECLARE_DRIVER_INIT(generic_5987);
+ DECLARE_DRIVER_INIT(hamaway);
// memory mapping
void memory_mapper(sega_315_5195_mapper_device &mapper, UINT8 index);
@@ -63,6 +64,7 @@ public:
// read/write handlers
DECLARE_WRITE16_MEMBER( rom_5987_bank_w );
+ DECLARE_WRITE16_MEMBER( rom_837_7525_bank_w );
DECLARE_READ16_MEMBER( io_chip_r );
DECLARE_WRITE16_MEMBER( io_chip_w );
DECLARE_READ16_MEMBER( misc_io_r );
@@ -90,6 +92,8 @@ public:
DECLARE_WRITE16_MEMBER( sega_tileram_0_w ) { m_segaic16vid->segaic16_tileram_0_w(space,offset,data,mem_mask); };
DECLARE_WRITE16_MEMBER( sega_textram_0_w ) { m_segaic16vid->segaic16_textram_0_w(space,offset,data,mem_mask); };
+
+ DECLARE_WRITE_LINE_MEMBER(ym3438_irq_handler);
protected:
// timer IDs
@@ -104,7 +108,9 @@ protected:
ROM_BOARD_INVALID,
ROM_BOARD_171_SHADOW, // 171-???? -- used by shadow dancer
ROM_BOARD_171_5874, // 171-5874
- ROM_BOARD_171_5987 // 171-5987
+ ROM_BOARD_171_5987, // 171-5987
+ ROM_BOARD_837_7525 // Hammer Away proto
+
};
// device overrides
diff --git a/src/mame/includes/slapstic.h b/src/mame/includes/slapstic.h
index 1466b220124..700eb92685b 100644
--- a/src/mame/includes/slapstic.h
+++ b/src/mame/includes/slapstic.h
@@ -9,10 +9,173 @@
*************************************************************************/
-/*----------- defined in machine/slapstic.c -----------*/
+#pragma once
-void slapstic_init(running_machine &machine, int chip);
-void slapstic_reset(void);
+#ifndef __SLAPSTIC__
+#define __SLAPSTIC__
-int slapstic_bank(void);
-int slapstic_tweak(address_space &space, offs_t offset);
+#include "emu.h"
+#include "cpu/m6800/m6800.h"
+#include "cpu/m68000/m68000.h"
+
+
+extern const device_type SLAPSTIC;
+
+#define MCFG_SLAPSTIC_ADD(_tag) \
+ MCFG_DEVICE_ADD(_tag, SLAPSTIC, 0)
+
+
+/*************************************
+ *
+ * Debugging
+ *
+ *************************************/
+
+#define LOG_SLAPSTIC (0)
+
+
+
+/*************************************
+ *
+ * Structure of slapstic params
+ *
+ *************************************/
+
+struct mask_value
+{
+ int mask, value;
+};
+
+
+struct slapstic_data
+{
+ int bankstart;
+ int bank[4];
+
+ struct mask_value alt1;
+ struct mask_value alt2;
+ struct mask_value alt3;
+ struct mask_value alt4;
+ int altshift;
+
+ struct mask_value bit1;
+ struct mask_value bit2c0;
+ struct mask_value bit2s0;
+ struct mask_value bit2c1;
+ struct mask_value bit2s1;
+ struct mask_value bit3;
+
+ struct mask_value add1;
+ struct mask_value add2;
+ struct mask_value addplus1;
+ struct mask_value addplus2;
+ struct mask_value add3;
+};
+
+
+
+/*************************************
+ *
+ * Shorthand
+ *
+ *************************************/
+
+#define UNKNOWN 0xffff
+#define NO_BITWISE \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }
+#define NO_ADDITIVE \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }, \
+ { UNKNOWN,UNKNOWN }
+
+#define MATCHES_MASK_VALUE(val, maskval) (((val) & (maskval).mask) == (maskval).value)
+
+
+
+/*************************************
+ *
+ * Constants
+ *
+ *************************************/
+
+enum
+{
+ DISABLED,
+ ENABLED,
+ ALTERNATE1,
+ ALTERNATE2,
+ ALTERNATE3,
+ BITWISE1,
+ BITWISE2,
+ BITWISE3,
+ ADDITIVE1,
+ ADDITIVE2,
+ ADDITIVE3
+};
+
+
+#define MCFG_SLAPSTIC_68K_ACCESS(_type) \
+ atari_slapstic_device::static_set_access68k(*device, _type);
+
+
+
+class atari_slapstic_device : public device_t
+{
+public:
+ // construction/destruction
+ atari_slapstic_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ void slapstic_init(running_machine &machine, int chip);
+ void slapstic_reset(void);
+
+ int slapstic_bank(void);
+ int slapstic_tweak(address_space &space, offs_t offset);
+
+ int alt2_kludge(address_space &space, offs_t offset);
+
+ static void static_set_access68k(device_t &device, int type)
+ {
+ atari_slapstic_device &dev = downcast<atari_slapstic_device &>(device);
+ dev.access_68k = type;
+ }
+
+
+ UINT8 state;
+ UINT8 current_bank;
+ int access_68k;
+
+ UINT8 alt_bank;
+ UINT8 bit_bank;
+ UINT8 add_bank;
+ UINT8 bit_xor;
+
+ struct slapstic_data slapstic;
+
+
+ void slapstic_log(running_machine &machine, offs_t offset);
+ FILE *slapsticlog;
+
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+
+private:
+
+
+
+
+};
+
+
+
+
+#endif
diff --git a/src/mame/includes/starwars.h b/src/mame/includes/starwars.h
index babed5b9951..ddc9cc89be0 100644
--- a/src/mame/includes/starwars.h
+++ b/src/mame/includes/starwars.h
@@ -5,6 +5,7 @@
***************************************************************************/
#include "machine/6532riot.h"
+#include "includes/slapstic.h"
class starwars_state : public driver_device
@@ -15,7 +16,9 @@ public:
m_riot(*this, "riot"),
m_mathram(*this, "mathram"),
m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu") { }
+ m_audiocpu(*this, "audiocpu"),
+ m_slapstic_device(*this, "slapstic")
+ { }
UINT8 m_sound_data;
UINT8 m_main_data;
@@ -78,4 +81,5 @@ public:
void esb_slapstic_tweak(address_space &space, offs_t offset);
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
+ optional_device<atari_slapstic_device> m_slapstic_device;
};
diff --git a/src/mame/includes/stv.h b/src/mame/includes/stv.h
index 96d6fa09ab7..4fafe420c46 100644
--- a/src/mame/includes/stv.h
+++ b/src/mame/includes/stv.h
@@ -9,6 +9,8 @@
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
+#include "machine/315-5881_crypt.h"
+
#define MAX_FILTERS (24)
#define MAX_BLOCKS (200)
#define MAX_DIR_SIZE (256*1024)
@@ -167,6 +169,8 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+
+
bitmap_rgb32 m_tmpbitmap;
DECLARE_VIDEO_START(stv_vdp2);
UINT32 screen_update_saturn(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -694,7 +698,8 @@ public:
stv_state(const machine_config &mconfig, device_type type, const char *tag)
: saturn_state(mconfig, type, tag),
m_adsp(*this, "adsp"),
- m_adsp_pram(*this, "adsp_pram")
+ m_adsp_pram(*this, "adsp_pram"),
+ m_cryptdevice(*this, "315_5881")
{
}
@@ -829,6 +834,9 @@ public:
DECLARE_WRITE32_MEMBER( decathlt_prot2_w );
void write_prot_data(UINT32 data, UINT32 mem_mask, int offset, int which);
void install_decathlt_protection();
+
+ optional_device<sega_315_5881_crypt_device> m_cryptdevice;
+ UINT16 crypt_read_callback(UINT32 addr);
};
diff --git a/src/mame/includes/tx1.h b/src/mame/includes/tx1.h
index 6e5b057b4b4..88ef4d11d84 100644
--- a/src/mame/includes/tx1.h
+++ b/src/mame/includes/tx1.h
@@ -193,8 +193,7 @@ public:
void buggyboy_draw_char(UINT8 *bitmap, bool wide);
void buggyboy_get_roadpix(int screen, int ls161, UINT8 rva0_6, UINT8 sld, UINT32 *_rorev,
- UINT8 *rc0, UINT8 *rc1, UINT8 *rc2, UINT8 *rc3,
- const UINT8 *rom, const UINT8 *prom0, const UINT8 *prom1, const UINT8 *prom2);
+ UINT8 *rc0, UINT8 *rc1, UINT8 *rc2, UINT8 *rc3);
void buggyboy_draw_road(UINT8 *bitmap);
void buggybjr_draw_road(UINT8 *bitmap);
void buggyboy_draw_objs(UINT8 *bitmap, bool wide);
diff --git a/src/mame/layout/newufo.lay b/src/mame/layout/newufo.lay
new file mode 100644
index 00000000000..2f32207e91d
--- /dev/null
+++ b/src/mame/layout/newufo.lay
@@ -0,0 +1,267 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
+ <element name="static_pink"><rect><color red="0.9" green="0.55" blue="0.75" /></rect></element>
+
+ <element name="text_ufored">
+ <text string="~UFO~">
+ <color red="1.0" green="0.3" blue="0.2" />
+ </text>
+ </element>
+ <element name="text_ufoblue">
+ <text string="~UFO~">
+ <color red="0.2" green="0.3" blue="1.0" />
+ </text>
+ </element>
+
+ <element name="text_x">
+ <text string="X:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_y">
+ <text string="Y:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_z">
+ <text string="Z:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_c">
+ <text string="C:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+
+ <element name="digit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.3" blue="0.2" />
+ </led7seg>
+ </element>
+
+ <element name="counter" defstate="0">
+ <simplecounter maxstate="999" digits="3" align="1">
+ <color red="0.95" green="0.95" blue="0.95" />
+ </simplecounter>
+ </element>
+
+ <element name="lamp_b1" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <disk state="0">
+ <color red="0.7" green="0.7" blue="0.7" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1.0" height="0.6" />
+ </text>
+ </element>
+ <element name="lamp_b2" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <disk state="0">
+ <color red="0.7" green="0.7" blue="0.7" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1.0" height="0.6" />
+ </text>
+ </element>
+
+ <element name="lamp_rg0" defstate="0">
+ <disk state="0">
+ <color red="0.2" green="0.05" blue="0.0" />
+ </disk>
+ <disk state="1">
+ <color red="0.4" green="1.0" blue="0.3" />
+ </disk>
+ <disk state="2">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ <disk state="3">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ </element>
+ <element name="lamp_rg1" defstate="0">
+ <disk state="0">
+ <color red="0.2" green="0.05" blue="0.0" />
+ </disk>
+ <disk state="1">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ <disk state="2">
+ <color red="0.4" green="1.0" blue="0.3" />
+ </disk>
+ <disk state="3">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="200" top="0" bottom="90" />
+ <bezel element="static_black">
+ <bounds left="0" right="200" top="0" bottom="90" />
+ </bezel>
+
+ <bezel element="static_grey">
+ <bounds x="99" y="0" width="2" height="80" />
+ </bezel>
+
+ <!-- control panel -->
+
+ <bezel element="static_pink">
+ <bounds x="0" y="60" width="200" height="30" />
+ </bezel>
+
+ <bezel name="lamp0" element="lamp_b1" inputtag="IN1" inputmask="0x20" >
+ <bounds x="30" y="70" width="10" height="10"/>
+ </bezel>
+ <bezel name="lamp1" element="lamp_b2" inputtag="IN1" inputmask="0x40" >
+ <bounds x="43" y="70" width="10" height="10"/>
+ </bezel>
+
+ <bezel name="lamp2" element="lamp_b1" inputtag="IN2" inputmask="0x20" >
+ <bounds x="147" y="70" width="10" height="10"/>
+ </bezel>
+ <bezel name="lamp3" element="lamp_b2" inputtag="IN2" inputmask="0x40" >
+ <bounds x="160" y="70" width="10" height="10"/>
+ </bezel>
+
+ <bezel element="static_black">
+ <bounds x="60" y="70" width="12" height="17" />
+ </bezel>
+ <bezel name="digit0" element="digit">
+ <bounds x="61" y="71" width="10" height="15" />
+ </bezel>
+
+ <bezel element="static_black">
+ <bounds x="128" y="70" width="12" height="17" />
+ </bezel>
+ <bezel name="digit1" element="digit">
+ <bounds x="129" y="71" width="10" height="15" />
+ </bezel>
+
+
+ <!-- left ufo info -->
+
+ <bezel element="text_x">
+ <bounds x="5" y="5" width="10" height="4" />
+ </bezel>
+ <bezel element="text_y">
+ <bounds x="5" y="10" width="10" height="4" />
+ </bezel>
+ <bezel element="text_z">
+ <bounds x="5" y="15" width="10" height="4" />
+ </bezel>
+ <bezel element="text_c">
+ <bounds x="5" y="20" width="10" height="4" />
+ </bezel>
+
+ <bezel name="counter0" element="counter">
+ <bounds x="12" y="5" width="20" height="4" />
+ </bezel>
+ <bezel name="counter1" element="counter">
+ <bounds x="12" y="10" width="20" height="4" />
+ </bezel>
+ <bezel name="counter2" element="counter">
+ <bounds x="12" y="15" width="20" height="4" />
+ </bezel>
+ <bezel name="counter3" element="counter">
+ <bounds x="12" y="20" width="20" height="4" />
+ </bezel>
+
+ <bezel element="text_ufored">
+ <bounds x="25" y="25" width="50" height="14" />
+ </bezel>
+
+ <bezel name="lamp10" element="lamp_rg0">
+ <bounds x="31" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg1">
+ <bounds x="38" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg0">
+ <bounds x="45" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg1">
+ <bounds x="52" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg0">
+ <bounds x="59" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg1">
+ <bounds x="66" y="44" width="3" height="3" />
+ </bezel>
+
+ <!-- right ufo info -->
+
+ <bezel element="text_x">
+ <bounds x="105" y="5" width="10" height="4" />
+ </bezel>
+ <bezel element="text_y">
+ <bounds x="105" y="10" width="10" height="4" />
+ </bezel>
+ <bezel element="text_z">
+ <bounds x="105" y="15" width="10" height="4" />
+ </bezel>
+ <bezel element="text_c">
+ <bounds x="105" y="20" width="10" height="4" />
+ </bezel>
+
+ <bezel name="counter4" element="counter">
+ <bounds x="112" y="5" width="20" height="4" />
+ </bezel>
+ <bezel name="counter5" element="counter">
+ <bounds x="112" y="10" width="20" height="4" />
+ </bezel>
+ <bezel name="counter6" element="counter">
+ <bounds x="112" y="15" width="20" height="4" />
+ </bezel>
+ <bezel name="counter7" element="counter">
+ <bounds x="112" y="20" width="20" height="4" />
+ </bezel>
+
+ <bezel element="text_ufoblue">
+ <bounds x="125" y="25" width="50" height="14" />
+ </bezel>
+
+ <bezel name="lamp11" element="lamp_rg0">
+ <bounds x="131" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp11" element="lamp_rg1">
+ <bounds x="138" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp11" element="lamp_rg0">
+ <bounds x="145" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp11" element="lamp_rg1">
+ <bounds x="152" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp11" element="lamp_rg0">
+ <bounds x="159" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp11" element="lamp_rg1">
+ <bounds x="166" y="44" width="3" height="3" />
+ </bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/racedrivpan.lay b/src/mame/layout/racedrivpan.lay
new file mode 100644
index 00000000000..3ca77bae895
--- /dev/null
+++ b/src/mame/layout/racedrivpan.lay
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+ <view name="Triple Side-by-Side (Panorama)">
+ <screen index="1">
+ <bounds x="0" y="0" width="4" height="3" />
+ </screen>
+ <screen index="0">
+ <bounds x="4.03" y="0" width="4" height="3" />
+ </screen>
+ <screen index="2">
+ <bounds x="8.06" y="0" width="4" height="3" />
+ </screen>
+ </view>
+
+</mamelayout>
diff --git a/src/mame/layout/ufo21.lay b/src/mame/layout/ufo21.lay
new file mode 100644
index 00000000000..608c3bb5d6a
--- /dev/null
+++ b/src/mame/layout/ufo21.lay
@@ -0,0 +1,247 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
+ <element name="static_pink"><rect><color red="0.9" green="0.55" blue="0.75" /></rect></element>
+
+ <element name="text_ufored">
+ <text string="~UFO~">
+ <color red="1.0" green="0.3" blue="0.2" />
+ </text>
+ </element>
+ <element name="text_ufoblue">
+ <text string="~UFO~">
+ <color red="0.2" green="0.3" blue="1.0" />
+ </text>
+ </element>
+
+ <element name="text_x">
+ <text string="X:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_y">
+ <text string="Y:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_z">
+ <text string="Z:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_c">
+ <text string="C:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+
+ <element name="digit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.3" blue="0.2" />
+ </led7seg>
+ </element>
+
+ <element name="counter" defstate="0">
+ <simplecounter maxstate="999" digits="3" align="1">
+ <color red="0.95" green="0.95" blue="0.95" />
+ </simplecounter>
+ </element>
+
+ <element name="lamp_b1" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <disk state="0">
+ <color red="0.7" green="0.7" blue="0.7" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1.0" height="0.6" />
+ </text>
+ </element>
+ <element name="lamp_b2" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <disk state="0">
+ <color red="0.7" green="0.7" blue="0.7" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1.0" height="0.6" />
+ </text>
+ </element>
+
+ <element name="lamp_red" defstate="0">
+ <disk state="0">
+ <color red="0.2" green="0.05" blue="0.0" />
+ </disk>
+ <disk state="1">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="200" top="0" bottom="90" />
+ <bezel element="static_black">
+ <bounds left="0" right="200" top="0" bottom="90" />
+ </bezel>
+
+ <bezel element="static_grey">
+ <bounds x="99" y="0" width="2" height="80" />
+ </bezel>
+
+ <!-- control panel -->
+
+ <bezel element="static_pink">
+ <bounds x="0" y="60" width="200" height="30" />
+ </bezel>
+
+ <bezel name="lamp0" element="lamp_b1" inputtag="IN2" inputmask="0x01" >
+ <bounds x="30" y="70" width="10" height="10"/>
+ </bezel>
+ <bezel name="lamp1" element="lamp_b2" inputtag="IN2" inputmask="0x02" >
+ <bounds x="43" y="70" width="10" height="10"/>
+ </bezel>
+
+ <bezel name="lamp2" element="lamp_b1" inputtag="IN2" inputmask="0x10" >
+ <bounds x="147" y="70" width="10" height="10"/>
+ </bezel>
+ <bezel name="lamp3" element="lamp_b2" inputtag="IN2" inputmask="0x20" >
+ <bounds x="160" y="70" width="10" height="10"/>
+ </bezel>
+
+ <bezel element="static_black">
+ <bounds x="60" y="70" width="12" height="17" />
+ </bezel>
+ <bezel name="digit0" element="digit">
+ <bounds x="61" y="71" width="10" height="15" />
+ </bezel>
+
+ <bezel element="static_black">
+ <bounds x="128" y="70" width="12" height="17" />
+ </bezel>
+ <bezel name="digit1" element="digit">
+ <bounds x="129" y="71" width="10" height="15" />
+ </bezel>
+
+
+ <!-- left ufo info -->
+
+ <bezel element="text_x">
+ <bounds x="5" y="5" width="10" height="4" />
+ </bezel>
+ <bezel element="text_y">
+ <bounds x="5" y="10" width="10" height="4" />
+ </bezel>
+ <bezel element="text_z">
+ <bounds x="5" y="15" width="10" height="4" />
+ </bezel>
+ <bezel element="text_c">
+ <bounds x="5" y="20" width="10" height="4" />
+ </bezel>
+
+ <bezel name="counter0" element="counter">
+ <bounds x="12" y="5" width="20" height="4" />
+ </bezel>
+ <bezel name="counter1" element="counter">
+ <bounds x="12" y="10" width="20" height="4" />
+ </bezel>
+ <bezel name="counter2" element="counter">
+ <bounds x="12" y="15" width="20" height="4" />
+ </bezel>
+ <bezel name="counter3" element="counter">
+ <bounds x="12" y="20" width="20" height="4" />
+ </bezel>
+
+ <bezel element="text_ufored">
+ <bounds x="25" y="25" width="50" height="14" />
+ </bezel>
+
+ <bezel name="lamp11" element="lamp_red">
+ <bounds x="31" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp12" element="lamp_red">
+ <bounds x="38" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp13" element="lamp_red">
+ <bounds x="45" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp14" element="lamp_red">
+ <bounds x="52" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp15" element="lamp_red">
+ <bounds x="59" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp16" element="lamp_red">
+ <bounds x="66" y="44" width="3" height="3" />
+ </bezel>
+
+ <!-- right ufo info -->
+
+ <bezel element="text_x">
+ <bounds x="105" y="5" width="10" height="4" />
+ </bezel>
+ <bezel element="text_y">
+ <bounds x="105" y="10" width="10" height="4" />
+ </bezel>
+ <bezel element="text_z">
+ <bounds x="105" y="15" width="10" height="4" />
+ </bezel>
+ <bezel element="text_c">
+ <bounds x="105" y="20" width="10" height="4" />
+ </bezel>
+
+ <bezel name="counter4" element="counter">
+ <bounds x="112" y="5" width="20" height="4" />
+ </bezel>
+ <bezel name="counter5" element="counter">
+ <bounds x="112" y="10" width="20" height="4" />
+ </bezel>
+ <bezel name="counter6" element="counter">
+ <bounds x="112" y="15" width="20" height="4" />
+ </bezel>
+ <bezel name="counter7" element="counter">
+ <bounds x="112" y="20" width="20" height="4" />
+ </bezel>
+
+ <bezel element="text_ufoblue">
+ <bounds x="125" y="25" width="50" height="14" />
+ </bezel>
+
+ <bezel name="lamp21" element="lamp_red">
+ <bounds x="131" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp22" element="lamp_red">
+ <bounds x="138" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp23" element="lamp_red">
+ <bounds x="145" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp24" element="lamp_red">
+ <bounds x="152" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp25" element="lamp_red">
+ <bounds x="159" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp26" element="lamp_red">
+ <bounds x="166" y="44" width="3" height="3" />
+ </bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/ufo800.lay b/src/mame/layout/ufo800.lay
new file mode 100644
index 00000000000..9a9533d80b0
--- /dev/null
+++ b/src/mame/layout/ufo800.lay
@@ -0,0 +1,175 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
+ <element name="static_pink"><rect><color red="0.9" green="0.55" blue="0.75" /></rect></element>
+
+ <element name="text_ufored">
+ <text string="~UFO~">
+ <color red="1.0" green="0.3" blue="0.2" />
+ </text>
+ </element>
+ <element name="text_ufoblue">
+ <text string="~UFO~">
+ <color red="0.2" green="0.3" blue="1.0" />
+ </text>
+ </element>
+
+ <element name="text_x">
+ <text string="X:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_y">
+ <text string="Y:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_z">
+ <text string="Z:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_c">
+ <text string="C:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+
+ <element name="digit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.3" blue="0.2" />
+ </led7seg>
+ </element>
+
+ <element name="counter" defstate="0">
+ <simplecounter maxstate="999" digits="3" align="1">
+ <color red="0.95" green="0.95" blue="0.95" />
+ </simplecounter>
+ </element>
+
+ <element name="lamp_b1" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <disk state="0">
+ <color red="0.7" green="0.7" blue="0.7" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1.0" height="0.6" />
+ </text>
+ </element>
+ <element name="lamp_b2" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <disk state="0">
+ <color red="0.7" green="0.7" blue="0.7" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1.0" height="0.6" />
+ </text>
+ </element>
+
+ <element name="lamp_red" defstate="0">
+ <disk state="0">
+ <color red="0.2" green="0.05" blue="0.0" />
+ </disk>
+ <disk state="1">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="100" top="0" bottom="90" />
+ <bezel element="static_black">
+ <bounds left="0" right="100" top="0" bottom="90" />
+ </bezel>
+
+ <!-- control panel -->
+
+ <bezel element="static_pink">
+ <bounds x="0" y="60" width="100" height="30" />
+ </bezel>
+
+ <bezel name="lamp0" element="lamp_b1" inputtag="IN2" inputmask="0x01" >
+ <bounds x="30" y="70" width="10" height="10"/>
+ </bezel>
+ <bezel name="lamp1" element="lamp_b2" inputtag="IN2" inputmask="0x02" >
+ <bounds x="43" y="70" width="10" height="10"/>
+ </bezel>
+
+ <bezel element="static_black">
+ <bounds x="60" y="70" width="12" height="17" />
+ </bezel>
+ <bezel name="digit0" element="digit">
+ <bounds x="61" y="71" width="10" height="15" />
+ </bezel>
+
+
+ <!-- left ufo info -->
+
+ <bezel element="text_x">
+ <bounds x="5" y="5" width="10" height="4" />
+ </bezel>
+ <bezel element="text_y">
+ <bounds x="5" y="10" width="10" height="4" />
+ </bezel>
+ <bezel element="text_z">
+ <bounds x="5" y="15" width="10" height="4" />
+ </bezel>
+ <bezel element="text_c">
+ <bounds x="5" y="20" width="10" height="4" />
+ </bezel>
+
+ <bezel name="counter0" element="counter">
+ <bounds x="12" y="5" width="20" height="4" />
+ </bezel>
+ <bezel name="counter1" element="counter">
+ <bounds x="12" y="10" width="20" height="4" />
+ </bezel>
+ <bezel name="counter2" element="counter">
+ <bounds x="12" y="15" width="20" height="4" />
+ </bezel>
+ <bezel name="counter3" element="counter">
+ <bounds x="12" y="20" width="20" height="4" />
+ </bezel>
+
+ <bezel element="text_ufored">
+ <bounds x="25" y="25" width="50" height="14" />
+ </bezel>
+
+ <bezel name="lamp10" element="lamp_red">
+ <bounds x="34" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp11" element="lamp_red">
+ <bounds x="41" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp12" element="lamp_red">
+ <bounds x="48" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp13" element="lamp_red">
+ <bounds x="55" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp14" element="lamp_red">
+ <bounds x="62" y="44" width="3" height="3" />
+ </bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/layout/ufomini.lay b/src/mame/layout/ufomini.lay
new file mode 100644
index 00000000000..b27c1f9acb6
--- /dev/null
+++ b/src/mame/layout/ufomini.lay
@@ -0,0 +1,198 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_grey"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element>
+ <element name="static_pink"><rect><color red="0.9" green="0.55" blue="0.75" /></rect></element>
+
+ <element name="text_ufored">
+ <text string="~UFO~">
+ <color red="1.0" green="0.3" blue="0.2" />
+ </text>
+ </element>
+ <element name="text_ufoblue">
+ <text string="~UFO~">
+ <color red="0.2" green="0.3" blue="1.0" />
+ </text>
+ </element>
+
+ <element name="text_x">
+ <text string="X:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_y">
+ <text string="Y:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_z">
+ <text string="Z:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+ <element name="text_c">
+ <text string="C:" align="1">
+ <color red="0.85" green="0.85" blue="0.85" />
+ </text>
+ </element>
+
+ <element name="digit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.3" blue="0.2" />
+ </led7seg>
+ </element>
+
+ <element name="counter" defstate="0">
+ <simplecounter maxstate="999" digits="3" align="1">
+ <color red="0.95" green="0.95" blue="0.95" />
+ </simplecounter>
+ </element>
+
+ <element name="lamp_b1" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <disk state="0">
+ <color red="0.7" green="0.7" blue="0.7" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <text string="1">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1.0" height="0.6" />
+ </text>
+ </element>
+ <element name="lamp_b2" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="1">
+ <color red="1.0" green="1.0" blue="1.0" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <disk state="0">
+ <color red="0.7" green="0.7" blue="0.7" />
+ <bounds x="0.05" y="0.05" width="0.9" height="0.9" />
+ </disk>
+ <text string="2">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.2" width="1.0" height="0.6" />
+ </text>
+ </element>
+
+ <element name="lamp_rg0" defstate="0">
+ <disk state="0">
+ <color red="0.2" green="0.05" blue="0.0" />
+ </disk>
+ <disk state="1">
+ <color red="0.4" green="1.0" blue="0.3" />
+ </disk>
+ <disk state="2">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ <disk state="3">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ </element>
+ <element name="lamp_rg1" defstate="0">
+ <disk state="0">
+ <color red="0.2" green="0.05" blue="0.0" />
+ </disk>
+ <disk state="1">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ <disk state="2">
+ <color red="0.4" green="1.0" blue="0.3" />
+ </disk>
+ <disk state="3">
+ <color red="1.0" green="0.4" blue="0.3" />
+ </disk>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="100" top="0" bottom="90" />
+ <bezel element="static_black">
+ <bounds left="0" right="100" top="0" bottom="90" />
+ </bezel>
+
+ <!-- control panel -->
+
+ <bezel element="static_pink">
+ <bounds x="0" y="60" width="100" height="30" />
+ </bezel>
+
+ <bezel name="lamp0" element="lamp_b1" inputtag="IN1" inputmask="0x20" >
+ <bounds x="30" y="70" width="10" height="10"/>
+ </bezel>
+ <bezel name="lamp1" element="lamp_b2" inputtag="IN1" inputmask="0x40" >
+ <bounds x="43" y="70" width="10" height="10"/>
+ </bezel>
+
+ <bezel element="static_black">
+ <bounds x="60" y="70" width="12" height="17" />
+ </bezel>
+ <bezel name="digit0" element="digit">
+ <bounds x="61" y="71" width="10" height="15" />
+ </bezel>
+
+
+ <!-- left ufo info -->
+
+ <bezel element="text_x">
+ <bounds x="5" y="5" width="10" height="4" />
+ </bezel>
+ <bezel element="text_y">
+ <bounds x="5" y="10" width="10" height="4" />
+ </bezel>
+ <bezel element="text_z">
+ <bounds x="5" y="15" width="10" height="4" />
+ </bezel>
+ <bezel element="text_c">
+ <bounds x="5" y="20" width="10" height="4" />
+ </bezel>
+
+ <bezel name="counter0" element="counter">
+ <bounds x="12" y="5" width="20" height="4" />
+ </bezel>
+ <bezel name="counter1" element="counter">
+ <bounds x="12" y="10" width="20" height="4" />
+ </bezel>
+ <bezel name="counter2" element="counter">
+ <bounds x="12" y="15" width="20" height="4" />
+ </bezel>
+ <bezel name="counter3" element="counter">
+ <bounds x="12" y="20" width="20" height="4" />
+ </bezel>
+
+ <bezel element="text_ufored">
+ <bounds x="25" y="25" width="50" height="14" />
+ </bezel>
+
+ <bezel name="lamp10" element="lamp_rg0">
+ <bounds x="31" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg1">
+ <bounds x="38" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg0">
+ <bounds x="45" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg1">
+ <bounds x="52" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg0">
+ <bounds x="59" y="44" width="3" height="3" />
+ </bezel>
+ <bezel name="lamp10" element="lamp_rg1">
+ <bounds x="66" y="44" width="3" height="3" />
+ </bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mame/machine/315-5881_crypt.c b/src/mame/machine/315-5881_crypt.c
new file mode 100644
index 00000000000..c19b431aef7
--- /dev/null
+++ b/src/mame/machine/315-5881_crypt.c
@@ -0,0 +1,817 @@
+/*
+ re: Tecmo World Cup '98 (ST-V) (from ANY)
+
+ I got one of the card in subject open it up to check the rom version
+ and made a discovery...
+ The protection chip has the part number on it "315-5881", it's the same
+ used on naomi M2 carts as you can see here
+ http://imagizer.imageshack.us/a/img540/7634/BsqvD8.jpg
+
+ The same chip 315-5881 but with a Lattice IspLSI2032 (Sega part
+ 315-6050) was used on some Model3 games...
+
+*/
+
+#include "emu.h"
+#include "machine/315-5881_crypt.h"
+
+extern const device_type SEGA315_5881_CRYPT = &device_creator<sega_315_5881_crypt_device>;
+
+
+sega_315_5881_crypt_device::sega_315_5881_crypt_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, SEGA315_5881_CRYPT, "Sega 'SEGA315_5881' Encryption device", tag, owner, clock, "SEGA315_5881", __FILE__)
+{
+}
+
+
+
+void sega_315_5881_crypt_device::device_start()
+{
+ buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE);
+ line_buffer = auto_alloc_array(machine(), UINT8, LINE_SIZE);
+ line_buffer_prev = auto_alloc_array(machine(), UINT8, LINE_SIZE);
+
+ m_read.bind_relative_to(*owner());
+
+ save_pointer(NAME(buffer), BUFFER_SIZE);
+ save_pointer(NAME(line_buffer), LINE_SIZE);
+ save_pointer(NAME(line_buffer_prev), LINE_SIZE);
+ save_item(NAME(prot_cur_address));
+ save_item(NAME(subkey));
+ save_item(NAME(enc_ready));
+ save_item(NAME(dec_hist));
+ save_item(NAME(dec_header));
+ save_item(NAME(buffer_pos));
+ save_item(NAME(line_buffer_pos));
+ save_item(NAME(line_buffer_size));
+
+}
+
+void sega_315_5881_crypt_device::device_reset()
+{
+ memset(buffer, 0, BUFFER_SIZE);
+ memset(line_buffer, 0, LINE_SIZE);
+ memset(line_buffer_prev, 0, LINE_SIZE);
+
+ prot_cur_address = 0;
+ subkey = 0;
+ dec_hist = 0;
+ dec_header = 0;
+ enc_ready = false;
+
+ buffer_pos = 0;
+ line_buffer_pos = 0;
+ line_buffer_size = 0;
+ buffer_bit = 0;
+}
+
+UINT16 sega_315_5881_crypt_device::do_decrypt(UINT8 *&base)
+{
+ if(!enc_ready)
+ enc_start();
+ if(dec_header & FLAG_COMPRESSED) {
+ if(line_buffer_pos == line_buffer_size)
+ line_fill();
+ base = line_buffer + line_buffer_pos;
+ line_buffer_pos += 2;
+ } else {
+ if(buffer_pos == BUFFER_SIZE)
+ enc_fill();
+ base = buffer + buffer_pos;
+ buffer_pos += 2;
+ }
+
+ return (base[0] << 8) | base[1];
+}
+
+void sega_315_5881_crypt_device::set_addr_low(UINT16 data)
+{
+ prot_cur_address = (prot_cur_address & 0xffff0000) | data;
+ enc_ready = false;
+}
+
+void sega_315_5881_crypt_device::set_addr_high(UINT16 data)
+{
+ prot_cur_address = (prot_cur_address & 0x0000ffff) | (data << 16);
+ enc_ready = false;
+}
+
+void sega_315_5881_crypt_device::set_subkey(UINT16 data)
+{
+ subkey = data;
+ enc_ready = false;
+}
+
+void sega_315_5881_crypt_device::set_key(UINT32 data)
+{
+ key = data;
+ enc_ready = false;
+}
+
+/***************************************************************************
+ DECRYPTION EMULATION
+
+By convention, we label the three known cart protection methods this way (using Deunan Knute's wording):
+M1: DMA read of protected ROM area
+M2: special read of ROM area which supplies decryption key first
+M3: normal read followed by write to cart's decryption buffer (up to 64kB), followed by M2 but from buffer area
+
+Notes below refer to M2 & M3.
+
+The encryption is done by a stream cipher operating in counter mode, which use a 16-bits internal block cipher.
+
+There are 2 "control bits" at the start of the decrypted stream which control the mode of operation: bit #1 set to 1 means
+that the decrypted stream needs to be decompressed after being decrypted. More on this later.
+
+The next 16-bits are part of the header (they don't belong to the plaintext), but his meaning is unclear. It has been
+conjectured that it could stablish when to "reset" the process and start processing a new stream (based on some tests
+on WWFROYAL, in which the decryption's output doesn't seem to be valid for more than some dozens of words), but some
+more testing would be needed for clarifying that.
+
+After those 18 heading bits, we find the proper plaintext. It must be noted that, due to the initial 2 special bits,
+the 16-bits words of the plaintext are shifted 2 bits respect to the word-boundaries of the output stream of the
+internal block-cipher. So, at a given step, the internal block cipher will output 16-bits, 14 of which will go to a
+given plaintext word, and the remaining 2 to the next plaintext word.
+
+The underlying block cipher consists of two 4-round Feistel Networks (FN): the first one takes the counter (16 bits),
+the game-key (>=26 bits) and the sequence-key (16 bits) and output a middle result (16 bits) which will act as another key
+for the second one. The second FN will take the encrypted word (16 bits), the game-key, the sequence-key and the result
+from the first FN and will output the decrypted word (16 bits).
+
+Each round of the Feistel Networks use four substitution sboxes, each having 6 inputs and 2 outputs. The input can be the
+XOR of at most two "sources bits", being source bits the bits from the previous round and the bits from the different keys.
+
+The underlying block cipher has the same structure than the one used by the CPS-2 (Capcom Play System 2) and,
+indeed, some of the used sboxes are exactly the same and appear in the same FN/round in both systems (this is not evident,
+as you need to apply a bitswapping and some XORs to the input & output of the sboxes to get the same values due). However,
+the key scheduling used by this implementation is much weaker than the CPS-2's one. Many s-boxes inputs aren't XORed with any
+key bit.
+
+Due to the small key-length, no sophisticated attacks are needed to recover the keys; a brute-force attack knowing just
+some (encrypted word-decrypted word) pairs suffice. However, due to the weak key scheduling, it should be noted that some
+related keys can produce the same output bytes for some (short) input sequences.
+
+The only difference in the decryption process between M2 and M3 is the initialization of the counter. In M3, the counter is
+always set to 0 at the beginning of the decryption while, in M2, the bits #1-#16 of the ciphertext's address are used
+to initialize the counter.
+
+Note that this implementation considers that the counter initialization for ram decryption is 0 simply because the ram is
+mapped to multiples of 128K.
+
+Due to the nature of the cipher, there are some degrees of freedom when choosing the s-boxes and keys values; by example,
+you could apply a fixed bitswapping and XOR to the keys and the decryption would remain the same as long as you change
+accordingly the s-boxes' definitions. So the order of the bits in the keys is arbitrary, and the s-boxes values have been
+chosen so as to make the key for CAPSNK equal to 0.
+
+It can be observed that a couple of sboxes have incomplete tables (a 255 value indicate an unknown value). The recovered keys
+as of december/2010 show small randomness and big correlations, making possible that some unseen bits could make the
+decryption need those incomplete parts.
+
+****************************************************************************************/
+
+const sega_315_5881_crypt_device::sbox sega_315_5881_crypt_device::fn1_sboxes[4][4] = {
+ { // 1st round
+ {
+ {
+ 0,3,2,2,1,3,1,2,3,2,1,2,1,2,3,1,3,2,2,0,2,1,3,0,0,3,2,3,2,1,2,0,
+ 2,3,1,1,2,2,1,1,1,0,2,3,3,0,2,1,1,1,1,1,3,0,3,2,1,0,1,2,0,3,1,3,
+ },
+ {3,4,5,7,-1,-1},
+ {0,4}
+ },
+
+ {
+ {
+ 2,2,2,0,3,3,0,1,2,2,3,2,3,0,2,2,1,1,0,3,3,2,0,2,0,1,0,1,2,3,1,1,
+ 0,1,3,3,1,3,3,1,2,3,2,0,0,0,2,2,0,3,1,3,0,3,2,2,0,3,0,3,1,1,0,2,
+ },
+ {0,1,2,5,6,7},
+ {1,6}
+ },
+
+ {
+ {
+ 0,1,3,0,3,1,1,1,1,2,3,1,3,0,2,3,3,2,0,2,1,1,2,1,1,3,1,0,0,2,0,1,
+ 1,3,1,0,0,3,2,3,2,0,3,3,0,0,0,0,1,2,3,3,2,0,3,2,1,0,0,0,2,2,3,3,
+ },
+ {0,2,5,6,7,-1},
+ {2,3}
+ },
+
+ {
+ {
+ 3,2,1,2,1,2,3,2,0,3,2,2,3,1,3,3,0,2,3,0,3,3,2,1,1,1,2,0,2,2,0,1,
+ 1,3,3,0,0,3,0,3,0,2,1,3,2,1,0,0,0,1,1,2,0,1,0,0,0,1,3,3,2,0,3,3,
+ },
+ {1,2,3,4,6,7},
+ {5,7}
+ },
+ },
+ { // 2nd round
+ {
+ {
+ 3,3,1,2,0,0,2,2,2,1,2,1,3,1,1,3,3,0,0,3,0,3,3,2,1,1,3,2,3,2,1,3,
+ 2,3,0,1,3,2,0,1,2,1,3,1,2,2,3,3,3,1,2,2,0,3,1,2,2,1,3,0,3,0,1,3,
+ },
+ {0,1,3,4,5,7},
+ {0,4}
+ },
+
+ {
+ {
+ 2,0,1,0,0,3,2,0,3,3,1,2,1,3,0,2,0,2,0,0,0,2,3,1,3,1,1,2,3,0,3,0,
+ 3,0,2,0,0,2,2,1,0,2,3,3,1,3,1,0,1,3,3,0,0,1,3,1,0,2,0,3,2,1,0,1,
+ },
+ {0,1,3,4,6,-1},
+ {1,5}
+ },
+
+ {
+ {
+ 2,2,2,3,1,1,0,1,0,1,2,2,3,3,0,2,0,3,2,3,3,0,2,1,0,3,1,0,0,2,3,2,
+ 3,2,0,3,2,0,1,0,3,3,1,1,2,2,2,0,2,1,3,1,1,1,1,2,2,2,3,0,1,3,0,0,
+ },
+ {1,2,5,6,7,-1},
+ {2,7}
+ },
+
+ {
+ {
+ 0,1,3,3,3,1,3,3,1,0,2,0,2,0,0,3,1,2,1,3,1,2,3,2,2,0,1,3,0,3,3,3,
+ 0,0,0,2,1,1,2,3,2,2,3,1,1,2,0,2,0,2,1,3,1,1,3,3,1,1,3,0,2,3,0,0,
+ },
+ {2,3,4,5,6,7},
+ {3,6}
+ },
+ },
+ { // 3rd round
+ {
+ {
+ 0,0,1,0,1,0,0,3,2,0,0,3,0,1,0,2,0,3,0,0,2,0,3,2,2,1,3,2,2,1,1,2,
+ 0,0,0,3,0,1,1,0,0,2,1,0,3,1,2,2,2,0,3,1,3,0,1,2,2,1,1,1,0,2,3,1,
+ },
+ {1,2,3,4,5,7},
+ {0,5}
+ },
+
+ {
+ {
+ 1,2,1,0,3,1,1,2,0,0,2,3,2,3,1,3,2,0,3,2,2,3,1,1,1,1,0,3,2,0,0,1,
+ 1,0,0,1,3,1,2,3,0,0,2,3,3,0,1,0,0,2,3,0,1,2,0,1,3,3,3,1,2,0,2,1,
+ },
+ {0,2,4,5,6,7},
+ {1,6}
+ },
+
+ {
+ {
+ 0,3,0,2,1,2,0,0,1,1,0,0,3,1,1,0,0,3,0,0,2,3,3,2,3,1,2,0,0,2,3,0,
+ // unused?
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ },
+ {0,2,4,6,7,-1},
+ {2,3}
+ },
+
+ {
+ {
+ 0,0,1,0,0,1,0,2,3,3,0,3,3,2,3,0,2,2,2,0,3,2,0,3,1,0,0,3,3,0,0,0,
+ 2,2,1,0,2,0,3,2,0,0,3,1,3,3,0,0,2,1,1,2,1,0,1,1,0,3,1,2,0,2,0,3,
+ },
+ {0,1,2,3,6,-1},
+ {4,7}
+ },
+ },
+ { // 4th round
+ {
+ {
+ 0,3,3,3,3,3,2,0,0,1,2,0,2,2,2,2,1,1,0,2,2,1,3,2,3,2,0,1,2,3,2,1,
+ 3,2,2,3,1,0,1,0,0,2,0,1,2,1,2,3,1,2,1,1,2,2,1,0,1,3,2,3,2,0,3,1,
+ },
+ {0,1,3,4,5,6},
+ {0,5}
+ },
+
+ {
+ {
+ 0,3,0,0,2,0,3,1,1,1,2,2,2,1,3,1,2,2,1,3,2,2,3,3,0,3,1,0,3,2,0,1,
+ 3,0,2,0,1,0,2,1,3,3,1,2,2,0,2,3,3,2,3,0,1,1,3,3,0,2,1,3,0,2,2,3,
+ },
+ {0,1,2,3,5,7},
+ {1,7}
+ },
+
+ {
+ {
+ 0,1,2,3,3,3,3,1,2,0,2,3,2,1,0,1,2,2,1,2,0,3,2,0,1,1,0,1,3,1,3,1,
+ 3,1,0,0,1,0,0,0,0,1,2,2,1,1,3,3,1,2,3,3,3,2,3,0,2,2,1,3,3,0,2,0,
+ },
+ {2,3,4,5,6,7},
+ {2,3}
+ },
+
+ {
+ {
+ 0,2,1,1,3,2,0,3,1,0,1,0,3,2,1,1,2,2,0,3,1,0,1,2,2,2,3,3,0,0,0,0,
+ 1,2,1,0,2,1,2,2,2,3,2,3,0,1,3,0,0,1,3,0,0,1,1,0,1,0,0,0,0,2,0,1,
+ },
+ {0,1,2,4,6,7},
+ {4,6}
+ },
+ },
+};
+
+
+const sega_315_5881_crypt_device::sbox sega_315_5881_crypt_device::fn2_sboxes[4][4] = {
+ { // 1st round
+ {
+ {
+ 3,3,0,1,0,1,0,0,0,3,0,0,1,3,1,2,0,3,3,3,2,1,0,1,1,1,2,2,2,3,2,2,
+ 2,1,3,3,1,3,1,1,0,0,1,2,0,2,2,1,1,2,3,1,2,1,3,1,2,2,0,1,3,0,2,2,
+ },
+ {1,3,4,5,6,7},
+ {0,7}
+ },
+
+ {
+ {
+ 0,2,3,2,1,1,0,0,2,1,0,3,3,0,0,0,3,2,0,2,1,1,2,1,0,0,3,1,2,2,3,1,
+ 3,1,3,0,0,0,1,3,1,0,0,3,2,2,3,1,1,3,0,0,2,1,3,3,1,3,1,2,3,1,2,1,
+ },
+ {0,3,5,6,-1,-1},
+ {1,2}
+ },
+
+ {
+ {
+ 0,2,2,1,0,1,2,1,2,0,1,2,3,3,0,1,3,1,1,2,1,2,1,3,3,2,3,3,2,1,0,1,
+ 0,1,0,2,0,1,1,3,2,0,3,2,1,1,1,3,2,3,0,2,3,0,2,2,1,3,0,1,1,2,2,2,
+ },
+ {0,2,3,4,7,-1},
+ {3,4}
+ },
+
+ {
+ {
+ 2,3,1,3,2,0,1,2,0,0,3,3,3,3,3,1,2,0,2,1,2,3,0,2,0,1,0,3,0,2,1,0,
+ 2,3,0,1,3,0,3,2,3,1,2,0,3,1,1,2,0,3,0,0,2,0,2,1,2,2,3,2,1,2,3,1,
+ },
+ {1,2,5,6,-1,-1},
+ {5,6}
+ },
+ },
+ { // 2nd round
+ {
+ {
+ 2,3,1,3,1,0,3,3,3,2,3,3,2,0,0,3,2,3,0,3,1,1,2,3,1,1,2,2,0,1,0,0,
+ 2,1,0,1,2,0,1,2,0,3,1,1,2,3,1,2,0,2,0,1,3,0,1,0,2,2,3,0,3,2,3,0,
+ },
+ {0,1,4,5,6,7},
+ {0,7}
+ },
+
+ {
+ {
+ 0,2,2,0,2,2,0,3,2,3,2,1,3,2,3,3,1,1,0,0,3,0,2,1,1,3,3,2,3,2,0,1,
+ 1,2,3,0,1,0,3,0,3,1,0,2,1,2,0,3,2,3,1,2,2,0,3,2,3,0,0,1,2,3,3,3,
+ },
+ {0,2,3,6,7,-1},
+ {1,5}
+ },
+
+ {
+ {
+ 1,2,3,2,0,3,2,3,0,1,1,0,0,2,2,3,2,0,0,3,0,2,3,3,2,2,1,0,2,1,0,3,
+ 1,0,2,0,1,1,0,1,0,0,1,0,3,0,3,3,2,2,0,2,1,1,1,0,3,0,1,3,2,3,2,1,
+ },
+ {2,3,4,6,7,-1},
+ {2,3}
+ },
+
+ {
+ {
+ 2,3,1,3,1,1,2,3,3,1,1,0,1,0,2,3,2,1,0,0,2,2,0,1,0,2,2,2,0,2,1,0,
+ 3,1,2,3,1,3,0,2,1,0,1,0,0,1,2,2,3,2,3,1,3,2,1,1,2,0,2,1,3,3,1,0,
+ },
+ {1,2,3,4,5,6},
+ {4,6}
+ },
+ },
+ { // 3rd round
+ {
+ {
+ 0,3,0,1,0,2,3,3,1,0,1,3,2,2,1,1,3,3,3,0,2,0,2,0,0,0,2,3,1,1,0,0,
+ 3,3,0,3,3,0,0,2,1,1,1,0,2,2,2,0,3,0,3,1,2,2,0,3,0,0,3,2,0,3,2,1,
+ },
+ {1,4,5,6,7,-1},
+ {0,5}
+ },
+
+ {
+ {
+ 0,3,0,1,3,0,3,1,3,2,2,2,3,0,3,2,2,1,2,2,0,3,2,2,0,0,2,1,1,3,2,3,
+ 2,3,3,1,2,0,1,2,2,1,0,0,0,0,2,3,1,2,0,3,1,3,1,2,3,2,1,0,3,0,0,2,
+ },
+ {0,2,3,4,6,7},
+ {1,7}
+ },
+
+ {
+ {
+ 2,2,3,2,0,3,2,3,1,1,2,0,2,3,1,3,0,0,0,3,2,0,1,0,1,3,2,3,3,3,1,0,
+ // unused?
+ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+ },
+ {1,2,4,7,-1,-1},
+ {2,4}
+ },
+
+ {
+ {
+ 0,2,3,1,3,1,1,0,0,1,3,0,2,1,3,3,2,0,2,1,1,2,3,3,0,0,0,2,0,2,3,0,
+ 3,3,3,3,2,3,3,2,3,0,1,0,2,3,3,2,0,1,3,1,0,1,2,3,3,0,2,0,3,0,3,3,
+ },
+ {0,1,2,3,5,7},
+ {3,6}
+ },
+ },
+ { // 4th round
+ {
+ {
+ 0,1,1,0,0,1,0,2,3,3,0,1,2,3,0,2,1,0,3,3,2,0,3,0,0,2,1,0,1,0,1,3,
+ 0,3,3,1,2,0,3,0,1,3,2,0,3,3,1,3,0,2,3,3,2,1,1,2,2,1,2,1,2,0,1,1,
+ },
+ {0,1,2,4,7,-1},
+ {0,5}
+ },
+
+ {
+ {
+ 2,0,0,2,3,0,2,3,3,1,1,1,2,1,1,0,0,2,1,0,0,3,1,0,0,3,3,0,1,0,1,2,
+ 0,2,0,2,0,1,2,3,2,1,1,0,3,3,3,3,3,3,1,0,3,0,0,2,0,3,2,0,2,2,0,1,
+ },
+ {0,1,3,5,6,-1},
+ {1,3}
+ },
+
+ {
+ {
+ 0,1,1,2,1,3,1,1,0,0,3,1,1,1,2,0,3,2,0,1,1,2,3,3,3,0,3,0,0,2,0,3,
+ 3,2,0,0,3,2,3,1,2,3,0,3,2,0,1,2,2,2,0,2,0,1,2,2,3,1,2,2,1,1,1,1,
+ },
+ {0,2,3,4,5,7},
+ {2,7}
+ },
+
+ {
+ {
+ 0,1,2,0,3,3,0,3,2,1,3,3,0,3,1,1,3,2,3,2,3,0,0,0,3,0,2,2,3,2,2,3,
+ 2,2,3,1,2,3,1,2,0,3,0,2,3,1,0,0,3,2,1,2,1,2,1,3,1,0,2,3,3,1,3,2,
+ },
+ {2,3,4,5,6,7},
+ {4,6}
+ },
+ },
+};
+
+const int sega_315_5881_crypt_device::fn1_game_key_scheduling[38][2] = {
+ {1,29}, {1,71}, {2,4}, {2,54}, {3,8}, {4,56}, {4,73}, {5,11},
+ {6,51}, {7,92}, {8,89}, {9,9}, {9,10}, {9,39}, {9,41}, {9,58},
+ {9,59}, {9,86}, {10,90}, {11,6}, {12,64}, {13,49}, {14,44}, {15,40},
+ {16,69}, {17,15}, {18,23}, {18,43}, {19,82}, {20,81}, {21,32}, {21,61},
+ {22,5}, {23,66}, {24,13}, {24,45}, {25,12}, {25,35}
+};
+
+const int sega_315_5881_crypt_device::fn2_game_key_scheduling[34][2] = {
+ {0,0}, {1,3}, {2,11}, {3,20}, {4,22}, {5,23}, {6,29}, {7,38},
+ {8,39}, {9,47}, {9,55}, {9,86}, {9,87}, {9,90}, {10,50}, {10,53},
+ {11,57}, {12,59}, {13,61}, {13,64}, {14,63}, {15,67}, {16,72}, {17,83},
+ {18,88}, {19,94}, {20,35}, {21,17}, {21,92}, {22,6}, {22,11}, {23,85},
+ {24,16}, {25,25}
+};
+
+const int sega_315_5881_crypt_device::fn1_sequence_key_scheduling[20][2] = {
+ {0,52}, {1,34}, {2,17}, {3,36}, {4,84}, {4,88}, {5,57}, {6,48},
+ {6,68}, {7,76}, {8,83}, {9,30}, {10,22}, {10,41}, {11,38}, {12,55},
+ {13,74}, {14,19}, {14,80}, {15,26}
+};
+
+const int sega_315_5881_crypt_device::fn2_sequence_key_scheduling[16] = {77,34,8,42,36,27,69,66,13,9,79,31,49,7,24,64};
+
+const int sega_315_5881_crypt_device::fn2_middle_result_scheduling[16] = {1,10,44,68,74,78,81,95,2,4,30,40,41,51,53,58};
+
+int sega_315_5881_crypt_device::feistel_function(int input, const struct sbox *sboxes, UINT32 subkeys)
+{
+ int k,m;
+ int aux;
+ int result=0;
+
+ for (m=0; m<4; ++m) { // 4 sboxes
+ for (k=0, aux=0; k<6; ++k)
+ if (sboxes[m].inputs[k]!=-1)
+ aux |= BIT(input, sboxes[m].inputs[k]) << k;
+
+ aux = sboxes[m].table[(aux^subkeys)&0x3f];
+
+ for (k=0; k<2; ++k)
+ result |= BIT(aux,k) << sboxes[m].outputs[k];
+
+ subkeys >>=6;
+ }
+
+ return result;
+}
+
+/**************************
+This implementation is an "educational" version. It must be noted that it can be speed-optimized in a number of ways.
+The most evident one is to factor out the parts of the key-scheduling that must only be done once (like the game-key &
+sequence-key parts) as noted in the comments inlined in the function. More sophisticated speed-ups can be gained by
+noticing that the weak key-scheduling would allow to create some pregenerated look-up tables for doing most of the work
+of the function. Even so, it would still be pretty slow, so caching techniques could be a wiser option here.
+**************************/
+
+UINT16 sega_315_5881_crypt_device::block_decrypt(UINT32 game_key, UINT16 sequence_key, UINT16 counter, UINT16 data)
+{
+ int j;
+ int aux,aux2;
+ int A,B;
+ int middle_result;
+ UINT32 fn1_subkeys[4];
+ UINT32 fn2_subkeys[4];
+
+ /* Game-key scheduling; this could be done just once per game at initialization time */
+ memset(fn1_subkeys,0,sizeof(UINT32)*4);
+ memset(fn2_subkeys,0,sizeof(UINT32)*4);
+
+ for (j=0; j<38; ++j) {
+ if (BIT(game_key, fn1_game_key_scheduling[j][0])!=0) {
+ aux = fn1_game_key_scheduling[j][1]%24;
+ aux2 = fn1_game_key_scheduling[j][1]/24;
+ fn1_subkeys[aux2] ^= (1<<aux);
+ }
+ }
+
+ for (j=0; j<34; ++j) {
+ if (BIT(game_key, fn2_game_key_scheduling[j][0])!=0) {
+ aux = fn2_game_key_scheduling[j][1]%24;
+ aux2 = fn2_game_key_scheduling[j][1]/24;
+ fn2_subkeys[aux2] ^= (1<<aux);
+ }
+ }
+ /********************************************************/
+
+ /* Sequence-key scheduling; this could be done just once per decryption run */
+ for (j=0; j<20; ++j) {
+ if (BIT(sequence_key,fn1_sequence_key_scheduling[j][0])!=0) {
+ aux = fn1_sequence_key_scheduling[j][1]%24;
+ aux2 = fn1_sequence_key_scheduling[j][1]/24;
+ fn1_subkeys[aux2] ^= (1<<aux);
+ }
+ }
+
+ for (j=0; j<16; ++j) {
+ if (BIT(sequence_key,j)!=0) {
+ aux = fn2_sequence_key_scheduling[j]%24;
+ aux2 = fn2_sequence_key_scheduling[j]/24;
+ fn2_subkeys[aux2] ^= (1<<aux);
+ }
+ }
+
+ // subkeys bits 10 & 41
+ fn2_subkeys[0] ^= (BIT(sequence_key,2)<<10);
+ fn2_subkeys[1] ^= (BIT(sequence_key,4)<<17);
+ /**************************************************************/
+
+ // First Feistel Network
+
+ aux = BITSWAP16(counter,5,12,14,13,9,3,6,4, 8,1,15,11,0,7,10,2);
+
+ // 1st round
+ B = aux >> 8;
+ A = (aux & 0xff) ^ feistel_function(B,fn1_sboxes[0],fn1_subkeys[0]);
+
+ // 2nd round
+ B = B ^ feistel_function(A,fn1_sboxes[1],fn1_subkeys[1]);
+
+ // 3rd round
+ A = A ^ feistel_function(B,fn1_sboxes[2],fn1_subkeys[2]);
+
+ // 4th round
+ B = B ^ feistel_function(A,fn1_sboxes[3],fn1_subkeys[3]);
+
+ middle_result = (B<<8)|A;
+
+
+ /* Middle-result-key sheduling */
+ for (j=0; j<16; ++j) {
+ if (BIT(middle_result,j)!=0) {
+ aux = fn2_middle_result_scheduling[j]%24;
+ aux2 = fn2_middle_result_scheduling[j]/24;
+ fn2_subkeys[aux2] ^= (1<<aux);
+ }
+ }
+ /*********************/
+
+ // Second Feistel Network
+
+ aux = BITSWAP16(data,14,3,8,12,13,7,15,4, 6,2,9,5,11,0,1,10);
+
+ // 1st round
+ B = aux >> 8;
+ A = (aux & 0xff) ^ feistel_function(B,fn2_sboxes[0],fn2_subkeys[0]);
+
+ // 2nd round
+ B = B ^ feistel_function(A,fn2_sboxes[1],fn2_subkeys[1]);
+
+ // 3rd round
+ A = A ^ feistel_function(B,fn2_sboxes[2],fn2_subkeys[2]);
+
+ // 4th round
+ B = B ^ feistel_function(A,fn2_sboxes[3],fn2_subkeys[3]);
+
+ aux = (B<<8)|A;
+
+ aux = BITSWAP16(aux,15,7,6,14,13,12,5,4, 3,2,11,10,9,1,0,8);
+
+ return aux;
+}
+
+UINT16 sega_315_5881_crypt_device::get_decrypted_16()
+{
+ UINT16 enc;
+
+ enc = m_read(prot_cur_address);
+
+ UINT16 dec = block_decrypt(key, subkey, prot_cur_address, enc);
+ UINT16 res = (dec & 3) | (dec_hist & 0xfffc);
+ dec_hist = dec;
+
+ prot_cur_address ++;
+ return res;
+}
+
+void sega_315_5881_crypt_device::enc_start()
+{
+ buffer_pos = BUFFER_SIZE;
+ dec_header = get_decrypted_16() << 16;
+ dec_header |= get_decrypted_16();
+
+ if(dec_header & FLAG_COMPRESSED) {
+ line_buffer_size = dec_header & FLAG_LINE_SIZE_512 ? 512 : 256;
+ line_buffer_pos = line_buffer_size;
+ buffer_bit = 7;
+ }
+ enc_ready = true;
+}
+
+void sega_315_5881_crypt_device::enc_fill()
+{
+ assert(buffer_pos == BUFFER_SIZE);
+ for(int i = 0; i != BUFFER_SIZE; i+=2) {
+ UINT16 val = get_decrypted_16();
+ buffer[i] = val;
+ buffer[i+1] = val >> 8;
+ }
+ buffer_pos = 0;
+}
+
+/* node format
+0xxxxxxx - next node index
+1a0bbccc - end node
+ a - 0 = repeat
+ 1 = fetch
+ b - if a = 1
+ 00 - fetch 0
+ 01 - fetch 1
+ 11 - fetch -1
+ if a = 0
+ 000
+ c - repeat/fetch counter
+ count = ccc + 1
+11111111 - empty node
+*/
+const UINT8 sega_315_5881_crypt_device::trees[9][2][32] = {
+ {
+ {0x01,0x10,0x0f,0x05,0xc4,0x13,0x87,0x0a,0xcc,0x81,0xce,0x0c,0x86,0x0e,0x84,0xc2,
+ 0x11,0xc1,0xc3,0xcf,0x15,0xc8,0xcd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ {0xc7,0x02,0x03,0x04,0x80,0x06,0x07,0x08,0x09,0xc9,0x0b,0x0d,0x82,0x83,0x85,0xc0,
+ 0x12,0xc6,0xc5,0x14,0x16,0xca,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ },
+ {
+ {0x02,0x80,0x05,0x04,0x81,0x10,0x15,0x82,0x09,0x83,0x0b,0x0c,0x0d,0xdc,0x0f,0xde,
+ 0x1c,0xcf,0xc5,0xdd,0x86,0x16,0x87,0x18,0x19,0x1a,0xda,0xca,0xc9,0x1e,0xce,0xff,},
+ {0x01,0x17,0x03,0x0a,0x08,0x06,0x07,0xc2,0xd9,0xc4,0xd8,0xc8,0x0e,0x84,0xcb,0x85,
+ 0x11,0x12,0x13,0x14,0xcd,0x1b,0xdb,0xc7,0xc0,0xc1,0x1d,0xdf,0xc3,0xc6,0xcc,0xff,},
+ },
+ {
+ {0xc6,0x80,0x03,0x0b,0x05,0x07,0x82,0x08,0x15,0xdc,0xdd,0x0c,0xd9,0xc2,0x14,0x10,
+ 0x85,0x86,0x18,0x16,0xc5,0xc4,0xc8,0xc9,0xc0,0xcc,0xff,0xff,0xff,0xff,0xff,0xff,},
+ {0x01,0x02,0x12,0x04,0x81,0x06,0x83,0xc3,0x09,0x0a,0x84,0x11,0x0d,0x0e,0x0f,0x19,
+ 0xca,0xc1,0x13,0xd8,0xda,0xdb,0x17,0xde,0xcd,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,},
+ },
+ {
+ {0x01,0x80,0x0d,0x04,0x05,0x15,0x83,0x08,0xd9,0x10,0x0b,0x0c,0x84,0x0e,0xc0,0x14,
+ 0x12,0xcb,0x13,0xca,0xc8,0xc2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ {0xc5,0x02,0x03,0x07,0x81,0x06,0x82,0xcc,0x09,0x0a,0xc9,0x11,0xc4,0x0f,0x85,0xd8,
+ 0xda,0xdb,0xc3,0xdc,0xdd,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ },
+ {
+ {0x01,0x80,0x06,0x0c,0x05,0x81,0xd8,0x84,0x09,0xdc,0x0b,0x0f,0x0d,0x0e,0x10,0xdb,
+ 0x11,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ {0xc4,0x02,0x03,0x04,0xcb,0x0a,0x07,0x08,0xd9,0x82,0xc8,0x83,0xc0,0xc1,0xda,0xc2,
+ 0xc9,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ },
+ {
+ {0x01,0x02,0x06,0x0a,0x83,0x0b,0x07,0x08,0x09,0x82,0xd8,0x0c,0xd9,0xda,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ {0xc3,0x80,0x03,0x04,0x05,0x81,0xca,0xc8,0xdb,0xc9,0xc0,0xc1,0x0d,0xc2,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ },
+ {
+ {0x01,0x02,0x03,0x04,0x81,0x07,0x08,0xd8,0xda,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ {0xc2,0x80,0x05,0xc9,0xc8,0x06,0x82,0xc0,0x09,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ },
+ {
+ {0x01,0x80,0x04,0xc8,0xc0,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ {0xc1,0x02,0x03,0x81,0x05,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ },
+ {
+ {0x01,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ {0xc0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
+ },
+};
+
+int sega_315_5881_crypt_device::get_compressed_bit()
+{
+ if(buffer_pos == BUFFER_SIZE)
+ enc_fill();
+ int res = (buffer[buffer_pos^1] >> buffer_bit) & 1;
+ buffer_bit--;
+ if(buffer_bit == -1) {
+ buffer_bit = 7;
+ buffer_pos++;
+ }
+ return res;
+}
+
+void sega_315_5881_crypt_device::line_fill()
+{
+ assert(line_buffer_pos == line_buffer_size);
+ UINT8 *lp = line_buffer;
+ UINT8 *lc = line_buffer_prev;
+ line_buffer = lc;
+ line_buffer_prev = lp;
+ line_buffer_pos = 0;
+
+ UINT32 line_buffer_mask = line_buffer_size-1;
+
+ for(int i=0; i != line_buffer_size;) {
+ // vlc 0: start of line
+ // vlc 1: interior of line
+ // vlc 2-9: 7-1 bytes from end of line
+
+ int slot = i ? i < line_buffer_size - 7 ? 1 : (i & 7) + 1 : 0;
+
+ UINT32 tmp = 0;
+ while (!(tmp&0x80))
+ if(get_compressed_bit())
+ tmp = trees[slot][1][tmp];
+ else
+ tmp = trees[slot][0][tmp];
+ if(tmp != 0xff) {
+ int count = (tmp & 7) + 1;
+
+ if(tmp&0x40) {
+ // Copy from previous line
+
+ static int offsets[4] = {0, 1, 0, -1};
+ int offset = offsets[(tmp & 0x18) >> 3];
+ for(int j=0; j != count; j++) {
+ lc[i^1] = lp[((i+offset) & line_buffer_mask)^1];
+ i++;
+ }
+
+ } else {
+ // Get a byte in the stream and write n times
+ UINT8 byte;
+ byte = get_compressed_bit() << 1;
+ byte = (byte | get_compressed_bit()) << 1;
+ byte = (byte | get_compressed_bit()) << 1;
+ byte = (byte | get_compressed_bit()) << 1;
+ byte = (byte | get_compressed_bit()) << 1;
+ byte = (byte | get_compressed_bit()) << 1;
+ byte = (byte | get_compressed_bit()) << 1;
+ byte = byte | get_compressed_bit();
+ for(int j=0; j != count; j++)
+ lc[(i++)^1] = byte;
+
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/mame/machine/315-5881_crypt.h b/src/mame/machine/315-5881_crypt.h
new file mode 100644
index 00000000000..6d667aef807
--- /dev/null
+++ b/src/mame/machine/315-5881_crypt.h
@@ -0,0 +1,87 @@
+
+#pragma once
+
+#ifndef __SEGA315_5881_CRYPT__
+#define __SEGA315_5881_CRYPT__
+
+typedef device_delegate<UINT16 (UINT32)> sega_m2_read_delegate;
+
+extern const device_type SEGA315_5881_CRYPT;
+
+#define MCFG_SET_READ_CALLBACK( _class, _method) \
+ sega_315_5881_crypt_device::set_read_cb(*device, sega_m2_read_delegate(&_class::_method, #_class "::" #_method, NULL, (_class *)0));
+
+
+class sega_315_5881_crypt_device : public device_t
+{
+public:
+ // construction/destruction
+ sega_315_5881_crypt_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+
+ UINT16 do_decrypt(UINT8 *&base);
+ void set_addr_low(UINT16 data);
+ void set_addr_high(UINT16 data);
+ void set_subkey(UINT16 data);
+ void set_key(UINT32 data);
+
+ sega_m2_read_delegate m_read;
+
+ static void set_read_cb(device_t &device,sega_m2_read_delegate readcb)
+ {
+ sega_315_5881_crypt_device &dev = downcast<sega_315_5881_crypt_device &>(device);
+ dev.m_read = readcb;
+ }
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+
+ enum {
+ BUFFER_SIZE = 32768, LINE_SIZE = 512,
+ FLAG_COMPRESSED = 0x10000, FLAG_LINE_SIZE_512 = 0x20000
+ };
+
+ UINT32 key;
+
+ UINT8 *buffer, *line_buffer, *line_buffer_prev;
+ UINT32 prot_cur_address;
+ UINT16 subkey, dec_hist;
+ UINT32 dec_header;
+
+ bool enc_ready;
+
+ int buffer_pos, line_buffer_pos, line_buffer_size, buffer_bit;
+
+ struct sbox {
+ UINT8 table[64];
+ int inputs[6]; // positions of the inputs bits, -1 means no input except from key
+ int outputs[2]; // positions of the output bits
+ };
+
+ static const sbox fn1_sboxes[4][4];
+ static const sbox fn2_sboxes[4][4];
+
+ static const int fn1_game_key_scheduling[38][2];
+ static const int fn2_game_key_scheduling[34][2];
+ static const int fn1_sequence_key_scheduling[20][2];
+ static const int fn2_sequence_key_scheduling[16];
+ static const int fn2_middle_result_scheduling[16];
+
+ static const UINT8 trees[9][2][32];
+
+ int feistel_function(int input, const struct sbox *sboxes, UINT32 subkeys);
+ UINT16 block_decrypt(UINT32 game_key, UINT16 sequence_key, UINT16 counter, UINT16 data);
+
+ UINT16 get_decrypted_16();
+ int get_compressed_bit();
+
+ void enc_start();
+ void enc_fill();
+ void line_fill();
+
+};
+
+#endif
diff --git a/src/mame/machine/315_5296.h b/src/mame/machine/315_5296.h
index a3882475db6..d9c43a01118 100644
--- a/src/mame/machine/315_5296.h
+++ b/src/mame/machine/315_5296.h
@@ -100,6 +100,8 @@ public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
+
+ UINT8 debug_peek_output(offs_t offset) { return m_output_latch[offset & 7]; }
protected:
// device-level overrides
diff --git a/src/mame/machine/asic65.c b/src/mame/machine/asic65.c
index 075e29ab356..978443f497c 100644
--- a/src/mame/machine/asic65.c
+++ b/src/mame/machine/asic65.c
@@ -150,7 +150,7 @@ void asic65_device::device_reset()
void asic65_device::reset_line(int state)
{
- address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
+ address_space &space = subdevice("^maincpu")->memory().space(AS_PROGRAM);
/* rom-based means reset and clear states */
if (m_asic65_type == ASIC65_ROMBASED)
diff --git a/src/mame/machine/atarigen.c b/src/mame/machine/atarigen.c
index e34afcd850b..d6676f16953 100644
--- a/src/mame/machine/atarigen.c
+++ b/src/mame/machine/atarigen.c
@@ -16,7 +16,6 @@
#include "sound/okim6295.h"
#include "sound/pokey.h"
#include "video/atarimo.h"
-#include "includes/slapstic.h"
#include "atarigen.h"
@@ -975,7 +974,8 @@ atarigen_state::atarigen_state(const machine_config &mconfig, device_type type,
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
- m_generic_paletteram_16(*this, "paletteram")
+ m_generic_paletteram_16(*this, "paletteram"),
+ m_slapstic_device(*this, ":slapstic")
{
}
@@ -1022,8 +1022,11 @@ void atarigen_state::machine_reset()
// reset the slapstic
if (m_slapstic_num != 0)
{
- slapstic_reset();
- slapstic_update_bank(slapstic_bank());
+ if (!m_slapstic_device)
+ fatalerror("Slapstic device is missing?\n");
+
+ m_slapstic_device->slapstic_reset();
+ slapstic_update_bank(m_slapstic_device->slapstic_bank());
}
}
@@ -1192,7 +1195,10 @@ inline void atarigen_state::slapstic_update_bank(int bank)
void atarigen_state::device_post_load()
{
- slapstic_update_bank(slapstic_bank());
+ if (!m_slapstic_device)
+ fatalerror("Slapstic device is missing?\n");
+
+ slapstic_update_bank(m_slapstic_device->slapstic_bank());
}
@@ -1232,8 +1238,11 @@ void atarigen_state::slapstic_configure(cpu_device &device, offs_t base, offs_t
// if we have a chip, install it
if (chipnum != 0)
{
+ if (!m_slapstic_device)
+ fatalerror("Slapstic device is missing\n");
+
// initialize the slapstic
- slapstic_init(machine(), chipnum);
+ m_slapstic_device->slapstic_init(machine(), chipnum);
// install the memory handlers
address_space &program = device.space(AS_PROGRAM);
@@ -1262,7 +1271,10 @@ void atarigen_state::slapstic_configure(cpu_device &device, offs_t base, offs_t
WRITE16_MEMBER(atarigen_state::slapstic_w)
{
- slapstic_update_bank(slapstic_tweak(space, offset));
+ if (!m_slapstic_device)
+ fatalerror("Slapstic device is missing?\n");
+
+ slapstic_update_bank(m_slapstic_device->slapstic_tweak(space, offset));
}
@@ -1273,11 +1285,14 @@ WRITE16_MEMBER(atarigen_state::slapstic_w)
READ16_MEMBER(atarigen_state::slapstic_r)
{
+ if (!m_slapstic_device)
+ fatalerror("Slapstic device is missing?\n");
+
// fetch the result from the current bank first
int result = m_slapstic[offset & 0xfff];
// then determine the new one
- slapstic_update_bank(slapstic_tweak(space, offset));
+ slapstic_update_bank(m_slapstic_device->slapstic_tweak(space, offset));
return result;
}
diff --git a/src/mame/machine/atarigen.h b/src/mame/machine/atarigen.h
index f6b9bce95f1..6ce56c35a8c 100644
--- a/src/mame/machine/atarigen.h
+++ b/src/mame/machine/atarigen.h
@@ -17,6 +17,7 @@
#include "video/atarimo.h"
#include "cpu/m6502/m6502.h"
#include "sound/okim6295.h"
+#include "includes/slapstic.h"
/***************************************************************************
@@ -431,6 +432,7 @@ public:
optional_device<screen_device> m_screen;
optional_device<palette_device> m_palette;
optional_shared_ptr<UINT16> m_generic_paletteram_16;
+ optional_device<atari_slapstic_device> m_slapstic_device;
};
diff --git a/src/mame/machine/harddriv.c b/src/mame/machine/harddriv.c
index a093b830e67..3d138b8f954 100644
--- a/src/mame/machine/harddriv.c
+++ b/src/mame/machine/harddriv.c
@@ -36,22 +36,25 @@
*
*************************************/
-MACHINE_START_MEMBER(harddriv_state,harddriv)
+void harddriv_state::device_start()
{
- atarigen_state::machine_start();
+ //atarigen_state::machine_start();
/* predetermine memory regions */
m_sim_memory = (UINT16 *)memregion("user1")->base();
m_sim_memory_size = memregion("user1")->bytes() / 2;
m_adsp_pgm_memory_word = (UINT16 *)(reinterpret_cast<UINT8 *>(m_adsp_pgm_memory.target()) + 1);
+
+ init_video();
+
}
-MACHINE_RESET_MEMBER(harddriv_state,harddriv)
+void harddriv_state::device_reset()
{
/* generic reset */
- atarigen_state::machine_reset();
- slapstic_reset();
+ //atarigen_state::machine_reset();
+ m_slapstic_device->slapstic_reset();
/* halt several of the DSPs to start */
if (m_adsp != NULL) m_adsp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
@@ -196,6 +199,11 @@ WRITE16_MEMBER( harddriv_state::hd68k_msp_io_w )
*
*************************************/
+READ16_MEMBER( harddriv_state::hd68k_a80000_r )
+{
+ return ioport("a80000")->read_safe(0xffff);
+}
+
READ16_MEMBER( harddriv_state::hd68k_port0_r )
{
/* port is as follows:
@@ -213,8 +221,10 @@ READ16_MEMBER( harddriv_state::hd68k_port0_r )
.....
0x8000 = SW1 #1
*/
- int temp = (ioport("SW1")->read() << 8) | ioport("IN0")->read();
- if (get_hblank(*m_screen)) temp ^= 0x0002;
+ screen_device &scr = m_gsp->screen();
+
+ int temp = (ioport("SW1")->read_safe(0xff) << 8) | ioport("IN0")->read_safe(0xff);
+ if (get_hblank(scr)) temp ^= 0x0002;
temp ^= 0x0018; /* both EOCs always high for now */
return temp;
}
@@ -222,7 +232,7 @@ READ16_MEMBER( harddriv_state::hd68k_port0_r )
READ16_MEMBER( harddriv_state::hdc68k_port1_r )
{
- UINT16 result = ioport("a80000")->read();
+ UINT16 result = ioport("a80000")->read_safe(0xffff);
UINT16 diff = result ^ m_hdc68k_last_port1;
/* if a new shifter position is selected, use it */
@@ -250,7 +260,7 @@ READ16_MEMBER( harddriv_state::hdc68k_port1_r )
READ16_MEMBER( harddriv_state::hda68k_port1_r )
{
- UINT16 result = ioport("a80000")->read();
+ UINT16 result = ioport("a80000")->read_safe(0xffff);
/* merge in the wheel edge latch bit */
if (m_hdc68k_wheel_edge)
@@ -263,7 +273,7 @@ READ16_MEMBER( harddriv_state::hda68k_port1_r )
READ16_MEMBER( harddriv_state::hdc68k_wheel_r )
{
/* grab the new wheel value and upconvert to 12 bits */
- UINT16 new_wheel = ioport("12BADC0")->read() << 4;
+ UINT16 new_wheel = ioport("12BADC0")->read_safe(0xffff) << 4;
/* hack to display the wheel position */
if (space.machine().input().code_pressed(KEYCODE_LSHIFT))
@@ -317,14 +327,14 @@ WRITE16_MEMBER( harddriv_state::hd68k_adc_control_w )
if (m_adc_control & 0x08)
{
m_adc8_select = m_adc_control & 0x07;
- m_adc8_data = ioport(adc8names[m_adc8_select])->read();
+ m_adc8_data = ioport(adc8names[m_adc8_select])->read_safe(0xffff);
}
/* handle a write to the 12-bit ADC address select */
if (m_adc_control & 0x40)
{
m_adc12_select = (m_adc_control >> 4) & 0x03;
- m_adc12_data = space.machine().root_device().ioport(adc12names[m_adc12_select])->read() << 4;
+ m_adc12_data = ioport(adc12names[m_adc12_select])->read_safe(0xffff) << 4;
}
/* bit 7 selects which byte of the 12 bit data to read */
@@ -485,9 +495,11 @@ WRITE16_MEMBER( harddriv_state::hdgsp_io_w )
}
}
+ screen_device &scr = m_gsp->screen();
+
/* detect changes to HEBLNK and HSBLNK and force an update before they change */
if ((offset == REG_HEBLNK || offset == REG_HSBLNK) && data != m_gsp->io_register_r(space, offset, 0xffff))
- m_screen->update_partial(m_screen->vpos() - 1);
+ scr.update_partial(scr.vpos() - 1);
m_gsp->io_register_w(space, offset, data, mem_mask);
}
@@ -1502,11 +1514,11 @@ WRITE16_MEMBER( harddriv_state::hd68k_dsk_control_w )
switch (offset & 7)
{
case 0: /* DSPRESTN */
- m_dsp32->set_input_line(INPUT_LINE_RESET, val ? CLEAR_LINE : ASSERT_LINE);
+ if (m_dsp32) m_dsp32->set_input_line(INPUT_LINE_RESET, val ? CLEAR_LINE : ASSERT_LINE);
break;
case 1: /* DSPZN */
- m_dsp32->set_input_line(INPUT_LINE_HALT, val ? CLEAR_LINE : ASSERT_LINE);
+ if (m_dsp32) m_dsp32->set_input_line(INPUT_LINE_HALT, val ? CLEAR_LINE : ASSERT_LINE);
break;
case 2: /* ZW1 */
@@ -1570,7 +1582,7 @@ READ16_MEMBER( harddriv_state::hd68k_dsk_rom_r )
WRITE16_MEMBER( harddriv_state::hd68k_dsk_dsp32_w )
{
m_dsk_pio_access = TRUE;
- m_dsp32->pio_w(offset, data);
+ if (m_dsp32) m_dsp32->pio_w(offset, data);
m_dsk_pio_access = FALSE;
}
@@ -1579,7 +1591,9 @@ READ16_MEMBER( harddriv_state::hd68k_dsk_dsp32_r )
{
UINT16 result;
m_dsk_pio_access = TRUE;
- result = m_dsp32->pio_r(offset);
+ if (m_dsp32) result = m_dsp32->pio_r(offset);
+ else result = 0x00;
+
m_dsk_pio_access = FALSE;
return result;
}
@@ -1671,13 +1685,13 @@ WRITE16_MEMBER( harddriv_state::hddspcom_control_w )
WRITE16_MEMBER( harddriv_state::rd68k_slapstic_w )
{
- slapstic_tweak(space, offset & 0x3fff);
+ m_slapstic_device->slapstic_tweak(space, offset & 0x3fff);
}
READ16_MEMBER( harddriv_state::rd68k_slapstic_r )
{
- int bank = slapstic_tweak(space, offset & 0x3fff) * 0x4000;
+ int bank = m_slapstic_device->slapstic_tweak(space, offset & 0x3fff) * 0x4000;
return m_m68k_slapstic_base[bank + (offset & 0x3fff)];
}
diff --git a/src/mame/machine/n64.c b/src/mame/machine/n64.c
index 78b97ac9e90..501d8d2cbe5 100644
--- a/src/mame/machine/n64.c
+++ b/src/mame/machine/n64.c
@@ -267,10 +267,6 @@ void n64_periphs::device_reset()
pif_ram[0x27] = 0x3f;
cic_type=6;
}
- else
- {
- //printf("Unknown BootCode Checksum %08X%08X\n", (UINT32)(boot_checksum>>32),(UINT32)(boot_checksum));
- }
}
// Memory Interface (MI)
@@ -312,13 +308,11 @@ READ32_MEMBER( n64_periphs::mi_reg_r )
break;
}
- //printf("mi_reg_r %08x = %08x\n", offset * 4, ret); fflush(stdout);
return ret;
}
WRITE32_MEMBER( n64_periphs::mi_reg_w )
{
- //printf("mi_reg_w %08x %08x %08x\n", offset * 4, data, mem_mask); fflush(stdout);
switch (offset)
{
case 0x00/4: // MI_INIT_MODE_REG
@@ -409,12 +403,10 @@ void n64_periphs::check_interrupts()
{
if (mi_intr_mask & mi_interrupt)
{
- //printf("Asserting IRQ, %02x : %02x\n", mi_intr_mask, mi_interrupt); fflush(stdout);
machine().device("maincpu")->execute().set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
}
else
{
- //printf("Deasserting IRQ, %02x : %02x\n", mi_intr_mask, mi_interrupt); fflush(stdout);
machine().device("maincpu")->execute().set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
}
}
@@ -466,10 +458,9 @@ WRITE32_MEMBER( n64_periphs::is64_w )
case 0x0014/4:
for(i = 0x20; i < (0x20 + data); i++)
{
- //printf( "%c", is64_buffer[i] );
if(is64_buffer[i] == 0x0a)
{
- //printf( "%c", 0x0d );
+ printf( "%c", 0x0d );
}
is64_buffer[i] = 0;
}
@@ -511,7 +502,6 @@ WRITE32_MEMBER( n64_periphs::open_w )
READ32_MEMBER( n64_periphs::rdram_reg_r )
{
- //printf("rdram_reg_r %08x = %08x\n", offset * 4, rdram_regs[offset]); fflush(stdout);
if(offset > 0x24/4)
{
logerror("rdram_reg_r: %08X, %08X at %08X\n", offset, mem_mask, maincpu->safe_pc());
@@ -522,7 +512,6 @@ READ32_MEMBER( n64_periphs::rdram_reg_r )
WRITE32_MEMBER( n64_periphs::rdram_reg_w )
{
- //printf("rdram_reg_w %08x %08x %08x\n", offset * 4, data, mem_mask); fflush(stdout);
if(offset > 0x24/4)
{
logerror("rdram_reg_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, maincpu->safe_pc());
@@ -542,7 +531,6 @@ void n64_periphs::sp_dma(int direction)
length = (length + 7) & ~7;
}
- //printf("Length %08x Skip %08x Count %08x\n", length, sp_dma_skip, sp_dma_count); fflush(stdout);
if (sp_mem_addr & 0x3)
{
sp_mem_addr = sp_mem_addr & ~3;
@@ -554,8 +542,6 @@ void n64_periphs::sp_dma(int direction)
if ((sp_mem_addr & 0xfff) + (length) > 0x1000)
{
- //printf("sp_dma: dma out of memory area: %08X, %08X, %08X\n", sp_mem_addr, sp_dram_addr, length);
- //fatalerror("sp_dma: dma out of memory area: %08X, %08X\n", sp_mem_addr, length);
length = 0x1000 - (sp_mem_addr & 0xfff);
}
@@ -602,7 +588,6 @@ void n64_periphs::sp_dma(int direction)
WRITE32_MEMBER(n64_periphs::sp_set_status)
{
- //printf("sp_set_status: %08x\n", data);
if (data & 0x1)
{
rspcpu->execute().set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
@@ -638,8 +623,6 @@ READ32_MEMBER(n64_periphs::sp_reg_r)
break;
case 0x10/4: // SP_STATUS_REG
- //machine().scheduler().synchronize();
- //machine().scheduler().boost_interleave(attotime::from_msec(1), attotime::from_msec(m));
ret = rspcpu->state().state_int(RSP_SR);
break;
@@ -652,7 +635,6 @@ READ32_MEMBER(n64_periphs::sp_reg_r)
break;
case 0x1c/4: // SP_SEMAPHORE_REG
- //machine().scheduler().boost_interleave(attotime::from_usec(1), attotime::from_usec(1));
machine().device("maincpu")->execute().yield();
if( sp_semaphore )
{
@@ -660,7 +642,6 @@ READ32_MEMBER(n64_periphs::sp_reg_r)
}
else
{
- //printf("Semaphore is now acquired, returning 0\n");
sp_semaphore = 1;
ret = 0;
}
@@ -718,15 +699,12 @@ READ32_MEMBER(n64_periphs::sp_reg_r)
break;
}
- //printf("%08x sp_reg_r %08x = %08x\n", (UINT32)maincpu->state().state_int(MIPS3_PC), offset * 4, ret); fflush(stdout);
return ret;
}
WRITE32_MEMBER(n64_periphs::sp_reg_w )
{
- //printf("%08x sp_reg_w %08x %08x %08x\n", (UINT32)maincpu->state().state_int(MIPS3_PC), offset * 4, data, mem_mask); fflush(stdout);
-
if ((offset & 0x10000) == 0)
{
switch (offset & 0xffff)
@@ -758,43 +736,37 @@ WRITE32_MEMBER(n64_periphs::sp_reg_w )
UINT32 oldstatus = rspcpu->state().state_int(RSP_SR);
UINT32 newstatus = oldstatus;
- // printf( "RSP_STATUS_REG Write; %08x\n", data );
if (data & 0x00000001) // clear halt
{
rspcpu->execute().set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
newstatus &= ~RSP_STATUS_HALT;
- //printf("***SP HALT CLR***\n"); fflush(stdout);
+ machine().scheduler().abort_timeslice();
+ machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
}
if (data & 0x00000002) // set halt
{
rspcpu->execute().set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
newstatus |= RSP_STATUS_HALT;
- //printf("***SP HALT SET***\n"); fflush(stdout);
}
if (data & 0x00000004)
{
newstatus &= ~RSP_STATUS_BROKE;
- //printf("***SP BROKE CLR***\n"); fflush(stdout);
}
if (data & 0x00000008) // clear interrupt
{
- //printf("***SP INT CLR***\n"); fflush(stdout);
clear_rcp_interrupt(SP_INTERRUPT);
}
if (data & 0x00000010) // set interrupt
{
- //printf("***SP INT SET***\n"); fflush(stdout);
signal_rcp_interrupt(SP_INTERRUPT);
}
if (data & 0x00000020)
{
newstatus &= ~RSP_STATUS_SSTEP;
- //printf("***SP SSTEP CLR***\n"); fflush(stdout);
}
if (data & 0x00000040)
{
newstatus |= RSP_STATUS_SSTEP; // set single step
- //printf("***SP SSTEP SET***\n"); fflush(stdout);
if(!(oldstatus & (RSP_STATUS_BROKE | RSP_STATUS_HALT)))
{
rspcpu->state().set_state_int(RSP_STEPCNT, 1 );
@@ -804,100 +776,80 @@ WRITE32_MEMBER(n64_periphs::sp_reg_w )
if (data & 0x00000080)
{
newstatus &= ~RSP_STATUS_INTR_BREAK; // clear interrupt on break
- //printf("***SP INTRBRK CLR***\n"); fflush(stdout);
}
if (data & 0x00000100)
{
newstatus |= RSP_STATUS_INTR_BREAK; // set interrupt on break
- //printf("***SP INTRBRK SET***\n"); fflush(stdout);
}
if (data & 0x00000200)
{
newstatus &= ~RSP_STATUS_SIGNAL0; // clear signal 0
- //printf("***SP YIELD CLR***\n"); fflush(stdout);
}
if (data & 0x00000400)
{
newstatus |= RSP_STATUS_SIGNAL0; // set signal 0
- //printf("***SP YIELD SET***\n"); fflush(stdout);
}
if (data & 0x00000800)
{
newstatus &= ~RSP_STATUS_SIGNAL1; // clear signal 1
- //printf("***SP YIELDED CLR***\n"); fflush(stdout);
}
if (data & 0x00001000)
{
newstatus |= RSP_STATUS_SIGNAL1; // set signal 1
- //printf("***SP YIELDED SET***\n"); fflush(stdout);
}
if (data & 0x00002000)
{
newstatus &= ~RSP_STATUS_SIGNAL2 ; // clear signal 2
- //printf("***SP TASKDONE CLR***\n"); fflush(stdout);
}
if (data & 0x00004000)
{
newstatus |= RSP_STATUS_SIGNAL2; // set signal 2
- //printf("***SP TASKDONE SET***\n"); fflush(stdout);
}
if (data & 0x00008000)
{
newstatus &= ~RSP_STATUS_SIGNAL3; // clear signal 3
- //printf("***SP SIG3 CLR***\n"); fflush(stdout);
}
if (data & 0x00010000)
{
newstatus |= RSP_STATUS_SIGNAL3; // set signal 3
- //printf("***SP SIG3 SET***\n"); fflush(stdout);
}
if (data & 0x00020000)
{
newstatus &= ~RSP_STATUS_SIGNAL4; // clear signal 4
- //printf("***SP SIG4 CLR***\n"); fflush(stdout);
}
if (data & 0x00040000)
{
newstatus |= RSP_STATUS_SIGNAL4; // set signal 4
- //printf("***SP SIG4 SET***\n"); fflush(stdout);
}
if (data & 0x00080000)
{
newstatus &= ~RSP_STATUS_SIGNAL5; // clear signal 5
- //printf("***SP SIG5 CLR***\n"); fflush(stdout);
}
if (data & 0x00100000)
{
newstatus |= RSP_STATUS_SIGNAL5; // set signal 5
- //printf("***SP SIG5 SET***\n"); fflush(stdout);
}
if (data & 0x00200000)
{
newstatus &= ~RSP_STATUS_SIGNAL6; // clear signal 6
- //printf("***SP SIG6 CLR***\n"); fflush(stdout);
}
if (data & 0x00400000)
{
newstatus |= RSP_STATUS_SIGNAL6; // set signal 6
- //printf("***SP SIG6 SET***\n"); fflush(stdout);
}
if (data & 0x00800000)
{
newstatus &= ~RSP_STATUS_SIGNAL7; // clear signal 7
- //printf("***SP SIG7 CLR***\n"); fflush(stdout);
}
if (data & 0x01000000)
{
newstatus |= RSP_STATUS_SIGNAL7; // set signal 7
- //printf("***SP SIG7 SET***\n"); fflush(stdout);
}
rspcpu->state().set_state_int(RSP_SR, newstatus);
break;
}
case 0x1c/4: // SP_SEMAPHORE_REG
- //machine().scheduler().boost_interleave(attotime::from_usec(1), attotime::from_usec(1));
- //printf("Semaphore is being released\n");
if(data == 0)
{
sp_semaphore = 0;
@@ -976,7 +928,6 @@ READ32_MEMBER( n64_periphs::dp_reg_r )
break;
}
- //printf("%08x dp_reg_r %08x = %08x\n", (UINT32)space.machine().device("rsp")->state().state_int(RSP_PC), offset, ret); fflush(stdout);
return ret;
}
@@ -984,7 +935,6 @@ WRITE32_MEMBER( n64_periphs::dp_reg_w )
{
n64_state *state = space.machine().driver_data<n64_state>();
- //printf("%08x dp_reg_w %08x %08x %08x\n", (UINT32)space.machine().device("rsp")->state().state_int(RSP_PC), offset, data, mem_mask); fflush(stdout);
switch (offset)
{
case 0x00/4: // DP_START_REG
@@ -993,7 +943,6 @@ WRITE32_MEMBER( n64_periphs::dp_reg_w )
break;
case 0x04/4: // DP_END_REG
- //printf("dp_end_reg %08x\n", data);
state->m_rdp->SetEndReg(data);
g_profiler.start(PROFILER_USER1);
state->m_rdp->ProcessList();
@@ -1042,7 +991,7 @@ void n64_periphs::vi_recalculate_resolution()
int y_end = (vi_vstart & 0x000003ff) / 2;
int width = ((vi_xscale & 0x00000fff) * (x_end - x_start)) / 0x400;
int height = ((vi_yscale & 0x00000fff) * (y_end - y_start)) / 0x400;
- //printf("%04x | %02x | ", vi_xscale >> 16, vi_burst & 0x000000ff);
+
rectangle visarea = m_screen->visible_area();
attoseconds_t period = m_screen->frame_period().attoseconds;
@@ -1070,7 +1019,6 @@ void n64_periphs::vi_recalculate_resolution()
visarea.max_x = width - 1;
visarea.max_y = height - 1;
- //printf("Reconfig %d, %d (%d - %d), %08x, %08x, %08x, %08x, %08x\n", width, height, x_start, x_end, vi_width, vi_xscale, vi_hsync, vi_hstart, vi_burst);
m_screen->configure(width, 525, visarea, period);
}
@@ -1140,13 +1088,11 @@ READ32_MEMBER( n64_periphs::vi_reg_r )
break;
}
- //printf("vi_reg_r %08x = %08x\n", offset * 4, ret);
return ret;
}
WRITE32_MEMBER( n64_periphs::vi_reg_w )
{
- //printf("vi_reg_w %08x %08x %08x\n", offset * 4, data, mem_mask);
n64_state *state = machine().driver_data<n64_state>();
switch (offset)
@@ -1379,13 +1325,11 @@ READ32_MEMBER( n64_periphs::ai_reg_r )
break;
}
- //printf("ai_reg_r %08x = %08x\n", offset * 4, ret);
return ret;
}
WRITE32_MEMBER( n64_periphs::ai_reg_w )
{
- //printf("ai_reg_w %08x %08x %08x\n", offset * 4, data, mem_mask);
switch (offset)
{
case 0x00/4: // AI_DRAM_ADDR_REG
@@ -1408,7 +1352,6 @@ WRITE32_MEMBER( n64_periphs::ai_reg_w )
case 0x10/4: // AI_DACRATE_REG
ai_dacrate = data & 0x3fff;
dmadac_set_frequency(&ai_dac[0], 2, (double)DACRATE_NTSC / (double)(ai_dacrate+1));
- //printf( "frequency: %f\n", (double)DACRATE_NTSC / (double)(ai_dacrate+1) );
dmadac_enable(&ai_dac[0], 2, 1);
break;
@@ -1455,8 +1398,6 @@ void n64_periphs::pi_dma_tick()
cart_addr &= ((machine().root_device().memregion("user2")->bytes() >> 1) - 1);
}
- //printf("%08x Cart, %08x Dram\n", cart_addr << 1, dram_addr << 1); fflush(stdout);
-
if(pi_dma_dir == 1)
{
UINT32 dma_length = pi_wr_len + 1;
@@ -1558,13 +1499,11 @@ READ32_MEMBER( n64_periphs::pi_reg_r )
break;
}
- //printf("pi_reg_r %08x = %08x\n", offset * 4, ret);
return ret;
}
WRITE32_MEMBER( n64_periphs::pi_reg_w )
{
- //printf("pi_reg_w %08x %08x %08x\n", offset * 4, data, mem_mask); fflush(stdout);
switch (offset)
{
case 0x00/4: // PI_DRAM_ADDR_REG
@@ -1586,7 +1525,6 @@ WRITE32_MEMBER( n64_periphs::pi_reg_w )
pi_status |= 1;
attotime dma_period = attotime::from_hz(93750000) * (int)((float)(pi_rd_len + 1) * 5.08f); // Measured as between 2.53 cycles per byte and 2.55 cycles per byte
- //printf("want read dma in %d\n", (pi_rd_len + 1));
pi_dma_timer->adjust(dma_period);
//pi_dma_tick();
break;
@@ -1599,7 +1537,6 @@ WRITE32_MEMBER( n64_periphs::pi_reg_w )
pi_status |= 1;
attotime dma_period = attotime::from_hz(93750000) * (int)((float)(pi_wr_len + 1) * 5.08f); // Measured as between 2.53 cycles per byte and 2.55 cycles per byte
- //printf("want write dma in %d\n", (pi_wr_len + 1));
pi_dma_timer->adjust(dma_period);
//pi_dma_tick();
@@ -1658,7 +1595,6 @@ WRITE32_MEMBER( n64_periphs::pi_reg_w )
READ32_MEMBER( n64_periphs::ri_reg_r )
{
- //printf("ri_reg_r %08x = %08x\n", offset * 4, ri_regs[offset]);
if(offset > 0x1c/4)
{
logerror("ri_reg_r: %08X, %08X at %08X\n", offset, mem_mask, maincpu->safe_pc());
@@ -1669,7 +1605,6 @@ READ32_MEMBER( n64_periphs::ri_reg_r )
WRITE32_MEMBER( n64_periphs::ri_reg_w )
{
- //printf("ri_reg_w %08x %08x %08x\n", offset * 4, data, mem_mask);
if(offset > 0x1c/4)
{
logerror("ri_reg_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, maincpu->safe_pc());
@@ -1732,20 +1667,12 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
case 0x00: // Read status
case 0xff: // Reset
{
- if(command == 0)
- {
- //printf("Read status\n");
- }
- else
- {
- //printf("Reset\n");
- }
switch (channel)
{
case 0:
case 1:
{
- //printf("Read controller %d status\n", channel + 1);
+ // Read status
rdata[0] = 0x05;
rdata[1] = 0x00;
rdata[2] = 0x01;
@@ -1754,13 +1681,12 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
case 2:
case 3:
{
- //printf("Read controller %d status (NC)\n", channel + 1);
- // not connected
+ // Read status (unconnected)
return 1;
}
case 4:
{
- //printf("Read EEPROM status\n");
+ // Read EEPROM status
rdata[0] = 0x00;
rdata[1] = 0x80;
rdata[2] = 0x00;
@@ -1791,10 +1717,9 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
switch (channel)
{
- case 0: //p1 inputs
- case 1: //p2 inputs
+ case 0: // P1 Inputs
+ case 1: // P2 Inputs
{
- //printf("Read p%d inputs\n", channel + 1);
buttons = machine().root_device().ioport(portnames[(channel*3) + 0])->read();
x = machine().root_device().ioport(portnames[(channel*3) + 1])->read() - 128;
y = machine().root_device().ioport(portnames[(channel*3) + 2])->read() - 128;
@@ -1808,8 +1733,7 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
case 2:
case 3:
{
- //printf("Controller %d not connected\n", channel + 1);
- // not connected
+ // P3/P4 Inputs (not connected)
return 1;
}
}
@@ -1824,8 +1748,6 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
address = (sdata[1] << 8) | (sdata[2]);
address &= ~0x1f;
- ////printf("Read mempak at %04x\n", address);
-
if(address == 0x8000)
{
for(int i = 0; i < rlength-1; i++)
@@ -1854,11 +1776,7 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
UINT32 address = (sdata[1] << 8) | (sdata[2]);
address &= ~0x1f;
- ////printf("Write mempak at %04x\n", address);
- if (address >= 0x8000)
- {
- }
- else
+ if (address < 0x8000)
{
for(int i = 3; i < slength; i++)
{
@@ -1885,8 +1803,6 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
UINT16 block_offset = sdata[1] * 8;
- //printf("Read EEPROM at %04x\n", block_offset);
-
for(int i=0; i < 8; i++)
{
rdata[i] = m_save_data.eeprom[block_offset+i];
@@ -1909,8 +1825,6 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
UINT16 block_offset = sdata[1] * 8;
- //printf("Write EEPROM at %04x\n", block_offset);
-
for(int i = 0; i < 8; i++)
{
m_save_data.eeprom[block_offset+i] = sdata[2+i];
@@ -1921,7 +1835,6 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
case 0x06: // Read RTC Status
{
- //printf("Read RTC Status\n");
rdata[0] = 0x00;
rdata[1] = 0x10;
rdata[2] = 0x00;
@@ -1933,7 +1846,6 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
switch(sdata[1])
{
case 0:
- //printf("Read RTC Block Header\n");
rdata[0] = 0x00;
rdata[1] = 0x02;
rdata[8] = 0x00;
@@ -1954,7 +1866,6 @@ int n64_periphs::pif_channel_handle_command(int channel, int slength, UINT8 *sda
rdata[6] = convert_to_bcd(systime.local_time.year % 100); // Year
rdata[7] = convert_to_bcd(systime.local_time.year / 100); // Century
rdata[8] = 0x00;
- //printf("Read RTC Time\n");
return 0;
}
return 1;
@@ -1982,16 +1893,13 @@ void n64_periphs::handle_pif()
while(cmd_ptr < 0x3f && !end)
{
INT8 bytes_to_send = (INT8)pif_cmd[cmd_ptr++];
- //printf("bytes to send: 0x%02x\n", bytes_to_send);
if (bytes_to_send == -2)
{
end = 1;
- //printf("end\n");
}
else if (bytes_to_send < 0)
{
- //printf("do nothing\n");
// do nothing
}
else
@@ -2002,7 +1910,6 @@ void n64_periphs::handle_pif()
UINT8 send_buffer[0x40];
INT8 bytes_to_recv = pif_cmd[cmd_ptr++];
- //printf("bytes to receive: 0x%02x\n", bytes_to_recv);
if (bytes_to_recv == -2)
{
@@ -2015,11 +1922,9 @@ void n64_periphs::handle_pif()
}
int res = pif_channel_handle_command(channel, bytes_to_send, send_buffer, bytes_to_recv, recv_buffer);
- //printf("result: %d\n", res);
if (res == 0)
{
- //printf("cmd_ptr (%d) + bytes_to_recv (%d) = %d\n", cmd_ptr, bytes_to_recv, cmd_ptr + bytes_to_recv);
if (cmd_ptr + bytes_to_recv > 0x3f)
{
fatalerror("cmd_ptr overflow\n");
@@ -2110,13 +2015,11 @@ READ32_MEMBER( n64_periphs::si_reg_r )
ret = si_status;
}
- //printf("si_reg_r %08x = %08x\n", offset * 4, ret); fflush(stdout);
return ret;
}
WRITE32_MEMBER( n64_periphs::si_reg_w )
{
- //printf("si_reg_w %08x %08x %08x\n", offset * 4, data, mem_mask); fflush(stdout);
switch (offset)
{
case 0x00/4: // SI_DRAM_ADDR_REG
@@ -2396,7 +2299,7 @@ void n64_state::n64_machine_stop()
return;
device_image_interface *image = dynamic_cast<device_image_interface *>(periphs->m_nvram_image);
- //printf("Saving stuff\n");
+
UINT8 data[0x30800];
memcpy(data, n64_sram, 0x20000);
memcpy(data + 0x20000, periphs->m_save_data.eeprom, 0x800);
diff --git a/src/mame/machine/naomim2.c b/src/mame/machine/naomim2.c
index d21c3746a92..ff07cbdfdbf 100644
--- a/src/mame/machine/naomim2.c
+++ b/src/mame/machine/naomim2.c
@@ -105,7 +105,8 @@ note: if ROM is not mounted its area readed as 0xFF
const device_type NAOMI_M2_BOARD = &device_creator<naomi_m2_board>;
naomi_m2_board::naomi_m2_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : naomi_board(mconfig, NAOMI_M2_BOARD, "Sega NAOMI M2 BOARD", tag, owner, clock, "naomi_m2_board", __FILE__)
+ : naomi_board(mconfig, NAOMI_M2_BOARD, "Sega NAOMI M2 BOARD", tag, owner, clock, "naomi_m2_board", __FILE__),
+ m_cryptdevice(*this, "segam2crypt")
{
key_tag = 0;
}
@@ -120,30 +121,10 @@ void naomi_m2_board::device_start()
{
naomi_board::device_start();
-#if USE_NAOMICRYPT
- key = get_naomi_key(machine());
-#else
- const UINT8 *key_data = memregion(key_tag)->base();
- key = (key_data[0] << 24) | (key_data[1] << 16) | (key_data[2] << 8) | key_data[3];
-#endif
ram = auto_alloc_array(machine(), UINT8, RAM_SIZE);
- buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE);
- line_buffer = auto_alloc_array(machine(), UINT8, LINE_SIZE);
- line_buffer_prev = auto_alloc_array(machine(), UINT8, LINE_SIZE);
- save_pointer(NAME(ram), RAM_SIZE);
- save_pointer(NAME(buffer), BUFFER_SIZE);
- save_pointer(NAME(line_buffer), LINE_SIZE);
- save_pointer(NAME(line_buffer_prev), LINE_SIZE);
save_item(NAME(rom_cur_address));
- save_item(NAME(prot_cur_address));
- save_item(NAME(subkey));
- save_item(NAME(enc_ready));
- save_item(NAME(dec_hist));
- save_item(NAME(dec_header));
- save_item(NAME(buffer_pos));
- save_item(NAME(line_buffer_pos));
- save_item(NAME(line_buffer_size));
+ save_pointer(NAME(ram), RAM_SIZE);
}
void naomi_m2_board::device_reset()
@@ -151,21 +132,15 @@ void naomi_m2_board::device_reset()
naomi_board::device_reset();
memset(ram, 0, RAM_SIZE);
- memset(buffer, 0, BUFFER_SIZE);
- memset(line_buffer, 0, LINE_SIZE);
- memset(line_buffer_prev, 0, LINE_SIZE);
rom_cur_address = 0;
- prot_cur_address = 0;
- subkey = 0;
- dec_hist = 0;
- dec_header = 0;
- enc_ready = false;
-
- buffer_pos = 0;
- line_buffer_pos = 0;
- line_buffer_size = 0;
- buffer_bit = 0;
+
+#if USE_NAOMICRYPT
+ m_cryptdevice->set_key(get_naomi_key(machine()));
+#else
+ const UINT8 *key_data = memregion(key_tag)->base();
+ m_cryptdevice->set_key((key_data[0] << 24) | (key_data[1] << 16) | (key_data[2] << 8) | key_data[3]);
+#endif
}
void naomi_m2_board::board_setup_address(UINT32 address, bool is_dma)
@@ -175,21 +150,10 @@ void naomi_m2_board::board_setup_address(UINT32 address, bool is_dma)
void naomi_m2_board::board_get_buffer(UINT8 *&base, UINT32 &limit)
{
+
if(rom_cur_address & 0x40000000) {
if(rom_cur_address == 0x4001fffe) {
- if(!enc_ready)
- enc_start();
- if(dec_header & FLAG_COMPRESSED) {
- if(line_buffer_pos == line_buffer_size)
- line_fill();
- base = line_buffer + line_buffer_pos;
- line_buffer_pos += 2;
- } else {
- if(buffer_pos == BUFFER_SIZE)
- enc_fill();
- base = buffer + buffer_pos;
- buffer_pos += 2;
- }
+ m_cryptdevice->do_decrypt(base);
limit = 2;
} else
@@ -214,6 +178,8 @@ void naomi_m2_board::board_advance(UINT32 size)
void naomi_m2_board::board_write(offs_t offset, UINT16 data)
{
+
+
if(offset & 0x40000000) {
if((offset & 0x0f000000) == 0x02000000) {
offset &= RAM_SIZE-1;
@@ -222,724 +188,35 @@ void naomi_m2_board::board_write(offs_t offset, UINT16 data)
return;
}
switch(offset & 0x1fffffff) {
- case 0x1fff8: prot_cur_address = (prot_cur_address & 0xffff0000) | data; enc_ready = false; return;
- case 0x1fffa: prot_cur_address = (prot_cur_address & 0x0000ffff) | (data << 16); enc_ready = false; return;
- case 0x1fffc: subkey = data; enc_ready = false; return;
- }
- }
- throw emu_fatalerror("NAOMIM2: unhandled board write %08x, %04x\n", offset, data);
-}
-
-/***************************************************************************
- DECRYPTION EMULATION
-
-By convention, we label the three known cart protection methods this way (using Deunan Knute's wording):
-M1: DMA read of protected ROM area
-M2: special read of ROM area which supplies decryption key first
-M3: normal read followed by write to cart's decryption buffer (up to 64kB), followed by M2 but from buffer area
-
-Notes below refer to M2 & M3.
-
-The encryption is done by a stream cipher operating in counter mode, which use a 16-bits internal block cipher.
-
-There are 2 "control bits" at the start of the decrypted stream which control the mode of operation: bit #1 set to 1 means
-that the decrypted stream needs to be decompressed after being decrypted. More on this later.
-
-The next 16-bits are part of the header (they don't belong to the plaintext), but his meaning is unclear. It has been
-conjectured that it could stablish when to "reset" the process and start processing a new stream (based on some tests
-on WWFROYAL, in which the decryption's output doesn't seem to be valid for more than some dozens of words), but some
-more testing would be needed for clarifying that.
-
-After those 18 heading bits, we find the proper plaintext. It must be noted that, due to the initial 2 special bits,
-the 16-bits words of the plaintext are shifted 2 bits respect to the word-boundaries of the output stream of the
-internal block-cipher. So, at a given step, the internal block cipher will output 16-bits, 14 of which will go to a
-given plaintext word, and the remaining 2 to the next plaintext word.
-
-The underlying block cipher consists of two 4-round Feistel Networks (FN): the first one takes the counter (16 bits),
-the game-key (>=26 bits) and the sequence-key (16 bits) and output a middle result (16 bits) which will act as another key
-for the second one. The second FN will take the encrypted word (16 bits), the game-key, the sequence-key and the result
-from the first FN and will output the decrypted word (16 bits).
-
-Each round of the Feistel Networks use four substitution sboxes, each having 6 inputs and 2 outputs. The input can be the
-XOR of at most two "sources bits", being source bits the bits from the previous round and the bits from the different keys.
-
-The underlying block cipher has the same structure than the one used by the CPS-2 (Capcom Play System 2) and,
-indeed, some of the used sboxes are exactly the same and appear in the same FN/round in both systems (this is not evident,
-as you need to apply a bitswapping and some XORs to the input & output of the sboxes to get the same values due). However,
-the key scheduling used by this implementation is much weaker than the CPS-2's one. Many s-boxes inputs aren't XORed with any
-key bit.
-
-Due to the small key-length, no sophisticated attacks are needed to recover the keys; a brute-force attack knowing just
-some (encrypted word-decrypted word) pairs suffice. However, due to the weak key scheduling, it should be noted that some
-related keys can produce the same output bytes for some (short) input sequences.
-
-The only difference in the decryption process between M2 and M3 is the initialization of the counter. In M3, the counter is
-always set to 0 at the beginning of the decryption while, in M2, the bits #1-#16 of the ciphertext's address are used
-to initialize the counter.
-
-Note that this implementation considers that the counter initialization for ram decryption is 0 simply because the ram is
-mapped to multiples of 128K.
-
-Due to the nature of the cipher, there are some degrees of freedom when choosing the s-boxes and keys values; by example,
-you could apply a fixed bitswapping and XOR to the keys and the decryption would remain the same as long as you change
-accordingly the s-boxes' definitions. So the order of the bits in the keys is arbitrary, and the s-boxes values have been
-chosen so as to make the key for CAPSNK equal to 0.
-
-It can be observed that a couple of sboxes have incomplete tables (a 255 value indicate an unknown value). The recovered keys
-as of december/2010 show small randomness and big correlations, making possible that some unseen bits could make the
-decryption need those incomplete parts.
-
-****************************************************************************************/
-
-const naomi_m2_board::sbox naomi_m2_board::fn1_sboxes[4][4] = {
- { // 1st round
- {
- {
- 0,3,2,2,1,3,1,2,3,2,1,2,1,2,3,1,3,2,2,0,2,1,3,0,0,3,2,3,2,1,2,0,
- 2,3,1,1,2,2,1,1,1,0,2,3,3,0,2,1,1,1,1,1,3,0,3,2,1,0,1,2,0,3,1,3,
- },
- {3,4,5,7,-1,-1},
- {0,4}
- },
-
- {
- {
- 2,2,2,0,3,3,0,1,2,2,3,2,3,0,2,2,1,1,0,3,3,2,0,2,0,1,0,1,2,3,1,1,
- 0,1,3,3,1,3,3,1,2,3,2,0,0,0,2,2,0,3,1,3,0,3,2,2,0,3,0,3,1,1,0,2,
- },
- {0,1,2,5,6,7},
- {1,6}
- },
-
- {
- {
- 0,1,3,0,3,1,1,1,1,2,3,1,3,0,2,3,3,2,0,2,1,1,2,1,1,3,1,0,0,2,0,1,
- 1,3,1,0,0,3,2,3,2,0,3,3,0,0,0,0,1,2,3,3,2,0,3,2,1,0,0,0,2,2,3,3,
- },
- {0,2,5,6,7,-1},
- {2,3}
- },
-
- {
- {
- 3,2,1,2,1,2,3,2,0,3,2,2,3,1,3,3,0,2,3,0,3,3,2,1,1,1,2,0,2,2,0,1,
- 1,3,3,0,0,3,0,3,0,2,1,3,2,1,0,0,0,1,1,2,0,1,0,0,0,1,3,3,2,0,3,3,
- },
- {1,2,3,4,6,7},
- {5,7}
- },
- },
- { // 2nd round
- {
- {
- 3,3,1,2,0,0,2,2,2,1,2,1,3,1,1,3,3,0,0,3,0,3,3,2,1,1,3,2,3,2,1,3,
- 2,3,0,1,3,2,0,1,2,1,3,1,2,2,3,3,3,1,2,2,0,3,1,2,2,1,3,0,3,0,1,3,
- },
- {0,1,3,4,5,7},
- {0,4}
- },
-
- {
- {
- 2,0,1,0,0,3,2,0,3,3,1,2,1,3,0,2,0,2,0,0,0,2,3,1,3,1,1,2,3,0,3,0,
- 3,0,2,0,0,2,2,1,0,2,3,3,1,3,1,0,1,3,3,0,0,1,3,1,0,2,0,3,2,1,0,1,
- },
- {0,1,3,4,6,-1},
- {1,5}
- },
-
- {
- {
- 2,2,2,3,1,1,0,1,0,1,2,2,3,3,0,2,0,3,2,3,3,0,2,1,0,3,1,0,0,2,3,2,
- 3,2,0,3,2,0,1,0,3,3,1,1,2,2,2,0,2,1,3,1,1,1,1,2,2,2,3,0,1,3,0,0,
- },
- {1,2,5,6,7,-1},
- {2,7}
- },
-
- {
- {
- 0,1,3,3,3,1,3,3,1,0,2,0,2,0,0,3,1,2,1,3,1,2,3,2,2,0,1,3,0,3,3,3,
- 0,0,0,2,1,1,2,3,2,2,3,1,1,2,0,2,0,2,1,3,1,1,3,3,1,1,3,0,2,3,0,0,
- },
- {2,3,4,5,6,7},
- {3,6}
- },
- },
- { // 3rd round
- {
- {
- 0,0,1,0,1,0,0,3,2,0,0,3,0,1,0,2,0,3,0,0,2,0,3,2,2,1,3,2,2,1,1,2,
- 0,0,0,3,0,1,1,0,0,2,1,0,3,1,2,2,2,0,3,1,3,0,1,2,2,1,1,1,0,2,3,1,
- },
- {1,2,3,4,5,7},
- {0,5}
- },
-
- {
- {
- 1,2,1,0,3,1,1,2,0,0,2,3,2,3,1,3,2,0,3,2,2,3,1,1,1,1,0,3,2,0,0,1,
- 1,0,0,1,3,1,2,3,0,0,2,3,3,0,1,0,0,2,3,0,1,2,0,1,3,3,3,1,2,0,2,1,
- },
- {0,2,4,5,6,7},
- {1,6}
- },
-
- {
- {
- 0,3,0,2,1,2,0,0,1,1,0,0,3,1,1,0,0,3,0,0,2,3,3,2,3,1,2,0,0,2,3,0,
- // unused?
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- },
- {0,2,4,6,7,-1},
- {2,3}
- },
-
- {
- {
- 0,0,1,0,0,1,0,2,3,3,0,3,3,2,3,0,2,2,2,0,3,2,0,3,1,0,0,3,3,0,0,0,
- 2,2,1,0,2,0,3,2,0,0,3,1,3,3,0,0,2,1,1,2,1,0,1,1,0,3,1,2,0,2,0,3,
- },
- {0,1,2,3,6,-1},
- {4,7}
- },
- },
- { // 4th round
- {
- {
- 0,3,3,3,3,3,2,0,0,1,2,0,2,2,2,2,1,1,0,2,2,1,3,2,3,2,0,1,2,3,2,1,
- 3,2,2,3,1,0,1,0,0,2,0,1,2,1,2,3,1,2,1,1,2,2,1,0,1,3,2,3,2,0,3,1,
- },
- {0,1,3,4,5,6},
- {0,5}
- },
-
- {
- {
- 0,3,0,0,2,0,3,1,1,1,2,2,2,1,3,1,2,2,1,3,2,2,3,3,0,3,1,0,3,2,0,1,
- 3,0,2,0,1,0,2,1,3,3,1,2,2,0,2,3,3,2,3,0,1,1,3,3,0,2,1,3,0,2,2,3,
- },
- {0,1,2,3,5,7},
- {1,7}
- },
-
- {
- {
- 0,1,2,3,3,3,3,1,2,0,2,3,2,1,0,1,2,2,1,2,0,3,2,0,1,1,0,1,3,1,3,1,
- 3,1,0,0,1,0,0,0,0,1,2,2,1,1,3,3,1,2,3,3,3,2,3,0,2,2,1,3,3,0,2,0,
- },
- {2,3,4,5,6,7},
- {2,3}
- },
-
- {
- {
- 0,2,1,1,3,2,0,3,1,0,1,0,3,2,1,1,2,2,0,3,1,0,1,2,2,2,3,3,0,0,0,0,
- 1,2,1,0,2,1,2,2,2,3,2,3,0,1,3,0,0,1,3,0,0,1,1,0,1,0,0,0,0,2,0,1,
- },
- {0,1,2,4,6,7},
- {4,6}
- },
- },
-};
-
-
-const naomi_m2_board::sbox naomi_m2_board::fn2_sboxes[4][4] = {
- { // 1st round
- {
- {
- 3,3,0,1,0,1,0,0,0,3,0,0,1,3,1,2,0,3,3,3,2,1,0,1,1,1,2,2,2,3,2,2,
- 2,1,3,3,1,3,1,1,0,0,1,2,0,2,2,1,1,2,3,1,2,1,3,1,2,2,0,1,3,0,2,2,
- },
- {1,3,4,5,6,7},
- {0,7}
- },
-
- {
- {
- 0,2,3,2,1,1,0,0,2,1,0,3,3,0,0,0,3,2,0,2,1,1,2,1,0,0,3,1,2,2,3,1,
- 3,1,3,0,0,0,1,3,1,0,0,3,2,2,3,1,1,3,0,0,2,1,3,3,1,3,1,2,3,1,2,1,
- },
- {0,3,5,6,-1,-1},
- {1,2}
- },
-
- {
- {
- 0,2,2,1,0,1,2,1,2,0,1,2,3,3,0,1,3,1,1,2,1,2,1,3,3,2,3,3,2,1,0,1,
- 0,1,0,2,0,1,1,3,2,0,3,2,1,1,1,3,2,3,0,2,3,0,2,2,1,3,0,1,1,2,2,2,
- },
- {0,2,3,4,7,-1},
- {3,4}
- },
-
- {
- {
- 2,3,1,3,2,0,1,2,0,0,3,3,3,3,3,1,2,0,2,1,2,3,0,2,0,1,0,3,0,2,1,0,
- 2,3,0,1,3,0,3,2,3,1,2,0,3,1,1,2,0,3,0,0,2,0,2,1,2,2,3,2,1,2,3,1,
- },
- {1,2,5,6,-1,-1},
- {5,6}
- },
- },
- { // 2nd round
- {
- {
- 2,3,1,3,1,0,3,3,3,2,3,3,2,0,0,3,2,3,0,3,1,1,2,3,1,1,2,2,0,1,0,0,
- 2,1,0,1,2,0,1,2,0,3,1,1,2,3,1,2,0,2,0,1,3,0,1,0,2,2,3,0,3,2,3,0,
- },
- {0,1,4,5,6,7},
- {0,7}
- },
-
- {
- {
- 0,2,2,0,2,2,0,3,2,3,2,1,3,2,3,3,1,1,0,0,3,0,2,1,1,3,3,2,3,2,0,1,
- 1,2,3,0,1,0,3,0,3,1,0,2,1,2,0,3,2,3,1,2,2,0,3,2,3,0,0,1,2,3,3,3,
- },
- {0,2,3,6,7,-1},
- {1,5}
- },
-
- {
- {
- 1,2,3,2,0,3,2,3,0,1,1,0,0,2,2,3,2,0,0,3,0,2,3,3,2,2,1,0,2,1,0,3,
- 1,0,2,0,1,1,0,1,0,0,1,0,3,0,3,3,2,2,0,2,1,1,1,0,3,0,1,3,2,3,2,1,
- },
- {2,3,4,6,7,-1},
- {2,3}
- },
-
- {
- {
- 2,3,1,3,1,1,2,3,3,1,1,0,1,0,2,3,2,1,0,0,2,2,0,1,0,2,2,2,0,2,1,0,
- 3,1,2,3,1,3,0,2,1,0,1,0,0,1,2,2,3,2,3,1,3,2,1,1,2,0,2,1,3,3,1,0,
- },
- {1,2,3,4,5,6},
- {4,6}
- },
- },
- { // 3rd round
- {
- {
- 0,3,0,1,0,2,3,3,1,0,1,3,2,2,1,1,3,3,3,0,2,0,2,0,0,0,2,3,1,1,0,0,
- 3,3,0,3,3,0,0,2,1,1,1,0,2,2,2,0,3,0,3,1,2,2,0,3,0,0,3,2,0,3,2,1,
- },
- {1,4,5,6,7,-1},
- {0,5}
- },
-
- {
- {
- 0,3,0,1,3,0,3,1,3,2,2,2,3,0,3,2,2,1,2,2,0,3,2,2,0,0,2,1,1,3,2,3,
- 2,3,3,1,2,0,1,2,2,1,0,0,0,0,2,3,1,2,0,3,1,3,1,2,3,2,1,0,3,0,0,2,
- },
- {0,2,3,4,6,7},
- {1,7}
- },
-
- {
- {
- 2,2,3,2,0,3,2,3,1,1,2,0,2,3,1,3,0,0,0,3,2,0,1,0,1,3,2,3,3,3,1,0,
- // unused?
- 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
- },
- {1,2,4,7,-1,-1},
- {2,4}
- },
-
- {
- {
- 0,2,3,1,3,1,1,0,0,1,3,0,2,1,3,3,2,0,2,1,1,2,3,3,0,0,0,2,0,2,3,0,
- 3,3,3,3,2,3,3,2,3,0,1,0,2,3,3,2,0,1,3,1,0,1,2,3,3,0,2,0,3,0,3,3,
- },
- {0,1,2,3,5,7},
- {3,6}
- },
- },
- { // 4th round
- {
- {
- 0,1,1,0,0,1,0,2,3,3,0,1,2,3,0,2,1,0,3,3,2,0,3,0,0,2,1,0,1,0,1,3,
- 0,3,3,1,2,0,3,0,1,3,2,0,3,3,1,3,0,2,3,3,2,1,1,2,2,1,2,1,2,0,1,1,
- },
- {0,1,2,4,7,-1},
- {0,5}
- },
-
- {
- {
- 2,0,0,2,3,0,2,3,3,1,1,1,2,1,1,0,0,2,1,0,0,3,1,0,0,3,3,0,1,0,1,2,
- 0,2,0,2,0,1,2,3,2,1,1,0,3,3,3,3,3,3,1,0,3,0,0,2,0,3,2,0,2,2,0,1,
- },
- {0,1,3,5,6,-1},
- {1,3}
- },
-
- {
- {
- 0,1,1,2,1,3,1,1,0,0,3,1,1,1,2,0,3,2,0,1,1,2,3,3,3,0,3,0,0,2,0,3,
- 3,2,0,0,3,2,3,1,2,3,0,3,2,0,1,2,2,2,0,2,0,1,2,2,3,1,2,2,1,1,1,1,
- },
- {0,2,3,4,5,7},
- {2,7}
- },
-
- {
- {
- 0,1,2,0,3,3,0,3,2,1,3,3,0,3,1,1,3,2,3,2,3,0,0,0,3,0,2,2,3,2,2,3,
- 2,2,3,1,2,3,1,2,0,3,0,2,3,1,0,0,3,2,1,2,1,2,1,3,1,0,2,3,3,1,3,2,
- },
- {2,3,4,5,6,7},
- {4,6}
- },
- },
-};
-
-const int naomi_m2_board::fn1_game_key_scheduling[38][2] = {
- {1,29}, {1,71}, {2,4}, {2,54}, {3,8}, {4,56}, {4,73}, {5,11},
- {6,51}, {7,92}, {8,89}, {9,9}, {9,10}, {9,39}, {9,41}, {9,58},
- {9,59}, {9,86}, {10,90}, {11,6}, {12,64}, {13,49}, {14,44}, {15,40},
- {16,69}, {17,15}, {18,23}, {18,43}, {19,82}, {20,81}, {21,32}, {21,61},
- {22,5}, {23,66}, {24,13}, {24,45}, {25,12}, {25,35}
-};
-
-const int naomi_m2_board::fn2_game_key_scheduling[34][2] = {
- {0,0}, {1,3}, {2,11}, {3,20}, {4,22}, {5,23}, {6,29}, {7,38},
- {8,39}, {9,47}, {9,55}, {9,86}, {9,87}, {9,90}, {10,50}, {10,53},
- {11,57}, {12,59}, {13,61}, {13,64}, {14,63}, {15,67}, {16,72}, {17,83},
- {18,88}, {19,94}, {20,35}, {21,17}, {21,92}, {22,6}, {22,11}, {23,85},
- {24,16}, {25,25}
-};
-
-const int naomi_m2_board::fn1_sequence_key_scheduling[20][2] = {
- {0,52}, {1,34}, {2,17}, {3,36}, {4,84}, {4,88}, {5,57}, {6,48},
- {6,68}, {7,76}, {8,83}, {9,30}, {10,22}, {10,41}, {11,38}, {12,55},
- {13,74}, {14,19}, {14,80}, {15,26}
-};
-
-const int naomi_m2_board::fn2_sequence_key_scheduling[16] = {77,34,8,42,36,27,69,66,13,9,79,31,49,7,24,64};
-
-const int naomi_m2_board::fn2_middle_result_scheduling[16] = {1,10,44,68,74,78,81,95,2,4,30,40,41,51,53,58};
-
-int naomi_m2_board::feistel_function(int input, const struct sbox *sboxes, UINT32 subkeys)
-{
- int k,m;
- int aux;
- int result=0;
-
- for (m=0; m<4; ++m) { // 4 sboxes
- for (k=0, aux=0; k<6; ++k)
- if (sboxes[m].inputs[k]!=-1)
- aux |= BIT(input, sboxes[m].inputs[k]) << k;
-
- aux = sboxes[m].table[(aux^subkeys)&0x3f];
-
- for (k=0; k<2; ++k)
- result |= BIT(aux,k) << sboxes[m].outputs[k];
-
- subkeys >>=6;
- }
-
- return result;
-}
-
-/**************************
-This implementation is an "educational" version. It must be noted that it can be speed-optimized in a number of ways.
-The most evident one is to factor out the parts of the key-scheduling that must only be done once (like the game-key &
-sequence-key parts) as noted in the comments inlined in the function. More sophisticated speed-ups can be gained by
-noticing that the weak key-scheduling would allow to create some pregenerated look-up tables for doing most of the work
-of the function. Even so, it would still be pretty slow, so caching techniques could be a wiser option here.
-**************************/
-
-UINT16 naomi_m2_board::block_decrypt(UINT32 game_key, UINT16 sequence_key, UINT16 counter, UINT16 data)
-{
- int j;
- int aux,aux2;
- int A,B;
- int middle_result;
- UINT32 fn1_subkeys[4];
- UINT32 fn2_subkeys[4];
-
- /* Game-key scheduling; this could be done just once per game at initialization time */
- memset(fn1_subkeys,0,sizeof(UINT32)*4);
- memset(fn2_subkeys,0,sizeof(UINT32)*4);
-
- for (j=0; j<38; ++j) {
- if (BIT(game_key, fn1_game_key_scheduling[j][0])!=0) {
- aux = fn1_game_key_scheduling[j][1]%24;
- aux2 = fn1_game_key_scheduling[j][1]/24;
- fn1_subkeys[aux2] ^= (1<<aux);
- }
- }
-
- for (j=0; j<34; ++j) {
- if (BIT(game_key, fn2_game_key_scheduling[j][0])!=0) {
- aux = fn2_game_key_scheduling[j][1]%24;
- aux2 = fn2_game_key_scheduling[j][1]/24;
- fn2_subkeys[aux2] ^= (1<<aux);
- }
- }
- /********************************************************/
-
- /* Sequence-key scheduling; this could be done just once per decryption run */
- for (j=0; j<20; ++j) {
- if (BIT(sequence_key,fn1_sequence_key_scheduling[j][0])!=0) {
- aux = fn1_sequence_key_scheduling[j][1]%24;
- aux2 = fn1_sequence_key_scheduling[j][1]/24;
- fn1_subkeys[aux2] ^= (1<<aux);
- }
- }
- for (j=0; j<16; ++j) {
- if (BIT(sequence_key,j)!=0) {
- aux = fn2_sequence_key_scheduling[j]%24;
- aux2 = fn2_sequence_key_scheduling[j]/24;
- fn2_subkeys[aux2] ^= (1<<aux);
+ case 0x1fff8: m_cryptdevice->set_addr_low(data); return;
+ case 0x1fffa: m_cryptdevice->set_addr_high(data); return;
+ case 0x1fffc: m_cryptdevice->set_subkey(data); return;
}
}
-
- // subkeys bits 10 & 41
- fn2_subkeys[0] ^= (BIT(sequence_key,2)<<10);
- fn2_subkeys[1] ^= (BIT(sequence_key,4)<<17);
- /**************************************************************/
-
- // First Feistel Network
-
- aux = BITSWAP16(counter,5,12,14,13,9,3,6,4, 8,1,15,11,0,7,10,2);
-
- // 1st round
- B = aux >> 8;
- A = (aux & 0xff) ^ feistel_function(B,fn1_sboxes[0],fn1_subkeys[0]);
-
- // 2nd round
- B = B ^ feistel_function(A,fn1_sboxes[1],fn1_subkeys[1]);
-
- // 3rd round
- A = A ^ feistel_function(B,fn1_sboxes[2],fn1_subkeys[2]);
-
- // 4th round
- B = B ^ feistel_function(A,fn1_sboxes[3],fn1_subkeys[3]);
-
- middle_result = (B<<8)|A;
-
-
- /* Middle-result-key sheduling */
- for (j=0; j<16; ++j) {
- if (BIT(middle_result,j)!=0) {
- aux = fn2_middle_result_scheduling[j]%24;
- aux2 = fn2_middle_result_scheduling[j]/24;
- fn2_subkeys[aux2] ^= (1<<aux);
- }
- }
- /*********************/
-
- // Second Feistel Network
-
- aux = BITSWAP16(data,14,3,8,12,13,7,15,4, 6,2,9,5,11,0,1,10);
-
- // 1st round
- B = aux >> 8;
- A = (aux & 0xff) ^ feistel_function(B,fn2_sboxes[0],fn2_subkeys[0]);
-
- // 2nd round
- B = B ^ feistel_function(A,fn2_sboxes[1],fn2_subkeys[1]);
-
- // 3rd round
- A = A ^ feistel_function(B,fn2_sboxes[2],fn2_subkeys[2]);
-
- // 4th round
- B = B ^ feistel_function(A,fn2_sboxes[3],fn2_subkeys[3]);
-
- aux = (B<<8)|A;
-
- aux = BITSWAP16(aux,15,7,6,14,13,12,5,4, 3,2,11,10,9,1,0,8);
-
- return aux;
+ throw emu_fatalerror("NAOMIM2: unhandled board write %08x, %04x\n", offset, data);
}
-UINT16 naomi_m2_board::get_decrypted_16()
+UINT16 naomi_m2_board::read_callback(UINT32 addr)
{
- UINT16 enc;
+ if ((addr & 0xffff0000) == 0x01000000) {
+ int base = 2*(addr & 0x7fff);
+ return ram[base+1] | (ram[base] << 8);
- if((prot_cur_address & 0xffff0000) == 0x01000000) {
- int base = 2*(prot_cur_address & 0x7fff);
- enc = ram[base+1] | (ram[base] << 8);
- } else {
- const UINT8 *base = m_region->base() + 2*prot_cur_address;
- enc = base[1] | (base[0] << 8);
}
-
- UINT16 dec = block_decrypt(key, subkey, prot_cur_address, enc);
- UINT16 res = (dec & 3) | (dec_hist & 0xfffc);
- dec_hist = dec;
-
- prot_cur_address ++;
- return res;
-}
-
-void naomi_m2_board::enc_start()
-{
- buffer_pos = BUFFER_SIZE;
- dec_header = get_decrypted_16() << 16;
- dec_header |= get_decrypted_16();
-
- if(dec_header & FLAG_COMPRESSED) {
- line_buffer_size = dec_header & FLAG_LINE_SIZE_512 ? 512 : 256;
- line_buffer_pos = line_buffer_size;
- buffer_bit = 7;
+ else {
+ const UINT8 *base = m_region->base() + 2*addr;
+ return base[1] | (base[0] << 8);
}
- enc_ready = true;
}
-void naomi_m2_board::enc_fill()
-{
- assert(buffer_pos == BUFFER_SIZE);
- for(int i = 0; i != BUFFER_SIZE; i+=2) {
- UINT16 val = get_decrypted_16();
- buffer[i] = val;
- buffer[i+1] = val >> 8;
- }
- buffer_pos = 0;
-}
+static MACHINE_CONFIG_FRAGMENT( naomim2 )
+ MCFG_DEVICE_ADD("segam2crypt", SEGA315_5881_CRYPT, 0)
+ MCFG_SET_READ_CALLBACK(naomi_m2_board, read_callback)
+MACHINE_CONFIG_END
-/* node format
-0xxxxxxx - next node index
-1a0bbccc - end node
- a - 0 = repeat
- 1 = fetch
- b - if a = 1
- 00 - fetch 0
- 01 - fetch 1
- 11 - fetch -1
- if a = 0
- 000
- c - repeat/fetch counter
- count = ccc + 1
-11111111 - empty node
-*/
-const UINT8 naomi_m2_board::trees[9][2][32] = {
- {
- {0x01,0x10,0x0f,0x05,0xc4,0x13,0x87,0x0a,0xcc,0x81,0xce,0x0c,0x86,0x0e,0x84,0xc2,
- 0x11,0xc1,0xc3,0xcf,0x15,0xc8,0xcd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- {0xc7,0x02,0x03,0x04,0x80,0x06,0x07,0x08,0x09,0xc9,0x0b,0x0d,0x82,0x83,0x85,0xc0,
- 0x12,0xc6,0xc5,0x14,0x16,0xca,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- },
- {
- {0x02,0x80,0x05,0x04,0x81,0x10,0x15,0x82,0x09,0x83,0x0b,0x0c,0x0d,0xdc,0x0f,0xde,
- 0x1c,0xcf,0xc5,0xdd,0x86,0x16,0x87,0x18,0x19,0x1a,0xda,0xca,0xc9,0x1e,0xce,0xff,},
- {0x01,0x17,0x03,0x0a,0x08,0x06,0x07,0xc2,0xd9,0xc4,0xd8,0xc8,0x0e,0x84,0xcb,0x85,
- 0x11,0x12,0x13,0x14,0xcd,0x1b,0xdb,0xc7,0xc0,0xc1,0x1d,0xdf,0xc3,0xc6,0xcc,0xff,},
- },
- {
- {0xc6,0x80,0x03,0x0b,0x05,0x07,0x82,0x08,0x15,0xdc,0xdd,0x0c,0xd9,0xc2,0x14,0x10,
- 0x85,0x86,0x18,0x16,0xc5,0xc4,0xc8,0xc9,0xc0,0xcc,0xff,0xff,0xff,0xff,0xff,0xff,},
- {0x01,0x02,0x12,0x04,0x81,0x06,0x83,0xc3,0x09,0x0a,0x84,0x11,0x0d,0x0e,0x0f,0x19,
- 0xca,0xc1,0x13,0xd8,0xda,0xdb,0x17,0xde,0xcd,0xcb,0xff,0xff,0xff,0xff,0xff,0xff,},
- },
- {
- {0x01,0x80,0x0d,0x04,0x05,0x15,0x83,0x08,0xd9,0x10,0x0b,0x0c,0x84,0x0e,0xc0,0x14,
- 0x12,0xcb,0x13,0xca,0xc8,0xc2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- {0xc5,0x02,0x03,0x07,0x81,0x06,0x82,0xcc,0x09,0x0a,0xc9,0x11,0xc4,0x0f,0x85,0xd8,
- 0xda,0xdb,0xc3,0xdc,0xdd,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- },
- {
- {0x01,0x80,0x06,0x0c,0x05,0x81,0xd8,0x84,0x09,0xdc,0x0b,0x0f,0x0d,0x0e,0x10,0xdb,
- 0x11,0xca,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- {0xc4,0x02,0x03,0x04,0xcb,0x0a,0x07,0x08,0xd9,0x82,0xc8,0x83,0xc0,0xc1,0xda,0xc2,
- 0xc9,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- },
- {
- {0x01,0x02,0x06,0x0a,0x83,0x0b,0x07,0x08,0x09,0x82,0xd8,0x0c,0xd9,0xda,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- {0xc3,0x80,0x03,0x04,0x05,0x81,0xca,0xc8,0xdb,0xc9,0xc0,0xc1,0x0d,0xc2,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- },
- {
- {0x01,0x02,0x03,0x04,0x81,0x07,0x08,0xd8,0xda,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- {0xc2,0x80,0x05,0xc9,0xc8,0x06,0x82,0xc0,0x09,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- },
- {
- {0x01,0x80,0x04,0xc8,0xc0,0xd9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- {0xc1,0x02,0x03,0x81,0x05,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- },
- {
- {0x01,0xd8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- {0xc0,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,},
- },
-};
-
-int naomi_m2_board::get_compressed_bit()
+machine_config_constructor naomi_m2_board::device_mconfig_additions() const
{
- if(buffer_pos == BUFFER_SIZE)
- enc_fill();
- int res = (buffer[buffer_pos^1] >> buffer_bit) & 1;
- buffer_bit--;
- if(buffer_bit == -1) {
- buffer_bit = 7;
- buffer_pos++;
- }
- return res;
+ return MACHINE_CONFIG_NAME( naomim2 );
}
-void naomi_m2_board::line_fill()
-{
- assert(line_buffer_pos == line_buffer_size);
- UINT8 *lp = line_buffer;
- UINT8 *lc = line_buffer_prev;
- line_buffer = lc;
- line_buffer_prev = lp;
- line_buffer_pos = 0;
-
- UINT32 line_buffer_mask = line_buffer_size-1;
-
- for(int i=0; i != line_buffer_size;) {
- // vlc 0: start of line
- // vlc 1: interior of line
- // vlc 2-9: 7-1 bytes from end of line
-
- int slot = i ? i < line_buffer_size - 7 ? 1 : (i & 7) + 1 : 0;
-
- UINT32 tmp = 0;
- while (!(tmp&0x80))
- if(get_compressed_bit())
- tmp = trees[slot][1][tmp];
- else
- tmp = trees[slot][0][tmp];
- if(tmp != 0xff) {
- int count = (tmp & 7) + 1;
-
- if(tmp&0x40) {
- // Copy from previous line
-
- static int offsets[4] = {0, 1, 0, -1};
- int offset = offsets[(tmp & 0x18) >> 3];
- for(int j=0; j != count; j++) {
- lc[i^1] = lp[((i+offset) & line_buffer_mask)^1];
- i++;
- }
-
- } else {
- // Get a byte in the stream and write n times
- UINT8 byte;
- byte = get_compressed_bit() << 1;
- byte = (byte | get_compressed_bit()) << 1;
- byte = (byte | get_compressed_bit()) << 1;
- byte = (byte | get_compressed_bit()) << 1;
- byte = (byte | get_compressed_bit()) << 1;
- byte = (byte | get_compressed_bit()) << 1;
- byte = (byte | get_compressed_bit()) << 1;
- byte = byte | get_compressed_bit();
- for(int j=0; j != count; j++)
- lc[(i++)^1] = byte;
-
- }
- }
- }
-}
diff --git a/src/mame/machine/naomim2.h b/src/mame/machine/naomim2.h
index e5406763d48..4efce0fcbe8 100644
--- a/src/mame/machine/naomim2.h
+++ b/src/mame/machine/naomim2.h
@@ -2,6 +2,7 @@
#define _NAOMIM2_H_
#include "naomibd.h"
+#include "315-5881_crypt.h"
#define MCFG_NAOMI_M2_BOARD_ADD(_tag, _key_tag, _eeprom_tag, _actel_tag, _irq_cb) \
MCFG_NAOMI_BOARD_ADD(_tag, NAOMI_M2_BOARD, _eeprom_tag, _actel_tag, _irq_cb) \
@@ -11,12 +12,17 @@ class naomi_m2_board : public naomi_board
{
public:
naomi_m2_board(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ UINT32 rom_cur_address;
+ static const int RAM_SIZE = 65536;
+ UINT8* ram;
static void static_set_tags(device_t &device, const char *_key_tag);
+ UINT16 read_callback(UINT32 addr);
protected:
virtual void device_start();
virtual void device_reset();
+ virtual machine_config_constructor device_mconfig_additions() const;
virtual void board_setup_address(UINT32 address, bool is_dma);
virtual void board_get_buffer(UINT8 *&base, UINT32 &limit);
@@ -24,48 +30,12 @@ protected:
virtual void board_write(offs_t offset, UINT16 data);
private:
- enum {
- RAM_SIZE = 65536, BUFFER_SIZE = 32768, LINE_SIZE = 512,
- FLAG_COMPRESSED = 0x10000, FLAG_LINE_SIZE_512 = 0x20000
- };
- const char *key_tag;
- UINT32 key;
-
- UINT8 *ram, *buffer, *line_buffer, *line_buffer_prev;
- UINT32 rom_cur_address, prot_cur_address;
- UINT16 subkey, dec_hist;
- UINT32 dec_header;
- bool enc_ready;
-
- int buffer_pos, line_buffer_pos, line_buffer_size, buffer_bit;
-
- struct sbox {
- UINT8 table[64];
- int inputs[6]; // positions of the inputs bits, -1 means no input except from key
- int outputs[2]; // positions of the output bits
- };
-
- static const sbox fn1_sboxes[4][4];
- static const sbox fn2_sboxes[4][4];
- static const int fn1_game_key_scheduling[38][2];
- static const int fn2_game_key_scheduling[34][2];
- static const int fn1_sequence_key_scheduling[20][2];
- static const int fn2_sequence_key_scheduling[16];
- static const int fn2_middle_result_scheduling[16];
-
- static const UINT8 trees[9][2][32];
-
- int feistel_function(int input, const struct sbox *sboxes, UINT32 subkeys);
- UINT16 block_decrypt(UINT32 game_key, UINT16 sequence_key, UINT16 counter, UINT16 data);
-
- UINT16 get_decrypted_16();
- int get_compressed_bit();
+ const char *key_tag;
- void enc_start();
- void enc_fill();
- void line_fill();
+
+ required_device<sega_315_5881_crypt_device> m_cryptdevice;
};
extern const device_type NAOMI_M2_BOARD;
diff --git a/src/mame/machine/pgmprot_igs025_igs012.c b/src/mame/machine/pgmprot_igs025_igs012.c
index a1a2dc6ba01..2da122081f0 100644
--- a/src/mame/machine/pgmprot_igs025_igs012.c
+++ b/src/mame/machine/pgmprot_igs025_igs012.c
@@ -202,3 +202,18 @@ DRIVER_INIT_MEMBER(pgm_012_025_state,drgw2j)
mem16[0x130366 / 2] = 0x4e93;
mem16[0x1303f6 / 2] = 0x4e93;
}
+
+DRIVER_INIT_MEMBER(pgm_012_025_state,drgw2hk)
+{
+ drgw2_common_init();
+
+ // todo, correct protection sequence for this region?
+ int region = 0x01;
+ m_igs025->m_kb_region = region;
+ m_igs025->m_kb_game_id = region | (region << 8) | (region << 16) | (region << 24);
+
+ UINT16 *mem16 = (UINT16 *)memregion("maincpu")->base();
+ mem16[0x12f520 / 2] = 0x4e93;
+ mem16[0x12f5c6 / 2] = 0x4e93;
+ mem16[0x12f656 / 2] = 0x4e93;
+}
diff --git a/src/mame/machine/segabb.c b/src/mame/machine/segabb.c
new file mode 100644
index 00000000000..8620c8857e1
--- /dev/null
+++ b/src/mame/machine/segabb.c
@@ -0,0 +1,30 @@
+#include "segabb.h"
+
+const device_type SEGA_LINDBERGH_BASEBOARD = &device_creator<sega_lindbergh_baseboard_device>;
+
+DEVICE_ADDRESS_MAP_START(map1, 32, sega_lindbergh_baseboard_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(map2, 32, sega_lindbergh_baseboard_device)
+ADDRESS_MAP_END
+
+DEVICE_ADDRESS_MAP_START(map3, 32, sega_lindbergh_baseboard_device)
+ADDRESS_MAP_END
+
+sega_lindbergh_baseboard_device::sega_lindbergh_baseboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : pci_device(mconfig, SEGA_LINDBERGH_BASEBOARD, "SEGA Lindbergh baseboard", tag, owner, clock, "sega_lindbergh_baseboard", __FILE__)
+{
+}
+
+void sega_lindbergh_baseboard_device::device_start()
+{
+ pci_device::device_start();
+ add_map( 128*1024, M_MEM, FUNC(sega_lindbergh_baseboard_device::map1));
+ add_map( 1024*1024, M_MEM, FUNC(sega_lindbergh_baseboard_device::map2));
+ add_map(2*1024*1024, M_MEM, FUNC(sega_lindbergh_baseboard_device::map3));
+}
+
+void sega_lindbergh_baseboard_device::device_reset()
+{
+ pci_device::device_reset();
+}
diff --git a/src/mame/machine/segabb.h b/src/mame/machine/segabb.h
new file mode 100644
index 00000000000..fefad6163a7
--- /dev/null
+++ b/src/mame/machine/segabb.h
@@ -0,0 +1,27 @@
+// Lindbergh Sega baseboard
+
+#ifndef SEGABB_H
+#define SEGABB_H
+
+#include "machine/pci.h"
+
+#define MCFG_SEGA_LINDBERGH_BASEBOARD_ADD(_tag) \
+ MCFG_PCI_DEVICE_ADD(_tag, SEGA_LINDBERGH_BASEBOARD, 0x105718c1, 0x10, 0x068000, 0x11db067b)
+
+class sega_lindbergh_baseboard_device : public pci_device {
+public:
+ sega_lindbergh_baseboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ DECLARE_ADDRESS_MAP(map1, 32);
+ DECLARE_ADDRESS_MAP(map2, 32);
+ DECLARE_ADDRESS_MAP(map3, 32);
+};
+
+extern const device_type SEGA_LINDBERGH_BASEBOARD;
+
+#endif
diff --git a/src/mame/machine/slapstic.c b/src/mame/machine/slapstic.c
index 25e4443c8fa..ab193966b32 100644
--- a/src/mame/machine/slapstic.c
+++ b/src/mame/machine/slapstic.c
@@ -180,108 +180,68 @@
*************************************************************************/
-#include "emu.h"
-#include "cpu/m6800/m6800.h"
-#include "includes/slapstic.h"
-#include "cpu/m68000/m68000.h"
-
-/*************************************
- *
- * Debugging
- *
- *************************************/
-
-#define LOG_SLAPSTIC (0)
-
-
-
-/*************************************
- *
- * Structure of slapstic params
- *
- *************************************/
+#include "includes/slapstic.h"
-struct mask_value
-{
- int mask, value;
-};
+extern const device_type SLAPSTIC = &device_creator<atari_slapstic_device>;
-struct slapstic_data
+atari_slapstic_device::atari_slapstic_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, SLAPSTIC, "Atari Slapstic", tag, owner, clock, "slapstic", __FILE__),
+ state(0),
+ current_bank(0),
+ access_68k(-1),
+ alt_bank(0),
+ bit_bank(0),
+ add_bank(0),
+ bit_xor(0)
{
- int bankstart;
- int bank[4];
-
- struct mask_value alt1;
- struct mask_value alt2;
- struct mask_value alt3;
- struct mask_value alt4;
- int altshift;
-
- struct mask_value bit1;
- struct mask_value bit2c0;
- struct mask_value bit2s0;
- struct mask_value bit2c1;
- struct mask_value bit2s1;
- struct mask_value bit3;
-
- struct mask_value add1;
- struct mask_value add2;
- struct mask_value addplus1;
- struct mask_value addplus2;
- struct mask_value add3;
-};
-
-
-
-/*************************************
- *
- * Shorthand
- *
- *************************************/
-
-#define UNKNOWN 0xffff
-#define NO_BITWISE \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }
-#define NO_ADDITIVE \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }, \
- { UNKNOWN,UNKNOWN }
+ slapstic.bankstart = 0;
+ slapstic.bank[0] = slapstic.bank[1] = slapstic.bank[2] = slapstic.bank[3] = 0;
+ slapstic.alt1.mask = 0;
+ slapstic.alt1.value = 0;
+ slapstic.alt2.mask = 0;
+ slapstic.alt2.value = 0;
+ slapstic.alt3.mask = 0;
+ slapstic.alt3.value = 0;
+ slapstic.alt4.mask = 0;
+ slapstic.alt4.value = 0;
+ slapstic.altshift = 0;
+ slapstic.bit1.mask = 0;
+ slapstic.bit1.value = 0;
+ slapstic.bit2c0.mask = 0;
+ slapstic.bit2c0.value = 0;
+ slapstic.bit2s0.mask = 0;
+ slapstic.bit2s0.value = 0;
+ slapstic.bit2c1.mask = 0;
+ slapstic.bit2c1.value = 0;
+ slapstic.bit2s1.mask = 0;
+ slapstic.bit2s1.value = 0;
+ slapstic.bit3.mask = 0;
+ slapstic.bit3.value = 0;
+ slapstic.add1.mask = 0;
+ slapstic.add1.value = 0;
+ slapstic.add2.mask = 0;
+ slapstic.add2.value = 0;
+ slapstic.addplus1.mask = 0;
+ slapstic.addplus1.value = 0;
+ slapstic.addplus2.mask = 0;
+ slapstic.addplus2.value = 0;
+ slapstic.add3.mask = 0;
+ slapstic.add3.value = 0;
+}
-#define MATCHES_MASK_VALUE(val, maskval) (((val) & (maskval).mask) == (maskval).value)
+void atari_slapstic_device::device_start()
+{
-/*************************************
- *
- * Constants
- *
- *************************************/
+}
-enum
+void atari_slapstic_device::device_reset()
{
- DISABLED,
- ENABLED,
- ALTERNATE1,
- ALTERNATE2,
- ALTERNATE3,
- BITWISE1,
- BITWISE2,
- BITWISE3,
- ADDITIVE1,
- ADDITIVE2,
- ADDITIVE3
-};
-
+}
/*************************************
*
@@ -779,27 +739,6 @@ static const struct slapstic_data *const slapstic_table[] =
-/*************************************
- *
- * Statics
- *
- *************************************/
-
-static UINT8 state;
-static UINT8 current_bank;
-static UINT8 access_68k;
-
-static UINT8 alt_bank;
-static UINT8 bit_bank;
-static UINT8 add_bank;
-static UINT8 bit_xor;
-
-static struct slapstic_data slapstic;
-
-
-static void slapstic_log(running_machine &machine, offs_t offset);
-static FILE *slapsticlog;
-
/*************************************
*
@@ -807,9 +746,15 @@ static FILE *slapsticlog;
*
*************************************/
-void slapstic_init(running_machine &machine, int chip)
+void atari_slapstic_device::slapstic_init(running_machine &machine, int chip)
{
- device_type cputype = machine.device("maincpu")->type();
+ if (access_68k == -1)
+ {
+ /* see if we're 68k or 6502/6809 based */
+ printf("oh\n");
+ device_type cputype = machine.device(":maincpu")->type();
+ access_68k = (cputype == M68000 || cputype == M68010);
+ }
/* only a small number of chips are known to exist */
if (chip < 101 || chip > 118)
@@ -823,20 +768,18 @@ void slapstic_init(running_machine &machine, int chip)
/* reset the chip */
slapstic_reset();
- /* see if we're 68k or 6502/6809 based */
- access_68k = (cputype == M68000 || cputype == M68010);
/* save state */
- state_save_register_item(machine, "slapstic", NULL, 0, state);
- state_save_register_item(machine, "slapstic", NULL, 0, current_bank);
- state_save_register_item(machine, "slapstic", NULL, 0, alt_bank);
- state_save_register_item(machine, "slapstic", NULL, 0, bit_bank);
- state_save_register_item(machine, "slapstic", NULL, 0, add_bank);
- state_save_register_item(machine, "slapstic", NULL, 0, bit_xor);
+ save_item(NAME(state));
+ save_item(NAME(current_bank));
+ save_item(NAME(alt_bank));
+ save_item(NAME(bit_bank));
+ save_item(NAME(add_bank));
+ save_item(NAME(bit_xor));
}
-void slapstic_reset(void)
+void atari_slapstic_device::slapstic_reset(void)
{
/* reset the chip */
state = DISABLED;
@@ -853,7 +796,7 @@ void slapstic_reset(void)
*
*************************************/
-int slapstic_bank(void)
+int atari_slapstic_device::slapstic_bank(void)
{
return current_bank;
}
@@ -866,7 +809,7 @@ int slapstic_bank(void)
*
*************************************/
-static int alt2_kludge(address_space &space, offs_t offset)
+int atari_slapstic_device::alt2_kludge(address_space &space, offs_t offset)
{
/* Of the 3 alternate addresses, only the middle one needs to actually hit
in the slapstic region; the first and third ones can be anywhere in the
@@ -913,7 +856,7 @@ static int alt2_kludge(address_space &space, offs_t offset)
*
*************************************/
-int slapstic_tweak(address_space &space, offs_t offset)
+int atari_slapstic_device::slapstic_tweak(address_space &space, offs_t offset)
{
/* reset is universal */
if (offset == 0x0000)
@@ -1137,7 +1080,7 @@ int slapstic_tweak(address_space &space, offs_t offset)
*
*************************************/
-static void slapstic_log(running_machine &machine, offs_t offset)
+void atari_slapstic_device::slapstic_log(running_machine &machine, offs_t offset)
{
static attotime last_time;
diff --git a/src/mame/machine/stvprot.c b/src/mame/machine/stvprot.c
index ede1c0264bc..378ecca0136 100644
--- a/src/mame/machine/stvprot.c
+++ b/src/mame/machine/stvprot.c
@@ -572,6 +572,8 @@ UINT32 ffreveng_prot_read_callback( address_space &space, int protaddr, UINT32 k
*
*************************************/
+// the naomi hookup of 315-5881 reads 16-bits at a time, here we seem to read 32?
+
READ32_MEMBER( stv_state::common_prot_r )
{
UINT32 *ROM = (UINT32 *)space.machine().root_device().memregion("abus")->base();
@@ -588,6 +590,8 @@ READ32_MEMBER( stv_state::common_prot_r )
logerror("A-Bus control protection read at %06x with data = %08x Returning = %08x Would otherwise return = %08x\n",space.device().safe_pc(),m_abus_protkey, retdata, realret);
+ //UINT16 res = m_cryptdevice->do_decrypt(base);
+
m_ctrl_index += 4;
return retdata;
@@ -602,7 +606,11 @@ READ32_MEMBER( stv_state::common_prot_r )
}
-
+UINT16 stv_state::crypt_read_callback(UINT32 addr)
+{
+ const UINT8 *base = m_cart_reg[0]->base() + 2*addr;
+ return base[1] | (base[0] << 8);
+}
WRITE32_MEMBER ( stv_state::common_prot_w )
{
@@ -616,10 +624,18 @@ WRITE32_MEMBER ( stv_state::common_prot_w )
else if(offset == 2)
{
COMBINE_DATA(&m_abus_prot_addr);
+
+ m_cryptdevice->set_addr_low(m_abus_prot_addr >> 16);
+ m_cryptdevice->set_addr_high(m_abus_prot_addr&0xffff);
+
}
else if(offset == 3)
{
COMBINE_DATA(&m_abus_protkey);
+
+ m_cryptdevice->set_subkey(m_abus_protkey>>16);
+
+
int a_bus_vector;
a_bus_vector = m_abus_prot_addr >> 16;
a_bus_vector|= (m_abus_prot_addr & 0xffff) << 16;
@@ -655,6 +671,7 @@ void stv_state::install_astrass_protection()
{
install_common_protection();
m_prot_readback = astrass_prot_read_callback;
+// m_cryptdevice->set_key(0x00000000);
}
void stv_state::install_ffreveng_protection()
diff --git a/src/mame/machine/zndip.h b/src/mame/machine/zndip.h
index 2285cbad464..c5747635bc6 100644
--- a/src/mame/machine/zndip.h
+++ b/src/mame/machine/zndip.h
@@ -42,7 +42,6 @@ private:
int m_select;
int m_clock;
- int m_datain;
UINT8 m_bit;
emu_timer *m_dip_timer;
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 585c872f9ca..3f15d5c759b 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -441,6 +441,7 @@ ckongalc // bootleg (Alca)
bigkong // bootleg
monkeyd // bootleg
dking // Crazy Kong Bootleg
+ckongdks // Spanish Crazy Kong bootleg
ckongpt2 // (c) 1981 Falcon
ckongpt2a // (c) 1981 Falcon
ckongpt2j // (c) 1981 Falcon
@@ -1475,6 +1476,7 @@ claybust // (c) 1978 Model Racing
gunchamp // (c) 1980 Model Racing
gunchamps // (c) 1980 Model Racing (sshot.c)
spaceatt // (c) 1978 Video Games GMBH
+galmonst // (c) Laguna S.A.
spaceat2 // (c) 1980 Zenitone-Microsec Ltd
spacecom // bootleg
sinvzen // Zenitone-Microsec Ltd
@@ -1796,6 +1798,7 @@ horizon // (c) 1985
youjyudn // (c) 1986 (Japan)
vigilant // (c) 1988 (World)
+vigilantb // (c) 1988 (World)
vigilant1 // (c) 1988 (World)
vigilantu // (c) 1988 (US)
vigilantu2 // (c) 1988 (US)
@@ -2520,6 +2523,7 @@ pbobble3 // 1996.?? E29 (c) 1996 Taito Corporation (World)
pbobble3u // 1996.11 E29 (c) 1996 Taito Corporation (US)
pbobble3j // 1996.11 E29 (c) 1996 Taito Corporation (Japan)
arkretrn // 1997.03 E36 (c) 1997 Taito Corporation (World)
+arkretrnu // 1997.03 E36 (c) 1997 Taito Corporation (US)
arkretrnj // 1997.03 E36 (c) 1997 Taito Corporation (Japan)
kirameki // 1997.09 E44 (c) 1997 Taito Corporation (Japan)
puchicar // 1997.?? E46 (c) 1997 Taito Corporation (World)
@@ -2743,6 +2747,7 @@ batriderk // (c) 1998 Raizing/8ing
batriderja // (c) 1998 Raizing/8ing
batridert // (c) 1998 Raizing/8ing
bbakraid // (c) 1999 8ing
+bbakraidc // (c) 1999 8ing
bbakraidj // (c) 1999 8ing
bbakraidja // (c) 1999 8ing
@@ -2842,29 +2847,30 @@ korokoro // (c) 1999 Takumi
crusherm // (c) 1999 Takumi
tjumpman // (c) 1999 Namco
-mushisam
-mushisama
-mushisamb
-espgal2
-ibara
-ibarablk
-ibarablka
-mushitam
-mushitama
-futari15
-futari15a
-futari10
-futaribl
-pinkswts
-pinkswtsa
-pinkswtsb
-pinkswtsx
-deathsml
-mmpork
-mmmbanc
-ddpdfk
-ddpdfk10
-dsmbl
+mushisam // (c) 2004 Cave (AMI license) - 2004/10/12.MASTER VER.
+mushisama // (c) 2004 Cave (AMI license) - 2004/10/12 MASTER VER.
+mushisamb // (c) 2004 Cave (AMI license) - 2004/10/12 MASTER VER
+espgal2 // (c) 2005 Cave (AMI license) - 2005/11/14 MASTER VER
+ibara // (c) 2005 Cave (AMI license) - 2005/03/22 MASTER VER..
+ibarablk // (c) 2005 Cave (AMI license) - 2006/02/06. MASTER VER.
+ibarablka // (c) 2005 Cave (AMI license) - 2006/02/06 MASTER VER.
+mushitam // (c) 2005 Cave (AMI license) - 2005/09/09.MASTER VER
+mushitama // (c) 2005 Cave (AMI license) - 2005/09/09 MASTER VER
+futari15 // (c) 2006 Cave (AMI license) - 2006/12/8.MASTER VER. 1.54.
+futari15a // (c) 2006 Cave (AMI license) - 2006/12/8 MASTER VER 1.54
+futari10 // (c) 2006 Cave (AMI license) - 2006/10/23 MASTER VER.
+futaribl // (c) 2007 Cave (AMI license) - 2009/11/27 INTERNATIONAL BL
+futariblj // (c) 2007 Cave (AMI license) - 2007/12/11 BLACK LABEL VER
+pinkswts // (c) 2006 Cave (AMI license) - 2006/04/06 MASTER VER....
+pinkswtsa // (c) 2006 Cave (AMI license) - 2006/04/06 MASTER VER...
+pinkswtsb // (c) 2006 Cave (AMI license) - 2006/04/06 MASTER VER.
+pinkswtsx // (c) 2006 Cave (AMI license) - 2006/xx/xx MASTER VER.
+deathsml // (c) 2007 Cave (AMI license) - 2007/10/09 MASTER VER
+mmpork // (c) 2007 Cave (AMI license) - 2007/ 4/17 MASTER VER.
+mmmbanc // (c) 2007 Cave (AMI license) - 2007/06/05 MASTER VER.
+ddpdfk // (c) 2008 Cave (AMI license) - 2008/06/23 MASTER VER 1.5
+ddpdfk10 // (c) 2008 Cave (AMI license) - 2008/05/16 MASTER VER
+dsmbl // (c) 2008 Cave (AMI license) - 2008/10/06 MEGABLACK LABEL VER
deathsm2
@@ -4684,6 +4690,7 @@ wwallyja // 1992.06 Wally wo Sagase! (Japan, FD1094, decrypted)
desertbr // 1993.?? Desert Breaker (World, FD1094, decrypted)
desertbrj // 1992.10 Desert Breaker (Japan)
pontoon
+hamaway
// System18 Bootlegs
astormbl // BOOTLEG
@@ -5476,6 +5483,7 @@ vstrik3c // 2001.04 Virtua Striker 3 (Rev C) (cartridge)
wldrider // 2001.05 Wild Riders
clubkrte // 2001.06 Club Kart: European Session
clubkrtd // 2001.06 Club Kart: European Session (Rev D)
+clubkrtc // 2001.?? Club Kart: European Session (Rev C)
beachspi // 2001.07 Beach Spikers
vf4cart // 2001.08.02 Virtua Fighter 4 (cartridge)
vf4 // 2001.08.02 Virtua Fighter 4 (GD-ROM)
@@ -5495,7 +5503,7 @@ initdv2jo // 2002.12 Initial D Arcade Stage Ver. 2 (Japan)
initdv2e // 2002.12 Initial D Arcade Stage Ver. 2 (export)
vf4evo // 2002.12 Virtua Fighter 4 Evolution Ver.B
clubk2k3 // 2003.?? Club Kart: European Session (2003)
-clubk2kf // 2003.?? Club Kart: European Session (2003, not protected)
+clubk2kp // 2003.?? Club Kart: European Session (2003, prototype)
initdexpo // 2002.?? Initial D Arcade Stage (Export)
// 2002.?? Sega Driving Simulator
// 2003.03 World Club Champion Football Serie A 2001-2002 Ver.2
@@ -7908,6 +7916,7 @@ ninjakd2 // UPL-????? (c) 1987
ninjakd2a // UPL-????? (c) 1987
ninjakd2b // UPL-????? (c) 1987
rdaction // UPL-87003?(c) 1987 + World Games license
+jt104 // hack?
mnight // UPL-????? (c) 1987 distributed by Kawakus
arkarea // UPL-87007 (c) 1988 (Arcade TV Game List - P.67, Right, 2 from top)
robokid // UPL-88013 (c) 1988
@@ -8299,7 +8308,8 @@ supdrapoa // (c) 1983 + Jeutel license?
supdrapob // bootleg
sbagman // (c) 1984
sbagmans // (c) 1984 + Stern license
-botanic // (c) 1985
+botanic // (c) 1983
+botanicf // (c) 1984
squaitsa // (c) 1985
tankbust // (c) 1985
@@ -9365,6 +9375,7 @@ magixb // bootleg
rocktris // (c) 1994? Yun Sung
magicbub // (c) Yun Sung
magicbuba // (c) Yun Sung
+magicbubb // (c) Yun Sung
shocking // (c) 1997 Yun Sung
shockingk // (c) 1997 Yun Sung
bombkick // (c) 1998 Yun Sung
@@ -9721,6 +9732,7 @@ drgw2 // (c) 1997 Dragon World 2
dw2v100x //
drgw2c //
drgw2j //
+drgw2hk //
drgw3 // (c) 1998 Dragon World 3
drgw3105 //
drgw3100 //
@@ -9821,8 +9833,10 @@ espgal // (c) 2003 Espgaluda
// IGS PGM2 Platform
orleg2 // (c) 2007
orleg2o //
+orleg2oa //
kov2nl // (c) 2008
kov2nlo //
+kov2nloa //
ddpdojh //
kov3 //
@@ -10968,7 +10982,9 @@ comg905d // (c) 198? Cal Omega Inc.
// IGT Player's Edge Plus
peset001 // (c) 1987 IGT - International Game Technology
+peset004 // (c) 1987 IGT - International Game Technology
peset038 // (c) 1987 IGT - International Game Technology
+peivc006 // (c) 1987 IGT - International Game Technology
pepk1024 // (c) 1987 IGT - International Game Technology
pepp0002 // (c) 1987 IGT - International Game Technology
pepp0002a // (c) 1987 IGT - International Game Technology
@@ -11112,7 +11128,9 @@ peip0115 // (c) 1987 IGT - International Game Technology
peip0116 // (c) 1987 IGT - International Game Technology
peip0118 // (c) 1987 IGT - International Game Technology
peip0120 // (c) 1987 IGT - International Game Technology
+pemg0252 // (c) 1994 IGT - International Game Technology
pebe0014 // (c) 1994 IGT - International Game Technology
+peke0017 // (c) 1994 IGT - International Game Technology
peke1012 // (c) 1994 IGT - International Game Technology
peke1013 // (c) 1994 IGT - International Game Technology
peps0014 // (c) 1996 IGT - International Game Technology
@@ -20234,6 +20252,8 @@ m1cluedob2h //
m1cluedob1 //
m1cluedob1p //
m1cluedob1h //
+m1cluedobi2 //
+m1cluedobi2p //
m1cluedo4
m1cluedo4p
m1cluedo3
@@ -31790,6 +31810,7 @@ newufo_xmas
ufomini
ufo21
ufo800
+westdrm
// VLC Nevada
nevada
diff --git a/src/mame/mame.mak b/src/mame/mame.mak
index 397751bd24b..ca723e18942 100644
--- a/src/mame/mame.mak
+++ b/src/mame/mame.mak
@@ -271,6 +271,8 @@ SOUNDS += T6721A
SOUNDS += MOS7360
#SOUNDS += ESQPUMP
#SOUNDS += VRC6
+SOUNDS += SB0400
+SOUNDS += AC97
#-------------------------------------------------
# specify available video cores
@@ -290,6 +292,7 @@ VIDEOS += DM9368
#VIDEOS += EF9340_1
#VIDEOS += EF9345
#VIDEOS += GF4500
+VIDEOS += GF6800GT
VIDEOS += EPIC12
VIDEOS += FIXFREQ
VIDEOS += H63484
@@ -436,6 +439,7 @@ MACHINES += LDV1000
MACHINES += LDVP931
#MACHINES += LH5810
MACHINES += LINFLASH
+MACHINES += LPCI
#MACHINES += LSI53C810
#MACHINES += M68307
#MACHINES += M68340
@@ -578,6 +582,7 @@ MACHINES += FDC37C665GT
#BUSES += ADAMNET
#BUSES += APF
#BUSES += ARCADIA
+#BUSES += ASTROCADE
#BUSES += BML3
#BUSES += BW2
#BUSES += C64
@@ -606,6 +611,7 @@ BUSES += GENERIC
BUSES += ISA
#BUSES += ISBX
#BUSES += KC
+#BUSES += LPCI
#BUSES += MACPDS
#BUSES += MIDI
#BUSES += MEGADRIVE
@@ -616,11 +622,11 @@ BUSES += NEOGEO
#BUSES += O2
#BUSES += ORICEXT
#BUSES += PCE
-#BUSES += PCI
#BUSES += PC_JOY
#BUSES += PC_KBD
#BUSES += PET
#BUSES += PLUS4
+#BUSES += PSX_CONTROLLER
#BUSES += QL
BUSES += RS232
#BUSES += S100
@@ -631,6 +637,7 @@ BUSES += SCSI
#BUSES += SMS_CTRL
#BUSES += SMS_EXP
#BUSES += SNES
+#BUSES += SPC1000
#BUSES += TI99PEB
#BUSES += TVC
#BUSES += VBOY
@@ -1694,7 +1701,7 @@ $(MAMEOBJ)/sega.a: \
$(DRIVERS)/hikaru.o \
$(DRIVERS)/hshavoc.o \
$(DRIVERS)/kopunch.o $(VIDEO)/kopunch.o \
- $(DRIVERS)/lindbergh.o \
+ $(DRIVERS)/lindbergh.o $(MACHINE)/segabb.o \
$(MACHINE)/megadriv.o \
$(DRIVERS)/megadrvb.o \
$(DRIVERS)/megaplay.o \
@@ -1707,6 +1714,7 @@ $(MAMEOBJ)/sega.a: \
$(DRIVERS)/naomi.o $(MACHINE)/dc.o $(VIDEO)/powervr2.o $(MACHINE)/naomi.o \
$(MACHINE)/naomig1.o $(MACHINE)/naomibd.o $(MACHINE)/naomirom.o $(MACHINE)/naomigd.o \
$(MACHINE)/naomicrypt.o $(MACHINE)/naomim1.o $(MACHINE)/naomim2.o $(MACHINE)/naomim4.o \
+ $(MACHINE)/315-5881_crypt.o \
$(MACHINE)/awboard.o \
$(MACHINE)/mie.o $(MACHINE)/maple-dc.o $(MACHINE)/mapledev.o $(MACHINE)/dc-ctrl.o $(MACHINE)/jvs13551.o \
$(DRIVERS)/triforce.o \
@@ -1714,6 +1722,7 @@ $(MAMEOBJ)/sega.a: \
$(DRIVERS)/segac2.o \
$(DRIVERS)/segae.o \
$(DRIVERS)/shtzone.o \
+ $(DRIVERS)/segacoin.o \
$(DRIVERS)/segag80r.o $(MACHINE)/segag80.o $(AUDIO)/segag80r.o $(VIDEO)/segag80r.o \
$(DRIVERS)/segag80v.o $(AUDIO)/segag80v.o $(VIDEO)/segag80v.o \
$(DRIVERS)/segahang.o $(VIDEO)/segahang.o \
@@ -2649,6 +2658,8 @@ $(DRIVERS)/goldstar.o: $(LAYOUT)/goldstar.lh \
$(DRIVERS)/grchamp.o: $(LAYOUT)/grchamp.lh
+$(DRIVERS)/harddriv.o: $(LAYOUT)/racedrivpan.lh
+
$(DRIVERS)/highvdeo.o: $(LAYOUT)/fashion.lh
$(DRIVERS)/hankin.o: $(LAYOUT)/hankin.lh
@@ -2833,6 +2844,11 @@ $(DRIVERS)/segaorun.o: $(LAYOUT)/outrun.lh
$(DRIVERS)/segas32.o: $(LAYOUT)/radr.lh
+$(DRIVERS)/segaufo.o: $(LAYOUT)/newufo.lh \
+ $(LAYOUT)/ufomini.lh \
+ $(LAYOUT)/ufo21.lh \
+ $(LAYOUT)/ufo800.lh
+
$(DRIVERS)/segaybd.o: $(LAYOUT)/pdrift.lh
$(DRIVERS)/sigmab52.o: $(LAYOUT)/sigmab52.lh
diff --git a/src/mame/video/atarisy2.c b/src/mame/video/atarisy2.c
index baca749f8b4..1e6b1238ec5 100644
--- a/src/mame/video/atarisy2.c
+++ b/src/mame/video/atarisy2.c
@@ -208,20 +208,20 @@ WRITE16_MEMBER( atarisy2_state::paletteram_w )
READ16_MEMBER( atarisy2_state::slapstic_r )
{
int result = m_slapstic_base[offset];
- slapstic_tweak(space, offset);
+ m_slapstic->slapstic_tweak(space, offset);
/* an extra tweak for the next opcode fetch */
- m_videobank = slapstic_tweak(space, 0x1234) * 0x1000;
+ m_videobank = m_slapstic->slapstic_tweak(space, 0x1234) * 0x1000;
return result;
}
WRITE16_MEMBER( atarisy2_state::slapstic_w )
{
- slapstic_tweak(space, offset);
+ m_slapstic->slapstic_tweak(space, offset);
/* an extra tweak for the next opcode fetch */
- m_videobank = slapstic_tweak(space, 0x1234) * 0x1000;
+ m_videobank = m_slapstic->slapstic_tweak(space, 0x1234) * 0x1000;
}
diff --git a/src/mame/video/harddriv.c b/src/mame/video/harddriv.c
index 99c47df0b0e..0a9a5d4cbbb 100644
--- a/src/mame/video/harddriv.c
+++ b/src/mame/video/harddriv.c
@@ -30,7 +30,7 @@
*
*************************************/
-VIDEO_START_MEMBER(harddriv_state,harddriv)
+void harddriv_state::init_video()
{
UINT32 *destmask, mask;
int i;
@@ -161,7 +161,9 @@ TMS340X0_FROM_SHIFTREG_CB_MEMBER(harddriv_state::hdgsp_read_from_shiftreg)
void harddriv_state::update_palette_bank(int newbank)
{
- m_screen->update_partial(m_screen->vpos());
+ screen_device &scr = m_gsp->screen();
+
+ scr.update_partial(scr.vpos());
m_gfx_palettebank = newbank;
}
@@ -214,6 +216,7 @@ WRITE16_MEMBER( harddriv_state::hdgsp_control_hi_w )
COMBINE_DATA(&m_gsp_control_hi[offset]);
newword = m_gsp_control_hi[offset];
+ screen_device &scr = m_gsp->screen();
switch (offset & 7)
{
@@ -223,7 +226,7 @@ WRITE16_MEMBER( harddriv_state::hdgsp_control_hi_w )
case 0x01:
data = data & (15 >> m_gsp_multisync);
- m_screen->update_partial(m_screen->vpos() - 1);
+ scr.update_partial(scr.vpos() - 1);
m_gfx_finescroll = data;
break;
@@ -407,6 +410,9 @@ static void display_speedups(void)
TMS340X0_SCANLINE_IND16_CB_MEMBER(harddriv_state::scanline_driver)
{
UINT8 *vram_base = &m_gsp_vram[(params->rowaddr << 12) & m_vram_mask];
+
+ if (!vram_base) return;
+
UINT16 *dest = &bitmap.pix16(scanline);
int coladdr = (params->yoffset << 9) + ((params->coladdr & 0xff) << 4) - 15 + (m_gfx_finescroll & 0x0f);
int x;
@@ -422,6 +428,9 @@ TMS340X0_SCANLINE_IND16_CB_MEMBER(harddriv_state::scanline_driver)
TMS340X0_SCANLINE_IND16_CB_MEMBER(harddriv_state::scanline_multisync)
{
UINT8 *vram_base = &m_gsp_vram[(params->rowaddr << 11) & m_vram_mask];
+
+ if (!vram_base) return;
+
UINT16 *dest = &bitmap.pix16(scanline);
int coladdr = (params->yoffset << 9) + ((params->coladdr & 0xff) << 3) - 7 + (m_gfx_finescroll & 0x07);
int x;
diff --git a/src/mame/video/k007121.c b/src/mame/video/k007121.c
index e1ceeb34f3e..950ff5bf0a3 100644
--- a/src/mame/video/k007121.c
+++ b/src/mame/video/k007121.c
@@ -7,10 +7,12 @@ It manages sprites and two 32x32 tilemaps. The tilemaps can be joined to form
a single 64x32 one, or one of them can be moved to the side of screen, giving
a high score display suitable for vertical games.
The chip also generates clock and interrupt signals suitable for a 6809.
-It uses 0x2000 bytes of RAM for the tilemaps and sprites, and an additional
-0x100 bytes, maybe for scroll RAM and line buffers. The maximum addressable
+It uses 0x2000 bytes of static RAM for the tilemaps and sprite lists, and two
+64kx4bit DRAMs, presumably as a double frame buffer. The maximum addressable
ROM is 0x80000 bytes (addressed 16 bits at a time). Tile and sprite data both
-come from the same ROM space.
+come from the same ROM space. Like the 005885, external circuitry can cause
+tiles and sprites to be fetched from different ROMs (used by Haunted Castle).
+
Two 256x4 lookup PROMs are also used to increase the color combinations.
All tilemap / sprite priority handling is done internally and the chip exports
7 bits of color code, composed of 2 bits of palette bank, 1 bit indicating tile
@@ -27,8 +29,9 @@ inputs:
outputs:
- address lines for tilemap RAM (AX0-AX12)
- data lines for tilemap RAM (VO0-VO7)
-- address lines for the small RAM (FA0-FA7)
-- data lines for the small RAM (FD0-FD7)
+- address lines for the DRAMs (FA0-FA7)
+- control lines for the DRAMs (NWR0, NWR1, NRAS, NCAS, NOE)
+- data lines for the DRAMs (FD0-FD7)
- address lines for the gfx ROMs (R0-R17)
- address lines for the tile lookup PROMs (VCF0-VCF3, VCB0-VCB3)
- address lines for the sprite lookup PROMs (OCB0-OCB3, OCF0-OCF3)
diff --git a/src/mame/video/konamigx.c b/src/mame/video/konamigx.c
index 6886673f1d8..fd158f55fa9 100644
--- a/src/mame/video/konamigx.c
+++ b/src/mame/video/konamigx.c
@@ -276,11 +276,6 @@ void konamigx_state::wipezbuf(int noshadow)
#define GX_MAX_OBJECTS (GX_MAX_SPRITES + GX_MAX_LAYERS)
static struct GX_OBJ { int order, offs, code, color; } *gx_objpool;
-static UINT16 *gx_spriteram;
-
-// mirrored K054338 settings
-static int *K054338_shdRGB;
-
void konamigx_state::konamigx_mixer_init(screen_device &screen, int objdma)
{
@@ -291,15 +286,15 @@ void konamigx_state::konamigx_mixer_init(screen_device &screen, int objdma)
m_gx_shdzbuf = auto_alloc_array(machine(), UINT8, GX_ZBUFSIZE);
gx_objpool = auto_alloc_array(machine(), struct GX_OBJ, GX_MAX_OBJECTS);
- m_k054338->export_config(&K054338_shdRGB);
+ m_k054338->export_config(&m_K054338_shdRGB);
if (objdma)
{
- gx_spriteram = auto_alloc_array(machine(), UINT16, 0x1000/2);
+ m_gx_spriteram = auto_alloc_array(machine(), UINT16, 0x1000/2);
m_gx_objdma = 1;
}
else
- m_k055673->k053247_get_ram(&gx_spriteram);
+ m_k055673->k053247_get_ram(&m_gx_spriteram);
m_palette->set_shadow_dRGB32(3,-80,-80,-80, 0);
m_k054338->invert_alpha(1);
@@ -315,7 +310,7 @@ void konamigx_state::konamigx_objdma(void)
UINT16* k053247_ram;
m_k055673->k053247_get_ram(&k053247_ram);
- if (m_gx_objdma && gx_spriteram && k053247_ram) memcpy(gx_spriteram, k053247_ram, 0x1000);
+ if (m_gx_objdma && m_gx_spriteram && k053247_ram) memcpy(m_gx_spriteram, k053247_ram, 0x1000);
}
void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect,
@@ -416,9 +411,9 @@ void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap,
// only enable shadows beyond a +/-7 RGB threshold
for (j=0,i=0; i<3; j+=3,i++)
{
- k = K054338_shdRGB[j ]; if (k < -7 || k > 7) { shadowon[i] = 1; continue; }
- k = K054338_shdRGB[j+1]; if (k < -7 || k > 7) { shadowon[i] = 1; continue; }
- k = K054338_shdRGB[j+2]; if (k < -7 || k > 7) { shadowon[i] = 1; }
+ k = m_K054338_shdRGB[j ]; if (k < -7 || k > 7) { shadowon[i] = 1; continue; }
+ k = m_K054338_shdRGB[j+1]; if (k < -7 || k > 7) { shadowon[i] = 1; continue; }
+ k = m_K054338_shdRGB[j+2]; if (k < -7 || k > 7) { shadowon[i] = 1; }
}
// SHDON specifies layers on which shadows can be projected (see detail on p.65 7.2.8)
@@ -496,16 +491,16 @@ void konamigx_state::konamigx_mixer(screen_device &screen, bitmap_rgb32 &bitmap,
{
int pri = 0;
- if (!(gx_spriteram[offs] & 0x8000)) continue;
+ if (!(m_gx_spriteram[offs] & 0x8000)) continue;
- int zcode = gx_spriteram[offs] & 0xff;
+ int zcode = m_gx_spriteram[offs] & 0xff;
// invert z-order when opset_pri is set (see p.51 OPSET PRI)
if (m_k053247_opset & 0x10) zcode = 0xff - zcode;
- int code = gx_spriteram[offs+1];
- int color = k = gx_spriteram[offs+6];
- l = gx_spriteram[offs+7];
+ int code = m_gx_spriteram[offs+1];
+ int color = k = m_gx_spriteram[offs+6];
+ l = m_gx_spriteram[offs+7];
m_k055673->m_k053247_cb(&code, &color, &pri);
@@ -869,7 +864,7 @@ void konamigx_state::konamigx_mixer_draw(screen_device &screen, bitmap_rgb32 &bi
m_k055673->k053247_draw_single_sprite_gxcore(bitmap, cliprect,
- m_gx_objzbuf, m_gx_shdzbuf, code, gx_spriteram, offs,
+ m_gx_objzbuf, m_gx_shdzbuf, code, m_gx_spriteram, offs,
color, alpha, drawmode, zcode, pri,
/* non-gx only */
0,0,NULL,NULL,0
@@ -927,21 +922,19 @@ TILE_GET_INFO_MEMBER(konamigx_state::get_gx_psac_tile_info)
SET_TILE_INFO_MEMBER(0, tileno, colour, TILE_FLIPYX(flip));
}
-static int konamigx_type3_psac2_actual_bank;
-//int konamigx_type3_psac2_actual_last_bank = 0;
WRITE32_MEMBER(konamigx_state::konamigx_type3_psac2_bank_w)
{
// other bits are used for something...
COMBINE_DATA(&m_konamigx_type3_psac2_bank[offset]);
- konamigx_type3_psac2_actual_bank = (m_konamigx_type3_psac2_bank[0] & 0x10000000) >> 28;
+ m_konamigx_type3_psac2_actual_bank = (m_konamigx_type3_psac2_bank[0] & 0x10000000) >> 28;
/* handle this by creating 2 roz tilemaps instead, otherwise performance dies completely on dual screen mode
- if (konamigx_type3_psac2_actual_bank!=konamigx_type3_psac2_actual_last_bank)
+ if (m_konamigx_type3_psac2_actual_bank!=m_konamigx_type3_psac2_actual_last_bank)
{
m_gx_psac_tilemap->mark_all_dirty();
- konamigx_type3_psac2_actual_last_bank = konamigx_type3_psac2_actual_bank;
+ m_konamigx_type3_psac2_actual_last_bank = m_konamigx_type3_psac2_actual_bank;
}
*/
}
@@ -956,7 +949,7 @@ TILE_GET_INFO_MEMBER(konamigx_state::get_gx_psac3_tile_info)
int base_index = tile_index;
-// if (konamigx_type3_psac2_actual_bank)
+// if (m_konamigx_type3_psac2_actual_bank)
// base_index+=0x20000/2;
@@ -977,7 +970,7 @@ TILE_GET_INFO_MEMBER(konamigx_state::get_gx_psac3_alt_tile_info)
int base_index = tile_index;
-// if (konamigx_type3_psac2_actual_bank)
+// if (m_konamigx_type3_psac2_actual_bank)
// base_index+=0x20000/2;
@@ -1432,7 +1425,7 @@ UINT32 konamigx_state::screen_update_konamigx(screen_device &screen, bitmap_rgb3
temprect = cliprect;
temprect.max_x = cliprect.min_x+320;
- if (konamigx_type3_psac2_actual_bank == 1) K053936_0_zoom_draw(screen, *m_type3_roz_temp_bitmap, temprect,m_gx_psac_tilemap_alt, 0,0,0); // soccerss playfield
+ if (m_konamigx_type3_psac2_actual_bank == 1) K053936_0_zoom_draw(screen, *m_type3_roz_temp_bitmap, temprect,m_gx_psac_tilemap_alt, 0,0,0); // soccerss playfield
else K053936_0_zoom_draw(screen, *m_type3_roz_temp_bitmap, temprect,m_gx_psac_tilemap, 0,0,0); // soccerss playfield
diff --git a/src/mame/video/konamiic.txt b/src/mame/video/konamiic.txt
index aca1072e262..622e4d9352f 100644
--- a/src/mame/video/konamiic.txt
+++ b/src/mame/video/konamiic.txt
@@ -211,8 +211,8 @@ tilemaps to form a single 8bpp one.
It manages sprites and 32x32 or 64x32 tilemap (only Double Dribble uses the
64x32 one).
The chip also generates clock and interrupt signals suitable for a 6809.
-It uses 0x2000 bytes of RAM for the tilemaps and sprites, and an additional
-0x100 bytes, maybe for scroll RAM and line buffers. The maximum addressable
+It uses 0x2000 bytes of static RAM for the tilemaps and sprite lists, and two
+64kx4bit DRAMs, presumably as a double frame buffer. The maximum addressable
ROM is 0x20000 bytes (addressed 16 bits at a time). Tile and sprite data both
come from the same ROM space. Double Dribble and Jackal have external circuitry
to extend the limits and use separated addressing spaces for sprites and tiles.
@@ -234,8 +234,9 @@ inputs:
outputs:
- address lines for tilemap RAM (AX0-AX12)
- data lines for tilemap RAM (VO0-VO7)
-- address lines for the small RAM (FA0-FA7)
-- data lines for the small RAM (FD0-FD7)
+- address lines for the DRAMs (FA0-FA7)
+- control lines for the DRAMs (NWR0, NWR1, NRAS, NCAS, NFOE)
+- data lines for the DRAMs (FD0-FD7)
- address lines for the gfx ROMs (R0-R15)
- address lines for the tile lookup PROMs (VCF0-VCF3, VCB0-VCB3)
- address lines for the sprite lookup PROMs (OCB0-OCB3, OCF0-OCF3)
diff --git a/src/mame/video/psychic5.c b/src/mame/video/psychic5.c
index 98bd6e6d58c..6950623770b 100644
--- a/src/mame/video/psychic5.c
+++ b/src/mame/video/psychic5.c
@@ -10,11 +10,7 @@
#include "video/jalblend.h"
#include "includes/psychic5.h"
-#define BG_SCROLLX_LSB 0x308
-#define BG_SCROLLX_MSB 0x309
-#define BG_SCROLLY_LSB 0x30a
-#define BG_SCROLLY_MSB 0x30b
-#define BG_SCREEN_MODE 0x30c
+
#define BG_PAL_INTENSITY_RG 0x1fe
#define BG_PAL_INTENSITY_BU 0x1ff
@@ -23,12 +19,15 @@
Palette color
***************************************************************************/
-void psychic5_state::psychic5_change_palette(int color, int offset)
+void psychic5_state::psychic5_change_palette(int offset, UINT8* palram, int palbase)
{
- UINT8 lo = m_ps5_palette_ram[offset & ~1];
- UINT8 hi = m_ps5_palette_ram[offset | 1];
- jal_blend_set(color, hi & 0x0f);
- m_palette->set_pen_color(color, pal4bit(lo >> 4), pal4bit(lo), pal4bit(hi >> 4));
+ UINT8 lo = palram[(offset) & ~1];
+ UINT8 hi = palram[(offset) | 1];
+
+ int color = offset >> 1;
+
+ jal_blend_set(palbase + color, hi & 0x0f);
+ m_palette->set_pen_color(palbase + color, pal4bit(lo >> 4), pal4bit(lo), pal4bit(hi >> 4));
}
void psychic5_state::psychic5_change_bg_palette(int color, int lo_offs, int hi_offs)
@@ -44,8 +43,8 @@ void psychic5_state::psychic5_change_bg_palette(int color, int lo_offs, int hi_o
irgb = rgb_t(ir,ig,ib);
- lo = m_ps5_palette_ram[lo_offs];
- hi = m_ps5_palette_ram[hi_offs];
+ lo = m_ps5_palette_ram_bg[lo_offs];
+ hi = m_ps5_palette_ram_bg[hi_offs];
/* red,green,blue component */
r = pal4bit(lo >> 4);
@@ -53,7 +52,7 @@ void psychic5_state::psychic5_change_bg_palette(int color, int lo_offs, int hi_o
b = pal4bit(hi >> 4);
/* Grey background enable */
- if (m_bg_status & 2)
+ if (m_bg_control[4] & 2)
{
UINT8 val = (r + g + b) / 3; /* Grey */
/* Just leave plain grey */
@@ -73,12 +72,12 @@ void psychic5_state::psychic5_change_bg_palette(int color, int lo_offs, int hi_o
void psychic5_state::set_background_palette_intensity()
{
int i;
- m_palette_intensity = m_ps5_palette_ram[BG_PAL_INTENSITY_BU] |
- (m_ps5_palette_ram[BG_PAL_INTENSITY_RG]<<8);
+ m_palette_intensity = m_ps5_palette_ram_sp[BG_PAL_INTENSITY_BU] |
+ (m_ps5_palette_ram_sp[BG_PAL_INTENSITY_RG]<<8);
/* for all of the background palette */
for (i = 0; i < 0x100; i++)
- psychic5_change_bg_palette(m_bg_palette_base+i,m_bg_palette_ram_base+i*2,m_bg_palette_ram_base+i*2+1);
+ psychic5_change_bg_palette(i+0x100,i*2,i*2+1);
}
@@ -94,6 +93,7 @@ READ8_MEMBER(psychic5_state::psychic5_vram_page_select_r)
WRITE8_MEMBER(psychic5_state::psychic5_vram_page_select_w)
{
m_ps5_vram_page = data & 1;
+ m_vrambank->set_bank(data);
}
WRITE8_MEMBER(psychic5_state::psychic5_title_screen_w)
@@ -101,90 +101,41 @@ WRITE8_MEMBER(psychic5_state::psychic5_title_screen_w)
m_title_screen = data;
}
-READ8_MEMBER(psychic5_state::psychic5_paged_ram_r)
-{
- if (m_ps5_vram_page == 1)
- {
- switch (offset)
- {
- case 0x00: return ioport("SYSTEM")->read();
- case 0x01: return ioport("P1")->read();
- case 0x02: return ioport("P2")->read();
- case 0x03: return ioport("DSW1")->read();
- case 0x04: return ioport("DSW2")->read();
- }
- }
- return m_ps5_pagedram[m_ps5_vram_page][offset];
+
+WRITE8_MEMBER(psychic5_state::sprite_col_w)
+{
+ m_ps5_palette_ram_sp[offset] = data;
+ psychic5_change_palette(offset,m_ps5_palette_ram_sp, 0x000);
}
-WRITE8_MEMBER(psychic5_state::psychic5_paged_ram_w)
+WRITE8_MEMBER(psychic5_state::bg_col_w)
{
- m_ps5_pagedram[m_ps5_vram_page][offset] = data;
+ m_ps5_palette_ram_bg[offset] = data;
+ psychic5_change_palette(offset,m_ps5_palette_ram_bg, 0x100);
+}
- if (m_ps5_vram_page == 0)
- {
- if (offset <= 0xfff)
- m_bg_tilemap->mark_tile_dirty(offset >> 1);
- }
- else
- {
- if (offset == BG_SCROLLX_LSB || offset == BG_SCROLLX_MSB)
- {
- UINT16 bg_scrollx = m_ps5_io_ram[BG_SCROLLX_LSB] | (m_ps5_io_ram[BG_SCROLLX_MSB] << 8);
- m_bg_tilemap->set_scrollx(0, bg_scrollx);
- }
- else if (offset == BG_SCROLLY_LSB || offset == BG_SCROLLY_MSB)
- {
- UINT16 bg_scrolly = m_ps5_io_ram[BG_SCROLLY_LSB] | (m_ps5_io_ram[BG_SCROLLY_MSB] << 8);
- m_bg_tilemap->set_scrolly(0, bg_scrolly);
- }
- else if (offset == BG_SCREEN_MODE)
- {
- m_bg_status = m_ps5_io_ram[BG_SCREEN_MODE];
- }
- else if (offset >= 0x400 && offset <= 0x5ff) /* Sprite color */
- psychic5_change_palette(((offset >> 1) & 0xff)+0x000,offset-0x400);
- else if (offset >= 0x800 && offset <= 0x9ff) /* BG color */
- psychic5_change_palette(((offset >> 1) & 0xff)+0x100,offset-0x400);
- else if (offset >= 0xa00 && offset <= 0xbff) /* Text color */
- psychic5_change_palette(((offset >> 1) & 0xff)+0x200,offset-0x400);
- else if (offset >= 0x1000)
- m_fg_tilemap->mark_tile_dirty((offset-0x1000) >> 1);
- }
+WRITE8_MEMBER(psychic5_state::tx_col_w)
+{
+ m_ps5_palette_ram_tx[offset] = data;
+ psychic5_change_palette(offset,m_ps5_palette_ram_tx, 0x200);
}
-WRITE8_MEMBER(psychic5_state::bombsa_paged_ram_w)
+
+WRITE8_MEMBER(psychic5_state::fg_videoram_w)
{
- m_ps5_pagedram[m_ps5_vram_page][offset] = data;
+ m_fg_videoram[offset] = data;
+ m_fg_tilemap->mark_tile_dirty(offset >> 1);
+}
- if (m_ps5_vram_page == 0)
- {
- m_bg_tilemap->mark_tile_dirty(offset >> 1);
- }
- else
- {
- if (offset == BG_SCROLLX_LSB || offset == BG_SCROLLX_MSB)
- {
- UINT16 bg_scrollx = m_ps5_io_ram[BG_SCROLLX_LSB] | (m_ps5_io_ram[BG_SCROLLX_MSB] << 8);
- m_bg_tilemap->set_scrollx(0, bg_scrollx);
- }
- else if (offset == BG_SCROLLY_LSB || offset == BG_SCROLLY_MSB)
- {
- UINT16 bg_scrolly = m_ps5_io_ram[BG_SCROLLY_LSB] | (m_ps5_io_ram[BG_SCROLLY_MSB] << 8);
- m_bg_tilemap->set_scrolly(0, bg_scrolly);
- }
- else if (offset == BG_SCREEN_MODE)
- {
- m_bg_status = m_ps5_io_ram[BG_SCREEN_MODE];
- }
- else if (offset >= 0x0800 && offset <= 0x0fff)
- m_fg_tilemap->mark_tile_dirty((offset & 0x7ff) >> 1);
- else if (offset >= 0x1000 && offset <= 0x15ff)
- psychic5_change_palette((offset >> 1) & 0x3ff, offset-0x1000);
- }
+WRITE8_MEMBER( psychic5_state::bg_videoram_w )
+{
+ m_bg_videoram[offset] = data;
+ m_bg_tilemap->mark_tile_dirty(offset >> 1);
}
+
+
WRITE8_MEMBER(psychic5_state::bombsa_unknown_w)
{
m_bombsa_unknown = data;
@@ -224,71 +175,31 @@ TILE_GET_INFO_MEMBER(psychic5_state::get_fg_tile_info)
VIDEO_START_MEMBER(psychic5_state,psychic5)
{
- /* info offset w h col row */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(psychic5_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 64, 32);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(psychic5_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
-
m_fg_tilemap->set_transparent_pen(15);
-
- m_ps5_pagedram[0] = auto_alloc_array(machine(), UINT8, 0x2000);
- m_ps5_pagedram[1] = auto_alloc_array(machine(), UINT8, 0x2000);
-
- m_bg_videoram = &m_ps5_pagedram[0][0x0000];
- m_ps5_dummy_bg_ram = &m_ps5_pagedram[0][0x1000];
- m_ps5_io_ram = &m_ps5_pagedram[1][0x0000];
- m_ps5_palette_ram = &m_ps5_pagedram[1][0x0400];
- m_fg_videoram = &m_ps5_pagedram[1][0x1000];
-
jal_blend_init(machine(), 1);
- m_bg_palette_ram_base = 0x400;
- m_bg_palette_base = 0x100;
}
VIDEO_START_MEMBER(psychic5_state,bombsa)
{
- /* info offset w h col row */
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(psychic5_state::get_bg_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 32);
m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(psychic5_state::get_fg_tile_info),this), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
-
m_fg_tilemap->set_transparent_pen(15);
-
- m_ps5_pagedram[0] = auto_alloc_array(machine(), UINT8, 0x2000);
- m_ps5_pagedram[1] = auto_alloc_array(machine(), UINT8, 0x2000);
-
- m_bg_videoram = &m_ps5_pagedram[0][0x0000];
- m_ps5_dummy_bg_ram = &m_ps5_pagedram[0][0x1000];
- m_ps5_io_ram = &m_ps5_pagedram[1][0x0000];
- m_fg_videoram = &m_ps5_pagedram[1][0x0800];
- m_ps5_palette_ram = &m_ps5_pagedram[1][0x1000];
-
jal_blend_init(machine(), 0);
-
- m_bg_palette_ram_base = 0x000;
- m_bg_palette_base = 0x000;
}
VIDEO_RESET_MEMBER(psychic5_state,psychic5)
{
m_bg_clip_mode = 0;
m_ps5_vram_page = 0;
- m_bg_status = 0;
- memset(m_ps5_pagedram[0],0,0x2000);
- memset(m_ps5_pagedram[1],0,0x2000);
- m_palette_intensity = 0;
-}
-
-VIDEO_RESET_MEMBER(psychic5_state,bombsa)
-{
- m_ps5_vram_page = 0;
- m_bg_status = 0;
m_title_screen = 0;
- memset(m_ps5_pagedram[0],0,0x2000);
- memset(m_ps5_pagedram[1],0,0x2000);
m_palette_intensity = 0;
}
+
/***************************************************************************
Screen refresh
***************************************************************************/
@@ -406,8 +317,13 @@ void psychic5_state::draw_background(screen_device &screen, bitmap_rgb32 &bitmap
UINT32 psychic5_state::screen_update_psychic5(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
+ UINT16 bg_scrollx = m_bg_control[0] | (m_bg_control[1] << 8);
+ m_bg_tilemap->set_scrollx(0, bg_scrollx);
+ UINT16 bg_scrolly = m_bg_control[2] | (m_bg_control[3] << 8);
+ m_bg_tilemap->set_scrolly(0, bg_scrolly);
+
bitmap.fill(m_palette->black_pen(), cliprect);
- if (m_bg_status & 1) /* Backgound enable */
+ if (m_bg_control[4] & 1) /* Backgound enable */
draw_background(screen, bitmap, cliprect);
if (!(m_title_screen & 1))
draw_sprites(bitmap, cliprect);
@@ -417,7 +333,13 @@ UINT32 psychic5_state::screen_update_psychic5(screen_device &screen, bitmap_rgb3
UINT32 psychic5_state::screen_update_bombsa(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- if (m_bg_status & 1) /* Backgound enable */
+ UINT16 bg_scrollx = m_bg_control[0] | (m_bg_control[1] << 8);
+ m_bg_tilemap->set_scrollx(0, bg_scrollx);
+ UINT16 bg_scrolly = m_bg_control[2] | (m_bg_control[3] << 8);
+ m_bg_tilemap->set_scrolly(0, bg_scrolly);
+ bitmap.fill(m_palette->black_pen(), cliprect);
+
+ if (m_bg_control[4] & 1) /* Backgound enable */
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
else
bitmap.fill(m_palette->pen(0x0ff), cliprect);
diff --git a/src/mame/video/rdpspn16.c b/src/mame/video/rdpspn16.c
index 158f968332c..800d295de80 100644
--- a/src/mame/video/rdpspn16.c
+++ b/src/mame/video/rdpspn16.c
@@ -572,6 +572,8 @@ void n64_rdp::SpanDrawFill(INT32 scanline, const extent_t &extent, const rdp_pol
{
if (x >= clipx1 && x < clipx2)
{
+ if (object.MiscState.FBSize < 2 || object.MiscState.FBSize > 4)
+ fatalerror("unsupported FBSize %d\n", object.MiscState.FBSize);
((this)->*(_Fill[object.MiscState.FBSize - 2]))(fb_index + x, object);
}
diff --git a/src/mame/video/rdptpipe.c b/src/mame/video/rdptpipe.c
index f5a83096a95..3a258774407 100644
--- a/src/mame/video/rdptpipe.c
+++ b/src/mame/video/rdptpipe.c
@@ -595,6 +595,21 @@ void N64TexturePipeT::LOD1Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32
userdata->m_precomp_s = nexts;
userdata->m_precomp_t = nextt;
+ INT32 lodclamp = (((*sst & 0x60000) > 0) | ((nextt & 0x60000) > 0)) || (((*sss & 0x60000) > 0) | ((nexts & 0x60000) > 0));
+
+ INT32 horstep = SIGN17(nexts & 0x1ffff) - SIGN17(*sss & 0x1ffff);
+ INT32 vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(*sst & 0x1ffff);
+ if (horstep & 0x20000)
+ {
+ horstep = ~horstep & 0x1ffff;
+ }
+ if (vertstep & 0x20000)
+ {
+ vertstep = ~vertstep & 0x1ffff;
+ }
+
+ INT32 lod = (horstep >= vertstep) ? horstep : vertstep;
+
int tempanded;
if (*sss & 0x40000)
{
@@ -645,6 +660,38 @@ void N64TexturePipeT::LOD1Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32
*sst &= 0xffff;
}
}
+
+ if ((lod & 0x4000) || lodclamp)
+ {
+ lod = 0x7fff;
+ }
+ else if (lod < object.MiscState.MinLevel)
+ {
+ lod = object.MiscState.MinLevel;
+ }
+
+ bool magnify = (lod < 32);
+ INT32 l_tile = m_rdp->GetLog2((lod >> 5) & 0xff);
+ bool distant = ((lod & 0x6000) || (l_tile >= object.MiscState.MaxLevel));
+
+ userdata->LODFraction = ((lod << 3) >> l_tile) & 0xff;
+
+ if(!object.OtherModes.sharpen_tex_en && !object.OtherModes.detail_tex_en)
+ {
+ if (distant)
+ {
+ userdata->LODFraction = 0xff;
+ }
+ else if (magnify)
+ {
+ userdata->LODFraction = 0;
+ }
+ }
+
+ if(object.OtherModes.sharpen_tex_en && magnify)
+ {
+ userdata->LODFraction |= 0x100;
+ }
}
void N64TexturePipeT::LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32 w, INT32 dsinc, INT32 dtinc, INT32 dwinc, INT32 prim_tile, INT32* t1, INT32* t2, rdp_span_aux *userdata, const rdp_poly_state& object)
@@ -761,7 +808,7 @@ void N64TexturePipeT::LOD2Cycle(INT32* sss, INT32* sst, INT32 s, INT32 t, INT32
if(object.OtherModes.sharpen_tex_en && magnify)
{
- userdata->LODFraction = userdata->LODFraction | 0x100;
+ userdata->LODFraction |= 0x100;
}
if (object.OtherModes.tex_lod_en)
diff --git a/src/mame/video/rockrage.c b/src/mame/video/rockrage.c
index b2cab647e34..a547bd25148 100644
--- a/src/mame/video/rockrage.c
+++ b/src/mame/video/rockrage.c
@@ -4,22 +4,13 @@
PALETTE_INIT_MEMBER(rockrage_state, rockrage)
{
const UINT8 *color_prom = memregion("proms")->base();
- int i;
- /* sprites */
- for (i = 0x20; i < 0x40; i++)
- palette.set_pen_indirect(i, i);
-
- /* characters */
- for (i = 0x40; i < 0x140; i++)
+ for (int i = 0; i < 256*3; i++)
{
- UINT8 ctabentry;
-
- ctabentry = (color_prom[(i - 0x40) + 0x000] & 0x0f) | 0x00;
- palette.set_pen_indirect(i + 0x000, ctabentry);
-
- ctabentry = (color_prom[(i - 0x40) + 0x100] & 0x0f) | 0x10;
- palette.set_pen_indirect(i + 0x100, ctabentry);
+ // layer0 uses colors 0x00-0x0f; layer1 uses 0x10-0x1f; sprites use 0x20-0x2f
+ UINT8 colorbase = (i / 256) * 16;
+ UINT8 ctabentry = (color_prom[i] & 0x0f) | colorbase;
+ palette.set_pen_indirect(i, ctabentry);
}
}
@@ -50,7 +41,7 @@ K007420_CALLBACK_MEMBER(rockrage_state::rockrage_sprite_callback)
{
*code |= ((*color & 0x40) << 2) | ((*color & 0x80) << 1) * ((m_vreg & 0x03) << 1);
*code = (*code << 2) | ((*color & 0x30) >> 4);
- *color = 0;
+ *color = 0 + (*color & 0x0f);
}
diff --git a/src/mame/video/tia.c b/src/mame/video/tia.c
index c0698dc4568..384a3773ddc 100644
--- a/src/mame/video/tia.c
+++ b/src/mame/video/tia.c
@@ -269,14 +269,14 @@ Phase Shift 26.2
double G = Y - 0.272 * I - 0.647 * Q;
double B = Y - 1.106 * I + 1.703 * Q;
- R = pow(R, 0.9) / pow(1, 0.9);
- G = pow(G, 0.9) / pow(1, 0.9);
- B = pow(B, 0.9) / pow(1, 0.9);
-
if (R < 0) R = 0;
if (G < 0) G = 0;
if (B < 0) B = 0;
+ R = pow(R, 0.9);
+ G = pow(G, 0.9);
+ B = pow(B, 0.9);
+
if (R > 1) R = 1;
if (G > 1) G = 1;
if (B > 1) B = 1;
@@ -328,14 +328,14 @@ PALETTE_INIT_MEMBER(tia_pal_video_device, tia_pal)
double G = Y - 0.344 * U - 0.714 * V;
double B = Y + 1.770 * U;
- R = pow(R, 1.2) / pow(1, 1.2);
- G = pow(G, 1.2) / pow(1, 1.2);
- B = pow(B, 1.2) / pow(1, 1.2);
-
if (R < 0) R = 0;
if (G < 0) G = 0;
if (B < 0) B = 0;
+ R = pow(R, 1.2);
+ G = pow(G, 1.2);
+ B = pow(B, 1.2);
+
if (R > 1) R = 1;
if (G > 1) G = 1;
if (B > 1) B = 1;
diff --git a/src/mame/video/twin16.c b/src/mame/video/twin16.c
index d2ffe52e17f..d8ebb702d97 100644
--- a/src/mame/video/twin16.c
+++ b/src/mame/video/twin16.c
@@ -19,23 +19,20 @@
enum
{
- TWIN16_SCREEN_FLIPY = 0x01,
- TWIN16_SCREEN_FLIPX = 0x02, // confirmed: Hard Puncher Intro
- TWIN16_UNKNOWN1 = 0x04, // ? Hard Puncher uses this
- TWIN16_PLANE_ORDER = 0x08, // confirmed: Devil Worlds
- TWIN16_TILE_FLIPX = 0x10, // unused?
- TWIN16_TILE_FLIPY = 0x20 // confirmed? Vulcan Venture
+ TWIN16_SCREEN_FLIPY = 0x01,
+ TWIN16_SCREEN_FLIPX = 0x02, // confirmed: Hard Puncher Intro
+ TWIN16_PRI0 = 0x04, // PRI0 input into 007789 PAL
+ TWIN16_PRI1 = 0x08, // PRI1 input into 007789 PAL
+ TWIN16_PRI2_UNUSED = 0x10, // schematic shows as PRI2 input, but unused
+ TWIN16_TILE_FLIPY = 0x20 // confirmed: Vulcan Venture
};
enum
{
// user-defined priorities
- TWIN16_BG_LAYER1 = 0x01,
- TWIN16_SPRITE_PRI_L1 = 0x02,
- TWIN16_BG_LAYER2 = 0x04,
- TWIN16_SPRITE_PRI_L2 = 0x08,
- TWIN16_SPRITE_OCCUPIED = 0x10, // sprite on screen pixel
- TWIN16_SPRITE_CAST_SHADOW = 0x20
+ TWIN16_BG_OVER_SPRITES = 0x01, // BG pixel has priority over opaque sprite pixels
+ TWIN16_BG_NO_SHADOW = 0x02, // BG pixel has priority over shadow sprite pixels
+ TWIN16_SPRITE_OCCUPIED = 0x04
};
@@ -107,7 +104,7 @@ WRITE16_MEMBER(twin16_state::video_register_w)
flip |= (m_video_register&TWIN16_SCREEN_FLIPY) ? TILEMAP_FLIPY : 0;
machine().tilemap().set_flip_all(flip);
}
- if (changed & (TWIN16_TILE_FLIPX | TWIN16_TILE_FLIPY))
+ if (changed & TWIN16_TILE_FLIPY)
{
m_scroll_tmap[0]->mark_all_dirty();
m_scroll_tmap[1]->mark_all_dirty();
@@ -177,8 +174,7 @@ WRITE16_MEMBER(twin16_state::video_register_w)
* 2 | -------xxxxxxxxx | xpos
* -----+------------------+
* 3 | x--------------- | enable
- * 3 | -x-------------- | priority ?
- * 3 | -----x---------- | no shadow ?
+ * 3 | -xxxxx---------- | ?
* 3 | ------x--------- | yflip ?
* 3 | -------x-------- | xflip
* 3 | --------xx------ | height
@@ -230,34 +226,22 @@ void twin16_state::spriteram_process( )
UINT32 xpos = (0x10000*source[4])|source[5];
UINT32 ypos = (0x10000*source[6])|source[7];
- /* notes on uncertain attributes:
- shadows: pen $F only (like other Konami hw), used in devilw, fround,
- miaj? (shadows are solid in tmnt hw version),
- gradius2? (ship exhaust)
+ /* notes on sprite attributes:
- sprite-background priority: in devilw, most sprites look best at high priority,
- in gradius2, most sprites look best at low priority. exceptions:
- - devilw prologue: sprites behind crowd (maybe more, haven't completed the game)
- - gradius2 intro showing earlier games: sprites above layers
+ The only inputs from the sprite hardware into the mixer PAL are four bits of
+ pixel data, with 0000 being transparent, 1111 being shadow, and anything else
+ opaque. Sprite to background priority, and whether shadows are visible, depends
+ entirely on the priority mode bits in m_video_register and on the underlying
+ background pixel, and not on any of the sprite attribute bits.
- currently using (priority&0x200), broken:
- - devilw prologue: sprites should be behind crowd
- - gradius2 level 7: bosses should be behind portal (ok except brain boss and mouth boss)
- - gradius2 ending: sun should be behind planet
+ Shadows in the devilw lava stages look a bit strange; the shadows "punch holes"
+ in the platforms and reveal the lava underneath. As far as I can tell from the
+ schematics this has to be correct; unlike later Konami hardware there seems to
+ be no way for a sprite to cast a shadow onto another sprite.
- does TWIN16_PLANE_ORDER affect it?
-
- more?
- devilw monster dens exploding monochrome, players fading to white in prologue, and trees in
- the 1st level shrinking with a solid green color look odd, maybe alpha blended?
-
- fround, hpuncher, miaj, cuebrickj, don't use the preprocessor. all sprites are expected
- to be high priority, and shadows are enabled
+ fround, hpuncher, miaj, cuebrickj, don't use the preprocessor.
*/
- UINT16 attributes = 0x8000| // enabled
- (source[2]&0x03ff)| // scale,size,color
- (source[2]&0x4000)>>4| // no-shadow? (gradius2 level 7 boss sets this bit and appears to expect pen $F to be solid)
- (priority&0x200)<<5; // sprite-background priority?
+ UINT16 attributes = 0x8000 | (source[2]&0x03ff); // scale,size,color
dest[0] = source[3]; /* gfx data */
dest[1] = ((xpos>>8) - dx)&0xffff;
@@ -291,7 +275,6 @@ void twin16_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap )
const UINT16 *pen_data = 0;
int flipy = attributes&0x0200;
int flipx = attributes&0x0100;
- int priority = (attributes&0x4000)?TWIN16_SPRITE_PRI_L1:TWIN16_SPRITE_PRI_L2;
if( m_is_fround ) {
/* fround board */
@@ -360,26 +343,20 @@ void twin16_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap )
{
UINT16 pen = pen_data[x>>2]>>((~x&3)<<2)&0xf;
- if( pen )
+ if( pen && !(pdest[sx] & TWIN16_SPRITE_OCCUPIED))
{
- int shadow = (pen==0xf) & ((attributes&0x400)==0);
+ pdest[sx] |= TWIN16_SPRITE_OCCUPIED;
- if (pdest[sx]<priority) {
- if (shadow) {
+ if (pen==0xf) // shadow
+ {
+ if (!(pdest[sx] & TWIN16_BG_NO_SHADOW))
dest[sx] = m_palette->shadow_table()[dest[sx]];
- pdest[sx]|=TWIN16_SPRITE_CAST_SHADOW;
- }
- else {
- dest[sx] = pal_base + pen;
- }
}
- else if (!shadow && pdest[sx]&TWIN16_SPRITE_CAST_SHADOW && (pdest[sx]&0xf)<priority) {
- // shadow cast onto sprite below, evident in devilw lava level
- dest[sx] = m_palette->shadow_table()[pal_base + pen];
- pdest[sx]^=TWIN16_SPRITE_CAST_SHADOW;
+ else // opaque pixel
+ {
+ if (!(pdest[sx] & TWIN16_BG_OVER_SPRITES))
+ dest[sx] = pal_base + pen;
}
-
- pdest[sx]|=TWIN16_SPRITE_OCCUPIED;
}
}
}
@@ -412,21 +389,21 @@ TILE_GET_INFO_MEMBER(twin16_state::fix_tile_info)
void twin16_state::tile_get_info(tile_data &tileinfo, UINT16 data, int color_base)
{
/* fedcba9876543210
- xxx------------- color
+ xxx------------- color; high bit is also priority over sprites
---xxxxxxxxxxxxx tile number
*/
int code = (data & 0x1fff);
int color = color_base + (data >> 13);
int flags = 0;
- if (m_video_register & TWIN16_TILE_FLIPX) flags |= TILE_FLIPX;
if (m_video_register & TWIN16_TILE_FLIPY) flags |= TILE_FLIPY;
SET_TILE_INFO_MEMBER(1, code, color, flags);
+ tileinfo.category = BIT(data, 15);
}
void fround_state::tile_get_info(tile_data &tileinfo, UINT16 data, int color_base)
{
/* fedcba9876543210
- xxx------------- color
+ xxx------------- color; high bit is also priority over sprites
---xx----------- tile bank
-----xxxxxxxxxxx tile number
*/
@@ -434,9 +411,9 @@ void fround_state::tile_get_info(tile_data &tileinfo, UINT16 data, int color_bas
int code = (m_gfx_bank[bank] << 11) | (data & 0x7ff);
int color = color_base | (data >> 13);
int flags = 0;
- if (m_video_register & TWIN16_TILE_FLIPX) flags |= TILE_FLIPX;
if (m_video_register & TWIN16_TILE_FLIPY) flags |= TILE_FLIPY;
SET_TILE_INFO_MEMBER(1, code, color, flags);
+ tileinfo.category = BIT(data, 15);
}
TILE_GET_INFO_MEMBER(twin16_state::layer0_tile_info)
@@ -485,10 +462,71 @@ void fround_state::video_start()
UINT32 twin16_state::screen_update_twin16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int layer = m_video_register & TWIN16_PLANE_ORDER ? 0 : 1;
+/*
+ PAL equations (007789 @ 11J):
+
+ /SHAD = /FIX * /PRI1 * OCO0 * OCO1 * OCO2 * OCO3
+ + /FIX * /PRI0 * OCO0 * OCO1 * OCO2 * OCO3 * /V1C0
+ + /FIX * PRI0 * OCO0 * OCO1 * OCO2 * OCO3 * /V2C6
+ + /FIX * PRI0 * /V2C0 * /V2C3 * OCO0 * /V2C2 * OCO1 * /V2C1 * OCO2 * OCO3
+
+ /SELB = /FIX * OCO0 * OCO1 * OCO2 * OCO3
+ + /FIX * /OCO0 * /OCO1 * /OCO2 * /OCO3
+ + /FIX * PRI0 * /PRI1 * V1C0
+ + /FIX * PRI0 * PRI1 * V2C0 * V2C6
+ + /FIX * PRI0 * PRI1 * V2C1 * V2C6
+ + /FIX * PRI0 * PRI1 * V2C2 * V2C6
+ + /FIX * PRI0 * PRI1 * V2C3 * V2C6
+
+ SELA = FIX
+ + PRI0 * /PRI1 * V1C0
+ + /PRI1 * OCO0 * OCO1 * OCO2 * OCO3 * V1C0
+ + /PRI1 * /OCO0 * /OCO1 * /OCO2 * /OCO3 * V1C0
+ + PRI1 * /V2C0 * /V2C3 * OCO0 * /V2C2 * OCO1 * /V2C1 * OCO2 * OCO3
+ + PRI1 * /V2C0 * /V2C3 * /OCO0 * /V2C2 * /OCO1 * /V2C1 * /OCO2 * /OCO3
+
+ SELB SELA Visible layer
+ 0 0 VRAM2
+ 0 1 VRAM1
+ 1 0 Object
+ 1 1 Fix
+
+ Final Round uses a PROM (not dumped) instead of the PAL
+ and some discrete logic to combine some of the inputs.
+ Inputs to the PROM are:
+
+ A0 = V1C0 | V1C1 | V1C2 | V1C3
+ A1 = V2C0 | V2C1 | V2C2 | V2C3
+ A2 = OCO0 | OCO1 | OCO2 | OCO3
+ A3 = FIX0 | FIX1 | FIX2 | FIX3
+ A4 = ~(OCD0 & OCD1 & OCD2 & OCD3)
+ A5 = V2C6
+ A6 = PRI0
+ A7 = PRI1
+*/
+ screen.priority().fill(0, cliprect);
- m_scroll_tmap[layer]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_OPAQUE, TWIN16_BG_LAYER1, 0);
- m_scroll_tmap[layer^1]->draw(screen, bitmap, cliprect, 0, TWIN16_BG_LAYER2);
+ switch ((m_video_register >> 2) & 0x3)
+ {
+ case 0: // PRI1 = 0, PRI0 = 0
+ m_scroll_tmap[1]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_ALL_CATEGORIES | TILEMAP_DRAW_OPAQUE);
+ m_scroll_tmap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_ALL_CATEGORIES);
+ break;
+ case 1: // PRI1 = 0, PRI0 = 1
+ m_scroll_tmap[1]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_ALL_CATEGORIES | TILEMAP_DRAW_OPAQUE);
+ m_scroll_tmap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_ALL_CATEGORIES, TWIN16_BG_OVER_SPRITES);
+ break;
+ case 2: // PRI1 = 1, PRI0 = 0
+ m_scroll_tmap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_ALL_CATEGORIES | TILEMAP_DRAW_OPAQUE);
+ m_scroll_tmap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_ALL_CATEGORIES, TWIN16_BG_NO_SHADOW);
+ m_scroll_tmap[1]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_ALL_CATEGORIES);
+ break;
+ case 3: // PRI1 = 1, PRI0 = 1
+ m_scroll_tmap[0]->draw(screen, bitmap, cliprect, TILEMAP_DRAW_ALL_CATEGORIES | TILEMAP_DRAW_OPAQUE);
+ m_scroll_tmap[1]->draw(screen, bitmap, cliprect, 0);
+ m_scroll_tmap[1]->draw(screen, bitmap, cliprect, 1, TWIN16_BG_OVER_SPRITES | TWIN16_BG_NO_SHADOW);
+ break;
+ }
draw_sprites( screen, bitmap );
diff --git a/src/mame/video/tx1.c b/src/mame/video/tx1.c
index 16addf6519e..adf459ff656 100644
--- a/src/mame/video/tx1.c
+++ b/src/mame/video/tx1.c
@@ -1438,8 +1438,7 @@ void tx1_state::buggyboy_draw_char(UINT8 *bitmap, bool wide)
***************************************************************************/
void tx1_state::buggyboy_get_roadpix(int screen, int ls161, UINT8 rva0_6, UINT8 sld, UINT32 *_rorev,
- UINT8 *rc0, UINT8 *rc1, UINT8 *rc2, UINT8 *rc3,
- const UINT8 *rom, const UINT8 *prom0, const UINT8 *prom1, const UINT8 *prom2)
+ UINT8 *rc0, UINT8 *rc1, UINT8 *rc2, UINT8 *rc3)
{
/* Counter Q10-7 are added to 384 */
UINT16 ls283_159 = (ls161 & 0x780) + 128 + (256 * screen);
@@ -1449,6 +1448,12 @@ void tx1_state::buggyboy_get_roadpix(int screen, int ls161, UINT8 rva0_6, UINT8
UINT8 d0 = 0;
UINT8 d1 = 0;
+ /* ROM/PROM lookup tables */
+ const UINT8 *rom = memregion("road")->base();
+ const UINT8 *prom0 = rom + 0x4000;
+ const UINT8 *prom1 = rom + 0x4200;
+ const UINT8 *prom2 = rom + 0x4400;
+
/* Latch road reverse bit */
*_rorev = !( (rom_en && rom_flip) || (!rom_en && (ls161 & 0x4000)) );
@@ -1539,11 +1544,7 @@ void tx1_state::buggyboy_draw_road(UINT8 *bitmap)
/* ROM/PROM lookup tables */
const UINT8 *rcols = (UINT8*)(memregion("proms")->base() + 0x1500);
- const UINT8 *rom = memregion("road")->base();
- const UINT8 *prom0 = rom + 0x4000;
- const UINT8 *prom1 = rom + 0x4200;
- const UINT8 *prom2 = rom + 0x4400;
- const UINT8 *vprom = rom + 0x4600;
+ const UINT8 *vprom = memregion("road")->base() + 0x4600;
/* Extract constant values */
tcmd = ((vregs.scol & 0xc000) >> 12) | ((vregs.scol & 0x00c0) >> 6);
@@ -1667,9 +1668,9 @@ void tx1_state::buggyboy_draw_road(UINT8 *bitmap)
/* Have we crossed a road gfx strip boundary? */
if (ls161 & 7)
{
- buggyboy_get_roadpix(0, ls161, rva0_6, sld, &_rorevls, &rc0[0], &rc1[0], &rc2[0], &rc3[0], rom, prom0, prom1, prom2);
- buggyboy_get_roadpix(1, ls161, rva0_6, sld, &_rorevcs, &rc0[1], &rc1[1], &rc2[1], &rc3[1], rom, prom0, prom1, prom2);
- buggyboy_get_roadpix(2, ls161, rva0_6, sld, &_rorevrs, &rc0[2], &rc1[2], &rc2[2], &rc3[2], rom, prom0, prom1, prom2);
+ buggyboy_get_roadpix(0, ls161, rva0_6, sld, &_rorevls, &rc0[0], &rc1[0], &rc2[0], &rc3[0]);
+ buggyboy_get_roadpix(1, ls161, rva0_6, sld, &_rorevcs, &rc0[1], &rc1[1], &rc2[1], &rc3[1]);
+ buggyboy_get_roadpix(2, ls161, rva0_6, sld, &_rorevrs, &rc0[2], &rc1[2], &rc2[2], &rc3[2]);
}
/* We can evaluate some of the pixel logic outside of the x-loop */
@@ -1749,9 +1750,9 @@ void tx1_state::buggyboy_draw_road(UINT8 *bitmap)
/* Load in a new road gfx strip? */
if (!(ls161 & 7))
{
- buggyboy_get_roadpix(0, ls161, rva0_6, sld, &_rorevls, &rc0[0], &rc1[0], &rc2[0], &rc3[0], rom, prom0, prom1, prom2);
- buggyboy_get_roadpix(1, ls161, rva0_6, sld, &_rorevcs, &rc0[1], &rc1[1], &rc2[1], &rc3[1], rom, prom0, prom1, prom2);
- buggyboy_get_roadpix(2, ls161, rva0_6, sld, &_rorevrs, &rc0[2], &rc1[2], &rc2[2], &rc3[2], rom, prom0, prom1, prom2);
+ buggyboy_get_roadpix(0, ls161, rva0_6, sld, &_rorevls, &rc0[0], &rc1[0], &rc2[0], &rc3[0]);
+ buggyboy_get_roadpix(1, ls161, rva0_6, sld, &_rorevcs, &rc0[1], &rc1[1], &rc2[1], &rc3[1]);
+ buggyboy_get_roadpix(2, ls161, rva0_6, sld, &_rorevrs, &rc0[2], &rc1[2], &rc2[2], &rc3[2]);
}
/* Road camber/banking */
@@ -2170,11 +2171,7 @@ void tx1_state::buggybjr_draw_road(UINT8 *bitmap)
/* ROM/PROM lookup tables */
const UINT8 *rcols = (UINT8*)(memregion("proms")->base() + 0x1500);
- const UINT8 *rom = memregion("road")->base();
- const UINT8 *prom0 = rom + 0x4000;
- const UINT8 *prom1 = rom + 0x4200;
- const UINT8 *prom2 = rom + 0x4400;
- const UINT8 *vprom = rom + 0x4600;
+ const UINT8 *vprom = memregion("road")->base() + 0x4600;
/* Extract constant values */
tcmd = ((vregs.scol & 0xc000) >> 12) | ((vregs.scol & 0x00c0) >> 6);
@@ -2296,7 +2293,7 @@ void tx1_state::buggybjr_draw_road(UINT8 *bitmap)
/* Have we crossed a road gfx strip boundary? */
if (ls161 & 7)
- buggyboy_get_roadpix(1, ls161, rva0_6, sld, &_rorevcs, &rc0, &rc1, &rc2, &rc3, rom, prom0, prom1, prom2);
+ buggyboy_get_roadpix(1, ls161, rva0_6, sld, &_rorevcs, &rc0, &rc1, &rc2, &rc3);
for (x = 0; x < 256; ++x)
{
@@ -2331,7 +2328,7 @@ void tx1_state::buggybjr_draw_road(UINT8 *bitmap)
/* Load in a new road gfx strip? */
if (!(ls161 & 7))
- buggyboy_get_roadpix(1, ls161, rva0_6, sld, &_rorevcs, &rc0, &rc1, &rc2, &rc3, rom, prom0, prom1, prom2);
+ buggyboy_get_roadpix(1, ls161, rva0_6, sld, &_rorevcs, &rc0, &rc1, &rc2, &rc3);
/* Road camber */
if (vregs.bank_mode == 0)
diff --git a/src/mess/drivers/ace.c b/src/mess/drivers/ace.c
index 249e243ad7e..5c0c70878aa 100644
--- a/src/mess/drivers/ace.c
+++ b/src/mess/drivers/ace.c
@@ -711,7 +711,7 @@ static MACHINE_CONFIG_START( ace, ace_state )
MCFG_Z80PIO_OUT_PA_CB(WRITE8(ace_state, pio_pa_w))
MCFG_Z80PIO_OUT_PB_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
// internal ram
diff --git a/src/mess/drivers/amiga.c b/src/mess/drivers/amiga.c
index a9fa7b52b5c..df51564a2d4 100644
--- a/src/mess/drivers/amiga.c
+++ b/src/mess/drivers/amiga.c
@@ -1343,7 +1343,7 @@ static MACHINE_CONFIG_START( amiga_base, amiga_state )
MCFG_RS232_CTS_HANDLER(WRITELINE(amiga_state, rs232_cts_w))
// centronics
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(amiga_state, centronics_ack_w))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(amiga_state, centronics_busy_w))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(amiga_state, centronics_perror_w))
diff --git a/src/mess/drivers/amstrad.c b/src/mess/drivers/amstrad.c
index 22dbc156fb7..ba334acdea5 100644
--- a/src/mess/drivers/amstrad.c
+++ b/src/mess/drivers/amstrad.c
@@ -804,6 +804,7 @@ SLOT_INTERFACE_START(cpc_exp_cards)
SLOT_INTERFACE("amsrs232", CPC_RS232_AMS)
SLOT_INTERFACE("sf2", CPC_SYMBIFACE2)
SLOT_INTERFACE("amdrum", CPC_AMDRUM)
+ SLOT_INTERFACE("playcity", CPC_PLAYCITY)
SLOT_INTERFACE_END
SLOT_INTERFACE_START(cpcplus_exp_cards)
@@ -815,9 +816,10 @@ SLOT_INTERFACE_START(cpcplus_exp_cards)
SLOT_INTERFACE("amsrs232", CPC_RS232_AMS)
SLOT_INTERFACE("sf2", CPC_SYMBIFACE2)
SLOT_INTERFACE("amdrum", CPC_AMDRUM)
+ SLOT_INTERFACE("playcity", CPC_PLAYCITY)
SLOT_INTERFACE_END
-SLOT_INTERFACE_START(amstrad_printers)
+SLOT_INTERFACE_START(amstrad_centronics_devices)
SLOT_INTERFACE("pl80", COMX_PL80)
SLOT_INTERFACE("ex800", EPSON_EX800)
SLOT_INTERFACE("lx800", EPSON_LX800)
@@ -862,6 +864,7 @@ static MACHINE_CONFIG_START( amstrad_nofdc, amstrad_state )
MCFG_MC6845_OUT_DE_CB(WRITELINE(amstrad_state, amstrad_de_changed))
MCFG_MC6845_OUT_HSYNC_CB(WRITELINE(amstrad_state, amstrad_hsync_changed))
MCFG_MC6845_OUT_VSYNC_CB(WRITELINE(amstrad_state, amstrad_vsync_changed))
+ MCFG_MC6845_OUT_CUR_CB(DEVWRITELINE("exp", cpc_expansion_slot_device, cursor_w))
MCFG_VIDEO_START_OVERRIDE(amstrad_state,amstrad)
@@ -874,7 +877,7 @@ static MACHINE_CONFIG_START( amstrad_nofdc, amstrad_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", amstrad_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", amstrad_centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(amstrad_state, write_centronics_busy))
/* snapshot */
@@ -969,7 +972,7 @@ static MACHINE_CONFIG_START( cpcplus, amstrad_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(amstrad_state, write_centronics_busy))
/* snapshot */
diff --git a/src/mess/drivers/apf.c b/src/mess/drivers/apf.c
index 1ad3d9c15eb..11cf134a2b7 100644
--- a/src/mess/drivers/apf.c
+++ b/src/mess/drivers/apf.c
@@ -259,10 +259,6 @@ void apf_state::machine_reset()
m_ca2 = 0;
// apfimag only
- if (m_cass)
- m_cass->change_state(CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
-
- // apfimag only
if (m_ram)
{
/* if we specified 8K of RAM, delete the extended RAM */
@@ -554,7 +550,7 @@ static MACHINE_CONFIG_START( apfm1000, apf_state )
MCFG_APF_CARTRIDGE_ADD("cartslot", apf_cart, NULL)
/* software lists */
- MCFG_SOFTWARE_LIST_ADD("cart_list","apfm1000")
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "apfm1000")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( apfimag, apfm1000 )
@@ -574,13 +570,15 @@ static MACHINE_CONFIG_DERIVED( apfimag, apfm1000 )
MCFG_PIA_READPB_HANDLER(READ8(apf_state, pia1_portb_r))
MCFG_PIA_WRITEPB_HANDLER(WRITE8(apf_state, pia1_portb_w))
- MCFG_CASSETTE_ADD( "cassette" )
+ MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_FORMATS(apf_cassette_formats)
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
+ MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_DISABLED)
MCFG_FD1771x_ADD("fdc", 1000000) // guess
MCFG_FLOPPY_DRIVE_ADD("fdc:0", apf_floppies, "525dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("fdc:1", apf_floppies, "525dd", floppy_image_device::default_floppy_formats)
+
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "apfimag_cass")
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/applix.c b/src/mess/drivers/applix.c
index c6a130a046f..cffa6cc09a2 100644
--- a/src/mess/drivers/applix.c
+++ b/src/mess/drivers/applix.c
@@ -877,7 +877,7 @@ static MACHINE_CONFIG_START( applix, applix_state )
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(applix_state, applix_pb_w))
MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m68000_device, write_irq2))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522", via6522_device, write_ca1))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("via6522", via6522_device, write_pa0))
diff --git a/src/mess/drivers/apricot.c b/src/mess/drivers/apricot.c
index 4d3521d11db..0164e89d099 100644
--- a/src/mess/drivers/apricot.c
+++ b/src/mess/drivers/apricot.c
@@ -384,7 +384,7 @@ static MACHINE_CONFIG_START( apricot, apricot_state )
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("ic15", z80dart_device, ctsa_w))
// centronics printer
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_DATA_INPUT_BUFFER("cent_data_in")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("ic15", z80dart_device, ctsb_w))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("ic15", z80dart_device, dcdb_w))
diff --git a/src/mess/drivers/apricotf.c b/src/mess/drivers/apricotf.c
index adbaf8d1cd4..5d12f81b086 100644
--- a/src/mess/drivers/apricotf.c
+++ b/src/mess/drivers/apricotf.c
@@ -294,7 +294,7 @@ static MACHINE_CONFIG_START( act_f1, f1_state )
MCFG_Z80CTC_ZC1_CB(WRITELINE(f1_state, ctc_z1_w))
MCFG_Z80CTC_ZC2_CB(WRITELINE(f1_state, ctc_z2_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE(Z80SIO2_TAG, z80dart_device, ctsa_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/apricotp.c b/src/mess/drivers/apricotp.c
index f9f5a78f4b2..7069c7340e3 100644
--- a/src/mess/drivers/apricotp.c
+++ b/src/mess/drivers/apricotp.c
@@ -534,7 +534,7 @@ static MACHINE_CONFIG_START( fp, fp_state )
MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":0", fp_floppies, "35dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":1", fp_floppies, NULL, floppy_image_device::default_floppy_formats)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(fp_state, write_centronics_busy))
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(fp_state, write_centronics_select))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(fp_state, write_centronics_fault))
diff --git a/src/mess/drivers/astrocde.c b/src/mess/drivers/astrocde.c
index 9912514a583..5058efc65c1 100644
--- a/src/mess/drivers/astrocde.c
+++ b/src/mess/drivers/astrocde.c
@@ -14,23 +14,24 @@
#include "sound/astrocde.h"
#include "bus/astrocde/slot.h"
#include "bus/astrocde/rom.h"
+#include "bus/astrocde/exp.h"
+#include "bus/astrocde/ram.h"
class astrocde_mess_state : public astrocde_state
{
public:
astrocde_mess_state(const machine_config &mconfig, device_type type, const char *tag)
: astrocde_state(mconfig, type, tag),
- m_cart(*this, "cartslot")
+ m_cart(*this, "cartslot"),
+ m_exp(*this, "exp")
{ }
required_device<astrocade_cart_slot_device> m_cart;
- void get_ram_expansion_settings(int &ram_expansion_installed, int &write_protect_on, int &expansion_ram_start, int &expansion_ram_end, int &shadow_ram_end);
+ required_device<astrocade_exp_device> m_exp;
DECLARE_MACHINE_START(astrocde);
- DECLARE_MACHINE_RESET(astrocde);
- DECLARE_INPUT_CHANGED_MEMBER(set_write_protect);
};
-/*************************************
+/*********************************************************************************
*
* Memory maps
*
@@ -42,58 +43,13 @@ public:
* by an extended BASIC program. Bally and Astrocade BASIC can access from
* $5000 to $7FFF if available.
*
- * RAM Expansions
- *
- * Several third party RAM expansions have been made for the Astrocade. These
- * allow access to various ranges of the expansion memory ($5000 to $FFFF).
- * A RAM expansion is required to use extended BASIC programs like Blue RAM BASIC
- * and VIPERSoft BASIC. All of the expansions also have a RAM protect switch, which
- * can be flipped at any time to make the RAM act like ROM. Extended BASIC
- * programs need access to the RAM and won't work with RAM protect enabled, but
- * this can be useful with Bally and Astrocade BASIC. They also have a range switch
- * (not implemented). The default position is 6K, but it can be switched to
- * 2K. This means that the expanded memory starting at $6000 will instead be
- * mapped to the cartridge memory starting at $2000. So it would be possible to
- * load a cartridge program from tape into the expansion memory, then flip the range
- * switch and run it as a cartridge. This is useful for cartridge development.
- *
- * NOTE: If you have any trouble running cartridges with a RAM expansion installed, hit reset.
- *
- * Blue RAM -- available in 4K, 16K, and 32K. These also use an INS8154 chip,
- * (not yet implemented) which has an additional $80 bytes of RAM mapped
- * immediately after the end of the expansion address space. This memory
- * can't be write protected. The INS8154 has I/O features needed for loading
- * tape programs into Blue RAM BASIC, as well as running the Blue RAM Utility cart.
- * 4K: $6000 to $6FFF (can't run VIPERSoft BASIC, because this program needs memory
- * past this range)
- * 16K: $6000 to $9FFF
- * 32K: $6000 to $DFFF
- *
- * VIPER System 1 -- This is available in 16K only. It also includes a keyboard (not implemented).
- * 16K: $6000 to $9FFF
- *
- * Lil' WHITE RAM -- This is available in 32K only. Attempts to read and write
- * to memory outside of its address range ($D000 to $FFFF) are mapped to the expansion
- * memory $5000 to $7FFF. The current implementation won't allow the shadow RAM area
- * to be accessed when RAM protect is on, but there is no known software that will
- * access the upper range of the expansion RAM when RAM protect is enabled.
- * 32K: $5000 to $CFFF
- *
- * R&L 64K RAM Board -- This is a highly configurable kit. RAM can be installed in
- * 2K increments. So, the entire 44K expansion memory can be filled. It is also
- * possible to override the rest of the memory map with RAM (not implemented).
- * There are 32 switches allowing users to activate and deactivate each 2K block (not implemented).
- * RAM write protection can be implemented in three ranges through jumpers or by
- * installing switches. The ranges are $0000 to $0FFF (first 4K), $0000 to $3FFF (first 16K),
- * and $0000 to $FFFF (all 64K). The current implementation is for 44K expansion memory mapped from
- * $5000 to $FFFF, with only a single write protect covering this entire range.
- *
- *************************************/
+ *********************************************************************************/
static ADDRESS_MAP_START( astrocade_mem, AS_PROGRAM, 8, astrocde_mess_state )
AM_RANGE(0x0000, 0x0fff) AM_ROM AM_WRITE(astrocade_funcgen_w)
AM_RANGE(0x1000, 0x3fff) AM_ROM /* Star Fortress writes in here?? */
AM_RANGE(0x4000, 0x4fff) AM_RAM AM_SHARE("videoram") /* ASG */
+ //AM_RANGE(0x5000, 0xffff) AM_DEVREADWRITE("exp", astrocade_exp_device, read, write)
ADDRESS_MAP_END
@@ -101,29 +57,6 @@ static ADDRESS_MAP_START( astrocade_io, AS_IO, 8, astrocde_mess_state )
AM_RANGE(0x00, 0x1f) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(astrocade_data_chip_register_r, astrocade_data_chip_register_w)
ADDRESS_MAP_END
-INPUT_CHANGED_MEMBER(astrocde_mess_state::set_write_protect) // run when RAM expansion write protect switch is changed
-{
- int ram_expansion_installed = 0, write_protect_on = 0, expansion_ram_start = 0, expansion_ram_end = 0, shadow_ram_end = 0;
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *expram = machine().device<ram_device>("ram_tag")->pointer();
-
- get_ram_expansion_settings(ram_expansion_installed, write_protect_on, expansion_ram_start, expansion_ram_end, shadow_ram_end); // passing by reference
-
- if (ram_expansion_installed == 1)
- {
- if (write_protect_on == 0) // write protect off, so install memory normally
- {
- space.install_ram(expansion_ram_start, expansion_ram_end, expram);
- if (shadow_ram_end > expansion_ram_end)
- space.install_ram(expansion_ram_end + 1, shadow_ram_end, expram);
- }
- else // write protect on, so make memory read only
- {
- space.nop_write(expansion_ram_start, expansion_ram_end);
- }
- }
-}
-
/*************************************
*
* Input ports
@@ -227,21 +160,6 @@ static INPUT_PORTS_START( astrocde )
PORT_START("P4_KNOB")
PORT_BIT(0xff, 0x00, IPT_PADDLE) PORT_INVERT PORT_SENSITIVITY(85) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_MINMAX(0,255) PORT_CODE_DEC(KEYCODE_Y) PORT_CODE_INC(KEYCODE_U) PORT_PLAYER(4)
-
- PORT_START("CFG") /* machine config */
- PORT_DIPNAME( 0x3f, 0x00, "RAM Expansion")
- PORT_DIPSETTING( 0x00, "No RAM Expansion")
- PORT_DIPSETTING( 0x01, "16KB Viper System 1 RAM Expansion")
- PORT_DIPSETTING( 0x02, "32KB Lil' WHITE RAM Expansion")
- PORT_DIPSETTING( 0x04, "R&L 64K RAM Board (44K installed)")
- PORT_DIPSETTING( 0x08, "4KB Blue RAM Expansion")
- PORT_DIPSETTING( 0x10, "16KB Blue RAM Expansion")
- PORT_DIPSETTING( 0x20, "32KB Blue RAM Expansion")
-
- PORT_START("PROTECT") /* Write protect RAM */
- PORT_DIPNAME( 0x01, 0x00, "Write Protect RAM") PORT_CHANGED_MEMBER(DEVICE_SELF, astrocde_mess_state, set_write_protect, 0)
- PORT_DIPSETTING( 0x00, "Write Protect Off")
- PORT_DIPSETTING( 0x01, "Write Protect On")
INPUT_PORTS_END
@@ -257,6 +175,15 @@ static SLOT_INTERFACE_START(astrocade_cart)
SLOT_INTERFACE_INTERNAL("rom_512k", ASTROCADE_ROM_512K)
SLOT_INTERFACE_END
+static SLOT_INTERFACE_START(astrocade_exp)
+ SLOT_INTERFACE("blue_ram_4k", ASTROCADE_BLUERAM_4K)
+ SLOT_INTERFACE("blue_ram_16k", ASTROCADE_BLUERAM_16K)
+ SLOT_INTERFACE("blue_ram_32k", ASTROCADE_BLUERAM_32K)
+ SLOT_INTERFACE("viper_sys1", ASTROCADE_VIPER_SYS1)
+ SLOT_INTERFACE("lil_white_ram", ASTROCADE_WHITERAM)
+ SLOT_INTERFACE("rl64_ram", ASTROCADE_RL64RAM)
+SLOT_INTERFACE_END
+
static MACHINE_CONFIG_START( astrocde, astrocde_mess_state )
/* basic machine hardware */
@@ -265,7 +192,6 @@ static MACHINE_CONFIG_START( astrocde, astrocde_mess_state )
MCFG_CPU_IO_MAP(astrocade_io)
MCFG_MACHINE_START_OVERRIDE(astrocde_mess_state, astrocde)
- MCFG_MACHINE_RESET_OVERRIDE(astrocde_mess_state, astrocde)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -281,9 +207,8 @@ static MACHINE_CONFIG_START( astrocde, astrocde_mess_state )
MCFG_SOUND_ADD("astrocade1", ASTROCADE, ASTROCADE_CLOCK/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
- /* optional expansion ram (installed in machine_reset)*/
- MCFG_RAM_ADD("ram_tag")
- MCFG_RAM_DEFAULT_SIZE("32k")
+ /* expansion port */
+ MCFG_ASTROCADE_EXPANSION_SLOT_ADD("exp", astrocade_exp, NULL)
/* cartridge */
MCFG_ASTROCADE_CARTRIDGE_ADD("cartslot", astrocade_cart, NULL)
@@ -329,82 +254,13 @@ MACHINE_START_MEMBER(astrocde_mess_state, astrocde)
{
if (m_cart->exists())
m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x3fff, read8_delegate(FUNC(astrocade_cart_slot_device::read_rom),(astrocade_cart_slot_device*)m_cart));
-}
-MACHINE_RESET_MEMBER(astrocde_mess_state, astrocde)
-{
- int ram_expansion_installed = 0, write_protect_on = 0, expansion_ram_start = 0, expansion_ram_end = 0, shadow_ram_end = 0;
- address_space &space = m_maincpu->space(AS_PROGRAM);
- UINT8 *expram = machine().device<ram_device>("ram_tag")->pointer();
- space.unmap_readwrite(0x5000, 0xffff); // unmap any previously installed expansion RAM
-
- get_ram_expansion_settings(ram_expansion_installed, write_protect_on, expansion_ram_start, expansion_ram_end, shadow_ram_end); // passing by reference
-
- if (ram_expansion_installed == 1)
- {
- if (write_protect_on == 0) // write protect off, so install memory normally
- {
- space.install_ram(expansion_ram_start, expansion_ram_end, expram);
- if (shadow_ram_end > expansion_ram_end)
- space.install_ram(expansion_ram_end + 1, shadow_ram_end, expram);
- }
- else // write protect on, so make memory read only
- {
- space.nop_write(expansion_ram_start, expansion_ram_end);
- }
- }
+ // if no RAM is mounted and the handlers are installed, the system starts with garbage on screen and a RESET is necessary
+ // thus, install RAM only if an expansion is mounted
+ if (m_exp->get_card_mounted())
+ m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x5000, 0xffff, read8_delegate(FUNC(astrocade_exp_device::read),(astrocade_exp_device*)m_exp), write8_delegate(FUNC(astrocade_exp_device::write),(astrocade_exp_device*)m_exp));
}
-void astrocde_mess_state::get_ram_expansion_settings(int &ram_expansion_installed, int &write_protect_on, int &expansion_ram_start, int &expansion_ram_end, int &shadow_ram_end)
-{
- if (ioport("PROTECT")->read() == 0x01)
- write_protect_on = 1;
- else
- write_protect_on = 0;
-
- ram_expansion_installed = 1;
-
- switch(ioport("CFG")->read()) // check RAM expansion configuration and set address ranges
- {
- case 0x00: // No RAM Expansion
- ram_expansion_installed = 0;
- break;
- case 0x01: // 16KB Viper System 1 RAM Expansion
- expansion_ram_start = 0x6000;
- expansion_ram_end = 0x9fff;
- shadow_ram_end = 0;
- break;
- case 0x02: // "32KB Lil' WHITE RAM Expansion
- expansion_ram_start = 0x5000;
- expansion_ram_end = 0xcfff;
- shadow_ram_end = 0xffff;
- break;
- case 0x04: // R&L 64K RAM Board (44KB installed)
- expansion_ram_start = 0x5000;
- expansion_ram_end = 0xffff;
- shadow_ram_end = 0;
- break;
- case 0x08: // 4KB Blue RAM Expansion
- expansion_ram_start = 0x6000;
- expansion_ram_end = 0x6fff;
- shadow_ram_end = 0;
- break;
- case 0x10: // 16KB Blue RAM Expansion
- expansion_ram_start = 0x6000;
- expansion_ram_end = 0x9fff;
- shadow_ram_end = 0;
- break;
- case 0x20: // 32KB Blue RAM Expansion
- expansion_ram_start = 0x6000;
- expansion_ram_end = 0xdfff;
- shadow_ram_end = 0;
- break;
- default:
- break;
- }
-}
-
-
/*************************************
*
* Driver definitions
diff --git a/src/mess/drivers/atarist.c b/src/mess/drivers/atarist.c
index 86ac1af97da..e09345ef7c9 100644
--- a/src/mess/drivers/atarist.c
+++ b/src/mess/drivers/atarist.c
@@ -2106,7 +2106,7 @@ static MACHINE_CONFIG_START( st, st_state )
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":0", atari_floppies, "35dd", st_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":1", atari_floppies, 0, st_state::floppy_formats)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE(MC68901_TAG, mc68901_device, i0_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -2197,7 +2197,7 @@ static MACHINE_CONFIG_START( megast, megast_state )
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":0", atari_floppies, "35dd", st_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":1", atari_floppies, 0, st_state::floppy_formats)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE(MC68901_TAG, mc68901_device, i0_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -2295,7 +2295,7 @@ static MACHINE_CONFIG_START( ste, ste_state )
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":0", atari_floppies, "35dd", st_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":1", atari_floppies, 0, st_state::floppy_formats)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE(MC68901_TAG, mc68901_device, i0_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -2408,7 +2408,7 @@ static MACHINE_CONFIG_START( stbook, stbook_state )
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":0", atari_floppies, "35dd", 0, st_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG ":1", atari_floppies, 0, 0, st_state::floppy_formats)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE(MC68901_TAG, mc68901_device, i0_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/atom.c b/src/mess/drivers/atom.c
index c3d6e1cc723..e09142a305b 100644
--- a/src/mess/drivers/atom.c
+++ b/src/mess/drivers/atom.c
@@ -725,7 +725,7 @@ static MACHINE_CONFIG_START( atom, atom_state )
MCFG_I8271_FLOPPIES(FLOPPY_0, FLOPPY_1)
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(atom_floppy_interface)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_ca1))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_pa7))
@@ -822,7 +822,7 @@ static MACHINE_CONFIG_START( atombb, atom_state )
MCFG_I8255_IN_PORTC_CB(READ8(atom_state, ppi_pc_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(atom_state, ppi_pc_w))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_ca1))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_pa7))
diff --git a/src/mess/drivers/bbc.c b/src/mess/drivers/bbc.c
index 81218455d69..e77fb48c2f3 100644
--- a/src/mess/drivers/bbc.c
+++ b/src/mess/drivers/bbc.c
@@ -748,7 +748,7 @@ static MACHINE_CONFIG_DERIVED( bbcb, bbca )
MCFG_UPD7002_EOC_CB(bbc_state, BBC_uPD7002_EOC)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -810,7 +810,7 @@ static MACHINE_CONFIG_DERIVED( bbcb_us, bbca )
MCFG_UPD7002_EOC_CB(bbc_state, BBC_uPD7002_EOC)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -919,7 +919,7 @@ static MACHINE_CONFIG_START( bbcm, bbc_state )
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522_1", via6522_device, write_ca1)) MCFG_DEVCB_INVERT /* ack seems to be inverted? */
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/bebox.c b/src/mess/drivers/bebox.c
index d118016a664..a7567a8cfc4 100644
--- a/src/mess/drivers/bebox.c
+++ b/src/mess/drivers/bebox.c
@@ -12,17 +12,17 @@
/* Components */
#include "video/pc_vga.h"
-#include "bus/pci/cirrus.h"
+#include "bus/lpci/cirrus.h"
#include "cpu/powerpc/ppc.h"
#include "sound/3812intf.h"
#include "machine/ins8250.h"
#include "machine/pic8259.h"
#include "machine/mc146818.h"
-#include "bus/pci/pci.h"
+#include "bus/lpci/pci.h"
#include "machine/am9517a.h"
#include "machine/pckeybrd.h"
#include "machine/idectrl.h"
-#include "bus/pci/mpc105.h"
+#include "bus/lpci/mpc105.h"
#include "machine/intelfsh.h"
#include "bus/scsi/scsi.h"
#include "machine/53c810.h"
diff --git a/src/mess/drivers/bullet.c b/src/mess/drivers/bullet.c
index a940eaaa8d4..714b071b135 100644
--- a/src/mess/drivers/bullet.c
+++ b/src/mess/drivers/bullet.c
@@ -1149,7 +1149,7 @@ static MACHINE_CONFIG_START( bullet, bullet_state )
MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":6", bullet_8_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":7", bullet_8_floppies, NULL, floppy_image_device::default_floppy_formats)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(bullet_state, write_centronics_busy))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(bullet_state, write_centronics_perror))
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(bullet_state, write_centronics_select))
@@ -1233,7 +1233,7 @@ static MACHINE_CONFIG_START( bulletf, bulletf_state )
MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":8", bullet_35_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(MB8877_TAG":9", bullet_35_floppies, NULL, floppy_image_device::default_floppy_formats)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(bullet_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/bw12.c b/src/mess/drivers/bw12.c
index cb722ce969f..dc3de2ac214 100644
--- a/src/mess/drivers/bw12.c
+++ b/src/mess/drivers/bw12.c
@@ -613,7 +613,7 @@ static MACHINE_CONFIG_START( common, bw12_state )
MCFG_RS232_CTS_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, ctsb_w))
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(PIA6821_TAG, pia6821_device, ca1_w))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(bw12_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(bw12_state, write_centronics_fault))
diff --git a/src/mess/drivers/bw2.c b/src/mess/drivers/bw2.c
index 3ba2a7b951c..21565d88333 100644
--- a/src/mess/drivers/bw2.c
+++ b/src/mess/drivers/bw2.c
@@ -618,7 +618,7 @@ static MACHINE_CONFIG_START( bw2, bw2_state )
MCFG_DEVICE_ADDRESS_MAP(AS_0, lcdc_map)
MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(bw2_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/cat.c b/src/mess/drivers/cat.c
index 160225af1d0..63486ac2788 100644
--- a/src/mess/drivers/cat.c
+++ b/src/mess/drivers/cat.c
@@ -1244,7 +1244,7 @@ static MACHINE_CONFIG_START( cat, cat_state )
MCFG_MC68681_B_TX_CALLBACK(WRITELINE(cat_state, cat_duart_txb))
MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(cat_state, cat_duart_output))
- MCFG_CENTRONICS_ADD("ctx", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("ctx", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(cat_state, prn_ack_ff))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("duartn68681", mc68681_device, ip4_w)) MCFG_DEVCB_XOR(1)
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("ctx_data_out", "ctx")
diff --git a/src/mess/drivers/clcd.c b/src/mess/drivers/clcd.c
index a75f9e571db..e25c705685b 100644
--- a/src/mess/drivers/clcd.c
+++ b/src/mess/drivers/clcd.c
@@ -767,7 +767,7 @@ static MACHINE_CONFIG_START(clcd, clcd_state)
MCFG_RS232_DSR_HANDLER(DEVWRITELINE("acia", mos6551_device, write_dsr))
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("via1", via6522_device, write_pb4))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, NULL)
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, NULL)
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("via1", via6522_device, write_pb6)) MCFG_DEVCB_XOR(1)
MCFG_DEVICE_ADD("bank1", ADDRESS_MAP_BANK, 0)
diff --git a/src/mess/drivers/compis.c b/src/mess/drivers/compis.c
index a69b7398f80..2b9d9d747ac 100644
--- a/src/mess/drivers/compis.c
+++ b/src/mess/drivers/compis.c
@@ -706,7 +706,7 @@ static MACHINE_CONFIG_START( compis, compis_state )
MCFG_RS232_DCD_HANDLER(DEVWRITELINE(I8274_TAG, z80dart_device, dcdb_w))
MCFG_RS232_CTS_HANDLER(DEVWRITELINE(I8274_TAG, z80dart_device, ctsb_w))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(compis_state, write_centronics_busy))
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(compis_state, write_centronics_select))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/crvision.c b/src/mess/drivers/crvision.c
index c984a021d63..f1d62f0ed2f 100644
--- a/src/mess/drivers/crvision.c
+++ b/src/mess/drivers/crvision.c
@@ -771,7 +771,7 @@ static MACHINE_CONFIG_START( creativision, crvision_state )
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit7))
MCFG_DEVICE_ADD("cent_status_in", INPUT_BUFFER, 0)
@@ -850,7 +850,7 @@ static MACHINE_CONFIG_START( lasr2001, laser2001_state )
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(laser2001_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/dmv.c b/src/mess/drivers/dmv.c
index 935c0bf3002..a2da0033da1 100644
--- a/src/mess/drivers/dmv.c
+++ b/src/mess/drivers/dmv.c
@@ -25,6 +25,7 @@
#include "bus/dmv/k220.h"
#include "bus/dmv/k230.h"
#include "bus/dmv/k233.h"
+#include "bus/dmv/k803.h"
#include "bus/dmv/k806.h"
#include "bus/dmv/ram.h"
@@ -114,7 +115,17 @@ public:
DECLARE_READ8_MEMBER(exp_program_r);
DECLARE_WRITE8_MEMBER(exp_program_w);
DECLARE_WRITE_LINE_MEMBER(thold7_w);
- DECLARE_WRITE_LINE_MEMBER(busint_w);
+
+ void update_busint(int slot, int state);
+ DECLARE_WRITE_LINE_MEMBER(busint2_w) { update_busint(0, state); }
+ DECLARE_WRITE_LINE_MEMBER(busint2a_w) { update_busint(1, state); }
+ DECLARE_WRITE_LINE_MEMBER(busint3_w) { update_busint(2, state); }
+ DECLARE_WRITE_LINE_MEMBER(busint4_w) { update_busint(3, state); }
+ DECLARE_WRITE_LINE_MEMBER(busint5_w) { update_busint(4, state); }
+ DECLARE_WRITE_LINE_MEMBER(busint6_w) { update_busint(5, state); }
+ DECLARE_WRITE_LINE_MEMBER(busint7_w) { update_busint(6, state); }
+ DECLARE_WRITE_LINE_MEMBER(busint7a_w) { update_busint(7, state); }
+
DECLARE_FLOPPY_FORMATS( floppy_formats );
UINT8 program_read(address_space &space, int cas, offs_t offset);
@@ -146,6 +157,7 @@ public:
int m_dack3_line;
int m_sd_poll_state;
int m_floppy_motor;
+ int m_busint[8];
};
WRITE8_MEMBER(dmv_state::tc_set_w)
@@ -329,6 +341,7 @@ UPD7220_DRAW_TEXT_LINE_MEMBER( dmv_state::hgdc_draw_text )
static SLOT_INTERFACE_START( dmv_floppies )
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
+ SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
SLOT_INTERFACE_END
@@ -375,10 +388,21 @@ WRITE_LINE_MEMBER( dmv_state::thold7_w )
}
}
-WRITE_LINE_MEMBER( dmv_state::busint_w )
+void dmv_state::update_busint(int slot, int state)
{
- m_slot7a->irq2_w(state);
- m_slot7->irq2_w(state);
+ m_busint[slot] = state;
+
+ int new_state = CLEAR_LINE;
+ for (int i=0; i<8; i++)
+ if (m_busint[i] != CLEAR_LINE)
+ {
+ new_state = ASSERT_LINE;
+ break;
+ }
+
+ m_slot7a->irq2_w(new_state);
+ m_slot7->irq2_w(new_state);
+ m_maincpu->set_input_line(0, new_state);
}
void dmv_state::program_write(address_space &space, int cas, offs_t offset, UINT8 data)
@@ -505,6 +529,7 @@ void dmv_state::machine_reset()
m_switch16 = 0;
m_thold7 = 0;
m_dma_hrq = 0;
+ memset(m_busint, 0, sizeof(m_busint));
update_halt_line();
}
@@ -606,6 +631,7 @@ SLOT_INTERFACE_END
static SLOT_INTERFACE_START(dmv_slot2_6)
SLOT_INTERFACE("k233", DMV_K233) // K233 16K Shared RAM
+ SLOT_INTERFACE("k803", DMV_K803) // K803 RTC module
SLOT_INTERFACE("k806", DMV_K806) // K806 Mouse module
SLOT_INTERFACE_END
@@ -692,27 +718,33 @@ static MACHINE_CONFIG_START( dmv, dmv_state )
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot1, NULL, false)
MCFG_DEVICE_ADD("slot2", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot2_6, NULL, false)
+ MCFG_DMVCART_SLOT_OUT_INT_CB(WRITELINE(dmv_state, busint2_w))
MCFG_DEVICE_ADD("slot2a", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot2a, NULL, false)
+ MCFG_DMVCART_SLOT_OUT_INT_CB(WRITELINE(dmv_state, busint2a_w))
MCFG_DEVICE_ADD("slot3", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot2_6, NULL, false)
+ MCFG_DMVCART_SLOT_OUT_INT_CB(WRITELINE(dmv_state, busint3_w))
MCFG_DEVICE_ADD("slot4", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot2_6, NULL, false)
+ MCFG_DMVCART_SLOT_OUT_INT_CB(WRITELINE(dmv_state, busint4_w))
MCFG_DEVICE_ADD("slot5", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot2_6, NULL, false)
+ MCFG_DMVCART_SLOT_OUT_INT_CB(WRITELINE(dmv_state, busint5_w))
MCFG_DEVICE_ADD("slot6", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot2_6, NULL, false)
+ MCFG_DMVCART_SLOT_OUT_INT_CB(WRITELINE(dmv_state, busint6_w))
MCFG_DEVICE_ADD("slot7", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot7, NULL, false)
MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(READ8(dmv_state, exp_program_r), WRITE8(dmv_state, exp_program_w))
MCFG_DMVCART_SLOT_OUT_THOLD_CB(WRITELINE(dmv_state, thold7_w))
- MCFG_DMVCART_SLOT_OUT_IRQ_CB(WRITELINE(dmv_state, busint_w))
+ MCFG_DMVCART_SLOT_OUT_INT_CB(WRITELINE(dmv_state, busint7_w))
MCFG_DEVICE_ADD("slot7a", DMVCART_SLOT, 0)
MCFG_DEVICE_SLOT_INTERFACE(dmv_slot7a, "k230", false)
MCFG_DMVCART_SLOT_PROGRAM_READWRITE_CB(READ8(dmv_state, exp_program_r), WRITE8(dmv_state, exp_program_w))
MCFG_DMVCART_SLOT_OUT_THOLD_CB(WRITELINE(dmv_state, thold7_w))
- MCFG_DMVCART_SLOT_OUT_IRQ_CB(WRITELINE(dmv_state, busint_w))
+ MCFG_DMVCART_SLOT_OUT_INT_CB(WRITELINE(dmv_state, busint7a_w))
MCFG_SOFTWARE_LIST_ADD("flop_list", "dmv")
diff --git a/src/mess/drivers/dvk_ksm.c b/src/mess/drivers/dvk_ksm.c
new file mode 100644
index 00000000000..778cc6b6ba1
--- /dev/null
+++ b/src/mess/drivers/dvk_ksm.c
@@ -0,0 +1,416 @@
+/***************************************************************************
+
+ KSM (Kontroller Simvolnogo Monitora = Character Display Controller),
+ a single-board replacement for standalone 15IE-00-013 terminal (ie15.c)
+ in later-model DVK desktops.
+
+ MPI (Q-Bus clone) board, consumes only power from the bus.
+ Interfaces with MS7004 (DEC LK201 workalike) keyboard and monochrome CRT.
+
+ Hardware revisions (XXX verify everything):
+ - 7.102.076 -- has DIP switches, SRAM at 0x2000, model name "KSM"
+ - 7.102.228 -- no DIP switches, SRAM at 0x2100, model name "KSM-01"
+
+ Emulates a VT52 without copier (ESC Z response is ESC / M), with
+ Hold Screen mode and Graphics character set (but it is unique and
+ mapped to a different range -- 100..137).
+
+ F4 + 0..9 on numeric keypad = setup mode. 0 changes serial port speed,
+ 1..9 toggle one of mode bits:
+
+ 1 XON/XOFF 0: Off 1: On
+ 2 Character set 0: N0/N1 2: N2
+ 3 Auto LF 0: Off 1: On
+ 4 Auto repeat 0: On 1: Off
+ 5 Auto wraparound 0: On 1: Off
+ 6 Interpret controls 0: Interpret 1: Display
+ 7 Parity check 0: Off 1: On
+ 8 Parity bits 0: None 1: Even
+ 9 Stop bits
+
+ N0/N1 charset has regular ASCII in C0 page and Cyrillic in C1 page,
+ switching between them via SI/SO. N2 charset has uppercase Cyrillic
+ chars in place of lowercase Latin ones.
+
+ F1 toggles Hold Screen mode.
+ F9 resets terminal (clears memory).
+ F20 toggles on/off-line mode.
+
+ Terminfo description would be something like
+
+ksm|DVK KSM,
+ am, bw, dch1=\EP, ich1=\EQ,
+ acsc=hRiTjXkClJmFnNqUtEuPv\174wKxW.M\054Q\055S\053\136~_{@}Z0\177,
+ use=vt52,
+
+ To do:
+ - make Caps Lock work
+ - verify if pixel stretching is done by hw
+ - verify details of hw revisions
+ - baud rate selection (missing feature in bitbanger)
+
+****************************************************************************/
+
+#include "emu.h"
+
+#include "bus/rs232/rs232.h"
+#include "cpu/i8085/i8085.h"
+#include "machine/clock.h"
+#include "machine/i8251.h"
+#include "machine/i8255.h"
+#include "machine/ms7004.h"
+#include "machine/pic8259.h"
+
+#define SCREEN_PAGE (80*48)
+
+#define KSM_TOTAL_HORZ 1000
+#define KSM_DISP_HORZ 800
+#define KSM_HORZ_START 200
+
+#define KSM_TOTAL_VERT 28*11
+#define KSM_DISP_VERT 25*11
+#define KSM_VERT_START 2*11
+
+#define KSM_STATUSLINE_TOTAL 11
+#define KSM_STATUSLINE_VRAM 0xF8B0
+
+#define VERBOSE_DBG 0 /* general debug messages */
+
+#define DBG_LOG(N,M,A) \
+ do { \
+ if(VERBOSE_DBG>=N) \
+ { \
+ if( M ) \
+ logerror("%11.6f at %s: %-24s",machine().time().as_double(),machine().describe_context(),(char*)M ); \
+ logerror A; \
+ } \
+ } while (0)
+
+
+class ksm_state : public driver_device
+{
+public:
+ ksm_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_p_videoram(*this, "videoram"),
+ m_maincpu(*this, "maincpu"),
+ m_pic8259(*this, "pic8259"),
+ m_i8251line(*this, "i8251line"),
+ m_rs232(*this, "rs232"),
+ m_i8251kbd(*this, "i8251kbd"),
+ m_ms7004(*this, "ms7004"),
+ m_screen(*this, "screen")
+ { }
+
+ virtual void machine_reset();
+ virtual void video_start();
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ TIMER_DEVICE_CALLBACK_MEMBER( scanline_callback );
+
+ DECLARE_WRITE_LINE_MEMBER(write_keyboard_clock);
+ DECLARE_WRITE_LINE_MEMBER(write_line_clock);
+
+ DECLARE_WRITE8_MEMBER(ksm_ppi_porta_w);
+ DECLARE_WRITE8_MEMBER(ksm_ppi_portc_w);
+
+private:
+ UINT32 draw_scanline(UINT16 *p, UINT16 offset, UINT8 scanline);
+ rectangle m_tmpclip;
+ bitmap_ind16 m_tmpbmp;
+
+ const UINT8 *m_p_chargen;
+ struct {
+ UINT8 line;
+ UINT16 ptr;
+ } m_video;
+
+protected:
+ required_shared_ptr<UINT8> m_p_videoram;
+ required_device<cpu_device> m_maincpu;
+ required_device<pic8259_device> m_pic8259;
+ required_device<i8251_device> m_i8251line;
+ required_device<rs232_port_device> m_rs232;
+ required_device<i8251_device> m_i8251kbd;
+ required_device<ms7004_device> m_ms7004;
+ required_device<screen_device> m_screen;
+};
+
+static ADDRESS_MAP_START( ksm_mem, AS_PROGRAM, 8, ksm_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE (0x0000, 0x0fff) AM_ROM
+ AM_RANGE (0x2000, 0x21ff) AM_RAM
+ AM_RANGE (0xc000, 0xffff) AM_RAM AM_SHARE("videoram")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ksm_io, AS_IO, 8, ksm_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE (0x5e, 0x5f) AM_DEVREADWRITE("pic8259", pic8259_device, read, write)
+ AM_RANGE (0x6e, 0x6e) AM_DEVREADWRITE("i8251kbd", i8251_device, data_r, data_w)
+ AM_RANGE (0x6f, 0x6f) AM_DEVREADWRITE("i8251kbd", i8251_device, status_r, control_w)
+ AM_RANGE (0x76, 0x76) AM_DEVREADWRITE("i8251line", i8251_device, data_r, data_w)
+ AM_RANGE (0x77, 0x77) AM_DEVREADWRITE("i8251line", i8251_device, status_r, control_w)
+ AM_RANGE (0x78, 0x7b) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
+ADDRESS_MAP_END
+
+/* Input ports */
+static INPUT_PORTS_START( ksm )
+ PORT_START("SA1")
+ PORT_DIPNAME(0x01, 0x01, "Stop bits")
+ PORT_DIPSETTING(0x00, "2 bits")
+ PORT_DIPSETTING(0x01, "1 bit")
+ PORT_DIPNAME(0x02, 0x00, "Parity bits")
+ PORT_DIPSETTING(0x00, "0 bits")
+ PORT_DIPSETTING(0x02, "1 bit")
+ PORT_DIPNAME(0x04, 0x00, "Parity check")
+ PORT_DIPSETTING(0x00, "Off")
+ PORT_DIPSETTING(0x04, "On")
+ PORT_DIPNAME(0x08, 0x00, "Interpret controls")
+ PORT_DIPSETTING(0x00, "Interpret")
+ PORT_DIPSETTING(0x08, "Display")
+ PORT_DIPNAME(0x10, 0x00, "Auto wraparound")
+ PORT_DIPSETTING(0x00, "On")
+ PORT_DIPSETTING(0x10, "Off")
+ PORT_DIPNAME(0x20, 0x00, "Auto repeat")
+ PORT_DIPSETTING(0x00, "On")
+ PORT_DIPSETTING(0x20, "Off")
+ PORT_DIPNAME(0x40, 0x00, "Auto CR/LF")
+ PORT_DIPSETTING(0x00, "Off")
+ PORT_DIPSETTING(0x40, "On")
+ PORT_DIPNAME(0x80, 0x00, "Character set")
+ PORT_DIPSETTING(0x00, "KOI-8 N0/N1")
+ PORT_DIPSETTING(0x80, "KOI-8 N2")
+ PORT_START("SA2")
+ PORT_DIPNAME(0x01, 0x00, "XON/XOFF")
+ PORT_DIPSETTING(0x00, "Off")
+ PORT_DIPSETTING(0x01, "On")
+ PORT_DIPNAME(0x0E, 0x00, "Baud rate")
+ PORT_DIPSETTING(0x00, "9600")
+ PORT_DIPSETTING(0x02, "4800")
+ PORT_DIPSETTING(0x04, "2400")
+ PORT_DIPSETTING(0x06, "1200")
+ PORT_DIPSETTING(0x08, "600")
+ PORT_DIPSETTING(0x0A, "300")
+ PORT_DIPSETTING(0x0C, "150")
+ PORT_DIPSETTING(0x0E, "75")
+INPUT_PORTS_END
+
+void ksm_state::machine_reset()
+{
+ memset(&m_video, 0, sizeof(m_video));
+}
+
+void ksm_state::video_start()
+{
+ m_p_chargen = memregion("chargen")->base();
+
+ m_tmpclip = rectangle(0, KSM_DISP_HORZ-1, 0, KSM_DISP_VERT-1);
+ m_tmpbmp.allocate(KSM_DISP_HORZ, KSM_DISP_VERT);
+}
+
+WRITE8_MEMBER(ksm_state::ksm_ppi_porta_w)
+{
+ DBG_LOG(1,"PPI port A", ("line %d\n", data));
+ m_video.line = data;
+}
+
+WRITE8_MEMBER(ksm_state::ksm_ppi_portc_w)
+{
+ DBG_LOG(1,"PPI port C", ("blink %d speed %d\n", BIT(data, 7), ((data >> 4) & 7) ));
+}
+
+WRITE_LINE_MEMBER(ksm_state::write_keyboard_clock)
+{
+// KSM never sends data to keyboard
+// m_i8251kbd->write_txc(state);
+ m_i8251kbd->write_rxc(state);
+}
+
+WRITE_LINE_MEMBER(ksm_state::write_line_clock)
+{
+ m_i8251line->write_txc(state);
+ m_i8251line->write_rxc(state);
+}
+
+/*
+ Raster size is 28x11 scan lines.
+ XXX VBlank is active for 2 topmost on-screen rows and 1 at the bottom.
+
+ Usable raster is 800 x 275 pixels (80 x 25 characters). 24 lines are
+ available to the user and 25th (topmost) line is the status line.
+ Status line displays current serial port speed and 9 setup bits.
+
+ No character attributes are available, but in 'display controls' mode
+ control characters stored in memory are shown as blinking chars.
+
+ Character cell is 10 x 11; character generator provides 7 x 8 of that.
+ 3 extra horizontal pixels are always XXX blank. Blinking XXX cursor may be
+ displayed on 3 extra scan lines.
+*/
+
+UINT32 ksm_state::draw_scanline(UINT16 *p, UINT16 offset, UINT8 scanline)
+{
+ UINT8 gfx, fg, bg, ra, blink;
+ UINT16 x, chr;
+
+ bg = 0; fg = 1; ra = scanline % 8;
+ blink = (m_screen->frame_number() % 10) > 4;
+ if (scanline > 7) {
+ offset -= 0x2000;
+ }
+
+ for (x = offset; x < offset + 80; x++)
+ {
+ chr = m_p_videoram[x] << 3;
+ gfx = m_p_chargen[chr | ra];
+
+ if ((scanline > 7 && blink) || ((chr < (0x20<<3)) && !blink))
+ gfx = 0;
+
+ *p++ = BIT(gfx, 6) ? fg : bg;
+ *p++ = BIT(gfx, 5) ? fg : bg;
+ *p++ = BIT(gfx, 4) ? fg : bg;
+ *p++ = BIT(gfx, 3) ? fg : bg;
+ *p++ = BIT(gfx, 2) ? fg : bg;
+ *p++ = BIT(gfx, 1) ? fg : bg;
+ *p++ = BIT(gfx, 0) ? fg : bg;
+ *p++ = bg;
+ *p++ = bg;
+ *p++ = bg;
+ }
+ return 0;
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(ksm_state::scanline_callback)
+{
+ UINT16 y = m_screen->vpos();
+ UINT16 offset;
+
+ DBG_LOG(2,"scanline_cb",
+ ("addr %02x frame %" I64FMT "d x %.4d y %.3d row %.2d\n",
+ m_video.line, m_screen->frame_number(), m_screen->hpos(), y, y%11));
+
+ if (y < KSM_VERT_START) return;
+ y -= KSM_VERT_START;
+ if (y >= KSM_DISP_VERT) return;
+
+ if (y < KSM_STATUSLINE_TOTAL) {
+ offset = KSM_STATUSLINE_VRAM - 0xC000;
+ } else {
+ offset = 0x2000 + 0x30 + (((m_video.line + y/11 - 1) % 48) << 7);
+ }
+
+ draw_scanline(&m_tmpbmp.pix16(y), offset, y%11);
+}
+
+UINT32 ksm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ copybitmap(bitmap, m_tmpbmp, 0, 0, KSM_HORZ_START, KSM_VERT_START, cliprect);
+ return 0;
+}
+
+
+/* F4 Character Displayer */
+static const gfx_layout ksm_charlayout =
+{
+ 7, 8, /* 7x8 pixels in 10x11 cell */
+ 256, /* 256 characters */
+ 1, /* 1 bits per pixel */
+ { 0 }, /* no bitplanes */
+ /* x offsets */
+ { 1, 2, 3, 4, 5, 6, 7 },
+ /* y offsets */
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8 /* every char takes 8 bytes */
+};
+
+static GFXDECODE_START( ksm )
+ GFXDECODE_ENTRY("chargen", 0x0000, ksm_charlayout, 0, 1)
+GFXDECODE_END
+
+static MACHINE_CONFIG_START( ksm, ksm_state )
+ MCFG_CPU_ADD("maincpu", I8080, XTAL_15_4MHz/10)
+ MCFG_CPU_PROGRAM_MAP(ksm_mem)
+ MCFG_CPU_IO_MAP(ksm_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("scantimer", ksm_state, scanline_callback, attotime::from_hz(50*28*11))
+ MCFG_TIMER_START_DELAY(attotime::from_hz(XTAL_15_4MHz/KSM_HORZ_START))
+
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_UPDATE_DRIVER(ksm_state, screen_update)
+ MCFG_SCREEN_RAW_PARAMS(XTAL_15_4MHz, KSM_TOTAL_HORZ, KSM_HORZ_START,
+ KSM_HORZ_START+KSM_DISP_HORZ, KSM_TOTAL_VERT, KSM_VERT_START,
+ KSM_VERT_START+KSM_DISP_VERT);
+
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", ksm)
+ MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+
+ MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), VCC, NULL )
+
+ MCFG_DEVICE_ADD("ppi8255", I8255, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(ksm_state, ksm_ppi_porta_w))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("SA1"))
+ MCFG_I8255_IN_PORTC_CB(IOPORT("SA2"))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(ksm_state, ksm_ppi_portc_w))
+
+ // serial connection to host
+ MCFG_DEVICE_ADD( "i8251line", I8251, 0)
+ MCFG_I8251_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_I8251_DTR_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
+ MCFG_I8251_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts))
+ MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir3_w))
+
+ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "null_modem")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("i8251line", i8251_device, write_rxd))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("i8251line", i8251_device, write_cts))
+ MCFG_RS232_DSR_HANDLER(DEVWRITELINE("i8251line", i8251_device, write_dsr))
+
+ MCFG_DEVICE_ADD("line_clock", CLOCK, 9600*16) // 8251 is set to /16 on the clock input
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(ksm_state, write_line_clock))
+
+ // serial connection to MS7004 keyboard
+ MCFG_DEVICE_ADD( "i8251kbd", I8251, 0)
+ MCFG_I8251_RXRDY_HANDLER(DEVWRITELINE("pic8259", pic8259_device, ir1_w))
+
+ MCFG_DEVICE_ADD("ms7004", MS7004, 0)
+ MCFG_MS7004_TX_HANDLER(DEVWRITELINE("i8251kbd", i8251_device, write_rxd))
+
+ // baud rate is supposed to be 4800 but keyboard is slightly faster
+ MCFG_DEVICE_ADD("keyboard_clock", CLOCK, 4960*16)
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(ksm_state, write_keyboard_clock))
+MACHINE_CONFIG_END
+
+
+/*
+ Assumes that SRAM is at 0x2000, which is where technical manual puts it.
+ Chargen has 1 missing pixel in 'G' character.
+*/
+ROM_START( dvk_ksm )
+ ROM_REGION(0x1000, "maincpu", ROMREGION_ERASE00)
+ ROM_LOAD( "ksm_04_rom0_d32.bin", 0x0000, 0x0800, CRC(6ad62715) SHA1(20f8f95119bc7fc6e0f16c67864e339a86edb44d))
+ ROM_LOAD( "ksm_05_rom1_d33.bin", 0x0800, 0x0800, CRC(5b29bcd2) SHA1(1f4f82c2f88f1e8615ec02076559dc606497e654))
+
+ ROM_REGION(0x0800, "chargen", ROMREGION_ERASE00)
+ ROM_LOAD("ksm_03_cg_d31.bin", 0x0000, 0x0800, CRC(98853aa7) SHA1(09b8e1b5b10a00c0b0ae7e36ad1328113d31230a))
+ROM_END
+
+/*
+ Assumes that SRAM is at 0x2100, otherwise identical.
+ Chargen has no missing pixels in 'G' character.
+*/
+ROM_START( dvk_ksm01 )
+ ROM_REGION(0x1000, "maincpu", ROMREGION_ERASE00)
+ ROM_LOAD( "ksm_04_rom0_d32.bin", 0x0000, 0x0800, CRC(5276dc9a) SHA1(dd41dfb4cb3f1cf22d96d95f1ff6a27fe4eb9a38))
+ ROM_LOAD( "ksm_05_rom1_d33.bin", 0x0800, 0x0800, CRC(5b29bcd2) SHA1(1f4f82c2f88f1e8615ec02076559dc606497e654))
+
+ ROM_REGION(0x0800, "chargen", ROMREGION_ERASE00)
+ ROM_LOAD("ksm_03_cg_d31.bin", 0x0000, 0x0800, CRC(98853aa7) SHA1(c7871a96f135db05c3c8d718fbdf1728e22e72b7))
+ROM_END
+
+/* Driver */
+
+/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
+COMP( 1986, dvk_ksm, 0, 0, ksm, ksm, driver_device, 0, "USSR", "DVK KSM", 0)
+COMP( 198?, dvk_ksm01,0 , 0, ksm, ksm, driver_device, 0, "USSR", "DVK KSM-01", 0)
diff --git a/src/mess/drivers/einstein.c b/src/mess/drivers/einstein.c
index b02be808ab0..08f894bbd09 100644
--- a/src/mess/drivers/einstein.c
+++ b/src/mess/drivers/einstein.c
@@ -730,7 +730,7 @@ static MACHINE_CONFIG_START( einstein, einstein_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(IC_I063, z80pio_device, strobe_a))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(einstein_state, write_centronics_busy))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(einstein_state, write_centronics_perror))
diff --git a/src/mess/drivers/elwro800.c b/src/mess/drivers/elwro800.c
index 92fdcd351d4..a381b867992 100644
--- a/src/mess/drivers/elwro800.c
+++ b/src/mess/drivers/elwro800.c
@@ -573,7 +573,7 @@ static MACHINE_CONFIG_START( elwro800, elwro800_state )
MCFG_I8255_OUT_PORTC_CB(WRITE8(elwro800_state, i8255_port_c_w))
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_DATA_INPUT_BUFFER("cent_data_in")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(elwro800_state, write_centronics_ack))
diff --git a/src/mess/drivers/ep64.c b/src/mess/drivers/ep64.c
index 4ef1f30fb7c..708c5924860 100644
--- a/src/mess/drivers/ep64.c
+++ b/src/mess/drivers/ep64.c
@@ -521,7 +521,7 @@ static MACHINE_CONFIG_START( ep64, ep64_state )
MCFG_EP64_EXPANSION_BUS_SLOT_NMI_CALLBACK(INPUTLINE(Z80_TAG, INPUT_LINE_NMI))
MCFG_EP64_EXPANSION_BUS_SLOT_WAIT_CALLBACK(INPUTLINE(Z80_TAG, Z80_INPUT_LINE_WAIT))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(ep64_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/fc100.c b/src/mess/drivers/fc100.c
index b3c600750c0..d2dd95dd52d 100644
--- a/src/mess/drivers/fc100.c
+++ b/src/mess/drivers/fc100.c
@@ -552,7 +552,7 @@ static MACHINE_CONFIG_START( fc100, fc100_state )
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "fc100_cart")
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit4))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit5))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/fm7.c b/src/mess/drivers/fm7.c
index 4d0aa7f1ab3..544aa21c2d9 100644
--- a/src/mess/drivers/fm7.c
+++ b/src/mess/drivers/fm7.c
@@ -2088,7 +2088,7 @@ static MACHINE_CONFIG_START( fm7, fm7_state )
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_drq_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_SLOT_OPTION_ADD( "dsjoy", DEMPA_SHINBUNSHA_JOYSTICK )
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(fm7_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(fm7_state, write_centronics_fault))
@@ -2145,7 +2145,7 @@ static MACHINE_CONFIG_START( fm8, fm7_state )
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_drq_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(fm7_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(fm7_state, write_centronics_fault))
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(fm7_state, write_centronics_ack))
@@ -2221,7 +2221,7 @@ static MACHINE_CONFIG_START( fm77av, fm7_state )
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_drq_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(fm7_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(fm7_state, write_centronics_fault))
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(fm7_state, write_centronics_ack))
@@ -2299,7 +2299,7 @@ static MACHINE_CONFIG_START( fm11, fm7_state )
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_drq_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(fm7_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(fm7_state, write_centronics_fault))
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(fm7_state, write_centronics_ack))
@@ -2353,7 +2353,7 @@ static MACHINE_CONFIG_START( fm16beta, fm7_state )
MCFG_WD17XX_INTRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_intrq_w))
MCFG_WD17XX_DRQ_CALLBACK(WRITELINE(fm7_state, fm7_fdc_drq_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(fm7_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(fm7_state, write_centronics_fault))
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(fm7_state, write_centronics_ack))
diff --git a/src/mess/drivers/fp1100.c b/src/mess/drivers/fp1100.c
index a75fc49eec4..f1c813312ee 100644
--- a/src/mess/drivers/fp1100.c
+++ b/src/mess/drivers/fp1100.c
@@ -674,7 +674,7 @@ static MACHINE_CONFIG_START( fp1100, fp1100_state )
MCFG_MC6845_UPDATE_ROW_CB(fp1100_state, fp1100_update_row)
/* Printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(fp1100_state, centronics_busy_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/gamate.c b/src/mess/drivers/gamate.c
new file mode 100644
index 00000000000..730fb32a05b
--- /dev/null
+++ b/src/mess/drivers/gamate.c
@@ -0,0 +1,383 @@
+/******************************************************************************
+ PeT mess@utanet.at 2007, 2014
+******************************************************************************/
+
+#include "emu.h"
+#include "cpu/m6502/m6502.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+#include "rendlay.h"
+
+class gamate_state : public driver_device
+{
+public:
+ gamate_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_cart(*this, "cartslot")
+// , m_gfxdecode(*this, "gfxdecode")
+ , m_io_joy(*this, "JOY")
+ , m_palette(*this, "palette")
+ { }
+
+ DECLARE_PALETTE_INIT(gamate);
+ DECLARE_READ8_MEMBER(video_r);
+ DECLARE_READ8_MEMBER(pad_r);
+ DECLARE_WRITE8_MEMBER(video_w);
+ DECLARE_WRITE8_MEMBER(audio_w);
+ DECLARE_WRITE8_MEMBER(bios_w);
+ DECLARE_DRIVER_INIT(gamate);
+ UINT32 screen_update_gamate(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ INTERRUPT_GEN_MEMBER(gamate_interrupt);
+
+private:
+ virtual void machine_start();
+
+ struct
+ {
+ UINT8 reg[8];
+ struct {
+ bool write; // else tilemap
+ bool page2; // else page1
+ UINT8 data[2][0x100][0x20];
+ } bitmap;
+ struct {
+ UINT8 data[32][32];
+ } tilemap;
+ UINT8 x, y;
+ } video;
+
+// UINT8 m_ports[5];
+// UINT8 m_ram[0x4000];
+ required_device<cpu_device> m_maincpu;
+ required_device<generic_slot_device> m_cart;
+// required_device<gfxdecode_device> m_gfxdecode;
+ required_ioport m_io_joy;
+ required_device<palette_device> m_palette;
+};
+
+WRITE8_MEMBER( gamate_state::video_w )
+{
+ if (m_maincpu->pc()<0xf000)
+ logerror("%.6f %04x video write %04x %02x\n", machine().time().as_double(), m_maincpu->pc(), offset,data);
+ video.reg[offset]=data;
+ switch (offset) {
+ case 1: video.bitmap.write=data&0x40;break; // probably y increment
+ case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break;
+ case 5: video.y=data;break;
+ case 7:
+ if (video.bitmap.write) {
+ if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
+ video.bitmap.data[video.bitmap.page2][video.y][video.x]=data;
+ else
+ logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x);
+ video.y++;
+ } else {
+ if (video.x<ARRAY_LENGTH(video.tilemap.data[0]) && (video.y&0x1f)<ARRAY_LENGTH(video.tilemap.data))
+ video.tilemap.data[video.y&0x1f][video.x]=data;
+ else
+ logerror("%.6f %04x video tilemap %x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x, video.y);
+ video.x++;
+ }
+ }
+}
+
+READ8_MEMBER( gamate_state::video_r )
+{
+ if (offset!=6) return 0;
+ UINT8 data=0;
+ if (video.bitmap.write) {
+ if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
+ data=video.bitmap.data[video.bitmap.page2][video.y][video.x];
+ else
+ logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x);
+ } else {
+ if (video.x<ARRAY_LENGTH(video.tilemap.data[0]) && video.y<ARRAY_LENGTH(video.tilemap.data))
+ data=video.tilemap.data[video.y][video.x];
+ else
+ logerror("%.6f video tilemap %x %x invalid\n",machine().time().as_double(),video.x, video.y);
+ }
+ if (m_maincpu->pc()<0xf000)
+ logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data);
+ return data;
+}
+
+WRITE8_MEMBER( gamate_state::audio_w )
+{
+ // logerror("%.6f audio write %04x %02x\n",timer_get_time(),offset,data);
+}
+
+WRITE8_MEMBER( gamate_state::bios_w )
+{
+ UINT8 *memory = *memregion("main_cpu"); //memory_region (REGION_CPU1);
+
+ unsigned short stack=m_maincpu->sp();//cpu_get_reg(M6502_S)|0x100;
+ unsigned short address= memory[stack+1]|(memory[stack+2]<<8);
+ switch (offset) {
+ case 0x12:
+ logerror("%.6f bios api %04x %04x string:%04x x:%02x y:%02x\n",
+ machine().time().as_double(), offset|0xf000, address,
+ memory[0]|(memory[1]<<8), 0, 0);//cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
+ break;
+ case 0x15:
+ logerror("%.6f bios api %04x %04x string:%04x x:%02x y:%02x\n",
+ machine().time().as_double(), offset|0xf000, address,
+ memory[0]|(memory[1]<<8), 0, 0); //cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
+ break;
+ case 0x18:
+ logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
+ memory[0]|(memory[1]<<8) );
+ break;
+ case 0x1b:
+ logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
+ memory[0]|(memory[1]<<8) );
+ break;
+ case 0x1e:
+ logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
+ memory[0]|(memory[1]<<8) );
+ break;
+ case 0x2a: // cube up menu lighting
+ logerror("%.6f bios api %04x %04x 1c1d:%04x a:%02x x:%02x y:%02x\n",
+ machine().time().as_double(), offset|0xf000, address,
+ memory[0x1c]|(memory[0x1d]<<8),
+ 0,0,0);//cpu_get_reg(M6502_A), cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
+ break;
+ default:
+ logerror("%.6f bios api %04x %04x\n",machine().time().as_double(), offset|0xf000, address);
+ }
+}
+
+READ8_MEMBER( gamate_state::pad_r )
+{
+ UINT8 data=m_io_joy->read();//readinputport(0);
+ // logerror("%.6f pad read %04x %02x\n",timer_get_time(),offset,data);
+ return data;
+}
+
+static ADDRESS_MAP_START( gamate_mem, AS_PROGRAM, 8, gamate_state )
+// AM_RANGE(0x4000, 0x7fff) AM_READWRITE(gmaster_io_r, gmaster_io_w)
+
+ AM_RANGE(0x0000, 0x03ff) AM_RAM
+ AM_RANGE(0x4000, 0x400d) AM_WRITE(audio_w)
+ AM_RANGE(0x4400, 0x4400) AM_READ(pad_r)
+// AM_RANGE(0x5006, 0x5006) AM_READ(video_r)
+// AM_RANGE(0x5000, 0x5007) AM_WRITE(video_w)
+ AM_RANGE(0x5000, 0x5007) AM_READWRITE(video_r, video_w)
+
+ AM_RANGE(0x6000, 0xdfff) AM_ROM
+ AM_RANGE(0xf000, 0xffff) AM_ROM
+ADDRESS_MAP_END
+
+
+static INPUT_PORTS_START( gamate )
+ PORT_START("JOY")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // left?
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // rechts?
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("A")
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("B")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START) PORT_NAME("start/pause")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SELECT) PORT_NAME("select")
+INPUT_PORTS_END
+
+#if 0
+static const struct gfx_layout gamate_charlayout =
+{
+ 4, /* width of object */
+ 1, /* height of object */
+ 256,/* 256 characters */
+ 2, /* bits per pixel */
+ { 0,1 }, /* no bitplanes */
+ /* x offsets */
+ { 0,2,4,6 },
+ /* y offsets */
+ { 0 },
+ 8*1 /* size of 1 object in bits */
+};
+
+static const unsigned short gamate_palette[4] =
+{
+ 0,1,2,3
+};
+#endif
+
+/* palette in red, green, blue tribles */
+static const unsigned char gamate_colors[4][3] =
+{
+ { 255,255,255 },
+ { 0xa0, 0xa0, 0xa0 },
+ { 0x60, 0x60, 0x60 },
+ { 0, 0, 0 }
+};
+
+#if 0
+static GFXDECODE_START( gamate_charlayout )
+ GFXDECODE_ENTRY( "gfx1", 0x0000, gamate_charlayout, 0, 0x100 )
+GFXDECODE_END
+#endif
+
+PALETTE_INIT_MEMBER(gamate_state, gamate)
+{
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ palette.set_pen_color(i, gamate_colors[i][0], gamate_colors[i][1], gamate_colors[i][2]);
+ }
+#if 0
+ for (int i = 0; i < 8; i++)
+ palette.set_indirect_color(i, arcadia_colors[i]);
+
+ for (int i = 0; i < 128+8; i++)
+ palette.set_pen_indirect(i, arcadia_palette[i]);
+#endif
+}
+
+
+static void BlitPlane(UINT16* line, UINT8 plane1, UINT8 plane2)
+{
+ line[3]=(plane1&1)|((plane2<<1)&2);
+ line[2]=((plane1>>1)&1)|((plane2<<0)&2);
+ line[1]=((plane1>>2)&1)|((plane2>>1)&2);
+ line[0]=((plane1>>3)&1)|((plane2>>2)&2);
+}
+
+UINT32 gamate_state::screen_update_gamate(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ int x, y, j;
+ for (y=0;y<160;y++) {
+ for (x=0, j=0;x<160;x+=8, j++) {
+// for (y=0;y<256;y++) {
+// for (x=0, j=0;x<256;x+=8, j++) {
+ UINT8 d1=video.bitmap.data[0][y][j];
+ UINT8 d2=video.bitmap.data[1][y][j];
+#if 0
+ UINT16 data=PLANES2_2_PACKED(d1, d2);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), (data>>8)&0xff,0,0,0, x, y);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), data&0xff,0,0,0, x+4, y);
+#else
+ BlitPlane(&bitmap.pix16(y, x+4), d1, d2);
+ BlitPlane(&bitmap.pix16(y, x), d1>>4, d2>>4);
+#endif
+ }
+ }
+ for (y=0; y<32; y++) {
+ for (x=0; x<32; x++) {
+#if 0
+ UINT8 d=video.tilemap.data[y][x];
+ if (d) {
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+1);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+2);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+3);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+4);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+5);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+6);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+7);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+1);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+2);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+3);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+4);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+5);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+6);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+7);
+ } else {
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+1);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+2);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+3);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+4);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+5);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+6);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+7);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+1);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+2);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+3);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+4);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+5);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+6);
+ m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+7);
+ }
+#endif
+ }
+ }
+ return 0;
+}
+
+DRIVER_INIT_MEMBER(gamate_state,gamate)
+{
+ memset(&video, 0, sizeof(video));/* memset(m_ram, 0, sizeof(m_ram));*/
+ UINT8 *gfx=memregion("gfx1")->base(); for (int i=0; i<256; i++) gfx[i]=i;
+}
+
+
+void gamate_state::machine_start()
+{
+ if (m_cart->exists())
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0xdfff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_cart));
+#if 0
+ save_item(NAME(m_video.data));
+ save_item(NAME(m_video.index));
+ save_item(NAME(m_video.x));
+ save_item(NAME(m_video.y));
+ save_item(NAME(m_video.mode));
+ save_item(NAME(m_video.delayed));
+ save_item(NAME(m_video.pixels));
+ save_item(NAME(m_ports));
+ save_item(NAME(m_ram));
+#endif
+}
+
+
+INTERRUPT_GEN_MEMBER(gamate_state::gamate_interrupt)
+{
+// m_maincpu->set_input_line(UPD7810_INTFE1, ASSERT_LINE);
+ static bool state=false;
+// m_maincpu->set_input_line(M6502_IRQ_LINE, state?ASSERT_LINE: CLEAR_LINE);
+ state=!state;
+// cpu_set_irq_line(0, M6502_INT_IRQ, PULSE_LINE);
+}
+
+static MACHINE_CONFIG_START( gamate, gamate_state )
+ MCFG_CPU_ADD("maincpu", M6502, 4433000)
+ MCFG_CPU_PROGRAM_MAP(gamate_mem)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", gamate_state, gamate_interrupt)
+
+ MCFG_SCREEN_ADD("screen", LCD)
+ MCFG_SCREEN_REFRESH_RATE(60)
+#if 0
+ MCFG_SCREEN_SIZE(512, 256)
+ MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
+#else
+ MCFG_SCREEN_SIZE(160, 160)
+ MCFG_SCREEN_VISIBLE_AREA(0, 160-1, 0, 160-1)
+#endif
+ MCFG_SCREEN_UPDATE_DRIVER(gamate_state, screen_update_gamate)
+ MCFG_SCREEN_PALETTE("palette")
+
+// MCFG_GFXDECODE_ADD("gfxdecode", "palette", gamate )
+ MCFG_PALETTE_ADD("palette", ARRAY_LENGTH(gamate_colors))
+// MCFG_PALETTE_INDIRECT_ENTRIES(4)
+ MCFG_PALETTE_INIT_OWNER(gamate_state, gamate)
+ MCFG_DEFAULT_LAYOUT(layout_lcd)
+
+ MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_linear_slot, "gamate_cart")
+ MCFG_GENERIC_MANDATORY
+
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "gamate")
+MACHINE_CONFIG_END
+
+
+ROM_START(gamate)
+ ROM_REGION(0x10000,"maincpu", 0)
+ ROM_LOAD("gamate.bin", 0xf000, 0x1000, BAD_DUMP CRC(b8bf539b) SHA1(d00cb43b8a4cb0cc7fea06bee5f08490a71f5690) )
+// ROM_LOAD("gamate.bin", 0xf000, 0x1000, CRC(b8bf539b) SHA1(d00cb43b8a4cb0cc7fea06bee5f08490a71f5690) )
+ ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
+ROM_END
+
+
+/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
+CONS( 19??, gamate, 0, 0, gamate, gamate, gamate_state, gamate, "Bit Corp", "Gamate", GAME_NOT_WORKING | GAME_NO_SOUND)
diff --git a/src/mess/drivers/gimix.c b/src/mess/drivers/gimix.c
index cc150386ce8..b2cfc68d8e0 100644
--- a/src/mess/drivers/gimix.c
+++ b/src/mess/drivers/gimix.c
@@ -485,7 +485,8 @@ void gimix_state::machine_reset()
m_floppy0_ready = false;
m_floppy1_ready = false;
membank("lower_ram")->set_base(m_ram->pointer());
- membank("upper_ram")->set_base(m_ram->pointer()+0x10000);
+ if(m_ram->size() > 65536)
+ membank("upper_ram")->set_base(m_ram->pointer()+0x10000);
// initialise FDC clock based on DIP Switch S2-9 (5.25"/8" drive select)
if(m_dma_dip->read() & 0x00000100)
diff --git a/src/mess/drivers/gmaster.c b/src/mess/drivers/gmaster.c
index 9c7cf293929..8b5fe019f5c 100644
--- a/src/mess/drivers/gmaster.c
+++ b/src/mess/drivers/gmaster.c
@@ -28,7 +28,6 @@ public:
DECLARE_WRITE8_MEMBER(gmaster_port_w);
DECLARE_DRIVER_INIT(gmaster) { memset(&m_video, 0, sizeof(m_video)); memset(m_ram, 0, sizeof(m_ram)); }
UINT32 screen_update_gmaster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(gmaster_interrupt);
private:
virtual void machine_start();
@@ -278,16 +277,10 @@ void gmaster_state::machine_start()
}
-INTERRUPT_GEN_MEMBER(gmaster_state::gmaster_interrupt)
-{
- m_maincpu->set_input_line(UPD7810_INTFE1, ASSERT_LINE);
-}
-
static MACHINE_CONFIG_START( gmaster, gmaster_state )
MCFG_CPU_ADD("maincpu", UPD7810, XTAL_12MHz/2/*?*/) // upd78c11 in the unit
MCFG_CPU_PROGRAM_MAP(gmaster_mem)
MCFG_CPU_IO_MAP( gmaster_io)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", gmaster_state, gmaster_interrupt)
MCFG_SCREEN_ADD("screen", LCD)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mess/drivers/hx20.c b/src/mess/drivers/hx20.c
index d4abbca6920..3d07f0de671 100644
--- a/src/mess/drivers/hx20.c
+++ b/src/mess/drivers/hx20.c
@@ -864,7 +864,7 @@ static MACHINE_CONFIG_START( hx20, hx20_state )
MCFG_RAM_EXTRA_OPTIONS("32K")
// software lists
- MCFG_SOFTWARE_LIST_ADD("flop_list", "hx20_flop")
+ MCFG_SOFTWARE_LIST_ADD("epson_cpm_list", "epson_cpm")
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/isbc.c b/src/mess/drivers/isbc.c
index 64d6c57c5a7..08b54a8b941 100644
--- a/src/mess/drivers/isbc.c
+++ b/src/mess/drivers/isbc.c
@@ -283,7 +283,7 @@ static MACHINE_CONFIG_START( isbc286, isbc_state )
MCFG_I8255_IN_PORTB_CB(DEVREAD8("cent_status_in", input_buffer_device, read))
MCFG_I8255_OUT_PORTC_CB(WRITE8(isbc_state, ppi_c_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(isbc_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit7))
MCFG_CENTRONICS_FAULT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit6))
diff --git a/src/mess/drivers/jtc.c b/src/mess/drivers/jtc.c
index 11753f321e7..6c30cf0d322 100644
--- a/src/mess/drivers/jtc.c
+++ b/src/mess/drivers/jtc.c
@@ -735,7 +735,7 @@ static MACHINE_CONFIG_START( basic, jtc_state )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
/* printer */
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(jtc_state, write_centronics_busy))
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/kaypro.c b/src/mess/drivers/kaypro.c
index 9e76d9acd30..07ce92875f4 100644
--- a/src/mess/drivers/kaypro.c
+++ b/src/mess/drivers/kaypro.c
@@ -207,7 +207,7 @@ static MACHINE_CONFIG_START( kayproii, kaypro_state )
/* devices */
MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro, "com,cpm", 3)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(kaypro_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -281,7 +281,7 @@ static MACHINE_CONFIG_START( kaypro2x, kaypro_state )
MCFG_QUICKLOAD_ADD("quickload", kaypro_state, kaypro, "com,cpm", 3)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(kaypro_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/kyocera.c b/src/mess/drivers/kyocera.c
index 3adb9ba6ac7..2dca599ff66 100644
--- a/src/mess/drivers/kyocera.c
+++ b/src/mess/drivers/kyocera.c
@@ -1376,7 +1376,7 @@ static MACHINE_CONFIG_START( kc85, kc85_state )
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(IM6402_TAG, im6402_device, write_rri))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(kc85_state, write_centronics_busy))
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(kc85_state, write_centronics_select))
@@ -1426,7 +1426,7 @@ static MACHINE_CONFIG_START( pc8201, pc8201_state )
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(IM6402_TAG, im6402_device, write_rri))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(kc85_state, write_centronics_busy))
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(kc85_state, write_centronics_select))
@@ -1486,7 +1486,7 @@ static MACHINE_CONFIG_START( trsm100, trsm100_state )
MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, NULL)
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(IM6402_TAG, im6402_device, write_rri))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED)
@@ -1550,7 +1550,7 @@ static MACHINE_CONFIG_START( tandy200, tandy200_state )
MCFG_RS232_DSR_HANDLER(DEVWRITELINE(I8251_TAG, i8251_device, write_dsr))
// MCFG_MC14412_ADD(MC14412_TAG, XTAL_1MHz)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(tandy200_state, write_centronics_busy))
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(tandy200_state, write_centronics_select))
diff --git a/src/mess/drivers/lviv.c b/src/mess/drivers/lviv.c
index 1d46246facc..6f907c01be1 100644
--- a/src/mess/drivers/lviv.c
+++ b/src/mess/drivers/lviv.c
@@ -486,4 +486,4 @@ ROM_START(lviv)
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-COMP( 1989, lviv, 0, 0, lviv, lviv, driver_device, 0, "V. I. Lenin", "Lviv" , 0 )
+COMP( 1989, lviv, 0, 0, lviv, lviv, driver_device, 0, "V. I. Lenin", "PK-01 Lviv" , 0 )
diff --git a/src/mess/drivers/m5.c b/src/mess/drivers/m5.c
index c1e86d3d633..43dae72ef96 100644
--- a/src/mess/drivers/m5.c
+++ b/src/mess/drivers/m5.c
@@ -595,7 +595,7 @@ static MACHINE_CONFIG_START( m5, m5_state )
// CK0 = EXINT, CK1 = GND, CK2 = TCK, CK3 = VDP INT
// ZC2 = EXCLK
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(m5_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
@@ -603,6 +603,7 @@ static MACHINE_CONFIG_START( m5, m5_state )
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_FORMATS(sordm5_cassette_formats)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY)
+ MCFG_CASSETTE_INTERFACE("m5_cass")
MCFG_DEVICE_ADD(I8255A_TAG, I8255, 0)
MCFG_I8255_IN_PORTA_CB(READ8(m5_state, ppi_pa_r))
@@ -621,7 +622,8 @@ static MACHINE_CONFIG_START( m5, m5_state )
//MCFG_GENERIC_MANDATORY
// software lists
- MCFG_SOFTWARE_LIST_ADD("cart_list", "m5")
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "m5_cart")
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "m5_cass")
// internal ram
MCFG_RAM_ADD(RAM_TAG)
diff --git a/src/mess/drivers/mbee.c b/src/mess/drivers/mbee.c
index 406b4f42e73..332fdb95555 100644
--- a/src/mess/drivers/mbee.c
+++ b/src/mess/drivers/mbee.c
@@ -699,7 +699,7 @@ static MACHINE_CONFIG_START( mbee, mbee_state )
MCFG_QUICKLOAD_ADD("quickload", mbee_state, mbee, "mwb,com,bee", 2)
MCFG_QUICKLOAD_ADD("quickload2", mbee_state, mbee_z80bin, "bin", 2)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -757,7 +757,7 @@ static MACHINE_CONFIG_START( mbeeic, mbee_state )
MCFG_QUICKLOAD_ADD("quickload", mbee_state, mbee, "mwb,com,bee", 2)
MCFG_QUICKLOAD_ADD("quickload2", mbee_state, mbee_z80bin, "bin", 2)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/mc1000.c b/src/mess/drivers/mc1000.c
index 327646b44c5..20bf97740d9 100644
--- a/src/mess/drivers/mc1000.c
+++ b/src/mess/drivers/mc1000.c
@@ -453,7 +453,7 @@ static MACHINE_CONFIG_START( mc1000, mc1000_state )
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(mc1000_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/mc1502.c b/src/mess/drivers/mc1502.c
index a96b14ffc57..abec3f48f80 100644
--- a/src/mess/drivers/mc1502.c
+++ b/src/mess/drivers/mc1502.c
@@ -76,7 +76,7 @@ WRITE8_MEMBER(mc1502_state::mc1502_ppi_portb_w)
// DBG_LOG(2,"mc1502_ppi_portb_w",("( %02X )\n", data));
m_ppi_portb = data;
m_pit8253->write_gate2(BIT(data, 0));
-// mc1502_speaker_set_spkrdata(BIT(data, 1));
+ mc1502_speaker_set_spkrdata(BIT(data, 1));
m_centronics->write_strobe(BIT(data, 2));
m_centronics->write_autofd(BIT(data, 3));
m_centronics->write_init(BIT(data, 4));
@@ -163,10 +163,16 @@ WRITE_LINE_MEMBER(mc1502_state::mc1502_pit8253_out1_changed)
WRITE_LINE_MEMBER(mc1502_state::mc1502_pit8253_out2_changed)
{
m_pit_out2 = state;
-// mc1502_speaker_set_input( state );
+ m_speaker->level_w(m_spkrdata & m_pit_out2);
m_cassette->output(state ? 1 : -1);
}
+WRITE_LINE_MEMBER(mc1502_state::mc1502_speaker_set_spkrdata)
+{
+ m_spkrdata = state ? 1 : 0;
+ m_speaker->level_w(m_spkrdata & m_pit_out2);
+}
+
DRIVER_INIT_MEMBER( mc1502_state, mc1502 )
{
address_space &program = m_maincpu->space(AS_PROGRAM);
@@ -197,6 +203,12 @@ MACHINE_START_MEMBER( mc1502_state, mc1502 )
MACHINE_RESET_MEMBER( mc1502_state, mc1502 )
{
DBG_LOG(0,"init",("machine_reset()\n"));
+
+ m_spkrdata = 0;
+ m_pit_out2 = 1;
+ m_ppi_portb = 0;
+ m_ppi_portc = 0;
+ m_speaker->level_w(0);
}
/*
@@ -295,7 +307,7 @@ static MACHINE_CONFIG_START( mc1502, mc1502_state )
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit6))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit7))
MCFG_CENTRONICS_FAULT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit4))
@@ -324,21 +336,61 @@ static MACHINE_CONFIG_DERIVED( pk88, mc1502 )
MACHINE_CONFIG_END
+/*
+ Apparently there was a hardware revision with built-in floppy
+ controller mapped to alternate set of ports; v531 and v533
+ support this revision. v533 is possibly not an original BIOS, it
+ supports autoboot which none of others do. v521h is a version
+ with support for 3rd party hard disk controller (not emulated).
+ v51 is designed for a different keyboard layout (JCUKEN, not
+ QWERTY).
+*/
ROM_START( mc1502 )
ROM_REGION16_LE(0x100000,"maincpu", 0)
ROM_DEFAULT_BIOS("v52")
- ROM_SYSTEM_BIOS(0, "v50", "v5.0")
+ ROM_SYSTEM_BIOS(0, "v50", "v5.0 10/05/89")
ROMX_LOAD( "monitor_5_0.rom", 0xfc000, 0x4000, CRC(9e97c6a0) SHA1(16a304e8de69ec4d8b92acda6bf28454c361a24f),ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "v52", "v5.2")
+ ROM_SYSTEM_BIOS(1, "v52", "v5.2 22/03/91")
ROMX_LOAD( "monitor_5_2.rom", 0xfc000, 0x4000, CRC(0e65491e) SHA1(8a4d556473b5e0e59b05fab77c79c29f4d562412),ROM_BIOS(2))
- ROM_SYSTEM_BIOS(2, "v531", "v5.31")
- ROMX_LOAD( "monitor_5_31.rom", 0xfc000, 0x4000, CRC(a48295d5) SHA1(6f38977c22f9cc6c2bc6f6e53edc4048ca6b6721),ROM_BIOS(3))
- ROM_SYSTEM_BIOS(3, "v533", "v5.33")
- ROMX_LOAD( "0_(cbc0).bin", 0xfc000, 0x2000, CRC(9a55bc4f) SHA1(81da44eec2e52cf04b1fc7053502270f51270590),ROM_BIOS(4))
- ROMX_LOAD( "1_(dfe2).bin", 0xfe000, 0x2000, CRC(8dec077a) SHA1(d6f6d7cc2183abc77fbd9cd59132de5766f7c458),ROM_BIOS(4))
+ ROM_SYSTEM_BIOS(2, "v521", "v5.21 12/10/92")
+ ROMX_LOAD( "monitor_5_21.rom", 0xfc000, 0x4000, CRC(28c8f653) SHA1(04b0b09e0b86d9648a83352cc1590eb8963833e0),ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(3, "v531", "v5.31 12/10/92")
+ ROMX_LOAD( "monitor_5_31.rom", 0xfc000, 0x4000, CRC(a48295d5) SHA1(6f38977c22f9cc6c2bc6f6e53edc4048ca6b6721),ROM_BIOS(4))
+ ROM_SYSTEM_BIOS(4, "v533", "v5.33 01/08/93")
+ ROMX_LOAD( "0_(cbc0).bin", 0xfc000, 0x2000, CRC(9a55bc4f) SHA1(81da44eec2e52cf04b1fc7053502270f51270590),ROM_BIOS(5))
+ ROMX_LOAD( "1_(dfe2).bin", 0xfe000, 0x2000, CRC(8dec077a) SHA1(d6f6d7cc2183abc77fbd9cd59132de5766f7c458),ROM_BIOS(5))
+
+ // 5.21 + 3rd party HDC support. fails checksum test so marked BAD_DUMP.
+ ROM_SYSTEM_BIOS(5, "v521h", "v5.21h 22/09/93")
+ ROMX_LOAD( "mshbios0.pgm", 0xfc000, 0x2000, BAD_DUMP CRC(be447261) SHA1(b93c597c17dfa4b678f72c20a3f7119b73e6ba1c),ROM_BIOS(6))
+ ROMX_LOAD( "mshbios1.pgm", 0xfe000, 0x2000, BAD_DUMP CRC(89e2eaf2) SHA1(37d6b225b5e35574fdac81219589407d925225be),ROM_BIOS(6))
+
+ // 5.3
+ ROM_SYSTEM_BIOS(6, "v53", "v5.3 10/11/91")
+ ROMX_LOAD( "1502~3b0.pgm", 0xfc000, 0x2000, CRC(dc148763) SHA1(7a5e66438007b2de328ac680614f9c4ff60f6a75),ROM_BIOS(7))
+ ROMX_LOAD( "1502~3b1.pgm", 0xfe000, 0x2000, CRC(17fc2af2) SHA1(a060d7b7302dfa639025f025106b50412cf26953),ROM_BIOS(7))
+ // 5.1 -- JCUKEN keyboard
+ ROM_SYSTEM_BIOS(7, "v51", "v5.1 10/12/90")
+ ROMX_LOAD( "ms1502b0.pgm", 0xfc000, 0x2000, CRC(92fcc29a) SHA1(930a4cffcd6ec6110dd9a18bd389b78f0ccb110a),ROM_BIOS(8))
+ ROMX_LOAD( "ms1502b1.pgm", 0xfe000, 0x2000, CRC(fe355a58) SHA1(b4ef7775045c6f2095e2b487fe19824986a4892c),ROM_BIOS(8))
+ // 5.31
+ ROM_SYSTEM_BIOS(8, "v531_92", "v5.31 12/10/92")
+ ROMX_LOAD( "ms531b0.pgm", 0xfc000, 0x2000, CRC(d97157d1) SHA1(cb1a1e0e2d9a0fcc78f9b09bfb4814d408ee4fae),ROM_BIOS(9))
+ ROMX_LOAD( "ms531b1.pgm", 0xfe000, 0x2000, CRC(b1368e1a) SHA1(286496d25dc0ac2d8fe1802caffc6c37b236d105),ROM_BIOS(9))
+ // 5.2
+ ROM_SYSTEM_BIOS(9, "v52_91", "v5.2 10/11/91")
+ ROMX_LOAD( "msv5~2b0.pgm", 0xfc000, 0x2000, CRC(f7f370e9) SHA1(e069a35005581a02856853b57dd511ab8e10054b),ROM_BIOS(10))
+ ROMX_LOAD( "msv5~2b1.pgm", 0xfe000, 0x2000, CRC(d50e1c43) SHA1(22724dec0052ee9e52f44f5914f2f5f3fae14612),ROM_BIOS(10))
+
+ ROM_REGION(0x2000,"gfx1", ROMREGION_ERASE00)
+ ROM_LOAD( "symgen.rom", 0x0000, 0x2000, CRC(b2747a52) SHA1(6766d275467672436e91ac2997ac6b77700eba1e))
ROM_END
+/*
+ Predecessor of MC1502, same keyboard attachment but
+ different video subsystem (not emulated).
+*/
ROM_START( pk88 )
ROM_REGION16_LE(0x100000,"maincpu", 0)
@@ -358,4 +410,4 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
COMP ( 1989, mc1502, ibm5150, 0, mc1502, mc1502, mc1502_state, mc1502, "NPO Microprocessor", "Elektronika MC-1502", 0)
-COMP ( 1990, pk88, ibm5150, 0, pk88, mc1502, mc1502_state, mc1502, "NPO Microprocessor", "Elektronika PK-88", GAME_NOT_WORKING | GAME_NO_SOUND)
+COMP ( 1988, pk88, ibm5150, 0, pk88, mc1502, mc1502_state, mc1502, "NPO Microprocessor", "Elektronika PK-88", GAME_NOT_WORKING | GAME_NO_SOUND)
diff --git a/src/mess/drivers/merlin.c b/src/mess/drivers/merlin.c
index c5cc67d3421..c104de6629c 100644
--- a/src/mess/drivers/merlin.c
+++ b/src/mess/drivers/merlin.c
@@ -1,73 +1,65 @@
-/*
+/***************************************************************************
+
+ Parker Bros Merlin handheld computer game
+ * TMS1100NLL MP3404A-N2 (has internal ROM)
+
+ Other games assumed to be on similar hardware:
+ - Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin,
+ let's assume for now that the ROM contents is identical)
+ - Master Merlin
+
+ Another sequel, called Split Second, looks like different hardware.
- Parker Bros Merlin handheld computer game
-*/
+ TODO:
+ - accurate speaker levels (tone pitch sounds good though)
+ - is the rom dump good?
+
+***************************************************************************/
#include "emu.h"
#include "cpu/tms0980/tms0980.h"
#include "sound/speaker.h"
-/* Layout */
#include "merlin.lh"
+// master clock is a single stage RC oscillator: R=33K, C=100pf,
+// according to the TMS 1000 series data manual this is around 350kHz
+#define MERLIN_RC_CLOCK (350000)
+
class merlin_state : public driver_device
{
public:
merlin_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_speaker(*this, "speaker") ,
- m_maincpu(*this, "maincpu") { }
-
- virtual void machine_start();
-
- required_device<speaker_sound_device> m_speaker;
+ m_maincpu(*this, "maincpu"),
+ m_button_matrix(*this, "O"),
+ m_speaker(*this, "speaker")
+ { }
DECLARE_READ8_MEMBER(read_k);
DECLARE_WRITE16_MEMBER(write_o);
DECLARE_WRITE16_MEMBER(write_r);
+ virtual void machine_start();
+
protected:
- UINT16 m_o;
- UINT16 m_r;
required_device<cpu_device> m_maincpu;
-};
-
+ required_ioport_array<4> m_button_matrix;
+ required_device<speaker_sound_device> m_speaker;
-#define LOG 0
+ UINT16 m_o;
+};
-static INPUT_PORTS_START( merlin )
- PORT_START("O0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(KEYCODE_0) PORT_NAME("R0") // R0
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(KEYCODE_1) PORT_NAME("R1") // R1
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_3) PORT_NAME("R3") // R3
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CODE(KEYCODE_2) PORT_NAME("R2") // R2
-
- PORT_START("O1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CODE(KEYCODE_4) PORT_NAME("R4") // R4
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_5) PORT_NAME("R5") // R5
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CODE(KEYCODE_7) PORT_NAME("R7") // R7
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CODE(KEYCODE_6) PORT_NAME("R6") // R6
-
- PORT_START("O2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CODE(KEYCODE_8) PORT_NAME("R8") // R8
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON10) PORT_CODE(KEYCODE_9) PORT_NAME("R9") // R9
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON13) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game") // SG - same game
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON11) PORT_CODE(KEYCODE_MINUS) PORT_NAME("R10") // R10
-
- PORT_START("O3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON15) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn") // Comp Turn
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON14) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me") // Hit me
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON12) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") // NG - new game
+/***************************************************************************
-INPUT_PORTS_END
+ I/O
+***************************************************************************/
-/*
-The keypad is a 4*4 matrix, connected like so:
+/* The keypad is a 4*4 matrix, connected like so:
+----+ +----+ +----+ +----+
O0 o---| R0 |--| R1 |--| R2 |--| R3 |
@@ -88,97 +80,95 @@ O3 o------+----| CT |--| NG |--| HM |
o o o o
K1 K2 K8 K4
-SG = same game, CT = comp turn, NG = new game, HM = hit me
-*/
+SG = same game, CT = comp turn, NG = new game, HM = hit me */
READ8_MEMBER(merlin_state::read_k)
{
- UINT8 data = 0;
-
- if (LOG)
- logerror( "read_k\n" );
-
- if ( m_o & 0x01 )
- {
- data |= ioport("O0")->read();
- }
-
- if ( m_o & 0x02 )
- {
- data |= ioport("O1")->read();
- }
-
- if ( m_o & 0x04 )
- {
- data |= ioport("O2")->read();
- }
-
- if ( m_o & 0x08 )
- {
- data |= ioport("O3")->read();
- }
-
- return data;
+ UINT8 k = 0;
+
+ // read selected button rows
+ for (int i = 0; i < 4; i++)
+ if (m_o & (1 << i))
+ k |= m_button_matrix[i]->read();
+
+ return k;
}
-
-/*
-The speaker is connected to O4 through O6. The 3 outputs are paralleled for
-increased current driving capability. They are passed thru a 220 ohm resistor
-and then to the speaker, which has the other side grounded. The software then
-toggles these lines to make sounds and noises. (There is no audio generator
-other than toggling it with a software delay between to make tones).
-*/
-
WRITE16_MEMBER(merlin_state::write_o)
{
- if (LOG)
- logerror( "write_o: write %02x\n", data );
-
+ /* The speaker is connected to O4 through O6. The 3 outputs are paralleled for
+ increased current driving capability. They are passed thru a 220 ohm resistor
+ and then to the speaker, which has the other side grounded. The software then
+ toggles these lines to make sounds and noises. (There is no audio generator
+ other than toggling it with a software delay between to make tones). */
+ static const int count[8] = { 0, 1, 1, 2, 1, 2, 2, 3 };
+ m_speaker->level_w(count[data >> 4 & 7]);
+
+ // O0-O3: input mux
+ // O7: N/C
m_o = data;
+}
- m_speaker->level_w(m_o & 0x70);
+WRITE16_MEMBER(merlin_state::write_r)
+{
+ /* LEDs:
+
+ R0
+ R1 R2 R3
+ R4 R5 R6
+ R7 R8 R9
+ R10
+ */
+ for (int i = 0; i < 11; i++)
+ output_set_lamp_value(i, data >> i & 1);
}
-/*
- LEDs:
+/***************************************************************************
- R0
- R1 R2 R3
- R4 R5 R6
- R7 R8 R9
- R10
+ Inputs
-When that particular R output is high, that LED is on.
-*/
+***************************************************************************/
+
+static INPUT_PORTS_START( merlin )
+ PORT_START("O.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(KEYCODE_0) PORT_NAME("Button R0")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(KEYCODE_1) PORT_NAME("Button R1")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_3) PORT_NAME("Button R3")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CODE(KEYCODE_2) PORT_NAME("Button R2")
+
+ PORT_START("O.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CODE(KEYCODE_4) PORT_NAME("Button R4")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_5) PORT_NAME("Button R5")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CODE(KEYCODE_7) PORT_NAME("Button R7")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CODE(KEYCODE_6) PORT_NAME("Button R6")
+
+ PORT_START("O.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CODE(KEYCODE_8) PORT_NAME("Button R8")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON10) PORT_CODE(KEYCODE_9) PORT_NAME("Button R9")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON13) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON11) PORT_CODE(KEYCODE_MINUS) PORT_NAME("Button R10")
+
+ PORT_START("O.3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON15) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON14) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON12) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
+INPUT_PORTS_END
-WRITE16_MEMBER(merlin_state::write_r)
-{
- if (LOG)
- logerror( "write_r: write %04x\n", data );
-
- m_r = data;
-
- output_set_value( "led_0", BIT( m_r, 0 ) );
- output_set_value( "led_1", BIT( m_r, 1 ) );
- output_set_value( "led_2", BIT( m_r, 2 ) );
- output_set_value( "led_3", BIT( m_r, 3 ) );
- output_set_value( "led_4", BIT( m_r, 4 ) );
- output_set_value( "led_5", BIT( m_r, 5 ) );
- output_set_value( "led_6", BIT( m_r, 6 ) );
- output_set_value( "led_7", BIT( m_r, 7 ) );
- output_set_value( "led_8", BIT( m_r, 8 ) );
- output_set_value( "led_9", BIT( m_r, 9 ) );
- output_set_value( "led_10", BIT( m_r, 10 ) );
-}
+/***************************************************************************
+
+ Machine Config
+
+***************************************************************************/
+
void merlin_state::machine_start()
{
+ m_o = 0;
save_item(NAME(m_o));
- save_item(NAME(m_r));
}
@@ -191,22 +181,37 @@ static const UINT16 merlin_output_pla[0x20] =
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
+static const INT16 speaker_levels[] = { 0, 32767, 0, 32767 }; // unknown too, due to output_pla being unknown
+
static MACHINE_CONFIG_START( merlin, merlin_state )
- MCFG_CPU_ADD( "maincpu", TMS1100, 500000 ) /* Clock may be wrong */
- MCFG_TMS1XXX_OUTPUT_PLA( merlin_output_pla )
- MCFG_TMS1XXX_READ_K( READ8( merlin_state, read_k ) )
- MCFG_TMS1XXX_WRITE_O( WRITE16( merlin_state, write_o ) )
- MCFG_TMS1XXX_WRITE_R( WRITE16( merlin_state, write_r ) )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD( "maincpu", TMS1100, MERLIN_RC_CLOCK )
+ MCFG_TMS1XXX_OUTPUT_PLA(merlin_output_pla)
+ MCFG_TMS1XXX_READ_K(READ8( merlin_state, read_k))
+ MCFG_TMS1XXX_WRITE_O(WRITE16( merlin_state, write_o))
+ MCFG_TMS1XXX_WRITE_R(WRITE16( merlin_state, write_r))
MCFG_DEFAULT_LAYOUT(layout_merlin)
+ /* no video! */
+
+ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SPEAKER_LEVELS(4, speaker_levels)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
ROM_START( merlin )
ROM_REGION( 0x800, "maincpu", 0 )
// This rom needs verification, that's why it is marked as a bad dump
@@ -216,11 +221,5 @@ ROM_START( merlin )
ROM_LOAD( "mp3404", 0x0000, 0x800, BAD_DUMP CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) )
ROM_END
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", 0 )
+CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", GAME_SUPPORTS_SAVE )
diff --git a/src/mess/drivers/msx.c b/src/mess/drivers/msx.c
index a56c517bef3..4c9c69747dd 100644
--- a/src/mess/drivers/msx.c
+++ b/src/mess/drivers/msx.c
@@ -517,7 +517,6 @@ PCB Layouts missing
#include "includes/msx.h"
-#include "bus/centronics/covox.h"
#include "formats/dsk_dsk.h"
#include "formats/dmk_dsk.h"
#include "machine/msx_matsushita.h"
@@ -1351,8 +1350,7 @@ static MACHINE_CONFIG_START( msx, msx_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
- MCFG_SLOT_OPTION_ADD( "covox", CENTRONICS_COVOX )
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit1))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -1440,8 +1438,7 @@ static MACHINE_CONFIG_START( msx2, msx_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
- MCFG_SLOT_OPTION_ADD( "covox", CENTRONICS_COVOX )
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit1))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -1505,8 +1502,7 @@ static MACHINE_CONFIG_START( msx2p, msx_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
- MCFG_SLOT_OPTION_ADD( "covox", CENTRONICS_COVOX )
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit1))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/mtx.c b/src/mess/drivers/mtx.c
index 73fcaa93082..de20eb19923 100644
--- a/src/mess/drivers/mtx.c
+++ b/src/mess/drivers/mtx.c
@@ -312,7 +312,7 @@ static MACHINE_CONFIG_START( mtx512, mtx_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("z80ctc_timer", mtx_state, ctc_tick, attotime::from_hz(XTAL_4MHz/13))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(mtx_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(mtx_state, write_centronics_fault))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(mtx_state, write_centronics_perror))
diff --git a/src/mess/drivers/mz700.c b/src/mess/drivers/mz700.c
index 636f2f9b066..335e595377f 100644
--- a/src/mess/drivers/mz700.c
+++ b/src/mess/drivers/mz700.c
@@ -406,7 +406,7 @@ static MACHINE_CONFIG_DERIVED( mz800, mz700 )
MCFG_Z80PIO_OUT_PA_CB(WRITE8(mz_state, mz800_z80pio_port_a_w))
MCFG_Z80PIO_OUT_PB_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/nc.c b/src/mess/drivers/nc.c
index a900f7fc83c..b023f6107ad 100644
--- a/src/mess/drivers/nc.c
+++ b/src/mess/drivers/nc.c
@@ -1423,7 +1423,7 @@ static MACHINE_CONFIG_START( nc100, nc_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(nc_state, write_nc100_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(nc_state, write_centronics_busy))
diff --git a/src/mess/drivers/oric.c b/src/mess/drivers/oric.c
index ffc1af80048..ad58d6d8346 100644
--- a/src/mess/drivers/oric.c
+++ b/src/mess/drivers/oric.c
@@ -793,7 +793,7 @@ static MACHINE_CONFIG_START( oric, oric_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("via6522", via6522_device, write_ca1))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/pasogo.c b/src/mess/drivers/pasogo.c
index de50b63ea2c..c2ad1c0218a 100644
--- a/src/mess/drivers/pasogo.c
+++ b/src/mess/drivers/pasogo.c
@@ -688,7 +688,7 @@ void pasogo_state::machine_reset()
m_u73_q2 = 0;
m_out1 = 2; // initial state of pit output is undefined
m_pc_spkrdata = 0;
- m_pit_out2 = 0;
+ m_pit_out2 = 1;
m_dma_channel = -1;
m_cur_eop = false;
}
diff --git a/src/mess/drivers/pc1512.c b/src/mess/drivers/pc1512.c
index 56f76a3c598..9bb0cdc52fc 100644
--- a/src/mess/drivers/pc1512.c
+++ b/src/mess/drivers/pc1512.c
@@ -1131,6 +1131,7 @@ void pc1512_state::machine_reset()
m_nmi_enable = 0;
m_toggle = 0;
m_kb_bits = 0;
+ m_pit2 = 1;
m_lpen = 0;
m_blink = 0;
@@ -1259,7 +1260,7 @@ static MACHINE_CONFIG_START( pc1512, pc1512_state )
MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts))
MCFG_INS8250_OUT_INT_CB(DEVWRITELINE(I8259A2_TAG, pic8259_device, ir4_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(pc1512_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(pc1512_state, write_centronics_busy))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(pc1512_state, write_centronics_perror))
@@ -1380,7 +1381,7 @@ static MACHINE_CONFIG_START( pc1640, pc1640_state )
MCFG_INS8250_OUT_INT_CB(DEVWRITELINE(I8259A2_TAG, pic8259_device, ir4_w))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(pc1512_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(pc1512_state, write_centronics_busy))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(pc1512_state, write_centronics_perror))
diff --git a/src/mess/drivers/pc8001.c b/src/mess/drivers/pc8001.c
index 2c827fea88a..e5f1f5b8b47 100644
--- a/src/mess/drivers/pc8001.c
+++ b/src/mess/drivers/pc8001.c
@@ -508,7 +508,7 @@ static MACHINE_CONFIG_START( pc8001, pc8001_state )
MCFG_UPD3301_DRAW_CHARACTER_CALLBACK_OWNER(pc8001_state, pc8001_display_pixels)
MCFG_UPD3301_VRTC_CALLBACK(DEVWRITELINE(I8257_TAG, i8257_device, dreq2_w))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(pc8001_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(pc8001_state, write_centronics_busy))
@@ -557,7 +557,7 @@ static MACHINE_CONFIG_START( pc8001mk2, pc8001mk2_state )
MCFG_UPD3301_DRAW_CHARACTER_CALLBACK_OWNER(pc8001_state, pc8001_display_pixels)
MCFG_UPD3301_VRTC_CALLBACK(DEVWRITELINE(I8257_TAG, i8257_device, dreq2_w))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/pc8801.c b/src/mess/drivers/pc8801.c
index a066caedd3b..5cc3c6fd1ac 100644
--- a/src/mess/drivers/pc8801.c
+++ b/src/mess/drivers/pc8801.c
@@ -2605,7 +2605,7 @@ static MACHINE_CONFIG_START( pc8801, pc8801_state )
MCFG_I8214_ADD(I8214_TAG, MASTER_CLOCK, pic_intf)
#endif
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL_32_768kHz, NULL, NULL)
- //MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ //MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED)
diff --git a/src/mess/drivers/pc9801.c b/src/mess/drivers/pc9801.c
index 3576ce68bd0..17bce6e5b1a 100644
--- a/src/mess/drivers/pc9801.c
+++ b/src/mess/drivers/pc9801.c
@@ -3349,9 +3349,12 @@ MACHINE_START_MEMBER(pc9801_state,pc9801rs)
{
address_space& space = m_maincpu->space(AS_PROGRAM);
membank("wram")->set_base(m_ram->pointer());
- space.install_read_bank(0x100000, 0x100000 + m_ram_size - 1, "ext_wram");
- space.install_write_bank(0x100000, 0x100000 + m_ram_size - 1, "ext_wram");
- membank("ext_wram")->set_base(m_ram->pointer() + 0xa0000);
+ if(m_ram_size)
+ {
+ space.install_read_bank(0x100000, 0x100000 + m_ram_size - 1, "ext_wram");
+ space.install_write_bank(0x100000, 0x100000 + m_ram_size - 1, "ext_wram");
+ membank("ext_wram")->set_base(m_ram->pointer() + 0xa0000);
+ }
}
m_ide_rom = memregion("ide")->base();
diff --git a/src/mess/drivers/pencil2.c b/src/mess/drivers/pencil2.c
index bcffa59c4f8..4946b554489 100644
--- a/src/mess/drivers/pencil2.c
+++ b/src/mess/drivers/pencil2.c
@@ -304,7 +304,7 @@ static MACHINE_CONFIG_START( pencil2, pencil2_state )
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "pencil2_cart")
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(pencil2_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(pencil2_state, write_centronics_busy))
diff --git a/src/mess/drivers/phc25.c b/src/mess/drivers/phc25.c
index bb0a1d1f113..b58c20fda4f 100644
--- a/src/mess/drivers/phc25.c
+++ b/src/mess/drivers/phc25.c
@@ -322,7 +322,7 @@ static MACHINE_CONFIG_START( phc25, phc25_state )
MCFG_CASSETTE_FORMATS(phc25_cassette_formats)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(phc25_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/portfoli.c b/src/mess/drivers/portfoli.c
index 693c2784e47..8824d61dda9 100644
--- a/src/mess/drivers/portfoli.c
+++ b/src/mess/drivers/portfoli.c
@@ -838,7 +838,7 @@ static MACHINE_CONFIG_START( portfolio, portfolio_state )
MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_ctrl_out", output_latch_device, write))
MCFG_I8255_IN_PORTC_CB(DEVREAD8("cent_status_in", input_buffer_device, read))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit5))
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit4))
MCFG_CENTRONICS_FAULT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit3))
diff --git a/src/mess/drivers/prof180x.c b/src/mess/drivers/prof180x.c
index bb96eb6fe7c..39ecd968d0a 100644
--- a/src/mess/drivers/prof180x.c
+++ b/src/mess/drivers/prof180x.c
@@ -254,7 +254,7 @@ static MACHINE_CONFIG_START( prof180x, prof180x_state )
MCFG_FLOPPY_DRIVE_ADD(FDC9268_TAG ":3", prof180x_floppies, "35dd", floppy_image_device::default_floppy_formats)
//MCFG_RTC8583_ADD(MK3835_TAG, rtc_intf)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/psion.c b/src/mess/drivers/psion.c
index 9bc5bac3ee9..effe246f0f2 100644
--- a/src/mess/drivers/psion.c
+++ b/src/mess/drivers/psion.c
@@ -595,7 +595,7 @@ static MACHINE_CONFIG_START( psion_2lines, psion_state )
MCFG_PSION_DATAPACK_ADD("pack2")
/* Software lists */
- MCFG_SOFTWARE_LIST_ADD("pack_list", "psion")
+ MCFG_SOFTWARE_LIST_ADD("pack_list", "psion2")
MACHINE_CONFIG_END
/* basic configuration for 4 lines display */
@@ -624,6 +624,10 @@ static MACHINE_CONFIG_DERIVED_CLASS( psion1, psion_2lines, psion1_state )
MCFG_DEVICE_MODIFY("hd44780")
MCFG_HD44780_LCD_SIZE(1, 16)
MCFG_HD44780_PIXEL_UPDATE_CB(psion1_state::psion1_pixel_update)
+
+ /* Software lists */
+ MCFG_SOFTWARE_LIST_REMOVE("pack_list")
+ MCFG_SOFTWARE_LIST_ADD("pack_list", "psion1")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( psioncm, psion_2lines )
@@ -696,6 +700,8 @@ ROM_START( psionla )
ROMX_LOAD( "34-lag.rom", 0x8000, 0x8000, CRC(13a92c4b) SHA1(dab8bd6a41a5fd509c5ad4b0b0ab80d14f2c421a), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "v36", "LA v3.6")
ROMX_LOAD( "36-la.rom", 0x8000, 0x8000, CRC(7442c7f6) SHA1(94f15bd06bd750be70fa4a4ab588237c5a703f65), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(3, "v30", "LA v3.0")
+ ROMX_LOAD( "30-lahp.rom", 0x8000, 0x8000, CRC(50192528) SHA1(c556d53f70bf5ecae756b2ebfc6d954912316bbe), ROM_BIOS(4))
ROM_END
ROM_START( psionp200 )
diff --git a/src/mess/drivers/ptcsol.c b/src/mess/drivers/ptcsol.c
index 3d679182474..7de7d9b05be 100644
--- a/src/mess/drivers/ptcsol.c
+++ b/src/mess/drivers/ptcsol.c
@@ -747,22 +747,26 @@ static MACHINE_CONFIG_START( sol20, sol20_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) // cass2 speaker
// devices
- MCFG_CASSETTE_ADD( "cassette" )
+ MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_FORMATS(sol20_cassette_formats)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
+ MCFG_CASSETTE_INTERFACE("sol20_cass")
- MCFG_CASSETTE_ADD( "cassette2" )
+ MCFG_CASSETTE_ADD("cassette2")
MCFG_CASSETTE_FORMATS(sol20_cassette_formats)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
+ MCFG_CASSETTE_INTERFACE("sol20_cass")
- MCFG_DEVICE_ADD( "uart", AY31015, 0 )
+ MCFG_DEVICE_ADD("uart", AY31015, 0)
MCFG_AY31015_TX_CLOCK(4800.0)
MCFG_AY31015_RX_CLOCK(4800.0)
- MCFG_DEVICE_ADD( "uart_s", AY31015, 0 )
+ MCFG_DEVICE_ADD("uart_s", AY31015, 0)
MCFG_AY31015_TX_CLOCK(4800.0)
MCFG_AY31015_RX_CLOCK(4800.0)
MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
MCFG_GENERIC_KEYBOARD_CB(WRITE8(sol20_state, kbd_put))
+
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "sol20_cass")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mess/drivers/px4.c b/src/mess/drivers/px4.c
index 6ae0f078b18..12a94451bf4 100644
--- a/src/mess/drivers/px4.c
+++ b/src/mess/drivers/px4.c
@@ -19,9 +19,9 @@
#include "machine/ram.h"
#include "machine/nvram.h"
#include "sound/speaker.h"
-
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
+#include "coreutil.h"
#include "px4.lh"
@@ -31,28 +31,6 @@
#define VERBOSE 1
-// interrupt sources
-#define INT0_7508 0x01
-#define INT1_ART 0x02
-#define INT2_ICF 0x04
-#define INT3_OVF 0x08
-#define INT4_EXT 0x10
-
-// 7508 interrupt sources
-#define UPD7508_INT_ALARM 0x02
-#define UPD7508_INT_POWER_FAIL 0x04
-#define UPD7508_INT_7508_RESET 0x08
-#define UPD7508_INT_Z80_RESET 0x10
-#define UPD7508_INT_ONE_SECOND 0x20
-
-// art (asynchronous receiver transmitter)
-#define ART_TXRDY 0x01 // output buffer empty
-#define ART_RXRDY 0x02 // data byte received
-#define ART_TXEMPTY 0x04 // transmit buffer empty
-#define ART_PE 0x08 // parity error
-#define ART_OE 0x10 // overrun error
-#define ART_FE 0x20 // framing error
-
//**************************************************************************
// MACROS
@@ -67,8 +45,7 @@
// TYPE DEFINITIONS
//**************************************************************************
-class px4_state : public driver_device,
- public device_serial_interface
+class px4_state : public driver_device, public device_serial_interface
{
public:
px4_state(const machine_config &mconfig, device_type type, const char *tag) :
@@ -76,26 +53,139 @@ public:
device_serial_interface(mconfig, *this),
m_z80(*this, "maincpu"),
m_ram(*this, RAM_TAG),
+ m_nvram(*this, "nvram"),
m_centronics(*this, "centronics"),
m_ext_cas(*this, "extcas"),
m_ext_cas_timer(*this, "extcas_timer"),
m_speaker(*this, "speaker"),
m_sio(*this, "sio"),
m_rs232(*this, "rs232"),
- m_caps1(*this, "capsule1"),
- m_caps2(*this, "capsule2"),
- m_rdsocket(*this, "ramdisk_socket"),
+ m_caps1(*this, "capsule1"), m_caps2(*this, "capsule2"),
+ m_caps1_rom(NULL), m_caps2_rom(NULL),
+ m_ctrl1(0), m_icrb(0), m_bankr(0),
m_isr(0), m_ier(0), m_str(0), m_sior(0xbf),
+ m_frc_value(0), m_frc_latch(0),
+ m_vadr(0), m_yoff(0),
+ m_receive_timer(NULL), m_transmit_timer(NULL),
m_artdir(0xff), m_artdor(0xff), m_artsr(0), m_artcr(0),
m_swr(0),
m_one_sec_int_enabled(true), m_alarm_int_enabled(true), m_key_int_enabled(true),
- m_ramdisk_address(0),
- m_ear_last_state(0)
+ m_key_status(0), m_interrupt_status(0),
+ m_time(), m_clock_state(0),
+ m_ear_last_state(0),
+ m_sio_pin(0), m_serial_rx(0), m_rs232_dcd(0), m_rs232_cts(0),
+ m_centronics_busy(0), m_centronics_perror(0)
{ }
+ DECLARE_DRIVER_INIT( px4 );
+
+ DECLARE_PALETTE_INIT( px4 );
+ UINT32 screen_update_px4(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ DECLARE_READ8_MEMBER( icrlc_r );
+ DECLARE_WRITE8_MEMBER( ctrl1_w );
+ DECLARE_READ8_MEMBER( icrhc_r );
+ DECLARE_WRITE8_MEMBER( cmdr_w );
+ DECLARE_READ8_MEMBER( icrlb_r );
+ DECLARE_WRITE8_MEMBER( ctrl2_w );
+ DECLARE_READ8_MEMBER( icrhb_r );
+ DECLARE_READ8_MEMBER( isr_r );
+ DECLARE_WRITE8_MEMBER( ier_w );
+ DECLARE_READ8_MEMBER( str_r );
+ DECLARE_WRITE8_MEMBER( bankr_w );
+ DECLARE_READ8_MEMBER( sior_r );
+ DECLARE_WRITE8_MEMBER( sior_w );
+ DECLARE_WRITE8_MEMBER( vadr_w );
+ DECLARE_WRITE8_MEMBER( yoff_w );
+ DECLARE_WRITE8_MEMBER( fr_w );
+ DECLARE_WRITE8_MEMBER( spur_w );
+ DECLARE_READ8_MEMBER( ctgif_r );
+ DECLARE_WRITE8_MEMBER( ctgif_w );
+ DECLARE_READ8_MEMBER( artdir_r );
+ DECLARE_WRITE8_MEMBER( artdor_w );
+ DECLARE_READ8_MEMBER( artsr_r );
+ DECLARE_WRITE8_MEMBER( artmr_w );
+ DECLARE_READ8_MEMBER( iostr_r );
+ DECLARE_WRITE8_MEMBER( artcr_w );
+ DECLARE_WRITE8_MEMBER( swr_w );
+ DECLARE_WRITE8_MEMBER( ioctlr_w );
+
+ DECLARE_INPUT_CHANGED_MEMBER( key_callback );
+
+ TIMER_DEVICE_CALLBACK_MEMBER( ext_cassette_read );
+ TIMER_DEVICE_CALLBACK_MEMBER( frc_tick );
+ TIMER_DEVICE_CALLBACK_MEMBER( upd7508_1sec_callback );
+
+ // serial
+ DECLARE_WRITE_LINE_MEMBER( sio_rx_w );
+ DECLARE_WRITE_LINE_MEMBER( sio_pin_w );
+ DECLARE_WRITE_LINE_MEMBER( rs232_rx_w );
+ DECLARE_WRITE_LINE_MEMBER( rs232_dcd_w );
+ DECLARE_WRITE_LINE_MEMBER( rs232_dsr_w );
+ DECLARE_WRITE_LINE_MEMBER( rs232_cts_w );
+ TIMER_CALLBACK_MEMBER( transmit_data );
+ TIMER_CALLBACK_MEMBER( receive_data );
+
+ // centronics
+ DECLARE_WRITE_LINE_MEMBER( centronics_busy_w ) { m_centronics_busy = state; }
+ DECLARE_WRITE_LINE_MEMBER( centronics_perror_w ) { m_centronics_perror = state; }
+
+protected:
+ // driver_device overrides
+ virtual void machine_start();
+ virtual void machine_reset();
+
+ // device_serial_interface overrides
+ virtual void tra_callback();
+ virtual void tra_complete();
+ virtual void rcv_callback();
+ virtual void rcv_complete();
+
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+
+private:
+ // z80 interrupt sources
+ enum
+ {
+ INT0_7508 = 0x01,
+ INT1_ART = 0x02,
+ INT2_ICF = 0x04,
+ INT3_OVF = 0x08,
+ INT4_EXT = 0x10
+ };
+
+ // 7508 interrupt sources
+ enum
+ {
+ UPD7508_INT_ALARM = 0x02,
+ UPD7508_INT_POWER_FAIL = 0x04,
+ UPD7508_INT_7508_RESET = 0x08,
+ UPD7508_INT_Z80_RESET = 0x10,
+ UPD7508_INT_ONE_SECOND = 0x20
+ };
+
+ // art (asynchronous receiver transmitter)
+ enum
+ {
+ ART_TXRDY = 0x01, // output buffer empty
+ ART_RXRDY = 0x02, // data byte received
+ ART_TXEMPTY = 0x04, // transmit buffer empty
+ ART_PE = 0x08, // parity error
+ ART_OE = 0x10, // overrun error
+ ART_FE = 0x20 // framing error
+ };
+
+ void gapnit_interrupt();
+
+ DECLARE_WRITE_LINE_MEMBER( serial_rx_w );
+ void txd_w(int data);
+
+ void install_rom_capsule(address_space &space, int size, memory_region *mem);
+
// internal devices
required_device<cpu_device> m_z80;
required_device<ram_device> m_ram;
+ required_device<nvram_device> m_nvram;
required_device<centronics_device> m_centronics;
required_device<cassette_image_device> m_ext_cas;
required_device<timer_device> m_ext_cas_timer;
@@ -104,7 +194,6 @@ public:
required_device<rs232_port_device> m_rs232;
required_device<generic_slot_device> m_caps1;
required_device<generic_slot_device> m_caps2;
- optional_device<generic_slot_device> m_rdsocket;
memory_region *m_caps1_rom;
memory_region *m_caps2_rom;
@@ -126,8 +215,6 @@ public:
UINT8 m_vadr;
UINT8 m_yoff;
- void gapnit_interrupt();
-
// gapnio
emu_timer *m_receive_timer;
emu_timer *m_transmit_timer;
@@ -137,8 +224,6 @@ public:
UINT8 m_artcr;
UINT8 m_swr;
- void txd_w(int data);
-
// 7508 internal
bool m_one_sec_int_enabled;
bool m_alarm_int_enabled;
@@ -147,90 +232,53 @@ public:
UINT8 m_key_status;
UINT8 m_interrupt_status;
- // external ramdisk
- offs_t m_ramdisk_address;
- UINT8 *m_ramdisk;
+ system_time m_time;
+ int m_clock_state;
// external cassette/barcode reader
int m_ear_last_state;
- void install_rom_capsule(address_space &space, int size, memory_region *mem);
-
- // device_serial_interface overrides
- virtual void tra_callback();
- virtual void tra_complete();
- virtual void rcv_callback();
- virtual void rcv_complete();
-
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
-
- DECLARE_WRITE_LINE_MEMBER( sio_rx_w );
- DECLARE_WRITE_LINE_MEMBER( sio_pin_w );
-
- DECLARE_WRITE_LINE_MEMBER( rs232_rx_w );
- DECLARE_WRITE_LINE_MEMBER( rs232_dcd_w );
- DECLARE_WRITE_LINE_MEMBER( rs232_dsr_w );
- DECLARE_WRITE_LINE_MEMBER( rs232_cts_w );
-
+ // serial
int m_sio_pin;
-
int m_serial_rx;
int m_rs232_dcd;
int m_rs232_cts;
- DECLARE_READ8_MEMBER(px4_icrlc_r);
- DECLARE_WRITE8_MEMBER(px4_ctrl1_w);
- DECLARE_READ8_MEMBER(px4_icrhc_r);
- DECLARE_WRITE8_MEMBER(px4_cmdr_w);
- DECLARE_READ8_MEMBER(px4_icrlb_r);
- DECLARE_WRITE8_MEMBER(px4_ctrl2_w);
- DECLARE_READ8_MEMBER(px4_icrhb_r);
- DECLARE_READ8_MEMBER(px4_isr_r);
- DECLARE_WRITE8_MEMBER(px4_ier_w);
- DECLARE_READ8_MEMBER(px4_str_r);
- DECLARE_WRITE8_MEMBER(px4_bankr_w);
- DECLARE_READ8_MEMBER(px4_sior_r);
- DECLARE_WRITE8_MEMBER(px4_sior_w);
- DECLARE_WRITE8_MEMBER(px4_vadr_w);
- DECLARE_WRITE8_MEMBER(px4_yoff_w);
- DECLARE_WRITE8_MEMBER(px4_fr_w);
- DECLARE_WRITE8_MEMBER(px4_spur_w);
- DECLARE_READ8_MEMBER(px4_ctgif_r);
- DECLARE_WRITE8_MEMBER(px4_ctgif_w);
- DECLARE_READ8_MEMBER(px4_artdir_r);
- DECLARE_WRITE8_MEMBER(px4_artdor_w);
- DECLARE_READ8_MEMBER(px4_artsr_r);
- DECLARE_WRITE8_MEMBER(px4_artmr_w);
- DECLARE_READ8_MEMBER(px4_iostr_r);
- DECLARE_WRITE8_MEMBER(px4_artcr_w);
- DECLARE_WRITE8_MEMBER(px4_swr_w);
- DECLARE_WRITE8_MEMBER(px4_ioctlr_w);
- DECLARE_WRITE8_MEMBER(px4_ramdisk_address_w);
- DECLARE_READ8_MEMBER(px4_ramdisk_data_r);
- DECLARE_WRITE8_MEMBER(px4_ramdisk_data_w);
- DECLARE_READ8_MEMBER(px4_ramdisk_control_r);
- DECLARE_DRIVER_INIT(px4);
- DECLARE_DRIVER_INIT(px4p);
- virtual void machine_start();
- virtual void machine_reset();
- DECLARE_PALETTE_INIT(px4);
- DECLARE_MACHINE_START(px4_ramdisk);
- DECLARE_PALETTE_INIT(px4p);
- UINT32 screen_update_px4(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_INPUT_CHANGED_MEMBER(key_callback);
- TIMER_DEVICE_CALLBACK_MEMBER( ext_cassette_read );
- TIMER_CALLBACK_MEMBER(transmit_data);
- TIMER_CALLBACK_MEMBER(receive_data);
- TIMER_DEVICE_CALLBACK_MEMBER(frc_tick);
- TIMER_DEVICE_CALLBACK_MEMBER(upd7508_1sec_callback);
-
+ // centronics
int m_centronics_busy;
int m_centronics_perror;
- DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
- DECLARE_WRITE_LINE_MEMBER(write_centronics_perror);
+};
+
+class px4p_state : public px4_state
+{
+public:
+ px4p_state(const machine_config &mconfig, device_type type, const char *tag) :
+ px4_state(mconfig, type, tag),
+ m_rdnvram(*this, "rdnvram"),
+ m_rdsocket(*this, "ramdisk_socket"),
+ m_ramdisk_address(0),
+ m_ramdisk(NULL)
+ { }
+
+ DECLARE_DRIVER_INIT( px4p );
+
+ DECLARE_PALETTE_INIT( px4p );
+
+ DECLARE_WRITE8_MEMBER( ramdisk_address_w );
+ DECLARE_READ8_MEMBER( ramdisk_data_r );
+ DECLARE_WRITE8_MEMBER( ramdisk_data_w );
+ DECLARE_READ8_MEMBER( ramdisk_control_r );
+
+protected:
+ // driver_device overrides
+ virtual void machine_start();
private:
- DECLARE_WRITE_LINE_MEMBER( serial_rx_w );
+ required_device<nvram_device> m_rdnvram;
+ required_device<generic_slot_device> m_rdsocket;
+
+ offs_t m_ramdisk_address;
+ UINT8 *m_ramdisk;
};
@@ -310,10 +358,10 @@ TIMER_DEVICE_CALLBACK_MEMBER( px4_state::frc_tick )
}
// input capture register low command trigger
-READ8_MEMBER( px4_state::px4_icrlc_r )
+READ8_MEMBER( px4_state::icrlc_r )
{
if (VERBOSE)
- logerror("%s: px4_icrlc_r\n", machine().describe_context());
+ logerror("%s: icrlc_r\n", machine().describe_context());
// latch value
m_frc_latch = m_frc_value;
@@ -322,13 +370,13 @@ READ8_MEMBER( px4_state::px4_icrlc_r )
}
// control register 1
-WRITE8_MEMBER( px4_state::px4_ctrl1_w )
+WRITE8_MEMBER( px4_state::ctrl1_w )
{
const int rcv_rates[] = { 110, 150, 300, 600, 1200, 2400, 4800, 9600, 75, 1200, 19200, 38400, 200 };
const int tra_rates[] = { 110, 150, 300, 600, 1200, 2400, 4800, 9600, 1200, 75, 19200, 38400, 200 };
if (VERBOSE)
- logerror("%s: px4_ctrl1_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: ctrl1_w (0x%02x)\n", machine().describe_context(), data);
// baudrate generator
int baud = data >> 4;
@@ -346,19 +394,19 @@ WRITE8_MEMBER( px4_state::px4_ctrl1_w )
}
// input capture register high command trigger
-READ8_MEMBER( px4_state::px4_icrhc_r )
+READ8_MEMBER( px4_state::icrhc_r )
{
if (VERBOSE)
- logerror("%s: px4_icrhc_r\n", machine().describe_context());
+ logerror("%s: icrhc_r\n", machine().describe_context());
return (m_frc_latch >> 8) & 0xff;
}
// command register
-WRITE8_MEMBER( px4_state::px4_cmdr_w )
+WRITE8_MEMBER( px4_state::cmdr_w )
{
if (0)
- logerror("%s: px4_cmdr_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: cmdr_w (0x%02x)\n", machine().describe_context(), data);
// clear overflow interrupt?
if (BIT(data, 2))
@@ -369,19 +417,19 @@ WRITE8_MEMBER( px4_state::px4_cmdr_w )
}
// input capture register low barcode trigger
-READ8_MEMBER( px4_state::px4_icrlb_r )
+READ8_MEMBER( px4_state::icrlb_r )
{
if (VERBOSE)
- logerror("%s: px4_icrlb_r\n", machine().describe_context());
+ logerror("%s: icrlb_r\n", machine().describe_context());
return m_icrb & 0xff;
}
// control register 2
-WRITE8_MEMBER( px4_state::px4_ctrl2_w )
+WRITE8_MEMBER( px4_state::ctrl2_w )
{
if (VERBOSE)
- logerror("%s: px4_ctrl2_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: ctrl2_w (0x%02x)\n", machine().describe_context(), data);
// bit 0, MIC, cassette output
m_ext_cas->output( BIT(data, 0) ? -1.0 : +1.0);
@@ -400,10 +448,10 @@ WRITE8_MEMBER( px4_state::px4_ctrl2_w )
}
// input capture register high barcode trigger
-READ8_MEMBER( px4_state::px4_icrhb_r )
+READ8_MEMBER( px4_state::icrhb_r )
{
if (VERBOSE)
- logerror("%s: px4_icrhb_r\n", machine().describe_context());
+ logerror("%s: icrhb_r\n", machine().describe_context());
// clear icf interrupt
m_isr &= ~INT2_ICF;
@@ -413,31 +461,31 @@ READ8_MEMBER( px4_state::px4_icrhb_r )
}
// interrupt status register
-READ8_MEMBER( px4_state::px4_isr_r )
+READ8_MEMBER( px4_state::isr_r )
{
if (VERBOSE)
- logerror("%s: px4_isr_r\n", machine().describe_context());
+ logerror("%s: isr_r\n", machine().describe_context());
return m_isr;
}
// interrupt enable register
-WRITE8_MEMBER( px4_state::px4_ier_w )
+WRITE8_MEMBER( px4_state::ier_w )
{
if (0)
- logerror("%s: px4_ier_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: ier_w (0x%02x)\n", machine().describe_context(), data);
m_ier = data;
gapnit_interrupt();
}
// status register
-READ8_MEMBER( px4_state::px4_str_r )
+READ8_MEMBER( px4_state::str_r )
{
UINT8 data = 0;
if (0)
- logerror("%s: px4_str_r\n", machine().describe_context());
+ logerror("%s: str_r\n", machine().describe_context());
data |= (m_ext_cas)->input() > 0 ? 1 : 0;
data |= 1 << 1; // BCRD, barcode reader input
@@ -467,12 +515,12 @@ void px4_state::install_rom_capsule(address_space &space, int size, memory_regio
}
// bank register
-WRITE8_MEMBER( px4_state::px4_bankr_w )
+WRITE8_MEMBER( px4_state::bankr_w )
{
address_space &space_program = m_z80->space(AS_PROGRAM);
if (0)
- logerror("%s: px4_bankr_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: bankr_w (0x%02x)\n", machine().describe_context(), data);
m_bankr = data;
@@ -505,136 +553,198 @@ WRITE8_MEMBER( px4_state::px4_bankr_w )
}
// serial io register
-READ8_MEMBER( px4_state::px4_sior_r )
+READ8_MEMBER( px4_state::sior_r )
{
if (0)
- logerror("%s: px4_sior_r 0x%02x\n", machine().describe_context(), m_sior);
+ logerror("%s: sior_r 0x%02x\n", machine().describe_context(), m_sior);
+
+ // reading clock?
+ if (m_clock_state > 0)
+ {
+ switch (m_clock_state++)
+ {
+ case 1: m_sior = (dec_2_bcd(m_time.local_time.year) >> 4) & 0xf; break;
+ case 2: m_sior = dec_2_bcd(m_time.local_time.year) & 0xf; break;
+ case 3: m_sior = dec_2_bcd(m_time.local_time.month + 1); break;
+ case 4: m_sior = dec_2_bcd(m_time.local_time.mday); break;
+ case 5: m_sior = dec_2_bcd(m_time.local_time.hour); break;
+ case 6: m_sior = dec_2_bcd(m_time.local_time.minute); break;
+ case 7: m_sior = dec_2_bcd(m_time.local_time.second); break;
+ case 8: m_sior = dec_2_bcd(m_time.local_time.weekday); break;
+ }
+
+ // done?
+ if (m_clock_state == 9)
+ m_clock_state = 0;
+ }
return m_sior;
}
// serial io register
-WRITE8_MEMBER( px4_state::px4_sior_w )
+WRITE8_MEMBER( px4_state::sior_w )
{
if (0)
- logerror("%s: px4_sior_w (0x%02x)\n", machine().describe_context(), data);
-
- m_sior = data;
+ logerror("%s: sior_w (0x%02x)\n", machine().describe_context(), data);
- switch (data)
+ // writing clock?
+ if (m_clock_state > 0)
{
- case 0x01:
-
- if (VERBOSE)
- logerror("7508 cmd: Power OFF\n");
+ time_t time = m_time.time;
+ struct tm *t = localtime(&time);
- break;
+ switch (m_clock_state++)
+ {
+ case 1:
+ {
+ int year = dec_2_bcd(m_time.local_time.year);
+ year = (year & 0xff0f) | ((data & 0xf) << 4);
+ t->tm_year = bcd_2_dec(year) - 1900;
+ }
+ break;
+ case 2:
+ {
+ int year = dec_2_bcd(m_time.local_time.year);
+ year = (year & 0xfff0) | (data & 0xf);
+ t->tm_year = bcd_2_dec(year) - 1900;
+ }
+ break;
+ case 3: t->tm_mon = bcd_2_dec(data & 0x7f) - 1; break;
+ case 4: t->tm_mday = bcd_2_dec(data & 0x7f); break;
+ case 5: t->tm_hour = bcd_2_dec(data & 0x7f); break;
+ case 6: t->tm_min = bcd_2_dec(data & 0x7f); break;
+ case 7: t->tm_sec = bcd_2_dec(data & 0x7f); break;
+ case 8: t->tm_wday = bcd_2_dec(data & 0x7f); break;
+ }
- case 0x02:
+ // update
+ m_time.set(mktime(t));
- if (VERBOSE)
- logerror("7508 cmd: Read Status\n");
+ // done?
+ if (m_clock_state == 9)
+ m_clock_state = 0;
+ }
+ else
+ {
+ m_sior = data;
- if (m_interrupt_status != 0)
+ switch (data)
{
+ case 0x01:
if (VERBOSE)
- logerror("> 7508 has interrupts pending: 0x%02x\n", m_interrupt_status);
+ logerror("7508 cmd: Power OFF\n");
- // signal the interrupt(s)
- m_sior = 0xc1 | m_interrupt_status;
- m_interrupt_status = 0x00;
- }
- else if (m_key_status != 0xff)
- {
- m_sior = m_key_status;
- m_key_status = 0xff;
- }
- else
- {
- // nothing happened
- m_sior = 0xbf;
- }
-
- break;
+ break;
- case 0x03: if (VERBOSE) logerror("7508 cmd: KB Reset\n"); break;
- case 0x04: if (VERBOSE) logerror("7508 cmd: KB Repeat Timer 1 Set\n"); break;
- case 0x14: if (VERBOSE) logerror("7508 cmd: KB Repeat Timer 2 Set\n"); break;
- case 0x24: if (VERBOSE) logerror("7508 cmd: KB Repeat Timer 1 Read\n"); break;
- case 0x34: if (VERBOSE) logerror("7508 cmd: KB Repeat Timer 2 Read\n"); break;
- case 0x05: if (VERBOSE) logerror("7508 cmd: KB Repeat OFF\n"); break;
- case 0x15: if (VERBOSE) logerror("7508 cmd: KB Repeat ON\n"); break;
+ case 0x02:
+ if (VERBOSE)
+ logerror("7508 cmd: Read Status\n");
- case 0x06:
+ if (m_interrupt_status != 0)
+ {
+ if (VERBOSE)
+ logerror("> 7508 has interrupts pending: 0x%02x\n", m_interrupt_status);
- if (VERBOSE)
- logerror("7508 cmd: KB Interrupt OFF\n");
+ // signal the interrupt(s)
+ m_sior = 0xc1 | m_interrupt_status;
+ m_interrupt_status = 0x00;
+ }
+ else if (m_key_status != 0xff)
+ {
+ m_sior = m_key_status;
+ m_key_status = 0xff;
+ }
+ else
+ {
+ // nothing happened
+ m_sior = 0xbf;
+ }
- m_key_int_enabled = false;
- break;
+ break;
- case 0x16:
+ case 0x03: if (VERBOSE) logerror("7508 cmd: KB Reset\n"); break;
+ case 0x04: if (VERBOSE) logerror("7508 cmd: KB Repeat Timer 1 Set\n"); break;
+ case 0x14: if (VERBOSE) logerror("7508 cmd: KB Repeat Timer 2 Set\n"); break;
+ case 0x24: if (VERBOSE) logerror("7508 cmd: KB Repeat Timer 1 Read\n"); break;
+ case 0x34: if (VERBOSE) logerror("7508 cmd: KB Repeat Timer 2 Read\n"); break;
+ case 0x05: if (VERBOSE) logerror("7508 cmd: KB Repeat OFF\n"); break;
+ case 0x15: if (VERBOSE) logerror("7508 cmd: KB Repeat ON\n"); break;
- if (VERBOSE)
- logerror("7508 cmd: KB Interrupt ON\n");
+ case 0x06:
+ if (VERBOSE)
+ logerror("7508 cmd: KB Interrupt OFF\n");
- m_key_int_enabled = true;
- break;
+ m_key_int_enabled = false;
+ break;
- case 0x07: if (VERBOSE) logerror("7508 cmd: Clock Read\n"); break;
- case 0x17: if (VERBOSE) logerror("7508 cmd: Clock Write\n"); break;
+ case 0x16:
+ if (VERBOSE)
+ logerror("7508 cmd: KB Interrupt ON\n");
- case 0x08:
+ m_key_int_enabled = true;
+ break;
- if (VERBOSE)
- logerror("7508 cmd: Power Switch Read\n");
+ case 0x07:
+ if (VERBOSE)
+ logerror("7508 cmd: Clock Read\n");
- // indicate that the power switch is in the "ON" position
- m_sior = 0x01;
- break;
+ m_clock_state = 1;
+ break;
- case 0x09: if (VERBOSE) logerror("7508 cmd: Alarm Read\n"); break;
- case 0x19: if (VERBOSE) logerror("7508 cmd: Alarm Set\n"); break;
- case 0x29: if (VERBOSE) logerror("7508 cmd: Alarm OFF\n"); break;
- case 0x39: if (VERBOSE) logerror("7508 cmd: Alarm ON\n"); break;
+ case 0x17:
+ if (VERBOSE)
+ logerror("7508 cmd: Clock Write\n");
- case 0x0a:
+ m_clock_state = 1;
+ break;
- if (VERBOSE)
- logerror("7508 cmd: DIP Switch Read\n");
- m_sior = ioport("dips")->read();
- break;
+ case 0x08:
+ if (VERBOSE)
+ logerror("7508 cmd: Power Switch Read\n");
- case 0x0b: if (VERBOSE) logerror("7508 cmd: Stop Key Interrupt disable\n"); break;
- case 0x1b: if (VERBOSE) logerror("7508 cmd: Stop Key Interrupt enable\n"); break;
- case 0x0c: if (VERBOSE) logerror("7508 cmd: 7 chr. Buffer\n"); break;
- case 0x1c: if (VERBOSE) logerror("7508 cmd: 1 chr. Buffer\n"); break;
+ // indicate that the power switch is in the "ON" position
+ m_sior = 0x01;
+ break;
- case 0x0d:
+ case 0x09: if (VERBOSE) logerror("7508 cmd: Alarm Read\n"); break;
+ case 0x19: if (VERBOSE) logerror("7508 cmd: Alarm Set\n"); break;
+ case 0x29: if (VERBOSE) logerror("7508 cmd: Alarm OFF\n"); break;
+ case 0x39: if (VERBOSE) logerror("7508 cmd: Alarm ON\n"); break;
- if (VERBOSE)
- logerror("7508 cmd: 1 sec. Interrupt OFF\n");
+ case 0x0a:
+ if (VERBOSE)
+ logerror("7508 cmd: DIP Switch Read\n");
+ m_sior = ioport("dips")->read();
+ break;
- m_one_sec_int_enabled = false;
- break;
+ case 0x0b: if (VERBOSE) logerror("7508 cmd: Stop Key Interrupt disable\n"); break;
+ case 0x1b: if (VERBOSE) logerror("7508 cmd: Stop Key Interrupt enable\n"); break;
+ case 0x0c: if (VERBOSE) logerror("7508 cmd: 7 chr. Buffer\n"); break;
+ case 0x1c: if (VERBOSE) logerror("7508 cmd: 1 chr. Buffer\n"); break;
- case 0x1d:
+ case 0x0d:
+ if (VERBOSE)
+ logerror("7508 cmd: 1 sec. Interrupt OFF\n");
- if (VERBOSE)
- logerror("7508 cmd: 1 sec. Interrupt ON\n");
+ m_one_sec_int_enabled = false;
+ break;
- m_one_sec_int_enabled = true;
- break;
+ case 0x1d:
+ if (VERBOSE)
+ logerror("7508 cmd: 1 sec. Interrupt ON\n");
- case 0x0e:
+ m_one_sec_int_enabled = true;
+ break;
- if (VERBOSE)
- logerror("7508 cmd: KB Clear\n");
+ case 0x0e:
+ if (VERBOSE)
+ logerror("7508 cmd: KB Clear\n");
- m_sior = 0xbf;
- break;
+ m_sior = 0xbf;
+ break;
- case 0x0f: if (VERBOSE) logerror("7508 cmd: System Reset\n"); break;
+ case 0x0f: if (VERBOSE) logerror("7508 cmd: System Reset\n"); break;
+ }
}
}
@@ -644,35 +754,35 @@ WRITE8_MEMBER( px4_state::px4_sior_w )
//**************************************************************************
// vram start address register
-WRITE8_MEMBER( px4_state::px4_vadr_w )
+WRITE8_MEMBER( px4_state::vadr_w )
{
if (VERBOSE)
- logerror("%s: px4_vadr_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: vadr_w (0x%02x)\n", machine().describe_context(), data);
m_vadr = data;
}
// y offset register
-WRITE8_MEMBER( px4_state::px4_yoff_w )
+WRITE8_MEMBER( px4_state::yoff_w )
{
if (VERBOSE)
- logerror("%s: px4_yoff_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: yoff_w (0x%02x)\n", machine().describe_context(), data);
m_yoff = data;
}
// frame register
-WRITE8_MEMBER( px4_state::px4_fr_w )
+WRITE8_MEMBER( px4_state::fr_w )
{
if (VERBOSE)
- logerror("%s: px4_fr_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: fr_w (0x%02x)\n", machine().describe_context(), data);
}
// speed-up register
-WRITE8_MEMBER( px4_state::px4_spur_w )
+WRITE8_MEMBER( px4_state::spur_w )
{
if (VERBOSE)
- logerror("%s: px4_spur_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: spur_w (0x%02x)\n", machine().describe_context(), data);
}
@@ -728,21 +838,12 @@ void px4_state::tra_callback()
if (ART_TX_ENABLED)
{
if (ART_BREAK)
- {
- // transmit break
- txd_w(0);
- }
+ txd_w(0); // transmit break
else
- {
- // transmit data
- txd_w(transmit_register_get_data_bit());
- }
+ txd_w(transmit_register_get_data_bit()); // transmit data
}
else
- {
- // transmit mark
- txd_w(1);
- }
+ txd_w(1); // transmit mark
}
void px4_state::tra_complete()
@@ -763,10 +864,7 @@ void px4_state::tra_complete()
void px4_state::rcv_callback()
{
if (ART_RX_ENABLED)
- {
- // receive data
- receive_register_update_bit(m_serial_rx);
- }
+ receive_register_update_bit(m_serial_rx); // receive data
}
void px4_state::rcv_complete()
@@ -800,26 +898,26 @@ void px4_state::txd_w(int data)
}
// cartridge interface
-READ8_MEMBER( px4_state::px4_ctgif_r )
+READ8_MEMBER( px4_state::ctgif_r )
{
if (VERBOSE)
- logerror("%s: px4_ctgif_r @ 0x%02x\n", machine().describe_context(), offset);
+ logerror("%s: ctgif_r @ 0x%02x\n", machine().describe_context(), offset);
return 0x00;
}
// cartridge interface
-WRITE8_MEMBER( px4_state::px4_ctgif_w )
+WRITE8_MEMBER( px4_state::ctgif_w )
{
if (VERBOSE)
- logerror("%s: px4_ctgif_w (0x%02x @ 0x%02x)\n", machine().describe_context(), data, offset);
+ logerror("%s: ctgif_w (0x%02x @ 0x%02x)\n", machine().describe_context(), data, offset);
}
// art data input register
-READ8_MEMBER( px4_state::px4_artdir_r )
+READ8_MEMBER( px4_state::artdir_r )
{
if (VERBOSE)
- logerror("%s: px4_artdir_r (%02x)\n", machine().describe_context(), m_artdir);
+ logerror("%s: artdir_r (%02x)\n", machine().describe_context(), m_artdir);
// clear ready
m_artsr &= ~ART_RXRDY;
@@ -832,10 +930,10 @@ READ8_MEMBER( px4_state::px4_artdir_r )
}
// art data output register
-WRITE8_MEMBER( px4_state::px4_artdor_w )
+WRITE8_MEMBER( px4_state::artdor_w )
{
if (VERBOSE)
- logerror("%s: px4_artdor_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: artdor_w (0x%02x)\n", machine().describe_context(), data);
m_artdor = data;
@@ -853,16 +951,16 @@ WRITE8_MEMBER( px4_state::px4_artdor_w )
}
// art status register
-READ8_MEMBER( px4_state::px4_artsr_r )
+READ8_MEMBER( px4_state::artsr_r )
{
if (0)
- logerror("%s: px4_artsr_r (%02x)\n", machine().describe_context(), m_artsr);
+ logerror("%s: artsr_r (%02x)\n", machine().describe_context(), m_artsr);
return m_artsr;
}
// art mode register
-WRITE8_MEMBER( px4_state::px4_artmr_w )
+WRITE8_MEMBER( px4_state::artmr_w )
{
int data_bit_count = BIT(data, 2) ? 8 : 7;
parity_t parity = BIT(data, 4) ? (BIT(data, 5) ? PARITY_EVEN : PARITY_ODD) : PARITY_NONE;
@@ -874,18 +972,8 @@ WRITE8_MEMBER( px4_state::px4_artmr_w )
set_data_frame(1, data_bit_count, parity, stop_bits);
}
-WRITE_LINE_MEMBER( px4_state::write_centronics_busy )
-{
- m_centronics_busy = state;
-}
-
-WRITE_LINE_MEMBER( px4_state::write_centronics_perror )
-{
- m_centronics_perror = state;
-}
-
// io status register
-READ8_MEMBER( px4_state::px4_iostr_r )
+READ8_MEMBER( px4_state::iostr_r )
{
UINT8 data = 0;
@@ -907,16 +995,16 @@ READ8_MEMBER( px4_state::px4_iostr_r )
data |= 0 << 7; // bit 7, caud - audio input from cartridge
if (0)
- logerror("%s: px4_iostr_r: rx = %d, dcd = %d, cts = %d\n", machine().describe_context(), BIT(data, 3), BIT(data, 4), BIT(data, 5));
+ logerror("%s: iostr_r: rx = %d, dcd = %d, cts = %d\n", machine().describe_context(), BIT(data, 3), BIT(data, 4), BIT(data, 5));
return data;
}
// art command register
-WRITE8_MEMBER( px4_state::px4_artcr_w )
+WRITE8_MEMBER( px4_state::artcr_w )
{
if (VERBOSE)
- logerror("%s: px4_artcr_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: artcr_w (0x%02x)\n", machine().describe_context(), data);
m_artcr = data;
@@ -930,7 +1018,7 @@ WRITE8_MEMBER( px4_state::px4_artcr_w )
}
// switch register
-WRITE8_MEMBER( px4_state::px4_swr_w )
+WRITE8_MEMBER( px4_state::swr_w )
{
if (VERBOSE)
{
@@ -944,10 +1032,10 @@ WRITE8_MEMBER( px4_state::px4_swr_w )
}
// io control register
-WRITE8_MEMBER( px4_state::px4_ioctlr_w )
+WRITE8_MEMBER( px4_state::ioctlr_w )
{
if (VERBOSE)
- logerror("%s: px4_ioctlr_w (0x%02x)\n", machine().describe_context(), data);
+ logerror("%s: ioctlr_w (0x%02x)\n", machine().describe_context(), data);
m_centronics->write_strobe(!BIT(data, 0));
m_centronics->write_init(BIT(data, 1));
@@ -979,6 +1067,9 @@ TIMER_DEVICE_CALLBACK_MEMBER( px4_state::upd7508_1sec_callback )
m_isr |= INT0_7508;
gapnit_interrupt();
}
+
+ // update clock
+ m_time.set(m_time.time + 1);
}
INPUT_CHANGED_MEMBER( px4_state::key_callback )
@@ -1025,7 +1116,7 @@ INPUT_CHANGED_MEMBER( px4_state::key_callback )
// EXTERNAL RAM-DISK
//**************************************************************************
-WRITE8_MEMBER( px4_state::px4_ramdisk_address_w )
+WRITE8_MEMBER( px4p_state::ramdisk_address_w )
{
switch (offset)
{
@@ -1035,7 +1126,7 @@ WRITE8_MEMBER( px4_state::px4_ramdisk_address_w )
}
}
-READ8_MEMBER( px4_state::px4_ramdisk_data_r )
+READ8_MEMBER( px4p_state::ramdisk_data_r )
{
UINT8 ret = 0xff;
@@ -1055,7 +1146,7 @@ READ8_MEMBER( px4_state::px4_ramdisk_data_r )
return ret;
}
-WRITE8_MEMBER( px4_state::px4_ramdisk_data_w )
+WRITE8_MEMBER( px4p_state::ramdisk_data_w )
{
if (m_ramdisk_address < 0x20000)
m_ramdisk[m_ramdisk_address] = data;
@@ -1063,7 +1154,7 @@ WRITE8_MEMBER( px4_state::px4_ramdisk_data_w )
m_ramdisk_address = (m_ramdisk_address & 0xffff00) | ((m_ramdisk_address & 0xff) + 1);
}
-READ8_MEMBER( px4_state::px4_ramdisk_control_r )
+READ8_MEMBER( px4p_state::ramdisk_control_r )
{
// bit 7 determines the presence of a ram-disk
return 0x7f;
@@ -1127,7 +1218,7 @@ DRIVER_INIT_MEMBER( px4_state, px4 )
membank("bank2")->set_base(m_ram->pointer() + 0x8000);
}
-DRIVER_INIT_MEMBER( px4_state, px4p )
+DRIVER_INIT_MEMBER( px4p_state, px4p )
{
DRIVER_INIT_CALL(px4);
@@ -1140,19 +1231,24 @@ void px4_state::machine_start()
astring region_tag;
m_caps1_rom = memregion(region_tag.cpy(m_caps1->tag()).cat(GENERIC_ROM_REGION_TAG));
m_caps2_rom = memregion(region_tag.cpy(m_caps2->tag()).cat(GENERIC_ROM_REGION_TAG));
+
+ m_nvram->set_base(m_ram->pointer(), 0x10000);
+
+ // initialize clock
+ machine().base_datetime(m_time);
}
void px4_state::machine_reset()
{
- m_artsr = ART_TXRDY | ART_TXEMPTY;
+ m_artsr = ART_TXRDY | ART_TXEMPTY | (!m_rs232->dsr_r() << 7);
receive_register_reset();
transmit_register_reset();
}
-MACHINE_START_MEMBER( px4_state, px4_ramdisk )
+void px4p_state::machine_start()
{
px4_state::machine_start();
- machine().device<nvram_device>("nvram")->set_base(m_ramdisk, 0x20000);
+ m_rdnvram->set_base(m_ramdisk, 0x20000);
}
@@ -1169,36 +1265,36 @@ static ADDRESS_MAP_START( px4_io, AS_IO, 8, px4_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
// gapnit, 0x00-0x07
- AM_RANGE(0x00, 0x00) AM_READWRITE(px4_icrlc_r, px4_ctrl1_w)
- AM_RANGE(0x01, 0x01) AM_READWRITE(px4_icrhc_r, px4_cmdr_w)
- AM_RANGE(0x02, 0x02) AM_READWRITE(px4_icrlb_r, px4_ctrl2_w)
- AM_RANGE(0x03, 0x03) AM_READ(px4_icrhb_r)
- AM_RANGE(0x04, 0x04) AM_READWRITE(px4_isr_r, px4_ier_w)
- AM_RANGE(0x05, 0x05) AM_READWRITE(px4_str_r, px4_bankr_w)
- AM_RANGE(0x06, 0x06) AM_READWRITE(px4_sior_r, px4_sior_w)
+ AM_RANGE(0x00, 0x00) AM_READWRITE( icrlc_r, ctrl1_w )
+ AM_RANGE(0x01, 0x01) AM_READWRITE( icrhc_r, cmdr_w )
+ AM_RANGE(0x02, 0x02) AM_READWRITE( icrlb_r, ctrl2_w )
+ AM_RANGE(0x03, 0x03) AM_READ( icrhb_r )
+ AM_RANGE(0x04, 0x04) AM_READWRITE( isr_r, ier_w )
+ AM_RANGE(0x05, 0x05) AM_READWRITE( str_r, bankr_w )
+ AM_RANGE(0x06, 0x06) AM_READWRITE( sior_r, sior_w )
AM_RANGE(0x07, 0x07) AM_NOP
// gapndl, 0x08-0x0f
- AM_RANGE(0x08, 0x08) AM_WRITE(px4_vadr_w)
- AM_RANGE(0x09, 0x09) AM_WRITE(px4_yoff_w)
- AM_RANGE(0x0a, 0x0a) AM_WRITE(px4_fr_w)
- AM_RANGE(0x0b, 0x0b) AM_WRITE(px4_spur_w)
+ AM_RANGE(0x08, 0x08) AM_WRITE( vadr_w )
+ AM_RANGE(0x09, 0x09) AM_WRITE( yoff_w )
+ AM_RANGE(0x0a, 0x0a) AM_WRITE( fr_w )
+ AM_RANGE(0x0b, 0x0b) AM_WRITE( spur_w )
AM_RANGE(0x0c, 0x0f) AM_NOP
// gapnio, 0x10-0x1f
- AM_RANGE(0x10, 0x13) AM_READWRITE(px4_ctgif_r, px4_ctgif_w)
- AM_RANGE(0x14, 0x14) AM_READWRITE(px4_artdir_r, px4_artdor_w)
- AM_RANGE(0x15, 0x15) AM_READWRITE(px4_artsr_r, px4_artmr_w)
- AM_RANGE(0x16, 0x16) AM_READWRITE(px4_iostr_r, px4_artcr_w)
+ AM_RANGE(0x10, 0x13) AM_READWRITE( ctgif_r, ctgif_w )
+ AM_RANGE(0x14, 0x14) AM_READWRITE( artdir_r, artdor_w )
+ AM_RANGE(0x15, 0x15) AM_READWRITE( artsr_r, artmr_w )
+ AM_RANGE(0x16, 0x16) AM_READWRITE( iostr_r, artcr_w )
AM_RANGE(0x17, 0x17) AM_DEVWRITE("cent_data_out", output_latch_device, write)
- AM_RANGE(0x18, 0x18) AM_WRITE(px4_swr_w)
- AM_RANGE(0x19, 0x19) AM_WRITE(px4_ioctlr_w)
+ AM_RANGE(0x18, 0x18) AM_WRITE( swr_w )
+ AM_RANGE(0x19, 0x19) AM_WRITE( ioctlr_w )
AM_RANGE(0x1a, 0x1f) AM_NOP
ADDRESS_MAP_END
-static ADDRESS_MAP_START( px4p_io, AS_IO, 8, px4_state )
+static ADDRESS_MAP_START( px4p_io, AS_IO, 8, px4p_state )
AM_IMPORT_FROM(px4_io)
- AM_RANGE(0x90, 0x92) AM_WRITE(px4_ramdisk_address_w)
- AM_RANGE(0x93, 0x93) AM_READWRITE(px4_ramdisk_data_r, px4_ramdisk_data_w)
- AM_RANGE(0x94, 0x94) AM_READ(px4_ramdisk_control_r)
+ AM_RANGE(0x90, 0x92) AM_WRITE(ramdisk_address_w )
+ AM_RANGE(0x93, 0x93) AM_READWRITE(ramdisk_data_r, ramdisk_data_w )
+ AM_RANGE(0x94, 0x94) AM_READ(ramdisk_control_r)
ADDRESS_MAP_END
@@ -1361,13 +1457,13 @@ INPUT_PORTS_END
// PALETTE
//**************************************************************************
-PALETTE_INIT_MEMBER(px4_state, px4)
+PALETTE_INIT_MEMBER( px4_state, px4 )
{
palette.set_pen_color(0, rgb_t(138, 146, 148));
palette.set_pen_color(1, rgb_t(92, 83, 88));
}
-PALETTE_INIT_MEMBER(px4_state, px4p)
+PALETTE_INIT_MEMBER( px4p_state, px4p )
{
palette.set_pen_color(0, rgb_t(149, 157, 130));
palette.set_pen_color(1, rgb_t(92, 83, 88));
@@ -1408,11 +1504,12 @@ static MACHINE_CONFIG_START( px4, px4_state )
// internal ram
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("64k")
+ MCFG_NVRAM_ADD_NO_FILL("nvram")
// centronics printer
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
- MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(px4_state, write_centronics_busy))
- MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(px4_state, write_centronics_perror))
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
+ MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(px4_state, centronics_busy_w))
+ MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(px4_state, centronics_perror_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -1440,17 +1537,17 @@ static MACHINE_CONFIG_START( px4, px4_state )
// software list
MCFG_SOFTWARE_LIST_ADD("cart_list", "px4_cart")
+ MCFG_SOFTWARE_LIST_ADD("epson_cpm_list", "epson_cpm")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( px4p, px4 )
+static MACHINE_CONFIG_DERIVED_CLASS( px4p, px4, px4p_state )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(px4p_io)
- MCFG_MACHINE_START_OVERRIDE(px4_state, px4_ramdisk)
- MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_NVRAM_ADD_0FILL("rdnvram")
MCFG_PALETTE_MODIFY("palette")
- MCFG_PALETTE_INIT_OWNER(px4_state, px4p)
+ MCFG_PALETTE_INIT_OWNER(px4p_state, px4p)
MCFG_GENERIC_CARTSLOT_ADD("ramdisk_socket", generic_plain_slot, "px4_cart")
MACHINE_CONFIG_END
@@ -1464,7 +1561,10 @@ MACHINE_CONFIG_END
ROM_START( px4 )
ROM_REGION(0x8000, "os", 0)
- ROM_LOAD("m25122aa_po_px4.10c", 0x0000, 0x8000, CRC(62d60dc6) SHA1(3d32ec79a317de7c84c378302e95f48d56505502))
+ ROM_SYSTEM_BIOS(0, "default", "PX-4 OS ROM")
+ ROMX_LOAD("m25122aa_po_px4.10c", 0x0000, 0x8000, CRC(62d60dc6) SHA1(3d32ec79a317de7c84c378302e95f48d56505502), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "ramtest", "PX-4/PX-8 DRAM Test Ver. 1.0")
+ ROMX_LOAD("ramtest.10c", 0x0000, 0x8000, CRC(f8aced5f) SHA1(a5a2f398e602aa349c3636d6659dd0c7eaba07fb), ROM_BIOS(2))
ROM_REGION(0x1000, "slave", 0)
ROM_LOAD("upd7508.bin", 0x0000, 0x1000, NO_DUMP)
@@ -1472,7 +1572,10 @@ ROM_END
ROM_START( px4p )
ROM_REGION(0x8000, "os", 0)
- ROM_LOAD("b0_pxa.10c", 0x0000, 0x8000, CRC(d74b9ef5) SHA1(baceee076c12f5a16f7a26000e9bc395d021c455))
+ ROM_SYSTEM_BIOS(0, "default", "PX-4+ OS ROM")
+ ROMX_LOAD("b0_pxa.10c", 0x0000, 0x8000, CRC(d74b9ef5) SHA1(baceee076c12f5a16f7a26000e9bc395d021c455), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "ramtest", "PX-4/PX-8 DRAM Test Ver. 1.0")
+ ROMX_LOAD("ramtest.10c", 0x0000, 0x8000, CRC(f8aced5f) SHA1(a5a2f398e602aa349c3636d6659dd0c7eaba07fb), ROM_BIOS(2))
ROM_REGION(0x1000, "slave", 0)
ROM_LOAD("upd7508.bin", 0x0000, 0x1000, NO_DUMP)
@@ -1483,6 +1586,6 @@ ROM_END
// GAME DRIVERS
//**************************************************************************
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1985, px4, 0, 0, px4, px4_h450a, px4_state, px4, "Epson", "PX-4", 0 )
-COMP( 1985, px4p, px4, 0, px4p, px4_h450a, px4_state, px4p, "Epson", "PX-4+", 0 )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+COMP( 1985, px4, 0, 0, px4, px4_h450a, px4_state, px4, "Epson", "PX-4", 0 )
+COMP( 1985, px4p, px4, 0, px4p, px4_h450a, px4p_state, px4p, "Epson", "PX-4+", 0 )
diff --git a/src/mess/drivers/px8.c b/src/mess/drivers/px8.c
index 6ddc006949f..38403ae531a 100644
--- a/src/mess/drivers/px8.c
+++ b/src/mess/drivers/px8.c
@@ -801,6 +801,9 @@ static MACHINE_CONFIG_START( px8, px8_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("64K")
+
+ // software
+ MCFG_SOFTWARE_LIST_ADD("epson_cpm_list", "epson_cpm")
MACHINE_CONFIG_END
/***************************************************************************
diff --git a/src/mess/drivers/rmnimbus.c b/src/mess/drivers/rmnimbus.c
index e4e306feca9..3e7018ce246 100644
--- a/src/mess/drivers/rmnimbus.c
+++ b/src/mess/drivers/rmnimbus.c
@@ -178,7 +178,7 @@ static MACHINE_CONFIG_START( nimbus, rmnimbus_state )
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe))
MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE(MAINCPU_TAG, i80186_cpu_device, int3_w))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(VIA_TAG, via6522_device, write_ca1)) MCFG_DEVCB_INVERT
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/sage2.c b/src/mess/drivers/sage2.c
index 231b1e96536..e43cbef64c0 100644
--- a/src/mess/drivers/sage2.c
+++ b/src/mess/drivers/sage2.c
@@ -496,7 +496,7 @@ static MACHINE_CONFIG_START( sage2, sage2_state )
MCFG_UPD765A_ADD(UPD765_TAG, false, false)
MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(sage2_state, fdc_irq))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(sage2_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(sage2_state, write_centronics_busy))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(sage2_state, write_centronics_perror))
diff --git a/src/mess/drivers/samcoupe.c b/src/mess/drivers/samcoupe.c
index 216949cf53f..89b4fb29fde 100644
--- a/src/mess/drivers/samcoupe.c
+++ b/src/mess/drivers/samcoupe.c
@@ -543,12 +543,12 @@ static MACHINE_CONFIG_START( samcoupe, samcoupe_state )
MCFG_PALETTE_INIT_OWNER(samcoupe_state, samcoupe)
/* devices */
- MCFG_CENTRONICS_ADD("lpt1", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("lpt1", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(samcoupe_state, write_lpt1_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("lpt1_data_out", "lpt1")
- MCFG_CENTRONICS_ADD("lpt2", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("lpt2", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(samcoupe_state, write_lpt2_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("lpt2_data_out", "lpt2")
diff --git a/src/mess/drivers/sg1000.c b/src/mess/drivers/sg1000.c
index 48ec3a29026..9d0b818257f 100644
--- a/src/mess/drivers/sg1000.c
+++ b/src/mess/drivers/sg1000.c
@@ -855,7 +855,7 @@ static MACHINE_CONFIG_START( sf7000, sf7000_state )
MCFG_UPD765A_ADD(UPD765_TAG, false, false)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", sf7000_floppies, "3ssdd", sf7000_state::floppy_formats)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/sh4robot.c b/src/mess/drivers/sh4robot.c
index 9e8870144c5..bfbfa9c2d9b 100644
--- a/src/mess/drivers/sh4robot.c
+++ b/src/mess/drivers/sh4robot.c
@@ -88,4 +88,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT CONFIG COMPANY FULLNAME FLAGS */
-COMP( ????, sh4robot, 0, 0, sh4robot, sh4robot, driver_device, 0, "", "Robot", GAME_NOT_WORKING | GAME_NO_SOUND)
+COMP( 20??, sh4robot, 0, 0, sh4robot, sh4robot, driver_device, 0, "<unknown>", "Robot", GAME_NOT_WORKING | GAME_NO_SOUND)
diff --git a/src/mess/drivers/simon.c b/src/mess/drivers/simon.c
new file mode 100644
index 00000000000..31935390c9f
--- /dev/null
+++ b/src/mess/drivers/simon.c
@@ -0,0 +1,193 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/***************************************************************************
+
+ Milton Bradley Simon
+
+ Revision A hardware:
+ * TMS1000 (has internal ROM), DS75494 lamp driver
+
+ Newer revisions have a smaller 16-pin MB4850 chip instead of the TMS1000.
+ This one has been decapped too, but we couldn't yet find the internal ROM.
+
+ Other games assumed to be on similar hardware:
+ - Pocket Simon
+ - Super Simon
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/tms0980/tms0980.h"
+#include "sound/speaker.h"
+
+#include "simon.lh"
+
+// master clock is a single stage RC oscillator: R=33K, C=100pf,
+// according to the TMS 1000 series data manual this is around 350kHz
+#define SIMON_RC_CLOCK (350000)
+
+
+class simon_state : public driver_device
+{
+public:
+ simon_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_button_matrix(*this, "IN"),
+ m_speaker(*this, "speaker")
+ { }
+
+ required_device<cpu_device> m_maincpu;
+ required_ioport_array<4> m_button_matrix;
+ required_device<speaker_sound_device> m_speaker;
+
+ UINT16 m_r;
+
+ DECLARE_READ8_MEMBER(read_k);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_WRITE16_MEMBER(write_r);
+
+ virtual void machine_start();
+};
+
+
+/***************************************************************************
+
+ I/O
+
+***************************************************************************/
+
+READ8_MEMBER(simon_state::read_k)
+{
+ UINT8 k = 0;
+
+ // read selected button rows
+ for (int i = 0; i < 4; i++)
+ {
+ static int r[4] = { 0, 1, 2, 9 };
+ if (m_r & (1 << r[i]))
+ k |= m_button_matrix[i]->read();
+ }
+
+ return k;
+}
+
+WRITE16_MEMBER(simon_state::write_r)
+{
+ // R4-R8 go through an 75494 IC first:
+ // R4 -> 75494 IN6 -> green lamp
+ // R5 -> 75494 IN3 -> red lamp
+ // R6 -> 75494 IN5 -> yellow lamp
+ // R7 -> 75494 IN2 -> blue lamp
+ for (int i = 0; i < 4; i++)
+ output_set_lamp_value(i, data >> (4 + i) & 1);
+
+ // R8 -> 75494 IN0 -> speaker
+ m_speaker->level_w(data >> 8 & 1);
+
+ // R0,R1,R2,R9: input mux
+ // R3: GND
+ // other bits: N/C
+ m_r = data;
+}
+
+WRITE16_MEMBER(simon_state::write_o)
+{
+ // N/C
+}
+
+
+
+/***************************************************************************
+
+ Inputs
+
+***************************************************************************/
+
+static INPUT_PORTS_START( simon )
+ PORT_START("IN.0")
+ PORT_CONFNAME( 0x07, 0x02, "Game Select")
+ PORT_CONFSETTING( 0x02, "1" )
+ PORT_CONFSETTING( 0x01, "2" )
+ PORT_CONFSETTING( 0x04, "3" )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Green Button")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Red Button")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Yellow Button")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Blue Button")
+
+ PORT_START("IN.2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("Start")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Last")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Longest")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.3")
+ PORT_CONFNAME( 0x0f, 0x01, "Skill Level")
+ PORT_CONFSETTING( 0x02, "1" )
+ PORT_CONFSETTING( 0x04, "2" )
+ PORT_CONFSETTING( 0x08, "3" )
+ PORT_CONFSETTING( 0x01, "4" )
+INPUT_PORTS_END
+
+
+
+/***************************************************************************
+
+ Machine Config
+
+***************************************************************************/
+
+void simon_state::machine_start()
+{
+ m_r = 0;
+ save_item(NAME(m_r));
+}
+
+
+static const UINT16 simon_output_pla[0x20] =
+{
+ /* The output PLA just maps 1 2 4 8 and SL to O0-O4 */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
+};
+
+
+static MACHINE_CONFIG_START( simon, simon_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD( "maincpu", TMS1000, SIMON_RC_CLOCK )
+ MCFG_TMS1XXX_OUTPUT_PLA(simon_output_pla)
+ MCFG_TMS1XXX_READ_K(READ8(simon_state, read_k))
+ MCFG_TMS1XXX_WRITE_O(WRITE16(simon_state, write_o))
+ MCFG_TMS1XXX_WRITE_R(WRITE16(simon_state, write_r))
+
+ MCFG_DEFAULT_LAYOUT(layout_simon)
+
+ /* no video! */
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+ROM_START( simon )
+ ROM_REGION( 0x0800, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD( "tms1000.u1", 0x0000, 0x0400, CRC(9961719d) SHA1(35dddb018a8a2b31f377ab49c1f0cb76951b81c0) )
+ROM_END
+
+
+CONS( 1978, simon, 0, 0, simon, simon, driver_device, 0, "Milton Bradley", "Simon (Rev. A)", GAME_SUPPORTS_SAVE )
diff --git a/src/mess/drivers/sorcerer.c b/src/mess/drivers/sorcerer.c
index 05c320acf7b..976f65ebfde 100644
--- a/src/mess/drivers/sorcerer.c
+++ b/src/mess/drivers/sorcerer.c
@@ -426,8 +426,7 @@ static MACHINE_CONFIG_START( sorcerer, sorcerer_state )
MCFG_AY31015_RX_CLOCK(4800.0)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "covox")
- MCFG_SLOT_OPTION_ADD( "covox", CENTRONICS_COVOX )
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "covox")
/* The use of the parallel port as a general purpose port is not emulated.
Currently the only use is to read the printer status in the Centronics CENDRV bios routine. */
diff --git a/src/mess/drivers/spc1000.c b/src/mess/drivers/spc1000.c
index dcc8dafc4f3..d9791d912a4 100644
--- a/src/mess/drivers/spc1000.c
+++ b/src/mess/drivers/spc1000.c
@@ -25,7 +25,104 @@ NOTE: 2014-09-13: added code from someone's modified MESS driver for floppy
2014-10-11: Replaced above code with MESS-compliant code [Meeso Kim]
****************************************************************************/
-
+/*
+ * SAMSUNG SPC-1000 Series (info from zannylim)
+ *
+ * YEAR MODEL MainVideo PRT FDD
+ * ---- -------------- ------ ----- ------ -------
+ * 1982 SPC-1000 S68047 RGB buffer -
+ * 1983 SPC-1000 S68047 RF-TV buffer -
+ * 1983 SPC-1100 S68047 RF-TV - -
+ * 1983 SPC-1000/1100 MC6847 RF-TV direct support
+ * 1985 SPC-1000A MC6847 RF-TV direct support
+ *
+ * 2nd Video Display Processor type 1 : VDP UNIT (TMS9918 + 4KB VRAM) by staticsoft
+ * 2nd Video Display Processor type 2 : SOFT BOX (TMS9918 + 4KB VRAM with BIOS) by sammi computer
+ *
+ * Intelligence FDD : SD-725(2FDD, RS232C), SD-720(1FDD), SD-725A(2FDD), SD-725B(Desktop 2FDD, RS232C) - EPSON TF20 F100
+ * External FDD with Expansion slot : KWE-1000 by kyungwoo
+ *
+ * Network device : ISAM-1000 by samsung
+ *
+ * +---------PRT------RGB----TVRF--+ SPC-1000
+ * + +
+ * + ROM0 + CPU : Z80A (4MHz)
+ * + ROM1 + RAM : 64KB
+ * +-------+ ROM2 AY-3-8910 + VRAM : 6KB
+ * + SPC-1000 + VDG : AMI S68047 with TTL RGB output
+ * IPL + PSG : AY-3-8910
+ * RESET S68047 +
+ * + Z80A + Include Internal Data-recorder
+ * + ROM3 +
+ * + + ROM : 32KB (8KB x 4)
+ * +---------------------------------------+
+ *
+ * +---------PRT----VIDEO----TVRF--+ SPC-1000
+ * + +
+ * + ROM0 LM1889 + Support RF TV Support, but Removed RGB output
+ * + ROM1 +
+ * +-------+ ROM2 AY-3-8910 SPC-1000 +
+ * + 1100 +
+ * IPL +
+ * RESET S68047 +
+ * + Z80A +
+ * + ROM3 +
+ * + +
+ * +---------------------------------------+
+ *
+ * +----------------VIDEO----TVRF--+ SPC-1100
+ * + +
+ * + ROM0 LM1889 + Removed Printer port
+ * + ROM1 LM386(5V) +
+ * +-------+ ROM2 AY-3-8910 SPC-1000 +
+ * + 1100 +
+ * IPL +
+ * RESET S68047 +
+ * + Z80A +
+ * + ROM3 +
+ * + +
+ * +---------------------------------------+
+ *
+ * +---------PRT----VIDEO----TVRF--+ SPC-1000, SPC-1100
+ * + +
+ * + ROM0 MC1372 + New Video Display Generator : MC6847
+ * + ROM1 LM386(5V) +
+ * +-------+ ROM2 AY-3-8910 +
+ * + ROM3 SPC-1000/1100 +
+ * IPL +
+ * RESET MC6847 +
+ * + Z80A +
+ * + +
+ * + +
+ * +---------------------------------------+
+ *
+ * +---------PRT----VIDEO----TVRF--+ SPC-1000, SPC-1100
+ * + +
+ * + ROM0 S4 MC1372 + REV PCB No.839291
+ * + ROM1 LM386(5V) +
+ * +-------+ ROM2 AY-3-8910 + Add composite color on/off switch
+ * + ROM3 SPC-1000/1100 +
+ * IPL +
+ * RESET MC6847 +
+ * + Z80A +
+ * + +
+ * + +
+ * +---------------------------------------+
+ *
+ * +---------PRT----VIDEO----TVRF--+ SPC-1000A
+ * + +
+ * + ROM0 S4 MC1372 + Internal Data-recorder with Cassette Audio Player
+ * + ROM1 LM386(12V) + Add FDD auto detect
+ * +-------+ ROM2 AY-3-8910 + Remove IPL button
+ * + SPC-1000A ROM3 + Change DRAM refresh circuit
+ * IPL + Use 64K DRAM made by Samsung
+ * + MC6847 + Use TTL IC made by Goldstar
+ * + Z80A +
+ * + +
+ * + +
+ * +---------------------------------------+
+ *
+ */
#include "emu.h"
#include "cpu/z80/z80.h"
diff --git a/src/mess/drivers/specpls3.c b/src/mess/drivers/specpls3.c
index cc761d7a5c6..060dc14f926 100644
--- a/src/mess/drivers/specpls3.c
+++ b/src/mess/drivers/specpls3.c
@@ -382,7 +382,7 @@ static MACHINE_CONFIG_DERIVED( spectrum_plus3, spectrum_128 )
MCFG_FLOPPY_DRIVE_ADD("upd765:0", specpls3_floppies, "3ssdd", spectrum_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD("upd765:1", specpls3_floppies, "3ssdd", spectrum_state::floppy_formats)
- MCFG_SOFTWARE_LIST_ADD("flop_list","spectrum_flop")
+ MCFG_SOFTWARE_LIST_ADD("flop_list", "specpls3_flop")
MACHINE_CONFIG_END
/***************************************************************************
diff --git a/src/mess/drivers/spectrum.c b/src/mess/drivers/spectrum.c
index 5ecfdbb1ad6..163308645ff 100644
--- a/src/mess/drivers/spectrum.c
+++ b/src/mess/drivers/spectrum.c
@@ -708,14 +708,14 @@ MACHINE_CONFIG_START( spectrum_common, spectrum_state )
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED)
MCFG_CASSETTE_INTERFACE("spectrum_cass")
- MCFG_SOFTWARE_LIST_ADD("cass_list","spectrum_cass")
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "spectrum_cass")
/* cartridge */
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "spectrum_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_GENERIC_LOAD(spectrum_state, spectrum_cart)
- MCFG_SOFTWARE_LIST_ADD("cart_list","spectrum")
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "spectrum_cart")
MACHINE_CONFIG_END
MACHINE_CONFIG_DERIVED( spectrum, spectrum_common )
diff --git a/src/mess/drivers/super80.c b/src/mess/drivers/super80.c
index 64e1f53d250..8de4c417f13 100644
--- a/src/mess/drivers/super80.c
+++ b/src/mess/drivers/super80.c
@@ -719,7 +719,7 @@ static MACHINE_CONFIG_START( super80, super80_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit7))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -806,7 +806,7 @@ static MACHINE_CONFIG_START( super80v, super80_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit7))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/svi318.c b/src/mess/drivers/svi318.c
index d23b6bf8eef..cf3d933b7d5 100644
--- a/src/mess/drivers/svi318.c
+++ b/src/mess/drivers/svi318.c
@@ -165,7 +165,7 @@ static INPUT_PORTS_START( svi318 )
PORT_BIT (0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT (0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
PORT_BIT (0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Left Grph") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
- PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Rright Grph") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
+ PORT_BIT (0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Right Grph") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
PORT_BIT (0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
PORT_BIT (0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Stop") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END))
PORT_BIT (0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
@@ -295,7 +295,7 @@ static MACHINE_CONFIG_START( svi318, svi318_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(svi318_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -424,7 +424,7 @@ static MACHINE_CONFIG_START( svi328_806, svi318_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
/* printer */
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(svi318_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/tandy2k.c b/src/mess/drivers/tandy2k.c
index 1a9f00b1250..0d968645f03 100644
--- a/src/mess/drivers/tandy2k.c
+++ b/src/mess/drivers/tandy2k.c
@@ -844,7 +844,7 @@ static MACHINE_CONFIG_START( tandy2k, tandy2k_state )
MCFG_FLOPPY_DRIVE_ADD(I8272A_TAG ":0", tandy2k_floppies, "525qd", tandy2k_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(I8272A_TAG ":1", tandy2k_floppies, "525qd", tandy2k_state::floppy_formats)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(tandy2k_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(tandy2k_state, write_centronics_busy))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(tandy2k_state, write_centronics_perror))
diff --git a/src/mess/drivers/thomson.c b/src/mess/drivers/thomson.c
index 3db601fcccf..73fb92f245b 100644
--- a/src/mess/drivers/thomson.c
+++ b/src/mess/drivers/thomson.c
@@ -1451,7 +1451,7 @@ static MACHINE_CONFIG_DERIVED( to9, to7 )
MCFG_DEVICE_MODIFY("mc6846")
MCFG_MC6846_OUT_PORT_CB(WRITE8(thomson_state, to9_timer_port_out))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(thomson_state, write_centronics_busy))
/* internal ram */
@@ -1670,7 +1670,7 @@ static MACHINE_CONFIG_DERIVED( to8, to7 )
MCFG_PIA_CB2_HANDLER(NULL)
MCFG_PIA_IRQA_HANDLER(NULL)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(thomson_state, write_centronics_busy))
MCFG_DEVICE_MODIFY("mc6846")
@@ -1826,7 +1826,7 @@ static MACHINE_CONFIG_DERIVED( to9p, to7 )
MCFG_PIA_IRQA_HANDLER(NULL)
MCFG_PIA_IRQB_HANDLER(WRITELINE(thomson_state, thom_firq_1))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(thomson_state, write_centronics_busy))
MCFG_DEVICE_MODIFY("mc6846")
@@ -2176,7 +2176,7 @@ static MACHINE_CONFIG_DERIVED( mo6, to7 )
MCFG_PIA_WRITEPA_HANDLER(WRITE8(thomson_state, mo6_game_porta_out))
MCFG_PIA_CB2_HANDLER(WRITELINE(thomson_state, mo6_game_cb2_out))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(thomson_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
@@ -2416,7 +2416,7 @@ static MACHINE_CONFIG_DERIVED( mo5nr, to7 )
MCFG_DEVICE_MODIFY(THOM_PIA_GAME)
MCFG_PIA_WRITEPA_HANDLER(WRITE8(thomson_state, mo6_game_porta_out))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_DATA_INPUT_BUFFER("cent_data_in")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(thomson_state, write_centronics_busy))
diff --git a/src/mess/drivers/tiki100.c b/src/mess/drivers/tiki100.c
index 05dba98142a..ccc25745e70 100644
--- a/src/mess/drivers/tiki100.c
+++ b/src/mess/drivers/tiki100.c
@@ -686,7 +686,7 @@ static MACHINE_CONFIG_START( tiki100, tiki100_state )
MCFG_RS232_PORT_ADD(RS232_B_TAG, default_rs232_devices, NULL)
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(Z80DART_TAG, z80dart_device, rxb_w))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_DATA_INPUT_BUFFER("cent_data_in")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(tiki100_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(tiki100_state, write_centronics_busy))
diff --git a/src/mess/drivers/tmc600.c b/src/mess/drivers/tmc600.c
index a50d67264e9..ae535ff3240 100644
--- a/src/mess/drivers/tmc600.c
+++ b/src/mess/drivers/tmc600.c
@@ -267,7 +267,7 @@ static MACHINE_CONFIG_START( tmc600, tmc600_state )
MCFG_FRAGMENT_ADD(tmc600_video)
/* devices */
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
diff --git a/src/mess/drivers/trs80.c b/src/mess/drivers/trs80.c
index 56b42ee6376..606b9df4a45 100644
--- a/src/mess/drivers/trs80.c
+++ b/src/mess/drivers/trs80.c
@@ -601,7 +601,7 @@ static MACHINE_CONFIG_DERIVED( model1, trs80 ) // model I, level II
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(trs80_floppy_interface)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit7))
MCFG_CENTRONICS_PERROR_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit6))
MCFG_CENTRONICS_SELECT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit5))
diff --git a/src/mess/drivers/trs80m2.c b/src/mess/drivers/trs80m2.c
index e469e602790..4d18448d9c3 100644
--- a/src/mess/drivers/trs80m2.c
+++ b/src/mess/drivers/trs80m2.c
@@ -756,7 +756,7 @@ static MACHINE_CONFIG_START( trs80m2, trs80m2_state )
MCFG_Z80SIO0_ADD(Z80SIO_TAG, XTAL_8MHz/2, 0, 0, 0, 0)
MCFG_Z80DART_OUT_INT_CB(INPUTLINE(Z80_TAG, INPUT_LINE_IRQ0))
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(Z80PIO_TAG, z80pio_device, strobe_b))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(trs80m2_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(trs80m2_state, write_centronics_fault))
@@ -848,7 +848,7 @@ static MACHINE_CONFIG_START( trs80m16, trs80m16_state )
MCFG_PIC8259_ADD(AM9519A_TAG, INPUTLINE(M68000_TAG, M68K_IRQ_5), VCC, NULL )
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(Z80PIO_TAG, z80pio_device, strobe_b))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(trs80m2_state, write_centronics_busy))
MCFG_CENTRONICS_FAULT_HANDLER(WRITELINE(trs80m2_state, write_centronics_fault))
diff --git a/src/mess/drivers/tutor.c b/src/mess/drivers/tutor.c
index 4a437c9f950..67581c2834a 100644
--- a/src/mess/drivers/tutor.c
+++ b/src/mess/drivers/tutor.c
@@ -720,7 +720,7 @@ static MACHINE_CONFIG_START( tutor, tutor_state )
MCFG_SOUND_WAVE_ADD(WAVE_TAG, "cassette")
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(tutor_state, write_centronics_busy))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/tvc.c b/src/mess/drivers/tvc.c
index c588d8b084e..c1aa849e4eb 100644
--- a/src/mess/drivers/tvc.c
+++ b/src/mess/drivers/tvc.c
@@ -788,7 +788,7 @@ static MACHINE_CONFIG_START( tvc, tvc_state )
MCFG_TVC_SOUND_SNDINT_CALLBACK(WRITELINE(tvc_state, int_ff_set))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(tvc_state, centronics_ack))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
diff --git a/src/mess/drivers/v1050.c b/src/mess/drivers/v1050.c
index f6ca3a94d7f..06cb8b6a240 100644
--- a/src/mess/drivers/v1050.c
+++ b/src/mess/drivers/v1050.c
@@ -1129,7 +1129,7 @@ static MACHINE_CONFIG_START( v1050, v1050_state )
MCFG_SOFTWARE_LIST_ADD("hdd_list", "v1050_hdd")
// printer
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(v1050_state, write_centronics_busy))
MCFG_CENTRONICS_PERROR_HANDLER(WRITELINE(v1050_state, write_centronics_perror))
diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c
index 87e8122a879..9748c19b2c3 100644
--- a/src/mess/drivers/victor9k.c
+++ b/src/mess/drivers/victor9k.c
@@ -11,36 +11,6 @@
/*
- Sector format
- -------------
-
- Header sync
- Sector header (header ID, track ID, sector ID, and checksum)
- Gap 1
- Data Sync
- Data field (data sync, data ID, data bytes, and checksum)
- Gap 2
-
- Track format
- ------------
-
- ZONE LOWER HEAD UPPER HEAD SECTORS ROTATIONAL
- NUMBER TRACKS TRACKS PER TRACK PERIOD (MS)
-
- 0 0-3 unused 19 237.9
- 1 4-15 0-7 18 224.5
- 2 16-26 8-18 17 212.2
- 3 27-37 19-29 16 199.9
- 4 38-48 30-40 15 187.6
- 5 49-59 41-51 14 175.3
- 6 60-70 52-62 13 163.0
- 7 71-79 63-74 12 149.6
- 8 unused 75-79 11 144.0
-
-*/
-
-/*
-
TODO:
- floppy 8048
@@ -59,144 +29,6 @@
//**************************************************************************
-// READ/WRITE HANDLERS
-//**************************************************************************
-
-//-------------------------------------------------
-// floppy_p1_r -
-//-------------------------------------------------
-
-READ8_MEMBER( victor9k_state::floppy_p1_r )
-{
- /*
-
- bit description
-
- 0 L0MS0
- 1 L0MS1
- 2 L0MS2
- 3 L0MS3
- 4 L1MS0
- 5 L1MS1
- 6 L1MS2
- 7 L1MS3
-
- */
-
- return m_lms;
-}
-
-
-//-------------------------------------------------
-// floppy_p2_r -
-//-------------------------------------------------
-
-READ8_MEMBER( victor9k_state::floppy_p2_r )
-{
- /*
-
- bit description
-
- 0
- 1
- 2
- 3
- 4
- 5
- 6 RDY0
- 7 RDY1
-
- */
-
- UINT8 data = 0;
-
- data |= m_rdy0 << 6;
- data |= m_rdy1 << 7;
-
- return data;
-}
-
-
-//-------------------------------------------------
-// floppy_p2_w -
-//-------------------------------------------------
-
-WRITE8_MEMBER( victor9k_state::floppy_p2_w )
-{
- /*
-
- bit description
-
- 0 START0
- 1 STOP0
- 2 START1
- 3 STOP1
- 4 SEL1
- 5 SEL0
- 6
- 7
-
- */
-
- if (BIT(data, 0)) m_floppy0->mon_w(0);
- if (BIT(data, 1)) m_floppy0->mon_w(1);
- if (BIT(data, 2)) m_floppy1->mon_w(0);
- if (BIT(data, 3)) m_floppy1->mon_w(1);
-
- int sel0 = BIT(data, 5);
-
- if (m_sel0 && !sel0)
- {
- m_da0 = m_da;
- //m_floppy0->set_rpm();
- }
-
- m_sel0 = sel0;
-
- int sel1 = BIT(data, 4);
-
- if (m_sel1 && !sel1)
- {
- m_da1 = m_da;
- //m_floppy1->set_rpm();
- }
-
- m_sel1 = sel1;
-}
-
-
-//-------------------------------------------------
-// tach0_r -
-//-------------------------------------------------
-
-READ8_MEMBER( victor9k_state::tach0_r )
-{
- return m_tach0;
-}
-
-
-//-------------------------------------------------
-// tach1_r -
-//-------------------------------------------------
-
-READ8_MEMBER( victor9k_state::tach1_r )
-{
- return m_tach1;
-}
-
-
-//-------------------------------------------------
-// da_w -
-//-------------------------------------------------
-
-WRITE8_MEMBER( victor9k_state::da_w )
-{
- m_da = data;
-}
-
-
-
-//**************************************************************************
// ADDRESS MAPS
//**************************************************************************
@@ -206,36 +38,24 @@ WRITE8_MEMBER( victor9k_state::da_w )
static ADDRESS_MAP_START( victor9k_mem, AS_PROGRAM, 8, victor9k_state )
// AM_RANGE(0x00000, 0xdffff) AM_RAM
+ AM_RANGE(0x20000, 0xdffff) AM_NOP
AM_RANGE(0xe0000, 0xe0001) AM_DEVREADWRITE(I8259A_TAG, pic8259_device, read, write)
AM_RANGE(0xe0020, 0xe0023) AM_DEVREADWRITE(I8253_TAG, pit8253_device, read, write)
AM_RANGE(0xe0040, 0xe0043) AM_DEVREADWRITE(UPD7201_TAG, upd7201_device, cd_ba_r, cd_ba_w)
- AM_RANGE(0xe8000, 0xe8000) AM_DEVREADWRITE(HD46505S_TAG, mc6845_device, status_r, address_w)
- AM_RANGE(0xe8001, 0xe8001) AM_DEVREADWRITE(HD46505S_TAG, mc6845_device, register_r, register_w)
- AM_RANGE(0xe8020, 0xe802f) AM_DEVREADWRITE(M6522_1_TAG, via6522_device, read, write)
- AM_RANGE(0xe8040, 0xe804f) AM_DEVREADWRITE(M6522_2_TAG, via6522_device, read, write)
- AM_RANGE(0xe8060, 0xe8061) AM_DEVREADWRITE(MC6852_TAG, mc6852_device, read, write)
- AM_RANGE(0xe8080, 0xe808f) AM_DEVREADWRITE(M6522_3_TAG, via6522_device, read, write)
- AM_RANGE(0xe80a0, 0xe80af) AM_DEVREADWRITE(M6522_4_TAG, via6522_device, read, write)
- AM_RANGE(0xe80c0, 0xe80cf) AM_DEVREADWRITE(M6522_6_TAG, via6522_device, read, write)
- AM_RANGE(0xe80e0, 0xe80ef) AM_DEVREADWRITE(M6522_5_TAG, via6522_device, read, write)
+ AM_RANGE(0xe8000, 0xe8000) AM_MIRROR(0x7f00) AM_DEVREADWRITE(HD46505S_TAG, mc6845_device, status_r, address_w)
+ AM_RANGE(0xe8001, 0xe8001) AM_MIRROR(0x7f00) AM_DEVREADWRITE(HD46505S_TAG, mc6845_device, register_r, register_w)
+ AM_RANGE(0xe8020, 0xe802f) AM_MIRROR(0x7f00) AM_DEVREADWRITE(M6522_1_TAG, via6522_device, read, write)
+ AM_RANGE(0xe8040, 0xe804f) AM_MIRROR(0x7f00) AM_DEVREADWRITE(M6522_2_TAG, via6522_device, read, write)
+ AM_RANGE(0xe8060, 0xe8061) AM_MIRROR(0x7f00) AM_DEVREADWRITE(MC6852_TAG, mc6852_device, read, write)
+ AM_RANGE(0xe8080, 0xe808f) AM_MIRROR(0x7f00) AM_DEVREADWRITE(M6522_3_TAG, via6522_device, read, write)
+ AM_RANGE(0xe80a0, 0xe80af) AM_MIRROR(0x7f00) AM_DEVREADWRITE(FDC_TAG, victor_9000_fdc_t, cs5_r, cs5_w)
+ AM_RANGE(0xe80c0, 0xe80cf) AM_MIRROR(0x7f00) AM_DEVREADWRITE(FDC_TAG, victor_9000_fdc_t, cs6_r, cs6_w)
+ AM_RANGE(0xe80e0, 0xe80ef) AM_MIRROR(0x7f00) AM_DEVREADWRITE(FDC_TAG, victor_9000_fdc_t, cs7_r, cs7_w)
AM_RANGE(0xf0000, 0xf0fff) AM_MIRROR(0x1000) AM_RAM AM_SHARE("video_ram")
AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_REGION(I8088_TAG, 0)
ADDRESS_MAP_END
-//-------------------------------------------------
-// ADDRESS_MAP( floppy_io )
-//-------------------------------------------------
-
-static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor9k_state )
- AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP
- AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(floppy_p2_r, floppy_p2_w)
- AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r)
- AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r)
- AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(da_w)
-ADDRESS_MAP_END
-
-
//**************************************************************************
// INPUT PORTS
@@ -341,7 +161,7 @@ WRITE_LINE_MEMBER( victor9k_state::ssda_irq_w )
{
m_ssda_irq = state;
- m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_via4_irq || m_via5_irq || m_via6_irq);
+ m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_fdc_irq);
}
@@ -413,7 +233,7 @@ WRITE_LINE_MEMBER( victor9k_state::via1_irq_w )
{
m_via1_irq = state;
- m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_via4_irq || m_via5_irq || m_via6_irq);
+ m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_fdc_irq);
}
WRITE8_MEMBER( victor9k_state::via2_pa_w )
@@ -480,7 +300,7 @@ WRITE_LINE_MEMBER( victor9k_state::via2_irq_w )
{
m_via2_irq = state;
- m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_via4_irq || m_via5_irq || m_via6_irq);
+ m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_fdc_irq);
}
@@ -520,247 +340,7 @@ WRITE_LINE_MEMBER( victor9k_state::via3_irq_w )
{
m_via3_irq = state;
- m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_via4_irq || m_via5_irq || m_via6_irq);
-}
-
-
-WRITE8_MEMBER( victor9k_state::via4_pa_w )
-{
- /*
-
- bit description
-
- PA0 L0MS0
- PA1 L0MS1
- PA2 L0MS2
- PA3 L0MS3
- PA4 ST0A
- PA5 ST0B
- PA6 ST0C
- PA7 ST0D
-
- */
-
- m_lms = (m_lms & 0xf0) | (data & 0x0f);
- m_st[0] = data >> 4;
-}
-
-WRITE8_MEMBER( victor9k_state::via4_pb_w )
-{
- /*
-
- bit description
-
- PB0 L1MS0
- PB1 L1MS1
- PB2 L1MS2
- PB3 L1MS3
- PB4 ST1A
- PB5 ST1B
- PB6 ST1C
- PB7 ST1D
-
- */
-
- m_lms = (data << 4) | (m_lms & 0x0f);
- m_st[1] = data >> 4;
-}
-
-WRITE_LINE_MEMBER( victor9k_state::mode_w )
-{
-}
-
-WRITE_LINE_MEMBER( victor9k_state::via4_irq_w )
-{
- m_via4_irq = state;
-
- m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_via4_irq || m_via5_irq || m_via6_irq);
-}
-
-
-/*
-
- bit description
-
- PA0 E0
- PA1 E1
- PA2 I1
- PA3 E2
- PA4 E4
- PA5 E5
- PA6 I7
- PA7 E6
-
-*/
-
-WRITE8_MEMBER( victor9k_state::via5_pb_w )
-{
- /*
-
- bit description
-
- PB0 WD0
- PB1 WD1
- PB2 WD2
- PB3 WD3
- PB4 WD4
- PB5 WD5
- PB6 WD6
- PB7 WD7
-
- */
-}
-
-WRITE_LINE_MEMBER( victor9k_state::via5_irq_w )
-{
- m_via5_irq = state;
-
- m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_via4_irq || m_via5_irq || m_via6_irq);
-}
-
-
-READ8_MEMBER( victor9k_state::via6_pa_r )
-{
- /*
-
- bit description
-
- PA0
- PA1 _TRK0D0
- PA2
- PA3 _TRK0D1
- PA4
- PA5
- PA6 WPS
- PA7 _SYNC
-
- */
-
- UINT8 data = 0;
-
- // track 0 drive A sense
- data |= m_floppy0->trk00_r() << 1;
-
- // track 0 drive B sense
- data |= m_floppy1->trk00_r() << 3;
-
- // write protect sense
- data |= (m_drive ? m_floppy1->wpt_r() : m_floppy0->wpt_r()) << 6;
-
- // disk sync detect
- data |= m_sync << 7;
-
- return data;
-}
-
-WRITE8_MEMBER( victor9k_state::via6_pa_w )
-{
- /*
-
- bit description
-
- PA0 LED0A
- PA1
- PA2 LED1A
- PA3
- PA4 SIDE SELECT
- PA5 DRIVE SELECT
- PA6
- PA7
-
- */
-
- // LED, drive A
- output_set_led_value(LED_A, BIT(data, 0));
-
- // LED, drive B
- output_set_led_value(LED_B, BIT(data, 2));
-
- // dual side select
- m_side = BIT(data, 4);
-
- // select drive A/B
- m_drive = BIT(data, 5);
-}
-
-READ8_MEMBER( victor9k_state::via6_pb_r )
-{
- /*
-
- bit description
-
- PB0 RDY0
- PB1 RDY1
- PB2
- PB3 _DS1
- PB4 _DS0
- PB5 SINGLE/_DOUBLE SIDED
- PB6
- PB7
-
- */
-
- UINT8 data = 0;
-
- // motor speed status, drive A
- data |= m_rdy0;
-
- // motor speed status, drive B
- data |= m_rdy1 << 1;
-
- // door B sense
- data |= m_ds1 << 3;
-
- // door A sense
- data |= m_ds0 << 4;
-
- // single/double sided
- data |= (m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r()) << 5;
-
- return data;
-}
-
-WRITE8_MEMBER( victor9k_state::via6_pb_w )
-{
- /*
-
- bit description
-
- PB0
- PB1
- PB2 _SCRESET
- PB3
- PB4
- PB5
- PB6 STP0
- PB7 STP1
-
- */
-
- // motor speed controller reset
- if (!BIT(data, 2))
- m_fdc_cpu->reset();
-
- // stepper enable A
- m_stp[0] = BIT(data, 6);
-
- // stepper enable B
- m_stp[1] = BIT(data, 7);
-}
-
-WRITE_LINE_MEMBER( victor9k_state::drw_w )
-{
-}
-
-WRITE_LINE_MEMBER( victor9k_state::erase_w )
-{
-}
-
-WRITE_LINE_MEMBER( victor9k_state::via6_irq_w )
-{
- m_via6_irq = state;
-
- m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_via4_irq || m_via5_irq || m_via6_irq);
+ m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_fdc_irq);
}
@@ -770,6 +350,7 @@ WRITE_LINE_MEMBER( victor9k_state::via6_irq_w )
WRITE_LINE_MEMBER( victor9k_state::kbrdy_w )
{
+ //logerror("KBRDY %u\n", state);
m_via2->write_cb1(state);
m_pic->ir6_w(state ? CLEAR_LINE : ASSERT_LINE);
@@ -777,91 +358,51 @@ WRITE_LINE_MEMBER( victor9k_state::kbrdy_w )
WRITE_LINE_MEMBER( victor9k_state::kbdata_w )
{
+ //logerror("KBDATA %u\n", state);
m_via2->write_cb2(state);
m_via2->write_pa6(state);
}
-//-------------------------------------------------
-// SLOT_INTERFACE( victor9k_floppies )
-//-------------------------------------------------
-
-void victor9k_state::ready0_cb(floppy_image_device *device, int state)
-{
- m_rdy0 = state;
-
- m_via5->write_ca2(m_rdy0);
-}
-
-int victor9k_state::load0_cb(floppy_image_device *device)
-{
- m_ds0 = 0;
-
- m_via4->write_ca1(m_ds0);
-
- return IMAGE_INIT_PASS;
-}
-
-void victor9k_state::unload0_cb(floppy_image_device *device)
-{
- m_ds0 = 1;
-
- m_via4->write_ca1(m_ds0);
-}
-
-void victor9k_state::ready1_cb(floppy_image_device *device, int state)
-{
- m_rdy1 = state;
-
- m_via5->write_cb2(m_rdy1);
-}
-
-int victor9k_state::load1_cb(floppy_image_device *device)
-{
- m_ds1 = 0;
-
- m_via4->write_cb1(m_ds1);
-
- return IMAGE_INIT_PASS;
-}
-void victor9k_state::unload1_cb(floppy_image_device *device)
+WRITE_LINE_MEMBER( victor9k_state::fdc_irq_w )
{
- m_ds1 = 1;
+ m_fdc_irq = state;
- m_via4->write_cb1(m_ds1);
+ m_pic->ir3_w(m_ssda_irq || m_via1_irq || m_via2_irq || m_via3_irq || m_fdc_irq);
}
-static SLOT_INTERFACE_START( victor9k_floppies )
- SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
-SLOT_INTERFACE_END
-
//**************************************************************************
// MACHINE INITIALIZATION
//**************************************************************************
-//-------------------------------------------------
-// MACHINE_START( victor9k )
-//-------------------------------------------------
-
void victor9k_state::machine_start()
{
- // set floppy callbacks
- m_floppy0->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor9k_state::ready0_cb), this));
- m_floppy0->setup_load_cb(floppy_image_device::load_cb(FUNC(victor9k_state::load0_cb), this));
- m_floppy0->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor9k_state::unload0_cb), this));
- m_floppy1->setup_ready_cb(floppy_image_device::ready_cb(FUNC(victor9k_state::ready1_cb), this));
- m_floppy1->setup_load_cb(floppy_image_device::load_cb(FUNC(victor9k_state::load1_cb), this));
- m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor9k_state::unload1_cb), this));
+ // state saving
+ save_item(NAME(m_brt));
+ save_item(NAME(m_cont));
+ save_item(NAME(m_via1_irq));
+ save_item(NAME(m_via2_irq));
+ save_item(NAME(m_via3_irq));
+ save_item(NAME(m_fdc_irq));
+ save_item(NAME(m_ssda_irq));
// memory banking
address_space &program = m_maincpu->space(AS_PROGRAM);
program.install_ram(0x00000, m_ram->size() - 1, m_ram->pointer());
-
- m_via5->write_ca1(m_brdy);
- m_via6->write_ca1(m_gcrerr);
}
+void victor9k_state::machine_reset()
+{
+ m_maincpu->reset();
+ m_upd7201->reset();
+ m_ssda->reset();
+ m_via1->reset();
+ m_via2->reset();
+ m_via3->reset();
+ m_crtc->reset();
+ m_fdc->reset();
+}
//**************************************************************************
@@ -878,9 +419,6 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
MCFG_CPU_PROGRAM_MAP(victor9k_mem)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE(I8259A_TAG, pic8259_device, inta_cb)
- MCFG_CPU_ADD(I8048_TAG, I8048, XTAL_30MHz/6)
- MCFG_CPU_IO_MAP(floppy_io)
-
// video hardware
MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
MCFG_SCREEN_REFRESH_RATE(50)
@@ -952,27 +490,6 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor9k_state, via3_pb_w))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor9k_state, via3_irq_w))
- MCFG_DEVICE_ADD(M6522_4_TAG, VIA6522, XTAL_30MHz/30)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor9k_state, via4_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor9k_state, via4_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(victor9k_state, mode_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor9k_state, via4_irq_w))
-
- MCFG_DEVICE_ADD(M6522_5_TAG, VIA6522, XTAL_30MHz/30)
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor9k_state, via5_irq_w))
-
- MCFG_DEVICE_ADD(M6522_6_TAG, VIA6522, XTAL_30MHz/30)
- MCFG_VIA6522_READPA_HANDLER(READ8(victor9k_state, via6_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(victor9k_state, via6_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor9k_state, via6_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor9k_state, via6_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(victor9k_state, drw_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(victor9k_state, erase_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor9k_state, via6_irq_w))
-
- MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":0", victor9k_floppies, "525qd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":1", victor9k_floppies, "525qd", floppy_image_device::default_floppy_formats)
-
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, NULL)
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, rxa_w))
MCFG_RS232_DCD_HANDLER(DEVWRITELINE(UPD7201_TAG, z80dart_device, dcda_w))
@@ -991,6 +508,11 @@ static MACHINE_CONFIG_START( victor9k, victor9k_state )
MCFG_VICTOR9K_KBRDY_HANDLER(WRITELINE(victor9k_state, kbrdy_w))
MCFG_VICTOR9K_KBDATA_HANDLER(WRITELINE(victor9k_state, kbdata_w))
+ MCFG_DEVICE_ADD(FDC_TAG, VICTOR_9000_FDC, 0)
+ MCFG_VICTOR_9000_FDC_IRQ_CB(WRITELINE(victor9k_state, fdc_irq_w))
+ MCFG_VICTOR_9000_FDC_SYN_CB(DEVWRITELINE(I8259A_TAG, pic8259_device, ir0_w)) MCFG_DEVCB_XOR(1)
+ MCFG_VICTOR_9000_FDC_LBRDY_CB(INPUTLINE(I8088_TAG, INPUT_LINE_TEST)) MCFG_DEVCB_XOR(1)
+
// internal ram
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("128K")
@@ -1019,12 +541,6 @@ ROM_START( victor9k )
ROM_SYSTEM_BIOS( 1, "univ", "Universal" )
ROMX_LOAD( "v9000 univ. fe f3f7 13db.7j", 0x0000, 0x1000, CRC(25c7a59f) SHA1(8784e9aa7eb9439f81e18b8e223c94714e033911), ROM_BIOS(2) )
ROMX_LOAD( "v9000 univ. ff f3f7 39fe.8j", 0x1000, 0x1000, CRC(496c7467) SHA1(eccf428f62ef94ab85f4a43ba59ae6a066244a66), ROM_BIOS(2) )
-
- ROM_REGION( 0x400, I8048_TAG, 0)
- ROM_LOAD( "36080.5d", 0x000, 0x400, CRC(9bf49f7d) SHA1(b3a11bb65105db66ae1985b6f482aab6ea1da38b) )
-
- ROM_REGION( 0x800, "gcr", 0 )
- ROM_LOAD( "100836-001.4k", 0x000, 0x800, CRC(adc601bd) SHA1(6eeff3d2063ae2d97452101aa61e27ef83a467e5) )
ROM_END
diff --git a/src/mess/drivers/wangpc.c b/src/mess/drivers/wangpc.c
index f8373ea1a92..4e30a408ca2 100644
--- a/src/mess/drivers/wangpc.c
+++ b/src/mess/drivers/wangpc.c
@@ -1127,7 +1127,7 @@ static MACHINE_CONFIG_START( wangpc, wangpc_state )
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", wangpc_floppies, "525dd", wangpc_state::floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", wangpc_floppies, "525dd", wangpc_state::floppy_formats)
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_DATA_INPUT_BUFFER("cent_data_in")
MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(wangpc_state, write_centronics_ack))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(wangpc_state, write_centronics_busy))
diff --git a/src/mess/drivers/wswan.c b/src/mess/drivers/wswan.c
index a4c7c1ed4a2..23b113c7316 100644
--- a/src/mess/drivers/wswan.c
+++ b/src/mess/drivers/wswan.c
@@ -35,14 +35,14 @@
#include "wswan.lh"
static ADDRESS_MAP_START (wswan_mem, AS_PROGRAM, 8, wswan_state)
- AM_RANGE(0x00000, 0x03fff) AM_RAM // 16kb RAM / 4 colour tiles
+ AM_RANGE(0x00000, 0x03fff) AM_DEVREADWRITE("vdp", wswan_video_device, vram_r, vram_w) // 16kb RAM / 4 colour tiles
AM_RANGE(0x04000, 0x0ffff) AM_NOP // nothing
//AM_RANGE(0x10000, 0xeffff) // cart range, setup at machine_start
AM_RANGE(0xf0000, 0xfffff) AM_READ(bios_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START (wscolor_mem, AS_PROGRAM, 8, wswan_state)
- AM_RANGE(0x00000, 0x0ffff) AM_RAM // 16kb RAM / 4 colour tiles, 16 colour tiles + palettes
+ AM_RANGE(0x00000, 0x0ffff) AM_DEVREADWRITE("vdp", wswan_video_device, vram_r, vram_w) // 16kb RAM / 4 colour tiles, 16 colour tiles + palettes
//AM_RANGE(0x10000, 0xeffff) // cart range, setup at machine_start
AM_RANGE(0xf0000, 0xfffff) AM_READ(bios_r)
ADDRESS_MAP_END
@@ -83,7 +83,7 @@ PALETTE_INIT_MEMBER(wswan_state, wswan)
}
}
-PALETTE_INIT_MEMBER(wswan_state,wscolor)
+PALETTE_INIT_MEMBER(wswan_state, wscolor)
{
for (int i = 0; i < 4096; i++)
{
@@ -95,9 +95,9 @@ PALETTE_INIT_MEMBER(wswan_state,wscolor)
}
static SLOT_INTERFACE_START(wswan_cart)
- SLOT_INTERFACE_INTERNAL("ws_rom", WS_ROM_STD)
- SLOT_INTERFACE_INTERNAL("ws_sram", WS_ROM_SRAM)
- SLOT_INTERFACE_INTERNAL("ws_eeprom", WS_ROM_EEPROM)
+ SLOT_INTERFACE_INTERNAL("ws_rom", WS_ROM_STD)
+ SLOT_INTERFACE_INTERNAL("ws_sram", WS_ROM_SRAM)
+ SLOT_INTERFACE_INTERNAL("ws_eeprom", WS_ROM_EEPROM)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( wswan, wswan_state )
@@ -106,11 +106,16 @@ static MACHINE_CONFIG_START( wswan, wswan_state )
MCFG_CPU_PROGRAM_MAP(wswan_mem)
MCFG_CPU_IO_MAP(wswan_io)
+ MCFG_DEVICE_ADD("vdp", WSWAN_VIDEO, 0)
+ MCFG_WSWAN_VIDEO_TYPE(VDP_TYPE_WSWAN)
+ MCFG_WSWAN_VIDEO_IRQ_CB(wswan_state, set_irq_line)
+ MCFG_WSWAN_VIDEO_DMASND_CB(wswan_state, dma_sound_cb)
+
MCFG_SCREEN_ADD("screen", LCD)
MCFG_SCREEN_REFRESH_RATE(75)
MCFG_SCREEN_VBLANK_TIME(0)
- MCFG_SCREEN_UPDATE_DRIVER(wswan_state, screen_update)
- MCFG_SCREEN_SIZE( WSWAN_X_PIXELS, WSWAN_Y_PIXELS )
+ MCFG_SCREEN_UPDATE_DEVICE("vdp", wswan_video_device, screen_update)
+ MCFG_SCREEN_SIZE(WSWAN_X_PIXELS, WSWAN_Y_PIXELS)
MCFG_SCREEN_VISIBLE_AREA(0*8, WSWAN_X_PIXELS - 1, 0, WSWAN_Y_PIXELS - 1)
MCFG_SCREEN_PALETTE("palette")
@@ -141,11 +146,14 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( wscolor, wswan )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(wscolor_mem)
- MCFG_MACHINE_START_OVERRIDE(wswan_state, wscolor )
+ MCFG_MACHINE_START_OVERRIDE(wswan_state, wscolor)
+
+ MCFG_DEVICE_MODIFY("vdp")
+ MCFG_WSWAN_VIDEO_TYPE(VDP_TYPE_WSC)
MCFG_PALETTE_MODIFY("palette")
MCFG_PALETTE_ENTRIES(4096)
- MCFG_PALETTE_INIT_OWNER(wswan_state, wscolor )
+ MCFG_PALETTE_INIT_OWNER(wswan_state, wscolor)
/* software lists */
MCFG_DEVICE_REMOVE("cart_list")
diff --git a/src/mess/drivers/x07.c b/src/mess/drivers/x07.c
index 5ebc3ffd8ff..14d75539e76 100644
--- a/src/mess/drivers/x07.c
+++ b/src/mess/drivers/x07.c
@@ -1513,13 +1513,14 @@ static MACHINE_CONFIG_START( x07, x07_state )
MCFG_GENERIC_LOAD(x07_state, x07_card)
/* cassette */
- MCFG_CASSETTE_ADD( "cassette" )
+ MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_FORMATS(x07_cassette_formats)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED)
MCFG_CASSETTE_INTERFACE("x07_cass")
/* Software lists */
MCFG_SOFTWARE_LIST_ADD("card_list", "x07_card")
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "x07_cass")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mess/drivers/xerox820.c b/src/mess/drivers/xerox820.c
index 5bfb73aa620..114bee250ca 100644
--- a/src/mess/drivers/xerox820.c
+++ b/src/mess/drivers/xerox820.c
@@ -25,7 +25,8 @@
- Xerox 16/8
- Emerald Microware X120 board
- type in Monitor v1.0 from manual
- - proper keyboard emulation (MCU?)
+ - ASCII keyboard
+ - low-profile keyboard
http://users.telenet.be/lust/Xerox820/index.htm
http://www.classiccmp.org/dunfield/img41867/system.htm
@@ -38,9 +39,6 @@
#include "includes/xerox820.h"
-#include "bus/rs232/rs232.h"
-
-#define KEYBOARD_TAG "keyboard"
/* Read/Write Handlers */
@@ -71,8 +69,8 @@ void xerox820ii_state::bankswitch(int bank)
if (bank)
{
/* ROM */
- program.install_rom(0x0000, 0x17ff, m_rom->base());
- program.unmap_readwrite(0x1800, 0x2fff);
+ program.install_rom(0x0000, 0x1fff, m_rom->base());
+ program.unmap_readwrite(0x2000, 0x2fff);
program.install_ram(0x3000, 0x3fff, m_video_ram);
program.unmap_readwrite(0x4000, 0xbfff);
}
@@ -319,7 +317,7 @@ READ8_MEMBER( xerox820_state::kbpio_pb_r )
*/
- return m_keydata;
+ return m_kb->read() ^ 0xff;
};
WRITE8_MEMBER( xerox820ii_state::rdpio_pb_w )
@@ -406,15 +404,6 @@ WRITE_LINE_MEMBER( xerox820_state::fr_w )
m_sio->txca_w(state);
}
-WRITE8_MEMBER( xerox820_state::kbd_w )
-{
- m_keydata = ~data;
-
- /* strobe in keyboard data */
- m_kbpio->strobe_b(0);
- m_kbpio->strobe_b(1);
-}
-
/* Video */
UINT32 xerox820_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
@@ -469,7 +458,6 @@ UINT32 xerox820_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap
void xerox820_state::machine_start()
{
// state saving
- save_item(NAME(m_keydata));
save_item(NAME(m_scroll));
save_item(NAME(m_ncset2));
save_item(NAME(m_vatt));
@@ -626,8 +614,8 @@ static MACHINE_CONFIG_START( xerox820, xerox820_state )
MCFG_COM8116_FR_HANDLER(WRITELINE(xerox820_state, fr_w))
MCFG_COM8116_FT_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxtxcb_w))
- MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
- MCFG_GENERIC_KEYBOARD_CB(WRITE8(xerox820_state, kbd_w))
+ MCFG_DEVICE_ADD(KEYBOARD_TAG, XEROX_820_KEYBOARD, 0)
+ MCFG_XEROX_820_KEYBOARD_KBSTB_CALLBACK(DEVWRITELINE(Z80PIO_KB_TAG, z80pio_device, strobe_b))
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -713,8 +701,8 @@ static MACHINE_CONFIG_START( xerox820ii, xerox820ii_state )
MCFG_COM8116_FR_HANDLER(WRITELINE(xerox820_state, fr_w))
MCFG_COM8116_FT_HANDLER(DEVWRITELINE(Z80SIO_TAG, z80dart_device, rxtxcb_w))
- MCFG_DEVICE_ADD(KEYBOARD_TAG, GENERIC_KEYBOARD, 0)
- MCFG_GENERIC_KEYBOARD_CB(WRITE8(xerox820_state, kbd_w))
+ MCFG_DEVICE_ADD(KEYBOARD_TAG, XEROX_820_KEYBOARD, 0)
+ MCFG_XEROX_820_KEYBOARD_KBSTB_CALLBACK(DEVWRITELINE(Z80PIO_KB_TAG, z80pio_device, strobe_b))
// SASI bus
MCFG_DEVICE_ADD(SASIBUS_TAG, SCSI_PORT, 0)
@@ -758,7 +746,7 @@ MACHINE_CONFIG_END
ROM_START( bigboard )
ROM_REGION( 0x1000, Z80_TAG, 0 )
- ROM_LOAD( "bigboard.u67", 0x0000, 0x0800, CRC(5a85a228) SHA1(d51a2cbd0aae80315bda9530275aabfe8305364e))
+ ROM_LOAD( "bigboard.u67", 0x0000, 0x0800, CRC(5a85a228) SHA1(d51a2cbd0aae80315bda9530275aabfe8305364e) )
ROM_REGION( 0x800, "chargen", 0 )
ROM_LOAD( "bigboard.u73", 0x0000, 0x0800, CRC(10bf0d81) SHA1(7ec73670a4d9d6421a5d6a4c4edc8b7c87923f6c) )
@@ -784,34 +772,57 @@ ROM_START( x820 )
ROM_REGION( 0x800, "chargen", 0 )
ROM_LOAD( "x820.u92", 0x0000, 0x0800, CRC(b823fa98) SHA1(ad0ea346aa257a53ad5701f4201896a2b3a0f928) )
-
- ROM_REGION( 0x800, "keyboard", 0 )
- ROM_LOAD( "keyboard", 0x0000, 0x0800, NO_DUMP )
ROM_END
ROM_START( x820ii )
- ROM_REGION( 0x1800, Z80_TAG, 0 )
+ ROM_REGION( 0x2000, Z80_TAG, 0 )
ROM_DEFAULT_BIOS( "v404" )
- ROM_SYSTEM_BIOS( 0, "v404", "Balcones Operating System v4.04" )
- ROMX_LOAD( "537p3652.u33", 0x0000, 0x0800, CRC(7807cfbb) SHA1(bd3cc5cc5c59c84a50747aae5c17eb4617b0dbc3), ROM_BIOS(1) )
- ROMX_LOAD( "537p3653.u34", 0x0800, 0x0800, CRC(a9c6c0c3) SHA1(c2da9d1bf0da96e6b8bfa722783e411d2fe6deb9), ROM_BIOS(1) )
- ROMX_LOAD( "537p3654.u35", 0x1000, 0x0800, CRC(a8a07223) SHA1(e8ae1ebf2d7caf76771205f577b88ae493836ac9), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 0, "v400", "Balcones Operating System v4.00" ) // Initial U.S. 3-ROM set: support for double density disks
+ ROMX_LOAD( "v400.u33", 0x0000, 0x0800, NO_DUMP, ROM_BIOS(1) )
+ ROMX_LOAD( "v400.u34", 0x0800, 0x0800, NO_DUMP, ROM_BIOS(1) )
+ ROMX_LOAD( "v400.u35", 0x1000, 0x0800, NO_DUMP, ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "v401", "Balcones Operating System v4.01" ) // Corrected overflow problem with large data files
+ ROMX_LOAD( "v401.u33", 0x0000, 0x0800, NO_DUMP, ROM_BIOS(2) )
+ ROMX_LOAD( "v401.u34", 0x0800, 0x0800, NO_DUMP, ROM_BIOS(2) )
+ ROMX_LOAD( "v401.u35", 0x1000, 0x0800, NO_DUMP, ROM_BIOS(2) )
+ ROM_SYSTEM_BIOS( 2, "v402", "Balcones Operating System v4.02" ) // Rank Xerox (European) boot ROM version of US 4.01
+ ROMX_LOAD( "v402.u33", 0x0000, 0x0800, NO_DUMP, ROM_BIOS(3) )
+ ROMX_LOAD( "v402.u34", 0x0800, 0x0800, NO_DUMP, ROM_BIOS(3) )
+ ROMX_LOAD( "v402.u35", 0x1000, 0x0800, NO_DUMP, ROM_BIOS(3) )
+ ROM_SYSTEM_BIOS( 3, "v403", "Balcones Operating System v4.03" ) // Incorporate programmable communications option and support for the low-profile keyboard (4-ROM set and type-ahead input buffer)
+ ROMX_LOAD( "v403.u33", 0x0000, 0x0800, NO_DUMP, ROM_BIOS(4) )
+ ROMX_LOAD( "v403.u34", 0x0800, 0x0800, NO_DUMP, ROM_BIOS(4) )
+ ROMX_LOAD( "v403.u35", 0x1000, 0x0800, NO_DUMP, ROM_BIOS(4) )
+ ROMX_LOAD( "v403.u36", 0x1800, 0x0800, NO_DUMP, ROM_BIOS(4) )
+ ROM_SYSTEM_BIOS( 4, "v404", "Balcones Operating System v4.04" ) // Changes sign-on message from Xerox 820-II to Xerox
+ ROMX_LOAD( "537p3652.u33", 0x0000, 0x0800, CRC(7807cfbb) SHA1(bd3cc5cc5c59c84a50747aae5c17eb4617b0dbc3), ROM_BIOS(5) )
+ ROMX_LOAD( "537p3653.u34", 0x0800, 0x0800, CRC(a9c6c0c3) SHA1(c2da9d1bf0da96e6b8bfa722783e411d2fe6deb9), ROM_BIOS(5) )
+ ROMX_LOAD( "537p3654.u35", 0x1000, 0x0800, CRC(a8a07223) SHA1(e8ae1ebf2d7caf76771205f577b88ae493836ac9), ROM_BIOS(5) )
+ ROMX_LOAD( "v404.u36", 0x1800, 0x0800, NO_DUMP, ROM_BIOS(5) ) // fitted for low-profile keyboard only
+ ROM_SYSTEM_BIOS( 5, "v50", "Balcones Operating System v5.0" ) // Operating system modifications for DEM and new 5.25" disk controller (4 new boot ROMs)
+ ROMX_LOAD( "v50.u33", 0x0000, 0x0800, NO_DUMP, ROM_BIOS(6) )
+ ROMX_LOAD( "v50.u34", 0x0800, 0x0800, NO_DUMP, ROM_BIOS(6) )
+ ROMX_LOAD( "v50.u35", 0x1000, 0x0800, NO_DUMP, ROM_BIOS(6) )
+ ROMX_LOAD( "v50.u36", 0x1800, 0x0800, NO_DUMP, ROM_BIOS(6) ) // fitted for low-profile keyboard only
ROM_REGION( 0x1000, "chargen", 0 )
ROM_LOAD( "x820ii.u57", 0x0000, 0x0800, CRC(1a50f600) SHA1(df4470c80611c14fa7ea8591f741fbbecdfe4fd9) )
ROM_LOAD( "x820ii.u58", 0x0800, 0x0800, CRC(aca4b9b3) SHA1(77f41470b0151945b8d3c3a935fc66409e9157b3) )
-
- ROM_REGION( 0x400, "keyboard", 0 )
- ROM_LOAD( "820iikey.bin", 0x000, 0x400, CRC(8ea3b39b) SHA1(3f05959f54a558b273567b1b4f0c7cdf46d8d9bf) )
ROM_END
ROM_START( x168 )
- ROM_REGION( 0x1800, Z80_TAG, 0 )
+ ROM_REGION( 0x2000, Z80_TAG, 0 )
ROM_DEFAULT_BIOS( "v404" )
- ROM_SYSTEM_BIOS( 0, "v404", "Balcones Operating System v4.04" )
+ ROM_SYSTEM_BIOS( 0, "v404", "Balcones Operating System v4.04" ) // Changes sign-on message from Xerox 820-II to Xerox
ROMX_LOAD( "537p3652.u33", 0x0000, 0x0800, CRC(7807cfbb) SHA1(bd3cc5cc5c59c84a50747aae5c17eb4617b0dbc3), ROM_BIOS(1) )
ROMX_LOAD( "537p3653.u34", 0x0800, 0x0800, CRC(a9c6c0c3) SHA1(c2da9d1bf0da96e6b8bfa722783e411d2fe6deb9), ROM_BIOS(1) )
ROMX_LOAD( "537p3654.u35", 0x1000, 0x0800, CRC(a8a07223) SHA1(e8ae1ebf2d7caf76771205f577b88ae493836ac9), ROM_BIOS(1) )
+ ROMX_LOAD( "v404.u36", 0x1800, 0x0800, NO_DUMP, ROM_BIOS(1) ) // fitted for low-profile keyboard only
+ ROM_SYSTEM_BIOS( 1, "v50", "Balcones Operating System v5.0" ) // Operating system modifications for DEM and new 5.25" disk controller (4 new boot ROMs)
+ ROMX_LOAD( "v50.u33", 0x0000, 0x0800, NO_DUMP, ROM_BIOS(2) )
+ ROMX_LOAD( "v50.u34", 0x0800, 0x0800, NO_DUMP, ROM_BIOS(2) )
+ ROMX_LOAD( "v50.u35", 0x1000, 0x0800, NO_DUMP, ROM_BIOS(2) )
+ ROMX_LOAD( "v50.u36", 0x1800, 0x0800, NO_DUMP, ROM_BIOS(2) ) // fitted for low-profile keyboard only
ROM_REGION( 0x1000, I8086_TAG, 0 )
ROM_LOAD( "8086.u33", 0x0000, 0x1000, CRC(ee49e3dc) SHA1(a5f20c74fc53f9d695d8894534ab69a39e2c38d8) )
@@ -819,24 +830,22 @@ ROM_START( x168 )
ROM_REGION( 0x1000, "chargen", 0 )
ROM_LOAD( "x820ii.u57", 0x0000, 0x0800, CRC(1a50f600) SHA1(df4470c80611c14fa7ea8591f741fbbecdfe4fd9) )
ROM_LOAD( "x820ii.u58", 0x0800, 0x0800, CRC(aca4b9b3) SHA1(77f41470b0151945b8d3c3a935fc66409e9157b3) )
-
- ROM_REGION( 0x400, "keyboard", 0 )
- ROM_LOAD( "820iikey.bin", 0x000, 0x400, CRC(8ea3b39b) SHA1(3f05959f54a558b273567b1b4f0c7cdf46d8d9bf) )
ROM_END
ROM_START( mk83 )
ROM_REGION( 0x1000, Z80_TAG, 0 )
- ROM_LOAD( "2732mk83.bin", 0x0000, 0x1000, CRC(a845c7e1) SHA1(3ccf629c5cd384953794ac4a1d2b45678bd40e92))
+ ROM_LOAD( "2732mk83.bin", 0x0000, 0x1000, CRC(a845c7e1) SHA1(3ccf629c5cd384953794ac4a1d2b45678bd40e92) )
+
ROM_REGION( 0x800, "chargen", 0 )
- ROM_LOAD( "2716mk83.bin", 0x0000, 0x0800, CRC(10bf0d81) SHA1(7ec73670a4d9d6421a5d6a4c4edc8b7c87923f6c))
+ ROM_LOAD( "2716mk83.bin", 0x0000, 0x0800, CRC(10bf0d81) SHA1(7ec73670a4d9d6421a5d6a4c4edc8b7c87923f6c) )
ROM_END
/* System Drivers */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-COMP( 1980, bigboard, 0, 0, bigboard, xerox820, driver_device, 0, "Digital Research Computers", "Big Board", GAME_IMPERFECT_KEYBOARD )
-COMP( 1981, x820, bigboard, 0, xerox820, xerox820, driver_device, 0, "Xerox", "Xerox 820", GAME_IMPERFECT_KEYBOARD | GAME_NO_SOUND_HW )
-COMP( 1982, mk82, bigboard, 0, bigboard, xerox820, driver_device, 0, "Scomar", "MK-82", GAME_IMPERFECT_KEYBOARD )
-COMP( 1983, x820ii, 0, 0, xerox820ii, xerox820, driver_device, 0, "Xerox", "Xerox 820-II", GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD )
-COMP( 1983, x168, x820ii, 0, xerox168, xerox820, driver_device, 0, "Xerox", "Xerox 16/8", GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD )
-COMP( 1983, mk83, x820ii, 0, mk83, xerox820, driver_device, 0, "Scomar", "MK-83", GAME_NOT_WORKING | GAME_IMPERFECT_KEYBOARD | GAME_NO_SOUND_HW )
+COMP( 1980, bigboard, 0, 0, bigboard, xerox820, driver_device, 0, "Digital Research Computers", "Big Board", 0 )
+COMP( 1981, x820, bigboard, 0, xerox820, xerox820, driver_device, 0, "Xerox", "Xerox 820", GAME_NO_SOUND_HW )
+COMP( 1982, mk82, bigboard, 0, bigboard, xerox820, driver_device, 0, "Scomar", "MK-82", 0 )
+COMP( 1983, x820ii, 0, 0, xerox820ii, xerox820, driver_device, 0, "Xerox", "Xerox 820-II", GAME_NOT_WORKING )
+COMP( 1983, x168, x820ii, 0, xerox168, xerox820, driver_device, 0, "Xerox", "Xerox 16/8", GAME_NOT_WORKING )
+COMP( 1983, mk83, x820ii, 0, mk83, xerox820, driver_device, 0, "Scomar", "MK-83", GAME_NOT_WORKING | GAME_NO_SOUND_HW )
diff --git a/src/mess/drivers/xor100.c b/src/mess/drivers/xor100.c
index b8ed182138a..b45d095d94c 100644
--- a/src/mess/drivers/xor100.c
+++ b/src/mess/drivers/xor100.c
@@ -558,7 +558,7 @@ static MACHINE_CONFIG_START( xor100, xor100_state )
MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":2", xor100_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":3", xor100_floppies, NULL, floppy_image_device::default_floppy_formats)
- MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(I8255A_TAG, i8255_device, pc4_w))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(xor100_state, write_centronics_busy))
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(xor100_state, write_centronics_select))
diff --git a/src/mess/includes/amstrad.h b/src/mess/includes/amstrad.h
index 1b0a281917e..69bad9589d2 100644
--- a/src/mess/includes/amstrad.h
+++ b/src/mess/includes/amstrad.h
@@ -22,6 +22,7 @@
#include "bus/cpc/cpc_rs232.h"
#include "bus/cpc/symbfac2.h"
#include "bus/cpc/amdrum.h"
+#include "bus/cpc/playcity.h"
#include "machine/ram.h"
#include "imagedev/cassette.h"
#include "bus/centronics/ctronics.h"
diff --git a/src/mess/includes/at.h b/src/mess/includes/at.h
index b9ca4e17cc0..9a98a1a5105 100644
--- a/src/mess/includes/at.h
+++ b/src/mess/includes/at.h
@@ -17,9 +17,9 @@
#include "machine/ins8250.h"
#include "machine/mc146818.h"
#include "machine/pic8259.h"
-#include "bus/pci/i82371ab.h"
-#include "bus/pci/i82371sb.h"
-#include "bus/pci/i82439tx.h"
+#include "bus/lpci/i82371ab.h"
+#include "bus/lpci/i82371sb.h"
+#include "bus/lpci/i82439tx.h"
#include "machine/cs8221.h"
#include "machine/pit8253.h"
#include "machine/wd7600.h"
@@ -29,7 +29,7 @@
#include "imagedev/harddriv.h"
#include "machine/am9517a.h"
-#include "bus/pci/pci.h"
+#include "bus/lpci/pci.h"
#include "sound/dac.h"
#include "sound/speaker.h"
diff --git a/src/mess/includes/mc1502.h b/src/mess/includes/mc1502.h
index d8bc6978a2f..7eef3a13a26 100644
--- a/src/mess/includes/mc1502.h
+++ b/src/mess/includes/mc1502.h
@@ -59,10 +59,9 @@ public:
emu_timer *keyb_signal_timer;
} m_kbd;
- UINT8 m_ppi_portb;
- UINT8 m_ppi_portc;
- UINT8 m_mc1502_spkrdata;
- UINT8 m_mc1502_input;
+ UINT8 m_ppi_portb;
+ UINT8 m_ppi_portc;
+ UINT8 m_spkrdata;
DECLARE_WRITE_LINE_MEMBER(mc1502_pit8253_out1_changed);
DECLARE_WRITE_LINE_MEMBER(mc1502_pit8253_out2_changed);
diff --git a/src/mess/includes/sorcerer.h b/src/mess/includes/sorcerer.h
index 9d99c3ae3f4..44d5a5ee696 100644
--- a/src/mess/includes/sorcerer.h
+++ b/src/mess/includes/sorcerer.h
@@ -13,7 +13,6 @@
#include "sound/wave.h"
#include "machine/ay31015.h"
#include "bus/centronics/ctronics.h"
-#include "bus/centronics/covox.h"
#include "machine/ram.h"
#include "imagedev/cassette.h"
#include "imagedev/snapquik.h"
diff --git a/src/mess/includes/ti85.h b/src/mess/includes/ti85.h
index 40c98d9ea52..e967101f034 100755
--- a/src/mess/includes/ti85.h
+++ b/src/mess/includes/ti85.h
@@ -86,10 +86,10 @@ public:
UINT8 m_ON_interrupt_status;
UINT8 m_ON_pressed;
UINT8 m_flash_unlocked;
- UINT8 m_ti8x_memory_page_0;
UINT8 m_ti8x_memory_page_1;
UINT8 m_ti8x_memory_page_2;
UINT8 m_ti8x_memory_page_3;
+ bool m_booting;
UINT8 m_LCD_mask;
UINT8 m_power_mode;
UINT8 m_cpu_speed;
@@ -217,6 +217,7 @@ public:
void ti85_setup_snapshot (UINT8 * data);
void ti86_setup_snapshot (UINT8 * data);
DECLARE_SNAPSHOT_LOAD_MEMBER( ti8x );
+ DECLARE_DIRECT_UPDATE_MEMBER( ti83p_direct_update_handler );
ti83pse_timer m_ctimer[3];
diff --git a/src/mess/includes/victor9k.h b/src/mess/includes/victor9k.h
index b8d5c9c4381..088b5943ee2 100644
--- a/src/mess/includes/victor9k.h
+++ b/src/mess/includes/victor9k.h
@@ -16,7 +16,7 @@
#include "bus/rs232/rs232.h"
#include "cpu/i86/i86.h"
-#include "cpu/mcs48/mcs48.h"
+#include "formats/victor9k_dsk.h"
#include "imagedev/floppy.h"
#include "machine/ram.h"
#include "bus/centronics/ctronics.h"
@@ -27,11 +27,11 @@
#include "machine/pic8259.h"
#include "machine/z80dart.h"
#include "machine/victor9kb.h"
+#include "machine/victor9k_fdc.h"
#include "sound/hc55516.h"
#include "video/mc6845.h"
#define I8088_TAG "8l"
-#define I8048_TAG "5d"
#define I8253_TAG "13h"
#define I8259A_TAG "7l"
#define UPD7201_TAG "16e"
@@ -41,9 +41,6 @@
#define M6522_1_TAG "m6522_1"
#define M6522_2_TAG "m6522_2"
#define M6522_3_TAG "14l"
-#define M6522_4_TAG "1f"
-#define M6522_5_TAG "1k"
-#define M6522_6_TAG "1h"
#define DAC0808_0_TAG "5b"
#define DAC0808_1_TAG "5c"
#define CENTRONICS_TAG "centronics"
@@ -51,53 +48,40 @@
#define RS232_B_TAG "rs232b"
#define SCREEN_TAG "screen"
#define VICTOR9K_KEYBOARD_TAG "victor9kb"
+#define FDC_TAG "fdc"
class victor9k_state : public driver_device
{
public:
- victor9k_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, I8088_TAG),
- m_fdc_cpu(*this, I8048_TAG),
- m_ieee488(*this, IEEE488_TAG),
- m_pic(*this, I8259A_TAG),
- m_upd7201(*this, UPD7201_TAG),
- m_ssda(*this, MC6852_TAG),
- m_via1(*this, M6522_1_TAG),
- m_via2(*this, M6522_2_TAG),
- m_via3(*this, M6522_3_TAG),
- m_via4(*this, M6522_4_TAG),
- m_via5(*this, M6522_5_TAG),
- m_via6(*this, M6522_6_TAG),
- m_cvsd(*this, HC55516_TAG),
- m_crtc(*this, HD46505S_TAG),
- m_ram(*this, RAM_TAG),
- m_floppy0(*this, I8048_TAG":0:525qd"),
- m_floppy1(*this, I8048_TAG":1:525qd"),
- m_kb(*this, VICTOR9K_KEYBOARD_TAG),
- m_rs232a(*this, RS232_A_TAG),
- m_rs232b(*this, RS232_B_TAG),
- m_video_ram(*this, "video_ram"),
- m_da(0),
- m_da0(0),
- m_da1(0),
- m_sel0(0),
- m_sel1(0),
- m_tach0(0),
- m_tach1(0),
- m_rdy0(0),
- m_rdy1(0),
- m_ds0(1),
- m_ds1(1),
- m_lms(0),
- m_brdy(1),
- m_sync(1),
- m_gcrerr(0),
- m_palette(*this, "palette")
+ victor9k_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, I8088_TAG),
+ m_ieee488(*this, IEEE488_TAG),
+ m_pic(*this, I8259A_TAG),
+ m_upd7201(*this, UPD7201_TAG),
+ m_ssda(*this, MC6852_TAG),
+ m_via1(*this, M6522_1_TAG),
+ m_via2(*this, M6522_2_TAG),
+ m_via3(*this, M6522_3_TAG),
+ m_cvsd(*this, HC55516_TAG),
+ m_crtc(*this, HD46505S_TAG),
+ m_ram(*this, RAM_TAG),
+ m_kb(*this, VICTOR9K_KEYBOARD_TAG),
+ m_fdc(*this, FDC_TAG),
+ m_rs232a(*this, RS232_A_TAG),
+ m_rs232b(*this, RS232_B_TAG),
+ m_palette(*this, "palette"),
+ m_video_ram(*this, "video_ram"),
+ m_brt(0),
+ m_cont(0),
+ m_via1_irq(CLEAR_LINE),
+ m_via2_irq(CLEAR_LINE),
+ m_via3_irq(CLEAR_LINE),
+ m_fdc_irq(CLEAR_LINE),
+ m_ssda_irq(CLEAR_LINE)
{ }
required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_fdc_cpu;
required_device<ieee488_device> m_ieee488;
required_device<pic8259_device> m_pic;
required_device<upd7201_device> m_upd7201;
@@ -105,26 +89,18 @@ public:
required_device<via6522_device> m_via1;
required_device<via6522_device> m_via2;
required_device<via6522_device> m_via3;
- required_device<via6522_device> m_via4;
- required_device<via6522_device> m_via5;
- required_device<via6522_device> m_via6;
required_device<hc55516_device> m_cvsd;
required_device<mc6845_device> m_crtc;
required_device<ram_device> m_ram;
- required_device<floppy_image_device> m_floppy0;
- required_device<floppy_image_device> m_floppy1;
required_device<victor9k_keyboard_device> m_kb;
+ required_device<victor_9000_fdc_t> m_fdc;
required_device<rs232_port_device> m_rs232a;
required_device<rs232_port_device> m_rs232b;
+ required_device<palette_device> m_palette;
+ required_shared_ptr<UINT8> m_video_ram;
virtual void machine_start();
-
- DECLARE_READ8_MEMBER( floppy_p1_r );
- DECLARE_READ8_MEMBER( floppy_p2_r );
- DECLARE_WRITE8_MEMBER( floppy_p2_w );
- DECLARE_READ8_MEMBER( tach0_r );
- DECLARE_READ8_MEMBER( tach1_r );
- DECLARE_WRITE8_MEMBER( da_w );
+ virtual void machine_reset();
DECLARE_WRITE8_MEMBER( via1_pa_w );
DECLARE_WRITE_LINE_MEMBER( write_nfrd );
@@ -142,43 +118,17 @@ public:
DECLARE_WRITE8_MEMBER( via3_pb_w );
DECLARE_WRITE_LINE_MEMBER( via3_irq_w );
- DECLARE_WRITE8_MEMBER( via4_pa_w );
- DECLARE_WRITE8_MEMBER( via4_pb_w );
- DECLARE_WRITE_LINE_MEMBER( mode_w );
- DECLARE_WRITE_LINE_MEMBER( via4_irq_w );
+ DECLARE_WRITE_LINE_MEMBER( fdc_irq_w );
- DECLARE_WRITE8_MEMBER( via5_pb_w );
- DECLARE_WRITE_LINE_MEMBER( via5_irq_w );
+ DECLARE_WRITE_LINE_MEMBER( ssda_irq_w );
- DECLARE_READ8_MEMBER( via6_pa_r );
- DECLARE_READ8_MEMBER( via6_pb_r );
- DECLARE_WRITE8_MEMBER( via6_pa_w );
- DECLARE_WRITE8_MEMBER( via6_pb_w );
- DECLARE_WRITE_LINE_MEMBER( drw_w );
- DECLARE_WRITE_LINE_MEMBER( erase_w );
DECLARE_WRITE_LINE_MEMBER( kbrdy_w );
DECLARE_WRITE_LINE_MEMBER( kbdata_w );
DECLARE_WRITE_LINE_MEMBER( vert_w );
- DECLARE_WRITE_LINE_MEMBER( via6_irq_w );
- DECLARE_WRITE_LINE_MEMBER( ssda_irq_w );
MC6845_UPDATE_ROW( crtc_update_row );
- void ready0_cb(floppy_image_device *, int device);
- int load0_cb(floppy_image_device *device);
- void unload0_cb(floppy_image_device *device);
- void ready1_cb(floppy_image_device *, int device);
- int load1_cb(floppy_image_device *device);
- void unload1_cb(floppy_image_device *device);
-
- enum
- {
- LED_A = 0,
- LED_B
- };
-
/* video state */
- required_shared_ptr<UINT8> m_video_ram;
int m_brt;
int m_cont;
@@ -186,35 +136,11 @@ public:
int m_via1_irq;
int m_via2_irq;
int m_via3_irq;
- int m_via4_irq;
- int m_via5_irq;
- int m_via6_irq;
+ int m_fdc_irq;
int m_ssda_irq;
- /* floppy state */
- UINT8 m_da;
- UINT8 m_da0;
- UINT8 m_da1;
- int m_sel0;
- int m_sel1;
- int m_tach0;
- int m_tach1;
- int m_rdy0;
- int m_rdy1;
- int m_ds0;
- int m_ds1;
- UINT8 m_lms; /* motor speed */
- int m_st[2]; /* stepper phase */
- int m_stp[2]; /* stepper enable */
- int m_drive; /* selected drive */
- int m_side; /* selected side */
- int m_brdy;
- int m_sync;
- int m_gcrerr;
-
DECLARE_WRITE_LINE_MEMBER(mux_serial_b_w);
DECLARE_WRITE_LINE_MEMBER(mux_serial_a_w);
- required_device<palette_device> m_palette;
};
#endif
diff --git a/src/mess/includes/wswan.h b/src/mess/includes/wswan.h
index c92c9d95e31..418b44f5021 100644
--- a/src/mess/includes/wswan.h
+++ b/src/mess/includes/wswan.h
@@ -10,15 +10,13 @@
#define WSWAN_TYPE_MONO 0
#define WSWAN_TYPE_COLOR 1
-#define WSWAN_X_PIXELS (28*8)
-#define WSWAN_Y_PIXELS (18*8)
-
#define INTERNAL_EEPROM_SIZE 1024
#include "emu.h"
#include "cpu/v30mz/v30mz.h"
-#include "audio/wswan_snd.h"
#include "machine/nvram.h"
+#include "audio/wswan_snd.h"
+#include "video/wswan_video.h"
#include "bus/wswan/slot.h"
#include "bus/wswan/rom.h"
@@ -30,52 +28,6 @@ struct SoundDMA
UINT8 enable; /* Enabled */
};
-struct VDP
-{
- UINT8 layer_bg_enable; /* Background layer on/off */
- UINT8 layer_fg_enable; /* Foreground layer on/off */
- UINT8 sprites_enable; /* Sprites on/off */
- UINT8 window_sprites_enable; /* Sprite window on/off */
- UINT8 window_fg_mode; /* 0:inside/outside, 1:??, 2:inside, 3:outside */
- UINT8 current_line; /* Current scanline : 0-158 (159?) */
- UINT8 line_compare; /* Line to trigger line interrupt on */
- UINT32 sprite_table_address; /* Address of the sprite table */
- UINT8 sprite_table_buffer[512];
- UINT8 sprite_first; /* First sprite to draw */
- UINT8 sprite_count; /* Number of sprites to draw */
- UINT16 layer_bg_address; /* Address of the background screen map */
- UINT16 layer_fg_address; /* Address of the foreground screen map */
- UINT8 window_fg_left; /* Left coordinate of foreground window */
- UINT8 window_fg_top; /* Top coordinate of foreground window */
- UINT8 window_fg_right; /* Right coordinate of foreground window */
- UINT8 window_fg_bottom; /* Bottom coordinate of foreground window */
- UINT8 window_sprites_left; /* Left coordinate of sprites window */
- UINT8 window_sprites_top; /* Top coordinate of sprites window */
- UINT8 window_sprites_right; /* Right coordinate of sprites window */
- UINT8 window_sprites_bottom; /* Bottom coordinate of sprites window */
- UINT8 layer_bg_scroll_x; /* Background layer X scroll */
- UINT8 layer_bg_scroll_y; /* Background layer Y scroll */
- UINT8 layer_fg_scroll_x; /* Foreground layer X scroll */
- UINT8 layer_fg_scroll_y; /* Foreground layer Y scroll */
- UINT8 lcd_enable; /* LCD on/off */
- UINT8 icons; /* FIXME: What do we do with these? Maybe artwork? */
- UINT8 color_mode; /* monochrome/color mode */
- UINT8 colors_16; /* 4/16 colors mode */
- UINT8 tile_packed; /* layered/packed tile mode switch */
- UINT8 timer_hblank_enable; /* Horizontal blank interrupt on/off */
- UINT8 timer_hblank_mode; /* Horizontal blank timer mode */
- UINT16 timer_hblank_reload; /* Horizontal blank timer reload value */
- UINT16 timer_hblank_count; /* Horizontal blank timer counter value */
- UINT8 timer_vblank_enable; /* Vertical blank interrupt on/off */
- UINT8 timer_vblank_mode; /* Vertical blank timer mode */
- UINT16 timer_vblank_reload; /* Vertical blank timer reload value */
- UINT16 timer_vblank_count; /* Vertical blank timer counter value */
- UINT8 *vram; /* pointer to start of ram/vram (set by machine_reset) */
- UINT8 *palette_vram; /* pointer to start of palette area in ram/vram (set by machine_reset), WSC only */
- int main_palette[8];
- emu_timer *timer;
-};
-
class wswan_state : public driver_device
{
@@ -83,44 +35,39 @@ public:
wswan_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
+ m_vdp(*this, "vdp"),
m_sound(*this, "custom"),
m_cart(*this, "cartslot"),
m_cursx(*this, "CURSX"),
m_cursy(*this, "CURSY"),
- m_buttons(*this, "BUTTONS") { }
-
- virtual void video_start();
-
- UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
-
+ m_buttons(*this, "BUTTONS")
+ { }
+
required_device<cpu_device> m_maincpu;
+ required_device<wswan_video_device> m_vdp;
required_device<wswan_sound_device> m_sound;
required_device<ws_cart_slot_device> m_cart;
DECLARE_READ8_MEMBER(bios_r);
DECLARE_READ8_MEMBER(port_r);
DECLARE_WRITE8_MEMBER(port_w);
-
- VDP m_vdp;
+
UINT8 m_ws_portram[256];
UINT8 m_internal_eeprom[INTERNAL_EEPROM_SIZE];
UINT8 m_system_type;
SoundDMA m_sound_dma;
- UINT8 *m_ws_ram;
UINT8 *m_ws_bios_bank;
UINT8 m_bios_disabled;
- int m_pal[16][16];
- bitmap_ind16 m_bitmap;
UINT8 m_rotate;
-
- void wswan_clear_irq_line(int irq);
+
+ void set_irq_line(int irq);
+ void dma_sound_cb();
void common_start();
virtual void machine_start();
virtual void machine_reset();
DECLARE_PALETTE_INIT(wswan);
DECLARE_MACHINE_START(wscolor);
DECLARE_PALETTE_INIT(wscolor);
- TIMER_CALLBACK_MEMBER(wswan_scanline_interrupt);
-
+
protected:
/* Interrupt flags */
static const UINT8 WSWAN_IFLAG_STX = 0x01;
@@ -131,7 +78,7 @@ protected:
static const UINT8 WSWAN_IFLAG_VBLTMR = 0x20;
static const UINT8 WSWAN_IFLAG_VBL = 0x40;
static const UINT8 WSWAN_IFLAG_HBLTMR = 0x80;
-
+
/* Interrupts */
static const UINT8 WSWAN_INT_STX = 0;
static const UINT8 WSWAN_INT_KEY = 1;
@@ -141,22 +88,14 @@ protected:
static const UINT8 WSWAN_INT_VBLTMR = 5;
static const UINT8 WSWAN_INT_VBL = 6;
static const UINT8 WSWAN_INT_HBLTMR = 7;
-
+
required_ioport m_cursx;
required_ioport m_cursy;
required_ioport m_buttons;
-
- void wswan_register_save();
- void wswan_postload();
- void wswan_handle_irqs();
- void wswan_set_irq_line(int irq);
- void wswan_setup_palettes();
- void wswan_draw_background();
- void wswan_draw_foreground_0();
- void wswan_draw_foreground_2();
- void wswan_draw_foreground_3();
- void wswan_handle_sprites( int mask );
- void wswan_refresh_scanline( );
+
+ void register_save();
+ void handle_irqs();
+ void clear_irq_line(int irq);
};
diff --git a/src/mess/includes/xerox820.h b/src/mess/includes/xerox820.h
index 0acd99d3650..8de4a25daac 100644
--- a/src/mess/includes/xerox820.h
+++ b/src/mess/includes/xerox820.h
@@ -5,15 +5,16 @@
#include "emu.h"
#include "bus/scsi/sa1403d.h"
+#include "bus/rs232/rs232.h"
#include "cpu/z80/z80.h"
#include "cpu/z80/z80daisy.h"
#include "cpu/i86/i86.h"
#include "machine/com8116.h"
-#include "machine/keyboard.h"
#include "machine/ram.h"
#include "bus/scsi/scsi.h"
#include "bus/scsi/scsihd.h"
#include "machine/wd_fdc.h"
+#include "machine/x820kb.h"
#include "machine/z80pio.h"
#include "machine/z80ctc.h"
#include "machine/z80dart.h"
@@ -35,6 +36,7 @@
#define SASIBUS_TAG "sasi"
#define RS232_A_TAG "rs232a"
#define RS232_B_TAG "rs232b"
+#define KEYBOARD_TAG "kb"
#define XEROX820_VIDEORAM_SIZE 0x1000
#define XEROX820_VIDEORAM_MASK 0x0fff
@@ -42,24 +44,25 @@
class xerox820_state : public driver_device
{
public:
- xerox820_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, Z80_TAG),
- m_kbpio(*this, Z80PIO_KB_TAG),
- m_ctc(*this, Z80CTC_TAG),
- m_sio(*this, Z80SIO_TAG),
- m_fdc(*this, FD1771_TAG),
- m_ram(*this, RAM_TAG),
- m_palette(*this, "palette"),
- m_floppy0(*this, FD1771_TAG":0"),
- m_floppy1(*this, FD1771_TAG":1"),
- m_rom(*this, Z80_TAG),
- m_char_rom(*this, "chargen"),
- m_video_ram(*this, "video_ram"),
- m_fdc_irq(0),
- m_fdc_drq(0),
- m_8n5(0),
- m_400_460(0)
+ xerox820_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, Z80_TAG),
+ m_kbpio(*this, Z80PIO_KB_TAG),
+ m_ctc(*this, Z80CTC_TAG),
+ m_sio(*this, Z80SIO_TAG),
+ m_fdc(*this, FD1771_TAG),
+ m_ram(*this, RAM_TAG),
+ m_palette(*this, "palette"),
+ m_floppy0(*this, FD1771_TAG":0"),
+ m_floppy1(*this, FD1771_TAG":1"),
+ m_kb(*this, KEYBOARD_TAG),
+ m_rom(*this, Z80_TAG),
+ m_char_rom(*this, "chargen"),
+ m_video_ram(*this, "video_ram"),
+ m_fdc_irq(0),
+ m_fdc_drq(0),
+ m_8n5(0),
+ m_400_460(0)
{ }
virtual void machine_start();
@@ -76,6 +79,7 @@ public:
required_device<palette_device> m_palette;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
+ required_device<xerox_820_keyboard_t> m_kb;
required_memory_region m_rom;
required_memory_region m_char_rom;
required_shared_ptr<UINT8> m_video_ram;
@@ -89,17 +93,13 @@ public:
DECLARE_READ8_MEMBER( kbpio_pb_r );
DECLARE_WRITE_LINE_MEMBER( intrq_w );
DECLARE_WRITE_LINE_MEMBER( drq_w );
- DECLARE_WRITE8_MEMBER( kbd_w );
DECLARE_WRITE_LINE_MEMBER( fr_w );
DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w );
DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
- void bankswitch(int bank);
+ virtual void bankswitch(int bank);
void update_nmi();
- /* keyboard state */
- int m_keydata; /* keyboard data */
-
/* video state */
UINT8 m_scroll; /* vertical scroll */
UINT8 m_framecnt;
diff --git a/src/mess/layout/merlin.lay b/src/mess/layout/merlin.lay
index 5ab03f65e73..d9e47ebf09e 100644
--- a/src/mess/layout/merlin.lay
+++ b/src/mess/layout/merlin.lay
@@ -1,468 +1,404 @@
<?xml version="1.0"?>
<mamelayout version="2">
- <element name="background">
- <rect>
- <bounds left="0" top="0" right="1" bottom="1" />
- <color red="0.0" green="0.0" blue="0.0" />
- </rect>
+
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_red"><rect><color red="0.8" green="0.14" blue="0.18" /></rect></element>
+ <element name="static_darkred"><rect><color red="0.64" green="0.10" blue="0.13" /></rect></element>
+
+ <!-- buttons are not pushbuttons, they are pressed very lightly -->
+
+ <element name="button" defstate="0">
+ <text state="0" string=" "><color red="0.0" green="0.0" blue="0.0" /></text>
+ <text state="1" string=" "><color red="0.0" green="0.0" blue="0.0" /></text>
+ <disk state="1">
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.33" green="0.33" blue="0.22" />
+ </disk>
</element>
<element name="led" defstate="0">
- <rect state="0">
- <color red="0.2" green="0" blue="0" />
- </rect>
- <rect state="1">
- <color red="0.9" green="0" blue="0" />
- </rect>
+ <text string=" "><color red="0.0" green="0.0" blue="0.0" /></text>
+ <disk>
+ <bounds x="0.30" y="0.30" width="0.40" height="0.40"/>
+ <color red="0.0" green="0.0" blue="0.0" />
+ </disk>
+ <disk state="0">
+ <bounds x="0.36" y="0.36" width="0.28" height="0.28"/>
+ <color red="0.25" green="0.05" blue="0.04" />
+ </disk>
+ <disk state="1">
+ <bounds x="0.36" y="0.36" width="0.28" height="0.28"/>
+ <color red="1.0" green="0.2" blue="0.15" />
+ </disk>
</element>
- <element name="0" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="0" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="0" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+
+ <!-- number panels -->
+
+ <element name="panel_0">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="0" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="1" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="1" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="1" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_1">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="1" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="2" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="2" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="2" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_2">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="2" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="3" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="3" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="3" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_3">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="3" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="4" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="4" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="4" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_4">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="4" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="5" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="5" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="5" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_5">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="5" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="6" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="6" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="6" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_6">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="6" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="7" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="7" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="7" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_7">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="7" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="8" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="8" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="8" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_8">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="8" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="9" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="9" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="9" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_9">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="9" align="2">
+ <bounds left="0.0" right="0.96" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="10" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="10" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
- </text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="10" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_10">
+ <rect><color red="0.64" green="0.10" blue="0.13" /></rect>
+ <disk>
+ <bounds x="0.13" y="0.13" width="0.74" height="0.74"/>
+ <color red="0.68" green="0.675" blue="0.66" />
+ </disk>
+ <text string="10" align="2">
+ <bounds left="0.0" right="0.98" top="0.75" bottom="1.0"/>
+ <color red="0.71" green="0.22" blue="0.28" />
</text>
</element>
- <element name="new_game" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="NEW GAME" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+
+ <!-- bottom panels -->
+
+ <element name="panel_newgame">
+ <rect><color red="0.68" green="0.675" blue="0.66" /></rect>
+ <text string="NEW">
+ <bounds x="0.0" y="0.25" width="1.0" height="0.24"/>
+ <color red="0.0" green="0.0" blue="0.0" />
</text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="NEW GAME" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <text string="GAME">
+ <bounds x="0.0" y="0.50" width="1.0" height="0.24"/>
+ <color red="0.0" green="0.0" blue="0.0" />
</text>
</element>
- <element name="same_game" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="SAME GAME" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_samegame">
+ <rect><color red="0.68" green="0.675" blue="0.66" /></rect>
+ <text string="SAME">
+ <bounds x="0.0" y="0.25" width="1.0" height="0.24"/>
+ <color red="0.0" green="0.0" blue="0.0" />
</text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="SAME GAME" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <text string="GAME">
+ <bounds x="0.0" y="0.50" width="1.0" height="0.24"/>
+ <color red="0.0" green="0.0" blue="0.0" />
</text>
</element>
- <element name="hit_me" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="HIT ME" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_hitme">
+ <rect><color red="0.68" green="0.675" blue="0.66" /></rect>
+ <text string="HIT">
+ <bounds x="0.0" y="0.25" width="1.0" height="0.24"/>
+ <color red="0.0" green="0.0" blue="0.0" />
</text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="HIT ME" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <text string="ME">
+ <bounds x="0.0" y="0.50" width="1.0" height="0.24"/>
+ <color red="0.0" green="0.0" blue="0.0" />
</text>
</element>
- <element name="comp_turn" defstate="0">
- <rect>
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.1" green="0.1" blue="0.1" />
- </rect>
- <rect state="0">
- <bounds x="0" y="0" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="COMP TURN" state="0">
- <bounds x="8" y="24" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <element name="panel_compturn">
+ <rect><color red="0.68" green="0.675" blue="0.66" /></rect>
+ <text string="COMP">
+ <bounds x="0.0" y="0.25" width="1.0" height="0.24"/>
+ <color red="0.0" green="0.0" blue="0.0" />
</text>
- <rect state="1">
- <bounds x="2" y="2" width="48" height="48"/>
- <color red="0.25" green="0.25" blue="0.25" />
- </rect>
- <text string="COMP TURN" state="1">
- <bounds x="10" y="26" width="40" height="20"/>
- <color red="1.0" green="1.0" blue="1.0" />
+ <text string="TURN">
+ <bounds x="0.0" y="0.50" width="1.0" height="0.24"/>
+ <color red="0.0" green="0.0" blue="0.0" />
</text>
</element>
- <view name="Default Layout">
- <!-- Black background -->
- <bezel element="background">
- <bounds left="0" top="0" right="200" bottom="250" />
- </bezel>
- <!-- LEDs and number buttons -->
+<!-- build screen -->
- <bezel name="led_0" element="led">
- <bounds x="100" y="20" width="20" height="10" />
+ <view name="Internal Layout">
+ <bounds left="0" right="88" top="0" bottom="216" />
+ <bezel element="static_black">
+ <bounds left="0" right="88" top="0" bottom="216" />
</bezel>
- <bezel element="0" inputtag="O0" inputmask="0x01">
- <bounds x="100" y="32" width="20" height="10" />
+
+ <!-- (don't care about the upper loudspeaker+logo part) -->
+
+ <bezel element="static_darkred">
+ <bounds x="10" y="4" width="68" height="160" />
</bezel>
- <bezel name="led_1" element="led">
- <bounds x="50" y="50" width="20" height="10" />
+ <bezel element="static_red">
+ <bounds x="7" y="0" width="74" height="8" />
+ </bezel>
+ <bezel element="static_red">
+ <bounds x="4" y="14" width="80" height="128" />
</bezel>
- <bezel element="1" inputtag="O0" inputmask="0x02">
- <bounds x="50" y="62" width="20" height="10" />
+ <bezel element="static_red">
+ <bounds x="7" y="148" width="74" height="62" />
</bezel>
- <bezel name="led_2" element="led">
- <bounds x="100" y="50" width="20" height="10" />
+
+ <!-- number panels -->
+
+ <bezel element="panel_0">
+ <bounds x="34" y="20" width="20" height="20" />
</bezel>
- <bezel element="2" inputtag="O0" inputmask="0x08">
- <bounds x="100" y="62" width="20" height="10" />
+ <bezel name="lamp0" element="led">
+ <bounds x="34" y="20" width="20" height="20" />
+ </bezel>
+ <bezel element="button" inputtag="O.0" inputmask="0x01">
+ <bounds x="34" y="20" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
- <bezel name="led_3" element="led">
- <bounds x="150" y="50" width="20" height="10" />
+ <bezel element="panel_1">
+ <bounds x="10" y="44" width="20" height="20" />
</bezel>
- <bezel element="3" inputtag="O0" inputmask="0x04">
- <bounds x="150" y="62" width="20" height="10" />
+ <bezel name="lamp1" element="led">
+ <bounds x="10" y="44" width="20" height="20" />
</bezel>
-
-
- <bezel name="led_4" element="led">
- <bounds x="50" y="80" width="20" height="10" />
+ <bezel element="button" inputtag="O.0" inputmask="0x02">
+ <bounds x="10" y="44" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
- <bezel element="4" inputtag="O1" inputmask="0x01">
- <bounds x="50" y="92" width="20" height="10" />
+ <bezel element="panel_2">
+ <bounds x="34" y="44" width="20" height="20" />
</bezel>
-
- <bezel name="led_5" element="led">
- <bounds x="100" y="80" width="20" height="10" />
+ <bezel name="lamp2" element="led">
+ <bounds x="34" y="44" width="20" height="20" />
</bezel>
- <bezel element="5" inputtag="O1" inputmask="0x02">
- <bounds x="100" y="92" width="20" height="10" />
+ <bezel element="button" inputtag="O.0" inputmask="0x08">
+ <bounds x="34" y="44" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
-
- <bezel name="led_6" element="led">
- <bounds x="150" y="80" width="20" height="10" />
+ <bezel element="panel_3">
+ <bounds x="58" y="44" width="20" height="20" />
</bezel>
- <bezel element="6" inputtag="O1" inputmask="0x08">
- <bounds x="150" y="92" width="20" height="10" />
+ <bezel name="lamp3" element="led">
+ <bounds x="58" y="44" width="20" height="20" />
+ </bezel>
+ <bezel element="button" inputtag="O.0" inputmask="0x04">
+ <bounds x="58" y="44" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
-
- <bezel name="led_7" element="led">
- <bounds x="50" y="110" width="20" height="10" />
+ <bezel element="panel_4">
+ <bounds x="10" y="68" width="20" height="20" />
+ </bezel>
+ <bezel name="lamp4" element="led">
+ <bounds x="10" y="68" width="20" height="20" />
</bezel>
- <bezel element="7" inputtag="O1" inputmask="0x04">
- <bounds x="50" y="122" width="20" height="10" />
+ <bezel element="button" inputtag="O.1" inputmask="0x01">
+ <bounds x="10" y="68" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
- <bezel name="led_8" element="led">
- <bounds x="100" y="110" width="20" height="10" />
+ <bezel element="panel_5">
+ <bounds x="34" y="68" width="20" height="20" />
</bezel>
- <bezel element="8" inputtag="O2" inputmask="0x01">
- <bounds x="100" y="122" width="20" height="10" />
+ <bezel name="lamp5" element="led">
+ <bounds x="34" y="68" width="20" height="20" />
</bezel>
- <bezel name="led_9" element="led">
- <bounds x="150" y="110" width="20" height="10" />
+ <bezel element="button" inputtag="O.1" inputmask="0x02">
+ <bounds x="34" y="68" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
- <bezel element="9" inputtag="O2" inputmask="0x02">
- <bounds x="150" y="122" width="20" height="10" />
+ <bezel element="panel_6">
+ <bounds x="58" y="68" width="20" height="20" />
+ </bezel>
+ <bezel name="lamp6" element="led">
+ <bounds x="58" y="68" width="20" height="20" />
+ </bezel>
+ <bezel element="button" inputtag="O.1" inputmask="0x08">
+ <bounds x="58" y="68" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
+ <bezel element="panel_7">
+ <bounds x="10" y="92" width="20" height="20" />
+ </bezel>
+ <bezel name="lamp7" element="led">
+ <bounds x="10" y="92" width="20" height="20" />
+ </bezel>
+ <bezel element="button" inputtag="O.1" inputmask="0x04">
+ <bounds x="10" y="92" width="20" height="20" />
+ <color alpha="0.2" />
+ </bezel>
+ <bezel element="panel_8">
+ <bounds x="34" y="92" width="20" height="20" />
+ </bezel>
+ <bezel name="lamp8" element="led">
+ <bounds x="34" y="92" width="20" height="20" />
+ </bezel>
+ <bezel element="button" inputtag="O.2" inputmask="0x01">
+ <bounds x="34" y="92" width="20" height="20" />
+ <color alpha="0.2" />
+ </bezel>
+ <bezel element="panel_9">
+ <bounds x="58" y="92" width="20" height="20" />
+ </bezel>
+ <bezel name="lamp9" element="led">
+ <bounds x="58" y="92" width="20" height="20" />
+ </bezel>
+ <bezel element="button" inputtag="O.2" inputmask="0x02">
+ <bounds x="58" y="92" width="20" height="20" />
+ <color alpha="0.2" />
+ </bezel>
- <bezel name="led_10" element="led">
- <bounds x="100" y="140" width="20" height="10" />
+ <bezel element="panel_10">
+ <bounds x="34" y="116" width="20" height="20" />
+ </bezel>
+ <bezel name="lamp10" element="led">
+ <bounds x="34" y="116" width="20" height="20" />
</bezel>
- <bezel element="10" inputtag="O2" inputmask="0x08">
- <bounds x="100" y="152" width="20" height="10" />
+ <bezel element="button" inputtag="O.2" inputmask="0x08">
+ <bounds x="34" y="116" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
- <!-- Other buttons -->
+ <!-- bottom panels -->
- <bezel element="new_game" inputtag="O3" inputmask="0x08">
- <bounds x="75" y="170" width="30" height="30" />
+ <bezel element="panel_newgame">
+ <bounds x="21" y="156" width="20" height="20" />
</bezel>
- <bezel element="same_game" inputtag="O2" inputmask="0x04">
- <bounds x="125" y="170" width="30" height="30" />
+ <bezel element="button" inputtag="O.3" inputmask="0x08">
+ <bounds x="21" y="156" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
- <bezel element="hit_me" inputtag="O3" inputmask="0x04">
- <bounds x="75" y="210" width="30" height="30" />
+ <bezel element="panel_samegame">
+ <bounds x="47" y="156" width="20" height="20" />
</bezel>
- <bezel element="comp_turn" inputtag="O3" inputmask="0x02">
- <bounds x="125" y="210" width="30" height="30" />
+ <bezel element="button" inputtag="O.2" inputmask="0x04">
+ <bounds x="47" y="156" width="20" height="20" />
+ <color alpha="0.2" />
</bezel>
+
+ <bezel element="panel_hitme">
+ <bounds x="21" y="182" width="20" height="20" />
+ </bezel>
+ <bezel element="button" inputtag="O.3" inputmask="0x04">
+ <bounds x="21" y="182" width="20" height="20" />
+ <color alpha="0.2" />
+ </bezel>
+
+ <bezel element="panel_compturn">
+ <bounds x="47" y="182" width="20" height="20" />
+ </bezel>
+ <bezel element="button" inputtag="O.3" inputmask="0x02">
+ <bounds x="47" y="182" width="20" height="20" />
+ <color alpha="0.2" />
+ </bezel>
+
</view>
</mamelayout>
diff --git a/src/mess/layout/simon.lay b/src/mess/layout/simon.lay
new file mode 100644
index 00000000000..2cb94ad8c01
--- /dev/null
+++ b/src/mess/layout/simon.lay
@@ -0,0 +1,180 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="disk_black"><disk><color red="0.0" green="0.0" blue="0.0" /></disk></element>
+ <element name="disk_grey"><disk><color red="0.6" green="0.6" blue="0.6" /></disk></element>
+
+<!-- TODO: add these, maybe -->
+ <element name="text_game">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="GAME">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+ <element name="text_skill">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="SKILL LEVEL">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+
+ <element name="text_last">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="LAST">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+ <element name="text_start">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="START">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+ <element name="text_long">
+ <rect><color red="0.6" green="0.6" blue="0.6" /></rect>
+ <text string="LONGEST">
+ <color red="0.0" green="0.0" blue="0.0" />
+ </text>
+ </element>
+
+ <element name="button_r" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="0">
+ <color red="0.8" green="0.25" blue="0.1" />
+ <bounds x="0.2" y="0.2" width="0.6" height="0.6" />
+ </disk>
+ <disk state="1">
+ <color red="0.8" green="0.25" blue="0.1" />
+ <bounds x="0.28" y="0.28" width="0.44" height="0.44" />
+ </disk>
+ </element>
+ <element name="button_y" defstate="0">
+ <disk><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="0">
+ <color red="0.8" green="0.78" blue="0.1" />
+ <bounds x="0.2" y="0.2" width="0.6" height="0.6" />
+ </disk>
+ <disk state="1">
+ <color red="0.8" green="0.78" blue="0.1" />
+ <bounds x="0.28" y="0.28" width="0.44" height="0.44" />
+ </disk>
+ </element>
+
+ <element name="lamp_g" defstate="0">
+ <rect state="0"><color red="0.15" green="0.5" blue="0.1" /></rect>
+ <rect state="1"><color red="0.52" green="1.0" blue="0.4" /></rect>
+ </element>
+ <element name="lamp_r" defstate="0">
+ <rect state="0"><color red="0.5" green="0.15" blue="0.1" /></rect>
+ <rect state="1"><color red="1.0" green="0.4" blue="0.28" /></rect>
+ </element>
+ <element name="lamp_y" defstate="0">
+ <rect state="0"><color red="0.5" green="0.45" blue="0.1" /></rect>
+ <rect state="1"><color red="1.0" green="0.93" blue="0.4" /></rect>
+ </element>
+ <element name="lamp_b" defstate="0">
+ <rect state="0"><color red="0.1" green="0.15" blue="0.5" /></rect>
+ <rect state="1"><color red="0.3" green="0.42" blue="1.0" /></rect>
+ </element>
+
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="200" top="0" bottom="200" />
+ <bezel element="static_black">
+ <bounds left="0" right="200" top="0" bottom="200" />
+ </bezel>
+
+ <!-- big lamps -->
+
+ <bezel name="lamp0" element="lamp_g" inputtag="IN.1" inputmask="0x01" >
+ <bounds left="0" right="91" top="0" bottom="50" />
+ </bezel>
+ <bezel name="lamp0" element="lamp_g" inputtag="IN.1" inputmask="0x01" >
+ <bounds left="0" right="50" top="0" bottom="91" />
+ </bezel>
+ <bezel name="lamp0" element="lamp_g" inputtag="IN.1" inputmask="0x01" >
+ <bounds x="40" y="40" width="20" height="20" />
+ </bezel>
+
+ <bezel name="lamp1" element="lamp_r" inputtag="IN.1" inputmask="0x02" >
+ <bounds left="109" right="200" top="0" bottom="50" />
+ </bezel>
+ <bezel name="lamp1" element="lamp_r" inputtag="IN.1" inputmask="0x02" >
+ <bounds left="150" right="200" top="0" bottom="91" />
+ </bezel>
+ <bezel name="lamp1" element="lamp_r" inputtag="IN.1" inputmask="0x02" >
+ <bounds x="140" y="40" width="20" height="20" />
+ </bezel>
+
+ <bezel name="lamp2" element="lamp_y" inputtag="IN.1" inputmask="0x04" >
+ <bounds left="0" right="91" top="150" bottom="200" />
+ </bezel>
+ <bezel name="lamp2" element="lamp_y" inputtag="IN.1" inputmask="0x04" >
+ <bounds left="0" right="50" top="109" bottom="200" />
+ </bezel>
+ <bezel name="lamp2" element="lamp_y" inputtag="IN.1" inputmask="0x04" >
+ <bounds x="40" y="140" width="20" height="20" />
+ </bezel>
+
+ <bezel name="lamp3" element="lamp_b" inputtag="IN.1" inputmask="0x08" >
+ <bounds left="109" right="200" top="150" bottom="200" />
+ </bezel>
+ <bezel name="lamp3" element="lamp_b" inputtag="IN.1" inputmask="0x08" >
+ <bounds left="150" right="200" top="109" bottom="200" />
+ </bezel>
+ <bezel name="lamp3" element="lamp_b" inputtag="IN.1" inputmask="0x08" >
+ <bounds x="140" y="140" width="20" height="20" />
+ </bezel>
+
+
+ <bezel element="static_black">
+ <bounds x="0" y="90" width="200" height="20" />
+ </bezel>
+ <bezel element="static_black">
+ <bounds x="90" y="0" width="20" height="200" />
+ </bezel>
+ <bezel element="disk_black">
+ <bounds x="35" y="35" width="130" height="130" />
+ </bezel>
+
+ <bezel element="disk_grey">
+ <bounds x="50" y="50" width="100" height="100" />
+ </bezel>
+ <bezel element="static_black">
+ <bounds x="52" y="90" width="96" height="1" />
+ </bezel>
+
+
+ <!-- other controls -->
+
+ <bezel element="text_last">
+ <bounds x="65" y="110" width="20" height="4" />
+ </bezel>
+ <bezel element="button_y" inputtag="IN.2" inputmask="0x02">
+ <bounds x="71" y="115" width="8" height="8" />
+ </bezel>
+
+ <bezel element="text_start">
+ <bounds x="90" y="110" width="20" height="4" />
+ </bezel>
+ <bezel element="button_r" inputtag="IN.2" inputmask="0x01">
+ <bounds x="96" y="115" width="8" height="8" />
+ </bezel>
+
+ <bezel element="text_long">
+ <bounds x="115" y="110" width="20" height="4" />
+ </bezel>
+ <bezel element="button_y" inputtag="IN.2" inputmask="0x04">
+ <bounds x="121" y="115" width="8" height="8" />
+ </bezel>
+
+
+ </view>
+</mamelayout>
diff --git a/src/mess/machine/at.c b/src/mess/machine/at.c
index ab6141261fa..f9bf630c72e 100644
--- a/src/mess/machine/at.c
+++ b/src/mess/machine/at.c
@@ -300,7 +300,7 @@ MACHINE_START_MEMBER(at_state,at)
MACHINE_RESET_MEMBER(at_state,at)
{
m_at_spkrdata = 0;
- m_pit_out2 = 0;
+ m_pit_out2 = 1;
m_dma_channel = -1;
m_cur_eop = false;
}
diff --git a/src/mess/machine/bebox.c b/src/mess/machine/bebox.c
index 5bac695715b..b1db591ae6e 100644
--- a/src/mess/machine/bebox.c
+++ b/src/mess/machine/bebox.c
@@ -93,7 +93,7 @@
/* Components */
#include "video/pc_vga.h"
-#include "bus/pci/cirrus.h"
+#include "bus/lpci/cirrus.h"
#include "cpu/powerpc/ppc.h"
#include "machine/ins8250.h"
#include "machine/upd765.h"
@@ -101,7 +101,7 @@
#include "machine/pic8259.h"
#include "machine/am9517a.h"
#include "machine/ataintf.h"
-#include "bus/pci/pci.h"
+#include "bus/lpci/pci.h"
#include "machine/intelfsh.h"
#include "machine/53c810.h"
#include "machine/ram.h"
diff --git a/src/mess/machine/coco.c b/src/mess/machine/coco.c
index 2cedfd7b43c..d701d4f8baf 100644
--- a/src/mess/machine/coco.c
+++ b/src/mess/machine/coco.c
@@ -681,21 +681,23 @@ void coco_state::update_sound(void)
/* determine the sound mux status */
soundmux_status_t status = soundmux_status();
+ /* the SC77526 DAC chip internally biases the AC-coupled sound inputs for Cassette and Cartridge at the midpoint of the 3.9v output range */
+ bool bCassSoundEnable = (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL1));
+ bool bCartSoundEnable = (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL2));
+ UINT8 cassette_sound = (bCassSoundEnable ? 0x40 : 0);
+ UINT8 cart_sound = (bCartSoundEnable ? 0x40 : 0);
+
/* determine the value to send to the DAC */
m_dac_output = (m_pia_1->a_output() & 0xFC) >> 2;
- UINT8 sound_output = single_bit_sound + (status == SOUNDMUX_ENABLE ? m_dac_output << 1 : 0);
- m_dac->write_unsigned8(sound_output);
+ UINT8 dac_sound = (status == SOUNDMUX_ENABLE ? m_dac_output << 1 : 0);
+ m_dac->write_unsigned8(single_bit_sound + dac_sound + cassette_sound + cart_sound);
/* determine the cassette sound status */
- cassette_state cas_sound = (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL1))
- ? CASSETTE_SPEAKER_ENABLED
- : CASSETTE_SPEAKER_MUTED;
+ cassette_state cas_sound = bCassSoundEnable ? CASSETTE_SPEAKER_ENABLED : CASSETTE_SPEAKER_MUTED;
m_cassette->change_state(cas_sound, CASSETTE_MASK_SPEAKER);
/* determine the cartridge sound status */
- m_cococart->cart_set_line(
- COCOCART_LINE_SOUND_ENABLE,
- (status == (SOUNDMUX_ENABLE | SOUNDMUX_SEL2)) ? COCOCART_LINE_VALUE_ASSERT : COCOCART_LINE_VALUE_CLEAR);
+ m_cococart->cart_set_line(COCOCART_LINE_SOUND_ENABLE, bCartSoundEnable ? COCOCART_LINE_VALUE_ASSERT : COCOCART_LINE_VALUE_CLEAR);
}
diff --git a/src/mess/machine/genpc.c b/src/mess/machine/genpc.c
index b49aa1c2749..366e3b69ed6 100644
--- a/src/mess/machine/genpc.c
+++ b/src/mess/machine/genpc.c
@@ -572,7 +572,7 @@ void ibm5160_mb_device::device_reset()
m_u73_q2 = 0;
m_out1 = 2; // initial state of pit output is undefined
m_pc_spkrdata = 0;
- m_pit_out2 = 0;
+ m_pit_out2 = 1;
m_dma_channel = -1;
m_cur_eop = false;
memset(m_dma_offset,0,sizeof(m_dma_offset));
diff --git a/src/mess/machine/ms7004.c b/src/mess/machine/ms7004.c
new file mode 100644
index 00000000000..b145479db2b
--- /dev/null
+++ b/src/mess/machine/ms7004.c
@@ -0,0 +1,498 @@
+/*
+ Electronika MS 7004 keyboard (DEC LK-201 workalike with extra keys
+ for Cyrillic characters).
+
+ To do:
+ - debug keymap
+ - receive data from host (not used by KSM but used by other boards)
+ - connect LEDs and speaker
+*/
+
+#include "emu.h"
+#include "ms7004.h"
+
+#define VERBOSE_DBG 1 /* general debug messages */
+
+#define DBG_LOG(N,M,A) \
+ do { \
+ if(VERBOSE_DBG>=N) \
+ { \
+ logerror("%11.6f at %s: ",machine().time().as_double(),machine().describe_context()); \
+ logerror A; \
+ } \
+ } while (0)
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#define MS7004_CPU_TAG "i8048"
+#define MS7004_SPK_TAG "beeper"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type MS7004 = &device_creator<ms7004_device>;
+
+ROM_START( ms7004 )
+ ROM_REGION (0x800, MS7004_CPU_TAG, 0)
+ ROM_LOAD ("mc7004_keyboard_original.rom", 0x0000, 0x800, CRC(69fcab53) SHA1(2d7cc7cd182f2ee09ecf2c539e33db3c2195f778))
+ROM_END
+
+//-------------------------------------------------
+// ADDRESS_MAP
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( ms7004_map, AS_IO, 8, ms7004_device )
+ AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_WRITE(p1_w)
+ AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_WRITE(p2_w)
+ AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(t1_r)
+ AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_DEVWRITE("i8243", i8243_device, i8243_prog_w)
+ADDRESS_MAP_END
+
+//-------------------------------------------------
+// MACHINE_CONFIG
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( ms7004 )
+ MCFG_CPU_ADD(MS7004_CPU_TAG, I8048, XTAL_4_608MHz)
+ MCFG_CPU_IO_MAP(ms7004_map)
+
+ MCFG_I8243_ADD("i8243", NOOP, WRITE8(ms7004_device, i8243_port_w))
+
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD(MS7004_SPK_TAG, BEEP, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor ms7004_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( ms7004 );
+}
+
+const rom_entry *ms7004_device::device_rom_region() const
+{
+ return ROM_NAME( ms7004 );
+}
+
+//-------------------------------------------------
+// INPUT_PORTS( ms7004 )
+//-------------------------------------------------
+/*
+bit sig XSn ВРn
+--- --- --- ---
+0 8 16 15
+1 9 15 14
+2 10 14 13
+3 11 13 12
+4 12 19 16
+5 13 12 11
+6 14 11 10
+7 15 10 9
+8 16 9 8
+9 17 8 7
+10 18 7 6
+11 19 6 5
+12 20 3 1
+13 21 1 2
+14 22 4 3
+15 23 5 4
+
+0xc9 KEY_LANGLE_RANGLE 'Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ°'
+0xbc KEY_DELETE ЗБ
+0xbd KEY_RETURN ВК
+0xbf KEY_TILDE '; +'
+0xc4 - 'Ъ'
+0xca - '/ ?'
+0xed KEY_PERIOD 'Ю @'
+0xf1 - '_'
+<...>
+
+0x56 KEY_F1 СТОП КÐДР
+0x57 KEY_F2 ПЕЧÐТЬ КÐДРÐ
+0x58 KEY_F3 ПÐУЗÐ
+0x59 KEY_F4 УСТ РЕЖИМÐ
+0x5a KEY_F5 Ф5
+
+0x64 KEY_F6 ПРЕРЫВ
+0x65 KEY_F7 ПРОДОЛЖ
+0x66 KEY_F8 ОТМЕÐ
+0x67 KEY_F9 ОСÐОВРКÐДР
+0x69 KEY_F10 ВЫХОД
+
+0x71 KEY_F11 Ф11 (ÐР2)
+0x72 KEY_F12 Ф12 (ВШ)
+0x73 KEY_F13 Ф13 (ПС)
+0x74 KEY_F14 ДОП Ð’ÐРИÐÐТ
+
+0x7c KEY_HELP ПМ
+0x7d KEY_MENU ИСП
+
+0x80 KEY_F17 Ф17
+0x81 KEY_F18 Ф18
+0x82 KEY_F19 Ф19
+0x83 KEY_F20 Ф20
+
+0xb0 KEY_LOCK ФКС
+0xae KEY_SHIFT ВР
+0xaf KEY_CTRL СУ
+
+0xb1 KEY_META КМП
+0xb2 - РУС/ЛÐТ
+
+0x8a KEY_FIND ÐТ
+0x8b KEY_INSERT_HERE ВСТ
+0x8c KEY_REMOVE УДÐЛ
+0x8d KEY_SELECT ВЫБР
+0x8e KEY_PREV_SCREEN ПРЕД КÐДР
+0x8f KEY_NEXT_SCREEN СЛЕД КÐДР
+
+nothing sends '@' or '`'
+
+`/~ sends ^/~
+2/@ sends 2/"
+6/^ sends 6/&
+7/& sends 7/'
+8/ * sends 8/(
+9/( sends 9/)
+0/) sends 0/0
+-/_ sends _/_
++/= sends -/=
+;/: sends ;/+
+'/" sends :/ *
+
+F10 sends ^C
+F11 sends ESC
+F12 sends ^H
+*/
+INPUT_PORTS_START( ms7004 )
+ PORT_START("KBD12") // vertical row 1
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Print Screen (F2)") PORT_CODE(KEYCODE_F2)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Hold Screen (F1)") PORT_CODE(KEYCODE_F1)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) // '{' / '|'
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";") PORT_CODE(KEYCODE_COLON) // '+'
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) // what
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LShift") PORT_CODE(KEYCODE_LSHIFT)
+
+ PORT_START("KBD13") // vertical row 2
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Setup (F3)") PORT_CODE(KEYCODE_F3)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Data / Talk (F4)") PORT_CODE(KEYCODE_F4)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1") PORT_CODE(KEYCODE_1)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("J") PORT_CODE(KEYCODE_J)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Rus/Lat") PORT_CODE(KEYCODE_ESC)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Compose") PORT_CODE(KEYCODE_LALT)
+
+ PORT_START("KBD14") // vertical row 3
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Break (F5)") PORT_CODE(KEYCODE_F5)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2") PORT_CODE(KEYCODE_2)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("U") PORT_CODE(KEYCODE_U)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y") PORT_CODE(KEYCODE_Y)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Tilde") PORT_CODE(KEYCODE_TILDE) // ^
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q") PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("KBD15") // vertical row 4
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3") PORT_CODE(KEYCODE_3)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4") PORT_CODE(KEYCODE_4)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K") PORT_CODE(KEYCODE_K)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W") PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("S") PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("KBD11") // vertical row 5
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Interrupt (F6)") PORT_CODE(KEYCODE_F6)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5") PORT_CODE(KEYCODE_5)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("P") PORT_CODE(KEYCODE_P)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M") PORT_CODE(KEYCODE_M)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("KBD10") // vertical row 6
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Resume (F7)") PORT_CODE(KEYCODE_F7)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6") PORT_CODE(KEYCODE_6)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("N") PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("G") PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("R") PORT_CODE(KEYCODE_R)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("T") PORT_CODE(KEYCODE_T)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("I") PORT_CODE(KEYCODE_I)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE)
+
+ PORT_START("KBD9") // vertical row 7
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Cancel (F8)") PORT_CODE(KEYCODE_F8)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Main Screen (F9)") PORT_CODE(KEYCODE_F9)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7") PORT_CODE(KEYCODE_7)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[") PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("]") PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("O") PORT_CODE(KEYCODE_O)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("X") PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B)
+
+ PORT_START("KBD8") // vertical row 8
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Exit (F10)") PORT_CODE(KEYCODE_F10)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9") PORT_CODE(KEYCODE_9)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8") PORT_CODE(KEYCODE_8)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z") PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("D") PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("L") PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) // '@'
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA)
+
+ PORT_START("KBD7") // vertical row 9
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ESC (F11)") PORT_CODE(KEYCODE_F11)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=") PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("H") PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("V") PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\") PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH)
+
+ PORT_START("KBD6") // vertical row 10
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("BS (F12)") PORT_CODE(KEYCODE_F12)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LF (F13)") PORT_CODE(KEYCODE_PRTSCR)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) // '}'
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("'") PORT_CODE(KEYCODE_QUOTE) // ':'
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) // 'ÑŠ'
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".") PORT_CODE(KEYCODE_STOP)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)
+
+ PORT_START("KBD5") // vertical row 11
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Additional Options (F14)") PORT_CODE(KEYCODE_PAUSE)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Delete <X") PORT_CODE(KEYCODE_BACKSPACE)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) // ???
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RShift") PORT_CODE(KEYCODE_RSHIFT)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("KBD3") // vertical row 12
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Help (F15)") PORT_CODE(KEYCODE_RALT)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Insert Here") PORT_CODE(KEYCODE_HOME)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Find") PORT_CODE(KEYCODE_INSERT)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Select") PORT_CODE(KEYCODE_DEL)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Up") PORT_CODE(KEYCODE_UP)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Left") PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("KBD2") // vertical row 13
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Remove") PORT_CODE(KEYCODE_PGUP)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Next [v]") PORT_CODE(KEYCODE_PGDN)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Previous [^]") PORT_CODE(KEYCODE_END)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("KBD1") // vertical row 14
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Do (F16)") PORT_CODE(KEYCODE_RCONTROL)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF1") PORT_CODE(KEYCODE_NUMLOCK)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 7") PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 4") PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 1") PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 2") PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 0") PORT_CODE(KEYCODE_0_PAD)
+
+ PORT_START("KBD0") // vertical row 15
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F17")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F18")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF2") PORT_CODE(KEYCODE_SLASH_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF3") PORT_CODE(KEYCODE_ASTERISK)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 8") PORT_CODE(KEYCODE_8_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 5") PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 6") PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 3") PORT_CODE(KEYCODE_3_PAD)
+
+ PORT_START("KBD4") // vertical row 16
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F19")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("F20")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PF4") PORT_CODE(KEYCODE_MINUS_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num 9") PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num ,") PORT_CODE(KEYCODE_PLUS_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num -")
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Num .") PORT_CODE(KEYCODE_DEL_PAD) // "." on num.pad
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER_PAD)
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor ms7004_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( ms7004 );
+}
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// ms7004_device - constructor
+//-------------------------------------------------
+
+ms7004_device::ms7004_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MS7004, "MS7004 keyboard", tag, owner, clock, "ms7004", __FILE__),
+// device_serial_interface(mconfig, *this),
+ m_maincpu(*this, MS7004_CPU_TAG),
+ m_speaker(*this, MS7004_SPK_TAG),
+ m_i8243(*this, "i8243"),
+ m_kbd0(*this, "KBD0"),
+ m_kbd1(*this, "KBD1"),
+ m_kbd2(*this, "KBD2"),
+ m_kbd3(*this, "KBD3"),
+ m_kbd4(*this, "KBD4"),
+ m_kbd5(*this, "KBD5"),
+ m_kbd6(*this, "KBD6"),
+ m_kbd7(*this, "KBD7"),
+ m_kbd8(*this, "KBD8"),
+ m_kbd9(*this, "KBD9"),
+ m_kbd10(*this, "KBD10"),
+ m_kbd11(*this, "KBD11"),
+ m_kbd12(*this, "KBD12"),
+ m_kbd13(*this, "KBD13"),
+ m_kbd14(*this, "KBD14"),
+ m_kbd15(*this, "KBD15"),
+ m_tx_handler(*this)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void ms7004_device::device_start()
+{
+ m_tx_handler.resolve_safe();
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void ms7004_device::device_reset()
+{
+}
+
+
+//-------------------------------------------------
+// p1_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( ms7004_device::p1_w )
+{
+ /*
+ bit description
+
+ 0 Matrix row bit 0
+ 1 Matrix row bit 1
+ 2 Matrix row bit 2
+ 3 Speaker
+ 4 -STROBE (to matrix mux)
+ 5 LED "Latin"
+ 6
+ 7 Serial TX
+ */
+ DBG_LOG(1,0,( "%s: p1_w %02x = send %d\n", tag(), data, BIT(data, 7)));
+
+ m_p1 = data;
+ m_tx_handler(BIT(data, 7));
+}
+
+
+//-------------------------------------------------
+// p2_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( ms7004_device::p2_w )
+{
+ /*
+ bit description
+
+ 0 Matrix columns, to 8243 (port 4)
+ 1 Matrix columns, to 8243 (port 5)
+ 2 Matrix columns, to 8243 (port 6)
+ 3 Matrix columns, to 8243 (port 7)
+ 4 LED "Wait"
+ 5 LED "Compose"
+ 6 LED "Caps"
+ 7 LED "Hold"
+ */
+ DBG_LOG(2,0,( "%s: p2_w %02x = col %d\n", tag(), data, data&15));
+
+ m_p2 = data;
+ m_i8243->i8243_p2_w(space, offset, data);
+}
+
+
+//-------------------------------------------------
+// prog_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( ms7004_device::i8243_port_w )
+{
+ int sense = 0;
+
+ DBG_LOG(2,0,( "%s: 8243 port %d data %02xH\n",
+ tag(), offset + 4, data));
+
+ if (data) {
+ switch(offset << 4 | data) {
+ case 0x01: sense = m_kbd0->read(); break;
+ case 0x02: sense = m_kbd1->read(); break;
+ case 0x04: sense = m_kbd2->read(); break;
+ case 0x08: sense = m_kbd3->read(); break;
+ case 0x11: sense = m_kbd4->read(); break;
+ case 0x12: sense = m_kbd5->read(); break;
+ case 0x14: sense = m_kbd6->read(); break;
+ case 0x18: sense = m_kbd7->read(); break;
+ case 0x21: sense = m_kbd8->read(); break;
+ case 0x22: sense = m_kbd9->read(); break;
+ case 0x24: sense = m_kbd10->read(); break;
+ case 0x28: sense = m_kbd11->read(); break;
+ case 0x31: sense = m_kbd12->read(); break;
+ case 0x32: sense = m_kbd13->read(); break;
+ case 0x34: sense = m_kbd14->read(); break;
+ case 0x38: sense = m_kbd15->read(); break;
+ }
+ m_keylatch = BIT(sense, (m_p1 & 7));
+ DBG_LOG(2,0,( "%s: row %d col %02x t1 %d\n",
+ tag(), (m_p1 & 7), (offset << 4 | data), m_keylatch));
+ }
+}
+
+
+//-------------------------------------------------
+// t1_r -
+//-------------------------------------------------
+
+READ8_MEMBER( ms7004_device::t1_r )
+{
+ if (!BIT(m_p1,4))
+ return m_keylatch;
+ else
+ return 0;
+}
diff --git a/src/mess/machine/ms7004.h b/src/mess/machine/ms7004.h
new file mode 100644
index 00000000000..1602320d5ea
--- /dev/null
+++ b/src/mess/machine/ms7004.h
@@ -0,0 +1,83 @@
+#pragma once
+
+#ifndef __MS7004_H__
+#define __MS7004_H__
+
+#include "emu.h"
+#include "cpu/mcs48/mcs48.h"
+#include "machine/i8243.h"
+#include "sound/beep.h"
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_MS7004_TX_HANDLER(_cb) \
+ devcb = &ms7004_device::set_tx_handler(*device, DEVCB_##_cb);
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> ms7004_device
+
+class ms7004_device : public device_t //, public device_serial_interface
+{
+public:
+ // construction/destruction
+ ms7004_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ template<class _Object> static devcb_base &set_tx_handler(device_t &device, _Object wr) { return downcast<ms7004_device &>(device).m_tx_handler.set_callback(wr); }
+
+ DECLARE_WRITE8_MEMBER( p1_w );
+ DECLARE_WRITE8_MEMBER( p2_w );
+ DECLARE_READ8_MEMBER( t1_r );
+ DECLARE_WRITE8_MEMBER( i8243_port_w );
+
+protected:
+ // device-level overrides
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual const rom_entry *device_rom_region() const;
+ virtual ioport_constructor device_input_ports() const;
+ virtual void device_start();
+ virtual void device_reset();
+
+private:
+ required_device<cpu_device> m_maincpu;
+ required_device<beep_device> m_speaker;
+ required_device<i8243_device> m_i8243;
+
+ required_ioport m_kbd0;
+ required_ioport m_kbd1;
+ required_ioport m_kbd2;
+ required_ioport m_kbd3;
+ required_ioport m_kbd4;
+ required_ioport m_kbd5;
+ required_ioport m_kbd6;
+ required_ioport m_kbd7;
+ required_ioport m_kbd8;
+ required_ioport m_kbd9;
+ required_ioport m_kbd10;
+ required_ioport m_kbd11;
+ required_ioport m_kbd12;
+ required_ioport m_kbd13;
+ required_ioport m_kbd14;
+ required_ioport m_kbd15;
+
+ int m_keylatch; // keyboard row latch
+ UINT8 m_p1;
+ UINT8 m_p2;
+
+ devcb_write_line m_tx_handler;
+};
+
+// device type definition
+extern const device_type MS7004;
+
+#endif
diff --git a/src/mess/machine/thomson.c b/src/mess/machine/thomson.c
index ab9a96bea09..750fcdc632d 100644
--- a/src/mess/machine/thomson.c
+++ b/src/mess/machine/thomson.c
@@ -638,7 +638,7 @@ static MACHINE_CONFIG_FRAGMENT( to7_io_line )
MCFG_RS232_CTS_HANDLER(WRITELINE(to7_io_line_device, write_cts))
MCFG_RS232_DSR_HANDLER(WRITELINE(to7_io_line_device, write_dsr))
- MCFG_CENTRONICS_ADD("centronics", centronics_printers, "printer")
+ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer")
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(THOM_PIA_IO, pia6821_device, cb1_w))
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(to7_io_line_device, write_centronics_busy))
diff --git a/src/mess/machine/ti85.c b/src/mess/machine/ti85.c
index 44fc0d0ae9f..90c8577394d 100755
--- a/src/mess/machine/ti85.c
+++ b/src/mess/machine/ti85.c
@@ -154,7 +154,7 @@ void ti85_state::update_ti83p_memory ()
{
//address_space &space = m_maincpu->space(AS_PROGRAM);
- m_membank1->set_bank(0); //Always flash page 0, well allmost
+ m_membank1->set_bank(m_booting ? 0x1f : 0); //Always flash page 0, well allmost
if (m_ti83p_port4 & 1)
{
@@ -182,7 +182,7 @@ void ti85_state::update_ti83pse_memory ()
{
//address_space &space = m_maincpu->space(AS_PROGRAM);
- m_membank1->set_bank(m_ti8x_memory_page_0);
+ m_membank1->set_bank(m_booting ? (m_model==TI84P ? 0x3f : 0x7f) : 0);
if (m_ti83p_port4 & 1)
{
@@ -273,30 +273,32 @@ MACHINE_RESET_MEMBER(ti85_state,ti85)
m_PCR = 0xc0;
}
+DIRECT_UPDATE_MEMBER(ti85_state::ti83p_direct_update_handler)
+{
+ if (m_booting)
+ {
+ if (((m_ti83p_port4 & 1) && (address >= 0x4000 && address < 0xc000)) || (address >= 0x4000 && address < 0x8000))
+ {
+ m_booting = false;
+ update_ti83p_memory();
+ }
+ }
+ return address;
+}
+
+
MACHINE_RESET_MEMBER(ti85_state,ti83p)
{
m_red_out = 0x00;
m_white_out = 0x00;
m_PCR = 0xc0;
- m_ti8x_memory_page_0 = 0;//0x1f;
-
- if (m_model == TI83P)
- {
- m_ti8x_memory_page_1 = 0x1f;
- }
- else if (m_model == TI84P)
- {
- m_ti8x_memory_page_1 = 0x3f;
- }
- else
- {
- m_ti8x_memory_page_1 = 0x7f;
- }
+ m_ti8x_memory_page_1 = 0;
m_ti8x_memory_page_2 = 0;
m_ti8x_memory_page_3 = 0;
m_ti83p_port4 = 1;
+ m_booting = true;
if (m_model == TI83P)
{
update_ti83p_memory();
@@ -305,8 +307,6 @@ MACHINE_RESET_MEMBER(ti85_state,ti83p)
{
update_ti83pse_memory();
}
-
- m_maincpu->set_pc(0x8000);
}
MACHINE_START_MEMBER(ti85_state,ti83p)
@@ -314,14 +314,14 @@ MACHINE_START_MEMBER(ti85_state,ti83p)
m_model = TI83P;
//address_space &space = m_maincpu->space(AS_PROGRAM);
//m_bios = memregion("flash")->base();
+ m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(ti85_state::ti83p_direct_update_handler), this));
m_timer_interrupt_mask = 0;
m_timer_interrupt_status = 0;
m_ON_interrupt_mask = 0;
m_ON_interrupt_status = 0;
m_ON_pressed = 0;
- m_ti8x_memory_page_0 = 0;//0x1f;
- m_ti8x_memory_page_1 = 0x1f;
+ m_ti8x_memory_page_1 = 0;
m_ti8x_memory_page_2 = 0;
m_ti8x_memory_page_3 = 0;
m_LCD_memory_base = 0;
@@ -334,8 +334,9 @@ MACHINE_START_MEMBER(ti85_state,ti83p)
m_ti83p_port4 = 1;
m_flash_unlocked = 0;
+ m_booting = true;
+
ti85_state::update_ti83p_memory();
- m_maincpu->set_pc(0x8000); //this is a hack due to incomplete memory mapping emulation
machine().scheduler().timer_pulse(attotime::from_hz(256), timer_expired_delegate(FUNC(ti85_state::ti83_timer1_callback),this));
@@ -345,11 +346,11 @@ MACHINE_START_MEMBER(ti85_state,ti83p)
/* save states and debugging */
save_item(NAME(m_timer_interrupt_status));
save_item(NAME(m_timer_interrupt_mask));
- save_item(NAME(m_ti8x_memory_page_0));
save_item(NAME(m_ti8x_memory_page_1));
save_item(NAME(m_ti8x_memory_page_2));
save_item(NAME(m_ti8x_memory_page_3));
save_item(NAME(m_ti83p_port4));
+ save_item(NAME(m_booting));
}
void ti85_state::ti8xpse_init_common()
@@ -363,8 +364,7 @@ void ti85_state::ti8xpse_init_common()
m_ON_interrupt_mask = 0;
m_ON_interrupt_status = 0;
m_ON_pressed = 0;
- m_ti8x_memory_page_0 = 00;//0x7f;
- m_ti8x_memory_page_1 = (m_model != TI84P ) ? 0x7f : 0x3f ;
+ m_ti8x_memory_page_1 = 0;
m_ti8x_memory_page_2 = 0;
m_ti8x_memory_page_3 = 0;
m_LCD_memory_base = 0;
@@ -378,7 +378,7 @@ void ti85_state::ti8xpse_init_common()
m_flash_unlocked = 0;
ti85_state::update_ti83pse_memory();
- m_maincpu->set_pc(0x8000);//same as above, hack to work around incomplete memory mapping emulation
+ m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(ti85_state::ti83p_direct_update_handler), this));
machine().scheduler().timer_pulse(attotime::from_hz(256), timer_expired_delegate(FUNC(ti85_state::ti83_timer1_callback),this));
@@ -391,7 +391,6 @@ void ti85_state::ti8xpse_init_common()
/* save states and debugging */
save_item(NAME(m_ctimer_interrupt_status));
save_item(NAME(m_timer_interrupt_status));
- save_item(NAME(m_ti8x_memory_page_0));
save_item(NAME(m_ti8x_memory_page_1));
save_item(NAME(m_ti8x_memory_page_2));
save_item(NAME(m_ti8x_memory_page_3));
diff --git a/src/mess/machine/victor9k_fdc.c b/src/mess/machine/victor9k_fdc.c
new file mode 100644
index 00000000000..87308971d3a
--- /dev/null
+++ b/src/mess/machine/victor9k_fdc.c
@@ -0,0 +1,1198 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Victor 9000 floppy disk controller emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************/
+
+/*
+
+ TODO:
+
+ - disk error 2 (cannot find block header?)
+ - 8048 spindle speed control
+ - read PLL
+ - write logic
+
+*/
+
+#include "victor9k_fdc.h"
+
+
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#define LOG 0
+#define LOG_VIA 0
+#define LOG_SCP 0
+
+#define I8048_TAG "5d"
+#define M6522_4_TAG "1f"
+#define M6522_5_TAG "1k"
+#define M6522_6_TAG "1h"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type VICTOR_9000_FDC = &device_creator<victor_9000_fdc_t>;
+
+
+//-------------------------------------------------
+// ROM( victor_9000_fdc )
+//-------------------------------------------------
+
+ROM_START( victor_9000_fdc )
+ ROM_REGION( 0x400, I8048_TAG, 0)
+ ROM_LOAD( "36080.5d", 0x000, 0x400, CRC(9bf49f7d) SHA1(b3a11bb65105db66ae1985b6f482aab6ea1da38b) )
+
+ ROM_REGION( 0x800, "gcr", 0 )
+ ROM_LOAD( "100836-001.4k", 0x000, 0x800, CRC(adc601bd) SHA1(6eeff3d2063ae2d97452101aa61e27ef83a467e5) )
+ROM_END
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const rom_entry *victor_9000_fdc_t::device_rom_region() const
+{
+ return ROM_NAME( victor_9000_fdc );
+}
+
+
+//-------------------------------------------------
+// ADDRESS_MAP( floppy_io )
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor_9000_fdc_t )
+ AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP
+ AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(floppy_p2_r, floppy_p2_w)
+ AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r)
+ AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r)
+ AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(da_w)
+ADDRESS_MAP_END
+
+
+//-------------------------------------------------
+// SLOT_INTERFACE( victor9k_floppies )
+//-------------------------------------------------
+
+int victor_9000_fdc_t::load0_cb(floppy_image_device *device)
+{
+ m_via4->write_ca1(0);
+
+ return IMAGE_INIT_PASS;
+}
+
+void victor_9000_fdc_t::unload0_cb(floppy_image_device *device)
+{
+ m_via4->write_ca1(1);
+}
+
+int victor_9000_fdc_t::load1_cb(floppy_image_device *device)
+{
+ m_via4->write_cb1(0);
+
+ return IMAGE_INIT_PASS;
+}
+
+void victor_9000_fdc_t::unload1_cb(floppy_image_device *device)
+{
+ m_via4->write_cb1(1);
+}
+
+static SLOT_INTERFACE_START( victor9k_floppies )
+ SLOT_INTERFACE( "525ssqd", FLOPPY_525_SSQD ) // Tandon TM100-3 with custom electronics
+ SLOT_INTERFACE( "525qd", FLOPPY_525_QD ) // Tandon TM100-4 with custom electronics
+SLOT_INTERFACE_END
+
+FLOPPY_FORMATS_MEMBER( victor_9000_fdc_t::floppy_formats )
+ FLOPPY_VICTOR_9000_FORMAT
+FLOPPY_FORMATS_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG_FRAGMENT( victor_9000_fdc )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( victor_9000_fdc )
+ MCFG_CPU_ADD(I8048_TAG, I8048, XTAL_30MHz/6)
+ MCFG_CPU_IO_MAP(floppy_io)
+
+ MCFG_DEVICE_ADD(M6522_4_TAG, VIA6522, XTAL_30MHz/30)
+ MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor_9000_fdc_t, via4_pa_w))
+ MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor_9000_fdc_t, via4_pb_w))
+ MCFG_VIA6522_CA2_HANDLER(WRITELINE(victor_9000_fdc_t, wrsync_w))
+ MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor_9000_fdc_t, via4_irq_w))
+
+ MCFG_DEVICE_ADD(M6522_5_TAG, VIA6522, XTAL_30MHz/30)
+ MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor_9000_fdc_t, via5_irq_w))
+ MCFG_VIA6522_READPA_HANDLER(READ8(victor_9000_fdc_t, via5_pa_r))
+ MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor_9000_fdc_t, via5_pb_w))
+
+ MCFG_DEVICE_ADD(M6522_6_TAG, VIA6522, XTAL_30MHz/30)
+ MCFG_VIA6522_READPA_HANDLER(READ8(victor_9000_fdc_t, via6_pa_r))
+ MCFG_VIA6522_READPB_HANDLER(READ8(victor_9000_fdc_t, via6_pb_r))
+ MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor_9000_fdc_t, via6_pa_w))
+ MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor_9000_fdc_t, via6_pb_w))
+ MCFG_VIA6522_CA2_HANDLER(WRITELINE(victor_9000_fdc_t, drw_w))
+ MCFG_VIA6522_CB2_HANDLER(WRITELINE(victor_9000_fdc_t, erase_w))
+ MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor_9000_fdc_t, via6_irq_w))
+
+ MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":0", victor9k_floppies, "525qd", victor_9000_fdc_t::floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD(I8048_TAG":1", victor9k_floppies, "525qd", victor_9000_fdc_t::floppy_formats)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor victor_9000_fdc_t::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( victor_9000_fdc );
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// victor_9000_fdc_t - constructor
+//-------------------------------------------------
+
+victor_9000_fdc_t::victor_9000_fdc_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, VICTOR_9000_FDC, "Victor 9000 FDC", tag, owner, clock, "victor9k_fdc", __FILE__),
+ m_irq_cb(*this),
+ m_syn_cb(*this),
+ m_lbrdy_cb(*this),
+ m_maincpu(*this, I8048_TAG),
+ m_via4(*this, M6522_4_TAG),
+ m_via5(*this, M6522_5_TAG),
+ m_via6(*this, M6522_6_TAG),
+ m_floppy0(*this, I8048_TAG":0:525qd"),
+ m_floppy1(*this, I8048_TAG":1:525qd"),
+ m_gcr_rom(*this, "gcr"),
+ m_da(0),
+ m_da0(0),
+ m_da1(0),
+ m_start0(1),
+ m_stop0(1),
+ m_start1(1),
+ m_stop1(1),
+ m_sel0(0),
+ m_sel1(0),
+ m_tach0(0),
+ m_tach1(0),
+ m_rdy0(0),
+ m_rdy1(0),
+ m_l0ms(0),
+ m_l1ms(0),
+ m_st0(0),
+ m_st1(0),
+ m_stp0(0),
+ m_stp1(0),
+ m_drive(0),
+ m_side(0),
+ m_via4_irq(CLEAR_LINE),
+ m_via5_irq(CLEAR_LINE),
+ m_via6_irq(CLEAR_LINE),
+ m_syn(0),
+ m_lbrdy(1),
+ m_period(attotime::from_nsec(2130))
+{
+ cur_live.tm = attotime::never;
+ cur_live.state = IDLE;
+ cur_live.next_state = -1;
+ cur_live.write_position = 0;
+ cur_live.write_start_time = attotime::never;
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void victor_9000_fdc_t::device_start()
+{
+ // allocate timer
+ t_gen = timer_alloc(TM_GEN);
+ t_tach0 = timer_alloc(TM_TACH0);
+ t_tach1 = timer_alloc(TM_TACH1);
+
+ // state saving
+ save_item(NAME(m_da));
+ save_item(NAME(m_da0));
+ save_item(NAME(m_da1));
+ save_item(NAME(m_start0));
+ save_item(NAME(m_stop0));
+ save_item(NAME(m_start1));
+ save_item(NAME(m_stop1));
+ save_item(NAME(m_sel0));
+ save_item(NAME(m_sel1));
+ save_item(NAME(m_tach0));
+ save_item(NAME(m_tach1));
+ save_item(NAME(m_rdy0));
+ save_item(NAME(m_rdy1));
+ save_item(NAME(m_l0ms));
+ save_item(NAME(m_l1ms));
+ save_item(NAME(m_st0));
+ save_item(NAME(m_st1));
+ save_item(NAME(m_stp0));
+ save_item(NAME(m_stp1));
+ save_item(NAME(m_drive));
+ save_item(NAME(m_side));
+ save_item(NAME(m_drw));
+ save_item(NAME(m_erase));
+ save_item(NAME(m_via4_irq));
+ save_item(NAME(m_via5_irq));
+ save_item(NAME(m_via6_irq));
+ save_item(NAME(m_syn));
+ save_item(NAME(m_lbrdy));
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void victor_9000_fdc_t::device_reset()
+{
+ live_abort();
+
+ // resolve callbacks
+ m_irq_cb.resolve_safe();
+ m_syn_cb.resolve_safe();
+ m_lbrdy_cb.resolve_safe();
+
+ // reset devices
+ m_via4->reset();
+ m_via5->reset();
+ m_via6->reset();
+
+ // set floppy callbacks
+ m_floppy0->setup_load_cb(floppy_image_device::load_cb(FUNC(victor_9000_fdc_t::load0_cb), this));
+ m_floppy0->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor_9000_fdc_t::unload0_cb), this));
+
+ m_floppy1->setup_load_cb(floppy_image_device::load_cb(FUNC(victor_9000_fdc_t::load1_cb), this));
+ m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(FUNC(victor_9000_fdc_t::unload1_cb), this));
+}
+
+
+//-------------------------------------------------
+// device_timer - handler timer events
+//-------------------------------------------------
+
+void victor_9000_fdc_t::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TM_GEN:
+ live_sync();
+ live_run();
+ break;
+
+ case TM_TACH0:
+ // TODO
+ break;
+
+ case TM_TACH1:
+ // TODO
+ break;
+ }
+}
+
+
+//-------------------------------------------------
+// floppy_p1_r -
+//-------------------------------------------------
+
+READ8_MEMBER( victor_9000_fdc_t::floppy_p1_r )
+{
+ /*
+
+ bit description
+
+ 0 L0MS0
+ 1 L0MS1
+ 2 L0MS2
+ 3 L0MS3
+ 4 L1MS0
+ 5 L1MS1
+ 6 L1MS2
+ 7 L1MS3
+
+ */
+
+ return (m_l1ms << 4) | m_l0ms;
+}
+
+
+//-------------------------------------------------
+// floppy_p2_r -
+//-------------------------------------------------
+
+READ8_MEMBER( victor_9000_fdc_t::floppy_p2_r )
+{
+ return m_p2; // TODO needed because of ORL/ANL P2, should be in mcs48.c
+}
+
+
+//-------------------------------------------------
+// floppy_p2_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( victor_9000_fdc_t::floppy_p2_w )
+{
+ /*
+
+ bit description
+
+ 0 START0
+ 1 STOP0
+ 2 START1
+ 3 STOP1
+ 4 SEL1
+ 5 SEL0
+ 6 RDY0
+ 7 RDY1
+
+ */
+
+ m_p2 = data;
+
+ bool sync = false;
+
+ int start0 = BIT(data, 0);
+ if (m_start0 != start0) sync = true;
+
+ int stop0 = BIT(data, 1);
+ if (m_stop0 != stop0) sync = true;
+
+ int start1 = BIT(data, 2);
+ if (m_start1 != start1) sync = true;
+
+ int stop1 = BIT(data, 3);
+ if (m_stop1 != stop1) sync = true;
+
+ int sel0 = BIT(data, 5);
+ if (m_sel0 != sel0) sync = true;
+
+ int sel1 = BIT(data, 4);
+ if (m_sel1 != sel1) sync = true;
+
+ //m_rdy0 = BIT(data, 6);
+ //m_via5->write_ca2(m_rdy0);
+
+ //m_rdy1 = BIT(data, 7);
+ //m_via5->write_cb2(m_rdy1);
+
+ if (LOG_SCP) logerror("%s %s START0/STOP0/SEL0/RDY0 %u/%u/%u/%u START1/STOP1/SEL1/RDY1 %u/%u/%u/%u\n", machine().time().as_string(), machine().describe_context(), start0, stop0, sel0, m_rdy0, start1, stop1, sel1, m_rdy1);
+
+ if (sync)
+ {
+ live_sync();
+
+ m_start0 = start0;
+ m_stop0 = stop0;
+ m_sel0 = sel0;
+ //update_spindle_motor(m_floppy0, t_tach0, m_start0, m_stop0, m_sel0, m_da0);
+
+ m_start1 = start1;
+ m_stop1 = stop1;
+ m_sel1 = sel1;
+ //update_spindle_motor(m_floppy1, t_tach1, m_start1, m_stop1, m_sel1, m_da1);
+
+ checkpoint();
+
+ if (!m_floppy0->mon_r() || !m_floppy1->mon_r()) {
+ if(cur_live.state == IDLE) {
+ live_start();
+ }
+ } else {
+ live_abort();
+ }
+
+ live_run();
+ }
+}
+
+
+//-------------------------------------------------
+// tach0_r -
+//-------------------------------------------------
+
+READ8_MEMBER( victor_9000_fdc_t::tach0_r )
+{
+ return m_tach0;
+}
+
+
+//-------------------------------------------------
+// tach1_r -
+//-------------------------------------------------
+
+READ8_MEMBER( victor_9000_fdc_t::tach1_r )
+{
+ return m_tach1;
+}
+
+
+void victor_9000_fdc_t::update_stepper_motor(floppy_image_device *floppy, int stp, int old_st, int st)
+{
+ if (stp) return;
+
+ int tracks = 0;
+
+ switch (old_st)
+ {
+ case 6: if (st == 0xa) tracks++; else if (st == 5) tracks--; break;
+ case 5: if (st == 6) tracks++; else if (st == 9) tracks--; break;
+ case 9: if (st == 5) tracks++; else if (st == 0xa) tracks--; break;
+ case 0xa: if (st == 9) tracks++; else if (st == 6) tracks--; break;
+ }
+
+ if (tracks == -1)
+ {
+ floppy->dir_w(1);
+ floppy->stp_w(1);
+ floppy->stp_w(0);
+ }
+ else if (tracks == 1)
+ {
+ floppy->dir_w(0);
+ floppy->stp_w(1);
+ floppy->stp_w(0);
+ }
+}
+
+void victor_9000_fdc_t::update_spindle_motor(floppy_image_device *floppy, emu_timer *t_tach, bool start, bool stop, bool sel, UINT8 &da)
+{
+ if (start && !stop && floppy->mon_r()) {
+ if (LOG_SCP) logerror("%s: motor start\n", floppy->tag());
+ floppy->mon_w(0);
+ } else if (stop && !floppy->mon_r()) {
+ if (LOG_SCP) logerror("%s: motor stop\n", floppy->tag());
+ floppy->mon_w(1);
+ }
+
+ if (sel) {
+ da = m_da;
+ }
+}
+
+
+//-------------------------------------------------
+// da_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( victor_9000_fdc_t::da_w )
+{
+ if (LOG_SCP) logerror("%s %s DA %02x\n", machine().time().as_string(), machine().describe_context(), data);
+
+ if (m_da != data)
+ {
+ live_sync();
+ m_da = data;
+ update_spindle_motor(m_floppy0, t_tach0, m_start0, m_stop0, m_sel0, m_da0);
+ update_spindle_motor(m_floppy1, t_tach1, m_start1, m_stop1, m_sel1, m_da1);
+ checkpoint();
+ live_run();
+ }
+}
+
+WRITE8_MEMBER( victor_9000_fdc_t::via4_pa_w )
+{
+ /*
+
+ bit description
+
+ PA0 L0MS0
+ PA1 L0MS1
+ PA2 L0MS2
+ PA3 L0MS3
+ PA4 ST0A
+ PA5 ST0B
+ PA6 ST0C
+ PA7 ST0D
+
+ */
+
+ m_l0ms = data & 0x0f;
+
+ { // HACK to bypass SCP
+ m_floppy0->mon_w((m_l0ms == 0xf) ? 1 : 0);
+ m_floppy0->set_rpm(victor9k_format::get_rpm(m_side, m_floppy0->get_cyl()));
+ m_rdy0 = (m_l0ms == 0xf) ? 0 : 1;
+ m_via5->write_ca2(m_rdy0);
+ }
+
+ UINT8 st0 = data >> 4;
+
+ if (LOG_VIA) logerror("%s %s L0MS %01x ST0 %01x\n", machine().time().as_string(), machine().describe_context(), m_l0ms, st0);
+
+ if (m_st0 != st0)
+ {
+ live_sync();
+ update_stepper_motor(m_floppy0, m_stp0, st0, m_st0);
+ m_st0 = st0;
+ checkpoint();
+ live_run();
+ }
+}
+
+WRITE8_MEMBER( victor_9000_fdc_t::via4_pb_w )
+{
+ /*
+
+ bit description
+
+ PB0 L1MS0
+ PB1 L1MS1
+ PB2 L1MS2
+ PB3 L1MS3
+ PB4 ST1A
+ PB5 ST1B
+ PB6 ST1C
+ PB7 ST1D
+
+ */
+
+ m_l1ms = data & 0x0f;
+
+ { // HACK to bypass SCP
+ m_floppy1->mon_w((m_l1ms == 0xf) ? 1 : 0);
+ m_floppy1->set_rpm(victor9k_format::get_rpm(m_side, m_floppy1->get_cyl()));
+ m_rdy1 = (m_l1ms == 0xf) ? 0 : 1;
+ m_via5->write_cb2(m_rdy1);
+ }
+
+ UINT8 st1 = data >> 4;
+
+ if (LOG_VIA) logerror("%s %s L1MS %01x ST1 %01x\n", machine().time().as_string(), machine().describe_context(), m_l1ms, st1);
+
+ if (m_st1 != st1)
+ {
+ live_sync();
+ update_stepper_motor(m_floppy1, m_stp1, st1, m_st1);
+ m_st1 = st1;
+ checkpoint();
+ live_run();
+ }
+}
+
+WRITE_LINE_MEMBER( victor_9000_fdc_t::wrsync_w )
+{
+ if (m_wrsync != state)
+ {
+ live_sync();
+ m_wrsync = state;
+ cur_live.wrsync = state;
+ checkpoint();
+ if (LOG_VIA) logerror("%s %s ERASE %u\n", machine().time().as_string(), machine().describe_context(), state);
+ live_run();
+ }
+}
+
+WRITE_LINE_MEMBER( victor_9000_fdc_t::via4_irq_w )
+{
+ m_via4_irq = state;
+
+ m_irq_cb(m_via4_irq || m_via5_irq || m_via6_irq);
+}
+
+READ8_MEMBER( victor_9000_fdc_t::via5_pa_r )
+{
+ /*
+
+ bit description
+
+ PA0 E0
+ PA1 E1
+ PA2 I1
+ PA3 E2
+ PA4 E4
+ PA5 E5
+ PA6 I7
+ PA7 E6
+
+ */
+
+ UINT8 e = checkpoint_live.e;
+ UINT8 i = checkpoint_live.i;
+
+ return BIT(e, 6) << 7 | BIT(i, 7) << 6 | BIT(e, 5) << 5 | BIT(e, 4) << 4 | BIT(e, 2) << 3 | BIT(i, 1) << 2 | (e & 0x03);
+}
+
+WRITE8_MEMBER( victor_9000_fdc_t::via5_pb_w )
+{
+ /*
+
+ bit description
+
+ PB0 WD0
+ PB1 WD1
+ PB2 WD2
+ PB3 WD3
+ PB4 WD4
+ PB5 WD5
+ PB6 WD6
+ PB7 WD7
+
+ */
+
+ if (m_wd != data)
+ {
+ live_sync();
+ m_wd = cur_live.wd = data;
+ if (LOG_VIA) logerror("%s %s WD %02x\n", machine().time().as_string(), machine().describe_context(), data);
+ checkpoint();
+ live_run();
+ }
+}
+
+WRITE_LINE_MEMBER( victor_9000_fdc_t::via5_irq_w )
+{
+ m_via5_irq = state;
+
+ m_irq_cb(m_via4_irq || m_via5_irq || m_via6_irq);
+}
+
+
+READ8_MEMBER( victor_9000_fdc_t::via6_pa_r )
+{
+ /*
+
+ bit description
+
+ PA0
+ PA1 _TRK0D0
+ PA2
+ PA3 _TRK0D1
+ PA4
+ PA5
+ PA6 WPS
+ PA7 _SYNC
+
+ */
+
+ if (LOG_VIA) logerror("%s %s TRK0D0 %u TRK0D1 %u SYNC %u\n", machine().time().as_string(), machine().describe_context(), m_floppy0->trk00_r(), m_floppy1->trk00_r(), checkpoint_live.sync);
+
+ UINT8 data = 0;
+
+ // track 0 drive A sense
+ data |= m_floppy0->trk00_r() << 1;
+
+ // track 0 drive B sense
+ data |= m_floppy1->trk00_r() << 3;
+
+ // write protect sense
+ data |= (m_drive ? m_floppy1->wpt_r() : m_floppy0->wpt_r()) << 6;
+
+ // disk sync detect
+ data |= checkpoint_live.sync << 7;
+
+ return data;
+}
+
+WRITE8_MEMBER( victor_9000_fdc_t::via6_pa_w )
+{
+ /*
+
+ bit description
+
+ PA0 LED0A
+ PA1
+ PA2 LED1A
+ PA3
+ PA4 SIDE SELECT
+ PA5 DRIVE SELECT
+ PA6
+ PA7
+
+ */
+
+ // LED, drive A
+ output_set_led_value(LED_A, BIT(data, 0));
+
+ // LED, drive B
+ output_set_led_value(LED_B, BIT(data, 2));
+
+ bool sync = false;
+
+ // dual side select
+ int side = BIT(data, 4);
+ if (m_side != side) sync = true;
+
+ // select drive A/B
+ int drive = BIT(data, 5);
+ if (m_drive != drive) sync = true;
+
+ if (sync)
+ {
+ live_sync();
+
+ m_side = side;
+ cur_live.side = side;
+ m_floppy0->ss_w(side);
+ m_floppy1->ss_w(side);
+
+ m_drive = drive;
+ cur_live.drive = drive;
+
+ if (LOG_VIA) logerror("%s %s SIDE %u DRIVE %u\n", machine().time().as_string(), machine().describe_context(), side, drive);
+
+ checkpoint();
+ live_run();
+ }
+}
+
+READ8_MEMBER( victor_9000_fdc_t::via6_pb_r )
+{
+ /*
+
+ bit description
+
+ PB0 RDY0
+ PB1 RDY1
+ PB2
+ PB3 _DS1
+ PB4 _DS0
+ PB5 SINGLE/_DOUBLE SIDED
+ PB6
+ PB7
+
+ */
+
+ UINT8 data = 0;
+
+ // motor speed status, drive A
+ data |= m_rdy0;
+
+ // motor speed status, drive B
+ data |= m_rdy1 << 1;
+
+ // door B sense
+ data |= (m_floppy1->exists() ? 0 : 1) << 3;
+
+ // door A sense
+ data |= (m_floppy0->exists() ? 0 : 1) << 4;
+
+ // single/double sided
+ data |= (m_drive ? m_floppy1->twosid_r() : m_floppy0->twosid_r()) << 5;
+
+ return data;
+}
+
+WRITE8_MEMBER( victor_9000_fdc_t::via6_pb_w )
+{
+ /*
+
+ bit description
+
+ PB0
+ PB1
+ PB2 _SCRESET
+ PB3
+ PB4
+ PB5
+ PB6 STP0
+ PB7 STP1
+
+ */
+
+ // motor speed controller reset
+ if (!BIT(data, 2))
+ m_maincpu->reset();
+
+ bool sync = false;
+
+ // stepper enable A
+ int stp0 = BIT(data, 6);
+ if (m_stp0 != stp0) sync = true;
+
+ // stepper enable B
+ int stp1 = BIT(data, 7);
+ if (m_stp1 != stp1) sync = true;
+
+ if (sync)
+ {
+ live_sync();
+
+ m_stp0 = stp0;
+ update_stepper_motor(m_floppy0, m_stp0, m_st0, m_st0);
+
+ m_stp1 = stp1;
+ update_stepper_motor(m_floppy1, m_stp1, m_st1, m_st1);
+
+ if (LOG_VIA) logerror("%s %s STP0 %u STP1 %u\n", machine().time().as_string(), machine().describe_context(), stp0, stp1);
+
+ checkpoint();
+ live_run();
+ }
+}
+
+WRITE_LINE_MEMBER( victor_9000_fdc_t::drw_w )
+{
+ if (m_drw != state)
+ {
+ live_sync();
+ m_drw = cur_live.drw = state;
+ checkpoint();
+ if (LOG_VIA) logerror("%s %s DRW %u\n", machine().time().as_string(), machine().describe_context(), state);
+ if (state) {
+ stop_writing(machine().time());
+ } else {
+ start_writing(machine().time());
+ }
+ live_run();
+ }
+}
+
+WRITE_LINE_MEMBER( victor_9000_fdc_t::erase_w )
+{
+ if (m_erase != state)
+ {
+ live_sync();
+ m_erase = cur_live.erase = state;
+ checkpoint();
+ if (LOG_VIA) logerror("%s %s ERASE %u\n", machine().time().as_string(), machine().describe_context(), state);
+ live_run();
+ }
+}
+
+WRITE_LINE_MEMBER( victor_9000_fdc_t::via6_irq_w )
+{
+ m_via6_irq = state;
+
+ m_irq_cb(m_via4_irq || m_via5_irq || m_via6_irq);
+}
+
+READ8_MEMBER( victor_9000_fdc_t::cs7_r )
+{
+ if (!checkpoint_live.lbrdy)
+ {
+ live_sync();
+ cur_live.lbrdy = 1;
+ if (LOG_VIA) logerror("%s %s LBRDY 1\n", machine().time().as_string(), machine().describe_context());
+ m_lbrdy_cb(1);
+ checkpoint();
+ live_run();
+ }
+
+ return m_via5->read(space, offset);
+}
+
+WRITE8_MEMBER( victor_9000_fdc_t::cs7_w )
+{
+ if (!checkpoint_live.lbrdy)
+ {
+ live_sync();
+ cur_live.lbrdy = 1;
+ if (LOG_VIA) logerror("%s %s LBRDY 1\n", machine().time().as_string(), machine().describe_context());
+ m_lbrdy_cb(1);
+ checkpoint();
+ live_run();
+ }
+
+ m_via5->write(space, offset, data);
+}
+
+floppy_image_device* victor_9000_fdc_t::get_floppy()
+{
+ return m_drive ? m_floppy1 : m_floppy0;
+}
+
+void victor_9000_fdc_t::live_start()
+{
+ cur_live.tm = machine().time();
+ cur_live.state = RUNNING;
+ cur_live.next_state = -1;
+
+ cur_live.shift_reg = 0;
+ cur_live.shift_reg_write = 0;
+ cur_live.bit_counter = 0;
+ cur_live.sync_bit_counter = 0;
+ cur_live.sync_byte_counter = 0;
+
+ cur_live.drive = m_drive;
+ cur_live.side = m_side;
+ cur_live.drw = m_drw;
+ cur_live.wd = m_wd;
+ cur_live.wrsync = m_wrsync;
+ cur_live.erase = m_erase;
+
+ checkpoint_live = cur_live;
+
+ live_run();
+}
+
+void victor_9000_fdc_t::checkpoint()
+{
+ get_next_edge(machine().time());
+ checkpoint_live = cur_live;
+}
+
+void victor_9000_fdc_t::rollback()
+{
+ cur_live = checkpoint_live;
+ get_next_edge(cur_live.tm);
+}
+
+void victor_9000_fdc_t::start_writing(const attotime &tm)
+{
+ cur_live.write_start_time = tm;
+ cur_live.write_position = 0;
+}
+
+void victor_9000_fdc_t::stop_writing(const attotime &tm)
+{
+ commit(tm);
+ cur_live.write_start_time = attotime::never;
+}
+
+bool victor_9000_fdc_t::write_next_bit(bool bit, const attotime &limit)
+{
+ if(cur_live.write_start_time.is_never()) {
+ cur_live.write_start_time = cur_live.tm;
+ cur_live.write_position = 0;
+ }
+
+ attotime etime = cur_live.tm + m_period;
+ if(etime > limit)
+ return true;
+
+ if(bit && cur_live.write_position < ARRAY_LENGTH(cur_live.write_buffer))
+ cur_live.write_buffer[cur_live.write_position++] = cur_live.tm;
+
+ if (LOG) logerror("%s write bit %u (%u)\n", cur_live.tm.as_string(), cur_live.bit_counter, bit);
+
+ return false;
+}
+
+void victor_9000_fdc_t::commit(const attotime &tm)
+{
+ if(cur_live.write_start_time.is_never() || tm == cur_live.write_start_time || !cur_live.write_position)
+ return;
+
+ if (LOG) logerror("%s committing %u transitions since %s\n", tm.as_string(), cur_live.write_position, cur_live.write_start_time.as_string());
+
+ if(get_floppy())
+ get_floppy()->write_flux(cur_live.write_start_time, tm, cur_live.write_position, cur_live.write_buffer);
+
+ cur_live.write_start_time = tm;
+ cur_live.write_position = 0;
+}
+
+void victor_9000_fdc_t::live_delay(int state)
+{
+ cur_live.next_state = state;
+ if(cur_live.tm != machine().time())
+ t_gen->adjust(cur_live.tm - machine().time());
+ else
+ live_sync();
+}
+
+void victor_9000_fdc_t::live_sync()
+{
+ if(!cur_live.tm.is_never()) {
+ if(cur_live.tm > machine().time()) {
+ rollback();
+ live_run(machine().time());
+ commit(cur_live.tm);
+ } else {
+ commit(cur_live.tm);
+ if(cur_live.next_state != -1) {
+ cur_live.state = cur_live.next_state;
+ cur_live.next_state = -1;
+ }
+ if(cur_live.state == IDLE) {
+ stop_writing(cur_live.tm);
+ cur_live.tm = attotime::never;
+ }
+ }
+ cur_live.next_state = -1;
+ checkpoint();
+ }
+}
+
+void victor_9000_fdc_t::live_abort()
+{
+ if(!cur_live.tm.is_never() && cur_live.tm > machine().time()) {
+ rollback();
+ live_run(machine().time());
+ }
+
+ stop_writing(cur_live.tm);
+
+ cur_live.tm = attotime::never;
+ cur_live.state = IDLE;
+ cur_live.next_state = -1;
+ cur_live.write_position = 0;
+ cur_live.write_start_time = attotime::never;
+
+ cur_live.brdy = 1;
+ cur_live.lbrdy = 1;
+ cur_live.sync = 1;
+ cur_live.syn = 1;
+ cur_live.gcr_err = 1;
+}
+
+void victor_9000_fdc_t::live_run(const attotime &limit)
+{
+ if(cur_live.state == IDLE || cur_live.next_state != -1)
+ return;
+
+ for(;;) {
+ switch(cur_live.state) {
+ case RUNNING: {
+ bool syncpoint = false;
+
+ if (cur_live.tm > limit)
+ return;
+
+ // read bit
+ int bit = get_next_bit(cur_live.tm, limit);
+ if(bit < 0)
+ return;
+
+ cur_live.shift_reg <<= 1;
+ cur_live.shift_reg |= bit;
+ cur_live.shift_reg &= 0x3ff;
+
+ // sync
+ int sync = !(cur_live.shift_reg == 0x3ff);
+
+ // bit counter
+ if (!sync) {
+ cur_live.bit_counter = 0;
+ } else if (cur_live.sync) {
+ cur_live.bit_counter++;
+ if (cur_live.bit_counter == 10) {
+ cur_live.bit_counter = 0;
+ }
+ }
+
+ // sync counter
+ if (sync) {
+ cur_live.sync_bit_counter = 0;
+ cur_live.sync_byte_counter = 10;
+ } else if (!cur_live.sync) {
+ cur_live.sync_bit_counter++;
+ if (cur_live.sync_bit_counter == 10) {
+ cur_live.sync_bit_counter = 0;
+ cur_live.sync_byte_counter++;
+ if (cur_live.sync_byte_counter == 16) {
+ cur_live.sync_byte_counter = 0;
+ }
+ }
+ }
+
+ // syn
+ int syn = !(cur_live.sync_byte_counter == 15);
+
+ if (LOG) logerror("%s bit %u sync %u bc %u sbc %u sBC %u syn %u\n",cur_live.tm.as_string(),bit,sync,cur_live.bit_counter,cur_live.sync_bit_counter,cur_live.sync_byte_counter,syn);
+
+ // GCR decoder
+ if (cur_live.drw) {
+ cur_live.i = cur_live.drw << 10 | cur_live.shift_reg;
+ } else {
+ cur_live.i = cur_live.drw << 10 | ((cur_live.wd & 0xf0) << 1) | cur_live.wrsync << 4 | (cur_live.wd & 0x0f);
+ }
+
+ cur_live.e = m_gcr_rom->base()[cur_live.i];
+
+ // byte ready
+ int brdy = !(cur_live.bit_counter == 9);
+
+ // GCR error
+ int gcr_err = !(brdy || BIT(cur_live.e, 3));
+
+ if (brdy != cur_live.brdy) {
+ if (LOG) logerror("%s BRDY %u\n", cur_live.tm.as_string(),brdy);
+ if (LOG && !brdy)
+ {
+ UINT8 e = cur_live.e;
+ UINT8 i = cur_live.i;
+
+ UINT8 data = BIT(e, 6) << 7 | BIT(i, 7) << 6 | BIT(e, 5) << 5 | BIT(e, 4) << 4 | BIT(e, 2) << 3 | BIT(i, 1) << 2 | (e & 0x03);
+ logerror("%s BRDY %02x\n",cur_live.tm.as_string(),data);
+ }
+ cur_live.brdy = brdy;
+ if (!brdy) cur_live.lbrdy = 0;
+ syncpoint = true;
+ }
+
+ if (sync != cur_live.sync) {
+ if (LOG) logerror("%s SYNC %u\n", cur_live.tm.as_string(),sync);
+ cur_live.sync = sync;
+ syncpoint = true;
+ }
+
+ if (syn != cur_live.syn) {
+ if (LOG) logerror("%s SYN %u\n", cur_live.tm.as_string(),syn);
+ cur_live.syn = syn;
+ syncpoint = true;
+ }
+
+ if (gcr_err != cur_live.gcr_err) {
+ if (LOG) logerror("%s GCR ERR %u\n", cur_live.tm.as_string(),gcr_err);
+ cur_live.gcr_err = gcr_err;
+ syncpoint = true;
+ }
+
+ if (syncpoint) {
+ commit(cur_live.tm);
+
+ cur_live.tm += m_period;
+ live_delay(RUNNING_SYNCPOINT);
+ return;
+ }
+
+ cur_live.tm += m_period;
+ break;
+ }
+
+ case RUNNING_SYNCPOINT: {
+ m_lbrdy_cb(cur_live.lbrdy);
+ m_syn_cb(cur_live.syn);
+
+ cur_live.state = RUNNING;
+ checkpoint();
+ break;
+ }
+ }
+ }
+}
+
+void victor_9000_fdc_t::get_next_edge(const attotime &when)
+{
+ floppy_image_device *floppy = get_floppy();
+
+ cur_live.edge = floppy ? floppy->get_next_transition(when) : attotime::never;
+}
+
+int victor_9000_fdc_t::get_next_bit(attotime &tm, const attotime &limit)
+{
+ attotime next = tm + m_period;
+
+ int bit = (cur_live.edge.is_never() || cur_live.edge >= next) ? 0 : 1;
+
+ if (bit) {
+ get_next_edge(next);
+ }
+
+ return bit;
+}
diff --git a/src/mess/machine/victor9k_fdc.h b/src/mess/machine/victor9k_fdc.h
new file mode 100644
index 00000000000..721aa4aac82
--- /dev/null
+++ b/src/mess/machine/victor9k_fdc.h
@@ -0,0 +1,238 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Victor 9000 floppy disk controller emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __VICTOR_9000_FDC__
+#define __VICTOR_9000_FDC__
+
+#include "emu.h"
+#include "cpu/mcs48/mcs48.h"
+#include "formats/victor9k_dsk.h"
+#include "imagedev/floppy.h"
+#include "machine/6522via.h"
+
+
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_VICTOR_9000_FDC_IRQ_CB(_write) \
+ devcb = &victor_9000_fdc_t::set_irq_wr_callback(*device, DEVCB_##_write);
+
+#define MCFG_VICTOR_9000_FDC_SYN_CB(_write) \
+ devcb = &victor_9000_fdc_t::set_syn_wr_callback(*device, DEVCB_##_write);
+
+#define MCFG_VICTOR_9000_FDC_LBRDY_CB(_write) \
+ devcb = &victor_9000_fdc_t::set_lbrdy_wr_callback(*device, DEVCB_##_write);
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> victor_9000_fdc_t
+
+class victor_9000_fdc_t : public device_t
+{
+public:
+ // construction/destruction
+ victor_9000_fdc_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ template<class _Object> static devcb_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_irq_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_syn_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_syn_cb.set_callback(object); }
+ template<class _Object> static devcb_base &set_lbrdy_wr_callback(device_t &device, _Object object) { return downcast<victor_9000_fdc_t &>(device).m_lbrdy_cb.set_callback(object); }
+
+ DECLARE_READ8_MEMBER( cs5_r ) { return m_via4->read(space, offset); }
+ DECLARE_WRITE8_MEMBER( cs5_w ) { m_via4->write(space, offset, data); }
+ DECLARE_READ8_MEMBER( cs6_r ) { return m_via6->read(space, offset); }
+ DECLARE_WRITE8_MEMBER( cs6_w ) { m_via6->write(space, offset, data); }
+ DECLARE_READ8_MEMBER( cs7_r );
+ DECLARE_WRITE8_MEMBER( cs7_w );
+
+ DECLARE_FLOPPY_FORMATS( floppy_formats );
+
+ DECLARE_READ8_MEMBER( floppy_p1_r );
+ DECLARE_READ8_MEMBER( floppy_p2_r );
+ DECLARE_WRITE8_MEMBER( floppy_p2_w );
+ DECLARE_READ8_MEMBER( tach0_r );
+ DECLARE_READ8_MEMBER( tach1_r );
+ DECLARE_WRITE8_MEMBER( da_w );
+
+ DECLARE_WRITE8_MEMBER( via4_pa_w );
+ DECLARE_WRITE8_MEMBER( via4_pb_w );
+ DECLARE_WRITE_LINE_MEMBER( wrsync_w );
+ DECLARE_WRITE_LINE_MEMBER( via4_irq_w );
+
+ DECLARE_READ8_MEMBER( via5_pa_r );
+ DECLARE_WRITE8_MEMBER( via5_pb_w );
+ DECLARE_WRITE_LINE_MEMBER( via5_irq_w );
+
+ DECLARE_READ8_MEMBER( via6_pa_r );
+ DECLARE_READ8_MEMBER( via6_pb_r );
+ DECLARE_WRITE8_MEMBER( via6_pa_w );
+ DECLARE_WRITE8_MEMBER( via6_pb_w );
+ DECLARE_WRITE_LINE_MEMBER( drw_w );
+ DECLARE_WRITE_LINE_MEMBER( erase_w );
+ DECLARE_WRITE_LINE_MEMBER( via6_irq_w );
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+
+ // optional information overrides
+ virtual const rom_entry *device_rom_region() const;
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+private:
+ enum
+ {
+ TM_GEN,
+ TM_TACH0,
+ TM_TACH1
+ };
+
+ enum
+ {
+ LED_A = 0,
+ LED_B
+ };
+
+ enum {
+ IDLE,
+ RUNNING,
+ RUNNING_SYNCPOINT
+ };
+
+ struct live_info {
+ attotime tm;
+ int state, next_state;
+
+ int drive;
+ int side;
+ int drw;
+
+ // common
+ offs_t i;
+ UINT8 e;
+
+ // read
+ attotime edge;
+ UINT16 shift_reg;
+ int bit_counter;
+ int sync_bit_counter;
+ int sync_byte_counter;
+ int brdy;
+ int lbrdy;
+ int sync;
+ int syn;
+ int gcr_err;
+
+ // write
+ UINT16 shift_reg_write;
+ attotime write_start_time;
+ attotime write_buffer[32];
+ int write_position;
+ UINT8 wd;
+ int wrsync;
+ int gcr_data;
+ int erase;
+ };
+
+ devcb_write_line m_irq_cb;
+ devcb_write_line m_syn_cb;
+ devcb_write_line m_lbrdy_cb;
+
+ required_device<cpu_device> m_maincpu;
+ required_device<via6522_device> m_via4;
+ required_device<via6522_device> m_via5;
+ required_device<via6522_device> m_via6;
+ required_device<floppy_image_device> m_floppy0;
+ required_device<floppy_image_device> m_floppy1;
+ required_memory_region m_gcr_rom;
+
+ void update_stepper_motor(floppy_image_device *floppy, int stp, int old_st, int st);
+ void update_spindle_motor(floppy_image_device *floppy, emu_timer *t_tach, bool start, bool stop, bool sel, UINT8 &da);
+
+ int load0_cb(floppy_image_device *device);
+ void unload0_cb(floppy_image_device *device);
+
+ int load1_cb(floppy_image_device *device);
+ void unload1_cb(floppy_image_device *device);
+
+ UINT8 m_p2;
+
+ /* floppy state */
+ UINT8 m_da;
+ UINT8 m_da0;
+ UINT8 m_da1;
+ int m_start0;
+ int m_stop0;
+ int m_start1;
+ int m_stop1;
+ int m_sel0;
+ int m_sel1;
+ int m_tach0;
+ int m_tach1;
+ int m_rdy0;
+ int m_rdy1;
+ UINT8 m_l0ms;
+ UINT8 m_l1ms;
+ int m_st0;
+ int m_st1;
+ int m_stp0;
+ int m_stp1;
+ int m_drive;
+ int m_side;
+ int m_drw;
+ int m_erase;
+ UINT8 m_wd;
+ int m_wrsync;
+
+ int m_via4_irq;
+ int m_via5_irq;
+ int m_via6_irq;
+ int m_syn;
+ int m_lbrdy;
+
+ attotime m_period;
+
+ live_info cur_live, checkpoint_live;
+ emu_timer *t_gen, *t_tach0, *t_tach1;
+
+ floppy_image_device* get_floppy();
+ void live_start();
+ void checkpoint();
+ void rollback();
+ bool write_next_bit(bool bit, const attotime &limit);
+ void start_writing(const attotime &tm);
+ void commit(const attotime &tm);
+ void stop_writing(const attotime &tm);
+ void live_delay(int state);
+ void live_sync();
+ void live_abort();
+ void live_run(const attotime &limit = attotime::never);
+ void get_next_edge(const attotime &when);
+ int get_next_bit(attotime &tm, const attotime &limit);
+};
+
+
+
+// device type definition
+extern const device_type VICTOR_9000_FDC;
+
+
+
+#endif
diff --git a/src/mess/machine/victor9kb.c b/src/mess/machine/victor9kb.c
index 64b1ab01382..d4b5c4e57ee 100644
--- a/src/mess/machine/victor9kb.c
+++ b/src/mess/machine/victor9kb.c
@@ -28,7 +28,6 @@
const device_type VICTOR9K_KEYBOARD = &device_creator<victor9k_keyboard_device>;
-
//-------------------------------------------------
// ROM( victor9k_keyboard )
//-------------------------------------------------
@@ -237,28 +236,28 @@ ioport_constructor victor9k_keyboard_device::device_input_ports() const
// victor9k_keyboard_device - constructor
//-------------------------------------------------
-victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, VICTOR9K_KEYBOARD, "Victor 9000 Keyboard", tag, owner, clock, "victor9kb", __FILE__),
- m_maincpu(*this, I8021_TAG),
- m_y0(*this, "Y0"),
- m_y1(*this, "Y1"),
- m_y2(*this, "Y2"),
- m_y3(*this, "Y3"),
- m_y4(*this, "Y4"),
- m_y5(*this, "Y5"),
- m_y6(*this, "Y6"),
- m_y7(*this, "Y7"),
- m_y8(*this, "Y8"),
- m_y9(*this, "Y9"),
- m_ya(*this, "YA"),
- m_yb(*this, "YB"),
- m_yc(*this, "YC"),
- m_kbrdy_handler(*this),
- m_kbdata_handler(*this),
- m_y(0),
- m_kbrdy(1),
- m_kbdata(1),
- m_kback(1)
+victor9k_keyboard_device::victor9k_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, VICTOR9K_KEYBOARD, "Victor 9000 Keyboard", tag, owner, clock, "victor9kb", __FILE__),
+ m_maincpu(*this, I8021_TAG),
+ m_y0(*this, "Y0"),
+ m_y1(*this, "Y1"),
+ m_y2(*this, "Y2"),
+ m_y3(*this, "Y3"),
+ m_y4(*this, "Y4"),
+ m_y5(*this, "Y5"),
+ m_y6(*this, "Y6"),
+ m_y7(*this, "Y7"),
+ m_y8(*this, "Y8"),
+ m_y9(*this, "Y9"),
+ m_ya(*this, "YA"),
+ m_yb(*this, "YB"),
+ m_yc(*this, "YC"),
+ m_kbrdy_handler(*this),
+ m_kbdata_handler(*this),
+ m_y(0),
+ m_kbrdy(1),
+ m_kbdata(1),
+ m_kback(1)
{
}
@@ -291,36 +290,17 @@ void victor9k_keyboard_device::device_reset()
//-------------------------------------------------
-// kbrdy_r -
-//-------------------------------------------------
-
-READ_LINE_MEMBER( victor9k_keyboard_device::kbrdy_r )
-{
- return m_kbrdy;
-}
-
-
-//-------------------------------------------------
// kback_w -
//-------------------------------------------------
WRITE_LINE_MEMBER( victor9k_keyboard_device::kback_w )
{
+ //logerror("KBACK %u\n", state);
m_kback = state;
}
//-------------------------------------------------
-// kbdata_r -
-//-------------------------------------------------
-
-READ_LINE_MEMBER( victor9k_keyboard_device::kbdata_r )
-{
- return m_kbdata;
-}
-
-
-//-------------------------------------------------
// kb_p1_r -
//-------------------------------------------------
@@ -360,7 +340,7 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p1_w )
m_y = data & 0x0f;
}
- logerror("P1 %02x\n", data);
+ //logerror("P1 %02x\n", data);
}
@@ -374,14 +354,14 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w )
bit description
- P20 keylatch enable ?
- P21
- P22 key available ?
- P23 data ?
+ P20 ?
+ P21 KBRDY
+ P22 ?
+ P23 KBDATA
*/
- int kbrdy = BIT(data, 2);
+ int kbrdy = BIT(data, 1);
if (m_kbrdy != kbrdy)
{
@@ -397,7 +377,7 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w )
m_kbdata_handler(m_kbdata);
}
- logerror("P2 %01x\n", data & 0x0f);
+ //logerror("P2 %02x\n", data);
}
@@ -407,7 +387,5 @@ WRITE8_MEMBER( victor9k_keyboard_device::kb_p2_w )
READ8_MEMBER( victor9k_keyboard_device::kb_t1_r )
{
- logerror("read T1 %u\n", m_kback);
-
return m_kback;
}
diff --git a/src/mess/machine/victor9kb.h b/src/mess/machine/victor9kb.h
index a126ac67069..76bbd17171c 100644
--- a/src/mess/machine/victor9kb.h
+++ b/src/mess/machine/victor9kb.h
@@ -51,9 +51,7 @@ public:
virtual machine_config_constructor device_mconfig_additions() const;
virtual ioport_constructor device_input_ports() const;
- DECLARE_READ_LINE_MEMBER( kbrdy_r );
DECLARE_WRITE_LINE_MEMBER( kback_w );
- DECLARE_READ_LINE_MEMBER( kbdata_r );
// not really public
DECLARE_READ8_MEMBER( kb_p1_r );
diff --git a/src/mess/machine/wswan.c b/src/mess/machine/wswan.c
index 46d213e6eba..afa8ce8077f 100644
--- a/src/mess/machine/wswan.c
+++ b/src/mess/machine/wswan.c
@@ -78,144 +78,108 @@ static const UINT8 ws_fake_bios_code[] = {
0xea, 0xc0, 0xff, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
-void wswan_state::wswan_handle_irqs()
+void wswan_state::handle_irqs()
{
- if ( m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_HBLTMR )
+ if (m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_HBLTMR)
{
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_HBLTMR );
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_HBLTMR);
}
- else if ( m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_VBL )
+ else if (m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_VBL)
{
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_VBL );
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_VBL);
}
- else if ( m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_VBLTMR )
+ else if (m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_VBLTMR)
{
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_VBLTMR );
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_VBLTMR);
}
- else if ( m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_LCMP )
+ else if (m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_LCMP)
{
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_LCMP );
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_LCMP);
}
- else if ( m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_SRX )
+ else if (m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_SRX)
{
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_SRX );
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_SRX);
}
- else if ( m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_RTC )
+ else if (m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_RTC)
{
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_RTC );
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_RTC);
}
- else if ( m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_KEY )
+ else if (m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_KEY)
{
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_KEY );
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_KEY);
}
- else if ( m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_STX )
+ else if (m_ws_portram[0xb2] & m_ws_portram[0xb6] & WSWAN_IFLAG_STX)
{
- m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_STX );
+ m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_ws_portram[0xb0] + WSWAN_INT_STX);
}
else
{
- m_maincpu->set_input_line(0, CLEAR_LINE );
+ m_maincpu->set_input_line(0, CLEAR_LINE);
}
}
-void wswan_state::wswan_set_irq_line(int irq)
+void wswan_state::set_irq_line(int irq)
{
- if ( m_ws_portram[0xb2] & irq )
+ if (m_ws_portram[0xb2] & irq)
{
m_ws_portram[0xb6] |= irq;
- wswan_handle_irqs();
+ handle_irqs();
}
}
-void wswan_state::wswan_clear_irq_line(int irq)
+void wswan_state::dma_sound_cb()
+{
+ if ((m_sound_dma.enable & 0x88) == 0x80)
+ {
+ address_space &space = m_maincpu->space(AS_PROGRAM);
+ /* TODO: Output sound DMA byte */
+ port_w(space, 0x89, space.read_byte(m_sound_dma.source));
+ m_sound_dma.size--;
+ m_sound_dma.source = (m_sound_dma.source + 1) & 0x0fffff;
+ if (m_sound_dma.size == 0)
+ {
+ m_sound_dma.enable &= 0x7F;
+ }
+ }
+}
+
+void wswan_state::clear_irq_line(int irq)
{
m_ws_portram[0xb6] &= ~irq;
- wswan_handle_irqs();
+ handle_irqs();
}
-void wswan_state::wswan_register_save()
+void wswan_state::register_save()
{
save_item(NAME(m_ws_portram));
save_item(NAME(m_internal_eeprom));
save_item(NAME(m_bios_disabled));
save_item(NAME(m_rotate));
-
- save_item(NAME(m_vdp.layer_bg_enable));
- save_item(NAME(m_vdp.layer_fg_enable));
- save_item(NAME(m_vdp.sprites_enable));
- save_item(NAME(m_vdp.window_sprites_enable));
- save_item(NAME(m_vdp.window_fg_mode));
- save_item(NAME(m_vdp.current_line));
- save_item(NAME(m_vdp.line_compare));
- save_item(NAME(m_vdp.sprite_table_address));
- save_item(NAME(m_vdp.sprite_table_buffer));
- save_item(NAME(m_vdp.sprite_first));
- save_item(NAME(m_vdp.sprite_count));
- save_item(NAME(m_vdp.layer_bg_address));
- save_item(NAME(m_vdp.layer_fg_address));
- save_item(NAME(m_vdp.window_fg_left));
- save_item(NAME(m_vdp.window_fg_top));
- save_item(NAME(m_vdp.window_fg_right));
- save_item(NAME(m_vdp.window_fg_bottom));
- save_item(NAME(m_vdp.window_sprites_left));
- save_item(NAME(m_vdp.window_sprites_top));
- save_item(NAME(m_vdp.window_sprites_right));
- save_item(NAME(m_vdp.window_sprites_bottom));
- save_item(NAME(m_vdp.layer_bg_scroll_x));
- save_item(NAME(m_vdp.layer_bg_scroll_y));
- save_item(NAME(m_vdp.layer_fg_scroll_x));
- save_item(NAME(m_vdp.layer_fg_scroll_y));
- save_item(NAME(m_vdp.lcd_enable));
- save_item(NAME(m_vdp.icons));
- save_item(NAME(m_vdp.color_mode));
- save_item(NAME(m_vdp.colors_16));
- save_item(NAME(m_vdp.tile_packed));
- save_item(NAME(m_vdp.timer_hblank_enable));
- save_item(NAME(m_vdp.timer_hblank_mode));
- save_item(NAME(m_vdp.timer_hblank_reload));
- save_item(NAME(m_vdp.timer_vblank_enable));
- save_item(NAME(m_vdp.timer_vblank_mode));
- save_item(NAME(m_vdp.timer_vblank_reload));
- save_item(NAME(m_vdp.timer_vblank_count));
- save_item(NAME(m_vdp.main_palette));
-
+
save_item(NAME(m_sound_dma.source));
save_item(NAME(m_sound_dma.size));
save_item(NAME(m_sound_dma.enable));
-
+
if (m_cart->exists())
m_cart->save_nvram();
-
- machine().save().register_postload(save_prepost_delegate(FUNC(wswan_state::wswan_postload), this));
-}
-
-void wswan_state::wswan_postload()
-{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- // restore the vdp pointers
- m_vdp.vram = (UINT8*)space.get_read_ptr(0);
- m_vdp.palette_vram = (UINT8*)space.get_read_ptr((m_system_type == TYPE_WSC) ? 0xfe00 : 0);
}
void wswan_state::common_start()
{
m_ws_bios_bank = auto_alloc_array(machine(), UINT8, 0x10000);
memcpy(m_ws_bios_bank + 0xffc0, ws_fake_bios_code, 0x40);
-
- m_vdp.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(wswan_state::wswan_scanline_interrupt),this), &m_vdp);
- m_vdp.timer->adjust(attotime::from_ticks(256, 3072000), 0, attotime::from_ticks(256, 3072000));
-
- wswan_register_save();
-
+
+ register_save();
+
machine().device<nvram_device>("nvram")->set_base(m_internal_eeprom, INTERNAL_EEPROM_SIZE);
-
+
if (m_cart->exists())
{
// ROM
m_maincpu->space(AS_PROGRAM).install_read_handler(0x20000, 0x2ffff, read8_delegate(FUNC(ws_cart_slot_device::read_rom20),(ws_cart_slot_device*)m_cart));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x30000, 0x3ffff, read8_delegate(FUNC(ws_cart_slot_device::read_rom30),(ws_cart_slot_device*)m_cart));
m_maincpu->space(AS_PROGRAM).install_read_handler(0x40000, 0xeffff, read8_delegate(FUNC(ws_cart_slot_device::read_rom40),(ws_cart_slot_device*)m_cart));
-
+
// SRAM
if (m_cart->get_type() == WS_SRAM)
{
@@ -231,7 +195,7 @@ void wswan_state::machine_start()
m_system_type = TYPE_WSWAN;
}
-MACHINE_START_MEMBER(wswan_state,wscolor)
+MACHINE_START_MEMBER(wswan_state, wscolor)
{
common_start();
m_system_type = TYPE_WSC;
@@ -239,34 +203,19 @@ MACHINE_START_MEMBER(wswan_state,wscolor)
void wswan_state::machine_reset()
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
-
m_bios_disabled = 0;
-
- m_ws_ram = (UINT8*) m_maincpu->space(AS_PROGRAM).get_read_ptr(0);
- memset(m_ws_ram, 0, 0xffff);
-
+
if (m_cart->exists())
m_rotate = m_cart->get_is_rotated();
else
m_rotate = 0;
-
+
/* Intialize ports */
memcpy(m_ws_portram, ws_portram_init, 256);
-
- /* Initialize VDP */
- memset(&m_vdp, 0, sizeof(m_vdp));
-
- m_vdp.vram = (UINT8*)space.get_read_ptr(0);
- m_vdp.palette_vram = (UINT8*)space.get_read_ptr(( m_system_type == TYPE_WSC ) ? 0xFE00 : 0 );
- m_vdp.current_line = 145; /* Randomly chosen, beginning of VBlank period to give cart some time to boot up */
- m_vdp.color_mode = 0;
- m_vdp.colors_16 = 0;
- m_vdp.tile_packed = 0;
-
+
render_target *target = machine().render().first_target();
target->set_view(m_rotate);
-
+
/* Initialize sound DMA */
memset(&m_sound_dma, 0, sizeof(m_sound_dma));
}
@@ -282,14 +231,15 @@ READ8_MEMBER( wswan_state::bios_r )
READ8_MEMBER( wswan_state::port_r )
{
UINT8 value = m_ws_portram[offset];
-
+
if (offset != 2)
logerror("PC=%X: port read %02X\n", m_maincpu->pc(), offset);
+
+ if (offset < 0x40 || (offset >= 0xa1 && offset < 0xb0))
+ return m_vdp->reg_r(space, offset);
+
switch (offset)
{
- case 0x02: // Current line
- value = m_vdp.current_line;
- break;
case 0x4a: // Sound DMA source address (low)
value = m_sound_dma.source & 0xff;
break;
@@ -308,26 +258,17 @@ READ8_MEMBER( wswan_state::port_r )
case 0x52: // Sound DMA start/stop
value = m_sound_dma.enable;
break;
+ case 0x60:
+ value = m_vdp->reg_r(space, offset);
+ break;
case 0xa0: // Hardware type
- // Bit 0 - Disable/enable Bios
- // Bit 1 - Determine mono/color
- // Bit 2 - Determine color/crystal
+ // Bit 0 - Disable/enable Bios
+ // Bit 1 - Determine mono/color
+ // Bit 2 - Determine color/crystal
value = value & ~ 0x02;
if (m_system_type == TYPE_WSC)
value |= 2;
break;
- case 0xa8:
- value = m_vdp.timer_hblank_count & 0xff;
- break;
- case 0xa9:
- value = m_vdp.timer_hblank_count >> 8;
- break;
- case 0xaa:
- value = m_vdp.timer_vblank_count & 0xff;
- break;
- case 0xab:
- value = m_vdp.timer_vblank_count >> 8;
- break;
case 0xc0:
case 0xc1:
case 0xc2:
@@ -347,7 +288,7 @@ READ8_MEMBER( wswan_state::port_r )
value = m_cart->read_io(space, offset & 0x0f);
break;
}
-
+
return value;
}
@@ -356,319 +297,49 @@ WRITE8_MEMBER( wswan_state::port_w )
address_space &mem = m_maincpu->space(AS_PROGRAM);
UINT8 input;
logerror("PC=%X: port write %02X <- %02X\n", m_maincpu->pc(), offset, data);
+
+ if (offset < 0x40 || (offset >= 0xa1 && offset < 0xb0))
+ {
+ m_vdp->reg_w(space, offset, data);
+ return;
+ }
+
switch (offset)
{
- case 0x00: /* Display control
- Bit 0 - Background layer enable
- Bit 1 - Foreground layer enable
- Bit 2 - Sprites enable
- Bit 3 - Sprite window enable
- Bit 4-5 - Foreground window configuration
- 00 - Foreground layer is displayed inside and outside foreground window area
- 01 - Unknown
- 10 - Foreground layer is displayed only inside foreground window area
- 11 - Foreground layer is displayed outside foreground window area
- Bit 6-7 - Unknown
- */
- m_vdp.layer_bg_enable = data & 0x1;
- m_vdp.layer_fg_enable = (data & 0x2) >> 1;
- m_vdp.sprites_enable = (data & 0x4) >> 2;
- m_vdp.window_sprites_enable = (data & 0x8) >> 3;
- m_vdp.window_fg_mode = (data & 0x30) >> 4;
- break;
- case 0x01: /* Background colour
- In 16 colour mode:
- Bit 0-3 - Palette index
- Bit 4-7 - Palette number
- Otherwise:
- Bit 0-2 - Main palette index
- Bit 3-7 - Unknown
- */
- break;
- case 0x02: /* Current scanline
- Bit 0-7 - Current scanline (Most likely read-only)
- */
- logerror( "Write to current scanline! Current value: %d Data to write: %d\n", m_vdp.current_line, data );
- /* Returning so we don't overwrite the value here, not that it
- * really matters */
- return;
- case 0x03: /* Line compare
- Bit 0-7 - Line compare
- */
- m_vdp.line_compare = data;
- logerror( "Write to line compare: %d\n", data );
- break;
- case 0x04: /* Sprite table base address
- Bit 0-5 - Determine sprite table base address 0 0xxxxxx0 00000000
- Bit 6-7 - Unknown
- */
- m_vdp.sprite_table_address = ( data & 0x3F ) << 9;
- break;
- case 0x05: /* Number of sprite to start drawing with
- Bit 0-7 - First sprite number
- */
- //m_vdp.sprite_first = data;
- if (data) logerror("non-zero first sprite %d\n", m_vdp.sprite_first);
- break;
- case 0x06: /* Number of sprites to draw
- Bit 0-7 - Number of sprites to draw
- */
- //m_vdp.sprite_count = data;
- break;
- case 0x07: /* Background/Foreground table base addresses
- Bit 0-2 - Determine background table base address 00xxx000 00000000
- Bit 3 - Unknown
- Bit 4-6 - Determine foreground table base address 00xxx000 00000000
- Bit 7 - Unknown
- */
- m_vdp.layer_bg_address = (data & 0x7) << 11;
- m_vdp.layer_fg_address = (data & 0x70) << 7;
- break;
- case 0x08: /* Left coordinate of foreground window
- Bit 0-7 - Left coordinate of foreground window area
- */
- m_vdp.window_fg_left = data;
- break;
- case 0x09: /* Top coordinate of foreground window
- Bit 0-7 - Top coordinatte of foreground window area
- */
- m_vdp.window_fg_top = data;
- break;
- case 0x0a: /* Right coordinate of foreground window
- Bit 0-7 - Right coordinate of foreground window area
- */
- m_vdp.window_fg_right = data;
- break;
- case 0x0b: /* Bottom coordinate of foreground window
- Bit 0-7 - Bottom coordinate of foreground window area
- */
- m_vdp.window_fg_bottom = data;
- break;
- case 0x0c: /* Left coordinate of sprite window
- Bit 0-7 - Left coordinate of sprite window area
- */
- m_vdp.window_sprites_left = data;
- break;
- case 0x0d: /* Top coordinate of sprite window
- Bit 0-7 - Top coordinate of sprite window area
- */
- m_vdp.window_sprites_top = data;
- break;
- case 0x0e: /* Right coordinate of sprite window
- Bit 0-7 - Right coordinate of sprite window area
- */
- m_vdp.window_sprites_right = data;
- break;
- case 0x0f: /* Bottom coordinate of sprite window
- Bit 0-7 - Bottom coordiante of sprite window area
- */
- m_vdp.window_sprites_bottom = data;
- break;
- case 0x10: /* Background layer X scroll
- Bit 0-7 - Background layer X scroll
- */
- m_vdp.layer_bg_scroll_x = data;
- break;
- case 0x11: /* Background layer Y scroll
- Bit 0-7 - Background layer Y scroll
- */
- m_vdp.layer_bg_scroll_y = data;
- break;
- case 0x12: /* Foreground layer X scroll
- Bit 0-7 - Foreground layer X scroll
- */
- m_vdp.layer_fg_scroll_x = data;
- break;
- case 0x13: /* Foreground layer Y scroll
- Bit 0-7 - Foreground layer Y scroll
- */
- m_vdp.layer_fg_scroll_y = data;
- break;
- case 0x14: /* LCD control
- Bit 0 - LCD enable
- Bit 1-7 - Unknown
- */
- m_vdp.lcd_enable = data & 0x1;
- break;
- case 0x15: /* LCD icons
- Bit 0 - LCD sleep icon enable
- Bit 1 - Vertical position icon enable
- Bit 2 - Horizontal position icon enable
- Bit 3 - Dot 1 icon enable
- Bit 4 - Dot 2 icon enable
- Bit 5 - Dot 3 icon enable
- Bit 6-7 - Unknown
- */
- m_vdp.icons = data; /* ummmmm */
- break;
- case 0x1c: /* Palette colors 0 and 1
- Bit 0-3 - Gray tone setting for main palette index 0
- Bit 4-7 - Gray tone setting for main palette index 1
- */
- if (m_system_type == TYPE_WSC)
- {
- int i = 15 - ( data & 0x0F );
- int j = 15 - ( ( data & 0xF0 ) >> 4 );
- m_vdp.main_palette[0] = ( i << 8 ) | ( i << 4 ) | i;
- m_vdp.main_palette[1] = ( j << 8 ) | ( j << 4 ) | j;
- }
- else
- {
- m_vdp.main_palette[0] = data & 0x0F;
- m_vdp.main_palette[1] = ( data & 0xF0 ) >> 4;
- }
- break;
- case 0x1d: /* Palette colors 2 and 3
- Bit 0-3 - Gray tone setting for main palette index 2
- Bit 4-7 - Gray tone setting for main palette index 3
- */
- if (m_system_type == TYPE_WSC)
- {
- int i = 15 - ( data & 0x0F );
- int j = 15 - ( ( data & 0xF0 ) >> 4 );
- m_vdp.main_palette[2] = ( i << 8 ) | ( i << 4 ) | i;
- m_vdp.main_palette[3] = ( j << 8 ) | ( j << 4 ) | j;
- }
- else
- {
- m_vdp.main_palette[2] = data & 0x0F;
- m_vdp.main_palette[3] = ( data & 0xF0 ) >> 4;
- }
- break;
- case 0x1e: /* Palette colors 4 and 5
- Bit 0-3 - Gray tone setting for main palette index 4
- Bit 4-7 - Gray tone setting for main paeltte index 5
- */
- if (m_system_type == TYPE_WSC)
- {
- int i = 15 - ( data & 0x0F );
- int j = 15 - ( ( data & 0xF0 ) >> 4 );
- m_vdp.main_palette[4] = ( i << 8 ) | ( i << 4 ) | i;
- m_vdp.main_palette[5] = ( j << 8 ) | ( j << 4 ) | j;
- }
- else
- {
- m_vdp.main_palette[4] = data & 0x0F;
- m_vdp.main_palette[5] = ( data & 0xF0 ) >> 4;
- }
- break;
- case 0x1f: /* Palette colors 6 and 7
- Bit 0-3 - Gray tone setting for main palette index 6
- Bit 4-7 - Gray tone setting for main palette index 7
- */
- if (m_system_type == TYPE_WSC)
- {
- int i = 15 - ( data & 0x0F );
- int j = 15 - ( ( data & 0xF0 ) >> 4 );
- m_vdp.main_palette[6] = ( i << 8 ) | ( i << 4 ) | i;
- m_vdp.main_palette[7] = ( j << 8 ) | ( j << 4 ) | j;
- }
- else
- {
- m_vdp.main_palette[6] = data & 0x0F;
- m_vdp.main_palette[7] = ( data & 0xF0 ) >> 4;
- }
- break;
- case 0x20: /* tile/sprite palette settings
- Bit 0-3 - Palette 0 index 0
- Bit 4-7 - Palette 0 index 1 */
- case 0x21: /* Bit 0-3 - Palette 0 index 2
- Bit 4-7 - Palette 0 index 3 */
- case 0x22: /* Bit 0-3 - Palette 1 index 0
- Bit 4-7 - Palette 1 index 1 */
- case 0x23: /* Bit 0-3 - Palette 1 index 2
- Bit 4-7 - Palette 1 index 3 */
- case 0x24: /* Bit 0-3 - Palette 2 index 0
- Bit 4-7 - Palette 2 index 1 */
- case 0x25: /* Bit 0-3 - Palette 2 index 2
- Bit 4-7 - Palette 2 index 3 */
- case 0x26: /* Bit 0-3 - Palette 3 index 0
- Bit 4-7 - Palette 3 index 1 */
- case 0x27: /* Bit 0-3 - Palette 3 index 2
- Bit 4-7 - Palette 3 index 3 */
- case 0x28: /* Bit 0-3 - Palette 4 index 0
- Bit 4-7 - Palette 4 index 1 */
- case 0x29: /* Bit 0-3 - Palette 4 index 2
- Bit 4-7 - Palette 4 index 3 */
- case 0x2a: /* Bit 0-3 - Palette 5 index 0
- Bit 4-7 - Palette 5 index 1 */
- case 0x2b: /* Bit 0-3 - Palette 5 index 2
- Bit 4-7 - Palette 5 index 3 */
- case 0x2c: /* Bit 0-3 - Palette 6 index 0
- Bit 4-7 - Palette 6 index 1 */
- case 0x2d: /* Bit 0-3 - Palette 6 index 2
- Bit 4-7 - Palette 6 index 3 */
- case 0x2e: /* Bit 0-3 - Palette 7 index 0
- Bit 4-7 - Palette 7 index 1 */
- case 0x2f: /* Bit 0-3 - Palette 7 index 2
- Bit 4-7 - Palette 7 index 3 */
- case 0x30: /* Bit 0-3 - Palette 8 / Sprite Palette 0 index 0
- Bit 4-7 - Palette 8 / Sprite Palette 0 index 1 */
- case 0x31: /* Bit 0-3 - Palette 8 / Sprite Palette 0 index 2
- Bit 4-7 - Palette 8 / Sprite Palette 0 index 3 */
- case 0x32: /* Bit 0-3 - Palette 9 / Sprite Palette 1 index 0
- Bit 4-7 - Palette 9 / Sprite Palette 1 index 1 */
- case 0x33: /* Bit 0-3 - Palette 9 / Sprite Palette 1 index 2
- Bit 4-7 - Palette 9 / Sprite Palette 1 index 3 */
- case 0x34: /* Bit 0-3 - Palette 10 / Sprite Palette 2 index 0
- Bit 4-7 - Palette 10 / Sprite Palette 2 index 1 */
- case 0x35: /* Bit 0-3 - Palette 10 / Sprite Palette 2 index 2
- Bit 4-7 - Palette 10 / Sprite Palette 2 index 3 */
- case 0x36: /* Bit 0-3 - Palette 11 / Sprite Palette 3 index 0
- Bit 4-7 - Palette 11 / Sprite Palette 3 index 1 */
- case 0x37: /* Bit 0-3 - Palette 11 / Sprite Palette 3 index 2
- Bit 4-7 - Palette 11 / Sprite Palette 3 index 3 */
- case 0x38: /* Bit 0-3 - Palette 12 / Sprite Palette 4 index 0
- Bit 4-7 - Palette 12 / Sprite Palette 4 index 1 */
- case 0x39: /* Bit 0-3 - Palette 12 / Sprite Palette 4 index 2
- Bit 4-7 - Palette 12 / Sprite Palette 4 index 3 */
- case 0x3a: /* Bit 0-3 - Palette 13 / Sprite Palette 5 index 0
- Bit 4-7 - Palette 13 / Sprite Palette 5 index 1 */
- case 0x3b: /* Bit 0-3 - Palette 13 / Sprite Palette 5 index 2
- Bit 4-7 - Palette 13 / Sprite Palette 5 index 3 */
- case 0x3c: /* Bit 0-3 - Palette 14 / Sprite Palette 6 index 0
- Bit 4-7 - Palette 14 / Sprite Palette 6 index 1 */
- case 0x3d: /* Bit 0-3 - Palette 14 / Sprite Palette 6 index 2
- Bit 4-7 - Palette 14 / Sprite Palette 6 index 3 */
- case 0x3e: /* Bit 0-3 - Palette 15 / Sprite Palette 7 index 0
- Bit 4-7 - Palette 15 / Sprite Palette 7 index 1 */
- case 0x3f: /* Bit 0-3 - Palette 15 / Sprite Palette 7 index 2
- Bit 4-7 - Palette 15 / Sprite Palette 7 index 3 */
- break;
case 0x40: /* DMA source address (low)
- Bit 0-7 - DMA source address bit 0-7
- */
+ Bit 0-7 - DMA source address bit 0-7
+ */
case 0x41: /* DMA source address (high)
- Bit 0-7 - DMA source address bit 8-15
- */
+ Bit 0-7 - DMA source address bit 8-15
+ */
case 0x42: /* DMA source bank
- Bit 0-7 - DMA source bank number
- */
+ Bit 0-7 - DMA source bank number
+ */
case 0x43: /* DMA destination bank
- Bit 0-7 - DMA destination bank number
- */
+ Bit 0-7 - DMA destination bank number
+ */
case 0x44: /* DMA destination address (low)
- Bit 0-7 - DMA destination address bit 0-7
- */
+ Bit 0-7 - DMA destination address bit 0-7
+ */
case 0x45: /* DMA destination address (high)
- Bit 0-7 - DMA destination address bit 8-15
- */
+ Bit 0-7 - DMA destination address bit 8-15
+ */
case 0x46: /* Size of copied data (low)
- Bit 0-7 - DMA size bit 0-7
- */
+ Bit 0-7 - DMA size bit 0-7
+ */
case 0x47: /* Size of copied data (high)
- Bit 0-7 - DMA size bit 8-15
- */
+ Bit 0-7 - DMA size bit 8-15
+ */
break;
case 0x48: /* DMA control
- Bit 0-6 - Unknown
- Bit 7 - DMA stop/start
- */
+ Bit 0-6 - Unknown
+ Bit 7 - DMA stop/start
+ */
if (data & 0x80)
{
UINT32 src, dst;
UINT16 length;
-
+
src = m_ws_portram[0x40] + (m_ws_portram[0x41] << 8) + (m_ws_portram[0x42] << 16);
dst = m_ws_portram[0x44] + (m_ws_portram[0x45] << 8) + (m_ws_portram[0x43] << 16);
length = m_ws_portram[0x46] + (m_ws_portram[0x47] << 8);
@@ -679,7 +350,7 @@ WRITE8_MEMBER( wswan_state::port_w )
dst++;
}
#ifdef MAME_DEBUG
- logerror("DMA src:%X dst:%X length:%d\n", src, dst, length);
+ logerror("DMA src:%X dst:%X length:%d\n", src, dst, length);
#endif
m_ws_portram[0x40] = src & 0xff;
m_ws_portram[0x41] = (src >> 8) & 0xff;
@@ -691,330 +362,257 @@ WRITE8_MEMBER( wswan_state::port_w )
}
break;
case 0x4a: /* Sound DMA source address (low)
- Bit 0-7 - Sound DMA source address bit 0-7
- */
+ Bit 0-7 - Sound DMA source address bit 0-7
+ */
m_sound_dma.source = (m_sound_dma.source & 0x0fff00) | data;
break;
case 0x4b: /* Sound DMA source address (high)
- Bit 0-7 - Sound DMA source address bit 8-15
- */
+ Bit 0-7 - Sound DMA source address bit 8-15
+ */
m_sound_dma.source = (m_sound_dma.source & 0x0f00ff) | (data << 8);
break;
case 0x4c: /* Sound DMA source memory segment
- Bit 0-3 - Sound DMA source address segment
- Bit 4-7 - Unknown
- */
+ Bit 0-3 - Sound DMA source address segment
+ Bit 4-7 - Unknown
+ */
m_sound_dma.source = (m_sound_dma.source & 0xffff) | ((data & 0x0f) << 16);
break;
case 0x4d: /* Unknown */
break;
case 0x4e: /* Sound DMA transfer size (low)
- Bit 0-7 - Sound DMA transfer size bit 0-7
- */
+ Bit 0-7 - Sound DMA transfer size bit 0-7
+ */
m_sound_dma.size = (m_sound_dma.size & 0xff00) | data;
break;
case 0x4f: /* Sound DMA transfer size (high)
- Bit 0-7 - Sound DMA transfer size bit 8-15
- */
+ Bit 0-7 - Sound DMA transfer size bit 8-15
+ */
m_sound_dma.size = (m_sound_dma.size & 0xff) | (data << 8);
break;
case 0x50: /* Unknown */
case 0x51: /* Unknown */
break;
case 0x52: /* Sound DMA start/stop
- Bit 0-6 - Unknown
- Bit 7 - Sound DMA stop/start
- */
+ Bit 0-6 - Unknown
+ Bit 7 - Sound DMA stop/start
+ */
m_sound_dma.enable = data;
break;
- case 0x60: /* Video mode
- Bit 0-4 - Unknown
- Bit 5 - Packed mode 0 = not packed mode, 1 = packed mode
- Bit 6 - 4/16 colour mode select: 0 = 4 colour mode, 1 = 16 colour mode
- Bit 7 - monochrome/colour mode select: 0 = monochrome mode, 1 = colour mode
- */
- /*
- * 111 - packed, 16 color, use 4000/8000, color
- * 110 - not packed, 16 color, use 4000/8000, color
- * 101 - packed, 4 color, use 2000, color
- * 100 - not packed, 4 color, use 2000, color
- * 011 - packed, 16 color, use 4000/8000, monochrome
- * 010 - not packed, 16 color , use 4000/8000, monochrome
- * 001 - packed, 4 color, use 2000, monochrome
- * 000 - not packed, 4 color, use 2000, monochrome - Regular WS monochrome
- */
- if (m_system_type == TYPE_WSC)
- {
- m_vdp.color_mode = data & 0x80;
- m_vdp.colors_16 = data & 0x40;
- m_vdp.tile_packed = data & 0x20;
- }
+ case 0x60:
+ m_vdp->reg_w(space, offset, data);
break;
case 0x80: /* Audio 1 freq (lo)
- Bit 0-7 - Audio channel 1 frequency bit 0-7
- */
+ Bit 0-7 - Audio channel 1 frequency bit 0-7
+ */
case 0x81: /* Audio 1 freq (hi)
- Bit 0-7 - Audio channel 1 frequency bit 8-15
- */
+ Bit 0-7 - Audio channel 1 frequency bit 8-15
+ */
case 0x82: /* Audio 2 freq (lo)
- Bit 0-7 - Audio channel 2 frequency bit 0-7
- */
+ Bit 0-7 - Audio channel 2 frequency bit 0-7
+ */
case 0x83: /* Audio 2 freq (hi)
- Bit 0-7 - Audio channel 2 frequency bit 8-15
- */
+ Bit 0-7 - Audio channel 2 frequency bit 8-15
+ */
case 0x84: /* Audio 3 freq (lo)
- Bit 0-7 - Audio channel 3 frequency bit 0-7
- */
+ Bit 0-7 - Audio channel 3 frequency bit 0-7
+ */
case 0x85: /* Audio 3 freq (hi)
- Bit 0-7 - Audio channel 3 frequency bit 8-15
- */
+ Bit 0-7 - Audio channel 3 frequency bit 8-15
+ */
case 0x86: /* Audio 4 freq (lo)
- Bit 0-7 - Audio channel 4 frequency bit 0-7
- */
+ Bit 0-7 - Audio channel 4 frequency bit 0-7
+ */
case 0x87: /* Audio 4 freq (hi)
- Bit 0-7 - Audio channel 4 frequency bit 8-15
- */
+ Bit 0-7 - Audio channel 4 frequency bit 8-15
+ */
case 0x88: /* Audio 1 volume
- Bit 0-3 - Right volume audio channel 1
- Bit 4-7 - Left volume audio channel 1
- */
+ Bit 0-3 - Right volume audio channel 1
+ Bit 4-7 - Left volume audio channel 1
+ */
case 0x89: /* Audio 2 volume
- Bit 0-3 - Right volume audio channel 2
- Bit 4-7 - Left volume audio channel 2
- */
+ Bit 0-3 - Right volume audio channel 2
+ Bit 4-7 - Left volume audio channel 2
+ */
case 0x8a: /* Audio 3 volume
- Bit 0-3 - Right volume audio channel 3
- Bit 4-7 - Left volume audio channel 3
- */
+ Bit 0-3 - Right volume audio channel 3
+ Bit 4-7 - Left volume audio channel 3
+ */
case 0x8b: /* Audio 4 volume
- Bit 0-3 - Right volume audio channel 4
- Bit 4-7 - Left volume audio channel 4
- */
+ Bit 0-3 - Right volume audio channel 4
+ Bit 4-7 - Left volume audio channel 4
+ */
case 0x8c: /* Sweep step
- Bit 0-7 - Sweep step
- */
+ Bit 0-7 - Sweep step
+ */
case 0x8d: /* Sweep time
- Bit 0-7 - Sweep time
- */
+ Bit 0-7 - Sweep time
+ */
case 0x8e: /* Noise control
- Bit 0-2 - Noise generator type
- Bit 3 - Reset
- Bit 4 - Enable
- Bit 5-7 - Unknown
- */
+ Bit 0-2 - Noise generator type
+ Bit 3 - Reset
+ Bit 4 - Enable
+ Bit 5-7 - Unknown
+ */
case 0x8f: /* Sample location
- Bit 0-7 - Sample address location 0 00xxxxxx xx000000
- */
+ Bit 0-7 - Sample address location 0 00xxxxxx xx000000
+ */
case 0x90: /* Audio control
- Bit 0 - Audio 1 enable
- Bit 1 - Audio 2 enable
- Bit 2 - Audio 3 enable
- Bit 3 - Audio 4 enable
- Bit 4 - Unknown
- Bit 5 - Audio 2 voice mode enable
- Bit 6 - Audio 3 sweep mode enable
- Bit 7 - Audio 4 noise mode enable
- */
+ Bit 0 - Audio 1 enable
+ Bit 1 - Audio 2 enable
+ Bit 2 - Audio 3 enable
+ Bit 3 - Audio 4 enable
+ Bit 4 - Unknown
+ Bit 5 - Audio 2 voice mode enable
+ Bit 6 - Audio 3 sweep mode enable
+ Bit 7 - Audio 4 noise mode enable
+ */
case 0x91: /* Audio output
- Bit 0 - Mono select
- Bit 1-2 - Output volume
- Bit 3 - External stereo
- Bit 4-6 - Unknown
- Bit 7 - External speaker (Read-only, set by hardware)
- */
+ Bit 0 - Mono select
+ Bit 1-2 - Output volume
+ Bit 3 - External stereo
+ Bit 4-6 - Unknown
+ Bit 7 - External speaker (Read-only, set by hardware)
+ */
case 0x92: /* Noise counter shift register (lo)
- Bit 0-7 - Noise counter shift register bit 0-7
- */
+ Bit 0-7 - Noise counter shift register bit 0-7
+ */
case 0x93: /* Noise counter shift register (hi)
- Bit 0-6 - Noise counter shift register bit 8-14
- bit 7 - Unknown
- */
+ Bit 0-6 - Noise counter shift register bit 8-14
+ bit 7 - Unknown
+ */
case 0x94: /* Master volume
- Bit 0-3 - Master volume
- Bit 4-7 - Unknown
- */
+ Bit 0-3 - Master volume
+ Bit 4-7 - Unknown
+ */
m_sound->port_w(space, offset, data);
break;
case 0xa0: /* Hardware type - this is probably read only
- Bit 0 - Enable cartridge slot and/or disable bios
- Bit 1 - Hardware type: 0 = WS, 1 = WSC
- Bit 2-7 - Unknown
- */
+ Bit 0 - Enable cartridge slot and/or disable bios
+ Bit 1 - Hardware type: 0 = WS, 1 = WSC
+ Bit 2-7 - Unknown
+ */
if ((data & 0x01) && !m_bios_disabled)
m_bios_disabled = 1;
break;
- case 0xa2: /* Timer control
- Bit 0 - HBlank Timer enable
- Bit 1 - HBlank Timer mode: 0 = one shot, 1 = auto reset
- Bit 2 - VBlank Timer(1/75s) enable
- Bit 3 - VBlank Timer mode: 0 = one shot, 1 = auto reset
- Bit 4-7 - Unknown
- */
- m_vdp.timer_hblank_enable = BIT(data, 0);
- m_vdp.timer_hblank_mode = BIT(data, 1);
- m_vdp.timer_vblank_enable = BIT(data, 2);
- m_vdp.timer_vblank_mode = BIT(data, 3);
- break;
- case 0xa4: /* HBlank timer frequency (low) - reload value
- Bit 0-7 - HBlank timer reload value bit 0-7
- */
- m_vdp.timer_hblank_reload &= 0xff00;
- m_vdp.timer_hblank_reload += data;
- m_vdp.timer_hblank_count = m_vdp.timer_hblank_reload;
- break;
- case 0xa5: /* HBlank timer frequency (high) - reload value
- Bit 8-15 - HBlank timer reload value bit 8-15
- */
- m_vdp.timer_hblank_reload &= 0xff;
- m_vdp.timer_hblank_reload += data << 8;
- m_vdp.timer_hblank_count = m_vdp.timer_hblank_reload;
- break;
- case 0xa6: /* VBlank timer frequency (low) - reload value
- Bit 0-7 - VBlank timer reload value bit 0-7
- */
- m_vdp.timer_vblank_reload &= 0xff00;
- m_vdp.timer_vblank_reload += data;
- m_vdp.timer_vblank_count = m_vdp.timer_vblank_reload;
- break;
- case 0xa7: /* VBlank timer frequency (high) - reload value
- Bit 0-7 - VBlank timer reload value bit 8-15
- */
- m_vdp.timer_vblank_reload &= 0xff;
- m_vdp.timer_vblank_reload += data << 8;
- m_vdp.timer_vblank_count = m_vdp.timer_vblank_reload;
- break;
- case 0xa8: /* HBlank counter (low)
- Bit 0-7 - HBlank counter bit 0-7
- */
- case 0xa9: /* HBlank counter (high)
- Bit 0-7 - HBlank counter bit 8-15
- */
- case 0xaa: /* VBlank counter (low)
- Bit 0-7 - VBlank counter bit 0-7
- */
- case 0xab: /* VBlank counter (high)
- Bit 0-7 - VBlank counter bit 8-15
- */
- break;
-
+
case 0xb0: /* Interrupt base vector
- Bit 0-7 - Interrupt base vector
- */
+ Bit 0-7 - Interrupt base vector
+ */
break;
case 0xb1: /* Communication byte
- Bit 0-7 - Communication byte
- */
+ Bit 0-7 - Communication byte
+ */
break;
case 0xb2: /* Interrupt enable
- Bit 0 - Serial transmit interrupt enable
- Bit 1 - Key press interrupt enable
- Bit 2 - RTC alarm interrupt enable
- Bit 3 - Serial receive interrupt enable
- Bit 4 - Drawing line detection interrupt enable
- Bit 5 - VBlank timer interrupt enable
- Bit 6 - VBlank interrupt enable
- Bit 7 - HBlank timer interrupt enable
- */
+ Bit 0 - Serial transmit interrupt enable
+ Bit 1 - Key press interrupt enable
+ Bit 2 - RTC alarm interrupt enable
+ Bit 3 - Serial receive interrupt enable
+ Bit 4 - Drawing line detection interrupt enable
+ Bit 5 - VBlank timer interrupt enable
+ Bit 6 - VBlank interrupt enable
+ Bit 7 - HBlank timer interrupt enable
+ */
break;
case 0xb3: /* serial communication control
- Bit 0 - Receive complete
- Bit 1 - Error
- Bit 2 - Send complete
- Bit 3-4 - Unknown
- Bit 5 - Send data interrupt generation
- Bit 6 - Connection speed: 0 = 9600 bps, 1 = 38400 bps
- bit 7 - Receive data interrupt generation
- */
-// data |= 0x02;
+ Bit 0 - Receive complete
+ Bit 1 - Error
+ Bit 2 - Send complete
+ Bit 3-4 - Unknown
+ Bit 5 - Send data interrupt generation
+ Bit 6 - Connection speed: 0 = 9600 bps, 1 = 38400 bps
+ bit 7 - Receive data interrupt generation
+ */
+ // data |= 0x02;
m_ws_portram[0xb1] = 0xff;
if (data & 0x80)
{
-// m_ws_portram[0xb1] = 0x00;
+ // m_ws_portram[0xb1] = 0x00;
data |= 0x04;
}
if (data & 0x20)
{
-// data |= 0x01;
+ // data |= 0x01;
}
break;
case 0xb5: /* Read controls
- Bit 0-3 - Current state of input lines (read-only)
- Bit 4-6 - Select line of inputs to read
- 001 - Read Y cursors
- 010 - Read X cursors
- 100 - Read START,A,B buttons
- Bit 7 - Unknown
- */
+ Bit 0-3 - Current state of input lines (read-only)
+ Bit 4-6 - Select line of inputs to read
+ 001 - Read Y cursors
+ 010 - Read X cursors
+ 100 - Read START,A,B buttons
+ Bit 7 - Unknown
+ */
data = data & 0xf0;
switch (data)
- {
- case 0x10: /* Read Y cursors: Y1 - Y2 - Y3 - Y4 */
- input = m_cursy->read();
- if (m_rotate) // reorient controls if the console is rotated
- {
- if (input & 0x01) data |= 0x02;
- if (input & 0x02) data |= 0x04;
- if (input & 0x04) data |= 0x08;
- if (input & 0x08) data |= 0x01;
- }
- else
- data = data | input;
+ {
+ case 0x10: /* Read Y cursors: Y1 - Y2 - Y3 - Y4 */
+ input = m_cursy->read();
+ if (m_rotate) // reorient controls if the console is rotated
+ {
+ if (input & 0x01) data |= 0x02;
+ if (input & 0x02) data |= 0x04;
+ if (input & 0x04) data |= 0x08;
+ if (input & 0x08) data |= 0x01;
+ }
+ else
+ data = data | input;
break;
- case 0x20: /* Read X cursors: X1 - X2 - X3 - X4 */
- input = m_cursx->read();
- if (m_rotate) // reorient controls if the console is rotated
- {
- if (input & 0x01) data |= 0x02;
- if (input & 0x02) data |= 0x04;
- if (input & 0x04) data |= 0x08;
- if (input & 0x08) data |= 0x01;
- }
- else
- data = data | input;
+ case 0x20: /* Read X cursors: X1 - X2 - X3 - X4 */
+ input = m_cursx->read();
+ if (m_rotate) // reorient controls if the console is rotated
+ {
+ if (input & 0x01) data |= 0x02;
+ if (input & 0x02) data |= 0x04;
+ if (input & 0x04) data |= 0x08;
+ if (input & 0x08) data |= 0x01;
+ }
+ else
+ data = data | input;
break;
- case 0x40: /* Read buttons: START - A - B */
- data = data | m_buttons->read();
+ case 0x40: /* Read buttons: START - A - B */
+ data = data | m_buttons->read();
break;
- }
+ }
break;
case 0xb6: /* Interrupt acknowledge
- Bit 0 - Serial transmit interrupt acknowledge
- Bit 1 - Key press interrupt acknowledge
- Bit 2 - RTC alarm interrupt acknowledge
- Bit 3 - Serial receive interrupt acknowledge
- Bit 4 - Drawing line detection interrupt acknowledge
- Bit 5 - VBlank timer interrupt acknowledge
- Bit 6 - VBlank interrupt acknowledge
- Bit 7 - HBlank timer interrupt acknowledge
- */
- wswan_clear_irq_line(data);
+ Bit 0 - Serial transmit interrupt acknowledge
+ Bit 1 - Key press interrupt acknowledge
+ Bit 2 - RTC alarm interrupt acknowledge
+ Bit 3 - Serial receive interrupt acknowledge
+ Bit 4 - Drawing line detection interrupt acknowledge
+ Bit 5 - VBlank timer interrupt acknowledge
+ Bit 6 - VBlank interrupt acknowledge
+ Bit 7 - HBlank timer interrupt acknowledge
+ */
+ clear_irq_line(data);
data = m_ws_portram[0xb6];
break;
case 0xba: /* Internal EEPROM data (low)
- Bit 0-7 - Internal EEPROM data transfer bit 0-7
- */
+ Bit 0-7 - Internal EEPROM data transfer bit 0-7
+ */
case 0xbb: /* Internal EEPROM data (high)
- Bit 0-7 - Internal EEPROM data transfer bit 8-15
- */
+ Bit 0-7 - Internal EEPROM data transfer bit 8-15
+ */
break;
case 0xbc: /* Internal EEPROM address (low)
- Bit 0-7 - Internal EEPROM address bit 1-8
- */
+ Bit 0-7 - Internal EEPROM address bit 1-8
+ */
case 0xbd: /* Internal EEPROM address (high)
- Bit 0 - Internal EEPROM address bit 9(?)
- Bit 1-7 - Unknown
- Only 1KByte internal EEPROM??
- */
+ Bit 0 - Internal EEPROM address bit 9(?)
+ Bit 1-7 - Unknown
+ Only 1KByte internal EEPROM??
+ */
break;
case 0xbe: /* Internal EEPROM command
- Bit 0 - Read complete (read only)
- Bit 1 - Write complete (read only)
- Bit 2-3 - Unknown
- Bit 4 - Read
- Bit 5 - Write
- Bit 6 - Protect
- Bit 7 - Initialize
- */
+ Bit 0 - Read complete (read only)
+ Bit 1 - Write complete (read only)
+ Bit 2-3 - Unknown
+ Bit 4 - Read
+ Bit 5 - Write
+ Bit 6 - Protect
+ Bit 7 - Initialize
+ */
if (data & 0x20)
{
UINT16 addr = ( ( ( m_ws_portram[0xbd] << 8 ) | m_ws_portram[0xbc] ) << 1 ) & 0x1FF;
@@ -1056,92 +654,7 @@ WRITE8_MEMBER( wswan_state::port_w )
logerror( "Write to unsupported port: %X - %X\n", offset, data );
break;
}
-
+
/* Update the port value */
m_ws_portram[offset] = data;
}
-
-
-TIMER_CALLBACK_MEMBER(wswan_state::wswan_scanline_interrupt)
-{
- if( m_vdp.current_line < 144 )
- {
- wswan_refresh_scanline();
- }
-
- /* Decrement 12kHz (HBlank) counter */
- if ( m_vdp.timer_hblank_enable && m_vdp.timer_hblank_reload != 0 )
- {
- m_vdp.timer_hblank_count--;
- logerror( "timer_hblank_count: %X\n", m_vdp.timer_hblank_count );
- if ( m_vdp.timer_hblank_count == 0 )
- {
- if ( m_vdp.timer_hblank_mode )
- {
- m_vdp.timer_hblank_count = m_vdp.timer_hblank_reload;
- }
- else
- {
- m_vdp.timer_hblank_reload = 0;
- }
- logerror( "trigerring hbltmr interrupt\n" );
- wswan_set_irq_line( WSWAN_IFLAG_HBLTMR );
- }
- }
-
- /* Handle Sound DMA */
- if ( ( m_sound_dma.enable & 0x88 ) == 0x80 )
- {
- address_space &space = m_maincpu->space(AS_PROGRAM );
- /* TODO: Output sound DMA byte */
- port_w( space, 0x89, space.read_byte(m_sound_dma.source ) );
- m_sound_dma.size--;
- m_sound_dma.source = ( m_sound_dma.source + 1 ) & 0x0FFFFF;
- if ( m_sound_dma.size == 0 )
- {
- m_sound_dma.enable &= 0x7F;
- }
- }
-
-// m_vdp.current_line = (m_vdp.current_line + 1) % 159;
-
- if( m_vdp.current_line == 144 ) // buffer sprite table
- {
- memcpy(m_vdp.sprite_table_buffer, &m_vdp.vram[m_vdp.sprite_table_address], 512);
- m_vdp.sprite_count = m_ws_portram[0x06];
- m_vdp.sprite_first = m_ws_portram[0x05]; // always zero?
- }
-
- if( m_vdp.current_line == 144 )
- {
- wswan_set_irq_line( WSWAN_IFLAG_VBL );
- /* Decrement 75Hz (VBlank) counter */
- if ( m_vdp.timer_vblank_enable && m_vdp.timer_vblank_reload != 0 )
- {
- m_vdp.timer_vblank_count--;
- logerror( "timer_vblank_count: %X\n", m_vdp.timer_vblank_count );
- if ( m_vdp.timer_vblank_count == 0 )
- {
- if ( m_vdp.timer_vblank_mode )
- {
- m_vdp.timer_vblank_count = m_vdp.timer_vblank_reload;
- }
- else
- {
- m_vdp.timer_vblank_reload = 0;
- }
- logerror( "triggering vbltmr interrupt\n" );
- wswan_set_irq_line( WSWAN_IFLAG_VBLTMR );
- }
- }
- }
-
-// m_vdp.current_line = (m_vdp.current_line + 1) % 159;
-
- if ( m_vdp.current_line == m_vdp.line_compare )
- {
- wswan_set_irq_line( WSWAN_IFLAG_LCMP );
- }
-
- m_vdp.current_line = (m_vdp.current_line + 1) % 159;
-}
diff --git a/src/mess/machine/x820kb.c b/src/mess/machine/x820kb.c
new file mode 100644
index 00000000000..0e89efc38f6
--- /dev/null
+++ b/src/mess/machine/x820kb.c
@@ -0,0 +1,390 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Xerox 820/820-II ASCII keyboard emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+*********************************************************************/
+
+/*
+
+PCB Layout
+----------
+
+Maxi-Switch Co.
+630107-02
+
+|-----------------------------------------------------------------------|
+| |--CN1--| CN2 |
+| 8748 6MHz 74154 * |
+| |
+|-----------------------------------------------------------------------|
+
+Notes:
+ All IC's shown.
+
+ 8048 - NEC D8748D
+ 74154 - 4-line to 16-line decoder/multiplexer
+ * - unpopulated 8-pin chip
+ CN1 - 2x16 PCB header
+ CN2 - unpopulated RJ-45? connector
+
+*/
+
+/*
+
+ TODO:
+
+ - repeat
+ - what are T0/T1/INT?
+
+*/
+
+#include "x820kb.h"
+
+
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#define I8748_TAG "i8748"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type XEROX_820_KEYBOARD = &device_creator<xerox_820_keyboard_t>;
+
+
+//-------------------------------------------------
+// ROM( xerox_820_keyboard )
+//-------------------------------------------------
+
+ROM_START( xerox_820_keyboard )
+ ROM_REGION( 0x400, I8748_TAG, 0 )
+ ROM_LOAD( "820iikey.bin", 0x000, 0x400, CRC(8ea3b39b) SHA1(3f05959f54a558b273567b1b4f0c7cdf46d8d9bf) )
+ROM_END
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const rom_entry *xerox_820_keyboard_t::device_rom_region() const
+{
+ return ROM_NAME( xerox_820_keyboard );
+}
+
+
+//-------------------------------------------------
+// ADDRESS_MAP( kb_io )
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( xerox_820_keyboard_io, AS_IO, 8, xerox_820_keyboard_t )
+ AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(kb_p1_r, kb_p1_w)
+ AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READ(kb_p2_r) AM_WRITENOP
+ AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(kb_t0_r)
+ AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T1) AM_READ(kb_t1_r)
+ AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_WRITE(kb_bus_w)
+ADDRESS_MAP_END
+
+
+//-------------------------------------------------
+// MACHINE_DRIVER( xerox_820_keyboard )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( xerox_820_keyboard )
+ MCFG_CPU_ADD(I8748_TAG, I8048, XTAL_6MHz)
+ MCFG_CPU_IO_MAP(xerox_820_keyboard_io)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor xerox_820_keyboard_t::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( xerox_820_keyboard );
+}
+
+
+//-------------------------------------------------
+// INPUT_PORTS( xerox_820_keyboard )
+//-------------------------------------------------
+
+INPUT_PORTS_START( xerox_820_keyboard )
+ PORT_START("Y0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
+
+ PORT_START("Y1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
+
+ PORT_START("Y2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LINE FEED") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('"') PORT_CHAR('`')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':') PORT_CHAR('~')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+
+ PORT_START("Y3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad .")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?') PORT_CHAR('\\')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+
+ PORT_START("Y4")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) // ; =
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) // : < >
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
+
+ PORT_START("Y5")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('0') PORT_CHAR(')')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('9') PORT_CHAR('(')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("BACK SPACE") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL") PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad -") PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
+
+ PORT_START("Y6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') 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_2) PORT_CHAR('2') PORT_CHAR('@')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("HELP") PORT_CODE(KEYCODE_TILDE)
+
+ PORT_START("Y7")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB))
+
+ PORT_START("Y8")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+
+ PORT_START("YF")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK)) PORT_TOGGLE
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Left CTRL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Right CTRL") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor xerox_820_keyboard_t::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( xerox_820_keyboard );
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// xerox_820_keyboard_t - constructor
+//-------------------------------------------------
+
+xerox_820_keyboard_t::xerox_820_keyboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, XEROX_820_KEYBOARD, "Xerox 820 Keyboard", tag, owner, clock, "x820kb", __FILE__),
+ m_maincpu(*this, I8748_TAG),
+ m_y0(*this, "Y0"),
+ m_y1(*this, "Y1"),
+ m_y2(*this, "Y2"),
+ m_y3(*this, "Y3"),
+ m_y4(*this, "Y4"),
+ m_y5(*this, "Y5"),
+ m_y6(*this, "Y6"),
+ m_y7(*this, "Y7"),
+ m_y8(*this, "Y8"),
+ m_yf(*this, "YF"),
+ m_kbstb_cb(*this),
+ m_p1(0xff),
+ m_bus(0xff)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void xerox_820_keyboard_t::device_start()
+{
+ // state saving
+ save_item(NAME(m_p1));
+ save_item(NAME(m_bus));
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void xerox_820_keyboard_t::device_reset()
+{
+ m_kbstb_cb.resolve_safe();
+}
+
+void xerox_820_keyboard_t::device_reset_after_children()
+{
+ m_maincpu->set_input_line(MCS48_INPUT_IRQ, ASSERT_LINE);
+}
+
+
+//-------------------------------------------------
+// kb_p1_r -
+//-------------------------------------------------
+
+READ8_MEMBER( xerox_820_keyboard_t::kb_p1_r )
+{
+ return m_p1; // TODO: move to mcs48.c
+}
+
+
+//-------------------------------------------------
+// kb_p1_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( xerox_820_keyboard_t::kb_p1_w )
+{
+ /*
+
+ bit description
+
+ 0 A0
+ 1 A1
+ 2 A2
+ 3 A3
+ 4 KBSTB
+ 5
+ 6
+ 7 ? (toggled if T1=0)
+
+ */
+
+ m_p1 = data;
+
+ m_kbstb_cb(BIT(data, 4) ? CLEAR_LINE : ASSERT_LINE);
+}
+
+
+//-------------------------------------------------
+// kb_p2_r -
+//-------------------------------------------------
+
+READ8_MEMBER( xerox_820_keyboard_t::kb_p2_r )
+{
+ UINT8 data = 0xff;
+
+ switch (m_p1 & 0x0f)
+ {
+ case 0: data &= m_y0->read(); break;
+ case 1: data &= m_y1->read(); break;
+ case 2: data &= m_y2->read(); break;
+ case 3: data &= m_y3->read(); break;
+ case 4: data &= m_y4->read(); break;
+ case 5: data &= m_y5->read(); break;
+ case 6: data &= m_y6->read(); break;
+ case 7: data &= m_y7->read(); break;
+ case 8: data &= m_y8->read(); break;
+ case 0xf: data &= m_yf->read(); break;
+ }
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// kb_t0_r -
+//-------------------------------------------------
+
+READ8_MEMBER( xerox_820_keyboard_t::kb_t0_r )
+{
+ UINT8 data = 1;
+
+ switch (m_p1 & 0x0f)
+ {
+ case 0xd: data = 1; break; // ??? if 0, return key data | 0x80
+ case 0xe: data = 1; break; // ??? if 0, set r6=1
+ }
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// kb_t1_r -
+//-------------------------------------------------
+
+READ8_MEMBER( xerox_820_keyboard_t::kb_t1_r )
+{
+ return 1; // ??? if 0, toggle P17
+}
+
+
+//-------------------------------------------------
+// kb_bus_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( xerox_820_keyboard_t::kb_bus_w )
+{
+ m_bus = data;
+}
diff --git a/src/mess/machine/x820kb.h b/src/mess/machine/x820kb.h
new file mode 100644
index 00000000000..ccb025ef7e8
--- /dev/null
+++ b/src/mess/machine/x820kb.h
@@ -0,0 +1,90 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Xerox 820/820-II ASCII keyboard emulation
+
+ Copyright MESS Team.
+ Visit http://mamedev.org for licensing and usage restrictions.
+
+*********************************************************************/
+
+#pragma once
+
+#ifndef __XEROX_820_KEYBOARD__
+#define __XEROX_820_KEYBOARD__
+
+#include "emu.h"
+#include "cpu/mcs48/mcs48.h"
+
+
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_XEROX_820_KEYBOARD_KBSTB_CALLBACK(_devcb) \
+ devcb = &xerox_820_keyboard_t::set_kbstb_wr_callback(*device, DEVCB_##_devcb);
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> xerox_820_keyboard_t
+
+class xerox_820_keyboard_t : public device_t
+{
+public:
+ // construction/destruction
+ xerox_820_keyboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ template<class _Object> static devcb_base &set_kbstb_wr_callback(device_t &device, _Object object) { return downcast<xerox_820_keyboard_t &>(device).m_kbstb_cb.set_callback(object); }
+
+ // optional information overrides
+ virtual const rom_entry *device_rom_region() const;
+ virtual machine_config_constructor device_mconfig_additions() const;
+ virtual ioport_constructor device_input_ports() const;
+
+ UINT8 read() { return m_bus; }
+
+ DECLARE_READ8_MEMBER( kb_p1_r );
+ DECLARE_WRITE8_MEMBER( kb_p1_w );
+ DECLARE_READ8_MEMBER( kb_p2_r );
+ DECLARE_READ8_MEMBER( kb_t0_r );
+ DECLARE_READ8_MEMBER( kb_t1_r );
+ DECLARE_WRITE8_MEMBER( kb_bus_w );
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void device_reset_after_children();
+
+private:
+ required_device<cpu_device> m_maincpu;
+ required_ioport m_y0;
+ required_ioport m_y1;
+ required_ioport m_y2;
+ required_ioport m_y3;
+ required_ioport m_y4;
+ required_ioport m_y5;
+ required_ioport m_y6;
+ required_ioport m_y7;
+ required_ioport m_y8;
+ required_ioport m_yf;
+
+ devcb_write_line m_kbstb_cb;
+
+ UINT8 m_p1;
+ UINT8 m_bus;
+};
+
+
+// device type definition
+extern const device_type XEROX_820_KEYBOARD;
+
+
+
+#endif
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index ba231c948a7..110903f6dfa 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -297,6 +297,7 @@ intvoice // Mattel Intellivision + IntelliVoice expansion - 1982
// Milton Bradley
microvsn // MicroVision - 1979
+simon
// Entex
advision // Adventurevision
@@ -332,6 +333,9 @@ wscolor // Bandai WonderSwan Color Handheld
// EPOCH
gamepock // Epoch Game Pocket Computer
+// Bit Corp
+gamate // Bit Corp Gamate
+
// KOEI
pasogo // KOEI PasoGo
@@ -2474,6 +2478,7 @@ itt3030
vax785
ms0515
ie15
+dvk_ksm
asmapro
asma2k
altos5
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index a0d06ec1e98..aa5bec24951 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -425,6 +425,7 @@ MACHINES += LDV1000
MACHINES += LDVP931
MACHINES += LH5810
MACHINES += LINFLASH
+#MACHINES += LPCI
MACHINES += LSI53C810
MACHINES += M68307
MACHINES += M68340
@@ -478,7 +479,6 @@ MACHINES += PC_FDC
MACHINES += PC_LPT
MACHINES += PCCARD
MACHINES += PCF8593
-#MACHINES += PCI
MACHINES += PCKEYBRD
MACHINES += PIC8259
MACHINES += PIT8253
@@ -599,6 +599,7 @@ BUSES += IQ151
BUSES += ISA
BUSES += ISBX
BUSES += KC
+BUSES += LPCI
BUSES += MACPDS
BUSES += MIDI
BUSES += MEGADRIVE
@@ -609,7 +610,6 @@ BUSES += NUBUS
BUSES += O2
BUSES += ORICEXT
BUSES += PCE
-BUSES += PCI
BUSES += PC_JOY
BUSES += PC_KBD
BUSES += PET
@@ -901,6 +901,7 @@ $(MESSOBJ)/mame.a: \
$(MAME_MACHINE)/naomim2.o \
$(MAME_MACHINE)/naomim4.o \
$(MAME_MACHINE)/naomirom.o \
+ $(MAME_MACHINE)/315-5881_crypt.o \
$(MAME_VIDEO)/powervr2.o \
$(MAME_DRIVERS)/neogeo.o \
$(MAME_MACHINE)/neoboot.o \
@@ -959,7 +960,7 @@ $(MESSOBJ)/act.a: \
$(MESS_DRIVERS)/apricotf.o \
$(MESS_DRIVERS)/apricotp.o \
$(MESS_MACHINE)/apricotkb.o \
- $(MESS_DRIVERS)/victor9k.o $(MESS_MACHINE)/victor9kb.o \
+ $(MESS_DRIVERS)/victor9k.o $(MESS_MACHINE)/victor9kb.o $(MESS_MACHINE)/victor9k_fdc.o \
$(MESSOBJ)/adc.a: \
$(MESS_DRIVERS)/super6.o \
@@ -1029,7 +1030,7 @@ $(MESSOBJ)/bally.a: \
$(MESSOBJ)/bandai.a: \
$(MESS_DRIVERS)/sv8000.o \
$(MESS_DRIVERS)/rx78.o \
- $(MESS_DRIVERS)/wswan.o $(MESS_AUDIO)/wswan_snd.o $(MESS_MACHINE)/wswan.o $(MESS_VIDEO)/wswan.o \
+ $(MESS_DRIVERS)/wswan.o $(MESS_AUDIO)/wswan_snd.o $(MESS_MACHINE)/wswan.o $(MESS_VIDEO)/wswan_video.o \
$(MESSOBJ)/be.a: \
$(MESS_DRIVERS)/bebox.o $(MESS_MACHINE)/bebox.o \
@@ -1179,6 +1180,7 @@ $(MESSOBJ)/einis.a: \
$(MESSOBJ)/elektrka.a: \
$(MESS_DRIVERS)/bk.o $(MESS_MACHINE)/bk.o $(MESS_VIDEO)/bk.o \
+ $(MESS_DRIVERS)/dvk_ksm.o $(MESS_MACHINE)/ms7004.o \
$(MESS_DRIVERS)/mk85.o \
$(MESS_DRIVERS)/mk90.o \
@@ -1351,6 +1353,7 @@ $(MESSOBJ)/matsushi.a: \
$(MESSOBJ)/mb.a: \
$(MESS_DRIVERS)/microvsn.o \
+ $(MESS_DRIVERS)/simon.o \
$(MESSOBJ)/mchester.a: \
$(MESS_DRIVERS)/ssem.o \
@@ -1829,7 +1832,7 @@ $(MESSOBJ)/wavemate.a: \
$(MESS_DRIVERS)/jupiter.o \
$(MESSOBJ)/xerox.a: \
- $(MESS_DRIVERS)/xerox820.o \
+ $(MESS_DRIVERS)/xerox820.o $(MESS_MACHINE)/x820kb.o \
$(MESS_DRIVERS)/bigbord2.o \
$(MESS_DRIVERS)/alto2.o \
@@ -1896,6 +1899,7 @@ $(MESSOBJ)/skeleton.a: \
$(MESS_DRIVERS)/fc100.o \
$(MESS_DRIVERS)/fk1.o \
$(MESS_DRIVERS)/ft68m.o \
+ $(MESS_DRIVERS)/gamate.o \
$(MESS_DRIVERS)/gameking.o \
$(MESS_DRIVERS)/gimix.o \
$(MESS_DRIVERS)/grfd2301.o \
@@ -2121,6 +2125,7 @@ $(MESS_DRIVERS)/sc2.o: $(MESS_LAYOUT)/sc2.lh
$(MESS_DRIVERS)/sdk85.o: $(MESS_LAYOUT)/sdk85.lh
$(MESS_DRIVERS)/sdk86.o: $(MESS_LAYOUT)/sdk86.lh
$(MESS_DRIVERS)/selz80.o: $(MESS_LAYOUT)/selz80.lh
+$(MESS_DRIVERS)/simon.o: $(MESS_LAYOUT)/simon.lh
$(MESS_DRIVERS)/sitcom.o: $(MESS_LAYOUT)/sitcom.lh
$(MESS_DRIVERS)/slc1.o: $(MESS_LAYOUT)/slc1.lh
$(MESS_DRIVERS)/sms.o: $(MESS_LAYOUT)/sms1.lh
diff --git a/src/mess/tools/castool/main.c b/src/mess/tools/castool/main.c
index 3223a69328f..4038588b6b7 100644
--- a/src/mess/tools/castool/main.c
+++ b/src/mess/tools/castool/main.c
@@ -20,27 +20,33 @@
#include "corestr.h"
#include "formats/a26_cas.h"
+#include "formats/ace_tap.h"
+#include "formats/adam_cas.h"
#include "formats/apf_apt.h"
#include "formats/cbm_tap.h"
#include "formats/cgen_cas.h"
#include "formats/coco_cas.h"
#include "formats/csw_cas.h"
+#include "formats/fm7_cas.h"
#include "formats/fmsx_cas.h"
#include "formats/gtp_cas.h"
#include "formats/hect_tap.h"
-#include "formats/ace_tap.h"
-#include "formats/adam_cas.h"
#include "formats/kc_cas.h"
#include "formats/kim1_cas.h"
#include "formats/lviv_lvt.h"
#include "formats/mz_cas.h"
#include "formats/orao_cas.h"
#include "formats/oric_tap.h"
+#include "formats/p6001_cas.h"
+#include "formats/phc25_cas.h"
#include "formats/pmd_cas.h"
#include "formats/primoptp.h"
#include "formats/rk_cas.h"
#include "formats/sc3000_bit.h"
+#include "formats/sol_cas.h"
+#include "formats/sorc_cas.h"
#include "formats/sord_cas.h"
+#include "formats/spc1000_cas.h"
#include "formats/svi_cas.h"
#include "formats/thom_cas.h"
#include "formats/trs_cas.h"
@@ -50,6 +56,7 @@
#include "formats/vg5k_cas.h"
#include "formats/vt_cas.h"
#include "formats/x07_cas.h"
+#include "formats/x1_tap.h"
#include "formats/zx81_p.h"
struct SupportedCassetteFormats
@@ -60,50 +67,60 @@ struct SupportedCassetteFormats
};
const struct SupportedCassetteFormats formats[] = {
- {"a26", a26_cassette_formats ,"Atari 2600"},
- {"ddp", coleco_adam_cassette_formats ,"Coleco Adam"},
+ {"a26", a26_cassette_formats ,"Atari 2600 SuperCharger"},
{"apf", apf_cassette_formats ,"APF Imagination Machine"},
- {"cbm", cbm_cassette_formats ,"Commodore"},
- {"cgenie", cgenie_cassette_formats ,"Colour Genie"},
- {"coco", coco_cassette_formats ,"TRS-80 Radio Shack Color Computer Family"},
+ {"bbc", bbc_cassette_formats ,"Acorn BBC & Electron"},
+ {"cbm", cbm_cassette_formats ,"Commodore 8-bit series"},
+ {"cdt", cdt_cassette_formats ,"Amstrad CPC"},
+ {"cgenie", cgenie_cassette_formats ,"EACA Colour Genie"},
+ {"coco", coco_cassette_formats ,"Tandy Radio Shack Color Computer"},
{"csw", csw_cassette_formats ,"Compressed Square Wave"},
- {"bbc", bbc_cassette_formats ,"BBC"},
- {"fmxs", fmsx_cassette_formats ,"MSX"},
- {"gtp", gtp_cassette_formats ,"Galaksija"},
- {"hector", hector_cassette_formats ,"Hector - k7 : classical, FOR : forth cassette "},
- {"jupiter", ace_cassette_formats ,"Jupiter"},
+ {"ddp", coleco_adam_cassette_formats ,"Coleco ADAM"},
+ {"fm7", fm7_cassette_formats ,"Fujitsu FM-7"},
+ {"fmsx", fmsx_cassette_formats ,"MSX"},
+ {"gtp", gtp_cassette_formats ,"Elektronika inzenjering Galaksija"},
+ {"hector", hector_cassette_formats ,"Micronique Hector & Interact Family Computer"},
+ {"jupiter", ace_cassette_formats ,"Jupiter Cantab Jupiter Ace"},
{"kc85", kc_cassette_formats ,"VEB Mikroelektronik KC 85"},
- {"kim1", kim1_cassette_formats ,"KIM-1"},
- {"lviv", lviv_lvt_format ,"Lviv"},
- {"mz", mz700_cassette_formats ,"Sharp MZ"},
- {"orao", orao_cassette_formats ,"Orao"},
- {"oric", oric_cassette_formats ,"Oric"},
- {"pmd85", pmd85_cassette_formats ,"PMD-85"},
- {"primo", primo_ptp_format ,"Primo"},
+ {"kim1", kim1_cassette_formats ,"MOS KIM-1"},
+ {"lviv", lviv_lvt_format ,"PK-01 Lviv"},
+ {"mo5", mo5_cassette_formats ,"Thomson MO-series"},
+ {"mz", mz700_cassette_formats ,"Sharp MZ-700"},
+ {"orao", orao_cassette_formats ,"PEL Varazdin Orao"},
+ {"oric", oric_cassette_formats ,"Tangerine Oric"},
+ {"pc6001", pc6001_cassette_formats ,"NEC PC-6001"},
+ {"phc25", phc25_cassette_formats ,"Sanyo PHC-25"},
+ {"pmd85", pmd85_cassette_formats ,"Tesla PMD-85"},
+ {"primo", primo_ptp_format ,"Microkey Primo"},
{"rku", rku_cassette_formats ,"UT-88"},
{"rk8", rk8_cassette_formats ,"Mikro-80"},
{"rks", rks_cassette_formats ,"Specialist"},
{"rko", rko_cassette_formats ,"Orion"},
{"rkr", rkr_cassette_formats ,"Radio-86RK"},
- {"rka", rka_cassette_formats ,"Apogee"},
+ {"rka", rka_cassette_formats ,"Zavod BRA Apogee BK-01"},
{"rkm", rkm_cassette_formats ,"Mikrosha"},
- {"rkp", rkp_cassette_formats ,"Partner"},
+ {"rkp", rkp_cassette_formats ,"SAM SKB VM Partner-01.01"},
{"sc3000", sc3000_cassette_formats ,"Sega SC-3000"},
+ {"sol20", sol20_cassette_formats ,"PTC SOL-20"},
+ {"sorcerer", sorcerer_cassette_formats ,"Exidy Sorcerer"},
{"sordm5", sordm5_cassette_formats ,"Sord M5"},
- {"svi", svi_cassette_formats ,"SVI"},
- {"to7", to7_cassette_formats ,"Thomson TO"},
- {"mo5", mo5_cassette_formats ,"Thomson MO"},
+ {"spc1000", spc1000_cassette_formats ,"Samsung SPC-1000"},
+ {"svi", svi_cassette_formats ,"Spectravideo SVI-318 & SVI-328"},
+ {"to7", to7_cassette_formats ,"Thomson TO-series"},
{"trs80l2", trs80l2_cassette_formats ,"TRS-80 Level 2"},
{"tvc64", tvc64_cassette_formats ,"Videoton TVC 64"},
- {"tzx", tzx_cassette_formats ,"ZX Spectrum"},
- {"cdt", cdt_cassette_formats ,"Amstrad CPC"},
+ {"tzx", tzx_cassette_formats ,"Sinclair ZX Spectrum"},
{"uef", uef_cassette_formats ,"Acorn Electron"},
- {"vg5k", vg5k_cassette_formats ,"VG 5000 k7"},
+ {"vg5k", vg5k_cassette_formats ,"Philips VG 5000"},
{"vtech1", vtech1_cassette_formats ,"Video Technology Laser 110-310"},
{"vtech2", vtech2_cassette_formats ,"Video Technology Laser 350-700"},
{"x07", x07_cassette_formats ,"Canon X-07"},
- {"zx81_p", zx81_p_format ,"Sinclair ZX81"},
+ {"x1", x1_cassette_formats ,"Sharp X1"},
{"zx80_o", zx80_o_format ,"Sinclair ZX80"},
+ {"zx81_p", zx81_p_format ,"Sinclair ZX81"},
+
+
+
{NULL,NULL,NULL}
};
diff --git a/src/mess/video/wswan.c b/src/mess/video/wswan.c
deleted file mode 100644
index da649d76779..00000000000
--- a/src/mess/video/wswan.c
+++ /dev/null
@@ -1,583 +0,0 @@
-/***************************************************************************
-
- wswan.c
-
- File to handle video emulation of the Bandai WonderSwan.
-
- Anthony Kruize
- Wilbert Pol
-
-***************************************************************************/
-
-#include "includes/wswan.h"
-
-void wswan_state::wswan_setup_palettes()
-{
- int i,j;
-
- if ( m_vdp.color_mode ) {
- for( i = 0; i < 16; i++ ) {
- for( j = 0; j < 16; j++ ) {
- m_pal[i][j] = ( ( m_vdp.palette_vram[ ( i << 5 ) + j*2 + 1 ] << 8 ) | m_vdp.palette_vram[ ( i << 5 ) + j*2 ] ) & 0x0FFF;
- }
- }
- } else {
- for( i = 0; i < 16; i++ ) {
- m_pal[i][0] = m_ws_portram[ 0x20 + ( i << 1 ) ] & 0x07;
- m_pal[i][1] = ( m_ws_portram[ 0x20 + ( i << 1 ) ] >> 4 ) & 0x07;
- m_pal[i][2] = m_ws_portram[ 0x21 + ( i << 1 ) ] & 0x07;
- m_pal[i][3] = ( m_ws_portram[ 0x21 + ( i << 1 ) ] >> 4 ) & 0x07;
- }
- }
-}
-
-void wswan_state::wswan_draw_background()
-{
- UINT16 map_addr;
- UINT8 start_column;
- int column;
-
- map_addr = m_vdp.layer_bg_address + ( ( ( m_vdp.current_line + m_vdp.layer_bg_scroll_y ) & 0xF8 ) << 3 );
- start_column = ( m_vdp.layer_bg_scroll_x >> 3 );
- for( column = 0; column < 29; column++ ) {
- int tile_data, tile_number, tile_palette, tile_line, tile_address;
- UINT32 plane0=0, plane1=0, plane2=0, plane3=0;
- int x, x_offset;
-
- tile_data = ( m_vdp.vram[ map_addr + ( ( ( start_column + column ) & 0x1F ) << 1 ) + 1 ] << 8 )
- | m_vdp.vram[ map_addr + ( ( ( start_column + column ) & 0x1F ) << 1 ) ];
- tile_number = tile_data & 0x01FF;
- tile_palette = ( tile_data >> 9 ) & 0x0F;
-
- tile_line = ( m_vdp.current_line + m_vdp.layer_bg_scroll_y ) & 0x07;
- if ( tile_data & 0x8000 ) {
- tile_line = 7 - tile_line;
- }
-
- if ( m_vdp.colors_16 ) {
- tile_address = ( ( tile_data & 0x2000 ) ? 0x8000 : 0x4000 ) + ( tile_number * 32 ) + ( tile_line << 2 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 24 ) | ( m_vdp.vram[ tile_address + 1 ] << 16 ) | ( m_vdp.vram[ tile_address + 2 ] << 8 ) | m_vdp.vram[ tile_address + 3 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = m_vdp.vram[ tile_address + 2 ] << 2;
- plane3 = m_vdp.vram[ tile_address + 3 ] << 3;
- }
- } else {
- tile_address = 0x2000 + ( tile_number * 16 ) + ( tile_line << 1 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 8 ) | m_vdp.vram[ tile_address + 1 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = 0;
- plane3 = 0;
- }
- }
-
- for( x = 0; x < 8; x++ ) {
- int col;
- if ( m_vdp.tile_packed ) {
- if ( m_vdp.colors_16 ) {
- col = plane0 & 0x0F;
- plane0 = plane0 >> 4;
- } else {
- col = plane0 & 0x03;
- plane0 = plane0 >> 2;
- }
- } else {
- col = ( plane3 & 8 ) | ( plane2 & 4 ) | ( plane1 & 2 ) | ( plane0 & 1 );
- plane3 = plane3 >> 1;
- plane2 = plane2 >> 1;
- plane1 = plane1 >> 1;
- plane0 = plane0 >> 1;
- }
- if ( tile_data & 0x4000 ) {
- x_offset = x + ( column << 3 ) - ( m_vdp.layer_bg_scroll_x & 0x07 );
- } else {
- x_offset = 7 - x + ( column << 3 ) - ( m_vdp.layer_bg_scroll_x & 0x07 );
- }
- if ( x_offset >= 0 && x_offset < WSWAN_X_PIXELS ) {
- if ( m_vdp.colors_16 ) {
- if ( col ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- /* Hmmmm, what should we do here... Is this correct?? */
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- }
- }
- } else {
- if ( col || !(tile_palette & 4 ) ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_vdp.main_palette[m_pal[tile_palette][col]];
- }
- }
- }
- }
- }
- }
-}
-
-void wswan_state::wswan_draw_foreground_0()
-{
- UINT16 map_addr;
- UINT8 start_column;
- int column;
- map_addr = m_vdp.layer_fg_address + ( ( ( m_vdp.current_line + m_vdp.layer_fg_scroll_y ) & 0xF8 ) << 3 );
- start_column = ( m_vdp.layer_fg_scroll_x >> 3 );
- for( column = 0; column < 29; column++ ) {
- UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
- int x, x_offset, tile_line, tile_address;
- int tile_data = ( m_vdp.vram[ map_addr + ( ( ( start_column + column ) & 0x1F ) << 1 ) + 1 ] << 8 )
- | m_vdp.vram[ map_addr + ( ( ( start_column + column ) & 0x1F ) << 1 ) ];
- int tile_number = tile_data & 0x01FF;
- int tile_palette = ( tile_data >> 9 ) & 0x0F;
-
- tile_line = ( m_vdp.current_line + m_vdp.layer_fg_scroll_y ) & 0x07;
- if ( tile_data & 0x8000 ) {
- tile_line = 7 - tile_line;
- }
-
- if ( m_vdp.colors_16 ) {
- tile_address = ( ( tile_data & 0x2000 ) ? 0x8000 : 0x4000 ) + ( tile_number * 32 ) + ( tile_line << 2 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 24 ) | ( m_vdp.vram[ tile_address + 1 ] << 16 ) | ( m_vdp.vram[ tile_address + 2 ] << 8 ) | m_vdp.vram[ tile_address + 3 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = m_vdp.vram[ tile_address + 2 ] << 2;
- plane3 = m_vdp.vram[ tile_address + 3 ] << 3;
- }
- } else {
- tile_address = 0x2000 + ( tile_number * 16 ) + ( tile_line << 1 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 8 ) | m_vdp.vram[ tile_address + 1 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = 0;
- plane3 = 0;
- }
- }
-
- for( x = 0; x < 8; x++ ) {
- int col;
- if ( m_vdp.tile_packed ) {
- if ( m_vdp.colors_16 ) {
- col = plane0 & 0x0F;
- plane0 = plane0 >> 4;
- } else {
- col = plane0 & 0x03;
- plane0 = plane0 >> 2;
- }
- } else {
- col = ( plane3 & 8 ) | ( plane2 & 4 ) | ( plane1 & 2 ) | ( plane0 & 1 );
- plane3 = plane3 >> 1;
- plane2 = plane2 >> 1;
- plane1 = plane1 >> 1;
- plane0 = plane0 >> 1;
- }
- if ( tile_data & 0x4000 ) {
- x_offset = x + ( column << 3 ) - ( m_vdp.layer_fg_scroll_x & 0x07 );
- } else {
- x_offset = 7 - x + ( column << 3 ) - ( m_vdp.layer_fg_scroll_x & 0x07 );
- }
- if ( x_offset >= 0 && x_offset < WSWAN_X_PIXELS ) {
- if ( m_vdp.colors_16 ) {
- if ( col ) {
-// if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
-// } else {
-// /* Hmmmm, what should we do here... Is this correct?? */
-// m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
-// }
- }
- } else {
- if ( col || !(tile_palette & 4 ) ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_vdp.main_palette[m_pal[tile_palette][col]];
- }
- }
- }
- }
- }
- }
-}
-
-void wswan_state::wswan_draw_foreground_2()
-{
- UINT16 map_addr;
- UINT8 start_column;
- int column;
- map_addr = m_vdp.layer_fg_address + ( ( ( m_vdp.current_line + m_vdp.layer_fg_scroll_y ) & 0xF8 ) << 3 );
- start_column = ( m_vdp.layer_fg_scroll_x >> 3 );
- for( column = 0; column < 29; column++ ) {
- UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
- int x, x_offset, tile_line, tile_address;
- int tile_data = ( m_vdp.vram[ map_addr + ( ( ( start_column + column ) & 0x1F ) << 1 ) + 1 ] << 8 )
- | m_vdp.vram[ map_addr + ( ( ( start_column + column ) & 0x1F ) << 1 ) ];
- int tile_number = tile_data & 0x01FF;
- int tile_palette = ( tile_data >> 9 ) & 0x0F;
-
- tile_line = ( m_vdp.current_line + m_vdp.layer_fg_scroll_y ) & 0x07;
- if ( tile_data & 0x8000 ) {
- tile_line = 7 - tile_line;
- }
-
- if ( m_vdp.colors_16 ) {
- tile_address = ( ( tile_data & 0x2000 ) ? 0x8000 : 0x4000 ) + ( tile_number * 32 ) + ( tile_line << 2 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 24 ) | ( m_vdp.vram[ tile_address + 1 ] << 16 ) | ( m_vdp.vram[ tile_address + 2 ] << 8 ) | m_vdp.vram[ tile_address + 3 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = m_vdp.vram[ tile_address + 2 ] << 2;
- plane3 = m_vdp.vram[ tile_address + 3 ] << 3;
- }
- } else {
- tile_address = 0x2000 + ( tile_number * 16 ) + ( tile_line << 1 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 8 ) | m_vdp.vram[ tile_address + 1 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = 0;
- plane3 = 0;
- }
- }
-
- for( x = 0; x < 8; x++ ) {
- int col;
- if ( m_vdp.tile_packed ) {
- if ( m_vdp.colors_16 ) {
- col = plane0 & 0x0F;
- plane0 = plane0 >> 4;
- } else {
- col = plane0 & 0x03;
- plane0 = plane0 >> 2;
- }
- } else {
- col = ( plane3 & 8 ) | ( plane2 & 4 ) | ( plane1 & 2 ) | ( plane0 & 1 );
- plane3 = plane3 >> 1;
- plane2 = plane2 >> 1;
- plane1 = plane1 >> 1;
- plane0 = plane0 >> 1;
- }
- if ( tile_data & 0x4000 ) {
- x_offset = x + ( column << 3 ) - ( m_vdp.layer_fg_scroll_x & 0x07 );
- } else {
- x_offset = 7 - x + ( column << 3 ) - ( m_vdp.layer_fg_scroll_x & 0x07 );
- }
- if ( x_offset >= 0 && x_offset >= m_vdp.window_fg_left && x_offset < m_vdp.window_fg_right && x_offset < WSWAN_X_PIXELS ) {
- if ( m_vdp.colors_16 ) {
- if ( col ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- /* Hmmmm, what should we do here... Is this correct?? */
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- }
- }
- } else {
- if ( col || !(tile_palette & 4 ) ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_vdp.main_palette[m_pal[tile_palette][col]];
- }
- }
- }
- }
- }
- }
-}
-
-void wswan_state::wswan_draw_foreground_3()
-{
- UINT16 map_addr;
- UINT8 start_column;
- int column;
- map_addr = m_vdp.layer_fg_address + ( ( ( m_vdp.current_line + m_vdp.layer_fg_scroll_y ) & 0xF8 ) << 3 );
- start_column = ( m_vdp.layer_fg_scroll_x >> 3 );
- for( column = 0; column < 29; column++ ) {
- UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
- int x, x_offset, tile_line, tile_address;
- int tile_data = ( m_vdp.vram[ map_addr + ( ( ( start_column + column ) & 0x1F ) << 1 ) + 1 ] << 8 )
- | m_vdp.vram[ map_addr + ( ( ( start_column + column ) & 0x1F ) << 1 ) ];
- int tile_number = tile_data & 0x01FF;
- int tile_palette = ( tile_data >> 9 ) & 0x0F;
-
- tile_line = ( m_vdp.current_line + m_vdp.layer_fg_scroll_y ) & 0x07;
- if ( tile_data & 0x8000 ) { // vflip
- tile_line = 7 - tile_line;
- }
-
- if ( m_vdp.colors_16 ) {
- tile_address = ( ( tile_data & 0x2000 ) ? 0x8000 : 0x4000 ) + ( tile_number * 32 ) + ( tile_line << 2 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 24 ) | ( m_vdp.vram[ tile_address + 1 ] << 16 ) | ( m_vdp.vram[ tile_address + 2 ] << 8 ) | m_vdp.vram[ tile_address + 3 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = m_vdp.vram[ tile_address + 2 ] << 2;
- plane3 = m_vdp.vram[ tile_address + 3 ] << 3;
- }
- } else {
- tile_address = 0x2000 + ( tile_number * 16 ) + ( tile_line << 1 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 8 ) | m_vdp.vram[ tile_address + 1 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = 0;
- plane3 = 0;
- }
- }
-
- for( x = 0; x < 8; x++ ) {
- int col;
- if ( m_vdp.tile_packed ) {
- if ( m_vdp.colors_16 ) {
- col = plane0 & 0x0F;
- plane0 = plane0 >> 4;
- } else {
- col = plane0 & 0x03;
- plane0 = plane0 >> 2;
- }
- } else {
- col = ( plane3 & 8 ) | ( plane2 & 4 ) | ( plane1 & 2 ) | ( plane0 & 1 );
- plane3 = plane3 >> 1;
- plane2 = plane2 >> 1;
- plane1 = plane1 >> 1;
- plane0 = plane0 >> 1;
- }
- if ( tile_data & 0x4000 ) {
- x_offset = x + ( column << 3 ) - ( m_vdp.layer_fg_scroll_x & 0x07 );
- } else {
- x_offset = 7 - x + ( column << 3 ) - ( m_vdp.layer_fg_scroll_x & 0x07 );
- }
- if ( ( x_offset >= 0 && x_offset < m_vdp.window_fg_left ) || ( x_offset >= m_vdp.window_fg_right && x_offset < WSWAN_X_PIXELS ) ) {
- if ( m_vdp.colors_16 ) {
- if ( col ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- /* Hmmmm, what should we do here... Is this correct?? */
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- }
- }
- } else {
- if ( col || !(tile_palette & 4 ) ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_vdp.main_palette[m_pal[tile_palette][col]];
- }
- }
- }
- }
- }
- }
-}
-
-void wswan_state::wswan_handle_sprites(int mask )
-{
- int i;
- if ( m_vdp.sprite_count == 0 )
- return;
- for( i = m_vdp.sprite_first + m_vdp.sprite_count - 1; i >= m_vdp.sprite_first; i-- ) {
- UINT8 x, y;
- UINT16 tile_data;
- int tile_line;
-
- tile_data = ( m_vdp.sprite_table_buffer[ i * 4 + 1 ] << 8 ) | m_vdp.sprite_table_buffer[ i * 4 ];
- y = m_vdp.sprite_table_buffer[ i * 4 + 2 ];
- x = m_vdp.sprite_table_buffer[ i * 4 + 3 ];
- tile_line = m_vdp.current_line - y;
- tile_line = tile_line & 0xFF;
- if ( ( tile_line >= 0 ) && ( tile_line < 8 ) && ( ( tile_data & 0x2000 ) == mask ) ) {
- UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
- int j, x_offset, tile_address;
- int tile_number = tile_data & 0x01FF;
- int tile_palette = 8 + ( ( tile_data >> 9 ) & 0x07 );
- int check_clip = 0;
- if ( tile_data & 0x8000 ) {
- tile_line = 7 - tile_line;
- }
-
- if ( m_vdp.colors_16 ) {
- tile_address = 0x4000 + ( tile_number * 32 ) + ( tile_line << 2 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 24 ) | ( m_vdp.vram[ tile_address + 1 ] << 16 ) | ( m_vdp.vram[ tile_address + 2 ] << 8 ) | m_vdp.vram[ tile_address + 3 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = m_vdp.vram[ tile_address + 2 ] << 2;
- plane3 = m_vdp.vram[ tile_address + 3 ] << 3;
- }
- } else {
- tile_address = 0x2000 + ( tile_number * 16 ) + ( tile_line << 1 );
- if ( m_vdp.tile_packed ) {
- plane0 = ( m_vdp.vram[ tile_address + 0 ] << 8 ) | m_vdp.vram[ tile_address + 1 ];
- } else {
- plane0 = m_vdp.vram[ tile_address + 0 ];
- plane1 = m_vdp.vram[ tile_address + 1 ] << 1;
- plane2 = 0;
- plane3 = 0;
- }
- }
-
- if ( m_vdp.window_sprites_enable ) {
- if ( tile_data & 0x1000 ) {
- if ( m_vdp.current_line >= m_vdp.window_sprites_top && m_vdp.current_line <= m_vdp.window_sprites_bottom ) {
- check_clip = 1;
- }
- } else {
- if ( m_vdp.current_line < m_vdp.window_sprites_top || m_vdp.current_line > m_vdp.window_sprites_bottom ) {
- continue;
- }
- }
- }
-
- for ( j = 0; j < 8; j++ ) {
- int col;
- if ( m_vdp.tile_packed ) {
- if ( m_vdp.colors_16 ) {
- col = plane0 & 0x0F;
- plane0 = plane0 >> 4;
- } else {
- col = plane0 & 0x03;
- plane0 = plane0 >> 2;
- }
- } else {
- col = ( plane3 & 8 ) | ( plane2 & 4 ) | ( plane1 & 2 ) | ( plane0 & 1 );
- plane3 = plane3 >> 1;
- plane2 = plane2 >> 1;
- plane1 = plane1 >> 1;
- plane0 = plane0 >> 1;
- }
- if ( tile_data & 0x4000 ) {
- x_offset = x + j;
- } else {
- x_offset = x + 7 - j;
- }
- x_offset = x_offset & 0xFF;
- if ( m_vdp.window_sprites_enable ) {
- if ( tile_data & 0x1000 && check_clip ) {
- if ( x_offset >= m_vdp.window_sprites_left && x_offset <= m_vdp.window_sprites_right ) {
- continue;
- }
- } else {
- if ( x_offset < m_vdp.window_sprites_left || x_offset > m_vdp.window_sprites_right ) {
-// continue;
- }
- }
- }
- if ( x_offset >= 0 && x_offset < WSWAN_X_PIXELS ) {
- if ( m_vdp.colors_16 ) {
- if ( col ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- /* Hmmmm, what should we do here... Is this correct?? */
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- }
- }
- } else {
- if ( col || !(tile_palette & 4 ) ) {
- if ( m_vdp.color_mode ) {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_pal[tile_palette][col];
- } else {
- m_bitmap.pix16(m_vdp.current_line, x_offset) = m_vdp.main_palette[m_pal[tile_palette][col]];
- }
- }
- }
- }
- }
- }
- }
-}
-
-void wswan_state::wswan_refresh_scanline()
-{
- wswan_setup_palettes();
-
- rectangle rec(0, WSWAN_X_PIXELS, m_vdp.current_line, m_vdp.current_line);
- if ( m_ws_portram[0x14] ) {
- /* Not sure if these background color checks and settings are correct */
- if ( m_vdp.color_mode && m_vdp.colors_16 ) {
- m_bitmap.fill( m_pal[m_ws_portram[0x01]>>4][m_ws_portram[0x01]&0x0F], rec );
- } else {
- m_bitmap.fill( m_vdp.main_palette[m_ws_portram[0x01]&0x07], rec );
- }
- } else {
- m_bitmap.fill( 0, rec );
- return;
- }
-
- /*
- * Draw background layer
- */
- if ( m_vdp.layer_bg_enable ) {
- wswan_draw_background();
- }
-
- /*
- * Draw sprites between background and foreground layers
- */
- if ( m_vdp.sprites_enable ) {
- wswan_handle_sprites(0);
- }
-
- /*
- * Draw foreground layer, taking window settings into account
- */
- if ( m_vdp.layer_fg_enable ) {
- switch( m_vdp.window_fg_mode ) {
- case 0: /* FG inside & outside window area */
- wswan_draw_foreground_0();
- break;
- case 1: /* ??? */
- logerror( "Unknown foreground mode 1 set\n" );
- break;
- case 2: /* FG only inside window area */
- if ( m_vdp.current_line >= m_vdp.window_fg_top && m_vdp.current_line <= m_vdp.window_fg_bottom ) {
- wswan_draw_foreground_2();
- }
- break;
- case 3: /* FG only outside window area */
- if ( m_vdp.current_line < m_vdp.window_fg_top || m_vdp.current_line > m_vdp.window_fg_bottom ) {
- wswan_draw_foreground_0();
- } else {
- wswan_draw_foreground_3();
- }
- break;
- }
- }
-
- /*
- * Draw sprites in front of foreground layer
- */
- if ( m_vdp.sprites_enable ) {
- wswan_handle_sprites(0x2000);
- }
-}
-
-
-void wswan_state::video_start()
-{
- machine().first_screen()->register_screen_bitmap(m_bitmap);
- save_item(NAME(m_bitmap));
-}
-
-UINT32 wswan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
-{
- copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect);
- return 0;
-}
diff --git a/src/mess/video/wswan_video.c b/src/mess/video/wswan_video.c
new file mode 100644
index 00000000000..c4f6c72c8c5
--- /dev/null
+++ b/src/mess/video/wswan_video.c
@@ -0,0 +1,1211 @@
+/***************************************************************************
+
+ wswan_video.c
+
+ File to handle video emulation of the Bandai WonderSwan VDP.
+
+ Anthony Kruize
+ Wilbert Pol
+
+ TODO:
+ - remove the redundant parts of m_regs
+ - split the Color VDP from the Mono VDP?
+
+ ***************************************************************************/
+
+#include "wswan_video.h"
+
+const device_type WSWAN_VIDEO = &device_creator<wswan_video_device>;
+
+
+wswan_video_device::wswan_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, WSWAN_VIDEO, "Bandai WonderSwan VDP", tag, owner, clock, "wswan_video", __FILE__),
+ m_vdp_type(VDP_TYPE_WSWAN)
+{
+}
+
+
+void wswan_video_device::common_save()
+{
+ save_item(NAME(m_bitmap));
+ save_item(NAME(m_vram));
+ save_item(NAME(m_palette_port));
+ save_item(NAME(m_pal));
+ save_item(NAME(m_regs));
+
+ save_item(NAME(m_layer_bg_enable));
+ save_item(NAME(m_layer_fg_enable));
+ save_item(NAME(m_sprites_enable));
+ save_item(NAME(m_window_sprites_enable));
+ save_item(NAME(m_window_fg_mode));
+ save_item(NAME(m_bg_control));
+ save_item(NAME(m_current_line));
+ save_item(NAME(m_line_compare));
+ save_item(NAME(m_sprite_table_address));
+ save_item(NAME(m_sprite_table_buffer));
+ save_item(NAME(m_sprite_first));
+ save_item(NAME(m_sprite_count));
+ save_item(NAME(m_sprite_first_latch));
+ save_item(NAME(m_sprite_count_latch));
+ save_item(NAME(m_layer_bg_address));
+ save_item(NAME(m_layer_fg_address));
+ save_item(NAME(m_window_fg_left));
+ save_item(NAME(m_window_fg_top));
+ save_item(NAME(m_window_fg_right));
+ save_item(NAME(m_window_fg_bottom));
+ save_item(NAME(m_window_sprites_left));
+ save_item(NAME(m_window_sprites_top));
+ save_item(NAME(m_window_sprites_right));
+ save_item(NAME(m_window_sprites_bottom));
+ save_item(NAME(m_layer_bg_scroll_x));
+ save_item(NAME(m_layer_bg_scroll_y));
+ save_item(NAME(m_layer_fg_scroll_x));
+ save_item(NAME(m_layer_fg_scroll_y));
+ save_item(NAME(m_lcd_control));
+ save_item(NAME(m_icons));
+ save_item(NAME(m_color_mode));
+ save_item(NAME(m_colors_16));
+ save_item(NAME(m_tile_packed));
+ save_item(NAME(m_timer_hblank_enable));
+ save_item(NAME(m_timer_hblank_mode));
+ save_item(NAME(m_timer_hblank_reload));
+ save_item(NAME(m_timer_vblank_enable));
+ save_item(NAME(m_timer_vblank_mode));
+ save_item(NAME(m_timer_vblank_reload));
+ save_item(NAME(m_timer_vblank_count));
+ save_item(NAME(m_main_palette));
+}
+
+void wswan_video_device::device_start()
+{
+ machine().first_screen()->register_screen_bitmap(m_bitmap);
+
+ m_timer = timer_alloc(TIMER_SCANLINE);
+ m_timer->adjust(attotime::from_ticks(256, 3072000), 0, attotime::from_ticks(256, 3072000));
+
+ // bind callbacks
+ m_set_irq_cb.bind_relative_to(*owner());
+ m_snd_dma_cb.bind_relative_to(*owner());
+
+ if (m_vdp_type == VDP_TYPE_WSC)
+ {
+ m_vram.resize_and_clear(0x10000);
+ m_palette_vram = m_vram + 0xfe00;
+ }
+ else
+ {
+ m_vram.resize_and_clear(0x4000);
+ m_palette_vram = m_vram;
+ }
+
+ common_save();
+}
+
+// This is a copy of ws_portram_init
+// TODO: remove unneeded parts!
+static const UINT8 vdp_regs_init[256] =
+{
+ 0x00, 0x00, 0x00/*?*/, 0xbb, 0x00, 0x00, 0x00, 0x26, 0xfe, 0xde, 0xf9, 0xfb, 0xdb, 0xd7, 0x7f, 0xf5,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x9e, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x99, 0xfd, 0xb7, 0xdf,
+ 0x30, 0x57, 0x75, 0x76, 0x15, 0x73, 0x70/*77?*/, 0x77, 0x20, 0x75, 0x50, 0x36, 0x70, 0x67, 0x50, 0x77,
+ 0x57, 0x54, 0x75, 0x77, 0x75, 0x17, 0x37, 0x73, 0x50, 0x57, 0x60, 0x77, 0x70, 0x77, 0x10, 0x73,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x87, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x4f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xdb, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x83, 0x00,
+ 0x2f, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
+ 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
+ 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
+ 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1
+};
+
+
+void wswan_video_device::device_reset()
+{
+ m_layer_bg_enable = 0;
+ m_layer_fg_enable = 0;
+ m_sprites_enable = 0;
+ m_window_sprites_enable = 0;
+ m_window_fg_mode = 0;
+ m_bg_control = 0;
+ m_current_line = 145; // Randomly chosen, beginning of VBlank period to give cart some time to boot up
+ m_line_compare = 0;
+ m_sprite_table_address = 0;
+ m_sprite_first = 0;
+ m_sprite_count = 0;
+ m_sprite_first_latch = 0;
+ m_sprite_count_latch = 0;
+ m_layer_bg_address = 0;
+ m_layer_fg_address = 0;
+ m_window_fg_left = 0;
+ m_window_fg_top = 0;
+ m_window_fg_right = 0;
+ m_window_fg_bottom = 0;
+ m_window_sprites_left = 0;
+ m_window_sprites_top = 0;
+ m_window_sprites_right = 0;
+ m_window_sprites_bottom = 0;
+ m_layer_bg_scroll_x = 0;
+ m_layer_bg_scroll_y = 0;
+ m_layer_fg_scroll_x = 0;
+ m_layer_fg_scroll_y = 0;
+ m_lcd_control = 0x01;
+ m_icons = 0;
+ m_color_mode = 0;
+ m_colors_16 = 0;
+ m_tile_packed = 0;
+ m_timer_hblank_enable = 0;
+ m_timer_hblank_mode = 0;
+ m_timer_hblank_reload = 0;
+ m_timer_hblank_count = 0;
+ m_timer_vblank_enable = 0;
+ m_timer_vblank_mode = 0;
+ m_timer_vblank_reload = 0;
+ m_timer_vblank_count = 0; /* Vertical blank timer counter value */
+
+ memset(m_sprite_table_buffer, 0, sizeof(m_sprite_table_buffer));
+ memset(m_main_palette, 0, sizeof(m_main_palette));
+ memcpy(m_regs, vdp_regs_init, 256);
+ for (int i = 0; i < 0x20; i++)
+ m_palette_port[i] = m_regs[i + 0x20];
+
+ setup_palettes();
+}
+
+
+void wswan_video_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_SCANLINE:
+ scanline_interrupt();
+ break;
+ }
+}
+
+
+void wswan_video_device::setup_palettes()
+{
+ if (m_color_mode)
+ {
+ for (int i = 0; i < 16; i++)
+ for (int j = 0; j < 16; j++)
+ m_pal[i][j] = ((m_palette_vram[(i << 5) + j * 2 + 1] << 8) | m_palette_vram[(i << 5) + j * 2]) & 0x0fff;
+ }
+ else
+ {
+ for (int i = 0; i < 16; i++)
+ {
+ m_pal[i][0] = (m_palette_port[(i << 1)] >> 0) & 0x07;
+ m_pal[i][1] = (m_palette_port[(i << 1)] >> 4) & 0x07;
+ m_pal[i][2] = (m_palette_port[(i << 1) + 1] >> 0) & 0x07;
+ m_pal[i][3] = (m_palette_port[(i << 1) + 1] >> 4) & 0x07;
+ }
+ }
+}
+
+void wswan_video_device::draw_background()
+{
+ UINT16 map_addr = m_layer_bg_address + (((m_current_line + m_layer_bg_scroll_y) & 0xf8) << 3);
+ UINT8 start_column = (m_layer_bg_scroll_x >> 3);
+
+ for (int column = 0; column < 29; column++)
+ {
+ UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
+ int x_offset, tile_line, tile_address;
+ int tile_data = (m_vram[map_addr + (((start_column + column) & 0x1f) << 1) + 1] << 8)
+ | m_vram[map_addr + (((start_column + column) & 0x1f) << 1)];
+ int tile_number = tile_data & 0x01ff;
+ int tile_palette = (tile_data >> 9) & 0x0f;
+
+ tile_line = (m_current_line + m_layer_bg_scroll_y) & 0x07;
+ if (tile_data & 0x8000) // vflip
+ tile_line = 7 - tile_line;
+
+ if (m_colors_16)
+ {
+ tile_address = ((tile_data & 0x2000) ? 0x8000 : 0x4000) + (tile_number * 32) + (tile_line << 2);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 24) | (m_vram[tile_address + 1] << 16) | (m_vram[tile_address + 2] << 8) | m_vram[tile_address + 3];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = m_vram[tile_address + 2] << 2;
+ plane3 = m_vram[tile_address + 3] << 3;
+ }
+ }
+ else
+ {
+ tile_address = 0x2000 + (tile_number * 16) + (tile_line << 1);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 8) | m_vram[tile_address + 1];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = 0;
+ plane3 = 0;
+ }
+ }
+
+ for (int x = 0; x < 8; x++)
+ {
+ int col;
+ if (m_tile_packed)
+ {
+ if (m_colors_16)
+ {
+ col = plane0 & 0x0f;
+ plane0 = plane0 >> 4;
+ }
+ else
+ {
+ col = plane0 & 0x03;
+ plane0 = plane0 >> 2;
+ }
+ }
+ else
+ {
+ col = (plane3 & 8) | (plane2 & 4) | (plane1 & 2) | (plane0 & 1);
+ plane3 = plane3 >> 1;
+ plane2 = plane2 >> 1;
+ plane1 = plane1 >> 1;
+ plane0 = plane0 >> 1;
+ }
+
+ if (tile_data & 0x4000)
+ x_offset = x + (column << 3) - (m_layer_bg_scroll_x & 0x07);
+ else
+ x_offset = 7 - x + (column << 3) - (m_layer_bg_scroll_x & 0x07);
+
+ if (x_offset >= 0 && x_offset < WSWAN_X_PIXELS)
+ {
+ if (m_colors_16)
+ {
+ if (col)
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ {
+ /* Hmmmm, what should we do here... Is this correct?? */
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ }
+ }
+ }
+ else
+ {
+ if (col || !(tile_palette & 4))
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ m_bitmap.pix16(m_current_line, x_offset) = m_main_palette[m_pal[tile_palette][col]];
+ }
+ }
+ }
+ }
+ }
+}
+
+void wswan_video_device::draw_foreground_0()
+{
+ UINT16 map_addr = m_layer_fg_address + (((m_current_line + m_layer_fg_scroll_y) & 0xf8) << 3);
+ UINT8 start_column = (m_layer_fg_scroll_x >> 3);
+
+ for (int column = 0; column < 29; column++)
+ {
+ UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
+ int x_offset, tile_line, tile_address;
+ int tile_data = (m_vram[map_addr + (((start_column + column) & 0x1f) << 1) + 1] << 8)
+ | m_vram[map_addr + (((start_column + column) & 0x1f) << 1)];
+ int tile_number = tile_data & 0x01ff;
+ int tile_palette = (tile_data >> 9) & 0x0f;
+
+ tile_line = (m_current_line + m_layer_fg_scroll_y) & 0x07;
+ if (tile_data & 0x8000) // vflip
+ tile_line = 7 - tile_line;
+
+ if (m_colors_16)
+ {
+ tile_address = ((tile_data & 0x2000) ? 0x8000 : 0x4000) + (tile_number * 32) + (tile_line << 2);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 24) | (m_vram[tile_address + 1] << 16) | (m_vram[tile_address + 2] << 8) | m_vram[tile_address + 3];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = m_vram[tile_address + 2] << 2;
+ plane3 = m_vram[tile_address + 3] << 3;
+ }
+ }
+ else
+ {
+ tile_address = 0x2000 + (tile_number * 16) + (tile_line << 1);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 8) | m_vram[tile_address + 1];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = 0;
+ plane3 = 0;
+ }
+ }
+
+ for (int x = 0; x < 8; x++ )
+ {
+ int col;
+ if (m_tile_packed)
+ {
+ if (m_colors_16)
+ {
+ col = plane0 & 0x0f;
+ plane0 = plane0 >> 4;
+ }
+ else
+ {
+ col = plane0 & 0x03;
+ plane0 = plane0 >> 2;
+ }
+ }
+ else
+ {
+ col = (plane3 & 8) | (plane2 & 4) | (plane1 & 2) | (plane0 & 1);
+ plane3 = plane3 >> 1;
+ plane2 = plane2 >> 1;
+ plane1 = plane1 >> 1;
+ plane0 = plane0 >> 1;
+ }
+
+ if (tile_data & 0x4000)
+ x_offset = x + (column << 3) - (m_layer_fg_scroll_x & 0x07);
+ else
+ x_offset = 7 - x + (column << 3) - (m_layer_fg_scroll_x & 0x07);
+
+ if (x_offset >= 0 && x_offset < WSWAN_X_PIXELS)
+ {
+ if (m_colors_16)
+ {
+ if (col)
+ {
+// if (m_color_mode) {
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+// } else {
+// /* Hmmmm, what should we do here... Is this correct?? */
+// m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+// }
+ }
+ }
+ else
+ {
+ if (col || !(tile_palette & 4))
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ m_bitmap.pix16(m_current_line, x_offset) = m_main_palette[m_pal[tile_palette][col]];
+ }
+ }
+ }
+ }
+ }
+}
+
+void wswan_video_device::draw_foreground_2()
+{
+ UINT16 map_addr = m_layer_fg_address + (((m_current_line + m_layer_fg_scroll_y) & 0xf8) << 3);
+ UINT8 start_column = (m_layer_fg_scroll_x >> 3);
+
+ for (int column = 0; column < 29; column++)
+ {
+ UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
+ int x_offset, tile_line, tile_address;
+ int tile_data = (m_vram[map_addr + (((start_column + column) & 0x1f) << 1) + 1] << 8)
+ | m_vram[map_addr + (((start_column + column) & 0x1f) << 1)];
+ int tile_number = tile_data & 0x01ff;
+ int tile_palette = (tile_data >> 9) & 0x0f;
+
+ tile_line = (m_current_line + m_layer_fg_scroll_y) & 0x07;
+ if (tile_data & 0x8000) // vflip
+ tile_line = 7 - tile_line;
+
+
+ if (m_colors_16)
+ {
+ tile_address = ((tile_data & 0x2000) ? 0x8000 : 0x4000) + (tile_number * 32) + (tile_line << 2);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 24) | (m_vram[tile_address + 1] << 16) | (m_vram[tile_address + 2] << 8) | m_vram[tile_address + 3];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = m_vram[tile_address + 2] << 2;
+ plane3 = m_vram[tile_address + 3] << 3;
+ }
+ }
+ else
+ {
+ tile_address = 0x2000 + (tile_number * 16) + (tile_line << 1);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 8) | m_vram[tile_address + 1];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = 0;
+ plane3 = 0;
+ }
+ }
+
+ for (int x = 0; x < 8; x++)
+ {
+ int col;
+ if (m_tile_packed)
+ {
+ if (m_colors_16)
+ {
+ col = plane0 & 0x0f;
+ plane0 = plane0 >> 4;
+ }
+ else
+ {
+ col = plane0 & 0x03;
+ plane0 = plane0 >> 2;
+ }
+ }
+ else
+ {
+ col = (plane3 & 8) | (plane2 & 4) | (plane1 & 2) | (plane0 & 1);
+ plane3 = plane3 >> 1;
+ plane2 = plane2 >> 1;
+ plane1 = plane1 >> 1;
+ plane0 = plane0 >> 1;
+ }
+
+ if (tile_data & 0x4000)
+ x_offset = x + (column << 3) - (m_layer_fg_scroll_x & 0x07);
+ else
+ x_offset = 7 - x + (column << 3) - (m_layer_fg_scroll_x & 0x07);
+
+ if (x_offset >= 0 && x_offset >= m_window_fg_left && x_offset < m_window_fg_right && x_offset < WSWAN_X_PIXELS)
+ {
+ if (m_colors_16)
+ {
+ if (col)
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ /* Hmmmm, what should we do here... Is this correct?? */
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ }
+ }
+ else
+ {
+ if (col || !(tile_palette & 4))
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ m_bitmap.pix16(m_current_line, x_offset) = m_main_palette[m_pal[tile_palette][col]];
+ }
+ }
+ }
+ }
+ }
+}
+
+void wswan_video_device::draw_foreground_3()
+{
+ UINT16 map_addr = m_layer_fg_address + (((m_current_line + m_layer_fg_scroll_y) & 0xf8) << 3);
+ UINT8 start_column = (m_layer_fg_scroll_x >> 3);
+
+ for (int column = 0; column < 29; column++)
+ {
+ UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
+ int x_offset, tile_line, tile_address;
+ int tile_data = (m_vram[map_addr + (((start_column + column) & 0x1f) << 1) + 1] << 8)
+ | m_vram[map_addr + (((start_column + column) & 0x1f) << 1)];
+ int tile_number = tile_data & 0x01ff;
+ int tile_palette = (tile_data >> 9) & 0x0f;
+
+ tile_line = (m_current_line + m_layer_fg_scroll_y) & 0x07;
+ if (tile_data & 0x8000) // vflip
+ tile_line = 7 - tile_line;
+
+ if (m_colors_16)
+ {
+ tile_address = ((tile_data & 0x2000) ? 0x8000 : 0x4000) + (tile_number * 32) + (tile_line << 2);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 24) | (m_vram[tile_address + 1] << 16) | (m_vram[tile_address + 2] << 8) | m_vram[tile_address + 3];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = m_vram[tile_address + 2] << 2;
+ plane3 = m_vram[tile_address + 3] << 3;
+ }
+ }
+ else
+ {
+ tile_address = 0x2000 + (tile_number * 16) + (tile_line << 1);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 8) | m_vram[tile_address + 1];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = 0;
+ plane3 = 0;
+ }
+ }
+
+ for (int x = 0; x < 8; x++)
+ {
+ int col;
+ if (m_tile_packed)
+ {
+ if (m_colors_16)
+ {
+ col = plane0 & 0x0f;
+ plane0 = plane0 >> 4;
+ }
+ else
+ {
+ col = plane0 & 0x03;
+ plane0 = plane0 >> 2;
+ }
+ }
+ else
+ {
+ col = (plane3 & 8) | (plane2 & 4) | (plane1 & 2) | (plane0 & 1);
+ plane3 = plane3 >> 1;
+ plane2 = plane2 >> 1;
+ plane1 = plane1 >> 1;
+ plane0 = plane0 >> 1;
+ }
+
+ if (tile_data & 0x4000)
+ x_offset = x + (column << 3) - (m_layer_fg_scroll_x & 0x07);
+ else
+ x_offset = 7 - x + (column << 3) - (m_layer_fg_scroll_x & 0x07);
+
+ if ((x_offset >= 0 && x_offset < m_window_fg_left) || (x_offset >= m_window_fg_right && x_offset < WSWAN_X_PIXELS))
+ {
+ if (m_colors_16)
+ {
+ if (col)
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ /* Hmmmm, what should we do here... Is this correct?? */
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ }
+ }
+ else
+ {
+ if (col || !(tile_palette & 4))
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ m_bitmap.pix16(m_current_line, x_offset) = m_main_palette[m_pal[tile_palette][col]];
+ }
+ }
+ }
+ }
+ }
+}
+
+void wswan_video_device::handle_sprites(int mask)
+{
+ if (m_sprite_count == 0)
+ return;
+
+ for (int i = m_sprite_first + m_sprite_count - 1; i >= m_sprite_first; i--)
+ {
+ UINT16 tile_data = (m_sprite_table_buffer[i * 4 + 1] << 8) | m_sprite_table_buffer[i * 4];
+ UINT8 y = m_sprite_table_buffer[ i * 4 + 2 ];
+ UINT8 x = m_sprite_table_buffer[ i * 4 + 3 ];
+ int tile_line = (m_current_line - y) & 0xff;
+
+ if ((tile_line >= 0) && (tile_line < 8) && ((tile_data & 0x2000) == mask))
+ {
+ UINT32 plane0 = 0, plane1 = 0, plane2 = 0, plane3 = 0;
+ int x_offset, tile_address;
+ int tile_number = tile_data & 0x01ff;
+ int tile_palette = 8 + ((tile_data >> 9) & 0x07);
+ int check_clip = 0;
+
+ if (tile_data & 0x8000)
+ tile_line = 7 - tile_line;
+
+ if (m_colors_16)
+ {
+ tile_address = 0x4000 + (tile_number * 32) + (tile_line << 2);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 24) | (m_vram[tile_address + 1] << 16) | (m_vram[tile_address + 2] << 8) | m_vram[tile_address + 3];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = m_vram[tile_address + 2] << 2;
+ plane3 = m_vram[tile_address + 3] << 3;
+ }
+ }
+ else
+ {
+ tile_address = 0x2000 + (tile_number * 16) + (tile_line << 1);
+ if (m_tile_packed)
+ {
+ plane0 = (m_vram[tile_address + 0] << 8) | m_vram[tile_address + 1];
+ }
+ else
+ {
+ plane0 = m_vram[tile_address + 0];
+ plane1 = m_vram[tile_address + 1] << 1;
+ plane2 = 0;
+ plane3 = 0;
+ }
+ }
+
+ if (m_window_sprites_enable)
+ {
+ if (tile_data & 0x1000)
+ {
+ if (m_current_line >= m_window_sprites_top && m_current_line <= m_window_sprites_bottom)
+ check_clip = 1;
+ }
+ else
+ {
+ if (m_current_line < m_window_sprites_top || m_current_line > m_window_sprites_bottom)
+ continue;
+ }
+ }
+
+ for (int j = 0; j < 8; j++)
+ {
+ int col;
+ if (m_tile_packed)
+ {
+ if (m_colors_16)
+ {
+ col = plane0 & 0x0f;
+ plane0 = plane0 >> 4;
+ }
+ else
+ {
+ col = plane0 & 0x03;
+ plane0 = plane0 >> 2;
+ }
+ }
+ else
+ {
+ col = (plane3 & 8) | (plane2 & 4) | (plane1 & 2) | (plane0 & 1);
+ plane3 = plane3 >> 1;
+ plane2 = plane2 >> 1;
+ plane1 = plane1 >> 1;
+ plane0 = plane0 >> 1;
+ }
+
+ if (tile_data & 0x4000)
+ x_offset = x + j;
+ else
+ x_offset = x + 7 - j;
+
+ x_offset = x_offset & 0xff;
+
+ if (m_window_sprites_enable)
+ {
+ if (tile_data & 0x1000 && check_clip)
+ {
+ if (x_offset >= m_window_sprites_left && x_offset <= m_window_sprites_right)
+ continue;
+ }
+ else
+ {
+ if (x_offset < m_window_sprites_left || x_offset > m_window_sprites_right)
+ {
+// continue;
+ }
+ }
+ }
+ if (x_offset >= 0 && x_offset < WSWAN_X_PIXELS)
+ {
+ if (m_colors_16)
+ {
+ if (col)
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ /* Hmmmm, what should we do here... Is this correct?? */
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ }
+ }
+ else
+ {
+ if (col || !(tile_palette & 4))
+ {
+ if (m_color_mode)
+ m_bitmap.pix16(m_current_line, x_offset) = m_pal[tile_palette][col];
+ else
+ m_bitmap.pix16(m_current_line, x_offset) = m_main_palette[m_pal[tile_palette][col]];
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+
+void wswan_video_device::refresh_scanline()
+{
+ setup_palettes();
+
+ rectangle rec(0, WSWAN_X_PIXELS, m_current_line, m_current_line);
+ if (m_lcd_control)
+ {
+ /* Not sure if these background color checks and settings are correct */
+ if (m_color_mode && m_colors_16)
+ m_bitmap.fill(m_pal[m_bg_control >> 4][m_bg_control & 0x0f], rec);
+ else
+ m_bitmap.fill(m_main_palette[m_bg_control & 0x07], rec);
+ }
+ else
+ {
+ m_bitmap.fill(0, rec);
+ return;
+ }
+
+ // Draw background layer
+ if (m_layer_bg_enable)
+ draw_background();
+
+ // Draw sprites between background and foreground layers
+ if (m_sprites_enable)
+ handle_sprites(0);
+
+ // Draw foreground layer, taking window settings into account
+ if (m_layer_fg_enable)
+ {
+ switch (m_window_fg_mode)
+ {
+ case 0: // FG inside & outside window area
+ draw_foreground_0();
+ break;
+ case 1: // ???
+ logerror("Unknown foreground mode 1 set\n");
+ break;
+ case 2: // FG only inside window area
+ if (m_current_line >= m_window_fg_top && m_current_line <= m_window_fg_bottom)
+ draw_foreground_2();
+ break;
+ case 3: // FG only outside window area
+ if (m_current_line < m_window_fg_top || m_current_line > m_window_fg_bottom)
+ draw_foreground_0();
+ else
+ draw_foreground_3();
+ break;
+ }
+ }
+
+ // Draw sprites in front of foreground layer
+ if (m_sprites_enable)
+ handle_sprites(0x2000);
+}
+
+
+
+UINT32 wswan_video_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect);
+ return 0;
+}
+
+
+READ8_MEMBER(wswan_video_device::reg_r)
+{
+ UINT8 value = m_regs[offset];
+
+ if (offset >= 0x20 && offset < 0x40)
+ return m_palette_port[offset & 0x1f];
+
+ switch (offset)
+ {
+ case 0x01:
+ value = m_bg_control;
+ break;
+ case 0x02:
+ value = m_current_line;
+ break;
+ case 0x14:
+ value = m_lcd_control;
+ break;
+ case 0xa8:
+ value = m_timer_hblank_count & 0xff;
+ break;
+ case 0xa9:
+ value = m_timer_hblank_count >> 8;
+ break;
+ case 0xaa:
+ value = m_timer_vblank_count & 0xff;
+ break;
+ case 0xab:
+ value = m_timer_vblank_count >> 8;
+ break;
+ }
+
+ return value;
+}
+
+
+WRITE8_MEMBER(wswan_video_device::reg_w)
+{
+ if (offset >= 0x20 && offset < 0x40)
+ {
+ // 0x20-0x3f tile/sprite palette settings
+ // even offs
+ // Bit 0-3 - Palette (offs & 0x1f)/2 index 0
+ // Bit 4-7 - Palette (offs & 0x1f)/2 index 1
+ // odd offs
+ // Bit 0-3 - Palette (offs & 0x1f)/2 index 2
+ // Bit 4-7 - Palette (offs & 0x1f)/2 index 3
+ m_palette_port[offset & 0x1f] = data;
+ return;
+ }
+
+ switch (offset)
+ {
+ case 0x00: // Display control
+ // Bit 0 - Background layer enable
+ // Bit 1 - Foreground layer enable
+ // Bit 2 - Sprites enable
+ // Bit 3 - Sprite window enable
+ // Bit 4-5 - Foreground window configuration
+ // 00 - Foreground layer is displayed inside and outside foreground window area
+ // 01 - Unknown
+ // 10 - Foreground layer is displayed only inside foreground window area
+ // 11 - Foreground layer is displayed outside foreground window area
+ // Bit 6-7 - Unknown
+ m_layer_bg_enable = data & 0x1;
+ m_layer_fg_enable = (data & 0x2) >> 1;
+ m_sprites_enable = (data & 0x4) >> 2;
+ m_window_sprites_enable = (data & 0x8) >> 3;
+ m_window_fg_mode = (data & 0x30) >> 4;
+ break;
+ case 0x01: // Background colour
+ // In 16 colour mode:
+ // Bit 0-3 - Palette index
+ // Bit 4-7 - Palette number
+ // Otherwise:
+ // Bit 0-2 - Main palette index
+ // Bit 3-7 - Unknown
+ m_bg_control = data;
+ break;
+ case 0x02: // Current scanline (Most likely read-only)
+ logerror("Write to current scanline! Current value: %d Data to write: %d\n", m_current_line, data);
+ // Returning so we don't overwrite the value here, not that it really matters
+ return;
+ case 0x03: // Line compare
+ m_line_compare = data;
+ logerror("Write to line compare: %d\n", data);
+ break;
+ case 0x04: // Sprite table base address
+ // Bit 0-5 - Determine sprite table base address 0 0xxxxxx0 00000000
+ // Bit 6-7 - Unknown
+ m_sprite_table_address = (data & 0x3f) << 9;
+ break;
+ case 0x05: // First sprite number (the one we start drawing with)
+ m_sprite_first_latch = data;
+ if (data) logerror("non-zero first sprite %d\n", data);
+ break;
+ case 0x06: // Number of sprites to draw
+ m_sprite_count_latch = data;
+ break;
+ case 0x07: // Background/Foreground table base addresses
+ // Bit 0-2 - Determine background table base address 00xxx000 00000000
+ // Bit 3 - Unknown
+ // Bit 4-6 - Determine foreground table base address 00xxx000 00000000
+ // Bit 7 - Unknown
+ m_layer_bg_address = (data & 0x7) << 11;
+ m_layer_fg_address = (data & 0x70) << 7;
+ break;
+ case 0x08: // Left coordinate of foreground window
+ m_window_fg_left = data;
+ break;
+ case 0x09: // Top coordinate of foreground window
+ m_window_fg_top = data;
+ break;
+ case 0x0a: // Right coordinate of foreground window
+ m_window_fg_right = data;
+ break;
+ case 0x0b: // Bottom coordinate of foreground window
+ m_window_fg_bottom = data;
+ break;
+ case 0x0c: // Left coordinate of sprite window
+ m_window_sprites_left = data;
+ break;
+ case 0x0d: // Top coordinate of sprite window
+ m_window_sprites_top = data;
+ break;
+ case 0x0e: // Right coordinate of sprite window
+ m_window_sprites_right = data;
+ break;
+ case 0x0f: // Bottom coordinate of sprite window
+ m_window_sprites_bottom = data;
+ break;
+ case 0x10: // Background layer X scroll
+ m_layer_bg_scroll_x = data;
+ break;
+ case 0x11: // Background layer Y scroll
+ m_layer_bg_scroll_y = data;
+ break;
+ case 0x12: // Foreground layer X scroll
+ m_layer_fg_scroll_x = data;
+ break;
+ case 0x13: // Foreground layer Y scroll
+ m_layer_fg_scroll_y = data;
+ break;
+ case 0x14: // LCD control
+ // Bit 0 - LCD enable
+ // Bit 1-7 - Unknown
+ m_lcd_control = data;
+ break;
+ case 0x15: // LCD icons
+ // Bit 0 - LCD sleep icon enable
+ // Bit 1 - Vertical position icon enable
+ // Bit 2 - Horizontal position icon enable
+ // Bit 3 - Dot 1 icon enable
+ // Bit 4 - Dot 2 icon enable
+ // Bit 5 - Dot 3 icon enable
+ // Bit 6-7 - Unknown
+ m_icons = data; /* ummmmm */
+ break;
+ case 0x1c: // Palette colors 0 and 1
+ // Bit 0-3 - Gray tone setting for main palette index 0
+ // Bit 4-7 - Gray tone setting for main palette index 1
+ if (m_vdp_type == VDP_TYPE_WSC)
+ {
+ int i = 15 - (data & 0x0f);
+ int j = 15 - ((data & 0xf0) >> 4);
+ m_main_palette[0] = (i << 8) | (i << 4) | i;
+ m_main_palette[1] = (j << 8) | (j << 4) | j;
+ }
+ else
+ {
+ m_main_palette[0] = data & 0x0f;
+ m_main_palette[1] = (data & 0xf0) >> 4;
+ }
+ break;
+ case 0x1d: // Palette colors 2 and 3
+ // Bit 0-3 - Gray tone setting for main palette index 2
+ // Bit 4-7 - Gray tone setting for main palette index 3
+ if (m_vdp_type == VDP_TYPE_WSC)
+ {
+ int i = 15 - (data & 0x0f);
+ int j = 15 - ((data & 0xf0) >> 4);
+ m_main_palette[2] = (i << 8) | (i << 4) | i;
+ m_main_palette[3] = (j << 8) | (j << 4) | j;
+ }
+ else
+ {
+ m_main_palette[2] = data & 0x0f;
+ m_main_palette[3] = (data & 0xf0) >> 4;
+ }
+ break;
+ case 0x1e: // Palette colors 4 and 5
+ // Bit 0-3 - Gray tone setting for main palette index 4
+ // Bit 4-7 - Gray tone setting for main palette index 5
+ if (m_vdp_type == VDP_TYPE_WSC)
+ {
+ int i = 15 - (data & 0x0f);
+ int j = 15 - ((data & 0xf0) >> 4);
+ m_main_palette[4] = (i << 8) | (i << 4) | i;
+ m_main_palette[5] = (j << 8) | (j << 4) | j;
+ }
+ else
+ {
+ m_main_palette[4] = data & 0x0f;
+ m_main_palette[5] = (data & 0xf0) >> 4;
+ }
+ break;
+ case 0x1f: // Palette colors 6 and 7
+ // Bit 0-3 - Gray tone setting for main palette index 6
+ // Bit 4-7 - Gray tone setting for main palette index 7
+ if (m_vdp_type == VDP_TYPE_WSC)
+ {
+ int i = 15 - (data & 0x0f);
+ int j = 15 - ((data & 0xf0) >> 4);
+ m_main_palette[6] = (i << 8) | (i << 4) | i;
+ m_main_palette[7] = (j << 8) | (j << 4) | j;
+ }
+ else
+ {
+ m_main_palette[6] = data & 0x0f;
+ m_main_palette[7] = (data & 0xf0) >> 4;
+ }
+ break;
+ case 0x60: // Video mode
+ // Bit 0-4 - Unknown
+ // Bit 5 - Packed mode 0 = not packed mode, 1 = packed mode
+ // Bit 6 - 4/16 colour mode select: 0 = 4 colour mode, 1 = 16 colour mode
+ // Bit 7 - monochrome/colour mode select: 0 = monochrome mode, 1 = colour mode
+ /*
+ * 111 - packed, 16 color, use 4000/8000, color
+ * 110 - not packed, 16 color, use 4000/8000, color
+ * 101 - packed, 4 color, use 2000, color
+ * 100 - not packed, 4 color, use 2000, color
+ * 011 - packed, 16 color, use 4000/8000, monochrome
+ * 010 - not packed, 16 color , use 4000/8000, monochrome
+ * 001 - packed, 4 color, use 2000, monochrome
+ * 000 - not packed, 4 color, use 2000, monochrome - Regular WS monochrome
+ */
+ if (m_vdp_type == VDP_TYPE_WSC)
+ {
+ m_color_mode = data & 0x80;
+ m_colors_16 = data & 0x40;
+ m_tile_packed = data & 0x20;
+ }
+ break;
+ case 0xa2: // Timer control
+ // Bit 0 - HBlank Timer enable
+ // Bit 1 - HBlank Timer mode: 0 = one shot, 1 = auto reset
+ // Bit 2 - VBlank Timer(1/75s) enable
+ // Bit 3 - VBlank Timer mode: 0 = one shot, 1 = auto reset
+ // Bit 4-7 - Unknown
+ m_timer_hblank_enable = BIT(data, 0);
+ m_timer_hblank_mode = BIT(data, 1);
+ m_timer_vblank_enable = BIT(data, 2);
+ m_timer_vblank_mode = BIT(data, 3);
+ break;
+ case 0xa4: // HBlank timer frequency reload value (bits 0-7)
+ m_timer_hblank_reload &= 0xff00;
+ m_timer_hblank_reload += data;
+ m_timer_hblank_count = m_timer_hblank_reload;
+ break;
+ case 0xa5: // HBlank timer frequency reload value (bits 8-15)
+ m_timer_hblank_reload &= 0xff;
+ m_timer_hblank_reload += data << 8;
+ m_timer_hblank_count = m_timer_hblank_reload;
+ break;
+ case 0xa6: // VBlank timer frequency reload value (bits 0-7)
+ m_timer_vblank_reload &= 0xff00;
+ m_timer_vblank_reload += data;
+ m_timer_vblank_count = m_timer_vblank_reload;
+ break;
+ case 0xa7: // VBlank timer frequency reload value (bits 8-15)
+ m_timer_vblank_reload &= 0xff;
+ m_timer_vblank_reload += data << 8;
+ m_timer_vblank_count = m_timer_vblank_reload;
+ break;
+ case 0xa8: // HBlank counter (bits 0-7)
+ case 0xa9: // HBlank counter (bits 8-15)
+ case 0xaa: // VBlank counter (bits 0-7)
+ case 0xab: // VBlank counter (bits 8-15)
+ break;
+ }
+
+ m_regs[offset] = data;
+}
+
+
+void wswan_video_device::scanline_interrupt()
+{
+ if (m_current_line < 144)
+ refresh_scanline();
+
+ // Decrement 12kHz (HBlank) counter
+ if (m_timer_hblank_enable && m_timer_hblank_reload != 0)
+ {
+ m_timer_hblank_count--;
+ logerror("timer_hblank_count: %X\n", m_timer_hblank_count);
+ if (m_timer_hblank_count == 0)
+ {
+ if (m_timer_hblank_mode)
+ m_timer_hblank_count = m_timer_hblank_reload;
+ else
+ m_timer_hblank_reload = 0;
+
+ logerror( "trigerring hbltmr interrupt\n" );
+ m_set_irq_cb(WSWAN_VIDEO_IFLAG_HBLTMR);
+ }
+ }
+
+ // Handle Sound DMA
+ m_snd_dma_cb();
+
+// m_current_line = (m_current_line + 1) % 159;
+
+ if (m_current_line == 144) // buffer sprite table
+ {
+ memcpy(m_sprite_table_buffer, &m_vram[m_sprite_table_address], 512);
+ m_sprite_first = m_sprite_first_latch; // always zero?
+ m_sprite_count = m_sprite_count_latch;
+ }
+
+ if (m_current_line == 144)
+ {
+ m_set_irq_cb(WSWAN_VIDEO_IFLAG_VBL);
+ /* Decrement 75Hz (VBlank) counter */
+ if (m_timer_vblank_enable && m_timer_vblank_reload != 0)
+ {
+ m_timer_vblank_count--;
+ logerror("timer_vblank_count: %X\n", m_timer_vblank_count);
+ if (m_timer_vblank_count == 0)
+ {
+ if (m_timer_vblank_mode)
+ m_timer_vblank_count = m_timer_vblank_reload;
+ else
+ m_timer_vblank_reload = 0;
+
+ logerror("triggering vbltmr interrupt\n");
+ m_set_irq_cb(WSWAN_VIDEO_IFLAG_VBLTMR);
+ }
+ }
+ }
+
+// m_current_line = (m_current_line + 1) % 159;
+
+ if (m_current_line == m_line_compare)
+ m_set_irq_cb(WSWAN_VIDEO_IFLAG_LCMP);
+
+ m_current_line = (m_current_line + 1) % 159;
+}
+
+
+READ8_MEMBER(wswan_video_device::vram_r)
+{
+ return m_vram[offset];
+}
+
+WRITE8_MEMBER(wswan_video_device::vram_w)
+{
+ m_vram[offset] = data;
+}
diff --git a/src/mess/video/wswan_video.h b/src/mess/video/wswan_video.h
new file mode 100644
index 00000000000..0ac0914f06a
--- /dev/null
+++ b/src/mess/video/wswan_video.h
@@ -0,0 +1,147 @@
+/**********************************************************************
+
+ wswan.h
+
+ File to handle video emulation of the Bandai WonderSwan.
+
+ Anthony Kruize
+ Wilbert Pol
+
+**********************************************************************/
+
+#ifndef __WSWAN_VIDEO__
+#define __WSWAN_VIDEO__
+
+#include "emu.h"
+
+enum
+{
+ VDP_TYPE_WSWAN = 0,
+ VDP_TYPE_WSC
+};
+
+#define WSWAN_X_PIXELS (28*8)
+#define WSWAN_Y_PIXELS (18*8)
+
+
+
+typedef device_delegate<void (int irq)> wswan_video_irq_cb_delegate;
+#define WSWAN_VIDEO_IRQ_CB_MEMBER(_name) void _name(int irq)
+
+typedef device_delegate<void (void)> wswan_video_dmasnd_cb_delegate;
+#define WSWAN_VIDEO_DMASND_CB_MEMBER(_name) void _name(void)
+
+#define MCFG_WSWAN_VIDEO_IRQ_CB(_class, _method) \
+ wswan_video_device::set_irq_callback(*device, wswan_video_irq_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
+
+#define MCFG_WSWAN_VIDEO_DMASND_CB(_class, _method) \
+ wswan_video_device::set_dmasnd_callback(*device, wswan_video_dmasnd_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
+
+#define MCFG_WSWAN_VIDEO_TYPE( _type) \
+ wswan_video_device::set_vdp_type(*device, _type);
+
+
+class wswan_video_device : public device_t
+{
+public:
+ wswan_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ ~wswan_video_device() {}
+
+ // static configuration
+ static void set_irq_callback(device_t &device, wswan_video_irq_cb_delegate callback) { downcast<wswan_video_device &>(device).m_set_irq_cb = callback; }
+ static void set_dmasnd_callback(device_t &device, wswan_video_dmasnd_cb_delegate callback) { downcast<wswan_video_device &>(device).m_snd_dma_cb = callback; }
+ static void set_vdp_type(device_t &device, int type) { downcast<wswan_video_device &>(device).m_vdp_type = type; }
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ virtual DECLARE_READ8_MEMBER(vram_r);
+ virtual DECLARE_WRITE8_MEMBER(vram_w);
+ virtual DECLARE_READ8_MEMBER(reg_r);
+ virtual DECLARE_WRITE8_MEMBER(reg_w);
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+
+ void setup_palettes();
+ void draw_background();
+ void draw_foreground_0();
+ void draw_foreground_2();
+ void draw_foreground_3();
+ void handle_sprites(int mask);
+ void refresh_scanline();
+ void scanline_interrupt();
+ void common_save();
+
+ bitmap_ind16 m_bitmap;
+ UINT8 m_layer_bg_enable; /* Background layer on/off */
+ UINT8 m_layer_fg_enable; /* Foreground layer on/off */
+ UINT8 m_sprites_enable; /* Sprites on/off */
+ UINT8 m_window_sprites_enable; /* Sprite window on/off */
+ UINT8 m_window_fg_mode; /* 0:inside/outside, 1:??, 2:inside, 3:outside */
+ UINT8 m_bg_control;
+ UINT8 m_current_line; /* Current scanline : 0-158 (159?) */
+ UINT8 m_line_compare; /* Line to trigger line interrupt on */
+ UINT32 m_sprite_table_address; /* Address of the sprite table */
+ UINT8 m_sprite_table_buffer[512];
+ UINT8 m_sprite_first; /* First sprite to draw */
+ UINT8 m_sprite_count; /* Number of sprites to draw */
+ UINT8 m_sprite_first_latch;
+ UINT8 m_sprite_count_latch;
+ UINT16 m_layer_bg_address; /* Address of the background screen map */
+ UINT16 m_layer_fg_address; /* Address of the foreground screen map */
+ UINT8 m_window_fg_left; /* Left coordinate of foreground window */
+ UINT8 m_window_fg_top; /* Top coordinate of foreground window */
+ UINT8 m_window_fg_right; /* Right coordinate of foreground window */
+ UINT8 m_window_fg_bottom; /* Bottom coordinate of foreground window */
+ UINT8 m_window_sprites_left; /* Left coordinate of sprites window */
+ UINT8 m_window_sprites_top; /* Top coordinate of sprites window */
+ UINT8 m_window_sprites_right; /* Right coordinate of sprites window */
+ UINT8 m_window_sprites_bottom; /* Bottom coordinate of sprites window */
+ UINT8 m_layer_bg_scroll_x; /* Background layer X scroll */
+ UINT8 m_layer_bg_scroll_y; /* Background layer Y scroll */
+ UINT8 m_layer_fg_scroll_x; /* Foreground layer X scroll */
+ UINT8 m_layer_fg_scroll_y; /* Foreground layer Y scroll */
+ UINT8 m_lcd_control; /* LCD on/off */
+ UINT8 m_icons; /* FIXME: What do we do with these? Maybe artwork? */
+ UINT8 m_color_mode; /* monochrome/color mode */
+ UINT8 m_colors_16; /* 4/16 colors mode */
+ UINT8 m_tile_packed; /* layered/packed tile mode switch */
+ UINT8 m_timer_hblank_enable; /* Horizontal blank interrupt on/off */
+ UINT8 m_timer_hblank_mode; /* Horizontal blank timer mode */
+ UINT16 m_timer_hblank_reload; /* Horizontal blank timer reload value */
+ UINT16 m_timer_hblank_count; /* Horizontal blank timer counter value */
+ UINT8 m_timer_vblank_enable; /* Vertical blank interrupt on/off */
+ UINT8 m_timer_vblank_mode; /* Vertical blank timer mode */
+ UINT16 m_timer_vblank_reload; /* Vertical blank timer reload value */
+ UINT16 m_timer_vblank_count; /* Vertical blank timer counter value */
+ int m_main_palette[8];
+ emu_timer *m_timer;
+
+ dynamic_buffer m_vram;
+ UINT8 *m_palette_vram;
+ UINT8 m_palette_port[0x20];
+ int m_pal[16][16];
+ UINT8 m_regs[256];
+
+ wswan_video_irq_cb_delegate m_set_irq_cb;
+ wswan_video_dmasnd_cb_delegate m_snd_dma_cb;
+ int m_vdp_type;
+
+ // timer IDs
+ static const device_timer_id TIMER_SCANLINE = 0;
+
+ // interrupt flags
+ // these are the same as the wswan.h ones
+ static const UINT8 WSWAN_VIDEO_IFLAG_LCMP = 0x10;
+ static const UINT8 WSWAN_VIDEO_IFLAG_VBLTMR = 0x20;
+ static const UINT8 WSWAN_VIDEO_IFLAG_VBL = 0x40;
+ static const UINT8 WSWAN_VIDEO_IFLAG_HBLTMR = 0x80;
+};
+
+extern const device_type WSWAN_VIDEO;
+
+
+#endif
diff --git a/src/osd/sdl/man/castool.1 b/src/osd/sdl/man/castool.1
index 15ebd61a962..49c4bc20fd6 100644
--- a/src/osd/sdl/man/castool.1
+++ b/src/osd/sdl/man/castool.1
@@ -6,7 +6,7 @@
.\" Cesare Falco <c.falco@ubuntu.com>, February 2011
.\"
.\"
-.TH CASTOOL 1 2014-07-31 0.154 "MESS Generic cassette manipulation tool"
+.TH CASTOOL 1 2014-10-15 0.155 "MESS Generic cassette manipulation tool"
.\"
.\"
.\" NAME chapter
diff --git a/src/osd/sdl/man/chdman.1 b/src/osd/sdl/man/chdman.1
index 830d2274d78..649714cafa5 100644
--- a/src/osd/sdl/man/chdman.1
+++ b/src/osd/sdl/man/chdman.1
@@ -6,7 +6,7 @@
.\" Ashley T. Howes <debiandev@ashleyhowes.com>, February 2005
.\" updated by Cesare Falco <c.falco@ubuntu.com>, February 2007
.\"
-.TH CHDMAN 1 2014-07-31 0.154 "MAME Compressed Hunks of Data (CHD) manager"
+.TH CHDMAN 1 2014-10-15 0.155 "MAME Compressed Hunks of Data (CHD) manager"
.\"
.\" NAME chapter
.SH NAME
diff --git a/src/osd/sdl/man/floptool.1 b/src/osd/sdl/man/floptool.1
new file mode 100644
index 00000000000..96006a8c1bb
--- /dev/null
+++ b/src/osd/sdl/man/floptool.1
@@ -0,0 +1,47 @@
+.\" -*- nroff -*-
+.\"
+.\" floptool.1
+.\"
+.\" Man page created from usage info
+.\" Cesare Falco <c.falco@ubuntu.com>, April 2014
+.\"
+.\"
+.TH FLOPTOOL 1 2014-10-15 0.155 "MESS Generic floppy manipulation tool"
+.\"
+.\"
+.\" NAME chapter
+.SH NAME
+floptool \- MESS Generic floppy image manipulation tool
+.\"
+.\"
+.\" SYNOPSIS chapter
+.SH SYNOPSIS
+.B floptool
+.I option
+.\"
+.\"
+.\" DESCRIPTION chapter
+.SH DESCRIPTION
+.B floptool
+is a tool for the maintenance and manipulation of floppy disk
+images that MESS users need to deal with.
+.\"
+.\"
+.\" COMMANDS chapter
+.SH COMMANDS
+.TP
+.B identify \fIinputfile\fR [\fIinputfile \fR... ]
+Determine the format of a floppy disk image.
+.TP
+.B convert [\fIinputformat\fR|\fIauto\fR] \fIoutputformat inputfile outputfile
+Convert a floppy disk image to a different format.
+.\"
+.\"
+.\" EXAMPLES chapter
+.SH EXAMPLES
+.B floptool identify image.dsk
+.\"
+.\"
+.\" SEE ALSO chapter
+.SH SEE ALSO
+mess(6)
diff --git a/src/osd/sdl/man/imgtool.1 b/src/osd/sdl/man/imgtool.1
index 270d71bca4b..08134b15c61 100644
--- a/src/osd/sdl/man/imgtool.1
+++ b/src/osd/sdl/man/imgtool.1
@@ -6,7 +6,7 @@
.\" Cesare Falco <c.falco@ubuntu.com>, February 2011
.\"
.\"
-.TH IMGTOOL 1 2014-07-31 0.154 "MESS media image manipulation tool"
+.TH IMGTOOL 1 2014-10-15 0.155 "MESS media image manipulation tool"
.\"
.\"
.\" NAME chapter
diff --git a/src/osd/sdl/man/jedutil.1 b/src/osd/sdl/man/jedutil.1
index c97a32e475d..5fb6f5960a3 100644
--- a/src/osd/sdl/man/jedutil.1
+++ b/src/osd/sdl/man/jedutil.1
@@ -8,7 +8,7 @@
.\" References
.\" http://aarongiles.com/?p=159
.\"
-.TH JEDUTIL 1 2014-07-31 0.154 "MAME JEDEC file utilities"
+.TH JEDUTIL 1 2014-10-15 0.155 "MAME JEDEC file utilities"
.\"
.\" NAME chapter
.SH NAME
diff --git a/src/osd/sdl/man/ldresample.1 b/src/osd/sdl/man/ldresample.1
index 27061f27a6c..51e27385e4a 100644
--- a/src/osd/sdl/man/ldresample.1
+++ b/src/osd/sdl/man/ldresample.1
@@ -3,7 +3,7 @@
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.\"
-.TH LDRESAMPLE 1 2014-07-31 0.154 "MAME laserdisc audio manipulation tool"
+.TH LDRESAMPLE 1 2014-10-15 0.155 "MAME laserdisc audio manipulation tool"
.\"
.\" Please adjust this date whenever revising the manpage.
.\"
diff --git a/src/osd/sdl/man/ldverify.1 b/src/osd/sdl/man/ldverify.1
index 2967fca1eba..c9ecc91f181 100644
--- a/src/osd/sdl/man/ldverify.1
+++ b/src/osd/sdl/man/ldverify.1
@@ -5,7 +5,7 @@
.\" Man page created from source and usage information by
.\" Cesare Falco <c.falco@ubuntu.com>, August 2008
.\"
-.TH LDVERIFY 1 2014-07-31 0.154 "MAME laserdisc data checker"
+.TH LDVERIFY 1 2014-10-15 0.155 "MAME laserdisc data checker"
.\"
.\" NAME chapter
.SH NAME
diff --git a/src/osd/sdl/man/mame.6 b/src/osd/sdl/man/mame.6
index f82506b0a73..b895ca3e018 100644
--- a/src/osd/sdl/man/mame.6
+++ b/src/osd/sdl/man/mame.6
@@ -13,7 +13,7 @@
.\" and updated by Andrew Burton <burtona@gol.com>, July 2003
.\"
.\"
-.TH MAME 6 2014-07-31 0.154 "MAME \- The Multiple Arcade Machine Emulator"
+.TH MAME 6 2014-10-15 0.155 "MAME \- The Multiple Arcade Machine Emulator"
.\"
.\"
.\" NAME chapter
@@ -933,8 +933,8 @@ The default is 0.85.
.B \-natural, \-nat
Allows user to specify whether or not to use a natural keyboard.
This allows you to start your game or system in a 'native' mode, depending
-on your region, allowing compatability for non\-"QWERTY" style keyboards.
-The default is OFF (-nonatural).
+on your region, allowing compatibility for non\-"QWERTY" style keyboards.
+The default is OFF (\-nonatural).
.TP
.B \-joystick_contradictory
Enable contradictory direction digital joystick input at the same time.
diff --git a/src/osd/sdl/man/mess.6 b/src/osd/sdl/man/mess.6
index 305034fce78..4fca6f0def3 100644
--- a/src/osd/sdl/man/mess.6
+++ b/src/osd/sdl/man/mess.6
@@ -16,7 +16,7 @@
.\" http://www.mess.org/
.\"
.\"
-.TH MESS 6 2014-07-31 0.154 "The Multiple Emulator Super System (MESS)"
+.TH MESS 6 2014-10-15 0.155 "The Multiple Emulator Super System (MESS)"
.\"
.\"
.\" NAME chapter
@@ -935,8 +935,8 @@ The default is 0.85.
.B \-natural, \-nat
Allows user to specify whether or not to use a natural keyboard.
This allows you to start your game or system in a 'native' mode, depending
-on your region, allowing compatability for non\-"QWERTY" style keyboards.
-The default is OFF (-nonatural).
+on your region, allowing compatibility for non\-"QWERTY" style keyboards.
+The default is OFF (\-nonatural).
.TP
.B \-uimodekey, \-umk
Specifies the key used to toggle between full and partial UI mode.
diff --git a/src/osd/sdl/man/romcmp.1 b/src/osd/sdl/man/romcmp.1
index 56c64040779..73fda3a2039 100644
--- a/src/osd/sdl/man/romcmp.1
+++ b/src/osd/sdl/man/romcmp.1
@@ -9,7 +9,7 @@
.\" References
.\" http://www.mame.net/mamefaq.html
.\"
-.TH ROMCMP 1 2014-07-31 0.154 "MAME romset checking tool"
+.TH ROMCMP 1 2014-10-15 0.155 "MAME romset checking tool"
.\"
.\" NAME chapter
.SH NAME
diff --git a/src/osd/sdl/man/testkeys.1 b/src/osd/sdl/man/testkeys.1
index 57297797067..1b8202d4361 100644
--- a/src/osd/sdl/man/testkeys.1
+++ b/src/osd/sdl/man/testkeys.1
@@ -5,7 +5,7 @@
.\" Man page created from source and usage information
.\" Cesare Falco <c.falco@ubuntu.com>, February 2007
.\"
-.TH TESTKEYS 1 2014-07-31 0.154 "MAME SDL keycode scanner"
+.TH TESTKEYS 1 2014-10-15 0.155 "MAME SDL keycode scanner"
.\"
.\" NAME chapter
.SH NAME
diff --git a/src/osd/sdl/sdl.mak b/src/osd/sdl/sdl.mak
index e738fa8b523..21dd81472cc 100644
--- a/src/osd/sdl/sdl.mak
+++ b/src/osd/sdl/sdl.mak
@@ -83,13 +83,17 @@ SDL_FRAMEWORK_PATH = /Library/Frameworks/
OSDSRC = $(SRC)/osd
OSDOBJ = $(OBJ)/osd
-# default to SDL2 for non-OS/2 builds now
+# default to SDL2 for non-OS/2, non-Emscripten builds now
ifndef SDL_LIBVER
ifneq ($(TARGETOS),os2)
+ifneq ($(TARGETOS),emscripten)
SDL_LIBVER = sdl2
else
SDL_LIBVER = sdl
endif
+else
+SDL_LIBVER = sdl
+endif
endif
ifndef NO_USE_QTDEBUG
@@ -258,6 +262,7 @@ NO_X11 = 1
NO_USE_XINPUT = 1
NO_USE_MIDI = 1
NO_USE_QTDEBUG = 1
+DONT_USE_NETWORK = 1
endif
ifeq ($(TARGETOS),macosx)
@@ -779,6 +784,8 @@ ifneq ($(TARGETOS),win32)
LIBS += -lpcap
endif
endif
+else
+OSDOBJS += $(SDLOBJ)/netdev.o
endif
#-------------------------------------------------