summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author ImJezze <jezze@gmx.net>2016-03-02 21:49:49 +0100
committer ImJezze <jezze@gmx.net>2016-03-02 21:49:49 +0100
commit9fe9f6d93e672bcd926f9e7461774bc9cc22e094 (patch)
tree3911b611dd010a4108b90fb8b8c82116eec21117 /src
parentdbdf21ee465acadf3e643d62d6bedfcc297ada85 (diff)
parent1914702e6fae052668df5b068a502bca57c9a3b0 (diff)
Merge remote-tracking branch 'refs/remotes/mamedev/master'
# Resolved Conflicts: # src/osd/modules/render/d3d/d3dhlsl.cpp # src/osd/windows/winmain.cpp
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/centronics/epson_lx810l.cpp2
-rw-r--r--src/devices/bus/isa/3c505.cpp8
-rw-r--r--src/devices/bus/isa/3c505.h2
-rw-r--r--src/devices/bus/isa/omti8621.cpp18
-rw-r--r--src/devices/bus/isa/omti8621.h2
-rw-r--r--src/devices/bus/isa/sc499.cpp8
-rw-r--r--src/devices/bus/isa/sc499.h2
-rw-r--r--src/devices/bus/m5/slot.cpp5
-rw-r--r--src/devices/bus/m5/slot.h2
-rw-r--r--src/devices/bus/newbrain/eim.cpp303
-rw-r--r--src/devices/bus/newbrain/eim.h90
-rw-r--r--src/devices/bus/newbrain/exp.cpp142
-rw-r--r--src/devices/bus/newbrain/exp.h127
-rw-r--r--src/devices/bus/newbrain/fdc.cpp340
-rw-r--r--src/devices/bus/newbrain/fdc.h79
-rw-r--r--src/devices/cpu/adsp2100/adsp2100.cpp10
-rw-r--r--src/devices/cpu/alph8201/alph8201.cpp2
-rw-r--r--src/devices/cpu/alto2/alto2cpu.cpp94
-rw-r--r--src/devices/cpu/alto2/alto2cpu.h31
-rw-r--r--src/devices/cpu/am29000/am29000.cpp21
-rw-r--r--src/devices/cpu/amis2000/amis2000.cpp2
-rw-r--r--src/devices/cpu/apexc/apexc.cpp2
-rw-r--r--src/devices/cpu/arm/arm.cpp4
-rw-r--r--src/devices/cpu/arm7/arm7.cpp4
-rw-r--r--src/devices/cpu/asap/asap.cpp16
-rw-r--r--src/devices/cpu/avr8/avr8.cpp2
-rw-r--r--src/devices/cpu/ccpu/ccpu.cpp2
-rw-r--r--src/devices/cpu/cop400/cop400.cpp82
-rw-r--r--src/devices/cpu/cop400/cop400.h18
-rw-r--r--src/devices/cpu/cosmac/cosmac.cpp10
-rw-r--r--src/devices/cpu/cp1610/cp1610.cpp2
-rw-r--r--src/devices/cpu/cubeqcpu/cubeqcpu.cpp16
-rw-r--r--src/devices/cpu/drcbec.cpp9
-rw-r--r--src/devices/cpu/drcbex64.cpp2
-rw-r--r--src/devices/cpu/drcbex86.cpp2
-rw-r--r--src/devices/cpu/drcuml.cpp27
-rw-r--r--src/devices/cpu/drcuml.h29
-rw-r--r--src/devices/cpu/dsp16/dsp16.cpp152
-rw-r--r--src/devices/cpu/dsp16/dsp16dis.cpp68
-rw-r--r--src/devices/cpu/dsp32/dsp32.cpp6
-rw-r--r--src/devices/cpu/dsp56k/dsp56k.cpp10
-rw-r--r--src/devices/cpu/e0c6200/e0c6200.cpp2
-rw-r--r--src/devices/cpu/e132xs/e132xs.cpp2
-rw-r--r--src/devices/cpu/esrip/esrip.cpp2
-rw-r--r--src/devices/cpu/f8/f8.cpp12
-rw-r--r--src/devices/cpu/g65816/g65816.cpp2
-rw-r--r--src/devices/cpu/h6280/h6280.cpp2
-rw-r--r--src/devices/cpu/h8/h8.cpp42
-rw-r--r--src/devices/cpu/hcd62121/hcd62121.cpp68
-rw-r--r--src/devices/cpu/hd61700/hd61700.cpp4
-rw-r--r--src/devices/cpu/hmcs40/hmcs40.cpp2
-rw-r--r--src/devices/cpu/hphybrid/hphybrid.cpp4
-rw-r--r--src/devices/cpu/i386/i386.cpp34
-rw-r--r--src/devices/cpu/i4004/i4004.cpp12
-rw-r--r--src/devices/cpu/i8008/i8008.cpp4
-rw-r--r--src/devices/cpu/i8085/i8085.cpp2
-rw-r--r--src/devices/cpu/i8089/i8089.cpp14
-rw-r--r--src/devices/cpu/i86/i286.cpp4
-rw-r--r--src/devices/cpu/i86/i86.cpp4
-rw-r--r--src/devices/cpu/i960/i960.cpp2
-rw-r--r--src/devices/cpu/ie15/ie15.cpp4
-rw-r--r--src/devices/cpu/jaguar/jaguar.cpp2
-rw-r--r--src/devices/cpu/lc8670/lc8670.cpp2
-rw-r--r--src/devices/cpu/lh5801/lh5801.cpp2
-rw-r--r--src/devices/cpu/lr35902/lr35902.cpp4
-rw-r--r--src/devices/cpu/m37710/m37710.cpp2
-rw-r--r--src/devices/cpu/m6502/m6502.cpp2
-rw-r--r--src/devices/cpu/m6502/m65ce02.cpp4
-rw-r--r--src/devices/cpu/m6502/m740.cpp2
-rw-r--r--src/devices/cpu/m6800/6800ops.inc2
-rw-r--r--src/devices/cpu/m6800/m6800.cpp2
-rw-r--r--src/devices/cpu/m68000/m68kcpu.cpp24
-rw-r--r--src/devices/cpu/m6805/m6805.cpp2
-rw-r--r--src/devices/cpu/m6809/m6809.cpp2
-rw-r--r--src/devices/cpu/mb86233/mb86233.cpp2
-rw-r--r--src/devices/cpu/mb86235/mb86235.cpp2
-rw-r--r--src/devices/cpu/mb88xx/mb88xx.cpp2
-rw-r--r--src/devices/cpu/mc68hc11/mc68hc11.cpp2
-rw-r--r--src/devices/cpu/mcs48/mcs48.cpp4
-rw-r--r--src/devices/cpu/mcs51/mcs51.cpp2
-rw-r--r--src/devices/cpu/mcs96/mcs96.cpp2
-rw-r--r--src/devices/cpu/melps4/melps4.cpp2
-rw-r--r--src/devices/cpu/minx/minx.cpp2
-rw-r--r--src/devices/cpu/mips/mips3.cpp130
-rw-r--r--src/devices/cpu/mips/mips3com.cpp5
-rw-r--r--src/devices/cpu/mn10200/mn10200.cpp2
-rw-r--r--src/devices/cpu/nec/nec.cpp2
-rw-r--r--src/devices/cpu/nec/v25.cpp2
-rw-r--r--src/devices/cpu/pdp1/pdp1.cpp2
-rw-r--r--src/devices/cpu/pic16c5x/pic16c5x.cpp4
-rw-r--r--src/devices/cpu/pic16c62x/pic16c62x.cpp4
-rw-r--r--src/devices/cpu/powerpc/ppccom.cpp64
-rw-r--r--src/devices/cpu/pps4/pps4.cpp2
-rw-r--r--src/devices/cpu/psx/psx.cpp4
-rw-r--r--src/devices/cpu/rsp/rsp.cpp2
-rw-r--r--src/devices/cpu/rsp/rspcp2.cpp64
-rw-r--r--src/devices/cpu/rsp/rspcp2d.cpp64
-rw-r--r--src/devices/cpu/s2650/s2650.cpp2
-rw-r--r--src/devices/cpu/saturn/saturn.cpp22
-rw-r--r--src/devices/cpu/sc61860/sc61860.cpp2
-rw-r--r--src/devices/cpu/scmp/scmp.cpp2
-rw-r--r--src/devices/cpu/score/score.cpp8
-rw-r--r--src/devices/cpu/scudsp/scudsp.cpp2
-rw-r--r--src/devices/cpu/se3208/se3208.cpp2
-rw-r--r--src/devices/cpu/sh2/sh2.cpp2
-rw-r--r--src/devices/cpu/sh2/sh2comn.cpp2
-rw-r--r--src/devices/cpu/sh4/sh4.cpp66
-rw-r--r--src/devices/cpu/sm8500/sm8500.cpp20
-rw-r--r--src/devices/cpu/spc700/spc700.cpp2
-rw-r--r--src/devices/cpu/ssem/ssem.cpp2
-rw-r--r--src/devices/cpu/ssp1601/ssp1601.cpp7
-rw-r--r--src/devices/cpu/t11/t11.cpp4
-rw-r--r--src/devices/cpu/tlcs90/tlcs90.cpp2
-rw-r--r--src/devices/cpu/tlcs900/tlcs900.cpp2
-rw-r--r--src/devices/cpu/tms0980/tms0980.cpp25
-rw-r--r--src/devices/cpu/tms0980/tms0980.h14
-rw-r--r--src/devices/cpu/tms32010/tms32010.cpp2
-rw-r--r--src/devices/cpu/tms32025/tms32025.cpp2
-rw-r--r--src/devices/cpu/tms32031/tms32031.cpp4
-rw-r--r--src/devices/cpu/tms32082/tms32082.cpp4
-rw-r--r--src/devices/cpu/tms34010/tms34010.cpp6
-rw-r--r--src/devices/cpu/tms7000/tms7000.cpp2
-rw-r--r--src/devices/cpu/ucom4/ucom4.cpp2
-rw-r--r--src/devices/cpu/uml.cpp65
-rw-r--r--src/devices/cpu/upd7725/upd7725.cpp4
-rw-r--r--src/devices/cpu/upd7810/upd7810.cpp2
-rw-r--r--src/devices/cpu/v30mz/v30mz.cpp4
-rw-r--r--src/devices/cpu/v810/v810.cpp2
-rw-r--r--src/devices/cpu/x86log.cpp6
-rw-r--r--src/devices/cpu/z180/z180.cpp2
-rw-r--r--src/devices/cpu/z8/z8.cpp4
-rw-r--r--src/devices/cpu/z80/z80.cpp4
-rw-r--r--src/devices/cpu/z8000/z8000.cpp2
-rw-r--r--src/devices/imagedev/diablo.cpp4
-rw-r--r--src/devices/imagedev/harddriv.cpp4
-rw-r--r--src/devices/imagedev/mfmhd.cpp10
-rw-r--r--src/devices/machine/ay31015.cpp4
-rw-r--r--src/devices/machine/ay31015.h4
-rw-r--r--src/devices/machine/diablo_hd.cpp13
-rw-r--r--src/devices/machine/diablo_hd.h2
-rw-r--r--src/devices/machine/hp_taco.cpp1982
-rw-r--r--src/devices/machine/hp_taco.h234
-rw-r--r--src/devices/machine/netlist.h4
-rw-r--r--src/devices/machine/pci.cpp2
-rw-r--r--src/devices/machine/pit8253.cpp2
-rw-r--r--src/devices/machine/ram.cpp12
-rw-r--r--src/devices/machine/wd7600.cpp6
-rw-r--r--src/devices/machine/z80scc.cpp22
-rw-r--r--src/devices/machine/z80sio.cpp22
-rw-r--r--src/devices/sound/discrete.cpp8
-rw-r--r--src/devices/video/ef9364.cpp394
-rw-r--r--src/devices/video/ef9364.h88
-rw-r--r--src/devices/video/jangou_blitter.cpp30
-rw-r--r--src/devices/video/jangou_blitter.h4
-rw-r--r--src/devices/video/poly.h7
-rw-r--r--src/devices/video/polylgcy.cpp8
-rw-r--r--src/devices/video/upd7220.cpp2
-rw-r--r--src/devices/video/voodoo.cpp10
-rw-r--r--src/devices/video/voodoo.h8
-rw-r--r--src/emu/audit.cpp26
-rw-r--r--src/emu/cheat.cpp29
-rw-r--r--src/emu/clifront.cpp10
-rw-r--r--src/emu/debug/debugcmd.cpp133
-rw-r--r--src/emu/debug/debugcon.cpp44
-rw-r--r--src/emu/debug/debugcon.h35
-rw-r--r--src/emu/debug/debugcpu.cpp23
-rw-r--r--src/emu/debug/debugcpu.h8
-rw-r--r--src/emu/debug/dvbpoints.cpp106
-rw-r--r--src/emu/debug/dvbpoints.h2
-rw-r--r--src/emu/debug/dvdisasm.cpp61
-rw-r--r--src/emu/debug/dvdisasm.h12
-rw-r--r--src/emu/debug/dvmemory.cpp10
-rw-r--r--src/emu/debug/dvstate.cpp10
-rw-r--r--src/emu/debug/dvwpoints.cpp130
-rw-r--r--src/emu/debug/dvwpoints.h2
-rw-r--r--src/emu/devfind.h4
-rw-r--r--src/emu/device.cpp36
-rw-r--r--src/emu/device.h7
-rw-r--r--src/emu/device.ipp40
-rw-r--r--src/emu/diimage.cpp7
-rw-r--r--src/emu/distate.cpp2
-rw-r--r--src/emu/drivers/empty.cpp2
-rw-r--r--src/emu/drivers/xtal.h1
-rw-r--r--src/emu/emu.h7
-rw-r--r--src/emu/emuopts.cpp16
-rw-r--r--src/emu/emuopts.h10
-rw-r--r--src/emu/fileio.cpp20
-rw-r--r--src/emu/fileio.h5
-rw-r--r--src/emu/hash.cpp6
-rw-r--r--src/emu/hash.h8
-rw-r--r--src/emu/info.cpp42
-rw-r--r--src/emu/inpttype.h12
-rw-r--r--src/emu/input.cpp4
-rw-r--r--src/emu/ioport.cpp129
-rw-r--r--src/emu/ioport.h6
-rw-r--r--src/emu/language.cpp6
-rw-r--r--src/emu/language.h9
-rw-r--r--src/emu/luaengine.cpp52
-rw-r--r--src/emu/luaengine.h1
-rw-r--r--src/emu/machine.cpp214
-rw-r--r--src/emu/machine.h14
-rw-r--r--src/emu/machine.ipp76
-rw-r--r--src/emu/mame.cpp1
-rw-r--r--src/emu/memory.cpp62
-rw-r--r--src/emu/profiler.cpp6
-rw-r--r--src/emu/romload.cpp36
-rw-r--r--src/emu/save.cpp4
-rw-r--r--src/emu/schedule.cpp4
-rw-r--r--src/emu/softlist.cpp33
-rw-r--r--src/emu/sound.cpp13
-rw-r--r--src/emu/speaker.cpp2
-rw-r--r--src/emu/tilemap.cpp2
-rw-r--r--src/emu/timer.cpp2
-rw-r--r--src/emu/ui/auditmenu.cpp15
-rw-r--r--src/emu/ui/cheatopt.cpp6
-rw-r--r--src/emu/ui/ctrlmenu.cpp8
-rw-r--r--src/emu/ui/custmenu.cpp59
-rw-r--r--src/emu/ui/custui.cpp115
-rw-r--r--src/emu/ui/custui.h6
-rw-r--r--src/emu/ui/datfile.cpp6
-rw-r--r--src/emu/ui/datfile.h10
-rw-r--r--src/emu/ui/datmenu.cpp17
-rw-r--r--src/emu/ui/datmenu.h4
-rw-r--r--src/emu/ui/devctrl.h6
-rw-r--r--src/emu/ui/devopt.cpp93
-rw-r--r--src/emu/ui/dirmenu.cpp61
-rw-r--r--src/emu/ui/dsplmenu.cpp49
-rw-r--r--src/emu/ui/filemngr.cpp7
-rw-r--r--src/emu/ui/filesel.cpp32
-rw-r--r--src/emu/ui/imgcntrl.cpp4
-rw-r--r--src/emu/ui/info.cpp11
-rw-r--r--src/emu/ui/info_pty.cpp4
-rw-r--r--src/emu/ui/inifile.cpp41
-rw-r--r--src/emu/ui/inifile.h4
-rw-r--r--src/emu/ui/inputmap.cpp41
-rw-r--r--src/emu/ui/mainmenu.cpp10
-rw-r--r--src/emu/ui/menu.cpp283
-rw-r--r--src/emu/ui/menu.h22
-rw-r--r--src/emu/ui/miscmenu.cpp253
-rw-r--r--src/emu/ui/miscmenu.h36
-rw-r--r--src/emu/ui/moptions.cpp104
-rw-r--r--src/emu/ui/optsmenu.cpp108
-rw-r--r--src/emu/ui/optsmenu.h9
-rw-r--r--src/emu/ui/selector.cpp10
-rw-r--r--src/emu/ui/selgame.cpp584
-rw-r--r--src/emu/ui/selgame.h11
-rw-r--r--src/emu/ui/selsoft.cpp344
-rw-r--r--src/emu/ui/selsoft.h4
-rw-r--r--src/emu/ui/simpleselgame.cpp51
-rw-r--r--src/emu/ui/sndmenu.cpp12
-rw-r--r--src/emu/ui/swlist.cpp12
-rw-r--r--src/emu/ui/tapectrl.cpp20
-rw-r--r--src/emu/ui/toolbar.h71
-rw-r--r--src/emu/ui/ui.cpp260
-rw-r--r--src/emu/ui/ui.h206
-rw-r--r--src/emu/ui/utils.cpp8
-rw-r--r--src/emu/ui/utils.h2
-rw-r--r--src/emu/ui/viewgfx.cpp2
-rw-r--r--src/emu/uiinput.cpp8
-rw-r--r--src/emu/uismall.pngbin1488 -> 0 bytes
-rw-r--r--src/emu/validity.cpp21
-rw-r--r--src/emu/video.cpp65
-rw-r--r--src/emu/video.h18
-rw-r--r--src/lib/netlist/nl_base.h22
-rw-r--r--src/lib/netlist/nl_factory.h8
-rw-r--r--src/lib/netlist/plib/pparser.cpp32
-rw-r--r--src/lib/netlist/plib/pparser.h4
-rw-r--r--src/lib/util/cdrom.cpp7
-rw-r--r--src/lib/util/chd.cpp12
-rw-r--r--src/lib/util/chd.h4
-rw-r--r--src/lib/util/corefile.cpp10
-rw-r--r--src/lib/util/corefile.h3
-rw-r--r--src/lib/util/corestr.cpp105
-rw-r--r--src/lib/util/corestr.h15
-rw-r--r--src/lib/util/hashing.cpp22
-rw-r--r--src/lib/util/options.cpp124
-rw-r--r--src/lib/util/options.h2
-rw-r--r--src/lib/util/strformat.h1775
-rw-r--r--src/lib/util/vecstream.h387
-rw-r--r--src/mame/arcade.flt1325
-rw-r--r--src/mame/arcade.lst32732
-rw-r--r--src/mame/audio/zaccaria.h2
-rw-r--r--src/mame/drivers/1943.cpp4
-rw-r--r--src/mame/drivers/1945kiii.cpp13
-rw-r--r--src/mame/drivers/advision.cpp2
-rw-r--r--src/mame/drivers/aim65.cpp6
-rw-r--r--src/mame/drivers/amazonlf.cpp2
-rw-r--r--src/mame/drivers/apple1.cpp159
-rw-r--r--src/mame/drivers/apple2e.cpp8
-rw-r--r--src/mame/drivers/apple2gs.cpp22
-rw-r--r--src/mame/drivers/argox.cpp8
-rw-r--r--src/mame/drivers/asteroid.cpp6
-rw-r--r--src/mame/drivers/astrcorp.cpp8
-rw-r--r--src/mame/drivers/astrocde.cpp2
-rw-r--r--src/mame/drivers/at.cpp1553
-rw-r--r--src/mame/drivers/atpci.cpp136
-rw-r--r--src/mame/drivers/bfm_sc45_helper.cpp2
-rw-r--r--src/mame/drivers/blackt96.cpp309
-rw-r--r--src/mame/drivers/blmbycar.cpp4
-rw-r--r--src/mame/drivers/bublbobl.cpp2
-rw-r--r--src/mame/drivers/cabal.cpp45
-rw-r--r--src/mame/drivers/cidelsa.cpp2
-rw-r--r--src/mame/drivers/cobra.cpp4
-rw-r--r--src/mame/drivers/cps3.cpp2
-rw-r--r--src/mame/drivers/dvk_kcgd.cpp2
-rw-r--r--src/mame/drivers/esq5505.cpp48
-rw-r--r--src/mame/drivers/fidel6502.cpp20
-rw-r--r--src/mame/drivers/fidel68k.cpp6
-rw-r--r--src/mame/drivers/fidelz80.cpp25
-rw-r--r--src/mame/drivers/finalizr.cpp8
-rw-r--r--src/mame/drivers/gaelco.cpp38
-rw-r--r--src/mame/drivers/galaxi.cpp2
-rw-r--r--src/mame/drivers/gkigt.cpp2
-rw-r--r--src/mame/drivers/goldstar.cpp201
-rw-r--r--src/mame/drivers/goupil.cpp720
-rw-r--r--src/mame/drivers/hh_cop400.cpp14
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp4
-rw-r--r--src/mame/drivers/hh_tms1k.cpp24
-rw-r--r--src/mame/drivers/hh_ucom4.cpp3
-rw-r--r--src/mame/drivers/hk68v10.cpp4
-rw-r--r--src/mame/drivers/hp9845.cpp66
-rw-r--r--src/mame/drivers/igs009.cpp225
-rw-r--r--src/mame/drivers/indy_indigo2.cpp1
-rw-r--r--src/mame/drivers/jangou.cpp4
-rw-r--r--src/mame/drivers/jankenmn.cpp8
-rw-r--r--src/mame/drivers/k28.cpp28
-rw-r--r--src/mame/drivers/konamigv.cpp26
-rw-r--r--src/mame/drivers/kurukuru.cpp50
-rw-r--r--src/mame/drivers/lisa.cpp4
-rw-r--r--src/mame/drivers/looping.cpp2
-rw-r--r--src/mame/drivers/m5.cpp486
-rw-r--r--src/mame/drivers/mbdtower.cpp1
-rw-r--r--src/mame/drivers/mcr68.cpp2
-rw-r--r--src/mame/drivers/meadwttl.cpp2
-rw-r--r--src/mame/drivers/megasys1.cpp7
-rw-r--r--src/mame/drivers/merit.cpp22
-rw-r--r--src/mame/drivers/meritm.cpp46
-rw-r--r--src/mame/drivers/mexico86.cpp2
-rw-r--r--src/mame/drivers/midwunit.cpp1
-rw-r--r--src/mame/drivers/model3.cpp2
-rw-r--r--src/mame/drivers/n64.cpp31
-rw-r--r--src/mame/drivers/namcops2.cpp6
-rw-r--r--src/mame/drivers/naomi.cpp67
-rw-r--r--src/mame/drivers/newbrain.cpp1651
-rw-r--r--src/mame/drivers/nibble.cpp12
-rw-r--r--src/mame/drivers/nightgal.cpp14
-rw-r--r--src/mame/drivers/nmk16.cpp333
-rw-r--r--src/mame/drivers/notetaker.cpp390
-rw-r--r--src/mame/drivers/opwolf.cpp2
-rw-r--r--src/mame/drivers/overdriv.cpp10
-rw-r--r--src/mame/drivers/pacman.cpp2
-rw-r--r--src/mame/drivers/pegasus.cpp5
-rw-r--r--src/mame/drivers/peplus.cpp115
-rw-r--r--src/mame/drivers/phoenix.cpp25
-rw-r--r--src/mame/drivers/ps2.cpp255
-rw-r--r--src/mame/drivers/psikyosh.cpp2
-rw-r--r--src/mame/drivers/psychic5.cpp12
-rw-r--r--src/mame/drivers/rex6000.cpp447
-rw-r--r--src/mame/drivers/scramble.cpp18
-rw-r--r--src/mame/drivers/segas16b.cpp458
-rw-r--r--src/mame/drivers/sfbonus.cpp4
-rw-r--r--src/mame/drivers/simpl156.cpp2
-rw-r--r--src/mame/drivers/slapfght.cpp4
-rw-r--r--src/mame/drivers/snk.cpp2
-rw-r--r--src/mame/drivers/snk68.cpp39
-rw-r--r--src/mame/drivers/statriv2.cpp28
-rw-r--r--src/mame/drivers/stv.cpp2
-rw-r--r--src/mame/drivers/system16.cpp349
-rw-r--r--src/mame/drivers/targeth.cpp34
-rw-r--r--src/mame/drivers/tcl.cpp4
-rw-r--r--src/mame/drivers/test_t400.cpp4
-rw-r--r--src/mame/drivers/tetrisp2.cpp2
-rw-r--r--src/mame/drivers/thayers.cpp2
-rw-r--r--src/mame/drivers/thoop2.cpp88
-rw-r--r--src/mame/drivers/ticalc1x.cpp2
-rw-r--r--src/mame/drivers/tispeak.cpp13
-rw-r--r--src/mame/drivers/tispellb.cpp5
-rw-r--r--src/mame/drivers/toaplan2.cpp61
-rw-r--r--src/mame/drivers/vastar.cpp8
-rw-r--r--src/mame/drivers/viper.cpp28
-rw-r--r--src/mame/drivers/vt100.cpp4
-rw-r--r--src/mame/drivers/wildpkr.cpp23
-rw-r--r--src/mame/drivers/wrally.cpp26
-rw-r--r--src/mame/includes/at.h198
-rw-r--r--src/mame/includes/blmbycar.h2
-rw-r--r--src/mame/includes/finalizr.h1
-rw-r--r--src/mame/includes/gaelco.h24
-rw-r--r--src/mame/includes/glass.h4
-rw-r--r--src/mame/includes/m5.h24
-rw-r--r--src/mame/includes/mcr.h13
-rw-r--r--src/mame/includes/mcr3.h17
-rw-r--r--src/mame/includes/mcr68.h15
-rw-r--r--src/mame/includes/newbrain.h240
-rw-r--r--src/mame/includes/nmk16.h3
-rw-r--r--src/mame/includes/overdriv.h2
-rw-r--r--src/mame/includes/segas16b.h16
-rw-r--r--src/mame/includes/snk68.h15
-rw-r--r--src/mame/includes/system16.h6
-rw-r--r--src/mame/includes/targeth.h28
-rw-r--r--src/mame/includes/thoop2.h32
-rw-r--r--src/mame/includes/wrally.h5
-rw-r--r--src/mame/layout/crazybon.lay140
-rw-r--r--src/mame/layout/esq2by16.lay1824
-rw-r--r--src/mame/layout/newbrain.lay102
-rw-r--r--src/mame/machine/315-5838_317-0229_comp.cpp24
-rw-r--r--src/mame/machine/apollo.cpp2
-rw-r--r--src/mame/machine/at.cpp319
-rw-r--r--src/mame/machine/at.h95
-rw-r--r--src/mame/machine/esqlcd.cpp328
-rw-r--r--src/mame/machine/gaelco2.cpp8
-rw-r--r--src/mame/machine/gaelco3d.cpp66
-rw-r--r--src/mame/machine/gaelco3d.h3
-rw-r--r--src/mame/machine/mcr68.cpp18
-rw-r--r--src/mame/machine/n64.cpp10
-rw-r--r--src/mame/machine/nmk004.cpp20
-rw-r--r--src/mame/machine/pc9801_kbd.h2
-rw-r--r--src/mame/machine/segaic16.cpp24
-rw-r--r--src/mame/machine/segaic16.h1
-rw-r--r--src/mame/machine/spec_snqk.cpp12
-rw-r--r--src/mame/machine/super80.cpp4
-rw-r--r--src/mame/machine/thomson.cpp8
-rw-r--r--src/mame/machine/trs80.cpp4
-rw-r--r--src/mame/machine/wrally.cpp14
-rw-r--r--src/mame/mame.lst37042
-rw-r--r--src/mame/mess.flt674
-rw-r--r--src/mame/mess.lst2865
-rw-r--r--src/mame/video/chihiro.cpp10
-rw-r--r--src/mame/video/gaelco.cpp2
-rw-r--r--src/mame/video/galpanic.cpp2
-rw-r--r--src/mame/video/megasys1.cpp2
-rw-r--r--src/mame/video/newbrain.cpp116
-rw-r--r--src/mame/video/sega16sp.h22
-rw-r--r--src/mame/video/segaic16.cpp24
-rw-r--r--src/mame/video/segaic16.h7
-rw-r--r--src/mame/video/segas16b.cpp2
-rw-r--r--src/mame/video/snk68.cpp122
-rw-r--r--src/mame/video/snk68_spr.cpp180
-rw-r--r--src/mame/video/snk68_spr.h50
-rw-r--r--src/mame/video/system16.cpp9
-rw-r--r--src/mame/video/targeth.cpp15
-rw-r--r--src/mame/video/thoop2.cpp27
-rw-r--r--src/osd/eigccppc.h187
-rw-r--r--src/osd/eigccx86.h156
-rw-r--r--src/osd/eivc.h110
-rw-r--r--src/osd/eminline.h252
-rw-r--r--src/osd/modules/debugger/debugint.cpp5
-rw-r--r--src/osd/modules/debugger/debugwin.cpp7
-rw-r--r--src/osd/modules/debugger/qt/mainwindow.cpp18
-rw-r--r--src/osd/modules/debugger/win/consolewininfo.cpp11
-rw-r--r--src/osd/modules/debugger/win/disasmbasewininfo.cpp8
-rw-r--r--src/osd/modules/font/font_dwrite.cpp708
-rw-r--r--src/osd/modules/input/input_common.cpp266
-rw-r--r--src/osd/modules/input/input_common.h605
-rw-r--r--src/osd/modules/input/input_dinput.cpp683
-rw-r--r--src/osd/modules/input/input_module.h39
-rw-r--r--src/osd/modules/input/input_none.cpp66
-rw-r--r--src/osd/modules/input/input_rawinput.cpp648
-rw-r--r--src/osd/modules/input/input_sdl.cpp843
-rw-r--r--src/osd/modules/input/input_sdlcommon.cpp283
-rw-r--r--src/osd/modules/input/input_sdlcommon.h204
-rw-r--r--src/osd/modules/input/input_win32.cpp426
-rw-r--r--src/osd/modules/input/input_windows.cpp143
-rw-r--r--src/osd/modules/input/input_windows.h83
-rw-r--r--src/osd/modules/input/input_x11.cpp605
-rw-r--r--src/osd/modules/input/input_xinput.cpp427
-rw-r--r--src/osd/modules/lib/osdlib_os2.cpp292
-rw-r--r--src/osd/modules/lib/osdobj_common.cpp89
-rw-r--r--src/osd/modules/lib/osdobj_common.h19
-rw-r--r--src/osd/modules/netdev/pcap.cpp4
-rw-r--r--src/osd/modules/osdwindow.cpp2
-rw-r--r--src/osd/modules/osdwindow.h10
-rw-r--r--src/osd/modules/render/bgfx/blendreader.cpp58
-rw-r--r--src/osd/modules/render/bgfx/blendreader.h12
-rw-r--r--src/osd/modules/render/bgfx/chain.cpp12
-rw-r--r--src/osd/modules/render/bgfx/chain.h18
-rw-r--r--src/osd/modules/render/bgfx/chainentry.h20
-rw-r--r--src/osd/modules/render/bgfx/chainentryreader.cpp4
-rw-r--r--src/osd/modules/render/bgfx/chainentryreader.h6
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.cpp66
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.h54
-rw-r--r--src/osd/modules/render/bgfx/chainreader.cpp8
-rw-r--r--src/osd/modules/render/bgfx/chainreader.h6
-rw-r--r--src/osd/modules/render/bgfx/cullreader.cpp8
-rw-r--r--src/osd/modules/render/bgfx/cullreader.h8
-rw-r--r--src/osd/modules/render/bgfx/depthreader.cpp32
-rw-r--r--src/osd/modules/render/bgfx/depthreader.h8
-rw-r--r--src/osd/modules/render/bgfx/effect.cpp42
-rw-r--r--src/osd/modules/render/bgfx/effect.h20
-rw-r--r--src/osd/modules/render/bgfx/effectmanager.cpp24
-rw-r--r--src/osd/modules/render/bgfx/effectmanager.h16
-rw-r--r--src/osd/modules/render/bgfx/effectreader.cpp62
-rw-r--r--src/osd/modules/render/bgfx/effectreader.h6
-rw-r--r--src/osd/modules/render/bgfx/fs_blit.sc13
-rw-r--r--src/osd/modules/render/bgfx/fs_phosphor.sc20
-rw-r--r--src/osd/modules/render/bgfx/fs_ratios.sc23
-rw-r--r--src/osd/modules/render/bgfx/fs_tint.sc16
-rw-r--r--src/osd/modules/render/bgfx/inputpair.cpp2
-rw-r--r--src/osd/modules/render/bgfx/inputpair.h10
-rw-r--r--src/osd/modules/render/bgfx/parameter.h6
-rw-r--r--src/osd/modules/render/bgfx/paramreader.cpp6
-rw-r--r--src/osd/modules/render/bgfx/paramreader.h10
-rw-r--r--src/osd/modules/render/bgfx/shadermanager.cpp26
-rw-r--r--src/osd/modules/render/bgfx/shadermanager.h16
-rw-r--r--src/osd/modules/render/bgfx/slider.h12
-rw-r--r--src/osd/modules/render/bgfx/sliderreader.cpp14
-rw-r--r--src/osd/modules/render/bgfx/sliderreader.h10
-rw-r--r--src/osd/modules/render/bgfx/statereader.cpp110
-rw-r--r--src/osd/modules/render/bgfx/statereader.h32
-rw-r--r--src/osd/modules/render/bgfx/target.h13
-rw-r--r--src/osd/modules/render/bgfx/targetmanager.cpp22
-rw-r--r--src/osd/modules/render/bgfx/targetmanager.h16
-rw-r--r--src/osd/modules/render/bgfx/texture.h29
-rw-r--r--src/osd/modules/render/bgfx/texturemanager.cpp25
-rw-r--r--src/osd/modules/render/bgfx/texturemanager.h14
-rw-r--r--src/osd/modules/render/bgfx/uniform.cpp65
-rw-r--r--src/osd/modules/render/bgfx/uniform.h40
-rw-r--r--src/osd/modules/render/bgfx/uniformreader.cpp58
-rw-r--r--src/osd/modules/render/bgfx/uniformreader.h20
-rw-r--r--src/osd/modules/render/bgfx/vs_blit.sc14
-rw-r--r--src/osd/modules/render/bgfx/vs_phosphor.sc14
-rw-r--r--src/osd/modules/render/bgfx/vs_ratios.sc14
-rw-r--r--src/osd/modules/render/bgfx/vs_tint.sc14
-rw-r--r--src/osd/modules/render/bgfx/writereader.cpp22
-rw-r--r--src/osd/modules/render/bgfx/writereader.h12
-rw-r--r--src/osd/modules/render/binpacker.cpp302
-rw-r--r--src/osd/modules/render/binpacker.h152
-rw-r--r--src/osd/modules/render/d3d/d3dcomm.h2
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.cpp1304
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.h60
-rw-r--r--src/osd/modules/render/d3dtarget.h2
-rw-r--r--src/osd/modules/render/draw13.h4
-rw-r--r--src/osd/modules/render/drawbgfx.cpp66
-rw-r--r--src/osd/modules/render/drawbgfx.h11
-rw-r--r--src/osd/modules/render/drawd3d.h22
-rw-r--r--src/osd/modules/render/drawgdi.h2
-rw-r--r--src/osd/modules/render/drawnone.h2
-rw-r--r--src/osd/modules/render/drawogl.h6
-rw-r--r--src/osd/modules/render/drawsdl.h2
-rw-r--r--src/osd/modules/render/sdlglcontext.h2
-rw-r--r--src/osd/modules/render/winglcontext.h2
-rw-r--r--src/osd/modules/sync/osdsync.cpp133
-rw-r--r--src/osd/modules/sync/osdsync.h71
-rw-r--r--src/osd/modules/sync/sync_mini.cpp105
-rw-r--r--src/osd/modules/sync/sync_ntc.cpp251
-rw-r--r--src/osd/modules/sync/sync_os2.cpp199
-rw-r--r--src/osd/modules/sync/sync_sdl.cpp230
-rw-r--r--src/osd/modules/sync/sync_tc.cpp273
-rw-r--r--src/osd/modules/sync/sync_windows.cpp205
-rw-r--r--src/osd/modules/sync/work_mini.cpp134
-rw-r--r--src/osd/modules/sync/work_osd.cpp176
-rw-r--r--src/osd/osdcomm.h6
-rw-r--r--src/osd/osdcore.h17
-rw-r--r--src/osd/osdmini/minifile.cpp16
-rw-r--r--src/osd/osdmini/minitime.cpp8
-rw-r--r--src/osd/sdl/input.cpp2128
-rw-r--r--src/osd/sdl/input.h28
-rw-r--r--src/osd/sdl/man/mame.65
-rw-r--r--src/osd/sdl/man/mess.65
-rw-r--r--src/osd/sdl/osdsdl.h16
-rw-r--r--src/osd/sdl/output.cpp6
-rw-r--r--src/osd/sdl/sdldir.cpp4
-rw-r--r--src/osd/sdl/sdlfile.cpp41
-rw-r--r--src/osd/sdl/sdlmain.cpp34
-rw-r--r--src/osd/sdl/sdlos_os2.cpp36
-rw-r--r--src/osd/sdl/sdlprefix.h4
-rw-r--r--src/osd/sdl/sdlptty_os2.cpp39
-rw-r--r--src/osd/sdl/sdlptty_unix.cpp2
-rw-r--r--src/osd/sdl/testkeys.cpp4
-rw-r--r--src/osd/sdl/video.cpp15
-rw-r--r--src/osd/sdl/watchdog.cpp7
-rw-r--r--src/osd/sdl/watchdog.h6
-rw-r--r--src/osd/sdl/window.cpp31
-rw-r--r--src/osd/sdl/window.h11
-rw-r--r--src/osd/windows/input.cpp2255
-rw-r--r--src/osd/windows/input.h27
-rw-r--r--src/osd/windows/video.cpp3
-rw-r--r--src/osd/windows/window.cpp189
-rw-r--r--src/osd/windows/winfile.cpp25
-rw-r--r--src/osd/windows/winmain.cpp12
-rw-r--r--src/osd/windows/winmain.h37
-rw-r--r--src/osd/windows/winutil.cpp61
-rw-r--r--src/osd/windows/winutil.h136
-rw-r--r--src/tools/chdman.cpp19
-rw-r--r--src/tools/imgtool/imghd.cpp26
-rw-r--r--src/tools/jedutil.cpp32
-rw-r--r--src/tools/regrep.cpp18
-rw-r--r--src/tools/split.cpp2
-rw-r--r--src/tools/src2html.cpp49
-rw-r--r--src/version.cpp2
589 files changed, 62873 insertions, 55307 deletions
diff --git a/src/devices/bus/centronics/epson_lx810l.cpp b/src/devices/bus/centronics/epson_lx810l.cpp
index 77a130b26bf..7185a43ea7e 100644
--- a/src/devices/bus/centronics/epson_lx810l.cpp
+++ b/src/devices/bus/centronics/epson_lx810l.cpp
@@ -132,7 +132,7 @@ static MACHINE_CONFIG_FRAGMENT( epson_lx810l )
MCFG_UPD7810_CO0(WRITELINE(epson_lx810l_t, co0_w))
MCFG_UPD7810_CO1(WRITELINE(epson_lx810l_t, co1_w))
-// MCFG_DEFAULT_LAYOUT(layout_lx800)
+// MCFG_DEFAULT_LAYOUT(layout_lx800)
/* video hardware (simulates paper) */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp
index 371526d29ee..1f76f150d87 100644
--- a/src/devices/bus/isa/3c505.cpp
+++ b/src/devices/bus/isa/3c505.cpp
@@ -444,12 +444,10 @@ const char *threecom3c505_device::cpu_context()
logerror - log an error message (w/o device tags)
-------------------------------------------------*/
-void threecom3c505_device::logerror(const char *format, ...) const
+template <typename Format, typename... Params>
+void threecom3c505_device::logerror(Format &&fmt, Params &&... args) const
{
- va_list arg;
- va_start(arg, format);
- machine().vlogerror(format, arg);
- va_end(arg);
+ machine().logerror(std::forward<Format>(fmt), std::forward<Params>(args)...);
}
//**************************************************************************
diff --git a/src/devices/bus/isa/3c505.h b/src/devices/bus/isa/3c505.h
index 80cdd496a03..f892d07a7f0 100644
--- a/src/devices/bus/isa/3c505.h
+++ b/src/devices/bus/isa/3c505.h
@@ -143,7 +143,7 @@ protected:
virtual int setfilter(device_t *, int);
const char *cpu_context();
- void logerror(const char *format, ...) const;
+ template <typename Format, typename... Params> void logerror(Format &&fmt, Params &&... args) const;
// device-level overrides
virtual void device_start() override;
diff --git a/src/devices/bus/isa/omti8621.cpp b/src/devices/bus/isa/omti8621.cpp
index a1379bc229d..c3eb61bf0e8 100644
--- a/src/devices/bus/isa/omti8621.cpp
+++ b/src/devices/bus/isa/omti8621.cpp
@@ -75,7 +75,7 @@ protected:
void omti_disk_config(UINT16 disk_type);
private:
- void logerror(const char *format, ...) const;
+ template <typename Format, typename... Params> void logerror(Format &&fmt, Params &&... args) const;
public:
UINT16 m_type;
@@ -693,12 +693,10 @@ void omti8621_device::set_esdi_defect_list(UINT8 lun, UINT8 head)
logerror - log an error message (w/o device tags)
-------------------------------------------------*/
-void omti8621_device::logerror(const char *format, ...) const
+template <typename Format, typename... Params>
+void omti8621_device::logerror(Format &&fmt, Params &&... args) const
{
- va_list arg;
- va_start(arg, format);
- machine().vlogerror(format, arg);
- va_end(arg);
+ machine().logerror(std::forward<Format>(fmt), std::forward<Params>(args)...);
}
/***************************************************************************
@@ -1358,12 +1356,10 @@ void omti_disk_image_device::omti_disk_config(UINT16 disk_type)
logerror - log an error message (w/o device tags)
-------------------------------------------------*/
-void omti_disk_image_device::logerror(const char *format, ...) const
+template <typename Format, typename... Params>
+void omti_disk_image_device::logerror(Format &&fmt, Params &&... args) const
{
- va_list arg;
- va_start(arg, format);
- machine().vlogerror(format, arg);
- va_end(arg);
+ machine().logerror(std::forward<Format>(fmt), std::forward<Params>(args)...);
}
/*-------------------------------------------------
diff --git a/src/devices/bus/isa/omti8621.h b/src/devices/bus/isa/omti8621.h
index 7554df8ddf6..1084906c385 100644
--- a/src/devices/bus/isa/omti8621.h
+++ b/src/devices/bus/isa/omti8621.h
@@ -115,7 +115,7 @@ private:
void format_track(const UINT8 * cdb);
void set_esdi_defect_list(UINT8 lun, UINT8 head);
- void logerror(const char *format, ...) const;
+ template <typename Format, typename... Params> void logerror(Format &&fmt, Params &&... args) const;
void log_command(const UINT8 cdb[], const UINT16 cdb_length);
void log_data();
diff --git a/src/devices/bus/isa/sc499.cpp b/src/devices/bus/isa/sc499.cpp
index 3d94caa2b2c..88a0272a9c1 100644
--- a/src/devices/bus/isa/sc499.cpp
+++ b/src/devices/bus/isa/sc499.cpp
@@ -431,12 +431,10 @@ const char *sc499_device::cpu_context()
logerror - log an error message (w/o device tags)
-------------------------------------------------*/
-void sc499_device::logerror(const char *format, ...) const
+template <typename Format, typename... Params>
+void sc499_device::logerror(Format &&fmt, Params &&... args) const
{
- va_list arg;
- va_start(arg, format);
- machine().vlogerror(format, arg);
- va_end(arg);
+ machine().logerror(std::forward<Format>(fmt), std::forward<Params>(args)...);
}
/*-------------------------------------------------
diff --git a/src/devices/bus/isa/sc499.h b/src/devices/bus/isa/sc499.h
index 2b5b1ddaa6a..390b79dac5c 100644
--- a/src/devices/bus/isa/sc499.h
+++ b/src/devices/bus/isa/sc499.h
@@ -80,7 +80,7 @@ private:
virtual void eop_w(int state) override;
const char *cpu_context();
- void logerror(const char *format, ...) const;
+ template <typename Format, typename... Params> void logerror(Format &&fmt, Params &&... args) const;
void tape_status_clear(UINT16 value);
void tape_status_set(UINT16 value);
diff --git a/src/devices/bus/m5/slot.cpp b/src/devices/bus/m5/slot.cpp
index 162d802136e..92bda7e5fbd 100644
--- a/src/devices/bus/m5/slot.cpp
+++ b/src/devices/bus/m5/slot.cpp
@@ -175,7 +175,6 @@ bool m5_cart_slot_device::call_load()
if (m_type == M5_STD || m_type>2) //carts with roms
{
-
UINT32 size = (software_entry() == NULL) ? length() : get_software_region_length("rom");
if (size > 0x5000 && m_type == M5_STD)
@@ -190,12 +189,12 @@ bool m5_cart_slot_device::call_load()
fread(m_cart->get_rom_base(), size);
else
memcpy(m_cart->get_rom_base(), get_software_region("rom"), size);
-
+
}
if (!M5_STD)
if (get_software_region("ram"))
m_cart->ram_alloc(get_software_region_length("ram"));
-
+
//printf("Type: %s\n", m5_get_slot(m_type));
}
diff --git a/src/devices/bus/m5/slot.h b/src/devices/bus/m5/slot.h
index 177977043cf..5f584ea2b82 100644
--- a/src/devices/bus/m5/slot.h
+++ b/src/devices/bus/m5/slot.h
@@ -18,7 +18,7 @@ enum
};
-#define M5_STD 0
+#define M5_STD 0
// ======================> device_m5_cart_interface
diff --git a/src/devices/bus/newbrain/eim.cpp b/src/devices/bus/newbrain/eim.cpp
new file mode 100644
index 00000000000..0080b51e938
--- /dev/null
+++ b/src/devices/bus/newbrain/eim.cpp
@@ -0,0 +1,303 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Grundy NewBrain Expansion Interface Module emulation
+
+**********************************************************************/
+
+/*
+
+ TODO:
+
+ - everything
+
+*/
+
+#include "eim.h"
+
+
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#define LOG 0
+
+#define MC6850_TAG "459"
+#define ADC0809_TAG "427"
+#define DAC0808_TAG "461"
+#define Z80CTC_TAG "458"
+#define RS232_TAG "rs232"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type NEWBRAIN_EIM = &device_creator<newbrain_eim_t>;
+
+
+//-------------------------------------------------
+// ROM( newbrain_eim )
+//-------------------------------------------------
+
+ROM_START( newbrain_eim )
+ ROM_REGION( 0x10000, "eim", 0 )
+ ROM_LOAD( "e415-2.rom", 0x4000, 0x2000, CRC(5b0e390c) SHA1(0f99cae57af2e64f3f6b02e5325138d6ba015e72) )
+ ROM_LOAD( "e415-3.rom", 0x4000, 0x2000, CRC(2f88bae5) SHA1(04e03f230f4b368027442a7c2084dae877f53713) ) // 18/8/83.aci
+ ROM_LOAD( "e416-3.rom", 0x6000, 0x2000, CRC(8b5099d8) SHA1(19b0cfce4c8b220eb1648b467f94113bafcb14e0) ) // 10/8/83.mtv
+ ROM_LOAD( "e417-2.rom", 0x8000, 0x2000, CRC(6a7afa20) SHA1(f90db4f8318777313a862b3d5bab83c2fd260010) )
+ROM_END
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const rom_entry *newbrain_eim_t::device_rom_region() const
+{
+ return ROM_NAME( newbrain_eim );
+}
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG_FRAGMENT( newbrain_eim )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( newbrain_eim )
+ // devices
+ MCFG_DEVICE_ADD(Z80CTC_TAG, Z80CTC, XTAL_16MHz/8)
+ MCFG_Z80CTC_ZC0_CB(DEVWRITELINE(MC6850_TAG, acia6850_device, write_rxc))
+ MCFG_Z80CTC_ZC1_CB(DEVWRITELINE(MC6850_TAG, acia6850_device, write_txc))
+ MCFG_Z80CTC_ZC2_CB(WRITELINE(newbrain_eim_t, ctc_z2_w))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("z80ctc_c2", newbrain_eim_t, ctc_c2_tick, attotime::from_hz(XTAL_16MHz/4/13))
+ MCFG_DEVICE_ADD(ADC0809_TAG, ADC0808, 500000)
+ MCFG_ADC0808_OUT_EOC_CB(WRITELINE(newbrain_eim_t, adc_eoc_w))
+ MCFG_ADC0808_IN_VREF_POS_CB(newbrain_eim_t, adc_vref_pos_r)
+ MCFG_ADC0808_IN_VREF_NEG_CB(newbrain_eim_t, adc_vref_neg_r)
+ MCFG_ADC0808_IN_IN_0_CB(newbrain_eim_t, adc_input_r)
+ MCFG_ADC0808_IN_IN_1_CB(newbrain_eim_t, adc_input_r)
+ MCFG_ADC0808_IN_IN_2_CB(newbrain_eim_t, adc_input_r)
+ MCFG_ADC0808_IN_IN_3_CB(newbrain_eim_t, adc_input_r)
+ MCFG_ADC0808_IN_IN_4_CB(newbrain_eim_t, adc_input_r)
+ MCFG_ADC0808_IN_IN_5_CB(newbrain_eim_t, adc_input_r)
+ MCFG_ADC0808_IN_IN_6_CB(newbrain_eim_t, adc_input_r)
+ MCFG_ADC0808_IN_IN_7_CB(newbrain_eim_t, adc_input_r)
+
+ MCFG_DEVICE_ADD(MC6850_TAG, ACIA6850, 0)
+ MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(newbrain_eim_t, acia_interrupt))
+ MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr)
+
+ MCFG_NEWBRAIN_EXPANSION_SLOT_ADD(NEWBRAIN_EXPANSION_SLOT_TAG, XTAL_16MHz/8, newbrain_expansion_cards, "fdc")
+
+ // internal ram
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("96K")
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor newbrain_eim_t::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( newbrain_eim );
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// newbrain_eim_t - constructor
+//-------------------------------------------------
+
+newbrain_eim_t::newbrain_eim_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, NEWBRAIN_EIM, "Newbrain EIM", tag, owner, clock, "newbrain_eim", __FILE__),
+ device_newbrain_expansion_slot_interface(mconfig, *this),
+ m_ctc(*this, Z80CTC_TAG),
+ m_acia(*this, MC6850_TAG),
+ m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG),
+ m_rom(*this, "eim"),
+ m_ram(*this, RAM_TAG)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void newbrain_eim_t::device_start()
+{
+ // state saving
+ save_item(NAME(m_aciaint));
+ save_item(NAME(m_anint));
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void newbrain_eim_t::device_reset()
+{
+}
+
+
+//-------------------------------------------------
+// mreq_r - memory request read
+//-------------------------------------------------
+
+UINT8 newbrain_eim_t::mreq_r(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh)
+{
+ return m_exp->mreq_r(space, offset, data, romov, exrm, raminh);
+}
+
+
+//-------------------------------------------------
+// mreq_w - memory request write
+//-------------------------------------------------
+
+void newbrain_eim_t::mreq_w(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh)
+{
+ m_exp->mreq_w(space, offset, data, romov, exrm, raminh);
+}
+
+
+//-------------------------------------------------
+// iorq_r - I/O request read
+//-------------------------------------------------
+
+UINT8 newbrain_eim_t::iorq_r(address_space &space, offs_t offset, UINT8 data, bool &prtov)
+{
+ return m_exp->iorq_r(space, offset, data, prtov);
+}
+
+
+//-------------------------------------------------
+// iorq_w - I/O request write
+//-------------------------------------------------
+
+void newbrain_eim_t::iorq_w(address_space &space, offs_t offset, UINT8 data, bool &prtov)
+{
+ m_exp->iorq_w(space, offset, data, prtov);
+}
+
+
+//-------------------------------------------------
+// anout_r -
+//-------------------------------------------------
+
+READ8_MEMBER( newbrain_eim_t::anout_r )
+{
+ return 0xff;
+}
+
+
+//-------------------------------------------------
+// anout_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( newbrain_eim_t::anout_w )
+{
+}
+
+
+//-------------------------------------------------
+// anin_r -
+//-------------------------------------------------
+
+READ8_MEMBER( newbrain_eim_t::anin_r )
+{
+ return 0;
+}
+
+
+//-------------------------------------------------
+// anio_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( newbrain_eim_t::anio_w )
+{
+}
+
+
+//-------------------------------------------------
+// adc_eoc_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( newbrain_eim_t::adc_eoc_w )
+{
+ m_anint = state;
+}
+
+
+//-------------------------------------------------
+// adc_vref_pos_r -
+//-------------------------------------------------
+
+ADC0808_ANALOG_READ_CB( newbrain_eim_t::adc_vref_pos_r )
+{
+ return 5.0;
+}
+
+
+//-------------------------------------------------
+// adc_vref_neg_r -
+//-------------------------------------------------
+
+ADC0808_ANALOG_READ_CB( newbrain_eim_t::adc_vref_neg_r )
+{
+ return 0.0;
+}
+
+
+//-------------------------------------------------
+// adc_input_r -
+//-------------------------------------------------
+
+ADC0808_ANALOG_READ_CB( newbrain_eim_t::adc_input_r )
+{
+ return 0.0;
+}
+
+
+//-------------------------------------------------
+// acia_interrupt -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( newbrain_eim_t::acia_interrupt )
+{
+ m_aciaint = state;
+}
+
+
+//-------------------------------------------------
+// ctc_z2_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( newbrain_eim_t::ctc_z2_w )
+{
+ // connected to CTC channel 0/1 clock inputs
+ m_ctc->trg0(state);
+ m_ctc->trg1(state);
+}
+
+
+//-------------------------------------------------
+// adc_input_r -
+//-------------------------------------------------
+
+TIMER_DEVICE_CALLBACK_MEMBER(newbrain_eim_t::ctc_c2_tick)
+{
+ m_ctc->trg2(1);
+ m_ctc->trg2(0);
+}
diff --git a/src/devices/bus/newbrain/eim.h b/src/devices/bus/newbrain/eim.h
new file mode 100644
index 00000000000..490a6a15c03
--- /dev/null
+++ b/src/devices/bus/newbrain/eim.h
@@ -0,0 +1,90 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Grundy NewBrain Expansion Interface Module emulation
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __NEWBRAIN_EIM__
+#define __NEWBRAIN_EIM__
+
+#include "emu.h"
+#include "exp.h"
+#include "bus/rs232/rs232.h"
+#include "machine/6850acia.h"
+#include "machine/adc0808.h"
+#include "machine/z80ctc.h"
+#include "machine/ram.h"
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> newbrain_eim_t
+
+class newbrain_eim_t : public device_t,
+ public device_newbrain_expansion_slot_interface
+{
+public:
+ // construction/destruction
+ newbrain_eim_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual const rom_entry *device_rom_region() const override;
+ virtual machine_config_constructor device_mconfig_additions() const override;
+
+ DECLARE_READ8_MEMBER( anout_r );
+ DECLARE_WRITE8_MEMBER( anout_w );
+ DECLARE_READ8_MEMBER( anin_r );
+ DECLARE_WRITE8_MEMBER( anio_w );
+ DECLARE_READ8_MEMBER( st0_r );
+ DECLARE_READ8_MEMBER( st1_r );
+ DECLARE_READ8_MEMBER( st2_r );
+ DECLARE_READ8_MEMBER( usbs_r );
+ DECLARE_WRITE8_MEMBER( usbs_w );
+ DECLARE_WRITE8_MEMBER( paging_w );
+ DECLARE_WRITE_LINE_MEMBER( acia_tx );
+ DECLARE_WRITE_LINE_MEMBER( acia_interrupt );
+ DECLARE_WRITE_LINE_MEMBER( ctc_z2_w );
+ DECLARE_WRITE_LINE_MEMBER( adc_eoc_w );
+
+ ADC0808_ANALOG_READ_CB(adc_vref_pos_r);
+ ADC0808_ANALOG_READ_CB(adc_vref_neg_r);
+ ADC0808_ANALOG_READ_CB(adc_input_r);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(ctc_c2_tick);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // device_newbrain_expansion_slot_interface overrides
+ virtual UINT8 mreq_r(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh) override;
+ virtual void mreq_w(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh) override;
+ virtual UINT8 iorq_r(address_space &space, offs_t offset, UINT8 data, bool &prtov) override;
+ virtual void iorq_w(address_space &space, offs_t offset, UINT8 data, bool &prtov) override;
+
+private:
+ required_device<z80ctc_device> m_ctc;
+ required_device<acia6850_device> m_acia;
+ required_device<newbrain_expansion_slot_t> m_exp;
+ required_memory_region m_rom;
+ optional_shared_ptr<UINT8> m_ram;
+
+ int m_aciaint;
+ int m_anint;
+};
+
+
+// device type definition
+extern const device_type NEWBRAIN_EIM;
+
+
+
+#endif
diff --git a/src/devices/bus/newbrain/exp.cpp b/src/devices/bus/newbrain/exp.cpp
new file mode 100644
index 00000000000..12f44ac243f
--- /dev/null
+++ b/src/devices/bus/newbrain/exp.cpp
@@ -0,0 +1,142 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Grundy NewBrain Expansion Port emulation
+
+**********************************************************************/
+
+#include "exp.h"
+
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+const device_type NEWBRAIN_EXPANSION_SLOT = &device_creator<newbrain_expansion_slot_t>;
+
+
+
+//**************************************************************************
+// CARD INTERFACE
+//**************************************************************************
+
+//-------------------------------------------------
+// device_newbrain_expansion_slot_interface - constructor
+//-------------------------------------------------
+
+device_newbrain_expansion_slot_interface::device_newbrain_expansion_slot_interface(const machine_config &mconfig, device_t &device) :
+ device_slot_card_interface(mconfig,device)
+{
+ m_slot = dynamic_cast<newbrain_expansion_slot_t *>(device.owner());
+}
+
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// newbrain_expansion_slot_t - constructor
+//-------------------------------------------------
+
+newbrain_expansion_slot_t::newbrain_expansion_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, NEWBRAIN_EXPANSION_SLOT, "NewBrain expansion port", tag, owner, clock, "newbrain_expansion_slot", __FILE__),
+ device_slot_interface(mconfig, *this), m_card(nullptr)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void newbrain_expansion_slot_t::device_start()
+{
+ m_card = dynamic_cast<device_newbrain_expansion_slot_interface *>(get_card_device());
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void newbrain_expansion_slot_t::device_reset()
+{
+ if (m_card != nullptr)
+ {
+ m_card->device().reset();
+ }
+}
+
+
+//-------------------------------------------------
+// mreq_r - memory request read
+//-------------------------------------------------
+
+UINT8 newbrain_expansion_slot_t::mreq_r(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh)
+{
+ if (m_card != nullptr)
+ {
+ data = m_card->mreq_r(space, offset, data, romov, exrm, raminh);
+ }
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// mreq_w - memory request write
+//-------------------------------------------------
+
+void newbrain_expansion_slot_t::mreq_w(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh)
+{
+ if (m_card != nullptr)
+ {
+ m_card->mreq_w(space, offset, data, romov, exrm, raminh);
+ }
+}
+
+
+//-------------------------------------------------
+// iorq_r - I/O request read
+//-------------------------------------------------
+
+UINT8 newbrain_expansion_slot_t::iorq_r(address_space &space, offs_t offset, UINT8 data, bool &prtov)
+{
+ if (m_card != nullptr)
+ {
+ data = m_card->iorq_r(space, offset, data, prtov);
+ }
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// iorq_w - I/O request write
+//-------------------------------------------------
+
+void newbrain_expansion_slot_t::iorq_w(address_space &space, offs_t offset, UINT8 data, bool &prtov)
+{
+ if (m_card != nullptr)
+ {
+ m_card->iorq_w(space, offset, data, prtov);
+ }
+}
+
+
+//-------------------------------------------------
+// SLOT_INTERFACE( newbrain_expansion_cards )
+//-------------------------------------------------
+
+// slot devices
+#include "eim.h"
+#include "fdc.h"
+
+SLOT_INTERFACE_START( newbrain_expansion_cards )
+ SLOT_INTERFACE("eim", NEWBRAIN_EIM)
+ SLOT_INTERFACE("fdc", NEWBRAIN_FDC)
+SLOT_INTERFACE_END
diff --git a/src/devices/bus/newbrain/exp.h b/src/devices/bus/newbrain/exp.h
new file mode 100644
index 00000000000..dc8bbc87cf5
--- /dev/null
+++ b/src/devices/bus/newbrain/exp.h
@@ -0,0 +1,127 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Grundy NewBrain Expansion Port emulation
+
+**********************************************************************
+
+ GND 1 26 A6
+ 1/8C 2 27 _RAMENB
+ A14 3 28 EXRM2
+ A13 4 29 EXRM1
+ D5 5 30 EXRM0
+ RMSL 6 31 _ROMOV
+ D4 7 32 _BUSRQ
+ D3 8 33 _M1
+ D6 9 34 _RST
+ D7 10 35 _RFRSH
+ A11 11 36 _WAIT
+ A10 12 37 A4
+ A8 13 38 _BUSAK
+ A9 14 39 A15
+ A12 15 40 _WR
+ A7 16 41 _INT
+ A3 17 42 _RD
+ A2 18 43 _NMI
+ A1 19 44 _HALT
+ A0 20 45 _MREQ
+ D0 21 46 _IORQ
+ D1 22 47 PRTOV
+ _FCTR 23 48 _RAMINH
+ D2 24 49 +5V
+ A5 25 50 .
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __NEWBRAIN_EXPANSION_SLOT__
+#define __NEWBRAIN_EXPANSION_SLOT__
+
+#include "emu.h"
+
+
+
+//**************************************************************************
+// CONSTANTS
+//**************************************************************************
+
+#define NEWBRAIN_EXPANSION_SLOT_TAG "exp"
+
+
+
+//**************************************************************************
+// INTERFACE CONFIGURATION MACROS
+//**************************************************************************
+
+#define MCFG_NEWBRAIN_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \
+ MCFG_DEVICE_ADD(_tag, NEWBRAIN_EXPANSION_SLOT, _clock) \
+ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> newbrain_expansion_slot_t
+
+class device_newbrain_expansion_slot_interface;
+
+class newbrain_expansion_slot_t : public device_t,
+ public device_slot_interface
+{
+public:
+ // construction/destruction
+ newbrain_expansion_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ virtual ~newbrain_expansion_slot_t() { }
+
+ // computer interface
+ UINT8 mreq_r(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh);
+ void mreq_w(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh);
+
+ UINT8 iorq_r(address_space &space, offs_t offset, UINT8 data, bool &prtov);
+ void iorq_w(address_space &space, offs_t offset, UINT8 data, bool &prtov);
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ device_newbrain_expansion_slot_interface *m_card;
+};
+
+
+// ======================> device_newbrain_expansion_slot_interface
+
+// class representing interface-specific live newbrain_expansion card
+class device_newbrain_expansion_slot_interface : public device_slot_card_interface
+{
+public:
+ // construction/destruction
+ device_newbrain_expansion_slot_interface(const machine_config &mconfig, device_t &device);
+ virtual ~device_newbrain_expansion_slot_interface() { }
+
+ // memory access
+ virtual UINT8 mreq_r(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh) { return data; };
+ virtual void mreq_w(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh) { };
+
+ // I/O access
+ virtual UINT8 iorq_r(address_space &space, offs_t offset, UINT8 data, bool &prtov) { return data; };
+ virtual void iorq_w(address_space &space, offs_t offset, UINT8 data, bool &prtov) { };
+
+protected:
+ newbrain_expansion_slot_t *m_slot;
+};
+
+
+// device type definition
+extern const device_type NEWBRAIN_EXPANSION_SLOT;
+
+
+SLOT_INTERFACE_EXTERN( newbrain_expansion_cards );
+
+
+
+#endif
diff --git a/src/devices/bus/newbrain/fdc.cpp b/src/devices/bus/newbrain/fdc.cpp
new file mode 100644
index 00000000000..976cc6bf6fd
--- /dev/null
+++ b/src/devices/bus/newbrain/fdc.cpp
@@ -0,0 +1,340 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Grundy NewBrain Expansion Interface Module emulation
+
+**********************************************************************/
+
+/*
+
+ TODO:
+
+ - map d413 ROM to computer space
+ - paging
+
+*/
+
+#include "fdc.h"
+
+
+
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
+
+#define LOG 0
+
+#define Z80_TAG "416"
+#define UPD765_TAG "418"
+
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+const device_type NEWBRAIN_FDC = &device_creator<newbrain_fdc_t>;
+
+
+//-------------------------------------------------
+// ROM( newbrain_fdc )
+//-------------------------------------------------
+
+ROM_START( newbrain_fdc )
+ ROM_REGION( 0x2000, "d413", 0 )
+ ROM_LOAD( "d413-2.rom", 0x0000, 0x2000, CRC(097591f1) SHA1(c2aa1d27d4f3a24ab0c8135df746a4a44201a7f4) )
+
+ ROM_REGION( 0x2000, Z80_TAG, 0 )
+ ROM_DEFAULT_BIOS("issue2")
+ ROM_SYSTEM_BIOS( 0, "issue1", "Issue 1" )
+ ROMX_LOAD( "d417-1.rom", 0x0000, 0x2000, CRC(40fad31c) SHA1(5137be4cc026972c0ffd4fa6990e8583bdfce163), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "issue2", "Issue 2" )
+ ROMX_LOAD( "d417-2.rom", 0x0000, 0x2000, CRC(e8bda8b9) SHA1(c85a76a5ff7054f4ef4a472ce99ebaed1abd269c), ROM_BIOS(2) )
+ROM_END
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const rom_entry *newbrain_fdc_t::device_rom_region() const
+{
+ return ROM_NAME( newbrain_fdc );
+}
+
+
+//-------------------------------------------------
+// ADDRESS_MAP( newbrain_fdc_mem )
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( newbrain_fdc_mem, AS_PROGRAM, 8, newbrain_fdc_t )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x1fff) AM_ROM
+ADDRESS_MAP_END
+
+
+//-------------------------------------------------
+// ADDRESS_MAP( newbrain_fdc_io )
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( newbrain_fdc_io, AS_IO, 8, newbrain_fdc_t )
+ ADDRESS_MAP_UNMAP_HIGH
+ ADDRESS_MAP_GLOBAL_MASK(0xd1)
+ AM_RANGE(0x00, 0x01) AM_MIRROR(0x1e) AM_DEVICE(UPD765_TAG, upd765a_device, map)
+ AM_RANGE(0x20, 0x20) AM_MIRROR(0x1f) AM_WRITE(fdc_auxiliary_w)
+ AM_RANGE(0x40, 0x40) AM_MIRROR(0x1f) AM_READ(fdc_control_r)
+ADDRESS_MAP_END
+
+
+//-------------------------------------------------
+// newbrain_floppies
+//-------------------------------------------------
+
+static SLOT_INTERFACE_START( newbrain_floppies )
+ SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
+SLOT_INTERFACE_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG_FRAGMENT( newbrain_fdc )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( newbrain_fdc )
+ MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_4MHz)
+ MCFG_CPU_PROGRAM_MAP(newbrain_fdc_mem)
+ MCFG_CPU_IO_MAP(newbrain_fdc_io)
+
+ MCFG_UPD765A_ADD(UPD765_TAG, false, true)
+ MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(newbrain_fdc_t, fdc_int_w))
+
+ MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":2", newbrain_floppies, nullptr, floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":3", newbrain_floppies, nullptr, floppy_image_device::default_floppy_formats)
+
+ MCFG_NEWBRAIN_EXPANSION_SLOT_ADD(NEWBRAIN_EXPANSION_SLOT_TAG, XTAL_16MHz/8, newbrain_expansion_cards, nullptr)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor newbrain_fdc_t::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( newbrain_fdc );
+}
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// newbrain_fdc_t - constructor
+//-------------------------------------------------
+
+newbrain_fdc_t::newbrain_fdc_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, NEWBRAIN_FDC, "NewBrain FDC", tag, owner, clock, "newbrain_fdc", __FILE__),
+ device_newbrain_expansion_slot_interface(mconfig, *this),
+ m_maincpu(*this, Z80_TAG),
+ m_fdc(*this, UPD765_TAG),
+ m_floppy0(*this, UPD765_TAG ":0"),
+ m_floppy1(*this, UPD765_TAG ":1"),
+ m_floppy2(*this, UPD765_TAG ":2"),
+ m_floppy3(*this, UPD765_TAG ":3"),
+ m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void newbrain_fdc_t::device_start()
+{
+ save_item(NAME(m_paging));
+ save_item(NAME(m_ma16));
+ save_item(NAME(m_mpm));
+ save_item(NAME(m_fdc_att));
+ save_item(NAME(m_fdc_int));
+ save_item(NAME(m_pa15));
+}
+
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void newbrain_fdc_t::device_reset()
+{
+ m_maincpu->reset();
+
+ moton(0);
+ m_fdc->tc_w(0);
+ m_pa15 = 0;
+}
+
+
+//-------------------------------------------------
+// mreq_r - memory request read
+//-------------------------------------------------
+
+UINT8 newbrain_fdc_t::mreq_r(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh)
+{
+ return m_exp->mreq_r(space, offset, data, romov, exrm, raminh);
+}
+
+
+//-------------------------------------------------
+// mreq_w - memory request write
+//-------------------------------------------------
+
+void newbrain_fdc_t::mreq_w(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh)
+{
+ m_exp->mreq_w(space, offset, data, romov, exrm, raminh);
+}
+
+
+//-------------------------------------------------
+// iorq_r - I/O request read
+//-------------------------------------------------
+
+UINT8 newbrain_fdc_t::iorq_r(address_space &space, offs_t offset, UINT8 data, bool &prtov)
+{
+ return m_exp->iorq_r(space, offset, data, prtov);
+}
+
+
+//-------------------------------------------------
+// iorq_w - I/O request write
+//-------------------------------------------------
+
+void newbrain_fdc_t::iorq_w(address_space &space, offs_t offset, UINT8 data, bool &prtov)
+{
+ m_exp->iorq_w(space, offset, data, prtov);
+
+ if ((offset & 0x20f) == 0x20f)
+ {
+ io_dec_w(space, 0, data);
+ }
+}
+
+
+//-------------------------------------------------
+// moton - floppy motor on
+//-------------------------------------------------
+
+void newbrain_fdc_t::moton(int state)
+{
+ if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(!state);
+ if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(!state);
+ if (m_floppy2->get_device()) m_floppy2->get_device()->mon_w(!state);
+ if (m_floppy3->get_device()) m_floppy3->get_device()->mon_w(!state);
+}
+
+
+//-------------------------------------------------
+// fdc_int_w -
+//-------------------------------------------------
+
+WRITE_LINE_MEMBER( newbrain_fdc_t::fdc_int_w )
+{
+ m_fdc_int = state;
+}
+
+
+//-------------------------------------------------
+// fdc_auxiliary_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( newbrain_fdc_t::fdc_auxiliary_w )
+{
+ /*
+
+ bit description
+
+ 0 MOTON
+ 1 765 RESET
+ 2 TC
+ 3
+ 4
+ 5 PA15
+ 6
+ 7
+
+ */
+
+ moton(BIT(data, 0));
+
+ if (BIT(data, 1))
+ {
+ m_fdc->reset();
+ }
+
+ m_fdc->tc_w(BIT(data, 2));
+
+ m_pa15 = BIT(data, 5);
+}
+
+
+//-------------------------------------------------
+// fdc_control_r -
+//-------------------------------------------------
+
+READ8_MEMBER( newbrain_fdc_t::fdc_control_r )
+{
+ /*
+
+ bit description
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5 FDC INT
+ 6 PAGING
+ 7 FDC ATT
+
+ */
+
+ return (m_fdc_att << 7) | (m_paging << 6) | (m_fdc_int << 5);
+}
+
+
+//-------------------------------------------------
+// io_dec_w - 0x20f
+//-------------------------------------------------
+
+WRITE8_MEMBER( newbrain_fdc_t::io_dec_w )
+{
+ /*
+
+ bit description
+
+ 0 PAGING
+ 1
+ 2 MA16
+ 3 MPM
+ 4
+ 5 _FDC RESET
+ 6
+ 7 FDC ATT
+
+ */
+
+ m_paging = BIT(data, 0);
+ m_ma16 = BIT(data, 2);
+ m_mpm = BIT(data, 3);
+
+ if (!BIT(data, 5))
+ {
+ device_reset();
+ }
+
+ m_fdc_att = BIT(data, 7);
+}
diff --git a/src/devices/bus/newbrain/fdc.h b/src/devices/bus/newbrain/fdc.h
new file mode 100644
index 00000000000..2e4e21abbc0
--- /dev/null
+++ b/src/devices/bus/newbrain/fdc.h
@@ -0,0 +1,79 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Grundy NewBrain FDC emulation
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __NEWBRAIN_FDC__
+#define __NEWBRAIN_FDC__
+
+#include "emu.h"
+#include "exp.h"
+#include "cpu/z80/z80.h"
+#include "machine/upd765.h"
+
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> newbrain_fdc_t
+
+class newbrain_fdc_t : public device_t,
+ public device_newbrain_expansion_slot_interface
+{
+public:
+ // construction/destruction
+ newbrain_fdc_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual const rom_entry *device_rom_region() const override;
+ virtual machine_config_constructor device_mconfig_additions() const override;
+
+ DECLARE_WRITE_LINE_MEMBER( fdc_int_w );
+ DECLARE_WRITE8_MEMBER( fdc_auxiliary_w );
+ DECLARE_READ8_MEMBER( fdc_control_r );
+ DECLARE_WRITE8_MEMBER( io_dec_w );
+
+protected:
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ // device_newbrain_expansion_slot_interface overrides
+ virtual UINT8 mreq_r(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh) override;
+ virtual void mreq_w(address_space &space, offs_t offset, UINT8 data, bool &romov, int &exrm, bool &raminh) override;
+ virtual UINT8 iorq_r(address_space &space, offs_t offset, UINT8 data, bool &prtov) override;
+ virtual void iorq_w(address_space &space, offs_t offset, UINT8 data, bool &prtov) override;
+
+private:
+ required_device<z80_device> m_maincpu;
+ required_device<upd765a_device> m_fdc;
+ required_device<floppy_connector> m_floppy0;
+ required_device<floppy_connector> m_floppy1;
+ required_device<floppy_connector> m_floppy2;
+ required_device<floppy_connector> m_floppy3;
+ required_device<newbrain_expansion_slot_t> m_exp;
+
+ void moton(int state);
+
+ int m_paging;
+ int m_ma16;
+ int m_mpm;
+ int m_fdc_att;
+ int m_fdc_int;
+ int m_pa15;
+};
+
+
+// device type definition
+extern const device_type NEWBRAIN_FDC;
+
+
+
+#endif
diff --git a/src/devices/cpu/adsp2100/adsp2100.cpp b/src/devices/cpu/adsp2100/adsp2100.cpp
index 63788892288..55cf0b3ab65 100644
--- a/src/devices/cpu/adsp2100/adsp2100.cpp
+++ b/src/devices/cpu/adsp2100/adsp2100.cpp
@@ -545,13 +545,13 @@ void adsp21xx_device::device_start()
state_add(ADSP2100_SR1_SEC, "SR1_SEC", m_alt.sr.srx.sr1.u);
for (int ireg = 0; ireg < 8; ireg++)
- state_add(ADSP2100_I0 + ireg, strformat("I%d", ireg).c_str(), m_i[ireg]).mask(0x3fff).callimport();
+ state_add(ADSP2100_I0 + ireg, string_format("I%d", ireg).c_str(), m_i[ireg]).mask(0x3fff).callimport();
for (int lreg = 0; lreg < 8; lreg++)
- state_add(ADSP2100_L0 + lreg, strformat("L%d", lreg).c_str(), m_l[lreg]).mask(0x3fff).callimport();
+ state_add(ADSP2100_L0 + lreg, string_format("L%d", lreg).c_str(), m_l[lreg]).mask(0x3fff).callimport();
for (int mreg = 0; mreg < 8; mreg++)
- state_add(ADSP2100_M0 + mreg, strformat("M%d", mreg).c_str(), m_m[mreg]).signed_mask(0x3fff);
+ state_add(ADSP2100_M0 + mreg, string_format("M%d", mreg).c_str(), m_m[mreg]).signed_mask(0x3fff);
state_add(ADSP2100_PX, "PX", m_px);
state_add(ADSP2100_CNTR, "CNTR", m_cntr).mask(0x3fff);
@@ -570,7 +570,7 @@ void adsp21xx_device::device_start()
for (int irqnum = 0; irqnum < 4; irqnum++)
if (irqnum < 4 || m_chip_type == CHIP_TYPE_ADSP2100)
- state_add(ADSP2100_IRQSTATE0 + irqnum, strformat("IRQ%d", irqnum).c_str(), m_irq_state[irqnum]).mask(1).callimport();
+ state_add(ADSP2100_IRQSTATE0 + irqnum, string_format("IRQ%d", irqnum).c_str(), m_irq_state[irqnum]).mask(1).callimport();
state_add(ADSP2100_FLAGIN, "FLAGIN", m_flagin).mask(1);
state_add(ADSP2100_FLAGOUT, "FLAGOUT", m_flagout).mask(1);
@@ -724,7 +724,7 @@ void adsp21xx_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_astat & 0x80 ? 'X':'.',
m_astat & 0x40 ? 'M':'.',
m_astat & 0x20 ? 'Q':'.',
diff --git a/src/devices/cpu/alph8201/alph8201.cpp b/src/devices/cpu/alph8201/alph8201.cpp
index 9c40d8d55ee..dec4a650ab8 100644
--- a/src/devices/cpu/alph8201/alph8201.cpp
+++ b/src/devices/cpu/alph8201/alph8201.cpp
@@ -532,7 +532,7 @@ void alpha8201_cpu_device::state_string_export(const device_state_entry &entry,
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c", m_cf ? 'C' : '.', m_zf ? 'Z' : '.');
+ str = string_format("%c%c", m_cf ? 'C' : '.', m_zf ? 'Z' : '.');
break;
}
}
diff --git a/src/devices/cpu/alto2/alto2cpu.cpp b/src/devices/cpu/alto2/alto2cpu.cpp
index 653f56949e5..5df4ce44675 100644
--- a/src/devices/cpu/alto2/alto2cpu.cpp
+++ b/src/devices/cpu/alto2/alto2cpu.cpp
@@ -20,55 +20,38 @@ const device_type ALTO2 = &device_creator<alto2_cpu_device>;
// LOGGING AND DEBUGGING
//**************************************************************************
#if ALTO2_DEBUG
-int g_log_types = LOG_DISK | LOG_ETH;
-int g_log_level = 8;
-bool g_log_newline = true;
-
-void logprintf(device_t *device, int type, int level, const char* format, ...)
-{
- static const char* type_name[] = {
- "[CPU]",
- "[EMU]",
- "[T01]",
- "[T02]",
- "[T03]",
- "[KSEC]",
- "[T05]",
- "[T06]",
- "[ETH]",
- "[MRT]",
- "[DWT]",
- "[CURT]",
- "[DHT]",
- "[DVT]",
- "[PART]",
- "[KWD]",
- "[T17]",
- "[MEM]",
- "[RAM]",
- "[DRIVE]",
- "[DISK]",
- "[DISPL]",
- "[MOUSE]",
- "[HW]",
- "[KBD]"
- };
- if (!(g_log_types & type))
- return;
- if (level > g_log_level)
- return;
- if (g_log_newline) {
- // last line had a \n - print type name
- for (int i = 0; i < sizeof(type_name)/sizeof(type_name[0]); i++)
- if (type & (1 << i))
- device->logerror("%-7s ", type_name[i]);
- }
- va_list ap;
- va_start(ap, format);
- device->vlogerror(format, ap);
- va_end(ap);
- g_log_newline = format[strlen(format) - 1] == '\n';
-}
+int alto2_log_t::log_types = LOG_DISK | LOG_ETH;
+int alto2_log_t::log_level = 8;
+bool alto2_log_t::log_newline = true;
+const char *const alto2_log_t::type_name[] = {
+ "[CPU]",
+ "[EMU]",
+ "[T01]",
+ "[T02]",
+ "[T03]",
+ "[KSEC]",
+ "[T05]",
+ "[T06]",
+ "[ETH]",
+ "[MRT]",
+ "[DWT]",
+ "[CURT]",
+ "[DHT]",
+ "[DVT]",
+ "[PART]",
+ "[KWD]",
+ "[T17]",
+ "[MEM]",
+ "[RAM]",
+ "[DRIVE]",
+ "[DISK]",
+ "[DISPL]",
+ "[MOUSE]",
+ "[HW]",
+ "[KBD]"
+};
+const size_t alto2_log_t::type_name_count = sizeof(alto2_log_t::type_name) / sizeof(alto2_log_t::type_name[0]);
+alto2_log_t logprintf;
#endif
//**************************************************************************
@@ -1009,14 +992,15 @@ void alto2_cpu_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case A2_TASK:
- strprintf(str, "%s", task_name(m_task));
+ str = string_format("%s", task_name(m_task));
break;
case STATE_GENFLAGS:
- strprintf(str, "%s%s%s%s",
- m_aluc0 ? "C":"-",
- m_laluc0 ? "c":"-",
- m_shifter == 0 ? "0":"-",
- static_cast<INT16>(m_shifter) < 0 ? "<":"-");
+ str = string_format(
+ "%c%c%c%c",
+ m_aluc0 ? 'C' : '-',
+ m_laluc0 ? 'c' : '-',
+ (m_shifter == 0) ? '0' : '-',
+ (INT16(m_shifter) < 0) ? '<' : '-');
break;
}
}
diff --git a/src/devices/cpu/alto2/alto2cpu.h b/src/devices/cpu/alto2/alto2cpu.h
index 071cbd3cb2a..7298e951af9 100644
--- a/src/devices/cpu/alto2/alto2cpu.h
+++ b/src/devices/cpu/alto2/alto2cpu.h
@@ -125,10 +125,33 @@ enum {
LOG_KBD = (1 << 24),
LOG_ALL = ((1 << 25) - 1)
};
- extern int m_log_types;
- extern int m_log_level;
- extern bool m_log_newline;
- void logprintf(device_t *device, int type, int level, const char* format, ...);
+ class alto2_log_t
+ {
+ public:
+ template <typename... Params>
+ void operator()(device_t *device, int type, int level, const char* format, Params &&...args)
+ {
+ if (!(log_types & type))
+ return;
+ if (level > log_level)
+ return;
+ if (log_newline) {
+ // last line had a \n - print type name
+ for (int i = 0; i < type_name_count; i++)
+ if (type & (1 << i))
+ device->logerror("%-7s ", type_name[i]);
+ }
+ device->logerror(format, std::forward<Params>(args)...);
+ log_newline = format[strlen(format) - 1] == '\n';
+ }
+ private:
+ static int log_types;
+ static int log_level;
+ static bool log_newline;
+ static const char *const type_name[];
+ static const size_t type_name_count;
+ };
+ extern alto2_log_t logprintf;
# define LOG(x) logprintf x
#else
# define LOG(x)
diff --git a/src/devices/cpu/am29000/am29000.cpp b/src/devices/cpu/am29000/am29000.cpp
index a31dc3b0374..bfeefebbcbf 100644
--- a/src/devices/cpu/am29000/am29000.cpp
+++ b/src/devices/cpu/am29000/am29000.cpp
@@ -409,16 +409,17 @@ void am29000_cpu_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c|%3d", m_alu & ALU_V ? 'V' : '.',
- m_alu & ALU_Z ? 'Z' : '.',
- m_alu & ALU_N ? 'N' : '.',
- m_alu & ALU_C ? 'C' : '.',
- m_cps & CPS_IP ? 'I' : '.',
- m_cps & CPS_FZ ? 'F' : '.',
- m_cps & CPS_SM ? 'S' : 'U',
- m_cps & CPS_DI ? 'I' : '.',
- m_cps & CPS_DA ? 'D' : '.',
- (m_r[1] >> 2) & 0x7f);
+ str = string_format("%c%c%c%c%c%c%c%c%c|%3d",
+ m_alu & ALU_V ? 'V' : '.',
+ m_alu & ALU_Z ? 'Z' : '.',
+ m_alu & ALU_N ? 'N' : '.',
+ m_alu & ALU_C ? 'C' : '.',
+ m_cps & CPS_IP ? 'I' : '.',
+ m_cps & CPS_FZ ? 'F' : '.',
+ m_cps & CPS_SM ? 'S' : 'U',
+ m_cps & CPS_DI ? 'I' : '.',
+ m_cps & CPS_DA ? 'D' : '.',
+ (m_r[1] >> 2) & 0x7f);
break;
}
}
diff --git a/src/devices/cpu/amis2000/amis2000.cpp b/src/devices/cpu/amis2000/amis2000.cpp
index 57ed4d99578..326437b5baa 100644
--- a/src/devices/cpu/amis2000/amis2000.cpp
+++ b/src/devices/cpu/amis2000/amis2000.cpp
@@ -75,7 +75,7 @@ void amis2000_base_device::state_string_export(const device_state_entry &entry,
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c",
m_f & 0x20 ? '6':'.',
m_f & 0x10 ? '5':'.',
m_f & 0x08 ? '4':'.',
diff --git a/src/devices/cpu/apexc/apexc.cpp b/src/devices/cpu/apexc/apexc.cpp
index 87c5ff9a351..c39c6b0b418 100644
--- a/src/devices/cpu/apexc/apexc.cpp
+++ b/src/devices/cpu/apexc/apexc.cpp
@@ -819,7 +819,7 @@ void apexc_cpu_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c", m_running ? 'R' : 'S');
+ str = string_format("%c", m_running ? 'R' : 'S');
break;
}
}
diff --git a/src/devices/cpu/arm/arm.cpp b/src/devices/cpu/arm/arm.cpp
index 34dc1635639..f9505fda6d8 100644
--- a/src/devices/cpu/arm/arm.cpp
+++ b/src/devices/cpu/arm/arm.cpp
@@ -559,14 +559,14 @@ void arm_cpu_device::state_string_export(const device_state_entry &entry, std::s
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c %s",
+ str = string_format("%c%c%c%c%c%c %s",
(m_sArmRegister[15] & N_MASK) ? 'N' : '-',
(m_sArmRegister[15] & Z_MASK) ? 'Z' : '-',
(m_sArmRegister[15] & C_MASK) ? 'C' : '-',
(m_sArmRegister[15] & V_MASK) ? 'V' : '-',
(m_sArmRegister[15] & I_MASK) ? 'I' : '-',
(m_sArmRegister[15] & F_MASK) ? 'F' : '-',
- s[m_sArmRegister[15] & 3] );
+ s[m_sArmRegister[15] & 3]);
break;
}
}
diff --git a/src/devices/cpu/arm7/arm7.cpp b/src/devices/cpu/arm7/arm7.cpp
index 828f8562811..f10537dfd16 100644
--- a/src/devices/cpu/arm7/arm7.cpp
+++ b/src/devices/cpu/arm7/arm7.cpp
@@ -569,7 +569,7 @@ void arm7_cpu_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c %s",
+ str = string_format("%c%c%c%c%c%c%c%c %s",
(ARM7REG(eCPSR) & N_MASK) ? 'N' : '-',
(ARM7REG(eCPSR) & Z_MASK) ? 'Z' : '-',
(ARM7REG(eCPSR) & C_MASK) ? 'C' : '-',
@@ -578,7 +578,7 @@ void arm7_cpu_device::state_string_export(const device_state_entry &entry, std::
(ARM7REG(eCPSR) & I_MASK) ? 'I' : '-',
(ARM7REG(eCPSR) & F_MASK) ? 'F' : '-',
(ARM7REG(eCPSR) & T_MASK) ? 'T' : '-',
- GetModeText(ARM7REG(eCPSR)) );
+ GetModeText(ARM7REG(eCPSR)));
break;
}
}
diff --git a/src/devices/cpu/asap/asap.cpp b/src/devices/cpu/asap/asap.cpp
index b369ab6d07b..6f08253b425 100644
--- a/src/devices/cpu/asap/asap.cpp
+++ b/src/devices/cpu/asap/asap.cpp
@@ -193,7 +193,7 @@ void asap_device::device_start()
state_add(ASAP_PC, "PC", m_pc);
state_add(ASAP_PS, "PS", m_flagsio).callimport().callexport();
for (int regnum = 0; regnum < 32; regnum++)
- state_add(ASAP_R0 + regnum, strformat("R%d", regnum).c_str(), m_src2val[REGBASE + regnum]);
+ state_add(ASAP_R0 + regnum, string_format("R%d", regnum).c_str(), m_src2val[REGBASE + regnum]);
// register our state for saving
save_item(NAME(m_pc));
@@ -285,13 +285,13 @@ void asap_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c",
- m_pflag ? 'P' : '.',
- m_iflag ? 'I' : '.',
- ((INT32)m_znflag < 0) ? 'N' : '.',
- (m_znflag == 0) ? 'Z' : '.',
- ((m_vflag >> 30) & PS_VFLAG) ? 'V' : '.',
- m_cflag ? 'C' : '.');
+ str = string_format("%c%c%c%c%c%c",
+ m_pflag ? 'P' : '.',
+ m_iflag ? 'I' : '.',
+ ((INT32)m_znflag < 0) ? 'N' : '.',
+ (m_znflag == 0) ? 'Z' : '.',
+ ((m_vflag >> 30) & PS_VFLAG) ? 'V' : '.',
+ m_cflag ? 'C' : '.');
break;
}
}
diff --git a/src/devices/cpu/avr8/avr8.cpp b/src/devices/cpu/avr8/avr8.cpp
index 756562f0ea7..d4a00c1d325 100644
--- a/src/devices/cpu/avr8/avr8.cpp
+++ b/src/devices/cpu/avr8/avr8.cpp
@@ -910,7 +910,7 @@ void avr8_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
(m_r[AVR8_REGIDX_SREG] & 0x80) ? 'I' : '-',
(m_r[AVR8_REGIDX_SREG] & 0x40) ? 'T' : '-',
(m_r[AVR8_REGIDX_SREG] & 0x20) ? 'H' : '-',
diff --git a/src/devices/cpu/ccpu/ccpu.cpp b/src/devices/cpu/ccpu/ccpu.cpp
index bde43753786..f7731312241 100644
--- a/src/devices/cpu/ccpu/ccpu.cpp
+++ b/src/devices/cpu/ccpu/ccpu.cpp
@@ -145,7 +145,7 @@ void ccpu_cpu_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c",
TEST_A0 ? '0' : 'o',
TEST_NC ? 'N' : 'n',
TEST_LT ? 'L' : 'l',
diff --git a/src/devices/cpu/cop400/cop400.cpp b/src/devices/cpu/cop400/cop400.cpp
index ae14bd59cab..bad120eeb03 100644
--- a/src/devices/cpu/cop400/cop400.cpp
+++ b/src/devices/cpu/cop400/cop400.cpp
@@ -86,6 +86,8 @@ const device_type COP445 = &device_creator<cop445_cpu_device>;
CONSTANTS
***************************************************************************/
+#define LOG_MICROBUS 0
+
/* feature masks */
#define COP410_FEATURE 0x01
#define COP420_FEATURE 0x02
@@ -182,7 +184,7 @@ cop400_cpu_device::cop400_cpu_device(const machine_config &mconfig, device_type
, m_read_cko(*this)
, m_cki(COP400_CKI_DIVISOR_16)
, m_cko(COP400_CKO_OSCILLATOR_OUTPUT)
- , m_microbus(COP400_MICROBUS_DISABLED)
+ , m_has_microbus(false)
, m_has_counter(has_counter)
, m_has_inil(has_inil)
, m_featuremask(featuremask)
@@ -324,7 +326,7 @@ void cop400_cpu_device::WRITE_Q(UINT8 data)
{
Q = data;
- if (BIT(EN, 2))
+ if (!m_has_microbus && BIT(EN, 2))
{
OUT_L(Q);
}
@@ -332,11 +334,6 @@ void cop400_cpu_device::WRITE_Q(UINT8 data)
void cop400_cpu_device::WRITE_G(UINT8 data)
{
- if (m_microbus == COP400_MICROBUS_ENABLED)
- {
- data = (data & 0x0e) | m_microbus_int;
- }
-
G = data;
OUT_G(G);
@@ -864,35 +861,6 @@ void cop400_cpu_device::inil_tick()
}
}
-void cop400_cpu_device::microbus_tick()
-{
- UINT8 in;
-
- in = IN_IN();
-
- if (!BIT(in, 2))
- {
- // chip select
-
- if (!BIT(in, 1))
- {
- // read strobe
-
- OUT_L(Q);
-
- m_microbus_int = 1;
- }
- else if (!BIT(in, 3))
- {
- // write strobe
-
- Q = IN_L();
-
- m_microbus_int = 0;
- }
- }
-}
-
/***************************************************************************
INITIALIZATION
***************************************************************************/
@@ -900,8 +868,7 @@ void cop400_cpu_device::microbus_tick()
enum {
TIMER_SERIAL,
TIMER_COUNTER,
- TIMER_INIL,
- TIMER_MICROBUS
+ TIMER_INIL
};
void cop400_cpu_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
@@ -919,10 +886,6 @@ void cop400_cpu_device::device_timer(emu_timer &timer, device_timer_id id, int p
case TIMER_INIL:
inil_tick();
break;
-
- case TIMER_MICROBUS:
- microbus_tick();
- break;
}
}
@@ -971,15 +934,6 @@ void cop400_cpu_device::device_start()
m_inil_timer->adjust(attotime::zero, 0, attotime::from_ticks(16, clock()));
}
- /* allocate Microbus timer */
-
- m_microbus_timer = nullptr;
- if (m_microbus == COP400_MICROBUS_ENABLED)
- {
- m_microbus_timer = timer_alloc(TIMER_MICROBUS);
- m_microbus_timer->adjust(attotime::zero, 0, attotime::from_ticks(16, clock()));
- }
-
/* register for state saving */
save_item(NAME(m_pc));
@@ -1005,7 +959,6 @@ void cop400_cpu_device::device_start()
save_item(NAME(m_si));
save_item(NAME(m_last_skip));
save_item(NAME(m_in));
- save_item(NAME(m_microbus_int));
save_item(NAME(m_halt));
save_item(NAME(m_idle));
@@ -1070,7 +1023,6 @@ void cop400_cpu_device::device_start()
m_si = 0;
m_skip_lbi = 0;
m_last_skip = 0;
- m_microbus_int = 0;
m_skip = 0;
}
@@ -1210,10 +1162,10 @@ void cop400_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c",
- m_c ? 'C' : '.',
- m_skl ? 'S' : '.',
- m_skt_latch ? 'T' : '.');
+ str = string_format("%c%c%c",
+ m_c ? 'C' : '.',
+ m_skl ? 'S' : '.',
+ m_skt_latch ? 'T' : '.');
break;
}
}
@@ -1237,3 +1189,19 @@ offs_t cop400_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT
return CPU_DISASSEMBLE_NAME(cop410)(this, buffer, pc, oprom, opram, options);
}
+
+READ8_MEMBER( cop400_cpu_device::microbus_rd )
+{
+ if (LOG_MICROBUS) logerror("%s %s MICROBUS RD %02x\n", machine().time().as_string(), machine().describe_context(), Q);
+
+ return Q;
+}
+
+WRITE8_MEMBER( cop400_cpu_device::microbus_wr )
+{
+ if (LOG_MICROBUS) logerror("%s %s MICROBUS WR %02x\n", machine().time().as_string(), machine().describe_context(), data);
+
+ WRITE_G(G & 0xe);
+
+ Q = data;
+}
diff --git a/src/devices/cpu/cop400/cop400.h b/src/devices/cpu/cop400/cop400.h
index 43e7755f1f4..8b44c34cd06 100644
--- a/src/devices/cpu/cop400/cop400.h
+++ b/src/devices/cpu/cop400/cop400.h
@@ -111,12 +111,6 @@ enum cop400_cko_bond {
COP400_CKO_GENERAL_PURPOSE_INPUT
};
-/* microbus bonding options */
-enum cop400_microbus {
- COP400_MICROBUS_DISABLED = 0,
- COP400_MICROBUS_ENABLED
-};
-
#define MCFG_COP400_CONFIG(_cki, _cko, _microbus) \
cop400_cpu_device::set_cki(*device, _cki); \
@@ -146,7 +140,10 @@ public:
static void set_cki(device_t &device, cop400_cki_bond cki) { downcast<cop400_cpu_device &>(device).m_cki = cki; }
static void set_cko(device_t &device, cop400_cko_bond cko) { downcast<cop400_cpu_device &>(device).m_cko = cko; }
- static void set_microbus(device_t &device, cop400_microbus microbus) { downcast<cop400_cpu_device &>(device).m_microbus = microbus; }
+ static void set_microbus(device_t &device, bool has_microbus) { downcast<cop400_cpu_device &>(device).m_has_microbus = has_microbus; }
+
+ DECLARE_READ8_MEMBER( microbus_rd );
+ DECLARE_WRITE8_MEMBER( microbus_wr );
protected:
// device-level overrides
@@ -194,7 +191,7 @@ protected:
cop400_cki_bond m_cki;
cop400_cko_bond m_cko;
- cop400_microbus m_microbus;
+ bool m_has_microbus;
bool m_has_counter;
bool m_has_inil;
@@ -241,9 +238,6 @@ protected:
int m_halt; /* halt mode */
int m_idle; /* idle mode */
- /* microbus */
- int m_microbus_int; /* microbus interrupt */
-
/* execution logic */
int m_InstLen[256]; /* instruction length in bytes */
int m_icount; /* instruction counter */
@@ -252,7 +246,6 @@ protected:
emu_timer *m_serial_timer;
emu_timer *m_counter_timer;
emu_timer *m_inil_timer;
- emu_timer *m_microbus_timer;
typedef void ( cop400_cpu_device::*cop400_opcode_func ) (UINT8 opcode);
@@ -277,7 +270,6 @@ protected:
void serial_tick();
void counter_tick();
void inil_tick();
- void microbus_tick();
void PUSH(UINT16 data);
void POP();
diff --git a/src/devices/cpu/cosmac/cosmac.cpp b/src/devices/cpu/cosmac/cosmac.cpp
index d8e3d52c6fd..fa53c68807b 100644
--- a/src/devices/cpu/cosmac/cosmac.cpp
+++ b/src/devices/cpu/cosmac/cosmac.cpp
@@ -354,7 +354,7 @@ void cosmac_device::device_start()
state_add(COSMAC_N, "N", m_n).mask(0xf);
for (int regnum = 0; regnum < 16; regnum++)
- state_add(COSMAC_R0 + regnum, strformat("R%x", regnum).c_str(), m_r[regnum]);
+ state_add(COSMAC_R0 + regnum, string_format("R%x", regnum).c_str(), m_r[regnum]);
state_add(COSMAC_DF, "DF", m_df).mask(0x1).noshow();
state_add(COSMAC_IE, "IE", m_ie).mask(0x1).noshow();
@@ -473,10 +473,10 @@ void cosmac_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c",
- m_df ? 'D' : '.',
- m_ie ? 'I' : '.',
- m_q ? 'Q' : '.');
+ str = string_format("%c%c%c",
+ m_df ? 'D' : '.',
+ m_ie ? 'I' : '.',
+ m_q ? 'Q' : '.');
break;
}
}
diff --git a/src/devices/cpu/cp1610/cp1610.cpp b/src/devices/cpu/cp1610/cp1610.cpp
index a05bbbc0d49..f882d4a73ac 100644
--- a/src/devices/cpu/cp1610/cp1610.cpp
+++ b/src/devices/cpu/cp1610/cp1610.cpp
@@ -3406,7 +3406,7 @@ void cp1610_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c",
+ str = string_format("%c%c%c%c",
m_flags & 0x80 ? 'S':'.',
m_flags & 0x40 ? 'Z':'.',
m_flags & 0x20 ? 'V':'.',
diff --git a/src/devices/cpu/cubeqcpu/cubeqcpu.cpp b/src/devices/cpu/cubeqcpu/cubeqcpu.cpp
index a657a23680e..b042b8de8b5 100644
--- a/src/devices/cpu/cubeqcpu/cubeqcpu.cpp
+++ b/src/devices/cpu/cubeqcpu/cubeqcpu.cpp
@@ -352,9 +352,10 @@ void cquestrot_cpu_device::state_string_export(const device_state_entry &entry,
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c", m_cflag ? 'C' : '.',
- m_vflag ? 'V' : '.',
- m_f ? '.' : 'Z');
+ str = string_format("%c%c%c",
+ m_cflag ? 'C' : '.',
+ m_vflag ? 'V' : '.',
+ m_f ? '.' : 'Z');
break;
}
}
@@ -476,10 +477,11 @@ void cquestlin_cpu_device::state_string_export(const device_state_entry &entry,
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c|%cG", m_cflag ? 'C' : '.',
- m_vflag ? 'V' : '.',
- m_f ? '.' : 'Z',
- ( m_clkcnt & 3 ) ? 'B' : 'F');
+ str = string_format("%c%c%c|%cG",
+ m_cflag ? 'C' : '.',
+ m_vflag ? 'V' : '.',
+ m_f ? '.' : 'Z',
+ ( m_clkcnt & 3 ) ? 'B' : 'F');
break;
}
}
diff --git a/src/devices/cpu/drcbec.cpp b/src/devices/cpu/drcbec.cpp
index 5b494c947f3..8736a2b6703 100644
--- a/src/devices/cpu/drcbec.cpp
+++ b/src/devices/cpu/drcbec.cpp
@@ -12,10 +12,7 @@
#include "debugger.h"
#include "drcbec.h"
-#ifdef _MSC_VER
-#include <float.h>
-#define isnan _isnan
-#endif
+#include <cmath>
using namespace uml;
@@ -1898,7 +1895,7 @@ int drcbe_c::execute(code_handle &entry)
break;
case MAKE_OPCODE_SHORT(OP_FCMP, 4, 1): // FSCMP src1,src2
- if (isnan(FSPARAM0) || isnan(FSPARAM1))
+ if (std::isnan(FSPARAM0) || std::isnan(FSPARAM1))
flags = FLAG_U;
else
flags = (FSPARAM0 < FSPARAM1) | ((FSPARAM0 == FSPARAM1) << 2);
@@ -2037,7 +2034,7 @@ int drcbe_c::execute(code_handle &entry)
break;
case MAKE_OPCODE_SHORT(OP_FCMP, 8, 1): // FDCMP src1,src2
- if (isnan(FDPARAM0) || isnan(FDPARAM1))
+ if (std::isnan(FDPARAM0) || std::isnan(FDPARAM1))
flags = FLAG_U;
else
flags = (FDPARAM0 < FDPARAM1) | ((FDPARAM0 == FDPARAM1) << 2);
diff --git a/src/devices/cpu/drcbex64.cpp b/src/devices/cpu/drcbex64.cpp
index 034f06def80..b9583123af0 100644
--- a/src/devices/cpu/drcbex64.cpp
+++ b/src/devices/cpu/drcbex64.cpp
@@ -806,7 +806,7 @@ void drcbe_x64::generate(drcuml_block &block, const instruction *instlist, UINT3
if (inst.opcode() == OP_HANDLE)
blockname = inst.param(0).handle().string();
else if (inst.opcode() == OP_HASH)
- blockname = strformat("Code: mode=%d PC=%08X", (UINT32)inst.param(0).immediate(), (offs_t)inst.param(1).immediate()).c_str();
+ blockname = string_format("Code: mode=%d PC=%08X", (UINT32)inst.param(0).immediate(), (offs_t)inst.param(1).immediate()).c_str();
}
// generate code
diff --git a/src/devices/cpu/drcbex86.cpp b/src/devices/cpu/drcbex86.cpp
index 3ca840e1c6f..be63ac1e869 100644
--- a/src/devices/cpu/drcbex86.cpp
+++ b/src/devices/cpu/drcbex86.cpp
@@ -789,7 +789,7 @@ void drcbe_x86::generate(drcuml_block &block, const instruction *instlist, UINT3
if (inst.opcode() == OP_HANDLE)
blockname = inst.param(0).handle().string();
else if (inst.opcode() == OP_HASH)
- blockname = strformat("Code: mode=%d PC=%08X", (UINT32)inst.param(0).immediate(), (offs_t)inst.param(1).immediate()).c_str();
+ blockname = string_format("Code: mode=%d PC=%08X", (UINT32)inst.param(0).immediate(), (offs_t)inst.param(1).immediate()).c_str();
}
// generate code
diff --git a/src/devices/cpu/drcuml.cpp b/src/devices/cpu/drcuml.cpp
index 3bbd610cfa9..5c13c76b4c6 100644
--- a/src/devices/cpu/drcuml.cpp
+++ b/src/devices/cpu/drcuml.cpp
@@ -377,31 +377,6 @@ uml::instruction &drcuml_block::append()
//-------------------------------------------------
-// comment - attach a comment to the current
-// output location in the specified block
-//-------------------------------------------------
-
-void drcuml_block::append_comment(const char *format, ...)
-{
- // do the printf
- std::string temp;
- va_list va;
- va_start(va, format);
- strvprintf(temp,format, va);
- va_end(va);
-
- // allocate space in the cache to hold the comment
- char *comment = (char *)m_drcuml.cache().alloc_temporary(temp.length() + 1);
- if (comment == nullptr)
- return;
- strcpy(comment, temp.c_str());
-
- // add an instruction with a pointer
- append().comment(comment);
-}
-
-
-//-------------------------------------------------
// optimize - apply various optimizations to a
// block of code
//-------------------------------------------------
@@ -525,7 +500,7 @@ const char *drcuml_block::get_comment_text(const instruction &inst, std::string
// mapvars comment about their values
else if (inst.opcode() == OP_MAPVAR) {
- strprintf(comment,"m%d = $%X", (int)inst.param(0).mapvar() - MAPVAR_M0, (UINT32)inst.param(1).immediate());
+ comment = string_format("m%d = $%X", (int)inst.param(0).mapvar() - MAPVAR_M0, (UINT32)inst.param(1).immediate());
return comment.c_str();
}
diff --git a/src/devices/cpu/drcuml.h b/src/devices/cpu/drcuml.h
index 9c13d1110b3..1e57e74b02c 100644
--- a/src/devices/cpu/drcuml.h
+++ b/src/devices/cpu/drcuml.h
@@ -108,7 +108,7 @@ public:
// instruction appending
uml::instruction &append();
- void append_comment(const char *format, ...) ATTR_PRINTF(2,3);
+ template <typename Format, typename... Params> void append_comment(Format &&fmt, Params &&... args);
// this class is thrown if abort() is called
class abort_compilation : public emu_exception
@@ -236,4 +236,31 @@ private:
+//**************************************************************************
+// MEMBER TEMPLATES
+//**************************************************************************
+
+//-------------------------------------------------
+// comment - attach a comment to the current
+// output location in the specified block
+//-------------------------------------------------
+
+template <typename Format, typename... Params>
+inline void drcuml_block::append_comment(Format &&fmt, Params &&... args)
+{
+ // do the printf
+ std::string temp(util::string_format(std::forward<Format>(fmt), std::forward<Params>(args)...));
+
+ // allocate space in the cache to hold the comment
+ char *comment = (char *)m_drcuml.cache().alloc_temporary(temp.length() + 1);
+ if (comment != nullptr)
+ {
+ strcpy(comment, temp.c_str());
+
+ // add an instruction with a pointer
+ append().comment(comment);
+ }
+}
+
+
#endif /* __DRCUML_H__ */
diff --git a/src/devices/cpu/dsp16/dsp16.cpp b/src/devices/cpu/dsp16/dsp16.cpp
index 8b97ce4c064..a5e4b9b03b8 100644
--- a/src/devices/cpu/dsp16/dsp16.cpp
+++ b/src/devices/cpu/dsp16/dsp16.cpp
@@ -218,105 +218,105 @@ void dsp16_device::state_string_export(const device_state_entry &entry, std::str
{
switch (entry.index())
{
- case STATE_GENFLAGS:
- strprintf(str, "(below)");
- break;
+ case STATE_GENFLAGS:
+ str = "(below)";
+ break;
- case DSP16_AUC:
+ case DSP16_AUC:
{
std::string alignString;
const UINT8 align = m_auc & 0x03;
switch (align)
{
- case 0x00: strprintf(alignString,"xy"); break;
- case 0x01: strprintf(alignString,"/4"); break;
- case 0x02: strprintf(alignString,"x4"); break;
- case 0x03: strprintf(alignString,",,"); break;
+ case 0x00: alignString = "xy"; break;
+ case 0x01: alignString = "/4"; break;
+ case 0x02: alignString = "x4"; break;
+ case 0x03: alignString = ",,"; break;
}
- strprintf(str, "%c%c%c%c%c%s",
- m_auc & 0x40 ? 'Y':'.',
- m_auc & 0x20 ? '1':'.',
- m_auc & 0x10 ? '0':'.',
- m_auc & 0x08 ? '1':'.',
- m_auc & 0x04 ? '0':'.',
- alignString.c_str());
- break;
+ str = string_format("%c%c%c%c%c%s",
+ m_auc & 0x40 ? 'Y':'.',
+ m_auc & 0x20 ? '1':'.',
+ m_auc & 0x10 ? '0':'.',
+ m_auc & 0x08 ? '1':'.',
+ m_auc & 0x04 ? '0':'.',
+ alignString);
}
-
- case DSP16_PSW:
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
- m_psw & 0x8000 ? 'M':'.',
- m_psw & 0x4000 ? 'E':'.',
- m_psw & 0x2000 ? 'L':'.',
- m_psw & 0x1000 ? 'V':'.',
- m_psw & 0x0800 ? ',':',',
- m_psw & 0x0400 ? ',':',',
- m_psw & 0x0200 ? 'O':'.',
- m_psw & 0x0100 ? '1':'.',
- m_psw & 0x0080 ? '1':'.',
- m_psw & 0x0040 ? '1':'.',
- m_psw & 0x0020 ? '1':'.',
- m_psw & 0x0010 ? 'O':'.',
- m_psw & 0x0008 ? '1':'.',
- m_psw & 0x0004 ? '1':'.',
- m_psw & 0x0002 ? '1':'.',
- m_psw & 0x0001 ? '1':'.');
- break;
-
- case DSP16_PIOC:
+ break;
+
+ case DSP16_PSW:
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ m_psw & 0x8000 ? 'M':'.',
+ m_psw & 0x4000 ? 'E':'.',
+ m_psw & 0x2000 ? 'L':'.',
+ m_psw & 0x1000 ? 'V':'.',
+ m_psw & 0x0800 ? ',':',',
+ m_psw & 0x0400 ? ',':',',
+ m_psw & 0x0200 ? 'O':'.',
+ m_psw & 0x0100 ? '1':'.',
+ m_psw & 0x0080 ? '1':'.',
+ m_psw & 0x0040 ? '1':'.',
+ m_psw & 0x0020 ? '1':'.',
+ m_psw & 0x0010 ? 'O':'.',
+ m_psw & 0x0008 ? '1':'.',
+ m_psw & 0x0004 ? '1':'.',
+ m_psw & 0x0002 ? '1':'.',
+ m_psw & 0x0001 ? '1':'.');
+ break;
+
+ case DSP16_PIOC:
{
std::string strobeString;
const UINT8 strobe = (m_pioc & 0x6000) >> 13;
switch (strobe)
{
- case 0x00: strprintf(strobeString, "1T"); break;
- case 0x01: strprintf(strobeString, "2T"); break;
- case 0x02: strprintf(strobeString, "3T"); break;
- case 0x03: strprintf(strobeString, "4T"); break;
+ case 0x00: strobeString = "1T"; break;
+ case 0x01: strobeString = "2T"; break;
+ case 0x02: strobeString = "3T"; break;
+ case 0x03: strobeString = "4T"; break;
}
- strprintf(str, "%c%s%c%c%c%c%c%c%c%c%c%c%c%c%c",
- m_pioc & 0x8000 ? 'I':'.',
- strobeString.c_str(),
- m_pioc & 0x1000 ? 'O':'I',
- m_pioc & 0x0800 ? 'O':'I',
- m_pioc & 0x0400 ? 'S':'.',
- m_pioc & 0x0200 ? 'I':'.',
- m_pioc & 0x0100 ? 'O':'.',
- m_pioc & 0x0080 ? 'P':'.',
- m_pioc & 0x0040 ? 'P':'.',
- m_pioc & 0x0020 ? 'I':'.',
- m_pioc & 0x0010 ? 'I':'.',
- m_pioc & 0x0008 ? 'O':'.',
- m_pioc & 0x0004 ? 'P':'.',
- m_pioc & 0x0002 ? 'P':'.',
- m_pioc & 0x0001 ? 'I':'.');
- break;
+ str = string_format("%c%s%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ m_pioc & 0x8000 ? 'I':'.',
+ strobeString,
+ m_pioc & 0x1000 ? 'O':'I',
+ m_pioc & 0x0800 ? 'O':'I',
+ m_pioc & 0x0400 ? 'S':'.',
+ m_pioc & 0x0200 ? 'I':'.',
+ m_pioc & 0x0100 ? 'O':'.',
+ m_pioc & 0x0080 ? 'P':'.',
+ m_pioc & 0x0040 ? 'P':'.',
+ m_pioc & 0x0020 ? 'I':'.',
+ m_pioc & 0x0010 ? 'I':'.',
+ m_pioc & 0x0008 ? 'O':'.',
+ m_pioc & 0x0004 ? 'P':'.',
+ m_pioc & 0x0002 ? 'P':'.',
+ m_pioc & 0x0001 ? 'I':'.');
}
+ break;
- // Placeholder for a better view later (TODO)
- case DSP16_SIOC:
+ // Placeholder for a better view later (TODO)
+ case DSP16_SIOC:
{
std::string clkString;
const UINT8 clk = (m_sioc & 0x0180) >> 7;
switch (clk)
{
- case 0x00: strprintf(clkString, "/4"); break;
- case 0x01: strprintf(clkString, "12"); break;
- case 0x02: strprintf(clkString, "16"); break;
- case 0x03: strprintf(clkString, "20"); break;
+ case 0x00: clkString = "/4"; break;
+ case 0x01: clkString = "12"; break;
+ case 0x02: clkString = "16"; break;
+ case 0x03: clkString = "20"; break;
}
- strprintf(str, "%c%s%c%c%c%c%c%c%c",
- m_sioc & 0x0200 ? 'I':'O',
- clkString.c_str(),
- m_sioc & 0x0040 ? 'L':'M',
- m_sioc & 0x0020 ? 'I':'O',
- m_sioc & 0x0010 ? 'I':'O',
- m_sioc & 0x0008 ? 'I':'O',
- m_sioc & 0x0004 ? 'I':'O',
- m_sioc & 0x0002 ? '2':'1',
- m_sioc & 0x0001 ? '2':'1');
- break;
+ str = string_format("%c%s%c%c%c%c%c%c%c",
+ m_sioc & 0x0200 ? 'I':'O',
+ clkString,
+ m_sioc & 0x0040 ? 'L':'M',
+ m_sioc & 0x0020 ? 'I':'O',
+ m_sioc & 0x0010 ? 'I':'O',
+ m_sioc & 0x0008 ? 'I':'O',
+ m_sioc & 0x0004 ? 'I':'O',
+ m_sioc & 0x0002 ? '2':'1',
+ m_sioc & 0x0001 ? '2':'1');
}
+ break;
}
}
diff --git a/src/devices/cpu/dsp16/dsp16dis.cpp b/src/devices/cpu/dsp16/dsp16dis.cpp
index 2e144df03af..6b2de29a79c 100644
--- a/src/devices/cpu/dsp16/dsp16dis.cpp
+++ b/src/devices/cpu/dsp16/dsp16dis.cpp
@@ -5,29 +5,27 @@
std::string disasmF1Field(const UINT8& F1, const UINT8& D, const UINT8& S)
{
- std::string ret = "";
switch (F1)
{
- case 0x00: strprintf(ret, "a%d = p, p = x*y", D); break;
- case 0x01: strprintf(ret, "a%d = a%d + p, p = x*y", D, S); break;
- case 0x02: strprintf(ret, "p = x*y"); break;
- case 0x03: strprintf(ret, "a%d = a%d - p, p = x*y", D, S); break;
- case 0x04: strprintf(ret, "a%d = p", D); break;
- case 0x05: strprintf(ret, "a%d = a%d + p", D, S); break;
- case 0x06: strprintf(ret, "NOP"); break;
- case 0x07: strprintf(ret, "a%d = a%d - p", D, S); break;
- case 0x08: strprintf(ret, "a%d = a%d | y", D, S); break;
- case 0x09: strprintf(ret, "a%d = a%d ^ y", D, S); break;
- case 0x0a: strprintf(ret, "a%d & y", S); break;
- case 0x0b: strprintf(ret, "a%d - y", S); break;
- case 0x0c: strprintf(ret, "a%d = y", D); break;
- case 0x0d: strprintf(ret, "a%d = a%d + y", D, S); break;
- case 0x0e: strprintf(ret, "a%d = a%d & y", D, S); break;
- case 0x0f: strprintf(ret, "a%d = a%d - y", D, S); break;
+ case 0x00: return string_format("a%u = p, p = x*y", D); break;
+ case 0x01: return string_format("a%u = a%u + p, p = x*y", D, S); break;
+ case 0x02: return string_format("p = x*y"); break;
+ case 0x03: return string_format("a%u = a%u - p, p = x*y", D, S); break;
+ case 0x04: return string_format("a%u = p", D); break;
+ case 0x05: return string_format("a%u = a%u + p", D, S); break;
+ case 0x06: return string_format("NOP"); break;
+ case 0x07: return string_format("a%u = a%u - p", D, S); break;
+ case 0x08: return string_format("a%u = a%u | y", D, S); break;
+ case 0x09: return string_format("a%u = a%u ^ y", D, S); break;
+ case 0x0a: return string_format("a%u & y", S); break;
+ case 0x0b: return string_format("a%u - y", S); break;
+ case 0x0c: return string_format("a%u = y", D); break;
+ case 0x0d: return string_format("a%u = a%u + y", D, S); break;
+ case 0x0e: return string_format("a%u = a%u & y", D, S); break;
+ case 0x0f: return string_format("a%u = a%u - y", D, S); break;
default: return "UNKNOWN";
}
- return ret;
}
std::string disasmYField(const UINT8& Y)
@@ -95,23 +93,23 @@ std::string disasmF2Field(const UINT8& F2, const UINT8& D, const UINT8& S)
std::string ret = "";
switch (F2)
{
- case 0x00: strprintf(ret, "a%d = a%d >> 1", D, S); break;
- case 0x01: strprintf(ret, "a%d = a%d << 1", D, S); break;
- case 0x02: strprintf(ret, "a%d = a%d >> 4", D, S); break;
- case 0x03: strprintf(ret, "a%d = a%d << 4", D, S); break;
- case 0x04: strprintf(ret, "a%d = a%d >> 8", D, S); break;
- case 0x05: strprintf(ret, "a%d = a%d << 8", D, S); break;
- case 0x06: strprintf(ret, "a%d = a%d >> 16", D, S); break;
- case 0x07: strprintf(ret, "a%d = a%d << 16", D, S); break;
-
- case 0x08: strprintf(ret, "a%d = p", D); break;
- case 0x09: strprintf(ret, "a%dh = a%dh + 1", D, S); break;
- case 0x0a: strprintf(ret, "RESERVED"); break;
- case 0x0b: strprintf(ret, "a%d = rnd(a%d)", D, S); break;
- case 0x0c: strprintf(ret, "a%d = y", D); break;
- case 0x0d: strprintf(ret, "a%d = a%d + 1", D, S); break;
- case 0x0e: strprintf(ret, "a%d = a%d", D, S); break;
- case 0x0f: strprintf(ret, "a%d = -a%d", D, S); break;
+ case 0x00: return string_format("a%u = a%u >> 1", D, S); break;
+ case 0x01: return string_format("a%u = a%u << 1", D, S); break;
+ case 0x02: return string_format("a%u = a%u >> 4", D, S); break;
+ case 0x03: return string_format("a%u = a%u << 4", D, S); break;
+ case 0x04: return string_format("a%u = a%u >> 8", D, S); break;
+ case 0x05: return string_format("a%u = a%u << 8", D, S); break;
+ case 0x06: return string_format("a%u = a%u >> 16", D, S); break;
+ case 0x07: return string_format("a%u = a%u << 16", D, S); break;
+
+ case 0x08: return string_format("a%u = p", D); break;
+ case 0x09: return string_format("a%uh = a%uh + 1", D, S); break;
+ case 0x0a: return string_format("RESERVED"); break;
+ case 0x0b: return string_format("a%u = rnd(a%u)", D, S); break;
+ case 0x0c: return string_format("a%u = y", D); break;
+ case 0x0d: return string_format("a%u = a%u + 1", D, S); break;
+ case 0x0e: return string_format("a%u = a%u", D, S); break;
+ case 0x0f: return string_format("a%u = -a%u", D, S); break;
default: return "UNKNOWN";
}
diff --git a/src/devices/cpu/dsp32/dsp32.cpp b/src/devices/cpu/dsp32/dsp32.cpp
index 98640f7d1b4..dbd8e62aef7 100644
--- a/src/devices/cpu/dsp32/dsp32.cpp
+++ b/src/devices/cpu/dsp32/dsp32.cpp
@@ -200,7 +200,7 @@ void dsp32c_device::device_start()
state_add(STATE_GENFLAGS, "GENFLAGS", m_iotemp).callimport().callexport().formatstr("%6s").noshow();
state_add(DSP32_PC, "PC", m_r[15]).mask(0xffffff);
for (int regnum = 0; regnum <= 14; regnum++)
- state_add(DSP32_R0 + regnum, strformat("R%d", regnum).c_str(), m_r[regnum]).mask(0xffffff);
+ state_add(DSP32_R0 + regnum, string_format("R%d", regnum).c_str(), m_r[regnum]).mask(0xffffff);
state_add(DSP32_R15, "R15", m_r[17]).mask(0xffffff);
state_add(DSP32_R16, "R16", m_r[18]).mask(0xffffff);
state_add(DSP32_R17, "R17", m_r[19]).mask(0xffffff);
@@ -373,7 +373,7 @@ void dsp32c_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
NFLAG ? 'N':'.',
ZFLAG ? 'Z':'.',
UFLAG ? 'U':'.',
@@ -388,7 +388,7 @@ void dsp32c_device::state_string_export(const device_state_entry &entry, std::st
case DSP32_A1:
case DSP32_A2:
case DSP32_A3:
- strprintf(str, "%8g", *(double *)entry.dataptr());
+ str = string_format("%8g", *(double *)entry.dataptr());
break;
}
}
diff --git a/src/devices/cpu/dsp56k/dsp56k.cpp b/src/devices/cpu/dsp56k/dsp56k.cpp
index 7c4b7abd163..d3cf3804fa8 100644
--- a/src/devices/cpu/dsp56k/dsp56k.cpp
+++ b/src/devices/cpu/dsp56k/dsp56k.cpp
@@ -347,7 +347,7 @@ void dsp56k_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%s%s %s%s%s%s%s%s%s%s %s%s",
+ str = string_format("%s%s %s%s%s%s%s%s%s%s %s%s",
/* Status Register */
LF_bit(cpustate) ? "L" : ".",
FV_bit(cpustate) ? "F" : ".",
@@ -367,19 +367,19 @@ void dsp56k_device::state_string_export(const device_state_entry &entry, std::st
break;
case DSP56K_X:
- strprintf(str, "%04x %04x", X1, X0);
+ str = string_format("%04x %04x", X1, X0);
break;
case DSP56K_Y:
- strprintf(str, "%04x %04x", Y1, Y0);
+ str = string_format("%04x %04x", Y1, Y0);
break;
case DSP56K_A:
- strprintf(str, "%02x %04x %04x", A2, A1, A0);
+ str = string_format("%02x %04x %04x", A2, A1, A0);
break;
case DSP56K_B:
- strprintf(str, "%02x %04x %04x", B2, B1, B0);
+ str = string_format("%02x %04x %04x", B2, B1, B0);
break;
}
}
diff --git a/src/devices/cpu/e0c6200/e0c6200.cpp b/src/devices/cpu/e0c6200/e0c6200.cpp
index 0b87b9eaa7d..780f4e77a04 100644
--- a/src/devices/cpu/e0c6200/e0c6200.cpp
+++ b/src/devices/cpu/e0c6200/e0c6200.cpp
@@ -30,7 +30,7 @@ void e0c6200_cpu_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c",
+ str = string_format("%c%c%c%c",
(m_f & I_FLAG) ? 'I':'i',
(m_f & D_FLAG) ? 'D':'d',
(m_f & Z_FLAG) ? 'Z':'z',
diff --git a/src/devices/cpu/e132xs/e132xs.cpp b/src/devices/cpu/e132xs/e132xs.cpp
index afa0da8d962..8103ce6f7c2 100644
--- a/src/devices/cpu/e132xs/e132xs.cpp
+++ b/src/devices/cpu/e132xs/e132xs.cpp
@@ -1853,7 +1853,7 @@ void hyperstone_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c FTE:%X FRM:%X ILC:%d FL:%d FP:%d",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c FTE:%X FRM:%X ILC:%d FL:%d FP:%d",
GET_S ? 'S':'.',
GET_P ? 'P':'.',
GET_T ? 'T':'.',
diff --git a/src/devices/cpu/esrip/esrip.cpp b/src/devices/cpu/esrip/esrip.cpp
index a788c2a3ab3..3a41297cefd 100644
--- a/src/devices/cpu/esrip/esrip.cpp
+++ b/src/devices/cpu/esrip/esrip.cpp
@@ -355,7 +355,7 @@ void esrip_device::state_string_export(const device_state_entry &entry, std::str
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c",
(m_status & 0x80) ? '3' : '.',
(m_status & 0x40) ? '2' : '.',
(m_status & 0x20) ? '1' : '.',
diff --git a/src/devices/cpu/f8/f8.cpp b/src/devices/cpu/f8/f8.cpp
index 2bc875e12ee..d19274ed202 100644
--- a/src/devices/cpu/f8/f8.cpp
+++ b/src/devices/cpu/f8/f8.cpp
@@ -2050,12 +2050,12 @@ void f8_cpu_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c",
- m_w & 0x10 ? 'I':'.',
- m_w & 0x08 ? 'O':'.',
- m_w & 0x04 ? 'Z':'.',
- m_w & 0x02 ? 'C':'.',
- m_w & 0x01 ? 'S':'.');
+ str = string_format("%c%c%c%c%c",
+ m_w & 0x10 ? 'I':'.',
+ m_w & 0x08 ? 'O':'.',
+ m_w & 0x04 ? 'Z':'.',
+ m_w & 0x02 ? 'C':'.',
+ m_w & 0x01 ? 'S':'.');
break;
}
}
diff --git a/src/devices/cpu/g65816/g65816.cpp b/src/devices/cpu/g65816/g65816.cpp
index 47b0e035798..37bd68c9d00 100644
--- a/src/devices/cpu/g65816/g65816.cpp
+++ b/src/devices/cpu/g65816/g65816.cpp
@@ -957,7 +957,7 @@ void g65816_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_flag_n & NFLAG_SET ? 'N':'.',
m_flag_v & VFLAG_SET ? 'V':'.',
m_flag_m & MFLAG_SET ? 'M':'.',
diff --git a/src/devices/cpu/h6280/h6280.cpp b/src/devices/cpu/h6280/h6280.cpp
index ec0b62b5076..d8d16f6946c 100644
--- a/src/devices/cpu/h6280/h6280.cpp
+++ b/src/devices/cpu/h6280/h6280.cpp
@@ -2196,7 +2196,7 @@ void h6280_device::state_string_export(const device_state_entry &entry, std::str
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
(m_p & 0x80) ? 'N':'.',
(m_p & 0x40) ? 'V':'.',
(m_p & 0x20) ? 'R':'.',
diff --git a/src/devices/cpu/h8/h8.cpp b/src/devices/cpu/h8/h8.cpp
index ba8b853e9ec..36da1c92f17 100644
--- a/src/devices/cpu/h8/h8.cpp
+++ b/src/devices/cpu/h8/h8.cpp
@@ -221,27 +221,27 @@ void h8_device::state_string_export(const device_state_entry &entry, std::string
switch(entry.index()) {
case STATE_GENFLAGS:
if(has_exr)
- strprintf(str, "%c%c %c%c%c%c%c%c%c%c",
- (EXR & EXR_T) ? 'T' : '-',
- '0' + (EXR & EXR_I),
- (CCR & F_I) ? 'I' : '-',
- (CCR & F_UI) ? 'u' : '-',
- (CCR & F_H) ? 'H' : '-',
- (CCR & F_U) ? 'U' : '-',
- (CCR & F_N) ? 'N' : '-',
- (CCR & F_Z) ? 'Z' : '-',
- (CCR & F_V) ? 'V' : '-',
- (CCR & F_C) ? 'C' : '-');
+ str = string_format("%c%c %c%c%c%c%c%c%c%c",
+ (EXR & EXR_T) ? 'T' : '-',
+ '0' + (EXR & EXR_I),
+ (CCR & F_I) ? 'I' : '-',
+ (CCR & F_UI) ? 'u' : '-',
+ (CCR & F_H) ? 'H' : '-',
+ (CCR & F_U) ? 'U' : '-',
+ (CCR & F_N) ? 'N' : '-',
+ (CCR & F_Z) ? 'Z' : '-',
+ (CCR & F_V) ? 'V' : '-',
+ (CCR & F_C) ? 'C' : '-');
else
- strprintf(str, "%c%c%c%c%c%c%c%c",
- (CCR & F_I) ? 'I' : '-',
- (CCR & F_UI) ? 'u' : '-',
- (CCR & F_H) ? 'H' : '-',
- (CCR & F_U) ? 'U' : '-',
- (CCR & F_N) ? 'N' : '-',
- (CCR & F_Z) ? 'Z' : '-',
- (CCR & F_V) ? 'V' : '-',
- (CCR & F_C) ? 'C' : '-');
+ str = string_format("%c%c%c%c%c%c%c%c",
+ (CCR & F_I) ? 'I' : '-',
+ (CCR & F_UI) ? 'u' : '-',
+ (CCR & F_H) ? 'H' : '-',
+ (CCR & F_U) ? 'U' : '-',
+ (CCR & F_N) ? 'N' : '-',
+ (CCR & F_Z) ? 'Z' : '-',
+ (CCR & F_V) ? 'V' : '-',
+ (CCR & F_C) ? 'C' : '-');
break;
case H8_R0:
case H8_R1:
@@ -252,7 +252,7 @@ void h8_device::state_string_export(const device_state_entry &entry, std::string
case H8_R6:
case H8_R7: {
int r = entry.index() - H8_R0;
- strprintf(str, "%04x %04x", R[r + 8], R[r]);
+ str = string_format("%04x %04x", R[r + 8], R[r]);
break;
}
}
diff --git a/src/devices/cpu/hcd62121/hcd62121.cpp b/src/devices/cpu/hcd62121/hcd62121.cpp
index e6104627990..0711868a55b 100644
--- a/src/devices/cpu/hcd62121/hcd62121.cpp
+++ b/src/devices/cpu/hcd62121/hcd62121.cpp
@@ -368,11 +368,11 @@ void hcd62121_cpu_device::state_string_export(const device_state_entry &entry, s
switch (entry.index())
{
case STATE_GENPC:
- strprintf(str, "%06X", (m_cseg << 16) | m_ip);
+ str = string_format("%06X", (m_cseg << 16) | m_ip);
break;
case STATE_GENFLAGS:
- strprintf(str, "%s-%s-%s-%c-%c",
+ str = string_format("%s-%s-%s-%c-%c",
m_f & _FLAG_ZH ? "ZH":"__",
m_f & _FLAG_CL ? "CL":"__",
m_f & _FLAG_ZL ? "ZL":"__",
@@ -383,100 +383,100 @@ void hcd62121_cpu_device::state_string_export(const device_state_entry &entry, s
break;
case HCD62121_R00:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x00], m_reg[0x01], m_reg[0x02], m_reg[0x03]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x00], m_reg[0x01], m_reg[0x02], m_reg[0x03]);
break;
case HCD62121_R04:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x04], m_reg[0x05], m_reg[0x06], m_reg[0x07]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x04], m_reg[0x05], m_reg[0x06], m_reg[0x07]);
break;
case HCD62121_R08:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x08], m_reg[0x09], m_reg[0x0A], m_reg[0x0B]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x08], m_reg[0x09], m_reg[0x0A], m_reg[0x0B]);
break;
case HCD62121_R0C:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x0C], m_reg[0x0D], m_reg[0x0E], m_reg[0x0F]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x0C], m_reg[0x0D], m_reg[0x0E], m_reg[0x0F]);
break;
case HCD62121_R10:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x10], m_reg[0x11], m_reg[0x12], m_reg[0x13]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x10], m_reg[0x11], m_reg[0x12], m_reg[0x13]);
break;
case HCD62121_R14:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x14], m_reg[0x15], m_reg[0x16], m_reg[0x17]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x14], m_reg[0x15], m_reg[0x16], m_reg[0x17]);
break;
case HCD62121_R18:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x18], m_reg[0x19], m_reg[0x1A], m_reg[0x1B]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x18], m_reg[0x19], m_reg[0x1A], m_reg[0x1B]);
break;
case HCD62121_R1C:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x1C], m_reg[0x1D], m_reg[0x1E], m_reg[0x1F]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x1C], m_reg[0x1D], m_reg[0x1E], m_reg[0x1F]);
break;
case HCD62121_R20:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x20], m_reg[0x21], m_reg[0x22], m_reg[0x23]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x20], m_reg[0x21], m_reg[0x22], m_reg[0x23]);
break;
case HCD62121_R24:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x24], m_reg[0x25], m_reg[0x26], m_reg[0x27]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x24], m_reg[0x25], m_reg[0x26], m_reg[0x27]);
break;
case HCD62121_R28:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x28], m_reg[0x29], m_reg[0x2A], m_reg[0x2B]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x28], m_reg[0x29], m_reg[0x2A], m_reg[0x2B]);
break;
case HCD62121_R2C:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x2C], m_reg[0x2D], m_reg[0x2E], m_reg[0x2F]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x2C], m_reg[0x2D], m_reg[0x2E], m_reg[0x2F]);
break;
case HCD62121_R30:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x30], m_reg[0x31], m_reg[0x32], m_reg[0x33]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x30], m_reg[0x31], m_reg[0x32], m_reg[0x33]);
break;
case HCD62121_R34:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x34], m_reg[0x35], m_reg[0x36], m_reg[0x37]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x34], m_reg[0x35], m_reg[0x36], m_reg[0x37]);
break;
case HCD62121_R38:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x38], m_reg[0x39], m_reg[0x3A], m_reg[0x3B]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x38], m_reg[0x39], m_reg[0x3A], m_reg[0x3B]);
break;
case HCD62121_R3C:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x3C], m_reg[0x3D], m_reg[0x3E], m_reg[0x3F]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x3C], m_reg[0x3D], m_reg[0x3E], m_reg[0x3F]);
break;
case HCD62121_R40:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x40], m_reg[0x41], m_reg[0x42], m_reg[0x43]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x40], m_reg[0x41], m_reg[0x42], m_reg[0x43]);
break;
case HCD62121_R44:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x44], m_reg[0x45], m_reg[0x46], m_reg[0x47]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x44], m_reg[0x45], m_reg[0x46], m_reg[0x47]);
break;
case HCD62121_R48:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x48], m_reg[0x49], m_reg[0x4A], m_reg[0x4B]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x48], m_reg[0x49], m_reg[0x4A], m_reg[0x4B]);
break;
case HCD62121_R4C:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x4C], m_reg[0x4D], m_reg[0x4E], m_reg[0x4F]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x4C], m_reg[0x4D], m_reg[0x4E], m_reg[0x4F]);
break;
case HCD62121_R50:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x50], m_reg[0x51], m_reg[0x52], m_reg[0x53]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x50], m_reg[0x51], m_reg[0x52], m_reg[0x53]);
break;
case HCD62121_R54:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x54], m_reg[0x55], m_reg[0x56], m_reg[0x57]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x54], m_reg[0x55], m_reg[0x56], m_reg[0x57]);
break;
case HCD62121_R58:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x58], m_reg[0x59], m_reg[0x5A], m_reg[0x5B]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x58], m_reg[0x59], m_reg[0x5A], m_reg[0x5B]);
break;
case HCD62121_R5C:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x5C], m_reg[0x5D], m_reg[0x5E], m_reg[0x5F]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x5C], m_reg[0x5D], m_reg[0x5E], m_reg[0x5F]);
break;
case HCD62121_R60:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x60], m_reg[0x61], m_reg[0x62], m_reg[0x63]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x60], m_reg[0x61], m_reg[0x62], m_reg[0x63]);
break;
case HCD62121_R64:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x64], m_reg[0x65], m_reg[0x66], m_reg[0x67]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x64], m_reg[0x65], m_reg[0x66], m_reg[0x67]);
break;
case HCD62121_R68:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x68], m_reg[0x69], m_reg[0x6A], m_reg[0x6B]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x68], m_reg[0x69], m_reg[0x6A], m_reg[0x6B]);
break;
case HCD62121_R6C:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x6C], m_reg[0x6D], m_reg[0x6E], m_reg[0x6F]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x6C], m_reg[0x6D], m_reg[0x6E], m_reg[0x6F]);
break;
case HCD62121_R70:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x70], m_reg[0x71], m_reg[0x72], m_reg[0x73]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x70], m_reg[0x71], m_reg[0x72], m_reg[0x73]);
break;
case HCD62121_R74:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x74], m_reg[0x75], m_reg[0x76], m_reg[0x77]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x74], m_reg[0x75], m_reg[0x76], m_reg[0x77]);
break;
case HCD62121_R78:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x78], m_reg[0x79], m_reg[0x7A], m_reg[0x7B]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x78], m_reg[0x79], m_reg[0x7A], m_reg[0x7B]);
break;
case HCD62121_R7C:
- strprintf(str, "%02X%02X%02X%02X", m_reg[0x7C], m_reg[0x7D], m_reg[0x7E], m_reg[0x7F]);
+ str = string_format("%02X%02X%02X%02X", m_reg[0x7C], m_reg[0x7D], m_reg[0x7E], m_reg[0x7F]);
break;
}
}
diff --git a/src/devices/cpu/hd61700/hd61700.cpp b/src/devices/cpu/hd61700/hd61700.cpp
index 4e8d2c6590d..55cdaefcd6e 100644
--- a/src/devices/cpu/hd61700/hd61700.cpp
+++ b/src/devices/cpu/hd61700/hd61700.cpp
@@ -183,7 +183,7 @@ void hd61700_cpu_device::device_start()
for (int ireg=0; ireg<32; ireg++)
{
- state_add(HD61700_MAINREG + ireg, strformat("R%d", ireg).c_str(), m_regmain[ireg]).callimport().callexport().formatstr("%02X");
+ state_add(HD61700_MAINREG + ireg, string_format("R%d", ireg).c_str(), m_regmain[ireg]).callimport().callexport().formatstr("%02X");
}
state_add(STATE_GENPC, "curpc", m_curpc).callimport().callexport().formatstr("%8s").noshow();
@@ -275,7 +275,7 @@ void hd61700_cpu_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c",
m_flags & FLAG_Z ? '.' : 'Z',
m_flags & FLAG_C ? 'C' : '.',
m_flags & FLAG_LZ ? '.' : 'L',
diff --git a/src/devices/cpu/hmcs40/hmcs40.cpp b/src/devices/cpu/hmcs40/hmcs40.cpp
index 58cd711f8da..4f78f3480f4 100644
--- a/src/devices/cpu/hmcs40/hmcs40.cpp
+++ b/src/devices/cpu/hmcs40/hmcs40.cpp
@@ -138,7 +138,7 @@ void hmcs40_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c",
+ str = string_format("%c%c",
m_c ? 'C':'c',
m_s ? 'S':'s'
);
diff --git a/src/devices/cpu/hphybrid/hphybrid.cpp b/src/devices/cpu/hphybrid/hphybrid.cpp
index 71aec796760..44c29698cb1 100644
--- a/src/devices/cpu/hphybrid/hphybrid.cpp
+++ b/src/devices/cpu/hphybrid/hphybrid.cpp
@@ -619,7 +619,7 @@ UINT16 hp_hybrid_cpu_device::execute_one_sub(UINT16 opcode)
void hp_hybrid_cpu_device::state_string_export(const device_state_entry &entry, std::string &str) const
{
if (entry.index() == STATE_GENFLAGS) {
- strprintf(str, "%s %s %c %c",
+ str = string_format("%s %s %c %c",
BIT(m_flags , HPHYBRID_DB_BIT) ? "Db":"..",
BIT(m_flags , HPHYBRID_CB_BIT) ? "Cb":"..",
BIT(m_flags , HPHYBRID_O_BIT) ? 'O':'.',
@@ -673,7 +673,7 @@ UINT16 hp_hybrid_cpu_device::RM(UINT32 addr)
return RIO(CURRENT_PA , addr_wo_bsc - HP_REG_R4_ADDR);
case HP_REG_IV_ADDR:
- return m_reg_IV;
+ return m_reg_IV;
case HP_REG_PA_ADDR:
return CURRENT_PA;
diff --git a/src/devices/cpu/i386/i386.cpp b/src/devices/cpu/i386/i386.cpp
index 4f593de3dea..454f9004d61 100644
--- a/src/devices/cpu/i386/i386.cpp
+++ b/src/devices/cpu/i386/i386.cpp
@@ -3496,55 +3496,55 @@ void i386_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%08X", get_flags());
+ str = string_format("%08X", get_flags());
break;
case X87_ST0:
- strprintf(str, "%f", fx80_to_double(ST(0)));
+ str = string_format("%f", fx80_to_double(ST(0)));
break;
case X87_ST1:
- strprintf(str, "%f", fx80_to_double(ST(1)));
+ str = string_format("%f", fx80_to_double(ST(1)));
break;
case X87_ST2:
- strprintf(str, "%f", fx80_to_double(ST(2)));
+ str = string_format("%f", fx80_to_double(ST(2)));
break;
case X87_ST3:
- strprintf(str, "%f", fx80_to_double(ST(3)));
+ str = string_format("%f", fx80_to_double(ST(3)));
break;
case X87_ST4:
- strprintf(str, "%f", fx80_to_double(ST(4)));
+ str = string_format("%f", fx80_to_double(ST(4)));
break;
case X87_ST5:
- strprintf(str, "%f", fx80_to_double(ST(5)));
+ str = string_format("%f", fx80_to_double(ST(5)));
break;
case X87_ST6:
- strprintf(str, "%f", fx80_to_double(ST(6)));
+ str = string_format("%f", fx80_to_double(ST(6)));
break;
case X87_ST7:
- strprintf(str, "%f", fx80_to_double(ST(7)));
+ str = string_format("%f", fx80_to_double(ST(7)));
break;
case SSE_XMM0:
- strprintf(str, "%08x%08x%08x%08x", XMM(0).d[3], XMM(0).d[2], XMM(0).d[1], XMM(0).d[0]);
+ str = string_format("%08x%08x%08x%08x", XMM(0).d[3], XMM(0).d[2], XMM(0).d[1], XMM(0).d[0]);
break;
case SSE_XMM1:
- strprintf(str, "%08x%08x%08x%08x", XMM(1).d[3], XMM(1).d[2], XMM(1).d[1], XMM(1).d[0]);
+ str = string_format("%08x%08x%08x%08x", XMM(1).d[3], XMM(1).d[2], XMM(1).d[1], XMM(1).d[0]);
break;
case SSE_XMM2:
- strprintf(str, "%08x%08x%08x%08x", XMM(2).d[3], XMM(2).d[2], XMM(2).d[1], XMM(2).d[0]);
+ str = string_format("%08x%08x%08x%08x", XMM(2).d[3], XMM(2).d[2], XMM(2).d[1], XMM(2).d[0]);
break;
case SSE_XMM3:
- strprintf(str, "%08x%08x%08x%08x", XMM(3).d[3], XMM(3).d[2], XMM(3).d[1], XMM(3).d[0]);
+ str = string_format("%08x%08x%08x%08x", XMM(3).d[3], XMM(3).d[2], XMM(3).d[1], XMM(3).d[0]);
break;
case SSE_XMM4:
- strprintf(str, "%08x%08x%08x%08x", XMM(4).d[3], XMM(4).d[2], XMM(4).d[1], XMM(4).d[0]);
+ str = string_format("%08x%08x%08x%08x", XMM(4).d[3], XMM(4).d[2], XMM(4).d[1], XMM(4).d[0]);
break;
case SSE_XMM5:
- strprintf(str, "%08x%08x%08x%08x", XMM(5).d[3], XMM(5).d[2], XMM(5).d[1], XMM(5).d[0]);
+ str = string_format("%08x%08x%08x%08x", XMM(5).d[3], XMM(5).d[2], XMM(5).d[1], XMM(5).d[0]);
break;
case SSE_XMM6:
- strprintf(str, "%08x%08x%08x%08x", XMM(6).d[3], XMM(6).d[2], XMM(6).d[1], XMM(6).d[0]);
+ str = string_format("%08x%08x%08x%08x", XMM(6).d[3], XMM(6).d[2], XMM(6).d[1], XMM(6).d[0]);
break;
case SSE_XMM7:
- strprintf(str, "%08x%08x%08x%08x", XMM(7).d[3], XMM(7).d[2], XMM(7).d[1], XMM(7).d[0]);
+ str = string_format("%08x%08x%08x%08x", XMM(7).d[3], XMM(7).d[2], XMM(7).d[1], XMM(7).d[0]);
break;
}
}
diff --git a/src/devices/cpu/i4004/i4004.cpp b/src/devices/cpu/i4004/i4004.cpp
index 371074238c9..e7a63564c59 100644
--- a/src/devices/cpu/i4004/i4004.cpp
+++ b/src/devices/cpu/i4004/i4004.cpp
@@ -416,19 +416,19 @@ void i4004_cpu_device::device_start()
{
/* set up the state table */
{
- state_add(I4004_PC, "PC", m_PC.w.l).mask(0x0fff);
- state_add(STATE_GENPC, "GENPC", m_PC.w.l).mask(0x0fff).noshow();
+ state_add(I4004_PC, "PC", m_PC.w.l).mask(0x0fff);
+ state_add(STATE_GENPC, "GENPC", m_PC.w.l).mask(0x0fff).noshow();
state_add(STATE_GENFLAGS, "GENFLAGS", m_flags).mask(0x0f).callimport().callexport().noshow().formatstr("%4s");
- state_add(I4004_A, "A", m_A).mask(0x0f);
+ state_add(I4004_A, "A", m_A).mask(0x0f);
for (int regnum = 0; regnum < 8; regnum++)
{
- state_add(I4004_R01 + regnum, strformat("R%X%X", regnum * 2, regnum * 2 + 1).c_str(), m_R[regnum]);
+ state_add(I4004_R01 + regnum, string_format("R%X%X", regnum * 2, regnum * 2 + 1).c_str(), m_R[regnum]);
}
for (int addrnum = 0; addrnum < 4; addrnum++)
{
- state_add(I4004_ADDR1 + addrnum, strformat("ADDR%d", addrnum + 1).c_str(), m_ADDR[addrnum].w.l).mask(0xfff);
+ state_add(I4004_ADDR1 + addrnum, string_format("ADDR%d", addrnum + 1).c_str(), m_ADDR[addrnum].w.l).mask(0xfff);
}
state_add(I4004_RAM, "RAM", m_RAM.w.l).mask(0x0fff);
@@ -513,7 +513,7 @@ void i4004_cpu_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, ".%c%c%c",
+ str = string_format(".%c%c%c",
(m_A==0) ? 'Z':'.',
m_C ? 'C':'.',
m_TEST ? 'T':'.');
diff --git a/src/devices/cpu/i8008/i8008.cpp b/src/devices/cpu/i8008/i8008.cpp
index 6baeacfe7bb..e9f25118f6a 100644
--- a/src/devices/cpu/i8008/i8008.cpp
+++ b/src/devices/cpu/i8008/i8008.cpp
@@ -93,7 +93,7 @@ void i8008_device::device_start()
state_add(I8008_L, "L", m_L);
for (int addrnum = 0; addrnum < 8; addrnum++)
- state_add(I8008_ADDR1 + addrnum, strformat("ADDR%d", addrnum + 1).c_str(), m_ADDR[addrnum].w.l).mask(0xfff);
+ state_add(I8008_ADDR1 + addrnum, string_format("ADDR%d", addrnum + 1).c_str(), m_ADDR[addrnum].w.l).mask(0xfff);
init_tables();
}
@@ -191,7 +191,7 @@ void i8008_device::state_string_export(const device_state_entry &entry, std::str
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c",
+ str = string_format("%c%c%c%c",
m_CF ? 'C':'.',
m_ZF ? 'Z':'.',
m_SF ? 'S':'.',
diff --git a/src/devices/cpu/i8085/i8085.cpp b/src/devices/cpu/i8085/i8085.cpp
index 308de09e4a1..f8ea5275984 100644
--- a/src/devices/cpu/i8085/i8085.cpp
+++ b/src/devices/cpu/i8085/i8085.cpp
@@ -1053,7 +1053,7 @@ void i8085a_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_AF.b.l & 0x80 ? 'S':'.',
m_AF.b.l & 0x40 ? 'Z':'.',
m_AF.b.l & 0x20 ? 'X':'.', // X5
diff --git a/src/devices/cpu/i8089/i8089.cpp b/src/devices/cpu/i8089/i8089.cpp
index ade9e4f768b..9394206e179 100644
--- a/src/devices/cpu/i8089/i8089.cpp
+++ b/src/devices/cpu/i8089/i8089.cpp
@@ -168,30 +168,30 @@ void i8089_device::state_string_export(const device_state_entry &entry, std::str
switch (entry.index())
{
case SYSBUS:
- strprintf(str, "%c", sysbus_width() ? 'W' : '.');
+ str = string_format("%c", sysbus_width() ? 'W' : '.');
break;
case SOC:
- strprintf(str, "%c%c", remotebus_width() ? 'I' : '.', request_grant() ? 'R' : '.');
+ str = string_format("%c%c", remotebus_width() ? 'I' : '.', request_grant() ? 'R' : '.');
break;
case CH1_GA:
case CH2_GA:
- strprintf(str, "%d %05X", ch->m_r[i8089_channel::GA].t & 1, ch->m_r[i8089_channel::GA].w);
+ str = string_format("%d %05X", ch->m_r[i8089_channel::GA].t & 1, ch->m_r[i8089_channel::GA].w);
break;
case CH1_GB:
case CH2_GB:
- strprintf(str, "%d %05X", ch->m_r[i8089_channel::GB].t & 1, ch->m_r[i8089_channel::GB].w);
+ str = string_format("%d %05X", ch->m_r[i8089_channel::GB].t & 1, ch->m_r[i8089_channel::GB].w);
break;
case CH1_GC:
case CH2_GC:
- strprintf(str, "%d %05X", ch->m_r[i8089_channel::GC].t & 1, ch->m_r[i8089_channel::GC].w);
+ str = string_format("%d %05X", ch->m_r[i8089_channel::GC].t & 1, ch->m_r[i8089_channel::GC].w);
break;
case CH1_TP:
case CH2_TP:
- strprintf(str, "%d %05X", ch->m_r[i8089_channel::TP].t & 1, ch->m_r[i8089_channel::TP].w);
+ str = string_format("%d %05X", ch->m_r[i8089_channel::TP].t & 1, ch->m_r[i8089_channel::TP].w);
break;
case CH1_PSW:
case CH2_PSW:
- strprintf(str, "%c%s%c%s%s%s%c%c",
+ str = string_format("%c%s%c%s%s%s%c%c",
BIT(ch->m_r[i8089_channel::PSW].w, 7) ? 'P':'.',
BIT(ch->m_r[i8089_channel::PSW].w, 6) ? "XF":"..",
BIT(ch->m_r[i8089_channel::PSW].w, 5) ? 'B':'.',
diff --git a/src/devices/cpu/i86/i286.cpp b/src/devices/cpu/i86/i286.cpp
index 9f79007506a..7a7556deb8d 100644
--- a/src/devices/cpu/i86/i286.cpp
+++ b/src/devices/cpu/i86/i286.cpp
@@ -282,13 +282,13 @@ void i80286_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENPC:
- strprintf(str, "%08X", m_base[CS] + m_ip);
+ str = string_format("%08X", m_base[CS] + m_ip);
break;
case STATE_GENFLAGS:
{
UINT16 flags = CompressFlags();
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
flags & 0x8000 ? '0':'.',
flags & 0x4000 ? 'N':'.',
flags & 0x2000 ? 'I':'.',
diff --git a/src/devices/cpu/i86/i86.cpp b/src/devices/cpu/i86/i86.cpp
index 28669d16563..0c37e3b9c03 100644
--- a/src/devices/cpu/i86/i86.cpp
+++ b/src/devices/cpu/i86/i86.cpp
@@ -323,13 +323,13 @@ void i8086_common_cpu_device::state_string_export(const device_state_entry &entr
switch (entry.index())
{
case STATE_GENPC:
- strprintf(str, "%08X", (m_sregs[CS] << 4) + m_ip);
+ str = string_format("%08X", (m_sregs[CS] << 4) + m_ip);
break;
case STATE_GENFLAGS:
{
UINT16 flags = CompressFlags();
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
flags & 0x8000 ? '1':'.',
flags & 0x4000 ? '1':'.',
flags & 0x2000 ? '1':'.',
diff --git a/src/devices/cpu/i960/i960.cpp b/src/devices/cpu/i960/i960.cpp
index f754445379b..282aec610f6 100644
--- a/src/devices/cpu/i960/i960.cpp
+++ b/src/devices/cpu/i960/i960.cpp
@@ -2091,7 +2091,7 @@ void i960_cpu_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%s", conditions[m_AC & 7]);
+ str = string_format("%s", conditions[m_AC & 7]);
break;
}
}
diff --git a/src/devices/cpu/ie15/ie15.cpp b/src/devices/cpu/ie15/ie15.cpp
index 87de1cb2217..6adbc4feb6f 100644
--- a/src/devices/cpu/ie15/ie15.cpp
+++ b/src/devices/cpu/ie15/ie15.cpp
@@ -65,7 +65,7 @@ void ie15_device::device_start()
state_add(IE15_A, "A", m_A);
for (int ireg = 0; ireg < 32; ireg++)
- state_add(IE15_R0 + ireg, strformat("R%d", ireg).c_str(), m_REGS[ireg]);
+ state_add(IE15_R0 + ireg, string_format("R%d", ireg).c_str(), m_REGS[ireg]);
}
//-------------------------------------------------
@@ -137,7 +137,7 @@ void ie15_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c",
+ str = string_format("%c%c%c",
m_CF ? 'C':'.',
m_ZF ? 'Z':'.',
m_RF ? 'R':'.');
diff --git a/src/devices/cpu/jaguar/jaguar.cpp b/src/devices/cpu/jaguar/jaguar.cpp
index 000d6375cce..48b1031bd5f 100644
--- a/src/devices/cpu/jaguar/jaguar.cpp
+++ b/src/devices/cpu/jaguar/jaguar.cpp
@@ -405,7 +405,7 @@ void jaguar_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c",
FLAGS & 0x8000 ? 'D':'.',
FLAGS & 0x4000 ? 'A':'.',
FLAGS & 0x0100 ? '4':'.',
diff --git a/src/devices/cpu/lc8670/lc8670.cpp b/src/devices/cpu/lc8670/lc8670.cpp
index d24b3f64775..9eeb643000b 100644
--- a/src/devices/cpu/lc8670/lc8670.cpp
+++ b/src/devices/cpu/lc8670/lc8670.cpp
@@ -374,7 +374,7 @@ void lc8670_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%s%s%s%s",
+ str = string_format("%s%s%s%s",
GET_CY ? "CY" : "..",
GET_AC ? "AC" : "..",
GET_OV ? "OV" : "..",
diff --git a/src/devices/cpu/lh5801/lh5801.cpp b/src/devices/cpu/lh5801/lh5801.cpp
index 2e748c63905..76902136c29 100644
--- a/src/devices/cpu/lh5801/lh5801.cpp
+++ b/src/devices/cpu/lh5801/lh5801.cpp
@@ -147,7 +147,7 @@ void lh5801_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_t&0x80?'1':'0',
m_t&0x40?'1':'0',
m_t&0x20?'1':'0',
diff --git a/src/devices/cpu/lr35902/lr35902.cpp b/src/devices/cpu/lr35902/lr35902.cpp
index 8f365c18c54..1a7634c21e9 100644
--- a/src/devices/cpu/lr35902/lr35902.cpp
+++ b/src/devices/cpu/lr35902/lr35902.cpp
@@ -185,11 +185,11 @@ void lr35902_cpu_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case LR35902_SPEED:
- strprintf(str, "%02X", 0x7E | ((m_gb_speed - 1) << 7) | m_gb_speed_change_pending);
+ str = string_format("%02X", 0x7E | ((m_gb_speed - 1) << 7) | m_gb_speed_change_pending);
break;
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c",
+ str = string_format("%c%c%c%c",
m_F & FLAG_Z ? 'Z' : '.',
m_F & FLAG_N ? 'N' : '.',
m_F & FLAG_H ? 'H' : '.',
diff --git a/src/devices/cpu/m37710/m37710.cpp b/src/devices/cpu/m37710/m37710.cpp
index 43568915dce..449af4c45e8 100644
--- a/src/devices/cpu/m37710/m37710.cpp
+++ b/src/devices/cpu/m37710/m37710.cpp
@@ -1141,7 +1141,7 @@ void m37710_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_flag_n & NFLAG_SET ? 'N':'.',
m_flag_v & VFLAG_SET ? 'V':'.',
m_flag_m & MFLAG_SET ? 'M':'.',
diff --git a/src/devices/cpu/m6502/m6502.cpp b/src/devices/cpu/m6502/m6502.cpp
index 0ecd12258f1..a6bf400151c 100644
--- a/src/devices/cpu/m6502/m6502.cpp
+++ b/src/devices/cpu/m6502/m6502.cpp
@@ -444,7 +444,7 @@ void m6502_device::state_string_export(const device_state_entry &entry, std::str
switch(entry.index()) {
case STATE_GENFLAGS:
case M6502_P:
- strprintf(str, "%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c",
P & F_N ? 'N' : '.',
P & F_V ? 'V' : '.',
P & F_D ? 'D' : '.',
diff --git a/src/devices/cpu/m6502/m65ce02.cpp b/src/devices/cpu/m6502/m65ce02.cpp
index 01f6fe34b2f..ca7d72289a1 100644
--- a/src/devices/cpu/m6502/m65ce02.cpp
+++ b/src/devices/cpu/m6502/m65ce02.cpp
@@ -80,7 +80,7 @@ void m65ce02_device::state_string_export(const device_state_entry &entry, std::s
switch(entry.index()) {
case STATE_GENFLAGS:
case M6502_P:
- strprintf(str, "%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c",
P & F_N ? 'N' : '.',
P & F_V ? 'V' : '.',
P & F_E ? 'E' : '.',
@@ -90,7 +90,7 @@ void m65ce02_device::state_string_export(const device_state_entry &entry, std::s
P & F_C ? 'C' : '.');
break;
case M65CE02_B:
- strprintf(str, "%02x", B >> 8);
+ str = string_format("%02x", B >> 8);
break;
}
}
diff --git a/src/devices/cpu/m6502/m740.cpp b/src/devices/cpu/m6502/m740.cpp
index 061f6dd75c7..b5dc72f87f9 100644
--- a/src/devices/cpu/m6502/m740.cpp
+++ b/src/devices/cpu/m6502/m740.cpp
@@ -58,7 +58,7 @@ void m740_device::state_string_export(const device_state_entry &entry, std::stri
switch(entry.index()) {
case STATE_GENFLAGS:
case M6502_P:
- strprintf(str, "%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c",
P & F_N ? 'N' : '.',
P & F_V ? 'V' : '.',
P & F_T ? 'T' : '.',
diff --git a/src/devices/cpu/m6800/6800ops.inc b/src/devices/cpu/m6800/6800ops.inc
index 078529d16ab..d6c3d7634a5 100644
--- a/src/devices/cpu/m6800/6800ops.inc
+++ b/src/devices/cpu/m6800/6800ops.inc
@@ -2305,4 +2305,4 @@ OP_HANDLER( stx_nsc )
CLR_NZV;
SET_NZ8(val);
WM(EAD,val);
-} \ No newline at end of file
+}
diff --git a/src/devices/cpu/m6800/m6800.cpp b/src/devices/cpu/m6800/m6800.cpp
index 730d7a1be4b..ecdcfa95186 100644
--- a/src/devices/cpu/m6800/m6800.cpp
+++ b/src/devices/cpu/m6800/m6800.cpp
@@ -1145,7 +1145,7 @@ void m6800_cpu_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_cc & 0x80 ? '?':'.',
m_cc & 0x40 ? '?':'.',
m_cc & 0x20 ? 'H':'.',
diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp
index aaa1db079cf..02809436472 100644
--- a/src/devices/cpu/m68000/m68kcpu.cpp
+++ b/src/devices/cpu/m68000/m68kcpu.cpp
@@ -1173,40 +1173,40 @@ void m68000_base_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case M68K_FP0:
- strprintf(str,"%f", fx80_to_double(REG_FP(this)[0]));
+ str = string_format("%f", fx80_to_double(REG_FP(this)[0]));
break;
case M68K_FP1:
- strprintf(str,"%f", fx80_to_double(REG_FP(this)[1]));
+ str = string_format("%f", fx80_to_double(REG_FP(this)[1]));
break;
case M68K_FP2:
- strprintf(str,"%f", fx80_to_double(REG_FP(this)[2]));
+ str = string_format("%f", fx80_to_double(REG_FP(this)[2]));
break;
case M68K_FP3:
- strprintf(str,"%f", fx80_to_double(REG_FP(this)[3]));
+ str = string_format("%f", fx80_to_double(REG_FP(this)[3]));
break;
case M68K_FP4:
- strprintf(str,"%f", fx80_to_double(REG_FP(this)[4]));
+ str = string_format("%f", fx80_to_double(REG_FP(this)[4]));
break;
case M68K_FP5:
- strprintf(str,"%f", fx80_to_double(REG_FP(this)[5]));
+ str = string_format("%f", fx80_to_double(REG_FP(this)[5]));
break;
case M68K_FP6:
- strprintf(str,"%f", fx80_to_double(REG_FP(this)[6]));
+ str = string_format("%f", fx80_to_double(REG_FP(this)[6]));
break;
case M68K_FP7:
- strprintf(str,"%f", fx80_to_double(REG_FP(this)[7]));
+ str = string_format("%f", fx80_to_double(REG_FP(this)[7]));
break;
case STATE_GENFLAGS:
sr = m68ki_get_sr(this);
- strprintf(str,"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
sr & 0x8000 ? 'T':'.',
sr & 0x4000 ? 't':'.',
sr & 0x2000 ? 'S':'.',
@@ -1735,10 +1735,10 @@ void m68000_base_device::define_state(void)
state_add(M68K_MSP, "MSP", iotemp).callimport().callexport();
for (int regnum = 0; regnum < 8; regnum++) {
- state_add(M68K_D0 + regnum, strformat("D%d", regnum).c_str(), dar[regnum]);
+ state_add(M68K_D0 + regnum, string_format("D%d", regnum).c_str(), dar[regnum]);
}
for (int regnum = 0; regnum < 8; regnum++) {
- state_add(M68K_A0 + regnum, strformat("A%d", regnum).c_str(), dar[8 + regnum]);
+ state_add(M68K_A0 + regnum, string_format("A%d", regnum).c_str(), dar[8 + regnum]);
}
state_add(M68K_PREF_ADDR, "PREF_ADDR", pref_addr).mask(addrmask);
@@ -1760,7 +1760,7 @@ void m68000_base_device::define_state(void)
if (cpu_type & MASK_030_OR_LATER)
{
for (int regnum = 0; regnum < 8; regnum++) {
- state_add(M68K_FP0 + regnum, strformat("FP%d", regnum).c_str(), iotemp).callimport().callexport().formatstr("%10s");
+ state_add(M68K_FP0 + regnum, string_format("FP%d", regnum).c_str(), iotemp).callimport().callexport().formatstr("%10s");
}
state_add(M68K_FPSR, "FPSR", fpsr);
state_add(M68K_FPCR, "FPCR", fpcr);
diff --git a/src/devices/cpu/m6805/m6805.cpp b/src/devices/cpu/m6805/m6805.cpp
index 0bb5ac3877e..1ea1b7ccb03 100644
--- a/src/devices/cpu/m6805/m6805.cpp
+++ b/src/devices/cpu/m6805/m6805.cpp
@@ -498,7 +498,7 @@ void m6805_base_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
(m_cc & 0x80) ? '?' : '.',
(m_cc & 0x40) ? '?' : '.',
(m_cc & 0x20) ? '?' : '.',
diff --git a/src/devices/cpu/m6809/m6809.cpp b/src/devices/cpu/m6809/m6809.cpp
index 61337f180f0..8ebba313047 100644
--- a/src/devices/cpu/m6809/m6809.cpp
+++ b/src/devices/cpu/m6809/m6809.cpp
@@ -307,7 +307,7 @@ void m6809_base_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
(m_cc & 0x80) ? 'E' : '.',
(m_cc & 0x40) ? 'F' : '.',
(m_cc & 0x20) ? 'H' : '.',
diff --git a/src/devices/cpu/mb86233/mb86233.cpp b/src/devices/cpu/mb86233/mb86233.cpp
index 341309d8c12..fed57fc9ddc 100644
--- a/src/devices/cpu/mb86233/mb86233.cpp
+++ b/src/devices/cpu/mb86233/mb86233.cpp
@@ -166,7 +166,7 @@ void mb86233_cpu_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c", (m_sr & SIGN_FLAG) ? 'N' : 'n', (m_sr & ZERO_FLAG) ? 'Z' : 'z');
+ str = string_format("%c%c", (m_sr & SIGN_FLAG) ? 'N' : 'n', (m_sr & ZERO_FLAG) ? 'Z' : 'z');
break;
}
}
diff --git a/src/devices/cpu/mb86235/mb86235.cpp b/src/devices/cpu/mb86235/mb86235.cpp
index edcc6a0471f..ef42221548e 100644
--- a/src/devices/cpu/mb86235/mb86235.cpp
+++ b/src/devices/cpu/mb86235/mb86235.cpp
@@ -113,7 +113,7 @@ void mb86235_cpu_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c",
+ str = string_format("%c%c%c%c",
m_flags & 0x80 ? 'S':'.',
m_flags & 0x40 ? 'Z':'.',
m_flags & 0x20 ? 'V':'.',
diff --git a/src/devices/cpu/mb88xx/mb88xx.cpp b/src/devices/cpu/mb88xx/mb88xx.cpp
index 9ab07538e6e..ce915c6d63b 100644
--- a/src/devices/cpu/mb88xx/mb88xx.cpp
+++ b/src/devices/cpu/mb88xx/mb88xx.cpp
@@ -274,7 +274,7 @@ void mb88_cpu_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c",
TEST_ST() ? 'T' : 't',
TEST_ZF() ? 'Z' : 'z',
TEST_CF() ? 'C' : 'c',
diff --git a/src/devices/cpu/mc68hc11/mc68hc11.cpp b/src/devices/cpu/mc68hc11/mc68hc11.cpp
index a208a618c4b..0d5a54b402e 100644
--- a/src/devices/cpu/mc68hc11/mc68hc11.cpp
+++ b/src/devices/cpu/mc68hc11/mc68hc11.cpp
@@ -453,7 +453,7 @@ void mc68hc11_cpu_device::state_string_export(const device_state_entry &entry, s
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
(m_ccr & CC_S) ? 'S' : '.',
(m_ccr & CC_X) ? 'X' : '.',
(m_ccr & CC_H) ? 'H' : '.',
diff --git a/src/devices/cpu/mcs48/mcs48.cpp b/src/devices/cpu/mcs48/mcs48.cpp
index b49899ca498..b9de4b49f5c 100644
--- a/src/devices/cpu/mcs48/mcs48.cpp
+++ b/src/devices/cpu/mcs48/mcs48.cpp
@@ -979,7 +979,7 @@ void mcs48_cpu_device::device_start()
state_add(MCS48_P2, "P2", m_p2);
for (int regnum = 0; regnum < 8; regnum++) {
- state_add(MCS48_R0 + regnum, strformat("R%d", regnum).c_str(), m_rtemp).callimport().callexport();
+ state_add(MCS48_R0 + regnum, string_format("R%d", regnum).c_str(), m_rtemp).callimport().callexport();
}
state_add(MCS48_EA, "EA", m_ea).mask(0x1);
@@ -1301,7 +1301,7 @@ void mcs48_cpu_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c %c%c%c%c%c%c%c%c",
+ str = string_format("%c%c %c%c%c%c%c%c%c%c",
m_irq_state ? 'I':'.',
m_a11 ? 'M':'.',
m_psw & 0x80 ? 'C':'.',
diff --git a/src/devices/cpu/mcs51/mcs51.cpp b/src/devices/cpu/mcs51/mcs51.cpp
index f3d5816d722..f0b0a1d3723 100644
--- a/src/devices/cpu/mcs51/mcs51.cpp
+++ b/src/devices/cpu/mcs51/mcs51.cpp
@@ -2218,7 +2218,7 @@ void mcs51_cpu_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str,"%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
PSW & 0x80 ? 'C':'.',
PSW & 0x40 ? 'A':'.',
PSW & 0x20 ? 'F':'.',
diff --git a/src/devices/cpu/mcs96/mcs96.cpp b/src/devices/cpu/mcs96/mcs96.cpp
index 3c8284f8555..cca35f9ac42 100644
--- a/src/devices/cpu/mcs96/mcs96.cpp
+++ b/src/devices/cpu/mcs96/mcs96.cpp
@@ -133,7 +133,7 @@ void mcs96_device::state_string_export(const device_state_entry &entry, std::str
switch(entry.index()) {
case STATE_GENFLAGS:
case MCS96_PSW:
- strprintf(str, "%c%c%c%c%c%c%c %c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c %c%c%c%c%c%c%c%c",
PSW & F_Z ? 'Z' : '.',
PSW & F_N ? 'N' : '.',
PSW & F_V ? 'V' : '.',
diff --git a/src/devices/cpu/melps4/melps4.cpp b/src/devices/cpu/melps4/melps4.cpp
index d228b42fbee..2602c6d0194 100644
--- a/src/devices/cpu/melps4/melps4.cpp
+++ b/src/devices/cpu/melps4/melps4.cpp
@@ -48,7 +48,7 @@ void melps4_cpu_device::state_string_export(const device_state_entry &entry, std
{
// obviously not from a single flags register, letters are made up
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c %c%c%c",
+ str = string_format("%c%c%c%c%c %c%c%c",
m_intp ? 'P':'p',
m_inte ? 'I':'i',
m_sm ? 'S':'s',
diff --git a/src/devices/cpu/minx/minx.cpp b/src/devices/cpu/minx/minx.cpp
index bae0338da76..8e812dffcde 100644
--- a/src/devices/cpu/minx/minx.cpp
+++ b/src/devices/cpu/minx/minx.cpp
@@ -126,7 +126,7 @@ void minx_cpu_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c-%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c-%c%c%c%c%c",
m_F & FLAG_I ? 'I' : '.',
m_F & FLAG_D ? 'D' : '.',
m_F & FLAG_L ? 'L' : '.',
diff --git a/src/devices/cpu/mips/mips3.cpp b/src/devices/cpu/mips/mips3.cpp
index 711b9c3edf4..20d82bd3725 100644
--- a/src/devices/cpu/mips/mips3.cpp
+++ b/src/devices/cpu/mips/mips3.cpp
@@ -645,263 +645,263 @@ void mips3_device::state_string_export(const device_state_entry &entry, std::str
switch (entry.index())
{
case MIPS3_FPS0:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][0]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][0]);
break;
case MIPS3_FPD0:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][0]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][0]);
break;
case MIPS3_FPS1:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][1]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][1]);
break;
case MIPS3_FPD1:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][1]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][1]);
break;
case MIPS3_FPS2:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][2]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][2]);
break;
case MIPS3_FPD2:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][2]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][2]);
break;
case MIPS3_FPS3:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][3]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][3]);
break;
case MIPS3_FPD3:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][3]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][3]);
break;
case MIPS3_FPS4:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][4]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][4]);
break;
case MIPS3_FPD4:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][4]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][4]);
break;
case MIPS3_FPS5:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][5]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][5]);
break;
case MIPS3_FPD5:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][5]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][5]);
break;
case MIPS3_FPS6:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][6]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][6]);
break;
case MIPS3_FPD6:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][6]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][6]);
break;
case MIPS3_FPS7:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][7]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][7]);
break;
case MIPS3_FPD7:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][7]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][7]);
break;
case MIPS3_FPS8:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][8]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][8]);
break;
case MIPS3_FPD8:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][8]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][8]);
break;
case MIPS3_FPS9:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][9]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][9]);
break;
case MIPS3_FPD9:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][9]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][9]);
break;
case MIPS3_FPS10:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][10]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][10]);
break;
case MIPS3_FPD10:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][10]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][10]);
break;
case MIPS3_FPS11:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][11]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][11]);
break;
case MIPS3_FPD11:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][11]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][11]);
break;
case MIPS3_FPS12:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][12]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][12]);
break;
case MIPS3_FPD12:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][12]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][12]);
break;
case MIPS3_FPS13:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][13]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][13]);
break;
case MIPS3_FPD13:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][13]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][13]);
break;
case MIPS3_FPS14:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][14]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][14]);
break;
case MIPS3_FPD14:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][14]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][14]);
break;
case MIPS3_FPS15:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][15]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][15]);
break;
case MIPS3_FPD15:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][15]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][15]);
break;
case MIPS3_FPS16:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][16]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][16]);
break;
case MIPS3_FPD16:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][16]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][16]);
break;
case MIPS3_FPS17:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][17]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][17]);
break;
case MIPS3_FPD17:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][17]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][17]);
break;
case MIPS3_FPS18:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][18]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][18]);
break;
case MIPS3_FPD18:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][18]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][18]);
break;
case MIPS3_FPS19:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][19]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][19]);
break;
case MIPS3_FPD19:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][19]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][19]);
break;
case MIPS3_FPS20:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][20]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][20]);
break;
case MIPS3_FPD20:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][20]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][20]);
break;
case MIPS3_FPS21:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][21]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][21]);
break;
case MIPS3_FPD21:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][21]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][21]);
break;
case MIPS3_FPS22:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][22]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][22]);
break;
case MIPS3_FPD22:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][22]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][22]);
break;
case MIPS3_FPS23:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][23]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][23]);
break;
case MIPS3_FPD23:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][23]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][23]);
break;
case MIPS3_FPS24:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][24]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][24]);
break;
case MIPS3_FPD24:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][24]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][24]);
break;
case MIPS3_FPS25:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][25]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][25]);
break;
case MIPS3_FPD25:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][25]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][25]);
break;
case MIPS3_FPS26:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][26]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][26]);
break;
case MIPS3_FPD26:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][26]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][26]);
break;
case MIPS3_FPS27:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][27]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][27]);
break;
case MIPS3_FPD27:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][27]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][27]);
break;
case MIPS3_FPS28:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][28]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][28]);
break;
case MIPS3_FPD28:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][28]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][28]);
break;
case MIPS3_FPS29:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][29]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][29]);
break;
case MIPS3_FPD29:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][29]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][29]);
break;
case MIPS3_FPS30:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][30]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][30]);
break;
case MIPS3_FPD30:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][30]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][30]);
break;
case MIPS3_FPS31:
- strprintf(str, "!%16g", *(float *)&m_core->cpr[1][31]);
+ str = string_format("!%16g", *(float *)&m_core->cpr[1][31]);
break;
case MIPS3_FPD31:
- strprintf(str, "!%16g", *(double *)&m_core->cpr[1][31]);
+ str = string_format("!%16g", *(double *)&m_core->cpr[1][31]);
break;
case STATE_GENFLAGS:
- strprintf(str, " ");
+ str = " ";
break;
}
}
diff --git a/src/devices/cpu/mips/mips3com.cpp b/src/devices/cpu/mips/mips3com.cpp
index 2fcf8de1844..d0b4b53c534 100644
--- a/src/devices/cpu/mips/mips3com.cpp
+++ b/src/devices/cpu/mips/mips3com.cpp
@@ -70,16 +70,16 @@ void mips3_device::execute_set_input(int inputnum, int state)
void mips3_device::mips3com_update_cycle_counting()
{
/* modify the timer to go off */
- if (m_core->compare_armed && (m_core->cpr[0][COP0_Status] & SR_IMEX5))
+ if (m_core->compare_armed)
{
UINT32 count = (total_cycles() - m_core->count_zero_time) / 2;
UINT32 compare = m_core->cpr[0][COP0_Compare];
UINT32 delta = compare - count;
+ m_core->compare_armed = 0;
attotime newtime = cycles_to_attotime((UINT64)delta * 2);
m_compare_int_timer->adjust(newtime);
return;
}
- m_compare_int_timer->adjust(attotime::never);
}
@@ -199,6 +199,7 @@ void mips3_device::mips3com_tlbp()
TIMER_CALLBACK_MEMBER( mips3_device::compare_int_callback )
{
+ m_compare_int_timer->adjust(attotime::never);
set_input_line(MIPS3_IRQ5, ASSERT_LINE);
}
diff --git a/src/devices/cpu/mn10200/mn10200.cpp b/src/devices/cpu/mn10200/mn10200.cpp
index 1b4af66e13f..9293353c825 100644
--- a/src/devices/cpu/mn10200/mn10200.cpp
+++ b/src/devices/cpu/mn10200/mn10200.cpp
@@ -56,7 +56,7 @@ void mn10200_device::state_string_export(const device_state_entry &entry, std::s
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "S=%d irq=%s im=%d %c%c%c%c %c%c%c%c",
+ str = string_format("S=%d irq=%s im=%d %c%c%c%c %c%c%c%c",
(m_psw >> 12) & 3,
m_psw & FLAG_IE ? "on " : "off",
(m_psw >> 8) & 7,
diff --git a/src/devices/cpu/nec/nec.cpp b/src/devices/cpu/nec/nec.cpp
index 42ef74df7d5..610cd4e433c 100644
--- a/src/devices/cpu/nec/nec.cpp
+++ b/src/devices/cpu/nec/nec.cpp
@@ -444,7 +444,7 @@ void nec_common_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
flags & 0x8000 ? 'N':'E',
flags & 0x4000 ? '?':'.',
flags & 0x2000 ? '?':'.',
diff --git a/src/devices/cpu/nec/v25.cpp b/src/devices/cpu/nec/v25.cpp
index c5e62446cb0..2b0f4006e38 100644
--- a/src/devices/cpu/nec/v25.cpp
+++ b/src/devices/cpu/nec/v25.cpp
@@ -532,7 +532,7 @@ void v25_common_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c %d %c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c %d %c%c%c%c%c%c%c%c%c%c%c%c",
flags & 0x8000 ? 'N':'S',
(flags & 0x7000) >> 12,
flags & 0x0800 ? 'O':'.',
diff --git a/src/devices/cpu/pdp1/pdp1.cpp b/src/devices/cpu/pdp1/pdp1.cpp
index d7a9ad008fb..0a2cf9e1061 100644
--- a/src/devices/cpu/pdp1/pdp1.cpp
+++ b/src/devices/cpu/pdp1/pdp1.cpp
@@ -742,7 +742,7 @@ void pdp1_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c-%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c-%c%c%c%c%c%c",
(FLAGS & 040) ? '1' : '.',
(FLAGS & 020) ? '2' : '.',
(FLAGS & 010) ? '3' : '.',
diff --git a/src/devices/cpu/pic16c5x/pic16c5x.cpp b/src/devices/cpu/pic16c5x/pic16c5x.cpp
index c568b27b4c7..89d37d6f5ac 100644
--- a/src/devices/cpu/pic16c5x/pic16c5x.cpp
+++ b/src/devices/cpu/pic16c5x/pic16c5x.cpp
@@ -928,11 +928,11 @@ void pic16c5x_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case PIC16C5x_PSCL:
- strprintf(str, "%c%02X", ((m_OPTION & 0x08) ? 'W' : 'T'), m_prescaler);
+ str = string_format("%c%02X", ((m_OPTION & 0x08) ? 'W' : 'T'), m_prescaler);
break;
case STATE_GENFLAGS:
- strprintf(str, "%01x%c%c%c%c%c %c%c%c%03x",
+ str = string_format("%01x%c%c%c%c%c %c%c%c%03x",
(STATUS & 0xe0) >> 5,
STATUS & 0x10 ? '.':'O', /* WDT Overflow */
STATUS & 0x08 ? 'P':'D', /* Power/Down */
diff --git a/src/devices/cpu/pic16c62x/pic16c62x.cpp b/src/devices/cpu/pic16c62x/pic16c62x.cpp
index 9fb6e2324ab..024769d66a6 100644
--- a/src/devices/cpu/pic16c62x/pic16c62x.cpp
+++ b/src/devices/cpu/pic16c62x/pic16c62x.cpp
@@ -995,11 +995,11 @@ void pic16c62x_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case PIC16C62x_PSCL:
- strprintf(str, "%c%02X", ((m_OPTION & 0x08) ? 'W' : 'T'), m_prescaler);
+ str = string_format("%c%02X", ((m_OPTION & 0x08) ? 'W' : 'T'), m_prescaler);
break;
case STATE_GENFLAGS:
- strprintf(str, "%01x%c%c%c%c%c %c%c%c%03x",
+ str = string_format("%01x%c%c%c%c%c %c%c%c%03x",
(STATUS & 0xe0) >> 5,
STATUS & 0x10 ? '.':'O', /* WDT Overflow */
STATUS & 0x08 ? 'P':'D', /* Power/Down */
diff --git a/src/devices/cpu/powerpc/ppccom.cpp b/src/devices/cpu/powerpc/ppccom.cpp
index a9a26b29a5c..be0e14475d2 100644
--- a/src/devices/cpu/powerpc/ppccom.cpp
+++ b/src/devices/cpu/powerpc/ppccom.cpp
@@ -1014,131 +1014,131 @@ void ppc_device::state_string_export(const device_state_entry &entry, std::strin
switch (entry.index())
{
case PPC_F0:
- strprintf(str, "%12f", m_core->f[0]);
+ str = string_format("%12f", m_core->f[0]);
break;
case PPC_F1:
- strprintf(str, "%12f", m_core->f[1]);
+ str = string_format("%12f", m_core->f[1]);
break;
case PPC_F2:
- strprintf(str, "%12f", m_core->f[2]);
+ str = string_format("%12f", m_core->f[2]);
break;
case PPC_F3:
- strprintf(str, "%12f", m_core->f[3]);
+ str = string_format("%12f", m_core->f[3]);
break;
case PPC_F4:
- strprintf(str, "%12f", m_core->f[4]);
+ str = string_format("%12f", m_core->f[4]);
break;
case PPC_F5:
- strprintf(str, "%12f", m_core->f[5]);
+ str = string_format("%12f", m_core->f[5]);
break;
case PPC_F6:
- strprintf(str, "%12f", m_core->f[6]);
+ str = string_format("%12f", m_core->f[6]);
break;
case PPC_F7:
- strprintf(str, "%12f", m_core->f[7]);
+ str = string_format("%12f", m_core->f[7]);
break;
case PPC_F8:
- strprintf(str, "%12f", m_core->f[8]);
+ str = string_format("%12f", m_core->f[8]);
break;
case PPC_F9:
- strprintf(str, "%12f", m_core->f[9]);
+ str = string_format("%12f", m_core->f[9]);
break;
case PPC_F10:
- strprintf(str, "%12f", m_core->f[10]);
+ str = string_format("%12f", m_core->f[10]);
break;
case PPC_F11:
- strprintf(str, "%12f", m_core->f[11]);
+ str = string_format("%12f", m_core->f[11]);
break;
case PPC_F12:
- strprintf(str, "%12f", m_core->f[12]);
+ str = string_format("%12f", m_core->f[12]);
break;
case PPC_F13:
- strprintf(str, "%12f", m_core->f[13]);
+ str = string_format("%12f", m_core->f[13]);
break;
case PPC_F14:
- strprintf(str, "%12f", m_core->f[14]);
+ str = string_format("%12f", m_core->f[14]);
break;
case PPC_F15:
- strprintf(str, "%12f", m_core->f[15]);
+ str = string_format("%12f", m_core->f[15]);
break;
case PPC_F16:
- strprintf(str, "%12f", m_core->f[16]);
+ str = string_format("%12f", m_core->f[16]);
break;
case PPC_F17:
- strprintf(str, "%12f", m_core->f[17]);
+ str = string_format("%12f", m_core->f[17]);
break;
case PPC_F18:
- strprintf(str, "%12f", m_core->f[18]);
+ str = string_format("%12f", m_core->f[18]);
break;
case PPC_F19:
- strprintf(str, "%12f", m_core->f[19]);
+ str = string_format("%12f", m_core->f[19]);
break;
case PPC_F20:
- strprintf(str, "%12f", m_core->f[20]);
+ str = string_format("%12f", m_core->f[20]);
break;
case PPC_F21:
- strprintf(str, "%12f", m_core->f[21]);
+ str = string_format("%12f", m_core->f[21]);
break;
case PPC_F22:
- strprintf(str, "%12f", m_core->f[22]);
+ str = string_format("%12f", m_core->f[22]);
break;
case PPC_F23:
- strprintf(str, "%12f", m_core->f[23]);
+ str = string_format("%12f", m_core->f[23]);
break;
case PPC_F24:
- strprintf(str, "%12f", m_core->f[24]);
+ str = string_format("%12f", m_core->f[24]);
break;
case PPC_F25:
- strprintf(str, "%12f", m_core->f[25]);
+ str = string_format("%12f", m_core->f[25]);
break;
case PPC_F26:
- strprintf(str, "%12f", m_core->f[26]);
+ str = string_format("%12f", m_core->f[26]);
break;
case PPC_F27:
- strprintf(str, "%12f", m_core->f[27]);
+ str = string_format("%12f", m_core->f[27]);
break;
case PPC_F28:
- strprintf(str, "%12f", m_core->f[28]);
+ str = string_format("%12f", m_core->f[28]);
break;
case PPC_F29:
- strprintf(str, "%12f", m_core->f[29]);
+ str = string_format("%12f", m_core->f[29]);
break;
case PPC_F30:
- strprintf(str, "%12f", m_core->f[30]);
+ str = string_format("%12f", m_core->f[30]);
break;
case PPC_F31:
- strprintf(str, "%12f", m_core->f[31]);
+ str = string_format("%12f", m_core->f[31]);
break;
}
}
diff --git a/src/devices/cpu/pps4/pps4.cpp b/src/devices/cpu/pps4/pps4.cpp
index 43c79059d4b..5ae8e822846 100644
--- a/src/devices/cpu/pps4/pps4.cpp
+++ b/src/devices/cpu/pps4/pps4.cpp
@@ -1557,7 +1557,7 @@ void pps4_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c",
+ str = string_format("%c%c%c",
m_C ? 'C':'.',
m_FF1 ? '1':'.',
m_FF2 ? '2':'.');
diff --git a/src/devices/cpu/psx/psx.cpp b/src/devices/cpu/psx/psx.cpp
index c3e2e340d24..2c4db7ecbc6 100644
--- a/src/devices/cpu/psx/psx.cpp
+++ b/src/devices/cpu/psx/psx.cpp
@@ -2033,11 +2033,11 @@ void psxcpu_device::state_string_export( const device_state_entry &entry, std::s
case PSXCPU_DELAYR:
if( m_delayr <= PSXCPU_DELAYR_NOTPC )
{
- strprintf(str, "%02x %-3s", m_delayr, delayn[m_delayr]);
+ str = string_format("%02x %-3s", m_delayr, delayn[m_delayr]);
}
else
{
- strprintf(str, "%02x ---", m_delayr);
+ str = string_format("%02x ---", m_delayr);
}
break;
}
diff --git a/src/devices/cpu/rsp/rsp.cpp b/src/devices/cpu/rsp/rsp.cpp
index 1939cb33b5f..246843fb6af 100644
--- a/src/devices/cpu/rsp/rsp.cpp
+++ b/src/devices/cpu/rsp/rsp.cpp
@@ -548,7 +548,7 @@ void rsp_device::state_string_export(const device_state_entry &entry, std::strin
}
else if (index == STATE_GENFLAGS)
{
- strprintf(str, "%s", "");
+ str = "";
}
}
diff --git a/src/devices/cpu/rsp/rspcp2.cpp b/src/devices/cpu/rsp/rspcp2.cpp
index cb45d906bde..ae5d2ade7e5 100644
--- a/src/devices/cpu/rsp/rspcp2.cpp
+++ b/src/devices/cpu/rsp/rspcp2.cpp
@@ -751,100 +751,100 @@ void rsp_cop2::state_string_export(const int index, std::string &str) const
switch (index)
{
case RSP_V0:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 0, 0), (UINT16)VREG_S( 0, 1), (UINT16)VREG_S( 0, 2), (UINT16)VREG_S( 0, 3), (UINT16)VREG_S( 0, 4), (UINT16)VREG_S( 0, 5), (UINT16)VREG_S( 0, 6), (UINT16)VREG_S( 0, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 0, 0), (UINT16)VREG_S( 0, 1), (UINT16)VREG_S( 0, 2), (UINT16)VREG_S( 0, 3), (UINT16)VREG_S( 0, 4), (UINT16)VREG_S( 0, 5), (UINT16)VREG_S( 0, 6), (UINT16)VREG_S( 0, 7));
break;
case RSP_V1:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 1, 0), (UINT16)VREG_S( 1, 1), (UINT16)VREG_S( 1, 2), (UINT16)VREG_S( 1, 3), (UINT16)VREG_S( 1, 4), (UINT16)VREG_S( 1, 5), (UINT16)VREG_S( 1, 6), (UINT16)VREG_S( 1, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 1, 0), (UINT16)VREG_S( 1, 1), (UINT16)VREG_S( 1, 2), (UINT16)VREG_S( 1, 3), (UINT16)VREG_S( 1, 4), (UINT16)VREG_S( 1, 5), (UINT16)VREG_S( 1, 6), (UINT16)VREG_S( 1, 7));
break;
case RSP_V2:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 2, 0), (UINT16)VREG_S( 2, 1), (UINT16)VREG_S( 2, 2), (UINT16)VREG_S( 2, 3), (UINT16)VREG_S( 2, 4), (UINT16)VREG_S( 2, 5), (UINT16)VREG_S( 2, 6), (UINT16)VREG_S( 2, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 2, 0), (UINT16)VREG_S( 2, 1), (UINT16)VREG_S( 2, 2), (UINT16)VREG_S( 2, 3), (UINT16)VREG_S( 2, 4), (UINT16)VREG_S( 2, 5), (UINT16)VREG_S( 2, 6), (UINT16)VREG_S( 2, 7));
break;
case RSP_V3:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 3, 0), (UINT16)VREG_S( 3, 1), (UINT16)VREG_S( 3, 2), (UINT16)VREG_S( 3, 3), (UINT16)VREG_S( 3, 4), (UINT16)VREG_S( 3, 5), (UINT16)VREG_S( 3, 6), (UINT16)VREG_S( 3, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 3, 0), (UINT16)VREG_S( 3, 1), (UINT16)VREG_S( 3, 2), (UINT16)VREG_S( 3, 3), (UINT16)VREG_S( 3, 4), (UINT16)VREG_S( 3, 5), (UINT16)VREG_S( 3, 6), (UINT16)VREG_S( 3, 7));
break;
case RSP_V4:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 4, 0), (UINT16)VREG_S( 4, 1), (UINT16)VREG_S( 4, 2), (UINT16)VREG_S( 4, 3), (UINT16)VREG_S( 4, 4), (UINT16)VREG_S( 4, 5), (UINT16)VREG_S( 4, 6), (UINT16)VREG_S( 4, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 4, 0), (UINT16)VREG_S( 4, 1), (UINT16)VREG_S( 4, 2), (UINT16)VREG_S( 4, 3), (UINT16)VREG_S( 4, 4), (UINT16)VREG_S( 4, 5), (UINT16)VREG_S( 4, 6), (UINT16)VREG_S( 4, 7));
break;
case RSP_V5:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 5, 0), (UINT16)VREG_S( 5, 1), (UINT16)VREG_S( 5, 2), (UINT16)VREG_S( 5, 3), (UINT16)VREG_S( 5, 4), (UINT16)VREG_S( 5, 5), (UINT16)VREG_S( 5, 6), (UINT16)VREG_S( 5, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 5, 0), (UINT16)VREG_S( 5, 1), (UINT16)VREG_S( 5, 2), (UINT16)VREG_S( 5, 3), (UINT16)VREG_S( 5, 4), (UINT16)VREG_S( 5, 5), (UINT16)VREG_S( 5, 6), (UINT16)VREG_S( 5, 7));
break;
case RSP_V6:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 6, 0), (UINT16)VREG_S( 6, 1), (UINT16)VREG_S( 6, 2), (UINT16)VREG_S( 6, 3), (UINT16)VREG_S( 6, 4), (UINT16)VREG_S( 6, 5), (UINT16)VREG_S( 6, 6), (UINT16)VREG_S( 6, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 6, 0), (UINT16)VREG_S( 6, 1), (UINT16)VREG_S( 6, 2), (UINT16)VREG_S( 6, 3), (UINT16)VREG_S( 6, 4), (UINT16)VREG_S( 6, 5), (UINT16)VREG_S( 6, 6), (UINT16)VREG_S( 6, 7));
break;
case RSP_V7:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 7, 0), (UINT16)VREG_S( 7, 1), (UINT16)VREG_S( 7, 2), (UINT16)VREG_S( 7, 3), (UINT16)VREG_S( 7, 4), (UINT16)VREG_S( 7, 5), (UINT16)VREG_S( 7, 6), (UINT16)VREG_S( 7, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 7, 0), (UINT16)VREG_S( 7, 1), (UINT16)VREG_S( 7, 2), (UINT16)VREG_S( 7, 3), (UINT16)VREG_S( 7, 4), (UINT16)VREG_S( 7, 5), (UINT16)VREG_S( 7, 6), (UINT16)VREG_S( 7, 7));
break;
case RSP_V8:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 8, 0), (UINT16)VREG_S( 8, 1), (UINT16)VREG_S( 8, 2), (UINT16)VREG_S( 8, 3), (UINT16)VREG_S( 8, 4), (UINT16)VREG_S( 8, 5), (UINT16)VREG_S( 8, 6), (UINT16)VREG_S( 8, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 8, 0), (UINT16)VREG_S( 8, 1), (UINT16)VREG_S( 8, 2), (UINT16)VREG_S( 8, 3), (UINT16)VREG_S( 8, 4), (UINT16)VREG_S( 8, 5), (UINT16)VREG_S( 8, 6), (UINT16)VREG_S( 8, 7));
break;
case RSP_V9:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 9, 0), (UINT16)VREG_S( 9, 1), (UINT16)VREG_S( 9, 2), (UINT16)VREG_S( 9, 3), (UINT16)VREG_S( 9, 4), (UINT16)VREG_S( 9, 5), (UINT16)VREG_S( 9, 6), (UINT16)VREG_S( 9, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 9, 0), (UINT16)VREG_S( 9, 1), (UINT16)VREG_S( 9, 2), (UINT16)VREG_S( 9, 3), (UINT16)VREG_S( 9, 4), (UINT16)VREG_S( 9, 5), (UINT16)VREG_S( 9, 6), (UINT16)VREG_S( 9, 7));
break;
case RSP_V10:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(10, 0), (UINT16)VREG_S(10, 1), (UINT16)VREG_S(10, 2), (UINT16)VREG_S(10, 3), (UINT16)VREG_S(10, 4), (UINT16)VREG_S(10, 5), (UINT16)VREG_S(10, 6), (UINT16)VREG_S(10, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(10, 0), (UINT16)VREG_S(10, 1), (UINT16)VREG_S(10, 2), (UINT16)VREG_S(10, 3), (UINT16)VREG_S(10, 4), (UINT16)VREG_S(10, 5), (UINT16)VREG_S(10, 6), (UINT16)VREG_S(10, 7));
break;
case RSP_V11:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(11, 0), (UINT16)VREG_S(11, 1), (UINT16)VREG_S(11, 2), (UINT16)VREG_S(11, 3), (UINT16)VREG_S(11, 4), (UINT16)VREG_S(11, 5), (UINT16)VREG_S(11, 6), (UINT16)VREG_S(11, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(11, 0), (UINT16)VREG_S(11, 1), (UINT16)VREG_S(11, 2), (UINT16)VREG_S(11, 3), (UINT16)VREG_S(11, 4), (UINT16)VREG_S(11, 5), (UINT16)VREG_S(11, 6), (UINT16)VREG_S(11, 7));
break;
case RSP_V12:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(12, 0), (UINT16)VREG_S(12, 1), (UINT16)VREG_S(12, 2), (UINT16)VREG_S(12, 3), (UINT16)VREG_S(12, 4), (UINT16)VREG_S(12, 5), (UINT16)VREG_S(12, 6), (UINT16)VREG_S(12, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(12, 0), (UINT16)VREG_S(12, 1), (UINT16)VREG_S(12, 2), (UINT16)VREG_S(12, 3), (UINT16)VREG_S(12, 4), (UINT16)VREG_S(12, 5), (UINT16)VREG_S(12, 6), (UINT16)VREG_S(12, 7));
break;
case RSP_V13:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(13, 0), (UINT16)VREG_S(13, 1), (UINT16)VREG_S(13, 2), (UINT16)VREG_S(13, 3), (UINT16)VREG_S(13, 4), (UINT16)VREG_S(13, 5), (UINT16)VREG_S(13, 6), (UINT16)VREG_S(13, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(13, 0), (UINT16)VREG_S(13, 1), (UINT16)VREG_S(13, 2), (UINT16)VREG_S(13, 3), (UINT16)VREG_S(13, 4), (UINT16)VREG_S(13, 5), (UINT16)VREG_S(13, 6), (UINT16)VREG_S(13, 7));
break;
case RSP_V14:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(14, 0), (UINT16)VREG_S(14, 1), (UINT16)VREG_S(14, 2), (UINT16)VREG_S(14, 3), (UINT16)VREG_S(14, 4), (UINT16)VREG_S(14, 5), (UINT16)VREG_S(14, 6), (UINT16)VREG_S(14, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(14, 0), (UINT16)VREG_S(14, 1), (UINT16)VREG_S(14, 2), (UINT16)VREG_S(14, 3), (UINT16)VREG_S(14, 4), (UINT16)VREG_S(14, 5), (UINT16)VREG_S(14, 6), (UINT16)VREG_S(14, 7));
break;
case RSP_V15:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(15, 0), (UINT16)VREG_S(15, 1), (UINT16)VREG_S(15, 2), (UINT16)VREG_S(15, 3), (UINT16)VREG_S(15, 4), (UINT16)VREG_S(15, 5), (UINT16)VREG_S(15, 6), (UINT16)VREG_S(15, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(15, 0), (UINT16)VREG_S(15, 1), (UINT16)VREG_S(15, 2), (UINT16)VREG_S(15, 3), (UINT16)VREG_S(15, 4), (UINT16)VREG_S(15, 5), (UINT16)VREG_S(15, 6), (UINT16)VREG_S(15, 7));
break;
case RSP_V16:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(16, 0), (UINT16)VREG_S(16, 1), (UINT16)VREG_S(16, 2), (UINT16)VREG_S(16, 3), (UINT16)VREG_S(16, 4), (UINT16)VREG_S(16, 5), (UINT16)VREG_S(16, 6), (UINT16)VREG_S(16, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(16, 0), (UINT16)VREG_S(16, 1), (UINT16)VREG_S(16, 2), (UINT16)VREG_S(16, 3), (UINT16)VREG_S(16, 4), (UINT16)VREG_S(16, 5), (UINT16)VREG_S(16, 6), (UINT16)VREG_S(16, 7));
break;
case RSP_V17:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(17, 0), (UINT16)VREG_S(17, 1), (UINT16)VREG_S(17, 2), (UINT16)VREG_S(17, 3), (UINT16)VREG_S(17, 4), (UINT16)VREG_S(17, 5), (UINT16)VREG_S(17, 6), (UINT16)VREG_S(17, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(17, 0), (UINT16)VREG_S(17, 1), (UINT16)VREG_S(17, 2), (UINT16)VREG_S(17, 3), (UINT16)VREG_S(17, 4), (UINT16)VREG_S(17, 5), (UINT16)VREG_S(17, 6), (UINT16)VREG_S(17, 7));
break;
case RSP_V18:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(18, 0), (UINT16)VREG_S(18, 1), (UINT16)VREG_S(18, 2), (UINT16)VREG_S(18, 3), (UINT16)VREG_S(18, 4), (UINT16)VREG_S(18, 5), (UINT16)VREG_S(18, 6), (UINT16)VREG_S(18, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(18, 0), (UINT16)VREG_S(18, 1), (UINT16)VREG_S(18, 2), (UINT16)VREG_S(18, 3), (UINT16)VREG_S(18, 4), (UINT16)VREG_S(18, 5), (UINT16)VREG_S(18, 6), (UINT16)VREG_S(18, 7));
break;
case RSP_V19:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(19, 0), (UINT16)VREG_S(19, 1), (UINT16)VREG_S(19, 2), (UINT16)VREG_S(19, 3), (UINT16)VREG_S(19, 4), (UINT16)VREG_S(19, 5), (UINT16)VREG_S(19, 6), (UINT16)VREG_S(19, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(19, 0), (UINT16)VREG_S(19, 1), (UINT16)VREG_S(19, 2), (UINT16)VREG_S(19, 3), (UINT16)VREG_S(19, 4), (UINT16)VREG_S(19, 5), (UINT16)VREG_S(19, 6), (UINT16)VREG_S(19, 7));
break;
case RSP_V20:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(20, 0), (UINT16)VREG_S(20, 1), (UINT16)VREG_S(20, 2), (UINT16)VREG_S(20, 3), (UINT16)VREG_S(20, 4), (UINT16)VREG_S(20, 5), (UINT16)VREG_S(20, 6), (UINT16)VREG_S(20, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(20, 0), (UINT16)VREG_S(20, 1), (UINT16)VREG_S(20, 2), (UINT16)VREG_S(20, 3), (UINT16)VREG_S(20, 4), (UINT16)VREG_S(20, 5), (UINT16)VREG_S(20, 6), (UINT16)VREG_S(20, 7));
break;
case RSP_V21:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(21, 0), (UINT16)VREG_S(21, 1), (UINT16)VREG_S(21, 2), (UINT16)VREG_S(21, 3), (UINT16)VREG_S(21, 4), (UINT16)VREG_S(21, 5), (UINT16)VREG_S(21, 6), (UINT16)VREG_S(21, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(21, 0), (UINT16)VREG_S(21, 1), (UINT16)VREG_S(21, 2), (UINT16)VREG_S(21, 3), (UINT16)VREG_S(21, 4), (UINT16)VREG_S(21, 5), (UINT16)VREG_S(21, 6), (UINT16)VREG_S(21, 7));
break;
case RSP_V22:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(22, 0), (UINT16)VREG_S(22, 1), (UINT16)VREG_S(22, 2), (UINT16)VREG_S(22, 3), (UINT16)VREG_S(22, 4), (UINT16)VREG_S(22, 5), (UINT16)VREG_S(22, 6), (UINT16)VREG_S(22, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(22, 0), (UINT16)VREG_S(22, 1), (UINT16)VREG_S(22, 2), (UINT16)VREG_S(22, 3), (UINT16)VREG_S(22, 4), (UINT16)VREG_S(22, 5), (UINT16)VREG_S(22, 6), (UINT16)VREG_S(22, 7));
break;
case RSP_V23:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(23, 0), (UINT16)VREG_S(23, 1), (UINT16)VREG_S(23, 2), (UINT16)VREG_S(23, 3), (UINT16)VREG_S(23, 4), (UINT16)VREG_S(23, 5), (UINT16)VREG_S(23, 6), (UINT16)VREG_S(23, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(23, 0), (UINT16)VREG_S(23, 1), (UINT16)VREG_S(23, 2), (UINT16)VREG_S(23, 3), (UINT16)VREG_S(23, 4), (UINT16)VREG_S(23, 5), (UINT16)VREG_S(23, 6), (UINT16)VREG_S(23, 7));
break;
case RSP_V24:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(24, 0), (UINT16)VREG_S(24, 1), (UINT16)VREG_S(24, 2), (UINT16)VREG_S(24, 3), (UINT16)VREG_S(24, 4), (UINT16)VREG_S(24, 5), (UINT16)VREG_S(24, 6), (UINT16)VREG_S(24, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(24, 0), (UINT16)VREG_S(24, 1), (UINT16)VREG_S(24, 2), (UINT16)VREG_S(24, 3), (UINT16)VREG_S(24, 4), (UINT16)VREG_S(24, 5), (UINT16)VREG_S(24, 6), (UINT16)VREG_S(24, 7));
break;
case RSP_V25:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(25, 0), (UINT16)VREG_S(25, 1), (UINT16)VREG_S(25, 2), (UINT16)VREG_S(25, 3), (UINT16)VREG_S(25, 4), (UINT16)VREG_S(25, 5), (UINT16)VREG_S(25, 6), (UINT16)VREG_S(25, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(25, 0), (UINT16)VREG_S(25, 1), (UINT16)VREG_S(25, 2), (UINT16)VREG_S(25, 3), (UINT16)VREG_S(25, 4), (UINT16)VREG_S(25, 5), (UINT16)VREG_S(25, 6), (UINT16)VREG_S(25, 7));
break;
case RSP_V26:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(26, 0), (UINT16)VREG_S(26, 1), (UINT16)VREG_S(26, 2), (UINT16)VREG_S(26, 3), (UINT16)VREG_S(26, 4), (UINT16)VREG_S(26, 5), (UINT16)VREG_S(26, 6), (UINT16)VREG_S(26, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(26, 0), (UINT16)VREG_S(26, 1), (UINT16)VREG_S(26, 2), (UINT16)VREG_S(26, 3), (UINT16)VREG_S(26, 4), (UINT16)VREG_S(26, 5), (UINT16)VREG_S(26, 6), (UINT16)VREG_S(26, 7));
break;
case RSP_V27:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(27, 0), (UINT16)VREG_S(27, 1), (UINT16)VREG_S(27, 2), (UINT16)VREG_S(27, 3), (UINT16)VREG_S(27, 4), (UINT16)VREG_S(27, 5), (UINT16)VREG_S(27, 6), (UINT16)VREG_S(27, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(27, 0), (UINT16)VREG_S(27, 1), (UINT16)VREG_S(27, 2), (UINT16)VREG_S(27, 3), (UINT16)VREG_S(27, 4), (UINT16)VREG_S(27, 5), (UINT16)VREG_S(27, 6), (UINT16)VREG_S(27, 7));
break;
case RSP_V28:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(28, 0), (UINT16)VREG_S(28, 1), (UINT16)VREG_S(28, 2), (UINT16)VREG_S(28, 3), (UINT16)VREG_S(28, 4), (UINT16)VREG_S(28, 5), (UINT16)VREG_S(28, 6), (UINT16)VREG_S(28, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(28, 0), (UINT16)VREG_S(28, 1), (UINT16)VREG_S(28, 2), (UINT16)VREG_S(28, 3), (UINT16)VREG_S(28, 4), (UINT16)VREG_S(28, 5), (UINT16)VREG_S(28, 6), (UINT16)VREG_S(28, 7));
break;
case RSP_V29:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(29, 0), (UINT16)VREG_S(29, 1), (UINT16)VREG_S(29, 2), (UINT16)VREG_S(29, 3), (UINT16)VREG_S(29, 4), (UINT16)VREG_S(29, 5), (UINT16)VREG_S(29, 6), (UINT16)VREG_S(29, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(29, 0), (UINT16)VREG_S(29, 1), (UINT16)VREG_S(29, 2), (UINT16)VREG_S(29, 3), (UINT16)VREG_S(29, 4), (UINT16)VREG_S(29, 5), (UINT16)VREG_S(29, 6), (UINT16)VREG_S(29, 7));
break;
case RSP_V30:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(30, 0), (UINT16)VREG_S(30, 1), (UINT16)VREG_S(30, 2), (UINT16)VREG_S(30, 3), (UINT16)VREG_S(30, 4), (UINT16)VREG_S(30, 5), (UINT16)VREG_S(30, 6), (UINT16)VREG_S(30, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(30, 0), (UINT16)VREG_S(30, 1), (UINT16)VREG_S(30, 2), (UINT16)VREG_S(30, 3), (UINT16)VREG_S(30, 4), (UINT16)VREG_S(30, 5), (UINT16)VREG_S(30, 6), (UINT16)VREG_S(30, 7));
break;
case RSP_V31:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(31, 0), (UINT16)VREG_S(31, 1), (UINT16)VREG_S(31, 2), (UINT16)VREG_S(31, 3), (UINT16)VREG_S(31, 4), (UINT16)VREG_S(31, 5), (UINT16)VREG_S(31, 6), (UINT16)VREG_S(31, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(31, 0), (UINT16)VREG_S(31, 1), (UINT16)VREG_S(31, 2), (UINT16)VREG_S(31, 3), (UINT16)VREG_S(31, 4), (UINT16)VREG_S(31, 5), (UINT16)VREG_S(31, 6), (UINT16)VREG_S(31, 7));
break;
}
}
diff --git a/src/devices/cpu/rsp/rspcp2d.cpp b/src/devices/cpu/rsp/rspcp2d.cpp
index 4caacd28a0d..cdcfb175f47 100644
--- a/src/devices/cpu/rsp/rspcp2d.cpp
+++ b/src/devices/cpu/rsp/rspcp2d.cpp
@@ -152,100 +152,100 @@ void rsp_cop2_drc::state_string_export(const int index, std::string &str) const
switch (index)
{
case RSP_V0:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 0, 0), (UINT16)VREG_S( 0, 1), (UINT16)VREG_S( 0, 2), (UINT16)VREG_S( 0, 3), (UINT16)VREG_S( 0, 4), (UINT16)VREG_S( 0, 5), (UINT16)VREG_S( 0, 6), (UINT16)VREG_S( 0, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 0, 0), (UINT16)VREG_S( 0, 1), (UINT16)VREG_S( 0, 2), (UINT16)VREG_S( 0, 3), (UINT16)VREG_S( 0, 4), (UINT16)VREG_S( 0, 5), (UINT16)VREG_S( 0, 6), (UINT16)VREG_S( 0, 7));
break;
case RSP_V1:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 1, 0), (UINT16)VREG_S( 1, 1), (UINT16)VREG_S( 1, 2), (UINT16)VREG_S( 1, 3), (UINT16)VREG_S( 1, 4), (UINT16)VREG_S( 1, 5), (UINT16)VREG_S( 1, 6), (UINT16)VREG_S( 1, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 1, 0), (UINT16)VREG_S( 1, 1), (UINT16)VREG_S( 1, 2), (UINT16)VREG_S( 1, 3), (UINT16)VREG_S( 1, 4), (UINT16)VREG_S( 1, 5), (UINT16)VREG_S( 1, 6), (UINT16)VREG_S( 1, 7));
break;
case RSP_V2:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 2, 0), (UINT16)VREG_S( 2, 1), (UINT16)VREG_S( 2, 2), (UINT16)VREG_S( 2, 3), (UINT16)VREG_S( 2, 4), (UINT16)VREG_S( 2, 5), (UINT16)VREG_S( 2, 6), (UINT16)VREG_S( 2, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 2, 0), (UINT16)VREG_S( 2, 1), (UINT16)VREG_S( 2, 2), (UINT16)VREG_S( 2, 3), (UINT16)VREG_S( 2, 4), (UINT16)VREG_S( 2, 5), (UINT16)VREG_S( 2, 6), (UINT16)VREG_S( 2, 7));
break;
case RSP_V3:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 3, 0), (UINT16)VREG_S( 3, 1), (UINT16)VREG_S( 3, 2), (UINT16)VREG_S( 3, 3), (UINT16)VREG_S( 3, 4), (UINT16)VREG_S( 3, 5), (UINT16)VREG_S( 3, 6), (UINT16)VREG_S( 3, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 3, 0), (UINT16)VREG_S( 3, 1), (UINT16)VREG_S( 3, 2), (UINT16)VREG_S( 3, 3), (UINT16)VREG_S( 3, 4), (UINT16)VREG_S( 3, 5), (UINT16)VREG_S( 3, 6), (UINT16)VREG_S( 3, 7));
break;
case RSP_V4:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 4, 0), (UINT16)VREG_S( 4, 1), (UINT16)VREG_S( 4, 2), (UINT16)VREG_S( 4, 3), (UINT16)VREG_S( 4, 4), (UINT16)VREG_S( 4, 5), (UINT16)VREG_S( 4, 6), (UINT16)VREG_S( 4, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 4, 0), (UINT16)VREG_S( 4, 1), (UINT16)VREG_S( 4, 2), (UINT16)VREG_S( 4, 3), (UINT16)VREG_S( 4, 4), (UINT16)VREG_S( 4, 5), (UINT16)VREG_S( 4, 6), (UINT16)VREG_S( 4, 7));
break;
case RSP_V5:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 5, 0), (UINT16)VREG_S( 5, 1), (UINT16)VREG_S( 5, 2), (UINT16)VREG_S( 5, 3), (UINT16)VREG_S( 5, 4), (UINT16)VREG_S( 5, 5), (UINT16)VREG_S( 5, 6), (UINT16)VREG_S( 5, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 5, 0), (UINT16)VREG_S( 5, 1), (UINT16)VREG_S( 5, 2), (UINT16)VREG_S( 5, 3), (UINT16)VREG_S( 5, 4), (UINT16)VREG_S( 5, 5), (UINT16)VREG_S( 5, 6), (UINT16)VREG_S( 5, 7));
break;
case RSP_V6:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 6, 0), (UINT16)VREG_S( 6, 1), (UINT16)VREG_S( 6, 2), (UINT16)VREG_S( 6, 3), (UINT16)VREG_S( 6, 4), (UINT16)VREG_S( 6, 5), (UINT16)VREG_S( 6, 6), (UINT16)VREG_S( 6, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 6, 0), (UINT16)VREG_S( 6, 1), (UINT16)VREG_S( 6, 2), (UINT16)VREG_S( 6, 3), (UINT16)VREG_S( 6, 4), (UINT16)VREG_S( 6, 5), (UINT16)VREG_S( 6, 6), (UINT16)VREG_S( 6, 7));
break;
case RSP_V7:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 7, 0), (UINT16)VREG_S( 7, 1), (UINT16)VREG_S( 7, 2), (UINT16)VREG_S( 7, 3), (UINT16)VREG_S( 7, 4), (UINT16)VREG_S( 7, 5), (UINT16)VREG_S( 7, 6), (UINT16)VREG_S( 7, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 7, 0), (UINT16)VREG_S( 7, 1), (UINT16)VREG_S( 7, 2), (UINT16)VREG_S( 7, 3), (UINT16)VREG_S( 7, 4), (UINT16)VREG_S( 7, 5), (UINT16)VREG_S( 7, 6), (UINT16)VREG_S( 7, 7));
break;
case RSP_V8:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 8, 0), (UINT16)VREG_S( 8, 1), (UINT16)VREG_S( 8, 2), (UINT16)VREG_S( 8, 3), (UINT16)VREG_S( 8, 4), (UINT16)VREG_S( 8, 5), (UINT16)VREG_S( 8, 6), (UINT16)VREG_S( 8, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 8, 0), (UINT16)VREG_S( 8, 1), (UINT16)VREG_S( 8, 2), (UINT16)VREG_S( 8, 3), (UINT16)VREG_S( 8, 4), (UINT16)VREG_S( 8, 5), (UINT16)VREG_S( 8, 6), (UINT16)VREG_S( 8, 7));
break;
case RSP_V9:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 9, 0), (UINT16)VREG_S( 9, 1), (UINT16)VREG_S( 9, 2), (UINT16)VREG_S( 9, 3), (UINT16)VREG_S( 9, 4), (UINT16)VREG_S( 9, 5), (UINT16)VREG_S( 9, 6), (UINT16)VREG_S( 9, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S( 9, 0), (UINT16)VREG_S( 9, 1), (UINT16)VREG_S( 9, 2), (UINT16)VREG_S( 9, 3), (UINT16)VREG_S( 9, 4), (UINT16)VREG_S( 9, 5), (UINT16)VREG_S( 9, 6), (UINT16)VREG_S( 9, 7));
break;
case RSP_V10:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(10, 0), (UINT16)VREG_S(10, 1), (UINT16)VREG_S(10, 2), (UINT16)VREG_S(10, 3), (UINT16)VREG_S(10, 4), (UINT16)VREG_S(10, 5), (UINT16)VREG_S(10, 6), (UINT16)VREG_S(10, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(10, 0), (UINT16)VREG_S(10, 1), (UINT16)VREG_S(10, 2), (UINT16)VREG_S(10, 3), (UINT16)VREG_S(10, 4), (UINT16)VREG_S(10, 5), (UINT16)VREG_S(10, 6), (UINT16)VREG_S(10, 7));
break;
case RSP_V11:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(11, 0), (UINT16)VREG_S(11, 1), (UINT16)VREG_S(11, 2), (UINT16)VREG_S(11, 3), (UINT16)VREG_S(11, 4), (UINT16)VREG_S(11, 5), (UINT16)VREG_S(11, 6), (UINT16)VREG_S(11, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(11, 0), (UINT16)VREG_S(11, 1), (UINT16)VREG_S(11, 2), (UINT16)VREG_S(11, 3), (UINT16)VREG_S(11, 4), (UINT16)VREG_S(11, 5), (UINT16)VREG_S(11, 6), (UINT16)VREG_S(11, 7));
break;
case RSP_V12:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(12, 0), (UINT16)VREG_S(12, 1), (UINT16)VREG_S(12, 2), (UINT16)VREG_S(12, 3), (UINT16)VREG_S(12, 4), (UINT16)VREG_S(12, 5), (UINT16)VREG_S(12, 6), (UINT16)VREG_S(12, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(12, 0), (UINT16)VREG_S(12, 1), (UINT16)VREG_S(12, 2), (UINT16)VREG_S(12, 3), (UINT16)VREG_S(12, 4), (UINT16)VREG_S(12, 5), (UINT16)VREG_S(12, 6), (UINT16)VREG_S(12, 7));
break;
case RSP_V13:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(13, 0), (UINT16)VREG_S(13, 1), (UINT16)VREG_S(13, 2), (UINT16)VREG_S(13, 3), (UINT16)VREG_S(13, 4), (UINT16)VREG_S(13, 5), (UINT16)VREG_S(13, 6), (UINT16)VREG_S(13, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(13, 0), (UINT16)VREG_S(13, 1), (UINT16)VREG_S(13, 2), (UINT16)VREG_S(13, 3), (UINT16)VREG_S(13, 4), (UINT16)VREG_S(13, 5), (UINT16)VREG_S(13, 6), (UINT16)VREG_S(13, 7));
break;
case RSP_V14:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(14, 0), (UINT16)VREG_S(14, 1), (UINT16)VREG_S(14, 2), (UINT16)VREG_S(14, 3), (UINT16)VREG_S(14, 4), (UINT16)VREG_S(14, 5), (UINT16)VREG_S(14, 6), (UINT16)VREG_S(14, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(14, 0), (UINT16)VREG_S(14, 1), (UINT16)VREG_S(14, 2), (UINT16)VREG_S(14, 3), (UINT16)VREG_S(14, 4), (UINT16)VREG_S(14, 5), (UINT16)VREG_S(14, 6), (UINT16)VREG_S(14, 7));
break;
case RSP_V15:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(15, 0), (UINT16)VREG_S(15, 1), (UINT16)VREG_S(15, 2), (UINT16)VREG_S(15, 3), (UINT16)VREG_S(15, 4), (UINT16)VREG_S(15, 5), (UINT16)VREG_S(15, 6), (UINT16)VREG_S(15, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(15, 0), (UINT16)VREG_S(15, 1), (UINT16)VREG_S(15, 2), (UINT16)VREG_S(15, 3), (UINT16)VREG_S(15, 4), (UINT16)VREG_S(15, 5), (UINT16)VREG_S(15, 6), (UINT16)VREG_S(15, 7));
break;
case RSP_V16:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(16, 0), (UINT16)VREG_S(16, 1), (UINT16)VREG_S(16, 2), (UINT16)VREG_S(16, 3), (UINT16)VREG_S(16, 4), (UINT16)VREG_S(16, 5), (UINT16)VREG_S(16, 6), (UINT16)VREG_S(16, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(16, 0), (UINT16)VREG_S(16, 1), (UINT16)VREG_S(16, 2), (UINT16)VREG_S(16, 3), (UINT16)VREG_S(16, 4), (UINT16)VREG_S(16, 5), (UINT16)VREG_S(16, 6), (UINT16)VREG_S(16, 7));
break;
case RSP_V17:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(17, 0), (UINT16)VREG_S(17, 1), (UINT16)VREG_S(17, 2), (UINT16)VREG_S(17, 3), (UINT16)VREG_S(17, 4), (UINT16)VREG_S(17, 5), (UINT16)VREG_S(17, 6), (UINT16)VREG_S(17, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(17, 0), (UINT16)VREG_S(17, 1), (UINT16)VREG_S(17, 2), (UINT16)VREG_S(17, 3), (UINT16)VREG_S(17, 4), (UINT16)VREG_S(17, 5), (UINT16)VREG_S(17, 6), (UINT16)VREG_S(17, 7));
break;
case RSP_V18:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(18, 0), (UINT16)VREG_S(18, 1), (UINT16)VREG_S(18, 2), (UINT16)VREG_S(18, 3), (UINT16)VREG_S(18, 4), (UINT16)VREG_S(18, 5), (UINT16)VREG_S(18, 6), (UINT16)VREG_S(18, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(18, 0), (UINT16)VREG_S(18, 1), (UINT16)VREG_S(18, 2), (UINT16)VREG_S(18, 3), (UINT16)VREG_S(18, 4), (UINT16)VREG_S(18, 5), (UINT16)VREG_S(18, 6), (UINT16)VREG_S(18, 7));
break;
case RSP_V19:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(19, 0), (UINT16)VREG_S(19, 1), (UINT16)VREG_S(19, 2), (UINT16)VREG_S(19, 3), (UINT16)VREG_S(19, 4), (UINT16)VREG_S(19, 5), (UINT16)VREG_S(19, 6), (UINT16)VREG_S(19, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(19, 0), (UINT16)VREG_S(19, 1), (UINT16)VREG_S(19, 2), (UINT16)VREG_S(19, 3), (UINT16)VREG_S(19, 4), (UINT16)VREG_S(19, 5), (UINT16)VREG_S(19, 6), (UINT16)VREG_S(19, 7));
break;
case RSP_V20:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(20, 0), (UINT16)VREG_S(20, 1), (UINT16)VREG_S(20, 2), (UINT16)VREG_S(20, 3), (UINT16)VREG_S(20, 4), (UINT16)VREG_S(20, 5), (UINT16)VREG_S(20, 6), (UINT16)VREG_S(20, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(20, 0), (UINT16)VREG_S(20, 1), (UINT16)VREG_S(20, 2), (UINT16)VREG_S(20, 3), (UINT16)VREG_S(20, 4), (UINT16)VREG_S(20, 5), (UINT16)VREG_S(20, 6), (UINT16)VREG_S(20, 7));
break;
case RSP_V21:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(21, 0), (UINT16)VREG_S(21, 1), (UINT16)VREG_S(21, 2), (UINT16)VREG_S(21, 3), (UINT16)VREG_S(21, 4), (UINT16)VREG_S(21, 5), (UINT16)VREG_S(21, 6), (UINT16)VREG_S(21, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(21, 0), (UINT16)VREG_S(21, 1), (UINT16)VREG_S(21, 2), (UINT16)VREG_S(21, 3), (UINT16)VREG_S(21, 4), (UINT16)VREG_S(21, 5), (UINT16)VREG_S(21, 6), (UINT16)VREG_S(21, 7));
break;
case RSP_V22:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(22, 0), (UINT16)VREG_S(22, 1), (UINT16)VREG_S(22, 2), (UINT16)VREG_S(22, 3), (UINT16)VREG_S(22, 4), (UINT16)VREG_S(22, 5), (UINT16)VREG_S(22, 6), (UINT16)VREG_S(22, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(22, 0), (UINT16)VREG_S(22, 1), (UINT16)VREG_S(22, 2), (UINT16)VREG_S(22, 3), (UINT16)VREG_S(22, 4), (UINT16)VREG_S(22, 5), (UINT16)VREG_S(22, 6), (UINT16)VREG_S(22, 7));
break;
case RSP_V23:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(23, 0), (UINT16)VREG_S(23, 1), (UINT16)VREG_S(23, 2), (UINT16)VREG_S(23, 3), (UINT16)VREG_S(23, 4), (UINT16)VREG_S(23, 5), (UINT16)VREG_S(23, 6), (UINT16)VREG_S(23, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(23, 0), (UINT16)VREG_S(23, 1), (UINT16)VREG_S(23, 2), (UINT16)VREG_S(23, 3), (UINT16)VREG_S(23, 4), (UINT16)VREG_S(23, 5), (UINT16)VREG_S(23, 6), (UINT16)VREG_S(23, 7));
break;
case RSP_V24:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(24, 0), (UINT16)VREG_S(24, 1), (UINT16)VREG_S(24, 2), (UINT16)VREG_S(24, 3), (UINT16)VREG_S(24, 4), (UINT16)VREG_S(24, 5), (UINT16)VREG_S(24, 6), (UINT16)VREG_S(24, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(24, 0), (UINT16)VREG_S(24, 1), (UINT16)VREG_S(24, 2), (UINT16)VREG_S(24, 3), (UINT16)VREG_S(24, 4), (UINT16)VREG_S(24, 5), (UINT16)VREG_S(24, 6), (UINT16)VREG_S(24, 7));
break;
case RSP_V25:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(25, 0), (UINT16)VREG_S(25, 1), (UINT16)VREG_S(25, 2), (UINT16)VREG_S(25, 3), (UINT16)VREG_S(25, 4), (UINT16)VREG_S(25, 5), (UINT16)VREG_S(25, 6), (UINT16)VREG_S(25, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(25, 0), (UINT16)VREG_S(25, 1), (UINT16)VREG_S(25, 2), (UINT16)VREG_S(25, 3), (UINT16)VREG_S(25, 4), (UINT16)VREG_S(25, 5), (UINT16)VREG_S(25, 6), (UINT16)VREG_S(25, 7));
break;
case RSP_V26:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(26, 0), (UINT16)VREG_S(26, 1), (UINT16)VREG_S(26, 2), (UINT16)VREG_S(26, 3), (UINT16)VREG_S(26, 4), (UINT16)VREG_S(26, 5), (UINT16)VREG_S(26, 6), (UINT16)VREG_S(26, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(26, 0), (UINT16)VREG_S(26, 1), (UINT16)VREG_S(26, 2), (UINT16)VREG_S(26, 3), (UINT16)VREG_S(26, 4), (UINT16)VREG_S(26, 5), (UINT16)VREG_S(26, 6), (UINT16)VREG_S(26, 7));
break;
case RSP_V27:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(27, 0), (UINT16)VREG_S(27, 1), (UINT16)VREG_S(27, 2), (UINT16)VREG_S(27, 3), (UINT16)VREG_S(27, 4), (UINT16)VREG_S(27, 5), (UINT16)VREG_S(27, 6), (UINT16)VREG_S(27, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(27, 0), (UINT16)VREG_S(27, 1), (UINT16)VREG_S(27, 2), (UINT16)VREG_S(27, 3), (UINT16)VREG_S(27, 4), (UINT16)VREG_S(27, 5), (UINT16)VREG_S(27, 6), (UINT16)VREG_S(27, 7));
break;
case RSP_V28:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(28, 0), (UINT16)VREG_S(28, 1), (UINT16)VREG_S(28, 2), (UINT16)VREG_S(28, 3), (UINT16)VREG_S(28, 4), (UINT16)VREG_S(28, 5), (UINT16)VREG_S(28, 6), (UINT16)VREG_S(28, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(28, 0), (UINT16)VREG_S(28, 1), (UINT16)VREG_S(28, 2), (UINT16)VREG_S(28, 3), (UINT16)VREG_S(28, 4), (UINT16)VREG_S(28, 5), (UINT16)VREG_S(28, 6), (UINT16)VREG_S(28, 7));
break;
case RSP_V29:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(29, 0), (UINT16)VREG_S(29, 1), (UINT16)VREG_S(29, 2), (UINT16)VREG_S(29, 3), (UINT16)VREG_S(29, 4), (UINT16)VREG_S(29, 5), (UINT16)VREG_S(29, 6), (UINT16)VREG_S(29, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(29, 0), (UINT16)VREG_S(29, 1), (UINT16)VREG_S(29, 2), (UINT16)VREG_S(29, 3), (UINT16)VREG_S(29, 4), (UINT16)VREG_S(29, 5), (UINT16)VREG_S(29, 6), (UINT16)VREG_S(29, 7));
break;
case RSP_V30:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(30, 0), (UINT16)VREG_S(30, 1), (UINT16)VREG_S(30, 2), (UINT16)VREG_S(30, 3), (UINT16)VREG_S(30, 4), (UINT16)VREG_S(30, 5), (UINT16)VREG_S(30, 6), (UINT16)VREG_S(30, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(30, 0), (UINT16)VREG_S(30, 1), (UINT16)VREG_S(30, 2), (UINT16)VREG_S(30, 3), (UINT16)VREG_S(30, 4), (UINT16)VREG_S(30, 5), (UINT16)VREG_S(30, 6), (UINT16)VREG_S(30, 7));
break;
case RSP_V31:
- strprintf(str, "%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(31, 0), (UINT16)VREG_S(31, 1), (UINT16)VREG_S(31, 2), (UINT16)VREG_S(31, 3), (UINT16)VREG_S(31, 4), (UINT16)VREG_S(31, 5), (UINT16)VREG_S(31, 6), (UINT16)VREG_S(31, 7));
+ str = string_format("%04X|%04X|%04X|%04X|%04X|%04X|%04X|%04X", (UINT16)VREG_S(31, 0), (UINT16)VREG_S(31, 1), (UINT16)VREG_S(31, 2), (UINT16)VREG_S(31, 3), (UINT16)VREG_S(31, 4), (UINT16)VREG_S(31, 5), (UINT16)VREG_S(31, 6), (UINT16)VREG_S(31, 7));
break;
}
}
diff --git a/src/devices/cpu/s2650/s2650.cpp b/src/devices/cpu/s2650/s2650.cpp
index 8a257ff5a9e..02f343932d5 100644
--- a/src/devices/cpu/s2650/s2650.cpp
+++ b/src/devices/cpu/s2650/s2650.cpp
@@ -881,7 +881,7 @@ void s2650_device::state_string_export(const device_state_entry &entry, std::str
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
m_psu & 0x80 ? 'S':'.',
m_psu & 0x40 ? 'O':'.',
m_psu & 0x20 ? 'I':'.',
diff --git a/src/devices/cpu/saturn/saturn.cpp b/src/devices/cpu/saturn/saturn.cpp
index 3e25ae6b76f..98904446dd7 100644
--- a/src/devices/cpu/saturn/saturn.cpp
+++ b/src/devices/cpu/saturn/saturn.cpp
@@ -177,47 +177,47 @@ void saturn_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case SATURN_A:
- strprintf(str, Reg64Format, Reg64Data(m_reg[A]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[A]) );
break;
case SATURN_B:
- strprintf(str, Reg64Format, Reg64Data(m_reg[B]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[B]) );
break;
case SATURN_C:
- strprintf(str, Reg64Format, Reg64Data(m_reg[C]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[C]) );
break;
case SATURN_D:
- strprintf(str, Reg64Format, Reg64Data(m_reg[D]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[D]) );
break;
case SATURN_R0:
- strprintf(str, Reg64Format, Reg64Data(m_reg[R0]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[R0]) );
break;
case SATURN_R1:
- strprintf(str, Reg64Format, Reg64Data(m_reg[R1]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[R1]) );
break;
case SATURN_R2:
- strprintf(str, Reg64Format, Reg64Data(m_reg[R2]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[R2]) );
break;
case SATURN_R3:
- strprintf(str, Reg64Format, Reg64Data(m_reg[R3]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[R3]) );
break;
case SATURN_R4:
- strprintf(str, Reg64Format, Reg64Data(m_reg[R4]) );
+ str = string_format( Reg64Format, Reg64Data(m_reg[R4]) );
break;
case SATURN_IRQ_STATE:
- strprintf(str, "%c%c%c%i", m_in_irq?'S':'.', m_irq_enable?'e':'.', m_pending_irq?'p':'.', m_irq_state );
+ str = string_format( "%c%c%c%i", m_in_irq?'S':'.', m_irq_enable?'e':'.', m_pending_irq?'p':'.', m_irq_state );
break;
case STATE_GENFLAGS:
- strprintf(str, "%c%c", m_decimal?'D':'.', m_carry ? 'C':'.' );
+ str = string_format( "%c%c", m_decimal?'D':'.', m_carry ? 'C':'.' );
break;
}
}
diff --git a/src/devices/cpu/sc61860/sc61860.cpp b/src/devices/cpu/sc61860/sc61860.cpp
index 27251e10e78..ac63f371132 100644
--- a/src/devices/cpu/sc61860/sc61860.cpp
+++ b/src/devices/cpu/sc61860/sc61860.cpp
@@ -176,7 +176,7 @@ void sc61860_device::state_string_export(const device_state_entry &entry, std::s
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c", m_zero ? 'Z' : '.', m_carry ? 'C' : '.');
+ str = string_format("%c%c", m_zero ? 'Z' : '.', m_carry ? 'C' : '.');
break;
}
}
diff --git a/src/devices/cpu/scmp/scmp.cpp b/src/devices/cpu/scmp/scmp.cpp
index 2e1cf4cd021..62717f0035e 100644
--- a/src/devices/cpu/scmp/scmp.cpp
+++ b/src/devices/cpu/scmp/scmp.cpp
@@ -552,7 +552,7 @@ void scmp_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
(m_SR & 0x80) ? 'C' : '.',
(m_SR & 0x40) ? 'V' : '.',
(m_SR & 0x20) ? 'B' : '.',
diff --git a/src/devices/cpu/score/score.cpp b/src/devices/cpu/score/score.cpp
index 984f832b464..a10b5320996 100644
--- a/src/devices/cpu/score/score.cpp
+++ b/src/devices/cpu/score/score.cpp
@@ -81,13 +81,13 @@ void score7_cpu_device::device_start()
state_add(SCORE_PC , "PC" , m_pc).callimport().callexport().formatstr("%08X");
for(int i=0; i<0x20; i++)
- state_add(SCORE_GPR + i, strformat("r%d", i).c_str(), m_gpr[i]).callimport().callexport().formatstr("%08X");
+ state_add(SCORE_GPR + i, string_format("r%d", i).c_str(), m_gpr[i]).callimport().callexport().formatstr("%08X");
for(int i=0; i<0x20; i++)
- state_add(SCORE_CR + i, strformat("cr%d", i).c_str(), m_cr[i]).callimport().callexport().formatstr("%08X");
+ state_add(SCORE_CR + i, string_format("cr%d", i).c_str(), m_cr[i]).callimport().callexport().formatstr("%08X");
for(int i=0; i<3; i++)
- state_add(SCORE_SR + i, strformat("sr%d", i).c_str(), m_sr[i]).callimport().callexport().formatstr("%08X");
+ state_add(SCORE_SR + i, string_format("sr%d", i).c_str(), m_sr[i]).callimport().callexport().formatstr("%08X");
state_add(SCORE_CEH, "ceh", REG_CEH).callimport().callexport().formatstr("%08X");
state_add(SCORE_CEL, "cel", REG_CEL).callimport().callexport().formatstr("%08X");
@@ -135,7 +135,7 @@ void score7_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%s%s%s%s%s",
+ str = string_format("%s%s%s%s%s",
REG_CR & FLAG_V ? "V" : ".",
REG_CR & FLAG_C ? "C" : ".",
REG_CR & FLAG_Z ? "Z" : ".",
diff --git a/src/devices/cpu/scudsp/scudsp.cpp b/src/devices/cpu/scudsp/scudsp.cpp
index f0ec1644af5..d752b082189 100644
--- a/src/devices/cpu/scudsp/scudsp.cpp
+++ b/src/devices/cpu/scudsp/scudsp.cpp
@@ -1015,7 +1015,7 @@ void scudsp_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%s%s%s%c%c%c%c%c%s%s%s",
+ str = string_format("%s%s%s%c%c%c%c%c%s%s%s",
m_flags & 0x4000000 ? "PR":"..",
m_flags & 0x2000000 ? "EP":"..",
m_flags & 0x800000 ? "T0":"..",
diff --git a/src/devices/cpu/se3208/se3208.cpp b/src/devices/cpu/se3208/se3208.cpp
index 45c4c38cc86..65c109f8ff4 100644
--- a/src/devices/cpu/se3208/se3208.cpp
+++ b/src/devices/cpu/se3208/se3208.cpp
@@ -1814,7 +1814,7 @@ void se3208_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c %c%c%c%c%c",
+ str = string_format("%c%c%c%c %c%c%c%c%c",
m_SR&FLAG_C?'C':'.',
m_SR&FLAG_V?'V':'.',
m_SR&FLAG_S?'S':'.',
diff --git a/src/devices/cpu/sh2/sh2.cpp b/src/devices/cpu/sh2/sh2.cpp
index 481f2544126..751349dbd0c 100644
--- a/src/devices/cpu/sh2/sh2.cpp
+++ b/src/devices/cpu/sh2/sh2.cpp
@@ -2588,7 +2588,7 @@ void sh2_device::state_string_export(const device_state_entry &entry, std::strin
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%d%c%c",
+ str = string_format("%c%c%d%c%c",
m_sh2_state->sr & M ? 'M':'.',
m_sh2_state->sr & Q ? 'Q':'.',
(m_sh2_state->sr & I) >> 4,
diff --git a/src/devices/cpu/sh2/sh2comn.cpp b/src/devices/cpu/sh2/sh2comn.cpp
index 687306babb8..2fbeff0fa9d 100644
--- a/src/devices/cpu/sh2/sh2comn.cpp
+++ b/src/devices/cpu/sh2/sh2comn.cpp
@@ -612,7 +612,7 @@ WRITE32_MEMBER( sh2_device::sh7604_w )
{
INT64 a = m_m[0x45] | ((UINT64)(m_m[0x44]) << 32);
INT64 b = (INT32)m_m[0x40];
- LOG(("SH2 '%s' div+mod %" I64FMT "d/%" I64FMT "d\n", tag(), a, b));
+ LOG(("SH2 '%s' div+mod %d/%d\n", tag(), a, b));
if (b)
{
INT64 q = a / b;
diff --git a/src/devices/cpu/sh4/sh4.cpp b/src/devices/cpu/sh4/sh4.cpp
index fc67b4d9d86..74bf64e8f1d 100644
--- a/src/devices/cpu/sh4/sh4.cpp
+++ b/src/devices/cpu/sh4/sh4.cpp
@@ -4458,7 +4458,7 @@ void sh34_base_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%s%s%s%s%c%c%d%c%c",
+ str = string_format("%s%s%s%s%c%c%d%c%c",
m_sr & MD ? "MD ":" ",
m_sr & sRB ? "RB ":" ",
m_sr & BL ? "BL ":" ",
@@ -4471,131 +4471,131 @@ void sh34_base_device::state_string_export(const device_state_entry &entry, std:
break;
case SH4_FR0:
- strprintf(str, "%08X %f", m_fr[0 ^ fpu_xor], (double)FP_RFS(0 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[0 ^ fpu_xor], (double)FP_RFS(0 ^ fpu_xor));
break;
case SH4_FR1:
- strprintf(str, "%08X %f", m_fr[1 ^ fpu_xor], (double)FP_RFS(1 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[1 ^ fpu_xor], (double)FP_RFS(1 ^ fpu_xor));
break;
case SH4_FR2:
- strprintf(str, "%08X %f", m_fr[2 ^ fpu_xor], (double)FP_RFS(2 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[2 ^ fpu_xor], (double)FP_RFS(2 ^ fpu_xor));
break;
case SH4_FR3:
- strprintf(str, "%08X %f", m_fr[3 ^ fpu_xor], (double)FP_RFS(3 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[3 ^ fpu_xor], (double)FP_RFS(3 ^ fpu_xor));
break;
case SH4_FR4:
- strprintf(str, "%08X %f", m_fr[4 ^ fpu_xor], (double)FP_RFS(4 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[4 ^ fpu_xor], (double)FP_RFS(4 ^ fpu_xor));
break;
case SH4_FR5:
- strprintf(str, "%08X %f", m_fr[5 ^ fpu_xor], (double)FP_RFS(5 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[5 ^ fpu_xor], (double)FP_RFS(5 ^ fpu_xor));
break;
case SH4_FR6:
- strprintf(str, "%08X %f", m_fr[6 ^ fpu_xor], (double)FP_RFS(6 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[6 ^ fpu_xor], (double)FP_RFS(6 ^ fpu_xor));
break;
case SH4_FR7:
- strprintf(str, "%08X %f", m_fr[7 ^ fpu_xor], (double)FP_RFS(7 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[7 ^ fpu_xor], (double)FP_RFS(7 ^ fpu_xor));
break;
case SH4_FR8:
- strprintf(str, "%08X %f", m_fr[8 ^ fpu_xor], (double)FP_RFS(8 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[8 ^ fpu_xor], (double)FP_RFS(8 ^ fpu_xor));
break;
case SH4_FR9:
- strprintf(str, "%08X %f", m_fr[9 ^ fpu_xor], (double)FP_RFS(9 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[9 ^ fpu_xor], (double)FP_RFS(9 ^ fpu_xor));
break;
case SH4_FR10:
- strprintf(str, "%08X %f", m_fr[10 ^ fpu_xor], (double)FP_RFS(10 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[10 ^ fpu_xor], (double)FP_RFS(10 ^ fpu_xor));
break;
case SH4_FR11:
- strprintf(str, "%08X %f", m_fr[11 ^ fpu_xor], (double)FP_RFS(11 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[11 ^ fpu_xor], (double)FP_RFS(11 ^ fpu_xor));
break;
case SH4_FR12:
- strprintf(str, "%08X %f", m_fr[12 ^ fpu_xor], (double)FP_RFS(12 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[12 ^ fpu_xor], (double)FP_RFS(12 ^ fpu_xor));
break;
case SH4_FR13:
- strprintf(str, "%08X %f", m_fr[13 ^ fpu_xor], (double)FP_RFS(13 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[13 ^ fpu_xor], (double)FP_RFS(13 ^ fpu_xor));
break;
case SH4_FR14:
- strprintf(str, "%08X %f", m_fr[14 ^ fpu_xor], (double)FP_RFS(14 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[14 ^ fpu_xor], (double)FP_RFS(14 ^ fpu_xor));
break;
case SH4_FR15:
- strprintf(str, "%08X %f", m_fr[15 ^ fpu_xor], (double)FP_RFS(15 ^ fpu_xor));
+ str = string_format("%08X %f", m_fr[15 ^ fpu_xor], (double)FP_RFS(15 ^ fpu_xor));
break;
case SH4_XF0:
- strprintf(str, "%08X %f", m_xf[0 ^ fpu_xor], (double)FP_XFS(0 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[0 ^ fpu_xor], (double)FP_XFS(0 ^ fpu_xor));
break;
case SH4_XF1:
- strprintf(str, "%08X %f", m_xf[1 ^ fpu_xor], (double)FP_XFS(1 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[1 ^ fpu_xor], (double)FP_XFS(1 ^ fpu_xor));
break;
case SH4_XF2:
- strprintf(str, "%08X %f", m_xf[2 ^ fpu_xor], (double)FP_XFS(2 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[2 ^ fpu_xor], (double)FP_XFS(2 ^ fpu_xor));
break;
case SH4_XF3:
- strprintf(str, "%08X %f", m_xf[3 ^ fpu_xor], (double)FP_XFS(3 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[3 ^ fpu_xor], (double)FP_XFS(3 ^ fpu_xor));
break;
case SH4_XF4:
- strprintf(str, "%08X %f", m_xf[4 ^ fpu_xor], (double)FP_XFS(4 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[4 ^ fpu_xor], (double)FP_XFS(4 ^ fpu_xor));
break;
case SH4_XF5:
- strprintf(str, "%08X %f", m_xf[5 ^ fpu_xor], (double)FP_XFS(5 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[5 ^ fpu_xor], (double)FP_XFS(5 ^ fpu_xor));
break;
case SH4_XF6:
- strprintf(str, "%08X %f", m_xf[6 ^ fpu_xor], (double)FP_XFS(6 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[6 ^ fpu_xor], (double)FP_XFS(6 ^ fpu_xor));
break;
case SH4_XF7:
- strprintf(str, "%08X %f", m_xf[7 ^ fpu_xor], (double)FP_XFS(7 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[7 ^ fpu_xor], (double)FP_XFS(7 ^ fpu_xor));
break;
case SH4_XF8:
- strprintf(str, "%08X %f", m_xf[8 ^ fpu_xor], (double)FP_XFS(8 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[8 ^ fpu_xor], (double)FP_XFS(8 ^ fpu_xor));
break;
case SH4_XF9:
- strprintf(str, "%08X %f", m_xf[9 ^ fpu_xor], (double)FP_XFS(9 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[9 ^ fpu_xor], (double)FP_XFS(9 ^ fpu_xor));
break;
case SH4_XF10:
- strprintf(str, "%08X %f", m_xf[10 ^ fpu_xor], (double)FP_XFS(10 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[10 ^ fpu_xor], (double)FP_XFS(10 ^ fpu_xor));
break;
case SH4_XF11:
- strprintf(str, "%08X %f", m_xf[11 ^ fpu_xor], (double)FP_XFS(11 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[11 ^ fpu_xor], (double)FP_XFS(11 ^ fpu_xor));
break;
case SH4_XF12:
- strprintf(str, "%08X %f", m_xf[12 ^ fpu_xor], (double)FP_XFS(12 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[12 ^ fpu_xor], (double)FP_XFS(12 ^ fpu_xor));
break;
case SH4_XF13:
- strprintf(str, "%08X %f", m_xf[13 ^ fpu_xor], (double)FP_XFS(13 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[13 ^ fpu_xor], (double)FP_XFS(13 ^ fpu_xor));
break;
case SH4_XF14:
- strprintf(str, "%08X %f", m_xf[14 ^ fpu_xor], (double)FP_XFS(14 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[14 ^ fpu_xor], (double)FP_XFS(14 ^ fpu_xor));
break;
case SH4_XF15:
- strprintf(str, "%08X %f", m_xf[15 ^ fpu_xor], (double)FP_XFS(15 ^ fpu_xor));
+ str = string_format("%08X %f", m_xf[15 ^ fpu_xor], (double)FP_XFS(15 ^ fpu_xor));
break;
}
diff --git a/src/devices/cpu/sm8500/sm8500.cpp b/src/devices/cpu/sm8500/sm8500.cpp
index 66c51c61e5b..dff83dbd9f4 100644
--- a/src/devices/cpu/sm8500/sm8500.cpp
+++ b/src/devices/cpu/sm8500/sm8500.cpp
@@ -146,43 +146,43 @@ void sm8500_cpu_device::state_string_export(const device_state_entry &entry, std
switch (entry.index())
{
case SM8500_PS:
- strprintf(str, "%04X", ( m_PS0 << 8 ) | m_PS1 );
+ str = string_format("%04X", ( m_PS0 << 8 ) | m_PS1 );
break;
case SM8500_RR0:
- strprintf(str, "%04X", mem_readword( 0x00 ) );
+ str = string_format("%04X", mem_readword( 0x00 ) );
break;
case SM8500_RR2:
- strprintf(str, "%04X", mem_readword( 0x02 ) );
+ str = string_format("%04X", mem_readword( 0x02 ) );
break;
case SM8500_RR4:
- strprintf(str, "%04X", mem_readword( 0x04 ) );
+ str = string_format("%04X", mem_readword( 0x04 ) );
break;
case SM8500_RR6:
- strprintf(str, "%04X", mem_readword( 0x06 ) );
+ str = string_format("%04X", mem_readword( 0x06 ) );
break;
case SM8500_RR8:
- strprintf(str, "%04X", mem_readword( 0x08 ) );
+ str = string_format("%04X", mem_readword( 0x08 ) );
break;
case SM8500_RR10:
- strprintf(str, "%04X", mem_readword( 0x0a ) );
+ str = string_format("%04X", mem_readword( 0x0a ) );
break;
case SM8500_RR12:
- strprintf(str, "%04X", mem_readword( 0x0c ) );
+ str = string_format("%04X", mem_readword( 0x0c ) );
break;
case SM8500_RR14:
- strprintf(str, "%04X", mem_readword( 0x0e ) );
+ str = string_format("%04X", mem_readword( 0x0e ) );
break;
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_PS1 & FLAG_C ? 'C' : '.',
m_PS1 & FLAG_Z ? 'Z' : '.',
m_PS1 & FLAG_S ? 'S' : '.',
diff --git a/src/devices/cpu/spc700/spc700.cpp b/src/devices/cpu/spc700/spc700.cpp
index 22969235ae7..abd0b7bf44e 100644
--- a/src/devices/cpu/spc700/spc700.cpp
+++ b/src/devices/cpu/spc700/spc700.cpp
@@ -1249,7 +1249,7 @@ void spc700_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
(m_flag_n & 0x80) ? 'N':'.',
((m_flag_v & 0x80) >> 1) ? 'V':'.',
(m_flag_p>>3) ? 'P':'.',
diff --git a/src/devices/cpu/ssem/ssem.cpp b/src/devices/cpu/ssem/ssem.cpp
index 438e36cbd9e..bb2d4683ef2 100644
--- a/src/devices/cpu/ssem/ssem.cpp
+++ b/src/devices/cpu/ssem/ssem.cpp
@@ -154,7 +154,7 @@ void ssem_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c", m_halt ? 'H' : '.');
+ str = string_format("%c", m_halt ? 'H' : '.');
break;
}
}
diff --git a/src/devices/cpu/ssp1601/ssp1601.cpp b/src/devices/cpu/ssp1601/ssp1601.cpp
index db50c5e6816..e583ac0bfb3 100644
--- a/src/devices/cpu/ssp1601/ssp1601.cpp
+++ b/src/devices/cpu/ssp1601/ssp1601.cpp
@@ -552,8 +552,11 @@ void ssp1601_device::state_string_export(const device_state_entry &entry, std::s
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c", (rST&SSP_FLAG_N) ? 'N' : '.', (rST&SSP_FLAG_V) ? 'V' : '.',
- (rST&SSP_FLAG_Z)?'Z':'.', (rST&SSP_FLAG_L)?'L':'.'
+ str = string_format("%c%c%c%c",
+ (rST&SSP_FLAG_N) ? 'N' : '.',
+ (rST&SSP_FLAG_V) ? 'V' : '.',
+ (rST&SSP_FLAG_Z) ? 'Z' : '.',
+ (rST&SSP_FLAG_L) ? 'L' : '.'
);
break;
}
diff --git a/src/devices/cpu/t11/t11.cpp b/src/devices/cpu/t11/t11.cpp
index 5e32e2081f5..f2337e6bae7 100644
--- a/src/devices/cpu/t11/t11.cpp
+++ b/src/devices/cpu/t11/t11.cpp
@@ -296,7 +296,7 @@ void t11_device::state_string_export(const device_state_entry &entry, std::strin
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_psw.b.l & 0x80 ? '?':'.',
m_psw.b.l & 0x40 ? 'I':'.',
m_psw.b.l & 0x20 ? 'I':'.',
@@ -315,7 +315,7 @@ void k1801vm2_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c",
m_psw.b.l & 0x100 ? 'H':'.',
m_psw.b.l & 0x80 ? 'P':'.',
m_psw.b.l & 0x40 ? '?':'.',
diff --git a/src/devices/cpu/tlcs90/tlcs90.cpp b/src/devices/cpu/tlcs90/tlcs90.cpp
index 994d0abb3da..3719154174f 100644
--- a/src/devices/cpu/tlcs90/tlcs90.cpp
+++ b/src/devices/cpu/tlcs90/tlcs90.cpp
@@ -2771,7 +2771,7 @@ void tlcs90_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
F & 0x80 ? 'S':'.',
F & 0x40 ? 'Z':'.',
F & 0x20 ? 'I':'.',
diff --git a/src/devices/cpu/tlcs900/tlcs900.cpp b/src/devices/cpu/tlcs900/tlcs900.cpp
index 2b5d45d7757..2a7399de6bd 100644
--- a/src/devices/cpu/tlcs900/tlcs900.cpp
+++ b/src/devices/cpu/tlcs900/tlcs900.cpp
@@ -389,7 +389,7 @@ void tlcs900h_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%d%c%d%c%c%c%c%c%c%c%c",
+ str = string_format("%c%d%c%d%c%c%c%c%c%c%c%c",
m_sr.w.l & 0x8000 ? 'S' : 'U',
( m_sr.w.l & 0x7000 ) >> 12,
m_sr.w.l & 0x0800 ? 'M' : 'N',
diff --git a/src/devices/cpu/tms0980/tms0980.cpp b/src/devices/cpu/tms0980/tms0980.cpp
index 7bc62b5a475..e067946bb7a 100644
--- a/src/devices/cpu/tms0980/tms0980.cpp
+++ b/src/devices/cpu/tms0980/tms0980.cpp
@@ -164,13 +164,17 @@ const device_type TMS1670 = &device_creator<tms1670_cpu_device>; // high voltage
// TMS0980
// - 64x9bit RAM array at the bottom-left (set up as 144x4)
// - 2048x9bit ROM array at the bottom-left
-// - main instructions PLA at the top half, to the right of the midline
+// - main instructions PLAs at the top half, to the right of the midline
+// * top section is assumed to be the CKI bus select
+// * middle section is for microinstruction redirection, this part may differ per die
+// * rest is fixed instructions select, from top-to-bottom: SEAC, LDX, COMX, COMX8,
+// TDO, SBIT, RETN, SETR, REAC, XDA, SAL, RBIT, ..., OFF, SBL, LDP, redir(------00- + R0^BL)
// - 64-term microinstructions PLA between the RAM and ROM, supporting 20 microinstructions
// - 16-term inverted output PLA and segment PLA above the RAM (rotate opla 90 degrees)
const device_type TMS0980 = &device_creator<tms0980_cpu_device>; // 28-pin DIP, 9 R pins
// TMS1980 is a TMS0980 with a TMS1x00 style opla
-// - RAM, ROM, and main instructions PLA is the same as TMS0980
+// - RAM, ROM, and main instructions PLAs is the same as TMS0980
// - one of the microinstructions redirects to a RSTR instruction, like on TMS0270
// - 32-term inverted output PLA above the RAM, 7 bits! (rotate opla 270 degrees)
const device_type TMS1980 = &device_creator<tms1980_cpu_device>; // 28-pin DIP, 7 O pins, 10 R pins, high voltage
@@ -182,20 +186,26 @@ const device_type TMS0950 = &device_creator<tms0950_cpu_device>; // 28-pin DIP,
// TMS0970 is a stripped-down version of the TMS0980, itself acting more like a TMS1000
// - RAM and ROM is the same as TMS1000
-// - main instructions PLA at the top half, to the right of the midline
+// - main instructions PLAs at the top half, to the right of the midline
+// * see TMS0980 notes, except that the fixed instruction list differs:
+// RETN, SETR, RBIT, SBIT, LDX, COMX, TDO, ..., redir(----0-00), LDP
// - 32-term microinstructions PLA between the RAM and ROM, supporting 15 microinstructions
// - 16-term inverted output PLA and segment PLA above the RAM (rotate opla 90 degrees)
const device_type TMS0970 = &device_creator<tms0970_cpu_device>; // 28-pin DIP, 11 R pins (note: pinout may slightly differ from chip to chip)
const device_type TMS1990 = &device_creator<tms1990_cpu_device>; // 28-pin DIP, ? R pins..
// TMS0270 on the other hand, is a TMS0980 with earrings and a new hat. The new changes look like a quick afterthought, almost hacky
-// - RAM, ROM, and main instructions PLA is the same as TMS0980
+// - RAM, ROM, and main instructions PLAs is the same as TMS0980
// - 64-term microinstructions PLA between the RAM and ROM, supporting 20 microinstructions plus optional separate lines for custom opcode handling
// - 48-term output PLA above the RAM (rotate opla 90 degrees)
const device_type TMS0270 = &device_creator<tms0270_cpu_device>; // 40-pin DIP, 16 O pins, 8+ R pins (some R pins are internally hooked up to support more I/O)
// newer TMS0270 chips (eg. Speak & Math) have 42 pins
// TMS0260 is same or similar?
+// TP0320 is TI's first CMOS MCU with integrated LCD controller, the die is still very similar to TMS0980
+// - x
+const device_type TP0320 = &device_creator<tp0320_cpu_device>; // 28-pin SDIP, ..
+
// internal memory maps
static ADDRESS_MAP_START(program_11bit_9, AS_PROGRAM, 16, tms1xxx_cpu_device)
@@ -336,6 +346,11 @@ tms0270_cpu_device::tms0270_cpu_device(const machine_config &mconfig, const char
{ }
+tp0320_cpu_device::tp0320_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms0980_cpu_device(mconfig, TP0320, "TP0320", tag, owner, clock, 7, 10, 7, 9, 4, 12, ADDRESS_MAP_NAME(program_11bit_9), 8, ADDRESS_MAP_NAME(data_64x9_as4), "tp0320", __FILE__)
+{ }
+
+
// machine configs
static MACHINE_CONFIG_FRAGMENT(tms1000)
@@ -480,7 +495,7 @@ void tms1xxx_cpu_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case STATE_GENPC:
- strprintf(str, "%03X", m_rom_address << ((m_byte_bits > 8) ? 1 : 0));
+ str = string_format("%03X", m_rom_address << ((m_byte_bits > 8) ? 1 : 0));
break;
}
}
diff --git a/src/devices/cpu/tms0980/tms0980.h b/src/devices/cpu/tms0980/tms0980.h
index 2572eb1b1ef..c253d28ee40 100644
--- a/src/devices/cpu/tms0980/tms0980.h
+++ b/src/devices/cpu/tms0980/tms0980.h
@@ -480,6 +480,19 @@ private:
};
+class tp0320_cpu_device : public tms0980_cpu_device
+{
+public:
+ tp0320_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ // overrides
+ //virtual void device_start() override;
+ //virtual void device_reset() override;
+
+ //virtual machine_config_constructor device_mconfig_additions() const override;
+};
+
extern const device_type TMS1000;
extern const device_type TMS1070;
@@ -499,6 +512,7 @@ extern const device_type TMS1990;
extern const device_type TMS0980;
extern const device_type TMS1980;
extern const device_type TMS0270;
+extern const device_type TP0320;
#endif /* _TMS0980_H_ */
diff --git a/src/devices/cpu/tms32010/tms32010.cpp b/src/devices/cpu/tms32010/tms32010.cpp
index 3a164e8f984..423149feacc 100644
--- a/src/devices/cpu/tms32010/tms32010.cpp
+++ b/src/devices/cpu/tms32010/tms32010.cpp
@@ -900,7 +900,7 @@ void tms32010_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
m_STR & 0x8000 ? 'O':'.',
m_STR & 0x4000 ? 'M':'.',
m_STR & 0x2000 ? 'I':'.',
diff --git a/src/devices/cpu/tms32025/tms32025.cpp b/src/devices/cpu/tms32025/tms32025.cpp
index 2d40b2d3448..cd95f1a96c8 100644
--- a/src/devices/cpu/tms32025/tms32025.cpp
+++ b/src/devices/cpu/tms32025/tms32025.cpp
@@ -1806,7 +1806,7 @@ void tms32025_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "arp%d%c%c%c%cdp%03x arb%d%c%c%c%c%c%c%c%c%c%c%cpm%d",
+ str = string_format("arp%d%c%c%c%cdp%03x arb%d%c%c%c%c%c%c%c%c%c%c%cpm%d",
(m_STR0 & 0xe000) >> 13,
m_STR0 & 0x1000 ? 'O':'.',
m_STR0 & 0x0800 ? 'M':'.',
diff --git a/src/devices/cpu/tms32031/tms32031.cpp b/src/devices/cpu/tms32031/tms32031.cpp
index cfab62a7929..cf7b457036d 100644
--- a/src/devices/cpu/tms32031/tms32031.cpp
+++ b/src/devices/cpu/tms32031/tms32031.cpp
@@ -541,12 +541,12 @@ void tms3203x_device::state_string_export(const device_state_entry &entry, std::
case TMS3203X_R5F:
case TMS3203X_R6F:
case TMS3203X_R7F:
- strprintf(str, "%12g", m_r[TMR_R0 + (entry.index() - TMS3203X_R0F)].as_double());
+ str = string_format("%12g", m_r[TMR_R0 + (entry.index() - TMS3203X_R0F)].as_double());
break;
case STATE_GENFLAGS:
UINT32 temp = m_r[TMR_ST].i32[0];
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
(temp & 0x80) ? 'O':'.',
(temp & 0x40) ? 'U':'.',
(temp & 0x20) ? 'V':'.',
diff --git a/src/devices/cpu/tms32082/tms32082.cpp b/src/devices/cpu/tms32082/tms32082.cpp
index 8b89bc3ef88..baf444dd064 100644
--- a/src/devices/cpu/tms32082/tms32082.cpp
+++ b/src/devices/cpu/tms32082/tms32082.cpp
@@ -219,7 +219,7 @@ void tms32082_mp_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "?");
+ str = "?";
break;
}
}
@@ -516,7 +516,7 @@ void tms32082_pp_device::state_string_export(const device_state_entry &entry, st
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "?");
+ str = "?";
break;
}
}
diff --git a/src/devices/cpu/tms34010/tms34010.cpp b/src/devices/cpu/tms34010/tms34010.cpp
index 68f410d5b2b..3bda4e028ac 100644
--- a/src/devices/cpu/tms34010/tms34010.cpp
+++ b/src/devices/cpu/tms34010/tms34010.cpp
@@ -594,11 +594,11 @@ void tms340x0_device::device_start()
for (int regnum = 0; regnum < 15; regnum++)
{
- state_add(TMS34010_A0 + regnum, strformat("A%d", regnum).c_str(), m_regs[regnum].reg);
+ state_add(TMS34010_A0 + regnum, string_format("A%d", regnum).c_str(), m_regs[regnum].reg);
}
for (int regnum = 0; regnum < 15; regnum++)
{
- state_add(TMS34010_B0 + regnum, strformat("B%d", regnum).c_str(), m_regs[30 - regnum].reg);
+ state_add(TMS34010_B0 + regnum, string_format("B%d", regnum).c_str(), m_regs[30 - regnum].reg);
}
}
@@ -1603,7 +1603,7 @@ void tms340x0_device::state_string_export(const device_state_entry &entry, std::
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
m_st & 0x80000000 ? 'N':'.',
m_st & 0x40000000 ? 'C':'.',
m_st & 0x20000000 ? 'Z':'.',
diff --git a/src/devices/cpu/tms7000/tms7000.cpp b/src/devices/cpu/tms7000/tms7000.cpp
index 42e76319855..d64b47d924c 100644
--- a/src/devices/cpu/tms7000/tms7000.cpp
+++ b/src/devices/cpu/tms7000/tms7000.cpp
@@ -262,7 +262,7 @@ void tms7000_device::state_string_export(const device_state_entry &entry, std::s
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_sr & 0x80 ? 'C':'c',
m_sr & 0x40 ? 'N':'n',
m_sr & 0x20 ? 'Z':'z',
diff --git a/src/devices/cpu/ucom4/ucom4.cpp b/src/devices/cpu/ucom4/ucom4.cpp
index 69b608a6592..fd0263ac8fb 100644
--- a/src/devices/cpu/ucom4/ucom4.cpp
+++ b/src/devices/cpu/ucom4/ucom4.cpp
@@ -82,7 +82,7 @@ void ucom4_cpu_device::state_string_export(const device_state_entry &entry, std:
{
// obviously not from a single flags register
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c",
m_inte_f ? 'E':'e',
m_int_f ? 'I':'i',
m_timer_f ? 'T':'t',
diff --git a/src/devices/cpu/uml.cpp b/src/devices/cpu/uml.cpp
index 5b9785f792c..07d5de9b57f 100644
--- a/src/devices/cpu/uml.cpp
+++ b/src/devices/cpu/uml.cpp
@@ -867,19 +867,14 @@ std::string uml::instruction::disasm(drcuml_state *drcuml) const
assert(m_opcode != OP_INVALID && m_opcode < OP_MAX);
// start with the raw mnemonic and substitute sizes
- std::string buffer;
+ std::ostringstream buffer;
for (const char *opsrc = opinfo.mnemonic; *opsrc != 0; opsrc++)
if (*opsrc == '!')
- strcatprintf(buffer, "%s", bang_size[m_size]);
+ util::stream_format(buffer, "%-8s", bang_size[m_size]);
else if (*opsrc == '#')
- strcatprintf(buffer, "%s", pound_size[m_size]);
+ util::stream_format(buffer, "%-8s", pound_size[m_size]);
else
- buffer.push_back(*opsrc);
-
- // pad to 8 spaces
- int pad = 8 - buffer.length();
- for (int ch = 0; ch < pad; ch++)
- buffer.push_back(' ');
+ util::stream_format(buffer, "%-8c", *opsrc);
// iterate through parameters
for (int pnum = 0; pnum < m_numparams; pnum++)
@@ -888,7 +883,7 @@ std::string uml::instruction::disasm(drcuml_state *drcuml) const
// start with a comma for all except the first parameter
if (pnum != 0)
- buffer.push_back(',');
+ buffer.put(',');
// ouput based on type
switch (param.type())
@@ -916,20 +911,20 @@ std::string uml::instruction::disasm(drcuml_state *drcuml) const
if (size == 2) value = (UINT16)value;
if (size == 4) value = (UINT32)value;
if ((UINT32)value == value)
- strcatprintf(buffer, "$%X", (UINT32)value);
+ util::stream_format(buffer, "$%X", (UINT32)value);
else
- strcatprintf(buffer, "$%X%08X", (UINT32)(value >> 32), (UINT32)value);
+ util::stream_format(buffer, "$%X%08X", (UINT32)(value >> 32), (UINT32)value);
}
break;
// immediates have several special cases
case parameter::PTYPE_SIZE:
- strcatprintf(buffer, "%s", sizes[param.size()]);
+ util::stream_format(buffer, "%s", sizes[param.size()]);
break;
// size + address space immediate
case parameter::PTYPE_SIZE_SPACE:
- strcatprintf(buffer, "%s_%s", spaces[param.space()], sizes[param.size()]);
+ util::stream_format(buffer, "%s_%s", spaces[param.space()], sizes[param.size()]);
break;
// size + scale immediate
@@ -938,30 +933,30 @@ std::string uml::instruction::disasm(drcuml_state *drcuml) const
int scale = param.scale();
int size = param.size();
if (scale == size)
- strcatprintf(buffer, "%s", sizes[size]);
+ util::stream_format(buffer, "%s", sizes[size]);
else
- strcatprintf(buffer, "%s_x%d", sizes[size], 1 << scale);
+ util::stream_format(buffer, "%s_x%d", sizes[size], 1 << scale);
}
break;
// fmod immediate
case parameter::PTYPE_ROUNDING:
- strcatprintf(buffer, "%s", fmods[param.rounding()]);
+ util::stream_format(buffer, "%s", fmods[param.rounding()]);
break;
// integer registers
case parameter::PTYPE_INT_REGISTER:
- strcatprintf(buffer, "i%d", param.ireg() - REG_I0);
+ util::stream_format(buffer, "i%d", param.ireg() - REG_I0);
break;
// floating point registers
case parameter::PTYPE_FLOAT_REGISTER:
- strcatprintf(buffer, "f%d", param.freg() - REG_F0);
+ util::stream_format(buffer, "f%d", param.freg() - REG_F0);
break;
// map variables
case parameter::PTYPE_MAPVAR:
- strcatprintf(buffer, "m%d", param.mapvar() - MAPVAR_M0);
+ util::stream_format(buffer, "m%d", param.mapvar() - MAPVAR_M0);
break;
// memory
@@ -974,55 +969,55 @@ std::string uml::instruction::disasm(drcuml_state *drcuml) const
if (drcuml != nullptr && (symbol = drcuml->symbol_find(param.memory(), &symoffset)) != nullptr)
{
if (symoffset == 0)
- strcatprintf(buffer, "[%s]", symbol);
+ util::stream_format(buffer, "[%s]", symbol);
else
- strcatprintf(buffer, "[%s+$%X]", symbol, symoffset);
+ util::stream_format(buffer, "[%s+$%X]", symbol, symoffset);
}
// cache memory
else if (drcuml != nullptr && drcuml->cache().contains_pointer(param.memory()))
- strcatprintf(buffer, "[+$%X]", (UINT32)(FPTR)((drccodeptr)param.memory() - drcuml->cache().near()));
+ util::stream_format(buffer, "[+$%X]", (UINT32)(FPTR)((drccodeptr)param.memory() - drcuml->cache().near()));
// general memory
else
- strcatprintf(buffer, "[[$%p]]", param.memory());
+ util::stream_format(buffer, "[[$%p]]", param.memory());
break;
}
// string pointer
case parameter::PTYPE_STRING:
- strcatprintf(buffer, "%s", (const char *)(FPTR)param.string());
+ util::stream_format(buffer, "%s", (const char *)(FPTR)param.string());
break;
// handle pointer
case parameter::PTYPE_CODE_HANDLE:
- strcatprintf(buffer, "%s", param.handle().string());
+ util::stream_format(buffer, "%s", param.handle().string());
break;
default:
- strcatprintf(buffer, "???");
+ util::stream_format(buffer, "???");
break;
}
}
// if there's a condition, append it
if (m_condition != COND_ALWAYS)
- strcatprintf(buffer, ",%s", conditions[m_condition & 0x0f]);
+ util::stream_format(buffer, ",%s", conditions[m_condition & 0x0f]);
// if there are flags, append them
if (m_flags != 0)
{
- buffer.push_back(',');
+ buffer.put(',');
if (m_flags & FLAG_U)
- buffer.push_back('U');
+ buffer.put('U');
if (m_flags & FLAG_S)
- buffer.push_back('S');
+ buffer.put('S');
if (m_flags & FLAG_Z)
- buffer.push_back('Z');
+ buffer.put('Z');
if (m_flags & FLAG_V)
- buffer.push_back('V');
+ buffer.put('V');
if (m_flags & FLAG_C)
- buffer.push_back('C');
+ buffer.put('C');
}
- return buffer;
+ return buffer.str();
}
diff --git a/src/devices/cpu/upd7725/upd7725.cpp b/src/devices/cpu/upd7725/upd7725.cpp
index ef211dd13c3..a3913e3f6c1 100644
--- a/src/devices/cpu/upd7725/upd7725.cpp
+++ b/src/devices/cpu/upd7725/upd7725.cpp
@@ -207,7 +207,7 @@ void necdsp_device::state_string_export(const device_state_entry &entry, std::st
switch (entry.index())
{
case UPD7725_FLAGA:
- strprintf(str, "%s %s %c%c %s %s %s %s",
+ str = string_format("%s %s %c%c %s %s %s %s",
regs.flaga.s1 ? "S1" : "s1",
regs.flaga.s0 ? "S0" : "s0",
regs.flaga.c ? 'C' : 'c',
@@ -219,7 +219,7 @@ void necdsp_device::state_string_export(const device_state_entry &entry, std::st
break;
case UPD7725_FLAGB:
- strprintf(str, "%s %s %c%c %s %s %s %s",
+ str = string_format("%s %s %c%c %s %s %s %s",
regs.flagb.s1 ? "S1" : "s1",
regs.flagb.s0 ? "S0" : "s0",
regs.flagb.c ? 'C' : 'c',
diff --git a/src/devices/cpu/upd7810/upd7810.cpp b/src/devices/cpu/upd7810/upd7810.cpp
index d0974d00a74..7ab58fc46c1 100644
--- a/src/devices/cpu/upd7810/upd7810.cpp
+++ b/src/devices/cpu/upd7810/upd7810.cpp
@@ -1701,7 +1701,7 @@ void upd7810_device::state_string_export(const device_state_entry &entry, std::s
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%s:%s:%s:%s:%s:%s",
+ str = string_format("%s:%s:%s:%s:%s:%s",
m_psw & 0x40 ? "ZF":"--",
m_psw & 0x20 ? "SK":"--",
m_psw & 0x10 ? "HC":"--",
diff --git a/src/devices/cpu/v30mz/v30mz.cpp b/src/devices/cpu/v30mz/v30mz.cpp
index ec720d59f9a..52845538b47 100644
--- a/src/devices/cpu/v30mz/v30mz.cpp
+++ b/src/devices/cpu/v30mz/v30mz.cpp
@@ -190,13 +190,13 @@ void v30mz_cpu_device::state_string_export(const device_state_entry &entry, std:
switch (entry.index())
{
case STATE_GENPC:
- strprintf(str, "%08X", ( m_sregs[CS] << 4 ) + m_ip);
+ str = string_format("%08X", ( m_sregs[CS] << 4 ) + m_ip);
break;
case STATE_GENFLAGS:
{
UINT16 flags = CompressFlags();
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
flags & 0x8000 ? 'M':'.',
flags & 0x4000 ? '?':'.',
flags & 0x2000 ? '?':'.',
diff --git a/src/devices/cpu/v810/v810.cpp b/src/devices/cpu/v810/v810.cpp
index 958c28edc49..d9509d77b6b 100644
--- a/src/devices/cpu/v810/v810.cpp
+++ b/src/devices/cpu/v810/v810.cpp
@@ -1319,7 +1319,7 @@ void v810_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
GET_AE ? 'A':'.',
GET_NP ? 'N':'.',
GET_EP ? 'E':'.',
diff --git a/src/devices/cpu/x86log.cpp b/src/devices/cpu/x86log.cpp
index c9cb81e78e9..4ed80f06131 100644
--- a/src/devices/cpu/x86log.cpp
+++ b/src/devices/cpu/x86log.cpp
@@ -146,11 +146,7 @@ void x86log_disasm_code_range(x86log_context *log, const char *label, x86code *s
/* otherwise, do a disassembly of the current instruction */
else
{
-#ifdef PTR64
- bytes = i386_dasm_one_ex(buffer, (FPTR)cur, cur, 64) & DASMFLAG_LENGTHMASK;
-#else
- bytes = i386_dasm_one_ex(buffer, (FPTR)cur, cur, 32) & DASMFLAG_LENGTHMASK;
-#endif
+ bytes = i386_dasm_one_ex(buffer, (FPTR)cur, cur, sizeof(void *) * 8) & DASMFLAG_LENGTHMASK;
}
/* if we have a matching comment, output it */
diff --git a/src/devices/cpu/z180/z180.cpp b/src/devices/cpu/z180/z180.cpp
index c8f3b968468..8e3e5e6fb5d 100644
--- a/src/devices/cpu/z180/z180.cpp
+++ b/src/devices/cpu/z180/z180.cpp
@@ -2565,7 +2565,7 @@ void z180_device::state_string_export(const device_state_entry &entry, std::stri
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
m_AF.b.l & 0x80 ? 'S':'.',
m_AF.b.l & 0x40 ? 'Z':'.',
m_AF.b.l & 0x20 ? '5':'.',
diff --git a/src/devices/cpu/z8/z8.cpp b/src/devices/cpu/z8/z8.cpp
index d6c4fe3de77..ad8b79f8ba5 100644
--- a/src/devices/cpu/z8/z8.cpp
+++ b/src/devices/cpu/z8/z8.cpp
@@ -678,7 +678,7 @@ void z8_device::device_start()
state_add(STATE_GENFLAGS, "GENFLAGS", m_r[Z8_REGISTER_FLAGS]).noshow().formatstr("%6s");
for (int regnum = 0; regnum < 16; regnum++)
- state_add(Z8_R0 + regnum, strformat("R%d", regnum).c_str(), m_fake_r[regnum]).callimport().callexport();
+ state_add(Z8_R0 + regnum, string_format("R%d", regnum).c_str(), m_fake_r[regnum]).callimport().callexport();
}
/* find address spaces */
@@ -809,7 +809,7 @@ void z8_device::state_string_export(const device_state_entry &entry, std::string
{
switch (entry.index())
{
- case STATE_GENFLAGS: strprintf(str, "%c%c%c%c%c%c",
+ case STATE_GENFLAGS: str = string_format("%c%c%c%c%c%c",
m_r[Z8_REGISTER_FLAGS] & Z8_FLAGS_C ? 'C' : '.',
m_r[Z8_REGISTER_FLAGS] & Z8_FLAGS_Z ? 'Z' : '.',
m_r[Z8_REGISTER_FLAGS] & Z8_FLAGS_S ? 'S' : '.',
diff --git a/src/devices/cpu/z80/z80.cpp b/src/devices/cpu/z80/z80.cpp
index e798a1153b2..306b1ae49f2 100644
--- a/src/devices/cpu/z80/z80.cpp
+++ b/src/devices/cpu/z80/z80.cpp
@@ -3591,7 +3591,7 @@ void z80_device::execute_set_input(int inputnum, int state)
case Z80_INPUT_LINE_WAIT:
m_wait_state = state;
break;
-
+
default:
break;
}
@@ -3658,7 +3658,7 @@ void z80_device::state_string_export(const device_state_entry &entry, std::strin
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c",
F & 0x80 ? 'S':'.',
F & 0x40 ? 'Z':'.',
F & 0x20 ? 'Y':'.',
diff --git a/src/devices/cpu/z8000/z8000.cpp b/src/devices/cpu/z8000/z8000.cpp
index dcc52f92fb0..9d796a518dd 100644
--- a/src/devices/cpu/z8000/z8000.cpp
+++ b/src/devices/cpu/z8000/z8000.cpp
@@ -621,7 +621,7 @@ void z8002_device::state_string_export(const device_state_entry &entry, std::str
switch (entry.index())
{
case STATE_GENFLAGS:
- strprintf(str, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
+ str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
m_fcw & 0x8000 ? 'S':'s',
m_fcw & 0x4000 ? 'n':'N',
m_fcw & 0x2000 ? 'E':'e',
diff --git a/src/devices/imagedev/diablo.cpp b/src/devices/imagedev/diablo.cpp
index be8b3e500f2..f9d4218856a 100644
--- a/src/devices/imagedev/diablo.cpp
+++ b/src/devices/imagedev/diablo.cpp
@@ -113,7 +113,6 @@ bool diablo_image_device::call_create(int create_format, option_resolution *crea
int err;
UINT32 sectorsize, hunksize;
UINT32 cylinders, heads, sectors, totalsectors;
- std::string metadata;
cylinders = option_resolution_lookup_int(create_args, 'C');
heads = option_resolution_lookup_int(create_args, 'H');
@@ -130,8 +129,7 @@ bool diablo_image_device::call_create(int create_format, option_resolution *crea
goto error;
/* if we created the image and hence, have metadata to set, set the metadata */
- strprintf(metadata,HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, sectorsize);
- err = m_origchd.write_metadata(HARD_DISK_METADATA_TAG, 0, metadata);
+ err = m_origchd.write_metadata(HARD_DISK_METADATA_TAG, 0, string_format(HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, sectorsize));
m_origchd.close();
if (err != CHDERR_NONE)
diff --git a/src/devices/imagedev/harddriv.cpp b/src/devices/imagedev/harddriv.cpp
index b5fd6ca87dc..c03b0e4075b 100644
--- a/src/devices/imagedev/harddriv.cpp
+++ b/src/devices/imagedev/harddriv.cpp
@@ -137,7 +137,6 @@ bool harddisk_image_device::call_create(int create_format, option_resolution *cr
int err;
UINT32 sectorsize, hunksize;
UINT32 cylinders, heads, sectors, totalsectors;
- std::string metadata;
cylinders = option_resolution_lookup_int(create_args, 'C');
heads = option_resolution_lookup_int(create_args, 'H');
@@ -154,8 +153,7 @@ bool harddisk_image_device::call_create(int create_format, option_resolution *cr
goto error;
/* if we created the image and hence, have metadata to set, set the metadata */
- strprintf(metadata, HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, sectorsize);
- err = m_origchd.write_metadata(HARD_DISK_METADATA_TAG, 0, metadata);
+ err = m_origchd.write_metadata(HARD_DISK_METADATA_TAG, 0, string_format(HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, sectorsize));
m_origchd.close();
if (err != CHDERR_NONE)
diff --git a/src/devices/imagedev/mfmhd.cpp b/src/devices/imagedev/mfmhd.cpp
index bc8987d7b0f..843e3510f29 100644
--- a/src/devices/imagedev/mfmhd.cpp
+++ b/src/devices/imagedev/mfmhd.cpp
@@ -531,11 +531,8 @@ void mfm_harddisk_device::call_unload()
{
logerror("%s: MFM HD sector arrangement and recording specs have changed; updating CHD metadata\n", tag());
chd_file* chdfile = get_chd_file();
- std::string metadata;
- strprintf(metadata, MFMHD_REC_METADATA_FORMAT, params->interleave, params->cylskew, params->headskew, params->write_precomp_cylinder, params->reduced_wcurr_cylinder);
-
- chd_error err = chdfile->write_metadata(MFM_HARD_DISK_METADATA_TAG, 0, metadata, 0);
+ chd_error err = chdfile->write_metadata(MFM_HARD_DISK_METADATA_TAG, 0, string_format(MFMHD_REC_METADATA_FORMAT, params->interleave, params->cylskew, params->headskew, params->write_precomp_cylinder, params->reduced_wcurr_cylinder), 0);
if (err != CHDERR_NONE)
{
logerror("%s: Failed to save MFM HD sector arrangement/recording specs to CHD\n", tag());
@@ -546,11 +543,8 @@ void mfm_harddisk_device::call_unload()
{
logerror("%s: MFM HD track gap specs have changed; updating CHD metadata\n", tag());
chd_file* chdfile = get_chd_file();
- std::string metadata;
-
- strprintf(metadata, MFMHD_GAP_METADATA_FORMAT, params->gap1, params->gap2, params->gap3, params->sync, params->headerlen, params->ecctype);
- chd_error err = chdfile->write_metadata(MFM_HARD_DISK_METADATA_TAG, 1, metadata, 0);
+ chd_error err = chdfile->write_metadata(MFM_HARD_DISK_METADATA_TAG, 1, string_format(MFMHD_GAP_METADATA_FORMAT, params->gap1, params->gap2, params->gap3, params->sync, params->headerlen, params->ecctype), 0);
if (err != CHDERR_NONE)
{
logerror("%s: Failed to save MFM HD track gap specs to CHD\n", tag());
diff --git a/src/devices/machine/ay31015.cpp b/src/devices/machine/ay31015.cpp
index f1db92a19d8..659e16e281b 100644
--- a/src/devices/machine/ay31015.cpp
+++ b/src/devices/machine/ay31015.cpp
@@ -40,8 +40,8 @@ Device Data:
-- Pin 21 - XR - External Reset - resets all registers to initial state except for the control register
-- Pin 35 - NP - No Parity - "1" will kill any parity processing
-- Pin 36 - TSB - Number of Stop Bits - "0" = 1 stop bit; "1" = 2 stop bits. If "1", and 5 bits per character, then we have 1.5 stop bits
--- pin 37 - NB1
--- pin 38 - NB2 - Number of bits per character = NB1 + (NB2 * 2) + 5
+-- pin 37 - NB2
+-- pin 38 - NB1 - Number of bits per character = NB1 + (NB2 * 2) + 5
-- pin 39 - EPS - Odd or Even Parity Select - "0" = Odd parity; "1" = Even parity. Has no effect if NP is high.
-- Pin 34 - CS - Control Strobe - Read NP, TSB, EPS, NB1, NB2 into the control register.
diff --git a/src/devices/machine/ay31015.h b/src/devices/machine/ay31015.h
index acdf3a01536..ab511bfe940 100644
--- a/src/devices/machine/ay31015.h
+++ b/src/devices/machine/ay31015.h
@@ -23,8 +23,8 @@ enum ay31015_input_pin_t
AY31015_CS = 34, /* CS - Pin 34 - Control strobe */
AY31015_NP = 35, /* NP - Pin 35 - No parity */
AY31015_TSB = 36, /* TSB - Pin 36 - Number of stop bits */
- AY31015_NB1 = 37, /* NB1 - Pin 37 - Number of bits #1 */
- AY31015_NB2 = 38, /* NB2 - Pin 38 - Number of bits #2 */
+ AY31015_NB2 = 37, /* NB2 - Pin 37 - Number of bits #2 */
+ AY31015_NB1 = 38, /* NB1 - Pin 38 - Number of bits #1 */
AY31015_EPS = 39 /* EPS - Pin 39 - Odd/Even parity select */
};
diff --git a/src/devices/machine/diablo_hd.cpp b/src/devices/machine/diablo_hd.cpp
index f833cf54504..d5147c2b3a2 100644
--- a/src/devices/machine/diablo_hd.cpp
+++ b/src/devices/machine/diablo_hd.cpp
@@ -111,14 +111,11 @@ diablo_hd_device::~diablo_hd_device()
}
#if DIABLO_DEBUG
-void diablo_hd_device::logprintf(int level, const char* format, ...)
+template <typename Format, typename... Params>
+void diablo_hd_device::logprintf(int level, Format &&fmt, Params &&... args)
{
- if (level > m_log_level)
- return;
- va_list ap;
- va_start(ap, format);
- vlogerror(format, ap);
- va_end(ap);
+ if (level <= m_log_level)
+ logerror(std::forward<Format>(fmt), std::forward<Params>(args)...);
}
#endif
@@ -126,7 +123,7 @@ void diablo_hd_device::set_sector_callback(void *cookie, void (*callback)(void *
{
if (m_sector_callback_cookie == cookie && m_sector_callback == callback)
return;
- LOG_DRIVE((0,"[DHD%u] cookie=%p callback=%p\n", m_unit, cookie, callback));
+ LOG_DRIVE((0,"[DHD%u] cookie=%p callback=%p\n", m_unit, cookie, (void *)callback));
m_sector_callback_cookie = cookie;
m_sector_callback = callback;
}
diff --git a/src/devices/machine/diablo_hd.h b/src/devices/machine/diablo_hd.h
index c3fadd2a073..786e8ed1139 100644
--- a/src/devices/machine/diablo_hd.h
+++ b/src/devices/machine/diablo_hd.h
@@ -76,7 +76,7 @@ protected:
private:
#if DIABLO_DEBUG
int m_log_level;
- void logprintf(int level, const char* format, ...);
+ template <typename Format, typename... Params> void logprintf(int level, Format &&fmt, Params &&... args);
# define LOG_DRIVE(x) logprintf x
#else
diff --git a/src/devices/machine/hp_taco.cpp b/src/devices/machine/hp_taco.cpp
index 76203d31ee3..eb94faf3b05 100644
--- a/src/devices/machine/hp_taco.cpp
+++ b/src/devices/machine/hp_taco.cpp
@@ -148,8 +148,8 @@
// Timers
enum {
- TAPE_TMR_ID,
- HOLE_TMR_ID
+ TAPE_TMR_ID,
+ HOLE_TMR_ID
};
// Constants
@@ -178,52 +178,52 @@ enum {
// Parts of command register
#define CMD_CODE(reg) \
- (((reg) >> 10) & 0x1f)
+ (((reg) >> 10) & 0x1f)
#define DIR_FWD(reg) \
- (BIT(reg , 15))
+ (BIT(reg , 15))
#define SPEED_FAST(reg) \
- (BIT(reg , 7))
+ (BIT(reg , 7))
#define CMD_OPT(reg) \
- (BIT(reg , 6))
+ (BIT(reg , 6))
#define UNKNOWN_B9(reg) \
- (BIT(reg , 9))
+ (BIT(reg , 9))
#define DIR_FWD_MASK BIT_MASK(15) // Direction = forward
#define SPEED_FAST_MASK BIT_MASK(7) // Speed = fast
// Commands
enum {
- CMD_INDTA_INGAP, // 00: scan for data first then for gap
- CMD_UNK_01, // 01: unknown
- CMD_FINAL_GAP, // 02: write final gap
- CMD_INIT_WRITE, // 03: write words for tape formatting
- CMD_STOP, // 04: stop
- CMD_UNK_05, // 05: unknown
- CMD_SET_TRACK, // 06: set A/B track
- CMD_UNK_07, // 07: unknown
- CMD_UNK_08, // 08: unknown
- CMD_UNK_09, // 09: unknown
- CMD_MOVE, // 0a: move tape
- CMD_UNK_0b, // 0b: unknown
- CMD_INGAP_MOVE, // 0c: scan for gap then move a bit further (used to gain some margin when inverting tape movement)
- CMD_UNK_0d, // 0d: unknown
- CMD_CLEAR, // 0e: clear errors/unlatch status bits
- CMD_UNK_0f, // 0f: unknown
- CMD_NOT_INDTA, // 10: scan for end of data
- CMD_UNK_11, // 11: unknown
- CMD_UNK_12, // 12: unknown
- CMD_UNK_13, // 13: unknown
- CMD_UNK_14, // 14: unknown
- CMD_UNK_15, // 15: unknown
- CMD_WRITE_IRG, // 16: write inter-record gap
- CMD_UNK_17, // 17: unknown
- CMD_SCAN_RECORDS, // 18: scan records (count IRGs)
- CMD_RECORD_WRITE, // 19: write record words
- CMD_MOVE_INDTA, // 1a: move then scan for data
- CMD_UNK_1b, // 1b: unknown (for now it seems harmless to handle it as NOP)
- CMD_DELTA_MOVE_HOLE, // 1c: move tape a given distance, intr at end or first hole found (whichever comes first)
- CMD_START_READ, // 1d: start record reading
- CMD_DELTA_MOVE_IRG, // 1e: move tape a given distance, detect gaps in parallel
- CMD_END_READ // 1f: stop reading
+ CMD_INDTA_INGAP, // 00: scan for data first then for gap
+ CMD_UNK_01, // 01: unknown
+ CMD_FINAL_GAP, // 02: write final gap
+ CMD_INIT_WRITE, // 03: write words for tape formatting
+ CMD_STOP, // 04: stop
+ CMD_UNK_05, // 05: unknown
+ CMD_SET_TRACK, // 06: set A/B track
+ CMD_UNK_07, // 07: unknown
+ CMD_UNK_08, // 08: unknown
+ CMD_UNK_09, // 09: unknown
+ CMD_MOVE, // 0a: move tape
+ CMD_UNK_0b, // 0b: unknown
+ CMD_INGAP_MOVE, // 0c: scan for gap then move a bit further (used to gain some margin when inverting tape movement)
+ CMD_UNK_0d, // 0d: unknown
+ CMD_CLEAR, // 0e: clear errors/unlatch status bits
+ CMD_UNK_0f, // 0f: unknown
+ CMD_NOT_INDTA, // 10: scan for end of data
+ CMD_UNK_11, // 11: unknown
+ CMD_UNK_12, // 12: unknown
+ CMD_UNK_13, // 13: unknown
+ CMD_UNK_14, // 14: unknown
+ CMD_UNK_15, // 15: unknown
+ CMD_WRITE_IRG, // 16: write inter-record gap
+ CMD_UNK_17, // 17: unknown
+ CMD_SCAN_RECORDS, // 18: scan records (count IRGs)
+ CMD_RECORD_WRITE, // 19: write record words
+ CMD_MOVE_INDTA, // 1a: move then scan for data
+ CMD_UNK_1b, // 1b: unknown (for now it seems harmless to handle it as NOP)
+ CMD_DELTA_MOVE_HOLE, // 1c: move tape a given distance, intr at end or first hole found (whichever comes first)
+ CMD_START_READ, // 1d: start record reading
+ CMD_DELTA_MOVE_IRG, // 1e: move tape a given distance, detect gaps in parallel
+ CMD_END_READ // 1f: stop reading
};
// Bits of status register
@@ -250,17 +250,17 @@ enum {
// O O O O
//
static const hp_taco_device::tape_pos_t tape_holes[] = {
- (hp_taco_device::tape_pos_t)(23.891 * ONE_INCH_POS), // 24 - 0.218 / 2
- (hp_taco_device::tape_pos_t)(24.109 * ONE_INCH_POS), // 24 + 0.218 / 2
- (hp_taco_device::tape_pos_t)(35.891 * ONE_INCH_POS), // 36 - 0.218 / 2
- (hp_taco_device::tape_pos_t)(36.109 * ONE_INCH_POS), // 36 + 0.218 / 2
- (hp_taco_device::tape_pos_t)(47.891 * ONE_INCH_POS), // 48 - 0.218 / 2
- (hp_taco_device::tape_pos_t)(48.109 * ONE_INCH_POS), // 48 + 0.218 / 2
- 72 * ONE_INCH_POS, // 72
- 1752 * ONE_INCH_POS, // 1752
- 1776 * ONE_INCH_POS, // 1776
- 1788 * ONE_INCH_POS, // 1788
- 1800 * ONE_INCH_POS // 1800
+ (hp_taco_device::tape_pos_t)(23.891 * ONE_INCH_POS), // 24 - 0.218 / 2
+ (hp_taco_device::tape_pos_t)(24.109 * ONE_INCH_POS), // 24 + 0.218 / 2
+ (hp_taco_device::tape_pos_t)(35.891 * ONE_INCH_POS), // 36 - 0.218 / 2
+ (hp_taco_device::tape_pos_t)(36.109 * ONE_INCH_POS), // 36 + 0.218 / 2
+ (hp_taco_device::tape_pos_t)(47.891 * ONE_INCH_POS), // 48 - 0.218 / 2
+ (hp_taco_device::tape_pos_t)(48.109 * ONE_INCH_POS), // 48 + 0.218 / 2
+ 72 * ONE_INCH_POS, // 72
+ 1752 * ONE_INCH_POS, // 1752
+ 1776 * ONE_INCH_POS, // 1776
+ 1788 * ONE_INCH_POS, // 1788
+ 1800 * ONE_INCH_POS // 1800
};
// Device type definition
@@ -268,144 +268,144 @@ const device_type HP_TACO = &device_creator<hp_taco_device>;
// Constructors
hp_taco_device::hp_taco_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname)
- : device_t(mconfig, type, name, tag, owner, clock, shortname, __FILE__),
- device_image_interface(mconfig , *this),
- m_irq_handler(*this),
- m_flg_handler(*this),
- m_sts_handler(*this),
- m_tape_pos(TAPE_INIT_POS),
- m_image_dirty(false)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, __FILE__),
+ device_image_interface(mconfig , *this),
+ m_irq_handler(*this),
+ m_flg_handler(*this),
+ m_sts_handler(*this),
+ m_tape_pos(TAPE_INIT_POS),
+ m_image_dirty(false)
{
- clear_state();
+ clear_state();
}
hp_taco_device::hp_taco_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, HP_TACO, "HP TACO", tag, owner, clock, "TACO", __FILE__),
- device_image_interface(mconfig , *this),
- m_irq_handler(*this),
- m_flg_handler(*this),
- m_sts_handler(*this),
- m_tape_pos(TAPE_INIT_POS),
- m_image_dirty(false)
+ : device_t(mconfig, HP_TACO, "HP TACO", tag, owner, clock, "TACO", __FILE__),
+ device_image_interface(mconfig , *this),
+ m_irq_handler(*this),
+ m_flg_handler(*this),
+ m_sts_handler(*this),
+ m_tape_pos(TAPE_INIT_POS),
+ m_image_dirty(false)
{
- clear_state();
+ clear_state();
}
WRITE16_MEMBER(hp_taco_device::reg_w)
{
- LOG_0(("wr R%u = %04x\n", 4 + offset , data));
-
- // Any I/O activity clears IRQ
- irq_w(false);
-
- switch (offset) {
- case 0:
- // Data register
- m_data_reg = data;
- m_data_reg_full = true;
- break;
-
- case 1:
- // Command register
- start_cmd_exec(data & CMD_REG_MASK);
- break;
-
- case 2:
- // Tachometer register
- m_tach_reg = data;
- break;
-
- case 3:
- // Timing register
- m_timing_reg = data;
- break;
- }
+ LOG_0(("wr R%u = %04x\n", 4 + offset , data));
+
+ // Any I/O activity clears IRQ
+ irq_w(false);
+
+ switch (offset) {
+ case 0:
+ // Data register
+ m_data_reg = data;
+ m_data_reg_full = true;
+ break;
+
+ case 1:
+ // Command register
+ start_cmd_exec(data & CMD_REG_MASK);
+ break;
+
+ case 2:
+ // Tachometer register
+ m_tach_reg = data;
+ break;
+
+ case 3:
+ // Timing register
+ m_timing_reg = data;
+ break;
+ }
}
READ16_MEMBER(hp_taco_device::reg_r)
{
- UINT16 res = 0;
+ UINT16 res = 0;
- // Any I/O activity clears IRQ
- irq_w(false);
+ // Any I/O activity clears IRQ
+ irq_w(false);
- switch (offset) {
- case 0:
- // Data register
- res = m_data_reg;
- break;
+ switch (offset) {
+ case 0:
+ // Data register
+ res = m_data_reg;
+ break;
- case 1:
- // Command & status register
- res = (m_cmd_reg & CMD_REG_MASK) | (m_status_reg & STATUS_REG_MASK);
- break;
+ case 1:
+ // Command & status register
+ res = (m_cmd_reg & CMD_REG_MASK) | (m_status_reg & STATUS_REG_MASK);
+ break;
- case 2:
- // Tachometer register
- res = m_tach_reg;
- break;
+ case 2:
+ // Tachometer register
+ res = m_tach_reg;
+ break;
- case 3:
- // Checksum register: it clears when read
- res = m_checksum_reg;
- m_checksum_reg = 0;
- break;
- }
+ case 3:
+ // Checksum register: it clears when read
+ res = m_checksum_reg;
+ m_checksum_reg = 0;
+ break;
+ }
- LOG_0(("rd R%u = %04x\n", 4 + offset , res));
+ LOG_0(("rd R%u = %04x\n", 4 + offset , res));
- return res;
+ return res;
}
READ_LINE_MEMBER(hp_taco_device::flg_r)
{
- return m_flg;
+ return m_flg;
}
READ_LINE_MEMBER(hp_taco_device::sts_r)
{
- return m_sts;
+ return m_sts;
}
// device_config_complete
void hp_taco_device::device_config_complete()
{
- LOG(("device_config_complete"));
+ LOG(("device_config_complete"));
update_names();
}
// device_start
void hp_taco_device::device_start()
{
- LOG(("device_start"));
- m_irq_handler.resolve_safe();
- m_flg_handler.resolve_safe();
- m_sts_handler.resolve_safe();
-
- save_item(NAME(m_data_reg));
- save_item(NAME(m_data_reg_full));
- save_item(NAME(m_cmd_reg));
- save_item(NAME(m_cmd_state));
- save_item(NAME(m_status_reg));
- save_item(NAME(m_tach_reg));
- save_item(NAME(m_checksum_reg));
- save_item(NAME(m_timing_reg));
- save_item(NAME(m_irq));
- save_item(NAME(m_flg));
- save_item(NAME(m_sts));
- save_item(NAME(m_tape_pos));
- save_item(NAME(m_start_time));
- save_item(NAME(m_tape_fwd));
- save_item(NAME(m_tape_fast));
- save_item(NAME(m_image_dirty));
- save_item(NAME(m_tape_wr));
- save_item(NAME(m_rw_pos));
- save_item(NAME(m_next_word));
- save_item(NAME(m_rd_it_valid));
- save_item(NAME(m_gap_detect_start));
-
- m_tape_timer = timer_alloc(TAPE_TMR_ID);
- m_hole_timer = timer_alloc(HOLE_TMR_ID);
+ LOG(("device_start"));
+ m_irq_handler.resolve_safe();
+ m_flg_handler.resolve_safe();
+ m_sts_handler.resolve_safe();
+
+ save_item(NAME(m_data_reg));
+ save_item(NAME(m_data_reg_full));
+ save_item(NAME(m_cmd_reg));
+ save_item(NAME(m_cmd_state));
+ save_item(NAME(m_status_reg));
+ save_item(NAME(m_tach_reg));
+ save_item(NAME(m_checksum_reg));
+ save_item(NAME(m_timing_reg));
+ save_item(NAME(m_irq));
+ save_item(NAME(m_flg));
+ save_item(NAME(m_sts));
+ save_item(NAME(m_tape_pos));
+ save_item(NAME(m_start_time));
+ save_item(NAME(m_tape_fwd));
+ save_item(NAME(m_tape_fast));
+ save_item(NAME(m_image_dirty));
+ save_item(NAME(m_tape_wr));
+ save_item(NAME(m_rw_pos));
+ save_item(NAME(m_next_word));
+ save_item(NAME(m_rd_it_valid));
+ save_item(NAME(m_gap_detect_start));
+
+ m_tape_timer = timer_alloc(TAPE_TMR_ID);
+ m_hole_timer = timer_alloc(HOLE_TMR_ID);
}
// device_stop
@@ -416,593 +416,593 @@ void hp_taco_device::device_stop()
// device_reset
void hp_taco_device::device_reset()
{
- LOG(("device_reset"));
- clear_state();
+ LOG(("device_reset"));
+ clear_state();
- m_irq = false;
- m_flg = true;
+ m_irq = false;
+ m_flg = true;
- m_irq_handler(false);
- m_flg_handler(true);
- set_error(false);
+ m_irq_handler(false);
+ m_flg_handler(true);
+ set_error(false);
}
void hp_taco_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- if (CMD_CODE(m_cmd_reg) != CMD_STOP) {
- update_tape_pos();
- }
-
- switch (id) {
- case TAPE_TMR_ID:
- LOG_0(("Tape tmr @%g\n" , machine().time().as_double()));
-
- tape_pos_t length;
-
- switch (CMD_CODE(m_cmd_reg)) {
- case CMD_INDTA_INGAP:
- if (m_cmd_state == 0) {
- m_cmd_state = 1;
- tape_pos_t target = m_tape_pos;
- if (next_n_gap(target, 1, MIN_IRG_LENGTH)) {
- m_tape_timer->adjust(time_to_target(target));
- }
- return;
- }
- break;
-
- case CMD_RECORD_WRITE:
- if (m_cmd_state == 0) {
- if (m_rd_it->second == PREAMBLE_WORD) {
- LOG_0(("Got preamble\n"));
- m_cmd_state = 1;
- // m_rw_pos already at correct position
- m_tape_timer->adjust(fetch_next_wr_word());
- break;
- } else {
- adv_res_t res = adv_it(m_rd_it);
- if (res != ADV_NO_MORE_DATA) {
- m_tape_timer->adjust(time_to_rd_next_word(m_rw_pos));
- }
- // No IRQ
- return;
- }
- }
- // Intentional fall-through
- case CMD_INIT_WRITE:
- write_word(m_rw_pos , m_next_word , length);
- pos_offset(m_rw_pos , length);
- // Just to be sure..
- m_tape_pos = m_rw_pos;
- m_tape_timer->adjust(fetch_next_wr_word());
- break;
-
- case CMD_STOP:
- move_tape_pos(m_tape_fast ? FAST_BRAKE_DIST : SLOW_BRAKE_DIST);
- stop_tape();
- break;
-
- case CMD_INGAP_MOVE:
- if (m_cmd_state == 0) {
- m_cmd_state = 1;
- m_tape_timer->adjust(time_to_tach_pulses());
- return;
- }
- break;
-
- case CMD_FINAL_GAP:
- case CMD_WRITE_IRG:
- write_gap(m_rw_pos , m_tape_pos);
- m_hole_timer->reset();
- break;
-
- case CMD_SCAN_RECORDS:
- if (m_cmd_state == 0) {
- m_cmd_state = 1;
- tape_pos_t target = m_tape_pos;
- if (next_n_gap(target, 0x10000U - m_tach_reg, MIN_IRG_LENGTH)) {
- LOG_0(("%u gaps @%d\n" , 0x10000U - m_tach_reg, target));
- m_tape_timer->adjust(time_to_target(target));
- }
- return;
- } else {
- m_hole_timer->reset();
- }
- break;
-
- case CMD_MOVE_INDTA:
- if (m_cmd_state == 0) {
- if (next_data(m_rd_it , m_tape_pos , true)) {
- m_cmd_state = 1;
- m_tape_timer->adjust(time_to_target(farthest_end(m_rd_it)));
- }
- // No IRQ
- return;
- }
- // m_cmd_state == 1 -> IRQ & cmd end
- break;
-
- case CMD_DELTA_MOVE_HOLE:
- case CMD_DELTA_MOVE_IRG:
- // Interrupt at end of movement
- m_hole_timer->reset();
- break;
-
- case CMD_START_READ:
- {
- bool set_intr = true;
- // Just to be sure..
- m_tape_pos = m_rw_pos;
- if (m_cmd_state == 0) {
- set_intr = false;
- if (m_rd_it->second == PREAMBLE_WORD) {
- m_cmd_state = 1;
- }
- LOG_0(("Got preamble\n"));
- } else {
- m_data_reg = m_rd_it->second;
- m_checksum_reg += m_data_reg;
- LOG_0(("RD %04x\n" , m_data_reg));
- }
- adv_res_t res = adv_it(m_rd_it);
- LOG_0(("adv_it %d\n" , res));
- if (res == ADV_NO_MORE_DATA) {
- m_rd_it_valid = false;
- } else {
- if (res == ADV_DISCONT_DATA) {
- // Hit a gap, restart preamble search
- m_cmd_state = 0;
- }
- m_tape_timer->adjust(time_to_rd_next_word(m_rw_pos));
- }
- if (!set_intr) {
- return;
- }
- }
- break;
-
- case CMD_END_READ:
- {
- m_tape_pos = m_rw_pos;
- // Note: checksum is not updated
- m_data_reg = m_rd_it->second;
- LOG_0(("Final RD %04x\n" , m_data_reg));
- adv_res_t res = adv_it(m_rd_it);
- if (res == ADV_NO_MORE_DATA) {
- m_rd_it_valid = false;
- }
- m_hole_timer->reset();
- }
- break;
-
- default:
- // Other commands: just raise irq
- break;
- }
- irq_w(true);
- break;
-
- case HOLE_TMR_ID:
- LOG_0(("Hole tmr @%g\n" , machine().time().as_double()));
-
- BIT_SET(m_status_reg , STATUS_HOLE_BIT);
-
- switch (CMD_CODE(m_cmd_reg)) {
- case CMD_FINAL_GAP:
- case CMD_WRITE_IRG:
- write_gap(m_rw_pos , m_tape_pos);
- m_rw_pos = m_tape_pos;
- break;
-
- case CMD_SCAN_RECORDS:
- case CMD_DELTA_MOVE_HOLE:
- // Cmds 18 & 1c are terminated at first hole
- m_tape_timer->reset();
- irq_w(true);
- // No reloading of hole timer
- return;
-
- case CMD_DELTA_MOVE_IRG:
- // TODO: update r6
- m_hole_timer->adjust(time_to_next_hole());
- // No IRQ at holes
- return;
-
- case CMD_START_READ:
- case CMD_END_READ:
- set_error(true);
- break;
-
- default:
- // Other cmds: default processing (update tape pos, set IRQ, schedule timer for next hole)
- break;
- }
-
- irq_w(true);
- m_hole_timer->adjust(time_to_next_hole());
- break;
-
- default:
- break;
- }
+ if (CMD_CODE(m_cmd_reg) != CMD_STOP) {
+ update_tape_pos();
+ }
+
+ switch (id) {
+ case TAPE_TMR_ID:
+ LOG_0(("Tape tmr @%g\n" , machine().time().as_double()));
+
+ tape_pos_t length;
+
+ switch (CMD_CODE(m_cmd_reg)) {
+ case CMD_INDTA_INGAP:
+ if (m_cmd_state == 0) {
+ m_cmd_state = 1;
+ tape_pos_t target = m_tape_pos;
+ if (next_n_gap(target, 1, MIN_IRG_LENGTH)) {
+ m_tape_timer->adjust(time_to_target(target));
+ }
+ return;
+ }
+ break;
+
+ case CMD_RECORD_WRITE:
+ if (m_cmd_state == 0) {
+ if (m_rd_it->second == PREAMBLE_WORD) {
+ LOG_0(("Got preamble\n"));
+ m_cmd_state = 1;
+ // m_rw_pos already at correct position
+ m_tape_timer->adjust(fetch_next_wr_word());
+ break;
+ } else {
+ adv_res_t res = adv_it(m_rd_it);
+ if (res != ADV_NO_MORE_DATA) {
+ m_tape_timer->adjust(time_to_rd_next_word(m_rw_pos));
+ }
+ // No IRQ
+ return;
+ }
+ }
+ // Intentional fall-through
+ case CMD_INIT_WRITE:
+ write_word(m_rw_pos , m_next_word , length);
+ pos_offset(m_rw_pos , length);
+ // Just to be sure..
+ m_tape_pos = m_rw_pos;
+ m_tape_timer->adjust(fetch_next_wr_word());
+ break;
+
+ case CMD_STOP:
+ move_tape_pos(m_tape_fast ? FAST_BRAKE_DIST : SLOW_BRAKE_DIST);
+ stop_tape();
+ break;
+
+ case CMD_INGAP_MOVE:
+ if (m_cmd_state == 0) {
+ m_cmd_state = 1;
+ m_tape_timer->adjust(time_to_tach_pulses());
+ return;
+ }
+ break;
+
+ case CMD_FINAL_GAP:
+ case CMD_WRITE_IRG:
+ write_gap(m_rw_pos , m_tape_pos);
+ m_hole_timer->reset();
+ break;
+
+ case CMD_SCAN_RECORDS:
+ if (m_cmd_state == 0) {
+ m_cmd_state = 1;
+ tape_pos_t target = m_tape_pos;
+ if (next_n_gap(target, 0x10000U - m_tach_reg, MIN_IRG_LENGTH)) {
+ LOG_0(("%u gaps @%d\n" , 0x10000U - m_tach_reg, target));
+ m_tape_timer->adjust(time_to_target(target));
+ }
+ return;
+ } else {
+ m_hole_timer->reset();
+ }
+ break;
+
+ case CMD_MOVE_INDTA:
+ if (m_cmd_state == 0) {
+ if (next_data(m_rd_it , m_tape_pos , true)) {
+ m_cmd_state = 1;
+ m_tape_timer->adjust(time_to_target(farthest_end(m_rd_it)));
+ }
+ // No IRQ
+ return;
+ }
+ // m_cmd_state == 1 -> IRQ & cmd end
+ break;
+
+ case CMD_DELTA_MOVE_HOLE:
+ case CMD_DELTA_MOVE_IRG:
+ // Interrupt at end of movement
+ m_hole_timer->reset();
+ break;
+
+ case CMD_START_READ:
+ {
+ bool set_intr = true;
+ // Just to be sure..
+ m_tape_pos = m_rw_pos;
+ if (m_cmd_state == 0) {
+ set_intr = false;
+ if (m_rd_it->second == PREAMBLE_WORD) {
+ m_cmd_state = 1;
+ }
+ LOG_0(("Got preamble\n"));
+ } else {
+ m_data_reg = m_rd_it->second;
+ m_checksum_reg += m_data_reg;
+ LOG_0(("RD %04x\n" , m_data_reg));
+ }
+ adv_res_t res = adv_it(m_rd_it);
+ LOG_0(("adv_it %d\n" , res));
+ if (res == ADV_NO_MORE_DATA) {
+ m_rd_it_valid = false;
+ } else {
+ if (res == ADV_DISCONT_DATA) {
+ // Hit a gap, restart preamble search
+ m_cmd_state = 0;
+ }
+ m_tape_timer->adjust(time_to_rd_next_word(m_rw_pos));
+ }
+ if (!set_intr) {
+ return;
+ }
+ }
+ break;
+
+ case CMD_END_READ:
+ {
+ m_tape_pos = m_rw_pos;
+ // Note: checksum is not updated
+ m_data_reg = m_rd_it->second;
+ LOG_0(("Final RD %04x\n" , m_data_reg));
+ adv_res_t res = adv_it(m_rd_it);
+ if (res == ADV_NO_MORE_DATA) {
+ m_rd_it_valid = false;
+ }
+ m_hole_timer->reset();
+ }
+ break;
+
+ default:
+ // Other commands: just raise irq
+ break;
+ }
+ irq_w(true);
+ break;
+
+ case HOLE_TMR_ID:
+ LOG_0(("Hole tmr @%g\n" , machine().time().as_double()));
+
+ BIT_SET(m_status_reg , STATUS_HOLE_BIT);
+
+ switch (CMD_CODE(m_cmd_reg)) {
+ case CMD_FINAL_GAP:
+ case CMD_WRITE_IRG:
+ write_gap(m_rw_pos , m_tape_pos);
+ m_rw_pos = m_tape_pos;
+ break;
+
+ case CMD_SCAN_RECORDS:
+ case CMD_DELTA_MOVE_HOLE:
+ // Cmds 18 & 1c are terminated at first hole
+ m_tape_timer->reset();
+ irq_w(true);
+ // No reloading of hole timer
+ return;
+
+ case CMD_DELTA_MOVE_IRG:
+ // TODO: update r6
+ m_hole_timer->adjust(time_to_next_hole());
+ // No IRQ at holes
+ return;
+
+ case CMD_START_READ:
+ case CMD_END_READ:
+ set_error(true);
+ break;
+
+ default:
+ // Other cmds: default processing (update tape pos, set IRQ, schedule timer for next hole)
+ break;
+ }
+
+ irq_w(true);
+ m_hole_timer->adjust(time_to_next_hole());
+ break;
+
+ default:
+ break;
+ }
}
void hp_taco_device::clear_state(void)
{
- m_data_reg = 0;
- m_data_reg_full = false;
- m_cmd_reg = 0;
- m_status_reg = 0;
- m_tach_reg = 0;
- m_checksum_reg = 0;
- m_timing_reg = 0;
- m_cmd_state = 0;
- // m_tape_pos is not reset, tape stays where it is
- m_start_time = attotime::never;
- m_tape_fwd = false;
- m_tape_fast = false;
- // m_image_dirty is not touched
- m_tape_wr = false;
- m_rw_pos = 0;
- m_next_word = 0;
- m_rd_it_valid = false;
- m_gap_detect_start = NULL_TAPE_POS;
-
- set_tape_present(false);
- set_tape_present(is_loaded());
+ m_data_reg = 0;
+ m_data_reg_full = false;
+ m_cmd_reg = 0;
+ m_status_reg = 0;
+ m_tach_reg = 0;
+ m_checksum_reg = 0;
+ m_timing_reg = 0;
+ m_cmd_state = 0;
+ // m_tape_pos is not reset, tape stays where it is
+ m_start_time = attotime::never;
+ m_tape_fwd = false;
+ m_tape_fast = false;
+ // m_image_dirty is not touched
+ m_tape_wr = false;
+ m_rw_pos = 0;
+ m_next_word = 0;
+ m_rd_it_valid = false;
+ m_gap_detect_start = NULL_TAPE_POS;
+
+ set_tape_present(false);
+ set_tape_present(is_loaded());
}
void hp_taco_device::irq_w(bool state)
{
- if (state != m_irq) {
- m_irq = state;
- m_irq_handler(state);
- LOG_0(("IRQ = %d\n" , state));
- }
+ if (state != m_irq) {
+ m_irq = state;
+ m_irq_handler(state);
+ LOG_0(("IRQ = %d\n" , state));
+ }
}
void hp_taco_device::set_error(bool state)
{
- m_sts = !state;
- m_sts_handler(m_sts);
- LOG_0(("error = %d\n" , state));
+ m_sts = !state;
+ m_sts_handler(m_sts);
+ LOG_0(("error = %d\n" , state));
}
unsigned hp_taco_device::speed_to_tick_freq(void) const
{
- return m_tape_fast ? TACH_FREQ_FAST * TAPE_POS_FRACT : TACH_FREQ_SLOW * TAPE_POS_FRACT;
+ return m_tape_fast ? TACH_FREQ_FAST * TAPE_POS_FRACT : TACH_FREQ_SLOW * TAPE_POS_FRACT;
}
bool hp_taco_device::pos_offset(tape_pos_t& pos , tape_pos_t offset) const
{
- if (offset == 0) {
- return true;
- }
-
- if (!m_tape_fwd) {
- offset = -offset;
- }
-
- pos += offset;
-
- // In real life tape would unspool..
- if (pos > TAPE_LENGTH) {
- pos = TAPE_LENGTH;
- return false;
- } else if (pos < 0) {
- pos = 0;
- return false;
- } else {
- return true;
- }
+ if (offset == 0) {
+ return true;
+ }
+
+ if (!m_tape_fwd) {
+ offset = -offset;
+ }
+
+ pos += offset;
+
+ // In real life tape would unspool..
+ if (pos > TAPE_LENGTH) {
+ pos = TAPE_LENGTH;
+ return false;
+ } else if (pos < 0) {
+ pos = 0;
+ return false;
+ } else {
+ return true;
+ }
}
void hp_taco_device::move_tape_pos(tape_pos_t delta_pos)
{
- tape_pos_t tape_start_pos = m_tape_pos;
- if (!pos_offset(m_tape_pos , delta_pos)) {
- LOG(("Tape unspooled!\n"));
- }
- m_start_time = machine().time();
- LOG_0(("Tape pos = %u\n" , m_tape_pos));
- if (any_hole(tape_start_pos , m_tape_pos)) {
- // Crossed one or more holes
- BIT_SET(m_status_reg , STATUS_HOLE_BIT);
- }
+ tape_pos_t tape_start_pos = m_tape_pos;
+ if (!pos_offset(m_tape_pos , delta_pos)) {
+ LOG(("Tape unspooled!\n"));
+ }
+ m_start_time = machine().time();
+ LOG_0(("Tape pos = %u\n" , m_tape_pos));
+ if (any_hole(tape_start_pos , m_tape_pos)) {
+ // Crossed one or more holes
+ BIT_SET(m_status_reg , STATUS_HOLE_BIT);
+ }
}
void hp_taco_device::update_tape_pos(void)
{
- if (m_start_time.is_never()) {
- // Tape not moving
- return;
- }
-
- attotime delta_time(machine().time() - m_start_time);
- LOG_0(("delta_time = %g\n" , delta_time.as_double()));
- // How many tachometer ticks has the tape moved?
- tape_pos_t delta_tach = (tape_pos_t)(delta_time.as_ticks(speed_to_tick_freq()));
- LOG_0(("delta_tach = %u\n" , delta_tach));
-
- move_tape_pos(delta_tach);
-
- // Gap detection
- bool gap_detected = false;
- if (m_gap_detect_start != NULL_TAPE_POS && abs(m_gap_detect_start - m_tape_pos) >= MIN_IRG_LENGTH) {
- tape_pos_t tmp = m_tape_pos;
- pos_offset(tmp , -MIN_IRG_LENGTH);
- gap_detected = just_gap(tmp , m_tape_pos);
- }
- if (gap_detected) {
- BIT_SET(m_status_reg, STATUS_GAP_BIT);
- } else {
- BIT_CLR(m_status_reg, STATUS_GAP_BIT);
- }
+ if (m_start_time.is_never()) {
+ // Tape not moving
+ return;
+ }
+
+ attotime delta_time(machine().time() - m_start_time);
+ LOG_0(("delta_time = %g\n" , delta_time.as_double()));
+ // How many tachometer ticks has the tape moved?
+ tape_pos_t delta_tach = (tape_pos_t)(delta_time.as_ticks(speed_to_tick_freq()));
+ LOG_0(("delta_tach = %u\n" , delta_tach));
+
+ move_tape_pos(delta_tach);
+
+ // Gap detection
+ bool gap_detected = false;
+ if (m_gap_detect_start != NULL_TAPE_POS && abs(m_gap_detect_start - m_tape_pos) >= MIN_IRG_LENGTH) {
+ tape_pos_t tmp = m_tape_pos;
+ pos_offset(tmp , -MIN_IRG_LENGTH);
+ gap_detected = just_gap(tmp , m_tape_pos);
+ }
+ if (gap_detected) {
+ BIT_SET(m_status_reg, STATUS_GAP_BIT);
+ } else {
+ BIT_CLR(m_status_reg, STATUS_GAP_BIT);
+ }
}
void hp_taco_device::ensure_a_lt_b(tape_pos_t& a , tape_pos_t& b)
{
- if (a > b) {
- // Ensure A always comes before B
- tape_pos_t tmp;
- tmp = a;
- a = b;
- b = tmp;
- }
+ if (a > b) {
+ // Ensure A always comes before B
+ tape_pos_t tmp;
+ tmp = a;
+ a = b;
+ b = tmp;
+ }
}
// Is there any hole in a given section of tape?
bool hp_taco_device::any_hole(tape_pos_t tape_pos_a , tape_pos_t tape_pos_b)
{
- ensure_a_lt_b(tape_pos_a , tape_pos_b);
+ ensure_a_lt_b(tape_pos_a , tape_pos_b);
- for (tape_pos_t hole : tape_holes) {
- if (tape_pos_a < hole && tape_pos_b >= hole) {
- return true;
- }
- }
+ for (tape_pos_t hole : tape_holes) {
+ if (tape_pos_a < hole && tape_pos_b >= hole) {
+ return true;
+ }
+ }
- return false;
+ return false;
}
// Position of next hole tape will reach in a given direction
hp_taco_device::tape_pos_t hp_taco_device::next_hole(void) const
{
- if (m_tape_fwd) {
- for (tape_pos_t hole : tape_holes) {
- if (hole > m_tape_pos) {
- LOG_0(("next hole fwd @%u = %u\n" , m_tape_pos , hole));
- return hole;
- }
- }
- // No more holes: will hit end of tape
- return TAPE_LENGTH;
- } else {
- for (int i = (sizeof(tape_holes) / sizeof(tape_holes[ 0 ])) - 1; i >= 0; i--) {
- if (tape_holes[ i ] < m_tape_pos) {
- LOG_0(("next hole rev @%u = %u\n" , m_tape_pos , tape_holes[ i ]));
- return tape_holes[ i ];
- }
- }
- // No more holes: will hit start of tape
- return 0;
- }
+ if (m_tape_fwd) {
+ for (tape_pos_t hole : tape_holes) {
+ if (hole > m_tape_pos) {
+ LOG_0(("next hole fwd @%u = %u\n" , m_tape_pos , hole));
+ return hole;
+ }
+ }
+ // No more holes: will hit end of tape
+ return TAPE_LENGTH;
+ } else {
+ for (int i = (sizeof(tape_holes) / sizeof(tape_holes[ 0 ])) - 1; i >= 0; i--) {
+ if (tape_holes[ i ] < m_tape_pos) {
+ LOG_0(("next hole rev @%u = %u\n" , m_tape_pos , tape_holes[ i ]));
+ return tape_holes[ i ];
+ }
+ }
+ // No more holes: will hit start of tape
+ return 0;
+ }
}
attotime hp_taco_device::time_to_distance(tape_pos_t distance) const
{
- // +1 for rounding
- return attotime::from_ticks(distance + 1 , speed_to_tick_freq());
+ // +1 for rounding
+ return attotime::from_ticks(distance + 1 , speed_to_tick_freq());
}
attotime hp_taco_device::time_to_target(tape_pos_t target) const
{
- return time_to_distance(abs(target - m_tape_pos));
+ return time_to_distance(abs(target - m_tape_pos));
}
bool hp_taco_device::start_tape_cmd(UINT16 cmd_reg , UINT16 must_be_1 , UINT16 must_be_0)
{
- m_cmd_reg = cmd_reg;
-
- UINT16 to_be_tested = (m_cmd_reg & CMD_REG_MASK) | (m_status_reg & STATUS_REG_MASK);
- // Bits in STATUS_ERR_MASK must always be 0
- must_be_0 |= STATUS_ERR_MASK;
-
- // It's not an error if the error state is already set (sts false)
- if (((to_be_tested & (must_be_1 | must_be_0)) ^ must_be_1) != 0) {
- set_error(true);
- return false;
- } else {
- bool prev_tape_wr = m_tape_wr;
- bool prev_tape_fwd = m_tape_fwd;
- bool prev_tape_fast = m_tape_fast;
- bool not_moving = m_start_time.is_never();
-
- m_start_time = machine().time();
- m_tape_wr = (must_be_0 & STATUS_WPR_MASK) != 0;
- m_tape_fwd = DIR_FWD(m_cmd_reg);
- m_tape_fast = SPEED_FAST(m_cmd_reg);
- // TODO: remove?
- BIT_CLR(m_status_reg, STATUS_HOLE_BIT);
-
- if (m_tape_wr) {
- // Write command: disable gap detector
- m_gap_detect_start = NULL_TAPE_POS;
- BIT_CLR(m_status_reg, STATUS_GAP_BIT);
- m_image_dirty = true;
- } else if (not_moving || prev_tape_wr != m_tape_wr || prev_tape_fwd != m_tape_fwd || prev_tape_fast != m_tape_fast) {
- // Tape started right now, switched from writing to reading, direction changed or speed changed: (re)start gap detector
- m_gap_detect_start = m_tape_pos;
- BIT_CLR(m_status_reg, STATUS_GAP_BIT);
- }
- return true;
- }
+ m_cmd_reg = cmd_reg;
+
+ UINT16 to_be_tested = (m_cmd_reg & CMD_REG_MASK) | (m_status_reg & STATUS_REG_MASK);
+ // Bits in STATUS_ERR_MASK must always be 0
+ must_be_0 |= STATUS_ERR_MASK;
+
+ // It's not an error if the error state is already set (sts false)
+ if (((to_be_tested & (must_be_1 | must_be_0)) ^ must_be_1) != 0) {
+ set_error(true);
+ return false;
+ } else {
+ bool prev_tape_wr = m_tape_wr;
+ bool prev_tape_fwd = m_tape_fwd;
+ bool prev_tape_fast = m_tape_fast;
+ bool not_moving = m_start_time.is_never();
+
+ m_start_time = machine().time();
+ m_tape_wr = (must_be_0 & STATUS_WPR_MASK) != 0;
+ m_tape_fwd = DIR_FWD(m_cmd_reg);
+ m_tape_fast = SPEED_FAST(m_cmd_reg);
+ // TODO: remove?
+ BIT_CLR(m_status_reg, STATUS_HOLE_BIT);
+
+ if (m_tape_wr) {
+ // Write command: disable gap detector
+ m_gap_detect_start = NULL_TAPE_POS;
+ BIT_CLR(m_status_reg, STATUS_GAP_BIT);
+ m_image_dirty = true;
+ } else if (not_moving || prev_tape_wr != m_tape_wr || prev_tape_fwd != m_tape_fwd || prev_tape_fast != m_tape_fast) {
+ // Tape started right now, switched from writing to reading, direction changed or speed changed: (re)start gap detector
+ m_gap_detect_start = m_tape_pos;
+ BIT_CLR(m_status_reg, STATUS_GAP_BIT);
+ }
+ return true;
+ }
}
void hp_taco_device::stop_tape(void)
{
- m_start_time = attotime::never;
- m_gap_detect_start = NULL_TAPE_POS;
+ m_start_time = attotime::never;
+ m_gap_detect_start = NULL_TAPE_POS;
}
hp_taco_device::tape_track_t& hp_taco_device::current_track(void)
{
- return m_tracks[ BIT(m_status_reg , STATUS_TRACKB_BIT) ];
+ return m_tracks[ BIT(m_status_reg , STATUS_TRACKB_BIT) ];
}
// Return physical length of a 16-bit word on tape
hp_taco_device::tape_pos_t hp_taco_device::word_length(tape_word_t w)
{
- unsigned zeros , ones;
+ unsigned zeros , ones;
- // pop count of w
- ones = (w & 0x5555) + ((w >> 1) & 0x5555);
- ones = (ones & 0x3333) + ((ones >> 2) & 0x3333);
- ones = (ones & 0x0f0f) + ((ones >> 4) & 0x0f0f);
- ones = (ones & 0x00ff) + ((ones >> 8) & 0x00ff);
+ // pop count of w
+ ones = (w & 0x5555) + ((w >> 1) & 0x5555);
+ ones = (ones & 0x3333) + ((ones >> 2) & 0x3333);
+ ones = (ones & 0x0f0f) + ((ones >> 4) & 0x0f0f);
+ ones = (ones & 0x00ff) + ((ones >> 8) & 0x00ff);
- zeros = 16 - ones;
+ zeros = 16 - ones;
- return zeros * ZERO_BIT_LEN + (ones + 1) * ONE_BIT_LEN;
+ return zeros * ZERO_BIT_LEN + (ones + 1) * ONE_BIT_LEN;
}
hp_taco_device::tape_pos_t hp_taco_device::word_end_pos(const tape_track_t::iterator& it)
{
- return it->first + word_length(it->second);
+ return it->first + word_length(it->second);
}
void hp_taco_device::adjust_it(tape_track_t& track , tape_track_t::iterator& it , tape_pos_t pos)
{
- if (it != track.begin()) {
- it--;
- if (word_end_pos(it) <= pos) {
- it++;
- }
- }
+ if (it != track.begin()) {
+ it--;
+ if (word_end_pos(it) <= pos) {
+ it++;
+ }
+ }
}
// Write a word on current tape track
void hp_taco_device::write_word(tape_pos_t start , tape_word_t word , tape_pos_t& length)
{
- tape_track_t& track = current_track();
- tape_track_t::iterator it_low = track.lower_bound(start);
- adjust_it(track , it_low , start);
- length = word_length(word);
- tape_pos_t end_pos = start + length;
- tape_track_t::iterator it_high = track.lower_bound(end_pos);
+ tape_track_t& track = current_track();
+ tape_track_t::iterator it_low = track.lower_bound(start);
+ adjust_it(track , it_low , start);
+ length = word_length(word);
+ tape_pos_t end_pos = start + length;
+ tape_track_t::iterator it_high = track.lower_bound(end_pos);
- track.erase(it_low , it_high);
+ track.erase(it_low , it_high);
- track.insert(it_high , std::make_pair(start, word));
- LOG_0(("WR %04x @ T%u:%u\n" , word , BIT(m_status_reg , STATUS_TRACKB_BIT) , start));
+ track.insert(it_high , std::make_pair(start, word));
+ LOG_0(("WR %04x @ T%u:%u\n" , word , BIT(m_status_reg , STATUS_TRACKB_BIT) , start));
}
// Write a gap on current track
void hp_taco_device::write_gap(tape_pos_t a , tape_pos_t b)
{
- ensure_a_lt_b(a , b);
- tape_track_t& track = current_track();
- tape_track_t::iterator it_low = track.lower_bound(a);
- adjust_it(track , it_low , a);
- tape_track_t::iterator it_high = track.lower_bound(b);
+ ensure_a_lt_b(a , b);
+ tape_track_t& track = current_track();
+ tape_track_t::iterator it_low = track.lower_bound(a);
+ adjust_it(track , it_low , a);
+ tape_track_t::iterator it_high = track.lower_bound(b);
- track.erase(it_low, it_high);
+ track.erase(it_low, it_high);
- LOG_0(("GAP on T%u:[%u,%u)\n" , BIT(m_status_reg , STATUS_TRACKB_BIT) , a , b));
+ LOG_0(("GAP on T%u:[%u,%u)\n" , BIT(m_status_reg , STATUS_TRACKB_BIT) , a , b));
}
bool hp_taco_device::just_gap(tape_pos_t a , tape_pos_t b)
{
- ensure_a_lt_b(a , b);
- tape_track_t& track = current_track();
- tape_track_t::iterator it_low = track.lower_bound(a);
- tape_track_t::iterator it_high = track.lower_bound(b);
+ ensure_a_lt_b(a , b);
+ tape_track_t& track = current_track();
+ tape_track_t::iterator it_low = track.lower_bound(a);
+ tape_track_t::iterator it_high = track.lower_bound(b);
- adjust_it(track, it_low, a);
+ adjust_it(track, it_low, a);
- return it_low == it_high;
+ return it_low == it_high;
}
hp_taco_device::tape_pos_t hp_taco_device::farthest_end(const tape_track_t::iterator& it) const
{
- if (m_tape_fwd) {
- return word_end_pos(it);
- } else {
- return it->first;
- }
+ if (m_tape_fwd) {
+ return word_end_pos(it);
+ } else {
+ return it->first;
+ }
}
bool hp_taco_device::next_data(tape_track_t::iterator& it , tape_pos_t pos , bool inclusive)
{
- tape_track_t& track = current_track();
- it = track.lower_bound(pos);
- if (m_tape_fwd) {
- if (inclusive) {
- adjust_it(track, it, pos);
- }
- return it != track.end();
- } else {
- // Never more than 2 iterations
- do {
- if (it == track.begin()) {
- it = track.end();
- return false;
- }
- it--;
- } while (!inclusive && word_end_pos(it) > pos);
- return true;
- }
+ tape_track_t& track = current_track();
+ it = track.lower_bound(pos);
+ if (m_tape_fwd) {
+ if (inclusive) {
+ adjust_it(track, it, pos);
+ }
+ return it != track.end();
+ } else {
+ // Never more than 2 iterations
+ do {
+ if (it == track.begin()) {
+ it = track.end();
+ return false;
+ }
+ it--;
+ } while (!inclusive && word_end_pos(it) > pos);
+ return true;
+ }
}
hp_taco_device::adv_res_t hp_taco_device::adv_it(tape_track_t::iterator& it)
{
- tape_track_t& track = current_track();
- if (m_tape_fwd) {
- tape_pos_t prev_pos = word_end_pos(it);
- it++;
- if (it == track.end()) {
- return ADV_NO_MORE_DATA;
- } else {
- adv_res_t res = prev_pos == it->first ? ADV_CONT_DATA : ADV_DISCONT_DATA;
- return res;
- }
- } else {
- if (it == track.begin()) {
- it = track.end();
- return ADV_NO_MORE_DATA;
- } else {
- tape_pos_t prev_pos = it->first;
- it--;
- return prev_pos == word_end_pos(it) ? ADV_CONT_DATA : ADV_DISCONT_DATA;
- }
- }
+ tape_track_t& track = current_track();
+ if (m_tape_fwd) {
+ tape_pos_t prev_pos = word_end_pos(it);
+ it++;
+ if (it == track.end()) {
+ return ADV_NO_MORE_DATA;
+ } else {
+ adv_res_t res = prev_pos == it->first ? ADV_CONT_DATA : ADV_DISCONT_DATA;
+ return res;
+ }
+ } else {
+ if (it == track.begin()) {
+ it = track.end();
+ return ADV_NO_MORE_DATA;
+ } else {
+ tape_pos_t prev_pos = it->first;
+ it--;
+ return prev_pos == word_end_pos(it) ? ADV_CONT_DATA : ADV_DISCONT_DATA;
+ }
+ }
}
attotime hp_taco_device::fetch_next_wr_word(void)
{
- if (m_data_reg_full) {
- m_next_word = m_data_reg;
- m_data_reg_full = false;
- LOG_0(("next %04x (DR)\n" , m_next_word));
- } else {
- // When data register is empty, write checksum word
- m_next_word = m_checksum_reg;
- LOG_0(("next %04x (CS)\n" , m_next_word));
- }
- // Update checksum with new word
- m_checksum_reg += m_next_word;
-
- return time_to_distance(word_length(m_next_word));
+ if (m_data_reg_full) {
+ m_next_word = m_data_reg;
+ m_data_reg_full = false;
+ LOG_0(("next %04x (DR)\n" , m_next_word));
+ } else {
+ // When data register is empty, write checksum word
+ m_next_word = m_checksum_reg;
+ LOG_0(("next %04x (CS)\n" , m_next_word));
+ }
+ // Update checksum with new word
+ m_checksum_reg += m_next_word;
+
+ return time_to_distance(word_length(m_next_word));
}
attotime hp_taco_device::time_to_rd_next_word(tape_pos_t& word_rd_pos)
{
- if (m_rd_it_valid) {
- word_rd_pos = farthest_end(m_rd_it);
- return time_to_target(word_rd_pos);
- } else {
- return attotime::never;
- }
+ if (m_rd_it_valid) {
+ word_rd_pos = farthest_end(m_rd_it);
+ return time_to_target(word_rd_pos);
+ } else {
+ return attotime::never;
+ }
}
/**
@@ -1017,451 +1017,451 @@ attotime hp_taco_device::time_to_rd_next_word(tape_pos_t& word_rd_pos)
*/
bool hp_taco_device::next_n_gap(tape_pos_t& pos , tape_track_t::iterator it , unsigned n_gaps , tape_pos_t min_gap)
{
- tape_track_t& track = current_track();
- bool done = false;
- tape_track_t::iterator prev_it;
-
- if (m_tape_fwd) {
- tape_pos_t next_pos;
-
- while (1) {
- if (it == track.end()) {
- next_pos = TAPE_LENGTH;
- done = true;
- } else {
- next_pos = it->first;
- }
- if (((next_pos - pos) >= min_gap && --n_gaps == 0) || done) {
- break;
- }
- adv_res_t adv_res;
- do {
- prev_it = it;
- adv_res = adv_it(it);
- } while (adv_res == ADV_CONT_DATA);
- pos = word_end_pos(prev_it);
- }
- } else {
- tape_pos_t next_pos;
-
- while (1) {
- if (it == track.end()) {
- next_pos = 0;
- done = true;
- } else {
- next_pos = word_end_pos(it);
- }
- if (((pos - next_pos) >= min_gap && --n_gaps == 0) || done) {
- break;
- }
- adv_res_t adv_res;
- do {
- prev_it = it;
- adv_res = adv_it(it);
- } while (adv_res == ADV_CONT_DATA);
- pos = prev_it->first;
- }
- }
-
- // Set "pos" where minimum gap size is met
- pos_offset(pos , min_gap);
-
- return n_gaps == 0;
+ tape_track_t& track = current_track();
+ bool done = false;
+ tape_track_t::iterator prev_it;
+
+ if (m_tape_fwd) {
+ tape_pos_t next_pos;
+
+ while (1) {
+ if (it == track.end()) {
+ next_pos = TAPE_LENGTH;
+ done = true;
+ } else {
+ next_pos = it->first;
+ }
+ if (((next_pos - pos) >= min_gap && --n_gaps == 0) || done) {
+ break;
+ }
+ adv_res_t adv_res;
+ do {
+ prev_it = it;
+ adv_res = adv_it(it);
+ } while (adv_res == ADV_CONT_DATA);
+ pos = word_end_pos(prev_it);
+ }
+ } else {
+ tape_pos_t next_pos;
+
+ while (1) {
+ if (it == track.end()) {
+ next_pos = 0;
+ done = true;
+ } else {
+ next_pos = word_end_pos(it);
+ }
+ if (((pos - next_pos) >= min_gap && --n_gaps == 0) || done) {
+ break;
+ }
+ adv_res_t adv_res;
+ do {
+ prev_it = it;
+ adv_res = adv_it(it);
+ } while (adv_res == ADV_CONT_DATA);
+ pos = prev_it->first;
+ }
+ }
+
+ // Set "pos" where minimum gap size is met
+ pos_offset(pos , min_gap);
+
+ return n_gaps == 0;
}
bool hp_taco_device::next_n_gap(tape_pos_t& pos , unsigned n_gaps , tape_pos_t min_gap)
{
- tape_track_t::iterator it;
- // First align with next data
- next_data(it, pos, true);
- // Then scan for n_gaps
- return next_n_gap(pos, it, n_gaps, min_gap);
+ tape_track_t::iterator it;
+ // First align with next data
+ next_data(it, pos, true);
+ // Then scan for n_gaps
+ return next_n_gap(pos, it, n_gaps, min_gap);
}
void hp_taco_device::clear_tape(void)
{
- for (unsigned track_n = 0; track_n < 2; track_n++) {
- m_tracks[ track_n ].clear();
- }
+ for (unsigned track_n = 0; track_n < 2; track_n++) {
+ m_tracks[ track_n ].clear();
+ }
}
void hp_taco_device::dump_sequence(tape_track_t::const_iterator it_start , unsigned n_words)
{
- if (n_words) {
- UINT32 tmp32;
- UINT16 tmp16;
-
- tmp32 = n_words;
- fwrite(&tmp32 , sizeof(tmp32));
- tmp32 = it_start->first;
- fwrite(&tmp32 , sizeof(tmp32));
-
- for (unsigned i = 0; i < n_words; i++) {
- tmp16 = it_start->second;
- fwrite(&tmp16 , sizeof(tmp16));
- it_start++;
- }
- }
+ if (n_words) {
+ UINT32 tmp32;
+ UINT16 tmp16;
+
+ tmp32 = n_words;
+ fwrite(&tmp32 , sizeof(tmp32));
+ tmp32 = it_start->first;
+ fwrite(&tmp32 , sizeof(tmp32));
+
+ for (unsigned i = 0; i < n_words; i++) {
+ tmp16 = it_start->second;
+ fwrite(&tmp16 , sizeof(tmp16));
+ it_start++;
+ }
+ }
}
void hp_taco_device::save_tape(void)
{
- UINT32 tmp32;
-
- fseek(0, SEEK_SET);
-
- tmp32 = FILE_MAGIC;
- fwrite(&tmp32 , sizeof(tmp32));
-
- for (unsigned track_n = 0; track_n < 2; track_n++) {
- const tape_track_t& track = m_tracks[ track_n ];
- tape_pos_t next_pos = (tape_pos_t)-1;
- unsigned n_words = 0;
- tape_track_t::const_iterator it_start;
- for (tape_track_t::const_iterator it = track.cbegin(); it != track.cend(); it++) {
- if (it->first != next_pos) {
- dump_sequence(it_start , n_words);
- it_start = it;
- n_words = 0;
- }
- next_pos = it->first + word_length(it->second);
- n_words++;
- }
- dump_sequence(it_start , n_words);
- // End of track
- tmp32 = (UINT32)-1;
- fwrite(&tmp32 , sizeof(tmp32));
- }
+ UINT32 tmp32;
+
+ fseek(0, SEEK_SET);
+
+ tmp32 = FILE_MAGIC;
+ fwrite(&tmp32 , sizeof(tmp32));
+
+ for (unsigned track_n = 0; track_n < 2; track_n++) {
+ const tape_track_t& track = m_tracks[ track_n ];
+ tape_pos_t next_pos = (tape_pos_t)-1;
+ unsigned n_words = 0;
+ tape_track_t::const_iterator it_start;
+ for (tape_track_t::const_iterator it = track.cbegin(); it != track.cend(); it++) {
+ if (it->first != next_pos) {
+ dump_sequence(it_start , n_words);
+ it_start = it;
+ n_words = 0;
+ }
+ next_pos = it->first + word_length(it->second);
+ n_words++;
+ }
+ dump_sequence(it_start , n_words);
+ // End of track
+ tmp32 = (UINT32)-1;
+ fwrite(&tmp32 , sizeof(tmp32));
+ }
}
bool hp_taco_device::load_track(tape_track_t& track)
{
- UINT32 tmp32;
+ UINT32 tmp32;
- track.clear();
+ track.clear();
- while (1) {
- if (fread(&tmp32 , sizeof(tmp32)) != sizeof(tmp32)) {
- return false;
- }
+ while (1) {
+ if (fread(&tmp32 , sizeof(tmp32)) != sizeof(tmp32)) {
+ return false;
+ }
- if (tmp32 == (UINT32)-1) {
- return true;
- }
+ if (tmp32 == (UINT32)-1) {
+ return true;
+ }
- unsigned n_words = tmp32;
+ unsigned n_words = tmp32;
- if (fread(&tmp32 , sizeof(tmp32)) != sizeof(tmp32)) {
- return false;
- }
+ if (fread(&tmp32 , sizeof(tmp32)) != sizeof(tmp32)) {
+ return false;
+ }
- tape_pos_t pos = (tape_pos_t)tmp32;
+ tape_pos_t pos = (tape_pos_t)tmp32;
- for (unsigned i = 0; i < n_words; i++) {
- UINT16 tmp16;
+ for (unsigned i = 0; i < n_words; i++) {
+ UINT16 tmp16;
- if (fread(&tmp16 , sizeof(tmp16)) != sizeof(tmp16)) {
- return false;
- }
+ if (fread(&tmp16 , sizeof(tmp16)) != sizeof(tmp16)) {
+ return false;
+ }
- track.insert(std::make_pair(pos , tmp16));
- pos += word_length(tmp16);
- }
- }
+ track.insert(std::make_pair(pos , tmp16));
+ pos += word_length(tmp16);
+ }
+ }
}
bool hp_taco_device::load_tape(void)
{
- UINT32 magic;
-
- if (fread(&magic , sizeof(magic)) != sizeof(magic) ||
- magic != FILE_MAGIC) {
- return false;
- }
-
- for (unsigned track_n = 0; track_n < 2; track_n++) {
- if (!load_track(m_tracks[ track_n ])) {
- LOG(("load_tape failed"));
- clear_tape();
- return false;
- }
- }
-
- LOG(("load_tape done\n"));
- return true;
+ UINT32 magic;
+
+ if (fread(&magic , sizeof(magic)) != sizeof(magic) ||
+ magic != FILE_MAGIC) {
+ return false;
+ }
+
+ for (unsigned track_n = 0; track_n < 2; track_n++) {
+ if (!load_track(m_tracks[ track_n ])) {
+ LOG(("load_tape failed"));
+ clear_tape();
+ return false;
+ }
+ }
+
+ LOG(("load_tape done\n"));
+ return true;
}
void hp_taco_device::set_tape_present(bool present)
{
- if (present) {
- if (is_readonly()) {
- BIT_SET(m_status_reg, STATUS_WPR_BIT);
- } else {
- BIT_CLR(m_status_reg, STATUS_WPR_BIT);
- }
- // STATUS_CART_OUT_BIT is reset by CMD_CLEAR
- } else {
- BIT_SET(m_status_reg, STATUS_CART_OUT_BIT);
- BIT_SET(m_status_reg, STATUS_WPR_BIT);
- }
+ if (present) {
+ if (is_readonly()) {
+ BIT_SET(m_status_reg, STATUS_WPR_BIT);
+ } else {
+ BIT_CLR(m_status_reg, STATUS_WPR_BIT);
+ }
+ // STATUS_CART_OUT_BIT is reset by CMD_CLEAR
+ } else {
+ BIT_SET(m_status_reg, STATUS_CART_OUT_BIT);
+ BIT_SET(m_status_reg, STATUS_WPR_BIT);
+ }
}
attotime hp_taco_device::time_to_next_hole(void) const
{
- return time_to_target(next_hole());
+ return time_to_target(next_hole());
}
attotime hp_taco_device::time_to_tach_pulses(void) const
{
- return time_to_distance((tape_pos_t)(0x10000U - m_tach_reg) * TAPE_POS_FRACT);
+ return time_to_distance((tape_pos_t)(0x10000U - m_tach_reg) * TAPE_POS_FRACT);
}
void hp_taco_device::start_cmd_exec(UINT16 new_cmd_reg)
{
- LOG(("Cmd = %02x\n" , CMD_CODE(new_cmd_reg)));
-
- update_tape_pos();
-
- attotime cmd_duration = attotime::never;
- attotime time_to_hole = attotime::never;
-
- unsigned new_cmd_code = CMD_CODE(new_cmd_reg);
-
- if (new_cmd_code != CMD_START_READ &&
- new_cmd_code != CMD_END_READ &&
- new_cmd_code != CMD_CLEAR) {
- m_rd_it_valid = false;
- }
-
- switch (new_cmd_code) {
- case CMD_INDTA_INGAP:
- // Errors: CART OUT,FAST SPEED
- if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
- m_cmd_state = 0;
- if (next_data(m_rd_it , m_tape_pos , true)) {
- cmd_duration = time_to_target(farthest_end(m_rd_it));
- }
- }
- break;
-
- case CMD_FINAL_GAP:
- // Errors: WP,CART OUT
- if (start_tape_cmd(new_cmd_reg , 0 , STATUS_WPR_MASK)) {
- m_rw_pos = m_tape_pos;
- cmd_duration = time_to_distance(END_GAP_LENGTH);
- time_to_hole = time_to_next_hole();
- }
- break;
-
- case CMD_CLEAR:
- set_error(false);
- BIT_CLR(m_status_reg, STATUS_HOLE_BIT);
- BIT_CLR(m_status_reg, STATUS_CART_OUT_BIT);
- BIT_CLR(m_status_reg, STATUS_WPR_BIT);
- set_tape_present(is_loaded());
- // This is a special command: it doesn't raise IRQ at completion and it
- // doesn't replace current command
- return;
-
- case CMD_NOT_INDTA:
- // Errors: CART OUT,FAST SPEED
- if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
- tape_pos_t target = m_tape_pos;
- if (next_n_gap(target, 1, NO_DATA_GAP)) {
- LOG_0(("End of data @%d\n" , target));
- cmd_duration = time_to_target(target);
- }
- // Holes detected?
- }
- break;
-
- case CMD_INIT_WRITE:
- // Errors: WP,CART OUT,fast speed,reverse
- if (start_tape_cmd(new_cmd_reg , DIR_FWD_MASK , STATUS_WPR_MASK | SPEED_FAST_MASK)) {
- m_next_word = PREAMBLE_WORD;
- m_rw_pos = m_tape_pos;
- cmd_duration = time_to_distance(word_length(m_next_word));
- }
- break;
-
- case CMD_STOP:
- if (CMD_CODE(m_cmd_reg) != CMD_STOP) {
- if (m_start_time.is_never()) {
- // Tape is already stopped
- cmd_duration = attotime::from_usec(QUICK_CMD_USEC);
- } else {
- // Start braking timer
- cmd_duration = attotime::from_msec(m_tape_fast ? FAST_BRAKE_MSEC : SLOW_BRAKE_MSEC);
- }
- m_cmd_reg = new_cmd_reg;
- } else {
- // TODO: check if ok
- return;
- }
- break;
-
- case CMD_SET_TRACK:
- // Don't know if this command really starts the tape or not (probably it doesn't)
- if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
- // When b9 is 0, set track A/B
- // When b9 is 1, ignore command (in TACO chip it has an unknown purpose)
- if (!UNKNOWN_B9(new_cmd_reg)) {
- if (CMD_OPT(new_cmd_reg)) {
- BIT_SET(m_status_reg, STATUS_TRACKB_BIT);
- } else {
- BIT_CLR(m_status_reg, STATUS_TRACKB_BIT);
- }
- }
- cmd_duration = attotime::from_usec(QUICK_CMD_USEC);
- }
- break;
-
- case CMD_MOVE:
- if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
- time_to_hole = time_to_next_hole();
- }
- break;
-
- case CMD_INGAP_MOVE:
- // Errors: CART OUT,FAST SPEED
- if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
- m_cmd_state = 0;
- tape_pos_t target = m_tape_pos;
- if (next_n_gap(target, 1, MIN_IRG_LENGTH)) {
- LOG_0(("IRG @%d\n" , target));
- cmd_duration = time_to_target(target);
- }
- // Holes detected?
- }
- break;
-
- case CMD_WRITE_IRG:
- // Errors: WP,CART OUT
- if (start_tape_cmd(new_cmd_reg , 0 , STATUS_WPR_MASK)) {
- m_rw_pos = m_tape_pos;
- cmd_duration = time_to_tach_pulses();
- time_to_hole = time_to_next_hole();
- }
- break;
-
- case CMD_SCAN_RECORDS:
- // Errors: CART OUT
- if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
- m_cmd_state = 0;
- if (next_data(m_rd_it , m_tape_pos , true)) {
- cmd_duration = time_to_target(farthest_end(m_rd_it));
- }
- time_to_hole = time_to_next_hole();
- }
- break;
-
- case CMD_RECORD_WRITE:
- // Errors: WP,CART OUT,fast speed,reverse
- if (start_tape_cmd(new_cmd_reg , DIR_FWD_MASK , STATUS_WPR_MASK | SPEED_FAST_MASK)) {
- // Search for preamble first
- m_cmd_state = 0;
- m_rd_it_valid = next_data(m_rd_it , m_tape_pos , false);
- cmd_duration = time_to_rd_next_word(m_rw_pos);
- // Holes detected?
- }
- break;
-
- case CMD_MOVE_INDTA:
- // Errors: CART OUT,FAST SPEED
- if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
- m_cmd_state = 0;
- cmd_duration = time_to_tach_pulses();
- // Holes detected?
- }
- break;
-
- case CMD_UNK_1b:
- if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
- // Unknown purpose, but make it a NOP (it's used in "T" test of test ROM)
- cmd_duration = attotime::from_usec(QUICK_CMD_USEC);
- }
- break;
-
- case CMD_DELTA_MOVE_HOLE:
- case CMD_DELTA_MOVE_IRG:
- if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
- cmd_duration = time_to_tach_pulses();
- time_to_hole = time_to_next_hole();
- }
- break;
-
- case CMD_START_READ:
- // Yes, you can read tape backwards: test "C" does that!
- // Because of this DIR_FWD_MASK is not in the "must be 1" mask.
- if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
- // TODO: check anche m_rw_pos sforato
- if (!m_rd_it_valid) {
- // Search for preamble first
- m_cmd_state = 0;
- m_rd_it_valid = next_data(m_rd_it , m_tape_pos , false);
- }
-
- cmd_duration = time_to_rd_next_word(m_rw_pos);
- time_to_hole = time_to_next_hole();
- }
- break;
-
- case CMD_END_READ:
- // This command only makes sense after CMD_START_READ
- if (CMD_CODE(m_cmd_reg) == CMD_START_READ && m_cmd_state == 1 &&
- start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
- LOG_0(("END_READ %d\n" , m_rd_it_valid));
- cmd_duration = time_to_rd_next_word(m_rw_pos);
- time_to_hole = time_to_next_hole();
- }
- break;
-
- default:
- LOG(("Unrecognized command\n"));
- break;
- }
-
- m_tape_timer->adjust(cmd_duration);
- m_hole_timer->adjust(time_to_hole);
+ LOG(("Cmd = %02x\n" , CMD_CODE(new_cmd_reg)));
+
+ update_tape_pos();
+
+ attotime cmd_duration = attotime::never;
+ attotime time_to_hole = attotime::never;
+
+ unsigned new_cmd_code = CMD_CODE(new_cmd_reg);
+
+ if (new_cmd_code != CMD_START_READ &&
+ new_cmd_code != CMD_END_READ &&
+ new_cmd_code != CMD_CLEAR) {
+ m_rd_it_valid = false;
+ }
+
+ switch (new_cmd_code) {
+ case CMD_INDTA_INGAP:
+ // Errors: CART OUT,FAST SPEED
+ if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
+ m_cmd_state = 0;
+ if (next_data(m_rd_it , m_tape_pos , true)) {
+ cmd_duration = time_to_target(farthest_end(m_rd_it));
+ }
+ }
+ break;
+
+ case CMD_FINAL_GAP:
+ // Errors: WP,CART OUT
+ if (start_tape_cmd(new_cmd_reg , 0 , STATUS_WPR_MASK)) {
+ m_rw_pos = m_tape_pos;
+ cmd_duration = time_to_distance(END_GAP_LENGTH);
+ time_to_hole = time_to_next_hole();
+ }
+ break;
+
+ case CMD_CLEAR:
+ set_error(false);
+ BIT_CLR(m_status_reg, STATUS_HOLE_BIT);
+ BIT_CLR(m_status_reg, STATUS_CART_OUT_BIT);
+ BIT_CLR(m_status_reg, STATUS_WPR_BIT);
+ set_tape_present(is_loaded());
+ // This is a special command: it doesn't raise IRQ at completion and it
+ // doesn't replace current command
+ return;
+
+ case CMD_NOT_INDTA:
+ // Errors: CART OUT,FAST SPEED
+ if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
+ tape_pos_t target = m_tape_pos;
+ if (next_n_gap(target, 1, NO_DATA_GAP)) {
+ LOG_0(("End of data @%d\n" , target));
+ cmd_duration = time_to_target(target);
+ }
+ // Holes detected?
+ }
+ break;
+
+ case CMD_INIT_WRITE:
+ // Errors: WP,CART OUT,fast speed,reverse
+ if (start_tape_cmd(new_cmd_reg , DIR_FWD_MASK , STATUS_WPR_MASK | SPEED_FAST_MASK)) {
+ m_next_word = PREAMBLE_WORD;
+ m_rw_pos = m_tape_pos;
+ cmd_duration = time_to_distance(word_length(m_next_word));
+ }
+ break;
+
+ case CMD_STOP:
+ if (CMD_CODE(m_cmd_reg) != CMD_STOP) {
+ if (m_start_time.is_never()) {
+ // Tape is already stopped
+ cmd_duration = attotime::from_usec(QUICK_CMD_USEC);
+ } else {
+ // Start braking timer
+ cmd_duration = attotime::from_msec(m_tape_fast ? FAST_BRAKE_MSEC : SLOW_BRAKE_MSEC);
+ }
+ m_cmd_reg = new_cmd_reg;
+ } else {
+ // TODO: check if ok
+ return;
+ }
+ break;
+
+ case CMD_SET_TRACK:
+ // Don't know if this command really starts the tape or not (probably it doesn't)
+ if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
+ // When b9 is 0, set track A/B
+ // When b9 is 1, ignore command (in TACO chip it has an unknown purpose)
+ if (!UNKNOWN_B9(new_cmd_reg)) {
+ if (CMD_OPT(new_cmd_reg)) {
+ BIT_SET(m_status_reg, STATUS_TRACKB_BIT);
+ } else {
+ BIT_CLR(m_status_reg, STATUS_TRACKB_BIT);
+ }
+ }
+ cmd_duration = attotime::from_usec(QUICK_CMD_USEC);
+ }
+ break;
+
+ case CMD_MOVE:
+ if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
+ time_to_hole = time_to_next_hole();
+ }
+ break;
+
+ case CMD_INGAP_MOVE:
+ // Errors: CART OUT,FAST SPEED
+ if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
+ m_cmd_state = 0;
+ tape_pos_t target = m_tape_pos;
+ if (next_n_gap(target, 1, MIN_IRG_LENGTH)) {
+ LOG_0(("IRG @%d\n" , target));
+ cmd_duration = time_to_target(target);
+ }
+ // Holes detected?
+ }
+ break;
+
+ case CMD_WRITE_IRG:
+ // Errors: WP,CART OUT
+ if (start_tape_cmd(new_cmd_reg , 0 , STATUS_WPR_MASK)) {
+ m_rw_pos = m_tape_pos;
+ cmd_duration = time_to_tach_pulses();
+ time_to_hole = time_to_next_hole();
+ }
+ break;
+
+ case CMD_SCAN_RECORDS:
+ // Errors: CART OUT
+ if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
+ m_cmd_state = 0;
+ if (next_data(m_rd_it , m_tape_pos , true)) {
+ cmd_duration = time_to_target(farthest_end(m_rd_it));
+ }
+ time_to_hole = time_to_next_hole();
+ }
+ break;
+
+ case CMD_RECORD_WRITE:
+ // Errors: WP,CART OUT,fast speed,reverse
+ if (start_tape_cmd(new_cmd_reg , DIR_FWD_MASK , STATUS_WPR_MASK | SPEED_FAST_MASK)) {
+ // Search for preamble first
+ m_cmd_state = 0;
+ m_rd_it_valid = next_data(m_rd_it , m_tape_pos , false);
+ cmd_duration = time_to_rd_next_word(m_rw_pos);
+ // Holes detected?
+ }
+ break;
+
+ case CMD_MOVE_INDTA:
+ // Errors: CART OUT,FAST SPEED
+ if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
+ m_cmd_state = 0;
+ cmd_duration = time_to_tach_pulses();
+ // Holes detected?
+ }
+ break;
+
+ case CMD_UNK_1b:
+ if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
+ // Unknown purpose, but make it a NOP (it's used in "T" test of test ROM)
+ cmd_duration = attotime::from_usec(QUICK_CMD_USEC);
+ }
+ break;
+
+ case CMD_DELTA_MOVE_HOLE:
+ case CMD_DELTA_MOVE_IRG:
+ if (start_tape_cmd(new_cmd_reg , 0 , 0)) {
+ cmd_duration = time_to_tach_pulses();
+ time_to_hole = time_to_next_hole();
+ }
+ break;
+
+ case CMD_START_READ:
+ // Yes, you can read tape backwards: test "C" does that!
+ // Because of this DIR_FWD_MASK is not in the "must be 1" mask.
+ if (start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
+ // TODO: check anche m_rw_pos sforato
+ if (!m_rd_it_valid) {
+ // Search for preamble first
+ m_cmd_state = 0;
+ m_rd_it_valid = next_data(m_rd_it , m_tape_pos , false);
+ }
+
+ cmd_duration = time_to_rd_next_word(m_rw_pos);
+ time_to_hole = time_to_next_hole();
+ }
+ break;
+
+ case CMD_END_READ:
+ // This command only makes sense after CMD_START_READ
+ if (CMD_CODE(m_cmd_reg) == CMD_START_READ && m_cmd_state == 1 &&
+ start_tape_cmd(new_cmd_reg , 0 , SPEED_FAST_MASK)) {
+ LOG_0(("END_READ %d\n" , m_rd_it_valid));
+ cmd_duration = time_to_rd_next_word(m_rw_pos);
+ time_to_hole = time_to_next_hole();
+ }
+ break;
+
+ default:
+ LOG(("Unrecognized command\n"));
+ break;
+ }
+
+ m_tape_timer->adjust(cmd_duration);
+ m_hole_timer->adjust(time_to_hole);
}
bool hp_taco_device::call_load()
{
- LOG(("call_load %d\n" , has_been_created()));
- if (has_been_created()) {
- clear_tape();
- save_tape();
- } else if (!load_tape()) {
- seterror(IMAGE_ERROR_INVALIDIMAGE , "Wrong format");
- set_tape_present(false);
- return IMAGE_INIT_FAIL;
- }
-
- m_image_dirty = false;
-
- set_tape_present(true);
+ LOG(("call_load %d\n" , has_been_created()));
+ if (has_been_created()) {
+ clear_tape();
+ save_tape();
+ } else if (!load_tape()) {
+ seterror(IMAGE_ERROR_INVALIDIMAGE , "Wrong format");
+ set_tape_present(false);
+ return IMAGE_INIT_FAIL;
+ }
+
+ m_image_dirty = false;
+
+ set_tape_present(true);
return IMAGE_INIT_PASS;
}
bool hp_taco_device::call_create(int format_type, option_resolution *format_options)
{
- LOG(("call_create %d\n" , has_been_created()));
- return call_load();
+ LOG(("call_create %d\n" , has_been_created()));
+ return call_load();
}
void hp_taco_device::call_unload()
{
- LOG(("call_unload dirty=%d\n" , m_image_dirty));
- if (m_image_dirty) {
- save_tape();
- m_image_dirty = false;
- }
-
- clear_tape();
- set_tape_present(false);
+ LOG(("call_unload dirty=%d\n" , m_image_dirty));
+ if (m_image_dirty) {
+ save_tape();
+ m_image_dirty = false;
+ }
+
+ clear_tape();
+ set_tape_present(false);
}
const char *hp_taco_device::file_extensions() const
{
- return "hti";
+ return "hti";
}
diff --git a/src/devices/machine/hp_taco.h b/src/devices/machine/hp_taco.h
index c8b794c79a2..1695b7ce706 100644
--- a/src/devices/machine/hp_taco.h
+++ b/src/devices/machine/hp_taco.h
@@ -14,36 +14,36 @@
#include <map>
#define MCFG_TACO_IRQ_HANDLER(_devcb) \
- devcb = &hp_taco_device::set_irq_handler(*device , DEVCB_##_devcb);
+ devcb = &hp_taco_device::set_irq_handler(*device , DEVCB_##_devcb);
#define MCFG_TACO_FLG_HANDLER(_devcb) \
- devcb = &hp_taco_device::set_flg_handler(*device , DEVCB_##_devcb);
+ devcb = &hp_taco_device::set_flg_handler(*device , DEVCB_##_devcb);
#define MCFG_TACO_STS_HANDLER(_devcb) \
- devcb = &hp_taco_device::set_sts_handler(*device , DEVCB_##_devcb);
+ devcb = &hp_taco_device::set_sts_handler(*device , DEVCB_##_devcb);
class hp_taco_device : public device_t ,
- public device_image_interface
+ public device_image_interface
{
public:
- // construction/destruction
- hp_taco_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname);
- hp_taco_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ // construction/destruction
+ hp_taco_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname);
+ hp_taco_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- // static configuration helpers
- template<class _Object> static devcb_base &set_irq_handler(device_t &device, _Object object) { return downcast<hp_taco_device &>(device).m_irq_handler.set_callback(object); }
- template<class _Object> static devcb_base &set_flg_handler(device_t &device, _Object object) { return downcast<hp_taco_device &>(device).m_flg_handler.set_callback(object); }
- template<class _Object> static devcb_base &set_sts_handler(device_t &device, _Object object) { return downcast<hp_taco_device &>(device).m_sts_handler.set_callback(object); }
+ // static configuration helpers
+ template<class _Object> static devcb_base &set_irq_handler(device_t &device, _Object object) { return downcast<hp_taco_device &>(device).m_irq_handler.set_callback(object); }
+ template<class _Object> static devcb_base &set_flg_handler(device_t &device, _Object object) { return downcast<hp_taco_device &>(device).m_flg_handler.set_callback(object); }
+ template<class _Object> static devcb_base &set_sts_handler(device_t &device, _Object object) { return downcast<hp_taco_device &>(device).m_sts_handler.set_callback(object); }
- // Register read/write
- DECLARE_WRITE16_MEMBER(reg_w);
- DECLARE_READ16_MEMBER(reg_r);
+ // Register read/write
+ DECLARE_WRITE16_MEMBER(reg_w);
+ DECLARE_READ16_MEMBER(reg_r);
- // Flag & status read
- DECLARE_READ_LINE_MEMBER(flg_r);
- DECLARE_READ_LINE_MEMBER(sts_r);
+ // Flag & status read
+ DECLARE_READ_LINE_MEMBER(flg_r);
+ DECLARE_READ_LINE_MEMBER(sts_r);
- // device_image_interface overrides
+ // device_image_interface overrides
virtual bool call_load() override;
virtual bool call_create(int format_type, option_resolution *format_options) override;
virtual void call_unload() override;
@@ -56,111 +56,111 @@ public:
virtual const char *file_extensions() const override;
virtual const option_guide *create_option_guide() const override { return nullptr; }
- // Tape position, 1 unit = 1 inch / (968 * 1024)
- typedef INT32 tape_pos_t;
+ // Tape position, 1 unit = 1 inch / (968 * 1024)
+ typedef INT32 tape_pos_t;
- // Words stored on tape
- typedef UINT16 tape_word_t;
+ // Words stored on tape
+ typedef UINT16 tape_word_t;
protected:
- // device-level overrides
+ // device-level overrides
virtual void device_config_complete() override;
- virtual void device_start() override;
- virtual void device_stop() override;
- virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ virtual void device_start() override;
+ virtual void device_stop() override;
+ virtual void device_reset() override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
private:
- // Storage of tracks: mapping from a tape position to word stored there
- typedef std::map<tape_pos_t , tape_word_t> tape_track_t;
-
- devcb_write_line m_irq_handler;
- devcb_write_line m_flg_handler;
- devcb_write_line m_sts_handler;
-
- // Registers
- UINT16 m_data_reg;
- bool m_data_reg_full;
- UINT16 m_cmd_reg;
- UINT16 m_status_reg;
- UINT16 m_tach_reg;
- UINT16 m_checksum_reg;
- UINT16 m_timing_reg;
-
- // State
- bool m_irq;
- bool m_flg;
- bool m_sts;
- UINT8 m_cmd_state;
-
- // Tape position & motion
- tape_pos_t m_tape_pos;
- attotime m_start_time; // Tape moving if != never
- bool m_tape_fwd;
- bool m_tape_fast;
-
- // Timers
- emu_timer *m_tape_timer;
- emu_timer *m_hole_timer;
-
- // Content of tape tracks
- tape_track_t m_tracks[ 2 ];
- bool m_image_dirty;
-
- // Reading & writing
- bool m_tape_wr;
- tape_pos_t m_rw_pos;
- UINT16 m_next_word;
- tape_track_t::iterator m_rd_it;
- bool m_rd_it_valid;
-
- // Gap detection
- tape_pos_t m_gap_detect_start;
-
- typedef enum {
- ADV_NO_MORE_DATA,
- ADV_CONT_DATA,
- ADV_DISCONT_DATA
- } adv_res_t;
-
- void clear_state(void);
- void irq_w(bool state);
- void set_error(bool state);
- unsigned speed_to_tick_freq(void) const;
- bool pos_offset(tape_pos_t& pos , tape_pos_t offset) const;
- void move_tape_pos(tape_pos_t delta_pos);
- void update_tape_pos(void);
- static void ensure_a_lt_b(tape_pos_t& a , tape_pos_t& b);
- static bool any_hole(tape_pos_t tape_pos_a , tape_pos_t tape_pos_b);
- tape_pos_t next_hole(void) const;
- attotime time_to_distance(tape_pos_t distance) const;
- attotime time_to_target(tape_pos_t target) const;
- bool start_tape_cmd(UINT16 cmd_reg , UINT16 must_be_1 , UINT16 must_be_0);
- void start_tape(UINT16 cmd_reg);
- void stop_tape(void);
- tape_track_t& current_track(void);
- static tape_pos_t word_length(tape_word_t w);
- static tape_pos_t word_end_pos(const tape_track_t::iterator& it);
- static void adjust_it(tape_track_t& track , tape_track_t::iterator& it , tape_pos_t pos);
- void write_word(tape_pos_t start , tape_word_t word , tape_pos_t& length);
- void write_gap(tape_pos_t a , tape_pos_t b);
- bool just_gap(tape_pos_t a , tape_pos_t b);
- tape_pos_t farthest_end(const tape_track_t::iterator& it) const;
- bool next_data(tape_track_t::iterator& it , tape_pos_t pos , bool inclusive);
- adv_res_t adv_it(tape_track_t::iterator& it);
- attotime fetch_next_wr_word(void);
- attotime time_to_rd_next_word(tape_pos_t& word_rd_pos);
- bool next_n_gap(tape_pos_t& pos , tape_track_t::iterator it , unsigned n_gaps , tape_pos_t min_gap);
- bool next_n_gap(tape_pos_t& pos , unsigned n_gaps , tape_pos_t min_gap);
- void clear_tape(void);
- void dump_sequence(tape_track_t::const_iterator it_start , unsigned n_words);
- void save_tape(void);
- bool load_track(tape_track_t& track);
- bool load_tape(void);
- void set_tape_present(bool present);
- attotime time_to_next_hole(void) const;
- attotime time_to_tach_pulses(void) const;
- void start_cmd_exec(UINT16 new_cmd_reg);
+ // Storage of tracks: mapping from a tape position to word stored there
+ typedef std::map<tape_pos_t , tape_word_t> tape_track_t;
+
+ devcb_write_line m_irq_handler;
+ devcb_write_line m_flg_handler;
+ devcb_write_line m_sts_handler;
+
+ // Registers
+ UINT16 m_data_reg;
+ bool m_data_reg_full;
+ UINT16 m_cmd_reg;
+ UINT16 m_status_reg;
+ UINT16 m_tach_reg;
+ UINT16 m_checksum_reg;
+ UINT16 m_timing_reg;
+
+ // State
+ bool m_irq;
+ bool m_flg;
+ bool m_sts;
+ UINT8 m_cmd_state;
+
+ // Tape position & motion
+ tape_pos_t m_tape_pos;
+ attotime m_start_time; // Tape moving if != never
+ bool m_tape_fwd;
+ bool m_tape_fast;
+
+ // Timers
+ emu_timer *m_tape_timer;
+ emu_timer *m_hole_timer;
+
+ // Content of tape tracks
+ tape_track_t m_tracks[ 2 ];
+ bool m_image_dirty;
+
+ // Reading & writing
+ bool m_tape_wr;
+ tape_pos_t m_rw_pos;
+ UINT16 m_next_word;
+ tape_track_t::iterator m_rd_it;
+ bool m_rd_it_valid;
+
+ // Gap detection
+ tape_pos_t m_gap_detect_start;
+
+ typedef enum {
+ ADV_NO_MORE_DATA,
+ ADV_CONT_DATA,
+ ADV_DISCONT_DATA
+ } adv_res_t;
+
+ void clear_state(void);
+ void irq_w(bool state);
+ void set_error(bool state);
+ unsigned speed_to_tick_freq(void) const;
+ bool pos_offset(tape_pos_t& pos , tape_pos_t offset) const;
+ void move_tape_pos(tape_pos_t delta_pos);
+ void update_tape_pos(void);
+ static void ensure_a_lt_b(tape_pos_t& a , tape_pos_t& b);
+ static bool any_hole(tape_pos_t tape_pos_a , tape_pos_t tape_pos_b);
+ tape_pos_t next_hole(void) const;
+ attotime time_to_distance(tape_pos_t distance) const;
+ attotime time_to_target(tape_pos_t target) const;
+ bool start_tape_cmd(UINT16 cmd_reg , UINT16 must_be_1 , UINT16 must_be_0);
+ void start_tape(UINT16 cmd_reg);
+ void stop_tape(void);
+ tape_track_t& current_track(void);
+ static tape_pos_t word_length(tape_word_t w);
+ static tape_pos_t word_end_pos(const tape_track_t::iterator& it);
+ static void adjust_it(tape_track_t& track , tape_track_t::iterator& it , tape_pos_t pos);
+ void write_word(tape_pos_t start , tape_word_t word , tape_pos_t& length);
+ void write_gap(tape_pos_t a , tape_pos_t b);
+ bool just_gap(tape_pos_t a , tape_pos_t b);
+ tape_pos_t farthest_end(const tape_track_t::iterator& it) const;
+ bool next_data(tape_track_t::iterator& it , tape_pos_t pos , bool inclusive);
+ adv_res_t adv_it(tape_track_t::iterator& it);
+ attotime fetch_next_wr_word(void);
+ attotime time_to_rd_next_word(tape_pos_t& word_rd_pos);
+ bool next_n_gap(tape_pos_t& pos , tape_track_t::iterator it , unsigned n_gaps , tape_pos_t min_gap);
+ bool next_n_gap(tape_pos_t& pos , unsigned n_gaps , tape_pos_t min_gap);
+ void clear_tape(void);
+ void dump_sequence(tape_track_t::const_iterator it_start , unsigned n_words);
+ void save_tape(void);
+ bool load_track(tape_track_t& track);
+ bool load_tape(void);
+ void set_tape_present(bool present);
+ attotime time_to_next_hole(void) const;
+ attotime time_to_tach_pulses(void) const;
+ void start_cmd_exec(UINT16 new_cmd_reg);
};
// device type definition
diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h
index 961bb7a26ea..9550ee57f9d 100644
--- a/src/devices/machine/netlist.h
+++ b/src/devices/machine/netlist.h
@@ -225,9 +225,9 @@ protected:
if (entry.index() >= 0)
{
if (entry.index() & 1)
- strprintf(str,"%10.6f", *((double *)entry.dataptr()));
+ str = string_format("%10.6f", *((double *)entry.dataptr()));
else
- strprintf(str, "%d", *((netlist_sig_t *)entry.dataptr()));
+ str = string_format("%d", *((netlist_sig_t *)entry.dataptr()));
}
}
diff --git a/src/devices/machine/pci.cpp b/src/devices/machine/pci.cpp
index f41eaea2e20..33a84919f1e 100644
--- a/src/devices/machine/pci.cpp
+++ b/src/devices/machine/pci.cpp
@@ -340,7 +340,7 @@ void pci_device::add_map(UINT64 size, int flags, address_map_delegate &map)
bank_reg_infos[breg].hi = 0;
}
- logerror("Device %s (%s) has 0x%" I64FMT "x bytes of %s named %s\n", tag(), name(), size, flags & M_IO ? "io" : "memory", bank_infos[bid].map.name());
+ logerror("Device %s (%s) has 0x%x bytes of %s named %s\n", tag(), name(), size, flags & M_IO ? "io" : "memory", bank_infos[bid].map.name());
}
void pci_device::add_rom(const UINT8 *rom, UINT32 size)
diff --git a/src/devices/machine/pit8253.cpp b/src/devices/machine/pit8253.cpp
index d0bf2bc5c84..f542f3753b8 100644
--- a/src/devices/machine/pit8253.cpp
+++ b/src/devices/machine/pit8253.cpp
@@ -723,7 +723,7 @@ void pit8253_device::update(pit8253_timer *timer)
attotime elapsed_time = now - timer->last_updated;
INT64 elapsed_cycles = elapsed_time.as_double() * timer->clockin;
- LOG1(("pit8253: update(): timer %d, %" I64FMT "d elapsed_cycles\n", timer->index, elapsed_cycles));
+ LOG1(("pit8253: update(): timer %d, %d elapsed_cycles\n", timer->index, elapsed_cycles));
if (timer->clockin)
timer->last_updated += elapsed_cycles * attotime::from_hz(timer->clockin);
diff --git a/src/devices/machine/ram.cpp b/src/devices/machine/ram.cpp
index 7dd8f9250a4..c190ea64f16 100644
--- a/src/devices/machine/ram.cpp
+++ b/src/devices/machine/ram.cpp
@@ -148,16 +148,16 @@ void ram_device::device_validity_check(validity_checker &valid) const
if (!is_valid)
{
- std::string output;
- strcatprintf(output, "Cannot recognize the RAM option %s", ramsize_string);
- strcatprintf(output, " (valid options are %s", m_default_size);
+ std::ostringstream output;
+ util::stream_format(output, "Cannot recognize the RAM option %s", ramsize_string);
+ util::stream_format(output, " (valid options are %s", m_default_size);
if (m_extra_options != nullptr)
- strcatprintf(output, ",%s).\n", m_extra_options);
+ util::stream_format(output, ",%s).\n", m_extra_options);
else
- strcatprintf(output, ").\n");
+ util::stream_format(output, ").\n");
- osd_printf_error("%s", output.c_str());
+ osd_printf_error("%s", output.str().c_str());
osd_printf_warning("Setting value to default %s\n",m_default_size);
std::string error;
diff --git a/src/devices/machine/wd7600.cpp b/src/devices/machine/wd7600.cpp
index 63586c3d858..e7ff002ddec 100644
--- a/src/devices/machine/wd7600.cpp
+++ b/src/devices/machine/wd7600.cpp
@@ -165,12 +165,12 @@ void wd7600_device::device_start()
// install video BIOS (we should use the VGA BIOS at the beginning of the system BIOS ROM, but that gives a
// blank display (but still runs))
- //m_space->install_rom(0x000c0000, 0x000cffff, m_bios + 0xe0000);
+ //m_space->install_rom(0x000c0000, 0x000cffff, m_bios);
m_space->install_rom(0x000c0000, 0x000cffff, m_isa);
// install BIOS ROM at cpu inital pc
- m_space->install_rom(0x000f0000, 0x000fffff, m_bios + 0xf0000);
- m_space->install_rom(0xffff0000, 0xffffffff, m_bios + 0xf0000);
+ m_space->install_rom(0x000f0000, 0x000fffff, m_bios + 0x10000);
+ m_space->install_rom(0xffff0000, 0xffffffff, m_bios + 0x10000);
// install i/o accesses
m_space_io->install_readwrite_handler(0x0000, 0x000f, read8_delegate(FUNC(am9517a_device::read), &(*m_dma1)), write8_delegate(FUNC(am9517a_device::write), &(*m_dma1)), 0xffffffff);
diff --git a/src/devices/machine/z80scc.cpp b/src/devices/machine/z80scc.cpp
index d2aa4a5f5bd..de3ec568da7 100644
--- a/src/devices/machine/z80scc.cpp
+++ b/src/devices/machine/z80scc.cpp
@@ -840,7 +840,7 @@ void z80scc_channel::tra_callback()
{
if (!(m_wr5 & WR5_TX_ENABLE))
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c transmit mark 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c transmit mark 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// transmit mark
if (m_index == z80scc_device::CHANNEL_A)
m_uart->m_out_txda_cb(1);
@@ -849,7 +849,7 @@ void z80scc_channel::tra_callback()
}
else if (m_wr5 & WR5_SEND_BREAK)
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c send break 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c send break 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// transmit break
if (m_index == z80scc_device::CHANNEL_A)
m_uart->m_out_txda_cb(0);
@@ -860,7 +860,7 @@ void z80scc_channel::tra_callback()
{
int db = transmit_register_get_data_bit();
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c transmit data bit %d m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, db, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c transmit data bit %d m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, db, m_wr5));
// transmit data
if (m_index == z80scc_device::CHANNEL_A)
m_uart->m_out_txda_cb(db);
@@ -869,7 +869,7 @@ void z80scc_channel::tra_callback()
}
else
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Failed to transmit m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Failed to transmit m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
logerror("%s \"%s \"Channel %c Failed to transmit\n", FUNCNAME, m_owner->tag(), 'A' + m_index);
}
}
@@ -883,7 +883,7 @@ void z80scc_channel::tra_complete()
{
if ((m_wr5 & WR5_TX_ENABLE) && !(m_wr5 & WR5_SEND_BREAK) && !(m_rr0 & RR0_TX_BUFFER_EMPTY))
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Transmit Data Byte '%02x' m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_tx_data, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Transmit Data Byte '%02x' m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_tx_data, m_wr5));
transmit_register_setup(m_tx_data);
@@ -895,7 +895,7 @@ void z80scc_channel::tra_complete()
}
else if (m_wr5 & WR5_SEND_BREAK)
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Transmit Break 0 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Transmit Break 0 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// transmit break
if (m_index == z80scc_device::CHANNEL_A)
m_uart->m_out_txda_cb(0);
@@ -904,7 +904,7 @@ void z80scc_channel::tra_complete()
}
else
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Transmit Mark 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Transmit Mark 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// transmit mark
if (m_index == z80scc_device::CHANNEL_A)
m_uart->m_out_txda_cb(1);
@@ -915,7 +915,7 @@ void z80scc_channel::tra_complete()
// if transmit buffer is empty
if (m_rr0 & RR0_TX_BUFFER_EMPTY)
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Transmit buffer empty m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Transmit buffer empty m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// then all characters have been sent
m_rr1 |= RR1_ALL_SENT;
@@ -939,7 +939,7 @@ void z80scc_channel::rcv_callback()
#if 1
else
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Received Data Bit but receiver is disabled\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index));
+ LOG(("%d %s() \"%s \"Channel %c Received Data Bit but receiver is disabled\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index));
logerror("Z80SCC %s() \"%s \"Channel %c Received data dit but receiver is disabled\n", __func__, m_owner->tag(), 'A' + m_index);
}
#endif
@@ -956,7 +956,7 @@ void z80scc_channel::rcv_complete()
receive_register_extract();
data = get_received_char();
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Received Data %c\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, data));
+ LOG(("%d %s() \"%s \"Channel %c Received Data %c\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, data));
receive_data(data);
}
@@ -2240,7 +2240,7 @@ void z80scc_channel::update_serial()
else
parity = PARITY_NONE;
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c setting data frame %d+%d%c%d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, 1,
+ LOG(("%d %s() \"%s \"Channel %c setting data frame %d+%d%c%d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, 1,
data_bit_count, parity == PARITY_NONE ? 'N' : parity == PARITY_EVEN ? 'E' : 'O', (stop_bits + 1) / 2));
set_data_frame(1, data_bit_count, parity, stop_bits);
diff --git a/src/devices/machine/z80sio.cpp b/src/devices/machine/z80sio.cpp
index 64d9480dfbf..db8be73850e 100644
--- a/src/devices/machine/z80sio.cpp
+++ b/src/devices/machine/z80sio.cpp
@@ -596,7 +596,7 @@ void z80sio_channel::tra_callback()
{
if (!(m_wr5 & WR5_TX_ENABLE))
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c transmit mark 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c transmit mark 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// transmit mark
if (m_index == z80sio_device::CHANNEL_A)
m_uart->m_out_txda_cb(1);
@@ -605,7 +605,7 @@ void z80sio_channel::tra_callback()
}
else if (m_wr5 & WR5_SEND_BREAK)
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c send break 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c send break 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// transmit break
if (m_index == z80sio_device::CHANNEL_A)
m_uart->m_out_txda_cb(0);
@@ -616,7 +616,7 @@ void z80sio_channel::tra_callback()
{
int db = transmit_register_get_data_bit();
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c transmit data bit %d m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, db, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c transmit data bit %d m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, db, m_wr5));
// transmit data
if (m_index == z80sio_device::CHANNEL_A)
m_uart->m_out_txda_cb(db);
@@ -625,7 +625,7 @@ void z80sio_channel::tra_callback()
}
else
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Failed to transmit m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Failed to transmit m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
logerror("%s \"%s \"Channel %c Failed to transmit\n", FUNCNAME, m_owner->tag(), 'A' + m_index);
}
}
@@ -639,7 +639,7 @@ void z80sio_channel::tra_complete()
LOG(("%s %s\n",FUNCNAME, tag()));
if ((m_wr5 & WR5_TX_ENABLE) && !(m_wr5 & WR5_SEND_BREAK) && !(m_rr0 & RR0_TX_BUFFER_EMPTY))
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Transmit Data Byte '%02x' m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_tx_data, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Transmit Data Byte '%02x' m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_tx_data, m_wr5));
transmit_register_setup(m_tx_data);
@@ -651,7 +651,7 @@ void z80sio_channel::tra_complete()
}
else if (m_wr5 & WR5_SEND_BREAK)
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Transmit Break 0 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Transmit Break 0 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// transmit break
if (m_index == z80sio_device::CHANNEL_A)
m_uart->m_out_txda_cb(0);
@@ -660,7 +660,7 @@ void z80sio_channel::tra_complete()
}
else
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Transmit Mark 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Transmit Mark 1 m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// transmit mark
if (m_index == z80sio_device::CHANNEL_A)
m_uart->m_out_txda_cb(1);
@@ -671,7 +671,7 @@ void z80sio_channel::tra_complete()
// if transmit buffer is empty
if (m_rr0 & RR0_TX_BUFFER_EMPTY)
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Transmit buffer empty m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
+ LOG(("%d %s() \"%s \"Channel %c Transmit buffer empty m_wr5:%02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_wr5));
// then all characters have been sent
m_rr1 |= RR1_ALL_SENT;
@@ -689,13 +689,13 @@ void z80sio_channel::rcv_callback()
{
if (m_wr3 & WR3_RX_ENABLE)
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Received Data Bit %d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_rxd));
+ LOG(("%d %s() \"%s \"Channel %c Received Data Bit %d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_rxd));
receive_register_update_bit(m_rxd);
}
#if 0
else
{
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Received Data Bit but receiver is disabled\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index));
+ LOG(("%d %s() \"%s \"Channel %c Received Data Bit but receiver is disabled\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index));
logerror("Z80SIO %s() \"%s \"Channel %c Received data dit but receiver is disabled\n", __func__, m_owner->tag(), 'A' + m_index);
}
#endif
@@ -711,7 +711,7 @@ void z80sio_channel::rcv_complete()
receive_register_extract();
data = get_received_char();
- LOG(("%" I64FMT "d %s() \"%s \"Channel %c Received Data %02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, data));
+ LOG(("%d %s() \"%s \"Channel %c Received Data %02x\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, data));
receive_data(data);
}
diff --git a/src/devices/sound/discrete.cpp b/src/devices/sound/discrete.cpp
index 22b5ebe942a..926db3a4a40 100644
--- a/src/devices/sound/discrete.cpp
+++ b/src/devices/sound/discrete.cpp
@@ -38,6 +38,7 @@
#include "emu.h"
#include "sound/wavwrite.h"
#include "discrete.h"
+#include <atomic>
/* for_each collides with c++ standard libraries - include it here */
#define for_each(_T, _e, _l) for (_T _e = (_l)->begin_ptr() ; _e <= (_l)->end_ptr(); _e++)
@@ -110,9 +111,8 @@ public:
inline void step_nodes(void);
inline bool lock_threadid(INT32 threadid)
{
- INT32 prev_id;
- prev_id = compare_exchange32(&m_threadid, -1, threadid);
- return (prev_id == -1 && m_threadid == threadid);
+ int expected = -1;
+ return m_threadid.compare_exchange_weak(expected, threadid, std::memory_order_release,std::memory_order_relaxed);
}
inline void unlock(void) { m_threadid = -1; }
@@ -144,7 +144,7 @@ protected:
discrete_device & m_device;
private:
- volatile INT32 m_threadid;
+ std::atomic<INT32> m_threadid;
volatile int m_samples;
};
diff --git a/src/devices/video/ef9364.cpp b/src/devices/video/ef9364.cpp
index b850f05d531..5b683b15e09 100644
--- a/src/devices/video/ef9364.cpp
+++ b/src/devices/video/ef9364.cpp
@@ -31,7 +31,7 @@ const device_type EF9364 = &device_creator<ef9364_device>;
// default address map
//-------------------------------------------------
static ADDRESS_MAP_START( ef9364, AS_0, 8, ef9364_device )
- AM_RANGE(0x00000, ( ( EF9364_TXTPLANE_MAX_SIZE * EF9364_MAX_TXTPLANES ) - 1 ) ) AM_RAM
+ AM_RANGE(0x00000, ( ( EF9364_TXTPLANE_MAX_SIZE * EF9364_MAX_TXTPLANES ) - 1 ) ) AM_RAM
ADDRESS_MAP_END
//-------------------------------------------------
@@ -41,7 +41,7 @@ ADDRESS_MAP_END
const address_space_config *ef9364_device::memory_space_config(address_spacenum spacenum) const
{
- return (spacenum == AS_0) ? &m_space_config : NULL;
+ return (spacenum == AS_0) ? &m_space_config : NULL;
}
//**************************************************************************
@@ -57,13 +57,13 @@ const address_space_config *ef9364_device::memory_space_config(address_spacenum
//-------------------------------------------------
ef9364_device::ef9364_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
- device_t(mconfig, EF9364, "EF9364", tag, owner, clock, "ef9364", __FILE__),
- device_memory_interface(mconfig, *this),
- device_video_interface(mconfig, *this),
- m_space_config("textram", ENDIANNESS_LITTLE, 8, 12, 0, nullptr, *ADDRESS_MAP_NAME(ef9364)),
- m_palette(*this)
+ device_t(mconfig, EF9364, "EF9364", tag, owner, clock, "ef9364", __FILE__),
+ device_memory_interface(mconfig, *this),
+ device_video_interface(mconfig, *this),
+ m_space_config("textram", ENDIANNESS_LITTLE, 8, 12, 0, nullptr, *ADDRESS_MAP_NAME(ef9364)),
+ m_palette(*this)
{
- clock_freq = clock;
+ clock_freq = clock;
}
//-------------------------------------------------
@@ -73,7 +73,7 @@ ef9364_device::ef9364_device(const machine_config &mconfig, const char *tag, dev
void ef9364_device::static_set_palette_tag(device_t &device, const char *tag)
{
- downcast<ef9364_device &>(device).m_palette.set_tag(tag);
+ downcast<ef9364_device &>(device).m_palette.set_tag(tag);
}
//-------------------------------------------------
@@ -82,10 +82,10 @@ void ef9364_device::static_set_palette_tag(device_t &device, const char *tag)
void ef9364_device::static_set_nb_of_pages(device_t &device, int nb_of_pages )
{
- if( nb_of_pages > 0 && nb_of_pages <= 8 )
- {
- downcast<ef9364_device &>(device).nb_of_pages = nb_of_pages;
- }
+ if( nb_of_pages > 0 && nb_of_pages <= 8 )
+ {
+ downcast<ef9364_device &>(device).nb_of_pages = nb_of_pages;
+ }
}
//-------------------------------------------------
@@ -95,14 +95,14 @@ void ef9364_device::static_set_nb_of_pages(device_t &device, int nb_of_pages )
void ef9364_device::set_color_entry( int index, UINT8 r, UINT8 g, UINT8 b )
{
- if( index < 2 )
- {
- palette[index] = rgb_t(r, g, b);
- }
- else
- {
- logerror("Invalid EF9364 Palette entry : %02x\n", index);
- }
+ if( index < 2 )
+ {
+ palette[index] = rgb_t(r, g, b);
+ }
+ else
+ {
+ logerror("Invalid EF9364 Palette entry : %02x\n", index);
+ }
}
//-------------------------------------------------
@@ -111,26 +111,26 @@ void ef9364_device::set_color_entry( int index, UINT8 r, UINT8 g, UINT8 b )
void ef9364_device::device_start()
{
- m_textram = &space(0);
- m_charset = region();
+ m_textram = &space(0);
+ m_charset = region();
- bitplane_xres = EF9364_NB_OF_COLUMNS*8;
- bitplane_yres = EF9364_NB_OF_ROWS*(8+4);
+ bitplane_xres = EF9364_NB_OF_COLUMNS*8;
+ bitplane_yres = EF9364_NB_OF_ROWS*(8+4);
- vsync_scanline_pos = 250;
+ vsync_scanline_pos = 250;
- // Default palette : Black and white
- palette[0] = rgb_t(0, 0, 0);
- palette[1] = rgb_t(255, 255, 255);
+ // Default palette : Black and white
+ palette[0] = rgb_t(0, 0, 0);
+ palette[1] = rgb_t(255, 255, 255);
- m_screen_out.allocate( bitplane_xres, m_screen->height() );
+ m_screen_out.allocate( bitplane_xres, m_screen->height() );
- cursor_cnt = 0;
- cursor_state = 0;
+ cursor_cnt = 0;
+ cursor_state = 0;
- save_item(NAME(m_border));
+ save_item(NAME(m_border));
- save_item(NAME(m_screen_out));
+ save_item(NAME(m_screen_out));
}
//-------------------------------------------------
@@ -139,23 +139,23 @@ void ef9364_device::device_start()
void ef9364_device::device_reset()
{
- int i;
+ int i;
- x_curs_pos = 0;
- y_curs_pos = 0;
+ x_curs_pos = 0;
+ y_curs_pos = 0;
- char_latch = 0x00;
+ char_latch = 0x00;
- for(i=0;i<EF9364_NB_OF_COLUMNS * EF9364_NB_OF_ROWS * nb_of_pages;i++)
- {
- m_textram->write_byte ( i , 0x7F );
- }
+ for(i=0;i<EF9364_NB_OF_COLUMNS * EF9364_NB_OF_ROWS * nb_of_pages;i++)
+ {
+ m_textram->write_byte ( i , 0x7F );
+ }
- memset(m_border, 0, sizeof(m_border));
+ memset(m_border, 0, sizeof(m_border));
- m_screen_out.fill(0);
+ m_screen_out.fill(0);
- set_video_mode();
+ set_video_mode();
}
//-------------------------------------------------
@@ -164,18 +164,18 @@ void ef9364_device::device_reset()
void ef9364_device::set_video_mode(void)
{
- UINT16 new_width = bitplane_xres;
+ UINT16 new_width = bitplane_xres;
- if (m_screen->width() != new_width)
- {
- rectangle visarea = m_screen->visible_area();
- visarea.max_x = new_width - 1;
+ if (m_screen->width() != new_width)
+ {
+ rectangle visarea = m_screen->visible_area();
+ visarea.max_x = new_width - 1;
- m_screen->configure(new_width, m_screen->height(), visarea, m_screen->frame_period().attoseconds());
- }
+ m_screen->configure(new_width, m_screen->height(), visarea, m_screen->frame_period().attoseconds());
+ }
- //border color
- memset(m_border, 0, sizeof(m_border));
+ //border color
+ memset(m_border, 0, sizeof(m_border));
}
//-------------------------------------------------
@@ -193,41 +193,41 @@ void ef9364_device::draw_border(UINT16 line)
UINT32 ef9364_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- int x,y,r;
- unsigned char c;
-
- for( r = 0 ; r < EF9364_NB_OF_ROWS ; r++ )
- {
- for( y = 0 ; y < 8 ; y++ )
- {
- for( x = 0 ; x < EF9364_NB_OF_COLUMNS * 8 ; x++ )
- {
- if( ( ( x >> 3 ) != x_curs_pos ) || ( r != y_curs_pos ) || !cursor_state)
- {
- c = m_textram->read_byte( ( r * EF9364_NB_OF_COLUMNS ) + ( x>>3 ) );
-
- if( m_charset->u8(((c&0x7F)<<3) + y ) & (0x80>>(x&7)) )
- m_screen_out.pix32((r*12)+y, x) = palette[1];
- else
- m_screen_out.pix32((r*12)+y, x) = palette[0];
- }
- else
- {
- if(y != 7)
- m_screen_out.pix32((r*12)+y, x) = palette[0];
- else
- m_screen_out.pix32((r*12)+y, x) = palette[1];
- }
- }
- }
- }
-
- cursor_cnt = (cursor_cnt + 1) % 13;
- if(!cursor_cnt)
- cursor_state ^= 1;
-
- copybitmap(bitmap, m_screen_out, 0, 0, 0, 0, cliprect);
- return 0;
+ int x,y,r;
+ unsigned char c;
+
+ for( r = 0 ; r < EF9364_NB_OF_ROWS ; r++ )
+ {
+ for( y = 0 ; y < 8 ; y++ )
+ {
+ for( x = 0 ; x < EF9364_NB_OF_COLUMNS * 8 ; x++ )
+ {
+ if( ( ( x >> 3 ) != x_curs_pos ) || ( r != y_curs_pos ) || !cursor_state)
+ {
+ c = m_textram->read_byte( ( r * EF9364_NB_OF_COLUMNS ) + ( x>>3 ) );
+
+ if( m_charset->u8(((c&0x7F)<<3) + y ) & (0x80>>(x&7)) )
+ m_screen_out.pix32((r*12)+y, x) = palette[1];
+ else
+ m_screen_out.pix32((r*12)+y, x) = palette[0];
+ }
+ else
+ {
+ if(y != 7)
+ m_screen_out.pix32((r*12)+y, x) = palette[0];
+ else
+ m_screen_out.pix32((r*12)+y, x) = palette[1];
+ }
+ }
+ }
+ }
+
+ cursor_cnt = (cursor_cnt + 1) % 13;
+ if(!cursor_cnt)
+ cursor_state ^= 1;
+
+ copybitmap(bitmap, m_screen_out, 0, 0, 0, 0, cliprect);
+ return 0;
}
//-------------------------------------------------
@@ -236,15 +236,15 @@ UINT32 ef9364_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
void ef9364_device::update_scanline(UINT16 scanline)
{
- if (scanline == vsync_scanline_pos)
- {
- // vsync
- }
-
- if (scanline == 0)
- {
- draw_border(0);
- }
+ if (scanline == vsync_scanline_pos)
+ {
+ // vsync
+ }
+
+ if (scanline == 0)
+ {
+ draw_border(0);
+ }
}
//-------------------------------------------------
@@ -253,107 +253,107 @@ void ef9364_device::update_scanline(UINT16 scanline)
void ef9364_device::command_w(UINT8 cmd)
{
- int x,y,i,j;
-
- switch( cmd&7 )
- {
- case 0x0: // Page Erase & Cursor home
- for( y=0 ; y < EF9364_NB_OF_ROWS ; y++ )
- {
- for( x=0 ; x < EF9364_NB_OF_COLUMNS ; x++ )
- {
- m_textram->write_byte ( y * EF9364_NB_OF_COLUMNS + x , 0x7F );
- }
- }
- x_curs_pos = 0;
- y_curs_pos = 0;
- break;
-
- case 0x1: // Erase to end of the line and return cursor
- for( ; x_curs_pos < EF9364_NB_OF_COLUMNS ; x_curs_pos++ )
- {
- m_textram->write_byte ( y_curs_pos * EF9364_NB_OF_COLUMNS + x_curs_pos , 0x7F );
- }
- x_curs_pos = 0;
- break;
-
- case 0x2: // Line feed
- y_curs_pos++;
- if( y_curs_pos >= EF9364_NB_OF_ROWS )
- {
- // Scroll
- for( j = 1 ; j < EF9364_NB_OF_ROWS ; j++ )
- {
- for( i = 0 ; i < EF9364_NB_OF_COLUMNS ; i++ )
- {
- m_textram->write_byte ( (j-1) * EF9364_NB_OF_COLUMNS + i , m_textram->read_byte ( j * EF9364_NB_OF_COLUMNS + i ) );
- }
- }
- // Erase last line
- for( i = 0 ; i < EF9364_NB_OF_COLUMNS ; i++ )
- {
- m_textram->write_byte ( ( EF9364_NB_OF_ROWS - 1 ) * EF9364_NB_OF_COLUMNS + i , 0x7F );
- }
-
- y_curs_pos = EF9364_NB_OF_ROWS - 1;
- }
- break;
-
- case 0x3: // Nop
-
- break;
-
- case 0x4: // Cursor left
- if(x_curs_pos)
- x_curs_pos--;
- break;
-
- case 0x5: // Erasure of cursor Line.
- for( x = 0 ; x < EF9364_NB_OF_COLUMNS ; x++ )
- {
- m_textram->write_byte ( y_curs_pos * EF9364_NB_OF_COLUMNS + x , 0x7F );
- }
- break;
-
- case 0x6: // Cursor up
- if(y_curs_pos)
- y_curs_pos--;
- break;
-
- case 0x7: // Write char
- if(cmd&0x8)
- m_textram->write_byte ( y_curs_pos * EF9364_NB_OF_COLUMNS + x_curs_pos , char_latch );
-
- x_curs_pos++;
- if( x_curs_pos >= EF9364_NB_OF_COLUMNS )
- {
- x_curs_pos=0;
- y_curs_pos++;
- if( y_curs_pos >= EF9364_NB_OF_ROWS )
- {
- // Scroll
- for( j = 1 ; j < EF9364_NB_OF_ROWS ; j++ )
- {
- for( i = 0 ; i < EF9364_NB_OF_COLUMNS ; i++ )
- {
- m_textram->write_byte ( (j-1) * EF9364_NB_OF_COLUMNS + i , m_textram->read_byte ( j * EF9364_NB_OF_COLUMNS + i ) );
- }
- }
- // Erase last line
- for( i = 0 ; i < EF9364_NB_OF_COLUMNS ; i++ )
- {
- m_textram->write_byte ( ( EF9364_NB_OF_ROWS - 1 ) * EF9364_NB_OF_COLUMNS + i , 0x7F );
- }
-
- y_curs_pos = EF9364_NB_OF_ROWS - 1;
- }
- }
- break;
-
- }
+ int x,y,i,j;
+
+ switch( cmd&7 )
+ {
+ case 0x0: // Page Erase & Cursor home
+ for( y=0 ; y < EF9364_NB_OF_ROWS ; y++ )
+ {
+ for( x=0 ; x < EF9364_NB_OF_COLUMNS ; x++ )
+ {
+ m_textram->write_byte ( y * EF9364_NB_OF_COLUMNS + x , 0x7F );
+ }
+ }
+ x_curs_pos = 0;
+ y_curs_pos = 0;
+ break;
+
+ case 0x1: // Erase to end of the line and return cursor
+ for( ; x_curs_pos < EF9364_NB_OF_COLUMNS ; x_curs_pos++ )
+ {
+ m_textram->write_byte ( y_curs_pos * EF9364_NB_OF_COLUMNS + x_curs_pos , 0x7F );
+ }
+ x_curs_pos = 0;
+ break;
+
+ case 0x2: // Line feed
+ y_curs_pos++;
+ if( y_curs_pos >= EF9364_NB_OF_ROWS )
+ {
+ // Scroll
+ for( j = 1 ; j < EF9364_NB_OF_ROWS ; j++ )
+ {
+ for( i = 0 ; i < EF9364_NB_OF_COLUMNS ; i++ )
+ {
+ m_textram->write_byte ( (j-1) * EF9364_NB_OF_COLUMNS + i , m_textram->read_byte ( j * EF9364_NB_OF_COLUMNS + i ) );
+ }
+ }
+ // Erase last line
+ for( i = 0 ; i < EF9364_NB_OF_COLUMNS ; i++ )
+ {
+ m_textram->write_byte ( ( EF9364_NB_OF_ROWS - 1 ) * EF9364_NB_OF_COLUMNS + i , 0x7F );
+ }
+
+ y_curs_pos = EF9364_NB_OF_ROWS - 1;
+ }
+ break;
+
+ case 0x3: // Nop
+
+ break;
+
+ case 0x4: // Cursor left
+ if(x_curs_pos)
+ x_curs_pos--;
+ break;
+
+ case 0x5: // Erasure of cursor Line.
+ for( x = 0 ; x < EF9364_NB_OF_COLUMNS ; x++ )
+ {
+ m_textram->write_byte ( y_curs_pos * EF9364_NB_OF_COLUMNS + x , 0x7F );
+ }
+ break;
+
+ case 0x6: // Cursor up
+ if(y_curs_pos)
+ y_curs_pos--;
+ break;
+
+ case 0x7: // Write char
+ if(cmd&0x8)
+ m_textram->write_byte ( y_curs_pos * EF9364_NB_OF_COLUMNS + x_curs_pos , char_latch );
+
+ x_curs_pos++;
+ if( x_curs_pos >= EF9364_NB_OF_COLUMNS )
+ {
+ x_curs_pos=0;
+ y_curs_pos++;
+ if( y_curs_pos >= EF9364_NB_OF_ROWS )
+ {
+ // Scroll
+ for( j = 1 ; j < EF9364_NB_OF_ROWS ; j++ )
+ {
+ for( i = 0 ; i < EF9364_NB_OF_COLUMNS ; i++ )
+ {
+ m_textram->write_byte ( (j-1) * EF9364_NB_OF_COLUMNS + i , m_textram->read_byte ( j * EF9364_NB_OF_COLUMNS + i ) );
+ }
+ }
+ // Erase last line
+ for( i = 0 ; i < EF9364_NB_OF_COLUMNS ; i++ )
+ {
+ m_textram->write_byte ( ( EF9364_NB_OF_ROWS - 1 ) * EF9364_NB_OF_COLUMNS + i , 0x7F );
+ }
+
+ y_curs_pos = EF9364_NB_OF_ROWS - 1;
+ }
+ }
+ break;
+
+ }
}
void ef9364_device::char_latch_w(UINT8 data)
{
- char_latch = data;
+ char_latch = data;
}
diff --git a/src/devices/video/ef9364.h b/src/devices/video/ef9364.h
index 1519d817196..4c5f57bb211 100644
--- a/src/devices/video/ef9364.h
+++ b/src/devices/video/ef9364.h
@@ -20,13 +20,13 @@
#define EF9364_MAX_TXTPLANES 2
#define MCFG_EF9364_PALETTE(_palette_tag) \
- ef9364_device::static_set_palette_tag(*device, "^" _palette_tag);
+ ef9364_device::static_set_palette_tag(*device, "^" _palette_tag);
#define MCFG_EF9364_PAGES_CNT(_pages_number) \
- ef9364_device::static_set_nb_of_pages(*device,_pages_number);
+ ef9364_device::static_set_nb_of_pages(*device,_pages_number);
#define MCFG_EF9364_IRQ_HANDLER(_devcb) \
- devcb = &ef9364_device::set_irq_handler(*device, DEVCB_##_devcb);
+ devcb = &ef9364_device::set_irq_handler(*device, DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
@@ -35,67 +35,67 @@
// ======================> ef9364_device
class ef9364_device : public device_t,
- public device_memory_interface,
- public device_video_interface
+ public device_memory_interface,
+ public device_video_interface
{
public:
- // construction/destruction
- ef9364_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ // construction/destruction
+ ef9364_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- // static configuration
- static void static_set_palette_tag(device_t &device, const char *tag);
- static void static_set_nb_of_pages(device_t &device, int nb_bitplanes );
+ // static configuration
+ static void static_set_palette_tag(device_t &device, const char *tag);
+ static void static_set_nb_of_pages(device_t &device, int nb_bitplanes );
- // device interface
+ // device interface
- void update_scanline(UINT16 scanline);
- void set_color_entry( int index, UINT8 r, UINT8 g, UINT8 b );
+ void update_scanline(UINT16 scanline);
+ void set_color_entry( int index, UINT8 r, UINT8 g, UINT8 b );
- UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void char_latch_w(UINT8 data);
- void command_w(UINT8 cmd);
+ UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void char_latch_w(UINT8 data);
+ void command_w(UINT8 cmd);
protected:
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
+ // device_config_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
- // address space configurations
- const address_space_config m_space_config;
+ // address space configurations
+ const address_space_config m_space_config;
- // inline helper
+ // inline helper
private:
- void screen_scanning( int force_clear );
- void set_video_mode(void);
- void draw_border(UINT16 line);
+ void screen_scanning( int force_clear );
+ void set_video_mode(void);
+ void draw_border(UINT16 line);
- // internal state
+ // internal state
- memory_region *m_charset;
- address_space *m_textram;
+ memory_region *m_charset;
+ address_space *m_textram;
- UINT8 x_curs_pos;
- UINT8 y_curs_pos;
- UINT8 char_latch;
+ UINT8 x_curs_pos;
+ UINT8 y_curs_pos;
+ UINT8 char_latch;
- UINT8 m_border[80]; //border color
+ UINT8 m_border[80]; //border color
- rgb_t palette[2];
- int nb_of_pages;
- int bitplane_xres;
- int bitplane_yres;
- int vsync_scanline_pos;
- int cursor_cnt;
- int cursor_state;
+ rgb_t palette[2];
+ int nb_of_pages;
+ int bitplane_xres;
+ int bitplane_yres;
+ int vsync_scanline_pos;
+ int cursor_cnt;
+ int cursor_state;
- UINT32 clock_freq;
- bitmap_rgb32 m_screen_out;
+ UINT32 clock_freq;
+ bitmap_rgb32 m_screen_out;
- required_device<palette_device> m_palette;
+ required_device<palette_device> m_palette;
};
// device type definition
diff --git a/src/devices/video/jangou_blitter.cpp b/src/devices/video/jangou_blitter.cpp
index e2acdb37ca1..032ed96a4ed 100644
--- a/src/devices/video/jangou_blitter.cpp
+++ b/src/devices/video/jangou_blitter.cpp
@@ -2,15 +2,15 @@
// copyright-holders:Angelo Salese
/***************************************************************************
- Jangou Custom Blitter Chip, codename "???" (name scratched afaik)
+ Jangou Custom Blitter Chip, codename "???" (name scratched afaik)
- device emulation by Angelo Salese, from original jangou.cpp implementation
- by Angelo Salese, David Haywood and Phil Bennett.
+ device emulation by Angelo Salese, from original jangou.cpp implementation
+ by Angelo Salese, David Haywood and Phil Bennett.
+
+ TODO:
+ - BLTFLIP mechanism;
+ - clean-ups;
- TODO:
- - BLTFLIP mechanism;
- - clean-ups;
-
***************************************************************************/
#include "emu.h"
@@ -51,7 +51,7 @@ void jangou_blitter_device::device_start()
if (m_gfxrom == nullptr)
fatalerror("JANGOU_BLITTER: \"gfx\" memory base not found");
m_gfxrommask = devregion->bytes()-1;
-
+
save_item(NAME(m_pen_data));
save_item(NAME(m_blit_data));
save_item(NAME(m_blit_buffer));
@@ -84,12 +84,12 @@ UINT8 jangou_blitter_device::gfx_nibble( UINT32 niboffset )
}
void jangou_blitter_device::plot_gfx_pixel( UINT8 pix, int x, int y )
-{
+{
if (y < 0 || y >= 256)
return;
if (x < 0 || x >= 256)
return;
-
+
if (x & 1)
m_blit_buffer[(y * 256) + (x >> 1)] = (m_blit_buffer[(y * 256) + (x >> 1)] & 0x0f) | ((pix << 4) & 0xf0);
else
@@ -112,11 +112,11 @@ WRITE8_MEMBER( jangou_blitter_device::process_w )
src |= (m_blit_data[6] & 3) << 16;
x = (m_blit_data[2] & 0xff);
y = (m_blit_data[3] & 0xff);
-
+
#if 0
if(m_bltflip == true)
{
- printf("%02x %02x %02x %02x %02x %02x %02x\n", m_blit_data[0], m_blit_data[1], m_blit_data[2],m_blit_data[3], m_blit_data[4], m_blit_data[5],m_blit_data[6]);
+ printf("%02x %02x %02x %02x %02x %02x %02x\n", m_blit_data[0], m_blit_data[1], m_blit_data[2],m_blit_data[3], m_blit_data[4], m_blit_data[5],m_blit_data[6]);
printf("=>");
for(int i=0;i<0x10;i++)
printf("%02x ",m_pen_data[i]);
@@ -131,7 +131,7 @@ WRITE8_MEMBER( jangou_blitter_device::process_w )
else
src -= (w * h) - 1;
-
+
for (ycount = 0; ycount < h; ycount++)
{
for(xcount = 0; xcount < w; xcount++)
@@ -152,9 +152,9 @@ WRITE8_MEMBER( jangou_blitter_device::process_w )
count++;
}
}
-
+
//UINT32 new_src = src + count;
-
+
// update source and height after blitter operation
// TODO: Jangou doesn't agree with this, later HW?
#if 0
diff --git a/src/devices/video/jangou_blitter.h b/src/devices/video/jangou_blitter.h
index 7a39172e7ca..d5d6e92a55f 100644
--- a/src/devices/video/jangou_blitter.h
+++ b/src/devices/video/jangou_blitter.h
@@ -43,9 +43,9 @@ public:
protected:
// device-level overrides
- virtual void device_start() override;
+ virtual void device_start() override;
virtual void device_reset() override;
-
+
private:
void plot_gfx_pixel( UINT8 pix, int x, int y );
UINT8 gfx_nibble( UINT32 niboffset );
diff --git a/src/devices/video/poly.h b/src/devices/video/poly.h
index 2ecc72491f7..e5739e39570 100644
--- a/src/devices/video/poly.h
+++ b/src/devices/video/poly.h
@@ -38,6 +38,7 @@
#define __POLY_H__
#include <limits.h>
+#include <atomic>
//**************************************************************************
// DEBUGGING
@@ -165,7 +166,7 @@ private:
// internal unit of work
struct work_unit
{
- volatile UINT32 count_next; // number of scanlines and index of next item to process
+ std::atomic<UINT32> count_next; // number of scanlines and index of next item to process
polygon_info * polygon; // pointer to polygon
INT16 scanline; // starting scanline
UINT16 previtem; // index of previous item in the same bucket
@@ -405,7 +406,7 @@ void *poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::work_item_cal
{
orig_count_next = prevunit.count_next;
new_count_next = orig_count_next | (unitnum << 16);
- } while (compare_exchange32((volatile INT32 *)&prevunit.count_next, orig_count_next, new_count_next) != orig_count_next);
+ } while (!prevunit.count_next.compare_exchange_weak(orig_count_next, new_count_next, std::memory_order_release, std::memory_order_relaxed));
#if KEEP_POLY_STATISTICS
// track resolved conflicts
@@ -427,7 +428,7 @@ void *poly_manager<_BaseType, _ObjectData, _MaxParams, _MaxPolys>::work_item_cal
do
{
orig_count_next = unit.count_next;
- } while (compare_exchange32((volatile INT32 *)&unit.count_next, orig_count_next, 0) != orig_count_next);
+ } while (!unit.count_next.compare_exchange_weak(orig_count_next, 0, std::memory_order_release, std::memory_order_relaxed));
// if we have no more work to do, do nothing
orig_count_next >>= 16;
diff --git a/src/devices/video/polylgcy.cpp b/src/devices/video/polylgcy.cpp
index b5daf5a924b..25dd61aa733 100644
--- a/src/devices/video/polylgcy.cpp
+++ b/src/devices/video/polylgcy.cpp
@@ -10,7 +10,7 @@
#include "emu.h"
#include "polylgcy.h"
-
+#include <atomic>
/***************************************************************************
DEBUGGING
@@ -88,7 +88,7 @@ struct poly_section
struct work_unit_shared
{
polygon_info * polygon; /* pointer to polygon */
- volatile UINT32 count_next; /* number of scanlines and index of next item to process */
+ std::atomic<UINT32> count_next; /* number of scanlines and index of next item to process */
INT16 scanline; /* starting scanline and count */
UINT16 previtem; /* index of previous item in the same bucket */
#ifndef PTR64
@@ -1305,7 +1305,7 @@ static void *poly_item_callback(void *param, int threadid)
{
orig_count_next = prevunit->shared.count_next;
new_count_next = orig_count_next | (unitnum << 16);
- } while (compare_exchange32((volatile INT32 *)&prevunit->shared.count_next, orig_count_next, new_count_next) != orig_count_next);
+ } while (!prevunit->shared.count_next.compare_exchange_weak(orig_count_next, new_count_next, std::memory_order_release, std::memory_order_relaxed));
#if KEEP_STATISTICS
/* track resolved conflicts */
@@ -1336,7 +1336,7 @@ static void *poly_item_callback(void *param, int threadid)
do
{
orig_count_next = unit->shared.count_next;
- } while (compare_exchange32((volatile INT32 *)&unit->shared.count_next, orig_count_next, 0) != orig_count_next);
+ } while (!unit->shared.count_next.compare_exchange_weak(orig_count_next, 0, std::memory_order_release, std::memory_order_relaxed));
/* if we have no more work to do, do nothing */
orig_count_next >>= 16;
diff --git a/src/devices/video/upd7220.cpp b/src/devices/video/upd7220.cpp
index 32d4d2c3c63..070c9e4fbec 100644
--- a/src/devices/video/upd7220.cpp
+++ b/src/devices/video/upd7220.cpp
@@ -94,7 +94,7 @@ enum
#define UPD7220_COMMAND_CCHAR 0x4b
#define UPD7220_COMMAND_START 0x6b
#define UPD7220_COMMAND_BCTRL 0x0c // & 0xfe
-#define UPD7220_COMMAND_05 0x05
+#define UPD7220_COMMAND_05 0x05
#define UPD7220_COMMAND_ZOOM 0x46
#define UPD7220_COMMAND_CURS 0x49
#define UPD7220_COMMAND_PRAM 0x70 // & 0xf0
diff --git a/src/devices/video/voodoo.cpp b/src/devices/video/voodoo.cpp
index 7fe0b94a007..025c0fa140f 100644
--- a/src/devices/video/voodoo.cpp
+++ b/src/devices/video/voodoo.cpp
@@ -960,7 +960,7 @@ TIMER_CALLBACK_MEMBER( voodoo_device::vblank_callback )
/* set a timer for the next off state */
machine().scheduler().timer_set(screen->time_until_pos(0), timer_expired_delegate(FUNC(voodoo_device::vblank_off_callback),this), 0, this);
-
+
/* set internal state and call the client */
fbi.vblank = TRUE;
@@ -2877,7 +2877,7 @@ default_case:
*
*************************************/
INT32 voodoo_device::lfb_direct_w(voodoo_device *vd, offs_t offset, UINT32 data, UINT32 mem_mask)
-{
+{
UINT16 *dest;
UINT32 destmax;
int x, y;
@@ -2923,7 +2923,6 @@ INT32 voodoo_device::lfb_direct_w(voodoo_device *vd, offs_t offset, UINT32 data,
INT32 voodoo_device::lfb_w(voodoo_device* vd, offs_t offset, UINT32 data, UINT32 mem_mask)
{
-
UINT16 *dest, *depth;
UINT32 destmax, depthmax;
int sr[2], sg[2], sb[2], sa[2], sw[2];
@@ -3783,7 +3782,6 @@ WRITE32_MEMBER( voodoo_device::voodoo_w )
static UINT32 register_r(voodoo_device *vd, offs_t offset)
{
-
int regnum = offset & 0xff;
UINT32 result;
@@ -4053,7 +4051,6 @@ static UINT32 lfb_r(voodoo_device *vd, offs_t offset, bool lfb_3d)
READ32_MEMBER( voodoo_device::voodoo_r )
{
-
/* if we have something pending, flush the FIFOs up to the current time */
if (pci.op_pending)
flush_fifos(this, machine().time());
@@ -4699,7 +4696,6 @@ WRITE32_MEMBER( voodoo_banshee_device::banshee_agp_w )
WRITE32_MEMBER( voodoo_banshee_device::banshee_w )
{
-
/* if we have something pending, flush the FIFOs up to the current time */
if (pci.op_pending)
flush_fifos(this, machine().time());
@@ -5045,7 +5041,7 @@ void voodoo_device::common_start_voodoo(UINT8 type)
pci.fifo.in = pci.fifo.out = 0;
pci.stall_state = NOT_STALLED;
pci.continue_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(voodoo_device::stall_cpu_callback),this), nullptr);
-
+
/* allocate memory */
tmumem0 = m_tmumem0;
tmumem1 = m_tmumem1;
diff --git a/src/devices/video/voodoo.h b/src/devices/video/voodoo.h
index 1dc1a4a59ec..81951a17087 100644
--- a/src/devices/video/voodoo.h
+++ b/src/devices/video/voodoo.h
@@ -1777,7 +1777,7 @@ public:
const char * m_cputag;
devcb_write_line m_vblank;
devcb_write_line m_stall;
-
+
TIMER_CALLBACK_MEMBER( vblank_off_callback );
TIMER_CALLBACK_MEMBER( stall_cpu_callback );
TIMER_CALLBACK_MEMBER( vblank_callback );
@@ -1826,11 +1826,9 @@ public:
static void raster_generic_2tmu(void *dest, INT32 scanline, const poly_extent *extent, const void *extradata, int threadid);
#define RASTERIZER_HEADER(name) \
- static void raster_##name(void *destbase, INT32 y, const poly_extent *extent, const void *extradata, int threadid); \
-
+ static void raster_##name(void *destbase, INT32 y, const poly_extent *extent, const void *extradata, int threadid);
#define RASTERIZER_ENTRY(fbzcp, alpha, fog, fbz, tex0, tex1) \
- RASTERIZER_HEADER(fbzcp##_##alpha##_##fog##_##fbz##_##tex0##_##tex1) \
-
+ RASTERIZER_HEADER(fbzcp##_##alpha##_##fog##_##fbz##_##tex0##_##tex1)
#include "voodoo_rast.inc"
#undef RASTERIZER_ENTRY
diff --git a/src/emu/audit.cpp b/src/emu/audit.cpp
index b1016967931..7f371ee56c8 100644
--- a/src/emu/audit.cpp
+++ b/src/emu/audit.cpp
@@ -347,36 +347,36 @@ media_auditor::summary media_auditor::summarize(const char *name, std::string *o
// output the game name, file name, and length (if applicable)
if (output != nullptr)
{
- strcatprintf(*output,"%-12s: %s", name, record->name());
+ output->append(string_format("%-12s: %s", name, record->name()));
if (record->expected_length() > 0)
- strcatprintf(*output," (%" I64FMT "d bytes)", record->expected_length());
- strcatprintf(*output," - ");
+ output->append(string_format(" (%d bytes)", record->expected_length()));
+ output->append(" - ");
}
// use the substatus for finer details
switch (record->substatus())
{
case audit_record::SUBSTATUS_GOOD_NEEDS_REDUMP:
- if (output != nullptr) strcatprintf(*output,"NEEDS REDUMP\n");
+ if (output != nullptr) output->append("NEEDS REDUMP\n");
best_new_status = BEST_AVAILABLE;
break;
case audit_record::SUBSTATUS_FOUND_NODUMP:
- if (output != nullptr) strcatprintf(*output,"NO GOOD DUMP KNOWN\n");
+ if (output != nullptr) output->append("NO GOOD DUMP KNOWN\n");
best_new_status = BEST_AVAILABLE;
break;
case audit_record::SUBSTATUS_FOUND_BAD_CHECKSUM:
if (output != nullptr)
{
- strcatprintf(*output,"INCORRECT CHECKSUM:\n");
- strcatprintf(*output,"EXPECTED: %s\n", record->expected_hashes().macro_string().c_str());
- strcatprintf(*output," FOUND: %s\n", record->actual_hashes().macro_string().c_str());
+ output->append("INCORRECT CHECKSUM:\n");
+ output->append(string_format("EXPECTED: %s\n", record->expected_hashes().macro_string().c_str()));
+ output->append(string_format(" FOUND: %s\n", record->actual_hashes().macro_string().c_str()));
}
break;
case audit_record::SUBSTATUS_FOUND_WRONG_LENGTH:
- if (output != nullptr) strcatprintf(*output,"INCORRECT LENGTH: %" I64FMT "d bytes\n", record->actual_length());
+ if (output != nullptr) output->append(string_format("INCORRECT LENGTH: %d bytes\n", record->actual_length()));
break;
case audit_record::SUBSTATUS_NOT_FOUND:
@@ -384,20 +384,20 @@ media_auditor::summary media_auditor::summarize(const char *name, std::string *o
{
device_t *shared_device = record->shared_device();
if (shared_device == nullptr)
- strcatprintf(*output,"NOT FOUND\n");
+ output->append("NOT FOUND\n");
else
- strcatprintf(*output,"NOT FOUND (%s)\n", shared_device->shortname());
+ output->append(string_format("NOT FOUND (%s)\n", shared_device->shortname()));
}
best_new_status = NOTFOUND;
break;
case audit_record::SUBSTATUS_NOT_FOUND_NODUMP:
- if (output != nullptr) strcatprintf(*output,"NOT FOUND - NO GOOD DUMP KNOWN\n");
+ if (output != nullptr) output->append("NOT FOUND - NO GOOD DUMP KNOWN\n");
best_new_status = BEST_AVAILABLE;
break;
case audit_record::SUBSTATUS_NOT_FOUND_OPTIONAL:
- if (output != nullptr) strcatprintf(*output,"NOT FOUND BUT OPTIONAL\n");
+ if (output != nullptr) output->append("NOT FOUND BUT OPTIONAL\n");
best_new_status = BEST_AVAILABLE;
break;
diff --git a/src/emu/cheat.cpp b/src/emu/cheat.cpp
index c055ba5bdb2..6b24b22fc35 100644
--- a/src/emu/cheat.cpp
+++ b/src/emu/cheat.cpp
@@ -108,16 +108,16 @@ inline std::string number_and_format::format() const
{
default:
case XML_INT_FORMAT_DECIMAL:
- return strformat("%d", (UINT32)m_value);
+ return string_format("%d", (UINT32)m_value);
case XML_INT_FORMAT_DECIMAL_POUND:
- return strformat("#%d", (UINT32)m_value);
+ return string_format("#%d", (UINT32)m_value);
case XML_INT_FORMAT_HEX_DOLLAR:
- return strformat("$%X", (UINT32)m_value);
+ return string_format("$%X", (UINT32)m_value);
case XML_INT_FORMAT_HEX_C:
- return strformat("0x%X", (UINT32)m_value);
+ return string_format("0x%X", (UINT32)m_value);
}
}
@@ -174,12 +174,13 @@ const char *cheat_parameter::text()
{
// are we a value cheat?
if (!has_itemlist())
- strprintf(m_curtext,"%d (0x%X)", UINT32(m_value), UINT32(m_value));
-
- // if not, we're an item cheat
+ {
+ m_curtext = string_format("%d (0x%X)", UINT32(m_value), UINT32(m_value));
+ }
else
{
- strprintf(m_curtext, "??? (%d)", UINT32(m_value));
+ // if not, we're an item cheat
+ m_curtext = string_format("??? (%d)", UINT32(m_value));
for (item *curitem = m_itemlist.first(); curitem != nullptr; curitem = curitem->next())
if (curitem->value() == m_value)
{
@@ -502,7 +503,7 @@ void cheat_script::script_entry::execute(cheat_manager &manager, UINT64 &arginde
curarg += arg->values(argindex, &params[curarg]);
// generate the astring
- strprintf(manager.get_output_astring(m_line, m_justify), m_format.c_str(),
+ manager.get_output_astring(m_line, m_justify) = string_format(m_format,
(UINT32)params[0], (UINT32)params[1], (UINT32)params[2], (UINT32)params[3],
(UINT32)params[4], (UINT32)params[5], (UINT32)params[6], (UINT32)params[7],
(UINT32)params[8], (UINT32)params[9], (UINT32)params[10], (UINT32)params[11],
@@ -697,7 +698,7 @@ cheat_entry::cheat_entry(cheat_manager &manager, symbol_table &globaltable, cons
// create the symbol table
m_symbols.add("argindex", symbol_table::READ_ONLY, &m_argindex);
for (int curtemp = 0; curtemp < tempcount; curtemp++) {
- m_symbols.add(strformat("temp%d", curtemp).c_str(), symbol_table::READ_WRITE);
+ m_symbols.add(string_format("temp%d", curtemp).c_str(), symbol_table::READ_WRITE);
}
// read the first comment node
@@ -1133,9 +1134,7 @@ void cheat_manager::reload()
// have the same shortname
if (image->software_entry() != nullptr)
{
- std::string filename;
- strprintf(filename, "%s%s%s", image->software_list_name(), PATH_SEPARATOR, image->basename());
- load_cheats(filename.c_str());
+ load_cheats(string_format("%s%s%s", image->software_list_name(), PATH_SEPARATOR, image->basename()).c_str());
break;
}
// else we are loading outside the software list, try to load machine_basename/crc32.xml
@@ -1144,9 +1143,7 @@ void cheat_manager::reload()
UINT32 crc = image->crc();
if (crc != 0)
{
- std::string filename;
- strprintf(filename, "%s%s%08X", machine().basename(), PATH_SEPARATOR, crc);
- load_cheats(filename.c_str());
+ load_cheats(string_format("%s%s%08X", machine().basename(), PATH_SEPARATOR, crc).c_str());
break;
}
}
diff --git a/src/emu/clifront.cpp b/src/emu/clifront.cpp
index 6b75841df83..4476e4e0151 100644
--- a/src/emu/clifront.cpp
+++ b/src/emu/clifront.cpp
@@ -107,10 +107,10 @@ int cli_frontend::execute(int argc, char **argv)
m_options.parse_command_line(argc, argv, option_errors);
m_options.parse_standard_inis(option_errors);
-
+
//load_translation();
load_translation(m_options);
-
+
manager->start_luaengine();
if (*(m_options.software_name()) != 0)
@@ -152,8 +152,7 @@ int cli_frontend::execute(int argc, char **argv)
// mount only if not already mounted
if (*option == 0)
{
- std::string val;
- strprintf(val, "%s:%s:%s", swlistdev->list_name(), m_options.software_name(), swpart->name());
+ std::string val = string_format("%s:%s:%s", swlistdev->list_name(), m_options.software_name(), swpart->name());
// call this in order to set slot devices according to mounting
m_options.parse_slot_devices(argc, argv, option_errors, image->instance_name(), val.c_str(), swpart);
@@ -718,8 +717,7 @@ void cli_frontend::listmedia(const char *gamename)
for (const device_image_interface *imagedev = iter.first(); imagedev != nullptr; imagedev = iter.next())
{
// extract the shortname with parentheses
- std::string paren_shortname;
- strprintf(paren_shortname,"(%s)", imagedev->brief_instance_name());
+ std::string paren_shortname = string_format("(%s)", imagedev->brief_instance_name());
// output the line, up to the list of extensions
printf("%-13s%-12s%-8s ", first ? drivlist.driver().name : "", imagedev->instance_name(), paren_shortname.c_str());
diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp
index 7ad039806ea..21ed7860a30 100644
--- a/src/emu/debug/debugcmd.cpp
+++ b/src/emu/debug/debugcmd.cpp
@@ -699,7 +699,7 @@ static void execute_print(running_machine &machine, int ref, int params, const c
/* then print each one */
for (i = 0; i < params; i++)
- debug_console_printf(machine, "%s", core_i64_hex_format(values[i], 0));
+ debug_console_printf(machine, "%X", values[i]);
debug_console_printf(machine, "\n");
}
@@ -1036,14 +1036,14 @@ static void execute_ignore(running_machine &machine, int ref, int params, const
if (!exec->device().debug()->observing())
{
if (buffer.empty())
- strprintf(buffer, "Currently ignoring device '%s'", exec->device().tag());
+ buffer = string_format("Currently ignoring device '%s'", exec->device().tag());
else
- strcatprintf(buffer, ", '%s'", exec->device().tag());
+ buffer.append(string_format(", '%s'", exec->device().tag()));
}
/* special message for none */
if (buffer.empty())
- strprintf(buffer, "Not currently ignoring any devices");
+ buffer = string_format("Not currently ignoring any devices");
debug_console_printf(machine, "%s\n", buffer.c_str());
}
@@ -1101,14 +1101,14 @@ static void execute_observe(running_machine &machine, int ref, int params, const
if (exec->device().debug()->observing())
{
if (buffer.empty())
- strprintf(buffer, "Currently observing CPU '%s'", exec->device().tag());
+ buffer = string_format("Currently observing CPU '%s'", exec->device().tag());
else
- strcatprintf(buffer, ", '%s'", exec->device().tag());
+ buffer.append(string_format(", '%s'", exec->device().tag()));
}
/* special message for none */
if (buffer.empty())
- strprintf(buffer, "Not currently observing any devices");
+ buffer = string_format("Not currently observing any devices");
debug_console_printf(machine, "%s\n", buffer.c_str());
}
@@ -1329,11 +1329,11 @@ static void execute_bplist(running_machine &machine, int ref, int params, const
/* loop over the breakpoints */
for (device_debug::breakpoint *bp = device->debug()->breakpoint_first(); bp != nullptr; bp = bp->next())
{
- strprintf(buffer, "%c%4X @ %s", bp->enabled() ? ' ' : 'D', bp->index(), core_i64_hex_format(bp->address(), device->debug()->logaddrchars()));
+ buffer = string_format("%c%4X @ %0*X", bp->enabled() ? ' ' : 'D', bp->index(), device->debug()->logaddrchars(), bp->address());
if (std::string(bp->condition()).compare("1") != 0)
- strcatprintf(buffer, " if %s", bp->condition());
+ buffer.append(string_format(" if %s", bp->condition()));
if (std::string(bp->action()).compare("") != 0)
- strcatprintf(buffer, " do %s", bp->action());
+ buffer.append(string_format(" do %s", bp->action()));
debug_console_printf(machine, "%s\n", buffer.c_str());
printed++;
}
@@ -1496,14 +1496,14 @@ static void execute_wplist(running_machine &machine, int ref, int params, const
/* loop over the watchpoints */
for (device_debug::watchpoint *wp = device->debug()->watchpoint_first(spacenum); wp != nullptr; wp = wp->next())
{
- strprintf(buffer, "%c%4X @ %s-%s %s", wp->enabled() ? ' ' : 'D', wp->index(),
- core_i64_hex_format(wp->space().byte_to_address(wp->address()), wp->space().addrchars()),
- core_i64_hex_format(wp->space().byte_to_address_end(wp->address() + wp->length()) - 1, wp->space().addrchars()),
+ buffer = string_format("%c%4X @ %0*X-%0*X %s", wp->enabled() ? ' ' : 'D', wp->index(),
+ wp->space().addrchars(), wp->space().byte_to_address(wp->address()),
+ wp->space().addrchars(), wp->space().byte_to_address_end(wp->address() + wp->length()) - 1,
types[wp->type() & 3]);
if (std::string(wp->condition()).compare("1") != 0)
- strcatprintf(buffer, " if %s", wp->condition());
+ buffer.append(string_format(" if %s", wp->condition()));
if (std::string(wp->action()).compare("") != 0)
- strcatprintf(buffer, " do %s", wp->action());
+ buffer.append(string_format(" do %s", wp->action()));
debug_console_printf(machine, "%s\n", buffer.c_str());
printed++;
}
@@ -1639,10 +1639,9 @@ static void execute_rplist(running_machine &machine, int ref, int params, const
/* loop over the breakpoints */
for (device_debug::registerpoint *rp = device->debug()->registerpoint_first(); rp != nullptr; rp = rp->next())
{
- strprintf(buffer, "%c%4X ", rp->enabled() ? ' ' : 'D', rp->index());
- strcatprintf(buffer, "if %s", rp->condition());
+ buffer = string_format("%c%4X if %s", rp->enabled() ? ' ' : 'D', rp->index(), rp->condition());
if (rp->action() != nullptr)
- strcatprintf(buffer, " do %s", rp->action());
+ buffer.append(string_format(" do %s", rp->action()));
debug_console_printf(machine, "%s\n", buffer.c_str());
printed++;
}
@@ -1819,7 +1818,7 @@ static void execute_load(running_machine &machine, int ref, int params, const ch
if ( i == offset)
debug_console_printf(machine, "Length specified too large, load failed\n");
else
- debug_console_printf(machine, "Data loaded successfully to memory : 0x%s to 0x%s\n", core_i64_hex_format(offset,0), core_i64_hex_format(i-1,0));
+ debug_console_printf(machine, "Data loaded successfully to memory : 0x%X to 0x%X\n", offset, i-1);
}
@@ -1868,13 +1867,14 @@ static void execute_dump(running_machine &machine, int ref, int params, const ch
}
/* now write the data out */
+ util::ovectorstream output;
+ output.reserve(200);
for (i = offset; i <= endoffset; i += 16)
{
- char output[200];
- int outdex = 0;
+ output.clear();
/* print the address */
- outdex += sprintf(&output[outdex], "%s: ", core_i64_hex_format((UINT32)space->byte_to_address(i), space->logaddrchars()));
+ util::stream_format(output, "%0*X: ", space->logaddrchars(), (UINT32)space->byte_to_address(i));
/* print the bytes */
for (j = 0; j < 16; j += width)
@@ -1885,34 +1885,35 @@ static void execute_dump(running_machine &machine, int ref, int params, const ch
if (debug_cpu_translate(*space, TRANSLATE_READ_DEBUG, &curaddr))
{
UINT64 value = debug_read_memory(*space, i + j, width, TRUE);
- outdex += sprintf(&output[outdex], " %s", core_i64_hex_format(value, width * 2));
+ util::stream_format(output, " %0*X", width * 2, value);
}
else
- outdex += sprintf(&output[outdex], " %.*s", (int)width * 2, "****************");
+ util::stream_format(output, " %.*s", width * 2, "****************");
}
else
- outdex += sprintf(&output[outdex], " %*s", (int)width * 2, "");
+ util::stream_format(output, " %*s", width * 2, "");
}
/* print the ASCII */
if (ascii)
{
- outdex += sprintf(&output[outdex], " ");
+ util::stream_format(output, " ");
for (j = 0; j < 16 && (i + j) <= endoffset; j++)
{
offs_t curaddr = i + j;
if (debug_cpu_translate(*space, TRANSLATE_READ_DEBUG, &curaddr))
{
UINT8 byte = debug_read_byte(*space, i + j, TRUE);
- outdex += sprintf(&output[outdex], "%c", (byte >= 32 && byte < 127) ? byte : '.');
+ util::stream_format(output, "%c", (byte >= 32 && byte < 127) ? byte : '.');
}
else
- outdex += sprintf(&output[outdex], " ");
+ util::stream_format(output, " ");
}
}
/* output the result */
- fprintf(f, "%s\n", output);
+ auto const &text = output.vec();
+ fprintf(f, "%.*s\n", int(unsigned(text.size())), &text[0]);
}
/* close the file */
@@ -2293,6 +2294,7 @@ static void execute_cheatlist(running_machine &machine, int ref, int params, con
}
/* write the cheat list */
+ util::ovectorstream output;
for (cheatindex = 0; cheatindex < cheat.cheatmap.size(); cheatindex += 1)
{
if (cheat.cheatmap[cheatindex].state == 1)
@@ -2303,14 +2305,27 @@ static void execute_cheatlist(running_machine &machine, int ref, int params, con
if (params > 0)
{
active_cheat++;
- fprintf(f, " <cheat desc=\"Possibility %d : %s (%s)\">\n", active_cheat, core_i64_hex_format(address, space->logaddrchars()), core_i64_hex_format(value, cheat.width * 2));
- fprintf(f, " <script state=\"run\">\n");
- fprintf(f, " <action>%s.p%c%c@%s=%s</action>\n", cpu->tag(), spaceletter, sizeletter, core_i64_hex_format(address, space->logaddrchars()), core_i64_hex_format(cheat_byte_swap(&cheat, cheat.cheatmap[cheatindex].first_value) & sizemask, cheat.width * 2));
- fprintf(f, " </script>\n");
- fprintf(f, " </cheat>\n\n");
+ output.clear();
+ stream_format(
+ output,
+ " <cheat desc=\"Possibility %d : %0*X (%0*X)\">\n"
+ " <script state=\"run\">\n"
+ " <action>%s.p%c%c@%0*X=%0*X</action>\n"
+ " </script>\n"
+ " </cheat>\n\n",
+ active_cheat, space->logaddrchars(), address, cheat.width * 2, value,
+ cpu->tag(), spaceletter, sizeletter, space->logaddrchars(), address, cheat.width * 2, cheat_byte_swap(&cheat, cheat.cheatmap[cheatindex].first_value) & sizemask);
+ auto const &text(output.vec());
+ fprintf(f, "%.*s", int(unsigned(text.size())), &text[0]);
}
else
- debug_console_printf(machine, "Address=%s Start=%s Current=%s\n", core_i64_hex_format(address, space->logaddrchars()), core_i64_hex_format(cheat_byte_swap(&cheat, cheat.cheatmap[cheatindex].first_value) & sizemask, cheat.width * 2), core_i64_hex_format(value, cheat.width * 2));
+ {
+ debug_console_printf(
+ machine, "Address=%0*X Start=%0*X Current=%0*X\n",
+ space->logaddrchars(), address,
+ cheat.width * 2, cheat_byte_swap(&cheat, cheat.cheatmap[cheatindex].first_value) & sizemask,
+ cheat.width * 2, value);
+ }
}
}
if (params > 0)
@@ -2437,7 +2452,7 @@ static void execute_find(running_machine &machine, int ref, int params, const ch
if (match)
{
found++;
- debug_console_printf(machine, "Found at %s\n", core_i64_hex_format((UINT32)space->byte_to_address(i), space->addrchars()));
+ debug_console_printf(machine, "Found at %0*X\n", space->addrchars(), (UINT32)space->byte_to_address(i));
}
}
@@ -2491,17 +2506,19 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch
}
/* now write the data out */
+ util::ovectorstream output;
+ output.reserve(512);
for (UINT64 i = 0; i < length; )
{
int pcbyte = space->address_to_byte(offset + i) & space->bytemask();
- char output[512], disasm[200];
+ char disasm[200];
const char *comment;
offs_t tempaddr;
- int outdex = 0;
int numbytes = 0;
+ output.clear();
/* print the address */
- outdex += sprintf(&output[outdex], "%s: ", core_i64_hex_format((UINT32)space->byte_to_address(pcbyte), space->logaddrchars()));
+ stream_format(output, "%0*X: ", space->logaddrchars(), (UINT32)space->byte_to_address(pcbyte));
/* make sure we can translate the address */
tempaddr = pcbyte;
@@ -2523,38 +2540,37 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch
/* print the bytes */
if (bytes)
{
- int startdex = outdex;
+ auto const startdex = output.tellp();
numbytes = space->address_to_byte(numbytes);
for (j = 0; j < numbytes; j += minbytes)
- outdex += sprintf(&output[outdex], "%s ", core_i64_hex_format(debug_read_opcode(*decrypted_space, pcbyte + j, minbytes), minbytes * 2));
- if (outdex - startdex < byteswidth)
- outdex += sprintf(&output[outdex], "%*s", byteswidth - (outdex - startdex), "");
- outdex += sprintf(&output[outdex], " ");
+ stream_format(output, "%0*X ", minbytes * 2, debug_read_opcode(*decrypted_space, pcbyte + j, minbytes));
+ if ((output.tellp() - startdex) < byteswidth)
+ stream_format(output, "%*s", byteswidth - (output.tellp() - startdex), "");
+ stream_format(output, " ");
}
/* add the disassembly */
- sprintf(&output[outdex], "%s", disasm);
+ stream_format(output, "%s", disasm);
/* attempt to add the comment */
comment = space->device().debug()->comment_text(tempaddr);
if (comment != nullptr)
{
/* somewhat arbitrary guess as to how long most disassembly lines will be [column 60] */
- if (strlen(output) < 60)
+ if (output.tellp() < 60)
{
/* pad the comment space out to 60 characters and null-terminate */
- for (outdex = (int)strlen(output); outdex < 60; outdex++)
- output[outdex] = ' ' ;
- output[outdex] = 0 ;
+ while (output.tellp() < 60) output.put(' ');
- sprintf(&output[strlen(output)], "// %s", comment) ;
+ stream_format(output, "// %s", comment);
}
else
- sprintf(&output[strlen(output)], "\t// %s", comment) ;
+ stream_format(output, "\t// %s", comment);
}
/* output the result */
- fprintf(f, "%s\n", output);
+ auto const &text(output.vec());
+ fprintf(f, "%.*s\n", int(unsigned(text.size())), &text[0]);
}
/* close the file */
@@ -2685,7 +2701,7 @@ static void execute_history(running_machine &machine, int ref, int params, const
char buffer[200];
debug->disassemble(buffer, pc, opbuf, argbuf);
- debug_console_printf(machine, "%s: %s\n", core_i64_hex_format(pc, space->logaddrchars()), buffer);
+ debug_console_printf(machine, "%0*X: %s\n", space->logaddrchars(), pc, buffer);
}
}
@@ -2891,10 +2907,15 @@ static void execute_map(running_machine &machine, int ref, int params, const cha
if (debug_cpu_translate(*space, intention, &taddress))
{
const char *mapname = space->get_handler_string((intention == TRANSLATE_WRITE_DEBUG) ? ROW_WRITE : ROW_READ, taddress);
- debug_console_printf(machine, "%7s: %s logical == %s physical -> %s\n", intnames[intention & 3], core_i64_hex_format(address, space->logaddrchars()), core_i64_hex_format(space->byte_to_address(taddress), space->addrchars()), mapname);
+ debug_console_printf(
+ machine, "%7s: %0*X logical == %0*X physical -> %s\n",
+ intnames[intention & 3],
+ space->logaddrchars(), address,
+ space->addrchars(), space->byte_to_address(taddress),
+ mapname);
}
else
- debug_console_printf(machine, "%7s: %s logical is unmapped\n", intnames[intention & 3], core_i64_hex_format(address, space->logaddrchars()));
+ debug_console_printf(machine, "%7s: %0*X logical is unmapped\n", intnames[intention & 3], space->logaddrchars(), address);
}
}
@@ -2978,7 +2999,7 @@ static void execute_symlist(running_machine &machine, int ref, int params, const
UINT64 value = entry->value();
/* only display "register" type symbols */
- debug_console_printf(machine, "%s = %s", namelist[symnum], core_i64_hex_format(value, 0));
+ debug_console_printf(machine, "%s = %X", namelist[symnum], value);
if (!entry->is_lval())
debug_console_printf(machine, " (read-only)");
debug_console_printf(machine, "\n");
diff --git a/src/emu/debug/debugcon.cpp b/src/emu/debug/debugcon.cpp
index 7bf80dd6118..8aebfd1d979 100644
--- a/src/emu/debug/debugcon.cpp
+++ b/src/emu/debug/debugcon.cpp
@@ -466,39 +466,22 @@ const char *debug_cmderr_to_string(CMDERR error)
***************************************************************************/
/*-------------------------------------------------
- debug_console_printf - printfs the given
+ debug_console_vprintf - vprintfs the given
arguments using the format to the debug
console
-------------------------------------------------*/
-void CLIB_DECL debug_console_printf(running_machine &machine, const char *format, ...)
+void debug_console_vprintf(running_machine &machine, util::format_argument_pack<std::ostream> const &args)
{
- std::string buffer;
- va_list arg;
-
- va_start(arg, format);
- strvprintf(buffer, format, arg);
- va_end(arg);
-
- text_buffer_print(console_textbuf, buffer.c_str());
+ text_buffer_print(console_textbuf, util::string_format(args).c_str());
/* force an update of any console views */
machine.debug_view().update_all(DVT_CONSOLE);
}
-
-/*-------------------------------------------------
- debug_console_vprintf - printfs the given
- arguments using the format to the debug
- console
--------------------------------------------------*/
-
-void CLIB_DECL debug_console_vprintf(running_machine &machine, const char *format, va_list args)
+void debug_console_vprintf(running_machine &machine, util::format_argument_pack<std::ostream> &&args)
{
- std::string buffer;
-
- strvprintf(buffer, format, args);
- text_buffer_print(console_textbuf, buffer.c_str());
+ text_buffer_print(console_textbuf, util::string_format(std::move(args)).c_str());
/* force an update of any console views */
machine.debug_view().update_all(DVT_CONSOLE);
@@ -506,21 +489,22 @@ void CLIB_DECL debug_console_vprintf(running_machine &machine, const char *forma
/*-------------------------------------------------
- debug_console_printf_wrap - printfs the given
+ debug_console_vprintf_wrap - vprintfs the given
arguments using the format to the debug
console
-------------------------------------------------*/
-void CLIB_DECL debug_console_printf_wrap(running_machine &machine, int wrapcol, const char *format, ...)
+void debug_console_vprintf_wrap(running_machine &machine, int wrapcol, util::format_argument_pack<std::ostream> const &args)
{
- std::string buffer;
- va_list arg;
+ text_buffer_print_wrap(console_textbuf, util::string_format(args).c_str(), wrapcol);
- va_start(arg, format);
- strvprintf(buffer, format, arg);
- va_end(arg);
+ /* force an update of any console views */
+ machine.debug_view().update_all(DVT_CONSOLE);
+}
- text_buffer_print_wrap(console_textbuf, buffer.c_str(), wrapcol);
+void debug_console_vprintf_wrap(running_machine &machine, int wrapcol, util::format_argument_pack<std::ostream> &&args)
+{
+ text_buffer_print_wrap(console_textbuf, util::string_format(std::move(args)).c_str(), wrapcol);
/* force an update of any console views */
machine.debug_view().update_all(DVT_CONSOLE);
diff --git a/src/emu/debug/debugcon.h b/src/emu/debug/debugcon.h
index 7c688332ed4..c15874184af 100644
--- a/src/emu/debug/debugcon.h
+++ b/src/emu/debug/debugcon.h
@@ -74,22 +74,35 @@ typedef UINT32 CMDERR;
***************************************************************************/
/* initialization */
-void debug_console_init(running_machine &machine);
+void debug_console_init(running_machine &machine);
/* command handling */
-CMDERR debug_console_execute_command(running_machine &machine, const char *command, int echo);
-CMDERR debug_console_validate_command(running_machine &machine, const char *command);
-void debug_console_register_command(running_machine &machine, const char *command, UINT32 flags, int ref, int minparams, int maxparams, void (*handler)(running_machine &machine, int ref, int params, const char **param));
-const char * debug_cmderr_to_string(CMDERR error);
+CMDERR debug_console_execute_command(running_machine &machine, const char *command, int echo);
+CMDERR debug_console_validate_command(running_machine &machine, const char *command);
+void debug_console_register_command(running_machine &machine, const char *command, UINT32 flags, int ref, int minparams, int maxparams, void (*handler)(running_machine &machine, int ref, int params, const char **param));
+const char * debug_cmderr_to_string(CMDERR error);
/* console management */
-void CLIB_DECL debug_console_printf(running_machine &machine, const char *format, ...) ATTR_PRINTF(2,3);
-void CLIB_DECL debug_console_vprintf(running_machine &machine, const char *format, va_list args);
-void CLIB_DECL debug_console_printf_wrap(running_machine &machine, int wrapcol, const char *format, ...) ATTR_PRINTF(3,4);
-text_buffer * debug_console_get_textbuf(void);
+void debug_console_vprintf(running_machine &machine, util::format_argument_pack<std::ostream> const &args);
+void debug_console_vprintf(running_machine &machine, util::format_argument_pack<std::ostream> &&args);
+void debug_console_vprintf_wrap(running_machine &machine, int wrapcol, util::format_argument_pack<std::ostream> const &args);
+void debug_console_vprintf_wrap(running_machine &machine, int wrapcol, util::format_argument_pack<std::ostream> &&args);
+text_buffer * debug_console_get_textbuf(void);
/* errorlog management */
-void debug_errorlog_write_line(const running_machine &machine, const char *line);
-text_buffer * debug_errorlog_get_textbuf(void);
+void debug_errorlog_write_line(const running_machine &machine, const char *line);
+text_buffer * debug_errorlog_get_textbuf(void);
+
+/* convenience templates */
+template <typename Format, typename... Params>
+inline void debug_console_printf(running_machine &machine, Format &&fmt, Params &&...args)
+{
+ debug_console_vprintf(machine, util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
+}
+template <typename Format, typename... Params>
+inline void debug_console_printf_wrap(running_machine &machine, int wrapcol, Format &&fmt, Params &&...args)
+{
+ debug_console_vprintf_wrap(machine, wrapcol, util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
+}
#endif
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp
index c4686c5566f..2b8595b3c30 100644
--- a/src/emu/debug/debugcpu.cpp
+++ b/src/emu/debug/debugcpu.cpp
@@ -1930,7 +1930,7 @@ void device_debug::instruction_hook(offs_t curpc)
machine.debug_view().flush_osd_updates();
machine.manager().lua()->periodic_check();
-
+
// clear the memory modified flag and wait
global->memory_modified = false;
if (machine.debug_flags & DEBUG_FLAG_OSD_ENABLED)
@@ -2231,10 +2231,9 @@ void device_debug::go_next_device()
// debugger on the next instruction
//-------------------------------------------------
-void device_debug::halt_on_next_instruction(const char *fmt, ...)
+void device_debug::halt_on_next_instruction_impl(util::format_argument_pack<std::ostream> &&args)
{
debugcpu_private *global = m_device.machine().debugcpu_data;
- va_list arg;
assert(m_exec != nullptr);
@@ -2243,9 +2242,7 @@ void device_debug::halt_on_next_instruction(const char *fmt, ...)
return;
// output the message to the console
- va_start(arg, fmt);
- debug_console_vprintf(m_device.machine(), fmt, arg);
- va_end(arg);
+ debug_console_vprintf(m_device.machine(), std::move(args));
// if we are live, stop now, otherwise note that we want to break there
if (&m_device == global->livecpu)
@@ -2680,7 +2677,6 @@ const char *device_debug::comment_text(offs_t addr) const
bool device_debug::comment_export(xml_data_node &curnode)
{
// iterate through the comments
- std::string crc_buf;
for (const auto & elem : m_comment_set)
{
xml_data_node *datanode = xml_add_child(&curnode, "comment", xml_normalize_string(elem.m_text.c_str()));
@@ -2688,8 +2684,7 @@ bool device_debug::comment_export(xml_data_node &curnode)
return false;
xml_set_attribute_int(datanode, "address", elem.m_address);
xml_set_attribute_int(datanode, "color", elem.m_color);
- strprintf(crc_buf,"%08X", elem.m_crc);
- xml_set_attribute(datanode, "crc", crc_buf.c_str());
+ xml_set_attribute(datanode, "crc", string_format("%08X", elem.m_crc).c_str());
}
return true;
}
@@ -3051,14 +3046,14 @@ void device_debug::watchpoint_check(address_space &space, int type, offs_t addre
if (type & WATCHPOINT_WRITE)
{
- strprintf(buffer, "Stopped at watchpoint %X writing %s to %08X (PC=%X)", wp->m_index, sizes[size], space.byte_to_address(address), pc);
+ buffer = string_format("Stopped at watchpoint %X writing %s to %08X (PC=%X)", wp->m_index, sizes[size], space.byte_to_address(address), pc);
if (value_to_write >> 32)
- strcatprintf(buffer, " (data=%X%08X)", (UINT32)(value_to_write >> 32), (UINT32)value_to_write);
+ buffer.append(string_format(" (data=%X%08X)", (UINT32)(value_to_write >> 32), (UINT32)value_to_write));
else
- strcatprintf(buffer, " (data=%X)", (UINT32)value_to_write);
+ buffer.append(string_format(" (data=%X)", (UINT32)value_to_write));
}
else
- strprintf(buffer,"Stopped at watchpoint %X reading %s from %08X (PC=%X)", wp->m_index, sizes[size], space.byte_to_address(address), pc);
+ buffer = string_format("Stopped at watchpoint %X reading %s from %08X (PC=%X)", wp->m_index, sizes[size], space.byte_to_address(address), pc);
debug_console_printf(space.machine(), "%s\n", buffer.c_str());
space.device().debug()->compute_debug_flags();
}
@@ -3486,7 +3481,7 @@ void device_debug::tracer::update(offs_t pc)
// print the address
std::string buffer;
int logaddrchars = m_debug.logaddrchars();
- strprintf(buffer,"%0*X: ", logaddrchars, pc);
+ buffer = string_format("%0*X: ", logaddrchars, pc);
// print the disassembly
std::string dasm;
diff --git a/src/emu/debug/debugcpu.h b/src/emu/debug/debugcpu.h
index 754411cb3f0..5222c1c6ab5 100644
--- a/src/emu/debug/debugcpu.h
+++ b/src/emu/debug/debugcpu.h
@@ -209,7 +209,11 @@ public:
void go_exception(int exception);
void go_milliseconds(UINT64 milliseconds);
void go_next_device();
- void halt_on_next_instruction(const char *fmt, ...) ATTR_PRINTF(2,3);
+ template <typename Format, typename... Params>
+ void halt_on_next_instruction(Format &&fmt, Params &&... args)
+ {
+ halt_on_next_instruction_impl(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
+ }
// breakpoints
breakpoint *breakpoint_first() const { return m_bplist; }
@@ -275,6 +279,8 @@ public:
static const int HISTORY_SIZE = 256;
private:
+ void halt_on_next_instruction_impl(util::format_argument_pack<std::ostream> &&args);
+
// internal helpers
void compute_debug_flags();
void prepare_for_step_overout(offs_t pc);
diff --git a/src/emu/debug/dvbpoints.cpp b/src/emu/debug/dvbpoints.cpp
index efb604e385d..463fc4dbe08 100644
--- a/src/emu/debug/dvbpoints.cpp
+++ b/src/emu/debug/dvbpoints.cpp
@@ -12,6 +12,8 @@
#include "debugger.h"
#include "dvbpoints.h"
+#include <iomanip>
+
// Sorting functors for the qsort function
@@ -100,8 +102,8 @@ static const int tableBreaks[] = { 5, 9, 31, 45, 63, 80 };
//-------------------------------------------------
debug_view_breakpoints::debug_view_breakpoints(running_machine &machine, debug_view_osd_update_func osdupdate, void *osdprivate)
- : debug_view(machine, DVT_BREAK_POINTS, osdupdate, osdprivate),
- m_sortType(cIndexAscending)
+ : debug_view(machine, DVT_BREAK_POINTS, osdupdate, osdprivate)
+ , m_sortType(cIndexAscending)
{
// fail if no available sources
enumerate_sources();
@@ -134,7 +136,7 @@ void debug_view_breakpoints::enumerate_sources()
for (device_disasm_interface *dasm = iter.first(); dasm != nullptr; dasm = iter.next())
{
std::string name;
- strprintf(name, "%s '%s'", dasm->device().name(), dasm->device().tag());
+ name = string_format("%s '%s'", dasm->device().name(), dasm->device().tag());
m_source_list.append(*global_alloc(debug_view_source(name.c_str(), &dasm->device())));
}
@@ -188,16 +190,11 @@ void debug_view_breakpoints::view_click(const int button, const debug_view_xy& p
}
-void debug_view_breakpoints::pad_astring_to_length(std::string& str, int len)
+void debug_view_breakpoints::pad_ostream_to_length(std::ostream& str, int len)
{
- int diff = len - str.length();
- if (diff > 0)
- {
- std::string buffer;
- for (int i = 0; i < diff; i++)
- strcatprintf(buffer, " ");
- strcatprintf(str, "%s", buffer.c_str());
- }
+ auto const current = str.tellp();
+ if (current < decltype(current)(len))
+ str << std::setw(decltype(current)(len) - current) << "";
}
@@ -235,41 +232,43 @@ void debug_view_breakpoints::view_update()
m_total.y = 10;
// Draw
- debug_view_char *dest = &m_viewdata[0];
- std::string linebuf;
+ debug_view_char *dest = &m_viewdata[0];
+ util::ovectorstream linebuf;
+ linebuf.reserve(ARRAY_LENGTH(tableBreaks) - 1);
// Header
if (m_visible.y > 0)
{
linebuf.clear();
- linebuf.append("ID");
- if (m_sortType == &cIndexAscending) linebuf.push_back('\\');
- else if (m_sortType == &cIndexDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[0]);
- linebuf.append("En");
- if (m_sortType == &cEnabledAscending) linebuf.push_back('\\');
- else if (m_sortType == &cEnabledDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[1]);
- linebuf.append("CPU");
- if (m_sortType == &cCpuAscending) linebuf.push_back('\\');
- else if (m_sortType == &cCpuDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[2]);
- linebuf.append("Address");
- if (m_sortType == &cAddressAscending) linebuf.push_back('\\');
- else if (m_sortType == &cAddressDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[3]);
- linebuf.append("Condition");
- if (m_sortType == &cConditionAscending) linebuf.push_back('\\');
- else if (m_sortType == &cConditionDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[4]);
- linebuf.append("Action");
- if (m_sortType == &cActionAscending) linebuf.push_back('\\');
- else if (m_sortType == &cActionDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[5]);
-
+ linebuf << "ID";
+ if (m_sortType == &cIndexAscending) linebuf.put('\\');
+ else if (m_sortType == &cIndexDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[0]);
+ linebuf << "En";
+ if (m_sortType == &cEnabledAscending) linebuf.put('\\');
+ else if (m_sortType == &cEnabledDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[1]);
+ linebuf << "CPU";
+ if (m_sortType == &cCpuAscending) linebuf.put('\\');
+ else if (m_sortType == &cCpuDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[2]);
+ linebuf << "Address";
+ if (m_sortType == &cAddressAscending) linebuf.put('\\');
+ else if (m_sortType == &cAddressDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[3]);
+ linebuf << "Condition";
+ if (m_sortType == &cConditionAscending) linebuf.put('\\');
+ else if (m_sortType == &cConditionDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[4]);
+ linebuf << "Action";
+ if (m_sortType == &cActionAscending) linebuf.put('\\');
+ else if (m_sortType == &cActionDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[5]);
+
+ auto const &text(linebuf.vec());
for (UINT32 i = m_topleft.x; i < (m_topleft.x + m_visible.x); i++, dest++)
{
- dest->byte = (i < linebuf.length()) ? linebuf[i] : ' ';
+ dest->byte = (i < text.size()) ? text[i] : ' ';
dest->attrib = DCA_ANCILLARY;
}
}
@@ -283,23 +282,24 @@ void debug_view_breakpoints::view_update()
device_debug::breakpoint *const bp = m_buffer[bpi];
linebuf.clear();
- strcatprintf(linebuf, "%2X", bp->index());
- pad_astring_to_length(linebuf, tableBreaks[0]);
- linebuf.push_back(bp->enabled() ? 'X' : 'O');
- pad_astring_to_length(linebuf, tableBreaks[1]);
- linebuf.append(bp->debugInterface()->device().tag());
- pad_astring_to_length(linebuf, tableBreaks[2]);
- linebuf.append(core_i64_hex_format(bp->address(), bp->debugInterface()->logaddrchars()));
- pad_astring_to_length(linebuf, tableBreaks[3]);
+ util::stream_format(linebuf, "%2X", bp->index());
+ pad_ostream_to_length(linebuf, tableBreaks[0]);
+ linebuf.put(bp->enabled() ? 'X' : 'O');
+ pad_ostream_to_length(linebuf, tableBreaks[1]);
+ linebuf << bp->debugInterface()->device().tag();
+ pad_ostream_to_length(linebuf, tableBreaks[2]);
+ util::stream_format(linebuf, "%0*X", bp->debugInterface()->logaddrchars(), bp->address());
+ pad_ostream_to_length(linebuf, tableBreaks[3]);
if (strcmp(bp->condition(), "1"))
- linebuf.append(bp->condition());
- pad_astring_to_length(linebuf, tableBreaks[4]);
- linebuf.append(bp->action());
- pad_astring_to_length(linebuf, tableBreaks[5]);
+ linebuf << bp->condition();
+ pad_ostream_to_length(linebuf, tableBreaks[4]);
+ linebuf << bp->action();
+ pad_ostream_to_length(linebuf, tableBreaks[5]);
+ auto const &text(linebuf.vec());
for (UINT32 i = m_topleft.x; i < (m_topleft.x + m_visible.x); i++, dest++)
{
- dest->byte = (i < linebuf.length()) ? linebuf[i] : ' ';
+ dest->byte = (i < text.size()) ? text[i] : ' ';
dest->attrib = DCA_NORMAL;
// Color disabled breakpoints red
diff --git a/src/emu/debug/dvbpoints.h b/src/emu/debug/dvbpoints.h
index cd9d0b8c22a..7e52e7d4cae 100644
--- a/src/emu/debug/dvbpoints.h
+++ b/src/emu/debug/dvbpoints.h
@@ -42,7 +42,7 @@ protected:
private:
// internal helpers
void enumerate_sources();
- void pad_astring_to_length(std::string& str, int len);
+ void pad_ostream_to_length(std::ostream& str, int len);
void gather_breakpoints();
diff --git a/src/emu/debug/dvdisasm.cpp b/src/emu/debug/dvdisasm.cpp
index 9b05345b6ff..6daca107f86 100644
--- a/src/emu/debug/dvdisasm.cpp
+++ b/src/emu/debug/dvdisasm.cpp
@@ -38,6 +38,9 @@ debug_view_disasm_source::debug_view_disasm_source(const char *name, device_t &d
// DEBUG VIEW DISASM
//**************************************************************************
+const int debug_view_disasm::DEFAULT_DASM_LINES, debug_view_disasm::DEFAULT_DASM_WIDTH, debug_view_disasm::DASM_MAX_BYTES;
+
+
//-------------------------------------------------
// debug_view_disasm - constructor
//-------------------------------------------------
@@ -99,7 +102,7 @@ void debug_view_disasm::enumerate_sources()
std::string name;
for (device_disasm_interface *dasm = iter.first(); dasm != nullptr; dasm = iter.next())
{
- strprintf(name,"%s '%s'", dasm->device().name(), dasm->device().tag());
+ name = string_format("%s '%s'", dasm->device().name(), dasm->device().tag());
if (dasm->device().memory().space_config(AS_PROGRAM)!=nullptr)
m_source_list.append(*global_alloc(debug_view_disasm_source(name.c_str(), dasm->device())));
}
@@ -305,24 +308,25 @@ offs_t debug_view_disasm::find_pc_backwards(offs_t targetpc, int numinstrs)
// values
//-------------------------------------------------
-void debug_view_disasm::generate_bytes(offs_t pcbyte, int numbytes, int minbytes, char *string, int maxchars, bool encrypted)
+void debug_view_disasm::generate_bytes(offs_t pcbyte, int numbytes, int minbytes, int maxchars, bool encrypted)
{
const debug_view_disasm_source &source = downcast<const debug_view_disasm_source &>(*m_source);
- int char_num = source.m_space.is_octal() ? 3 : 2;
+ const int char_num = source.m_space.is_octal() ? 3 : 2;
+ const int base = m_dasm.tellp();
+
// output the first value
int offset = 0;
if (maxchars >= char_num * minbytes)
- offset = sprintf(string, "%s", core_i64_format(debug_read_opcode(source.m_decrypted_space, pcbyte, minbytes), minbytes * char_num, source.m_space.is_octal()));
+ offset += util::stream_format(m_dasm, source.m_space.is_octal() ? "%0*o" : "%0*X", minbytes * char_num, debug_read_opcode(source.m_decrypted_space, pcbyte, minbytes));
// output subsequent values
int byte;
for (byte = minbytes; byte < numbytes && offset + 1 + char_num * minbytes < maxchars; byte += minbytes)
- offset += sprintf(&string[offset], " %s", core_i64_format(debug_read_opcode(encrypted ? source.m_space : source.m_decrypted_space, pcbyte + byte, minbytes), minbytes * char_num, source.m_space.is_octal()));
+ offset += util::stream_format(m_dasm, source.m_space.is_octal() ? " %0*o" : " %0*X", minbytes * char_num, debug_read_opcode(encrypted ? source.m_space : source.m_decrypted_space, pcbyte + byte, minbytes));
// if we ran out of room, indicate more
- string[maxchars - 1] = 0;
- if (byte < numbytes && byte != minbytes && maxchars > (char_num*2 -1))
- string[maxchars - char_num] = string[maxchars - char_num - 1] = string[maxchars - char_num -2] = '.';
+ if ((byte < numbytes) && (byte != minbytes) && (maxchars > 3))
+ m_dasm.seekp(base + maxchars - 4) << "...";
}
@@ -335,7 +339,7 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
{
bool changed = false;
const debug_view_disasm_source &source = downcast<const debug_view_disasm_source &>(*m_source);
- int char_num = source.m_space.is_octal() ? 3 : 2;
+ const int char_num = source.m_space.is_octal() ? 3 : 2;
// determine how many characters we need for an address and set the divider
m_divider1 = 1 + (source.m_space.logaddrchars()/2*char_num) + 1;
@@ -344,8 +348,8 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
m_divider2 = m_divider1 + 1 + m_dasm_width + 1;
// determine how many bytes we might need to display
- int minbytes = source.m_disasmintf->min_opcode_bytes();
- int maxbytes = source.m_disasmintf->max_opcode_bytes();
+ const int minbytes = source.m_disasmintf->min_opcode_bytes();
+ const int maxbytes = source.m_disasmintf->max_opcode_bytes();
// ensure that the PC is aligned to the minimum opcode size
pc &= ~source.m_space.byte_to_address_end(minbytes - 1);
@@ -353,7 +357,7 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
// set the width of the third column according to display mode
if (m_right_column == DASM_RIGHTCOL_RAW || m_right_column == DASM_RIGHTCOL_ENCRYPTED)
{
- int maxbytes_clamped = MIN(maxbytes, DASM_MAX_BYTES);
+ int const maxbytes_clamped = (std::min)(maxbytes, DASM_MAX_BYTES);
m_total.x = m_divider2 + 1 + char_num * maxbytes_clamped + (maxbytes_clamped / minbytes - 1) + 1;
}
else if (m_right_column == DASM_RIGHTCOL_COMMENTS)
@@ -365,25 +369,27 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
m_byteaddress.resize(m_total.y);
// allocate disassembly buffer
- m_dasm.resize(m_total.x * m_total.y);
+ const auto total_bytes = m_total.x * m_total.y;
+ m_dasm.reserve(total_bytes).seekp(total_bytes);
// iterate over lines
- int row_width = m_total.x;
for (int line = 0; line < lines; line++)
{
// convert PC to a byte offset
- offs_t pcbyte = source.m_space.address_to_byte(pc) & source.m_space.logbytemask();
+ const offs_t pcbyte = source.m_space.address_to_byte(pc) & source.m_space.logbytemask();
// save a copy of the previous line as a backup if we're only doing one line
- int instr = startline + line;
- char *destbuf = &m_dasm[instr * row_width];
+ const auto instr = startline + line;
+ const auto base = instr * m_total.x;
char oldbuf[100];
if (lines == 1)
- strncpy(oldbuf, destbuf, MIN(sizeof(oldbuf), row_width));
+ std::memcpy(oldbuf, &m_dasm.vec()[base], (std::min<std::size_t>)(sizeof(oldbuf), m_total.x));
// convert back and set the address of this instruction
m_byteaddress[instr] = pcbyte;
- sprintf(&destbuf[0], " %s ", core_i64_format(source.m_space.byte_to_address(pcbyte), source.m_space.logaddrchars()/2*char_num, source.m_space.is_octal()));
+ util::stream_format(m_dasm.seekp(base),
+ source.m_space.is_octal() ? " %0*o " : " %0*X ",
+ source.m_space.logaddrchars()/2*char_num, source.m_space.byte_to_address(pcbyte));
// make sure we can translate the address, and then disassemble the result
char buffer[100];
@@ -407,26 +413,28 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines)
strcpy(buffer, "<unmapped>");
// append the disassembly to the buffer
- sprintf(&destbuf[m_divider1 + 1], "%-*s ", m_dasm_width, buffer);
+ util::stream_format(m_dasm.seekp(base + m_divider1 + 1), "%2$-*1$.*1$s ", m_dasm_width, buffer);
// output the right column
if (m_right_column == DASM_RIGHTCOL_RAW || m_right_column == DASM_RIGHTCOL_ENCRYPTED)
{
// get the bytes
numbytes = source.m_space.address_to_byte(numbytes) & source.m_space.logbytemask();
- generate_bytes(pcbyte, numbytes, minbytes, &destbuf[m_divider2], row_width - m_divider2, m_right_column == DASM_RIGHTCOL_ENCRYPTED);
+ m_dasm.seekp(base + m_divider2);
+ generate_bytes(pcbyte, numbytes, minbytes, m_total.x - m_divider2, m_right_column == DASM_RIGHTCOL_ENCRYPTED);
}
else if (m_right_column == DASM_RIGHTCOL_COMMENTS)
{
// get and add the comment, if present
- offs_t comment_address = source.m_space.byte_to_address(m_byteaddress[instr]);
- const char *text = source.m_device.debug()->comment_text(comment_address);
+ const offs_t comment_address = source.m_space.byte_to_address(m_byteaddress[instr]);
+ const char *const text = source.m_device.debug()->comment_text(comment_address);
if (text != nullptr)
- sprintf(&destbuf[m_divider2], "// %.*s", row_width - m_divider2 - 4, text);
+ util::stream_format(m_dasm.seekp(base + m_divider2), "// %.*s", m_total.x - m_divider2 - 4, text);
}
+ m_dasm.put('\0');
// see if the line changed at all
- if (lines == 1 && strncmp(oldbuf, destbuf, MIN(sizeof(oldbuf), row_width)) != 0)
+ if (lines == 1 && strncmp(oldbuf, &m_dasm.vec()[base], (std::min<std::size_t>)(sizeof(oldbuf), m_total.x)) != 0)
changed = true;
}
@@ -544,7 +552,6 @@ recompute:
// loop over visible rows
debug_view_char *dest = &m_viewdata[0];
- int row_width = m_dasm.size() / m_byteaddress.size();
for (UINT32 row = 0; row < m_visible.y; row++)
{
UINT32 effrow = m_topleft.y + row;
@@ -575,7 +582,7 @@ recompute:
attrib |= DCA_VISITED;
// get the effective string
- const char *data = &m_dasm[effrow * row_width];
+ const char *data = &m_dasm.vec()[effrow * m_total.x];
UINT32 len = (UINT32)strlen(data);
// copy data
diff --git a/src/emu/debug/dvdisasm.h b/src/emu/debug/dvdisasm.h
index 29bb724b5a2..c474f5021a6 100644
--- a/src/emu/debug/dvdisasm.h
+++ b/src/emu/debug/dvdisasm.h
@@ -13,6 +13,8 @@
#include "debugvw.h"
+#include "vecstream.h"
+
//**************************************************************************
// CONSTANTS
@@ -91,7 +93,7 @@ private:
// internal helpers
void enumerate_sources();
offs_t find_pc_backwards(offs_t targetpc, int numinstrs);
- void generate_bytes(offs_t pcbyte, int numbytes, int minbytes, char *string, int maxchars, bool encrypted);
+ void generate_bytes(offs_t pcbyte, int numbytes, int minbytes, int maxchars, bool encrypted);
bool recompute(offs_t pc, int startline, int lines);
// internal state
@@ -106,12 +108,12 @@ private:
int m_divider3; // comment divider column
debug_view_expression m_expression; // expression-related information
std::vector<offs_t> m_byteaddress; // addresses of the instructions
- std::vector<char> m_dasm; // disassembled instructions
+ util::ovectorstream m_dasm; // disassembled instructions
// constants
- static const int DEFAULT_DASM_LINES = 1000;
- static const int DEFAULT_DASM_WIDTH = 50;
- static const int DASM_MAX_BYTES = 16;
+ static constexpr int DEFAULT_DASM_LINES = 1000;
+ static constexpr int DEFAULT_DASM_WIDTH = 50;
+ static constexpr int DASM_MAX_BYTES = 16;
};
diff --git a/src/emu/debug/dvmemory.cpp b/src/emu/debug/dvmemory.cpp
index b792d002c27..c39372af5b3 100644
--- a/src/emu/debug/dvmemory.cpp
+++ b/src/emu/debug/dvmemory.cpp
@@ -142,14 +142,14 @@ void debug_view_memory::enumerate_sources()
if (memintf->has_space(spacenum))
{
address_space &space = memintf->space(spacenum);
- strprintf(name,"%s '%s' %s space memory", memintf->device().name(), memintf->device().tag(), space.name());
+ name = string_format("%s '%s' %s space memory", memintf->device().name(), memintf->device().tag(), space.name());
m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), space)));
}
// then add all the memory regions
for (memory_region *region = machine().memory().first_region(); region != nullptr; region = region->next())
{
- strprintf(name, "Region '%s'", region->name());
+ name = string_format("Region '%s'", region->name());
m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), *region)));
}
@@ -538,14 +538,14 @@ void debug_view_memory::recompute()
else
{
m_maxaddr = source.m_length - 1;
- addrchars = strprintf(m_addrformat, "%X", m_maxaddr);
+ addrchars = string_format("%X", m_maxaddr).size();
}
// generate an 8-byte aligned format for the address
if (!m_reverse_view)
- strprintf(m_addrformat, "%*s%%0%dX", 8 - addrchars, "", addrchars);
+ m_addrformat = string_format("%*s%%0%dX", 8 - addrchars, "", addrchars);
else
- strprintf(m_addrformat, "%%0%dX%*s", addrchars, 8 - addrchars, "");
+ m_addrformat = string_format("%%0%dX%*s", addrchars, 8 - addrchars, "");
// if we are viewing a space with a minimum chunk size, clamp the bytes per chunk
if (source.m_space != nullptr && source.m_space->byte_to_address(1) > 1)
diff --git a/src/emu/debug/dvstate.cpp b/src/emu/debug/dvstate.cpp
index d0d741ed21e..8e1fe7513fd 100644
--- a/src/emu/debug/dvstate.cpp
+++ b/src/emu/debug/dvstate.cpp
@@ -78,7 +78,7 @@ void debug_view_state::enumerate_sources()
std::string name;
for (device_state_interface *state = iter.first(); state != nullptr; state = iter.next())
{
- strprintf(name,"%s '%s'", state->device().name(), state->device().tag());
+ name = string_format("%s '%s'", state->device().name(), state->device().tag());
m_source_list.append(*global_alloc(debug_view_state_source(name.c_str(), state->device())));
}
@@ -242,7 +242,7 @@ void debug_view_state::view_update()
if (source.m_execintf != nullptr)
{
curitem->m_currval = source.m_execintf->cycles_remaining();
- strprintf(valstr, "%-8d", (UINT32)curitem->m_currval);
+ valstr = string_format("%-8d", (UINT32)curitem->m_currval);
}
break;
@@ -250,7 +250,7 @@ void debug_view_state::view_update()
if (screen != nullptr)
{
curitem->m_currval = screen->hpos();
- strprintf(valstr, "%4d", (UINT32)curitem->m_currval);
+ valstr = string_format("%4d", (UINT32)curitem->m_currval);
}
break;
@@ -258,7 +258,7 @@ void debug_view_state::view_update()
if (screen != nullptr)
{
curitem->m_currval = screen->vpos();
- strprintf(valstr, "%4d", (UINT32)curitem->m_currval);
+ valstr = string_format("%4d", (UINT32)curitem->m_currval);
}
break;
@@ -266,7 +266,7 @@ void debug_view_state::view_update()
if (screen != nullptr)
{
curitem->m_currval = screen->frame_number();
- strprintf(valstr, "%6d", (UINT32)curitem->m_currval);
+ valstr = string_format("%6d", (UINT32)curitem->m_currval);
}
break;
}
diff --git a/src/emu/debug/dvwpoints.cpp b/src/emu/debug/dvwpoints.cpp
index c1e346c62b2..4720f1dbf3c 100644
--- a/src/emu/debug/dvwpoints.cpp
+++ b/src/emu/debug/dvwpoints.cpp
@@ -11,6 +11,8 @@
#include "emu.h"
#include "dvwpoints.h"
+#include <iomanip>
+
static int cIndexAscending(const void* a, const void* b)
@@ -155,7 +157,7 @@ void debug_view_watchpoints::enumerate_sources()
for (device_disasm_interface *dasm = iter.first(); dasm != nullptr; dasm = iter.next())
{
std::string name;
- strprintf(name, "%s '%s'", dasm->device().name(), dasm->device().tag());
+ name = string_format("%s '%s'", dasm->device().name(), dasm->device().tag());
m_source_list.append(*global_alloc(debug_view_source(name.c_str(), &dasm->device())));
}
@@ -211,16 +213,11 @@ void debug_view_watchpoints::view_click(const int button, const debug_view_xy& p
}
-void debug_view_watchpoints::pad_astring_to_length(std::string& str, int len)
+void debug_view_watchpoints::pad_ostream_to_length(std::ostream& str, int len)
{
- int diff = len - str.length();
- if (diff > 0)
- {
- std::string buffer;
- for (int i = 0; i < diff; i++)
- buffer.append(" ");
- strcatprintf(str, "%s", buffer.c_str());
- }
+ auto const current = str.tellp();
+ if (current < decltype(current)(len))
+ str << std::setw(decltype(current)(len) - current) << "";
}
@@ -261,49 +258,51 @@ void debug_view_watchpoints::view_update()
m_total.y = 10;
// Draw
- debug_view_char *dest = &m_viewdata[0];
- std::string linebuf;
+ debug_view_char *dest = &m_viewdata[0];
+ util::ovectorstream linebuf;
+ linebuf.reserve(ARRAY_LENGTH(tableBreaks) - 1);
// Header
if (m_visible.y > 0)
{
linebuf.clear();
- linebuf.append("ID");
- if (m_sortType == &cIndexAscending) linebuf.push_back('\\');
- else if (m_sortType == &cIndexDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[0]);
- linebuf.append("En");
- if (m_sortType == &cEnabledAscending) linebuf.push_back('\\');
- else if (m_sortType == &cEnabledDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[1]);
- linebuf.append("CPU");
- if (m_sortType == &cCpuAscending) linebuf.push_back('\\');
- else if (m_sortType == &cCpuDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[2]);
- linebuf.append("Space");
- if (m_sortType == &cSpaceAscending) linebuf.push_back('\\');
- else if (m_sortType == &cSpaceDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[3]);
- linebuf.append("Addresses");
- if (m_sortType == &cAddressAscending) linebuf.push_back('\\');
- else if (m_sortType == &cAddressDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[4]);
- linebuf.append("Type");
- if (m_sortType == &cTypeAscending) linebuf.push_back('\\');
- else if (m_sortType == &cTypeDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[5]);
- linebuf.append("Condition");
- if (m_sortType == &cConditionAscending) linebuf.push_back('\\');
- else if (m_sortType == &cConditionDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[6]);
- linebuf.append("Action");
- if (m_sortType == &cActionAscending) linebuf.push_back('\\');
- else if (m_sortType == &cActionDescending) linebuf.push_back('/');
- pad_astring_to_length(linebuf, tableBreaks[7]);
-
+ linebuf << "ID";
+ if (m_sortType == &cIndexAscending) linebuf.put('\\');
+ else if (m_sortType == &cIndexDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[0]);
+ linebuf << "En";
+ if (m_sortType == &cEnabledAscending) linebuf.put('\\');
+ else if (m_sortType == &cEnabledDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[1]);
+ linebuf << "CPU";
+ if (m_sortType == &cCpuAscending) linebuf.put('\\');
+ else if (m_sortType == &cCpuDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[2]);
+ linebuf << "Space";
+ if (m_sortType == &cSpaceAscending) linebuf.put('\\');
+ else if (m_sortType == &cSpaceDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[3]);
+ linebuf << "Addresses";
+ if (m_sortType == &cAddressAscending) linebuf.put('\\');
+ else if (m_sortType == &cAddressDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[4]);
+ linebuf << "Type";
+ if (m_sortType == &cTypeAscending) linebuf.put('\\');
+ else if (m_sortType == &cTypeDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[5]);
+ linebuf << "Condition";
+ if (m_sortType == &cConditionAscending) linebuf.put('\\');
+ else if (m_sortType == &cConditionDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[6]);
+ linebuf << "Action";
+ if (m_sortType == &cActionAscending) linebuf.put('\\');
+ else if (m_sortType == &cActionDescending) linebuf.put('/');
+ pad_ostream_to_length(linebuf, tableBreaks[7]);
+
+ auto const &text(linebuf.vec());
for (UINT32 i = m_topleft.x; i < (m_topleft.x + m_visible.x); i++, dest++)
{
- dest->byte = (i < linebuf.length()) ? linebuf[i] : ' ';
+ dest->byte = (i < text.size()) ? text[i] : ' ';
dest->attrib = DCA_ANCILLARY;
}
}
@@ -318,29 +317,30 @@ void debug_view_watchpoints::view_update()
device_debug::watchpoint *const wp = m_buffer[wpi];
linebuf.clear();
- strcatprintf(linebuf, "%2X", wp->index());
- pad_astring_to_length(linebuf, tableBreaks[0]);
- linebuf.push_back(wp->enabled() ? 'X' : 'O');
- pad_astring_to_length(linebuf, tableBreaks[1]);
- linebuf.append(wp->debugInterface()->device().tag());
- pad_astring_to_length(linebuf, tableBreaks[2]);
- linebuf.append(wp->space().name());
- pad_astring_to_length(linebuf, tableBreaks[3]);
- linebuf.append(core_i64_hex_format(wp->space().byte_to_address(wp->address()), wp->space().addrchars()));
- linebuf.push_back('-');
- linebuf.append(core_i64_hex_format(wp->space().byte_to_address_end(wp->address() + wp->length()) - 1, wp->space().addrchars()));
- pad_astring_to_length(linebuf, tableBreaks[4]);
- linebuf.append(types[wp->type() & 3]);
- pad_astring_to_length(linebuf, tableBreaks[5]);
+ util::stream_format(linebuf, "%2X", wp->index());
+ pad_ostream_to_length(linebuf, tableBreaks[0]);
+ linebuf.put(wp->enabled() ? 'X' : 'O');
+ pad_ostream_to_length(linebuf, tableBreaks[1]);
+ linebuf << wp->debugInterface()->device().tag();
+ pad_ostream_to_length(linebuf, tableBreaks[2]);
+ linebuf << wp->space().name();
+ pad_ostream_to_length(linebuf, tableBreaks[3]);
+ util::stream_format(linebuf, "%0*X", wp->space().addrchars(), wp->space().byte_to_address(wp->address()));
+ linebuf.put('-');
+ util::stream_format(linebuf, "%0*X", wp->space().addrchars(), wp->space().byte_to_address_end(wp->address() + wp->length()) - 1);
+ pad_ostream_to_length(linebuf, tableBreaks[4]);
+ linebuf << types[wp->type() & 3];
+ pad_ostream_to_length(linebuf, tableBreaks[5]);
if (strcmp(wp->condition(), "1"))
- linebuf.append(wp->condition());
- pad_astring_to_length(linebuf, tableBreaks[6]);
- linebuf.append(wp->action());
- pad_astring_to_length(linebuf, tableBreaks[7]);
+ linebuf << wp->condition();
+ pad_ostream_to_length(linebuf, tableBreaks[6]);
+ linebuf << wp->action();
+ pad_ostream_to_length(linebuf, tableBreaks[7]);
+ auto const &text(linebuf.vec());
for (UINT32 i = m_topleft.x; i < (m_topleft.x + m_visible.x); i++, dest++)
{
- dest->byte = (i < linebuf.length()) ? linebuf[i] : ' ';
+ dest->byte = (i < text.size()) ? text[i] : ' ';
dest->attrib = DCA_NORMAL;
// Color disabled watchpoints red
diff --git a/src/emu/debug/dvwpoints.h b/src/emu/debug/dvwpoints.h
index b7d899e7717..544828598d7 100644
--- a/src/emu/debug/dvwpoints.h
+++ b/src/emu/debug/dvwpoints.h
@@ -42,7 +42,7 @@ protected:
private:
// internal helpers
void enumerate_sources();
- void pad_astring_to_length(std::string& str, int len);
+ void pad_ostream_to_length(std::ostream& str, int len);
void gather_watchpoints();
diff --git a/src/emu/devfind.h b/src/emu/devfind.h
index 00e859437ba..44a5532b6a8 100644
--- a/src/emu/devfind.h
+++ b/src/emu/devfind.h
@@ -271,7 +271,7 @@ public:
{
for (int index = 0; index < _Count; index++)
{
- strprintf(m_tag[index], "%s.%d", basetag, index);
+ m_tag[index] = string_format("%s.%d", basetag, index);
m_array[index] = std::make_unique<ioport_finder_type>(base, m_tag[index].c_str());
}
}
@@ -442,7 +442,7 @@ public:
{
for (int index = 0; index < _Count; index++)
{
- strprintf(m_tag[index],"%s.%d", basetag, index);
+ m_tag[index] = string_format("%s.%d", basetag, index);
m_array[index] = std::make_unique<shared_ptr_type>(base, m_tag[index].c_str(), width);
}
}
diff --git a/src/emu/device.cpp b/src/emu/device.cpp
index 7af78e6a3f5..e6bfa46f051 100644
--- a/src/emu/device.cpp
+++ b/src/emu/device.cpp
@@ -783,42 +783,6 @@ finder_base *device_t::register_auto_finder(finder_base &autodev)
return old;
}
-void device_t::popmessage(const char *format, ...) const
-{
- // if the format is NULL, it is a signal to clear the popmessage
- if (format == nullptr)
- machine().ui().popup_time(0, " ");
-
- // otherwise, generate the buffer and call the UI to display the message
- else
- {
- std::string temp;
- va_list arg;
-
- // dump to the buffer
- va_start(arg, format);
- strvprintf(temp, format, arg);
- va_end(arg);
-
- // pop it in the UI
- if (m_machine!=nullptr) machine().ui().popup_time(temp.length() / 40 + 2, "%s", temp.c_str());
- }
-}
-
-void device_t::logerror(const char *format, ...) const
-{
- va_list arg;
- va_start(arg, format);
- vlogerror(format, arg);
- va_end(arg);
-}
-void device_t::vlogerror(const char *format, va_list args) const
-{
- std::string fmt("[");
- fmt += tag() + std::string("] ") + format;
- if (m_machine!=nullptr) machine().vlogerror(fmt.c_str(), args);
-}
-
//**************************************************************************
// LIVE DEVICE INTERFACES
//**************************************************************************
diff --git a/src/emu/device.h b/src/emu/device.h
index 2b807d58d94..bf04b26d956 100644
--- a/src/emu/device.h
+++ b/src/emu/device.h
@@ -206,9 +206,8 @@ public:
bool findit(bool isvalidation = false) const;
// misc
- void popmessage(const char *format, ...) const;
- void logerror(const char *format, ...) const;
- void vlogerror(const char *format, va_list args) const;
+ template <typename Format, typename... Params> void popmessage(Format &&fmt, Params &&... args) const;
+ template <typename Format, typename... Params> void logerror(Format &&fmt, Params &&... args) const;
protected:
// miscellaneous helpers
@@ -389,7 +388,7 @@ public:
}
// search next for neighbors up the ownership chain
- while (m_curdepth > 0)
+ while (m_curdepth > 0 && start != nullptr)
{
// found a neighbor? great!
m_current = start->next();
diff --git a/src/emu/device.ipp b/src/emu/device.ipp
new file mode 100644
index 00000000000..1501798f586
--- /dev/null
+++ b/src/emu/device.ipp
@@ -0,0 +1,40 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
+/***************************************************************************
+
+ device.h
+
+ Device interface functions.
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __EMU_H__
+#error Dont include this file directly; include emu.h instead.
+#endif
+
+#ifndef __DEVICE_IPP__
+#define __DEVICE_IPP__
+
+#include "strformat.h"
+
+//**************************************************************************
+// MEMBER TEMPLATES
+//**************************************************************************
+
+template <typename Format, typename... Params>
+inline void device_t::popmessage(Format &&fmt, Params &&... args) const
+{
+ if (m_machine)
+ m_machine->popmessage(std::forward<Format>(fmt), std::forward<Params>(args)...);
+}
+
+template <typename Format, typename... Params>
+inline void device_t::logerror(Format &&fmt, Params &&... args) const
+{
+ if (m_machine)
+ m_machine->logerror(string_format("[%s] %s", tag(), std::forward<Format>(fmt)), std::forward<Params>(args)...);
+}
+
+#endif // __DEVICE_IPP__
diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp
index 6cc9b0fb41a..d43cfe02fed 100644
--- a/src/emu/diimage.cpp
+++ b/src/emu/diimage.cpp
@@ -1181,8 +1181,8 @@ void device_image_interface::update_names(const device_type device_type, const c
const char *brief_name = (device_type!=nullptr) ? brief : device_brieftypename(image_type());
if (count > 1)
{
- strprintf(m_instance_name,"%s%d", inst_name, index + 1);
- strprintf(m_brief_instance_name, "%s%d", brief_name, index + 1);
+ m_instance_name = string_format("%s%d", inst_name, index + 1);
+ m_brief_instance_name = string_format("%s%d", brief_name, index + 1);
}
else
{
@@ -1312,8 +1312,7 @@ bool device_image_interface::load_software_part(const char *path, software_part
bool result = call_softlist_load(swpart->info().list(), swpart->info().shortname(), swpart->romdata());
// Tell the world which part we actually loaded
- std::string full_sw_name;
- strprintf(full_sw_name,"%s:%s:%s", swpart->info().list().list_name(), swpart->info().shortname(), swpart->name());
+ std::string full_sw_name = string_format("%s:%s:%s", swpart->info().list().list_name(), swpart->info().shortname(), swpart->name());
// check compatibility
if (!swpart->is_compatible(swpart->info().list()))
diff --git a/src/emu/distate.cpp b/src/emu/distate.cpp
index 9986b261e93..dcf14c02ee8 100644
--- a/src/emu/distate.cpp
+++ b/src/emu/distate.cpp
@@ -134,7 +134,7 @@ void device_state_entry::format_from_mask()
int width = 0;
for (UINT64 tempmask = m_datamask; tempmask != 0; tempmask >>= 4)
width++;
- strprintf(m_format,"%%0%dX", width);
+ m_format = string_format("%%0%dX", width);
}
diff --git a/src/emu/drivers/empty.cpp b/src/emu/drivers/empty.cpp
index be4f53b24a7..f012e376813 100644
--- a/src/emu/drivers/empty.cpp
+++ b/src/emu/drivers/empty.cpp
@@ -33,7 +33,7 @@ public:
if (strcmp(machine().options().ui(),"simple")==0) {
ui_simple_menu_select_game::force_game_select(machine(), &machine().render().ui_container());
} else {
- ui_menu_select_game::force_game_select(machine(), &machine().render().ui_container());
+ ui_menu_select_game::force_game_select(machine(), &machine().render().ui_container());
}
}
diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h
index 469bbd46a94..6cc8cbe32c0 100644
--- a/src/emu/drivers/xtal.h
+++ b/src/emu/drivers/xtal.h
@@ -239,6 +239,7 @@ enum
XTAL_512kHz = 512000, /* Toshiba TC8830F */
XTAL_600kHz = 600000,
XTAL_640kHz = 640000, /* NEC UPD7759, Texas Instruments Speech Chips @ 8khz */
+ XTAL_960kHz = 960000, /* Xerox Notetaker Keyboard UART */
XTAL_1_056MHz = 1056000 /* OKI M6295 on Trio The Punch h/w */
};
diff --git a/src/emu/emu.h b/src/emu/emu.h
index d45c08b3fef..0cf7b7c1384 100644
--- a/src/emu/emu.h
+++ b/src/emu/emu.h
@@ -107,6 +107,9 @@ typedef device_t * (*machine_config_constructor)(machine_config &config, device_
#include "sound.h"
#include "speaker.h"
+// user interface
+#include "ui/ui.h"
+
// generic helpers
#include "devcb.h"
#include "dispatch.h"
@@ -114,4 +117,8 @@ typedef device_t * (*machine_config_constructor)(machine_config &config, device_
#include "bookkeeping.h"
#include "video/generic.h"
+// member templates that don't like incomplete types
+#include "device.ipp"
+#include "machine.ipp"
+
#endif /* __EMU_H__ */
diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp
index 1fb827ed1a6..079080c08a3 100644
--- a/src/emu/emuopts.cpp
+++ b/src/emu/emuopts.cpp
@@ -184,8 +184,8 @@ const options_entry emu_options::s_option_entries[] =
{ OPTION_BIOS, nullptr, OPTION_STRING, "select the system BIOS to use" },
{ OPTION_CHEAT ";c", "0", OPTION_BOOLEAN, "enable cheat subsystem" },
{ OPTION_SKIP_GAMEINFO, "0", OPTION_BOOLEAN, "skip displaying the information screen at startup" },
- { OPTION_UI_FONT, "default", OPTION_STRING, "specify a font to use" },
- { OPTION_UI, "cabinet", OPTION_STRING, "type of UI (simple|cabinet)" },
+ { OPTION_UI_FONT, "default", OPTION_STRING, "specify a font to use" },
+ { OPTION_UI, "cabinet", OPTION_STRING, "type of UI (simple|cabinet)" },
{ OPTION_RAMSIZE ";ram", nullptr, OPTION_STRING, "size of RAM (if supported by driver)" },
{ OPTION_CONFIRM_QUIT, "0", OPTION_BOOLEAN, "display confirm quit screen on exit" },
{ OPTION_UI_MOUSE, "1", OPTION_BOOLEAN, "display ui mouse cursor" },
@@ -334,14 +334,14 @@ void emu_options::add_device_options()
add_entry(nullptr, "IMAGE DEVICES", OPTION_HEADER | OPTION_FLAG_DEVICE);
// retrieve info about the device instance
- std::string option_name;
- strprintf(option_name, "%s;%s", image->instance_name(), image->brief_instance_name());
+ std::ostringstream option_name;
+ util::stream_format(option_name, "%s;%s", image->instance_name(), image->brief_instance_name());
if (strcmp(image->device_typename(image->image_type()), image->instance_name()) == 0)
- strcatprintf(option_name, ";%s1;%s1", image->instance_name(), image->brief_instance_name());
+ util::stream_format(option_name, ";%s1;%s1", image->instance_name(), image->brief_instance_name());
// add the option
if (!exists(image->instance_name()))
- add_entry(option_name.c_str(), nullptr, OPTION_STRING | OPTION_FLAG_DEVICE, nullptr, true);
+ add_entry(option_name.str().c_str(), nullptr, OPTION_STRING | OPTION_FLAG_DEVICE, nullptr, true);
}
}
@@ -574,8 +574,8 @@ bool emu_options::parse_one_ini(const char *basename, int priority, std::string
bool result = parse_ini_file((core_file&)file, priority, OPTION_PRIORITY_DRIVER_INI, error);
// append errors if requested
- if (!error.empty() && error_string != nullptr)
- strcatprintf(*error_string, "While parsing %s:\n%s\n", file.fullpath(), error.c_str());
+ if (!error.empty() && error_string)
+ error_string->append(string_format("While parsing %s:\n%s\n", file.fullpath(), error));
return result;
}
diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h
index 85e054a4c43..79df39c7438 100644
--- a/src/emu/emuopts.h
+++ b/src/emu/emuopts.h
@@ -74,7 +74,7 @@ enum
#define OPTION_PLAYBACK "playback"
#define OPTION_RECORD "record"
#define OPTION_RECORD_TIMECODE "record_timecode"
-#define OPTION_EXIT_AFTER_PLAYBACK "exit_after_playback"
+#define OPTION_EXIT_AFTER_PLAYBACK "exit_after_playback"
#define OPTION_MNGWRITE "mngwrite"
#define OPTION_AVIWRITE "aviwrite"
#ifdef MAME_DEBUG
@@ -178,7 +178,7 @@ enum
#define OPTION_CHEAT "cheat"
#define OPTION_SKIP_GAMEINFO "skip_gameinfo"
#define OPTION_UI_FONT "uifont"
-#define OPTION_UI "ui"
+#define OPTION_UI "ui"
#define OPTION_RAMSIZE "ramsize"
// core comm options
@@ -359,7 +359,7 @@ public:
const char *bios() const { return value(OPTION_BIOS); }
bool cheat() const { return bool_value(OPTION_CHEAT); }
bool skip_gameinfo() const { return bool_value(OPTION_SKIP_GAMEINFO); }
- const char *ui_font() const { return value(OPTION_UI_FONT); }
+ const char *ui_font() const { return value(OPTION_UI_FONT); }
const char *ui() const { return value(OPTION_UI); }
const char *ram_size() const { return value(OPTION_RAMSIZE); }
@@ -368,7 +368,7 @@ public:
const char *comm_localport() const { return value(OPTION_COMM_LOCAL_PORT); }
const char *comm_remotehost() const { return value(OPTION_COMM_REMOTE_HOST); }
const char *comm_remoteport() const { return value(OPTION_COMM_REMOTE_PORT); }
-
+
bool confirm_quit() const { return bool_value(OPTION_CONFIRM_QUIT); }
bool ui_mouse() const { return bool_value(OPTION_UI_MOUSE); }
@@ -378,7 +378,7 @@ public:
const char *autoboot_script() const { return value(OPTION_AUTOBOOT_SCRIPT); }
bool console() const { return bool_value(OPTION_CONSOLE); }
-
+
const char *language() const { return value(OPTION_LANGUAGE); }
// FIXME: Couriersud: This should be in image_device_exit
diff --git a/src/emu/fileio.cpp b/src/emu/fileio.cpp
index 0de5e021800..d13e162f990 100644
--- a/src/emu/fileio.cpp
+++ b/src/emu/fileio.cpp
@@ -626,6 +626,17 @@ int emu_file::puts(const char *s)
//-------------------------------------------------
+// vfprintf - vfprintf to a text file
+//-------------------------------------------------
+
+int emu_file::vprintf(const char *fmt, va_list va)
+{
+ // write the data if we can
+ return (m_file != nullptr) ? core_vfprintf(m_file, fmt, va) : 0;
+}
+
+
+//-------------------------------------------------
// printf - vfprintf to a text file
//-------------------------------------------------
@@ -641,13 +652,14 @@ int CLIB_DECL emu_file::printf(const char *fmt, ...)
//-------------------------------------------------
-// mame_vfprintf - vfprintf to a text file
+// flush - flush file buffers
//-------------------------------------------------
-int emu_file::vprintf(const char *fmt, va_list va)
+void emu_file::flush()
{
- // write the data if we can
- return (m_file != nullptr) ? core_vfprintf(m_file, fmt, va) : 0;
+ // flush the buffers if we can
+ if (m_file != nullptr)
+ core_fflush(m_file);
}
diff --git a/src/emu/fileio.h b/src/emu/fileio.h
index 39f3b0b8dc5..60111304abc 100644
--- a/src/emu/fileio.h
+++ b/src/emu/fileio.h
@@ -120,6 +120,8 @@ public:
// control
file_error compress(int compress);
+
+ // position
int seek(INT64 offset, int whence);
UINT64 tell();
bool eof();
@@ -137,6 +139,9 @@ public:
int vprintf(const char *fmt, va_list va);
int printf(const char *fmt, ...) ATTR_PRINTF(2,3);
+ // buffers
+ void flush();
+
private:
bool compressed_file_ready(void);
diff --git a/src/emu/hash.cpp b/src/emu/hash.cpp
index 20fd59ecab6..2eaa4c03c2a 100644
--- a/src/emu/hash.cpp
+++ b/src/emu/hash.cpp
@@ -19,10 +19,16 @@
// GLOBAL VARIABLES
//**************************************************************************
+const char hash_collection::HASH_CRC;
+const char hash_collection::HASH_SHA1;
+
const char *hash_collection::HASH_TYPES_CRC = "R";
const char *hash_collection::HASH_TYPES_CRC_SHA1 = "RS";
const char *hash_collection::HASH_TYPES_ALL = "RS";
+const char hash_collection::FLAG_NO_DUMP;
+const char hash_collection::FLAG_BAD_DUMP;
+
//**************************************************************************
diff --git a/src/emu/hash.h b/src/emu/hash.h
index f225c7827a3..a421aa5523f 100644
--- a/src/emu/hash.h
+++ b/src/emu/hash.h
@@ -42,8 +42,8 @@ class hash_collection
{
public:
// hash types are identified by non-hex alpha values (G-Z)
- static const char HASH_CRC = 'R';
- static const char HASH_SHA1 = 'S';
+ static constexpr char HASH_CRC = 'R';
+ static constexpr char HASH_SHA1 = 'S';
// common combinations for requests
static const char *HASH_TYPES_CRC;
@@ -51,8 +51,8 @@ public:
static const char *HASH_TYPES_ALL;
// flags are identified by punctuation marks
- static const char FLAG_NO_DUMP = '!';
- static const char FLAG_BAD_DUMP = '^';
+ static constexpr char FLAG_NO_DUMP = '!';
+ static constexpr char FLAG_BAD_DUMP = '^';
// construction/destruction
hash_collection();
diff --git a/src/emu/info.cpp b/src/emu/info.cpp
index 111022ae223..dff761d5dcd 100644
--- a/src/emu/info.cpp
+++ b/src/emu/info.cpp
@@ -554,54 +554,54 @@ void info_xml_creator::output_rom(device_t &device)
}
}
- std::string output;
+ std::ostringstream output;
// opening tag
if (!is_disk)
- output.append("\t\t<rom");
+ output << "\t\t<rom";
else
- output.append("\t\t<disk");
+ output << "\t\t<disk";
// add name, merge, bios, and size tags */
if (name != nullptr && name[0] != 0)
- strcatprintf(output," name=\"%s\"", xml_normalize_string(name));
+ util::stream_format(output, " name=\"%s\"", xml_normalize_string(name));
if (merge_name != nullptr)
- strcatprintf(output," merge=\"%s\"", xml_normalize_string(merge_name));
+ util::stream_format(output, " merge=\"%s\"", xml_normalize_string(merge_name));
if (bios_name[0] != 0)
- strcatprintf(output," bios=\"%s\"", xml_normalize_string(bios_name));
+ util::stream_format(output, " bios=\"%s\"", xml_normalize_string(bios_name));
if (!is_disk)
- strcatprintf(output," size=\"%d\"", rom_file_size(rom));
+ util::stream_format(output, " size=\"%d\"", rom_file_size(rom));
// dump checksum information only if there is a known dump
if (!hashes.flag(hash_collection::FLAG_NO_DUMP))
{
// iterate over hash function types and print m_output their values
- output.append(" ").append(hashes.attribute_string());
+ output << " " << hashes.attribute_string();
}
else
- output.append(" status=\"nodump\"");
+ output << " status=\"nodump\"";
// append a region name
- strcatprintf(output," region=\"%s\"", ROMREGION_GETTAG(region));
+ util::stream_format(output, " region=\"%s\"", ROMREGION_GETTAG(region));
// for non-disk entries, print offset
if (!is_disk)
- strcatprintf(output," offset=\"%x\"", offset);
+ util::stream_format(output, " offset=\"%x\"", offset);
// for disk entries, add the disk index
else
{
- strcatprintf(output," index=\"%x\"", DISK_GETINDEX(rom));
- strcatprintf(output," writable=\"%s\"", DISK_ISREADONLY(rom) ? "no" : "yes");
+ util::stream_format(output, " index=\"%x\"", DISK_GETINDEX(rom));
+ util::stream_format(output, " writable=\"%s\"", DISK_ISREADONLY(rom) ? "no" : "yes");
}
// add optional flag
if (ROM_ISOPTIONAL(rom))
- output.append(" optional=\"yes\"");
+ output << " optional=\"yes\"";
- output.append("/>\n");
+ output << "/>\n";
- fprintf(m_output, "%s", output.c_str());
+ fprintf(m_output, "%s", output.str().c_str());
}
}
}
@@ -1096,7 +1096,7 @@ void info_xml_creator::output_switches(const ioport_list &portlist, const char *
for (ioport_field *field = port->first_field(); field != nullptr; field = field->next())
if (field->type() == type)
{
- std::string output;
+ std::ostringstream output;
std::string newtag(port->tag()), oldtag(":");
newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length());
@@ -1104,18 +1104,18 @@ void info_xml_creator::output_switches(const ioport_list &portlist, const char *
// output the switch name information
std::string normalized_field_name(xml_normalize_string(field->name()));
std::string normalized_newtag(xml_normalize_string(newtag.c_str()));
- strcatprintf(output,"\t\t<%s name=\"%s\" tag=\"%s\" mask=\"%u\">\n", outertag, normalized_field_name.c_str(), normalized_newtag.c_str(), field->mask());
+ util::stream_format(output,"\t\t<%s name=\"%s\" tag=\"%s\" mask=\"%u\">\n", outertag, normalized_field_name.c_str(), normalized_newtag.c_str(), field->mask());
// loop over settings
for (ioport_setting *setting = field->first_setting(); setting != nullptr; setting = setting->next())
{
- strcatprintf(output,"\t\t\t<%s name=\"%s\" value=\"%u\"%s/>\n", innertag, xml_normalize_string(setting->name()), setting->value(), setting->value() == field->defvalue() ? " default=\"yes\"" : "");
+ util::stream_format(output,"\t\t\t<%s name=\"%s\" value=\"%u\"%s/>\n", innertag, xml_normalize_string(setting->name()), setting->value(), setting->value() == field->defvalue() ? " default=\"yes\"" : "");
}
// terminate the switch entry
- strcatprintf(output,"\t\t</%s>\n", outertag);
+ util::stream_format(output,"\t\t</%s>\n", outertag);
- fprintf(m_output, "%s", output.c_str());
+ fprintf(m_output, "%s", output.str().c_str());
}
}
diff --git a/src/emu/inpttype.h b/src/emu/inpttype.h
index 4d711e4d676..e560fc5af6c 100644
--- a/src/emu/inpttype.h
+++ b/src/emu/inpttype.h
@@ -758,12 +758,12 @@ void construct_core_types_UI(simple_list<input_type_entry> &typelist)
INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_TAPE_STOP, "UI (First) Tape Stop", input_seq(KEYCODE_F2, KEYCODE_LSHIFT) )
INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DATS, "UI External DAT View", input_seq(KEYCODE_LALT, KEYCODE_D) )
INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_FAVORITES, "UI Add/Remove favorites",input_seq(KEYCODE_LALT, KEYCODE_F) )
- INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_UP_FILTER, NULL, input_seq() )
- INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DOWN_FILTER, NULL, input_seq() )
- INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_LEFT_PANEL, NULL, input_seq() )
- INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_RIGHT_PANEL, "UI Right switch image/info", input_seq(KEYCODE_RIGHT, KEYCODE_LCONTROL) )
- INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_UP_PANEL, NULL, input_seq() )
- INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DOWN_PANEL, NULL, input_seq() )
+ INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_UP_FILTER, nullptr, input_seq() )
+ INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DOWN_FILTER, nullptr, input_seq() )
+ INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_LEFT_PANEL, nullptr, input_seq() )
+ INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_RIGHT_PANEL, nullptr, input_seq() )
+ INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_UP_PANEL, nullptr, input_seq() )
+ INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DOWN_PANEL, nullptr, input_seq() )
INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_EXPORT, "UI Export list to xml", input_seq(KEYCODE_LALT, KEYCODE_E) )
INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_AUDIT_FAST, "UI Audit Unavailable", input_seq(KEYCODE_F1, input_seq::not_code, KEYCODE_LSHIFT) )
INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_AUDIT_ALL, "UI Audit All", input_seq(KEYCODE_F1, KEYCODE_LSHIFT) )
diff --git a/src/emu/input.cpp b/src/emu/input.cpp
index 474680a7409..68e825402b4 100644
--- a/src/emu/input.cpp
+++ b/src/emu/input.cpp
@@ -1471,7 +1471,7 @@ std::string input_manager::code_name(input_code code) const
const char *devclass = (*devclass_string_table)[code.device_class()];
// determine the devindex part
- std::string devindex = strformat("%d", code.device_index() + 1);
+ std::string devindex = string_format("%d", code.device_index() + 1);
// if we're unifying all devices, don't display a number
if (!m_class[code.device_class()]->multi())
@@ -1521,7 +1521,7 @@ std::string input_manager::code_to_token(input_code code) const
const char *devclass = (*devclass_token_table)[code.device_class()];
// determine the devindex part; keyboard 0 doesn't show an index
- std::string devindex = strformat("%d", code.device_index() + 1);
+ std::string devindex = string_format("%d", code.device_index() + 1);
if (code.device_class() == DEVICE_CLASS_KEYBOARD && code.device_index() == 0)
devindex.clear();
diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp
index a898a10051b..a9ac5682b04 100644
--- a/src/emu/ioport.cpp
+++ b/src/emu/ioport.cpp
@@ -1259,7 +1259,7 @@ std::string natural_keyboard::unicode_to_string(unicode_char ch)
// did we fail to resolve? if so, we have a last resort
if (buffer.empty())
- strprintf(buffer,"U+%04X", unsigned(ch));
+ buffer = string_format("U+%04X", unsigned(ch));
break;
}
return buffer;
@@ -1337,29 +1337,27 @@ std::string natural_keyboard::key_name(unicode_char ch) const
std::string natural_keyboard::dump()
{
- std::string buffer;
+ std::ostringstream buffer;
const size_t left_column_width = 24;
// loop through all codes
for (auto & code : m_keycode_map)
{
// describe the character code
-
- strcatprintf(buffer,"%08X (%s) ", code.ch, unicode_to_string(code.ch).c_str());
+ std::string description = string_format("%08X (%s) ", code.ch, unicode_to_string(code.ch).c_str());
// pad with spaces
- while (buffer.length() < left_column_width)
- buffer.push_back(' ');
+ util::stream_format(buffer, "%-*s", left_column_width, description);
// identify the keys used
for (int field = 0; field < ARRAY_LENGTH(code.field) && code.field[field] != nullptr; field++)
- strcatprintf(buffer, "%s'%s'", (field > 0) ? ", " : "", code.field[field]->name());
+ util::stream_format(buffer, "%s'%s'", (field > 0) ? ", " : "", code.field[field]->name());
// carriage return
- buffer.push_back('\n');
+ buffer << '\n';
}
- return buffer;
+ return buffer.str();
}
@@ -2095,7 +2093,7 @@ void ioport_field::expand_diplocation(const char *location, std::string &errorbu
{
if (lastname == nullptr)
{
- strcatprintf(errorbuf, "Switch location '%s' missing switch name!\n", location);
+ errorbuf.append(string_format("Switch location '%s' missing switch name!\n", location));
lastname = (char *)"UNK";
}
name.assign(lastname);
@@ -2112,7 +2110,7 @@ void ioport_field::expand_diplocation(const char *location, std::string &errorbu
// now scan the switch number
int swnum = -1;
if (sscanf(number, "%d", &swnum) != 1)
- strcatprintf(errorbuf, "Switch location '%s' has invalid format!\n", location);
+ errorbuf.append(string_format("Switch location '%s' has invalid format!\n", location));
// allocate a new entry
m_diploclist.append(*global_alloc(ioport_diplocation(name.c_str(), swnum, invert)));
@@ -2130,7 +2128,7 @@ void ioport_field::expand_diplocation(const char *location, std::string &errorbu
for (bits = 0, temp = m_mask; temp != 0 && bits < 32; bits++)
temp &= temp - 1;
if (bits != entries)
- strcatprintf(errorbuf, "Switch location '%s' does not describe enough bits for mask %X\n", location, m_mask);
+ errorbuf.append(string_format("Switch location '%s' does not describe enough bits for mask %X\n", location, m_mask));
}
@@ -2195,7 +2193,7 @@ ioport_field_live::ioport_field_live(ioport_field &field, analog_field *analog)
unicode_char ch = field.keyboard_code(which);
if (ch == 0)
break;
- strcatprintf(name, "%-*s ", MAX(SPACE_COUNT - 1, 0), field.manager().natkeyboard().key_name(ch).c_str());
+ name.append(string_format("%-*s ", MAX(SPACE_COUNT - 1, 0), field.manager().natkeyboard().key_name(ch)));
}
// trim extra spaces
@@ -2371,7 +2369,7 @@ void ioport_port::insert_field(ioport_field &newfield, ioport_value &disallowedb
if (newfield.condition().none())
{
if ((newfield.mask() & disallowedbits) != 0)
- strcatprintf(errorbuf, "INPUT_TOKEN_FIELD specifies duplicate port bits (port=%s mask=%X)\n", tag(), newfield.mask());
+ errorbuf.append(string_format("INPUT_TOKEN_FIELD specifies duplicate port bits (port=%s mask=%X)\n", tag(), newfield.mask()));
disallowedbits |= newfield.mask();
}
@@ -2479,7 +2477,7 @@ ioport_manager::ioport_manager(running_machine &machine)
m_has_dips(false),
m_has_bioses(false),
m_autofire_toggle(false),
- m_autofire_delay(3) // 1 seems too fast for a bunch of games
+ m_autofire_delay(3) // 1 seems too fast for a bunch of games
{
memset(m_type_to_entry, 0, sizeof(m_type_to_entry));
}
@@ -3555,8 +3553,8 @@ void ioport_manager::timecode_write(_Type value)
/*template<>
void ioport_manager::timecode_write<bool>(bool value)
{
- UINT8 byte = UINT8(value);
- timecode_write(byte);
+ UINT8 byte = UINT8(value);
+ timecode_write(byte);
}*/
template<>
void ioport_manager::timecode_write<std::string>(std::string value) {
@@ -3695,107 +3693,90 @@ void ioport_manager::record_frame(const attotime &curtime)
record_write(UINT32(machine().video().speed_percent() * double(1 << 20)));
}
- if (m_timecode_file.is_open() && machine().video().get_timecode_write()) {
+ if (m_timecode_file.is_open() && machine().video().get_timecode_write())
+ {
// Display the timecode
- std::string current_time_str;
m_timecode_count++;
- strcatprintf(current_time_str, "%02d:%02d:%02d.%03d",
- (int)curtime.seconds() / (60 * 60),
- (curtime.seconds() / 60) % 60,
- curtime.seconds() % 60,
- (int)(curtime.attoseconds()/ATTOSECONDS_PER_MILLISECOND));
+ std::string const current_time_str = string_format("%02d:%02d:%02d.%03d",
+ (int)curtime.seconds() / (60 * 60),
+ (curtime.seconds() / 60) % 60,
+ curtime.seconds() % 60,
+ (int)(curtime.attoseconds()/ATTOSECONDS_PER_MILLISECOND));
// Elapsed from previous timecode
- attotime elapsed_time = curtime - m_timecode_last_time;
+ attotime const elapsed_time = curtime - m_timecode_last_time;
m_timecode_last_time = curtime;
- std::string elapsed_time_str;
- strcatprintf(elapsed_time_str, "%02d:%02d:%02d.%03d",
- elapsed_time.seconds() / (60 * 60),
- (elapsed_time.seconds() / 60) % 60,
- elapsed_time.seconds() % 60,
- int(elapsed_time.attoseconds()/ATTOSECONDS_PER_MILLISECOND));
+ std::string const elapsed_time_str = string_format("%02d:%02d:%02d.%03d",
+ elapsed_time.seconds() / (60 * 60),
+ (elapsed_time.seconds() / 60) % 60,
+ elapsed_time.seconds() % 60,
+ int(elapsed_time.attoseconds()/ATTOSECONDS_PER_MILLISECOND));
// Number of ms from beginning of playback
- int mseconds_start = curtime.seconds()*1000 + curtime.attoseconds()/ATTOSECONDS_PER_MILLISECOND;
- std::string mseconds_start_str;
- strcatprintf(mseconds_start_str, "%015d", mseconds_start);
+ int const mseconds_start = curtime.seconds()*1000 + curtime.attoseconds()/ATTOSECONDS_PER_MILLISECOND;
+ std::string const mseconds_start_str = string_format("%015d", mseconds_start);
// Number of ms from previous timecode
int mseconds_elapsed = elapsed_time.seconds()*1000 + elapsed_time.attoseconds()/ATTOSECONDS_PER_MILLISECOND;
- std::string mseconds_elapsed_str;
- strcatprintf(mseconds_elapsed_str, "%015d", mseconds_elapsed);
+ std::string const mseconds_elapsed_str = string_format("%015d", mseconds_elapsed);
// Number of frames from beginning of playback
- int frame_start = mseconds_start * 60 / 1000;
- std::string frame_start_str;
- strcatprintf(frame_start_str, "%015d", frame_start);
+ int const frame_start = mseconds_start * 60 / 1000;
+ std::string const frame_start_str = string_format("%015d", frame_start);
// Number of frames from previous timecode
int frame_elapsed = mseconds_elapsed * 60 / 1000;
- std::string frame_elapsed_str;
- strcatprintf(frame_elapsed_str, "%015d", frame_elapsed);
+ std::string const frame_elapsed_str = string_format("%015d", frame_elapsed);
std::string message;
std::string timecode_text;
std::string timecode_key;
bool show_timecode_counter = false;
if (m_timecode_count==1) {
- message += "TIMECODE: Intro started at " + current_time_str;
+ message = string_format("TIMECODE: Intro started at %s", current_time_str);
timecode_key = "INTRO_START";
timecode_text = "INTRO";
show_timecode_counter = true;
}
else if (m_timecode_count==2) {
- message += "TIMECODE: Intro duration " + elapsed_time_str;
- timecode_key = "INTRO_STOP";
machine().video().add_to_total_time(elapsed_time);
- //timecode_text += "INTRO";
+ message = string_format("TIMECODE: Intro duration %s", elapsed_time_str);
+ timecode_key = "INTRO_STOP";
+ //timecode_text = "INTRO";
}
else if (m_timecode_count==3) {
- message += "TIMECODE: Gameplay started at " + current_time_str;
+ message = string_format("TIMECODE: Gameplay started at %s", current_time_str);
timecode_key = "GAMEPLAY_START";
- timecode_text += "GAMEPLAY";
+ timecode_text = "GAMEPLAY";
show_timecode_counter = true;
}
else if (m_timecode_count==4) {
- message += "TIMECODE: Gameplay duration " + elapsed_time_str;
- timecode_key = "GAMEPLAY_STOP";
machine().video().add_to_total_time(elapsed_time);
- //timecode_text += "GAMEPLAY";
+ message = string_format("TIMECODE: Gameplay duration %s", elapsed_time_str);
+ timecode_key = "GAMEPLAY_STOP";
+ //timecode_text = "GAMEPLAY";
}
else if (m_timecode_count % 2 == 1) {
- std::string timecode_count_str;
- strcatprintf(timecode_count_str, "%03d", (m_timecode_count-3)/2);
- timecode_key = "EXTRA_START_" + timecode_count_str;
- timecode_count_str.clear();
- strcatprintf(timecode_count_str, "%d", (m_timecode_count-3)/2);
- message += "TIMECODE: Extra " + timecode_count_str + " started at " + current_time_str;
- timecode_text += "EXTRA " + timecode_count_str;
+ message = string_format("TIMECODE: Extra %d started at %s", (m_timecode_count-3)/2, current_time_str);
+ timecode_key = string_format("EXTRA_START_%03d", (m_timecode_count-3)/2);
+ timecode_text = string_format("EXTRA %d", (m_timecode_count-3)/2);
show_timecode_counter = true;
}
else {
machine().video().add_to_total_time(elapsed_time);
-
- std::string timecode_count_str;
- strcatprintf(timecode_count_str, "%d", (m_timecode_count-4)/2);
- message += "TIMECODE: Extra " + timecode_count_str + " duration " + elapsed_time_str;
-
- timecode_count_str.clear();
- strcatprintf(timecode_count_str, "%03d", (m_timecode_count-4)/2);
- timecode_key = "EXTRA_STOP_" + timecode_count_str;
+ message = string_format("TIMECODE: Extra %d duration %s", (m_timecode_count-4)/2, elapsed_time_str);
+ timecode_key = string_format("EXTRA_STOP_%03d", (m_timecode_count-4)/2);
}
osd_printf_info("%s \n", message.c_str());
machine().popmessage("%s \n", message.c_str());
- std::string line_to_add;
- line_to_add.append(timecode_key).append(19-timecode_key.length(), ' ');
- line_to_add +=
- " " + current_time_str + " " + elapsed_time_str +
- " " + mseconds_start_str + " " + mseconds_elapsed_str +
- " " + frame_start_str + " " + frame_elapsed_str +
- "\n";
- m_timecode_file.puts(line_to_add.c_str());
+ m_timecode_file.printf(
+ "%-19s %s %s %s %s %s %s\n",
+ timecode_key.c_str(),
+ current_time_str.c_str(), elapsed_time_str.c_str(),
+ mseconds_start_str.c_str(), mseconds_elapsed_str.c_str(),
+ frame_start_str.c_str(), frame_elapsed_str.c_str());
machine().video().set_timecode_write(false);
machine().video().set_timecode_text(timecode_text);
@@ -4616,7 +4597,7 @@ std::string ioport_manager::input_type_to_token(ioport_type type, int player)
return std::string(entry->token());
// if that fails, carry on
- return strformat("TYPE_OTHER(%d,%d)", type, player);
+ return string_format("TYPE_OTHER(%d,%d)", type, player);
}
diff --git a/src/emu/ioport.h b/src/emu/ioport.h
index 6d9d941fa4a..bc8dab543be 100644
--- a/src/emu/ioport.h
+++ b/src/emu/ioport.h
@@ -1096,7 +1096,7 @@ public:
struct user_settings
{
ioport_value value; // for DIP switches
- bool autofire; // for autofire settings
+ bool autofire; // for autofire settings
input_seq seq[SEQ_TYPE_TOTAL]; // sequences of all types
INT32 sensitivity; // for analog controls
INT32 delta; // for analog controls
@@ -1486,8 +1486,8 @@ private:
UINT64 m_playback_accumulated_speed; // accumulated speed during playback
UINT32 m_playback_accumulated_frames; // accumulated frames during playback
emu_file m_timecode_file; // timecode/frames playback file (NULL if not recording)
- int m_timecode_count;
- attotime m_timecode_last_time;
+ int m_timecode_count;
+ attotime m_timecode_last_time;
// has...
bool m_has_configs;
diff --git a/src/emu/language.cpp b/src/emu/language.cpp
index 23a2d251fab..b47605f50c8 100644
--- a/src/emu/language.cpp
+++ b/src/emu/language.cpp
@@ -2,9 +2,9 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
- language.cpp
+ language.cpp
- Multi-language support.
+ Multi-language support.
***************************************************************************/
@@ -75,4 +75,4 @@ void load_translation(emu_options &m_options)
}
global_free_array(buffer);
}
-} \ No newline at end of file
+}
diff --git a/src/emu/language.h b/src/emu/language.h
index ce536531d89..2a9d934576b 100644
--- a/src/emu/language.h
+++ b/src/emu/language.h
@@ -2,9 +2,9 @@
// copyright-holders:Miodrag Milanovic
/***************************************************************************
- language.h
+ language.h
- Multi-language support.
+ Multi-language support.
***************************************************************************/
#pragma once
@@ -20,13 +20,12 @@
// LOCALIZATION SUPPORT
//**************************************************************************
-#define _(param) lang_translate(param)
+#define _(param) lang_translate(param)
// Fake one to make possible using it in static text definitions, on those
// lang_translate must be called afterwards
-#define __(param) param
+#define __(param) param
void load_translation(emu_options &option);
const char *lang_translate(const char *word);
#endif /*__LANGUAGE_H__*/
-
diff --git a/src/emu/luaengine.cpp b/src/emu/luaengine.cpp
index 990f417eac4..ecf1b418de5 100644
--- a/src/emu/luaengine.cpp
+++ b/src/emu/luaengine.cpp
@@ -19,7 +19,9 @@
#include "ui/ui.h"
#include "luaengine.h"
#include <mutex>
+#if !defined(NO_LIBUV)
#include "libuv/include/uv.h"
+#endif
//**************************************************************************
// LUA ENGINE
@@ -49,9 +51,11 @@ lua_engine* lua_engine::luaThis = nullptr;
extern "C" {
int luaopen_lsqlite3(lua_State *L);
int luaopen_zlib(lua_State *L);
- int luaopen_luv(lua_State *L);
int luaopen_lfs(lua_State *L);
- uv_loop_t* luv_loop(lua_State* L);
+#if !defined(NO_LIBUV)
+ int luaopen_luv(lua_State *L);
+ uv_loop_t* luv_loop(lua_State* L);
+#endif
}
static void lstop(lua_State *L, lua_Debug *ar)
@@ -136,23 +140,19 @@ lua_engine::hook::hook()
cb = -1;
}
-#if (defined(__sun__) && defined(__svr4__)) || defined(__ANDROID__) || defined(__OpenBSD__)
-#undef _L
-#endif
-
-void lua_engine::hook::set(lua_State *_L, int idx)
+void lua_engine::hook::set(lua_State *lua, int idx)
{
if (L)
luaL_unref(L, LUA_REGISTRYINDEX, cb);
- if (lua_isnil(_L, idx)) {
+ if (lua_isnil(lua, idx)) {
L = nullptr;
cb = -1;
} else {
- L = _L;
- lua_pushvalue(_L, idx);
- cb = luaL_ref(_L, LUA_REGISTRYINDEX);
+ L = lua;
+ lua_pushvalue(lua, idx);
+ cb = luaL_ref(lua, LUA_REGISTRYINDEX);
}
}
@@ -197,9 +197,9 @@ void lua_engine::resume(lua_State *L, int nparam, lua_State *root)
}
}
-void lua_engine::resume(void *_L, INT32 param)
+void lua_engine::resume(void *lua, INT32 param)
{
- resume(static_cast<lua_State *>(_L));
+ resume(static_cast<lua_State *>(lua));
}
int lua_engine::l_ioport_write(lua_State *L)
@@ -744,7 +744,7 @@ int lua_engine::lua_options_entry::l_entry_value(lua_State *L)
luaL_error(L, "%s", error.c_str());
}
}
-
+
switch (e->type())
{
case OPTION_BOOLEAN:
@@ -1194,24 +1194,26 @@ lua_engine::lua_engine()
lua_gc(m_lua_state, LUA_GCSTOP, 0); /* stop collector during initialization */
luaL_openlibs(m_lua_state); /* open libraries */
- // Get package.preload so we can store builtins in it.
+ // Get package.preload so we can store builtins in it.
lua_getglobal(m_lua_state, "package");
lua_getfield(m_lua_state, -1, "preload");
lua_remove(m_lua_state, -2); // Remove package
+#if !defined(NO_LIBUV)
// Store uv module definition at preload.uv
lua_pushcfunction(m_lua_state, luaopen_luv);
lua_setfield(m_lua_state, -2, "luv");
+#endif
lua_pushcfunction(m_lua_state, luaopen_zlib);
lua_setfield(m_lua_state, -2, "zlib");
-
+
lua_pushcfunction(m_lua_state, luaopen_lsqlite3);
lua_setfield(m_lua_state, -2, "lsqlite3");
lua_pushcfunction(m_lua_state, luaopen_lfs);
lua_setfield(m_lua_state, -2, "lfs");
-
+
luaopen_ioport(m_lua_state);
lua_gc(m_lua_state, LUA_GCRESTART, 0);
@@ -1340,15 +1342,18 @@ void lua_engine::update_machine()
}
port = port->next();
}
- machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(lua_engine::on_machine_start), this));
- machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(lua_engine::on_machine_stop), this));
- machine().add_notifier(MACHINE_NOTIFY_PAUSE, machine_notify_delegate(FUNC(lua_engine::on_machine_pause), this));
- machine().add_notifier(MACHINE_NOTIFY_RESUME, machine_notify_delegate(FUNC(lua_engine::on_machine_resume), this));
- machine().add_notifier(MACHINE_NOTIFY_FRAME, machine_notify_delegate(FUNC(lua_engine::on_machine_frame), this));
}
lua_setglobal(m_lua_state, "ioport");
}
+void lua_engine::attach_notifiers()
+{
+ machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(lua_engine::on_machine_start), this));
+ machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(lua_engine::on_machine_stop), this));
+ machine().add_notifier(MACHINE_NOTIFY_PAUSE, machine_notify_delegate(FUNC(lua_engine::on_machine_pause), this));
+ machine().add_notifier(MACHINE_NOTIFY_RESUME, machine_notify_delegate(FUNC(lua_engine::on_machine_resume), this));
+ machine().add_notifier(MACHINE_NOTIFY_FRAME, machine_notify_delegate(FUNC(lua_engine::on_machine_frame), this));
+}
//-------------------------------------------------
// initialize - initialize lua hookup to emu engine
@@ -1665,10 +1670,11 @@ void lua_engine::periodic_check()
msg.ready = 0;
msg.done = 1;
}
+#if !defined(NO_LIBUV)
auto loop = luv_loop(m_lua_state);
if (loop!=nullptr)
uv_run(loop, UV_RUN_NOWAIT);
-
+#endif
}
//-------------------------------------------------
diff --git a/src/emu/luaengine.h b/src/emu/luaengine.h
index fca3a564618..908a82a8f0b 100644
--- a/src/emu/luaengine.h
+++ b/src/emu/luaengine.h
@@ -51,6 +51,7 @@ public:
void resume(lua_State *L, int nparam = 0, lua_State *root = nullptr);
void set_machine(running_machine *machine) { m_machine = machine; update_machine(); }
+ void attach_notifiers();
private:
struct hook {
lua_State *L;
diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp
index 5119dec397c..70c3f2f1569 100644
--- a/src/emu/machine.cpp
+++ b/src/emu/machine.cpp
@@ -2,69 +2,69 @@
// copyright-holders:Aaron Giles
/***************************************************************************
- machine.c
+ machine.c
- Controls execution of the core MAME system.
+ Controls execution of the core MAME system.
****************************************************************************
- Since there has been confusion in the past over the order of
- initialization and other such things, here it is, all spelled out
- as of January, 2008:
-
- main()
- - does platform-specific init
- - calls mame_execute() [mame.c]
-
- mame_execute() [mame.c]
- - calls mame_validitychecks() [validity.c] to perform validity checks on all compiled drivers
- - begins resource tracking (level 1)
- - calls create_machine [mame.c] to initialize the running_machine structure
- - calls init_machine() [mame.c]
-
- init_machine() [mame.c]
- - calls fileio_init() [fileio.c] to initialize file I/O info
- - calls config_init() [config.c] to initialize configuration system
- - calls input_init() [input.c] to initialize the input system
- - calls output_init() [output.c] to initialize the output system
- - calls state_init() [state.c] to initialize save state system
- - calls state_save_allow_registration() [state.c] to allow registrations
- - calls palette_init() [palette.c] to initialize palette system
- - calls render_init() [render.c] to initialize the rendering system
- - calls ui_init() [ui.c] to initialize the user interface
- - calls generic_machine_init() [machine/generic.c] to initialize generic machine structures
- - calls timer_init() [timer.c] to reset the timer system
- - calls osd_init() [osdepend.h] to do platform-specific initialization
- - calls input_port_init() [inptport.c] to set up the input ports
- - calls rom_init() [romload.c] to load the game's ROMs
- - calls memory_init() [memory.c] to process the game's memory maps
- - calls the driver's DRIVER_INIT callback
- - calls device_list_start() [devintrf.c] to start any devices
- - calls video_init() [video.c] to start the video system
- - calls tilemap_init() [tilemap.c] to start the tilemap system
- - calls crosshair_init() [crsshair.c] to configure the crosshairs
- - calls sound_init() [sound.c] to start the audio system
- - calls debugger_init() [debugger.c] to set up the debugger
- - calls the driver's MACHINE_START, SOUND_START, and VIDEO_START callbacks
- - calls cheat_init() [cheat.c] to initialize the cheat system
- - calls image_init() [image.c] to initialize the image system
-
- - calls config_load_settings() [config.c] to load the configuration file
- - calls nvram_load [machine/generic.c] to load NVRAM
- - calls ui_display_startup_screens() [ui.c] to display the startup screens
- - begins resource tracking (level 2)
- - calls soft_reset() [mame.c] to reset all systems
-
- -------------------( at this point, we're up and running )----------------------
-
- - calls scheduler->timeslice() [schedule.c] over and over until we exit
- - ends resource tracking (level 2), freeing all auto_mallocs and timers
- - calls the nvram_save() [machine/generic.c] to save NVRAM
- - calls config_save_settings() [config.c] to save the game's configuration
- - calls all registered exit routines [mame.c]
- - ends resource tracking (level 1), freeing all auto_mallocs and timers
-
- - exits the program
+ Since there has been confusion in the past over the order of
+ initialization and other such things, here it is, all spelled out
+ as of January, 2008:
+
+ main()
+ - does platform-specific init
+ - calls mame_execute() [mame.c]
+
+ mame_execute() [mame.c]
+ - calls mame_validitychecks() [validity.c] to perform validity checks on all compiled drivers
+ - begins resource tracking (level 1)
+ - calls create_machine [mame.c] to initialize the running_machine structure
+ - calls init_machine() [mame.c]
+
+ init_machine() [mame.c]
+ - calls fileio_init() [fileio.c] to initialize file I/O info
+ - calls config_init() [config.c] to initialize configuration system
+ - calls input_init() [input.c] to initialize the input system
+ - calls output_init() [output.c] to initialize the output system
+ - calls state_init() [state.c] to initialize save state system
+ - calls state_save_allow_registration() [state.c] to allow registrations
+ - calls palette_init() [palette.c] to initialize palette system
+ - calls render_init() [render.c] to initialize the rendering system
+ - calls ui_init() [ui.c] to initialize the user interface
+ - calls generic_machine_init() [machine/generic.c] to initialize generic machine structures
+ - calls timer_init() [timer.c] to reset the timer system
+ - calls osd_init() [osdepend.h] to do platform-specific initialization
+ - calls input_port_init() [inptport.c] to set up the input ports
+ - calls rom_init() [romload.c] to load the game's ROMs
+ - calls memory_init() [memory.c] to process the game's memory maps
+ - calls the driver's DRIVER_INIT callback
+ - calls device_list_start() [devintrf.c] to start any devices
+ - calls video_init() [video.c] to start the video system
+ - calls tilemap_init() [tilemap.c] to start the tilemap system
+ - calls crosshair_init() [crsshair.c] to configure the crosshairs
+ - calls sound_init() [sound.c] to start the audio system
+ - calls debugger_init() [debugger.c] to set up the debugger
+ - calls the driver's MACHINE_START, SOUND_START, and VIDEO_START callbacks
+ - calls cheat_init() [cheat.c] to initialize the cheat system
+ - calls image_init() [image.c] to initialize the image system
+
+ - calls config_load_settings() [config.c] to load the configuration file
+ - calls nvram_load [machine/generic.c] to load NVRAM
+ - calls ui_display_startup_screens() [ui.c] to display the startup screens
+ - begins resource tracking (level 2)
+ - calls soft_reset() [mame.c] to reset all systems
+
+ -------------------( at this point, we're up and running )----------------------
+
+ - calls scheduler->timeslice() [schedule.c] over and over until we exit
+ - ends resource tracking (level 2), freeing all auto_mallocs and timers
+ - calls the nvram_save() [machine/generic.c] to save NVRAM
+ - calls config_save_settings() [config.c] to save the game's configuration
+ - calls all registered exit routines [mame.c]
+ - ends resource tracking (level 1), freeing all auto_mallocs and timers
+
+ - exits the program
***************************************************************************/
@@ -95,15 +95,6 @@ void js_set_main_loop(running_machine * machine);
//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-// a giant string buffer for temporary strings
-static char giant_string_buffer[65536] = { 0 };
-
-
-
-//**************************************************************************
// RUNNING MACHINE
//**************************************************************************
@@ -190,7 +181,7 @@ const char *running_machine::describe_context()
if (cpu != nullptr)
{
address_space &prg = cpu->space(AS_PROGRAM);
- strprintf(m_context, "'%s' (%s)", cpu->tag(), core_i64_format(cpu->pc(), prg.logaddrchars(), prg.is_octal()));
+ m_context = string_format(prg.is_octal() ? "'%s' (%0*o)" : "'%s' (%0*X)", cpu->tag(), prg.logaddrchars(), cpu->pc());
}
}
else
@@ -773,69 +764,6 @@ void running_machine::add_logerror_callback(logerror_callback callback)
m_logerror_list.push_back(std::make_unique<logerror_callback_item>(callback));
}
-/*-------------------------------------------------
- popmessage - pop up a user-visible message
--------------------------------------------------*/
-
-void running_machine::popmessage(const char *format, ...) const
-{
- // if the format is NULL, it is a signal to clear the popmessage
- if (format == nullptr)
- ui().popup_time(0, " ");
-
- // otherwise, generate the buffer and call the UI to display the message
- else
- {
- std::string temp;
- va_list arg;
-
- // dump to the buffer
- va_start(arg, format);
- strvprintf(temp,format, arg);
- va_end(arg);
-
- // pop it in the UI
- ui().popup_time(temp.length() / 40 + 2, "%s", temp.c_str());
- }
-}
-
-
-/*-------------------------------------------------
- logerror - log to the debugger and any other
- OSD-defined output streams
--------------------------------------------------*/
-
-void running_machine::logerror(const char *format, ...) const
-{
- va_list arg;
- va_start(arg, format);
- vlogerror(format, arg);
- va_end(arg);
-}
-
-
-//-------------------------------------------------
-// vlogerror - vprintf-style error logging
-//-------------------------------------------------
-
-void running_machine::vlogerror(const char *format, va_list args) const
-{
- // process only if there is a target
- if (!m_logerror_list.empty())
- {
- g_profiler.start(PROFILER_LOGERROR);
-
- // dump to the buffer
- vsnprintf(giant_string_buffer, ARRAY_LENGTH(giant_string_buffer), format, args);
-
- // log to all callbacks
- for (auto& cb : m_logerror_list)
- (cb->m_func)(*this, giant_string_buffer);
-
- g_profiler.stop();
- }
-}
-
//-------------------------------------------------
// base_datetime - retrieve the time of the host
@@ -1081,7 +1009,10 @@ void running_machine::watchdog_vblank(screen_device &screen, bool vblank_state)
void running_machine::logfile_callback(const running_machine &machine, const char *buffer)
{
if (machine.m_logfile != nullptr)
+ {
machine.m_logfile->puts(buffer);
+ machine.m_logfile->flush();
+ }
}
@@ -1199,9 +1130,10 @@ void running_machine::postload_all_devices()
std::string running_machine::nvram_filename(device_t &device) const
{
// start with either basename or basename_biosnum
- std::string result(basename());
+ std::ostringstream result;
+ result << basename();
if (root_device().system_bios() != 0 && root_device().default_bios() != root_device().system_bios())
- strcatprintf(result, "_%d", root_device().system_bios() - 1);
+ util::stream_format(result, "_%d", root_device().system_bios() - 1);
// device-based NVRAM gets its own name in a subdirectory
if (device.owner() != nullptr)
@@ -1218,14 +1150,14 @@ std::string running_machine::nvram_filename(device_t &device) const
}
}
if (software != nullptr && *software != '\0')
- result.append(PATH_SEPARATOR).append(software);
+ result << PATH_SEPARATOR << software;
std::string tag(device.tag());
tag.erase(0, 1);
strreplacechr(tag,':', '_');
- result.append(PATH_SEPARATOR).append(tag);
+ result << PATH_SEPARATOR << tag;
}
- return result;
+ return result.str();
}
/*-------------------------------------------------
@@ -1326,12 +1258,12 @@ void system_time::full_time::set(struct tm &t)
{
second = t.tm_sec;
minute = t.tm_min;
- hour = t.tm_hour;
- mday = t.tm_mday;
+ hour = t.tm_hour;
+ mday = t.tm_mday;
month = t.tm_mon;
- year = t.tm_year + 1900;
+ year = t.tm_year + 1900;
weekday = t.tm_wday;
- day = t.tm_yday;
+ day = t.tm_yday;
is_dst = t.tm_isdst;
}
diff --git a/src/emu/machine.h b/src/emu/machine.h
index 613e62b505e..1eaee4d6e4a 100644
--- a/src/emu/machine.h
+++ b/src/emu/machine.h
@@ -17,6 +17,8 @@
#ifndef __MACHINE_H__
#define __MACHINE_H__
+#include "vecstream.h"
+
#include <time.h>
// forward declaration instead of osdepend.h
@@ -73,6 +75,7 @@ const int DEBUG_FLAG_OSD_ENABLED = 0x00001000; // The OSD debugger is e
#define auto_alloc_array_clear(m, t, c) pool_alloc_array_clear(static_cast<running_machine &>(m).respool(), t, c)
#define auto_free(m, v) pool_free(static_cast<running_machine &>(m).respool(), v)
+
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -237,9 +240,9 @@ public:
INT32 get_vblank_watchdog_counter() const { return m_watchdog_counter; }
// misc
- void popmessage(const char *format, ...) const;
- void logerror(const char *format, ...) const;
- void vlogerror(const char *format, va_list args) const;
+ void popmessage() const { popmessage(static_cast<char const *>(nullptr)); }
+ template <typename Format, typename... Params> void popmessage(Format &&fmt, Params &&... args) const;
+ template <typename Format, typename... Params> void logerror(Format &&fmt, Params &&... args) const;
UINT32 rand();
const char *describe_context();
@@ -259,6 +262,8 @@ public:
private:
// internal helpers
+ template <typename T> struct is_null { template <typename U> static bool value(U &&x) { return false; } };
+ template <typename T> struct is_null<T *> { template <typename U> static bool value(U &&x) { return !x; } };
void start();
void set_saveload_filename(const char *filename);
std::string get_statename(const char *statename_opt) const;
@@ -372,6 +377,9 @@ private:
std::unique_ptr<datfile_manager> m_datfile; // internal data from datfile.c
std::unique_ptr<inifile_manager> m_inifile; // internal data from inifile.c for INIs
std::unique_ptr<favorite_manager> m_favorite; // internal data from inifile.c for favorites
+
+ // string formatting buffer
+ mutable util::ovectorstream m_string_buffer;
};
#endif /* __MACHINE_H__ */
diff --git a/src/emu/machine.ipp b/src/emu/machine.ipp
new file mode 100644
index 00000000000..092c1615d33
--- /dev/null
+++ b/src/emu/machine.ipp
@@ -0,0 +1,76 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles
+/***************************************************************************
+
+ machine.ipp
+
+ Controls execution of the core MAME system.
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __EMU_H__
+#error Dont include this file directly; include emu.h instead.
+#endif
+
+#ifndef __MACHINE_IPP__
+#define __MACHINE_IPP__
+
+#include "strformat.h"
+
+//**************************************************************************
+// MEMBER TEMPLATES
+//**************************************************************************
+
+/*-------------------------------------------------
+ popmessage - pop up a user-visible message
+-------------------------------------------------*/
+
+template <typename Format, typename... Params>
+inline void running_machine::popmessage(Format &&fmt, Params &&... args) const
+{
+ if (is_null<Format>::value(fmt))
+ {
+ // if the format is NULL, it is a signal to clear the popmessage
+ ui().popup_time(0, " ");
+ }
+ else
+ {
+ // otherwise, generate the buffer and call the UI to display the message
+ std::string const temp(string_format(std::forward<Format>(fmt), std::forward<Params>(args)...));
+
+ // pop it in the UI
+ ui().popup_time(temp.length() / 40 + 2, "%s", temp.c_str());
+ }
+}
+
+
+/*-------------------------------------------------
+ logerror - log to the debugger and any other
+ OSD-defined output streams
+-------------------------------------------------*/
+
+template <typename Format, typename... Params>
+inline void running_machine::logerror(Format &&fmt, Params &&... args) const
+{
+ // process only if there is a target
+ if (!m_logerror_list.empty())
+ {
+ g_profiler.start(PROFILER_LOGERROR);
+
+ // dump to the buffer
+ m_string_buffer.clear();
+ util::stream_format(m_string_buffer, std::forward<Format>(fmt), std::forward<Params>(args)...);
+ m_string_buffer.put('\0');
+
+ // log to all callbacks
+ char const *const str(&m_string_buffer.vec()[0]);
+ for (auto &cb : m_logerror_list)
+ (cb->m_func)(*this, str);
+
+ g_profiler.stop();
+ }
+}
+
+#endif // __MACHINE_IPP__
diff --git a/src/emu/mame.cpp b/src/emu/mame.cpp
index 813455e0b8d..513300553d6 100644
--- a/src/emu/mame.cpp
+++ b/src/emu/mame.cpp
@@ -149,6 +149,7 @@ void machine_manager::schedule_new_driver(const game_driver &driver)
void machine_manager::update_machine()
{
m_lua->set_machine(m_machine);
+ m_lua->attach_notifiers();
}
diff --git a/src/emu/memory.cpp b/src/emu/memory.cpp
index aa33faf65cf..4401cc0d05e 100644
--- a/src/emu/memory.cpp
+++ b/src/emu/memory.cpp
@@ -187,6 +187,35 @@
#define VPRINTF(x) do { if (VERBOSE) printf x; } while (0)
+/*-------------------------------------------------
+ core_i64_hex_format - i64 format printf helper
+-------------------------------------------------*/
+
+static char *core_i64_hex_format(UINT64 value, UINT8 mindigits)
+{
+ static char buffer[16][64];
+ // TODO: this can overflow - e.g. when a lot of unmapped writes are logged
+ static int index;
+ char *bufbase = &buffer[index++ % 16][0];
+ char *bufptr = bufbase;
+ INT8 curdigit;
+
+ for (curdigit = 15; curdigit >= 0; curdigit--)
+ {
+ int nibble = (value >> (curdigit * 4)) & 0xf;
+ if (nibble != 0 || curdigit < mindigits)
+ {
+ mindigits = curdigit;
+ *bufptr++ = "0123456789ABCDEF"[nibble];
+ }
+ }
+ if (bufptr == bufbase)
+ *bufptr++ = '0';
+ *bufptr = 0;
+
+ return bufbase;
+}
+
//**************************************************************************
@@ -673,10 +702,13 @@ private:
{
if (m_space.log_unmap() && !m_space.debugger_access())
{
- m_space.device().logerror("%s: unmapped %s memory read from %s & %s\n",
- m_space.machine().describe_context(), m_space.name(),
- core_i64_format(m_space.byte_to_address(offset * sizeof(_UintType)), m_space.addrchars(),m_space.is_octal()),
- core_i64_format(mask, 2 * sizeof(_UintType),m_space.is_octal()));
+ m_space.device().logerror(
+ m_space.is_octal()
+ ? "%s: unmapped %s memory read from %0*o & %0*o\n"
+ : "%s: unmapped %s memory read from %0*X & %0*X\n",
+ m_space.machine().describe_context(), m_space.name(),
+ m_space.addrchars(), m_space.byte_to_address(offset * sizeof(_UintType)),
+ 2 * sizeof(_UintType), mask);
}
return m_space.unmap();
}
@@ -741,11 +773,14 @@ private:
{
if (m_space.log_unmap() && !m_space.debugger_access())
{
- m_space.device().logerror("%s: unmapped %s memory write to %s = %s & %s\n",
+ m_space.device().logerror(
+ m_space.is_octal()
+ ? "%s: unmapped %s memory write to %0*o = %0*o & %0*o\n"
+ : "%s: unmapped %s memory write to %0*X = %0*X & %0*X\n",
m_space.machine().describe_context(), m_space.name(),
- core_i64_format(m_space.byte_to_address(offset * sizeof(_UintType)), m_space.addrchars(),m_space.is_octal()),
- core_i64_format(data, 2 * sizeof(_UintType),m_space.is_octal()),
- core_i64_format(mask, 2 * sizeof(_UintType),m_space.is_octal()));
+ m_space.addrchars(), m_space.byte_to_address(offset * sizeof(_UintType)),
+ 2 * sizeof(_UintType), data,
+ 2 * sizeof(_UintType), mask);
}
}
@@ -2653,7 +2688,7 @@ memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrst
membank = global_alloc(memory_bank(*this, banknum, bytestart, byteend, tag));
std::string temptag;
if (tag == nullptr) {
- strprintf(temptag, "anon_%p", (void *) membank);
+ temptag = string_format("anon_%p", membank);
tag = temptag.c_str();
}
manager().m_banklist.append(tag, *membank);
@@ -3842,8 +3877,7 @@ memory_block::memory_block(address_space &space, offs_t bytestart, offs_t byteen
if (region == nullptr)
{
int bytes_per_element = space.data_width() / 8;
- std::string name;
- strprintf(name,"%08x-%08x", bytestart, byteend);
+ std::string name = string_format("%08x-%08x", bytestart, byteend);
space.machine().save().save_memory(nullptr, "memory", space.device().tag(), space.spacenum(), name.c_str(), m_data, bytes_per_element, (UINT32)(byteend + 1 - bytestart) / bytes_per_element);
}
}
@@ -3880,13 +3914,13 @@ memory_bank::memory_bank(address_space &space, int index, offs_t bytestart, offs
// generate an internal tag if we don't have one
if (tag == nullptr)
{
- strprintf(m_tag,"~%d~", index);
- strprintf(m_name,"Internal bank #%d", index);
+ m_tag = string_format("~%d~", index);
+ m_name = string_format("Internal bank #%d", index);
}
else
{
m_tag.assign(tag);
- strprintf(m_name,"Bank '%s'", tag);
+ m_name = string_format("Bank '%s'", tag);
}
if (!m_anonymous && space.machine().save().registration_allowed())
diff --git a/src/emu/profiler.cpp b/src/emu/profiler.cpp
index 102f0358e09..57b775556b2 100644
--- a/src/emu/profiler.cpp
+++ b/src/emu/profiler.cpp
@@ -202,15 +202,15 @@ void real_profiler_state::update_text(running_machine &machine)
if (computed != 0)
{
// start with the un-normalized percentage
- strcatprintf(m_text, "%02d%% ", (int)((computed * 100 + total / 2) / total));
+ m_text.append(string_format("%02d%% ", (int)((computed * 100 + total / 2) / total)));
// followed by the normalized percentage for everything but profiler and idle
if (curtype < PROFILER_PROFILER)
- strcatprintf(m_text, "%02d%% ", (int)((computed * 100 + normalize / 2) / normalize));
+ m_text.append(string_format("%02d%% ", (int)((computed * 100 + normalize / 2) / normalize)));
// and then the text
if (curtype >= PROFILER_DEVICE_FIRST && curtype <= PROFILER_DEVICE_MAX)
- strcatprintf(m_text, "'%s'", iter.byindex(curtype - PROFILER_DEVICE_FIRST)->tag());
+ m_text.append(string_format("'%s'", iter.byindex(curtype - PROFILER_DEVICE_FIRST)->tag()));
else
for (auto & name : names)
if (name.type == curtype)
diff --git a/src/emu/romload.cpp b/src/emu/romload.cpp
index 886093edf13..f5f15551ab5 100644
--- a/src/emu/romload.cpp
+++ b/src/emu/romload.cpp
@@ -302,7 +302,7 @@ void rom_load_manager::determine_bios_rom(device_t *device, const char *specbios
/* if we got neither an empty string nor 'default' then warn the user */
if (specbios[0] != 0 && strcmp(specbios, "default") != 0)
{
- strcatprintf(m_errorstring, "%s: invalid bios, reverting to default\n", specbios);
+ m_errorstring.append(string_format("%s: invalid bios, reverting to default\n", specbios));
m_warnings++;
}
@@ -370,13 +370,13 @@ void rom_load_manager::handle_missing_file(const rom_entry *romp, std::string tr
bool is_chd_error = (is_chd && chderr != CHDERR_FILE_NOT_FOUND);
if (is_chd_error)
- strcatprintf(m_errorstring, "%s CHD ERROR: %s\n", name.c_str(), chd_file::error_string(chderr));
+ m_errorstring.append(string_format("%s CHD ERROR: %s\n", name.c_str(), chd_file::error_string(chderr)));
/* optional files are okay */
if (ROM_ISOPTIONAL(romp))
{
if (!is_chd_error)
- strcatprintf(m_errorstring, "OPTIONAL %s NOT FOUND%s\n", name.c_str(), tried_file_names.c_str());
+ m_errorstring.append(string_format("OPTIONAL %s NOT FOUND%s\n", name.c_str(), tried_file_names.c_str()));
m_warnings++;
}
@@ -384,7 +384,7 @@ void rom_load_manager::handle_missing_file(const rom_entry *romp, std::string tr
else if (hash_collection(ROM_GETHASHDATA(romp)).flag(hash_collection::FLAG_NO_DUMP))
{
if (!is_chd_error)
- strcatprintf(m_errorstring, "%s NOT FOUND (NO GOOD DUMP KNOWN)%s\n", name.c_str(), tried_file_names.c_str());
+ m_errorstring.append(string_format("%s NOT FOUND (NO GOOD DUMP KNOWN)%s\n", name, tried_file_names));
m_knownbad++;
}
@@ -392,7 +392,7 @@ void rom_load_manager::handle_missing_file(const rom_entry *romp, std::string tr
else
{
if (!is_chd_error)
- strcatprintf(m_errorstring, "%s NOT FOUND%s\n", name.c_str(), tried_file_names.c_str());
+ m_errorstring.append(string_format("%s NOT FOUND%s\n", name.c_str(), tried_file_names));
m_errors++;
}
}
@@ -406,8 +406,8 @@ void rom_load_manager::handle_missing_file(const rom_entry *romp, std::string tr
void rom_load_manager::dump_wrong_and_correct_checksums(const hash_collection &hashes, const hash_collection &acthashes)
{
- strcatprintf(m_errorstring, " EXPECTED: %s\n", hashes.macro_string().c_str());
- strcatprintf(m_errorstring, " FOUND: %s\n", acthashes.macro_string().c_str());
+ m_errorstring.append(string_format(" EXPECTED: %s\n", hashes.macro_string().c_str()));
+ m_errorstring.append(string_format(" FOUND: %s\n", acthashes.macro_string().c_str()));
}
@@ -426,7 +426,7 @@ void rom_load_manager::verify_length_and_hash(const char *name, UINT32 explength
UINT32 actlength = m_file->size();
if (explength != actlength)
{
- strcatprintf(m_errorstring, "%s WRONG LENGTH (expected: %08x found: %08x)\n", name, explength, actlength);
+ m_errorstring.append(string_format("%s WRONG LENGTH (expected: %08x found: %08x)\n", name, explength, actlength));
m_warnings++;
}
@@ -434,21 +434,21 @@ void rom_load_manager::verify_length_and_hash(const char *name, UINT32 explength
hash_collection &acthashes = m_file->hashes(hashes.hash_types().c_str());
if (hashes.flag(hash_collection::FLAG_NO_DUMP))
{
- strcatprintf(m_errorstring, "%s NO GOOD DUMP KNOWN\n", name);
+ m_errorstring.append(string_format("%s NO GOOD DUMP KNOWN\n", name));
m_knownbad++;
}
/* verify checksums */
else if (hashes != acthashes)
{
/* otherwise, it's just bad */
- strcatprintf(m_errorstring, "%s WRONG CHECKSUMS:\n", name);
+ m_errorstring.append(string_format("%s WRONG CHECKSUMS:\n", name));
dump_wrong_and_correct_checksums(hashes, acthashes);
m_warnings++;
}
/* If it matches, but it is actually a bad dump, write it */
else if (hashes.flag(hash_collection::FLAG_BAD_DUMP))
{
- strcatprintf(m_errorstring, "%s ROM NEEDS REDUMP\n",name);
+ m_errorstring.append(string_format("%s ROM NEEDS REDUMP\n", name));
m_knownbad++;
}
}
@@ -1179,13 +1179,13 @@ void rom_load_manager::process_disk_entries(const char *regiontag, const rom_ent
/* verify the hash */
if (hashes != acthashes)
{
- strcatprintf(m_errorstring, "%s WRONG CHECKSUMS:\n", filename.c_str());
+ m_errorstring.append(string_format("%s WRONG CHECKSUMS:\n", filename));
dump_wrong_and_correct_checksums(hashes, acthashes);
m_warnings++;
}
else if (hashes.flag(hash_collection::FLAG_BAD_DUMP))
{
- strcatprintf(m_errorstring, "%s CHD NEEDS REDUMP\n", filename.c_str());
+ m_errorstring.append(string_format("%s CHD NEEDS REDUMP\n", filename));
m_knownbad++;
}
@@ -1196,7 +1196,7 @@ void rom_load_manager::process_disk_entries(const char *regiontag, const rom_ent
err = open_disk_diff(machine().options(), romp, chd->orig_chd(), chd->diff_chd());
if (err != CHDERR_NONE)
{
- strcatprintf(m_errorstring, "%s DIFF CHD ERROR: %s\n", filename.c_str(), chd_file::error_string(err));
+ m_errorstring.append(string_format("%s DIFF CHD ERROR: %s\n", filename, chd_file::error_string(err)));
m_errors++;
chd = nullptr;
continue;
@@ -1276,13 +1276,13 @@ void rom_load_manager::load_software_part_region(device_t &device, software_list
UINT32 supported = swinfo->supported();
if (supported == SOFTWARE_SUPPORTED_PARTIAL)
{
- strcatprintf(m_errorstring, "WARNING: support for software %s (in list %s) is only partial\n", swname, swlist.list_name());
- strcatprintf(m_softwarningstring, "Support for software %s (in list %s) is only partial\n", swname, swlist.list_name());
+ m_errorstring.append(string_format("WARNING: support for software %s (in list %s) is only partial\n", swname, swlist.list_name()));
+ m_softwarningstring.append(string_format("Support for software %s (in list %s) is only partial\n", swname, swlist.list_name()));
}
if (supported == SOFTWARE_SUPPORTED_NO)
{
- strcatprintf(m_errorstring, "WARNING: support for software %s (in list %s) is only preliminary\n", swname, swlist.list_name());
- strcatprintf(m_softwarningstring, "Support for software %s (in list %s) is only preliminary\n", swname, swlist.list_name());
+ m_errorstring.append(string_format("WARNING: support for software %s (in list %s) is only preliminary\n", swname, swlist.list_name()));
+ m_softwarningstring.append(string_format("Support for software %s (in list %s) is only preliminary\n", swname, swlist.list_name()));
}
// attempt reading up the chain through the parents and create a locationtag std::string in the format
diff --git a/src/emu/save.cpp b/src/emu/save.cpp
index 89197ab224e..6c875bc08ff 100644
--- a/src/emu/save.cpp
+++ b/src/emu/save.cpp
@@ -164,9 +164,9 @@ void save_manager::save_memory(device_t *device, const char *module, const char
// create the full name
std::string totalname;
if (tag != nullptr)
- strprintf(totalname, "%s/%s/%X/%s", module, tag, index, name);
+ totalname = string_format("%s/%s/%X/%s", module, tag, index, name);
else
- strprintf(totalname, "%s/%X/%s", module, index, name);
+ totalname = string_format("%s/%X/%s", module, index, name);
// look for duplicates and an entry to insert in front of
state_entry *insert_after = nullptr;
diff --git a/src/emu/schedule.cpp b/src/emu/schedule.cpp
index 925364aab07..e0bc57c2fff 100644
--- a/src/emu/schedule.cpp
+++ b/src/emu/schedule.cpp
@@ -252,7 +252,7 @@ void emu_timer::register_save()
// for device timers, it is an index based on the device and timer ID
else
{
- strprintf(name,"%s/%d", m_device->tag(), m_id);
+ name = string_format("%s/%d", m_device->tag(), m_id);
for (emu_timer *curtimer = machine().scheduler().first_timer(); curtimer != nullptr; curtimer = curtimer->next())
if (!curtimer->m_temporary && curtimer->m_device != nullptr && curtimer->m_device == m_device && curtimer->m_id == m_id)
index++;
@@ -457,7 +457,7 @@ void device_scheduler::timeslice()
{
// compute how many cycles we want to execute
int ran = exec->m_cycles_running = divu_64x32((UINT64)delta >> exec->m_divshift, exec->m_divisor);
- LOG((" cpu '%s': %" I64FMT"d (%d cycles)\n", exec->device().tag(), delta, exec->m_cycles_running));
+ LOG((" cpu '%s': %d (%d cycles)\n", exec->device().tag(), delta, exec->m_cycles_running));
// if we're not suspended, actually execute
if (exec->m_suspend == 0)
diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp
index 6631fa82124..05e9c761719 100644
--- a/src/emu/softlist.cpp
+++ b/src/emu/softlist.cpp
@@ -31,7 +31,7 @@ class softlist_parser
{
public:
// construction (== execution)
- softlist_parser(software_list_device &list, std::string &errors);
+ softlist_parser(software_list_device &list, std::ostringstream &errors);
private:
enum parse_position
@@ -51,7 +51,7 @@ private:
const char *parser_error() const { return XML_ErrorString(XML_GetErrorCode(m_parser)); }
// internal error helpers
- void ATTR_PRINTF(2,3) parse_error(const char *fmt, ...);
+ template <typename Format, typename... Params> void parse_error(Format &&fmt, Params &&... args);
void unknown_tag(const char *tagname) { parse_error("Unknown tag: %s", tagname); }
void unknown_attribute(const char *attrname) { parse_error("Unknown attribute: %s", attrname); }
@@ -77,7 +77,7 @@ private:
// internal parsing state
software_list_device & m_list;
- std::string & m_errors;
+ std::ostringstream & m_errors;
XML_Parser m_parser;
bool m_done;
bool m_data_accum_expected;
@@ -482,11 +482,13 @@ void software_list_device::parse()
if (filerr == FILERR_NONE)
{
// parse if no error
- softlist_parser parser(*this, m_errors);
+ std::ostringstream errs;
+ softlist_parser parser(*this, errs);
m_file.close();
+ m_errors = errs.str();
}
else
- strprintf(m_errors, "Error opening file: %s\n", filename());
+ m_errors = string_format("Error opening file: %s\n", filename());
// indicate that we've been parsed
m_parsed = true;
@@ -647,7 +649,7 @@ void software_list_device::internal_validity_check(validity_checker &valid)
// softlist_parser - constructor
//-------------------------------------------------
-softlist_parser::softlist_parser(software_list_device &list, std::string &errors)
+softlist_parser::softlist_parser(software_list_device &list, std::ostringstream &errors)
: m_list(list),
m_errors(errors),
m_done(false),
@@ -723,19 +725,17 @@ void softlist_parser::expat_free(void *ptr)
// filename, line and column information
//-------------------------------------------------
-void ATTR_PRINTF(2,3) softlist_parser::parse_error(const char *fmt, ...)
+template <typename Format, typename... Params>
+inline void softlist_parser::parse_error(Format &&fmt, Params &&... args)
{
// always start with filename(line.column):
- strcatprintf(m_errors, "%s(%d.%d): ", filename(), line(), column());
+ util::stream_format(m_errors, "%s(%d.%d): ", filename(), line(), column());
// append the remainder of the string
- va_list va;
- va_start(va, fmt);
- strcatvprintf(m_errors, fmt, va);
- va_end(va);
+ util::stream_format(m_errors, std::forward<Format>(fmt), std::forward<Params>(args)...);
// append a newline at the end
- m_errors.append("\n");
+ m_errors.put('\n');
}
@@ -1151,14 +1151,14 @@ void softlist_parser::parse_data_start(const char *tagname, const char **attribu
std::string hashdata;
if (nodump)
{
- strprintf(hashdata, "%s", NO_DUMP);
+ hashdata = string_format("%s", NO_DUMP);
if (crc != nullptr && sha1 != nullptr)
parse_error("No need for hash definition");
}
else
{
if (crc != nullptr && sha1 != nullptr)
- strprintf(hashdata, "%c%s%c%s%s", hash_collection::HASH_CRC, crc, hash_collection::HASH_SHA1, sha1, (baddump ? BAD_DUMP : ""));
+ hashdata = string_format("%c%s%c%s%s", hash_collection::HASH_CRC, crc, hash_collection::HASH_SHA1, sha1, (baddump ? BAD_DUMP : ""));
else
parse_error("Incomplete rom hash definition");
}
@@ -1201,8 +1201,7 @@ void softlist_parser::parse_data_start(const char *tagname, const char **attribu
bool baddump = (status != nullptr && strcmp(status, "baddump") == 0);
bool nodump = (status != nullptr && strcmp(status, "nodump" ) == 0);
bool writeable = (writeablestr != nullptr && strcmp(writeablestr, "yes") == 0);
- std::string hashdata;
- strprintf(hashdata, "%c%s%s", hash_collection::HASH_SHA1, sha1, (nodump ? NO_DUMP : (baddump ? BAD_DUMP : "")));
+ std::string hashdata = string_format("%c%s%s", hash_collection::HASH_SHA1, sha1, (nodump ? NO_DUMP : (baddump ? BAD_DUMP : "")));
add_rom_entry(name, hashdata.c_str(), 0, 0, ROMENTRYTYPE_ROM | (writeable ? DISK_READWRITE : DISK_READONLY));
}
diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp
index 096695935d9..288bb09d9dc 100644
--- a/src/emu/sound.cpp
+++ b/src/emu/sound.cpp
@@ -75,8 +75,7 @@ sound_stream::sound_stream(device_t &device, int inputs, int outputs, int sample
m_callback = stream_update_delegate(FUNC(device_sound_interface::sound_stream_update),(device_sound_interface *)sound);
// create a unique tag for saving
- std::string state_tag;
- strprintf(state_tag, "%d", m_device.machine().sound().m_stream_list.count());
+ std::string state_tag = string_format("%d", m_device.machine().sound().m_stream_list.count());
m_device.machine().save().save_item(&m_device, "stream", state_tag.c_str(), 0, NAME(m_sample_rate));
m_device.machine().save().register_postload(save_prepost_delegate(FUNC(sound_stream::postload), this));
@@ -165,17 +164,17 @@ float sound_stream::output_gain(int outputnum) const
std::string sound_stream::input_name(int inputnum) const
{
- std::string str;
+ std::ostringstream str;
// start with our device name and tag
assert(inputnum >= 0 && inputnum < m_input.size());
- strprintf(str, "%s '%s': ", m_device.name(), m_device.tag());
+ util::stream_format(str, "%s '%s': ", m_device.name(), m_device.tag());
// if we have a source, indicate where the sound comes from by device name and tag
if (m_input[inputnum].m_source != nullptr && m_input[inputnum].m_source->m_stream != nullptr)
{
device_t &source = m_input[inputnum].m_source->m_stream->device();
- strcatprintf(str, "%s '%s'", source.name(), source.tag());
+ util::stream_format(str, "%s '%s'", source.name(), source.tag());
// get the sound interface; if there is more than 1 output we need to figure out which one
device_sound_interface *sound;
@@ -188,12 +187,12 @@ std::string sound_stream::input_name(int inputnum) const
for (int outputnum = 0; (outstream = sound->output_to_stream_output(outputnum, streamoutputnum)) != nullptr; outputnum++)
if (outstream == m_input[inputnum].m_source->m_stream && m_input[inputnum].m_source == &outstream->m_output[streamoutputnum])
{
- strcatprintf(str, " Ch.%d", outputnum);
+ util::stream_format(str, " Ch.%d", outputnum);
break;
}
}
}
- return str;
+ return str.str();
}
diff --git a/src/emu/speaker.cpp b/src/emu/speaker.cpp
index 485a6be73ca..0583b9f84a7 100644
--- a/src/emu/speaker.cpp
+++ b/src/emu/speaker.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles
/***************************************************************************
- speaker.c
+ speaker.cpp
Speaker output sound device.
diff --git a/src/emu/tilemap.cpp b/src/emu/tilemap.cpp
index 58b9cb986d6..8df29a29e09 100644
--- a/src/emu/tilemap.cpp
+++ b/src/emu/tilemap.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles
/***************************************************************************
- tilemap.c
+ tilemap.cpp
Generic tilemap management system.
diff --git a/src/emu/timer.cpp b/src/emu/timer.cpp
index 605a16a7d4f..e8d1eb8f8dd 100644
--- a/src/emu/timer.cpp
+++ b/src/emu/timer.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles
/***************************************************************************
- timer.c
+ timer.cpp
Timer devices.
diff --git a/src/emu/ui/auditmenu.cpp b/src/emu/ui/auditmenu.cpp
index 97d84568118..68b3c2d285b 100644
--- a/src/emu/ui/auditmenu.cpp
+++ b/src/emu/ui/auditmenu.cpp
@@ -1,4 +1,4 @@
-// license:BSD-3-Clause
+// license:BSD-3-Clause
// copyright-holders:Dankan1890
/*********************************************************************
@@ -177,24 +177,25 @@ void ui_menu_audit::save_available_machines()
if (file.open(emulator_info::get_configname(), "_avail.ini") == FILERR_NONE)
{
// generate header
- std::string buffer = std::string("#\n").append(UI_VERSION_TAG).append(bare_build_version).append("\n#\n\n");
- strcatprintf(buffer, "%d\n", (int)m_availablesorted.size());
- strcatprintf(buffer, "%d\n", (int)m_unavailablesorted.size());
+ std::ostringstream buffer;
+ buffer << "#\n" << UI_VERSION_TAG << bare_build_version << "\n#\n\n";
+ util::stream_format(buffer, "%d\n", m_availablesorted.size());
+ util::stream_format(buffer, "%d\n", m_unavailablesorted.size());
// generate available list
for (size_t x = 0; x < m_availablesorted.size(); ++x)
{
int find = driver_list::find(m_availablesorted[x]->name);
- strcatprintf(buffer, "%d\n", find);
+ util::stream_format(buffer, "%d\n", find);
}
// generate unavailable list
for (size_t x = 0; x < m_unavailablesorted.size(); ++x)
{
int find = driver_list::find(m_unavailablesorted[x]->name);
- strcatprintf(buffer, "%d\n", find);
+ util::stream_format(buffer, "%d\n", find);
}
- file.puts(buffer.c_str());
+ file.puts(buffer.str().c_str());
file.close();
}
}
diff --git a/src/emu/ui/cheatopt.cpp b/src/emu/ui/cheatopt.cpp
index 6de3cb55936..9c5f91d54bc 100644
--- a/src/emu/ui/cheatopt.cpp
+++ b/src/emu/ui/cheatopt.cpp
@@ -31,7 +31,7 @@ void ui_menu_cheat::handle()
bool changed = false;
/* clear cheat comment on any movement or keypress */
- machine().popmessage(nullptr);
+ machine().popmessage();
/* handle reset all + reset all cheats for reload all option */
if ((menu_event->itemref == ITEMREF_CHEATS_RESET_ALL || menu_event->itemref == ITEMREF_CHEATS_RELOAD_ALL) && menu_event->iptkey == IPT_UI_SELECT)
@@ -192,7 +192,7 @@ void ui_menu_autofire::handle()
if (menu_event->itemref == ITEMREF_AUTOFIRE_STATUS)
{
// toggle autofire status
- bool autofire_toggle = machine().ioport().get_autofire_toggle(); // (menu_event->iptkey == IPT_UI_LEFT);
+ bool autofire_toggle = machine().ioport().get_autofire_toggle(); // (menu_event->iptkey == IPT_UI_LEFT);
machine().ioport().set_autofire_toggle(!autofire_toggle);
changed = true;
}
@@ -321,5 +321,3 @@ void ui_menu_autofire::populate()
last_toggle = autofire_toggle;
}
-
-
diff --git a/src/emu/ui/ctrlmenu.cpp b/src/emu/ui/ctrlmenu.cpp
index f954a596f7a..9e2f4c2950d 100644
--- a/src/emu/ui/ctrlmenu.cpp
+++ b/src/emu/ui/ctrlmenu.cpp
@@ -44,9 +44,9 @@ ui_menu_controller_mapping::ui_menu_controller_mapping(running_machine &machine,
ui_menu_controller_mapping::~ui_menu_controller_mapping()
{
std::string error_string;
- for (int d = 1; d < ARRAY_LENGTH(m_options); ++d)
+ for (int d = 1; d < ARRAY_LENGTH(m_options); ++d)
{
- if (strcmp(machine().options().value(m_options[d].option),m_device_status[m_options[d].status])!=0)
+ if (strcmp(machine().options().value(m_options[d].option), m_device_status[m_options[d].status])!=0)
{
machine().options().set_value(m_options[d].option, m_device_status[m_options[d].status], OPTION_PRIORITY_CMDLINE, error_string);
machine().options().mark_changed(m_options[d].option);
@@ -104,7 +104,7 @@ void ui_menu_controller_mapping::custom_render(void *selectedref, float top, flo
ui_manager &mui = machine().ui();
mui.draw_text_full(container, _("Device Mapping"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(maxwidth, width);
@@ -124,7 +124,7 @@ void ui_menu_controller_mapping::custom_render(void *selectedref, float top, flo
// draw the text within it
mui.draw_text_full(container, _("Device Mapping"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
}
diff --git a/src/emu/ui/custmenu.cpp b/src/emu/ui/custmenu.cpp
index 3a50f4bfc03..2d6083536db 100644
--- a/src/emu/ui/custmenu.cpp
+++ b/src/emu/ui/custmenu.cpp
@@ -1,4 +1,4 @@
-// license:BSD-3-Clause
+// license:BSD-3-Clause
// copyright-holders:Dankan1890
/*********************************************************************
@@ -171,7 +171,7 @@ void ui_menu_custom_filter::populate()
if (custfltr::other[x] == FILTER_MANUFACTURER && c_mnfct::ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, c_mnfct::ui.size() - 1, custfltr::mnfct[x]);
- std::string fbuff("^!Manufacturer");
+ std::string fbuff(_("^!Manufacturer"));
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), c_mnfct::ui[custfltr::mnfct[x]].c_str(), arrow_flags, (void *)(FPTR)(MNFCT_FILTER + x));
}
@@ -180,7 +180,7 @@ void ui_menu_custom_filter::populate()
else if (custfltr::other[x] == FILTER_YEAR && c_year::ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, c_year::ui.size() - 1, custfltr::year[x]);
- std::string fbuff("^!Year");
+ std::string fbuff(_("^!Year"));
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), c_year::ui[custfltr::year[x]].c_str(), arrow_flags, (void *)(FPTR)(YEAR_FILTER + x));
}
@@ -208,7 +208,7 @@ void ui_menu_custom_filter::custom_render(void *selectedref, float top, float bo
// get the size of the text
mui.draw_text_full(container, _("Select custom filters:"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += (2.0f * UI_BOX_LR_BORDER) + 0.01f;
float maxwidth = MAX(width, origx2 - origx1);
@@ -228,7 +228,7 @@ void ui_menu_custom_filter::custom_render(void *selectedref, float top, float bo
// draw the text within it
mui.draw_text_full(container, _("Select custom filters:"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
}
//-------------------------------------------------
@@ -242,19 +242,19 @@ void ui_menu_custom_filter::save_custom_filters()
if (file.open("custom_", emulator_info::get_configname(), "_filter.ini") == FILERR_NONE)
{
// generate custom filters info
- std::string cinfo;
- strprintf(cinfo, "Total filters = %d\n", (custfltr::numother + 1));
- cinfo.append("Main filter = ").append(main_filters::text[custfltr::main]).append("\n");
+ std::ostringstream cinfo;
+ util::stream_format(cinfo, "Total filters = %d\n", (custfltr::numother + 1));
+ util::stream_format(cinfo, "Main filter = %s\n", main_filters::text[custfltr::main]);
for (int x = 1; x <= custfltr::numother; x++)
{
- cinfo.append("Other filter = ").append(main_filters::text[custfltr::other[x]]).append("\n");
+ util::stream_format(cinfo, "Other filter = %s\n", main_filters::text[custfltr::other[x]]);
if (custfltr::other[x] == FILTER_MANUFACTURER)
- cinfo.append(" Manufacturer filter = ").append(c_mnfct::ui[custfltr::mnfct[x]]).append("\n");
+ util::stream_format(cinfo, " Manufacturer filter = %s\n", c_mnfct::ui[custfltr::mnfct[x]]);
else if (custfltr::other[x] == FILTER_YEAR)
- cinfo.append(" Year filter = ").append(c_year::ui[custfltr::year[x]]).append("\n");
+ util::stream_format(cinfo, " Year filter = %s\n", c_year::ui[custfltr::year[x]]);
}
- file.puts(cinfo.c_str());
+ file.puts(cinfo.str().c_str());
file.close();
}
}
@@ -456,7 +456,7 @@ void ui_menu_swcustom_filter::populate()
if (sw_custfltr::other[x] == UI_SW_PUBLISHERS && m_filter.publisher.ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, m_filter.publisher.ui.size() - 1, sw_custfltr::mnfct[x]);
- std::string fbuff("^!Publisher");
+ std::string fbuff(_("^!Publisher"));
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), m_filter.publisher.ui[sw_custfltr::mnfct[x]].c_str(), arrow_flags, (void *)(FPTR)(MNFCT_FILTER + x));
}
@@ -465,7 +465,7 @@ void ui_menu_swcustom_filter::populate()
else if (sw_custfltr::other[x] == UI_SW_YEARS && m_filter.year.ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, m_filter.year.ui.size() - 1, sw_custfltr::year[x]);
- std::string fbuff("^!Year");
+ std::string fbuff(_("^!Year"));
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), m_filter.year.ui[sw_custfltr::year[x]].c_str(), arrow_flags, (void *)(FPTR)(YEAR_FILTER + x));
}
@@ -474,7 +474,7 @@ void ui_menu_swcustom_filter::populate()
else if (sw_custfltr::other[x] == UI_SW_LIST && m_filter.swlist.name.size() > 0)
{
arrow_flags = get_arrow_flags(0, m_filter.swlist.name.size() - 1, sw_custfltr::list[x]);
- std::string fbuff("^!Software List");
+ std::string fbuff(_("^!Software List"));
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), m_filter.swlist.description[sw_custfltr::list[x]].c_str(), arrow_flags, (void *)(FPTR)(LIST_FILTER + x));
}
@@ -483,7 +483,7 @@ void ui_menu_swcustom_filter::populate()
else if (sw_custfltr::other[x] == UI_SW_TYPE && m_filter.type.ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, m_filter.type.ui.size() - 1, sw_custfltr::type[x]);
- std::string fbuff("^!Device type");
+ std::string fbuff(_("^!Device type"));
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), m_filter.type.ui[sw_custfltr::type[x]].c_str(), arrow_flags, (void *)(FPTR)(TYPE_FILTER + x));
}
@@ -492,7 +492,7 @@ void ui_menu_swcustom_filter::populate()
else if (sw_custfltr::other[x] == UI_SW_REGION && m_filter.region.ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, m_filter.region.ui.size() - 1, sw_custfltr::region[x]);
- std::string fbuff("^!Region");
+ std::string fbuff(_("^!Region"));
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), m_filter.region.ui[sw_custfltr::region[x]].c_str(), arrow_flags, (void *)(FPTR)(REGION_FILTER + x));
}
@@ -521,7 +521,7 @@ void ui_menu_swcustom_filter::custom_render(void *selectedref, float top, float
// get the size of the text
mui.draw_text_full(container, _("Select custom filters:"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += (2.0f * UI_BOX_LR_BORDER) + 0.01f;
float maxwidth = MAX(width, origx2 - origx1);
@@ -541,7 +541,7 @@ void ui_menu_swcustom_filter::custom_render(void *selectedref, float top, float
// draw the text within it
mui.draw_text_full(container, _("Select custom filters:"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
}
//-------------------------------------------------
@@ -555,26 +555,25 @@ void ui_menu_swcustom_filter::save_sw_custom_filters()
if (file.open("custom_", m_driver->name, "_filter.ini") == FILERR_NONE)
{
// generate custom filters info
- std::string cinfo;
- strprintf(cinfo, "Total filters = %d\n", (sw_custfltr::numother + 1));
- cinfo.append("Main filter = ").append(sw_filters::text[sw_custfltr::main]).append("\n");
+ std::ostringstream cinfo;
+ util::stream_format(cinfo, "Total filters = %d\n", (sw_custfltr::numother + 1));
+ util::stream_format(cinfo, "Main filter = %s\n", sw_filters::text[sw_custfltr::main]);
for (int x = 1; x <= sw_custfltr::numother; x++)
{
- cinfo.append("Other filter = ").append(sw_filters::text[sw_custfltr::other[x]]).append("\n");
+ util::stream_format(cinfo, "Other filter = %s\n", sw_filters::text[sw_custfltr::other[x]]);
if (sw_custfltr::other[x] == UI_SW_PUBLISHERS)
- cinfo.append(" Manufacturer filter = ").append(m_filter.publisher.ui[sw_custfltr::mnfct[x]]).append("\n");
+ util::stream_format(cinfo, " Manufacturer filter = %s\n", m_filter.publisher.ui[sw_custfltr::mnfct[x]]);
else if (sw_custfltr::other[x] == UI_SW_LIST)
- cinfo.append(" Software List filter = ").append(m_filter.swlist.name[sw_custfltr::list[x]]).append("\n");
+ util::stream_format(cinfo, " Software List filter = %s\n", m_filter.swlist.name[sw_custfltr::list[x]]);
else if (sw_custfltr::other[x] == UI_SW_YEARS)
- cinfo.append(" Year filter = ").append(m_filter.year.ui[sw_custfltr::year[x]]).append("\n");
+ util::stream_format(cinfo, " Year filter = %s\n", m_filter.year.ui[sw_custfltr::year[x]]);
else if (sw_custfltr::other[x] == UI_SW_TYPE)
- cinfo.append(" Type filter = ").append(m_filter.type.ui[sw_custfltr::type[x]]).append("\n");
+ util::stream_format(cinfo, " Type filter = %s\n", m_filter.type.ui[sw_custfltr::type[x]]);
else if (sw_custfltr::other[x] == UI_SW_REGION)
- cinfo.append(" Region filter = ").append(m_filter.region.ui[sw_custfltr::region[x]]).append("\n");
+ util::stream_format(cinfo, " Region filter = %s\n", m_filter.region.ui[sw_custfltr::region[x]]);
}
- file.puts(cinfo.c_str());
+ file.puts(cinfo.str().c_str());
file.close();
}
}
-
diff --git a/src/emu/ui/custui.cpp b/src/emu/ui/custui.cpp
index 6492faebabf..6aaed9105df 100644
--- a/src/emu/ui/custui.cpp
+++ b/src/emu/ui/custui.cpp
@@ -1,4 +1,4 @@
-// license:BSD-3-Clause
+// license:BSD-3-Clause
// copyright-holders:Dankan1890
/*********************************************************************
@@ -16,10 +16,10 @@
#include "ui/utils.h"
#include <algorithm>
-const char *ui_menu_custom_ui::hide_status[] = {
- __("Show All"),
- __("Hide Filters"),
- __("Hide Info/Image"),
+const char *ui_menu_custom_ui::hide_status[] = {
+ __("Show All"),
+ __("Hide Filters"),
+ __("Hide Info/Image"),
__("Hide Both") };
//-------------------------------------------------
@@ -63,7 +63,7 @@ ui_menu_custom_ui::~ui_menu_custom_ui()
ui_globals::reset = true;
}
-//-------------------------------------------------
+//-------------------------------------------------
// handle
//-------------------------------------------------
@@ -102,6 +102,7 @@ void ui_menu_custom_ui::handle()
ui_menu::stack_push(global_alloc_clear<ui_menu_selector>(machine(), container, s_sel, ui_globals::panels_status));
}
+ break;
}
case LANGUAGE_MENU:
{
@@ -119,6 +120,7 @@ void ui_menu_custom_ui::handle()
ui_menu::stack_push(global_alloc_clear<ui_menu_selector>(machine(), container, s_sel, m_currlang));
}
+ break;
}
}
}
@@ -160,7 +162,7 @@ void ui_menu_custom_ui::custom_render(void *selectedref, float top, float bottom
ui_manager &mui = machine().ui();
mui.draw_text_full(container, _("Custom UI Settings"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
float maxwidth = MAX(origx2 - origx1, width);
@@ -180,7 +182,7 @@ void ui_menu_custom_ui::custom_render(void *selectedref, float top, float bottom
// draw the text within it
mui.draw_text_full(container, _("Custom UI Settings"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
}
//-------------------------------------------------
@@ -263,7 +265,7 @@ void ui_menu_font_ui::list()
std::stable_sort(m_fonts.begin(), m_fonts.end());
// add default string to the top of array
- m_fonts.insert(m_fonts.begin(), std::string("default"));
+ m_fonts.insert(m_fonts.begin(), std::string(_("default")));
}
#endif
@@ -361,7 +363,6 @@ void ui_menu_font_ui::populate()
{
// set filter arrow
UINT32 arrow_flags;
- std::string tmptxt;
#ifdef UI_WINDOWS
// add fonts option
@@ -377,16 +378,13 @@ void ui_menu_font_ui::populate()
#endif
arrow_flags = get_arrow_flags(m_font_min, m_font_max, m_font_size);
- strprintf(tmptxt, "%2d", m_font_size);
- item_append(_("Lines"), tmptxt.c_str(), arrow_flags, (void *)(FPTR)FONT_SIZE);
+ item_append(_("Lines"), string_format("%2d", m_font_size).c_str(), arrow_flags, (void *)(FPTR)FONT_SIZE);
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
// add item
- tmptxt.clear();
- strprintf(tmptxt, "%3.2f", m_info_size);
arrow_flags = get_arrow_flags(m_info_min, m_info_max, m_info_size);
- item_append(_("Infos text size"), tmptxt.c_str(), arrow_flags, (void *)(FPTR)INFOS_SIZE);
+ item_append(_("Infos text size"), string_format("%3.2f", m_info_size).c_str(), arrow_flags, (void *)(FPTR)INFOS_SIZE);
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
@@ -406,7 +404,7 @@ void ui_menu_font_ui::custom_render(void *selectedref, float top, float bottom,
std::string topbuf(_("UI Fonts Settings"));
mui.draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
float maxwidth = MAX(origx2 - origx1, width);
@@ -426,14 +424,14 @@ void ui_menu_font_ui::custom_render(void *selectedref, float top, float bottom,
// draw the text within it
mui.draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
if ((FPTR)selectedref == INFOS_SIZE)
{
topbuf = _("Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
mui.draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_LEFT, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr, m_info_size);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr, m_info_size);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(origx2 - origx1, width);
@@ -453,7 +451,7 @@ void ui_menu_font_ui::custom_render(void *selectedref, float top, float bottom,
// draw the text within it
mui.draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_LEFT, WRAP_NEVER,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, m_info_size);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, m_info_size);
}
}
@@ -491,7 +489,7 @@ ui_menu_colors_ui::~ui_menu_colors_ui()
std::string error_string, dec_color;
for (int index = 1; index < MUI_RESTORE; index++)
{
- strprintf(dec_color, "%x", (UINT32)m_color_table[index].color);
+ dec_color = string_format("%x", (UINT32)m_color_table[index].color);
machine().ui().options().set_value(m_color_table[index].option, dec_color.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
}
}
@@ -565,7 +563,7 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom
std::string topbuf(_("UI Colors Settings"));
mui.draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(maxwidth, width);
@@ -585,7 +583,7 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom
// draw the text within it
mui.draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
// bottom text
// get the text for 'UI Select'
@@ -593,7 +591,7 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom
topbuf.assign(_("Double click or press ")).append(ui_select_text.c_str()).append(_(" to change the color value"));
mui.draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(maxwidth, width);
@@ -613,13 +611,13 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom
// draw the text within it
mui.draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
// compute maxwidth
topbuf = _("Menu Preview");
mui.draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
maxwidth = width + 2.0f * UI_BOX_LR_BORDER;
std::string sampletxt[5];
@@ -633,7 +631,7 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom
for (auto & elem: sampletxt)
{
mui.draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(maxwidth, width);
}
@@ -655,7 +653,7 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom
// draw the text within it
mui.draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
// compute our bounds for menu preview
x1 -= UI_BOX_LR_BORDER;
@@ -673,29 +671,29 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom
// draw normal text
mui.draw_text_full(container, sampletxt[0].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, m_color_table[MUI_TEXT_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr);
+ DRAW_NORMAL, m_color_table[MUI_TEXT_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr);
y1 += line_height;
// draw subitem text
mui.draw_text_full(container, sampletxt[1].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, m_color_table[MUI_SUBITEM_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr);
+ DRAW_NORMAL, m_color_table[MUI_SUBITEM_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr);
y1 += line_height;
// draw selected text
highlight(container, x1, y1, x2, y1 + line_height, m_color_table[MUI_SELECTED_BG_COLOR].color);
mui.draw_text_full(container, sampletxt[2].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, m_color_table[MUI_SELECTED_COLOR].color, m_color_table[MUI_SELECTED_BG_COLOR].color, nullptr, nullptr);
+ DRAW_NORMAL, m_color_table[MUI_SELECTED_COLOR].color, m_color_table[MUI_SELECTED_BG_COLOR].color, nullptr, nullptr);
y1 += line_height;
// draw mouse over text
highlight(container, x1, y1, x2, y1 + line_height, m_color_table[MUI_MOUSEOVER_BG_COLOR].color);
mui.draw_text_full(container, sampletxt[3].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, m_color_table[MUI_MOUSEOVER_COLOR].color, m_color_table[MUI_MOUSEOVER_BG_COLOR].color, nullptr, nullptr);
+ DRAW_NORMAL, m_color_table[MUI_MOUSEOVER_COLOR].color, m_color_table[MUI_MOUSEOVER_BG_COLOR].color, nullptr, nullptr);
y1 += line_height;
// draw clone text
mui.draw_text_full(container, sampletxt[4].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, m_color_table[MUI_CLONE_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr);
+ DRAW_NORMAL, m_color_table[MUI_CLONE_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr);
}
@@ -854,44 +852,39 @@ void ui_menu_rgb_ui::populate()
{
// set filter arrow
UINT32 arrow_flags = MENU_FLAG_LEFT_ARROW | MENU_FLAG_RIGHT_ARROW;
- std::string text;
std::string s_text = std::string(m_search).append("_");
if (m_lock_ref != RGB_ALPHA)
{
arrow_flags = get_arrow_flags(0, 255, m_color->a());
- strprintf(text, "%3d", m_color->a());
- item_append("Alpha", text.c_str(), arrow_flags, (void *)(FPTR)RGB_ALPHA);
+ item_append(_("Alpha"), string_format("%3d", m_color->a()).c_str(), arrow_flags, (void *)(FPTR)RGB_ALPHA);
}
else
- item_append("Alpha", s_text.c_str(), 0, (void *)(FPTR)RGB_ALPHA);
+ item_append(_("Alpha"), s_text.c_str(), 0, (void *)(FPTR)RGB_ALPHA);
if (m_lock_ref != RGB_RED)
{
arrow_flags = get_arrow_flags(0, 255, m_color->r());
- strprintf(text, "%3d", m_color->r());
- item_append("Red", text.c_str(), arrow_flags, (void *)(FPTR)RGB_RED);
+ item_append(_("Red"), string_format("%3d", m_color->r()).c_str(), arrow_flags, (void *)(FPTR)RGB_RED);
}
else
- item_append("Red", s_text.c_str(), 0, (void *)(FPTR)RGB_RED);
+ item_append(_("Red"), s_text.c_str(), 0, (void *)(FPTR)RGB_RED);
if (m_lock_ref != RGB_GREEN)
{
arrow_flags = get_arrow_flags(0, 255, m_color->g());
- strprintf(text, "%3d", m_color->g());
- item_append("Green", text.c_str(), arrow_flags, (void *)(FPTR)RGB_GREEN);
+ item_append(_("Green"), string_format("%3d", m_color->g()).c_str(), arrow_flags, (void *)(FPTR)RGB_GREEN);
}
else
- item_append("Green", s_text.c_str(), 0, (void *)(FPTR)RGB_GREEN);
+ item_append(_("Green"), s_text.c_str(), 0, (void *)(FPTR)RGB_GREEN);
if (m_lock_ref != RGB_BLUE)
{
arrow_flags = get_arrow_flags(0, 255, m_color->b());
- strprintf(text, "%3d", m_color->b());
- item_append("Blue", text.c_str(), arrow_flags, (void *)(FPTR)RGB_BLUE);
+ item_append(_("Blue"), string_format("%3d", m_color->b()).c_str(), arrow_flags, (void *)(FPTR)RGB_BLUE);
}
else
- item_append("Blue", s_text.c_str(), 0, (void *)(FPTR)RGB_BLUE);
+ item_append(_("Blue"), s_text.c_str(), 0, (void *)(FPTR)RGB_BLUE);
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
item_append(_("Choose from palette"), nullptr, 0, (void *)(FPTR)PALETTE_CHOOSE);
@@ -912,7 +905,7 @@ void ui_menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, f
// top text
std::string topbuf = std::string(m_title).append(_(" - ARGB Settings"));
mui.draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(maxwidth, width);
@@ -932,12 +925,12 @@ void ui_menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, f
// draw the text within it
mui.draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
std::string sampletxt(_("Color preview ="));
maxwidth = origx2 - origx1;
mui.draw_text_full(container, sampletxt.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(maxwidth, width);
@@ -957,7 +950,7 @@ void ui_menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, f
// draw the normal text
mui.draw_text_full(container, sampletxt.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
- DRAW_NORMAL, ARGB_WHITE, ARGB_BLACK, nullptr, nullptr);
+ DRAW_NORMAL, ARGB_WHITE, ARGB_BLACK, nullptr, nullptr);
float t_x2 = x1 - UI_BOX_LR_BORDER + maxwidth;
x1 = x2 + 2.0f * UI_BOX_LR_BORDER;
@@ -1030,23 +1023,23 @@ void ui_menu_rgb_ui::inkey_special(const ui_menu_event *m_event)
}
ui_menu_palette_sel::palcolor ui_menu_palette_sel::m_palette[] = {
- { "White", "FFFFFFFF" },
- { "Silver", "FFC0C0C0" },
- { "Gray", "FF808080" },
- { "Black", "FF000000" },
- { "Red", "FFFF0000" },
- { "Orange", "FFFFA500" },
- { "Yellow", "FFFFFF00" },
- { "Green", "FF00FF00" },
- { "Blue", "FF0000FF" },
- { "Violet", "FF8F00FF" }
+ { __("White"), "FFFFFFFF" },
+ { __("Silver"), "FFC0C0C0" },
+ { __("Gray"), "FF808080" },
+ { __("Black"), "FF000000" },
+ { __("Red"), "FFFF0000" },
+ { __("Orange"), "FFFFA500" },
+ { __("Yellow"), "FFFFFF00" },
+ { __("Green"), "FF00FF00" },
+ { __("Blue"), "FF0000FF" },
+ { __("Violet"), "FF8F00FF" }
};
//-------------------------------------------------
// ctor
//-------------------------------------------------
-ui_menu_palette_sel::ui_menu_palette_sel(running_machine &machine, render_container *container, rgb_t &_color)
+ui_menu_palette_sel::ui_menu_palette_sel(running_machine &machine, render_container *container, rgb_t &_color)
: ui_menu(machine, container), m_original(_color)
{
}
@@ -1085,7 +1078,7 @@ void ui_menu_palette_sel::handle()
void ui_menu_palette_sel::populate()
{
for (int x = 0; x < ARRAY_LENGTH(m_palette); ++x)
- item_append(m_palette[x].name, m_palette[x].argb, MENU_FLAG_UI_PALETTE, (void *)(FPTR)(x + 1));
+ item_append(_(m_palette[x].name), m_palette[x].argb, MENU_FLAG_UI_PALETTE, (void *)(FPTR)(x + 1));
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
}
diff --git a/src/emu/ui/custui.h b/src/emu/ui/custui.h
index 0a2caf8de8c..2ff13994cb6 100644
--- a/src/emu/ui/custui.h
+++ b/src/emu/ui/custui.h
@@ -68,9 +68,9 @@ private:
};
#ifdef UI_WINDOWS
- UINT16 m_actual;
- std::vector<std::string> m_fonts;
- bool m_bold, m_italic;
+ UINT16 m_actual;
+ std::vector<std::string> m_fonts;
+ bool m_bold, m_italic;
void list();
static int CALLBACK EnumFontFamiliesExProc(const LOGFONT *lpelfe, const TEXTMETRIC *lpntme, DWORD FontType, LPARAM lParam);
diff --git a/src/emu/ui/datfile.cpp b/src/emu/ui/datfile.cpp
index 9171242d072..7a5ebb57e6f 100644
--- a/src/emu/ui/datfile.cpp
+++ b/src/emu/ui/datfile.cpp
@@ -25,7 +25,7 @@ static std::string TAG_COMMAND("$cmd");
static std::string TAG_END("$end");
static std::string TAG_DRIVER("$drv");
static std::string TAG_STORY("$story");
-static std::string TAG_HISTORY_R("## REVISION:");
+static std::string TAG_HISTORY_R("## REVISION:");
static std::string TAG_MAMEINFO_R("# MAMEINFO.DAT");
static std::string TAG_MESSINFO_R("# MESSINFO.DAT");
static std::string TAG_SYSINFO_R("# This file was generated on");
@@ -540,7 +540,7 @@ int datfile_manager::index_datafile(dataindex &index, int &swcount)
}
//---------------------------------------------------------
-// parseopen - Open up file for reading
+// parseopen - Open up file for reading
//---------------------------------------------------------
bool datfile_manager::parseopen(const char *filename)
{
@@ -647,4 +647,4 @@ void datfile_manager::command_sub_menu(const game_driver *drv, std::vector<std::
menuitems.push_back(elem.first);
parseclose();
}
-} \ No newline at end of file
+}
diff --git a/src/emu/ui/datfile.h b/src/emu/ui/datfile.h
index 8002a26daf4..66d76d17501 100644
--- a/src/emu/ui/datfile.h
+++ b/src/emu/ui/datfile.h
@@ -38,7 +38,7 @@ public:
std::string rev_messinfo() const { return m_mess_rev; }
std::string rev_sysinfo() const { return m_sysinfo_rev; }
std::string rev_storyinfo() const { return m_story_rev; }
-
+
bool has_history(const game_driver *driver) { return (m_histidx.find(driver) != m_histidx.end()); }
bool has_mameinfo(const game_driver *driver) { return (m_mameidx.find(driver) != m_mameidx.end()); }
bool has_messinfo(const game_driver *driver) { return (m_messidx.find(driver) != m_messidx.end()); }
@@ -46,8 +46,8 @@ public:
bool has_sysinfo(const game_driver *driver) { return (m_sysidx.find(driver) != m_sysidx.end()); }
bool has_story(const game_driver *driver) { return (m_storyidx.find(driver) != m_storyidx.end()); }
- bool has_data(const game_driver *d)
- {
+ bool has_data(const game_driver *d)
+ {
return (has_history(d) || has_mameinfo(d) || has_messinfo(d) || has_command(d) || has_sysinfo(d) || has_story(d));
}
private:
@@ -84,8 +84,8 @@ private:
running_machine &m_machine; // reference to our machine
std::string m_fullpath;
static std::string m_history_rev, m_mame_rev, m_mess_rev, m_sysinfo_rev, m_story_rev;
- FILE *fp = nullptr;
- static bool first_run;
+ FILE *fp = nullptr;
+ static bool first_run;
};
diff --git a/src/emu/ui/datmenu.cpp b/src/emu/ui/datmenu.cpp
index ba8dde22bad..6c240311c62 100644
--- a/src/emu/ui/datmenu.cpp
+++ b/src/emu/ui/datmenu.cpp
@@ -1,4 +1,4 @@
-// license:BSD-3-Clause
+// license:BSD-3-Clause
// copyright-holders:Dankan1890
/*********************************************************************
@@ -57,7 +57,7 @@ ui_menu_dats_view::ui_menu_dats_view(running_machine &machine, render_container
if (machine.datfile().has_software(m_list, m_short, m_parent))
m_items_list.emplace_back(_("Software History"), UI_HISTORY_LOAD, machine.datfile().rev_history());
- if (swinfo && !swinfo->usage.empty())
+ if (swinfo != nullptr && !swinfo->usage.empty())
m_items_list.emplace_back(_("Software Usage"), 0, "");
}
@@ -148,12 +148,6 @@ void ui_menu_dats_view::custom_render(void *selectedref, float top, float bottom
mui.draw_text_full(container, driver.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
-
- // take off the borders
- x1 -= UI_BOX_LR_BORDER;
- x2 += UI_BOX_LR_BORDER;
- y1 -= UI_BOX_TB_BORDER;
-
maxwidth = 0;
for (auto & elem : m_items_list)
{
@@ -165,6 +159,8 @@ void ui_menu_dats_view::custom_render(void *selectedref, float top, float bottom
float space = (1.0f - maxwidth) / (m_items_list.size() * 2);
// compute our bounds
+ x1 -= UI_BOX_LR_BORDER;
+ x2 += UI_BOX_LR_BORDER;
y1 = y2 + UI_BOX_TB_BORDER;
y2 += mui.get_line_height() + 2.0f * UI_BOX_TB_BORDER;
@@ -198,7 +194,7 @@ void ui_menu_dats_view::custom_render(void *selectedref, float top, float bottom
std::string revision;
revision.assign(_("Revision: ")).append(m_items_list[actual].revision);
mui.draw_text_full(container, revision.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(origx2 - origx1, width);
@@ -218,7 +214,7 @@ void ui_menu_dats_view::custom_render(void *selectedref, float top, float bottom
// draw the text within it
mui.draw_text_full(container, revision.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
}
//-------------------------------------------------
@@ -300,4 +296,3 @@ void ui_menu_dats_view::init_items()
if (datfile.has_command(m_driver))
m_items_list.emplace_back(_("Command"), UI_COMMAND_LOAD, "");
}
-
diff --git a/src/emu/ui/datmenu.h b/src/emu/ui/datmenu.h
index f799e5fa7d0..0d2ae7d686d 100644
--- a/src/emu/ui/datmenu.h
+++ b/src/emu/ui/datmenu.h
@@ -31,7 +31,7 @@ public:
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
private:
- int actual;
+ int actual;
const game_driver *m_driver;
ui_software_info *m_swinfo;
std::string m_list, m_short, m_long, m_parent;
@@ -43,7 +43,7 @@ private:
{
list_items(std::string l, int i, std::string rev) { label = l; option = i; revision = rev; }
std::string label;
- int option;
+ int option;
std::string revision;
};
std::vector<list_items> m_items_list;
diff --git a/src/emu/ui/devctrl.h b/src/emu/ui/devctrl.h
index f7054e6279f..44cdb6d8ede 100644
--- a/src/emu/ui/devctrl.h
+++ b/src/emu/ui/devctrl.h
@@ -126,11 +126,7 @@ std::string ui_menu_device_control<_DeviceType>::current_display_name()
std::string display_name;
display_name.assign(current_device()->name());
if (count() > 1)
- {
- std::string temp;
- strprintf(temp, " %d", current_index() + 1);
- display_name.append(temp);
- }
+ display_name.append(string_format("%d", current_index() + 1));
return display_name;
}
diff --git a/src/emu/ui/devopt.cpp b/src/emu/ui/devopt.cpp
index 3d217e92025..f7c4ea2a88c 100644
--- a/src/emu/ui/devopt.cpp
+++ b/src/emu/ui/devopt.cpp
@@ -39,25 +39,25 @@ ui_menu_device_config::ui_menu_device_config(running_machine &machine, render_co
void ui_menu_device_config::populate()
{
- std::string str;
+ std::ostringstream str;
device_t *dev;
- strprintf(str,"[This option is%s currently mounted in the running system]\n\n", m_mounted ? "" : " NOT");
- strcatprintf(str,"Option: %s\n", m_option->name());
+ util::stream_format(str, "[This option is%s currently mounted in the running system]\n\n", m_mounted ? "" : " NOT");
+ util::stream_format(str, "Option: %s\n", m_option->name());
dev = const_cast<machine_config &>(machine().config()).device_add(&machine().config().root_device(), m_option->name(), m_option->devtype(), 0);
- strcatprintf(str,"Device: %s\n", dev->name());
+ util::stream_format(str, "Device: %s\n", dev->name());
if (!m_mounted)
- str.append("\nIf you select this option, the following items will be enabled:\n");
+ str << "\nIf you select this option, the following items will be enabled:\n";
else
- str.append("\nThe selected option enables the following items:\n");
+ str << "\nThe selected option enables the following items:\n";
// loop over all CPUs
execute_interface_iterator execiter(*dev);
if (execiter.count() > 0)
{
- str.append("* CPU:\n");
+ str << "* CPU:\n";
std::unordered_set<std::string> exectags;
for (device_execute_interface *exec = execiter.first(); exec != nullptr; exec = execiter.next())
{
@@ -80,16 +80,16 @@ void ui_menu_device_config::populate()
// if more than one, prepend a #x in front of the CPU name
if (count > 1)
- strcatprintf(str," %d" UTF8_MULTIPLY, count);
+ util::stream_format(str, " %d" UTF8_MULTIPLY, count);
else
- str.append(" ");
- str.append(name);
+ str << " ";
+ str << name;
// display clock in kHz or MHz
if (clock >= 1000000)
- strcatprintf(str," %d.%06d" UTF8_NBSP "MHz\n", clock / 1000000, clock % 1000000);
+ util::stream_format(str, " %d.%06d" UTF8_NBSP "MHz\n", clock / 1000000, clock % 1000000);
else
- strcatprintf(str," %d.%03d" UTF8_NBSP "kHz\n", clock / 1000, clock % 1000);
+ util::stream_format(str, " %d.%03d" UTF8_NBSP "kHz\n", clock / 1000, clock % 1000);
}
}
@@ -97,18 +97,18 @@ void ui_menu_device_config::populate()
screen_device_iterator scriter(*dev);
if (scriter.count() > 0)
{
- str.append("* Video:\n");
+ str << "* Video:\n";
for (screen_device *screen = scriter.first(); screen != nullptr; screen = scriter.next())
{
- strcatprintf(str," Screen '%s': ", screen->tag());
+ util::stream_format(str, " Screen '%s': ", screen->tag());
if (screen->screen_type() == SCREEN_TYPE_VECTOR)
- str.append("Vector\n");
+ str << "Vector\n";
else
{
const rectangle &visarea = screen->visible_area();
- strcatprintf(str,"%d " UTF8_MULTIPLY " %d (%s) %f" UTF8_NBSP "Hz\n",
+ util::stream_format(str, "%d " UTF8_MULTIPLY " %d (%s) %f" UTF8_NBSP "Hz\n",
visarea.width(), visarea.height(),
(machine().system().flags & ORIENTATION_SWAP_XY) ? "V" : "H",
ATTOSECONDS_TO_HZ(screen->frame_period().attoseconds()));
@@ -120,7 +120,7 @@ void ui_menu_device_config::populate()
sound_interface_iterator snditer(*dev);
if (snditer.count() > 0)
{
- str.append("* Sound:\n");
+ str << "* Sound:\n";
std::unordered_set<std::string> soundtags;
for (device_sound_interface *sound = snditer.first(); sound != nullptr; sound = snditer.next())
{
@@ -138,19 +138,19 @@ void ui_menu_device_config::populate()
}
// if more than one, prepend a #x in front of the CPU name
if (count > 1)
- strcatprintf(str," %d" UTF8_MULTIPLY, count);
+ util::stream_format(str," %d" UTF8_MULTIPLY, count);
else
- str.append(" ");
- str.append(sound->device().name());
+ str << " ";
+ str << sound->device().name();
// display clock in kHz or MHz
int clock = sound->device().clock();
if (clock >= 1000000)
- strcatprintf(str," %d.%06d" UTF8_NBSP "MHz\n", clock / 1000000, clock % 1000000);
+ util::stream_format(str," %d.%06d" UTF8_NBSP "MHz\n", clock / 1000000, clock % 1000000);
else if (clock != 0)
- strcatprintf(str," %d.%03d" UTF8_NBSP "kHz\n", clock / 1000, clock % 1000);
+ util::stream_format(str," %d.%03d" UTF8_NBSP "kHz\n", clock / 1000, clock % 1000);
else
- str.append("\n");
+ str << '\n';
}
}
@@ -176,12 +176,13 @@ void ui_menu_device_config::populate()
}
if (bios)
- strcatprintf(str,"* BIOS settings:\n %d options [default: %s]\n", bios, bios_str.c_str());
+ util::stream_format(str, "* BIOS settings:\n %d options [default: %s]\n", bios, bios_str.c_str());
}
int input = 0, input_mj = 0, input_hana = 0, input_gamble = 0, input_analog = 0, input_adjust = 0;
int input_keypad = 0, input_keyboard = 0, dips = 0, confs = 0;
- std::string errors, dips_opt, confs_opt;
+ std::string errors;
+ std::ostringstream dips_opt, confs_opt;
ioport_list portlist;
device_iterator iptiter(*dev);
for (device_t *iptdev = iptiter.first(); iptdev != nullptr; iptdev = iptiter.next())
@@ -210,12 +211,12 @@ void ui_menu_device_config::populate()
else if (field->type() == IPT_DIPSWITCH)
{
dips++;
- dips_opt.append(" ").append(field->name());
+ dips_opt << " " << field->name();
for (ioport_setting *setting = field->first_setting(); setting != nullptr; setting = setting->next())
{
if (setting->value() == field->defvalue())
{
- strcatprintf(dips_opt, " [default: %s]\n", setting->name());
+ util::stream_format(dips_opt, " [default: %s]\n", setting->name());
break;
}
}
@@ -223,12 +224,12 @@ void ui_menu_device_config::populate()
else if (field->type() == IPT_CONFIG)
{
confs++;
- confs_opt.append(" ").append(field->name());
+ confs_opt << " " << field->name();
for (ioport_setting *setting = field->first_setting(); setting != nullptr; setting = setting->next())
{
if (setting->value() == field->defvalue())
{
- strcatprintf(confs_opt," [default: %s]\n", setting->name());
+ util::stream_format(confs_opt, " [default: %s]\n", setting->name());
break;
}
}
@@ -236,50 +237,50 @@ void ui_menu_device_config::populate()
}
if (dips)
- str.append("* Dispwitch settings:\n").append(dips_opt);
+ str << "* Dispwitch settings:\n" << dips_opt.str();
if (confs)
- str.append("* Configuration settings:\n").append(confs_opt);
+ str << "* Configuration settings:\n" << confs_opt.str();
if (input + input_mj + input_hana + input_gamble + input_analog + input_adjust + input_keypad + input_keyboard)
- str.append("* Input device(s):\n");
+ str << "* Input device(s):\n";
if (input)
- strcatprintf(str," User inputs [%d inputs]\n", input);
+ util::stream_format(str, " User inputs [%d inputs]\n", input);
if (input_mj)
- strcatprintf(str," Mahjong inputs [%d inputs]\n", input_mj);
+ util::stream_format(str, " Mahjong inputs [%d inputs]\n", input_mj);
if (input_hana)
- strcatprintf(str," Hanafuda inputs [%d inputs]\n", input_hana);
+ util::stream_format(str, " Hanafuda inputs [%d inputs]\n", input_hana);
if (input_gamble)
- strcatprintf(str," Gambling inputs [%d inputs]\n", input_gamble);
+ util::stream_format(str, " Gambling inputs [%d inputs]\n", input_gamble);
if (input_analog)
- strcatprintf(str," Analog inputs [%d inputs]\n", input_analog);
+ util::stream_format(str, " Analog inputs [%d inputs]\n", input_analog);
if (input_adjust)
- strcatprintf(str," Adjuster inputs [%d inputs]\n", input_adjust);
+ util::stream_format(str, " Adjuster inputs [%d inputs]\n", input_adjust);
if (input_keypad)
- strcatprintf(str," Keypad inputs [%d inputs]\n", input_keypad);
+ util::stream_format(str, " Keypad inputs [%d inputs]\n", input_keypad);
if (input_keyboard)
- strcatprintf(str," Keyboard inputs [%d inputs]\n", input_keyboard);
+ util::stream_format(str, " Keyboard inputs [%d inputs]\n", input_keyboard);
image_interface_iterator imgiter(*dev);
if (imgiter.count() > 0)
{
- str.append("* Media Options:\n");
+ str << "* Media Options:\n";
for (const device_image_interface *imagedev = imgiter.first(); imagedev != nullptr; imagedev = imgiter.next())
- strcatprintf(str," %s [tag: %s]\n", imagedev->image_type_name(), imagedev->device().tag());
+ util::stream_format(str, " %s [tag: %s]\n", imagedev->image_type_name(), imagedev->device().tag());
}
slot_interface_iterator slotiter(*dev);
if (slotiter.count() > 0)
{
- str.append("* Slot Options:\n");
+ str << "* Slot Options:\n";
for (const device_slot_interface *slot = slotiter.first(); slot != nullptr; slot = slotiter.next())
- strcatprintf(str," %s [default: %s]\n", slot->device().tag(), slot->default_option() ? slot->default_option() : "----");
+ util::stream_format(str, " %s [default: %s]\n", slot->device().tag(), slot->default_option() ? slot->default_option() : "----");
}
if ((execiter.count() + scriter.count() + snditer.count() + imgiter.count() + slotiter.count() + bios + dips + confs
+ input + input_mj + input_hana + input_gamble + input_analog + input_adjust + input_keypad + input_keyboard) == 0)
- str.append("[None]\n");
+ str << "[None]\n";
const_cast<machine_config &>(machine().config()).device_remove(&machine().config().root_device(), m_option->name());
- item_append(str.c_str(), nullptr, MENU_FLAG_MULTILINE, nullptr);
+ item_append(str.str().c_str(), nullptr, MENU_FLAG_MULTILINE, nullptr);
}
void ui_menu_device_config::handle()
diff --git a/src/emu/ui/dirmenu.cpp b/src/emu/ui/dirmenu.cpp
index f1cc16bae0b..a24a0041653 100644
--- a/src/emu/ui/dirmenu.cpp
+++ b/src/emu/ui/dirmenu.cpp
@@ -1,5 +1,5 @@
-// license:BSD-3-Clause
-// copyright-holders:Dankan1890
+// license:BSD-3-Clause
+// copyright-holders:Maurizio Petrarota
/*********************************************************************
ui/dirmenu.cpp
@@ -32,7 +32,7 @@ static const folders_entry s_folders[] =
{ __("UI"), OPTION_UI_PATH, CHANGE },
{ __("Language"), OPTION_LANGUAGEPATH, CHANGE },
{ __("Samples"), OPTION_SAMPLEPATH, ADDING },
- { __("DATs"), OPTION_HISTORY_PATH, CHANGE },
+ { __("DATs"), OPTION_HISTORY_PATH, ADDING },
{ __("INIs"), OPTION_INIPATH, ADDING },
{ __("Extra INIs"), OPTION_EXTRAINI_PATH, CHANGE },
{ __("Icons"), OPTION_ICONS_PATH, ADDING },
@@ -73,6 +73,7 @@ ui_menu_directory::~ui_menu_directory()
{
save_ui_options(machine());
ui_globals::reset = true;
+ machine().datfile().reset_run();
}
//-------------------------------------------------
@@ -180,12 +181,11 @@ void ui_menu_display_actual::handle()
void ui_menu_display_actual::populate()
{
m_tempbuf.assign(_("Current ")).append(_(s_folders[m_ref].name)).append(_(" Folders"));
- if (machine().ui().options().exists(s_folders[m_ref].option)) {
+ if (machine().ui().options().exists(s_folders[m_ref].option))
m_searchpath.assign(machine().ui().options().value(s_folders[m_ref].option));
- }
- else {
+ else
m_searchpath.assign(machine().options().value(s_folders[m_ref].option));
- }
+
path_iterator path(m_searchpath.c_str());
std::string curpath;
m_folders.clear();
@@ -286,19 +286,14 @@ ui_menu_add_change_folder::ui_menu_add_change_folder(running_machine &machine, r
std::string searchpath;
if (machine.ui().options().exists(s_folders[m_ref].option))
- {
searchpath = machine.ui().options().value(s_folders[m_ref].option);
- }
else
- {
searchpath = machine.options().value(s_folders[m_ref].option);
- }
path_iterator path(searchpath.c_str());
std::string curpath;
while (path.next(curpath, nullptr))
m_folders.push_back(curpath);
-
}
ui_menu_add_change_folder::~ui_menu_add_change_folder()
@@ -373,16 +368,11 @@ void ui_menu_add_change_folder::handle()
if (m_change)
{
if (machine().ui().options().exists(s_folders[m_ref].option))
- {
machine().ui().options().set_value(s_folders[m_ref].option, m_current_path.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
- }
- else
+ else if (strcmp(machine().options().value(s_folders[m_ref].option), m_current_path.c_str()) != 0)
{
- if (strcmp(machine().options().value(s_folders[m_ref].option), m_current_path.c_str()) != 0)
- {
- machine().options().set_value(s_folders[m_ref].option, m_current_path.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
- machine().options().mark_changed(s_folders[m_ref].option);
- }
+ machine().options().set_value(s_folders[m_ref].option, m_current_path.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
+ machine().options().mark_changed(s_folders[m_ref].option);
}
machine().datfile().reset_run();
}
@@ -398,16 +388,11 @@ void ui_menu_add_change_folder::handle()
}
if (machine().ui().options().exists(s_folders[m_ref].option))
- {
machine().ui().options().set_value(s_folders[m_ref].option, tmppath.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
- }
- else
+ else if (strcmp(machine().options().value(s_folders[m_ref].option), tmppath.c_str()) != 0)
{
- if (strcmp(machine().options().value(s_folders[m_ref].option), tmppath.c_str()) != 0)
- {
- machine().options().set_value(s_folders[m_ref].option, tmppath.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
- machine().options().mark_changed(s_folders[m_ref].option);
- }
+ machine().options().set_value(s_folders[m_ref].option, tmppath.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
+ machine().options().mark_changed(s_folders[m_ref].option);
}
}
@@ -477,13 +462,13 @@ void ui_menu_add_change_folder::handle()
void ui_menu_add_change_folder::populate()
{
// open a path
- const char *volume_name;
+ const char *volume_name = nullptr;
file_enumerator path(m_current_path.c_str());
const osd_directory_entry *dirent;
int folders_count = 0;
// add the drives
- for (int i = 0; (volume_name = osd_get_volume_name(i)) != nullptr; i++)
+ for (int i = 0; (volume_name = osd_get_volume_name(i)) != nullptr; ++i)
item_append(volume_name, "[DRIVE]", 0, (void *)(FPTR)++folders_count);
// add the directories
@@ -608,25 +593,20 @@ void ui_menu_remove_folder::handle()
if (m_event != nullptr && m_event->itemref != nullptr && m_event->iptkey == IPT_UI_SELECT)
{
std::string tmppath, error_string;
+ m_folders.erase(m_folders.begin() + selected);
for (int x = 0; x < m_folders.size(); ++x)
{
- if (x != selected)
- tmppath.append(m_folders[x]);
+ tmppath.append(m_folders[x]);
if (x < m_folders.size() - 1)
tmppath.append(";");
}
if (machine().ui().options().exists(s_folders[m_ref].option))
- {
machine().ui().options().set_value(s_folders[m_ref].option, tmppath.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
- }
- else
+ else if (strcmp(machine().options().value(s_folders[m_ref].option),tmppath.c_str())!=0)
{
- if (strcmp(machine().options().value(s_folders[m_ref].option),tmppath.c_str())!=0)
- {
- machine().options().set_value(s_folders[m_ref].option, tmppath.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
- machine().options().mark_changed(s_folders[m_ref].option);
- }
+ machine().options().set_value(s_folders[m_ref].option, tmppath.c_str(), OPTION_PRIORITY_CMDLINE, error_string);
+ machine().options().mark_changed(s_folders[m_ref].option);
}
ui_menu::menu_stack->parent->reset(UI_MENU_RESET_REMEMBER_REF);
@@ -645,7 +625,6 @@ void ui_menu_remove_folder::populate()
item_append(elem.c_str(), nullptr, 0, (void *)(FPTR)++folders_count);
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
-
customtop = machine().ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER;
}
diff --git a/src/emu/ui/dsplmenu.cpp b/src/emu/ui/dsplmenu.cpp
index 93cf3771133..ed443815b25 100644
--- a/src/emu/ui/dsplmenu.cpp
+++ b/src/emu/ui/dsplmenu.cpp
@@ -1,4 +1,4 @@
-// license:BSD-3-Clause
+// license:BSD-3-Clause
// copyright-holders:Dankan1890
/*********************************************************************
@@ -23,10 +23,10 @@
ui_menu_display_options::video_modes ui_menu_display_options::m_video = {
- { "auto", "Auto" },
- { "opengl", "OpenGL" },
- { "bgfx", "BGFX" },
- { "d3d", "Direct3D" },
+ { "auto", "Auto" },
+ { "opengl", "OpenGL" },
+ { "bgfx", "BGFX" },
+ { "d3d", "Direct3D" },
{ "gdi", "GDI" },
{ "ddraw", "DirectDraw" },
{ "soft", "Software" },
@@ -35,21 +35,21 @@ ui_menu_display_options::video_modes ui_menu_display_options::m_video = {
ui_menu_display_options::dspl_option ui_menu_display_options::m_options[] = {
{ 0, nullptr, nullptr },
- { 0, "Video Mode", OSDOPTION_VIDEO },
+ { 0, __("Video Mode"), OSDOPTION_VIDEO },
#if defined(UI_WINDOWS) && !defined(UI_SDL)
- { 0, "Hardware Stretch", WINOPTION_HWSTRETCH },
- { 0, "Triple Buffering", WINOPTION_TRIPLEBUFFER },
- { 0, "HLSL", WINOPTION_HLSL_ENABLE },
+ { 0, __("Hardware Stretch"), WINOPTION_HWSTRETCH },
+ { 0, __("Triple Buffering"), WINOPTION_TRIPLEBUFFER },
+ { 0, __("HLSL"), WINOPTION_HLSL_ENABLE },
#endif
- { 0, "GLSL", OSDOPTION_GL_GLSL },
- { 0, "Bilinear Filtering", OSDOPTION_FILTER },
- { 0, "Bitmap Prescaling", OSDOPTION_PRESCALE },
- { 0, "Multi-Threaded Rendering", OSDOPTION_MULTITHREADING },
- { 0, "Window Mode", OSDOPTION_WINDOW },
- { 0, "Enforce Aspect Ratio", OSDOPTION_KEEPASPECT },
- { 0, "Start Out Maximized", OSDOPTION_MAXIMIZE },
- { 0, "Synchronized Refresh", OSDOPTION_SYNCREFRESH },
- { 0, "Wait Vertical Sync", OSDOPTION_WAITVSYNC }
+ { 0, __("GLSL"), OSDOPTION_GL_GLSL },
+ { 0, __("Bilinear Filtering"), OSDOPTION_FILTER },
+ { 0, __("Bitmap Prescaling"), OSDOPTION_PRESCALE },
+ { 0, __("Multi-Threaded Rendering"), OSDOPTION_MULTITHREADING },
+ { 0, __("Window Mode"), OSDOPTION_WINDOW },
+ { 0, __("Enforce Aspect Ratio"), OSDOPTION_KEEPASPECT },
+ { 0, __("Start Out Maximized"), OSDOPTION_MAXIMIZE },
+ { 0, __("Synchronized Refresh"), OSDOPTION_SYNCREFRESH },
+ { 0, __("Wait Vertical Sync"), OSDOPTION_WAITVSYNC }
};
@@ -107,20 +107,20 @@ ui_menu_display_options::ui_menu_display_options(running_machine &machine, rende
ui_menu_display_options::~ui_menu_display_options()
{
std::string error_string;
- for (int d = 2; d < ARRAY_LENGTH(m_options); ++d)
+ for (int d = 2; d < ARRAY_LENGTH(m_options); ++d)
{
if (machine().options().int_value(m_options[d].option) != m_options[d].status)
{
machine().options().set_value(m_options[d].option, m_options[d].status, OPTION_PRIORITY_CMDLINE, error_string);
machine().options().mark_changed(m_options[d].option);
- }
+ }
}
if (machine().options().value(m_options[1].option) != m_list[m_options[1].status])
{
machine().options().set_value(m_options[1].option, m_list[m_options[1].status].c_str(), OPTION_PRIORITY_CMDLINE, error_string);
machine().options().mark_changed(m_options[1].option);
- }
+ }
ui_globals::reset = true;
}
@@ -176,18 +176,17 @@ void ui_menu_display_options::populate()
// add video mode option
std::string v_text(m_video[m_list[m_options[1].status]]);
UINT32 arrow_flags = get_arrow_flags(0, m_list.size() - 1, m_options[1].status);
- item_append(m_options[1].description, v_text.c_str(), arrow_flags, (void *)(FPTR)1);
+ item_append(_(m_options[1].description), v_text.c_str(), arrow_flags, (void *)(FPTR)1);
// add options items
for (int opt = 2; opt < ARRAY_LENGTH(m_options); ++opt)
if (strcmp(m_options[opt].option, OSDOPTION_PRESCALE) != 0)
- item_append(m_options[opt].description, m_options[opt].status ? "On" : "Off",
+ item_append(_(m_options[opt].description), m_options[opt].status ? _("On") : _("Off"),
m_options[opt].status ? MENU_FLAG_RIGHT_ARROW : MENU_FLAG_LEFT_ARROW, (void *)(FPTR)opt);
else
{
- strprintf(v_text, "%d", m_options[opt].status);
arrow_flags = get_arrow_flags(1, 3, m_options[opt].status);
- item_append(m_options[opt].description, v_text.c_str(), arrow_flags, (void *)(FPTR)opt);
+ item_append(_(m_options[opt].description), string_format("%d", m_options[opt].status).c_str(), arrow_flags, (void *)(FPTR)opt);
}
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
diff --git a/src/emu/ui/filemngr.cpp b/src/emu/ui/filemngr.cpp
index cccc92888c4..d46199793ce 100644
--- a/src/emu/ui/filemngr.cpp
+++ b/src/emu/ui/filemngr.cpp
@@ -68,7 +68,7 @@ void ui_menu_file_manager::custom_render(void *selectedref, float top, float bot
void ui_menu_file_manager::fill_image_line(device_image_interface *img, std::string &instance, std::string &filename)
{
// get the image type/id
- strprintf(instance,"%s (%s)", img->instance_name(), img->brief_instance_name());
+ instance = string_format("%s (%s)", img->instance_name(), img->brief_instance_name());
// get the base name
if (img->basename() != nullptr)
@@ -103,7 +103,7 @@ void ui_menu_file_manager::fill_image_line(device_image_interface *img, std::str
void ui_menu_file_manager::populate()
{
- std::string buffer, tmp_inst, tmp_name;
+ std::string tmp_inst, tmp_name;
bool first_entry = true;
if (!m_warnings.empty())
@@ -140,8 +140,7 @@ void ui_menu_file_manager::populate()
first_entry = false;
else
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
- strprintf(buffer, "[root%s]", dev->tag());
- item_append(buffer.c_str(), nullptr, 0, nullptr);
+ item_append(string_format("[root%s]", dev->tag()).c_str(), nullptr, 0, nullptr);
tag_appended = true;
}
// finally, append the image interface to the menu
diff --git a/src/emu/ui/filesel.cpp b/src/emu/ui/filesel.cpp
index e757f537044..18555c4809b 100644
--- a/src/emu/ui/filesel.cpp
+++ b/src/emu/ui/filesel.cpp
@@ -156,10 +156,10 @@ ui_menu_confirm_save_as::~ui_menu_confirm_save_as()
void ui_menu_confirm_save_as::populate()
{
- item_append("File Already Exists - Override?", nullptr, MENU_FLAG_DISABLE, nullptr);
+ item_append(_("File Already Exists - Override?"), nullptr, MENU_FLAG_DISABLE, nullptr);
item_append(MENU_SEPARATOR_ITEM, nullptr, MENU_FLAG_DISABLE, nullptr);
- item_append("No", nullptr, 0, ITEMREF_NO);
- item_append("Yes", nullptr, 0, ITEMREF_YES);
+ item_append(_("No"), nullptr, 0, ITEMREF_NO);
+ item_append(_("Yes"), nullptr, 0, ITEMREF_YES);
}
//-------------------------------------------------
@@ -268,19 +268,19 @@ void ui_menu_file_create::populate()
{
new_image_name = m_filename_buffer;
}
- item_append("New Image Name:", new_image_name, 0, ITEMREF_NEW_IMAGE_NAME);
+ item_append(_("New Image Name:"), new_image_name, 0, ITEMREF_NEW_IMAGE_NAME);
// do we support multiple formats?
if (ENABLE_FORMATS) format = m_image->formatlist();
if (ENABLE_FORMATS && (format != nullptr))
{
- item_append("Image Format:", m_current_format->description(), 0, ITEMREF_FORMAT);
+ item_append(_("Image Format:"), m_current_format->description(), 0, ITEMREF_FORMAT);
m_current_format = format;
}
// finish up the menu
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
- item_append("Create", nullptr, 0, ITEMREF_CREATE);
+ item_append(_("Create"), nullptr, 0, ITEMREF_CREATE);
customtop = machine().ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER;
}
@@ -311,7 +311,7 @@ void ui_menu_file_create::handle()
ui_menu::stack_pop(machine());
}
else
- machine().ui().popup_time(1, "Please enter a file extension too");
+ machine().ui().popup_time(1, "%s", _("Please enter a file extension too"));
}
break;
@@ -499,15 +499,15 @@ void ui_menu_file_selector::append_entry_menu_item(const file_selector_entry *en
switch(entry->type)
{
case SELECTOR_ENTRY_TYPE_EMPTY:
- text = "[empty slot]";
+ text = _("[empty slot]");
break;
case SELECTOR_ENTRY_TYPE_CREATE:
- text = "[create]";
+ text = _("[create]");
break;
case SELECTOR_ENTRY_TYPE_SOFTWARE_LIST:
- text = "[software list]";
+ text = _("[software list]");
break;
case SELECTOR_ENTRY_TYPE_DRIVE:
@@ -799,7 +799,7 @@ ui_menu_select_format::~ui_menu_select_format()
void ui_menu_select_format::populate()
{
- item_append("Select image format", nullptr, MENU_FLAG_DISABLE, nullptr);
+ item_append(_("Select image format"), nullptr, MENU_FLAG_DISABLE, nullptr);
for (int i = 0; i < m_total_usable; i++)
{
const floppy_image_format_t *fmt = m_formats[i];
@@ -859,12 +859,12 @@ ui_menu_select_rw::~ui_menu_select_rw()
void ui_menu_select_rw::populate()
{
- item_append("Select access mode", nullptr, MENU_FLAG_DISABLE, nullptr);
- item_append("Read-only", nullptr, 0, (void *)READONLY);
+ item_append(_("Select access mode"), nullptr, MENU_FLAG_DISABLE, nullptr);
+ item_append(_("Read-only"), nullptr, 0, (void *)READONLY);
if (m_can_in_place)
- item_append("Read-write", nullptr, 0, (void *)READWRITE);
- item_append("Read this image, write to another image", nullptr, 0, (void *)WRITE_OTHER);
- item_append("Read this image, write to diff", nullptr, 0, (void *)WRITE_DIFF);
+ item_append(_("Read-write"), nullptr, 0, (void *)READWRITE);
+ item_append(_("Read this image, write to another image"), nullptr, 0, (void *)WRITE_OTHER);
+ item_append(_("Read this image, write to diff"), nullptr, 0, (void *)WRITE_DIFF);
}
diff --git a/src/emu/ui/imgcntrl.cpp b/src/emu/ui/imgcntrl.cpp
index 8f3dbeca75b..3b96f63971e 100644
--- a/src/emu/ui/imgcntrl.cpp
+++ b/src/emu/ui/imgcntrl.cpp
@@ -112,7 +112,7 @@ void ui_menu_control_device_image::test_create(bool &can_create, bool &need_conf
case ENTTYPE_DIR:
/* a directory exists here - we can't save over it */
- machine().ui().popup_time(5, "Cannot save over directory");
+ machine().ui().popup_time(5, "%s", _("Cannot save over directory"));
can_create = false;
need_confirm = false;
break;
@@ -146,7 +146,7 @@ void ui_menu_control_device_image::load_software_part()
hook_load(temp_name, true);
else
{
- machine().popmessage("The software selected is missing one or more required ROM or CHD images. Please select a different one.");
+ machine().popmessage(_("The software selected is missing one or more required ROM or CHD images. Please select a different one."));
state = SELECT_SOFTLIST;
}
}
diff --git a/src/emu/ui/info.cpp b/src/emu/ui/info.cpp
index 0b198769b15..8c202f77e91 100644
--- a/src/emu/ui/info.cpp
+++ b/src/emu/ui/info.cpp
@@ -85,23 +85,20 @@ void ui_menu_image_info::image_info(device_image_interface *image)
// if image has been loaded through softlist, let's add some more info
if (image->software_entry())
{
- std::string str;
-
// display long filename
item_append(image->longname(), "", MENU_FLAG_DISABLE, nullptr);
// display manufacturer and year
- strcatprintf(str, "%s, %s", image->manufacturer(), image->year());
- item_append(str.c_str(), "", MENU_FLAG_DISABLE, nullptr);
+ item_append(string_format("%s, %s", image->manufacturer(), image->year()).c_str(), "", MENU_FLAG_DISABLE, nullptr);
// display supported information, if available
switch (image->supported())
{
case SOFTWARE_SUPPORTED_NO:
- item_append("Not supported", "", MENU_FLAG_DISABLE, nullptr);
+ item_append(_("Not supported"), "", MENU_FLAG_DISABLE, nullptr);
break;
case SOFTWARE_SUPPORTED_PARTIAL:
- item_append("Partially supported", "", MENU_FLAG_DISABLE, nullptr);
+ item_append(_("Partially supported"), "", MENU_FLAG_DISABLE, nullptr);
break;
default:
break;
@@ -109,6 +106,6 @@ void ui_menu_image_info::image_info(device_image_interface *image)
}
}
else
- item_append(image->brief_instance_name(), "[empty]", 0, nullptr);
+ item_append(image->brief_instance_name(), _("[empty]"), 0, nullptr);
item_append("", nullptr, MENU_FLAG_DISABLE, nullptr);
}
diff --git a/src/emu/ui/info_pty.cpp b/src/emu/ui/info_pty.cpp
index e0e44fa7833..06497b876bb 100644
--- a/src/emu/ui/info_pty.cpp
+++ b/src/emu/ui/info_pty.cpp
@@ -23,7 +23,7 @@ ui_menu_pty_info::~ui_menu_pty_info()
void ui_menu_pty_info::populate()
{
- item_append("Pseudo terminals", nullptr, MENU_FLAG_DISABLE, nullptr);
+ item_append(_("Pseudo terminals"), nullptr, MENU_FLAG_DISABLE, nullptr);
item_append("", nullptr, MENU_FLAG_DISABLE, nullptr);
pty_interface_iterator iter(machine().root_device());
@@ -32,7 +32,7 @@ void ui_menu_pty_info::populate()
if (pty->is_open()) {
item_append(port_name , pty->slave_name() , MENU_FLAG_DISABLE , nullptr);
} else {
- item_append(port_name , "[failed]" , MENU_FLAG_DISABLE , nullptr);
+ item_append(port_name , _("[failed]") , MENU_FLAG_DISABLE , nullptr);
}
item_append("", nullptr, MENU_FLAG_DISABLE, nullptr);
}
diff --git a/src/emu/ui/inifile.cpp b/src/emu/ui/inifile.cpp
index 1c92b43a4d6..8958fe4cd3b 100644
--- a/src/emu/ui/inifile.cpp
+++ b/src/emu/ui/inifile.cpp
@@ -142,7 +142,7 @@ void inifile_manager::load_ini_category(std::vector<int> &temp_filter)
}
//---------------------------------------------------------
-// parseopen - Open up file for reading
+// parseopen - Open up file for reading
//---------------------------------------------------------
bool inifile_manager::parseopen(const char *filename)
@@ -303,7 +303,7 @@ bool favorite_manager::isgame_favorite()
image_loaded = true;
for (size_t current = 0; current < m_list.size(); current++)
if (m_list[current].shortname == swinfo->shortname() &&
- m_list[current].listname == image->software_list_name())
+ m_list[current].listname == image->software_list_name())
{
m_current = current;
return true;
@@ -428,27 +428,28 @@ void favorite_manager::save_favorite_games()
}
// generate the favorite INI
- std::string text("[ROOT_FOLDER]\n[Favorite]\n\n");
+ std::ostringstream text;
+ text << "[ROOT_FOLDER]\n[Favorite]\n\n";
for (auto & elem : m_list)
{
- text += elem.shortname + "\n";
- text += elem.longname + "\n";
- text += elem.parentname + "\n";
- text += elem.year + "\n";
- text += elem.publisher + "\n";
- strcatprintf(text, "%d\n", elem.supported);
- text += elem.part + "\n";
- strcatprintf(text, "%s\n", elem.driver->name);
- text += elem.listname + "\n";
- text += elem.interface + "\n";
- text += elem.instance + "\n";
- strcatprintf(text, "%d\n", elem.startempty);
- text += elem.parentlongname + "\n";
- text += elem.usage + "\n";
- text += elem.devicetype + "\n";
- strcatprintf(text, "%d\n", elem.available);
+ text << elem.shortname << '\n';
+ text << elem.longname << '\n';
+ text << elem.parentname << '\n';
+ text << elem.year << '\n';
+ text << elem.publisher << '\n';
+ util::stream_format(text, "%d\n", elem.supported);
+ text << elem.part << '\n';
+ util::stream_format(text, "%s\n", elem.driver->name);
+ text << elem.listname << '\n';
+ text << elem.interface << '\n';
+ text << elem.instance << '\n';
+ util::stream_format(text, "%d\n", elem.startempty);
+ text << elem.parentlongname << '\n';
+ text << elem.usage << '\n';
+ text << elem.devicetype << '\n';
+ util::stream_format(text, "%d\n", elem.available);
}
- file.puts(text.c_str());
+ file.puts(text.str().c_str());
file.close();
}
}
diff --git a/src/emu/ui/inifile.h b/src/emu/ui/inifile.h
index 5a90b0d3d83..5c9e7ebdc65 100644
--- a/src/emu/ui/inifile.h
+++ b/src/emu/ui/inifile.h
@@ -70,7 +70,7 @@ private:
// internal state
running_machine &m_machine; // reference to our machine
std::string m_fullpath;
- FILE *fp = nullptr;
+ FILE *fp = nullptr;
};
//-------------------------------------------------
@@ -108,7 +108,7 @@ public:
private:
const char *favorite_filename = "favorites.ini";
-
+
// current
int m_current;
diff --git a/src/emu/ui/inputmap.cpp b/src/emu/ui/inputmap.cpp
index f3ffe9b0e59..5ecb4546cce 100644
--- a/src/emu/ui/inputmap.cpp
+++ b/src/emu/ui/inputmap.cpp
@@ -49,14 +49,14 @@ void ui_menu_input_groups::populate()
int player;
/* build up the menu */
- item_append("User Interface", nullptr, 0, (void *)(IPG_UI + 1));
+ item_append(_("User Interface"), nullptr, 0, (void *)(IPG_UI + 1));
for (player = 0; player < MAX_PLAYERS; player++)
{
char buffer[40];
sprintf(buffer, "Player %d Controls", player + 1);
item_append(buffer, nullptr, 0, (void *)(FPTR)(IPG_PLAYER1 + player + 1));
}
- item_append("Other Controls", nullptr, 0, (void *)(FPTR)(IPG_OTHER + 1));
+ item_append(_("Other Controls"), nullptr, 0, (void *)(FPTR)(IPG_OTHER + 1));
}
ui_menu_input_groups::~ui_menu_input_groups()
@@ -379,7 +379,6 @@ void ui_menu_input::populate_and_sort(input_item_data *itemlist)
const char *nameformat[INPUT_TYPE_TOTAL] = { nullptr };
input_item_data **itemarray, *item;
int numitems = 0, curitem;
- std::string text;
std::string subtext;
std::string prev_owner;
bool first_entry = true;
@@ -417,12 +416,11 @@ void ui_menu_input::populate_and_sort(input_item_data *itemlist)
first_entry = false;
else
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
- strprintf(text, "[root%s]", item->owner_name);
- item_append(text.c_str(), nullptr, 0, nullptr);
+ item_append(string_format("[root%s]", item->owner_name).c_str(), nullptr, 0, nullptr);
prev_owner.assign(item->owner_name);
}
- strprintf(text, nameformat[item->type], item->name);
+ std::string text = string_format(nameformat[item->type], item->name);
/* if we're polling this item, use some spaces with left/right arrows */
if (pollingref == item->ref)
@@ -556,7 +554,6 @@ void ui_menu_settings::populate()
if (field->type() == type && field->enabled())
{
UINT32 flags = 0;
- std::string name;
/* set the left/right flags appropriately */
if (field->has_previous_setting())
@@ -571,14 +568,12 @@ void ui_menu_settings::populate()
first_entry = false;
else
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
- strprintf(name, "[root%s]", field->device().tag());
- item_append(name.c_str(), nullptr, 0, nullptr);
+ string_format("[root%s]", field->device().tag());
+ item_append(string_format("[root%s]", field->device().tag()).c_str(), nullptr, 0, nullptr);
prev_owner.assign(field->device().tag());
}
- name.assign(field->name());
-
- item_append(name.c_str(), field->setting_name(), flags, (void *)field);
+ item_append(field->name(), field->setting_name(), flags, (void *)field);
/* for DIP switches, build up the model */
if (type == IPT_DIPSWITCH && field->first_diplocation() != nullptr)
@@ -627,7 +622,7 @@ void ui_menu_settings::populate()
custombottom = dipcount ? dipcount * (DIP_SWITCH_HEIGHT + DIP_SWITCH_SPACING) + DIP_SWITCH_SPACING : 0;
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
- item_append("Reset", nullptr, 0, (void *)1);
+ item_append(_("Reset"), nullptr, 0, (void *)1);
}
ui_menu_settings::~ui_menu_settings()
@@ -868,20 +863,16 @@ void ui_menu_analog::populate()
{
analog_item_data *data;
UINT32 flags = 0;
- std::string name;
if (strcmp(field->device().tag(), prev_owner.c_str()) != 0)
{
if (first_entry)
first_entry = false;
else
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
- strprintf(name,"[root%s]", field->device().tag());
- item_append(name.c_str(), nullptr, 0, nullptr);
+ item_append(string_format("[root%s]", field->device().tag()).c_str(), nullptr, 0, nullptr);
prev_owner.assign(field->device().tag());
}
- name.assign(field->name());
-
/* allocate a data item for tracking what this menu item refers to */
data = (analog_item_data *)m_pool_alloc(sizeof(*data));
data->field = field;
@@ -892,8 +883,8 @@ void ui_menu_analog::populate()
{
default:
case ANALOG_ITEM_KEYSPEED:
- strprintf(text, "%s Digital Speed", name.c_str());
- strprintf(subtext, "%d", settings.delta);
+ text = string_format("%s Digital Speed", field->name());
+ subtext = string_format("%d", settings.delta);
data->min = 0;
data->max = 255;
data->cur = settings.delta;
@@ -901,8 +892,8 @@ void ui_menu_analog::populate()
break;
case ANALOG_ITEM_CENTERSPEED:
- strprintf(text, "%s Autocenter Speed", name.c_str());
- strprintf(subtext, "%d", settings.centerdelta);
+ text = string_format("%s Autocenter Speed", field->name());
+ subtext = string_format("%d", settings.centerdelta);
data->min = 0;
data->max = 255;
data->cur = settings.centerdelta;
@@ -910,7 +901,7 @@ void ui_menu_analog::populate()
break;
case ANALOG_ITEM_REVERSE:
- strprintf(text, "%s Reverse", name.c_str());
+ text = string_format("%s Reverse", field->name());
subtext.assign(settings.reverse ? "On" : "Off");
data->min = 0;
data->max = 1;
@@ -919,8 +910,8 @@ void ui_menu_analog::populate()
break;
case ANALOG_ITEM_SENSITIVITY:
- strprintf(text, "%s Sensitivity", name.c_str());
- strprintf(subtext, "%d", settings.sensitivity);
+ text = string_format("%s Sensitivity", field->name());
+ subtext = string_format("%d", settings.sensitivity);
data->min = 1;
data->max = 255;
data->cur = settings.sensitivity;
diff --git a/src/emu/ui/mainmenu.cpp b/src/emu/ui/mainmenu.cpp
index caf531c41ef..66381a3df1f 100644
--- a/src/emu/ui/mainmenu.cpp
+++ b/src/emu/ui/mainmenu.cpp
@@ -138,14 +138,14 @@ void ui_menu_main::populate()
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
/* add favorite menu */
- if (!machine().favorite().isgame_favorite())
+ if (!machine().favorite().isgame_favorite())
item_append(_("Add To Favorites"), nullptr, 0, (void *)ADD_FAVORITE);
else
item_append(_("Remove From Favorites"), nullptr, 0, (void *)REMOVE_FAVORITE);
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
-// item_append(_("Quit from Machine"), nullptr, 0, (void *)QUIT_GAME);
+// item_append(_("Quit from Machine"), nullptr, 0, (void *)QUIT_GAME);
/* add reset and exit menus */
item_append(_("Select New Machine"), nullptr, 0, (void *)SELECT_GAME);
@@ -246,7 +246,7 @@ void ui_menu_main::handle()
ui_menu::stack_push(global_alloc_clear<ui_simple_menu_select_game>(machine(), container, nullptr));
} else {
ui_menu::stack_push(global_alloc_clear<ui_menu_select_game>(machine(), container, nullptr));
- }
+ }
break;
case BIOS_SELECTION:
@@ -262,12 +262,12 @@ void ui_menu_main::handle()
break;
case ADD_FAVORITE:
- machine().favorite().add_favorite_game();
+ machine().favorite().add_favorite_game();
reset(UI_MENU_RESET_REMEMBER_POSITION);
break;
case REMOVE_FAVORITE:
- machine().favorite().remove_favorite_game();
+ machine().favorite().remove_favorite_game();
reset(UI_MENU_RESET_REMEMBER_POSITION);
break;
diff --git a/src/emu/ui/menu.cpp b/src/emu/ui/menu.cpp
index 3803790c359..f6154c41638 100644
--- a/src/emu/ui/menu.cpp
+++ b/src/emu/ui/menu.cpp
@@ -1,10 +1,10 @@
// license:BSD-3-Clause
-// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
+// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Maurizio Petrarota
/*********************************************************************
- ui/menu.c
+ ui/menu.cpp
- Internal MAME menus for the user interface.
+ Internal MAME menus for the user interface.
*********************************************************************/
@@ -27,7 +27,7 @@
/***************************************************************************
- CONSTANTS
+ CONSTANTS
***************************************************************************/
#define UI_MENU_POOL_SIZE 65536
@@ -40,35 +40,33 @@ struct ui_arts_info
static const ui_arts_info arts_info[] =
{
- { "Snapshots", OPTION_SNAPSHOT_DIRECTORY, "snap" },
- { "Cabinets", OPTION_CABINETS_PATH, "cabinets;cabdevs" },
- { "Control Panels", OPTION_CPANELS_PATH, "cpanel" },
- { "PCBs", OPTION_PCBS_PATH, "pcb" },
- { "Flyers", OPTION_FLYERS_PATH, "flyers" },
- { "Titles", OPTION_TITLES_PATH, "titles" },
- { "Ends", OPTION_ENDS_PATH, "ends" },
- { "Artwork Preview", OPTION_ARTPREV_PATH, "artwork preview" },
- { "Bosses", OPTION_BOSSES_PATH, "bosses" },
- { "Logos", OPTION_LOGOS_PATH, "logo" },
- { "Versus", OPTION_VERSUS_PATH, "versus" },
- { "Game Over", OPTION_GAMEOVER_PATH, "gameover" },
- { "HowTo", OPTION_HOWTO_PATH, "howto" },
- { "Scores", OPTION_SCORES_PATH, "scores" },
- { "Select", OPTION_SELECT_PATH, "select" },
- { "Marquees", OPTION_MARQUEES_PATH, "marquees" },
+ { __("Snapshots"), OPTION_SNAPSHOT_DIRECTORY, "snap" },
+ { __("Cabinets"), OPTION_CABINETS_PATH, "cabinets;cabdevs" },
+ { __("Control Panels"), OPTION_CPANELS_PATH, "cpanel" },
+ { __("PCBs"), OPTION_PCBS_PATH, "pcb" },
+ { __("Flyers"), OPTION_FLYERS_PATH, "flyers" },
+ { __("Titles"), OPTION_TITLES_PATH, "titles" },
+ { __("Ends"), OPTION_ENDS_PATH, "ends" },
+ { __("Artwork Preview"), OPTION_ARTPREV_PATH, "artwork preview" },
+ { __("Bosses"), OPTION_BOSSES_PATH, "bosses" },
+ { __("Logos"), OPTION_LOGOS_PATH, "logo" },
+ { __("Versus"), OPTION_VERSUS_PATH, "versus" },
+ { __("Game Over"), OPTION_GAMEOVER_PATH, "gameover" },
+ { __("HowTo"), OPTION_HOWTO_PATH, "howto" },
+ { __("Scores"), OPTION_SCORES_PATH, "scores" },
+ { __("Select"), OPTION_SELECT_PATH, "select" },
+ { __("Marquees"), OPTION_MARQUEES_PATH, "marquees" },
{ nullptr }
};
static const char *hover_msg[] = {
- "Add or remove favorites",
- "Export displayed list to file",
- "Show DATs view",
- "Setup directories",
- "Configure options"
+ __("Add or remove favorites"),
+ __("Export displayed list to file"),
+ __("Show DATs view"),
};
/***************************************************************************
- GLOBAL VARIABLES
+ GLOBAL VARIABLES
***************************************************************************/
ui_menu *ui_menu::menu_stack;
@@ -93,7 +91,7 @@ bitmap_argb32 *ui_menu::toolbar_bitmap[UI_TOOLBAR_BUTTONS];
bitmap_argb32 *ui_menu::sw_toolbar_bitmap[UI_TOOLBAR_BUTTONS];
/***************************************************************************
- INLINE FUNCTIONS
+ INLINE FUNCTIONS
***************************************************************************/
//-------------------------------------------------
@@ -126,7 +124,7 @@ inline bool ui_menu::exclusive_input_pressed(int key, int repeat)
/***************************************************************************
- CORE SYSTEM MANAGEMENT
+ CORE SYSTEM MANAGEMENT
***************************************************************************/
//-------------------------------------------------
@@ -193,7 +191,7 @@ void ui_menu::exit(running_machine &machine)
/***************************************************************************
- CORE MENU MANAGEMENT
+ CORE MENU MANAGEMENT
***************************************************************************/
//-------------------------------------------------
@@ -248,16 +246,25 @@ void ui_menu::reset(ui_menu_reset_options options)
item.clear();
visitems = 0;
selected = 0;
- std::string backtext;
- strprintf(backtext, "Return to Machine");
// add an item to return
if (parent == nullptr)
- item_append(backtext.c_str(), nullptr, 0, nullptr);
+ item_append(_("Return to Machine"), nullptr, 0, nullptr);
else if (parent->is_special_main_menu())
- item_append("Exit", nullptr, 0, nullptr);
+ {
+ if (strcmp(machine().options().ui(), "simple") == 0)
+ item_append(_("Exit"), nullptr, 0, nullptr);
+ else
+ item_append(_("Exit"), nullptr, MENU_FLAG_UI | MENU_FLAG_LEFT_ARROW | MENU_FLAG_RIGHT_ARROW, nullptr);
+ }
else
- item_append("Return to Previous Menu", nullptr, 0, nullptr);
+ {
+ if (strcmp(machine().options().ui(), "simple") != 0 && ui_menu::stack_has_special_main_menu())
+ item_append(_("Return to Previous Menu"), nullptr, MENU_FLAG_UI | MENU_FLAG_LEFT_ARROW | MENU_FLAG_RIGHT_ARROW, nullptr);
+ else
+ item_append(_("Return to Previous Menu"), nullptr, 0, nullptr);
+ }
+
}
@@ -334,7 +341,7 @@ const ui_menu_event *ui_menu::process(UINT32 flags)
menu_event.iptkey = IPT_INVALID;
// first make sure our selection is valid
-// if (!(flags & UI_MENU_PROCESS_NOINPUT))
+// if (!(flags & UI_MENU_PROCESS_NOINPUT))
validate_selection(1);
// draw the menu
@@ -451,7 +458,7 @@ void ui_menu::set_selection(void *selected_itemref)
/***************************************************************************
- INTERNAL MENU PROCESSING
+ INTERNAL MENU PROCESSING
***************************************************************************/
//-------------------------------------------------
@@ -592,7 +599,7 @@ void ui_menu::draw(bool customonly, bool noimage, bool noinput)
}
// else if the mouse is over this item, draw with a different background
- else if (itemnum == hover && ((linenum == 0 && top_line != 0) || (linenum == visible_lines - 1 && itemnum != item.size() - 1)))
+ else if (itemnum == hover)
{
fgcolor = UI_MOUSEOVER_COLOR;
bgcolor = UI_MOUSEOVER_BG_COLOR;
@@ -664,13 +671,13 @@ void ui_menu::draw(bool customonly, bool noimage, bool noinput)
}
// customize subitem text color
- if (!core_stricmp(subitem_text, "On"))
+ if (!core_stricmp(subitem_text, _("On")))
fgcolor2 = rgb_t(0xff,0x00,0xff,0x00);
- if (!core_stricmp(subitem_text, "Off"))
+ if (!core_stricmp(subitem_text, _("Off")))
fgcolor2 = rgb_t(0xff,0xff,0x00,0x00);
- if (!core_stricmp(subitem_text, "Auto"))
+ if (!core_stricmp(subitem_text, _("Auto")))
fgcolor2 = rgb_t(0xff,0xff,0xff,0x00);
// draw the subitem right-justified
@@ -713,7 +720,7 @@ void ui_menu::draw(bool customonly, bool noimage, bool noinput)
// compute the multi-line target width/height
machine().ui().draw_text_full(container, pitem.subtext, 0, 0, visible_width * 0.75f,
- JUSTIFY_RIGHT, WRAP_WORD, DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &target_width, &target_height);
+ JUSTIFY_RIGHT, WRAP_WORD, DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &target_width, &target_height);
// determine the target location
target_x = visible_left + visible_width - target_width - UI_BOX_LR_BORDER;
@@ -723,10 +730,10 @@ void ui_menu::draw(bool customonly, bool noimage, bool noinput)
// add a box around that
machine().ui().draw_outlined_box(container, target_x - UI_BOX_LR_BORDER,
- target_y - UI_BOX_TB_BORDER,
- target_x + target_width + UI_BOX_LR_BORDER,
- target_y + target_height + UI_BOX_TB_BORDER,
- subitem_invert ? UI_SELECTED_BG_COLOR : UI_BACKGROUND_COLOR);
+ target_y - UI_BOX_TB_BORDER,
+ target_x + target_width + UI_BOX_LR_BORDER,
+ target_y + target_height + UI_BOX_TB_BORDER,
+ subitem_invert ? UI_SELECTED_BG_COLOR : UI_BACKGROUND_COLOR);
machine().ui().draw_text_full(container, pitem.subtext, target_x, target_y, target_width,
JUSTIFY_RIGHT, WRAP_WORD, DRAW_NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr);
}
@@ -736,8 +743,6 @@ void ui_menu::draw(bool customonly, bool noimage, bool noinput)
// return the number of visible lines, minus 1 for top arrow and 1 for bottom arrow
visitems = visible_lines - (top_line != 0) - (top_line + visible_lines != item.size());
-// if (history_flag && (top_line + visible_lines >= item.size()))
-// selected = item.size() - 1;
}
void ui_menu::custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2)
@@ -762,7 +767,7 @@ void ui_menu::draw_text_box()
// compute the multi-line target width/height
machine().ui().draw_text_full(container, text, 0, 0, 1.0f - 2.0f * UI_BOX_LR_BORDER - 2.0f * gutter_width,
- JUSTIFY_LEFT, WRAP_WORD, DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &target_width, &target_height);
+ JUSTIFY_LEFT, WRAP_WORD, DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &target_width, &target_height);
target_height += 2.0f * line_height;
if (target_height > 1.0f - 2.0f * UI_BOX_TB_BORDER)
target_height = floorf((1.0f - 2.0f * UI_BOX_TB_BORDER) / line_height) * line_height;
@@ -787,20 +792,20 @@ void ui_menu::draw_text_box()
// add a box around that
machine().ui().draw_outlined_box(container, target_x - UI_BOX_LR_BORDER - gutter_width,
- target_y - UI_BOX_TB_BORDER,
- target_x + target_width + gutter_width + UI_BOX_LR_BORDER,
- target_y + target_height + UI_BOX_TB_BORDER,
- (item[0].flags & MENU_FLAG_REDTEXT) ? UI_RED_COLOR : UI_BACKGROUND_COLOR);
+ target_y - UI_BOX_TB_BORDER,
+ target_x + target_width + gutter_width + UI_BOX_LR_BORDER,
+ target_y + target_height + UI_BOX_TB_BORDER,
+ (item[0].flags & MENU_FLAG_REDTEXT) ? UI_RED_COLOR : UI_BACKGROUND_COLOR);
machine().ui().draw_text_full(container, text, target_x, target_y, target_width,
JUSTIFY_LEFT, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
// draw the "return to prior menu" text with a hilight behind it
highlight(container,
- target_x + 0.5f * UI_LINE_WIDTH,
- target_y + target_height - line_height,
- target_x + target_width - 0.5f * UI_LINE_WIDTH,
- target_y + target_height,
- UI_SELECTED_BG_COLOR);
+ target_x + 0.5f * UI_LINE_WIDTH,
+ target_y + target_height - line_height,
+ target_x + target_width - 0.5f * UI_LINE_WIDTH,
+ target_y + target_height,
+ UI_SELECTED_BG_COLOR);
machine().ui().draw_text_full(container, backtext, target_x, target_y + target_height - line_height, target_width,
JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr);
@@ -1097,7 +1102,7 @@ void ui_menu::clear_free_list(running_machine &machine)
/***************************************************************************
- MENU STACK MANAGEMENT
+ MENU STACK MANAGEMENT
***************************************************************************/
//-------------------------------------------------
@@ -1167,7 +1172,7 @@ void ui_menu::do_handle()
/***************************************************************************
- UI SYSTEM INTERACTION
+ UI SYSTEM INTERACTION
***************************************************************************/
//-------------------------------------------------
@@ -1196,7 +1201,7 @@ UINT32 ui_menu::ui_handler(running_machine &machine, render_container *container
}
/***************************************************************************
- MENU HELPERS
+ MENU HELPERS
***************************************************************************/
//-------------------------------------------------
@@ -1441,7 +1446,6 @@ void ui_menu::draw_select_game(bool noinput)
//machine().ui().draw_outlined_box(container, x1, y1, x2, y2, rgb_t(0xEF, 0x12, 0x47, 0x7B));
mui.draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR);
-
if (visible_items < visible_lines)
visible_lines = visible_items;
if (top_line < 0 || selected == 0)
@@ -1454,6 +1458,8 @@ void ui_menu::draw_select_game(bool noinput)
float effective_left = visible_left + gutter_width;
int n_loop = (visible_items >= visible_lines) ? visible_lines : visible_items;
+ if (m_prev_selected != nullptr && m_focus == focused_menu::main && selected < visible_items)
+ m_prev_selected = nullptr;
for (int linenum = 0; linenum < n_loop; linenum++)
{
@@ -1474,23 +1480,28 @@ void ui_menu::draw_select_game(bool noinput)
hover = itemnum;
// if we're selected, draw with a different background
- if (itemnum == selected)
+ if (itemnum == selected && m_focus == focused_menu::main)
{
fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
fgcolor3 = rgb_t(0xff, 0xcc, 0xcc, 0x00);
+ mui.draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43),
+ hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
}
// else if the mouse is over this item, draw with a different background
else if (itemnum == hover)
{
fgcolor = fgcolor3 = UI_MOUSEOVER_COLOR;
bgcolor = UI_MOUSEOVER_BG_COLOR;
+ highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor);
}
-
- // if we have some background hilighting to do, add a quad behind everything else
- if (bgcolor != UI_TEXT_BG_COLOR)
+ else if (pitem.ref == m_prev_selected)
+ {
+ fgcolor = fgcolor3 = UI_MOUSEOVER_COLOR;
+ bgcolor = UI_MOUSEOVER_BG_COLOR;
mui.draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43),
hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+ }
// if we're on the top line, display the up arrow
if (linenum == 0 && top_line != 0)
@@ -1572,23 +1583,21 @@ void ui_menu::draw_select_game(bool noinput)
hover = count;
// if we're selected, draw with a different background
- if (count == selected)
+ if (count == selected && m_focus == focused_menu::main)
{
fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
+ mui.draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43),
+ hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
}
// else if the mouse is over this item, draw with a different background
else if (count == hover)
{
fgcolor = UI_MOUSEOVER_COLOR;
bgcolor = UI_MOUSEOVER_BG_COLOR;
+ highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor);
}
- // if we have some background hilighting to do, add a quad behind everything else
- if (bgcolor != UI_TEXT_BG_COLOR)
- mui.draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43),
- hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
-
if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0)
container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height,
UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
@@ -1615,6 +1624,16 @@ void ui_menu::draw_select_game(bool noinput)
// reset redraw icon stage
if (!is_swlist)
ui_globals::redraw_icon = false;
+
+ // noinput
+ if (noinput)
+ {
+ int alpha = (1.0f - machine().options().pause_brightness()) * 255.0f;
+ if (alpha > 255)
+ alpha = 255;
+ if (alpha >= 0)
+ container->add_rect(0.0f, 0.0f, 1.0f, 1.0f, rgb_t(alpha, 0x00, 0x00, 0x00), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
+ }
}
//-------------------------------------------------
@@ -1624,7 +1643,7 @@ void ui_menu::draw_select_game(bool noinput)
void ui_menu::get_title_search(std::string &snaptext, std::string &searchstr)
{
// get arts title text
- snaptext.assign(arts_info[ui_globals::curimage_view].title);
+ snaptext.assign(_(arts_info[ui_globals::curimage_view].title));
// get search path
if (ui_globals::curimage_view == SNAPSHOT_VIEW)
@@ -1632,14 +1651,17 @@ void ui_menu::get_title_search(std::string &snaptext, std::string &searchstr)
else
searchstr = machine().ui().options().value(arts_info[ui_globals::curimage_view].path);
- path_iterator path(searchstr.c_str());
+ std::string tmp(searchstr);
+ path_iterator path(tmp.c_str());
std::string curpath;
+ path_iterator path_iter(arts_info[ui_globals::curimage_view].addpath);
+ std::string c_path;
+
// iterate over path and add path for zipped formats
while (path.next(curpath))
{
- path_iterator path_iter(arts_info[ui_globals::curimage_view].addpath);
- std::string c_path;
+ path_iter.reset();
while (path_iter.next(c_path))
searchstr.append(";").append(curpath).append(PATH_SEPARATOR).append(c_path);
}
@@ -1660,7 +1682,7 @@ void ui_menu::handle_main_keys(UINT32 flags)
// if we hit select, return TRUE or pop the stack, depending on the item
if (exclusive_input_pressed(IPT_UI_SELECT, 0))
{
- if (selected == item.size() - 1)
+ if (selected == item.size() - 1 && m_focus == focused_menu::main)
{
menu_event.iptkey = IPT_UI_CANCEL;
ui_menu::stack_pop(machine());
@@ -1682,36 +1704,40 @@ void ui_menu::handle_main_keys(UINT32 flags)
validate_selection(1);
// swallow left/right keys if they are not appropriate
- bool ignoreleft = ((item[selected].flags & MENU_FLAG_LEFT_ARROW) == 0 || ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_RIGHT_PANEL);
- bool ignoreright = ((item[selected].flags & MENU_FLAG_RIGHT_ARROW) == 0 || ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_RIGHT_PANEL);
- bool ignoreup = (ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_LEFT_PANEL);
- bool ignoredown = (ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_LEFT_PANEL);
+ bool ignoreleft = ((item[selected].flags & MENU_FLAG_LEFT_ARROW) == 0);
+ bool ignoreright = ((item[selected].flags & MENU_FLAG_RIGHT_ARROW) == 0);
+ bool leftclose = (ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_LEFT_PANEL);
+ bool rightclose = (ui_globals::panels_status == HIDE_BOTH || ui_globals::panels_status == HIDE_RIGHT_PANEL);
- input_manager &minput = machine().input();
// accept left/right keys as-is with repeat
if (!ignoreleft && exclusive_input_pressed(IPT_UI_LEFT, (flags & UI_MENU_PROCESS_LR_REPEAT) ? 6 : 0))
{
// Swap the right panel
- if (minput.code_pressed(KEYCODE_LCONTROL) || minput.code_pressed(JOYCODE_BUTTON1))
+ if (m_focus == focused_menu::righttop)
menu_event.iptkey = IPT_UI_LEFT_PANEL;
return;
}
if (!ignoreright && exclusive_input_pressed(IPT_UI_RIGHT, (flags & UI_MENU_PROCESS_LR_REPEAT) ? 6 : 0))
+ {
+ // Swap the right panel
+ if (m_focus == focused_menu::righttop)
+ menu_event.iptkey = IPT_UI_RIGHT_PANEL;
return;
+ }
// up backs up by one item
if (exclusive_input_pressed(IPT_UI_UP, 6))
{
// Filter
- if (!ignoreup && (minput.code_pressed(KEYCODE_LALT) || minput.code_pressed(JOYCODE_BUTTON2)))
+ if (!leftclose && m_focus == focused_menu::left)
{
menu_event.iptkey = IPT_UI_UP_FILTER;
return;
}
// Infos
- if (!ignoreleft && (minput.code_pressed(KEYCODE_LCONTROL) || minput.code_pressed(JOYCODE_BUTTON1)))
+ if (!rightclose && m_focus == focused_menu::rightbottom)
{
menu_event.iptkey = IPT_UI_UP_PANEL;
topline_datsview--;
@@ -1731,14 +1757,14 @@ void ui_menu::handle_main_keys(UINT32 flags)
if (exclusive_input_pressed(IPT_UI_DOWN, 6))
{
// Filter
- if (!ignoredown && (minput.code_pressed(KEYCODE_LALT) || minput.code_pressed(JOYCODE_BUTTON2)))
+ if (!leftclose && m_focus == focused_menu::left)
{
menu_event.iptkey = IPT_UI_DOWN_FILTER;
return;
}
// Infos
- if (!ignoreright && (minput.code_pressed(KEYCODE_LCONTROL) || minput.code_pressed(JOYCODE_BUTTON1)))
+ if (!rightclose && m_focus == focused_menu::rightbottom)
{
menu_event.iptkey = IPT_UI_DOWN_PANEL;
topline_datsview++;
@@ -1758,7 +1784,7 @@ void ui_menu::handle_main_keys(UINT32 flags)
if (exclusive_input_pressed(IPT_UI_PAGE_UP, 6))
{
// Infos
- if (!ignoreleft && (minput.code_pressed(KEYCODE_LCONTROL) || minput.code_pressed(JOYCODE_BUTTON1)))
+ if (!rightclose && m_focus == focused_menu::rightbottom)
{
menu_event.iptkey = IPT_UI_DOWN_PANEL;
topline_datsview -= right_visible_lines - 1;
@@ -1780,7 +1806,7 @@ void ui_menu::handle_main_keys(UINT32 flags)
if (exclusive_input_pressed(IPT_UI_PAGE_DOWN, 6))
{
// Infos
- if (!ignoreleft && (minput.code_pressed(KEYCODE_LCONTROL) || minput.code_pressed(JOYCODE_BUTTON1)))
+ if (!rightclose && m_focus == focused_menu::rightbottom)
{
menu_event.iptkey = IPT_UI_DOWN_PANEL;
topline_datsview += right_visible_lines - 1;
@@ -1802,7 +1828,7 @@ void ui_menu::handle_main_keys(UINT32 flags)
if (exclusive_input_pressed(IPT_UI_HOME, 0))
{
// Infos
- if (!ignoreleft && (minput.code_pressed(KEYCODE_LCONTROL) || minput.code_pressed(JOYCODE_BUTTON1)))
+ if (!rightclose && m_focus == focused_menu::rightbottom)
{
menu_event.iptkey = IPT_UI_DOWN_PANEL;
topline_datsview = 0;
@@ -1820,7 +1846,7 @@ void ui_menu::handle_main_keys(UINT32 flags)
if (exclusive_input_pressed(IPT_UI_END, 0))
{
// Infos
- if (!ignoreleft && (minput.code_pressed(KEYCODE_LCONTROL) || minput.code_pressed(JOYCODE_BUTTON1)))
+ if (!rightclose && m_focus == focused_menu::rightbottom)
{
menu_event.iptkey = IPT_UI_DOWN_PANEL;
topline_datsview = totallines;
@@ -1848,7 +1874,7 @@ void ui_menu::handle_main_keys(UINT32 flags)
if (menu_event.iptkey == IPT_INVALID)
for (int code = IPT_UI_FIRST + 1; code < IPT_UI_LAST; code++)
{
- if (ui_error || code == IPT_UI_CONFIGURE || (code == IPT_UI_LEFT && ignoreleft) || (code == IPT_UI_RIGHT && ignoreright) || (code == IPT_UI_PAUSE && ignorepause))
+ if (ui_error || code == IPT_UI_CONFIGURE || (code == IPT_UI_LEFT && ignoreleft) || (code == IPT_UI_RIGHT && ignoreright) || (code == IPT_UI_PAUSE && ignorepause))
continue;
if (exclusive_input_pressed(code, 0))
@@ -1881,7 +1907,12 @@ void ui_menu::handle_main_events(UINT32 flags)
else
{
if (hover >= 0 && hover < item.size())
+ {
+ if (hover >= visible_items - 1 && selected < visible_items)
+ m_prev_selected = item[selected].ref;
selected = hover;
+ m_focus = focused_menu::main;
+ }
else if (hover == HOVER_ARROW_UP)
{
selected -= visitems;
@@ -1941,18 +1972,6 @@ void ui_menu::handle_main_events(UINT32 flags)
menu_event.iptkey = IPT_UI_DATS;
stop = true;
}
- else if (hover == HOVER_B_SETTINGS)
- {
- menu_event.iptkey = IPT_UI_SELECT;
- selected = visible_items + 1;
- stop = true;
- }
- else if (hover == HOVER_B_FOLDERS)
- {
- menu_event.iptkey = IPT_UI_SELECT;
- selected = visible_items + 2;
- stop = true;
- }
else if (hover >= HOVER_RP_FIRST && hover <= HOVER_RP_LAST)
{
ui_globals::rpanel = (HOVER_RP_FIRST - hover) * (-1);
@@ -2014,9 +2033,17 @@ void ui_menu::handle_main_events(UINT32 flags)
// translate CHAR events into specials
case UI_EVENT_CHAR:
- menu_event.iptkey = IPT_SPECIAL;
- menu_event.unichar = local_menu_event.ch;
- stop = true;
+ if (exclusive_input_pressed(IPT_UI_CONFIGURE, 0))
+ {
+ menu_event.iptkey = IPT_UI_CONFIGURE;
+ stop = true;
+ }
+ else
+ {
+ menu_event.iptkey = IPT_SPECIAL;
+ menu_event.unichar = local_menu_event.ch;
+ stop = true;
+ }
break;
// ignore everything else
@@ -2043,8 +2070,8 @@ float ui_menu::draw_right_box_title(float x1, float y1, float x2, float y2)
container->add_line(x1 + midl, y1, x1 + midl, y1 + line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
std::string buffer[RP_LAST + 1];
- buffer[RP_IMAGES].assign("Images");
- buffer[RP_INFOS].assign("Infos");
+ buffer[RP_IMAGES] = _("Images");
+ buffer[RP_INFOS] = _("Infos");
for (int cells = RP_IMAGES; cells <= RP_INFOS; cells++)
{
@@ -2069,9 +2096,17 @@ float ui_menu::draw_right_box_title(float x1, float y1, float x2, float y2)
fgcolor = UI_CLONE_COLOR;
}
- if (bgcolor != UI_TEXT_BG_COLOR)
+ if (m_focus == focused_menu::righttop && ui_globals::rpanel == cells)
+ {
+ fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
+ bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
+ mui.draw_textured_box(container, x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height,
+ bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+ }
+
+ if (bgcolor == UI_MOUSEOVER_BG_COLOR)
container->add_rect(x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height,
- bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+ bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
mui.draw_text_full(container, buffer[cells].c_str(), x1 + UI_LINE_WIDTH, y1, midl - UI_LINE_WIDTH,
JUSTIFY_CENTER, WRAP_NEVER, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr);
@@ -2087,6 +2122,8 @@ float ui_menu::draw_right_box_title(float x1, float y1, float x2, float y2)
std::string ui_menu::arts_render_common(float origx1, float origy1, float origx2, float origy2)
{
+ ui_manager &mui = machine().ui();
+ float line_height = mui.get_line_height();
std::string snaptext, searchstr;
get_title_search(snaptext, searchstr);
@@ -2096,14 +2133,28 @@ std::string ui_menu::arts_render_common(float origx1, float origy1, float origx2
for (int x = FIRST_VIEW; x < LAST_VIEW; x++)
{
- machine().ui().draw_text_full(container, arts_info[x].title, origx1, origy1, origx2 - origx1, JUSTIFY_CENTER,
- WRAP_TRUNCATE, DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_lenght, nullptr);
+ mui.draw_text_full(container, _(arts_info[x].title), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER,
+ WRAP_TRUNCATE, DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &txt_lenght, nullptr);
txt_lenght += 0.01f;
title_size = MAX(txt_lenght, title_size);
}
- machine().ui().draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ rgb_t fgcolor = UI_TEXT_COLOR;
+ rgb_t bgcolor = UI_TEXT_BG_COLOR;
+ if (m_focus == focused_menu::rightbottom)
+ {
+ fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
+ bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
+ }
+
+ float middle = origx2 - origx1;
+
+ if (bgcolor != UI_TEXT_BG_COLOR)
+ mui.draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f),
+ origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+
+ mui.draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE,
+ DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr);
draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::curimage_view, FIRST_VIEW, LAST_VIEW, title_size);
@@ -2161,7 +2212,7 @@ void ui_menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software
hover = HOVER_B_FAV + z;
color = ARGB_WHITE;
float ypos = y2 + machine().ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER;
- mui.draw_text_box(container, hover_msg[z], JUSTIFY_CENTER, 0.5f, ypos, UI_BACKGROUND_COLOR);
+ mui.draw_text_box(container, _(hover_msg[z]), JUSTIFY_CENTER, 0.5f, ypos, UI_BACKGROUND_COLOR);
}
container->add_quad(x1, y1, x2, y2, color, t_texture[z], PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
@@ -2768,4 +2819,4 @@ void ui_menu::draw_dats_menu()
// return the number of visible lines, minus 1 for top arrow and 1 for bottom arrow
visitems = visible_lines - (top_line != 0) - (top_line + visible_lines != visible_items);
-} \ No newline at end of file
+}
diff --git a/src/emu/ui/menu.h b/src/emu/ui/menu.h
index d5f5e8a33e6..562650d0e51 100644
--- a/src/emu/ui/menu.h
+++ b/src/emu/ui/menu.h
@@ -2,9 +2,9 @@
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
/***************************************************************************
- ui/menu.h
+ ui/menu.h
- Internal MAME menus for the user interface.
+ Internal MAME menus for the user interface.
***************************************************************************/
@@ -17,7 +17,7 @@
/***************************************************************************
- CONSTANTS
+ CONSTANTS
***************************************************************************/
// flags for menu items
@@ -55,7 +55,7 @@ enum ui_menu_reset_options
/***************************************************************************
- TYPE DEFINITIONS
+ TYPE DEFINITIONS
***************************************************************************/
// menu-related events
@@ -192,6 +192,18 @@ private:
static void render_triangle(bitmap_argb32 &dest, bitmap_argb32 &source, const rectangle &sbounds, void *param);
public:
+ // tab navigation
+ enum class focused_menu
+ {
+ main,
+ left,
+ righttop,
+ rightbottom
+ };
+
+ focused_menu m_focus;
+ void *m_prev_selected;
+
int visible_items;
bool ui_error;
@@ -255,7 +267,7 @@ protected:
static render_texture *hilight_main_texture;
private:
static std::unique_ptr<bitmap_argb32> no_avail_bitmap, bgrnd_bitmap, star_bitmap;
-// static std::unique_ptr<bitmap_rgb32> hilight_main_bitmap;
+// static std::unique_ptr<bitmap_rgb32> hilight_main_bitmap;
static render_texture *bgrnd_texture, *star_texture;
static bitmap_argb32 *icons_bitmap[];
static render_texture *icons_texture[];
diff --git a/src/emu/ui/miscmenu.cpp b/src/emu/ui/miscmenu.cpp
index 5d232729bd2..89bf4182ffd 100644
--- a/src/emu/ui/miscmenu.cpp
+++ b/src/emu/ui/miscmenu.cpp
@@ -16,6 +16,7 @@
#include "ui/menu.h"
#include "ui/miscmenu.h"
#include "ui/utils.h"
+#include "../info.h"
/***************************************************************************
MENU HANDLERS
@@ -124,8 +125,7 @@ void ui_menu_bios_selection::handle()
assert(error.empty());
} else {
std::string error;
- std::string value = machine().options().main_value(dev->owner()->tag()+1);
- strcatprintf(value,",bios=%d",val-1);
+ std::string value = string_format("%s,bios=%d", machine().options().main_value(dev->owner()->tag()+1), val-1);
machine().options().set_value(dev->owner()->tag()+1, value.c_str(), OPTION_PRIORITY_CMDLINE, error);
assert(error.empty());
}
@@ -231,18 +231,18 @@ ui_menu_bookkeeping::~ui_menu_bookkeeping()
void ui_menu_bookkeeping::populate()
{
int tickets = machine().bookkeeping().get_dispensed_tickets();
- std::string tempstring;
+ std::ostringstream tempstring;
int ctrnum;
/* show total time first */
- if (prevtime.seconds() >= 60 * 60)
- strcatprintf(tempstring, "Uptime: %d:%02d:%02d\n\n", prevtime.seconds() / (60 * 60), (prevtime.seconds() / 60) % 60, prevtime.seconds() % 60);
+ if (prevtime.seconds() >= (60 * 60))
+ util::stream_format(tempstring, _("Uptime: %1$d:%2$02d:%3$02d\n\n"), prevtime.seconds() / (60 * 60), (prevtime.seconds() / 60) % 60, prevtime.seconds() % 60);
else
- strcatprintf(tempstring,"Uptime: %d:%02d\n\n", (prevtime.seconds() / 60) % 60, prevtime.seconds() % 60);
+ util::stream_format(tempstring, _("Uptime: %1$d:%2$02d\n\n"), (prevtime.seconds() / 60) % 60, prevtime.seconds() % 60);
/* show tickets at the top */
if (tickets > 0)
- strcatprintf(tempstring,"Tickets dispensed: %d\n\n", tickets);
+ util::stream_format(tempstring, _("Tickets dispensed: %1$d\n\n"), tickets);
/* loop over coin counters */
for (ctrnum = 0; ctrnum < COIN_COUNTERS; ctrnum++)
@@ -250,22 +250,17 @@ void ui_menu_bookkeeping::populate()
int count = machine().bookkeeping().coin_counter_get_count(ctrnum);
/* display the coin counter number */
- strcatprintf(tempstring,"Coin %c: ", ctrnum + 'A');
-
/* display how many coins */
- if (count == 0)
- tempstring.append("NA");
- else
- strcatprintf(tempstring, "%d", count);
-
/* display whether or not we are locked out */
- if (machine().bookkeeping().coin_lockout_get_state(ctrnum))
- tempstring.append(_(" (locked)"));
- tempstring.append("\n");
+ util::stream_format(tempstring,
+ (count == 0) ? _("Coin %1$c: NA%3$s\n") : _("Coin %1$c: %2$d%3$s\n"),
+ ctrnum + 'A',
+ count,
+ machine().bookkeeping().coin_lockout_get_state(ctrnum) ? _(" (locked)") : "");
}
/* append the single item */
- item_append(tempstring.c_str(), nullptr, MENU_FLAG_MULTILINE, nullptr);
+ item_append(tempstring.str().c_str(), nullptr, MENU_FLAG_MULTILINE, nullptr);
}
/*-------------------------------------------------
@@ -651,7 +646,7 @@ void ui_menu_misc_options::custom_render(void *selectedref, float top, float bot
ui_manager &mui = machine().ui();
mui.draw_text_full(container, _("Miscellaneous Options"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
float maxwidth = MAX(origx2 - origx1, width);
@@ -671,5 +666,223 @@ void ui_menu_misc_options::custom_render(void *selectedref, float top, float bot
// draw the text within it
mui.draw_text_full(container, _("Miscellaneous Options"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+}
+
+//-------------------------------------------------
+// ctor / dtor
+//-------------------------------------------------
+
+ui_menu_export::ui_menu_export(running_machine &machine, render_container *container, std::vector<const game_driver *> drvlist)
+ : ui_menu(machine, container), m_list(drvlist)
+{
+}
+
+ui_menu_export::~ui_menu_export()
+{
+}
+
+//-------------------------------------------------
+// handlethe options menu
+//-------------------------------------------------
+
+void ui_menu_export::handle()
+{
+ // process the menu
+ ui_menu::menu_stack->parent->process(UI_MENU_PROCESS_NOINPUT);
+ const ui_menu_event *m_event = process(UI_MENU_PROCESS_NOIMAGE);
+ if (m_event != nullptr && m_event->itemref != nullptr)
+ {
+ switch ((FPTR)m_event->itemref)
+ {
+ case 1:
+ {
+ if (m_event->iptkey == IPT_UI_SELECT)
+ {
+ std::string filename("exported");
+ emu_file infile(machine().ui().options().ui_path(), OPEN_FLAG_READ);
+ if (infile.open(filename.c_str(), ".xml") == FILERR_NONE)
+ for (int seq = 0; ; ++seq)
+ {
+ std::string seqtext = string_format("%s_%04d", filename, seq);
+ if (infile.open(seqtext.c_str(), ".xml") != FILERR_NONE)
+ {
+ filename = seqtext;
+ break;
+ }
+ }
+
+ // attempt to open the output file
+ emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
+ if (file.open(filename.c_str(), ".xml") == FILERR_NONE)
+ {
+ FILE *pfile;
+ std::string fullpath(file.fullpath());
+ file.close();
+ pfile = fopen(fullpath.c_str(), "w");
+
+ // create the XML and save to file
+ driver_enumerator drvlist(machine().options());
+ drvlist.exclude_all();
+ for (auto & elem : m_list)
+ drvlist.include(driver_list::find(*elem));
+
+ info_xml_creator creator(drvlist);
+ creator.output(pfile, false);
+ fclose(pfile);
+ machine().popmessage(_("%s.xml saved under ui folder."), filename.c_str());
+ }
+ }
+ break;
+ }
+ case 2:
+ {
+ if (m_event->iptkey == IPT_UI_SELECT)
+ {
+ std::string filename("exported");
+ emu_file infile(machine().ui().options().ui_path(), OPEN_FLAG_READ);
+ if (infile.open(filename.c_str(), ".txt") == FILERR_NONE)
+ for (int seq = 0; ; ++seq)
+ {
+ std::string seqtext = string_format("%s_%04d", filename, seq);
+ if (infile.open(seqtext.c_str(), ".txt") != FILERR_NONE)
+ {
+ filename = seqtext;
+ break;
+ }
+ }
+
+ // attempt to open the output file
+ emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
+ if (file.open(filename.c_str(), ".txt") == FILERR_NONE)
+ {
+ // print the header
+ std::ostringstream buffer;
+ buffer << _("Name: Description:\n");
+ driver_enumerator drvlist(machine().options());
+ drvlist.exclude_all();
+ for (auto & elem : m_list)
+ drvlist.include(driver_list::find(*elem));
+
+ // iterate through drivers and output the info
+ while (drvlist.next())
+ if ((drvlist.driver().flags & MACHINE_NO_STANDALONE) == 0)
+ util::stream_format(buffer, "%-18s\"%s\"\n", drvlist.driver().name, drvlist.driver().description);
+ file.puts(buffer.str().c_str());
+ file.close();
+ machine().popmessage(_("%s.txt saved under ui folder."), filename.c_str());
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+}
+
+//-------------------------------------------------
+// populate
+//-------------------------------------------------
+
+void ui_menu_export::populate()
+{
+ // add options items
+ item_append(_("Export XML format (like -listxml)"), nullptr, 0, (void *)(FPTR)1);
+ item_append(_("Export TXT format (like -listfull)"), nullptr, 0, (void *)(FPTR)2);
+ item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
+}
+
+//-------------------------------------------------
+// ctor / dtor
+//-------------------------------------------------
+
+ui_menu_machine_configure::ui_menu_machine_configure(running_machine &machine, render_container *container, const game_driver *prev)
+ : ui_menu(machine, container), m_drv(prev)
+{
+}
+
+ui_menu_machine_configure::~ui_menu_machine_configure()
+{
+}
+
+//-------------------------------------------------
+// handlethe options menu
+//-------------------------------------------------
+
+void ui_menu_machine_configure::handle()
+{
+ // process the menu
+ ui_menu::menu_stack->parent->process(UI_MENU_PROCESS_NOINPUT);
+ const ui_menu_event *m_event = process(UI_MENU_PROCESS_NOIMAGE);
+ if (m_event != nullptr && m_event->itemref != nullptr)
+ {
+ switch ((FPTR)m_event->itemref)
+ {
+ case 1:
+ {
+ if (m_event->iptkey == IPT_UI_SELECT)
+ {
+ std::string filename(m_drv->name);
+ emu_file file(machine().options().ini_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE);
+ file_error filerr = file.open(filename.c_str(), ".ini");
+ if (filerr == FILERR_NONE)
+ {
+ std::string inistring = machine().options().output_ini();
+ file.puts(inistring.c_str());
+ }
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+}
+
+//-------------------------------------------------
+// populate
+//-------------------------------------------------
+
+void ui_menu_machine_configure::populate()
+{
+ // add options items
+ item_append(_("Dummy"), nullptr, 0, (void *)(FPTR)10);
+ item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
+ item_append(_("Save machine configuration"), nullptr, 0, (void *)(FPTR)1);
+ item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
+ customtop = machine().ui().get_line_height() + (3.0f * UI_BOX_TB_BORDER);
}
+
+//-------------------------------------------------
+// perform our special rendering
+//-------------------------------------------------
+
+void ui_menu_machine_configure::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
+{
+ float width;
+ ui_manager &mui = machine().ui();
+
+ mui.draw_text_full(container, m_drv->description, 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ width += 2 * UI_BOX_LR_BORDER;
+ float maxwidth = MAX(origx2 - origx1, width);
+
+ // compute our bounds
+ float x1 = 0.5f - 0.5f * maxwidth;
+ float x2 = x1 + maxwidth;
+ float y1 = origy1 - top;
+ float y2 = origy1 - UI_BOX_TB_BORDER;
+
+ // draw a box
+ mui.draw_outlined_box(container, x1, y1, x2, y2, UI_GREEN_COLOR);
+
+ // take off the borders
+ x1 += UI_BOX_LR_BORDER;
+ x2 -= UI_BOX_LR_BORDER;
+ y1 += UI_BOX_TB_BORDER;
+
+ // draw the text within it
+ mui.draw_text_full(container, m_drv->description, x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+} \ No newline at end of file
diff --git a/src/emu/ui/miscmenu.h b/src/emu/ui/miscmenu.h
index f43c4a6b2ba..f27c42ac82a 100644
--- a/src/emu/ui/miscmenu.h
+++ b/src/emu/ui/miscmenu.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods,Dankan1890
+// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods, Maurizio Petrarota
/***************************************************************************
ui/miscmenu.h
@@ -108,4 +108,38 @@ private:
static misc_option m_options[];
};
+//-------------------------------------------------
+// export menu
+//-------------------------------------------------
+
+class ui_menu_export : public ui_menu
+{
+public:
+ ui_menu_export(running_machine &machine, render_container *container, std::vector<const game_driver*> list);
+ virtual ~ui_menu_export();
+ virtual void populate() override;
+ virtual void handle() override;
+
+private:
+ std::vector<const game_driver*> m_list;
+};
+
+//-------------------------------------------------
+// machine configure menu
+//-------------------------------------------------
+
+class ui_menu_machine_configure : public ui_menu
+{
+public:
+ ui_menu_machine_configure(running_machine &machine, render_container *container, const game_driver *prev);
+ virtual ~ui_menu_machine_configure();
+ virtual void populate() override;
+ virtual void handle() override;
+ virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
+
+private:
+ const game_driver *m_drv;
+};
+
+
#endif /* __UI_MISCMENU_H__ */
diff --git a/src/emu/ui/moptions.cpp b/src/emu/ui/moptions.cpp
index 63c51d26438..de0b627ee9f 100644
--- a/src/emu/ui/moptions.cpp
+++ b/src/emu/ui/moptions.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Dankan1890
+// copyright-holders:Maurizio Petrarota
/***************************************************************************
ui/moptions.c
@@ -19,61 +19,61 @@
const options_entry ui_options::s_option_entries[] =
{
// seach path options
- { nullptr, nullptr, OPTION_HEADER, "UI SEARCH PATH OPTIONS" },
- { OPTION_HISTORY_PATH, "history;dats;.", OPTION_STRING, "path to history files" },
- { OPTION_EXTRAINI_PATH, "folders", OPTION_STRING, "path to extra ini files" },
- { OPTION_CABINETS_PATH, "cabinets;cabdevs", OPTION_STRING, "path to cabinets / devices image" },
- { OPTION_CPANELS_PATH, "cpanel", OPTION_STRING, "path to control panel image" },
- { OPTION_PCBS_PATH, "pcb", OPTION_STRING, "path to pcbs image" },
- { OPTION_FLYERS_PATH, "flyers", OPTION_STRING, "path to flyers image" },
- { OPTION_TITLES_PATH, "titles", OPTION_STRING, "path to titles image" },
- { OPTION_ENDS_PATH, "ends", OPTION_STRING, "path to ends image" },
- { OPTION_MARQUEES_PATH, "marquees", OPTION_STRING, "path to marquees image" },
- { OPTION_ARTPREV_PATH, "artwork preview", OPTION_STRING, "path to artwork preview image" },
- { OPTION_BOSSES_PATH, "bosses", OPTION_STRING, "path to bosses image" },
- { OPTION_LOGOS_PATH, "logo", OPTION_STRING, "path to logos image" },
- { OPTION_SCORES_PATH, "scores", OPTION_STRING, "path to scores image" },
- { OPTION_VERSUS_PATH, "versus", OPTION_STRING, "path to versus image" },
- { OPTION_GAMEOVER_PATH, "gameover", OPTION_STRING, "path to gameover image" },
- { OPTION_HOWTO_PATH, "howto", OPTION_STRING, "path to howto image" },
- { OPTION_SELECT_PATH, "select", OPTION_STRING, "path to select image" },
- { OPTION_ICONS_PATH, "icons", OPTION_STRING, "path to ICOns image" },
- { OPTION_UI_PATH, "ui", OPTION_STRING, "path to UI files" },
+ { nullptr, nullptr, OPTION_HEADER, "UI SEARCH PATH OPTIONS" },
+ { OPTION_HISTORY_PATH, "history;dats;.", OPTION_STRING, "path to history files" },
+ { OPTION_EXTRAINI_PATH, "folders", OPTION_STRING, "path to extra ini files" },
+ { OPTION_CABINETS_PATH, "cabinets;cabdevs", OPTION_STRING, "path to cabinets / devices image" },
+ { OPTION_CPANELS_PATH, "cpanel", OPTION_STRING, "path to control panel image" },
+ { OPTION_PCBS_PATH, "pcb", OPTION_STRING, "path to pcbs image" },
+ { OPTION_FLYERS_PATH, "flyers", OPTION_STRING, "path to flyers image" },
+ { OPTION_TITLES_PATH, "titles", OPTION_STRING, "path to titles image" },
+ { OPTION_ENDS_PATH, "ends", OPTION_STRING, "path to ends image" },
+ { OPTION_MARQUEES_PATH, "marquees", OPTION_STRING, "path to marquees image" },
+ { OPTION_ARTPREV_PATH, "artwork preview", OPTION_STRING, "path to artwork preview image" },
+ { OPTION_BOSSES_PATH, "bosses", OPTION_STRING, "path to bosses image" },
+ { OPTION_LOGOS_PATH, "logo", OPTION_STRING, "path to logos image" },
+ { OPTION_SCORES_PATH, "scores", OPTION_STRING, "path to scores image" },
+ { OPTION_VERSUS_PATH, "versus", OPTION_STRING, "path to versus image" },
+ { OPTION_GAMEOVER_PATH, "gameover", OPTION_STRING, "path to gameover image" },
+ { OPTION_HOWTO_PATH, "howto", OPTION_STRING, "path to howto image" },
+ { OPTION_SELECT_PATH, "select", OPTION_STRING, "path to select image" },
+ { OPTION_ICONS_PATH, "icons", OPTION_STRING, "path to ICOns image" },
+ { OPTION_UI_PATH, "ui", OPTION_STRING, "path to UI files" },
// misc options
- { nullptr, nullptr, OPTION_HEADER, "UI MISC OPTIONS" },
- { OPTION_DATS_ENABLED, "1", OPTION_BOOLEAN, "enable DATs support" },
- { OPTION_REMEMBER_LAST, "1", OPTION_BOOLEAN, "reselect in main menu last played game" },
- { OPTION_ENLARGE_SNAPS, "1", OPTION_BOOLEAN, "enlarge arts (snapshot, title, etc...) in right panel (keeping aspect ratio)" },
- { OPTION_FORCED4X3, "1", OPTION_BOOLEAN, "force the appearance of the snapshot in the list software to 4:3" },
- { OPTION_USE_BACKGROUND, "1", OPTION_BOOLEAN, "enable background image in main view" },
- { OPTION_SKIP_BIOS_MENU, "0", OPTION_BOOLEAN, "skip bios submenu, start with configured or default" },
- { OPTION_SKIP_PARTS_MENU, "0", OPTION_BOOLEAN, "skip parts submenu, start with first part" },
- { OPTION_LAST_USED_FILTER, "", OPTION_STRING, "latest used filter" },
- { OPTION_LAST_USED_MACHINE, "", OPTION_STRING, "latest used machine" },
- { OPTION_INFO_AUTO_AUDIT, "0", OPTION_BOOLEAN, "enable auto audit in the general info panel" },
+ { nullptr, nullptr, OPTION_HEADER, "UI MISC OPTIONS" },
+ { OPTION_DATS_ENABLED, "1", OPTION_BOOLEAN, "enable DATs support" },
+ { OPTION_REMEMBER_LAST, "1", OPTION_BOOLEAN, "reselect in main menu last played game" },
+ { OPTION_ENLARGE_SNAPS, "1", OPTION_BOOLEAN, "enlarge arts (snapshot, title, etc...) in right panel (keeping aspect ratio)" },
+ { OPTION_FORCED4X3, "1", OPTION_BOOLEAN, "force the appearance of the snapshot in the list software to 4:3" },
+ { OPTION_USE_BACKGROUND, "1", OPTION_BOOLEAN, "enable background image in main view" },
+ { OPTION_SKIP_BIOS_MENU, "0", OPTION_BOOLEAN, "skip bios submenu, start with configured or default" },
+ { OPTION_SKIP_PARTS_MENU, "0", OPTION_BOOLEAN, "skip parts submenu, start with first part" },
+ { OPTION_LAST_USED_FILTER, "", OPTION_STRING, "latest used filter" },
+ { OPTION_LAST_USED_MACHINE, "", OPTION_STRING, "latest used machine" },
+ { OPTION_INFO_AUTO_AUDIT, "0", OPTION_BOOLEAN, "enable auto audit in the general info panel" },
// UI options
- { nullptr, nullptr, OPTION_HEADER, "UI OPTIONS" },
- { OPTION_INFOS_SIZE "(0.05-1.00)", "0.75", OPTION_FLOAT, "UI right panel infos text size (0.05 - 1.00)" },
- { OPTION_FONT_ROWS "(25-40)", "30", OPTION_INTEGER, "UI font text size (25 - 40)" },
- { OPTION_HIDE_PANELS "(0-3)", "0", OPTION_INTEGER, "UI hide left/right panel in main view (0 = Show all, 1 = hide left, 2 = hide right, 3 = hide both" },
- { OPTION_UI_BORDER_COLOR, "ffffffff", OPTION_STRING, "UI border color (ARGB)" },
- { OPTION_UI_BACKGROUND_COLOR, "ef101030", OPTION_STRING, "UI background color (ARGB)" },
- { OPTION_UI_CLONE_COLOR, "ff808080", OPTION_STRING, "UI clone color (ARGB)" },
- { OPTION_UI_DIPSW_COLOR, "ffffff00", OPTION_STRING, "UI dipswitch color (ARGB)" },
- { OPTION_UI_GFXVIEWER_BG_COLOR, "ef101030", OPTION_STRING, "UI gfx viewer color (ARGB)" },
- { OPTION_UI_MOUSEDOWN_BG_COLOR, "b0606000", OPTION_STRING, "UI mouse down bg color (ARGB)" },
- { OPTION_UI_MOUSEDOWN_COLOR, "ffffff80", OPTION_STRING, "UI mouse down color (ARGB)" },
- { OPTION_UI_MOUSEOVER_BG_COLOR, "70404000", OPTION_STRING, "UI mouse over bg color (ARGB)" },
- { OPTION_UI_MOUSEOVER_COLOR, "ffffff80", OPTION_STRING, "UI mouse over color (ARGB)" },
- { OPTION_UI_SELECTED_BG_COLOR, "ef808000", OPTION_STRING, "UI selected bg color (ARGB)" },
- { OPTION_UI_SELECTED_COLOR, "ffffff00", OPTION_STRING, "UI selected color (ARGB)" },
- { OPTION_UI_SLIDER_COLOR, "ffffffff", OPTION_STRING, "UI slider color (ARGB)" },
- { OPTION_UI_SUBITEM_COLOR, "ffffffff", OPTION_STRING, "UI subitem color (ARGB)" },
- { OPTION_UI_TEXT_BG_COLOR, "ef000000", OPTION_STRING, "UI text bg color (ARGB)" },
- { OPTION_UI_TEXT_COLOR, "ffffffff", OPTION_STRING, "UI text color (ARGB)" },
- { OPTION_UI_UNAVAILABLE_COLOR, "ff404040", OPTION_STRING, "UI unavailable color (ARGB)" },
+ { nullptr, nullptr, OPTION_HEADER, "UI OPTIONS" },
+ { OPTION_INFOS_SIZE "(0.05-1.00)", "0.75", OPTION_FLOAT, "UI right panel infos text size (0.05 - 1.00)" },
+ { OPTION_FONT_ROWS "(25-40)", "30", OPTION_INTEGER, "UI font text size (25 - 40)" },
+ { OPTION_HIDE_PANELS "(0-3)", "0", OPTION_INTEGER, "UI hide left/right panel in main view (0 = Show all, 1 = hide left, 2 = hide right, 3 = hide both" },
+ { OPTION_UI_BORDER_COLOR, "ffffffff", OPTION_STRING, "UI border color (ARGB)" },
+ { OPTION_UI_BACKGROUND_COLOR, "ef101030", OPTION_STRING, "UI background color (ARGB)" },
+ { OPTION_UI_CLONE_COLOR, "ff808080", OPTION_STRING, "UI clone color (ARGB)" },
+ { OPTION_UI_DIPSW_COLOR, "ffffff00", OPTION_STRING, "UI dipswitch color (ARGB)" },
+ { OPTION_UI_GFXVIEWER_BG_COLOR, "ef101030", OPTION_STRING, "UI gfx viewer color (ARGB)" },
+ { OPTION_UI_MOUSEDOWN_BG_COLOR, "b0606000", OPTION_STRING, "UI mouse down bg color (ARGB)" },
+ { OPTION_UI_MOUSEDOWN_COLOR, "ffffff80", OPTION_STRING, "UI mouse down color (ARGB)" },
+ { OPTION_UI_MOUSEOVER_BG_COLOR, "70404000", OPTION_STRING, "UI mouse over bg color (ARGB)" },
+ { OPTION_UI_MOUSEOVER_COLOR, "ffffff80", OPTION_STRING, "UI mouse over color (ARGB)" },
+ { OPTION_UI_SELECTED_BG_COLOR, "ef808000", OPTION_STRING, "UI selected bg color (ARGB)" },
+ { OPTION_UI_SELECTED_COLOR, "ffffff00", OPTION_STRING, "UI selected color (ARGB)" },
+ { OPTION_UI_SLIDER_COLOR, "ffffffff", OPTION_STRING, "UI slider color (ARGB)" },
+ { OPTION_UI_SUBITEM_COLOR, "ffffffff", OPTION_STRING, "UI subitem color (ARGB)" },
+ { OPTION_UI_TEXT_BG_COLOR, "ef000000", OPTION_STRING, "UI text bg color (ARGB)" },
+ { OPTION_UI_TEXT_COLOR, "ffffffff", OPTION_STRING, "UI text color (ARGB)" },
+ { OPTION_UI_UNAVAILABLE_COLOR, "ff404040", OPTION_STRING, "UI unavailable color (ARGB)" },
{ nullptr }
};
diff --git a/src/emu/ui/optsmenu.cpp b/src/emu/ui/optsmenu.cpp
index 54e269bf4ed..b643fcef883 100644
--- a/src/emu/ui/optsmenu.cpp
+++ b/src/emu/ui/optsmenu.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Dankan1890
+// copyright-holders:Maurizio Petrarota
/*********************************************************************
ui/optsmenu.cpp
@@ -22,6 +22,7 @@
#include "ui/optsmenu.h"
#include "ui/custmenu.h"
#include "ui/inputmap.h"
+#include "ui/dirmenu.h"
#include "rendfont.h"
//-------------------------------------------------
@@ -30,6 +31,7 @@
ui_menu_game_options::ui_menu_game_options(running_machine &machine, render_container *container) : ui_menu(machine, container)
{
+ m_main = main_filters::actual;
}
//-------------------------------------------------
@@ -38,6 +40,7 @@ ui_menu_game_options::ui_menu_game_options(running_machine &machine, render_cont
ui_menu_game_options::~ui_menu_game_options()
{
+ main_filters::actual = m_main;
ui_menu::menu_stack->reset(UI_MENU_RESET_SELECT_FIRST);
save_ui_options(machine());
ui_globals::switch_image = true;
@@ -52,9 +55,16 @@ void ui_menu_game_options::handle()
bool changed = false;
// process the menu
-// ui_menu::menu_stack->parent->process(UI_MENU_PROCESS_NOINPUT);
-// const ui_menu_event *m_event = process(UI_MENU_PROCESS_LR_REPEAT | UI_MENU_PROCESS_NOIMAGE);
- const ui_menu_event *m_event = process(UI_MENU_PROCESS_LR_REPEAT);
+ const ui_menu_event *m_event;
+ if (strcmp(machine().options().ui(), "simple") == 0)
+ {
+ m_event = process(UI_MENU_PROCESS_LR_REPEAT);
+ }
+ else
+ {
+ ui_menu::menu_stack->parent->process(UI_MENU_PROCESS_NOINPUT);
+ m_event = process(UI_MENU_PROCESS_LR_REPEAT | UI_MENU_PROCESS_NOIMAGE);
+ }
if (m_event != nullptr && m_event->itemref != nullptr)
switch ((FPTR)m_event->itemref)
@@ -63,7 +73,7 @@ void ui_menu_game_options::handle()
{
if (m_event->iptkey == IPT_UI_LEFT || m_event->iptkey == IPT_UI_RIGHT)
{
- (m_event->iptkey == IPT_UI_RIGHT) ? ++main_filters::actual : --main_filters::actual;
+ (m_event->iptkey == IPT_UI_RIGHT) ? ++m_main : --m_main;
changed = true;
}
else if (m_event->iptkey == IPT_UI_SELECT)
@@ -73,7 +83,7 @@ void ui_menu_game_options::handle()
for (int index = 0; index < total; ++index)
s_sel[index] = main_filters::text[index];
- ui_menu::stack_push(global_alloc_clear<ui_menu_selector>(machine(), container, s_sel, main_filters::actual));
+ ui_menu::stack_push(global_alloc_clear<ui_menu_selector>(machine(), container, s_sel, m_main));
}
break;
}
@@ -149,6 +159,10 @@ void ui_menu_game_options::handle()
ui_menu::stack_push(global_alloc_clear<ui_menu_selector>(machine(), container, c_year::ui, c_year::actual));
break;
+ case CONF_DIR:
+ if (m_event->iptkey == IPT_UI_SELECT)
+ ui_menu::stack_push(global_alloc_clear<ui_menu_directory>(machine(), container));
+ break;
case MISC_MENU:
if (m_event->iptkey == IPT_UI_SELECT)
ui_menu::stack_push(global_alloc_clear<ui_menu_misc_options>(machine(), container));
@@ -169,16 +183,18 @@ void ui_menu_game_options::handle()
if (m_event->iptkey == IPT_UI_SELECT)
ui_menu::stack_push(global_alloc_clear<ui_menu_controller_mapping>(machine(), container));
break;
-
case CGI_MENU:
if (m_event->iptkey == IPT_UI_SELECT)
ui_menu::stack_push(global_alloc_clear<ui_menu_input_groups>(machine(), container));
break;
-
case CUSTOM_FILTER:
if (m_event->iptkey == IPT_UI_SELECT)
ui_menu::stack_push(global_alloc_clear<ui_menu_custom_filter>(machine(), container));
break;
+ case SAVE_CONFIG:
+ if (m_event->iptkey == IPT_UI_SELECT)
+ save_main_option(machine());
+ break;
}
if (changed)
@@ -191,14 +207,14 @@ void ui_menu_game_options::handle()
void ui_menu_game_options::populate()
{
- if (strcmp(machine().options().ui(),"simple")!=0)
- {
+ if (strcmp(machine().options().ui(),"simple")!=0)
+ {
// set filter arrow
std::string fbuff;
// add filter item
- UINT32 arrow_flags = get_arrow_flags((int)FILTER_FIRST, (int)FILTER_LAST, main_filters::actual);
- item_append(_("Filter"), main_filters::text[main_filters::actual], arrow_flags, (void *)(FPTR)FILTER_MENU);
+ UINT32 arrow_flags = get_arrow_flags((int)FILTER_FIRST, (int)FILTER_LAST, m_main);
+ item_append(_("Filter"), main_filters::text[m_main], arrow_flags, (void *)(FPTR)FILTER_MENU);
// add category subitem
if (main_filters::actual == FILTER_CATEGORY && !machine().inifile().ini_index.empty())
@@ -207,12 +223,12 @@ void ui_menu_game_options::populate()
int afile = inif.current_file;
arrow_flags = get_arrow_flags(0, inif.ini_index.size() - 1, afile);
- fbuff = " ^!File";
+ fbuff = _(" ^!File");
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), inif.actual_file().c_str(), arrow_flags, (void *)(FPTR)FILE_CATEGORY_FILTER);
arrow_flags = get_arrow_flags(0, inif.ini_index[afile].category.size() - 1, inif.current_category);
- fbuff = " ^!Category";
+ fbuff = _(" ^!Category");
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), inif.actual_category().c_str(), arrow_flags, (void *)(FPTR)CATEGORY_FILTER);
}
@@ -220,7 +236,7 @@ void ui_menu_game_options::populate()
else if (main_filters::actual == FILTER_MANUFACTURER && c_mnfct::ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, c_mnfct::ui.size() - 1, c_mnfct::actual);
- fbuff = "^!Manufacturer";
+ fbuff = _("^!Manufacturer");
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), c_mnfct::ui[c_mnfct::actual].c_str(), arrow_flags, (void *)(FPTR)MANUFACT_CAT_FILTER);
}
@@ -228,14 +244,14 @@ void ui_menu_game_options::populate()
else if (main_filters::actual == FILTER_YEAR && c_year::ui.size() > 0)
{
arrow_flags = get_arrow_flags(0, c_year::ui.size() - 1, c_year::actual);
- fbuff.assign("^!Year");
+ fbuff.assign(_("^!Year"));
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), c_year::ui[c_year::actual].c_str(), arrow_flags, (void *)(FPTR)YEAR_CAT_FILTER);
}
// add custom subitem
else if (main_filters::actual == FILTER_CUSTOM)
{
- fbuff = "^!Setup custom filter";
+ fbuff = _("^!Setup custom filter");
convert_command_glyph(fbuff);
item_append(fbuff.c_str(), nullptr, 0, (void *)(FPTR)CUSTOM_FILTER);
}
@@ -244,6 +260,7 @@ void ui_menu_game_options::populate()
// add options items
item_append(_("Customize UI"), nullptr, 0, (void *)(FPTR)CUSTOM_MENU);
+ item_append(_("Configure Directories"), nullptr, 0, (void *)(FPTR)CONF_DIR);
}
item_append(_("Display Options"), nullptr, 0, (void *)(FPTR)DISPLAY_MENU);
item_append(_("Sound Options"), nullptr, 0, (void *)(FPTR)SOUND_MENU);
@@ -251,6 +268,7 @@ void ui_menu_game_options::populate()
item_append(_("Device Mapping"), nullptr, 0, (void *)(FPTR)CONTROLLER_MENU);
item_append(_("General Inputs"), nullptr, 0, (void *)(FPTR)CGI_MENU);
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
+ item_append(_("Save Configuration"), nullptr, 0, (void *)(FPTR)SAVE_CONFIG);
custombottom = 2.0f * machine().ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER;
customtop = machine().ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER;
@@ -265,7 +283,7 @@ void ui_menu_game_options::custom_render(void *selectedref, float top, float bot
float width;
ui_manager &mui = machine().ui();
mui.draw_text_full(container, _("Settings"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
float maxwidth = MAX(origx2 - origx1, width);
@@ -285,7 +303,7 @@ void ui_menu_game_options::custom_render(void *selectedref, float top, float bot
// draw the text within it
mui.draw_text_full(container, _("Settings"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
}
//-------------------------------------------------
@@ -306,3 +324,55 @@ void save_ui_options(running_machine &machine)
else
machine.popmessage(_("**Error to save ui.ini**"));
}
+
+//-------------------------------------------------
+// save main option
+//-------------------------------------------------
+
+void save_main_option(running_machine &machine)
+{
+ // parse the file
+ std::string error;
+ emu_options options(machine.options()); // This way we make sure that all OSD parts are in
+ std::string error_string;
+
+ // attempt to open the main ini file
+ {
+ emu_file file(machine.options().ini_path(), OPEN_FLAG_READ);
+ if (file.open(emulator_info::get_configname(), ".ini") == FILERR_NONE)
+ {
+ bool result = options.parse_ini_file((core_file&)file, OPTION_PRIORITY_MAME_INI, OPTION_PRIORITY_DRIVER_INI, error);
+ if (!result)
+ {
+ osd_printf_error(_("**Error to load %s.ini**"), emulator_info::get_configname());
+ return;
+ }
+ }
+ }
+
+ for (emu_options::entry *f_entry = machine.options().first(); f_entry != nullptr; f_entry = f_entry->next())
+ {
+ if (f_entry->is_changed())
+ {
+ options.set_value(f_entry->name(), f_entry->value(), OPTION_PRIORITY_CMDLINE, error_string);
+ }
+ }
+
+ // attempt to open the output file
+ {
+ emu_file file(machine.options().ini_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
+ if (file.open(emulator_info::get_configname(), ".ini") == FILERR_NONE)
+ {
+ // generate the updated INI
+ std::string initext = options.output_ini();
+ file.puts(initext.c_str());
+ file.close();
+ }
+ else {
+ machine.popmessage(_("**Error to save %s.ini**"), emulator_info::get_configname());
+ return;
+ }
+ }
+ machine.ui().popup_time(3, "%s", _("\n Configuration saved \n\n"));
+}
+
diff --git a/src/emu/ui/optsmenu.h b/src/emu/ui/optsmenu.h
index 13e857ec7ba..4dd2d0f53be 100644
--- a/src/emu/ui/optsmenu.h
+++ b/src/emu/ui/optsmenu.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Dankan1890
+// copyright-holders:Maurizio Petrarota
/***************************************************************************
ui/optsmenu.h
@@ -23,6 +23,8 @@ public:
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
private:
+ UINT16 m_main;
+
enum
{
FILTER_MENU = 1,
@@ -30,6 +32,7 @@ private:
MANUFACT_CAT_FILTER,
YEAR_CAT_FILTER,
CATEGORY_FILTER,
+ CONF_DIR,
MISC_MENU,
DISPLAY_MENU,
CUSTOM_MENU,
@@ -37,11 +40,13 @@ private:
CONTROLLER_MENU,
SAVE_OPTIONS,
CGI_MENU,
- CUSTOM_FILTER
+ CUSTOM_FILTER,
+ SAVE_CONFIG
};
};
// save options to file
void save_ui_options(running_machine &machine);
+void save_main_option(running_machine &machine);
#endif /* __UI_OPTSMENU_H__ */
diff --git a/src/emu/ui/selector.cpp b/src/emu/ui/selector.cpp
index f4c94e6bc2d..ae786dd1834 100644
--- a/src/emu/ui/selector.cpp
+++ b/src/emu/ui/selector.cpp
@@ -18,7 +18,7 @@
// ctor / dtor
//-------------------------------------------------
-ui_menu_selector::ui_menu_selector(running_machine &machine, render_container *container, std::vector<std::string> s_sel, UINT16 &s_actual, int category, int _hover)
+ui_menu_selector::ui_menu_selector(running_machine &machine, render_container *container, std::vector<std::string> s_sel, UINT16 &s_actual, int category, int _hover)
: ui_menu(machine, container), m_selector(s_actual)
{
m_category = category;
@@ -152,7 +152,7 @@ void ui_menu_selector::custom_render(void *selectedref, float top, float bottom,
std::string tempbuf = std::string(_("Selection List - Search: ")).append(m_search).append("_");
// get the size of the text
- mui.draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
+ mui.draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += (2.0f * UI_BOX_LR_BORDER) + 0.01f;
float maxwidth = MAX(width, origx2 - origx1);
@@ -172,7 +172,7 @@ void ui_menu_selector::custom_render(void *selectedref, float top, float bottom,
y1 += UI_BOX_TB_BORDER;
// draw the text within it
- mui.draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
+ mui.draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
// bottom text
@@ -180,7 +180,7 @@ void ui_menu_selector::custom_render(void *selectedref, float top, float bottom,
std::string ui_select_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD));
tempbuf.assign(_("Double click or press ")).append(ui_select_text).append(_(" to select"));
- mui.draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
+ mui.draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER,
DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
maxwidth = MAX(maxwidth, width);
@@ -200,7 +200,7 @@ void ui_menu_selector::custom_render(void *selectedref, float top, float bottom,
y1 += UI_BOX_TB_BORDER;
// draw the text within it
- mui.draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
+ mui.draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER,
DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
}
diff --git a/src/emu/ui/selgame.cpp b/src/emu/ui/selgame.cpp
index e950c96b1b9..34fdab6d64e 100644
--- a/src/emu/ui/selgame.cpp
+++ b/src/emu/ui/selgame.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Dankan1890
+// copyright-holders:Maurizio Petrarota
/*********************************************************************
ui/selgame.cpp
@@ -20,7 +20,6 @@
#include "ui/inifile.h"
#include "rendfont.h"
#include "ui/datmenu.h"
-#include "ui/dirmenu.h"
#include "ui/optsmenu.h"
#include "ui/selector.h"
#include "ui/selsoft.h"
@@ -35,7 +34,14 @@
extern const char UI_VERSION_TAG[];
static bool first_start = true;
-static const char *dats_info[] = { "General Info", "History", "Mameinfo", "Sysinfo", "Messinfo", "Command", "Mamescore" };
+static const char *dats_info[] = {
+ __("General Info"),
+ __("History"),
+ __("Mameinfo"),
+ __("Sysinfo"),
+ __("Messinfo"),
+ __("Command"),
+ __("Mamescore") };
std::vector<const game_driver *> ui_menu_select_game::m_sortedlist;
int ui_menu_select_game::m_isabios = 0;
@@ -105,62 +111,13 @@ bool sort_game_list(const game_driver *x, const game_driver *y)
}
//-------------------------------------------------
-// save main option
-//-------------------------------------------------
-
-void save_main_option(running_machine &machine)
-{
- // parse the file
- std::string error;
- emu_options options(machine.options()); // This way we make sure that all OSD parts are in
- std::string error_string;
-
- // attempt to open the main ini file
- {
- emu_file file(machine.options().ini_path(), OPEN_FLAG_READ);
- if (file.open(emulator_info::get_configname(), ".ini") == FILERR_NONE)
- {
- bool result = options.parse_ini_file((core_file&)file, OPTION_PRIORITY_MAME_INI, OPTION_PRIORITY_DRIVER_INI, error);
- if (!result)
- {
- osd_printf_error("**Error to load %s.ini**", emulator_info::get_configname());
- return;
- }
- }
- }
-
- for (emu_options::entry *f_entry = machine.options().first(); f_entry != nullptr; f_entry = f_entry->next())
- {
- if (f_entry->is_changed())
- {
- options.set_value(f_entry->name(), f_entry->value(), OPTION_PRIORITY_CMDLINE, error_string);
- }
- }
-
- // attempt to open the output file
- {
- emu_file file(machine.options().ini_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
- if (file.open(emulator_info::get_configname(), ".ini") == FILERR_NONE)
- {
- // generate the updated INI
- std::string initext = options.output_ini();
- file.puts(initext.c_str());
- file.close();
- }
- else {
- machine.popmessage("**Error to save %s.ini**", emulator_info::get_configname());
- return;
- }
- }
- machine.ui().popup_time(3, "\n Configuration saved \n\n");
-}
-
-//-------------------------------------------------
// ctor
//-------------------------------------------------
ui_menu_select_game::ui_menu_select_game(running_machine &machine, render_container *container, const char *gamename) : ui_menu(machine, container)
{
+ m_focus = focused_menu::main;
+ highlight = 0;
std::string error_string, last_filter, sub_filter;
ui_options &moptions = machine.ui().options();
@@ -254,10 +211,10 @@ ui_menu_select_game::~ui_menu_select_game()
else
driver = (selected >= 0 && selected < item.size()) ? (const game_driver *)item[selected].ref : nullptr;
- if ((FPTR)driver > 3)
+ if ((FPTR)driver > skip_main_items)
last_driver = driver->name;
- if ((FPTR)swinfo > 3)
+ if ((FPTR)swinfo > skip_main_items)
last_driver = swinfo->shortname;
std::string filter(main_filters::text[main_filters::actual]);
@@ -278,6 +235,9 @@ ui_menu_select_game::~ui_menu_select_game()
void ui_menu_select_game::handle()
{
+ if (m_prev_selected == nullptr)
+ m_prev_selected = item[0].ref;
+
bool check_filter = false;
bool enabled_dats = machine().ui().options().enabled_dats();
@@ -312,10 +272,19 @@ void ui_menu_select_game::handle()
// handle selections
else if (m_event->iptkey == IPT_UI_SELECT)
{
- if (isfavorite())
- inkey_select_favorite(m_event);
- else
- inkey_select(m_event);
+ if (m_focus == focused_menu::main)
+ {
+ if (isfavorite())
+ inkey_select_favorite(m_event);
+ else
+ inkey_select(m_event);
+ }
+ else if (m_focus == focused_menu::left)
+ {
+ l_hover = highlight;
+ check_filter = true;
+ m_prev_selected = nullptr;
+ }
}
// handle UI_LEFT
@@ -357,17 +326,15 @@ void ui_menu_select_game::handle()
}
// handle UI_UP_FILTER
- else if (m_event->iptkey == IPT_UI_UP_FILTER && main_filters::actual > FILTER_FIRST)
+ else if (m_event->iptkey == IPT_UI_UP_FILTER && highlight > FILTER_FIRST)
{
- l_hover = main_filters::actual - 1;
- check_filter = true;
+ highlight--;
}
// handle UI_DOWN_FILTER
- else if (m_event->iptkey == IPT_UI_DOWN_FILTER && main_filters::actual < FILTER_LAST)
+ else if (m_event->iptkey == IPT_UI_DOWN_FILTER && highlight < FILTER_LAST)
{
- l_hover = main_filters::actual + 1;
- check_filter = true;
+ highlight++;
}
// handle UI_LEFT_PANEL
@@ -418,13 +385,13 @@ void ui_menu_select_game::handle()
if (!machine().favorite().isgame_favorite(driver))
{
machine().favorite().add_favorite_game(driver);
- machine().popmessage("%s\n added to favorites list.", driver->description);
+ machine().popmessage(_("%s\n added to favorites list."), driver->description);
}
else
{
machine().favorite().remove_favorite_game();
- machine().popmessage("%s\n removed from favorites list.", driver->description);
+ machine().popmessage(_("%s\n removed from favorites list."), driver->description);
}
}
}
@@ -433,7 +400,7 @@ void ui_menu_select_game::handle()
ui_software_info *swinfo = (ui_software_info *)m_event->itemref;
if ((FPTR)swinfo > 3)
{
- machine().popmessage("%s\n removed from favorites list.", swinfo->longname.c_str());
+ machine().popmessage(_("%s\n removed from favorites list."), swinfo->longname.c_str());
machine().favorite().remove_favorite_game(*swinfo);
reset(UI_MENU_RESET_SELECT_FIRST);
}
@@ -441,7 +408,7 @@ void ui_menu_select_game::handle()
}
// handle UI_EXPORT
- else if (m_event->iptkey == IPT_UI_EXPORT)
+ else if (m_event->iptkey == IPT_UI_EXPORT && !isfavorite())
inkey_export();
// handle UI_AUDIT_FAST
@@ -456,36 +423,46 @@ void ui_menu_select_game::handle()
else if (m_event->iptkey == IPT_SPECIAL)
inkey_special(m_event);
+ else if (m_event->iptkey == IPT_UI_CONFIGURE)
+ inkey_configure(m_event);
+
else if (m_event->iptkey == IPT_OTHER)
+ {
+ m_prev_selected = nullptr;
check_filter = true;
+ highlight = l_hover;
+ }
}
if (m_event != nullptr && m_event->itemref == nullptr)
{
- if (m_event->iptkey == IPT_SPECIAL && m_event->unichar == 0x09)
- selected = m_prev_selected;
-
- // handle UI_UP_FILTER
- else if (m_event->iptkey == IPT_UI_UP_FILTER && main_filters::actual > FILTER_FIRST)
+ if (m_event->iptkey == IPT_SPECIAL)
+ inkey_special(m_event);
+ else if (m_event->iptkey == IPT_UI_CONFIGURE)
+ inkey_configure(m_event);
+ else if (m_event->iptkey == IPT_UI_SELECT && m_focus == focused_menu::left)
{
- l_hover = main_filters::actual - 1;
+ m_prev_selected = nullptr;
+ l_hover = highlight;
check_filter = true;
}
+ // handle UI_UP_FILTER
+ else if (m_event->iptkey == IPT_UI_UP_FILTER && highlight > FILTER_FIRST)
+ {
+ highlight--;
+ }
// handle UI_DOWN_FILTER
- else if (m_event->iptkey == IPT_UI_DOWN_FILTER && main_filters::actual < FILTER_LAST)
+ else if (m_event->iptkey == IPT_UI_DOWN_FILTER && highlight < FILTER_LAST)
{
- l_hover = main_filters::actual + 1;
- check_filter = true;
+ highlight++;
}
- else if (m_event->iptkey == IPT_OTHER)
- check_filter = true;
}
// if we're in an error state, overlay an error message
if (ui_error)
- machine().ui().draw_text_box(container, "The selected machine is missing one or more required ROM or CHD images. "
- "Please select a different machine.\n\nPress any key (except ESC) to continue.", JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR);
+ machine().ui().draw_text_box(container, _("The selected machine is missing one or more required ROM or CHD images. "
+ "Please select a different machine.\n\nPress any key (except ESC) to continue."), JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR);
// handle filters selection from key shortcuts
if (check_filter)
@@ -620,10 +597,10 @@ void ui_menu_select_game::populate()
// add special items
if (ui_menu::stack_has_special_main_menu())
{
- item_append(_("Configure Options"), nullptr, MENU_FLAG_UI, (void *)(FPTR)1);
- item_append(_("Configure Directories"), nullptr, MENU_FLAG_UI, (void *)(FPTR)2);
- item_append(_("Save Configuration"), nullptr, MENU_FLAG_UI, (void *)(FPTR)3);
- skip_main_items = 3;
+ UINT32 flags_ui = MENU_FLAG_UI | MENU_FLAG_LEFT_ARROW | MENU_FLAG_RIGHT_ARROW;
+ item_append(_("Configure Options"), nullptr, flags_ui, (void *)(FPTR)CONF_OPTS);
+ item_append(_("Configure Machine"), nullptr, flags_ui, (void *)(FPTR)CONF_MACHINE);
+ skip_main_items = 2;
}
else
skip_main_items = 0;
@@ -683,18 +660,73 @@ void ui_menu_select_game::build_available_list()
// now check and include NONE_NEEDED
for (int x = 0; x < m_total; ++x)
- if (!m_included[x])
+ {
+ const game_driver *driver = &driver_list::driver(x);
+ if (!m_included[x] && driver != &GAME_NAME(___empty))
{
- if (&driver_list::driver(x) == &GAME_NAME(___empty))
- continue;
+ const rom_entry *rom = driver->rom;
+ bool noroms = true;
- const rom_entry *rom = driver_list::driver(x).rom;
- if (ROMENTRY_ISREGION(rom) && ROMENTRY_ISEND(++rom))
+ // check NO-DUMP
+ for (; !ROMENTRY_ISEND(rom) && noroms == true; ++rom)
+ if (ROMENTRY_ISFILE(rom))
+ {
+ hash_collection hashes(ROM_GETHASHDATA(rom));
+ if (!hashes.flag(hash_collection::FLAG_NO_DUMP) && !ROM_ISOPTIONAL(rom))
+ noroms = false;
+ }
+
+ if (!noroms)
+ {
+ // check if clone == parent
+ int cx = driver_list::clone(*driver);
+ if (cx != -1 && m_included[cx])
+ {
+ const game_driver *drv = &driver_list::driver(cx);
+ const rom_entry *parentrom = drv->rom;
+ if ((rom = driver->rom) == parentrom)
+ noroms = true;
+
+ // check if clone < parent
+ if (!noroms)
+ {
+ noroms = true;
+ for (; !ROMENTRY_ISEND(rom) && noroms == true; ++rom)
+ {
+ if (ROMENTRY_ISFILE(rom))
+ {
+ hash_collection hashes(ROM_GETHASHDATA(rom));
+ if (hashes.flag(hash_collection::FLAG_NO_DUMP) || ROM_ISOPTIONAL(rom))
+ continue;
+
+ UINT64 lenght = ROM_GETLENGTH(rom);
+ bool found = false;
+ for (parentrom = drv->rom; !ROMENTRY_ISEND(parentrom) && found == false; ++parentrom)
+ {
+ if (ROMENTRY_ISFILE(parentrom) && ROM_GETLENGTH(parentrom) == lenght)
+ {
+ hash_collection parenthashes(ROM_GETHASHDATA(parentrom));
+ if (parenthashes.flag(hash_collection::FLAG_NO_DUMP) || ROM_ISOPTIONAL(parentrom))
+ continue;
+
+ if (hashes == parenthashes)
+ found = true;
+ }
+ }
+ noroms = found;
+ }
+ }
+ }
+ }
+ }
+
+ if (noroms)
{
m_availsortedlist.push_back(&driver_list::driver(x));
m_included[x] = true;
}
}
+ }
// sort
std::stable_sort(m_availsortedlist.begin(), m_availsortedlist.end(), sort_game_list);
@@ -723,27 +755,39 @@ void ui_menu_select_game::custom_render(void *selectedref, float top, float bott
ui_manager &mui = machine().ui();
float tbarspace = mui.get_line_height();
- strprintf(tempbuf[0], "MAME %s ( %d / %d machines (%d BIOS) )", bare_build_version, visible_items, (driver_list::total() - 1), m_isabios);
- std::string filtered;
+ tempbuf[0] = string_format(_("%1$s %2$s ( %3$d / %4$d machines (%5$d BIOS) )"),
+ emulator_info::get_appname(),
+ bare_build_version,
+ visible_items,
+ (driver_list::total() - 1),
+ m_isabios);
+ std::string filtered;
if (main_filters::actual == FILTER_CATEGORY && !machine().inifile().ini_index.empty())
{
- std::string s_file(machine().inifile().actual_file());
- std::string s_category(machine().inifile().actual_category());
- filtered.assign(main_filters::text[main_filters::actual]).append(" (").append(s_file).append(" - ").append(s_category).append(") -");
+ filtered = string_format(_("%1$s (%2$s - %3$s) - "),
+ main_filters::text[main_filters::actual],
+ machine().inifile().actual_file(),
+ machine().inifile().actual_category());
}
-
else if (main_filters::actual == FILTER_MANUFACTURER)
- filtered.assign(main_filters::text[main_filters::actual]).append(" (").append(c_mnfct::ui[c_mnfct::actual]).append(") -");
-
+ {
+ filtered = string_format(_("%1$s (%2$s) - "),
+ main_filters::text[main_filters::actual],
+ c_mnfct::ui[c_mnfct::actual]);
+ }
else if (main_filters::actual == FILTER_YEAR)
- filtered.assign(main_filters::text[main_filters::actual]).append(" (").append(c_year::ui[c_year::actual]).append(") -");
+ {
+ filtered = string_format(_("%1$s (%2$s) - "),
+ main_filters::text[main_filters::actual],
+ c_year::ui[c_year::actual]);
+ }
// display the current typeahead
if (isfavorite())
tempbuf[1].clear();
else
- tempbuf[1].assign(filtered).append(_(" Search: ")).append(m_search).append("_");
+ tempbuf[1] = string_format(_("%1$s Search: %2$s_"), filtered, m_search);
// get the size of the text
for (int line = 0; line < 2; ++line)
@@ -778,52 +822,52 @@ void ui_menu_select_game::custom_render(void *selectedref, float top, float bott
// determine the text to render below
if (!isfavorite())
- driver = ((FPTR)selectedref > skip_main_items) ? (const game_driver *)selectedref : nullptr;
+ driver = ((FPTR)selectedref > skip_main_items) ? (const game_driver *)selectedref : ((m_prev_selected != nullptr) ? (const game_driver *)m_prev_selected : nullptr);
else
{
- swinfo = ((FPTR)selectedref > skip_main_items) ? (ui_software_info *)selectedref : nullptr;
- if (swinfo && swinfo->startempty == 1)
+ swinfo = ((FPTR)selectedref > skip_main_items) ? (ui_software_info *)selectedref : ((m_prev_selected != nullptr) ? (ui_software_info *)m_prev_selected : nullptr);
+ if (swinfo != nullptr && swinfo->startempty == 1)
driver = swinfo->driver;
}
- if ((FPTR)driver > 3)
+ if (driver != nullptr)
{
isstar = machine().favorite().isgame_favorite(driver);
// first line is game name
- strprintf(tempbuf[0], "Romset: %-.100s", driver->name);
+ tempbuf[0] = string_format(_("Romset: %1$-.100s"), driver->name);
// next line is year, manufacturer
- strprintf(tempbuf[1], "%s, %-.100s", driver->year, driver->manufacturer);
+ tempbuf[1] = string_format(_("%1$s, %2$-.100s"), driver->year, driver->manufacturer);
// next line is clone/parent status
int cloneof = driver_list::non_bios_clone(*driver);
if (cloneof != -1)
- strprintf(tempbuf[2], "Driver is clone of: %-.100s", driver_list::driver(cloneof).description);
+ tempbuf[2] = string_format(_("Driver is clone of: %1$-.100s"), driver_list::driver(cloneof).description);
else
- tempbuf[2] = "Driver is parent";
+ tempbuf[2] = _("Driver is parent");
// next line is overall driver status
if (driver->flags & MACHINE_NOT_WORKING)
- tempbuf[3] = "Overall: NOT WORKING";
+ tempbuf[3] = _("Overall: NOT WORKING");
else if (driver->flags & MACHINE_UNEMULATED_PROTECTION)
- tempbuf[3] = "Overall: Unemulated Protection";
+ tempbuf[3] = _("Overall: Unemulated Protection");
else
- tempbuf[3] = "Overall: Working";
+ tempbuf[3] = _("Overall: Working");
// next line is graphics, sound status
if (driver->flags & (MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_COLORS))
- tempbuf[4] = "Graphics: Imperfect, ";
+ tempbuf[4] = _("Graphics: Imperfect, ");
else
- tempbuf[4] = "Graphics: OK, ";
+ tempbuf[4] = _("Graphics: OK, ");
if (driver->flags & MACHINE_NO_SOUND)
- tempbuf[4].append("Sound: Unimplemented");
+ tempbuf[4].append(_("Sound: Unimplemented"));
else if (driver->flags & MACHINE_IMPERFECT_SOUND)
- tempbuf[4].append("Sound: Imperfect");
+ tempbuf[4].append(_("Sound: Imperfect"));
else
- tempbuf[4].append("Sound: OK");
+ tempbuf[4].append(_("Sound: OK"));
color = UI_GREEN_COLOR;
@@ -835,48 +879,48 @@ void ui_menu_select_game::custom_render(void *selectedref, float top, float bott
color = UI_RED_COLOR;
}
- else if ((FPTR)swinfo > 3)
+ else if (swinfo != nullptr)
{
isstar = machine().favorite().isgame_favorite(*swinfo);
// first line is system
- strprintf(tempbuf[0], "System: %-.100s", swinfo->driver->description);
+ tempbuf[0] = string_format(_("System: %1$-.100s"), swinfo->driver->description);
// next line is year, publisher
- strprintf(tempbuf[1], "%s, %-.100s", swinfo->year.c_str(), swinfo->publisher.c_str());
+ tempbuf[1] = string_format(_("%1$s, %2$-.100s"), swinfo->year.c_str(), swinfo->publisher.c_str());
// next line is parent/clone
if (!swinfo->parentname.empty())
- strprintf(tempbuf[2], "Software is clone of: %-.100s", !swinfo->parentlongname.empty() ? swinfo->parentlongname.c_str() : swinfo->parentname.c_str());
+ tempbuf[2] = string_format(_("Software is clone of: %1$-.100s"), !swinfo->parentlongname.empty() ? swinfo->parentlongname.c_str() : swinfo->parentname.c_str());
else
- tempbuf[2] = "Software is parent";
+ tempbuf[2] = _("Software is parent");
// next line is supported status
if (swinfo->supported == SOFTWARE_SUPPORTED_NO)
{
- tempbuf[3] = "Supported: No";
+ tempbuf[3] = _("Supported: No");
color = UI_RED_COLOR;
}
else if (swinfo->supported == SOFTWARE_SUPPORTED_PARTIAL)
{
- tempbuf[3] = "Supported: Partial";
+ tempbuf[3] = _("Supported: Partial");
color = UI_YELLOW_COLOR;
}
else
{
- tempbuf[3] = "Supported: Yes";
+ tempbuf[3] = _("Supported: Yes");
color = UI_GREEN_COLOR;
}
// last line is romset name
- strprintf(tempbuf[4], "romset: %-.100s", swinfo->shortname.c_str());
+ tempbuf[4] = string_format(_("romset: %1$-.100s"), swinfo->shortname.c_str());
}
else
{
std::string copyright(emulator_info::get_copyright());
size_t found = copyright.find("\n");
tempbuf[0].clear();
- tempbuf[1].assign(emulator_info::get_appname()).append(" ").append(build_version);
+ tempbuf[1] = string_format(_("%1$s %2$s"), emulator_info::get_appname(), build_version);
tempbuf[2] = copyright.substr(0, found);
tempbuf[3] = copyright.substr(found + 1);
tempbuf[4].clear();
@@ -961,14 +1005,15 @@ void ui_menu_select_game::inkey_select(const ui_menu_event *m_event)
const game_driver *driver = (const game_driver *)m_event->itemref;
// special case for configure options
- if ((FPTR)driver == 1)
+ if ((FPTR)driver == CONF_OPTS)
ui_menu::stack_push(global_alloc_clear<ui_menu_game_options>(machine(), container));
- // special case for configure directory
- else if ((FPTR)driver == 2)
- ui_menu::stack_push(global_alloc_clear<ui_menu_directory>(machine(), container));
- // anything else is a driver
- else if ((FPTR)driver == 3) {
- save_main_option(machine());
+ // special case for configure machine
+ else if ((FPTR)driver == CONF_MACHINE)
+ {
+ if (m_prev_selected != nullptr)
+ ui_menu::stack_push(global_alloc_clear<ui_menu_machine_configure>(machine(), container, (const game_driver *)m_prev_selected));
+ else
+ return;
}
// anything else is a driver
else
@@ -1025,15 +1070,19 @@ void ui_menu_select_game::inkey_select_favorite(const ui_menu_event *m_event)
ui_options &mopt = machine().ui().options();
// special case for configure options
- if ((FPTR)ui_swinfo == 1)
+ if ((FPTR)ui_swinfo == CONF_OPTS)
ui_menu::stack_push(global_alloc_clear<ui_menu_game_options>(machine(), container));
-
- // special case for configure directory
- else if ((FPTR)ui_swinfo == 2)
- ui_menu::stack_push(global_alloc_clear<ui_menu_directory>(machine(), container));
- else if ((FPTR)ui_swinfo == 3)
+ // special case for configure machine
+ else if ((FPTR)ui_swinfo == CONF_MACHINE)
{
- save_main_option(machine());
+ if (m_prev_selected != nullptr)
+ {
+ ui_software_info *swinfo = (ui_software_info *)m_prev_selected;
+ if (swinfo->startempty == 1)
+ ui_menu::stack_push(global_alloc_clear<ui_menu_machine_configure>(machine(), container, swinfo->driver));
+ }
+ else
+ return;
}
else if (ui_swinfo->startempty == 1)
{
@@ -1146,28 +1195,69 @@ void ui_menu_select_game::inkey_special(const ui_menu_event *m_event)
*(char *)utf8_previous_char(&m_search[buflen]) = 0;
reset(UI_MENU_RESET_SELECT_FIRST);
}
-
- // if it's any other key and we're not maxed out, update
else if ((m_event->unichar >= ' ' && m_event->unichar < 0x7f) && !isfavorite())
{
+ // if it's any other key and we're not maxed out, update
buflen += utf8_from_uchar(&m_search[buflen], ARRAY_LENGTH(m_search) - buflen, m_event->unichar);
m_search[buflen] = 0;
reset(UI_MENU_RESET_SELECT_FIRST);
}
+}
+
- // Tab key
- else if (m_event->unichar == 0x09)
+void ui_menu_select_game::inkey_configure(const ui_menu_event *m_event)
+{
+ if (selected <= visible_items && m_focus == focused_menu::main)
{
- // if the selection is in the main screen, save and go to submenu
- if (selected <= visible_items)
+ m_prev_selected = item[selected].ref;
+ selected = visible_items + 1;
+ }
+ else if (selected > visible_items && m_focus == focused_menu::main)
+ {
+ if (ui_globals::panels_status != HIDE_LEFT_PANEL)
+ m_focus = focused_menu::left;
+
+ else if (ui_globals::panels_status == HIDE_BOTH)
{
- m_prev_selected = selected;
- selected = visible_items + 1;
+ for (int x = 0; x < item.size(); ++x)
+ if (item[x].ref == m_prev_selected)
+ selected = x;
}
-
- // otherwise, retrieve the previous position
else
- selected = m_prev_selected;
+ m_focus = focused_menu::righttop;
+ }
+ else if (m_focus == focused_menu::left)
+ {
+ if (ui_globals::panels_status != HIDE_RIGHT_PANEL)
+ m_focus = focused_menu::righttop;
+ else
+ {
+ m_focus = focused_menu::main;
+ if (m_prev_selected == nullptr)
+ {
+ selected = 0;
+ return;
+ }
+
+ for (int x = 0; x < item.size(); ++x)
+ if (item[x].ref == m_prev_selected)
+ selected = x;
+ }
+ }
+ else if (m_focus == focused_menu::righttop)
+ m_focus = focused_menu::rightbottom;
+ else if (m_focus == focused_menu::rightbottom)
+ {
+ m_focus = focused_menu::main;
+ if (m_prev_selected == nullptr)
+ {
+ selected = 0;
+ return;
+ }
+
+ for (int x = 0; x < item.size(); ++x)
+ if (item[x].ref == m_prev_selected)
+ selected = x;
}
}
@@ -1424,47 +1514,49 @@ void ui_menu_select_game::populate_search()
void ui_menu_select_game::general_info(const game_driver *driver, std::string &buffer)
{
- strprintf(buffer, "Romset: %-.100s\n", driver->name);
- buffer.append("Year: ").append(driver->year).append("\n");
- strcatprintf(buffer, "Manufacturer: %-.100s\n", driver->manufacturer);
+ std::ostringstream str;
+
+ util::stream_format(str, _("Romset: %1$-.100s\n"), driver->name);
+ util::stream_format(str, _("Year: %1$s\n"), driver->year);
+ util::stream_format(str, _("Manufacturer: %1$-.100s\n"), driver->manufacturer);
int cloneof = driver_list::non_bios_clone(*driver);
if (cloneof != -1)
- strcatprintf(buffer, "Driver is Clone of: %-.100s\n", driver_list::driver(cloneof).description);
+ util::stream_format(str, _("Driver is Clone of: %1$-.100s\n"), driver_list::driver(cloneof).description);
else
- buffer.append("Driver is Parent\n");
+ str << _("Driver is Parent\n");
if (driver->flags & MACHINE_NOT_WORKING)
- buffer.append("Overall: NOT WORKING\n");
+ str << _("Overall: NOT WORKING\n");
else if (driver->flags & MACHINE_UNEMULATED_PROTECTION)
- buffer.append("Overall: Unemulated Protection\n");
+ str << _("Overall: Unemulated Protection\n");
else
- buffer.append("Overall: Working\n");
+ str << _("Overall: Working\n");
if (driver->flags & MACHINE_IMPERFECT_COLORS)
- buffer.append("Graphics: Imperfect Colors\n");
+ str << _("Graphics: Imperfect Colors\n");
else if (driver->flags & MACHINE_WRONG_COLORS)
- buffer.append("Graphics: Wrong Colors\n");
+ str << ("Graphics: Wrong Colors\n");
else if (driver->flags & MACHINE_IMPERFECT_GRAPHICS)
- buffer.append("Graphics: Imperfect\n");
+ str << _("Graphics: Imperfect\n");
else
- buffer.append("Graphics: OK\n");
+ str << _("Graphics: OK\n");
if (driver->flags & MACHINE_NO_SOUND)
- buffer.append("Sound: Unimplemented\n");
+ str << _("Sound: Unimplemented\n");
else if (driver->flags & MACHINE_IMPERFECT_SOUND)
- buffer.append("Sound: Imperfect\n");
+ str << _("Sound: Imperfect\n");
else
- buffer.append("Sound: OK\n");
-
- strcatprintf(buffer, "Driver is Skeleton: %s\n", ((driver->flags & MACHINE_IS_SKELETON) ? "Yes" : "No"));
- strcatprintf(buffer, "Game is Mechanical: %s\n", ((driver->flags & MACHINE_MECHANICAL) ? "Yes" : "No"));
- strcatprintf(buffer, "Requires Artwork: %s\n", ((driver->flags & MACHINE_REQUIRES_ARTWORK) ? "Yes" : "No"));
- strcatprintf(buffer, "Requires Clickable Artwork: %s\n", ((driver->flags & MACHINE_CLICKABLE_ARTWORK) ? "Yes" : "No"));
- strcatprintf(buffer, "Support Cocktail: %s\n", ((driver->flags & MACHINE_NO_COCKTAIL) ? "Yes" : "No"));
- strcatprintf(buffer, "Driver is Bios: %s\n", ((driver->flags & MACHINE_IS_BIOS_ROOT) ? "Yes" : "No"));
- strcatprintf(buffer, "Support Save: %s\n", ((driver->flags & MACHINE_SUPPORTS_SAVE) ? "Yes" : "No"));
- strcatprintf(buffer, "Screen Orentation: %s\n", ((driver->flags & ORIENTATION_SWAP_XY) ? "Vertical" : "Horizontal"));
+ str << _("Sound: OK\n");
+
+ util::stream_format(str, _("Driver is Skeleton: %1$s\n"), ((driver->flags & MACHINE_IS_SKELETON) ? _("Yes") : _("No")));
+ util::stream_format(str, _("Game is Mechanical: %1$s\n"), ((driver->flags & MACHINE_MECHANICAL) ? _("Yes") : _("No")));
+ util::stream_format(str, _("Requires Artwork: %1$s\n"), ((driver->flags & MACHINE_REQUIRES_ARTWORK) ? _("Yes") : _("No")));
+ util::stream_format(str, _("Requires Clickable Artwork: %1$s\n"), ((driver->flags & MACHINE_CLICKABLE_ARTWORK) ? _("Yes") : _("No")));
+ util::stream_format(str, _("Support Cocktail: %1$s\n"), ((driver->flags & MACHINE_NO_COCKTAIL) ? _("Yes") : _("No")));
+ util::stream_format(str, _("Driver is Bios: %1$s\n"), ((driver->flags & MACHINE_IS_BIOS_ROOT) ? _("Yes") : _("No")));
+ util::stream_format(str, _("Support Save: %1$s\n"), ((driver->flags & MACHINE_SUPPORTS_SAVE) ? _("Yes") : _("No")));
+ util::stream_format(str, _("Screen Orentation: %1$s\n"), ((driver->flags & ORIENTATION_SWAP_XY) ? _("Vertical") : _("Horizontal")));
bool found = false;
for (const rom_entry *rom = driver->rom; !ROMENTRY_ISEND(rom); ++rom)
if (ROMENTRY_ISREGION(rom) && ROMREGION_ISDISKDATA(rom))
@@ -1472,7 +1564,7 @@ void ui_menu_select_game::general_info(const game_driver *driver, std::string &b
found = true;
break;
}
- strcatprintf(buffer, "Requires CHD: %s\n", (found ? "Yes" : "No"));
+ util::stream_format(str, _("Requires CHD: %1$s\n"), found ? _("Yes") : _("No"));
// audit the game first to see if we're going to work
if (machine().ui().options().info_audit())
@@ -1485,71 +1577,38 @@ void ui_menu_select_game::general_info(const game_driver *driver, std::string &b
// if everything looks good, schedule the new driver
if (summary == media_auditor::CORRECT || summary == media_auditor::BEST_AVAILABLE || summary == media_auditor::NONE_NEEDED)
- buffer.append("Roms Audit Pass: OK\n");
+ str << _("Roms Audit Pass: OK\n");
else
- buffer.append("Roms Audit Pass: BAD\n");
+ str << _("Roms Audit Pass: BAD\n");
if (summary_samples == media_auditor::NONE_NEEDED)
- buffer.append("Samples Audit Pass: None Needed\n");
+ str << _("Samples Audit Pass: None Needed\n");
else if (summary_samples == media_auditor::CORRECT || summary_samples == media_auditor::BEST_AVAILABLE)
- buffer.append("Samples Audit Pass: OK\n");
+ str << _("Samples Audit Pass: OK\n");
else
- buffer.append("Samples Audit Pass: BAD\n");
+ str << _("Samples Audit Pass: BAD\n");
}
else
- buffer.append("Roms Audit Pass: Disabled\nSamples Audit Pass: Disabled\n");
+ str << _("Roms Audit Pass: Disabled\nSamples Audit Pass: Disabled\n");
+
+ buffer = str.str();
}
void ui_menu_select_game::inkey_export()
{
- std::string filename("exported");
- emu_file infile(machine().ui().options().ui_path(), OPEN_FLAG_READ);
- if (infile.open(filename.c_str(), ".xml") == FILERR_NONE)
- for (int seq = 0; ; ++seq)
- {
- std::string seqtext;
- strprintf(seqtext, "%s_%04d", filename.c_str(), seq);
- if (infile.open(seqtext.c_str(), ".xml") != FILERR_NONE)
- {
- filename = seqtext;
- break;
- }
- }
-
- // attempt to open the output file
- emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
- if (file.open(filename.c_str(), ".xml") == FILERR_NONE)
+ std::vector<const game_driver *> list;
+ if (m_search[0] != 0)
{
- FILE *pfile;
- std::string fullpath(file.fullpath());
- file.close();
- pfile = fopen(fullpath.c_str() , "w");
- driver_enumerator drivlist(machine().options());
- drivlist.exclude_all();
-
- if (m_search[0] != 0)
- {
- for (int curitem = 0; m_searchlist[curitem]; ++curitem)
- {
- int f = driver_list::find(m_searchlist[curitem]->name);
- drivlist.include(f);
- }
- }
- else
+ for (int curitem = 0; m_searchlist[curitem]; ++curitem)
{
- for (auto & elem : m_displaylist)
- {
- int f = driver_list::find(elem->name);
- drivlist.include(f);
- }
+ list.push_back(m_searchlist[curitem]);
}
-
- // create the XML and save to file
- info_xml_creator creator(drivlist);
- creator.output(pfile, false);
- fclose(pfile);
- machine().popmessage("%s.xml saved under ui folder.", filename.c_str());
}
+ else
+ {
+ list = m_displaylist;
+ }
+ ui_menu::stack_push(global_alloc_clear<ui_menu_export>(machine(), container, list));
}
//-------------------------------------------------
@@ -1756,16 +1815,16 @@ float ui_menu_select_game::draw_left_panel(float x1, float y1, float x2, float y
bgcolor = UI_MOUSEOVER_BG_COLOR;
fgcolor = UI_MOUSEOVER_COLOR;
hover = phover + filter;
+ ui_menu::highlight(container, x1, y1, x2, y1+ line_height_max, bgcolor);
}
-/* if (afilter == filter)
+ if (highlight == filter && m_focus == focused_menu::left)
{
- bgcolor = UI_SELECTED_BG_COLOR;
- fgcolor = UI_SELECTED_COLOR;
+ fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
+ bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
+ mui.draw_textured_box(container, x1, y1, x2, y1 + line_height_max, bgcolor, rgb_t(255, 43, 43, 43),
+ hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
}
-*/
- if (bgcolor != UI_TEXT_BG_COLOR)
- container->add_rect(x1, y1, x2, y1 + line_height_max, bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
float x1t = x1 + text_sign;
if (afilter == FILTER_CUSTOM)
@@ -1782,7 +1841,7 @@ float ui_menu_select_game::draw_left_panel(float x1, float y1, float x2, float y
int cfilter = custfltr::other[count];
if (cfilter == filter)
{
- strprintf(str, "@custom%d %s", count + 1, text[filter]);
+ str = string_format("@custom%d %s", count + 1, text[filter]);
x1t -= text_sign;
break;
}
@@ -1792,7 +1851,7 @@ float ui_menu_select_game::draw_left_panel(float x1, float y1, float x2, float y
}
else if (filter == main_filters::actual)
{
- str.assign("@custom1 ").append(text[filter]);
+ str.assign("_> ").append(text[filter]);
x1t -= text_sign;
convert_command_glyph(str);
}
@@ -1872,7 +1931,7 @@ void ui_menu_select_game::infos_render(void *selectedref, float origx1, float or
if (is_favorites)
{
- soft = ((FPTR)selectedref > skip_main_items) ? (ui_software_info *)selectedref : nullptr;
+ soft = ((FPTR)selectedref > skip_main_items) ? (ui_software_info *)selectedref : ((m_prev_selected != nullptr) ? (ui_software_info *)m_prev_selected : nullptr);
if (soft && soft->startempty == 1)
{
driver = soft->driver;
@@ -1883,7 +1942,7 @@ void ui_menu_select_game::infos_render(void *selectedref, float origx1, float or
}
else
{
- driver = ((FPTR)selectedref > skip_main_items) ? (const game_driver *)selectedref : nullptr;
+ driver = ((FPTR)selectedref > skip_main_items) ? (const game_driver *)selectedref : ((m_prev_selected != nullptr) ? (const game_driver *)m_prev_selected : nullptr);
oldsoft = nullptr;
}
@@ -1897,7 +1956,7 @@ void ui_menu_select_game::infos_render(void *selectedref, float origx1, float or
if (ui_globals::curdats_view == UI_STORY_LOAD)
text_size = 1.0f;
- std::string snaptext(dats_info[ui_globals::curdats_view]);
+ std::string snaptext(_(dats_info[ui_globals::curdats_view]));
// apply title to right panel
float title_size = 0.0f;
@@ -1905,14 +1964,28 @@ void ui_menu_select_game::infos_render(void *selectedref, float origx1, float or
for (int x = UI_FIRST_LOAD; x < UI_LAST_LOAD; ++x)
{
- mui.draw_text_full(container, dats_info[x], origx1, origy1, origx2 - origx1, JUSTIFY_CENTER,
+ mui.draw_text_full(container, _(dats_info[x]), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER,
WRAP_TRUNCATE, DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_lenght, nullptr);
txt_lenght += 0.01f;
title_size = MAX(txt_lenght, title_size);
}
- mui.draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER,
- WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ rgb_t fgcolor = UI_TEXT_COLOR;
+ rgb_t bgcolor = UI_TEXT_BG_COLOR;
+ if (m_focus == focused_menu::rightbottom)
+ {
+ fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
+ bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
+ }
+
+ float middle = origx2 - origx1;
+
+ if (bgcolor != UI_TEXT_BG_COLOR)
+ mui.draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f),
+ origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+
+ mui.draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER,
+ WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr);
draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::curdats_view, UI_FIRST_LOAD, UI_LAST_LOAD, title_size);
@@ -2071,8 +2144,22 @@ void ui_menu_select_game::infos_render(void *selectedref, float origx1, float or
title_size = MAX(txt_lenght, title_size);
}
- mui.draw_text_full(container, t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1,
- JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ rgb_t fgcolor = UI_TEXT_COLOR;
+ rgb_t bgcolor = UI_TEXT_BG_COLOR;
+ if (m_focus == focused_menu::rightbottom)
+ {
+ fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
+ bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
+ }
+
+ float middle = origx2 - origx1;
+
+ if (bgcolor != UI_TEXT_BG_COLOR)
+ mui.draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f),
+ origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+
+ mui.draw_text_full(container, t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1,
+ JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr);
draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::cur_sw_dats_view, 0, 1, title_size);
}
@@ -2192,7 +2279,7 @@ void ui_menu_select_game::arts_render(void *selectedref, float origx1, float ori
if (is_favorites)
{
- soft = ((FPTR)selectedref > skip_main_items) ? (ui_software_info *)selectedref : nullptr;
+ soft = ((FPTR)selectedref > skip_main_items) ? (ui_software_info *)selectedref : ((m_prev_selected != nullptr) ? (ui_software_info *)m_prev_selected : nullptr);
if (soft && soft->startempty == 1)
{
driver = soft->driver;
@@ -2203,11 +2290,11 @@ void ui_menu_select_game::arts_render(void *selectedref, float origx1, float ori
}
else
{
- driver = ((FPTR)selectedref > skip_main_items) ? (const game_driver *)selectedref : nullptr;
+ driver = ((FPTR)selectedref > skip_main_items) ? (const game_driver *)selectedref : ((m_prev_selected != nullptr) ? (const game_driver *)m_prev_selected : nullptr);
oldsoft = nullptr;
}
- if (driver)
+ if (driver != nullptr)
{
if (ui_globals::default_image)
((driver->flags & MACHINE_TYPE_ARCADE) == 0) ? ui_globals::curimage_view = CABINETS_VIEW : ui_globals::curimage_view = SNAPSHOT_VIEW;
@@ -2219,6 +2306,7 @@ void ui_menu_select_game::arts_render(void *selectedref, float origx1, float ori
if (driver != olddriver || !snapx_bitmap->valid() || ui_globals::switch_image)
{
emu_file snapfile(searchstr.c_str(), OPEN_FLAG_READ);
+ snapfile.set_restrict_to_mediapath(true);
bitmap_argb32 *tmp_bitmap;
tmp_bitmap = auto_alloc(machine(), bitmap_argb32);
@@ -2285,7 +2373,7 @@ void ui_menu_select_game::arts_render(void *selectedref, float origx1, float ori
container->add_quad( x1, y1, x2, y2, ARGB_WHITE, snapx_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
}
}
- else if (soft)
+ else if (soft != nullptr)
{
std::string fullname, pathname;
diff --git a/src/emu/ui/selgame.h b/src/emu/ui/selgame.h
index 4c1cf548d60..b099f45c796 100644
--- a/src/emu/ui/selgame.h
+++ b/src/emu/ui/selgame.h
@@ -37,10 +37,16 @@ public:
virtual void draw_right_panel(void *selectedref, float origx1, float origy1, float origx2, float origy2) override;
private:
+ enum
+ {
+ CONF_OPTS = 1,
+ CONF_MACHINE,
+ };
+
enum { VISIBLE_GAMES_IN_SEARCH = 200 };
char m_search[40];
- int m_prev_selected;
- static int m_isabios;
+ static int m_isabios;
+ int highlight;
static std::vector<const game_driver *> m_sortedlist;
std::vector<const game_driver *> m_availsortedlist;
@@ -73,6 +79,7 @@ private:
void inkey_select_favorite(const ui_menu_event *menu_event);
void inkey_special(const ui_menu_event *menu_event);
void inkey_export();
+ void inkey_configure(const ui_menu_event *menu_event);
};
diff --git a/src/emu/ui/selsoft.cpp b/src/emu/ui/selsoft.cpp
index 3122f286917..2c8fa5135ea 100644
--- a/src/emu/ui/selsoft.cpp
+++ b/src/emu/ui/selsoft.cpp
@@ -1,4 +1,4 @@
-// license:BSD-3-Clause
+// license:BSD-3-Clause
// copyright-holders:Dankan1890
/***************************************************************************
@@ -126,6 +126,7 @@ ui_menu_select_software::ui_menu_select_software(running_machine &machine, rende
reselect_last::set(false);
sw_filters::actual = 0;
+ highlight = 0;
m_driver = driver;
build_software_list();
@@ -155,6 +156,9 @@ ui_menu_select_software::~ui_menu_select_software()
void ui_menu_select_software::handle()
{
+ if (m_prev_selected == nullptr)
+ m_prev_selected = item[0].ref;
+
bool check_filter = false;
// ignore pause keys by swallowing them before we process the menu
@@ -171,7 +175,18 @@ void ui_menu_select_software::handle()
// handle selections
else if (m_event->iptkey == IPT_UI_SELECT)
- inkey_select(m_event);
+ {
+ if (m_focus == focused_menu::main)
+ {
+ inkey_select(m_event);
+ }
+ else if (m_focus == focused_menu::left)
+ {
+ l_sw_hover = highlight;
+ check_filter = true;
+ m_prev_selected = nullptr;
+ }
+ }
// handle UI_LEFT
else if (m_event->iptkey == IPT_UI_LEFT)
@@ -211,6 +226,18 @@ void ui_menu_select_software::handle()
}
}
+ // handle UI_UP_FILTER
+ else if (m_event->iptkey == IPT_UI_UP_FILTER && highlight > UI_SW_FIRST)
+ {
+ highlight--;
+ }
+
+ // handle UI_DOWN_FILTER
+ else if (m_event->iptkey == IPT_UI_DOWN_FILTER && highlight < UI_SW_LAST)
+ {
+ highlight++;
+ }
+
// handle UI_DATS
else if (m_event->iptkey == IPT_UI_DATS && machine().ui().options().enabled_dats())
{
@@ -225,20 +252,6 @@ void ui_menu_select_software::handle()
}
}
- // handle UI_UP_FILTER
- else if (m_event->iptkey == IPT_UI_UP_FILTER && sw_filters::actual > UI_SW_FIRST)
- {
- l_sw_hover = sw_filters::actual - 1;
- check_filter = true;
- }
-
- // handle UI_DOWN_FILTER
- else if (m_event->iptkey == IPT_UI_DOWN_FILTER && sw_filters::actual < UI_SW_LAST)
- {
- l_sw_hover = sw_filters::actual + 1;
- check_filter = true;
- }
-
// handle UI_LEFT_PANEL
else if (m_event->iptkey == IPT_UI_LEFT_PANEL)
ui_globals::rpanel = RP_IMAGES;
@@ -264,12 +277,12 @@ void ui_menu_select_software::handle()
if (!machine().favorite().isgame_favorite(*swinfo))
{
machine().favorite().add_favorite_game(*swinfo);
- machine().popmessage("%s\n added to favorites list.", swinfo->longname.c_str());
+ machine().popmessage(_("%s\n added to favorites list."), swinfo->longname.c_str());
}
else
{
- machine().popmessage("%s\n removed from favorites list.", swinfo->longname.c_str());
+ machine().popmessage(_("%s\n removed from favorites list."), swinfo->longname.c_str());
machine().favorite().remove_favorite_game();
}
}
@@ -280,45 +293,98 @@ void ui_menu_select_software::handle()
inkey_special(m_event);
else if (m_event->iptkey == IPT_OTHER)
+ {
+ highlight = l_sw_hover;
check_filter = true;
+ m_prev_selected = nullptr;
+ }
+
+ else if (m_event->iptkey == IPT_UI_CONFIGURE)
+ inkey_configure(m_event);
}
if (m_event != nullptr && m_event->itemref == nullptr)
{
- // reset the error on any future m_event
- if (ui_error)
- ui_error = false;
- else if (m_event->iptkey == IPT_OTHER)
- check_filter = true;
+ if (m_event->iptkey == IPT_UI_CONFIGURE)
+ inkey_configure(m_event);
+
+ // handle UI_LEFT
+ else if (m_event->iptkey == IPT_UI_LEFT)
+ {
+ // Images
+ if (ui_globals::rpanel == RP_IMAGES && ui_globals::curimage_view > FIRST_VIEW)
+ {
+ ui_globals::curimage_view--;
+ ui_globals::switch_image = true;
+ ui_globals::default_image = false;
+ }
+
+ // Infos
+ else if (ui_globals::rpanel == RP_INFOS && ui_globals::cur_sw_dats_view > 0)
+ {
+ ui_globals::cur_sw_dats_view--;
+ topline_datsview = 0;
+ }
+ }
+
+ // handle UI_RIGHT
+ else if (m_event->iptkey == IPT_UI_RIGHT)
+ {
+ // Images
+ if (ui_globals::rpanel == RP_IMAGES && ui_globals::curimage_view < LAST_VIEW)
+ {
+ ui_globals::curimage_view++;
+ ui_globals::switch_image = true;
+ ui_globals::default_image = false;
+ }
+
+ // Infos
+ else if (ui_globals::rpanel == RP_INFOS && ui_globals::cur_sw_dats_view < 1)
+ {
+ ui_globals::cur_sw_dats_view++;
+ topline_datsview = 0;
+ }
+ }
+
+ // handle UI_LEFT_PANEL
+ else if (m_event->iptkey == IPT_UI_LEFT_PANEL)
+ ui_globals::rpanel = RP_IMAGES;
+
+ // handle UI_RIGHT_PANEL
+ else if (m_event->iptkey == IPT_UI_RIGHT_PANEL)
+ ui_globals::rpanel = RP_INFOS;
// handle UI_UP_FILTER
- else if (m_event->iptkey == IPT_UI_UP_FILTER && sw_filters::actual > UI_SW_FIRST)
+ else if (m_event->iptkey == IPT_UI_UP_FILTER && highlight > UI_SW_FIRST)
{
- l_sw_hover = sw_filters::actual - 1;
- check_filter = true;
+ highlight--;
}
// handle UI_DOWN_FILTER
- else if (m_event->iptkey == IPT_UI_DOWN_FILTER && sw_filters::actual < UI_SW_LAST)
+ else if (m_event->iptkey == IPT_UI_DOWN_FILTER && highlight < UI_SW_LAST)
{
- l_sw_hover = sw_filters::actual + 1;
+ highlight++;
+ }
+ else if (m_event->iptkey == IPT_UI_SELECT && m_focus == focused_menu::left)
+ {
+ l_sw_hover = highlight;
check_filter = true;
+ m_prev_selected = nullptr;
}
+
}
// if we're in an error state, overlay an error message
if (ui_error)
- machine().ui().draw_text_box(container,
- "The selected software is missing one or more required files. "
- "Please select a different software.\n\nPress any key (except ESC) to continue.",
+ machine().ui().draw_text_box(container, _("The selected software is missing one or more required files. "
+ "Please select a different software.\n\nPress any key (except ESC) to continue."),
JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR);
// handle filters selection from key shortcuts
if (check_filter)
{
m_search[0] = '\0';
-
switch (l_sw_hover)
{
case UI_SW_REGION:
@@ -498,16 +564,16 @@ void ui_menu_select_software::build_software_list()
if (instance_name == nullptr || type_name == nullptr)
continue;
- if (swinfo->shortname()) tmpmatches.shortname = swinfo->shortname();
- if (swinfo->longname()) tmpmatches.longname = swinfo->longname();
- if (swinfo->parentname()) tmpmatches.parentname = swinfo->parentname();
- if (swinfo->year()) tmpmatches.year = swinfo->year();
- if (swinfo->publisher()) tmpmatches.publisher = swinfo->publisher();
+ tmpmatches.shortname = strensure(swinfo->shortname());
+ tmpmatches.longname = strensure(swinfo->longname());
+ tmpmatches.parentname = strensure(swinfo->parentname());
+ tmpmatches.year = strensure(swinfo->year());
+ tmpmatches.publisher = strensure(swinfo->publisher());
tmpmatches.supported = swinfo->supported();
- if (part->name()) tmpmatches.part = part->name();
+ tmpmatches.part = strensure(part->name());
tmpmatches.driver = m_driver;
- if (swlist->list_name()) tmpmatches.listname = swlist->list_name();
- if (part->interface()) tmpmatches.interface = part->interface();
+ tmpmatches.listname = strensure(swlist->list_name());
+ tmpmatches.interface = strensure(part->interface());
tmpmatches.startempty = 0;
tmpmatches.parentlongname.clear();
tmpmatches.usage.clear();
@@ -603,7 +669,7 @@ void ui_menu_select_software::build_software_list()
void ui_menu_select_software::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2)
{
- ui_software_info *swinfo = (ui_software_info *)selectedref;
+ ui_software_info *swinfo = (selectedref != nullptr) ? (ui_software_info *)selectedref : ((m_prev_selected != nullptr) ? (ui_software_info *)m_prev_selected : nullptr);
const game_driver *driver = nullptr;
ui_manager &mui = machine().ui();
float width;
@@ -614,21 +680,21 @@ void ui_menu_select_software::custom_render(void *selectedref, float top, float
// determine the text for the header
int vis_item = (m_search[0] != 0) ? visible_items : (m_has_empty_start ? visible_items - 1 : visible_items);
- strprintf(tempbuf[0], "MAME %s ( %d / %d softwares )", bare_build_version, vis_item, (int)m_swinfo.size() - 1);
- tempbuf[1].assign("Driver: \"").append(m_driver->description).append("\" software list ");
+ tempbuf[0] = string_format(_("%1$s %2$s ( %3$d / %4$d softwares )"), emulator_info::get_appname(), bare_build_version, vis_item, m_swinfo.size() - 1);
+ tempbuf[1] = string_format(_("Driver: \"%1$s\" software list "), m_driver->description);
if (sw_filters::actual == UI_SW_REGION && m_filter.region.ui.size() != 0)
- filtered.assign(_("Region: ")).append(m_filter.region.ui[m_filter.region.actual]).append(" - ");
+ filtered = string_format(_("Region: %1$s -"), m_filter.region.ui[m_filter.region.actual]);
else if (sw_filters::actual == UI_SW_PUBLISHERS)
- filtered.assign(_("Publisher: ")).append(m_filter.publisher.ui[m_filter.publisher.actual]).append(" - ");
+ filtered = string_format(_("Publisher: %1$s -"), m_filter.publisher.ui[m_filter.publisher.actual]);
else if (sw_filters::actual == UI_SW_YEARS)
- filtered.assign(_("Year: ")).append(m_filter.year.ui[m_filter.year.actual]).append(" - ");
+ filtered = string_format(_("Year: %1$s -"), m_filter.year.ui[m_filter.year.actual]);
else if (sw_filters::actual == UI_SW_LIST)
- filtered.assign(_("Software List: ")).append(m_filter.swlist.description[m_filter.swlist.actual]).append(" - ");
+ filtered = string_format(_("Software List: %1$s -"), m_filter.swlist.description[m_filter.swlist.actual]);
else if (sw_filters::actual == UI_SW_TYPE)
- filtered.assign(_("Device type: ")).append(m_filter.type.ui[m_filter.type.actual]).append(" - ");
+ filtered = string_format(_("Device type: %1$s -"), m_filter.type.ui[m_filter.type.actual]);
- tempbuf[2].assign(filtered).append(_("Search: ")).append(m_search).append("_");
+ tempbuf[2] = string_format(_("%s Search: %s_"), filtered, m_search);
// get the size of the text
float maxwidth = origx2 - origx1;
@@ -664,47 +730,47 @@ void ui_menu_select_software::custom_render(void *selectedref, float top, float
}
// determine the text to render below
- if (swinfo && swinfo->startempty == 1)
+ if (swinfo != nullptr && swinfo->startempty == 1)
driver = swinfo->driver;
- if ((FPTR)driver > 1)
+ if (driver != nullptr)
{
isstar = machine().favorite().isgame_favorite(driver);
// first line is game description
- strprintf(tempbuf[0], "%-.100s", driver->description);
+ tempbuf[0] = string_format(_("%1$-.100s"), driver->description);
// next line is year, manufacturer
- strprintf(tempbuf[1], "%s, %-.100s", driver->year, driver->manufacturer);
+ tempbuf[1] = string_format(_("%1$s, %2$-.100s"), driver->year, driver->manufacturer);
// next line is clone/parent status
int cloneof = driver_list::non_bios_clone(*driver);
if (cloneof != -1)
- strprintf(tempbuf[2], "Driver is clone of: %-.100s", driver_list::driver(cloneof).description);
+ tempbuf[2] = string_format(_("Driver is clone of: %1$-.100s"), driver_list::driver(cloneof).description);
else
- tempbuf[2] = "Driver is parent";
+ tempbuf[2] = _("Driver is parent");
// next line is overall driver status
if (driver->flags & MACHINE_NOT_WORKING)
- tempbuf[3] = "Overall: NOT WORKING";
+ tempbuf[3] = _("Overall: NOT WORKING");
else if (driver->flags & MACHINE_UNEMULATED_PROTECTION)
- tempbuf[3] = "Overall: Unemulated Protection";
+ tempbuf[3] = _("Overall: Unemulated Protection");
else
- tempbuf[3] = "Overall: Working";
+ tempbuf[3] = _("Overall: Working");
// next line is graphics, sound status
if (driver->flags & (MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_COLORS))
- tempbuf[4] = "Graphics: Imperfect, ";
+ tempbuf[4] = _("Graphics: Imperfect, ");
else
- tempbuf[4] = "Graphics: OK, ";
+ tempbuf[4] = _("Graphics: OK, ");
if (driver->flags & MACHINE_NO_SOUND)
- tempbuf[4].append("Sound: Unimplemented");
+ tempbuf[4].append(_("Sound: Unimplemented"));
else if (driver->flags & MACHINE_IMPERFECT_SOUND)
- tempbuf[4].append("Sound: Imperfect");
+ tempbuf[4].append(_("Sound: Imperfect"));
else
- tempbuf[4].append("Sound: OK");
+ tempbuf[4].append(_("Sound: OK"));
color = UI_GREEN_COLOR;
@@ -717,41 +783,41 @@ void ui_menu_select_software::custom_render(void *selectedref, float top, float
}
- else if ((FPTR)swinfo > 1)
+ else if (swinfo != nullptr)
{
isstar = machine().favorite().isgame_favorite(*swinfo);
// first line is long name
- strprintf(tempbuf[0], "%-.100s", swinfo->longname.c_str());
+ tempbuf[0] = string_format(_("%1$-.100s"), swinfo->longname.c_str());
// next line is year, publisher
- strprintf(tempbuf[1], "%s, %-.100s", swinfo->year.c_str(), swinfo->publisher.c_str());
+ tempbuf[1] = string_format(_("%1$s, %2$-.100s"), swinfo->year.c_str(), swinfo->publisher.c_str());
// next line is parent/clone
if (!swinfo->parentname.empty())
- strprintf(tempbuf[2], "Software is clone of: %-.100s", !swinfo->parentlongname.empty() ? swinfo->parentlongname.c_str() : swinfo->parentname.c_str());
+ tempbuf[2] = string_format(_("Software is clone of: %1$-.100s"), !swinfo->parentlongname.empty() ? swinfo->parentlongname.c_str() : swinfo->parentname.c_str());
else
- tempbuf[2] = "Software is parent";
+ tempbuf[2] = _("Software is parent");
// next line is supported status
if (swinfo->supported == SOFTWARE_SUPPORTED_NO)
{
- tempbuf[3] = "Supported: No";
+ tempbuf[3] = _("Supported: No");
color = UI_RED_COLOR;
}
else if (swinfo->supported == SOFTWARE_SUPPORTED_PARTIAL)
{
- tempbuf[3] = "Supported: Partial";
+ tempbuf[3] = _("Supported: Partial");
color = UI_YELLOW_COLOR;
}
else
{
- tempbuf[3] = "Supported: Yes";
+ tempbuf[3] = _("Supported: Yes");
color = UI_GREEN_COLOR;
}
// last line is romset name
- strprintf(tempbuf[4], "romset: %-.100s", swinfo->shortname.c_str());
+ tempbuf[4] = string_format(_("romset: %1$-.100s"), swinfo->shortname.c_str());
}
else
@@ -921,6 +987,62 @@ void ui_menu_select_software::inkey_special(const ui_menu_event *m_event)
}
}
+void ui_menu_select_software::inkey_configure(const ui_menu_event *m_event)
+{
+ if (selected <= visible_items && m_focus == focused_menu::main)
+ {
+ m_prev_selected = item[selected].ref;
+ selected = visible_items + 1;
+ }
+ else if (selected > visible_items && m_focus == focused_menu::main)
+ {
+ if (ui_globals::panels_status != HIDE_LEFT_PANEL)
+ m_focus = focused_menu::left;
+
+ else if (ui_globals::panels_status == HIDE_BOTH)
+ {
+ for (int x = 0; x < item.size(); ++x)
+ if (item[x].ref == m_prev_selected)
+ selected = x;
+ }
+ else
+ m_focus = focused_menu::righttop;
+ }
+ else if (m_focus == focused_menu::left)
+ {
+ if (ui_globals::panels_status != HIDE_RIGHT_PANEL)
+ m_focus = focused_menu::righttop;
+ else
+ {
+ m_focus = focused_menu::main;
+ if (m_prev_selected == nullptr)
+ {
+ selected = 0;
+ return;
+ }
+
+ for (int x = 0; x < item.size(); ++x)
+ if (item[x].ref == m_prev_selected)
+ selected = x;
+ }
+ }
+ else if (m_focus == focused_menu::righttop)
+ m_focus = focused_menu::rightbottom;
+ else if (m_focus == focused_menu::rightbottom)
+ {
+ m_focus = focused_menu::main;
+ if (m_prev_selected == nullptr)
+ {
+ selected = 0;
+ return;
+ }
+
+ for (int x = 0; x < item.size(); ++x)
+ if (item[x].ref == m_prev_selected)
+ selected = x;
+ }
+}
+
//-------------------------------------------------
// load custom filters info from file
//-------------------------------------------------
@@ -1088,7 +1210,6 @@ std::string c_sw_publisher::getname(std::string &str)
//-------------------------------------------------
void ui_menu_select_software::build_list(std::vector<ui_software_info *> &s_drivers, const char *filter_text, int filter)
{
-
if (s_drivers.empty() && filter == -1)
{
filter = sw_filters::actual;
@@ -1185,7 +1306,7 @@ void ui_menu_select_software::find_matches(const char *str, int count)
std::vector<int> penalty(count, 9999);
int index = 0;
- for (; m_displaylist[index]; ++index)
+ for (; index < m_displaylist.size(); ++index)
{
// pick the best match between driver name and description
int curpenalty = fuzzy_substring(str, m_displaylist[index]->longname);
@@ -1319,14 +1440,15 @@ float ui_menu_select_software::draw_left_panel(float x1, float y1, float x2, flo
hover = phover + filter;
}
-/* if (afilter == filter)
+ if (highlight == filter && m_focus == focused_menu::left)
{
- bgcolor = UI_SELECTED_BG_COLOR;
- fgcolor = UI_SELECTED_COLOR;
+ fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
+ bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
}
-*/
+
if (bgcolor != UI_TEXT_BG_COLOR)
- container->add_rect(x1, y1, x2, y1 + line_height, bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+ mui.draw_textured_box(container, x1, y1, x2, y1 + line_height, bgcolor, rgb_t(255, 43, 43, 43),
+ hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
float x1t = x1 + text_sign;
if (afilter == UI_SW_CUSTOM)
@@ -1343,7 +1465,7 @@ float ui_menu_select_software::draw_left_panel(float x1, float y1, float x2, flo
int cfilter = sw_custfltr::other[count];
if (cfilter == filter)
{
- strprintf(str, "@custom%d %s", count + 1, text[filter]);
+ str = string_format("@custom%d %s", count + 1, text[filter]);
x1t -= text_sign;
break;
}
@@ -1353,7 +1475,7 @@ float ui_menu_select_software::draw_left_panel(float x1, float y1, float x2, flo
}
else if (filter == sw_filters::actual)
{
- str.assign("@custom1 ").append(text[filter]);
+ str.assign("_> ").append(text[filter]);
x1t -= text_sign;
convert_command_glyph(str);
}
@@ -1427,7 +1549,7 @@ void ui_menu_select_software::infos_render(void *selectedref, float origx1, floa
std::vector<int> xstart;
std::vector<int> xend;
float text_size = machine().ui().options().infos_size();
- ui_software_info *soft = (ui_software_info *)selectedref;
+ ui_software_info *soft = (selectedref != nullptr) ? (ui_software_info *)selectedref : ((m_prev_selected != nullptr) ? (ui_software_info *)m_prev_selected : nullptr);
static ui_software_info *oldsoft = nullptr;
static int old_sw_view = -1;
@@ -1436,10 +1558,30 @@ void ui_menu_select_software::infos_render(void *selectedref, float origx1, floa
float oy1 = origy1 + line_height;
// apply title to right panel
- if (soft && soft->usage.empty())
+ if (soft != nullptr && soft->usage.empty())
{
+ float title_size = 0.0f;
+
mui.draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &title_size, nullptr);
+ title_size += 0.01f;
+
+ rgb_t fgcolor = UI_TEXT_COLOR;
+ rgb_t bgcolor = UI_TEXT_BG_COLOR;
+ if (m_focus == focused_menu::rightbottom)
+ {
+ fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
+ bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
+ }
+
+ float middle = origx2 - origx1;
+
+ if (bgcolor != UI_TEXT_BG_COLOR)
+ mui.draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f),
+ origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+
+ mui.draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE,
+ DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr);
ui_globals::cur_sw_dats_view = 0;
}
else
@@ -1453,14 +1595,27 @@ void ui_menu_select_software::infos_render(void *selectedref, float origx1, floa
for (auto & elem : t_text)
{
mui.draw_text_full(container, elem.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_lenght, nullptr);
+ DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_lenght, nullptr);
txt_lenght += 0.01f;
title_size = MAX(txt_lenght, title_size);
}
+ rgb_t fgcolor = UI_TEXT_COLOR;
+ rgb_t bgcolor = UI_TEXT_BG_COLOR;
+ if (m_focus == focused_menu::rightbottom)
+ {
+ fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00);
+ bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff);
+ }
+
+ float middle = origx2 - origx1;
+
+ if (bgcolor != UI_TEXT_BG_COLOR)
+ mui.draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f),
+ origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE));
+
mui.draw_text_full(container, t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1,
- JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR,
- nullptr, nullptr);
+ JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr);
draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::cur_sw_dats_view, 0, 1, title_size);
}
@@ -1484,7 +1639,7 @@ void ui_menu_select_software::infos_render(void *selectedref, float origx1, floa
if (buffer.empty())
{
mui.draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, JUSTIFY_CENTER,
- WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
return;
}
else
@@ -1512,8 +1667,8 @@ void ui_menu_select_software::infos_render(void *selectedref, float origx1, floa
info_arrow(1, origx1, origx2, oy1, line_height, text_size, ud_arrow_width);
else
mui.draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1,
- JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR,
- nullptr, nullptr, text_size);
+ JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR,
+ nullptr, nullptr, text_size);
oy1 += (line_height * text_size);
}
@@ -1532,9 +1687,9 @@ void ui_menu_select_software::arts_render(void *selectedref, float origx1, float
static ui_software_info *oldsoft = nullptr;
static const game_driver *olddriver = nullptr;
const game_driver *driver = nullptr;
- ui_software_info *soft = (ui_software_info *)selectedref;
+ ui_software_info *soft = (selectedref != nullptr) ? (ui_software_info *)selectedref : ((m_prev_selected != nullptr) ? (ui_software_info *)m_prev_selected : nullptr);
- if (soft && soft->startempty == 1)
+ if (soft != nullptr && soft->startempty == 1)
{
driver = soft->driver;
oldsoft = nullptr;
@@ -1542,7 +1697,7 @@ void ui_menu_select_software::arts_render(void *selectedref, float origx1, float
else
olddriver = nullptr;
- if (driver)
+ if (driver != nullptr)
{
if (ui_globals::default_image)
((driver->flags & MACHINE_TYPE_ARCADE) == 0) ? ui_globals::curimage_view = CABINETS_VIEW : ui_globals::curimage_view = SNAPSHOT_VIEW;
@@ -1554,6 +1709,7 @@ void ui_menu_select_software::arts_render(void *selectedref, float origx1, float
if (driver != olddriver || !snapx_bitmap->valid() || ui_globals::switch_image)
{
emu_file snapfile(searchstr.c_str(), OPEN_FLAG_READ);
+ snapfile.set_restrict_to_mediapath(true);
bitmap_argb32 *tmp_bitmap;
tmp_bitmap = auto_alloc(machine(), bitmap_argb32);
@@ -1620,7 +1776,7 @@ void ui_menu_select_software::arts_render(void *selectedref, float origx1, float
container->add_quad( x1, y1, x2, y2, ARGB_WHITE, snapx_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
}
}
- else if (soft)
+ else if (soft != nullptr)
{
std::string fullname, pathname;
if (ui_globals::default_image)
diff --git a/src/emu/ui/selsoft.h b/src/emu/ui/selsoft.h
index 8f7e6d413c8..afb28c48134 100644
--- a/src/emu/ui/selsoft.h
+++ b/src/emu/ui/selsoft.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Dankan1890
+// copyright-holders:Maurizio Petrarota
/***************************************************************************
ui/selsoft.h
@@ -45,6 +45,7 @@ private:
const game_driver *m_driver;
bool m_has_empty_start;
s_filter m_filter;
+ int highlight;
ui_software_info *m_searchlist[VISIBLE_GAMES_IN_SEARCH + 1];
std::vector<ui_software_info *> m_displaylist, m_tmp, m_sortedlist;
@@ -62,6 +63,7 @@ private:
// handlers
void inkey_select(const ui_menu_event *menu_event);
void inkey_special(const ui_menu_event *menu_event);
+ void inkey_configure(const ui_menu_event *menu_event);
};
class ui_software_parts : public ui_menu
diff --git a/src/emu/ui/simpleselgame.cpp b/src/emu/ui/simpleselgame.cpp
index 429ea61c9b7..617c6e651e4 100644
--- a/src/emu/ui/simpleselgame.cpp
+++ b/src/emu/ui/simpleselgame.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
/***************************************************************************
- ui/simpleselgame.c
+ ui/simpleselgame.cpp
Game selector
@@ -135,7 +135,7 @@ void ui_simple_menu_select_game::handle()
//-------------------------------------------------
// inkey_select
//-------------------------------------------------
-extern void save_main_option(running_machine &machine);
+
void ui_simple_menu_select_game::inkey_select(const ui_menu_event *menu_event)
{
const game_driver *driver = (const game_driver *)menu_event->itemref;
@@ -143,8 +143,6 @@ void ui_simple_menu_select_game::inkey_select(const ui_menu_event *menu_event)
// special case for configure inputs
if ((FPTR)driver == 1)
ui_menu::stack_push(global_alloc_clear<ui_menu_game_options>(machine(), container));
- else if ((FPTR)driver == 2)
- save_main_option(machine());
// anything else is a driver
else
{
@@ -230,12 +228,12 @@ void ui_simple_menu_select_game::populate()
// if nothing there, add a single multiline item and return
if (matchcount == 0)
{
- std::string txt;
- strprintf(txt, "No machines found. Please check the rompath specified in the %s.ini file.\n\n"
- "If this is your first time using %s, please see the config.txt file in "
- "the docs directory for information on configuring %s.",
- emulator_info::get_configname(),
- emulator_info::get_appname(),emulator_info::get_appname() );
+ std::string txt = string_format(
+ _("No machines found. Please check the rompath specified in the %1$s.ini file.\n\n"
+ "If this is your first time using %2$s, please see the config.txt file in "
+ "the docs directory for information on configuring %2$s."),
+ emulator_info::get_configname(),
+ emulator_info::get_appname());
item_append(txt.c_str(), nullptr, MENU_FLAG_MULTILINE | MENU_FLAG_REDTEXT, nullptr);
return;
}
@@ -262,8 +260,7 @@ void ui_simple_menu_select_game::populate()
{
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
item_append(_("Configure Options"), nullptr, 0, (void *)1);
- item_append(_("Save Configuration"), nullptr, 0, (void *)2);
- skip_main_items = 2;
+ skip_main_items = 1;
}
// configure the custom rendering
@@ -287,9 +284,9 @@ void ui_simple_menu_select_game::custom_render(void *selectedref, float top, flo
// display the current typeahead
if (m_search[0] != 0)
- strprintf(tempbuf[0], "Type name or select: %s_", m_search);
+ tempbuf[0] = string_format(_("Type name or select: %1$s_"), m_search);
else
- strprintf(tempbuf[0],"Type name or select: (random)");
+ tempbuf[0] = _("Type name or select: (random)");
// get the size of the text
machine().ui().draw_text_full(container, tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
@@ -322,36 +319,36 @@ void ui_simple_menu_select_game::custom_render(void *selectedref, float top, flo
const char *gfxstat, *soundstat;
// first line is game name
- strprintf(tempbuf[0],"%-.100s", driver->description);
+ tempbuf[0] = string_format(_("%1$-.100s"), driver->description);
// next line is year, manufacturer
- strprintf(tempbuf[1], "%s, %-.100s", driver->year, driver->manufacturer);
+ tempbuf[1] = string_format(_("%1$s, %2$-.100s"), driver->year, driver->manufacturer);
// next line source path
- strprintf(tempbuf[2],"Driver: %-.100s", core_filename_extract_base(driver->source_file).c_str());
+ tempbuf[2] = string_format(_("Driver: %1$-.100s"), core_filename_extract_base(driver->source_file).c_str());
// next line is overall driver status
if (driver->flags & MACHINE_NOT_WORKING)
- tempbuf[3].assign("Overall: NOT WORKING");
+ tempbuf[3].assign(_("Overall: NOT WORKING"));
else if (driver->flags & MACHINE_UNEMULATED_PROTECTION)
- tempbuf[3].assign("Overall: Unemulated Protection");
+ tempbuf[3].assign(_("Overall: Unemulated Protection"));
else
- tempbuf[3].assign("Overall: Working");
+ tempbuf[3].assign(_("Overall: Working"));
// next line is graphics, sound status
if (driver->flags & (MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_COLORS))
- gfxstat = "Imperfect";
+ gfxstat = _("Imperfect");
else
- gfxstat = "OK";
+ gfxstat = _("OK");
if (driver->flags & MACHINE_NO_SOUND)
- soundstat = "Unimplemented";
+ soundstat = _("Unimplemented");
else if (driver->flags & MACHINE_IMPERFECT_SOUND)
- soundstat = "Imperfect";
+ soundstat = _("Imperfect");
else
- soundstat = "OK";
+ soundstat = _("OK");
- strprintf(tempbuf[4], "Gfx: %s, Sound: %s", gfxstat, soundstat);
+ tempbuf[4] = string_format(_("Gfx: %s, Sound: %s"), gfxstat, soundstat);
}
else
{
@@ -359,7 +356,7 @@ void ui_simple_menu_select_game::custom_render(void *selectedref, float top, flo
line = 0;
// first line is version string
- strprintf(tempbuf[line++], "%s %s", emulator_info::get_appname(), build_version);
+ tempbuf[line++] = string_format("%s %s", emulator_info::get_appname(), build_version);
// output message
while (line < ARRAY_LENGTH(tempbuf))
diff --git a/src/emu/ui/sndmenu.cpp b/src/emu/ui/sndmenu.cpp
index 37134f8db25..ab1731e6589 100644
--- a/src/emu/ui/sndmenu.cpp
+++ b/src/emu/ui/sndmenu.cpp
@@ -129,13 +129,11 @@ void ui_menu_sound_options::populate()
{
UINT32 arrow_flags = get_arrow_flags(0, ARRAY_LENGTH(m_sound_rate) - 1, m_cur_rates);
m_sample_rate = m_sound_rate[m_cur_rates];
- std::string s_text;
- strprintf(s_text, "%d", m_sample_rate);
// add options items
- item_append(_("Sound"), m_sound ? "On" : "Off", m_sound ? MENU_FLAG_RIGHT_ARROW : MENU_FLAG_LEFT_ARROW, (void *)(FPTR)ENABLE_SOUND);
- item_append(_("Sample Rate"), s_text.c_str(), arrow_flags, (void *)(FPTR)SAMPLE_RATE);
- item_append(_("Use External Samples"), m_samples ? "On" : "Off", m_samples ? MENU_FLAG_RIGHT_ARROW : MENU_FLAG_LEFT_ARROW, (void *)(FPTR)ENABLE_SAMPLES);
+ item_append(_("Sound"), m_sound ? _("On") : _("Off"), m_sound ? MENU_FLAG_RIGHT_ARROW : MENU_FLAG_LEFT_ARROW, (void *)(FPTR)ENABLE_SOUND);
+ item_append(_("Sample Rate"), string_format("%d", m_sample_rate).c_str(), arrow_flags, (void *)(FPTR)SAMPLE_RATE);
+ item_append(_("Use External Samples"), m_samples ? _("On") : _("Off"), m_samples ? MENU_FLAG_RIGHT_ARROW : MENU_FLAG_LEFT_ARROW, (void *)(FPTR)ENABLE_SAMPLES);
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
customtop = machine().ui().get_line_height() + (3.0f * UI_BOX_TB_BORDER);
@@ -150,7 +148,7 @@ void ui_menu_sound_options::custom_render(void *selectedref, float top, float bo
float width;
ui_manager &mui = machine().ui();
mui.draw_text_full(container, _("Sound Options"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
+ DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr);
width += 2 * UI_BOX_LR_BORDER;
float maxwidth = MAX(origx2 - origx1, width);
@@ -170,5 +168,5 @@ void ui_menu_sound_options::custom_render(void *selectedref, float top, float bo
// draw the text within it
mui.draw_text_full(container, _("Sound Options"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE,
- DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
+ DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr);
}
diff --git a/src/emu/ui/swlist.cpp b/src/emu/ui/swlist.cpp
index 1a3ce5fe736..2d4891d5673 100644
--- a/src/emu/ui/swlist.cpp
+++ b/src/emu/ui/swlist.cpp
@@ -62,18 +62,18 @@ void ui_menu_software_parts::populate()
software_part_menu_entry *entry1 = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry1));
entry1->type = T_EMPTY;
entry1->part = nullptr;
- item_append("[empty slot]", nullptr, 0, entry1);
+ item_append(_("[empty slot]"), nullptr, 0, entry1);
software_part_menu_entry *entry2 = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry2));
entry2->type = T_FMGR;
entry2->part = nullptr;
- item_append("[file manager]", nullptr, 0, entry2);
+ item_append(_("[file manager]"), nullptr, 0, entry2);
software_part_menu_entry *entry3 = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry3));
entry3->type = T_SWLIST;
entry3->part = nullptr;
- item_append("[software list]", nullptr, 0, entry3);
+ item_append(_("[software list]"), nullptr, 0, entry3);
}
for (const software_part *swpart = m_info->first_part(); swpart != nullptr; swpart = swpart->next())
@@ -232,7 +232,7 @@ void ui_menu_software_list::populate()
append_software_entry(swinfo);
// add an entry to change ordering
- item_append("Switch Item Ordering", nullptr, 0, (void *)1);
+ item_append(_("Switch Item Ordering"), nullptr, 0, (void *)1);
// append all of the menu entries
for (entry_info *entry = m_entrylist; entry != nullptr; entry = entry->next)
@@ -265,7 +265,7 @@ void ui_menu_software_list::handle()
// reload the menu with the new order
reset(UI_MENU_RESET_REMEMBER_REF);
- machine().popmessage("Switched Order: entries now ordered by %s", m_ordered_by_shortname ? "shortname" : "description");
+ machine().popmessage(_("Switched Order: entries now ordered by %s"), m_ordered_by_shortname ? _("shortname") : _("description"));
}
// handle selections
else if (event->iptkey == IPT_UI_SELECT)
@@ -433,7 +433,7 @@ void ui_menu_software::populate()
if (found)
{
if (!have_compatible)
- item_append("[compatible lists]", nullptr, MENU_FLAG_DISABLE, nullptr);
+ item_append(_("[compatible lists]"), nullptr, MENU_FLAG_DISABLE, nullptr);
item_append(swlistdev->description(), nullptr, 0, (void *)swlistdev);
}
have_compatible = true;
diff --git a/src/emu/ui/tapectrl.cpp b/src/emu/ui/tapectrl.cpp
index 253ffbf915d..0362f0c8a84 100644
--- a/src/emu/ui/tapectrl.cpp
+++ b/src/emu/ui/tapectrl.cpp
@@ -81,29 +81,29 @@ void ui_menu_tape_control::populate()
state = current_device()->get_state();
item_append(
(state & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED
- ? "stopped"
+ ? _("stopped")
: ((state & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY
- ? ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "playing" : "(playing)")
- : ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? "recording" : "(recording)")
+ ? ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? _("playing") : _("(playing)"))
+ : ((state & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_ENABLED ? _("recording") : _("(recording)"))
),
timepos.c_str(),
tapeflags,
TAPECMD_SLIDER);
// pause or stop
- item_append("Pause/Stop", nullptr, 0, TAPECMD_STOP);
+ item_append(_("Pause/Stop"), nullptr, 0, TAPECMD_STOP);
// play
- item_append("Play", nullptr, 0, TAPECMD_PLAY);
+ item_append(_("Play"), nullptr, 0, TAPECMD_PLAY);
// record
- item_append("Record", nullptr, 0, TAPECMD_RECORD);
+ item_append(_("Record"), nullptr, 0, TAPECMD_RECORD);
// rewind
- item_append("Rewind", nullptr, 0, TAPECMD_REWIND);
+ item_append(_("Rewind"), nullptr, 0, TAPECMD_REWIND);
// fast forward
- item_append("Fast Forward", nullptr, 0, TAPECMD_FAST_FORWARD);
+ item_append(_("Fast Forward"), nullptr, 0, TAPECMD_FAST_FORWARD);
}
}
}
@@ -171,9 +171,9 @@ void ui_menu_tape_control::get_time_string(std::string &dest, cassette_image_dev
t1 = cassette->get_length();
if (t1)
- strprintf(dest, "%04d/%04d", (int)t0, (int)t1);
+ dest = string_format("%04d/%04d", (int)t0, (int)t1);
else
- strprintf(dest, "%04d/%04d", 0, (int)t1);
+ dest = string_format("%04d/%04d", 0, (int)t1);
if (curpos != nullptr)
*curpos = t0;
diff --git a/src/emu/ui/toolbar.h b/src/emu/ui/toolbar.h
index 095aa0e3cdd..93ee1e3467b 100644
--- a/src/emu/ui/toolbar.h
+++ b/src/emu/ui/toolbar.h
@@ -104,77 +104,6 @@ static const UINT32 toolbar_bitmap_bmp[][1024] = {
0x00000000, 0x00000000, 0x00000000, 0x45999999, 0xFFBCBCBC, 0xFFD8D8D8, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD3D6D6, 0xFFBFC9CC, 0xFF3D7E93, 0xFF126681, 0xFF116682, 0xFF22728B, 0xFF44889D, 0xFF1F6F89, 0xF90F6480, 0xFC116681, 0x620D607A, 0x0A0A5A74, 0x020A5B75,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7B9C9C9C, 0xD7B1B1B1, 0xFAC1C1C1, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFBDBFC0, 0xFF819BA4, 0xFF96A8AD, 0xFF467C8E, 0xF220687F, 0xCB276A7F, 0xE90E607A, 0x520B5D77, 0x5F0B5D77, 0x2B0B5D77, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07999999, 0x2D999999, 0x50999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x55999999, 0x72407283, 0x6626687D, 0x22467584, 0x800B5C76, 0x1A0A5B75, 0x00000000, 0x00000000, 0x00000000, 0x00000000
-},
-
-
-{
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x03B5B5B5, 0x48B6B6B6, 0xC2C9C9C9, 0xF9CDCDCD, 0xFFCDCDCD, 0xFFCDCDCD, 0xFFCDCDCD, 0xFFCDCDCD, 0xFFCDCDCD, 0xFBCDCDCD, 0xAEC5C5C5, 0x3BB7B7B7, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x21B5B5B5, 0xCBCBCBCB, 0xFFF5F5F5, 0xFFF9F9F9, 0xFFF7F7F7, 0xFFF7F7F7, 0xFFF7F7F7, 0xFFF7F7F7, 0xFFF7F7F7, 0xFFF9F9F9, 0xFFECECEC, 0xB4C6C6C6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x51B5B5B5, 0xFADDDDDD, 0xFFF6F6F6, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF7F7F7, 0xFFD1D1D1, 0x63B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x55B5B5B5, 0x52B5B5B5, 0x37B5B5B5, 0x06B5B5B5, 0x00000000, 0x00000000, 0x00000000,
- 0x55B5B5B5, 0xFFDEDEDE, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF3F3F3, 0xFFF7F7F7, 0xFFF1F1F1, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFFE6E6E6, 0xFCE5E5E5, 0xE1D9D9D9, 0x7EB6B6B6, 0x07B5B5B5, 0x00000000, 0x00000000,
- 0x55B5B5B5, 0xFFDEDEDE, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF2F2F2, 0xFFF0F0EE, 0xFFEADFCF, 0xFFE4CEB1, 0xFFE3CEB0, 0xFFE3CEB0, 0xFFE3CEB0, 0xFFE5D0B2, 0xFFEAD5B7, 0xE4CEB696, 0x58C0965D, 0x06C4842A, 0x00000000,
- 0x55B5B5B5, 0xFFDDDDDD, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFF1F1F1, 0xFFDEC7A8, 0xFFE7A054, 0xFFC4B778, 0xFFBAB97E, 0xFFBAB97E, 0xFFBAB97E, 0xFFBAB97E, 0xFFBAB97E, 0xFFC4B475, 0xE4E89A43, 0x7EC7842A, 0x07C4842A,
- 0x55B5B5B5, 0xFFDCDCDC, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFEDEDEC, 0xFFE3A34E, 0xFFFBC160, 0xFFFFBE5A, 0xFFFFBA57, 0xFFFFBA57, 0xFFFFBA57, 0xFFFFBA57, 0xFFFFBA57, 0xFFFFBE5B, 0xFFFAC668, 0xE2F09F37, 0x38C4842A,
- 0x55B5B5B5, 0xFFDBDBDB, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFE5E3DF, 0xFFE99B32, 0xFFFFBA55, 0xFFFFB853, 0xFFFFB853, 0xFFFFB853, 0xFFFFB853, 0xFFFFB853, 0xFFFFB853, 0xFFFFB853, 0xFFFFBA56, 0xFDECA644, 0x53C4842A,
- 0x55B5B5B5, 0xFFDBDBDB, 0xFFEEEEEE, 0xFFECECEB, 0xFFE5D7C4, 0xFFE2CCAF, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFE0CBAD, 0xFFD9C2A0, 0xFFEC9C30, 0xFFFFB751, 0xFFFFB64F, 0xFFFFB64F, 0xFFFFB64F, 0xFFFFB64F, 0xFFFFB64F, 0xFFFFB64F, 0xFFFFB64F, 0xFFFFB64F, 0xFFEBA543, 0x55C4842A,
- 0x55B5B5B5, 0xFFDADADA, 0xFFEAEAE9, 0xFFD7B98F, 0xFFF0A750, 0xFFDDB262, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD5B56A, 0xFFD8B367, 0xFFFAB952, 0xFFFFB64F, 0xFFFFB24B, 0xFFFFB24B, 0xFFFFB24B, 0xFFFFB24B, 0xFFFFB24B, 0xFFFFB24B, 0xFFFFB24B, 0xFFFFB24B, 0xFFEBA340, 0x55C4842A,
- 0x55B5B5B5, 0xFFDADADA, 0xFFE3D5C1, 0xFFF0A544, 0xFFFFB753, 0xFFFFB048, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFFFAE44, 0xFFEBA03B, 0x55C4842A,
- 0x55B5B5B5, 0xFFD9D9D9, 0xFFDFC9AC, 0xFFEC9F38, 0xFFFFAE42, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFFFAC40, 0xFFEB9E39, 0x55C4842A,
- 0x55B5B5B5, 0xFFD9D9D9, 0xFFDEC8AA, 0xFFEB9C34, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFFFA739, 0xFFEB9C34, 0x55C4842A,
- 0x55B5B5B5, 0xFFD8D8D8, 0xFFDDC8AA, 0xFFEB9A30, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFFFA533, 0xFFEB9A30, 0x55C4842A,
- 0x55B5B5B5, 0xFFD7D7D7, 0xFFDCC7A9, 0xFFEB972B, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFFFA12C, 0xFFEB972B, 0x55C4842A,
- 0x55B5B5B5, 0xFFD7D7D7, 0xFFDCC6A8, 0xFFEB9627, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFFF9F26, 0xFFEB9627, 0x55C4842A,
- 0x55B5B5B5, 0xFFD7D7D7, 0xFFDCC6A8, 0xFFEB9423, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFFF9C1F, 0xFFEB9423, 0x55C4842A,
- 0x55B5B5B5, 0xFFD5D5D5, 0xFFDAC5A7, 0xFFEA9320, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFFD9A1B, 0xFFEA9320, 0x55C4842A,
- 0x55B5B5B5, 0xFFD5D5D5, 0xFFDAC5A7, 0xFFE38F21, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFF3951D, 0xFFE38F21, 0x55C4842A,
- 0x55B5B5B5, 0xFFD4D4D4, 0xFFD9C4A6, 0xFFDE8D22, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFEC921F, 0xFFDE8D22, 0x55C4842A,
- 0x55B5B5B5, 0xFFD4D4D4, 0xFFD9C4A6, 0xFFD88A24, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFE28E21, 0xFFD88A24, 0x55C4842A,
- 0x51B5B5B5, 0xFAD3D3D3, 0xFFD8C3A5, 0xFFD38926, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFDB8C25, 0xFFD38926, 0x55C4842A,
- 0x21B5B5B5, 0xCBC3C3C3, 0xFFD6C4AC, 0xFFCE8B34, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xFFD38827, 0xEDCC8628, 0x43C4842A,
- 0x03B5B5B5, 0x4CB6B6B6, 0xC8BFB9B1, 0xFAC3924D, 0xFFCA8629, 0xFFCD8829, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8929, 0xFFCD8829, 0xFFCA8629, 0xC1C6852A, 0x17C4842A,
- 0x00000000, 0x00000000, 0x00000000, 0x10C4842A, 0x72C4842A, 0xA5C4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xAAC4842A, 0xA5C4842A, 0x72C4842A, 0x10C4842A, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
-},
-
-{
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x27999999, 0x8E999999, 0xAA999999, 0xAA999999, 0x8E999999, 0x27999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10999999, 0xBAAAAAAA, 0xFFF2F2F2, 0xFFFAFAFA, 0xFFFAFAFA, 0xFFF2F2F2, 0xBAA9A9A9, 0x10999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x37999999, 0xE1C4C4C4, 0xFFF6F6F6, 0xFFF0F0F0, 0xFFF0F0F0, 0xFFF5F5F5, 0xDAC0C0C0, 0x30999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x49A1A1A1, 0x99B0B0B0, 0x69A7A7A7, 0x23999999, 0x00000000, 0x00000000, 0x659D9D9D, 0xF8D4D4D4, 0xFFF1F1F1, 0xFFEFEFEF, 0xFFEFEFEF, 0xFFF3F3F3, 0xF4D3D3D3, 0x619D9D9D, 0x00000000, 0x00000000, 0x23999999, 0x69A7A7A7, 0x99B0B0B0, 0x49A1A1A1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x43999999, 0xE8C7C7C7, 0xFFEAEAEA, 0xF6DEDEDE, 0xCDAFAFAF, 0x58999999, 0x80999999, 0xDDC0C0C0, 0xFFF0F0F0, 0xFFEFEFEF, 0xFFEEEEEE, 0xFFEEEEEE, 0xFFEFEFEF, 0xFFF1F1F1, 0xDDC0C0C0, 0x7E999999, 0x56999999, 0xCDAFAFAF, 0xF6DEDEDE, 0xFFEAEAEA, 0xE8C7C7C7, 0x43999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4CA3A3A3, 0xE8C7C7C7, 0xFFFBFBFB, 0xFFF0F0F0, 0xFFF4F4F4, 0xFFF9F9F9, 0xFFDADADA, 0xFFECECEC, 0xFFFAFAFA, 0xFFF3F3F3, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFF3F3F3, 0xFFFAFAFA, 0xFFEBEBEB, 0xFFD9D9D9, 0xFFF9F9F9, 0xFFF4F4F4, 0xFFF0F0F0, 0xFFFBFBFB, 0xE8C7C7C7, 0x4CA3A3A3, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x9DADADAD, 0xFFE1E1E1, 0xFFF0F0F0, 0xFFEDEDED, 0xFFEDEDED, 0xFFF0F0F0, 0xFFF3F3F3, 0xFFF2F2F2, 0xFFEEEEEE, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEDEDED, 0xFFEEEEEE, 0xFFF2F2F2, 0xFFF3F3F3, 0xFFF0F0F0, 0xFFEDEDED, 0xFFEDEDED, 0xFFF0F0F0, 0xFFE1E1E1, 0x9DADADAD, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x7AA7A7A7, 0xFAD5D5D5, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFE6E6E6, 0xFFDEDEDE, 0xFFDADADA, 0xFFDADADA, 0xFFDEDEDE, 0xFFE6E6E6, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xF8D4D4D4, 0x79A7A7A7, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2E999999, 0xD8B0B0B0, 0xFFE8E8E8, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEAEAEA, 0xFFD4D4D4, 0xFFC2C2C2, 0xFFB9B9B9, 0xFFB6B6B6, 0xFFB6B6B6, 0xFFB9B9B9, 0xFFC2C2C2, 0xFFD4D4D4, 0xFFEAEAEA, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFEBEBEB, 0xFFE8E8E8, 0xD3AFAFAF, 0x29999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x60999999, 0xFFD3D3D3, 0xFFEBEBEB, 0xFFEAEAEA, 0xFFEAEAEA, 0xFFE2E2E2, 0xFFC5C5C5, 0xFFB5B5B5, 0xFFB5B5B5, 0xFFB5B5B5, 0xFFB5B5B5, 0xFFB5B5B5, 0xFFB5B5B5, 0xFFB5B5B5, 0xFFB5B5B5, 0xFFC5C5C5, 0xFFE2E2E2, 0xFFEAEAEA, 0xFFEAEAEA, 0xFFEBEBEB, 0xFFD3D3D3, 0x60999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8A999999, 0xFFE6E6E6, 0xFFECECEC, 0xFFE9E9E9, 0xFFE8E8E8, 0xFFC6C6C6, 0xFFB8B8B8, 0xFFB7B7B7, 0xFFB7B7B7, 0xFFB7B7B7, 0xFFB7B7B7, 0xFFB7B7B7, 0xFFB7B7B7, 0xFFB7B7B7, 0xFFB7B7B7, 0xFFB8B8B8, 0xFFC6C6C6, 0xFFE8E8E8, 0xFFE9E9E9, 0xFFECECEC, 0xFFE2E2E2, 0x83999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x0E999999, 0x2E999999, 0x619D9D9D, 0xDDC1C1C1, 0xFFF0F0F0, 0xFFE8E8E8, 0xFFE8E8E8, 0xFFD4D4D4, 0xFFB9B9B9, 0xFFB9B9B9, 0xFFB9B9B9, 0xFFBABABA, 0xD8B9B9B9, 0xB9B9B9B9, 0xB9B9B9B9, 0xD8B9B9B9, 0xFFBABABA, 0xFFB9B9B9, 0xFFB9B9B9, 0xFFB9B9B9, 0xFFD4D4D4, 0xFFE8E8E8, 0xFFE9E9E9, 0xFFF2F2F2, 0xDDBFBFBF, 0x619D9D9D, 0x2E999999, 0x0E999999, 0x00000000, 0x00000000,
- 0x00000000, 0x27999999, 0xB8A8A8A8, 0xD8C4C4C4, 0xF4D9D9D9, 0xFFEFEFEF, 0xFFECECEC, 0xFFE7E7E7, 0xFFE3E3E3, 0xFFC7C7C7, 0xFFBCBCBC, 0xFFBCBCBC, 0xFFBCBCBC, 0xC6BCBCBC, 0x2EBBBBBB, 0x0FBBBBBB, 0x0FBBBBBB, 0x2EBBBBBB, 0xC6BCBCBC, 0xFFBCBCBC, 0xFFBCBCBC, 0xFFBCBCBC, 0xFFC7C7C7, 0xFFE3E3E3, 0xFFE7E7E7, 0xFFECECEC, 0xFFEFEFEF, 0xF4D9D9D9, 0xD8C4C4C4, 0xB8A8A8A8, 0x27999999, 0x00000000,
- 0x04999999, 0x919D9D9D, 0xFFECECEC, 0xFFF6F6F6, 0xFFEBEBEB, 0xFFE6E6E6, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFDCDCDC, 0xFFC2C2C2, 0xFFBEBEBE, 0xFFBEBEBE, 0xD8BEBEBE, 0x2EBEBEBE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2EBEBEBE, 0xD8BEBEBE, 0xFFBEBEBE, 0xFFBEBEBE, 0xFFC2C2C2, 0xFFDBDBDB, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE6E6E6, 0xFFEBEBEB, 0xFFF6F6F6, 0xFFEBEBEB, 0x8E999999, 0x00000000,
- 0x12999999, 0xBCA8A8A8, 0xFFE6E6E6, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFDADADA, 0xFFC2C2C2, 0xFFC1C1C1, 0xFFC1C1C1, 0xB9C1C1C1, 0x0FC1C1C1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FC1C1C1, 0xB9C1C1C1, 0xFFC1C1C1, 0xFFC1C1C1, 0xFFC1C1C1, 0xFFD9D9D9, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xFFE5E5E5, 0xAA999999, 0x00000000,
- 0x14999999, 0xBEA8A8A8, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFDCDCDC, 0xFFC4C4C4, 0xFFC3C3C3, 0xFFC3C3C3, 0xB9C4C4C4, 0x0FC4C4C4, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0FC4C4C4, 0xB9C4C4C4, 0xFFC3C3C3, 0xFFC3C3C3, 0xFFC4C4C4, 0xFFDDDDDD, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xAA999999, 0x00000000,
- 0x05999999, 0x9A9E9E9E, 0xFFDCDCDC, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFDEDEDE, 0xFFC8C8C8, 0xFFC5C5C5, 0xFFC5C5C5, 0xD8C6C6C6, 0x2EC6C6C6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2EC6C6C6, 0xD8C6C6C6, 0xFFC5C5C5, 0xFFC5C5C5, 0xFFC8C8C8, 0xFFDDDDDD, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFE3E3E3, 0xFFDCDCDC, 0x95999999, 0x00000000,
- 0x00000000, 0x2D999999, 0xC3A8A8A8, 0xE5BEBEBE, 0xFCCACACA, 0xFFDADADA, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE2E2E2, 0xFFD2D2D2, 0xFFC8C8C8, 0xFFC8C8C8, 0xFFC8C8C8, 0xC6C9C9C9, 0x2ECACACA, 0x0FCACACA, 0x0FCACACA, 0x2ECACACA, 0xC6C9C9C9, 0xFFC8C8C8, 0xFFC8C8C8, 0xFFC8C8C8, 0xFFD1D1D1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFD9D9D9, 0xFCCACACA, 0xE5BEBEBE, 0xC3A8A8A8, 0x2D999999, 0x00000000,
- 0x00000000, 0x00000000, 0x19999999, 0x3B999999, 0x709D9D9D, 0xE4B9B9B9, 0xFFE0E0E0, 0xFFE0E0E0, 0xFFE2E2E2, 0xFFDDDDDD, 0xFFCBCBCB, 0xFFCBCBCB, 0xFFCBCBCB, 0xFFCBCBCB, 0xD8CCCCCC, 0xB9CCCCCC, 0xB9CCCCCC, 0xD8CCCCCC, 0xFFCBCBCB, 0xFFCBCBCB, 0xFFCBCBCB, 0xFFCBCBCB, 0xFFDDDDDD, 0xFFE2E2E2, 0xFFE0E0E0, 0xFFE0E0E0, 0xE1B8B8B8, 0x6C9D9D9D, 0x3B999999, 0x19999999, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04999999, 0x959C9C9C, 0xFFD7D7D7, 0xFFDFDFDF, 0xFFDFDFDF, 0xFFE4E4E4, 0xFFD8D8D8, 0xFFCECECE, 0xFFCECECE, 0xFFCECECE, 0xFFCECECE, 0xFFCECECE, 0xFFCECECE, 0xFFCECECE, 0xFFCECECE, 0xFFCECECE, 0xFFCECECE, 0xFFD8D8D8, 0xFFE4E4E4, 0xFFDFDFDF, 0xFFDFDFDF, 0xFFD7D7D7, 0x8A999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x60999999, 0xFFCBCBCB, 0xFFDFDFDF, 0xFFDEDEDE, 0xFFDFDFDF, 0xFFE3E3E3, 0xFFDADADA, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFCFCFCF, 0xFFDADADA, 0xFFE3E3E3, 0xFFDEDEDE, 0xFFDEDEDE, 0xFFDFDFDF, 0xFFC9C9C9, 0x5C999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x23999999, 0xCDACACAC, 0xFFE8E8E8, 0xFFDFDFDF, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDEDEDE, 0xFFE3E3E3, 0xFFE1E1E1, 0xFFDADADA, 0xFFD5D5D5, 0xFFD2D2D2, 0xFFD2D2D2, 0xFFD5D5D5, 0xFFD9D9D9, 0xFFE1E1E1, 0xFFE3E3E3, 0xFFDEDEDE, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFE0E0E0, 0xFFE9E9E9, 0xCDACACAC, 0x23999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x69A3A3A3, 0xF6CECECE, 0xFFE4E4E4, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDFDFDF, 0xFFE1E1E1, 0xFFDFDFDF, 0xFFE1E1E1, 0xFFE1E1E1, 0xFFDFDFDF, 0xFFE1E1E1, 0xFFDFDFDF, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFDDDDDD, 0xFFE4E4E4, 0xF6CECECE, 0x69A3A3A3, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x9DA8A8A8, 0xFFCFCFCF, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFCFCFCF, 0x9DA8A8A8, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4E9F9F9F, 0xEABFBFBF, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFD9D9D9, 0xFFC7C7C7, 0xFFD2D2D2, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFD2D2D2, 0xFFC7C7C7, 0xFFD9D9D9, 0xFFDBDBDB, 0xFFDBDBDB, 0xFFDBDBDB, 0xE8B7B7B7, 0x4C9F9F9F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C999999, 0x5F999999, 0xEABFBFBF, 0xFFCECECE, 0xFAC8C8C8, 0xD8ABABAB, 0x60999999, 0x959C9C9C, 0xE4B5B5B5, 0xFFD3D3D3, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFDADADA, 0xFFD2D2D2, 0xE1B4B4B4, 0x959C9C9C, 0x60999999, 0xD8ADADAD, 0xFAC8C8C8, 0xFFCECECE, 0xE8B7B7B7, 0x43999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0C999999, 0x52A0A0A0, 0xA0A8A8A8, 0x7AA4A4A4, 0x2E999999, 0x00000000, 0x04999999, 0x709C9C9C, 0xFCC4C4C4, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xF4C1C1C1, 0x659B9B9B, 0x04999999, 0x00000000, 0x2E999999, 0x7AA4A4A4, 0xA0A8A8A8, 0x50A0A0A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x39999999, 0xE3B9B9B9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xFFD9D9D9, 0xDAB5B5B5, 0x30999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x14999999, 0xBEA5A5A5, 0xFFD3D3D3, 0xFFD8D8D8, 0xFFD8D8D8, 0xFFD3D3D3, 0xBAA4A4A4, 0x10999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2D999999, 0x9C9F9F9F, 0xC0A7A7A7, 0xBEA6A6A6, 0x9A9E9E9E, 0x2D999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x07999999, 0x16999999, 0x14999999, 0x05999999, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
}
};
diff --git a/src/emu/ui/ui.cpp b/src/emu/ui/ui.cpp
index f3ce51feea6..4104ff88308 100644
--- a/src/emu/ui/ui.cpp
+++ b/src/emu/ui/ui.cpp
@@ -112,13 +112,13 @@ static const char *s_color_list[] = {
***************************************************************************/
// messagebox buffer
-static std::string messagebox_text;
-static std::string messagebox_poptext;
-static rgb_t messagebox_backcolor;
+std::string ui_manager::messagebox_text;
+std::string ui_manager::messagebox_poptext;
+rgb_t ui_manager::messagebox_backcolor;
// slider info
-static slider_state *slider_list;
-static slider_state *slider_current;
+slider_state *ui_manager::slider_list;
+slider_state *ui_manager::slider_current;
/***************************************************************************
@@ -148,7 +148,7 @@ static INT32 slider_flicker(running_machine &machine, void *arg, std::string *st
static INT32 slider_beam_width_min(running_machine &machine, void *arg, std::string *str, INT32 newval);
static INT32 slider_beam_width_max(running_machine &machine, void *arg, std::string *str, INT32 newval);
static INT32 slider_beam_intensity_weight(running_machine &machine, void *arg, std::string *str, INT32 newval);
-static char *slider_get_screen_desc(screen_device &screen);
+static std::string slider_get_screen_desc(screen_device &screen);
#ifdef MAME_DEBUG
static INT32 slider_crossscale(running_machine &machine, void *arg, std::string *str, INT32 newval);
static INT32 slider_crossoffset(running_machine &machine, void *arg, std::string *str, INT32 newval);
@@ -914,26 +914,6 @@ void ui_manager::draw_message_window(render_container *container, const char *te
//-------------------------------------------------
-// popup_time - popup a message for a specific
-// amount of time
-//-------------------------------------------------
-
-void CLIB_DECL ui_manager::popup_time(int seconds, const char *text, ...)
-{
- va_list arg;
-
- // extract the text
- va_start(arg,text);
- strvprintf(messagebox_poptext, text, arg);
- messagebox_backcolor = UI_BACKGROUND_COLOR;
- va_end(arg);
-
- // set a timer
- m_popup_text_end = osd_ticks() + osd_ticks_per_second() * seconds;
-}
-
-
-//-------------------------------------------------
// show_fps_temp - show the FPS counter for
// a specific period of time
//-------------------------------------------------
@@ -1059,9 +1039,11 @@ bool ui_manager::show_timecode_total()
std::string &ui_manager::disclaimer_string(std::string &str)
{
- str.assign(_("Usage of emulators in conjunction with ROMs you don't own is forbidden by copyright law.\n\n"));
- strcatprintf(str, _("IF YOU ARE NOT LEGALLY ENTITLED TO PLAY \"%s\" ON THIS EMULATOR, PRESS ESC.\n\n"), machine().system().description);
- str.append(_("Otherwise, type OK or move the joystick left then right to continue"));
+ str = string_format(
+ _("Usage of emulators in conjunction with ROMs you don't own is forbidden by copyright law.\n\n"
+ "IF YOU ARE NOT LEGALLY ENTITLED TO PLAY \"%1$s\" ON THIS EMULATOR, PRESS ESC.\n\n"
+ "Otherwise, type OK or move the joystick left then right to continue"),
+ machine().system().description);
return str;
}
@@ -1204,8 +1186,14 @@ std::string &ui_manager::warnings_string(std::string &str)
std::string &ui_manager::game_info_astring(std::string &str)
{
+ std::ostringstream buf;
+
// print description, manufacturer, and CPU:
- strprintf(str, "%s\n%s %s\nDriver: %s\n\nCPU:\n", machine().system().description, machine().system().year, machine().system().manufacturer, core_filename_extract_base(machine().system().source_file).c_str());
+ util::stream_format(buf, _("%1$s\n%2$s %3$s\nDriver: %4$s\n\nCPU:\n"),
+ machine().system().description,
+ machine().system().year,
+ machine().system().manufacturer,
+ core_filename_extract_base(machine().system().source_file));
// loop over all CPUs
execute_interface_iterator execiter(machine().root_device());
@@ -1229,15 +1217,15 @@ std::string &ui_manager::game_info_astring(std::string &str)
}
// if more than one, prepend a #x in front of the CPU name
- if (count > 1)
- strcatprintf(str, "%d" UTF8_MULTIPLY, count);
- str.append(name);
-
// display clock in kHz or MHz
- if (clock >= 1000000)
- strcatprintf(str, " %d.%06d" UTF8_NBSP "MHz\n", clock / 1000000, clock % 1000000);
- else
- strcatprintf(str, " %d.%03d" UTF8_NBSP "kHz\n", clock / 1000, clock % 1000);
+ util::stream_format(buf,
+ (count > 1) ? "%1$d" UTF8_MULTIPLY "%2$s %3$d.%4$0*5$d%6$s\n" : "%2$s %3$d.%4$0*5$d%6$s\n",
+ count,
+ name,
+ (clock >= 1000000) ? (clock / 1000000) : (clock / 1000),
+ (clock >= 1000000) ? (clock % 1000000) : (clock % 1000),
+ (clock >= 1000000) ? 6 : 3,
+ (clock >= 1000000) ? _("MHz") : _("kHz"));
}
// loop over all sound chips
@@ -1251,7 +1239,7 @@ std::string &ui_manager::game_info_astring(std::string &str)
// append the Sound: string
if (!found_sound)
- str.append(_("\nSound:\n"));
+ buf << _("\nSound:\n");
found_sound = true;
// count how many identical sound chips we have
@@ -1263,52 +1251,51 @@ std::string &ui_manager::game_info_astring(std::string &str)
if (soundtags.insert(scan->device().tag()).second)
count++;
}
- // if more than one, prepend a #x in front of the CPU name
- if (count > 1)
- strcatprintf(str, "%d" UTF8_MULTIPLY, count);
- str.append(sound->device().name());
+ // if more than one, prepend a #x in front of the CPU name
// display clock in kHz or MHz
int clock = sound->device().clock();
- if (clock >= 1000000)
- strcatprintf(str, " %d.%06d" UTF8_NBSP "MHz\n", clock / 1000000, clock % 1000000);
- else if (clock != 0)
- strcatprintf(str, " %d.%03d" UTF8_NBSP "kHz\n", clock / 1000, clock % 1000);
- else
- str.append("\n");
+ util::stream_format(buf,
+ (count > 1)
+ ? ((clock != 0) ? "%1$d" UTF8_MULTIPLY "%2$s %3$d.%4$0*5$d%6$s\n" : "%1$d" UTF8_MULTIPLY "%2$s\n")
+ : ((clock != 0) ? "%2$s %3$d.%4$0*5$d%6$s\n" : "%2$s\n"),
+ count,
+ sound->device().name(),
+ (clock >= 1000000) ? (clock / 1000000) : (clock / 1000),
+ (clock >= 1000000) ? (clock % 1000000) : (clock % 1000),
+ (clock >= 1000000) ? 6 : 3,
+ (clock >= 1000000) ? _("MHz") : _("kHz"));
}
// display screen information
- str.append(_("\nVideo:\n"));
+ buf << _("\nVideo:\n");
screen_device_iterator scriter(machine().root_device());
int scrcount = scriter.count();
if (scrcount == 0)
- str.append(_("None\n"));
+ buf << _("None\n");
else
{
for (screen_device *screen = scriter.first(); screen != nullptr; screen = scriter.next())
{
- if (scrcount > 1)
- {
- str.append(slider_get_screen_desc(*screen));
- str.append(": ");
- }
-
+ std::string detail;
if (screen->screen_type() == SCREEN_TYPE_VECTOR)
- str.append(_("Vector\n"));
+ detail = _("Vector");
else
{
const rectangle &visarea = screen->visible_area();
-
- strcatprintf(str, "%d " UTF8_MULTIPLY " %d (%s) %f" UTF8_NBSP "Hz\n",
+ detail = string_format("%d " UTF8_MULTIPLY " %d (%s) %f" UTF8_NBSP "Hz",
visarea.width(), visarea.height(),
(machine().system().flags & ORIENTATION_SWAP_XY) ? "V" : "H",
ATTOSECONDS_TO_HZ(screen->frame_period().attoseconds()));
}
+
+ util::stream_format(buf,
+ (scrcount > 1) ? _("%1$s: %2$s\n") : _("%2$s\n"),
+ slider_get_screen_desc(*screen), detail);
}
}
- return str;
+ return str = buf.str();
}
@@ -1698,12 +1685,12 @@ UINT32 ui_manager::handler_ingame(running_machine &machine, render_container *co
if (machine.ui_input().pressed(IPT_UI_PAUSE))
{
// with a shift key, it is single step
-// if (is_paused && (machine.input().code_pressed(KEYCODE_LSHIFT) || machine.input().code_pressed(KEYCODE_RSHIFT)))
-// {
-// machine.ui().set_single_step(true);
-// machine.resume();
-// }
-// else
+// if (is_paused && (machine.input().code_pressed(KEYCODE_LSHIFT) || machine.input().code_pressed(KEYCODE_RSHIFT)))
+// {
+// machine.ui().set_single_step(true);
+// machine.resume();
+// }
+// else
machine.toggle_pause();
}
@@ -1901,11 +1888,11 @@ UINT32 ui_manager::handler_confirm_quit(running_machine &machine, render_contain
std::string ui_cancel_text = machine.input().seq_name(machine.ioport().type_seq(IPT_UI_CANCEL, 0, SEQ_TYPE_STANDARD));
// assemble the quit message
- std::string quit_message = strformat(_("Are you sure you want to quit?\n\n"
- "Press ''%s'' to quit,\n"
- "Press ''%s'' to return to emulation."),
- ui_select_text.c_str(),
- ui_cancel_text.c_str());
+ std::string quit_message = string_format(_("Are you sure you want to quit?\n\n"
+ "Press ''%1$s'' to quit,\n"
+ "Press ''%2$s'' to return to emulation."),
+ ui_select_text,
+ ui_cancel_text);
machine.ui().draw_text_box(container, quit_message.c_str(), JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR);
machine.pause();
@@ -1987,8 +1974,7 @@ static slider_state *slider_init(running_machine &machine)
INT32 maxval = 2000;
INT32 defval = 1000;
- str.assign(info.stream->input_name(info.inputnum));
- str.append(_(" Volume"));
+ str = string_format(_("%1$s Volume"), info.stream->input_name(info.inputnum));
*tailptr = slider_alloc(machine, str.c_str(), 0, defval, maxval, 20, slider_mixervol, (void *)(FPTR)item);
tailptr = &(*tailptr)->next;
}
@@ -2010,7 +1996,7 @@ static slider_state *slider_init(running_machine &machine)
for (device_execute_interface *exec = iter.first(); exec != nullptr; exec = iter.next())
{
void *param = (void *)&exec->device();
- strprintf(str, "Overclock CPU %s", exec->device().tag());
+ str = string_format(_("Overclock CPU %1$s"), exec->device().tag());
*tailptr = slider_alloc(machine, str.c_str(), 10, 1000, 2000, 1, slider_overclock, param);
tailptr = &(*tailptr)->next;
}
@@ -2025,37 +2011,38 @@ static slider_state *slider_init(running_machine &machine)
int defxoffset = floor(screen->xoffset() * 1000.0f + 0.5f);
int defyoffset = floor(screen->yoffset() * 1000.0f + 0.5f);
void *param = (void *)screen;
+ std::string screen_desc = slider_get_screen_desc(*screen);
// add refresh rate tweaker
if (machine.options().cheat())
{
- strprintf(str, "%s Refresh Rate", slider_get_screen_desc(*screen));
+ str = string_format(_("%1$s Refresh Rate"), screen_desc);
*tailptr = slider_alloc(machine, str.c_str(), -10000, 0, 10000, 1000, slider_refresh, param);
tailptr = &(*tailptr)->next;
}
// add standard brightness/contrast/gamma controls per-screen
- strprintf(str, "%s Brightness", slider_get_screen_desc(*screen));
+ str = string_format(_("%1$s Brightness"), screen_desc);
*tailptr = slider_alloc(machine, str.c_str(), 100, 1000, 2000, 10, slider_brightness, param);
tailptr = &(*tailptr)->next;
- strprintf(str, "%s Contrast", slider_get_screen_desc(*screen));
+ str = string_format(_("%1$s Contrast"), screen_desc);
*tailptr = slider_alloc(machine, str.c_str(), 100, 1000, 2000, 50, slider_contrast, param);
tailptr = &(*tailptr)->next;
- strprintf(str,"%s Gamma", slider_get_screen_desc(*screen));
+ str = string_format(_("%1$s Gamma"), screen_desc);
*tailptr = slider_alloc(machine, str.c_str(), 100, 1000, 3000, 50, slider_gamma, param);
tailptr = &(*tailptr)->next;
// add scale and offset controls per-screen
- strprintf(str,"%s Horiz Stretch", slider_get_screen_desc(*screen));
+ str = string_format(_("%1$s Horiz Stretch"), screen_desc);
*tailptr = slider_alloc(machine, str.c_str(), 500, defxscale, 1500, 2, slider_xscale, param);
tailptr = &(*tailptr)->next;
- strprintf(str,"%s Horiz Position", slider_get_screen_desc(*screen));
+ str = string_format(_("%1$s Horiz Position"), screen_desc);
*tailptr = slider_alloc(machine, str.c_str(), -500, defxoffset, 500, 2, slider_xoffset, param);
tailptr = &(*tailptr)->next;
- strprintf(str,"%s Vert Stretch", slider_get_screen_desc(*screen));
+ str = string_format(_("%1$s Vert Stretch"), screen_desc);
*tailptr = slider_alloc(machine, str.c_str(), 500, defyscale, 1500, 2, slider_yscale, param);
tailptr = &(*tailptr)->next;
- strprintf(str,"%s Vert Position", slider_get_screen_desc(*screen));
+ str = string_format(_("%1$s Vert Position"), screen_desc);
*tailptr = slider_alloc(machine, str.c_str(), -500, defyoffset, 500, 2, slider_yoffset, param);
tailptr = &(*tailptr)->next;
}
@@ -2073,16 +2060,16 @@ static slider_state *slider_init(running_machine &machine)
void *param = (void *)laserdisc;
// add scale and offset controls per-overlay
- strprintf(str,"Laserdisc '%s' Horiz Stretch", laserdisc->tag());
+ str = string_format(_("Laserdisc '%1$s' Horiz Stretch"), laserdisc->tag());
*tailptr = slider_alloc(machine, str.c_str(), 500, (defxscale == 0) ? 1000 : defxscale, 1500, 2, slider_overxscale, param);
tailptr = &(*tailptr)->next;
- strprintf(str,"Laserdisc '%s' Horiz Position", laserdisc->tag());
+ str = string_format(_("Laserdisc '%1$s' Horiz Position"), laserdisc->tag());
*tailptr = slider_alloc(machine, str.c_str(), -500, defxoffset, 500, 2, slider_overxoffset, param);
tailptr = &(*tailptr)->next;
- strprintf(str,"Laserdisc '%s' Vert Stretch", laserdisc->tag());
+ str = string_format(_("Laserdisc '%1$s' Vert Stretch"), laserdisc->tag());
*tailptr = slider_alloc(machine, str.c_str(), 500, (defyscale == 0) ? 1000 : defyscale, 1500, 2, slider_overyscale, param);
tailptr = &(*tailptr)->next;
- strprintf(str,"Laserdisc '%s' Vert Position", laserdisc->tag());
+ str = string_format(_("Laserdisc '%1$s' Vert Position"), laserdisc->tag());
*tailptr = slider_alloc(machine, str.c_str(), -500, defyoffset, 500, 2, slider_overyoffset, param);
tailptr = &(*tailptr)->next;
}
@@ -2109,10 +2096,10 @@ static slider_state *slider_init(running_machine &machine)
if (field->crosshair_axis() != CROSSHAIR_AXIS_NONE && field->player() == 0)
{
void *param = (void *)field;
- strprintf(str,"Crosshair Scale %s", (field->crosshair_axis() == CROSSHAIR_AXIS_X) ? "X" : "Y");
+ str = string_format(_("Crosshair Scale %1$s"), (field->crosshair_axis() == CROSSHAIR_AXIS_X) ? _("X") : _("Y"));
*tailptr = slider_alloc(machine, str.c_str(), -3000, 1000, 3000, 100, slider_crossscale, param);
tailptr = &(*tailptr)->next;
- strprintf(str,"Crosshair Offset %s", (field->crosshair_axis() == CROSSHAIR_AXIS_X) ? "X" : "Y");
+ str = string_format(_("Crosshair Offset %1$s"), (field->crosshair_axis() == CROSSHAIR_AXIS_X) ? _("X") : _("Y"));
*tailptr = slider_alloc(machine, str.c_str(), -3000, 0, 3000, 100, slider_crossoffset, param);
tailptr = &(*tailptr)->next;
}
@@ -2130,8 +2117,8 @@ static INT32 slider_volume(running_machine &machine, void *arg, std::string *str
{
if (newval != SLIDER_NOCHANGE)
machine.sound().set_attenuation(newval);
- if (str != nullptr)
- strprintf(*str,"%3ddB", machine.sound().attenuation());
+ if (str)
+ *str = string_format(_("%1$3ddB"), machine.sound().attenuation());
return machine.sound().attenuation();
}
@@ -2152,8 +2139,8 @@ static INT32 slider_mixervol(running_machine &machine, void *arg, std::string *s
if (newval > curval && (newval - curval) <= 4) newval += 4; // round up on increment
info.stream->set_user_gain(info.inputnum, (float)newval * 0.001f);
}
- if (str != nullptr)
- strprintf(*str,"%4.2f", (double) info.stream->user_gain(info.inputnum));
+ if (str)
+ *str = string_format("%4.2f", info.stream->user_gain(info.inputnum));
return floorf(info.stream->user_gain(info.inputnum) * 1000.0f + 0.5f);
}
@@ -2174,8 +2161,8 @@ static INT32 slider_adjuster(running_machine &machine, void *arg, std::string *s
settings.value = newval;
field->set_user_settings(settings);
}
- if (str != nullptr)
- strprintf(*str,"%d%%", settings.value);
+ if (str)
+ *str = string_format(_("%1$d%%"), settings.value);
return settings.value;
}
@@ -2190,8 +2177,8 @@ static INT32 slider_overclock(running_machine &machine, void *arg, std::string *
device_t *cpu = (device_t *)arg;
if (newval != SLIDER_NOCHANGE)
cpu->set_clock_scale((float)newval * 0.001f);
- if (str != nullptr)
- strprintf(*str,"%3.0f%%", floor(cpu->clock_scale() * 100.0 + 0.5));
+ if (str)
+ *str = string_format(_("%1$3.0f%%"), floor(cpu->clock_scale() * 100.0 + 0.5));
return floor(cpu->clock_scale() * 1000.0 + 0.5);
}
@@ -2213,8 +2200,8 @@ static INT32 slider_refresh(running_machine &machine, void *arg, std::string *st
const rectangle &visarea = screen->visible_area();
screen->configure(width, height, visarea, HZ_TO_ATTOSECONDS(defrefresh + (double)newval * 0.001));
}
- if (str != nullptr)
- strprintf(*str,"%.3ffps", ATTOSECONDS_TO_HZ(machine.first_screen()->frame_period().attoseconds()));
+ if (str)
+ *str = string_format(_("%1$.3ffps"), ATTOSECONDS_TO_HZ(machine.first_screen()->frame_period().attoseconds()));
refresh = ATTOSECONDS_TO_HZ(machine.first_screen()->frame_period().attoseconds());
return floor((refresh - defrefresh) * 1000.0 + 0.5);
}
@@ -2236,8 +2223,8 @@ static INT32 slider_brightness(running_machine &machine, void *arg, std::string
settings.m_brightness = (float)newval * 0.001f;
screen->container().set_user_settings(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_brightness);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_brightness);
return floor(settings.m_brightness * 1000.0f + 0.5f);
}
@@ -2258,8 +2245,8 @@ static INT32 slider_contrast(running_machine &machine, void *arg, std::string *s
settings.m_contrast = (float)newval * 0.001f;
screen->container().set_user_settings(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_contrast);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_contrast);
return floor(settings.m_contrast * 1000.0f + 0.5f);
}
@@ -2279,8 +2266,8 @@ static INT32 slider_gamma(running_machine &machine, void *arg, std::string *str,
settings.m_gamma = (float)newval * 0.001f;
screen->container().set_user_settings(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_gamma);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_gamma);
return floor(settings.m_gamma * 1000.0f + 0.5f);
}
@@ -2301,8 +2288,8 @@ static INT32 slider_xscale(running_machine &machine, void *arg, std::string *str
settings.m_xscale = (float)newval * 0.001f;
screen->container().set_user_settings(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_xscale);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_xscale);
return floor(settings.m_xscale * 1000.0f + 0.5f);
}
@@ -2323,8 +2310,8 @@ static INT32 slider_yscale(running_machine &machine, void *arg, std::string *str
settings.m_yscale = (float)newval * 0.001f;
screen->container().set_user_settings(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_yscale);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_yscale);
return floor(settings.m_yscale * 1000.0f + 0.5f);
}
@@ -2345,8 +2332,8 @@ static INT32 slider_xoffset(running_machine &machine, void *arg, std::string *st
settings.m_xoffset = (float)newval * 0.001f;
screen->container().set_user_settings(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_xoffset);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_xoffset);
return floor(settings.m_xoffset * 1000.0f + 0.5f);
}
@@ -2367,8 +2354,8 @@ static INT32 slider_yoffset(running_machine &machine, void *arg, std::string *st
settings.m_yoffset = (float)newval * 0.001f;
screen->container().set_user_settings(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_yoffset);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_yoffset);
return floor(settings.m_yoffset * 1000.0f + 0.5f);
}
@@ -2389,8 +2376,8 @@ static INT32 slider_overxscale(running_machine &machine, void *arg, std::string
settings.m_overscalex = (float)newval * 0.001f;
laserdisc->set_overlay_config(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_overscalex);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_overscalex);
return floor(settings.m_overscalex * 1000.0f + 0.5f);
}
@@ -2411,8 +2398,8 @@ static INT32 slider_overyscale(running_machine &machine, void *arg, std::string
settings.m_overscaley = (float)newval * 0.001f;
laserdisc->set_overlay_config(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_overscaley);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_overscaley);
return floor(settings.m_overscaley * 1000.0f + 0.5f);
}
@@ -2433,8 +2420,8 @@ static INT32 slider_overxoffset(running_machine &machine, void *arg, std::string
settings.m_overposx = (float)newval * 0.001f;
laserdisc->set_overlay_config(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_overposx);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_overposx);
return floor(settings.m_overposx * 1000.0f + 0.5f);
}
@@ -2455,8 +2442,8 @@ static INT32 slider_overyoffset(running_machine &machine, void *arg, std::string
settings.m_overposy = (float)newval * 0.001f;
laserdisc->set_overlay_config(settings);
}
- if (str != nullptr)
- strprintf(*str,"%.3f", (double) settings.m_overposy);
+ if (str)
+ *str = string_format(_("%1$.3f"), settings.m_overposy);
return floor(settings.m_overposy * 1000.0f + 0.5f);
}
@@ -2471,8 +2458,8 @@ static INT32 slider_flicker(running_machine &machine, void *arg, std::string *st
vector_device *vector = nullptr;
if (newval != SLIDER_NOCHANGE)
vector->set_flicker((float)newval * 0.001f);
- if (str != nullptr)
- strprintf(*str,"%1.2f", (double) vector->get_flicker());
+ if (str)
+ *str = string_format(_("%1$1.2f"), vector->get_flicker());
return floor(vector->get_flicker() * 1000.0f + 0.5f);
}
@@ -2488,7 +2475,7 @@ static INT32 slider_beam_width_min(running_machine &machine, void *arg, std::str
if (newval != SLIDER_NOCHANGE)
vector->set_beam_width_min(MIN((float)newval * 0.01f, vector->get_beam_width_max()));
if (str != nullptr)
- strprintf(*str,"%1.2f", (double) vector->get_beam_width_min());
+ *str = string_format(_("%1$1.2f"), vector->get_beam_width_min());
return floor(vector->get_beam_width_min() * 100.0f + 0.5f);
}
@@ -2504,7 +2491,7 @@ static INT32 slider_beam_width_max(running_machine &machine, void *arg, std::str
if (newval != SLIDER_NOCHANGE)
vector->set_beam_width_max(MAX((float)newval * 0.01f, vector->get_beam_width_min()));
if (str != nullptr)
- strprintf(*str,"%1.2f", (double) vector->get_beam_width_max());
+ *str = string_format(_("%1$1.2f"), vector->get_beam_width_max());
return floor(vector->get_beam_width_max() * 100.0f + 0.5f);
}
@@ -2520,7 +2507,7 @@ static INT32 slider_beam_intensity_weight(running_machine &machine, void *arg, s
if (newval != SLIDER_NOCHANGE)
vector->set_beam_intensity_weight((float)newval * 0.001f);
if (str != nullptr)
- strprintf(*str,"%1.2f", (double) vector->get_beam_intensity_weight());
+ *str = string_format(_("%1$1.2f"), vector->get_beam_intensity_weight());
return floor(vector->get_beam_intensity_weight() * 1000.0f + 0.5f);
}
@@ -2530,18 +2517,15 @@ static INT32 slider_beam_intensity_weight(running_machine &machine, void *arg, s
// description for a given screen
//-------------------------------------------------
-static char *slider_get_screen_desc(screen_device &screen)
+static std::string slider_get_screen_desc(screen_device &screen)
{
screen_device_iterator iter(screen.machine().root_device());
int scrcount = iter.count();
- static char descbuf[256];
if (scrcount > 1)
- sprintf(descbuf, _("Screen '%s'"), screen.tag());
+ return string_format(_("Screen '%1$s'"), screen.tag());
else
- strcpy(descbuf, _("Screen"));
-
- return descbuf;
+ return _("Screen");
}
//-------------------------------------------------
@@ -2556,8 +2540,8 @@ static INT32 slider_crossscale(running_machine &machine, void *arg, std::string
if (newval != SLIDER_NOCHANGE)
field->set_crosshair_scale(float(newval) * 0.001);
- if (str != nullptr)
- strprintf(*str,"%s %s %1.3f", _("Crosshair Scale"), (field->crosshair_axis() == CROSSHAIR_AXIS_X) ? "X" : "Y", float(newval) * 0.001f);
+ if (str)
+ *str = string_format((field->crosshair_axis() == CROSSHAIR_AXIS_X) ? _("Crosshair Scale X %1$1.3f") : _("Crosshair Scale Y %1$1.3f"), float(newval) * 0.001f);
return floor(field->crosshair_scale() * 1000.0f + 0.5f);
}
#endif
@@ -2575,8 +2559,8 @@ static INT32 slider_crossoffset(running_machine &machine, void *arg, std::string
if (newval != SLIDER_NOCHANGE)
field->set_crosshair_offset(float(newval) * 0.001f);
- if (str != nullptr)
- strprintf(*str,"%s %s %1.3f", _("Crosshair Offset"), (field->crosshair_axis() == CROSSHAIR_AXIS_X) ? "X" : "Y", float(newval) * 0.001f);
+ if (str)
+ *str = string_format((field->crosshair_axis() == CROSSHAIR_AXIS_X) ? _("Crosshair Offset X %1$1.3f") : _("Crosshair Offset Y %1$1.3f"), float(newval) * 0.001f);
return field->crosshair_offset();
}
#endif
@@ -2702,8 +2686,8 @@ int ui_manager::wrap_text(render_container *container, const char *origs, float
if (curwidth > maxwidth)
maxwidth = curwidth;
- xstart.push_back(linestart - origs);
- xend.push_back(s - origs);
+ xstart.push_back(linestart - origs);
+ xend.push_back(s - origs);
// loop from the line start and add the characters
while (linestart < s)
diff --git a/src/emu/ui/ui.h b/src/emu/ui/ui.h
index ffd2fddc371..1e7751e8118 100644
--- a/src/emu/ui/ui.h
+++ b/src/emu/ui/ui.h
@@ -103,9 +103,9 @@ struct slider_state
INT32 defval; /* default value */
INT32 maxval; /* maximum value */
INT32 incval; /* increment value */
- bool hidden; /* hidden or not */
- INT32 id; /* unique identifier */
- char description[1]; /* textual description */
+ bool hidden; /* hidden or not */
+ INT32 id; /* unique identifier */
+ char description[1]; /* textual description */
};
@@ -114,111 +114,119 @@ struct slider_state
class ui_manager
{
public:
- // construction/destruction
- ui_manager(running_machine &machine);
+ // construction/destruction
+ ui_manager(running_machine &machine);
void init();
- // getters
- running_machine &machine() const { return m_machine; }
- bool single_step() const { return m_single_step; }
+ // getters
+ running_machine &machine() const { return m_machine; }
+ bool single_step() const { return m_single_step; }
ui_options &options() { return m_ui_options; }
- // setters
- void set_single_step(bool single_step) { m_single_step = single_step; }
-
- // methods
- void initialize(running_machine &machine);
- UINT32 set_handler(ui_callback callback, UINT32 param);
- void display_startup_screens(bool first_time, bool show_disclaimer);
- void set_startup_text(const char *text, bool force);
- void update_and_render(render_container *container);
- render_font *get_font();
- float get_line_height();
- float get_char_width(unicode_char ch);
- float get_string_width(const char *s);
- void draw_outlined_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t backcolor);
- void draw_outlined_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t fgcolor, rgb_t bgcolor);
- void draw_text(render_container *container, const char *buf, float x, float y);
+ // setters
+ void set_single_step(bool single_step) { m_single_step = single_step; }
+
+ // methods
+ void initialize(running_machine &machine);
+ UINT32 set_handler(ui_callback callback, UINT32 param);
+ void display_startup_screens(bool first_time, bool show_disclaimer);
+ void set_startup_text(const char *text, bool force);
+ void update_and_render(render_container *container);
+ render_font *get_font();
+ float get_line_height();
+ float get_char_width(unicode_char ch);
+ float get_string_width(const char *s);
+ void draw_outlined_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t backcolor);
+ void draw_outlined_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t fgcolor, rgb_t bgcolor);
+ void draw_text(render_container *container, const char *buf, float x, float y);
void draw_text_full(render_container *container, const char *origs, float x, float y, float origwrapwidth, int justify, int wrap, int draw, rgb_t fgcolor, rgb_t bgcolor, float *totalwidth = nullptr, float *totalheight = nullptr, float text_size = 1.0f);
void draw_text_box(render_container *container, const char *text, int justify, float xpos, float ypos, rgb_t backcolor);
- void draw_message_window(render_container *container, const char *text);
-
- void CLIB_DECL popup_time(int seconds, const char *text, ...) ATTR_PRINTF(3,4);
- void show_fps_temp(double seconds);
- void set_show_fps(bool show);
- bool show_fps() const;
- bool show_fps_counter();
- void set_show_profiler(bool show);
- bool show_profiler() const;
- void show_menu();
- void show_mouse(bool status);
- bool is_menu_active();
- bool can_paste();
- void paste();
- bool use_natural_keyboard() const;
- void set_use_natural_keyboard(bool use_natural_keyboard);
- void image_handler_ingame();
- void increase_frameskip();
- void decrease_frameskip();
- void request_quit();
-
- // print the game info string into a buffer
- std::string &game_info_astring(std::string &str);
-
- // slider controls
- const slider_state *get_slider_list(void);
-
- // other
- void process_natural_keyboard();
-
- void set_show_timecode_counter(bool value) { m_show_timecode_counter = value; m_show_timecode_total = true; }
- bool show_timecode_counter();
- bool show_timecode_total();
+ void draw_message_window(render_container *container, const char *text);
+
+ template <typename Format, typename... Params> void popup_time(int seconds, Format &&fmt, Params &&... args);
+ void show_fps_temp(double seconds);
+ void set_show_fps(bool show);
+ bool show_fps() const;
+ bool show_fps_counter();
+ void set_show_profiler(bool show);
+ bool show_profiler() const;
+ void show_menu();
+ void show_mouse(bool status);
+ bool is_menu_active();
+ bool can_paste();
+ void paste();
+ bool use_natural_keyboard() const;
+ void set_use_natural_keyboard(bool use_natural_keyboard);
+ void image_handler_ingame();
+ void increase_frameskip();
+ void decrease_frameskip();
+ void request_quit();
+
+ // print the game info string into a buffer
+ std::string &game_info_astring(std::string &str);
+
+ // slider controls
+ const slider_state *get_slider_list(void);
+
+ // other
+ void process_natural_keyboard();
+
+ void set_show_timecode_counter(bool value) { m_show_timecode_counter = value; m_show_timecode_total = true; }
+ bool show_timecode_counter();
+ bool show_timecode_total();
// word wrap
- int wrap_text(render_container *container, const char *origs, float x, float y, float origwrapwidth, std::vector<int> &xstart, std::vector<int> &xend, float text_size = 1.0f);
+ int wrap_text(render_container *container, const char *origs, float x, float y, float origwrapwidth, std::vector<int> &xstart, std::vector<int> &xend, float text_size = 1.0f);
- // draw an outlined box with given line color and filled with a texture
- void draw_textured_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t backcolor, rgb_t linecolor, render_texture *texture = nullptr, UINT32 flags = PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
+ // draw an outlined box with given line color and filled with a texture
+ void draw_textured_box(render_container *container, float x0, float y0, float x1, float y1, rgb_t backcolor, rgb_t linecolor, render_texture *texture = nullptr, UINT32 flags = PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
- // return text string width with given text size
- float get_string_width_ex(const char *s, float text_size);
+ // return text string width with given text size
+ float get_string_width_ex(const char *s, float text_size);
private:
- // instance variables
- running_machine & m_machine;
- render_font * m_font;
- ui_callback m_handler_callback;
- UINT32 m_handler_param;
- bool m_single_step;
- bool m_showfps;
- osd_ticks_t m_showfps_end;
- bool m_show_profiler;
- osd_ticks_t m_popup_text_end;
- bool m_use_natural_keyboard;
+ // instance variables
+ running_machine & m_machine;
+ render_font * m_font;
+ ui_callback m_handler_callback;
+ UINT32 m_handler_param;
+ bool m_single_step;
+ bool m_showfps;
+ osd_ticks_t m_showfps_end;
+ bool m_show_profiler;
+ osd_ticks_t m_popup_text_end;
+ bool m_use_natural_keyboard;
std::unique_ptr<UINT8[]> m_non_char_keys_down;
- render_texture * m_mouse_arrow_texture;
- bool m_mouse_show;
- bool m_show_timecode_counter;
+ render_texture * m_mouse_arrow_texture;
+ bool m_mouse_show;
+ bool m_show_timecode_counter;
bool m_show_timecode_total;
bool m_load_save_hold;
ui_options m_ui_options;
- // text generators
- std::string &disclaimer_string(std::string &buffer);
- std::string &warnings_string(std::string &buffer);
+ // static variables
+ static std::string messagebox_text;
+ static std::string messagebox_poptext;
+ static rgb_t messagebox_backcolor;
- // UI handlers
- static UINT32 handler_messagebox(running_machine &machine, render_container *container, UINT32 state);
- static UINT32 handler_messagebox_ok(running_machine &machine, render_container *container, UINT32 state);
- static UINT32 handler_messagebox_anykey(running_machine &machine, render_container *container, UINT32 state);
- static UINT32 handler_ingame(running_machine &machine, render_container *container, UINT32 state);
- static UINT32 handler_load_save(running_machine &machine, render_container *container, UINT32 state);
- static UINT32 handler_confirm_quit(running_machine &machine, render_container *container, UINT32 state);
+ static slider_state *slider_list;
+ static slider_state *slider_current;
- // private methods
- void exit();
+ // text generators
+ std::string &disclaimer_string(std::string &buffer);
+ std::string &warnings_string(std::string &buffer);
+
+ // UI handlers
+ static UINT32 handler_messagebox(running_machine &machine, render_container *container, UINT32 state);
+ static UINT32 handler_messagebox_ok(running_machine &machine, render_container *container, UINT32 state);
+ static UINT32 handler_messagebox_anykey(running_machine &machine, render_container *container, UINT32 state);
+ static UINT32 handler_ingame(running_machine &machine, render_container *container, UINT32 state);
+ static UINT32 handler_load_save(running_machine &machine, render_container *container, UINT32 state);
+ static UINT32 handler_confirm_quit(running_machine &machine, render_container *container, UINT32 state);
+
+ // private methods
+ void exit();
};
@@ -227,4 +235,26 @@ private:
***************************************************************************/
rgb_t decode_ui_color(int id, running_machine *machine = nullptr);
int get_font_rows(running_machine *machine = nullptr);
+
+
+/***************************************************************************
+ MEMBER TEMPLATES
+***************************************************************************/
+
+//-------------------------------------------------
+// popup_time - popup a message for a specific
+// amount of time
+//-------------------------------------------------
+
+template <typename Format, typename... Params>
+inline void ui_manager::popup_time(int seconds, Format &&fmt, Params &&... args)
+{
+ // extract the text
+ messagebox_poptext = string_format(std::forward<Format>(fmt), std::forward<Params>(args)...);
+ messagebox_backcolor = UI_BACKGROUND_COLOR;
+
+ // set a timer
+ m_popup_text_end = osd_ticks() + osd_ticks_per_second() * seconds;
+}
+
#endif /* __USRINTRF_H__ */
diff --git a/src/emu/ui/utils.cpp b/src/emu/ui/utils.cpp
index 7ac94d5e050..1e998d04c9d 100644
--- a/src/emu/ui/utils.cpp
+++ b/src/emu/ui/utils.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Dankan1890
+// copyright-holders:Maurizio Petrarota
/***************************************************************************
ui/utils.cpp
@@ -25,14 +25,14 @@ std::vector<std::string> c_mnfct::ui;
// Main filters
UINT16 main_filters::actual = 0;
-const char *main_filters::text[] = { "All", "Available", "Unavailable", "Working", "Not Working", "Mechanical", "Not Mechanical",
- "Category", "Favorites", "BIOS", "Originals", "Clones", "Manufacturers", "Years", "Support Save",
+const char *main_filters::text[] = { "All", "Available", "Unavailable", "Working", "Not Working", "Mechanical", "Not Mechanical",
+ "Category", "Favorites", "BIOS", "Parents", "Clones", "Manufacturers", "Years", "Support Save",
"Not Support Save", "CHD", "No CHD", "Vertical", "Horizontal", "Custom" };
size_t main_filters::length = ARRAY_LENGTH(main_filters::text);
// Software filters
UINT16 sw_filters::actual = 0;
-const char *sw_filters::text[] = { "All", "Available", "Unavailable", "Originals", "Clones", "Years", "Publishers", "Supported",
+const char *sw_filters::text[] = { "All", "Available", "Unavailable", "Parents", "Clones", "Years", "Publishers", "Supported",
"Partial Supported", "Unsupported", "Region", "Device Type", "Software List", "Custom" };
size_t sw_filters::length = ARRAY_LENGTH(sw_filters::text);
diff --git a/src/emu/ui/utils.h b/src/emu/ui/utils.h
index 3c8da8ab16e..a2f24a20479 100644
--- a/src/emu/ui/utils.h
+++ b/src/emu/ui/utils.h
@@ -130,8 +130,6 @@ enum
HOVER_B_FAV,
HOVER_B_EXPORT,
HOVER_B_DATS,
- HOVER_B_FOLDERS,
- HOVER_B_SETTINGS,
HOVER_RPANEL_ARROW,
HOVER_LPANEL_ARROW,
HOVER_FILTER_FIRST,
diff --git a/src/emu/ui/viewgfx.cpp b/src/emu/ui/viewgfx.cpp
index ff34e732f1e..fd5ac9bc2ce 100644
--- a/src/emu/ui/viewgfx.cpp
+++ b/src/emu/ui/viewgfx.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Nicola Salmoria, Aaron Giles, Nathan Woods
/*********************************************************************
- ui/viewgfx.c
+ ui/viewgfx.cpp
Internal graphics viewer.
diff --git a/src/emu/uiinput.cpp b/src/emu/uiinput.cpp
index c55038d3065..1b65388bc14 100644
--- a/src/emu/uiinput.cpp
+++ b/src/emu/uiinput.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Nicola Salmoria
/***************************************************************************
- uiinput.c
+ uiinput.cpp
Internal MAME user interface input state.
***************************************************************************/
@@ -326,8 +326,8 @@ void ui_input_manager::push_char_event(render_target* target, unicode_char ch)
}
/*-------------------------------------------------
- push_mouse_wheel_event - pushes a mouse
- wheel event to the specified render_target
+ push_mouse_wheel_event - pushes a mouse
+ wheel event to the specified render_target
-------------------------------------------------*/
void ui_input_manager::push_mouse_wheel_event(render_target *target, INT32 x, INT32 y, short delta, int ucNumLines)
@@ -350,4 +350,4 @@ void ui_input_manager::mark_all_as_pressed()
{
for (int code = IPT_UI_FIRST + 1; code < IPT_UI_LAST; code++)
m_next_repeat[code] = osd_ticks();
-} \ No newline at end of file
+}
diff --git a/src/emu/uismall.png b/src/emu/uismall.png
deleted file mode 100644
index 5d391640f62..00000000000
--- a/src/emu/uismall.png
+++ /dev/null
Binary files differ
diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp
index 4acc8d991ad..e4f1ef738e0 100644
--- a/src/emu/validity.cpp
+++ b/src/emu/validity.cpp
@@ -1,8 +1,8 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles,Paul Priest
+// copyright-holders:Aaron Giles, Paul Priest
/***************************************************************************
- validity.c
+ validity.cpp
Validity checks on internal data structures.
@@ -497,23 +497,6 @@ void validity_checker::validate_inlines()
testi32a = (testi32a | 0xffff0000) & ~0x400000;
if (count_leading_ones(testi32a) != 9)
osd_printf_error("Error testing count_leading_ones\n");
-
- testi32b = testi32a;
- if (compare_exchange32(&testi32a, testi32b, 1000) != testi32b || testi32a != 1000)
- osd_printf_error("Error testing compare_exchange32\n");
-#ifdef PTR64
- testi64b = testi64a;
- if (compare_exchange64(&testi64a, testi64b, 1000) != testi64b || testi64a != 1000)
- osd_printf_error("Error testing compare_exchange64\n");
-#endif
- if (atomic_exchange32(&testi32a, testi32b) != 1000)
- osd_printf_error("Error testing atomic_exchange32\n");
- if (atomic_add32(&testi32a, 45) != testi32b + 45)
- osd_printf_error("Error testing atomic_add32\n");
- if (atomic_increment32(&testi32a) != testi32b + 46)
- osd_printf_error("Error testing atomic_increment32\n");
- if (atomic_decrement32(&testi32a) != testi32b + 45)
- osd_printf_error("Error testing atomic_decrement32\n");
}
diff --git a/src/emu/video.cpp b/src/emu/video.cpp
index 7dc9470d54a..229553a92b8 100644
--- a/src/emu/video.cpp
+++ b/src/emu/video.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles
/***************************************************************************
- video.c
+ video.cpp
Core MAME video routines.
@@ -267,28 +267,28 @@ void video_manager::frame_update(bool debug)
std::string video_manager::speed_text()
{
- std::string str;
+ std::ostringstream str;
// if we're paused, just display Paused
bool paused = machine().paused();
if (paused)
- str.append("paused");
+ str << "paused";
// if we're fast forwarding, just display Fast-forward
else if (m_fastforward)
- str.append("fast ");
+ str << "fast ";
// if we're auto frameskipping, display that plus the level
else if (effective_autoframeskip())
- strcatprintf(str, "auto%2d/%d", effective_frameskip(), MAX_FRAMESKIP);
+ util::stream_format(str, "auto%2d/%d", effective_frameskip(), MAX_FRAMESKIP);
// otherwise, just display the frameskip plus the level
else
- strcatprintf(str, "skip %d/%d", effective_frameskip(), MAX_FRAMESKIP);
+ util::stream_format(str, "skip %d/%d", effective_frameskip(), MAX_FRAMESKIP);
// append the speed for all cases except paused
if (!paused)
- strcatprintf(str, "%4d%%", (int)(100 * m_speed_percent + 0.5));
+ util::stream_format(str, "%4d%%", (int)(100 * m_speed_percent + 0.5));
// display the number of partial updates as well
int partials = 0;
@@ -296,9 +296,9 @@ std::string video_manager::speed_text()
for (screen_device *screen = iter.first(); screen != nullptr; screen = iter.next())
partials += screen->partial_updates();
if (partials > 1)
- strcatprintf(str, "\n%d partial updates", partials);
+ util::stream_format(str, "\n%d partial updates", partials);
- return str;
+ return str.str();
}
@@ -381,44 +381,27 @@ void video_manager::save_input_timecode()
m_timecode_write = true;
}
-std::string &video_manager::timecode_text(std::string &str) {
- str.clear();
- str += " ";
-
- if (!m_timecode_text.empty()) {
- str += m_timecode_text + " ";
- }
-
+std::string &video_manager::timecode_text(std::string &str)
+{
attotime elapsed_time = machine().time() - m_timecode_start;
- std::string elapsed_time_str;
- strcatprintf(elapsed_time_str, "%02d:%02d",
- (elapsed_time.m_seconds / 60) % 60,
- elapsed_time.m_seconds % 60);
- str += elapsed_time_str;
-
- bool paused = machine().paused();
- if (paused) {
- str.append(" [paused]");
- }
-
- str += " ";
-
+ str = string_format(" %s%s%02d:%02d %s",
+ m_timecode_text,
+ m_timecode_text.empty() ? "" : " ",
+ (elapsed_time.m_seconds / 60) % 60,
+ elapsed_time.m_seconds % 60,
+ machine().paused() ? "[paused] " : "");
return str;
}
-std::string &video_manager::timecode_total_text(std::string &str) {
- str.clear();
- str += " TOTAL ";
-
+std::string &video_manager::timecode_total_text(std::string &str)
+{
attotime elapsed_time = m_timecode_total;
if (machine().ui().show_timecode_counter()) {
elapsed_time += machine().time() - m_timecode_start;
}
- std::string elapsed_time_str;
- strcatprintf(elapsed_time_str, "%02d:%02d",
- (elapsed_time.m_seconds / 60) % 60,
- elapsed_time.m_seconds % 60);
- str += elapsed_time_str + " ";
+ str = string_format("TOTAL %02d:%02d ",
+ (elapsed_time.m_seconds / 60) % 60,
+ elapsed_time.m_seconds % 60);
return str;
}
@@ -1269,14 +1252,12 @@ file_error video_manager::open_next(emu_file &file, const char *extension)
else
{
// try until we succeed
- std::string seqtext;
file.set_openflags(OPEN_FLAG_READ);
for (int seq = 0; ; seq++)
{
// build up the filename
fname.assign(snapstr);
- strprintf(seqtext, "%04d", seq);
- strreplace(fname, "%i", seqtext.c_str());
+ strreplace(fname, "%i", string_format("%04d", seq).c_str());
// try to open the file; stop when we fail
file_error filerr = file.open(fname.c_str());
diff --git a/src/emu/video.h b/src/emu/video.h
index 7a1808ad095..67939d47eaa 100644
--- a/src/emu/video.h
+++ b/src/emu/video.h
@@ -94,7 +94,7 @@ public:
void begin_recording(const char *name, movie_format format);
void end_recording(movie_format format);
void add_sound_to_recording(const INT16 *sound, int numsamples);
-
+
void set_timecode_enabled(bool value) { m_timecode_enabled = value; }
bool get_timecode_enabled() { return m_timecode_enabled; }
bool get_timecode_write() { return m_timecode_write; }
@@ -104,7 +104,7 @@ public:
void add_to_total_time(attotime time) { m_timecode_total += time; }
std::string &timecode_text(std::string &str);
std::string &timecode_total_text(std::string &str);
-
+
private:
// internal helpers
@@ -196,13 +196,13 @@ private:
static const attoseconds_t ATTOSECONDS_PER_SPEED_UPDATE = ATTOSECONDS_PER_SECOND / 4;
static const int PAUSED_REFRESH_RATE = 30;
-
- bool m_timecode_enabled; // inp.timecode record enabled
- bool m_timecode_write; // Show/hide timer at right (partial time)
- std::string m_timecode_text; // Message for that video part (intro, gameplay, extra)
- attotime m_timecode_start; // Starting timer for that video part (intro, gameplay, extra)
- attotime m_timecode_total; // Show/hide timer at left (total elapsed on resulting video preview)
-
+
+ bool m_timecode_enabled; // inp.timecode record enabled
+ bool m_timecode_write; // Show/hide timer at right (partial time)
+ std::string m_timecode_text; // Message for that video part (intro, gameplay, extra)
+ attotime m_timecode_start; // Starting timer for that video part (intro, gameplay, extra)
+ attotime m_timecode_total; // Show/hide timer at left (total elapsed on resulting video preview)
+
};
#endif /* __VIDEO_H__ */
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index a47ca7c6fc5..5289a3171e0 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -1185,38 +1185,38 @@ namespace netlist
ATTR_COLD net_t *find_net(const pstring &name);
- template<class _C>
- ATTR_COLD plist_t<_C *> get_device_list()
+ template<class _device_class>
+ ATTR_COLD plist_t<_device_class *> get_device_list()
{
- plist_t<_C *> tmp;
+ plist_t<_device_class *> tmp;
for (std::size_t i = 0; i < m_devices.size(); i++)
{
- _C *dev = dynamic_cast<_C *>(m_devices[i]);
+ _device_class *dev = dynamic_cast<_device_class *>(m_devices[i]);
if (dev != NULL)
tmp.add(dev);
}
return tmp;
}
- template<class _C>
- ATTR_COLD _C *get_first_device()
+ template<class _device_class>
+ ATTR_COLD _device_class *get_first_device()
{
for (std::size_t i = 0; i < m_devices.size(); i++)
{
- _C *dev = dynamic_cast<_C *>(m_devices[i]);
+ _device_class *dev = dynamic_cast<_device_class *>(m_devices[i]);
if (dev != NULL)
return dev;
}
return NULL;
}
- template<class _C>
- ATTR_COLD _C *get_single_device(const char *classname)
+ template<class _device_class>
+ ATTR_COLD _device_class *get_single_device(const char *classname)
{
- _C *ret = NULL;
+ _device_class *ret = NULL;
for (std::size_t i = 0; i < m_devices.size(); i++)
{
- _C *dev = dynamic_cast<_C *>(m_devices[i]);
+ _device_class *dev = dynamic_cast<_device_class *>(m_devices[i]);
if (dev != NULL)
{
if (ret != NULL)
diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h
index cc007960c6e..971912a0d2d 100644
--- a/src/lib/netlist/nl_factory.h
+++ b/src/lib/netlist/nl_factory.h
@@ -45,7 +45,7 @@ namespace netlist
pstring m_def_param; /* default parameter */
};
- template <class C>
+ template <class _device_class>
class factory_t : public base_factory_t
{
P_PREVENT_COPYING(factory_t)
@@ -56,7 +56,7 @@ namespace netlist
ATTR_COLD device_t *Create() override
{
- device_t *r = palloc(C);
+ device_t *r = palloc(_device_class);
//r->init(setup, name);
return r;
}
@@ -68,11 +68,11 @@ namespace netlist
factory_list_t(setup_t &m_setup);
~factory_list_t();
- template<class _C>
+ template<class _device_class>
ATTR_COLD void register_device(const pstring &name, const pstring &classname,
const pstring &def_param)
{
- if (!add(name, palloc(factory_t< _C >(name, classname, def_param))))
+ if (!add(name, palloc(factory_t< _device_class >(name, classname, def_param))))
error("factory already contains " + name);
}
diff --git a/src/lib/netlist/plib/pparser.cpp b/src/lib/netlist/plib/pparser.cpp
index f61a1677ced..4b5d7995658 100644
--- a/src/lib/netlist/plib/pparser.cpp
+++ b/src/lib/netlist/plib/pparser.cpp
@@ -21,22 +21,22 @@ pstring ptokenizer::currentline_str()
void ptokenizer::skipeol()
{
- pstring::code_t c = getc();
+ pstring::code_t c = _getc();
while (c)
{
if (c == 10)
{
- c = getc();
+ c = _getc();
if (c != 13)
- ungetc();
+ _ungetc();
return;
}
- c = getc();
+ c = _getc();
}
}
-pstring::code_t ptokenizer::getc()
+pstring::code_t ptokenizer::_getc()
{
if (m_px >= m_cur_line.len())
{
@@ -51,7 +51,7 @@ pstring::code_t ptokenizer::getc()
return m_cur_line.code_at(m_px++);
}
-void ptokenizer::ungetc()
+void ptokenizer::_ungetc()
{
m_px--;
}
@@ -159,10 +159,10 @@ ptokenizer::token_t ptokenizer::get_token()
ptokenizer::token_t ptokenizer::get_token_internal()
{
/* skip ws */
- pstring::code_t c = getc();
+ pstring::code_t c = _getc();
while (m_whitespace.find(c)>=0)
{
- c = getc();
+ c = _getc();
if (eof())
{
return token_t(ENDOFFILE);
@@ -182,9 +182,9 @@ ptokenizer::token_t ptokenizer::get_token_internal()
else if (m_number_chars.find(c)<0)
break;
tokstr += c;
- c = getc();
+ c = _getc();
}
- ungetc();
+ _ungetc();
return token_t(ret, tokstr);
}
else if (m_identifier_chars.find(c)>=0)
@@ -193,9 +193,9 @@ ptokenizer::token_t ptokenizer::get_token_internal()
pstring tokstr = "";
while (m_identifier_chars.find(c)>=0) {
tokstr += c;
- c = getc();
+ c = _getc();
}
- ungetc();
+ _ungetc();
token_id_t id = token_id_t(m_tokens.indexof(tokstr));
if (id.id() >= 0)
return token_t(id, tokstr);
@@ -207,11 +207,11 @@ ptokenizer::token_t ptokenizer::get_token_internal()
else if (c == m_string)
{
pstring tokstr = "";
- c = getc();
+ c = _getc();
while (c != m_string)
{
tokstr += c;
- c = getc();
+ c = _getc();
}
return token_t(STRING, tokstr);
}
@@ -228,9 +228,9 @@ ptokenizer::token_t ptokenizer::get_token_internal()
if (id.id() >= 0)
return token_t(id, tokstr);
}
- c = getc();
+ c = _getc();
}
- ungetc();
+ _ungetc();
token_id_t id = token_id_t(m_tokens.indexof(tokstr));
if (id.id() >= 0)
return token_t(id, tokstr);
diff --git a/src/lib/netlist/plib/pparser.h b/src/lib/netlist/plib/pparser.h
index 34dfdbfcff3..08294677328 100644
--- a/src/lib/netlist/plib/pparser.h
+++ b/src/lib/netlist/plib/pparser.h
@@ -120,8 +120,8 @@ protected:
private:
void skipeol();
- pstring::code_t getc();
- void ungetc();
+ pstring::code_t _getc();
+ void _ungetc();
bool eof() { return m_strm.eof(); }
diff --git a/src/lib/util/cdrom.cpp b/src/lib/util/cdrom.cpp
index 2235119f776..10a1828d5e4 100644
--- a/src/lib/util/cdrom.cpp
+++ b/src/lib/util/cdrom.cpp
@@ -1288,10 +1288,9 @@ chd_error cdrom_parse_metadata(chd_file *chd, cdrom_toc *toc)
chd_error cdrom_write_metadata(chd_file *chd, const cdrom_toc *toc)
{
chd_error err;
- int i;
/* write the metadata */
- for (i = 0; i < toc->numtrks; i++)
+ for (int i = 0; i < toc->numtrks; i++)
{
std::string metadata;
if (!(toc->flags & CD_FLAG_GDROM))
@@ -1308,7 +1307,7 @@ chd_error cdrom_write_metadata(chd_file *chd, const cdrom_toc *toc)
strcpy(submode, cdrom_get_type_string(toc->tracks[i].pgtype));
}
- strprintf(metadata, CDROM_TRACK_METADATA2_FORMAT, i + 1, cdrom_get_type_string(toc->tracks[i].trktype),
+ metadata = string_format(CDROM_TRACK_METADATA2_FORMAT, i + 1, cdrom_get_type_string(toc->tracks[i].trktype),
cdrom_get_subtype_string(toc->tracks[i].subtype), toc->tracks[i].frames, toc->tracks[i].pregap,
submode, cdrom_get_subtype_string(toc->tracks[i].pgsub),
toc->tracks[i].postgap);
@@ -1316,7 +1315,7 @@ chd_error cdrom_write_metadata(chd_file *chd, const cdrom_toc *toc)
}
else
{
- strprintf(metadata, GDROM_TRACK_METADATA_FORMAT, i + 1, cdrom_get_type_string(toc->tracks[i].trktype),
+ metadata = string_format(GDROM_TRACK_METADATA_FORMAT, i + 1, cdrom_get_type_string(toc->tracks[i].trktype),
cdrom_get_subtype_string(toc->tracks[i].subtype), toc->tracks[i].frames, toc->tracks[i].padframes,
toc->tracks[i].pregap, cdrom_get_type_string(toc->tracks[i].pgtype),
cdrom_get_subtype_string(toc->tracks[i].pgsub), toc->tracks[i].postgap);
diff --git a/src/lib/util/chd.cpp b/src/lib/util/chd.cpp
index 38881cc8d81..3419f404c09 100644
--- a/src/lib/util/chd.cpp
+++ b/src/lib/util/chd.cpp
@@ -2875,7 +2875,7 @@ chd_error chd_file_compressor::compress_continue(double &progress, double &ratio
// queue the next read
for (curitem = startitem; curitem < enditem; curitem++)
- atomic_exchange32(&m_work_item[curitem % WORK_BUFFER_HUNKS].m_status, WS_READING);
+ m_work_item[curitem % WORK_BUFFER_HUNKS].m_status = WS_READING;
osd_work_item_queue(m_read_queue, async_read_static, this, WORK_ITEM_FLAG_AUTO_RELEASE);
m_read_queue_offset += WORK_BUFFER_HUNKS * hunk_bytes() / 2;
}
@@ -2946,7 +2946,7 @@ chd_error chd_file_compressor::compress_continue(double &progress, double &ratio
} while (0);
// reset the item and advance
- atomic_exchange32(&item.m_status, WS_READY);
+ item.m_status = WS_READY;
m_write_hunk++;
// if we hit the end, finalize
@@ -2959,7 +2959,7 @@ chd_error chd_file_compressor::compress_continue(double &progress, double &ratio
m_read_queue_offset = m_read_done_offset = 0;
m_write_hunk = 0;
for (auto & elem : m_work_item)
- atomic_exchange32(&elem.m_status, WS_READY);
+ elem.m_status = WS_READY;
}
// wait for all reads to finish and if we're compressed, write the final SHA1 and map
@@ -3027,7 +3027,7 @@ void chd_file_compressor::async_walk_parent(work_item &item)
item.m_hash[unit].m_crc16 = crc16_creator::simple(item.m_data + unit * unit_bytes(), hunk_bytes());
item.m_hash[unit].m_sha1 = sha1_creator::simple(item.m_data + unit * unit_bytes(), hunk_bytes());
}
- atomic_exchange32(&item.m_status, WS_COMPLETE);
+ item.m_status = WS_COMPLETE;
}
/**
@@ -3077,7 +3077,7 @@ void chd_file_compressor::async_compress_hunk(work_item &item, int threadid)
item.m_compression = item.m_codecs->find_best_compressor(item.m_data, item.m_compressed, item.m_complen);
// mark us complete
- atomic_exchange32(&item.m_status, WS_COMPLETE);
+ item.m_status = WS_COMPLETE;
}
/**
@@ -3146,7 +3146,7 @@ void chd_file_compressor::async_read()
UINT32 hunknum = curoffs / hunk_bytes();
work_item &item = m_work_item[hunknum % WORK_BUFFER_HUNKS];
assert(item.m_status == WS_READING);
- atomic_exchange32(&item.m_status, WS_QUEUED);
+ item.m_status = WS_QUEUED;
item.m_hunknum = hunknum;
item.m_osd = osd_work_item_queue(m_work_queue, m_walking_parent ? async_walk_parent_static : async_compress_hunk_static, &item, 0);
}
diff --git a/src/lib/util/chd.h b/src/lib/util/chd.h
index 114a29a5b5e..d9a1dd57f51 100644
--- a/src/lib/util/chd.h
+++ b/src/lib/util/chd.h
@@ -21,7 +21,7 @@
#include "corefile.h"
#include "hashing.h"
#include "chdcodec.h"
-
+#include <atomic>
/***************************************************************************
@@ -533,7 +533,7 @@ private:
chd_file_compressor *m_compressor; // pointer back to the compressor
// TODO: had to change this to be able to use atomic_* functions on this
//volatile work_status m_status; // current status of this item
- volatile INT32 m_status; // current status of this item
+ std::atomic<INT32> m_status; // current status of this item
UINT32 m_hunknum; // number of the hunk we're working on
UINT8 * m_data; // pointer to the data we are working on
UINT8 * m_compressed; // pointer to the compressed data
diff --git a/src/lib/util/corefile.cpp b/src/lib/util/corefile.cpp
index 344a2922bfe..25978afdb2c 100644
--- a/src/lib/util/corefile.cpp
+++ b/src/lib/util/corefile.cpp
@@ -898,6 +898,16 @@ file_error core_truncate(core_file *f, UINT64 offset)
}
+/*-------------------------------------------------
+ core_truncate - flush write buffer
+-------------------------------------------------*/
+
+file_error core_fflush(core_file *f)
+{
+ return osd_fflush(f->file);
+}
+
+
/***************************************************************************
FILENAME UTILITIES
diff --git a/src/lib/util/corefile.h b/src/lib/util/corefile.h
index 5266832c374..36060631f35 100644
--- a/src/lib/util/corefile.h
+++ b/src/lib/util/corefile.h
@@ -120,6 +120,9 @@ int CLIB_DECL core_fprintf(core_file *f, const char *fmt, ...) ATTR_PRINTF(2,3);
/* file truncation */
file_error core_truncate(core_file *f, UINT64 offset);
+/* flush file buffers */
+file_error core_fflush(core_file *f);
+
/* ----- filename utilities ----- */
diff --git a/src/lib/util/corestr.cpp b/src/lib/util/corestr.cpp
index ce5976869d4..7daad5cc0cb 100644
--- a/src/lib/util/corestr.cpp
+++ b/src/lib/util/corestr.cpp
@@ -126,107 +126,11 @@ char *core_strdup(const char *str)
/*-------------------------------------------------
- core_i64_hex_format - i64 format printf helper
--------------------------------------------------*/
-
-char *core_i64_hex_format(UINT64 value, UINT8 mindigits)
-{
- static char buffer[16][64];
- // TODO: this can overflow - e.g. when a lot of unmapped writes are logged
- static int index;
- char *bufbase = &buffer[index++ % 16][0];
- char *bufptr = bufbase;
- INT8 curdigit;
-
- for (curdigit = 15; curdigit >= 0; curdigit--)
- {
- int nibble = (value >> (curdigit * 4)) & 0xf;
- if (nibble != 0 || curdigit < mindigits)
- {
- mindigits = curdigit;
- *bufptr++ = "0123456789ABCDEF"[nibble];
- }
- }
- if (bufptr == bufbase)
- *bufptr++ = '0';
- *bufptr = 0;
-
- return bufbase;
-}
-
-/*-------------------------------------------------
- core_i64_oct_format - i64 format printf helper
--------------------------------------------------*/
-
-char *core_i64_oct_format(UINT64 value, UINT8 mindigits)
-{
- static char buffer[22][64];
- // TODO: this can overflow
- static int index;
- char *bufbase = &buffer[index++ % 22][0];
- char *bufptr = bufbase;
- INT8 curdigit;
-
- for (curdigit = 21; curdigit >= 0; curdigit--)
- {
- int octdigit = (value >> (curdigit * 3)) & 0x7;
- if (octdigit != 0 || curdigit < mindigits)
- {
- mindigits = curdigit;
- *bufptr++ = "01234567"[octdigit];
- }
- }
- if (bufptr == bufbase)
- *bufptr++ = '0';
- *bufptr = 0;
-
- return bufbase;
-}
-
-/*-------------------------------------------------
- core_i64_format - i64 format printf helper
--------------------------------------------------*/
-
-char *core_i64_format(UINT64 value, UINT8 mindigits, bool is_octal)
-{
- return is_octal ? core_i64_oct_format(value,mindigits) : core_i64_hex_format(value,mindigits);
-}
-
-/*-------------------------------------------------
std::string helpers
-------------------------------------------------*/
#include <algorithm>
-int strvprintf(std::string &str, const char *format, va_list args)
-{
- char tempbuf[4096];
- int result = vsprintf(tempbuf, format, args);
-
- // set the result
- str.assign(tempbuf);
- return result;
-}
-
-int strprintf(std::string &str, const char *format, ...)
-{
- va_list ap;
- va_start(ap, format);
- int retVal = strvprintf(str, format, ap);
- va_end(ap);
- return retVal;
-}
-
-std::string strformat(const char *format, ...)
-{
- std::string retVal;
- va_list ap;
- va_start(ap, format);
- strvprintf(retVal, format, ap);
- va_end(ap);
- return retVal;
-}
-
int strcatvprintf(std::string &str, const char *format, va_list args)
{
char tempbuf[4096];
@@ -237,15 +141,6 @@ int strcatvprintf(std::string &str, const char *format, va_list args)
return result;
}
-int strcatprintf(std::string &str, const char *format, ...)
-{
- va_list ap;
- va_start(ap, format);
- int retVal = strcatvprintf(str, format, ap);
- va_end(ap);
- return retVal;
-}
-
void strdelchr(std::string& str, char chr)
{
for (size_t i = 0; i < str.length(); i++)
diff --git a/src/lib/util/corestr.h b/src/lib/util/corestr.h
index 94f13c4061b..29f98d06dc6 100644
--- a/src/lib/util/corestr.h
+++ b/src/lib/util/corestr.h
@@ -14,6 +14,10 @@
#define __CORESTR_H__
#include "osdcore.h"
+#include "strformat.h"
+
+#include <string>
+
#include <string.h>
@@ -57,18 +61,7 @@ char *core_strdup(const char *str);
int core_strwildcmp(const char *sp1, const char *sp2);
-/* I64 printf helper */
-char *core_i64_format(UINT64 value, UINT8 mindigits, bool is_octal);
-char *core_i64_hex_format(UINT64 value, UINT8 mindigits);
-char *core_i64_oct_format(UINT64 value, UINT8 mindigits);
-
-#include <string>
-
-int strvprintf(std::string &str, const char *format, va_list args);
int strcatvprintf(std::string &str, const char *format, va_list args);
-int strprintf(std::string &str, const char *format, ...) ATTR_PRINTF(2, 3);
-int strcatprintf(std::string &str, const char *format, ...) ATTR_PRINTF(2, 3);
-std::string strformat(const char *format, ...) ATTR_PRINTF(1, 2);
void strdelchr(std::string& str, char chr);
void strreplacechr(std::string& str, char ch, char newch);
diff --git a/src/lib/util/hashing.cpp b/src/lib/util/hashing.cpp
index 8e85e4a42d2..240e64af9ad 100644
--- a/src/lib/util/hashing.cpp
+++ b/src/lib/util/hashing.cpp
@@ -10,6 +10,8 @@
#include "hashing.h"
#include <zlib.h>
+#include <iomanip>
+#include <sstream>
//**************************************************************************
@@ -81,10 +83,12 @@ bool sha1_t::from_string(const char *string, int length)
std::string sha1_t::as_string() const
{
- std::string buffer;
+ std::ostringstream buffer;
+ buffer.fill('0');
+ buffer << std::hex;
for (auto & elem : m_raw)
- strcatprintf(buffer, "%02x", elem);
- return buffer;
+ buffer << std::setw(2) << unsigned(elem);
+ return buffer.str();
}
@@ -124,10 +128,12 @@ bool md5_t::from_string(const char *string, int length)
std::string md5_t::as_string() const
{
- std::string buffer;
+ std::ostringstream buffer;
+ buffer.fill('0');
+ buffer << std::hex;
for (auto & elem : m_raw)
- strcatprintf(buffer, "%02x", elem);
- return buffer;
+ buffer << std::setw(2) << unsigned(elem);
+ return buffer.str();
}
@@ -168,7 +174,7 @@ bool crc32_t::from_string(const char *string, int length)
std::string crc32_t::as_string() const
{
- return strformat("%08x", m_raw);
+ return string_format("%08x", m_raw);
}
@@ -225,7 +231,7 @@ bool crc16_t::from_string(const char *string, int length)
std::string crc16_t::as_string() const
{
- return strformat("%04x", m_raw);
+ return string_format("%04x", m_raw);
}
/**
diff --git a/src/lib/util/options.cpp b/src/lib/util/options.cpp
index 830721127ac..56bad147bcb 100644
--- a/src/lib/util/options.cpp
+++ b/src/lib/util/options.cpp
@@ -355,7 +355,7 @@ bool core_options::parse_command_line(int argc, char **argv, int priority, std::
auto curentry = m_entrymap.find(optionname);
if (curentry == m_entrymap.end())
{
- strcatprintf(error_string, "Error: unknown option: %s\n", curarg);
+ error_string.append(string_format("Error: unknown option: %s\n", curarg));
retval = false;
if (!is_unadorned) arg++;
continue;
@@ -367,7 +367,7 @@ bool core_options::parse_command_line(int argc, char **argv, int priority, std::
// can only have one command
if (!m_command.empty())
{
- strcatprintf(error_string,"Error: multiple commands specified -%s and %s\n", m_command.c_str(), curarg);
+ error_string.append(string_format("Error: multiple commands specified -%s and %s\n", m_command, curarg));
return false;
}
m_command = curentry->second->name();
@@ -384,7 +384,7 @@ bool core_options::parse_command_line(int argc, char **argv, int priority, std::
newdata = argv[++arg];
else
{
- strcatprintf(error_string, "Error: option %s expected a parameter\n", curarg);
+ error_string.append(string_format("Error: option %s expected a parameter\n", curarg));
return false;
}
@@ -425,7 +425,7 @@ bool core_options::parse_ini_file(core_file &inifile, int priority, int ignore_p
// if we hit the end early, print a warning and continue
if (*temp == 0)
{
- strcatprintf(error_string,"Warning: invalid line in INI: %s", buffer);
+ error_string.append(string_format("Warning: invalid line in INI: %s", buffer));
continue;
}
@@ -449,7 +449,7 @@ bool core_options::parse_ini_file(core_file &inifile, int priority, int ignore_p
if (curentry == m_entrymap.end())
{
if (priority >= ignore_priority)
- strcatprintf(error_string, "Warning: unknown option in INI: %s\n", optionname);
+ error_string.append(string_format("Warning: unknown option in INI: %s\n", optionname));
continue;
}
@@ -482,7 +482,7 @@ void core_options::revert(int priority)
std::string core_options::output_ini(const core_options *diff) const
{
// INI files are complete, so always start with a blank buffer
- std::string buffer;
+ std::ostringstream buffer;
int num_valid_headers = 0;
int unadorned_index = 0;
@@ -518,8 +518,8 @@ std::string core_options::output_ini(const core_options *diff) const
if (last_header != nullptr)
{
if (num_valid_headers++)
- strcatprintf(buffer,"\n");
- strcatprintf(buffer, "#\n# %s\n#\n", last_header);
+ buffer << '\n';
+ util::stream_format(buffer, "#\n# %s\n#\n", last_header);
last_header = nullptr;
}
@@ -527,15 +527,15 @@ std::string core_options::output_ini(const core_options *diff) const
if (!is_unadorned)
{
if (strchr(value, ' ') != nullptr)
- strcatprintf(buffer,"%-25s \"%s\"\n", name, value);
+ util::stream_format(buffer, "%-25s \"%s\"\n", name, value);
else
- strcatprintf(buffer,"%-25s %s\n", name, value);
+ util::stream_format(buffer, "%-25s %s\n", name, value);
}
}
}
}
}
- return buffer;
+ return buffer.str();
}
@@ -546,20 +546,20 @@ std::string core_options::output_ini(const core_options *diff) const
std::string core_options::output_help() const
{
// start empty
- std::string buffer;
+ std::ostringstream buffer;
// loop over all items
for (entry *curentry = m_entrylist.first(); curentry != nullptr; curentry = curentry->next())
{
// header: just print
if (curentry->is_header())
- strcatprintf(buffer,"\n#\n# %s\n#\n", curentry->description());
+ util::stream_format(buffer, "\n#\n# %s\n#\n", curentry->description());
// otherwise, output entries for all non-deprecated items
else if (curentry->description() != nullptr)
- strcatprintf(buffer,"-%-20s%s\n", curentry->name(), curentry->description());
+ util::stream_format(buffer, "-%-20s%s\n", curentry->name(), curentry->description());
}
- return buffer;
+ return buffer.str();
}
@@ -635,7 +635,7 @@ bool core_options::set_value(const char *name, const char *value, int priority,
auto curentry = m_entrymap.find(name);
if (curentry == m_entrymap.end())
{
- strcatprintf(error_string, "Attempted to set unknown option %s\n", name);
+ error_string.append(string_format("Attempted to set unknown option %s\n", name));
return false;
}
@@ -645,14 +645,12 @@ bool core_options::set_value(const char *name, const char *value, int priority,
bool core_options::set_value(const char *name, int value, int priority, std::string &error_string)
{
- std::string tempstr = strformat("%d", value);
- return set_value(name, tempstr.c_str(), priority, error_string);
+ return set_value(name, string_format("%d", value).c_str(), priority, error_string);
}
bool core_options::set_value(const char *name, float value, int priority, std::string &error_string)
{
- std::string tempstr = strformat("%f", (double)value);
- return set_value(name, tempstr.c_str(), priority, error_string);
+ return set_value(name, string_format("%f", value).c_str(), priority, error_string);
}
@@ -785,53 +783,53 @@ bool core_options::validate_and_set_data(core_options::entry &curentry, const ch
int ival;
switch (curentry.type())
{
- // booleans must be 0 or 1
- case OPTION_BOOLEAN:
- if (sscanf(data.c_str(), "%d", &ival) != 1 || ival < 0 || ival > 1)
- {
- strcatprintf(error_string, "Illegal boolean value for %s: \"%s\"; reverting to %s\n", curentry.name(), data.c_str(), curentry.value());
- return false;
- }
- break;
+ // booleans must be 0 or 1
+ case OPTION_BOOLEAN:
+ if (sscanf(data.c_str(), "%d", &ival) != 1 || ival < 0 || ival > 1)
+ {
+ error_string.append(string_format("Illegal boolean value for %s: \"%s\"; reverting to %s\n", curentry.name(), data.c_str(), curentry.value()));
+ return false;
+ }
+ break;
- // integers must be integral
- case OPTION_INTEGER:
- if (sscanf(data.c_str(), "%d", &ival) != 1)
- {
- strcatprintf(error_string, "Illegal integer value for %s: \"%s\"; reverting to %s\n", curentry.name(), data.c_str(), curentry.value());
- return false;
- }
- if (curentry.has_range() && (ival < atoi(curentry.minimum()) || ival > atoi(curentry.maximum())))
- {
- strcatprintf(error_string, "Out-of-range integer value for %s: \"%s\" (must be between %s and %s); reverting to %s\n", curentry.name(), data.c_str(), curentry.minimum(), curentry.maximum(), curentry.value());
- return false;
- }
- break;
+ // integers must be integral
+ case OPTION_INTEGER:
+ if (sscanf(data.c_str(), "%d", &ival) != 1)
+ {
+ error_string.append(string_format("Illegal integer value for %s: \"%s\"; reverting to %s\n", curentry.name(), data.c_str(), curentry.value()));
+ return false;
+ }
+ if (curentry.has_range() && (ival < atoi(curentry.minimum()) || ival > atoi(curentry.maximum())))
+ {
+ error_string.append(string_format("Out-of-range integer value for %s: \"%s\" (must be between %s and %s); reverting to %s\n", curentry.name(), data.c_str(), curentry.minimum(), curentry.maximum(), curentry.value()));
+ return false;
+ }
+ break;
- // floating-point values must be numeric
- case OPTION_FLOAT:
- if (sscanf(data.c_str(), "%f", &fval) != 1)
- {
- strcatprintf(error_string, "Illegal float value for %s: \"%s\"; reverting to %s\n", curentry.name(), data.c_str(), curentry.value());
- return false;
- }
- if (curentry.has_range() && ((double) fval < atof(curentry.minimum()) || (double) fval > atof(curentry.maximum())))
- {
- strcatprintf(error_string, "Out-of-range float value for %s: \"%s\" (must be between %s and %s); reverting to %s\n", curentry.name(), data.c_str(), curentry.minimum(), curentry.maximum(), curentry.value());
- return false;
- }
- break;
+ // floating-point values must be numeric
+ case OPTION_FLOAT:
+ if (sscanf(data.c_str(), "%f", &fval) != 1)
+ {
+ error_string.append(string_format("Illegal float value for %s: \"%s\"; reverting to %s\n", curentry.name(), data.c_str(), curentry.value()));
+ return false;
+ }
+ if (curentry.has_range() && ((double) fval < atof(curentry.minimum()) || (double) fval > atof(curentry.maximum())))
+ {
+ error_string.append(string_format("Out-of-range float value for %s: \"%s\" (must be between %s and %s); reverting to %s\n", curentry.name(), data.c_str(), curentry.minimum(), curentry.maximum(), curentry.value()));
+ return false;
+ }
+ break;
- // strings can be anything
- case OPTION_STRING:
- break;
+ // strings can be anything
+ case OPTION_STRING:
+ break;
- // anything else is invalid
- case OPTION_INVALID:
- case OPTION_HEADER:
- default:
- strcatprintf(error_string, "Attempted to set invalid option %s\n", curentry.name());
- return false;
+ // anything else is invalid
+ case OPTION_INVALID:
+ case OPTION_HEADER:
+ default:
+ error_string.append(string_format("Attempted to set invalid option %s\n", curentry.name()));
+ return false;
}
// set the data
diff --git a/src/lib/util/options.h b/src/lib/util/options.h
index 5edf64a9fcd..cf58bc67222 100644
--- a/src/lib/util/options.h
+++ b/src/lib/util/options.h
@@ -112,7 +112,7 @@ public:
std::string m_defdata; // default data for this item
std::string m_minimum; // minimum value
std::string m_maximum; // maximum value
- bool m_changed; // changed flag
+ bool m_changed; // changed flag
};
// construction/destruction
diff --git a/src/lib/util/strformat.h b/src/lib/util/strformat.h
new file mode 100644
index 00000000000..ac7301dc6bd
--- /dev/null
+++ b/src/lib/util/strformat.h
@@ -0,0 +1,1775 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+/***************************************************************************
+
+ strformat.h
+
+ type-safe printf substitutes
+
+ This header provides type-safe printf substitutes that output to
+ std::ostream- or std::string-like objects. Most format strings
+ supported by C99, SUS, glibc and MSVCRT are accepted. Not all
+ features are implemented, and semantics differ in some cases. Any
+ object with an appropriate stream output operator can be used as
+ a format argument with the %s conversion.
+
+ Since the funcitons are implemented using C++ iostream, some
+ behaviour more closely resembles iostream output operator behaviour
+ than printf behaviour. You are also exposed to bugs in your C++
+ iostream implementation (e.g. hexadecimal scientific format doesn't
+ work properly on MinGW).
+
+ These functions are designed to be forgiving - using an
+ inappropriate conversion for an argument's type just results in the
+ default conversion for the type being used. Inappropriate types or
+ out-of-range positions for parameterised field width and precision
+ are treated as if no width/precision was specified. Out-of-range
+ argument positions result in the format specification being printed.
+
+ Position specifiers for arguments (%123$), field width (*456$) and
+ precision (.*789$) are supported. Mixing explicit and implied
+ positions for arugments/widths/precisions is discouraged, although
+ it does produce deterministic behaviour.
+
+ The following format flags are recognised:
+ - "#": alternate format - sets showbase/showpoint, and also
+ boolalpha for bool with s conversion
+ - "0": pad with zeroes rather than spaces, ignored if '-' flag is
+ specified or if precision is specified for d/i/u/o/x/X
+ conversion
+ - "-": left-align output, overrides '0'
+ - " ": recognised but not implemented, ignored for u/o/x/X
+ conversion
+ - "+": show sign for positive numbers, overrides ' ', ignored for
+ u/o/x/X conversions
+ - "'": recognised for SUS compatibility but ignored (digit grouping
+ is controlled by stream locale)
+ - "I": recognised for glibc compatibility but ignored (digits are
+ controlled by stream locale)
+
+ Precision is supported for conversions by setting precision on the
+ stream. This works as expected for a/A/e/E/f/F/g/G conversions on
+ floating-point types, and may work for objects with user-defined
+ stream output operators. Precision for d/i/u/o/x/X conversions
+ (minimum digits to print) is not supported. Precision for s
+ conversions (maximum characters to print) is only honoured for
+ string-like types (output character pointer/array and
+ std::basic_string).
+
+ Length specifiers are supported but not required for d/i/u/o/x/X
+ conversions with integer/char/bool arguments. They result in the
+ value being cast to the desired type before being printed. Length
+ specifiers are ignored for other conversions.
+
+ The following length specifiers are recognised:
+ - hh: cast to char/unsigned char for d/i/u/o/x/X
+ - h: cast to short/unsigned short for d/i/u/o/x/X
+ - l: cast to long/unsigned long for d/i/u/o/x/X
+ - ll: cast to long long/unsigned long long for d/i/u/o/x/X
+ - L: always ignored
+ - j: cast to intmax_t/uintmax_t for d/i/u/o/x/X
+ - z: cast to ssize_t/size_t for d/i/u/o/x/X
+ - t: cast to ptrdiff_t for d/i/u/o/x/X
+ - I: cast to ssize_t/size_t for d/i/u/o/x/X
+ - I32: cast to int32_t/uint32_t for d/i/u/o/x/X
+ - I64: cast to int64_t/uint64_t for d/i/u/o/x/X
+ - w: always ignored
+
+ The following conversions are recognised:
+ - d/i: signed decimal for integer/char/bool types
+ - u: unsigned decimal for integer/char/bool types
+ - o: unsigned octal for integer/char/bool types
+ - x/X: lower/upppercase unsigned hexadecimal for integer/char/bool
+ types or scientific hexadecimal for floating-point types
+ - e/E: lower/uppercase scientific decimal for floating-point types
+ - f/F: lower/uppercase fixed-point decimal for floating-point types
+ - g/G: default stream output format for floating-point types (may
+ differ from printf behaviour)
+ - a/A: lower/upppercase scientific hexadecimal for floating-point
+ types or hexadecimal for integer types
+ - c/C: cast integer types to stream's character type, no automatic
+ widening or narrowing
+ - s/S: default stream output behaviour for argument
+ - p/P: cast any integer/char/bool/pointer/array to void const *
+ - n: store characters printed so far, produces no output, argument
+ must be pointer to type that std::streamoff is convertible to
+ - m: output of std::strerror(errno), no automatic widening or
+ narrowing, does not consume an argument
+ - %: literal %, field width applied, does not consume an argument
+
+ The output stream type for stream_format must be equivalent to a
+ std::basic_ostream for duck-typing purposes. The output string for
+ string type for string_format must provide value_type, traits_type
+ and allocator_type declarations, and must be constructible from a
+ std::basic_string using the same value, traits and allocator types.
+
+ The format string type can be a pointer to a NUL-terminated string,
+ an array containing a NUL-terminated or non-terminated string, or a
+ STL contiguous container holding a string (e.g. std::string,
+ std::vector or std::array). Note that NUL characters characters are
+ only treated as terminators for pointers and arrays, they are
+ treated as normal characters for other containers. A non-contiguous
+ container (e.g. std::list or std::deque) will result in undesirable
+ behaviour likely culminating in a crash.
+
+ The value type of the format string and the character type of the
+ output stream/string need to match. You can't use a wchar_t format
+ to format char output and vice versa.
+
+ The format string encoding must have contiguous decimal digits. The
+ character encoding must not use shift states or multi-byte sequences
+ that could result in a format character codepoint appearing as part
+ of a multi-byte sequence or being interpreted differently. ASCII,
+ ISO Latin, KOI-8, UTF-8, EUC, EBCDIC, and UTF-EBCDIC encodings meet
+ these requirements, while ISO-2022, UTF-7, KOI-7 and Shift-JIS
+ encodings do not. For character types other than char and wchar_t,
+ the encoding must be a strict superset of the char encoding.
+
+ The following conditions cause assertion failures in debug builds:
+ - Unsupported conversion specifier
+ - Out-of-range argument/width/precision position
+ - Inappropriate type for parameterised width/precision
+ - Positional width/precision specifier not terminated with $
+ - Inappropriate type for n conversion
+
+ Some limitations have been described in passing. Major limitations
+ and bugs include:
+ - No automatic widening/narrowing support, so no simple way to
+ output wide characters/strings to narrow streams/strings and vice
+ versa.
+ - Precision ignored for d/i/u/o/x/X conversions (should set minimum
+ digits to print).
+ - Precisoin for s/S conversion is only honoured for string-like
+ types (output character pointer/array and std::basic_string).
+ - If the output character type is not char, signed char or unsgined
+ char, printing the a value of this type with d/i/u/o/x/X
+ conversion and no length specifier causes it to be printed as a
+ character. Can be worked around by casting to another integer
+ type or using length specifier.
+ - Printing with d/i/u/o/x/X conversions may not behave as expected
+ if the output character type is an integer type other than char,
+ signed char, unsigned char, or wchar_t.
+ - Only output character pointer/array is treated as a C string, any
+ other pointer/array will be printed as a pointer value. The
+ signed/unsigned/default char are not handled equivalently.
+ - There is no length specifier to force cast to int/unsigned. Can
+ be worked around by casting the argument.
+ - MSVCRT length specifiers I/I32/I64 will not be recognised if no
+ width or precision is specified, as they will be mistaken for
+ glibc alternate digits flag.
+ - The " " flag to prefix positive numbers with a space is not
+ implemented.
+ - The "'" and "I" flags are not implemented, as digit grouping and
+ characters are controlled by the output stream's locale.
+ - The characters used for space- and zero-padding are not locale-
+ aware.
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __MAME_UTIL_STRFORMAT_H__
+#define __MAME_UTIL_STRFORMAT_H__
+
+#include <algorithm>
+#include <array>
+#include <cassert>
+#include <cstddef>
+#include <cstdint>
+#include <cstring>
+#include <iterator>
+#include <limits>
+#include <locale>
+#include <sstream>
+#include <string>
+#include <type_traits>
+#include <utility>
+
+namespace util {
+namespace detail {
+//**************************************************************************
+// FORMAT CHARACTER DEFINITIONS
+//**************************************************************************
+
+template <typename Character>
+class format_chars
+{
+public:
+ typedef Character char_type;
+ enum : Character {
+ nul = Character('\0'),
+ space = Character(' '),
+ point = Character('.'),
+ percent = Character('%'),
+ dollar = Character('$'),
+ hash = Character('#'),
+ minus = Character('-'),
+ plus = Character('+'),
+ asterisk = Character('*'),
+ quote = Character('\''),
+ zero = Character('0'),
+ nine = Character('9'),
+ a = Character('a'),
+ A = Character('A'),
+ c = Character('c'),
+ C = Character('C'),
+ d = Character('d'),
+ e = Character('e'),
+ E = Character('E'),
+ f = Character('f'),
+ F = Character('F'),
+ g = Character('g'),
+ G = Character('G'),
+ h = Character('h'),
+ i = Character('i'),
+ I = Character('I'),
+ j = Character('j'),
+ l = Character('l'),
+ L = Character('L'),
+ m = Character('m'),
+ n = Character('n'),
+ o = Character('o'),
+ p = Character('p'),
+ s = Character('s'),
+ S = Character('S'),
+ t = Character('t'),
+ u = Character('u'),
+ w = Character('w'),
+ x = Character('x'),
+ X = Character('X'),
+ z = Character('z')
+ };
+};
+
+template <>
+class format_chars<wchar_t>
+{
+public:
+ typedef wchar_t char_type;
+ enum : wchar_t {
+ nul = L'\0',
+ space = L' ',
+ point = L'.',
+ percent = L'%',
+ dollar = L'$',
+ hash = L'#',
+ minus = L'-',
+ plus = L'+',
+ asterisk = L'*',
+ quote = L'\'',
+ zero = L'0',
+ nine = L'9',
+ a = L'a',
+ A = L'A',
+ c = L'c',
+ C = L'C',
+ d = L'd',
+ e = L'e',
+ E = L'E',
+ f = L'f',
+ F = L'F',
+ g = L'g',
+ G = L'G',
+ h = L'h',
+ i = L'i',
+ I = L'I',
+ j = L'j',
+ l = L'l',
+ L = L'L',
+ m = L'm',
+ n = L'n',
+ o = L'o',
+ p = L'p',
+ s = L's',
+ S = L'S',
+ t = L't',
+ u = L'u',
+ w = L'w',
+ x = L'x',
+ X = L'X',
+ z = L'z'
+ };
+};
+
+
+//**************************************************************************
+// FORMAT SPECIFIER ENCAPSULATION
+//**************************************************************************
+
+class format_flags
+{
+public:
+ enum class positive_sign {
+ none,
+ space, // ' '
+ plus // +
+ };
+
+ enum class length {
+ unspecified,
+ character, // hh
+ short_integer, // h
+ long_integer, // l
+ long_long_integer, // ll
+ long_double, // L
+ integer_maximum, // j
+ size_type, // z, I
+ pointer_difference, // t
+ integer_32, // I32
+ integer_64, // I64
+ wide_character // w
+ };
+
+ enum class conversion {
+ unspecified,
+ signed_decimal, // i, d
+ unsigned_decimal, // u
+ octal, // o
+ hexadecimal, // x, X
+ scientific_decimal, // e, E
+ fixed_decimal, // f, F
+ floating_decimal, // g, G
+ scientific_hexadecimal, // a, A
+ character, // c, C
+ string, // s, S
+ pointer, // p
+ tell, // n
+ strerror, // m
+ percent // %
+ };
+
+ format_flags()
+ : m_alternate_format(false)
+ , m_zero_pad(false)
+ , m_left_align(false)
+ , m_positive_sign(positive_sign::none)
+ , m_digit_grouping(false)
+ , m_alternate_digits(false)
+ , m_field_width(0)
+ , m_precision(-1)
+ , m_length(length::unspecified)
+ , m_uppercase(false)
+ , m_conversion(conversion::unspecified)
+ {
+ }
+
+ template <typename Stream> void apply(Stream &stream) const
+ {
+ typedef format_chars<typename Stream::char_type> chars;
+
+ stream.unsetf(
+ Stream::basefield |
+ Stream::adjustfield |
+ Stream::floatfield |
+ Stream::boolalpha |
+ Stream::showbase |
+ Stream::showpoint |
+ Stream::showpos |
+ Stream::uppercase);
+
+ if (get_alternate_format()) stream.setf(Stream::showbase | Stream::showpoint);
+ stream.fill(get_zero_pad() ? chars::zero : chars::space);
+ stream.setf(get_left_align() ? Stream::left : get_zero_pad() ? Stream::internal : Stream::right);
+ if (positive_sign::plus == get_positive_sign()) stream.setf(Stream::showpos);
+ stream.precision((get_precision() < 0) ? 6 : get_precision());
+ stream.width(get_field_width());
+ if (get_uppercase()) stream.setf(Stream::uppercase);
+ switch (get_conversion())
+ {
+ case conversion::unspecified:
+ break;
+ case conversion::signed_decimal:
+ case conversion::unsigned_decimal:
+ stream.setf(Stream::dec);
+ break;
+ case conversion::octal:
+ stream.setf(Stream::oct);
+ break;
+ case conversion::hexadecimal:
+ stream.setf(Stream::hex | Stream::scientific | Stream::fixed);
+ break;
+ case conversion::scientific_decimal:
+ stream.setf(Stream::dec | Stream::scientific);
+ break;
+ case conversion::fixed_decimal:
+ stream.setf(Stream::dec | Stream::fixed);
+ break;
+ case conversion::floating_decimal:
+ stream.setf(Stream::dec);
+ break;
+ case conversion::scientific_hexadecimal:
+ stream.setf(Stream::hex | Stream::scientific | Stream::fixed);
+ break;
+ case conversion::character:
+ case conversion::string:
+ case conversion::pointer:
+ case conversion::tell:
+ case conversion::strerror:
+ case conversion::percent:
+ break;
+ }
+ }
+
+ bool get_alternate_format() const { return m_alternate_format; }
+ bool get_zero_pad() const { return m_zero_pad; }
+ bool get_left_align() const { return m_left_align; }
+ positive_sign get_positive_sign() const { return m_positive_sign; }
+ bool get_digit_grouping() const { return m_digit_grouping; }
+ bool get_alternate_digits() const { return m_alternate_digits; }
+ unsigned get_field_width() const { return m_field_width; }
+ int get_precision() const { return m_precision; }
+ length get_length() const { return m_length; }
+ bool get_uppercase() const { return m_uppercase; }
+ conversion get_conversion() const { return m_conversion; }
+
+ void set_alternate_format()
+ {
+ m_alternate_format = true;
+ }
+
+ void set_zero_pad()
+ {
+ if (!m_left_align)
+ {
+ switch (m_conversion)
+ {
+ case conversion::signed_decimal:
+ case conversion::unsigned_decimal:
+ case conversion::octal:
+ case conversion::hexadecimal:
+ m_zero_pad = (0 > m_precision);
+ break;
+ default:
+ m_zero_pad = true;
+ }
+ }
+ }
+
+ void set_left_align()
+ {
+ m_zero_pad = false;
+ m_left_align = true;
+ }
+
+ void set_positive_sign_space()
+ {
+ switch (m_conversion)
+ {
+ case conversion::unsigned_decimal:
+ case conversion::octal:
+ case conversion::hexadecimal:
+ break;
+ default:
+ if (positive_sign::plus != m_positive_sign)
+ m_positive_sign = positive_sign::space;
+ }
+ }
+
+ void set_positive_sign_plus()
+ {
+ switch (m_conversion)
+ {
+ case conversion::unsigned_decimal:
+ case conversion::octal:
+ case conversion::hexadecimal:
+ break;
+ default:
+ m_positive_sign = positive_sign::plus;
+ }
+ }
+
+ void set_digit_grouping()
+ {
+ m_digit_grouping = true;
+ }
+
+ void set_alternate_digits()
+ {
+ m_alternate_digits = true;
+ }
+
+ void set_field_width(int value)
+ {
+ if (0 > value)
+ {
+ set_left_align();
+ m_field_width = unsigned(-value);
+ }
+ else
+ {
+ m_field_width = unsigned(value);
+ }
+ }
+
+ void set_precision(int value)
+ {
+ m_precision = value;
+ if (0 <= value)
+ {
+ switch (m_conversion)
+ {
+ case conversion::signed_decimal:
+ case conversion::unsigned_decimal:
+ case conversion::octal:
+ case conversion::hexadecimal:
+ m_zero_pad = false;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ void set_length(length value)
+ {
+ m_length = value;
+ }
+
+ void set_uppercase()
+ {
+ m_uppercase = true;
+ }
+
+ void set_conversion(conversion value)
+ {
+ m_conversion = value;
+ switch (value)
+ {
+ case conversion::unsigned_decimal:
+ case conversion::octal:
+ case conversion::hexadecimal:
+ m_positive_sign = positive_sign::none;
+ case conversion::signed_decimal:
+ if (0 <= m_precision)
+ m_zero_pad = false;
+ break;
+ default:
+ break;
+ }
+ }
+
+private:
+ bool m_alternate_format; // #
+ bool m_zero_pad; // 0
+ bool m_left_align; // -
+ positive_sign m_positive_sign; // ' ', +
+ bool m_digit_grouping; // '
+ bool m_alternate_digits; // I
+ unsigned m_field_width;
+ int m_precision; // .
+ length m_length; // hh, h, l, ll, L, j, z, I, t, w
+ bool m_uppercase; // X, E, F, G, A
+ conversion m_conversion; // i, d, u, o, x, X, e, E, f, F, g, G, a, A, c, C, s, S, p, m, %
+};
+
+
+//**************************************************************************
+// FORMAT OUTPUT HELPERS
+//**************************************************************************
+
+template <typename Stream, typename T>
+class format_output
+{
+private:
+ template <typename U> struct signed_integer_semantics
+ { static constexpr bool value = std::is_integral<U>::value && std::is_signed<U>::value; };
+ template <typename U> struct unsigned_integer_semantics
+ { static constexpr bool value = std::is_integral<U>::value && !std::is_signed<U>::value; };
+ template <typename U> struct default_semantics
+ { static constexpr bool value = !signed_integer_semantics<U>::value && !unsigned_integer_semantics<U>::value; };
+
+public:
+ template <typename U>
+ static void apply(std::enable_if_t<signed_integer_semantics<U>::value, Stream> &str, format_flags const &flags, U const &value)
+ {
+ switch (flags.get_conversion())
+ {
+ case format_flags::conversion::signed_decimal:
+ switch (flags.get_length())
+ {
+ case format_flags::length::character:
+ str << int(static_cast<signed char>(value));
+ break;
+ case format_flags::length::short_integer:
+ str << short(value);
+ break;
+ case format_flags::length::long_integer:
+ str << long(value);
+ break;
+ case format_flags::length::long_long_integer:
+ str << static_cast<long long>(value);
+ break;
+ case format_flags::length::integer_maximum:
+ str << std::intmax_t(value);
+ break;
+ case format_flags::length::size_type:
+ str << std::make_signed_t<std::size_t>(value);
+ break;
+ case format_flags::length::pointer_difference:
+ str << std::make_signed_t<std::ptrdiff_t>(value);
+ break;
+ case format_flags::length::integer_32:
+ str << std::uint32_t(std::int32_t(value));
+ break;
+ case format_flags::length::integer_64:
+ str << std::int64_t(value);
+ break;
+ default:
+ if (std::is_same<std::make_signed_t<U>, std::make_signed_t<char> >::value)
+ str << int(value);
+ else
+ str << value;
+ }
+ break;
+ case format_flags::conversion::unsigned_decimal:
+ case format_flags::conversion::octal:
+ case format_flags::conversion::hexadecimal:
+ switch (flags.get_length())
+ {
+ case format_flags::length::character:
+ str << unsigned(static_cast<unsigned char>(static_cast<signed char>(value)));
+ break;
+ case format_flags::length::short_integer:
+ str << static_cast<unsigned short>(short(value));
+ break;
+ case format_flags::length::long_integer:
+ str << static_cast<unsigned long>(long(value));
+ break;
+ case format_flags::length::long_long_integer:
+ str << static_cast<unsigned long long>(static_cast<long long>(value));
+ break;
+ case format_flags::length::integer_maximum:
+ str << std::uintmax_t(std::intmax_t(value));
+ break;
+ case format_flags::length::size_type:
+ str << std::make_unsigned_t<std::size_t>(std::make_signed_t<std::size_t>(value));
+ break;
+ case format_flags::length::pointer_difference:
+ str << std::make_unsigned_t<std::ptrdiff_t>(std::make_signed_t<std::ptrdiff_t>(value));
+ break;
+ case format_flags::length::integer_32:
+ str << std::uint32_t(std::int32_t(value));
+ break;
+ case format_flags::length::integer_64:
+ str << std::uint64_t(std::int64_t(value));
+ break;
+ default:
+ if (std::is_same<std::make_unsigned_t<U>, std::make_unsigned_t<char> >::value)
+ str << unsigned(std::make_unsigned_t<U>(value));
+ else
+ str << std::make_unsigned_t<U>(value);
+ }
+ break;
+ case format_flags::conversion::character:
+ if (std::is_signed<typename Stream::char_type>::value)
+ str << typename Stream::char_type(value);
+ else
+ str << typename Stream::char_type(std::make_signed_t<typename Stream::char_type>(value));
+ break;
+ case format_flags::conversion::pointer:
+ str << reinterpret_cast<void const *>(std::uintptr_t(std::intptr_t(value)));
+ break;
+ default:
+ str << value;
+ }
+ }
+ template <typename U>
+ static void apply(std::enable_if_t<unsigned_integer_semantics<U>::value, Stream> &str, format_flags const &flags, U const &value)
+ {
+ switch (flags.get_conversion())
+ {
+ case format_flags::conversion::signed_decimal:
+ switch (flags.get_length())
+ {
+ case format_flags::length::character:
+ str << int(static_cast<signed char>(static_cast<unsigned char>(value)));
+ break;
+ case format_flags::length::short_integer:
+ str << short(static_cast<unsigned short>(value));
+ break;
+ case format_flags::length::long_integer:
+ str << long(static_cast<unsigned long>(value));
+ break;
+ case format_flags::length::long_long_integer:
+ str << static_cast<long long>(static_cast<unsigned long long>(value));
+ break;
+ case format_flags::length::integer_maximum:
+ str << std::intmax_t(std::uintmax_t(value));
+ break;
+ case format_flags::length::size_type:
+ str << std::make_signed_t<std::size_t>(std::make_unsigned_t<std::size_t>(value));
+ break;
+ case format_flags::length::pointer_difference:
+ str << std::make_signed_t<std::ptrdiff_t>(std::make_unsigned_t<std::ptrdiff_t>(value));
+ break;
+ case format_flags::length::integer_32:
+ str << std::int32_t(std::uint32_t(value));
+ break;
+ case format_flags::length::integer_64:
+ str << std::int64_t(std::uint64_t(value));
+ break;
+ default:
+ if (std::is_same<std::make_signed_t<U>, std::make_signed_t<char> >::value)
+ str << int(std::make_signed_t<U>(value));
+ else
+ str << std::make_signed_t<U>(value);
+ }
+ break;
+ case format_flags::conversion::unsigned_decimal:
+ case format_flags::conversion::octal:
+ case format_flags::conversion::hexadecimal:
+ switch (flags.get_length())
+ {
+ case format_flags::length::character:
+ str << unsigned(static_cast<unsigned char>(value));
+ break;
+ case format_flags::length::short_integer:
+ str << static_cast<unsigned short>(value);
+ break;
+ case format_flags::length::long_integer:
+ str << static_cast<unsigned long>(value);
+ break;
+ case format_flags::length::long_long_integer:
+ str << static_cast<unsigned long long>(value);
+ break;
+ case format_flags::length::integer_maximum:
+ str << std::uintmax_t(value);
+ break;
+ case format_flags::length::size_type:
+ str << std::make_unsigned_t<std::size_t>(value);
+ break;
+ case format_flags::length::pointer_difference:
+ str << std::make_unsigned_t<std::ptrdiff_t>(value);
+ break;
+ case format_flags::length::integer_32:
+ str << std::uint32_t(std::int32_t(value));
+ break;
+ case format_flags::length::integer_64:
+ str << std::int64_t(value);
+ break;
+ default:
+ if (std::is_same<std::make_unsigned_t<U>, std::make_unsigned_t<char> >::value)
+ str << unsigned(value);
+ else
+ str << value;
+ }
+ break;
+ case format_flags::conversion::character:
+ if (std::is_signed<typename Stream::char_type>::value)
+ str << typename Stream::char_type(value);
+ else
+ str << typename Stream::char_type(std::make_signed_t<typename Stream::char_type>(value));
+ break;
+ case format_flags::conversion::pointer:
+ str << reinterpret_cast<void const *>(std::uintptr_t(value));
+ break;
+ default:
+ str << value;
+ }
+ }
+ template <typename U>
+ static void apply(std::enable_if_t<default_semantics<U>::value, Stream> &str, format_flags const &flags, U const &value)
+ {
+ str << value;
+ }
+ static void apply(Stream &str, format_flags const &flags, bool value)
+ {
+ switch (flags.get_conversion())
+ {
+ case format_flags::conversion::signed_decimal:
+ case format_flags::conversion::unsigned_decimal:
+ case format_flags::conversion::octal:
+ case format_flags::conversion::hexadecimal:
+ case format_flags::conversion::scientific_decimal:
+ case format_flags::conversion::fixed_decimal:
+ case format_flags::conversion::floating_decimal:
+ case format_flags::conversion::scientific_hexadecimal:
+ case format_flags::conversion::character:
+ case format_flags::conversion::pointer:
+ apply(str, flags, unsigned(value));
+ break;
+ default:
+ if (flags.get_alternate_format()) str.setf(Stream::boolalpha);
+ str << value;
+ }
+ }
+ template <typename CharT, typename Traits, typename Allocator>
+ static void apply(std::enable_if_t<std::is_same<CharT, typename Stream::char_type>::value, Stream> &str, format_flags const &flags, std::basic_string<CharT, Traits, Allocator> const &value)
+ {
+ int const precision(flags.get_precision());
+ if ((0 <= precision) && (value.size() > unsigned(precision)))
+ {
+ unsigned width(flags.get_field_width());
+ bool const pad(unsigned(precision) < width);
+ typename Stream::fmtflags const adjust(str.flags() & Stream::adjustfield);
+ if (!pad || (Stream::left == adjust)) str.write(&*value.begin(), unsigned(precision));
+ if (pad)
+ {
+ for (width -= precision; 0U < width; --width) str.put(str.fill());
+ if (Stream::left != adjust) str.write(&*value.begin(), unsigned(precision));
+ }
+ str.width(0);
+ }
+ else
+ {
+ str << value;
+ }
+ }
+ template <typename CharT, typename Traits, typename Allocator>
+ static void apply(std::enable_if_t<!std::is_same<CharT, typename Stream::char_type>::value, Stream> &str, format_flags const &flags, std::basic_string<CharT, Traits, Allocator> const &value)
+ {
+ int const precision(flags.get_precision());
+ if ((0 <= precision) && (value.size() > unsigned(precision)))
+ str << value.substr(0, unsigned(precision));
+ else
+ str << value;
+ }
+};
+
+template <typename Stream, typename T>
+class format_output<Stream, T *>
+{
+protected:
+ template <typename U> struct string_semantics
+ { static constexpr bool value = std::is_same<std::remove_const_t<U>, typename Stream::char_type>::value; };
+
+public:
+ template <typename U>
+ static void apply(std::enable_if_t<string_semantics<U>::value, Stream> &str, format_flags const &flags, U const *value)
+ {
+ switch (flags.get_conversion())
+ {
+ case format_flags::conversion::string:
+ {
+ int precision(flags.get_precision());
+ if (0 <= flags.get_precision())
+ {
+ std::streamsize cnt(0);
+ for ( ; (0 < precision) && (U(format_chars<U>::nul) != value[cnt]); --precision, ++cnt) { }
+ unsigned width(flags.get_field_width());
+ bool const pad(std::make_unsigned_t<std::streamsize>(cnt) < width);
+ typename Stream::fmtflags const adjust(str.flags() & Stream::adjustfield);
+ if (!pad || (Stream::left == adjust)) str.write(value, cnt);
+ if (pad)
+ {
+ for (width -= cnt; 0U < width; --width) str.put(str.fill());
+ if (Stream::left != adjust) str.write(value, cnt);
+ }
+ str.width(0);
+ }
+ else
+ {
+ str << value;
+ }
+ }
+ break;
+ case format_flags::conversion::pointer:
+ str << reinterpret_cast<void const *>(const_cast<std::remove_volatile_t<U> *>(value));
+ break;
+ default:
+ str << value;
+ }
+ }
+ template <typename U>
+ static void apply(std::enable_if_t<!string_semantics<U>::value, Stream> &str, format_flags const &flags, U const *value)
+ {
+ str << reinterpret_cast<void const *>(const_cast<std::remove_volatile_t<U> *>(value));
+ }
+};
+
+template <typename Stream, typename T, std::size_t N>
+class format_output<Stream, T[N]> : protected format_output<Stream, T *>
+{
+public:
+ template <typename U>
+ static void apply(Stream &str, format_flags const &flags, U const *value)
+ {
+ static_assert(
+ !format_output::template string_semantics<U>::value || (N <= size_t(unsigned((std::numeric_limits<int>::max)()))),
+ "C string array length must not exceed maximum integer value");
+ format_flags f(flags);
+ if (format_output::template string_semantics<U>::value && ((0 > f.get_precision()) || (N < unsigned(f.get_precision()))))
+ f.set_precision(int(unsigned(N)));
+ format_output<Stream, T *>::apply(str, f, value);
+ }
+};
+
+
+//**************************************************************************
+// INTEGER INPUT HELPERS
+//**************************************************************************
+
+template <typename T>
+class format_make_integer
+{
+private:
+ template <typename U> struct use_unsigned_cast
+ { static constexpr bool value = std::is_convertible<U const, unsigned>::value && std::is_unsigned<U>::value; };
+ template <typename U> struct use_signed_cast
+ { static constexpr bool value = !use_unsigned_cast<U>::value && std::is_convertible<U const, int>::value; };
+ template <typename U> struct disable
+ { static constexpr bool value = !use_unsigned_cast<U>::value && !use_signed_cast<U>::value; };
+
+public:
+ template <typename U> static std::enable_if_t<use_unsigned_cast<U>::value, bool> apply(U const &value, int &result)
+ {
+ result = int(unsigned(value));
+ return true;
+ }
+ template <typename U> static std::enable_if_t<use_signed_cast<U>::value, bool> apply(U const &value, int &result)
+ {
+ result = int(value);
+ return true;
+ }
+ template <typename U> static std::enable_if_t<disable<U>::value, bool> apply(U const &value, int &result)
+ {
+ return false;
+ }
+};
+
+
+//**************************************************************************
+// INTEGER OUTPUT HELPERS
+//**************************************************************************
+
+template <typename T>
+class format_store_integer
+{
+private:
+ template <typename U> struct is_non_const_ptr
+ { static constexpr bool value = std::is_pointer<U>::value && !std::is_const<std::remove_pointer_t<U> >::value; };
+ template <typename U> struct is_unsigned_ptr
+ { static constexpr bool value = std::is_pointer<U>::value && std::is_unsigned<std::remove_pointer_t<U> >::value; };
+ template <typename U> struct use_unsigned_cast
+ { static constexpr bool value = is_non_const_ptr<U>::value && is_unsigned_ptr<U>::value && std::is_convertible<std::make_unsigned_t<std::streamoff>, std::remove_pointer_t<U> >::value; };
+ template <typename U> struct use_signed_cast
+ { static constexpr bool value = is_non_const_ptr<U>::value && !use_unsigned_cast<U>::value && std::is_convertible<std::streamoff, std::remove_pointer_t<U> >::value; };
+ template <typename U> struct disable
+ { static constexpr bool value = !use_unsigned_cast<U>::value && !use_signed_cast<U>::value; };
+
+public:
+ template <typename U> static std::enable_if_t<use_unsigned_cast<U>::value, bool> apply(U const &value, std::streamoff data)
+ {
+ *value = std::remove_pointer_t<U>(std::make_unsigned_t<std::streamoff>(data));
+ return true;
+ }
+ template <typename U> static std::enable_if_t<use_signed_cast<U>::value, bool> apply(U const &value, std::streamoff data)
+ {
+ *value = std::remove_pointer_t<U>(std::make_signed_t<std::streamoff>(data));
+ return true;
+ }
+ template <typename U> static std::enable_if_t<disable<U>::value, bool> apply(U const &value, std::streamoff data)
+ {
+ assert(false); // inappropriate type for storing characters written so far
+ return false;
+ }
+};
+
+
+//**************************************************************************
+// NON-POLYMORPHIC ARGUMENT WRAPPER
+//**************************************************************************
+
+template <typename Stream>
+class format_argument
+{
+public:
+ format_argument()
+ : m_value(nullptr)
+ , m_output_function(nullptr)
+ , m_make_integer_function(nullptr)
+ , m_store_integer_function(nullptr)
+ {
+ }
+
+ template <typename T>
+ format_argument(T const &value)
+ : m_value(reinterpret_cast<void const *>(&value))
+ , m_output_function(&static_output<T>)
+ , m_make_integer_function(&static_make_integer<T>)
+ , m_store_integer_function(&static_store_integer<T>)
+ {
+ }
+
+ void output(Stream &str, format_flags const &flags) const { m_output_function(str, flags, m_value); }
+ bool make_integer(int &result) const { return m_make_integer_function(m_value, result); }
+ void store_integer(std::streamoff data) const { m_store_integer_function(m_value, data); }
+
+private:
+ typedef void (*output_function)(Stream &str, format_flags const &flags, void const *value);
+ typedef bool (*make_integer_function)(void const *value, int &result);
+ typedef void (*store_integer_function)(void const *value, std::streamoff data);
+
+ template <typename T> static void static_output(Stream &str, format_flags const &flags, void const *value)
+ {
+ format_output<Stream, T>::apply(str, flags, *reinterpret_cast<T const *>(value));
+ }
+
+ template <typename T> static bool static_make_integer(void const *value, int &result)
+ {
+ return format_make_integer<T>::apply(*reinterpret_cast<T const *>(value), result);
+ }
+
+ template <typename T> static void static_store_integer(void const *value, std::streamoff data)
+ {
+ format_store_integer<T>::apply(*reinterpret_cast<T const *>(value), data);
+ }
+
+ void const *m_value;
+ output_function m_output_function;
+ make_integer_function m_make_integer_function;
+ store_integer_function m_store_integer_function;
+};
+
+
+//**************************************************************************
+// NON-POLYMORPHIC ARGUMENT PACK WRAPPER BASE
+//**************************************************************************
+
+template <typename Stream = std::ostream>
+class format_argument_pack
+{
+public:
+ typedef typename Stream::char_type char_type;
+ typedef char_type const *iterator;
+ iterator format_begin() const
+ {
+ return m_begin;
+ }
+ bool format_at_end(iterator it) const
+ {
+ return (m_end && (m_end == it)) || (m_check_nul && (format_chars<char_type>::nul == *it));
+ }
+ std::size_t size() const
+ {
+ return m_argument_count;
+ }
+ format_argument<Stream> const &operator[](std::size_t index) const
+ {
+ assert(m_argument_count > index);
+ return m_arguments[index];
+ }
+
+protected:
+ template <typename T>
+ struct handle_char_ptr { static constexpr bool value = std::is_pointer<T>::value && std::is_same<std::remove_cv_t<std::remove_pointer_t<T> >, char_type>::value; };
+ template <typename T>
+ struct handle_char_array { static constexpr bool value = std::is_array<T>::value && std::is_same<std::remove_cv_t<std::remove_extent_t<T> >, char_type>::value; };
+ template <typename T>
+ struct handle_container { static constexpr bool value = !handle_char_ptr<T>::value && !handle_char_array<T>::value; };
+
+ template <typename Format>
+ format_argument_pack(
+ Format &&fmt,
+ format_argument<Stream> const *arguments,
+ std::enable_if_t<handle_char_ptr<std::remove_reference_t<Format> >::value, std::size_t> argument_count)
+ : m_begin(fmt)
+ , m_end(nullptr)
+ , m_check_nul(true)
+ , m_arguments(arguments)
+ , m_argument_count(argument_count)
+ {
+ assert(m_begin);
+ assert(m_end || m_check_nul);
+ assert(!m_end || (m_end > m_begin));
+ assert(m_arguments || !m_argument_count);
+ }
+ template <typename Format>
+ format_argument_pack(
+ Format &&fmt,
+ format_argument<Stream> const *arguments,
+ std::enable_if_t<handle_char_array<std::remove_reference_t<Format> >::value, std::size_t> argument_count)
+ : m_begin(std::cbegin(fmt))
+ , m_end(std::cend(fmt))
+ , m_check_nul(true)
+ , m_arguments(arguments)
+ , m_argument_count(argument_count)
+ {
+ assert(m_begin);
+ assert(m_end || m_check_nul);
+ assert(!m_end || (m_end > m_begin));
+ assert(m_arguments || !m_argument_count);
+ }
+ template <typename Format>
+ format_argument_pack(
+ Format &&fmt,
+ format_argument<Stream> const *arguments,
+ std::enable_if_t<handle_container<std::remove_reference_t<Format> >::value, std::size_t> argument_count)
+ : m_begin(fmt.empty() ? nullptr : &*std::cbegin(fmt))
+ , m_end(fmt.empty() ? nullptr : &*std::cend(fmt))
+ , m_check_nul(true)
+ , m_arguments(arguments)
+ , m_argument_count(argument_count)
+ {
+ assert(m_begin);
+ assert(m_end || m_check_nul);
+ assert(!m_end || (m_end > m_begin));
+ assert(m_arguments || !m_argument_count);
+ }
+
+ format_argument_pack(format_argument_pack<Stream> const &) = default;
+ format_argument_pack(format_argument_pack<Stream> &&) = default;
+ format_argument_pack &operator=(format_argument_pack<Stream> const &) = default;
+ format_argument_pack &operator=(format_argument_pack<Stream> &&) = default;
+
+private:
+ iterator m_begin;
+ iterator m_end;
+ bool m_check_nul;
+ format_argument<Stream> const *m_arguments;
+ std::size_t m_argument_count;
+};
+
+
+//**************************************************************************
+// ARGUMENT PACK WRAPPER IMPLEMENTATION
+//**************************************************************************
+
+template <typename Stream, std::size_t Count>
+class format_argument_pack_impl
+ : private std::array<format_argument<Stream>, Count>
+ , public format_argument_pack<Stream>
+{
+public:
+ template <typename Format, typename... Params>
+ format_argument_pack_impl(Format &&fmt, Params &&... args)
+ : std::array<format_argument<Stream>, Count>({ { format_argument<Stream>(std::forward<Params>(args))... } })
+ , format_argument_pack<Stream>(std::forward<Format>(fmt), Count ? &*this->cbegin() : nullptr, Count)
+ {
+ static_assert(sizeof...(Params) == Count, "Wrong number of constructor arguments");
+ }
+
+ format_argument_pack_impl(format_argument_pack_impl<Stream, Count> const &) = default;
+ format_argument_pack_impl(format_argument_pack_impl<Stream, Count> &&) = default;
+ format_argument_pack_impl &operator=(format_argument_pack_impl<Stream, Count> const &) = default;
+ format_argument_pack_impl &operator=(format_argument_pack_impl<Stream, Count> &&) = default;
+};
+
+
+//**************************************************************************
+// ARGUMENT PACK CREATOR FUNCTIONS
+//**************************************************************************
+
+template <typename Stream = std::ostream, typename... Params>
+inline std::array<format_argument<Stream>, sizeof...(Params)> make_format_arguments(Params &&... args)
+{
+ return std::array<format_argument<Stream>, sizeof...(Params)>({ { format_argument<Stream>(std::forward<Params>(args))... } });
+}
+
+template <typename Stream = std::ostream, typename Format, typename... Params>
+inline format_argument_pack_impl<Stream, sizeof...(Params)> make_format_argument_pack(Format &&fmt, Params &&... args)
+{
+ return format_argument_pack_impl<Stream, sizeof...(Params)>(std::forward<Format>(fmt), std::forward<Params>(args)...);
+}
+
+
+//**************************************************************************
+// FORMAT STRING PARSING HELPERS
+//**************************************************************************
+
+template <typename Format>
+class format_helper_base : public format_chars<std::remove_cv_t<std::remove_reference_t<decltype(*std::cbegin(std::declval<Format>()))> > >
+{
+public:
+ typedef std::remove_reference_t<decltype(std::cbegin(std::declval<Format>()))> iterator;
+ static iterator begin(Format const &fmt) { return std::cbegin(fmt); }
+ static bool at_end(Format const &fmt, iterator const &it) { return std::cend(fmt) == it; }
+};
+
+template <typename Character>
+class format_helper_base<Character *> : public format_chars<std::remove_cv_t<Character> >
+{
+public:
+ typedef Character const *iterator;
+ static iterator begin(Character const *fmt) { return fmt; }
+ static bool at_end(Character const *fmt, iterator const &it) { return format_helper_base::nul == *it; }
+};
+
+template <typename Character, std::size_t Length>
+class format_helper_base<Character [Length]> : public format_chars<std::remove_cv_t<Character> >
+{
+public:
+ typedef Character const *iterator;
+ static iterator begin(std::remove_const_t<Character> (&fmt)[Length]) { return std::cbegin(fmt); }
+ static iterator begin(std::add_const_t<Character> (&fmt)[Length]) { return std::cbegin(fmt); }
+ static bool at_end(std::remove_const_t<Character> (&fmt)[Length], iterator const &it) { return (std::cend(fmt) == it) || (format_chars<Character>::nul == *it); }
+ static bool at_end(std::add_const_t<Character> (&fmt)[Length], iterator const &it) { return (std::cend(fmt) == it) || (format_helper_base::nul == *it); }
+};
+
+template <typename Stream>
+class format_helper_base<format_argument_pack<Stream> > : public format_chars<typename format_argument_pack<Stream>::char_type>
+{
+public:
+ typedef typename format_argument_pack<Stream>::iterator iterator;
+ static iterator begin(format_argument_pack<Stream> const &fmt) { return fmt.format_begin(); }
+ static bool at_end(format_argument_pack<Stream> const &fmt, iterator const &it) { return fmt.format_at_end(it); }
+};
+
+template <typename Format>
+class format_helper : public format_helper_base<Format>
+{
+public:
+ static bool parse_format(
+ Format const &fmt,
+ typename format_helper::iterator &it,
+ format_flags &flags,
+ int &next_position,
+ int &argument_position,
+ int &width_position,
+ int &precision_position)
+ {
+ static_assert((format_helper::nine - format_helper::zero) == 9, "Digits must be contiguous");
+ assert(!format_helper::at_end(fmt, it));
+ assert(format_helper::percent == *it);
+
+ int num;
+ int nxt(next_position);
+ ++it;
+ flags = format_flags();
+ argument_position = -1;
+ width_position = -1;
+ precision_position = -1;
+
+ // Leading zeroes are tricky - they could be a zero-pad flag or part of a position specifier
+ bool const leading_zero(!format_helper::at_end(fmt, it) && (format_helper::zero == *it));
+ while (!format_helper::at_end(fmt, it) && (format_helper::zero == *it)) ++it;
+
+ // Digits encountered at this point could be a field width or a position specifier
+ num = 0;
+ bool leading_num(have_digit(fmt, it));
+ while (have_digit(fmt, it)) add_digit(num, *it++);
+ if (leading_num && !have_dollar(fmt, it))
+ {
+ // No dollar sign, leading number is field width
+ if (leading_zero) flags.set_zero_pad();
+ flags.set_field_width(num);
+ }
+ else
+ {
+ // If we hit a dollar sign after a number, that's a position specifier
+ if ((leading_zero || leading_num) && have_dollar(fmt, it))
+ {
+ argument_position = num;
+ ++it;
+ }
+ else if (leading_zero)
+ {
+ flags.set_zero_pad();
+ }
+
+ // Parse flag characters
+ while (!format_helper::at_end(fmt, it))
+ {
+ switch (*it)
+ {
+ case format_helper::hash: ++it; flags.set_alternate_format(); continue;
+ case format_helper::zero: ++it; flags.set_zero_pad(); continue;
+ case format_helper::minus: ++it; flags.set_left_align(); continue;
+ case format_helper::space: ++it; flags.set_positive_sign_space(); continue;
+ case format_helper::plus: ++it; flags.set_positive_sign_plus(); continue;
+ case format_helper::quote: ++it; flags.set_digit_grouping(); continue;
+ case format_helper::I: ++it; flags.set_alternate_digits(); continue;
+ default: break;
+ }
+ break;
+ }
+
+ // Check for literal or parameterised field width
+ if (!format_helper::at_end(fmt, it))
+ {
+ if (is_digit(*it))
+ {
+ flags.set_field_width(read_number(fmt, it));
+ }
+ else if (format_helper::asterisk == *it)
+ {
+ ++it;
+ if (have_digit(fmt, it))
+ {
+ num = read_number(fmt, it);
+ assert(have_dollar(fmt, it)); // invalid positional width
+ if (!have_dollar(fmt, it)) return false;
+ width_position = num;
+ nxt = width_position + 1;
+ ++it;
+ }
+ else
+ {
+ width_position = nxt++;
+ }
+ }
+ }
+ }
+
+ // Check for literal or parameterised precision
+ if (!format_helper::at_end(fmt, it) && (*it == format_helper::point))
+ {
+ ++it;
+ if (have_digit(fmt, it))
+ {
+ flags.set_precision(read_number(fmt, it));
+ }
+ else if (!format_helper::at_end(fmt, it) && (format_helper::asterisk == *it))
+ {
+ ++it;
+ if (have_digit(fmt, it))
+ {
+ num = read_number(fmt, it);
+ assert(have_dollar(fmt, it)); // invalid positional precision
+ if (!have_dollar(fmt, it)) return false;
+ precision_position = num;
+ nxt = precision_position + 1;
+ ++it;
+ }
+ else
+ {
+ precision_position = nxt++;
+ }
+ }
+ else
+ {
+ flags.set_precision(0);
+ }
+ }
+
+ // Check for length modifiers
+ if (!format_helper::at_end(fmt, it)) switch (*it)
+ {
+ case format_helper::h:
+ ++it;
+ if (!format_helper::at_end(fmt, it) && (format_helper::h == *it))
+ {
+ ++it;
+ flags.set_length(format_flags::length::character);
+ }
+ else
+ {
+ flags.set_length(format_flags::length::short_integer);
+ }
+ break;
+ case format_helper::l:
+ ++it;
+ if (!format_helper::at_end(fmt, it) && (format_helper::l == *it))
+ {
+ ++it;
+ flags.set_length(format_flags::length::long_long_integer);
+ }
+ else
+ {
+ flags.set_length(format_flags::length::long_integer);
+ }
+ break;
+ case format_helper::L:
+ ++it;
+ flags.set_length(format_flags::length::long_double);
+ break;
+ case format_helper::j:
+ ++it;
+ flags.set_length(format_flags::length::integer_maximum);
+ break;
+ case format_helper::z:
+ ++it;
+ flags.set_length(format_flags::length::size_type);
+ break;
+ case format_helper::t:
+ ++it;
+ flags.set_length(format_flags::length::pointer_difference);
+ break;
+ case format_helper::I:
+ {
+ ++it;
+ format_flags::length length = format_flags::length::size_type;
+ if (!format_helper::at_end(fmt, it))
+ {
+ if ((typename format_helper::char_type(format_helper::zero) + 3) == *it)
+ {
+ typename format_helper::iterator tmp(it);
+ ++tmp;
+ if (!format_helper::at_end(fmt, tmp) && ((typename format_helper::char_type(format_helper::zero) + 2) == *tmp))
+ {
+ length = format_flags::length::integer_32;
+ it = ++tmp;
+ }
+ }
+ else if ((typename format_helper::char_type(format_helper::zero) + 6) == *it)
+ {
+ typename format_helper::iterator tmp(it);
+ ++tmp;
+ if (!format_helper::at_end(fmt, tmp) && ((typename format_helper::char_type(format_helper::zero) + 4) == *tmp))
+ {
+ length = format_flags::length::integer_64;
+ it = ++tmp;
+ }
+ }
+ }
+ flags.set_length(length);
+ }
+ break;
+ case format_helper::w:
+ ++it;
+ flags.set_length(format_flags::length::wide_character);
+ break;
+ default:
+ break;
+ }
+
+ // Now we should find a conversion specifier
+ assert(!format_helper::at_end(fmt, it)); // missing conversion
+ if (format_helper::at_end(fmt, it)) return false;
+ switch (*it)
+ {
+ case format_helper::d:
+ case format_helper::i:
+ flags.set_conversion(format_flags::conversion::signed_decimal);
+ break;
+ case format_helper::o:
+ flags.set_conversion(format_flags::conversion::octal);
+ break;
+ case format_helper::u:
+ flags.set_conversion(format_flags::conversion::unsigned_decimal);
+ break;
+ case format_helper::X:
+ flags.set_uppercase();
+ case format_helper::x:
+ flags.set_conversion(format_flags::conversion::hexadecimal);
+ break;
+ case format_helper::E:
+ flags.set_uppercase();
+ case format_helper::e:
+ flags.set_conversion(format_flags::conversion::scientific_decimal);
+ break;
+ case format_helper::F:
+ flags.set_uppercase();
+ case format_helper::f:
+ flags.set_conversion(format_flags::conversion::fixed_decimal);
+ break;
+ case format_helper::G:
+ flags.set_uppercase();
+ case format_helper::g:
+ flags.set_conversion(format_flags::conversion::floating_decimal);
+ break;
+ case format_helper::A:
+ flags.set_uppercase();
+ case format_helper::a:
+ flags.set_conversion(format_flags::conversion::scientific_hexadecimal);
+ break;
+ case format_helper::C:
+ if (format_flags::length::unspecified == flags.get_length())
+ flags.set_length(format_flags::length::long_integer);
+ case format_helper::c:
+ flags.set_conversion(format_flags::conversion::character);
+ break;
+ case format_helper::S:
+ if (format_flags::length::unspecified == flags.get_length())
+ flags.set_length(format_flags::length::long_integer);
+ case format_helper::s:
+ flags.set_conversion(format_flags::conversion::string);
+ break;
+ case format_helper::p:
+ flags.set_conversion(format_flags::conversion::pointer);
+ break;
+ case format_helper::n:
+ flags.set_conversion(format_flags::conversion::tell);
+ break;
+ case format_helper::m:
+ flags.set_conversion(format_flags::conversion::strerror);
+ break;
+ case format_helper::percent:
+ flags.set_conversion(format_flags::conversion::percent);
+ break;
+ default:
+ assert(false); // unsupported conversion
+ return false;
+ }
+ ++it;
+
+ // Finalise argument position
+ if (argument_position < 0) argument_position = nxt;
+ next_position = argument_position;
+ switch (flags.get_conversion())
+ {
+ case format_flags::conversion::strerror:
+ case format_flags::conversion::percent:
+ break;
+ default:
+ ++next_position;
+ }
+ return true;
+ }
+
+private:
+ static bool have_dollar(Format const &fmt, typename format_helper::iterator const &it)
+ {
+ return !format_helper::at_end(fmt, it) && (*it == format_helper::dollar);
+ }
+
+ static bool have_digit(Format const &fmt, typename format_helper::iterator const &it)
+ {
+ return !format_helper::at_end(fmt, it) && is_digit(*it);
+ }
+
+ static bool is_digit(typename format_helper::char_type value)
+ {
+ return (format_helper::zero <= value) && (format_helper::nine >= value);
+ }
+
+ static int digit_value(typename format_helper::char_type value)
+ {
+ assert(is_digit(value));
+ return int(std::make_signed_t<decltype(value)>(value - format_helper::zero));
+ }
+
+ static void add_digit(int &num, typename format_helper::char_type digit)
+ {
+ num = (num * 10) + digit_value(digit);
+ }
+
+ static int read_number(Format const &fmt, typename format_helper::iterator &it)
+ {
+ assert(have_digit(fmt, it));
+ int value = 0;
+ do add_digit(value, *it++); while (have_digit(fmt, it));
+ return value;
+ }
+};
+
+
+//**************************************************************************
+// CORE FORMATTING FUNCTION
+//**************************************************************************
+
+template <typename Stream, typename Format, typename Params>
+typename Stream::off_type stream_format(Stream &str, Format &&fmt, Params &&args)
+{
+ typedef format_helper<std::remove_cv_t<std::remove_reference_t<Format> > > format_helper;
+ typedef typename format_helper::iterator iterator;
+ class stream_preserver
+ {
+ public:
+ stream_preserver(Stream &stream)
+ : m_stream(stream)
+ , m_fill(stream.fill())
+ , m_flags(stream.flags())
+ , m_precision(stream.precision())
+ , m_width(stream.width())
+ {
+ }
+ ~stream_preserver()
+ {
+ m_stream.width(m_width);
+ m_stream.precision(m_precision);
+ m_stream.flags(m_flags);
+ m_stream.fill(m_fill);
+ }
+ private:
+ Stream &m_stream;
+ typename Stream::char_type m_fill;
+ typename Stream::fmtflags m_flags;
+ std::streamsize m_precision;
+ std::streamsize m_width;
+ };
+
+ typename Stream::pos_type const begin(str.tellp());
+ stream_preserver const preserver(str);
+ int next_pos(1);
+ iterator start = format_helper::begin(fmt);
+ for (iterator it = start; !format_helper::at_end(fmt, start); )
+ {
+ while (!format_helper::at_end(fmt, it) && (format_helper::percent != *it)) ++it;
+ if (start != it)
+ {
+ str.write(&*start, it - start);
+ start = it;
+ }
+ if (!format_helper::at_end(fmt, it))
+ {
+ // Try to parse a percent format specification
+ format_flags flags;
+ int arg_pos, width_pos, prec_pos;
+ if (!format_helper::parse_format(fmt, it, flags, next_pos, arg_pos, width_pos, prec_pos))
+ continue;
+
+ // Handle parameterised width
+ if (0 <= width_pos)
+ {
+ assert(flags.get_field_width() == 0U);
+ assert(0 < width_pos);
+ assert(args.size() >= unsigned(width_pos));
+ if ((0 < width_pos) && (args.size() >= unsigned(width_pos)))
+ {
+ int width;
+ if (args[width_pos - 1].make_integer(width))
+ {
+ if (0 > width)
+ {
+ flags.set_left_align();
+ flags.set_field_width(unsigned(-width));
+ }
+ else
+ {
+ flags.set_field_width(unsigned(width));
+ }
+ }
+ else
+ {
+ assert(false); // inappropriate type passed as width argument
+ }
+ }
+ }
+
+ // Handle parameterised precision
+ if (0 <= prec_pos)
+ {
+ assert(flags.get_precision() < 0);
+ assert(0 < prec_pos);
+ assert(args.size() >= unsigned(prec_pos));
+ if ((0 < prec_pos) && (args.size() >= unsigned(prec_pos)))
+ {
+ int precision;
+ if (args[prec_pos - 1].make_integer(precision))
+ flags.set_precision(precision);
+ else
+ assert(false); // inappropriate type passed as precision argument
+ }
+ }
+
+ // Some conversions don't actually take an argument - get them out of the way
+ flags.apply(str);
+ if (format_flags::conversion::strerror == flags.get_conversion())
+ {
+ str << std::strerror(errno);
+ start = it;
+ }
+ else if (format_flags::conversion::percent == flags.get_conversion())
+ {
+ str << typename Stream::char_type(format_chars<typename Stream::char_type>::percent);
+ start = it;
+ }
+ else
+ {
+ assert(0 < arg_pos);
+ assert(args.size() >= unsigned(arg_pos));
+ if ((0 >= arg_pos) || (args.size() < unsigned(arg_pos)))
+ continue;
+ if (format_flags::conversion::tell == flags.get_conversion())
+ {
+ typename Stream::pos_type const current(str.tellp());
+ args[arg_pos - 1].store_integer(
+ ((typename Stream::pos_type(-1) == begin) || (typename Stream::pos_type(-1) == current))
+ ? typename Stream::off_type(-1)
+ : (current - begin));
+ }
+ else
+ {
+ args[arg_pos - 1].output(str, flags);
+ }
+ start = it;
+ }
+ }
+ }
+ typename Stream::pos_type const end(str.tellp());
+ return ((typename Stream::pos_type(-1) == begin) || (typename Stream::pos_type(-1) == end))
+ ? typename Stream::off_type(-1)
+ : (end - begin);
+}
+
+} // namespace detail
+
+
+//**************************************************************************
+// FORMAT TO STREAM FUNCTIONS
+//**************************************************************************
+
+template <typename Stream, typename Format, typename... Params>
+inline typename Stream::off_type stream_format(Stream &str, Format const &fmt, Params &&... args)
+{
+ return detail::stream_format(str, fmt, detail::make_format_arguments<Stream>(std::forward<Params>(args)...));
+}
+
+template <typename Stream, typename Base>
+inline typename Stream::off_type stream_format(Stream &str, detail::format_argument_pack<Base> const &args)
+{
+ return detail::stream_format(str, args, args);
+}
+
+template <typename Stream, typename Base>
+inline typename Stream::off_type stream_format(Stream &str, detail::format_argument_pack<Base> &&args)
+{
+ return detail::stream_format(str, args, args);
+}
+
+
+//**************************************************************************
+// FORMAT TO NEW STRING FUNCTIONS
+//**************************************************************************
+
+template <typename String = std::string, typename Format, typename... Params>
+inline String string_format(Format &&fmt, Params &&... args)
+{
+ typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
+ ostream str;
+ stream_format(str, fmt, std::forward<Params>(args)...);
+ return str.str();
+};
+
+template <typename String = std::string, typename Format, typename... Params>
+inline String string_format(std::locale const &locale, Format &&fmt, Params &&... args)
+{
+ typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
+ ostream str;
+ str.imbue(locale);
+ stream_format(str, fmt, std::forward<Params>(args)...);
+ return str.str();
+};
+
+template <typename String = std::string, typename Format, typename Stream>
+inline String string_format(Format &&fmt, detail::format_argument_pack<Stream> const &args)
+{
+ typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
+ ostream str;
+ stream_format(str, std::forward<Format>(fmt), args);
+ return str.str();
+};
+
+template <typename String = std::string, typename Format, typename Stream>
+inline String string_format(Format &&fmt, detail::format_argument_pack<Stream> &&args)
+{
+ typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
+ ostream str;
+ stream_format(str, std::forward<Format>(fmt), std::move(args));
+ return str.str();
+};
+
+template <typename String = std::string, typename Format, typename Stream>
+inline String string_format(std::locale const &locale, Format &&fmt, detail::format_argument_pack<Stream> const &args)
+{
+ typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
+ ostream str;
+ str.imbue(locale);
+ stream_format(str, std::forward<Format>(fmt), args);
+ return str.str();
+};
+
+template <typename String = std::string, typename Format, typename Stream>
+inline String string_format(std::locale const &locale, Format &&fmt, detail::format_argument_pack<Stream> &&args)
+{
+ typedef std::basic_ostringstream<typename String::value_type, typename String::traits_type, typename String::allocator_type> ostream;
+ ostream str;
+ str.imbue(locale);
+ stream_format(str, std::forward<Format>(fmt), std::move(args));
+ return str.str();
+};
+
+
+//**************************************************************************
+// CREATING ARGUMENT PACKS
+//**************************************************************************
+
+using detail::format_argument_pack;
+using detail::make_format_argument_pack;
+
+} // namespace util
+
+using util::string_format;
+
+#endif // __MAME_UTIL_STRFORMAT_H__
diff --git a/src/lib/util/vecstream.h b/src/lib/util/vecstream.h
new file mode 100644
index 00000000000..fb472df95cd
--- /dev/null
+++ b/src/lib/util/vecstream.h
@@ -0,0 +1,387 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+/***************************************************************************
+
+ vecstream.h
+
+ streams with vector storage
+
+ These types are useful if you want a persistent buffer for formatted
+ text and you need to use it like a character array or character
+ pointer, as you get read-only access to it without copying. The
+ storage is always guaranteed to be contiguous. Writing to the
+ stream may invalidate pointers to storage.
+
+***************************************************************************/
+
+#ifndef __MAME_UTIL_VECSTREAM_H__
+#define __MAME_UTIL_VECSTREAM_H__
+
+#include <algorithm>
+#include <cassert>
+#include <ostream>
+#include <streambuf>
+#include <string>
+#include <type_traits>
+#include <utility>
+#include <vector>
+
+namespace util {
+
+template <typename CharT, typename Traits = std::char_traits<CharT>, typename Allocator = std::allocator<CharT> >
+class basic_vectorbuf : public std::basic_streambuf<CharT, Traits>
+{
+public:
+ typedef typename std::basic_streambuf<CharT, Traits>::char_type char_type;
+ typedef typename std::basic_streambuf<CharT, Traits>::int_type int_type;
+ typedef typename std::basic_streambuf<CharT, Traits>::pos_type pos_type;
+ typedef typename std::basic_streambuf<CharT, Traits>::off_type off_type;
+ typedef Allocator allocator_type;
+ typedef std::vector<char_type, Allocator> vector_type;
+
+ basic_vectorbuf(std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_streambuf<CharT, Traits>(), m_mode(mode), m_storage(), m_threshold(nullptr)
+ {
+ setup();
+ }
+
+ basic_vectorbuf(vector_type const &content, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_streambuf<CharT, Traits>(), m_mode(mode), m_storage(content), m_threshold(nullptr)
+ {
+ setup();
+ }
+
+ basic_vectorbuf(vector_type &&content, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_streambuf<CharT, Traits>(), m_mode(mode), m_storage(std::move(content)), m_threshold(nullptr)
+ {
+ setup();
+ }
+
+ basic_vectorbuf(basic_vectorbuf const &that) : std::basic_streambuf<CharT, Traits>(that), m_mode(that.m_mode), m_storage(that.m_storage), m_threshold(nullptr)
+ {
+ adjust();
+ }
+
+ basic_vectorbuf(basic_vectorbuf &&that) : std::basic_streambuf<CharT, Traits>(that), m_mode(that.m_mode), m_storage(std::move(that.m_storage)), m_threshold(that.m_threshold)
+ {
+ that.clear();
+ }
+
+ vector_type const &vec() const
+ {
+ if (m_mode & std::ios_base::out)
+ {
+ if (this->pptr() > m_threshold) m_threshold = this->pptr();
+ auto const base(this->pbase());
+ auto const end(m_threshold - base);
+ if (m_storage.size() > std::make_unsigned_t<decltype(end)>(end))
+ {
+ m_storage.resize(std::make_unsigned_t<decltype(end)>(end));
+ assert(&m_storage[0] == base);
+ auto const put_offset(this->pptr() - base);
+ const_cast<basic_vectorbuf *>(this)->setp(base, base + put_offset);
+ const_cast<basic_vectorbuf *>(this)->pbump(put_offset);
+ }
+ }
+ return m_storage;
+ }
+
+ void vec(const vector_type &content)
+ {
+ m_storage = content;
+ setup();
+ }
+
+ void vec(vector_type &&content)
+ {
+ m_storage = std::move(content);
+ setup();
+ }
+
+ void clear()
+ {
+ m_storage.clear();
+ setup();
+ }
+
+ void swap(basic_vectorbuf &that)
+ {
+ std::basic_streambuf<CharT, Traits>::swap(that);
+ std::swap(m_mode, that.m_mode);
+ m_storage.swap(that.m_storage);
+ std::swap(m_threshold, that.m_threshold);
+ }
+
+ void reserve(typename vector_type::size_type size)
+ {
+ if ((m_mode & std::ios_base::out) && (m_storage.size() < size))
+ {
+ m_storage.reserve(size);
+ adjust();
+ }
+ }
+
+ basic_vectorbuf &operator=(basic_vectorbuf const &that)
+ {
+ std::basic_streambuf<CharT, Traits>::operator=(that);
+ m_mode = that.m_mode;
+ m_storage = that.m_storage;
+ m_threshold = that.m_threshold;
+ adjust();
+ return *this;
+ }
+
+ basic_vectorbuf &operator=(basic_vectorbuf &&that)
+ {
+ std::basic_streambuf<CharT, Traits>::operator=(that);
+ m_mode = that.m_mode;
+ m_storage = std::move(that.m_storage);
+ m_threshold = that.m_threshold;
+ that.clear();
+ return *this;
+ }
+
+protected:
+ pos_type seekoff(off_type off, std::ios_base::seekdir dir, std::ios_base::openmode which = std::ios_base::in | std::ios_base::out) override
+ {
+ bool const in(which & std::ios_base::in);
+ bool const out(which & std::ios_base::out);
+ if ((!in && !out) ||
+ (in && out && (std::ios_base::cur == dir)) ||
+ (in && (!(m_mode & std::ios_base::in) || !this->gptr())) ||
+ (out && (!(m_mode & std::ios_base::out) || !this->pptr())))
+ {
+ return pos_type(off_type(-1));
+ }
+ maximise_egptr();
+ off_type const end((m_mode & std::ios_base::out) ? off_type(m_threshold - this->pbase()) : off_type(m_storage.size()));
+ switch (dir)
+ {
+ case std::ios_base::beg:
+ break;
+ case std::ios_base::end:
+ off += end;
+ break;
+ case std::ios_base::cur:
+ off += off_type(in ? (this->gptr() - this->eback()) : (this->pptr() - this->pbase()));
+ break;
+ default:
+ return pos_type(off_type(-1));
+ }
+ if ((off_type(0) > off) || ((m_mode & std::ios_base::app) && out && (end != off))) return pos_type(off_type(-1));
+ if ((out ? off_type(this->epptr() - this->pbase()) : end) < off) return pos_type(off_type(-1));
+ if (out)
+ {
+ this->setp(this->pbase(), this->epptr());
+ this->pbump(off);
+ if (m_threshold < this->pptr()) m_threshold = this->pptr();
+ if (m_mode & std::ios_base::in)
+ {
+ if (in) this->setg(this->eback(), this->eback() + off, m_threshold);
+ else if (this->egptr() < m_threshold) this->setg(this->eback(), this->gptr(), m_threshold);
+ }
+ }
+ else if (in)
+ {
+ this->setg(this->eback(), this->eback() + off, this->egptr());
+ }
+ return pos_type(off);
+ }
+
+ virtual pos_type seekpos(pos_type pos, std::ios_base::openmode which = std::ios_base::in |std:: ios_base::out) override
+ {
+ return seekoff(off_type(pos), std::ios_base::beg, which);
+ }
+
+ virtual int_type underflow() override
+ {
+ if (!this->gptr()) return Traits::eof();
+ maximise_egptr();
+ return (this->gptr() < this->egptr()) ? Traits::to_int_type(*this->gptr()) : Traits::eof();
+ }
+
+ virtual int_type overflow(int_type ch = Traits::eof()) override
+ {
+ if (!(m_mode & std::ios_base::out)) return Traits::eof();
+ if (Traits::eq_int_type(ch, Traits::eof())) return Traits::not_eof(ch);
+ auto const put_offset(this->pptr() - this->pbase() + 1);
+ auto const threshold_offset((std::max)(m_threshold - this->pbase(), put_offset));
+ m_storage.push_back(Traits::to_char_type(ch));
+ m_storage.resize(m_storage.capacity());
+ auto const base(&m_storage[0]);
+ this->setp(base, base + m_storage.size());
+ m_threshold = base + threshold_offset;
+ if (m_mode & std::ios_base::in) this->setg(base, base + (this->gptr() - this->eback()), m_threshold);
+ this->pbump(int(put_offset));
+ return ch;
+ }
+
+ virtual int_type pbackfail(int_type ch = Traits::eof()) override
+ {
+ if (this->gptr() != this->eback())
+ {
+ if (Traits::eq_int_type(ch, Traits::eof()))
+ {
+ this->gbump(-1);
+ return Traits::not_eof(ch);
+ }
+ else if (Traits::eq(Traits::to_char_type(ch), this->gptr()[-1]))
+ {
+ this->gbump(-1);
+ return ch;
+ }
+ else if (m_mode & std::ios_base::out)
+ {
+ this->gbump(-1);
+ *this->gptr() = Traits::to_char_type(ch);
+ return ch;
+ }
+ }
+ return Traits::eof();
+ }
+
+private:
+ void setup()
+ {
+ if (m_mode & std::ios_base::out)
+ {
+ auto const end(m_storage.size());
+ m_storage.resize(m_storage.capacity());
+ if (m_storage.empty())
+ {
+ m_threshold = nullptr;
+ this->setg(nullptr, nullptr, nullptr);
+ this->setp(nullptr, nullptr);
+ }
+ else
+ {
+ auto const base(&m_storage[0]);
+ m_threshold = base + end;
+ this->setp(base, base + m_storage.size());
+ if (m_mode & std::ios_base::in) this->setg(base, base, m_threshold);
+ }
+ if (m_mode & (std::ios_base::app | std::ios_base::ate)) this->pbump(int(unsigned(end)));
+ }
+ else if (m_storage.empty())
+ {
+ this->setg(nullptr, nullptr, nullptr);
+ }
+ else if (m_mode & std::ios_base::in)
+ {
+ auto const base(&m_storage[0]);
+ this->setg(base, base, base + m_storage.size());
+ }
+ }
+
+ void adjust()
+ {
+ auto const put_offset(this->pptr() - this->pbase());
+ auto const get_offset(this->gptr() - this->eback());
+ setup();
+ if (m_mode & std::ios_base::out)
+ {
+ this->pbump(int(put_offset));
+ m_threshold = this->pptr();
+ if (m_mode & std::ios_base::in)
+ {
+ auto const base(&m_storage[0]);
+ this->setg(base, base + get_offset, m_threshold);
+ }
+ }
+ else if (m_mode & std::ios_base::in)
+ {
+ this->gbump(int(get_offset));
+ }
+ }
+
+ void maximise_egptr()
+ {
+ if (m_mode & std::ios_base::out)
+ {
+ if (m_threshold < this->pptr()) m_threshold = this->pptr();
+ if ((m_mode & std::ios_base::in) && (this->egptr() < m_threshold)) this->setg(this->eback(), this->gptr(), m_threshold);
+ }
+ }
+
+ std::ios_base::openmode m_mode;
+ mutable vector_type m_storage;
+ mutable CharT *m_threshold;
+};
+
+template <typename CharT, typename Traits = std::char_traits<CharT>, typename Allocator = std::allocator<CharT> >
+class basic_ivectorstream : public std::basic_istream<CharT, Traits>
+{
+public:
+ typedef typename basic_vectorbuf<CharT, Traits, Allocator>::vector_type vector_type;
+
+ basic_ivectorstream(std::ios_base::openmode mode = std::ios_base::in) : std::basic_istream<CharT, Traits>(&m_rdbuf), m_rdbuf(mode) { }
+ basic_ivectorstream(vector_type const &content, std::ios_base::openmode mode = std::ios_base::in) : std::basic_istream<CharT, Traits>(&m_rdbuf), m_rdbuf(content, mode) { }
+ basic_ivectorstream(vector_type &&content, std::ios_base::openmode mode = std::ios_base::in) : std::basic_istream<CharT, Traits>(&m_rdbuf), m_rdbuf(std::move(content), mode) { }
+
+ basic_vectorbuf<CharT, Traits, Allocator> *rdbuf() const { return reinterpret_cast<basic_vectorbuf<CharT, Traits, Allocator> *>(std::basic_istream<CharT, Traits>::rdbuf()); }
+ vector_type const &vec() const { return rdbuf()->vec(); }
+ void vec(const vector_type &content) { rdbuf()->vec(content); }
+ void vec(vector_type &&content) { rdbuf()->vec(std::move(content)); }
+ basic_ivectorstream &clear() { rdbuf()->clear(); return *this; }
+
+ void swap(basic_ivectorstream &that) { std::basic_istream<CharT, Traits>::swap(that); rdbuf()->swap(*that.rdbuf()); }
+
+private:
+ basic_vectorbuf<CharT, Traits, Allocator> m_rdbuf;
+};
+
+template <typename CharT, typename Traits = std::char_traits<CharT>, typename Allocator = std::allocator<CharT> >
+class basic_ovectorstream : public std::basic_ostream<CharT, Traits>
+{
+public:
+ typedef typename basic_vectorbuf<CharT, Traits, Allocator>::vector_type vector_type;
+
+ basic_ovectorstream(std::ios_base::openmode mode = std::ios_base::out) : std::basic_ostream<CharT, Traits>(&m_rdbuf), m_rdbuf(mode) { }
+ basic_ovectorstream(vector_type const &content, std::ios_base::openmode mode = std::ios_base::out) : std::basic_ostream<CharT, Traits>(&m_rdbuf), m_rdbuf(content, mode) { }
+ basic_ovectorstream(vector_type &&content, std::ios_base::openmode mode = std::ios_base::out) : std::basic_ostream<CharT, Traits>(&m_rdbuf), m_rdbuf(std::move(content), mode) { }
+
+ basic_vectorbuf<CharT, Traits, Allocator> *rdbuf() const { return reinterpret_cast<basic_vectorbuf<CharT, Traits, Allocator> *>(std::basic_ostream<CharT, Traits>::rdbuf()); }
+
+ vector_type const &vec() const { return rdbuf()->vec(); }
+ void vec(const vector_type &content) { rdbuf()->vec(content); }
+ void vec(vector_type &&content) { rdbuf()->vec(std::move(content)); }
+ basic_ovectorstream &clear() { rdbuf()->clear(); return *this; }
+ basic_ovectorstream &reserve(typename vector_type::size_type size) { rdbuf()->reserve(size); return *this; }
+
+ void swap(basic_ovectorstream &that) { std::basic_ostream<CharT, Traits>::swap(that); rdbuf()->swap(*that.rdbuf()); }
+
+private:
+ basic_vectorbuf<CharT, Traits, Allocator> m_rdbuf;
+};
+
+template <typename CharT, typename Traits = std::char_traits<CharT>, typename Allocator = std::allocator<CharT> >
+class basic_vectorstream : public std::basic_iostream<CharT, Traits>
+{
+public:
+ typedef typename basic_vectorbuf<CharT, Traits, Allocator>::vector_type vector_type;
+
+ basic_vectorstream(std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_iostream<CharT, Traits>(&m_rdbuf), m_rdbuf(mode) { }
+ basic_vectorstream(vector_type const &content, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_iostream<CharT, Traits>(&m_rdbuf), m_rdbuf(content, mode) { }
+ basic_vectorstream(vector_type &&content, std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) : std::basic_iostream<CharT, Traits>(&m_rdbuf), m_rdbuf(std::move(content), mode) { }
+
+ basic_vectorbuf<CharT, Traits, Allocator> *rdbuf() const { return reinterpret_cast<basic_vectorbuf<CharT, Traits, Allocator> *>(std::basic_iostream<CharT, Traits>::rdbuf()); }
+
+ vector_type const &vec() const { return rdbuf()->vec(); }
+ void vec(const vector_type &content) { rdbuf()->vec(content); }
+ void vec(vector_type &&content) { rdbuf()->vec(std::move(content)); }
+ basic_vectorstream &clear() { rdbuf()->clear(); return *this; }
+ basic_vectorstream &reserve(typename vector_type::size_type size) { rdbuf()->reserve(size); return *this; }
+
+ void swap(basic_vectorstream &that) { std::basic_iostream<CharT, Traits>::swap(that); rdbuf()->swap(*that.rdbuf()); }
+
+private:
+ basic_vectorbuf<CharT, Traits, Allocator> m_rdbuf;
+};
+
+typedef basic_ivectorstream<char> ivectorstream;
+typedef basic_ivectorstream<wchar_t> wivectorstream;
+typedef basic_ovectorstream<char> ovectorstream;
+typedef basic_ovectorstream<wchar_t> wovectorstream;
+typedef basic_vectorstream<char> vectorstream;
+typedef basic_vectorstream<wchar_t> wvectorstream;
+
+} // namespace util
+
+#endif // __MAME_UTIL_VECSTREAM_H__
diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt
new file mode 100644
index 00000000000..0ea37056023
--- /dev/null
+++ b/src/mame/arcade.flt
@@ -0,0 +1,1325 @@
+1942.cpp
+1943.cpp
+1945kiii.cpp
+20pacgal.cpp
+24cdjuke.cpp
+2mindril.cpp
+30test.cpp
+39in1.cpp
+3do.cpp
+3x3puzzl.cpp
+40love.cpp
+4enlinea.cpp
+4enraya.cpp
+4roses.cpp
+5clown.cpp
+8080bw.cpp
+88games.cpp
+a1supply.cpp
+ace.cpp
+acefruit.cpp
+aces1.cpp
+acesp.cpp
+acommand.cpp
+actfancr.cpp
+adp.cpp
+aeroboto.cpp
+aerofgt.cpp
+age_candy.cpp
+airbustr.cpp
+ajax.cpp
+albazc.cpp
+albazg.cpp
+aleck64.cpp
+aleisttl.cpp
+alg.cpp
+alien.cpp
+aliens.cpp
+alinvade.cpp
+allied.cpp
+alpha68k.cpp
+alvg.cpp
+amaticmg.cpp
+amazonlf.cpp
+ambush.cpp
+amerihok.cpp
+ampoker2.cpp
+amspdwy.cpp
+amusco.cpp
+angelkds.cpp
+appoooh.cpp
+aquarium.cpp
+arabian.cpp
+arachnid.cpp
+arcadecl.cpp
+argus.cpp
+aristmk4.cpp
+aristmk5.cpp
+aristmk6.cpp
+arkanoid.cpp
+armedf.cpp
+arsystems.cpp
+artmagic.cpp
+ashnojoe.cpp
+asterix.cpp
+asteroid.cpp
+astinvad.cpp
+astrafr.cpp
+astrcorp.cpp
+astrocde.cpp
+astrof.cpp
+astropc.cpp
+asuka.cpp
+atari_s1.cpp
+atari_s2.cpp
+atarifb.cpp
+atarig1.cpp
+atarig42.cpp
+atarigt.cpp
+atarigx2.cpp
+atarisy1.cpp
+atarisy2.cpp
+atarisy4.cpp
+atarittl.cpp
+ataxx.cpp
+atetris.cpp
+atlantis.cpp
+atronic.cpp
+attckufo.cpp
+atvtrack.cpp
+avalnche.cpp
+avt.cpp
+aztarac.cpp
+backfire.cpp
+badlands.cpp
+bagman.cpp
+bailey.cpp
+balsente.cpp
+bankp.cpp
+baraduke.cpp
+barata.cpp
+bartop52.cpp
+batman.cpp
+battlane.cpp
+battlera.cpp
+battlex.cpp
+battlnts.cpp
+bbusters.cpp
+beaminv.cpp
+beathead.cpp
+beezer.cpp
+belatra.cpp
+berzerk.cpp
+bestleag.cpp
+bfcobra.cpp
+bfm_ad5sw.cpp
+bfm_sc1.cpp
+bfm_sc2.cpp
+bfm_sc4.cpp
+bfm_sc5sw.cpp
+bfm_swp.cpp
+bfmsys83.cpp
+bfmsys85.cpp
+bgt.cpp
+big10.cpp
+bigevglf.cpp
+bigstrkb.cpp
+bingo.cpp
+bingoc.cpp
+bingoman.cpp
+bingor.cpp
+bionicc.cpp
+bishi.cpp
+bking.cpp
+blackt96.cpp
+bladestl.cpp
+blitz.cpp
+blitz68k.cpp
+blktiger.cpp
+blmbycar.cpp
+blockade.cpp
+blockhl.cpp
+blockout.cpp
+bloodbro.cpp
+blstroid.cpp
+blueprnt.cpp
+bmcbowl.cpp
+bmcpokr.cpp
+bnstars.cpp
+bntyhunt.cpp
+bogeyman.cpp
+bombjack.cpp
+boogwing.cpp
+bottom9.cpp
+bowltry.cpp
+boxer.cpp
+brkthru.cpp
+bsktball.cpp
+btime.cpp
+btoads.cpp
+bublbobl.cpp
+buggychl.cpp
+buster.cpp
+bwidow.cpp
+bwing.cpp
+by17.cpp
+by35.cpp
+by6803.cpp
+by68701.cpp
+byvid.cpp
+bzone.cpp
+cabal.cpp
+cabaret.cpp
+calchase.cpp
+calomega.cpp
+calorie.cpp
+canyon.cpp
+capbowl.cpp
+capcom.cpp
+capr1.cpp
+caprcyc.cpp
+cardline.cpp
+carjmbre.cpp
+carpolo.cpp
+carrera.cpp
+castle.cpp
+caswin.cpp
+cave.cpp
+cavepc.cpp
+cb2001.cpp
+cball.cpp
+cbasebal.cpp
+cbuster.cpp
+ccastles.cpp
+cchance.cpp
+cchasm.cpp
+cclimber.cpp
+cdi.cpp
+centiped.cpp
+cesclass.cpp
+chaknpop.cpp
+cham24.cpp
+champbas.cpp
+champbwl.cpp
+chanbara.cpp
+chance32.cpp
+changela.cpp
+cheekyms.cpp
+chexx.cpp
+chicago.cpp
+chihiro.cpp
+chinagat.cpp
+chinsan.cpp
+chqflag.cpp
+chsuper.cpp
+cidelsa.cpp
+cinemat.cpp
+circus.cpp
+circusc.cpp
+cischeat.cpp
+citycon.cpp
+clayshoo.cpp
+cliffhgr.cpp
+cloak.cpp
+cloud9.cpp
+clowndwn.cpp
+clshroad.cpp
+cmmb.cpp
+cninja.cpp
+cntsteer.cpp
+cobra.cpp
+cocoloco.cpp
+coinmstr.cpp
+coinmvga.cpp
+combatsc.cpp
+comebaby.cpp
+commando.cpp
+compgolf.cpp
+contra.cpp
+coolpool.cpp
+coolridr.cpp
+cop01.cpp
+cops.cpp
+copsnrob.cpp
+corona.cpp
+cosmic.cpp
+cps1.cpp
+cps2.cpp
+cps3.cpp
+crbaloon.cpp
+crgolf.cpp
+crimfght.cpp
+crospang.cpp
+crshrace.cpp
+crystal.cpp
+cshooter.cpp
+csplayh5.cpp
+cswat.cpp
+cubeqst.cpp
+cubo.cpp
+cultures.cpp
+cupidon.cpp
+cv1k.cpp
+cvs.cpp
+cyberbal.cpp
+cybertnk.cpp
+cyclemb.cpp
+d9final.cpp
+dacholer.cpp
+dai3wksi.cpp
+dambustr.cpp
+darius.cpp
+darkmist.cpp
+darkseal.cpp
+dassault.cpp
+dblcrown.cpp
+dblewing.cpp
+dbz.cpp
+dcheese.cpp
+dcon.cpp
+dday.cpp
+ddayjlc.cpp
+ddealer.cpp
+ddenlovr.cpp
+ddragon.cpp
+ddragon3.cpp
+ddribble.cpp
+de_2.cpp
+de_3.cpp
+de_3b.cpp
+deadang.cpp
+dec0.cpp
+dec8.cpp
+deco_ld.cpp
+deco_mlc.cpp
+deco156.cpp
+deco32.cpp
+decocass.cpp
+deniam.cpp
+deshoros.cpp
+destroyr.cpp
+dfruit.cpp
+dgpix.cpp
+dietgo.cpp
+discoboy.cpp
+diverboy.cpp
+djboy.cpp
+djmain.cpp
+dkong.cpp
+dlair.cpp
+dlair2.cpp
+dmndrby.cpp
+docastle.cpp
+dogfgt.cpp
+dominob.cpp
+dooyong.cpp
+dorachan.cpp
+dotrikun.cpp
+dragrace.cpp
+dreambal.cpp
+dreamwld.cpp
+drgnmst.cpp
+dribling.cpp
+drmicro.cpp
+drtomy.cpp
+drw80pkr.cpp
+dunhuang.cpp
+dwarfd.cpp
+dynadice.cpp
+dynax.cpp
+dynduke.cpp
+ecoinf1.cpp
+ecoinf2.cpp
+ecoinf3.cpp
+ecoinfr.cpp
+egghunt.cpp
+electra.cpp
+embargo.cpp
+enigma2.cpp
+eolith.cpp
+eolith16.cpp
+epos.cpp
+eprom.cpp
+equites.cpp
+ertictac.cpp
+esd16.cpp
+esh.cpp
+espial.cpp
+esripsys.cpp
+ettrivia.cpp
+exedexes.cpp
+exerion.cpp
+exidy.cpp
+exidy440.cpp
+exidyttl.cpp
+expro02.cpp
+exprraid.cpp
+exterm.cpp
+extrema.cpp
+exzisus.cpp
+f1gp.cpp
+f-32.cpp
+famibox.cpp
+fantland.cpp
+fastfred.cpp
+fastinvaders.cpp
+fastlane.cpp
+fcombat.cpp
+fcrash.cpp
+feversoc.cpp
+fgoal.cpp
+finalizr.cpp
+fireball.cpp
+firebeat.cpp
+firefox.cpp
+firetrap.cpp
+firetrk.cpp
+fitfight.cpp
+flicker.cpp
+flipjack.cpp
+flkatck.cpp
+flower.cpp
+flstory.cpp
+flyball.cpp
+foodf.cpp
+forte2.cpp
+fortecar.cpp
+freekick.cpp
+fresh.cpp
+fromanc2.cpp
+fromance.cpp
+fruitpc.cpp
+fungames.cpp
+funkball.cpp
+funkybee.cpp
+funkyjet.cpp
+funworld.cpp
+funybubl.cpp
+fuukifg2.cpp
+fuukifg3.cpp
+g627.cpp
+gaelco.cpp
+gaelco2.cpp
+gaelco3d.cpp
+gaiden.cpp
+gal3.cpp
+galaga.cpp
+galastrm.cpp
+galaxi.cpp
+galaxia.cpp
+galaxian.cpp
+galaxold.cpp
+galgame.cpp
+galivan.cpp
+galpani2.cpp
+galpani3.cpp
+galpanic.cpp
+galspnbl.cpp
+gambl186.cpp
+gamecstl.cpp
+gameplan.cpp
+gammagic.cpp
+gamtor.cpp
+gaplus.cpp
+gatron.cpp
+gauntlet.cpp
+gberet.cpp
+gcpinbal.cpp
+gei.cpp
+ggconnie.cpp
+ghosteo.cpp
+gijoe.cpp
+ginganin.cpp
+gkigt.cpp
+gladiatr.cpp
+glass.cpp
+globalfr.cpp
+globalvr.cpp
+gluck2.cpp
+gng.cpp
+go2000.cpp
+goal92.cpp
+goindol.cpp
+goldngam.cpp
+goldnpkr.cpp
+goldstar.cpp
+gomoku.cpp
+good.cpp
+goodejan.cpp
+gotcha.cpp
+gottlieb.cpp
+gotya.cpp
+gp_1.cpp
+gp_2.cpp
+gpworld.cpp
+gradius3.cpp
+grchamp.cpp
+gridlee.cpp
+groundfx.cpp
+gstream.cpp
+gstriker.cpp
+gsword.cpp
+gticlub.cpp
+gts1.cpp
+gts3.cpp
+gts3a.cpp
+gts80.cpp
+gts80a.cpp
+gts80b.cpp
+guab.cpp
+gumbo.cpp
+gunbustr.cpp
+gundealr.cpp
+gunpey.cpp
+gunsmoke.cpp
+gyruss.cpp
+halleys.cpp
+hanaawas.cpp
+hankin.cpp
+harddriv.cpp
+hazelgr.cpp
+hcastle.cpp
+headonb.cpp
+hexion.cpp
+hideseek.cpp
+higemaru.cpp
+highvdeo.cpp
+hikaru.cpp
+himesiki.cpp
+hitme.cpp
+hitpoker.cpp
+hnayayoi.cpp
+hng64.cpp
+holeland.cpp
+homedata.cpp
+homerun.cpp
+hornet.cpp
+hotblock.cpp
+hotstuff.cpp
+hshavoc.cpp
+hvyunit.cpp
+hyhoo.cpp
+hyperspt.cpp
+hyprduel.cpp
+ice_bozopail.cpp
+ice_tbd.cpp
+icecold.cpp
+ichiban.cpp
+igs_fear.cpp
+igs_m027.cpp
+igs_m036.cpp
+igs009.cpp
+igs011.cpp
+igs017.cpp
+igspc.cpp
+igspoker.cpp
+ikki.cpp
+imolagp.cpp
+inder.cpp
+intrscti.cpp
+inufuku.cpp
+invqix.cpp
+iqblock.cpp
+irobot.cpp
+ironhors.cpp
+istellar.cpp
+iteagle.cpp
+itech32.cpp
+itech8.cpp
+itgambl2.cpp
+itgambl3.cpp
+itgamble.cpp
+jack.cpp
+jackal.cpp
+jackie.cpp
+jackpool.cpp
+jaguar.cpp
+jailbrek.cpp
+jalmah.cpp
+jangou.cpp
+jankenmn.cpp
+jantotsu.cpp
+jchan.cpp
+jclub2.cpp
+jedi.cpp
+jeutel.cpp
+jokrwild.cpp
+jollyjgr.cpp
+jongkyo.cpp
+joystand.cpp
+jp.cpp
+jpmimpct.cpp
+jpmimpctsw.cpp
+jpmmps.cpp
+jpms80.cpp
+jpmsru.cpp
+jpmsys5.cpp
+jpmsys5sw.cpp
+jpmsys7.cpp
+jrpacman.cpp
+jubilee.cpp
+junofrst.cpp
+jvh.cpp
+kaneko16.cpp
+kangaroo.cpp
+karnov.cpp
+kas89.cpp
+kchamp.cpp
+kenseim.cpp
+kickgoal.cpp
+kingdrby.cpp
+kingobox.cpp
+kingpin.cpp
+kinst.cpp
+kissproto.cpp
+klax.cpp
+kncljoe.cpp
+koftball.cpp
+koikoi.cpp
+konamigq.cpp
+konamigv.cpp
+konamigx.cpp
+konamim2.cpp
+konendev.cpp
+kontest.cpp
+kopunch.cpp
+ksayakyu.cpp
+ksys573.cpp
+kungfur.cpp
+kurukuru.cpp
+kyugo.cpp
+labyrunr.cpp
+ladybug.cpp
+ladyfrog.cpp
+laserbas.cpp
+laserbat.cpp
+lasso.cpp
+lastbank.cpp
+lastduel.cpp
+lastfght.cpp
+laz_aftrshok.cpp
+laz_awetoss.cpp
+laz_ribrac.cpp
+lazercmd.cpp
+lbeach.cpp
+legionna.cpp
+leland.cpp
+lemmings.cpp
+lethal.cpp
+lethalj.cpp
+lgp.cpp
+liberate.cpp
+liberatr.cpp
+limenko.cpp
+lindbergh.cpp
+littlerb.cpp
+lkage.cpp
+lockon.cpp
+looping.cpp
+lordgun.cpp
+lsasquad.cpp
+ltcasino.cpp
+ltd.cpp
+luckgrln.cpp
+lucky74.cpp
+lvcards.cpp
+lwings.cpp
+m10.cpp
+m107.cpp
+m14.cpp
+m52.cpp
+m57.cpp
+m58.cpp
+m62.cpp
+m63.cpp
+m72.cpp
+m79amb.cpp
+m90.cpp
+m92.cpp
+macrossp.cpp
+macs.cpp
+madalien.cpp
+madmotor.cpp
+magic10.cpp
+magicard.cpp
+magicfly.cpp
+magictg.cpp
+magmax.cpp
+magtouch.cpp
+mainevt.cpp
+mainsnk.cpp
+majorpkr.cpp
+malzak.cpp
+manohman.cpp
+mappy.cpp
+marineb.cpp
+marinedt.cpp
+mario.cpp
+markham.cpp
+mastboy.cpp
+matmania.cpp
+maxaflex.cpp
+maygay1bsw.cpp
+maygayep.cpp
+maygaysw.cpp
+maygayv1.cpp
+mayumi.cpp
+mazerbla.cpp
+mcatadv.cpp
+mcr.cpp
+mcr3.cpp
+mcr68.cpp
+meadows.cpp
+meadwttl.cpp
+mediagx.cpp
+megadrvb.cpp
+megaphx.cpp
+megaplay.cpp
+megasys1.cpp
+megatech.cpp
+megazone.cpp
+meijinsn.cpp
+mephistp.cpp
+merit.cpp
+meritm.cpp
+mermaid.cpp
+metalmx.cpp
+metlclsh.cpp
+metro.cpp
+mexico86.cpp
+meyc8080.cpp
+meyc8088.cpp
+mgames.cpp
+mgavegas.cpp
+mgolf.cpp
+mhavoc.cpp
+micro3d.cpp
+micropin.cpp
+midas.cpp
+midqslvr.cpp
+midtunit.cpp
+midvunit.cpp
+midwunit.cpp
+midxunit.cpp
+midyunit.cpp
+midzeus.cpp
+mikie.cpp
+mil4000.cpp
+miniboy7.cpp
+minivadr.cpp
+mirage.cpp
+mirax.cpp
+missb2.cpp
+missile.cpp
+mitchell.cpp
+mjkjidai.cpp
+mjsister.cpp
+mlanding.cpp
+mmagic.cpp
+mmm.cpp
+model1.cpp
+model2.cpp
+model3.cpp
+mogura.cpp
+mole.cpp
+momoko.cpp
+monacogp.cpp
+monzagp.cpp
+moo.cpp
+mosaic.cpp
+mouser.cpp
+mpu12wbk.cpp
+mpu2.cpp
+mpu3.cpp
+mpu4.cpp
+mpu4avan.cpp
+mpu4bwb.cpp
+mpu4concept.cpp
+mpu4crystal.cpp
+mpu4dealem.cpp
+mpu4empire.cpp
+mpu4mdm.cpp
+mpu4misc.cpp
+mpu4mod2sw.cpp
+mpu4mod4yam.cpp
+mpu4plasma.cpp
+mpu4sw.cpp
+mpu4union.cpp
+mpu4vid.cpp
+mpu5.cpp
+mquake.cpp
+mrdo.cpp
+mrflea.cpp
+mrgame.cpp
+mrjong.cpp
+ms32.cpp
+msisaac.cpp
+mugsmash.cpp
+multfish.cpp
+multfish_boot.cpp
+multigam.cpp
+munchmo.cpp
+murogem.cpp
+murogmbl.cpp
+mustache.cpp
+mw18w.cpp
+mw8080bw.cpp
+mwarr.cpp
+mwsub.cpp
+mystston.cpp
+mystwarr.cpp
+n8080.cpp
+namcofl.cpp
+namcona1.cpp
+namconb1.cpp
+namcond1.cpp
+namcops2.cpp
+namcos1.cpp
+namcos10.cpp
+namcos11.cpp
+namcos12.cpp
+namcos2.cpp
+namcos21.cpp
+namcos22.cpp
+namcos23.cpp
+namcos86.cpp
+naomi.cpp
+naughtyb.cpp
+nbmj8688.cpp
+nbmj8891.cpp
+nbmj8900.cpp
+nbmj8991.cpp
+nbmj9195.cpp
+nemesis.cpp
+neogeo.cpp
+neogeo_noslot.cpp
+neoprint.cpp
+neptunp2.cpp
+news.cpp
+nexus3d.cpp
+nibble.cpp
+nightgal.cpp
+ninjakd2.cpp
+ninjaw.cpp
+nitedrvr.cpp
+niyanpai.cpp
+nmg5.cpp
+nmk16.cpp
+norautp.cpp
+nova2001.cpp
+nsm.cpp
+nsmpoker.cpp
+nss.cpp
+nwk-tr.cpp
+nycaptor.cpp
+nyny.cpp
+offtwall.cpp
+ohmygod.cpp
+ojankohs.cpp
+olibochu.cpp
+omegrace.cpp
+oneshot.cpp
+onetwo.cpp
+opwolf.cpp
+orbit.cpp
+othello.cpp
+othunder.cpp
+overdriv.cpp
+pachifev.cpp
+pacland.cpp
+pacman.cpp
+pandoras.cpp
+pangofun.cpp
+panicr.cpp
+paradise.cpp
+paranoia.cpp
+parodius.cpp
+pasha2.cpp
+pass.cpp
+pastelg.cpp
+pbaction.cpp
+pcat_dyn.cpp
+pcat_nit.cpp
+pcktgal.cpp
+pcxt.cpp
+pengadvb.cpp
+pengo.cpp
+peplus.cpp
+peyper.cpp
+pgm.cpp
+pgm2.cpp
+phoenix.cpp
+photon.cpp
+photon2.cpp
+photoply.cpp
+piggypas.cpp
+pinball2k.cpp
+pingpong.cpp
+pinkiri8.cpp
+pipedrm.cpp
+pipeline.cpp
+pirates.cpp
+pitnrun.cpp
+pkscram.cpp
+pktgaldx.cpp
+play_1.cpp
+play_2.cpp
+play_3.cpp
+play_5.cpp
+playch10.cpp
+playmark.cpp
+pluto5.cpp
+plygonet.cpp
+pntnpuzl.cpp
+pokechmp.cpp
+poker72.cpp
+polepos.cpp
+policetr.cpp
+polyplay.cpp
+pong.cpp
+poolshrk.cpp
+pooyan.cpp
+popeye.cpp
+popobear.cpp
+popper.cpp
+portrait.cpp
+potgoldu.cpp
+powerbal.cpp
+powerins.cpp
+ppmast93.cpp
+prehisle.cpp
+proconn.cpp
+progolf.cpp
+pse.cpp
+psikyo.cpp
+psikyo4.cpp
+psikyosh.cpp
+psychic5.cpp
+pturn.cpp
+puckpkmn.cpp
+punchout.cpp
+pyson.cpp
+pzletime.cpp
+qdrmfgp.cpp
+qix.cpp
+quakeat.cpp
+quantum.cpp
+quasar.cpp
+queen.cpp
+quizdna.cpp
+quizo.cpp
+quizpani.cpp
+quizpun2.cpp
+quizshow.cpp
+r2dtank.cpp
+r2dx_v33.cpp
+rabbit.cpp
+raiden.cpp
+raiden2.cpp
+rallyx.cpp
+rampart.cpp
+ramtek.cpp
+rastan.cpp
+rastersp.cpp
+rbisland.cpp
+rbmk.cpp
+rcorsair.cpp
+re900.cpp
+realbrk.cpp
+redalert.cpp
+redclash.cpp
+relief.cpp
+renegade.cpp
+retofinv.cpp
+rgum.cpp
+rltennis.cpp
+rmhaihai.cpp
+rockrage.cpp
+rocnrope.cpp
+rohga.cpp
+rollerg.cpp
+rollext.cpp
+rollrace.cpp
+rotaryf.cpp
+roul.cpp
+route16.cpp
+rowamet.cpp
+royalmah.cpp
+rpunch.cpp
+runaway.cpp
+rungun.cpp
+s11.cpp
+s11a.cpp
+s11b.cpp
+s11c.cpp
+s3.cpp
+s4.cpp
+s6.cpp
+s6a.cpp
+s7.cpp
+s8.cpp
+s8a.cpp
+s9.cpp
+safarir.cpp
+sam.cpp
+sandscrp.cpp
+sangho.cpp
+sanremmg.cpp
+sanremo.cpp
+sauro.cpp
+savquest.cpp
+sbasketb.cpp
+sbowling.cpp
+sbrkout.cpp
+sbugger.cpp
+scm_500.cpp
+scobra.cpp
+scotrsht.cpp
+scramble.cpp
+scregg.cpp
+sderby.cpp
+seabattl.cpp
+sealy.cpp
+seattle.cpp
+segac2.cpp
+segacoin.cpp
+segae.cpp
+segag80r.cpp
+segag80v.cpp
+segahang.cpp
+segajw.cpp
+segald.cpp
+segam1.cpp
+segaorun.cpp
+segas16a.cpp
+segas16b.cpp
+segas18.cpp
+segas24.cpp
+segas32.cpp
+segasp.cpp
+segaufo.cpp
+segaxbd.cpp
+segaybd.cpp
+seibuspi.cpp
+seicross.cpp
+sengokmj.cpp
+senjyo.cpp
+seta.cpp
+seta2.cpp
+sf.cpp
+sfbonus.cpp
+sfcbox.cpp
+sfkick.cpp
+sg1000a.cpp
+shadfrce.cpp
+shangha3.cpp
+shanghai.cpp
+shangkid.cpp
+shaolins.cpp
+shisen.cpp
+shootout.cpp
+shougi.cpp
+shtzone.cpp
+shuuz.cpp
+sidearms.cpp
+sidepckt.cpp
+sigmab52.cpp
+sigmab98.cpp
+silkroad.cpp
+silvmil.cpp
+simpl156.cpp
+simple_st0016.cpp
+simpsons.cpp
+skeetsht.cpp
+skimaxx.cpp
+skullxbo.cpp
+skyarmy.cpp
+skydiver.cpp
+skyfox.cpp
+skykid.cpp
+skylncr.cpp
+skyraid.cpp
+slapfght.cpp
+slapshot.cpp
+sleic.cpp
+sliver.cpp
+slotcarn.cpp
+smsmcorp.cpp
+snesb.cpp
+snk.cpp
+snk6502.cpp
+snk68.cpp
+snookr10.cpp
+snowbros.cpp
+solomon.cpp
+sonson.cpp
+sothello.cpp
+spacefb.cpp
+spaceg.cpp
+spbactn.cpp
+spcforce.cpp
+spdodgeb.cpp
+spectra.cpp
+speedatk.cpp
+speedbal.cpp
+speedspn.cpp
+speglsht.cpp
+spiders.cpp
+spinb.cpp
+splash.cpp
+splus.cpp
+spoker.cpp
+spool99.cpp
+sprcros2.cpp
+sprint2.cpp
+sprint4.cpp
+sprint8.cpp
+spy.cpp
+srmp2.cpp
+srmp5.cpp
+srmp6.cpp
+srumbler.cpp
+ssfindo.cpp
+sshangha.cpp
+sshot.cpp
+ssingles.cpp
+sslam.cpp
+ssozumo.cpp
+sspeedr.cpp
+ssrj.cpp
+sstrangr.cpp
+ssv.cpp
+st_mp100.cpp
+st_mp200.cpp
+stactics.cpp
+stadhero.cpp
+starcrus.cpp
+starfire.cpp
+starshp1.cpp
+starwars.cpp
+statriv2.cpp
+stellafr.cpp
+stfight.cpp
+stlforce.cpp
+strnskil.cpp
+stuntair.cpp
+stv.cpp
+su2000.cpp
+sub.cpp
+subhuntr.cpp
+subs.cpp
+subsino.cpp
+subsino2.cpp
+summit.cpp
+sumt8035.cpp
+suna16.cpp
+suna8.cpp
+supbtime.cpp
+supdrapo.cpp
+supduck.cpp
+superchs.cpp
+supercrd.cpp
+superdq.cpp
+superqix.cpp
+supertnk.cpp
+superwng.cpp
+suprgolf.cpp
+suprloco.cpp
+suprnova.cpp
+suprridr.cpp
+suprslam.cpp
+surpratk.cpp
+system1.cpp
+system16.cpp
+tagteam.cpp
+tail2nos.cpp
+taito.cpp
+taito_b.cpp
+taito_f2.cpp
+taito_f3.cpp
+taito_h.cpp
+taito_l.cpp
+taito_o.cpp
+taito_x.cpp
+taito_z.cpp
+taitoair.cpp
+taitogn.cpp
+taitojc.cpp
+taitopjc.cpp
+taitosj.cpp
+taitottl.cpp
+taitotx.cpp
+taitotz.cpp
+taitowlf.cpp
+tank8.cpp
+tankbatt.cpp
+tankbust.cpp
+taotaido.cpp
+tapatune.cpp
+targeth.cpp
+tasman.cpp
+tatsumi.cpp
+tattack.cpp
+taxidriv.cpp
+tbowl.cpp
+tceptor.cpp
+tcl.cpp
+techno.cpp
+tecmo.cpp
+tecmo16.cpp
+tecmosys.cpp
+tehkanwc.cpp
+tempest.cpp
+terracre.cpp
+tetrisp2.cpp
+tgtpanic.cpp
+thayers.cpp
+thedealr.cpp
+thedeep.cpp
+thepit.cpp
+thief.cpp
+thoop2.cpp
+thunderj.cpp
+thunderx.cpp
+tiamc1.cpp
+tickee.cpp
+tigeroad.cpp
+timelimt.cpp
+timeplt.cpp
+timetrv.cpp
+tmaster.cpp
+tmmjprd.cpp
+tmnt.cpp
+tmspoker.cpp
+tnzs.cpp
+toaplan1.cpp
+toaplan2.cpp
+toki.cpp
+tokyocop.cpp
+tomcat.cpp
+tonton.cpp
+toobin.cpp
+topspeed.cpp
+toratora.cpp
+tourtabl.cpp
+tourvis.cpp
+toypop.cpp
+tp84.cpp
+trackfld.cpp
+travrusa.cpp
+triforce.cpp
+triplhnt.cpp
+truco.cpp
+trucocl.cpp
+trvmadns.cpp
+trvquest.cpp
+tryout.cpp
+tsamurai.cpp
+ttchamp.cpp
+tubep.cpp
+tugboat.cpp
+tumbleb.cpp
+tumblep.cpp
+tunhunt.cpp
+turbo.cpp
+turrett.cpp
+tutankhm.cpp
+tvcapcom.cpp
+twin16.cpp
+twincobr.cpp
+twinkle.cpp
+twins.cpp
+tx1.cpp
+uapce.cpp
+ultraman.cpp
+ultratnk.cpp
+ultrsprt.cpp
+umipoker.cpp
+undrfire.cpp
+unico.cpp
+unkhorse.cpp
+upscope.cpp
+usgames.cpp
+vamphalf.cpp
+vaportra.cpp
+vastar.cpp
+vball.cpp
+vcombat.cpp
+vd.cpp
+vectrex.cpp
+vega.cpp
+vegaeo.cpp
+vegas.cpp
+vendetta.cpp
+vertigo.cpp
+vicdual.cpp
+victory.cpp
+videopin.cpp
+videopkr.cpp
+vigilant.cpp
+vindictr.cpp
+viper.cpp
+vlc.cpp
+volfied.cpp
+voyager.cpp
+vp101.cpp
+vpoker.cpp
+vroulet.cpp
+vsnes.cpp
+vulgus.cpp
+wacky_gator.cpp
+wallc.cpp
+wardner.cpp
+warpsped.cpp
+warpwarp.cpp
+warriorb.cpp
+wc90.cpp
+wc90b.cpp
+wecleman.cpp
+welltris.cpp
+wgp.cpp
+wheelfir.cpp
+white_mod.cpp
+whitestar.cpp
+wico.cpp
+wildpkr.cpp
+williams.cpp
+wink.cpp
+wiping.cpp
+witch.cpp
+wiz.cpp
+wmg.cpp
+wms.cpp
+wolfpack.cpp
+wpc_95.cpp
+wpc_an.cpp
+wpc_dcs.cpp
+wpc_dot.cpp
+wpc_flip1.cpp
+wpc_flip2.cpp
+wpc_s.cpp
+wrally.cpp
+wwfsstar.cpp
+wyvernf0.cpp
+xain.cpp
+xexex.cpp
+xmen.cpp
+xorworld.cpp
+xtheball.cpp
+xtom3d.cpp
+xxmissio.cpp
+xybots.cpp
+xyonix.cpp
+yiear.cpp
+yunsun16.cpp
+yunsung8.cpp
+zac_1.cpp
+zac_2.cpp
+zac_proto.cpp
+zac2650.cpp
+zaccaria.cpp
+zaxxon.cpp
+zerozone.cpp
+zn.cpp
+zodiack.cpp
+zr107.cpp
diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst
deleted file mode 100644
index 76a780960b3..00000000000
--- a/src/mame/arcade.lst
+++ /dev/null
@@ -1,32732 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-/******************************************************************************
-
- arcade.lst
-
- List of all enabled drivers in the system. This file is parsed by
- makelist.exe, sorted, and output as C code describing the drivers.
-
-******************************************************************************/
-
-
-// "Pacman hardware" games
-puckman // (c) 1980 Namco
-puckmanb // bootleg
-puckmanf // hack
-puckmanh // hack
-pacman // (c) 1980 Midway
-pacmanf // hack
-puckmod // (c) 1981 Namco
-pacmod // (c) 1981 Midway
-pacmanjpm // bootleg
-newpuc2 // hack
-newpuc2b // hack
-pacuman // bootleg
-newpuckx // hack
-pacmansp // hack
-pacheart // hack
-bucaner // hack
-hangly // hack
-hangly2 // hack
-hangly3 // hack
-popeyeman // hack
-crockman // 1980 bootleg (RENE PIERRE)
-piranhah // hack
-abscam // hack
-crush // (c) 1981 Kural Samno Electric Ltd
-crushbl // bootleg
-crushbl2 // bootleg
-crushbl3 // bootleg
-crush2 // (c) 1981 Kural Esco Electric Ltd - bootleg?
-crush3 // Kural Electric Ltd - bootleg?
-crush4 // Kural TWT
-maketrax // (c) 1981 Williams, high score table says KRL (fur Kural)
-maketrxb // (c) 1981 [Kural] (Williams license)
-korosuke // (c) 1981 Kural Electric
-crushrlf // bootleg
-mbrush // 1981 bootleg
-paintrlr // 1981 bootleg
-crushs // 1981 bootleg
-pacplus // (c) 1982 Namco (Midway license)
-joyman // hack
-ctrpllrp // hack
-eyes // (c) 1982 Digitrex Techstar + "Rockola presents"
-eyes2 // (c) 1982 Techstar + "Rockola presents"
-eyesb // bootleg
-eyeszac // (c) 1982 Techstar / Zaccaria
-eyeszacb // bootleg
-birdiy // (c) 1983 Mama Top
-mrtnt // (c) 1983 Telko
-gorkans // (c) 1984 Techstar
-eggor // (c) 1983 Telko
-jumpshot // (c) 1985 Bally Midway
-jumpshotp // (c) 1985 Bally Midway
-shootbul // (c) 1985 Bally Midway
-piranha // GL
-piranhao // GL
-nmouse // (c) 1981 Amenip (Palcom Queen River)
-nmouseb // (c) 1981 Amenip Nova Games Ltd.
-mspacman // (c) 1981 Midway // made by General Computer
-mspacmancr // bootleg on Crush Roller board
-mspacmnf // hack
-mspacmat // hack
-msheartb // hack
-mspacmanbg // bootleg
-mspacmanbgd // bootleg
-mspacmanbcc // bootleg
-mspacmanblt // bootleg
-clubpacm // Miky SRL
-clubpacma // Miky SRL
-clubpacmb // Miky SRL
-woodpeck // (c) 1981 Amenip (Palcom Queen River)
-woodpeca // (c) 1981 Amenip Nova Games Ltd.
-mspacmab // bootleg
-mspacmbe // bootleg
-mspacii // bootleg
-mspacii2 // bootleg
-pacgal // hack
-mspacpls // hack
-ponpoko // (c) 1982 Sigma Ent. Inc.
-ponpokov // (c) 1982 Sigma Ent. Inc. + Venture Line license
-candory // graphics hack of Ponpoko
-lizwiz // (c) 1985 Techstar + "Sunn presents"
-alibaba // (c) 1982 Sega
-alibabab // Mustafa" and 40 Thieves (Ali Baba bootleg)
-dremshpr // (c) 1982 Sanritsu
-vanvan // (c) 1983 Sanritsu
-vanvank // (c) 1983 Karateco (bootleg?)
-vanvanb // (c) 1983 Karateco (bootleg?)
-bwcasino // (c) 1983 Epos Corporation
-acitya // (c) 1983 Epos Corporation
-theglobp // (c) 1983 Epos Corporation
-sprglobp // (c) 1983 Epos Corporation
-sprglbpg // German bootleg
-beastf // (c) 1984 Epos Corporation
-rocktrv2 // (c) 1986 Triumph Software Inc
-bigbucks // (c) 1986 Dynasoft Inc.
-numcrash // (c) 1983 Hanshin Goraku / "Peni"
-mschamp // hack by RAYGLO MFG "Zola-Puc" (c) 1992/1993
-mschamps // hack (hack of the Rayglo hack?)
-cannonbp // hack
-superabc // hack
-superabco // hack
-pengojpm // bootleg
-pengopac // bootleg
-
-// S2650 Pacman Kits
-drivfrcp // (c) 1984 Shinkai Inc. (Magic Eletronics Inc. license)
-8bpm // (c) 1985 Seatongrove Ltd (Magic Eletronics USA license)
-porky // (c) 1985 Shinkai Inc. (Magic Eletronics Inc. license)
-pengo // 834-0386 (c) 1982 Sega
-pengo2 // 834-0386 (c) 1982 Sega
-pengo2u // 834-0386 (c) 1982 Sega
-pengo3u // 834-0386 (c) 1982 Sega
-pengo4 // 834-0386 (c) 1982 Sega
-pengob // bootleg
-penta // bootleg
-jrpacmbl // bootleg on Pengo HW
-jrpacman // (c) 1983 Midway
-jrpacmanf // speedup hack
-
-// Epos games
-megadon // (c) 1982
-catapult // (c) 1982
-suprglob // (c) 1983
-theglob // (c) 1983
-theglob2 // (c) 1983
-theglob3 // (c) 1983
-igmo // (c) 1984
-dealer // (c) 198?
-revenger // (c) 1984
-
-// "Galaxian hardware" games
-galaxian // (c) Namco
-galaxiana // (c) Namco
-galaxianm // (c) Midway
-galaxianmo // (c) Midway
-galaxiant // (c) Taito
-galaxiani // (c) Irem
-galaxrf // bootleg (Recreativos Franco)
-galaxrfgg // bootleg (Recreativos Franco)
-superg // hack
-supergs // Silver Systems hack
-galapx // hack
-moonaln // [Nichibutsu] (Karateco license) or hack
-galap1 // hack
-galap4 // hack
-galturbo // hack
-swarm // hack
-zerotime // hack
-zerotimed // hack
-starfght // hack
-galaxbsf // hack
-galaxianbl // bootleg
-galaxbsf2 // bootleg
-kamakazi3 // Video Games (UK) Ltd., hack or bootleg?
-tst_galx // Galaxian Test ROM
-gmgalax // bootleg
-pisces // Subelectro
-piscesb // bootleg
-omni // bootleg
-uniwars // (c) Irem
-gteikoku // (c) Irem
-gteikokb // bootleg
-gteikob2 // bootleg
-galemp // (c) Taito do Brasil
-asideral // bootleg
-pajaroes // bootleg
-spacbatt // bootleg
-spacbat2 // bootleg
-spacempr // bootleg
-skyraidr // bootleg
-batman2 // bootleg
-warofbug // (c) 1981 Armenia
-warofbugu // (c) 1981 Armenia
-warofbugg // German Version
-spactrai //
-redufo // (c) Artic
-redufob // bootleg
-exodus // Subelectro - bootleg?
-streakng // [1980] Shoei
-streaknga // [1980] Shoei
-pacmanbl // bootleg
-pacmanbla // bootleg
-phoenxp2 // bootleg
-atlantisb // bootleg
-tenspot // (c) 1982 Thomas Automatics
-devilfsg // (c) 1984 Vision / Artic (bootleg?)
-zigzagb // (c) 1982 LAX (bootleg)
-zigzagb2 // (c) 1982 LAX (bootleg)
-jumpbug // (c) 1981 Rock-ola
-jumpbugb // (c) 1981 Sega
-levers // (c) 1983 Rock-ola
-azurian // (c) 1982 Rait Electronics Ltd
-orbitron // (c) 1982 Signatron USA (Arcade Tv Game List - P.160, Left, 22 from top)
-mooncrgx // bootleg
-mooncrst // (c) 1980 Nichibutsu
-mooncrstu // (c) 1980 Nichibutsu USA
-mooncrsto // (c) 1980 Nichibutsu
-mooncrstg // (c) 1980 Gremlin
-mooncrstuk // (c) 1980 Nichibutsu UK
-mooncrstuku // (c) 1980 Nichibutsu UK
-smooncrs // Gremlin
-sstarcrs // Taito (Brazil)
-mooncmw // bootleg
-mooncrsb // bootleg
-mooncrs2 // bootleg
-starfgmc // bootleg
-spcdrag // bootleg
-stera // bootleg
-spcdraga // bootleg
-mooncreg // bootleg
-mooncrs3 // bootleg
-mooncrs4 // bootleg
-fantazia // bootleg
-moonqsr // (c) 1980 Nichibutsu
-mshuttle // (c) 1981 Nichibutsu
-mshuttle2 // (c) 1981 Nichibutsu
-mshuttlej // (c) 1981 Nichibutsu
-mshuttlej2 // (c) 1981 Nichibutsu
-moonal2 // [1980] Nichibutsu
-moonal2b // [1980] Nichibutsu
-supergx // [1980] Nichibutsu
-eagle // [1980] Centuri
-eagle2 // [1980] Centuri
-eagle3 // [1980] Centuri
-spctbird // (c) Fortrek
-mooncptc // bootleg (Petaco S.A.)
-mooncrsl // bootleg (Laguna S.A.)
-fantastc // (c) Taito (Brazil) - rewrite of Galaga
-timefgtr // (c) Taito (Brazil) - rewrite of Time Pilot
-kong // (c) Taito (Brazil) - rewrite of Donkey Kong
-skybase // (c) 1982 Omori Electric Co., Ltd.
-checkman // (c) 1982 Zilec-Zenitone
-checkmanj // (c) 1982 Jaleco (Zenitone/Zilec in ROM CM4, and the programmer names)
-dingo // (c) 1983 Ashby Computers and Graphics LTD. + Jaleco license
-dingoe // (c) 1983 Ashby Computers and Graphics LTD. + Jaleco license
-blkhole // TDS (Tokyo Denshi Sekkei) & MINTS
-kingball // (c) 1980 Namco
-kingballj // (c) 1980 Namco
-scorpionmc // bootleg
-frogg // bootleg
-4in1 // (c) 1981 Armenia / Food and Fun
-bagmanmc // bootleg
-bagmanm2 // (c) 1984 Valadon Automation / GIB
-dkongjrm // bootleg
-ozon1 // (c) 1983 Proma
-ladybugg // bootleg
-vpool // bootleg
-drivfrcg // [1984] Shinkai (Magic Electronics USA license)
-drivfrcb // bootleg
-drivfrct // bootleg
-bongo // (c) 1983 Jetsoft
-hunchbkg // (c) 1983 Century
-harem // [1983] I.G.R.
-tazzmang // bootleg
-tazzmang2 // bootleg
-racknrol // (c) 1986 Status (Shinkia license) (Senko Kit)
-hexpool // (c) 1986 Shinkia (Senko Kit)
-hexpoola // (c) 1986 Shinkia (Senko Kit)
-trvchlng // [1985] Joyland (Senko license)
-bullsdrtg // 1985 Senko
-luctoday // 1980 Sigma
-chewing // ?? unknown
-catacomb // 1982 MTM Games
-ckongg // 1981 bootleg
-ckongmc // 1981 bootleg
-ckonggx //
-ckongcv // 19?? Competitive Video?
-ckongis //
-porter // 1982 bootleg (Arcade TV Game List - P.98, Left, 15 from bottom)
-tdpgal // 1983 Design Labs / Thomas Automatics
-guttangt
-
-// Has some similarities with Moon Cresta but Board is very different
-rockclim // (c)1981 Taito
-
-// "Scramble hardware" (and variations) games
-scramble // GX387 (c) 1981 Konami
-scrambles // GX387 (c) 1981 Stern
-scrambles2 // GX387 (c) 1981 Stern
-scramblebf // bootleg
-scramblebb // bootleg?
-scramblb // bootleg
-scramb2 // bootleg
-scrambler // bootleg
-explorer // bootleg
-strfbomb // bootleg
-scrambp // bootleg (Billport S.A.)
-scramce // bootleg (Centromatic S.A.)
-scrampt // bootleg (Petaco S.A.)
-scramrf // bootleg (Recreativos Franco)
-atlantis // (c) 1981 Comsoft
-atlantis2 // (c) 1981 Comsoft
-theend // (c) 1980 Konami
-theends // (c) 1980 Stern
-theendb // (c) 1980 Bootleg
-omega // bootleg
-ckongs // bootleg
-froggers // bootleg
-frogf // bootleg
-quaak // bootleg
-froggeram // bootleg
-froggerv // bootleg
-amidars // GX337 (c) 1982 Konami
-triplep // (c) 1982 KKI / made by Sanritsu?
-triplepa // (c) 1982 KKI / made by Sanritsu?
-knockout // (c) 1982 KKK
-knockoutb // bootleg
-mariner // (c) 1981 Amenip
-800fath // (c) 1981 Amenip + U.S. Billiards license
-mars // (c) 1981 Artic
-devilfsh // (c) 1982 Artic
-newsin7 // (c) 1983 ATW USA, Inc.
-newsin7a // (c) 1982 ATW USA, Inc.
-mrkougar // (c) 1984 ATW
-mrkougar2 // (c) 1984 ATW
-mrkougb // bootleg
-mrkougb2 // bootleg
-hotshock // (c) 1982 E.G. Felaco (Domino license)
-hotshockb // bootleg
-conquer // (c) 1982 ????
-hunchbks // (c) 1983 Century
-hunchbks2 // bootleg
-hncholms // (c) 1984 Century
-cavelon // (c) 1983 Jetsoft
-sfx // (c) 1983 Nichibutsu
-skelagon // (c) 1983 Nichibutsu USA
-monsterz // (c) 1982 Nihon (Arcade TV Game List - P.102, Left, 20 from top)
-mimonkey // (c) 1982 Universal Video Games (US Copyright Office info - http://cocatalog.loc.gov)
-mimonsco // (c) 1982 bootleg
-mimonscr // (c) 1982 bootleg
-mimonscra // (c) 1982 bootleg
-scobra // GX316 (c) 1981 Konami
-scobras // GX316 (c) 1981 Stern
-scobrase // GX316 (c) 1981 Sega
-scobrae // GX316 (c) 1981 Stern
-scobrab // GX316 (c) 1981 Karateco (bootleg?)
-suprheli // bootleg
-stratgyx // GX306 (c) 1981 Konami
-stratgys // GX306 (c) 1981 Stern
-strongx // bootleg
-armorcar // (c) 1981 Stern
-armorcar2 // (c) 1981 Stern
-moonwar // (c) 1981 Stern
-moonwara // (c) 1981 Stern
-spdcoin // (c) 1984 Stern
-darkplnt // (c) 1982 Stern
-tazmania // (c) 1982 Stern
-tazmani2 // (c) 1982 Stern
-calipso // (c) 1982 Tago
-anteater // (c) 1982 Tago
-anteaterg // (c) 1983 TV-Tuning (F.E.G. license)
-anteateruk // (c) 1983 Free Enterprise Games
-anteatergg // bootleg
-rescue // (c) 1982 Stern
-rescueb // (c) Videl Games (Rescue bootleg)
-aponow // bootleg
-rescuefe // bootleg
-minefld // (c) 1983 Stern
-minefldfe // bootleg
-losttomb // (c) 1982 Stern
-losttombh // (c) 1982 Stern
-superbon // bootleg
-hustler // GX343 (c) 1981 Konami
-hustlerd // GX343 (c) 1981 Konami + Dynamo Games license
-billiard // bootleg
-hustlerb // bootleg
-hustlerb2 // bootleg
-hustlerb3 // bootleg
-hustlerb4 // bootleg
-frogger // GX392 (c) 1981 Konami
-froggers1 // (c) 1981 Sega
-froggers2 // 834-0068 (c) 1981 Sega
-froggers3 //
-froggermc // 800-3110 (c) 1981 Sega
-amidar // GX337 (c) 1982 Konami
-amidar1 // GX337 (c) 1981 Konami
-amidaru // GX337 (c) 1982 Konami + Stern license
-amidaro // GX337 (c) 1982 Konami + Olympia license
-amidarb // bootleg
-amigo // bootleg
-turtles // (c) 1981 Stern
-turpin // (c) 1981 Sega
-600 // GX353 (c) 1981 Konami
-flyboy // (c) 1982 Kaneko
-flyboyb // bootleg
-fastfred // 136009 (c) 1982 Atari
-jumpcoas // (c) 1983 Kaneko
-jumpcoast // (c) 1983 Taito
-boggy84 // (c) 1984 Kaneko
-boggy84b // bootleg
-redrobin // (c) 1986 Elettronolo
-imago // (c) 1984 Acom
-imagoa // (c) 1983 Acom
-scorpion // (c) 1982 Zaccaria
-scorpiona // (c) 1982 Zaccaria
-scorpionb // (c) 1982 Zaccaria
-aracnis // bootleg
-ad2083 // (c) 1983 Midcoin
-turpins // (c) 1981 bootleg
-ghostmun
-bomber
-astrians
-froggrs
-
-// "Crazy Climber hardware" games
-cclimber // (c) 1980 Nichibutsu
-cclimberj // (c) 1980 Nichibutsu
-ccboot // bootleg
-ccboot2 // bootleg
-ccbootmr // Model Racing bootleg
-cclimbroper // Operamatic bootleg
-ckong // (c) 1981 (Kyoei)
-ckongo // bootleg (Orca)
-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
-ckongpt2jeu // bootleg (Jeutel)
-ckongpt2b // bootleg
-rpatrol // Orca, from a suspicious set
-rpatrolb // bootleg
-silvland // Falcon
-yamato // (c) 1983 Sega
-yamato2 // (c) 1983 Sega
-toprollr // (c) 1983 Jaleco
-swimmer // (c) 1982 Tehkan
-swimmera // (c) 1982 Tehkan
-swimmerb // (c) 1982 Tehkan
-guzzler // (c) 1983 Tehkan
-guzzlers // (c) 1983 Tehkan (Swimmer Conversion)
-cannonb // (c) 1985 Soft
-cannonb2 // (c) 1985 TV Game Gruenberg
-cannonb3 // (c) 1985 Soft
-bagmanf // bootleg on Falcon FCK-00 (Falcon Crazy Kong) PCB
-
-// Nichibutsu games
-gomoku // (c) 1981
-wiping // (c) 1982
-rugrats // (c) 1983
-dacholer // (c) 1983
-kickboy // (c) 1983
-itaten // (c) 1984 + Alice
-friskyt // (c) 1981
-friskyta // (c) 1981
-friskytb // (c) 1981
-radrad // (c) 1982 Nichibutsu USA
-seicross // (c) 1984 + Alice
-sectrzon // (c) 1984 + Alice
-firebatl // (c) 1984 Taito
-clshroad // (c) 1986 Wood Place Inc.
-clshroads // (c) 1986 Wood Place Inc. (Status Games license)
-clshroadd // (c) 1986 Wood Place Inc. (Data East license)
-tubep // (c) 1984 + Fujitek
-tubepb // (c) 1984 + bootleg
-rjammer // (c) 1984 + Alice
-magmax // (c) 1985
-cop01 // (c) 1985
-cop01a // (c) 1985
-mightguy // (c) 1986
-terracre // (c) 1985
-terracreo // (c) 1985
-terracrea // (c) 1985
-terracren // (c) 1985
-amazon // (c) 1986
-amatelas // (c) 1986
-horekid // (c) 1987
-horekidb // bootleg
-boobhack // bootleg
-galivan // (c) 1985
-galivan2 // (c) 1985
-galivan3 // (c) 1985
-dangar // (c) 1986
-dangar2 // (c) 1986
-dangarb // bootleg
-ninjemak // (c) 1986 (US?)
-youma // (c) 1986 (Japan)
-youma2 // (c) 1986 (Japan)
-youmab // bootleg
-youmab2 // bootleg
-legion // (c) 1986
-legionj // (c) 1986
-legionjb // (c) 1986
-terraf // (c) 1987
-terrafu // (c) 1987 Nichibutsu USA
-terrafj // (c) 1987 Nichibutsu Japan
-terrafjb // (c) 1987
-terrafb // (c) 1987
-kozure // (c) 1987 (Japan)
-armedf // (c) 1988
-armedff // (c) 1988 Fillmore license
-cclimbr2 // (c) 1988 (Japan)
-cclimbr2a // (c) 1988 (Japan)
-skyrobo // (c) 1989
-bigfghtr // (c) 1989
-
-// Nichibutsu Mahjong games
-hyhoo // (c) 1987
-hyhoo2 // (c) 1987
-jangou // (c) 1983
-macha // (c) 1983 Logitec
-// Jangou Night // (c) 1983
-jngolady // (c) 1984
-cntrygrl // (c) 1984 Royal Denshi
-cntrygrla // (c) 1984
-roylcrdn // (c) 1985
-fruitbun // (c) 1984
-luckygrl // (c) 1984 Wing?
-nightgal // (c) 1984
-ngtbunny // (c) 1984
-royalngt // (c) 1984 Royal Denshi
-royalqn
-sexygal // (c) 1985
-sweetgal // (c) 1985
-ngalsumr // (c) 1985
-pastelg // (c) 1985
-threeds // (c) 1985
-galds // (c) 1985
-crystalg // (c) 1986
-crystal2 // (c) 1986
-nightlov // (c) 1986
-citylove // (c) 1986
-mcitylov // (c) 1986
-apparel // (c) 1986 Central Denshi
-secolove // (c) 1986
-barline // (c) 1986?
-housemnq // (c) 1987
-housemn2 // (c) 1987
-livegal // (c) 1987
-seiha // (c) 1987
-seiham // (c) 1987
-mjgaiden // (c) 1987 Central Denshi
-bijokkoy // (c) 1987
-iemoto // (c) 1987
-iemotom // (c) 1987
-ryuuha // (c) 1987
-ojousan // (c) 1987
-ojousanm // (c) 1987
-bijokkog // (c) 1988
-orangec // (c) 1988 Daiichi Denshi
-orangeci // (c) 1988 Daiichi Denshi
-vipclub // (c) 1988 Daiichi Denshi
-korinai // (c) 1988
-korinaim // (c) 1988
-kaguya // (c) 1988 MIKI SYOUJI
-kaguya2 // (c) 1989 MIKI SYOUJI
-kaguya2f // (c) 1989 MIKI SYOUJI
-otonano // (c) 1988 Apple
-kanatuen // (c) 1988 Panac
-kyuhito // (c) 1988 ROLLER TRON
-mjsikaku // (c) 1988
-mjsikakb // (c) 1988
-mjsikakc // (c) 1988
-mjsikakd // (c) 1988
-mmsikaku // (c) 1988
-mjcamera // (c) 1988 MIKI SYOUJI
-mmcamera // (c) 1988 MIKI SYOUJI
-msjiken // (c) 1988
-hanamomo // (c) 1988
-hanamomb // (c) 1988
-telmahjn // (c) 1988
-taiwanmb // (c) 1988
-gionbana // (c) 1989
-idhimitu // (c) 1989 Digital Soft
-mgion // (c) 1989
-mjcamerb // (c) 1989 MIKI SYOUJI
-omotesnd // (c) 1989
-abunai // (c) 1989
-mjfocus // (c) 1989
-mjfocusm // (c) 1989
-peepshow // (c) 1989 AC
-scandal // (c) 1989
-scandalm // (c) 1989
-mgmen89 // (c) 1989
-mjnanpas // (c) 1989 BROOKS
-mjnanpaa // (c) 1989 BROOKS
-mjnanpau // (c) 1989 BROOKS
-pairsnb // (c) 1989
-pairsten // (c) 1989 System Ten
-bananadr // (c) 1989 DIGITAL SOFT
-mladyhtr // (c) 1990
-chinmoku // (c) 1990
-maiko // (c) 1990
-mmaiko // (c) 1990
-hnageman // (c) 1990 Nichibutsu/AV Japan
-hnxmasev // (c) 1990 Nichibutsu/AV Japan
-club90s // (c) 1990
-club90sa // (c) 1990
-lovehous // (c) 1990
-hanaoji // (c) 1991
-hanaojia // (c) 1991
-pstadium // (c) 1990
-triplew1 // (c) 1989
-triplew2 // (c) 1990
-ntopstar // (c) 1990
-mjlstory // (c) 1991
-vanilla // (c) 1991
-finalbny // (c) 1991
-qmhayaku // (c) 1991
-mjgottub // (c) 1991
-galkoku // (c) 1989 Nichibutsu/T.R.TEC
-hyouban // (c) 1989 Nichibutsu/T.R.TEC
-galkaika // (c) 1989 Nichibutsu/T.R.TEC
-tokyogal // (c) 1989
-tokimbsj // (c) 1989
-mcontest // (c) 1989
-uchuuai // (c) 1989
-av2mj1bb // (c) 1991 MIKI SYOUJI/AV JAPAN
-av2mj2rg // (c) 1991 MIKI SYOUJI/AV JAPAN
-ohpaipee // (c) 1990 Nichibutsu
-togenkyo // (c) 1990 Nichibutsu
-mjuraden // (c) 1992 Nichibutsu/Yubis
-koinomp // (c) 1992
-patimono // (c) 1992
-janbari // (c) 1992 Nichibutsu/Yubis/AV JAPAN
-mjanbari // (c) 1992 Nichibutsu/Yubis/AV JAPAN
-ultramhm // (c) 1993 Apple
-gal10ren // (c) 1993 FUJIC
-renaiclb // (c) 1993 FUJIC
-mjlaman // (c) 1993 Nichibutsu/AV JAPAN
-mkeibaou // (c) 1993
-pachiten // (c) 1993 Nichibutsu/MIKI SYOUJI/AV JAPAN
-sailorws // (c) 1993
-sailorwa // (c) 1993
-sailorwr // (c) 1993
-wcatcher // (c) 1993
-jituroku // (c) 1993 Windom
-yosimoto // (c) 1994 Nichibutsu/Yoshimoto Kougyou
-yosimotm // (c) 1994 Nichibutsu/Yoshimoto Kougyou
-psailor1 // (c) 1994 SPHINX
-psailor2 // (c) 1994 SPHINX
-otatidai // (c) 1995 SPHINX
-ngpgal // (c) 1991
-mjgottsu // (c) 1991
-bakuhatu // (c) 1991
-cmehyou // (c) 1992 Nichibutsu/Kawakusu
-mmehyou // (c) 1992 Nichibutsu/Kawakusu
-mjkoiura // (c) 1992
-mkoiuraa // (c) 1992
-imekura // (c) 1994 SPHINX/AV JAPAN
-mscoutm // (c) 1994 SPHINX/AV JAPAN
-mjegolf // (c) 1994 FUJIC/AV JAPAN
-mhhonban // (c) 199?
-shabdama // (c) 199?
-zokumahj // (c) 199?
-4psimasy // (c) 1994
-musobana // (c) 1995
-niyanpai // (c) 1996
-csplayh1 // (c) 1995
-junai // (c) 1998
-csplayh5 // (c) 1998
-junai2 // (c) 1998
-mjmania // (c) 1999
-//renaimj
-bikiniko // (c) 1999
-thenanpa // (c) 1999
-//pokoachu
-csplayh7 // (c) 1999
-fuudol // (c) 2000
-
-// "Phoenix hardware" (and variations) games
-safarir // (c) 1980 Shin Nihon Kikaku (SNK) + Taito license
-safarirj // (c) 1979 Shin Nihon Kikaku (SNK)
-phoenix // (c) 1980 Amstar
-phoenixa // (c) 1980 Amstar + Centuri license
-phoenixb // (c) 1980 Amstar + Centuri license
-phoenixt // (c) 1980 Taito
-phoenixj // (c) 1980 Taito
-phoenix3 // bootleg
-phoenixdal // bootleg D&L (No copyright/title)
-phoenixc // bootleg
-phoenixc2 // bootleg
-phoenixc3 // bootleg
-phoenixc4 // bootleg
-condor // bootleg
-fenix // bootleg
-falcon // bootleg
-vautour // bootleg (Jeutel)
-falconz // bootleg
-vautourz // bootleg
-vautourza // bootleg (Jeutal)
-griffon // bootleg (Videotron)
-nextfase // bootleg
-phoenixs // bootleg (Sonic)
-phoenixass // bootleg (Assa)
-avefenix // bootleg (Video Game)
-avefenixrf // bootleg (Recreativos Franco)
-avefenixl // bootleg (Laguna)
-pleiads // (c) 1981 Tehkan
-pleiadsb2 // bootleg
-pleiadbl // bootleg
-pleiadce // (c) 1981 Centuri + Tehkan
-pleiadsi // bootleg?
-pleiadss // bootleg
-capitol // bootleg?
-survival // (c) 1982 Rock-ola
-naughtyb // (c) 1982 Jaleco
-naughtyba // bootleg
-naughtybc // (c) 1982 Jaleco + Cinematronics
-popflame // (c) 1982 Jaleco
-popflamea // (c) 1982 Jaleco
-popflameb // (c) 1982 Jaleco
-popflamen // (c) 1982 Jaleco
-trvmstr // (c) 1985 Enerdyne Technologies Inc.
-trvmstra // (c) 1985 Enerdyne Technologies Inc.
-trvmstrb // (c) 1985 Enerdyne Technologies Inc.
-trvmstrc // (c) 1985 Enerdyne Technologies Inc.
-trvgns // bootleg
-
-// Namco games (plus some intruders on similar hardware)
-geebee // [1978] Namco
-geebeeb // [1978] Namco (F.lli Bertolino license)
-geebeeg // [1978] Gremlin
-bombbee // [1979] Namco
-cutieq // (c) 1979 Namco
-navarone // (c) 1980 Namco
-kaitein // [1980] Namco
-kaitei // [1980] K.K. Tokki
-sos // [1980] Namco
-tankbatt // (c) 1980 Namco
-tankbattb // bootleg
-warpwarp // (c) 1981 Namco
-warpwarpr // (c) 1981 [Namco] (Rock-ola license)
-warpwarpr2 // (c) 1981 [Namco] (Rock-ola license)
-rallyx // (c) 1980 Namco
-rallyxa // (c) 1980 Namco
-rallyxm // (c) 1980 Midway
-rallyxmr // Model Racing bootleg
-nrallyx // (c) 1981 Namco
-nrallyxb // (c) 1981 Namco
-jungler // GX327 (c) 1981 Konami
-junglers // GX327 (c) 1981 Stern
-jackler // 1 9 8 2 (Jungler Bootleg)
-savanna // Olympia (c) 1982 (Jungler bootleg)
-tactcian // GX335 (c) 1982 Sega
-tactcian2 // GX335 (c) 1981 Sega
-locomotn // GX359 (c) 1982 Konami + Centuri license
-gutangtn // GX359 (c) 1982 Konami + Sega license
-cottong // bootleg
-locoboot // bootleg
-commsega // (c) 1983 Sega
-
-// the following ones all have a custom I/O chip
-bosco // (c) 1981
-boscoo // (c) 1981
-boscoo2 // (c) 1981
-boscomd // (c) 1981 Midway
-boscomdo // (c) 1981 Midway
-galaga // (c) 1981
-galagao // (c) 1981
-galagamw // (c) 1981 Midway
-galagamk // (c) 1981 Midway
-galagamf // (c) 1981 Midway / hack
-gallag // bootleg
-gatsbee // (c) 1984 Uchida / hack
-digdug // (c) 1982
-digdug1 // (c) 1982
-digdugat // 136007 (c) 1982 Atari
-digdugat1 // 136007 (c) 1982 Atari
-dzigzag // bootleg
-digsid // bootleg
-xevious // (c) 1982
-xeviousa // 136018 (c) 1982 + Atari license
-xeviousb // 136018 (c) 1982 + Atari license
-xeviousc // 136018 (c) 1982 + Atari license
-xevios // bootleg
-battles // bootleg
-sxevious // (c) 1984
-sxeviousj // (c) 1984
-superpac // (c) 1982
-superpacm // (c) 1982 Midway
-pacnpal // (c) 1983
-pacnpal2 // (c) 1983
-pacnchmp // (c) 1983
-phozon // (c) 1983
-phozons // (c) 1983 pcb manufactured by Sidam
-mappy // (c) 1983
-mappyj // (c) 1983
-digdug2 // (c) 1985
-digdug2o // (c) 1985
-todruaga // (c) 1984
-todruagao // (c) 1984
-todruagas // (c) 1984 pcb manufactured by Sidam
-motos // (c) 1985
-grobda // (c) 1984
-grobda2 // (c) 1984
-grobda3 // (c) 1984
-gaplus // (c) 1984
-gaplusa // (c) 1984
-gaplusd // (c) 1984
-gaplust // (c) 1984
-galaga3 // (c) 1984
-galaga3a // (c) 1984
-galaga3b // (c) 1984
-galaga3c // (c) 1984
-galaga3m // (c) 1984
-
-// Libble Rabble board (first Japanese game using a 68000)
-liblrabl // (c) 1983
-toypop // (c) 1986
-
-// Z8000 games
-polepos // (c) 1982
-poleposj // (c) 1982
-poleposa2 // 136014 (c) 1982 + Atari license
-poleposa1 // 136014 (c) 1982 Atari
-topracer // bootleg
-topracera // bootleg
-topracern // bootleg
-ppspeed // bootleg
-polepos2 // (c) 1983
-polepos2a // 136014 (c) 1983 + Atari license
-polepos2b // bootleg
-polepos2bi // bootleg
-// no custom I/O in the following, HD63701 (or compatible) microcontroller instead
-pacland // (c) 1984
-paclandj // (c) 1984
-paclandjo // (c) 1984
-paclandjo2 // (c) 1984
-paclandm // (c) 1984 Midway
-drgnbstr // (c) 1984
-skykid // (c) 1985
-skykido // (c) 1985
-skykidd // (c) 1985
-skykids // (c) 1985
-aliensec // (c) 1985
-baraduke // (c) 1985
-metrocrs // (c) 1985
-metrocrsa // (c) 1985
-
-// Namco System 86 games
-hopmappy // (c) 1986
-skykiddx // (c) 1986
-skykiddxo // (c) 1986
-roishtar // (c) 1986
-genpeitd // (c) 1986
-rthunder // (c) 1986
-rthunder2 // (c) 1986
-rthunder1 // (c) 1986
-rthunder0 // (c) 1986
-rthundera
-wndrmomo // (c) 1987
-
-// Thunder Ceptor HW
-tceptor // (c) 1986
-tceptor2 // (c) 1986
-
-// Namco System 1 games
-shadowld // (c) 1987 (YD3)
-youkaidk2 // (c) 1987 (Japan, new version (YD2, Rev B))
-youkaidk1 // (c) 1987 (Japan, old version (YD1))
-dspirit // (c) 1987 (new version (DS3))
-dspirit2 // (c) 1987 (DS2, Atari had rights to US market)
-dspirit1 // (c) 1987 (old version (DS1))
-blazer // (c) 1987 (Japan)
-quester // (c) 1987 (Japan)
-questers // (c) 1987 (Japan)
-pacmania // (c) 1987
-pacmaniao // (c) 1987
-pacmaniaj // (c) 1987 (Japan)
-galaga88 // (c) 1987
-galaga88a // (c) 1987
-galaga88j // (c) 1987 (Japan)
-ws // (c) 1988 (Japan)
-berabohm // (c) 1988 (Japan, Rev C)
-berabohmb // (c) 1988 (Japan, Rev B)
- // 1988 Alice in Wonderland (English version of Marchen maze)
-mmaze // (c) 1988 (Japan)
-bakutotu // (c) 1988 (Japan)
-wldcourt // (c) 1988 (Japan)
-splatter // (c) 1988 (World, SH3)
-splatter2 // (c) 1988 (World, SH2)
-splatterj // (c) 1988 (Japan)
-faceoff // (c) 1988 (Japan)
-rompers // (c) 1989 (Japan, new version (Rev B))
-romperso // (c) 1989 (Japan, old version)
-blastoff // (c) 1989 (Japan)
-ws89 // (c) 1989 (Japan)
-dangseed // (c) 1989 (Japan)
-ws90 // (c) 1990 (Japan)
-pistoldm // (c) 1990 (Japan)
-boxyboy // (c) 1990 (US)
-soukobdx // (c) 1990 (Japan)
-puzlclub // (c) 1990 (Japan)
-tankfrce // (c) 1991 (US, 2 Player)
-tankfrce4 // (c) 1991 (US, 4 Player)
-tankfrcej // (c) 1991 (Japan)
-
-// Namco System 2 games
-finallap // 87.12 Final Lap
-finallapd // 87.12 Final Lap
-finallapc // 87.12 Final Lap
-finallapjc // 87.12 Final Lap
-finallapjb // 87.12 Final Lap
-assault // (c) 1988
-assaultj // (c) 1988 (Japan)
-assaultp // (c) 1988 (Japan)
-metlhawk // (c) 1988
-metlhawkj // (c) 1988
-ordyne // (c) 1988
-ordynej // (c) 1988
-mirninja // (c) 1988 (Japan)
-phelios // (c) 1988
-pheliosj // (c) 1988 (Japan)
-dirtfoxj // (c) 1989 (Japan)
-fourtrax // 89.11
-valkyrie // (c) 1989 (Japan)
-finehour // (c) 1989 (Japan)
-burnforc // (c) 1989 (Japan, new version)
-burnforco // (c) 1989 (Japan, old version)
-marvland // (c) 1989 (US)
-marvlandj // (c) 1989 (Japan)
-kyukaidk // (c) 1990 (Japan, new version)
-kyukaidko // (c) 1990 (Japan, old version)
-dsaber // (c) 1990
-dsaberj // (c) 1990 (Japan)
-finalap2 // 90.8 Final Lap 2
-finalap2j // 90.8 Final Lap 2 (Japan)
-gollygho // 91.7 Golly Ghost
-rthun2 // (c) 1990
-rthun2j // (c) 1990 (Japan)
-sgunner // (c) 1990
-sgunnerj // (c) 1990
-sgunner2 // (c) 1991 (US)
-sgunner2j // (c) 1991 (Japan)
-cosmogng // (c) 1991 (US)
-cosmogngj // (c) 1991 (Japan)
-bubbletr // (c) 1992
-finalap3 // 92.9 Final Lap 3
-finalap3a // 92.9 Final Lap 3
-finalap3j // 92.9 Final Lap 3
-finalap3jc // (c) 1992
-finalap3bl // (c) 1992 (bootleg)
-luckywld // (c) 1992
-luckywldj // (c) 1992
-suzuka8h // (c) 1992 (World)
-suzuka8hj // (c) 1992 (Japan)
-sws // (c) 1992 (Japan)
-sws92 // (c) 1992 (Japan)
-sws92g // (c) 1992 (Japan)
-suzuk8h2 // (c) 1993 (World)
-suzuk8h2j // (c) 1993 (Japan)
-sws93 // (c) 1993 (Japan)
-
-// Namco FL games
-speedrcr // (c) 1995
-finalapr // (c) 1995
-finalaprj // (c) 1995
-finalapro // (c) 1995
-
-// Namco NA-1 / NA-2 System games
-bkrtmaq // (c) 1992 (Japan)
-cgangpzl // (c) 1992 (US)
-cgangpzlj // (c) 1992 (Japan)
-exvania // (c) 1992 (World)
-exvaniaj // (c) 1992 (Japan)
-fghtatck // (c) 1992 (US)
-fa // (c) 1992 (Japan)
-knckhead // (c) 1992 (World)
-knckheadj // (c) 1992 (Japan)
-knckheadjp // (c) 1992 (Japan)
-swcourt // (c) 1992 (Japan)
-swcourtj // (c) 1992 (Japan)
-emeralda // (c) 1993 (Japan)
-emeraldaj // (c) 1993 (Japan)
-emeraldaja // (c) 1993 (Japan)
-numanath // (c) 1993 (World)
-numanathj // (c) 1993 (Japan)
-quiztou // (c) 1993 (Japan)
-tinklpit // (c) 1993 (Japan)
-xday2 // (c) 1995 (Japan)
-
-// Namco NB-1 / NB-2 System games
-nebulray // (c) 1994 (World)
-nebulrayj // (c) 1994 (Japan)
-ptblank // (c) 1994 (GN2 World)
-ptblanka // (c) 1994 (GN2 World) - Alternate labels, NRx-SPR0 (X=1 to 9)
-gunbuletj // (c) 1994 (GN1 Japan)
-gunbuletw // (c) 1994 (GN3 World)
-gslugrsj // (c) 1993 (Japan)
-gslgr94u // (c) 1994
-gslgr94j // (c) 1994 (Japan)
-sws95 // (c) 1995 (Japan)
-sws96 // (c) 1996 (Japan)
-sws97 // (c) 1997 (Japan)
-vshoot // (c) 1994
-outfxies // (c) 1994 (World)
-outfxiesj // (c) 1994 (Japan)
-machbrkr // (c) 1995 (Japan)
-
-// Namco ND-1 games
-ncv1 // (c) 1995
-ncv1j // (c) 1995 (Japan)
-ncv1j2 // (c) 1995 (Japan)
-ncv2 // (c) 1996
-ncv2j // (c) 1996 (Japan)
-
-// Namco System 21 games
-winrun // (c) 1988
-winrungp // (c) 1989
-winrun91 // (c) 1991
-solvalou // (c) 1991 (Japan)
-starblad // (c) 1991 (World)
-starbladj // (c) 1991 (Japan)
-driveyes // (c) 1992?
- // 1992, SimDrive
-aircomb // (c) 1992 (US)
-aircombj // (c) 1992 (Japan)
-cybsled // (c) 1993 (World)
-cybsledj // (c) 1993 (Japan)
-
-// Galaxian 3 HW
-gal3 // (c) 1992 (Arcade TV Game List - P.73, Right, 6 from top)
-//gal3zlgr
-
-// Namco System 22 games
-ridgerac // (c) 1993
-ridgeracb // (c) 1993
-ridgeracj // (c) 1993
-ridgerac3 // (c) 1993
-ridgeracf // (c) 1993
-acedrvrw // (c) 1994
-alpinerd // (c) 1994
-alpinerc // (c) 1994
-ridgera2 // (c) 1994
-ridgera2j // (c) 1994
-ridgera2ja // (c) 1994
-raveracw // (c) 1995
-raveracj // (c) 1995
-raveracja // (c) 1995
-airco22b // (c) 1995
-alpinr2b // (c) 1995
-alpinr2a // (c) 1995
-cybrcomm // (c) 1995
-cybrcycc // (c) 1995
-timecris // (c) 1995
-timecrisa // (c) 1995
-dirtdash // (c) 1995
-victlapw // (c) 1996
-alpinesa // (c) 1996
-propcycl // (c) 1996
-tokyowar // (c) 1996
-aquajet // (c) 1996
-adillor // (c) 1997
-
-// Namco System 23
-finfurl // July 1997
-motoxgo // November 1997
-motoxgov2a // November 1997
-motoxgov1a // November 1997
-motoxgov1a2 // November 1997
-rapidrvr // December 1997
-rapidrvrv2c // December 1997
-rapidrvrp // December 1997 (prototype)
-downhill // March 1998
-timecrs2 // April 1998
-timecrs2v2b // April 1998
-timecrs2v4a // April 1998
-panicprk // May 1998
-panicprkj // May 1998
-raceon // Race On - September 1998
-gunwars // September 1998 - Rev B
-gunwarsa // September 1998 - Rev A
-aking // Angler King - March 1999
-500gp // March 1999
-finfurl2 // March 1999
-finfurl2j // March 1999
- // Guitar Jam - July 1999
-crszone // Crisis Zone - December 1999
-crszonev4a // Crisis Zone - December 1999
-crszonev3b // Crisis Zone - December 1999
-crszonev3b2 // Crisis Zone - December 1999
-crszonev3a // Crisis Zone - December 1999
-crszonev2a // Crisis Zone - December 1999
-
-// Namco System 246
-sys246
-vnight
-bldyr3b
-rrvac
-rrvac2
-rrvac1
-wanganmd
-dragchrn
-netchu02
-scptour
-soulclb2
-soulcl2a
-soulcl2b
-soulcl2w
-tekken4
-tekken4a
-tekken4b
-tekken4c
-wanganmr
-prdgp03
-timecrs3
-timecrs3e
-zgundm
-fghtjam
-sukuinuf
-zgundmdx
-zoidsinf
-cobrata
-gundzaft
-soulclb3
-soulclb3a
-soulclb3b
-taiko7
-taiko8
-qgundam
-fateulc
-fateulcb
-sbxc
-
-// Namco System 256
-sys256
-tekken51
-tekken51b
-tekken5d
-superdbz
-kinniku
-kinniku2
-taiko9
-yuyuhaku
-zoidiexp
-taiko10
-gdvsgd
-gdvsgdnx
-
-// Namco System Super 256
-timecrs4
-
-// Misc Namco games
-cswat // (c) 1984
-kungfur // (c) 1987
-30test // (c) 1997
-25pacman // (c) 2006 Ver 3.0
-25pacmano // (c) 2005 Ver 2.0 - Same hardware as 20pacgal
-20pacgal // (c) 2000 Ver 1.08
-20pacgalr4 // (c) 2000 Ver 1.04
-20pacgalr3 // (c) 2000 Ver 1.03
-20pacgalr2 // (c) 2000 Ver 1.02
-20pacgalr1 // (c) 2000 Ver 1.01
-20pacgalr0 // (c) 2000 Ver 1.00
-turrett // (c) 2001 licensed from Dell Electronics
-
-// Universal games
-cosmicg // 7907 (c) 1979
-cosmicgi // bootleg (Inder)
-cosmica // 7910-AII (c) [1979]
-cosmica1 // 7910-A (c) [1979]
-cosmica2 // 7910 (c) 1979
-nomnlnd // 8003 (c) [1980?]
-nomnlndg // 8003 (c) [1980?] + Gottlieb
-magspot // ???? (c) [1980]
-magspot2 // 8013 (c) [1980]
-panic // 8015 (c) 1980
-panic2 // 8015 (c) 1980
-panic3 // 8015 (c) 1980
-panich // 8015 (c) 1980
-panicger // 8015 (c) 1980
-devzone // 8022 (c) [1980]
-devzone2 // 8022 (c) [1980]
-cheekyms // 8004 (c) [1980?]
-zerohour // 8011 (c) Universal
-zerohoura // 8011 (c) Universal
-zerohouri //
-redclash // (c) 1981 Tehkan
-redclasha // (c) 1981 Tehkan
-redclashk // (c) Kaneko (bootleg?)
-cavenger // 8106 (c) 1981
-ladybug // 8110 (c) 1981
-ladybugb // bootleg
-ladybgb2 // bootleg
-snapjack // ???? (c)
-sraider // ???? (c) 1982 Universal
-dorodon // Falcon
-dorodon2 // Falcon
-mrdo // 8201 (c) 1982
-mrdoy // 8201 (c) 1982
-mrdot // 8201 (c) 1982 + Taito license
-mrdofix // 8201 (c) 1982 + Taito license
-mrlo // bootleg
-mrdu // bootleg
-yankeedo // bootleg
-docastle // 8302 (c) 1983
-docastle2 // 8302 (c) 1983
-docastleo // 8302 (c) 1983
-douni // 8302 (c) 1983
-dorunrun // ???? (c) 1984
-dorunrun2 // ???? (c) 1984
-dorunrunc // ???? (c) 1984
-dorunrunca // ???? (c) 1984
-spiero // ???? (c) 1987
-dowild // ???? (c) 1984
-jjack // ???? (c) 1984
-kickridr // ???? (c) 1984
-idsoccer // ???? (c) 1985
-idsoccera // ???? (c) 1985
-asoccer // 8461 (c) 1987
-superdq // ???? (c) 1984
-superdqs // ???? (c) 1984
-superdqa // ???? (c) 1984
-
-// Nintendo games
-spacefev // (c) 1979 Nintendo
-spacefevo // (c) 1979 Nintendo
-spacefevo2 // (c) 1979 Nintendo
-highsplt // (c) 1979 Nintendo
-highsplta // (c) 1979 Nintendo
-highspltb // (c) 1979 Nintendo
-spacelnc // (c) 1979 Nintendo
-sheriff // (c) 1979 Nintendo
-bandido // (c) 1980 Exidy
-westgun2 // (c) 1980 Taito Corporation
-helifire // (c) 1980 Nintendo
-helifirea // (c) 1980 Nintendo
-radarscp // (c) 1980 Nintendo
-radarscp1 // (c) 1980 Nintendo
-dkong // (c) 1981 Nintendo of America
-dkonghrd
-dkongo // (c) 1981 Nintendo
-dkongj // (c) 1981 Nintendo
-dkongjo // (c) 1981 Nintendo
-dkongjo1 // (c) 1981 Nintendo
-dkongf // hack from Jeff's Romhack
-dkongpe // hack Pauline Edition
-dkongx // hack
-dkongx11 // hack
-dkongjr // (c) 1982 Nintendo of America
-dkongjrj // (c) 1982 Nintendo
-dkongjnrj // (c) 1982 Nintendo
-dkongjre // (c) 1982 Nintendo of America
-dkongjrpb // bootleg
-dkongjrb // bootleg
-jrking // bootleg
-dkingjr // bootleg
-dkong3 // (c) 1983 Nintendo of America
-dkong3j // (c) 1983 Nintendo
-dkong3b // bootleg
-mario // (c) 1983 Nintendo of America
-marioe // (c) 1983 Nintendo of America
-marioo // (c) 1983 Nintendo of America
-marioj // (c) 1983 Nintendo
-masao // bootleg
-mariobl // bootleg
-mmagic // (c) 1979 Nintendo
-dkong3abl //
-pestplce // bootleg on donkey kong hw
-spclforc // (c) 1985 Senko Industries (Magic Eletronics Inc. license)
-spcfrcii // (c) 1985 Senko Industries (Magic Eletronics Inc. license)
-8ballact // (c) 1984 Seatongrove Ltd (Magic Eletronics USA license)
-8ballact2 // (c) 1984 Seatongrove Ltd (Magic Eletronics USA license)
-shootgal // (c) 1984 Seatongrove Ltd (Zaccaria license)
-drakton // (c) 1984 Epos Corporation
-drktnjr // (c) 1984 Epos Corporation
-strtheat // (c) 1985 Epos Corporation
-hunchbkd // (c) 1983 Century
-sbdk // (c) 1984 Century
-herbiedk // (c) 1984 CVS
-herodk // (c) 1984 Seatongrove + Crown license
-herodku // (c) 1984 Seatongrove + Crown license
-skyskipr // (c) 1981
-popeye // (c) 1982
-popeyeu // (c) 1982
-popeyef // (c) 1982
-popeyebl // bootleg
-punchout // (c) 1984
-punchouta // (c) 1984
-punchoutj // (c) 1984 (Japan)
-punchita // bootleg
-spnchout // (c) 1984
-spnchouta // (c) 1984
-spnchoutj // (c) 1984 (Japan)
-armwrest // (c) 1985
-
-// Nintendo Playchoice 10 games
-playch10
-pc_tenis // (c) 1983 Nintendo
-pc_mario // (c) 1983 Nintendo
-pc_bball // (c) 1984 Nintendo of America
-pc_bfght // (c) 1984 Nintendo
-pc_ebike // (c) 1984 Nintendo
-pc_golf // (c) 1984 Nintendo
-pc_kngfu // (c) 1984 Irem (Nintendo license)
-pc_1942 // (c) 1985 Capcom
-pc_smb // (c) 1985 Nintendo
-pc_vball // (c) 1986 Nintendo
-pc_duckh // (c) 1984 Nintendo
-pc_hgaly // (c) 1984 Nintendo
-pc_wgnmn // (c) 1984 Nintendo
-pc_grdus // (c) 1986 Konami
-pc_grdue // (c) 1986 Konami
-pc_tkfld // (c) 1987 Konami (Nintendo of America license)
-pc_pwrst // (c) 1986 Nintendo
-pc_trjan // (c) 1986 Capcom USA (Nintendo of America license)
-pc_cvnia // (c) 1987 Konami (Nintendo of America license)
-pc_dbldr // (c) 1987 Konami (Nintendo of America license)
-pc_rnatk // (c) 1987 Konami (Nintendo of America license)
-pc_rygar // (c) 1987 Tecmo (Nintendo of America license)
-pc_cntra // (c) 1988 Konami (Nintendo of America license)
-pc_goons // (c) 1986 Konami
-pc_mtoid // (c) 1986 Nintendo
-pc_radrc // (c) 1987 Square
-pc_miket // (c) 1987 Nintendo
-pc_rcpam // (c) 1987 Rare
-pc_ngaid // (c) 1989 Tecmo (Nintendo of America license)
-pc_tmnt // (c) 1989 Konami (Nintendo of America license)
-pc_ftqst // (c) 1989 Sunsoft (Nintendo of America license)
-pc_bstar // (c) 1989 SNK (Nintendo of America license)
-pc_tbowl // (c) 1989 Tecmo (Nintendo of America license)
-pc_drmro // (c) 1990 Nintendo
-pc_virus // (c) 1990 Nintendo
-pc_bload // (c) 1990 Jaleco (Nintendo of America license)
-pc_ynoid // (c) 1990 Capcom USA (Nintendo of America license)
-pc_rrngr // (c) Capcom USA (Nintendo of America license)
-pc_ddrgn // (c) 1988 Technos
-pc_gntlt // (c) 1985 Atari/Tengen (Nintendo of America license)
-pc_smb2 // (c) 1988 Nintendo
-pc_smb3 // (c) 1988 Nintendo
-pc_mman3 // (c) 1990 Capcom USA (Nintendo of America license)
-pc_radr2 // (c) 1990 Square (Nintendo of America license)
-pc_suprc // (c) 1990 Konami (Nintendo of America license)
-pc_tmnt2 // (c) 1990 Konami (Nintendo of America license)
-pc_wcup // (c) 1990 Technos (Nintendo license)
-pc_ngai2 // (c) 1990 Tecmo (Nintendo of America license)
-pc_ngai3 // (c) 1991 Tecmo (Nintendo of America license)
-pc_pwbld // (c) 1991 Taito (Nintendo of America license)
-pc_rkats // (c) 1991 Atlus (Nintendo of America license)
-pc_pinbt // (c) 1988 Rare (Nintendo of America license)
-pc_cshwk // (c) 1989 Rare (Nintendo of America license)
-pc_sjetm // (c) 1990 Rare
-pc_moglf // (c) 1991 Nintendo
-
-// Nintendo VS games
-btlecity // (c) 1985 Namco
-starlstr // (c) 1985 Namco
-cstlevna // (c) 1987 Konami licensed to Nintendo
-cluclu // (c) 1984 Nintendo
-drmario // (c) 1990 Nintendo
-duckhunt // (c) 1985 Nintendo
-excitebk // (c) 1984 Nintendo
-excitebka // (c) 1984 Nintendo
-goonies // (c) 1986 Konami
-hogalley // (c) 1985 Nintendo
-iceclimb // (c) 1984 Nintendo
-iceclimba // (c) 1984 Nintendo
-smgolf // (c) 1984 Nintendo
-smgolfb // (c) 1984 Nintendo
-smgolfj // (c) 1984 Nintendo Co., Ltd.
-ladygolf // (c) 1984 Nintendo
-ladygolfe // (c) 1984 Nintendo
-machridr // (c) 1985 Nintendo
-machridra // (c) 1985 Nintendo
-rbibb // (c) 1987 Namco
-rbibba // (c) 1987 Namco
-suprmrio // (c) 1986 Nintendo
-suprmrioa // (c) 1986 Nintendo
-suprmriobl // bootleg
-suprmriobl2 // bootleg
-skatekds // (c) 1988 (hack)
-vsskykid // (c) 1986 Namco
-tkoboxng // (c) 1987 Data East
-vspinbal // (c) 1984 Nintendo
-vspinbalj // (c) 1984 Nintendo Co., Ltd.
-vsslalom // (c) 1986 Rare Coin-It Inc. licensed to Nintendo
-vssoccer // (c) 1985 Nintendo
-vssoccera // (c) 1985 Nintendo
-vsgradus // (c) 1986 Konami licensed to Nintendo
-platoon // (c) 1987 Ocean
-vstetris // (c) 1988 Atari
-mightybj // (c) 1986 Tecmo
-jajamaru // (c) 1985 Jaleco
-topgun // (c) 1987 Konami
-bnglngby // (c) 1985 Nintendo licensed by Broderbund Software Inc.
-vstennis // (c) 1984 Nintendo Co., Ltd. / Nintendo of America
-vstennisa // (c) 1984 Nintendo Co., Ltd. / Nintendo of America
-vstennisb // (c) 1984 Nintendo Co., Ltd. / Nintendo of America
-wrecking // (c) 1984 Nintendo
-balonfgt // (c) 1984 Nintendo
-vsmahjng // (c) 1984 Nintendo Co., Ltd.
-vsbball // (c) 1984 Nintendo of America
-vsbballj // (c) 1984 Nintendo Co., Ltd.
-vsbballja // (c) 1984 Nintendo Co., Ltd.
-vsbballjb // (c) 1984 Nintendo Co., Ltd.
-iceclmrd // (c) 1984 Nintendo (Dual game version)
-vsgshoe // (c) 1986 Nintendo
-supxevs // (c) 1986 Nintendo
-vsfdf // (c) 1986 Sunsoft licensed by Nintendo of America
-
-// NES-based hacks
-multigam // 1992
-multigmb // 1992
-multigm2 // 1992
-multigm3 // 19??
-multigmt
-sgmt1 // 1994
-supergm3 // 1996
-cham24 // 2002
-
-// Famicom Box
-famibox // 1986
-
-// Nintendo Super System Games
-nss
-nss_ssoc // 1992 Human Inc.
-nss_actr // 1992 Enix
-nss_con3 // 1992 Konami
-nss_adam // 1992 Ocean
-nss_aten // 1992 Absolute Entertainment Inc.
-nss_rob3 // 1992 Ocean
-nss_ncaa // 1992 Sculptured Software Inc.
-nss_skin // 1992 Irem
-nss_lwep // 1992 Nintendo
-nss_smw // 1991 Nintendo
-nss_fzer // 1991 Nintendo
-nss_sten // 199? Nintendo
-
-// Super Famicom Box Games
-sfcbox
-pss61 // 199? Nintendo
-pss62 // 199? T & E Soft / I'Max
-pss63 // 199? Nintendo / BPS
-pss64 // 199? Nintendo / Hudson Soft
-
-// SNES-based hacks
-kinstb // bootleg
-mk3snes // bootleg
-ffight2b // bootleg
-sblast2b // bootleg
-iron // bootleg
-endless // bootleg
-denseib // bootleg
-
-// Midway 8080 b/w games
-seawolf // 596 [1976]
-seawolfo // 596 [1976]
-gunfight // 597 [1975]
-gunfighto // 597 [1975]
- // 603 - Top Gun [1976]
-tornbase // 605 [1976]
-280zzzap // 610 [1976]
-maze // 611 [1976]
-boothill // 612 [1977]
-checkmat // 615 [1977]
-desertgu // 618 [1977]
-roadrunm // 618 [1977]
-dplay // 619 [1977]
-lagunar // 622 [1977]
-gmissile // 623 [1977]
-m4 // 626 [1977]
-clowns // 630 [1978]
-clowns1 // 630 [1978]
-spacwalk // 640 [1978]
-einning // 642 [1978] Midway
-shuffle // 643 [1978]
-dogpatch // 644 [1977]
-spcenctr // 645 (c) 1980 Midway
-phantom2 // 652 [1979]
-bowler // 730 [1978] Midway
-invaders // 739 [1979]
-blueshrk // 742 [1978]
-invad2ct // 851 (c) 1980 Midway
-invadpt2 // 852 [1980] Taito
-invadpt2br // Taito do Brasil
-invaddlx // 852 [1980] Midway
-vortex // 852 [1980] Zilec Electronics Ltd.
-moonbase // Taito
-moonbasea // Zeta - Nichibutsu
- // 870 - Space Invaders Deluxe cocktail
-searthin // bootleg
-searthina // bootleg
-searthie // bootleg
-invadrmr // (c) 1978 Model Racing
-claybust // (c) 1978 Model Racing
-gunchamp // (c) 1980 Model Racing
-gunchamps // (c) 1980 Model Racing (sshot.cpp)
-spaceatt // (c) 1978 Video Games GmbH
-spaceattbp // (c) 1978 Video Games GmbH
-spaceatt2k // (c) 1978 Video Games GmbH
-galmonst // (c) Laguna S.A.
-spaceat2 // (c) 1980 Zenitone-Microsec Ltd
-spacecom // bootleg
-sinvzen // Zenitone-Microsec Ltd
-superinv // bootleg
-invasion // Sidam
-invasiona // bootleg
-invasionb // bootleg
-invasionrz // bootleg
-invasionrza // bootleg
-invadersem // Electromar
-sstrangr // (c) 1978 Yachiyo Electronics, Ltd.
-sstrangr2 // (c) 1979 Yachiyo Electronics, Ltd.
-sinvemag // Zenitone-Microsec Ltd.
-jspecter // (c) 1979 Jatre
-jspecter2 // (c) 1979 Jatre
-invrvnge // Zenitone-Microsec Ltd.
-invrvngea // Zenitone-Microsec Ltd.
-invrvngeb // Zenitone-Microsec Ltd.
-invrvngedu // Zenitone-Microsec Ltd. (Dutchford license)
-invrvngegw // Zenitone-Microsec Ltd. (Game World license)
-galxwars // (c) 1979 Universal
-galxwars2 // (c) 1979 Universal
-galxwarst // (c) 1979 Taito?
-starw // bootleg
-starw1 // bootleg
-lrescue // LR (c) 1979 Taito
-mlander // (c) 1980 Leisure Time Electronics
-lrescuem // Model Racing bootleg set 1
-lrescuem2 // Model Racing bootleg set 2
-grescue // bootleg?
-desterth // bootleg
-cosmicmo // Universal
-cosmicm2 // Universal
-rollingc // Nichibutsu
-ozmawars // Shin Nihon Kikaku (SNK)
-ozmawars2 // Shin Nihon Kikaku (SNK)
-solfight // bootleg
-spaceph // Zilec Games
-galactic // (c) 19?? Taito
-spacmiss // bootleg?
-schaser // RT Taito
-schasera // RT Taito
-schaserb // RT Taito
-schaserc // RT Taito
-schasercv // RT Taito
-schaserm // Model Racing
-lupin3 // LP (c) 1980 Taito
-lupin3a // LP (c) 1980 Taito
-intruder // (c) 1980 GamePlan (Taito)
-spclaser // (c) 1980 GamePlan (Taito)
-laser // (c) 1980 Leisure Time Electronics Inc.
-spcewarl // (c) 1979 Leijac Corporation (Konami)
-polaris // PS (c) 1980 Taito
-polarisa // PS (c) 1980 Taito
-polariso // PS (c) 1980 Taito
-polarisbr // PS (c) 1981 Taito do Brasil
-ballbomb // TN (c) 1980 Taito
-indianbt // (c) 1980 Taito
-indianbtbr // (c) 1983 Taito do Brasil
-steelwkr // (c) 1980 Taito
-m79amb // (c) 1977 RamTek
-alieninv // Margamatics
-alieninvp2 // bootleg
-tst_invd // Test ROM
-sisv1 // (c) 1978 Taito
-sisv2 // (c) 1978 Taito
-sisv3 // (c) 1978 Taito
-sisv // (c) 1978 Taito
-sitv1 // (c) 1978 Taito
-sitv // (c) 1978 Taito
-sicv // (c) 1979 Taito
-spacerng // bootleg
-spacewr3 // bootleg
-invaderl // bootleg
-invader4 // bootleg
-yosakdon // (c) 1979 Yosaku To Donbei
-yosakdona // (c) 1979 Yosaku To Donbei
-spceking // (c) 1978 Leijac Corporation (Konami)
-spcewars // (c) 1978 Sanritsu
-astropal // (c) 19?? Sidam
-attackfc // (c) 1979? E.G.S.
-cosmo // TDS & Mints
-darthvdr // bootleg
-ultrainv
-invmulti // hack
-invmultim3a // hack
-invmultim2c // hack
-invmultim2a // hack
-invmultim1a // hack
-invmultit3d // hack
-invmultis3a // hack
-invmultis2a // hack
-invmultis1a // hack
-invmultip // hack
-
-// Similar but with a M6800 instead of an 8080
-sflush // (c)1979 Taito
-
-// Midway Z80 games
-18w // 653 (c) 1979 Midway
-18w2 // 653 (c) 1979 Midway
-sspeedr // 1979 Midway
-submar // 760 (c) 1979 Midway
-
-// Meadows S2650 games
-lazercmd // [1976?]
-bbonk // [1976?]
-deadeye // [1978?]
-bowl3d // [1978?]
-gypsyjug // [1978?]
-minferno // [1978?]
-medlanes // [1977?]
-
-// Meadows Z80 game
-warpsped // 197?
-
-// CVS games
-cosmos // (c) 1981 Century
-darkwar // (c) 1981 Century
-spacefrt // (c) 1981 Century
-8ball // (c) 1982 Century
-8ball1 // (c) 1982 Century
-logger // (c) 1982 Century
-dazzler // (c) 1982 Century
-diggerc // (c) 1982 Century
-wallst // (c) 1982 Century
-radarzon // (c) 1982 Century
-radarzon1 // (c) 1982 Century
-radarzont // (c) 1982 Tuni Electro Service
-outline // (c) 1982 Century
-goldbug // (c) 1982 Century
-heartatk // (c) 1983 Century Electronics
-hunchbak // (c) 1983 Century
-hunchbaka // (c) 1983 Century
-superbik // (c) 1983 Century
-raiders // (c) 1983 Century Electronics UK
-raidersr3 // (c) 1983 Century Electronics UK
-hero // (c) 1983 Seatongrove (c) 1984 CVS
-huncholy // (c) 1984 Seatongrove (c) CVS
-
-// Zaccaria Hardware (similar to CVS)
-quasar // (c) 1980 Zelco Games Italy
-quasara // (c) 1980 Zelco Games Italy
-
-// Unknown Century Electronics hardware (CVS?)
-spcwarp // 1983 Century Electronics UK LTD
-
-// Midway "Astrocade" games
-seawolf2 // (c) 1978
-spacezap // (c) 1980
-ebases // (c) 1980
-wow // (c) 1980
-wowg // (c) 1980
-gorf // (c) 1981
-gorfpgm1 // (c) 1981
-gorfpgm1g // (c) 1981
-robby // (c) 1981 Bally Midway
-demndrgn // (c) 1982 Bally Midway
-profpac // (c) 1983 Bally Midway
-tenpindx // (c) 1983 Bally Midway
-
-// Bally Midway MCR games
-// MCR1
-solarfox // (c) 1981
-kick // (c) 1981
-kickman // (c) 1981
-kickc // (c) 1981
-dpoker // (c) 1985
-// MCR2
-shollow // (c) 1981
-shollow2 // (c) 1981
-tron // (c) 1982
-tron2 // (c) 1982
-tron3 // (c) 1982
-tron4 // (c) 1982
-tronger // (c) 1982
-kroozr // (c) 1982
-domino // (c) 1982
-wacko // (c) 1982
-twotiger // (c) 1984
-twotigerc // (c) 1984
-// MCR2 + MCR3 sprites
-journey // (c) 1983
-// MCR3
-tapper // (c) 1983
-tappera // (c) 1983
-sutapper // (c) 1983
-rbtapper // (c) 1984
-timber // (c) 1984
-dotron // (c) 1983
-dotrona // (c) 1983
-dotrone // (c) 1983
-nflfoot // (c) 1983 + laserdisk
-demoderb // (c) 1984
-demoderbc // (c) 1984
-demoderm // (c) 1984
-sarge // (c) 1985
-rampage // (c) 1986
-rampage2 // (c) 1986
-powerdrv // (c) 1986
-stargrds // (c) 1987
-maxrpm // (c) 1986
-spyhunt // (c) 1983
-spyhuntp // (c) 1983
-spyhuntpr //
-turbotag // (c) 1985
-crater // (c) 1984
-// MCR 68000
-zwackery // (c) 1984
-xenophob // (c) 1987
-spyhunt2 // (c) 1987
-spyhunt2a // (c) 1987
-intlaser // (c) 1987
-blasted // (c) 1988
-archrivl // (c) 1989
-archrivla // (c) 1989
-archrivlb // bootleg
-trisport // (c) 1989
-pigskin // (c) 1990
-pigskina // (c) 1990
-pigskinb // (c) 1990
-
-// Bally / Sente games
-sentetst
-cshift // (c) 1984
-gghost // (c) 1984
-hattrick // (c) 1984
-otwalls // (c) 1984
-snakepit // (c) 1984
-snakepit2 // (c) 1983
-snakjack // (c) 1984
-stocker // (c) 1984
-triviag1 // (c) 1984
-trivia12 // (c) 1984
-triviag2 // (c) 1984
-triviasp // (c) 1984
-triviayp // (c) 1984
-triviabb // (c) 1984
-triviaes // (c) 1984
-gimeabrk // (c) 1985
-minigolf // (c) 1985
-minigolf2 // (c) 1985
-toggle // (c) 1985
-nametune // (c) 1986
-nametune2 // (c) 1986
-nstocker // (c) 1986
-nstocker2 // (c) 1986
-sfootbal // (c) 1986
-spiker // (c) 1986
-spiker2 // (c) 1986
-spiker3 // (c) 1986
-stompin // (c) 1986
-rescraid // (c) 1987
-rescraida // (c) 1987
-grudge // prototype - Bally/Midway
-shrike // (c) 1987
-gridlee // [1983 Videa] prototype - no copyright notice
-
-// Bally PC-based
-gammagic // (c) 1999 Bally Gaming Co.
-99bottles // (c) 1999 Bally Gaming Co.
-
-// Irem games
-// trivia: IREM means "International Rental Electronics Machines"
-andromed // (c) 1979
-ipminvad // M10 no copyright notice (Arcade TV Game List - P.67, Left, 26 from top)
-ipminvad1 // M10 incomplete dump
-ptrmj // M14 (c) 1979
-skychut // Irem [1980]
-spacbeam // M15 no copyright notice
-greenber // Irem
-headoni // Irem no copyright notice (1979 - Arcade TV Game List - P.98, Left, 7 from top)
-panther // M27 no copyright notice
-redalert // M27 (c) 1981 + "GDI presents"
-demoneye // M27 (c) 1981
-ww3 // M27 (c) 1981
-olibochu // M47 (c) 1981 + "GDI presents"
-mpatrol // M52 (c) 1982
-mpatrolw // M52 (c) 1982 + Williams license
-mranger // bootleg
-alpha1v // Vision Electronics
-troangel // (c) 1983
-newtangl // (c) 1983
-10yard // (c) 1983
-10yardj // (c) 1983
-vs10yard // (c) 1983/1984
-vs10yardj // (c) 1983/1984
-vs10yardu // (c) 1983/1984
-10yard85 // (c) 1985
-travrusa // (c) 1983
-travrusab // (c) 1983 I.P. (bootleg)
-motorace // (c) 1983 Williams license
-mototour // (c) 1983 Tecfri
-shtrider // (c) 1984 Seibu Kaihatsu
-shtridera // (c) 1984 Seibu Kaihatsu
-shtriderb // bootleg
-wilytowr // M63 (c) 1984
-atomboy // M63 (c) 1985 Irem + Memetron license
-atomboya // M63 (c) 1985 Irem + Memetron license
-fghtbskt // (c) 1984 Paradise Co. Ltd.
-// M62
-kungfum // (c) 1984
-kungfumd // (c) 1984 + Data East license
-spartanx // (c) 1984 (Japan)
-kungfub // bootleg
-kungfub2 // bootleg
-battroad // (c) 1984
-ldrun // (c) 1984 licensed from Broderbund
-ldruna // (c) 1984 licensed from Broderbund
-ldrun2 // (c) 1984 licensed from Broderbund
-ldrun3 // (c) 1985 licensed from Broderbund
-ldrun3j // (c) 1985 licensed from Broderbund
-ldrun4 // (c) 1986 licensed from Broderbund
-lotlot // (c) 1985 licensed from Tokuma Shoten
-kidniki // (c) 1986 + Data East USA license
-kidnikiu // (c) 1986 + Data East USA license
-yanchamr // (c) 1986 (Japan)
-lithero // bootleg
-spelunkr // (c) 1985 licensed from Broderbund
-spelunkrj // (c) 1985 licensed from Broderbund
-spelunk2 // (c) 1986 licensed from Broderbund
-horizon // (c) 1985
-youjyudn // (c) 1986 (Japan)
-
-vigilant // (c) 1988 (World Rev E)
-vigilanta // (c) 1988 (World Rev A)
-vigilantb // (c) 1988 (US Rev B)
-vigilantc // (c) 1988 (World Rev C)
-vigilantd // (c) 1988 (Japan Rev D)
-vigilantg // (c) 1988 (US Rev G)
-vigilanto // (c) 1988 (US)
-vigilantbl // bootleg
-kikcubic // (c) 1988 (Japan)
-kikcubicb // bootleg
-buccanrs // (c) 1989 Duintronic
-buccanrsa // (c) 1989 Duintronic
-// M72 (and derivatives)
-rtype // (c) 1987 (Japan)
-rtypej // (c) 1987 (Japan)
-rtypejp // (c) 1987 (Japan)
-rtypeu // (c) 1987 + Nintendo USA license (US)
-rtypeb // bootleg
-rtypem82b // bootleg
-bchopper // (c) 1987
-mrheli // (c) 1987 (Japan)
-nspirit // (c) 1988
-nspiritj // (c) 1988 (Japan)
-imgfight // (c) 1988 (World)
-imgfightj // (c) 1988 (Japan)
-loht // (c) 1989
-lohtj // (c) 1989 (Japan)
-lohtb // (c) 1989 (bootleg)
-lohtb2 // (c) 1989 (bootleg)
-xmultipl // (c) 1989 (Japan)
-xmultiplm72 // (c) 1989 (Japan)
-dbreed // (c) 1989
-dbreedm72 // (c) 1989
-rtype2 // (c) 1989
-rtype2j // (c) 1989 (Japan)
-rtype2jc // (c) 1989 (Japan)
-rtype2m82b // bootleg
-majtitle // (c) 1990 (World)
-majtitlej // (c) 1990 (Japan)
-hharry // (c) 1990 (World)
-hharryu // (c) 1990 Irem America (US)
-dkgensan // (c) 1990 (Japan)
-dkgensanm72 // (c) 1990 (Japan)
-poundfor // (c) 1990 (World)
-poundforj // (c) 1990 (Japan)
-poundforu // (c) 1990 Irem America (US)
-airduelm72 // (c) 1990 (Japan)
-airduel // (c) 1990 (World)
-cosmccop // (c) 1991 (World)
-gallop // (c) 1991 (Japan)
-ltswords // (c) 1991 (World)
-kengo // (c) 1991 (Japan)
-kengoa // (c) 1991 (Japan)
-// not M72, but same sound hardware
-sichuan2 // (c) 1989 Tamtex
-sichuan2a // (c) 1989 Tamtex
-shisen // (c) 1989 Tamtex
-matchit // (c) 1989 Tamtex
-// M90
-hasamu // (c) 1991 Irem (Japan)
-dynablst // (c) 1991 Irem (World)
-dynablstb // bootleg
-dynablstb2 // bootleg (alt)
-bombrman // (c) 1991 Irem (Japan)
-atompunk // (c) 1991 Irem America (licensed from Hudson Soft)
-// M97
-bbmanw // (c) 1992 Irem (World)
-bbmanwj // (c) 1992 Irem (Japan)
-bbmanwja // (c) 1992 Irem (Japan) - revised sound hardware
-bomblord // bootleg
-newapunk // (c) 1992 Irem America (US)
-quizf1 // (c) 1992 Irem (Japan)
-riskchal // (c) 1993 Irem
-gussun // (c) 1993 Irem (Japan)
-matchit2 // (c) 1993 Tamtex
-shisen2 // (c) 1993 Tamtex
-// M92
-gunforce // (c) 1991 Irem (World)
-gunforceu // (c) 1991 Irem America (US)
-gunforcej // (c) 1991 Irem (Japan)
-bmaster // (c) 1991 Irem
-crossbld // (c) 1991 Irem (Japan)
-lethalth // (c) 1991 Irem (World)
-thndblst // (c) 1991 Irem (Japan)
-uccops // (c) 1992 Irem (World)
-uccopsu // (c) 1992 Irem (US)
-uccopsar // (c) 1992 Irem (World)
-uccopsj // (c) 1992 Irem (Japan)
-mysticri // (c) 1992 Irem (World)
-mysticrib // bootleg?
-gunhohki // (c) 1992 Irem (Japan)
-majtitl2 // (c) 1992 Irem (World)
-majtitl2j // (c) 1992 Irem (Japan)
-skingame // (c) 1992 Irem America (US)
-skingame2 // (c) 1992 Irem America (US)
-hook // (c) 1992 Irem (World)
-hooku // (c) 1992 Irem America (US)
-hookj // (c) 1992 Irem (Japan)
-ppan // bootleg
-rtypeleo // (c) 1992 Irem (World)
-rtypeleoj // (c) 1992 Irem (Japan)
-inthunt // (c) 1993 Irem (World)
-inthuntu // (c) 1993 Irem (US)
-kaiteids // (c) 1993 Irem (Japan)
-nbbatman // (c) 1993 Irem (World)
-nbbatmanu // (c) 1993 Irem America (US)
-nbbatman2bl // bootleg
-leaguemn // (c) 1993 Irem (Japan)
-ssoldier // (c) 1993 Irem America (US)
-psoldier // (c) 1993 Irem (Japan)
-dsoccr94j // (c) 1994 Irem (Japan)
-gunforc2 // (c) 1994 Irem
-geostorm // (c) 1994 Irem (Japan)
-// M107
-airass // (c) 1993 Irem (World)
-firebarr // (c) 1993 Irem (Japan)
-dsoccr94 // (c) 1994 Irem (Data East Corporation license)
-dsoccr94k //
-kftgoal // (c) 1994 Jaleco
-wpksoc // (c) 1995 Jaleco
-
-// Gottlieb/Mylstar games (Gottlieb became Mylstar in 1983)
-reactor // GV-100 (c) 1982 Gottlieb
-mplanets // GV-102 (c) 1983 Gottlieb
-mplanetsuk // GV-102 (c) 1983 Gottlieb
-qbert // GV-103 (c) 1982 Gottlieb
-qberta // GV-103 (c) 1982 Gottlieb
-qbertj // GV-103 (c) 1982 Gottlieb + Konami license
-myqbert // GV-103?(c) 1982 Gottlieb
-qberttst // GV-103 (c) 1982 Gottlieb
-qbtrktst // GV-103 (c) 1982 Gottlieb
-insector // GV-??? (c) 1982 Gottlieb - never released
-tylz // GV-??? (c) 1982 Gottlieb - never released
-argusg // GV-??? (c) 1982 Gottlieb - never released
-krull // GV-105 (c) 1983 Gottlieb
-kngtmare // GV-??? (c) 1983 Gottlieb - never released
-sqbert // GV-??? (c) 1983 Mylstar - never released
-mach3 // GV-109 (c) 1983 Mylstar
-cobram3 // ...... (c) 1984 Data East
-usvsthem // GV-??? (c) 198? Mylstar
-3stooges // GV-113 (c) 1984 Mylstar
-3stoogesa // GV-113 (c) 1984 Mylstar
-qbertqub // GV-119 (c) 1983 Mylstar
-screwloo // GV-123 (c) 1983 Mylstar - never released
-curvebal // GV-134 (c) 1984 Mylstar
-vidvince // GV-??? (c) 1984 Mylstar - never released
-wizwarz // GV-??? (c) 1984 Mylstar - never released
-
-// Taito "Qix hardware" games
-qix // LK (c) 1981 Taito America Corporation
-qixa // LK (c) 1981 Taito America Corporation
-qixb // LK (c) 1981 Taito America Corporation
-qixo // LK (c) 1981 Taito America Corporation
-qix2 // ?? (c) 1981 Taito America Corporation
-sdungeon // SD (c) 1981 Taito America Corporation
-elecyoyo // YY (c) 1982 Taito America Corporation
-elecyoyo2 // YY (c) 1982 Taito America Corporation
-kram // KS (c) 1982 Taito America Corporation
-kram2 // KS (c) 1982 Taito America Corporation
-kram3 // KS (c) 1982 Taito America Corporation
-zookeep // ZA (c) 1982 Taito America Corporation
-zookeep2 // ZA (c) 1982 Taito America Corporation
-zookeep3 // ZA (c) 1982 Taito America Corporation
-slither // (c) 1982 Century II
-slithera // (c) 1982 Century II
-complexx // CX (c) 1984 Taito America Corporation
-
-// Taito SJ System games
-spaceskr // EB (c) 1981 Taito Corporation
-spacecr // CG (c) 1981 Taito Corporation
-junglek // KN (c) 1982 Taito Corporation
-junglekas // KN (c) 1982 Taito Corporation (alternate sound)
-junglekj2 // KN (c) 1982 Taito Corporation
-jungleh // KN (c) 1982 Taito America Corporation
-junglehbr // KN (c) 1982 Taito do Brasil
-piratpet // KN (c) 1982 Taito America Corporation
-jungleby // bootleg
-alpine // RH (c) 1982 Taito Corporation
-alpinea // RH (c) 1982 Taito Corporation
-timetunl // UN (c) 1982 Taito Corporation
-wwestern // WW (c) 1982 Taito Corporation
-wwestern1 // WW (c) 1982 Taito Corporation
-frontlin // FL (c) 1982 Taito Corporation
-elevator // EA (c) 1983 Taito Corporation
-elevatorb // bootleg
-tinstar // A10 (c) 1983 Taito Corporation
-tinstar2 // A10 (c) 1983 Taito Corporation
-waterski // A03 (c) 1983 Taito Corporation
-bioatack // AA8 (c) 1983 Taito Corporation + Fox Video Games license
-hwrace // AC4 (c) 1983 Taito Corporation
-sfposeid // A14 (c) 1984 Taito Corporation
-kikstart // A20 (c) 1984 Taito Corporation
-
-// other Taito games
-fgoal // TF (c) 1979 Taito Corporation
-fgoala // MF (c) 1979 Taito Corporation
-crbaloon // CL (c) 1980 Taito Corporation
-crbaloon2 // CL (c) 1980 Taito Corporation
-sbowling // KB (c) 1982 Taito Corporation
-grchamp // GM (c) 1981 Taito Corporation
-marinedt // MG (c) 1981 Taito Corporation
-changela // ??? (c) 1983 Taito Corporation
-fspiderb // bootleg
-jollyjgr // KD (c) 1982 Taito Corporation
-bking // DM (c) 1982 Taito Corporation
-bking2 // AD6 (c) 1983 Taito Corporation
-bking3 // A24 (c) 1984 Taito Corporation
-chaknpop // AO4 (c) 1983 Taito Corporation
-josvolly // AA (c) 1983 Taito Corporation
-gsword // AC (c) 1984 Taito Corporation
-gsword2 // AC (c) 1984 Taito Corporation
-cyclemb // P0 (c) 1984 Taito Corporation [+ Seta]
-pitnrun // PR (c) 1984 Taito Corporation
-pitnruna // PR (c) 1984 Taito Corporation
-lkage // A54 (c) 1984 Taito Corporation
-lkageo // A54 (c) 1984 Taito Corporation
-lkageoo // A54 (c) 1984 Taito Corporation
-lkageb // bootleg
-lkageb2 // bootleg
-lkageb3 // bootleg
-skydest // PD0 (c) 1985 Taito Corporation
-bygone // A53 (c) 1985 Taito Corporation - prototype ?
-msisaac // A34 (c) 1985 Taito Corporation
-retofinv // A37 (c) 1985 Taito Corporation
-retofinv1 // bootleg
-retofinv2 // bootleg
-fightrol // (c) 1983 Taito
-rollace // (c) 1983 Williams
-rollace2 // (c) 1983 Williams
-lgp // (c) 1983 Taito
-lgpalt // (c) 1983 Taito
-vsgongf // (c) 1984 Kaneko
-ringfgt // (c) 1984 Taito
-ringfgt2 // (c) 1984 Taito
-fieldday // A23 (c) 1984 Taito
-undoukai // A17 (c) 1984 Taito
-40love // A30 (c) 1984 Taito
-tsamurai // A35 (c) 1985 Taito
-tsamurai2 // A35 (c) 1985 Taito
-tsamuraih // bootleg
-ladymstr // A49 (c) 1985 Taito
-nunchaku // ??? (c) 1985 Taito
-yamagchi // A38 (c) 1985 Taito
-m660 // ??? (c) 1986 Taito America Corporation
-m660j // ??? (c) 1986 Taito Corporation (Japan)
-m660b // bootleg
-alphaxz // AZ (c) 1986 Ed/Wood Place
-buggychl // A22 (c) 1984 Taito Corporation
-buggychlt // A22 (c) 1984 Taito Corporation + Tefri license
-ssrj // A40 (c) 1985 Taito Corporation
-bigevglf // A67 (c) 1986 Taito America Corporation (US)
-bigevglfj // A67 (c) 1986 Taito Corporation (Japan)
-flstory // A45 (c) 1985 Taito Corporation
-flstoryj // A45 (c) 1985 Taito Corporation (Japan)
-onna34ro // A52 (c) 1985 Taito Corporation (Japan)
-onna34roa // A52 (c) 1985 Taito Corporation (Japan)
-victnine // A16 (c) 1985 Taito Corporation (Japan)
-rumba // A23 (c) 1985 Taito Corporation (Japan)
-gladiatr // QB (c) 1986 Taito America Corporation (US)
-gcastle // QB (c) 1986 Taito Corporation (prototype?)
-ogonsiro // QB (c) 1986 Taito Corporation (Japan)
-greatgur // QB (c) 1986 Taito Corporation (Japan?)
-ppking // QO (c) 1985 Taito America Corporation (US)
-nycaptor // A50 (c) 1985 Taito Corporation
-cyclshtg // A97 (c) 1986 Taito Corporation
-bronx // bootleg
-colt // bootleg
-ksayakyu // ??? (c) 1985 Taito Corporation
-benberob // A26
-halleys // A62 (c) 1986 Taito America Corporation + Coin It (US)
-halleysc // A62 (c) 1986 Taito Corporation (Japan)
-halleycj // A62 (c) 1986 Taito Corporation (Japan)
-halley87 // A62 (c) 1986 Taito Corporation (Japan)
-lsasquad // A64 (c) 1986 Taito Corporation / Taito America (dip switch)
-storming // A64 (c) 1986 Taito Corporation
-daikaiju // A74 (c) 1986 Taito
-tokio // A71 1986
-tokioo // A71 1986
-tokiou // A71 1986
-tokiob // bootleg
-bublbobl // A78 (c) 1986 Taito Corporation
-bublbobl1 // A78 (c) 1986 Taito Corporation
-bublboblr // A78 (c) 1986 Taito America Corporation + Romstar license
-bublboblr1 // A78 (c) 1986 Taito America Corporation + Romstar license
-boblbobl // bootleg
-sboblbobl // bootleg
-sboblbobla // bootleg
-sboblboblb // bootleg
-sboblboblc // bootleg
-sboblbobld // bootleg
-bublboblb // bootleg
-bub68705 // bootleg
-dland // bootleg
-bbredux // bootleg / hack
-bublcave // hack
-boblcave // hack
-bublcave11 // hack
-bublcave10 // hack
-missb2 // bootleg on enhanced hardware
-bublpong // bootleg on enhanced hardware
-kikikai // A85 (c) 1986 Taito Corporation
-knightb // bootleg
-kicknrun // A87 (c) 1986 Taito Corporation
-kicknrunu // A87 (c) 1986 Taito Corporation
-mexico86 // bootleg (Micro Research)
-mexico86a // bootleg
-darius // A96 (c) 1986 Taito Corporation Japan (World)
-dariusu // A96 (c) 1986 Taito America Corporation (US)
-dariusj // A96 (c) 1986 Taito Corporation (Japan)
-dariuso // A96 (c) 1986 Taito Corporation (Japan)
-dariuse // A96 (c) 1986 Taito Corporation (Japan)
-rastan // B04 (c) 1987 Taito Corporation Japan (World)
-rastana // B04 (c) 1987 Taito Corporation Japan (World)
-rastanu // B04 (c) 1987 Taito America Corporation (US)
-rastanua // B04 (c) 1987 Taito America Corporation (US)
-rastanub // B04 (c) 1987 Taito America Corporation (US)
-rastsaga // B04 (c) 1987 Taito Corporation (Japan)
-rastsagaa // B04 (c) 1987 Taito Corporation (Japan)
-topspeed // B14 (c) 1987 Taito Corporation Japan (World)
-topspeedu // B14 (c) 1987 Taito America Corporation (US)
-fullthrl // B14 (c) 1987 Taito Corporation (Japan)
-opwolf // B20 (c) 1987 Taito Corporation Japan (World)
-opwolfa // B20 (c) 1987 Taito Corporation Japan (World)
-opwolfj // B20 (c) 1987 Taito Corporation (Japan)
-opwolfu // B20 (c) 1987 Taito America Corporation (US)
-opwolfb // bootleg
-othunder // B67 (c) 1988 Taito Corporation Japan (World)
-othunderu // B67 (c) 1988 Taito America Corporation (US)
-othunderuo // B67 (c) 1988 Taito America Corporation (US)
-othunderj // B67 (c) 1988 Taito Corporation (Japan)
-rbisland // B22 (c) 1987 Taito Corporation
-rbislando // B22 (c) 1987 Taito Corporation
-rbislande // B39 (c) 1988 Taito Corporation
-jumping // bootleg
-jumpinga // bootleg (Seyutu)
-jumpingi // bootleg (Seyutu / Imnoe)
-arkanoid // A75 (c) 1986 Taito Corporation Japan (World)
-arkanoidu // A75 (c) 1986 Taito America Corporation + Romstar license (US)
-arkanoiduo // A75 (c) 1986 Taito America Corporation + Romstar license (US)
-arkanoidj // A75 (c) 1986 Taito Corporation (Japan)
-arkanoidja // A75 (c) 1986 Taito Corporation (Japan)
-arkanoidjb // A75 (c) 1986 Taito Corporation (Japan)
-arkanoidjbl // bootleg
-arkanoidjbl2 // bootleg (Beta)
-ark1ball // bootleg
-arkangc // bootleg
-arkangc2 // bootleg
-arkblock // bootleg
-arkbloc2 // bootleg
-arkbloc3 // bootleg
-arkgcbl // bootleg
-arkgcbla // bootleg
-paddle2 // bootleg
-block2 // bootleg
-arkatayt // bootleg
-arktayt2 // bootleg
-arkatour // ??? (c) 1987 Taito America Corporation + Romstar license (US)
-tetrsark // ??? (c) D.R.Korea
-hexa // D. R. Korea
-hexaa //
-brixian // (c) 1993 Cheil Computer System
-sqix // B03 1987
-sqixr1 // B03 1987
-sqixu // B03 1987
-sqixb1 // bootleg? but (c) 1987
-sqixb2 // bootleg? but (c) 1987
-perestro // (c) 1994 Promat
-perestrof // (c) 1993 Promat / Fuuki
-pbillian // (c) 1986 Taito
-hotsmash // B18 (c) 1987 Taito
-exzisus // B12 (c) 1987 Taito Corporation (Japan)
-exzisusa // B23 (c) 1987 Taito Corporation (Japan)
-exzisust // B23 (c) 1987 TAD Corp (based on Japan Conversion)
-minivadr // D26 cabinet test board
-volfied // C04 (c) 1989 Taito Corporation Japan (World)
-volfiedu // C04 (c) 1989 Taito America Corporation (US)
-volfiedj // C04 (c) 1989 Taito Corporation (Japan)
-volfiedo // C04 (c) 1989 Taito Corporation Japan (World)
-volfieduo // C04 (c) 1989 Taito America Corporation (US)
-volfiedjo // C04 (c) 1989 Taito Corporation (Japan)
-bonzeadv // B41 (c) 1988 Taito Corporation Japan (World)
-bonzeadvo // B41 (c) 1988 Taito Corporation Japan (World)
-bonzeadvu // B41 (c) 1988 Taito America Corporation (US)
-bonzeadvp
-jigkmgri // B41 (c) 1988 Taito Corporation (Japan)
-asuka // B68 (c) 1988 Taito Corporation (World)
-asukaj // B68 (c) 1988 Taito Corporation (Japan)
-mofflott // C17 (c) 1989 Taito Corporation (Japan)
-cadash // C21 (c) 1989 Taito Corporation Japan
-cadashj // C21 (c) 1989 Taito Corporation
-cadashj1 // C21 (c) 1989 Taito Corporation
-cadashjo // C21 (c) 1989 Taito Corporation
-cadashu // C21 (c) 1989 Taito America Corporation
-cadashi // C21 (c) 1989 Taito Corporation Japan
-cadashf // C21 (c) 1989 Taito Corporation Japan
-cadashg // C21 (c) 1989 Taito Corporation Japan
-cadashp // prototype
-parentj // C42 (c) 199? Taito
-galmedes // (c) 1992 Visco (Japan)
-earthjkr // (c) 1993 Visco (Japan)
-earthjkrp //
-eto // (c) 1994 Visco (Japan)
-wgp // C32 (c) 1989 Taito America Corporation (US)
-wgpj // C32 (c) 1989 Taito Corporation (Japan)
-wgpjoy // C32 (c) 1989 Taito Corporation (Japan)
-wgpjoya // C32 (c) 1989 Taito Corporation (Japan)
-wgp2 // C73 (c) 1990 Taito Corporation (Japan)
-galastrm // C99 (c) 1992 Taito Corporation
-slapshot // D71 (c) 1994 Taito Corporation (Japan)
-opwolf3 // D74 (c) 1994 Taito
-opwolf3u // D74 (c) 1994 Taito
-scessjoe // ??? (c) 1990 Wave / Taito
-ashnojoe // ??? (c) 1990 Wave / Taito
-2mindril // (c) 1993 Taito
-
-// Taito multi-screen games
-wyvernf0 // A39 (c) 1985 Taito Corporation (Japan)
-ninjaw // B31 (c) 1987 Taito Corporation Japan (World)
-ninjawu // B31 (c) 1987 Taito America Corporation (US)
-ninjawj // B31 (c) 1987 Taito Corporation (Japan)
-darius2 // C07 (c) 1989 Taito Corporation (Japan)
-sagaia // C07 (c) 1989 Taito Corporation Japan (World)
-darius2d // C07 (c) 1989 Taito Corporation (Japan)
-darius2do // C07 (c) 1989 Taito Corporation (Japan)
-warriorb // D24 (c) 1991 Taito Corporation (Japan)
-
-// Taito "X"-system games
-superman // B61 (c) 1988 Taito Corporation
-supermanu // B61 (c) 1988 Taito Corporation
-supermanj // B61 (c) 1988 Taito Corporation
-twinhawk // B87 (c) 1989 Taito Corporation Japan (World)
-twinhawku // B87 (c) 1989 Taito America Corporation (US)
-daisenpu // B87 (c) 1989 Taito Corporation (Japan)
-gigandes // (c) 1989 East Technology
-gigandesa // (c) 1989 East Technology
-kyustrkr // (c) 1989 East Technology
-ballbros // no copyright notice
-
-// Taito "tnzs" (Seta) hardware
-plumppop // A98 (c) 1987 Taito Corporation (Japan)
-jpopnics // (c)1992 NICs, based on Plump Pop code
-extrmatn // B06 (c) 1987 Taito Corporation Japan (World)
-extrmatnu // B06 (c) 1987 World Games
-extrmatnj // B06 (c) 1987 Taito Corporation (Japan)
-arknoid2 // B08 (c) 1987 Taito Corporation Japan (World)
-arknoid2u // B08 (c) 1987 Taito America Corporation + Romstar license (US)
-arknoid2j // B08 (c) 1987 Taito Corporation (Japan)
-arknoid2b // B08 (c) 1987 (bootleg)
-drtoppel // B19 (c) 1987 Taito Corporation Japan (World)
-drtoppelu // B19 (c) 1987 Taito Corporation (US)
-drtoppelj // B19 (c) 1987 Taito Corporation (Japan)
-kageki // B35 (c) 1988 Taito America Corporation + Romstar license (US)
-kagekij // B35 (c) 1988 Taito Corporation (Japan)
-kagekih // B35 (c) 1992 (hack)
-chukatai // B44 (c) 1988 Taito Corporation Japan (World)
-chukataiu // B44 (c) 1988 Taito Corporation (US)
-chukataij // B44 (c) 1988 Taito Corporation (Japan)
-kabukiz // B50 (c) 1988 Taito Corporation Japan (World)
-kabukizj // B50 (c) 1988 Taito Corporation (Japan)
-tnzs // B53 (c) 1988 Taito Corporation Japan (World) (new logo)
-tnzsj // B53 (c) 1988 Taito Corporation (Japan) (new logo)
-tnzsjo // B53 (c) 1988 Taito Corporation (Japan) (new logo)
-tnzso // B53 (c) 1988 Taito Corporation Japan (World) (old logo)
-tnzsop // B53?(c) 1988 Taito Corporation Japan (World) (old logo)
-insectx // B97 (c) 1989 Taito Corporation Japan (World)
-insectxj // B97 (c) 1989 Taito Corporation (Japan)
-cchance // (c)1987 Taito?
-champbwl // (c)1989 Romstar. not Taito, but the same Seta video chips
-doraemon // Sunsoft / Epoch / Fujiko - Shogakukan - TV Asahi (prototype)
-thedealr // Visco Games
-
-// Taito L-System games
-raimais // B36 (c) 1988 Taito Corporation (Japan)
-raimaisj // B36 (c) 1988 Taito Corporation
-raimaisjo // B36 (c) 1988 Taito Corporation
-kurikint // B42 (c) 1988 Taito Corporation Japan (World)
-kurikintu // B42 (c) 1988 Taito America Corporation (US)
-kurikintj // B42 (c) 1988 Taito Corporation (Japan)
-kurikinta // B42 (c) 1988 Taito Corporation Japan (World)
-evilston // C67 (c) 1990 Spacy Industrial, Ltd
-fhawk // B70 (c) 1988 Taito Corporation Japan (World)
-fhawkj // B70 (c) 1988 Taito Corporation (Japan)
-plotting // B96 (c) 1989 Taito Corporation Japan (World)
-plottingu // B96 (c) 1989 Taito Corporation Japan (US)
-plottinga // B96 (c) 1989 Taito Corporation Japan (World)
-plottingb // B96 (c) 1989 Taito Corporation Japan (World)
-flipull // B96 (c) 1989 Taito Corporation Japan (World)
-champwr // C01 (c) 1989 Taito Corporation Japan (World)
-champwru // C01 (c) 1989 Taito America Corporation (US)
-champwrj // C01 (c) 1989 Taito Corporation (Japan)
-puzznic // C20 (c) 1989 Taito Corporation (Japan)
-puzznicj // C20 (c) 1989 Taito Corporation (Japan)
-puzznici // bootleg
-puzznicb // bootleg
-puzznicba // bootleg
-horshoes // C47 (c) 1990 Taito America Corporation (US)
-palamed // C63 (c) 1990 Taito Corporation (Japan)
-cachat // ??? (c) 1993 Taito Corporation (Japan)
-tubeit // ??? no copyright message
-cubybop // ??? no copyright message
-plgirls // (c) 1992 Hot-B.
-plgirls2 // (c) 1993 Hot-B.
-plgirls2b //
-lagirl // plgirls bootleg?
-
-// Taito H-System games
-syvalion // B51 (c) 1988 Taito Corporation (Japan)
-syvalionp //
-recordbr // B56 (c) 1988 Taito Corporation Japan (World)
-gogold // B56 (c) 1988 Taito Corporation (Japan)
-dleague // C02 (c) 1990 Taito America Corporation (US)
-dleaguej // C02 (c) 1990 Taito Corporation (Japan)
-tetristh // C26 (c) 1988 Sega Enterprises,Ltd. (Japan)
-
-// Taito B-System games
-masterw // B72 (c) 1989 Taito Corporation Japan (World)
-masterwu // B72 (c) 1989 Taito America Corporation (US)
-masterwj // B72 (c) 1989 Taito Corporation (Japan)
-yukiwo // prototype
-nastar // B81 (c) 1988 Taito Corporation Japan (World)
-nastarw // B81 (c) 1988 Taito America Corporation (US)
-rastsag2 // B81 (c) 1988 Taito Corporation (Japan)
-rambo3 // B93 (c) 1989 Taito Europe Corporation (Europe)
-rambo3u // B93 (c) 1989 Taito America Corporation (US)
-rambo3p // B93 (c) 1989 Taito Europe Corporation (Europe) Proto or bootleg???
-crimec // B99 (c) 1989 Taito Corporation Japan (World)
-crimecu // B99 (c) 1989 Taito America Corporation (US)
-crimecj // B99 (c) 1989 Taito Corporation (Japan)
-tetrist // C12 (c) 1988 Sega Enterprises,Ltd. (Japan)
-tetrista // C35 (c) 1988 Sega Enterprises,Ltd. (Japan)
-viofight // C16 (c) 1989 Taito Corporation Japan (World)
-viofightu // C16 (c) 1989 Taito America Corporation (US)
-viofightj // C16 (c) 1989 Taito Corporation (Japan)
-ashura // C43 (c) 1990 Taito Corporation Japan (World)
-ashuraj // C43 (c) 1990 Taito Corporation (Japan)
-ashurau // C43 (c) 1990 Taito America Corporation (US)
-hitice // C59 (c) 1990 Williams (US)
-hiticej // C59 (c) 1990 Midway/Taito Corporation (Japan)
-sbm // C69 (c) 1990 Taito Corporation (Japan)
-selfeena // ??? (c) 1991 East Technology
-silentd // ??? (c) 1992 Taito Corporation Japan (World)
-silentdu // ??? (c) 1992 Taito Corporation Japan (World)
-silentdj // ??? (c) 1992 Taito Corporation (Japan)
-ryujin // ??? (c) 1993 Taito Corporation (Japan)
-qzshowby // D72 (c) 1993 Taito Corporation (Japan)
-realpunc // D76 (c) 1994 Taito Corporation (Japan)
-pbobble // ??? (c) 1994 Taito Corporation (Japan)
-spacedx // D89 (c) 1994 Taito Corporation (US)
-spacedxj // D89 (c) 1994 Taito Corporation (Japan)
-spacedxo // D89 (c) 1994 Taito Corporation (Japan)
-
-// Taito Z-System games
-contcirc // B33 (c) 1987 Taito Corporation Japan (World)
-contcircu // B33 (c) 1987 Taito America Corporation (US)
-contcircua // B33 (c) 1987 Taito America Corporation (US)
-contcircj // B33 (c) 1987 Taito Corporation (Japan)
-chasehq // B52 (c) 1988 Taito Corporation Japan (World)
-chasehqj // B52 (c) 1988 Taito Corporation (Japan)
-chasehqju // B52 (c) 1988 Taito Corporation (Japan)
-chasehqu // B52 (c) 1988 Taito America Corporation (US)
-enforce // B58 (c) 1988 Taito Corporation Japan (World)
-enforcej // B58 (c) 1988 Taito Corporation (Japan)
-enforceja // B58 (c) 1988 Taito Corporation (Japan)
-nightstr // B91 (c) 1989 Taito Corporation Japan (World)
-nightstrj // B91 (c) 1989 Taito Corporation (Japan)
-nightstru // B91 (c) 1989 Taito America Corporation (US)
-sci // C09 (c) 1989 Taito Corporation Japan (World)
-scia // C09 (c) 1989 Taito Corporation Japan (World)
-scij // C09 (c) 1989 Taito Corporation Japan (World)
-sciu // C09 (c) 1989 Taito America Corporation (US)
-scin // C09 (c) 1991 Taito Corporation Japan (Negro Torino hack)
-bshark // C34 (c) 1989 Taito Corporation Japan (World)
-bsharku // C34 (c) 1989 Taito America Corporation (US)
-bsharkj // C34 (c) 1989 Taito Corporation (Japan)
-bsharkjjs // C34 (c) 1989 Taito Corporation (Japan) (Joystick version)
-aquajack // B77 (c) 1990 Taito Corporation Japan (World)
-aquajacku // B77 (c) 1990 Taito America Corporation (US)
-aquajackj // B77 (c) 1990 Taito Corporation (Japan)
-spacegun // C57 (c) 1990 Taito Corporation Japan (World)
-spacegunu // C57 (c) 1990 Taito America Corporation (US)
-spacegunj // C57 (c) 1990 Taito Corporation (Japan)
-dblaxle // C78 (c) 1991 Taito America Corporation (US)
-dblaxleu // C78 (c) 1991 Taito America Corporation (US)
-pwheelsj // C78 (c) 1991 Taito Corporation (Japan)
-racingb // C84 (c) 1991 Taito Corporation Japan (World)
-racingbj // C84 (c) 1991 Taito Corporation (Japan)
-
-// Taito Air System games
-mlanding // ??? (c) 1987 Taito America Corporation (US)
-topland // B62 (c) 1988 Taito Corporation Japan (World)
-ainferno // C45 (c) 1990 Taito America Corporation (US)
-ainfernoj // C45 (c) 1990 Taito Corporation (Japan)
-
-// enhanced Z-System hardware games
-gunbustr // D27 (c) 1992 Taito Corporation Japan (World)
-gunbustru // D27 (c) 1992 Taito America Corporation (US)
-gunbustrj // D27 (c) 1992 Taito Corporation (Japan)
-superchs // D46 (c) 1992 Taito Corporation Japan (World)
-superchsu // D46 (c) 1992 Taito America Corporation (US)
-superchsj // D46 (c) 1992 Taito Corporation (Japan)
-superchsp // prototype
-groundfx // D51 (c) 1992 Taito Corporation
-undrfire // D67 (c) 1993 Taito Corporation Japan (World)
-undrfireu // D67 (c) 1993 Taito America Corporation (US)
-undrfirej // D67 (c) 1993 Taito Corporation (Japan)
-cbombers // D83 (c) 1993 Taito Corporation Japan (World)
-cbombersj // D83 (c) 1993 Taito Corporation (Japan)
-cbombersp //
-
-// Taito F2 games
-finalb // 1989.?? B82 (c) 1988 Taito Corporation Japan (World)
-finalbj // 1989.04 B82 (c) 1988 Taito Corporation (Japan)
-finalbu // 1989.06 B82 (c) 1988 Taito America Corporation (US)
-dondokod // 1989.?? B95 (c) 1989 Taito Corporation Japan (World)
-dondokodu // 1989.?? B95 (c) 1989 Taito America Corporation (US)
-dondokodj // 1989.07 B95 (c) 1989 Taito Corporation (Japan)
-megablst // 1989.?? C11 (c) 1989 Taito Corporation Japan (World)
-megablstu // 1989.?? C11 (c) 1989 Taito America Corporation (US)
-megablstj // 1989.11 C11 (c) 1989 Taito Corporation (Japan)
-thundfox // 1990.?? C28 (c) 1990 Taito Corporation Japan (World)
-thundfoxu // 1990.06 C28 (c) 1990 Taito America Corporation (US)
-thundfoxj // 1990.07 C28 (c) 1990 Taito Corporation (Japan)
-cameltry // 1990.?? C38 (c) 1989 Taito America Corporation (US)
-cameltrya // 1990.?? C38 (c) 1989 Taito America Corporation (US)
-cameltryau // 1990.?? C38 (c) 1989 Taito America Corporation (US)
-cameltryj // 1990.04 C38 (c) 1989 Taito Corporation (Japan)
-qtorimon // 1990.02 C41 (c) 1990 Taito Corporation (Japan)
-liquidk // 1990.?? C49 (c) 1990 Taito Corporation Japan (World)
-liquidku // 1990.?? C49 (c) 1990 Taito America Corporation (US)
-mizubaku // 1990.08 C49 (c) 1990 Taito Corporation (Japan)
-quizhq // 1990.07 C53 (c) 1990 Taito Corporation (Japan)
-ssi // 1990.?? C64 (c) 1990 Taito Corporation Japan (World)
-ssia // 1990.?? C64 (c) 1990 Taito Corporation Japan (World)
-majest12 // 1990.11 C64 (c) 1990 Taito Corporation (Japan)
- // 1990.12 C64 (US)
-gunfront // 1991.?? C71 (c) 1990 Taito Corporation Japan (World)
-gunfrontj // 1991.01 C71 (c) 1990 Taito Corporation (Japan)
-growl // 1991.?? C74 (c) 1990 Taito Corporation Japan (World)
-growla // 1991.?? C74 (c) 1990 Taito Corporation Japan (World)
-growlu // 1991.02 C74 (c) 1990 Taito America Corporation (US)
-runark // 1991.02 C74 (c) 1990 Taito Corporation (Japan)
-growlp // 1991.?? C74 (c) 1990 Taito Corporation Japan (World, prototype)
-mjnquest // 1991.05 C77 (c) 1990 Taito Corporation (Japan)
-mjnquestb // 1991.05 C77 (c) 1990 Taito Corporation (Japan)
-footchmp // 1991.?? C80 (c) 1990 Taito Corporation Japan (World)
-footchmpbl // bootleg
-hthero // 1991.03 C80 (c) 1990 Taito Corporation (Japan)
-euroch92 // 1991.?? (c) 1992 Taito Corporation Japan (World)
-koshien // 1991.04 C81 (c) 1990 Taito Corporation (Japan)
-yuyugogo // 1991.03 C83 (c) 1990 Taito Corporation (Japan)
-ninjak // 1991.?? C85 (c) 1990 Taito Corporation Japan (World)
-ninjakj // 1991.04 C85 (c) 1990 Taito Corporation (Japan)
-ninjaku // 1991.03 C85 (c) 1990 Taito Corporation (Japan)
-solfigtr // 1991.?? C91 (c) 1991 Taito Corporation Japan (World)
-qzquest // 1991.07 C92 (c) 1991 Taito Corporation (Japan)
-pulirula // 1991.?? C98 (c) 1991 Taito Corporation Japan (World)
-pulirulaj // 1991.11 C98 (c) 1991 Taito Corporation (Japan)
-metalb // 1991.?? D16? (c) 1991 Taito Corporation Japan (World)
-metalbj // 1991.11 D12 (c) 1991 Taito Corporation (Japan)
-qzchikyu // 1992.02 D19 (c) 1991 Taito Corporation (Japan)
-yesnoj // 1992.03 D20 (c) 1992 Taito Corporation (Japan)
-deadconx // 1992.?? D28 (c) 1992 Taito Corporation Japan (World)
-deadconxj // 1992.08 D28 (c) 1992 Taito Corporation (Japan)
-dinorex // 1992.?? D39 (c) 1992 Taito Corporation Japan (World)
-dinorexj // 1992.11 D39 (c) 1992 Taito Corporation (Japan)
-dinorexu // 1992.?? D39 (c) 1992 Taito America Corporation (US)
-qjinsei // 1993.03 D48 (c) 1992 Taito Corporation (Japan)
-qcrayon // 1993.08 D55 (c) 1993 Taito Corporation (Japan)
-qcrayon2 // 1994.01 D63 (c) 1993 Taito Corporation (Japan)
-driftout // 1991.10 (c) 1991 Visco (Europe)
-driftoutj // 1991.10 (c) 1991 Visco (Japan)
-driveout // bootleg
-
-// Taito F3 games
-ringrage // 1992.?? D21 (c) 1992 Taito Corporation Japan (World)
-ringragej // 1992.09 D21 (c) 1992 Taito Corporation (Japan)
-ringrageu // 1992.02 D21 (c) 1992 Taito America Corporation (US)
-arabianm // 1992.?? D29 (c) 1992 Taito Corporation Japan (World)
-arabianmj // 1992.09 D29 (c) 1992 Taito Corporation (Japan)
-arabianmu // 1992.10 D29 (c) 1992 Taito America Corporation (US)
-ridingf // 1992.?? D34 (c) 1992 Taito Corporation Japan (World)
-ridingfj // 1992.12 D34 (c) 1992 Taito Corporation (Japan)
-ridingfu // 1992.?? D34 (c) 1992 Taito America Corporation (US)
-gseeker // 1992.?? D40 (c) 1992 Taito Corporation Japan (World)
-gseekerj // 1992.12 D40 (c) 1992 Taito Corporation (Japan)
-gseekeru // 1992.?? D40 (c) 1992 Taito America Corporation (US)
-hthero93 // 1993.03 D49 (c) 1992 Taito Corporation (Japan)
-hthero93u // 1993.04 D49 (c) 1992 Taito America Corporation (US)
-cupfinal // 1993.?? D49 (c) 1993 Taito Corporation Japan (World)
-trstar // 1993.?? D53 (c) 1993 Taito Corporation Japan (World)
-trstarj // 1993.07 D53 (c) 1993 Taito Corporation (Japan)
-prmtmfgt // 1993.08 D53 (c) 1993 Taito Corporation (US)
-prmtmfgto // 1993.08 D53 (c) 1993 Taito Corporation (US)
-trstaro // 1993.?? D53 (c) 1993 Taito Corporation (World)
-trstaroj // 1993.07 D53 (c) 1993 Taito Corporation (Japan)
-gunlock // 1994.?? D66 (c) 1993 Taito Corporation Japan (World)
-rayforcej // 1994.02 D66 (c) 1993 Taito Corporation (Japan)
-rayforce // 1994.?? D66 (c) 1993 Taito America Corporation (US)
-scfinals // 1994.?? D68 (c) 1993 Taito Corporation Japan (World)
-scfinalso // 1994.?? D68 (c) 1993 Taito Corporation Japan (World)
-intcup94 // 1994.?? D78 (c) 1994 Taito (World)
-hthero94 // 1994.09 D78 (c) 1994 Taito (US)
-lightbr // 1994.03 D69 (c) 1993 Taito Corporation Japan (World)
-lightbrj // 1994.03 D69 (c) 1993 Taito Corporation (Japan)
-dungeonm // 1994.?? D69 (c) 1993 Taito Corporation Japan (World)
-dungeonmu // 1994.?? D69 (c) 1993 Taito America Corporation (US)
-kaiserkn // 1994.?? D84 (c) 1994 Taito Corporation Japan (World)
-kaiserknj // 1994.08 D84 (c) 1994 Taito Corporation (Japan)
-gblchmp // 1994.10 D84 (c) 1994 Taito America Corporation (US)
-dankuga // 1994.?? D84? (c) 1994 Taito Corporation (Japan)
-dariusg // 1994.?? D87 (c) 1994 Taito Corporation Japan (World)
-dariusgj // 1994.09 D87 (c) 1994 Taito Corporation (Japan)
-dariusgu // 1994.11 D87 (c) 1994 Taito America Corporation (US)
-dariusgx // 1994.?? D87 (c) 1994 Taito Corporation
-bublbob2 // 1994.?? D90 (c) 1994 Taito Corporation Japan (World)
-bublbob2o // 1994.?? D90 (c) 1994 Taito Corporation Japan (World)
-bublbob2p // prototype
-bubsymphe // 1994.?? D90 (c) 1994 Taito Corporation Japan (Europe)
-bubsymphu // 1994.10 D90 (c) 1994 Taito America Corporation (US)
-bubsymphj // 1994.10 D90 (c) 1994 Taito Corporation (Japan)
-bubsymphb // bootleg
-spcinvdj // 1994.09 D93 (c) 1994 Taito Corporation (Japan)
-pwrgoal // 1994.?? D94 (c) 1995 Taito Corporation Japan (World)
-hthero95 // 1994.11 D94 (c) 1995 Taito Corporation (Japan)
-hthero95u // 1995.05 D94 (c) 1995 Taito America Corporation (US)
-qtheater // 1995.01 D95 (c) 1994 Taito Corporation (Japan)
-elvactr // 1995.?? E02 (c) 1994 Taito Corporation Japan (World)
-elvactrj // 1995.03 E02 (c) 1994 Taito Corporation (Japan)
-elvact2u // 1995.05 E02 (c) 1994 Taito America Corporation (US)
-spcinv95 // 1995.?? E06 (c) 1995 Taito Corporation Japan (World)
-spcinv95u // 1995.05 E06 (c) 1995 Taito America Corporation (US)
-akkanvdr // 1995.07 E06 (c) 1995 Taito Corporation (Japan)
-twinqix // 1995.03 ??? (c) 1995 Taito America Corporation (US)
-quizhuhu // 1995.07 E08 (c) 1995 Taito Corporation (Japan)
-pbobble2 // 1995.?? E10 (c) 1995 Taito Corporation Japan (World)
-pbobble2o // 1995.?? E10 (c) 1995 Taito Corporation Japan (World)
-pbobble2j // 1995.09 E10 (c) 1995 Taito Corporation (Japan)
-pbobble2u // 1995.11 E10 (c) 1995 Taito America Corporation (US)
-pbobble2x // 1995.12 E10 (c) 1995 Taito Corporation (Japan)
-gekiridn // 1995.11 E11 (c) 1995 Taito Corporation Japan (World)
-gekiridnj // 1995.11 E11 (c) 1995 Taito Corporation (Japan)
-tcobra2 // 1996.?? E15 (c) 1995 Taito Corporation (World)
-tcobra2u // 1996.?? E15 (c) 1995 Taito Corporation (US)
-ktiger2 // 1996.02 E15 (c) 1995 Taito Corporation (Japan)
-bubblem // 1996.?? E21 (c) 1995 Taito Corporation Japan (World)
-bubblemj // 1996.04 E21 (c) 1995 Taito Corporation (Japan)
-cleopatr // 1996.10 E28 (c) 1996 Taito Corporation (Japan)
-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)
-puchicarj // 1997.12 E46 (c) 1997 Taito Corporation (Japan)
-pbobble4 // 1998.?? E49 (c) 1997 Taito Corporation (World)
-pbobble4j // 1998.02 E49 (c) 1997 Taito Corporation (Japan)
-pbobble4u // 1998.?? E49 (c) 1997 Taito Corporation (US)
-popnpop // 1998.?? E51 (c) 1997 Taito Corporation (World)
-popnpopj // 1998.03 E51 (c) 1997 Taito Corporation (Japan)
-popnpopu // 1998.?? E51 (c) 1997 Taito Corporation (US)
-landmakr // 1998.08 E61 (c) 1998 Taito Corporation (Japan)
-landmakrp // 1998.?? E61 (c) 1998 Taito Corporation (World, prototype)
-recalh // prototype
-commandw // prototype
-
-// Taito JC System
-dangcurv // 1995.?? E09 (c) 1995 Taito Corporation
- // 1995.07 (Japan)
- // 1995.10 (US)
-landgear // 1996.?? E17 (c) 1995 Taito Corporation Japan (World) - Ver 4.2 O
-landgeara // 1996.?? E17 (c) 1995 Taito Corporation Japan (World) - Ver 3.1 O
-landgearj // 1996.?? E17 (c) 1996 Taito Corporation (Japan) - Ver 4.2 J
-landgearja // 1996.03 E17 (c) 1996 Taito Corporation (Japan) - Ver 3.0 J
-sidebs // 1996.07 E23 (c) 1996 Taito Corporation (Japan) - Ver 2.7 J
-sidebsja // 1996.07 E23 (c) 1996 Taito Corporation (Japan) - Ver 2.5 J
-dendego // 1997.03 E35 (c) 1996 Taito Corporation (Japan) - Ver 2.2 J
-sidebs2 // 1997.?? E38 (c) 1997 Taito Corporation (US) - Ver 2.6 A
-sidebs2j // 1997.07 E38 (c) 1997 Taito Corporation (Japan) - Ver 2.4 J
-dendegox // 1997.09 E35 (c) 1996 Taito Corporation (Japan) - Ver 2.4 J
-dendego2 // 1998.03 E52 (c) 1998 Taito Corporation (Japan) - Ver 2.5 J
-dendego23k // 1998.08 E52 (c) 1998 Taito Corporation (Japan) - Ver 2.20 J
-
-// Taito "Wolf" System
-pf2012 // E59 (c) 1997 Taito
-
-// Taito PPC JC System
-optiger // 1998.09 E63 (c) 1998 Taito
-
-// Taito Type-Zero System
-taitotz
-batlgear // E68 (c) 1999 Taito
-pwrshovl // E74 (c) 1999 Taito
-pwrshovla //
-landhigh // E82 (c) 1999 Taito
-batlgr2 // E87 (c) 2000 Taito (2.04J)
-batlgr2a // E87 (c) 2000 Taito (2.01J)
-styphp // E98 (c) 2000 Taito
-raizpin // F14 (c) 2002 Taito
-raizpinj //
-
-invqix // F34 (c) 2003 Taito Corporation
-
-// Taito Type X/X+
-
-chaosbrk // (c) 2004 Taito Corporation
-gwinggen // (c) 2004 Takumi Corporation
-homura // (c) 2005 SKonec Entertainment
-hotgmkmp // (c) 2005 XNauts
-raiden3 // (c) 2005 Seibu Kaihatsu/Moss Ltd
-spicaadv // (c) 2005 Taito Corporation
-usagiol // (c) 2005 Taito Corporation/Warashi
-shikiga3 // (c) 2006 Alfa System/SKonec Entertainment
-wontmuch // (c) 2006 Capcom
-raiden4 // (c) 2007 Seibu Kaihatsu/Moss Ltd
-kof98um // (c) 2008 SNK
-trbwtchs // (c) 2008 Adventure Planning Service/Studio SiestA
-goketsuj // (c) 2009 Atlus
-
-// Taito Type X2
-
-chasehq2 // (c) 2006 Taito Corporation
-samspsen // (c) 2008 SNK Playmore
-
-// Taito Type X Zero
-// Taito Type X3
-
-// Toaplan games
-perfrman // (c) 1985 Data East Corporation (Japan)
-perfrmanu // (c) 1985 Data East USA (US)
-tigerh // A47 (c) 1985 Taito America Corporation GX-551 [not a Konami board!]
-tigerhj // A47 (c) 1985 Taito Corporation GX-551 [not a Konami board!]
-tigerhb1 // bootleg but (c) 1985 Taito Corporation
-tigerhb2 // bootleg but (c) 1985 Taito Corporation
-tigerhb3 // bootleg but (c) 1985 Taito Corporation
-alcon // A77 / TP-???
-slapfigh // A77 / TP-???
-slapfigha // A76 / TP-???
-slapfighb1 // bootleg but (c) 1986 Taito Corporation
-slapfighb2 // bootleg but (c) 1986 Taito Corporation
-slapfighb3 // bootleg but (c) 1986 Taito Corporation
-grdian // A68 (c) 1986 Taito Corporation
-getstarj // A68 (c) 1986 Taito Corporation
-getstarb1 // GX-006 bootleg but (c) 1986 Taito Corporation
-getstarb2 // GX-006 bootleg but (c) 1986 Taito Corporation
-mjsister // (c) 1986 Toaplan
-fshark // B02 / TP-007 (c) 1987 Taito Corporation (World)
-skyshark // B02 / TP-007 (c) 1987 Taito America Corporation + Romstar license (US)
-skysharka // B02 / TP-007 (c) 1987 Taito America Corporation + Romstar license (US)
-hishouza // B02 / TP-007 (c) 1987 Taito Corporation (Japan)
-fsharkbt // bootleg
-fnshark // bootleg
-wardner // B25 / TP-009 (c) 1987 Taito Corporation Japan (World)
-pyros // B25 / TP-009 (c) 1987 Taito America Corporation (US)
-wardnerj // B25 / TP-009 (c) 1987 Taito Corporation (Japan)
-twincobr // B30 / TP-011 (c) 1987 Taito Corporation (World)
-twincobru // B30 / TP-011 (c) 1987 Taito America Corporation + Romstar license (US)
-ktiger // B30 / TP-011 (c) 1987 Taito Corporation (Japan)
-gulfwar2 // (c) 1991 Comad
-gulfwar2a //
-rallybik // B45 / TP-O12 (c) 1988 Taito
-truxton // B65 / TP-O13B (c) 1988 Taito
-hellfire // B90 / TP-??? (c) 1989 Toaplan + Taito license
-hellfire1 // B90 / TP-??? (c) 1989 Toaplan + Taito license
-hellfire2a // B90 / TP-??? (c) 1989 Toaplan + Taito license
-hellfire1a // B90 / TP-??? (c) 1989 Toaplan + Taito license
-zerowing // TP-O15 (c) 1989 Toaplan
-zerowing1 // TP-O15 (c) 1989 Toaplan
-zerowingw // TP-O15 (c) 1989 Williams Electronics
-demonwld // TP-O16 (c) 1990 Toaplan (+ Taito license when set to Japan)
-demonwld1 // TP-O16 (c) 1989 Toaplan + Taito license
-demonwld2 // TP-O16 (c) 1989 Toaplan
-demonwld3 // TP-O16 (c) 1989 Toaplan
-fireshrk // TP-O17 (c) 1990 Toaplan
-fireshrka // TP-O17 (c) 1989 Toaplan
-fireshrkd // TP-O17 (c) 1990 Toaplan
-fireshrkdh // TP-O17 (c) 1990 Toaplan
-samesame // TP-O17 (c) 1989 Toaplan
-samesame2 // TP-O17 (c) 1989 Toaplan
-outzone // TP-O18 (c) 1990 Toaplan
-outzoneh // TP-O18 (c) 1990 Toaplan
-outzonea // TP-O18 (c) 1990 Toaplan
-outzoneb // TP-O18 (c) 1990 Toaplan
-outzonec // TP-O18 (c) 1990 Toaplan
-vimana // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan)
-vimanaj // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan)
-vimanan // TP-O19 (c) 1991 Toaplan (+ Nova Apparate GmbH & Co license)
-snowbros // MIN16-02 (c) 1990 Toaplan + Romstar license
-snowbrosa // MIN16-02 (c) 1990 Toaplan + Romstar license
-snowbrosb // MIN16-02 (c) 1990 Toaplan + Romstar license
-snowbrosc // MIN16-02 (c) 1990 Toaplan + Romstar license
-snowbrosj // MIN16-02 (c) 1990 Toaplan
-snowbrosd // MIN16-02 (c) 1990 Toaplan + Dooyong license
-wintbob // bootleg
-snowbroswb //
-toto //
-// modified snowbros 'clone' hardware
-honeydol // (c) 1995 Barko Corp
-twinadv // (c) 1995 Barko Corp
-twinadvk // (c) 1995 Barko Corp
-multi96 // (c) 1996 Barko Corp
-snowbro3 // (c) 2002 Syrmex
-ballboy // bootleg
-// SemiCom games on "SnowBros"-like hardware
-finalttr // (c) 1993 Jeil Computer System
-hyperpac // (c) 1995 SemiCom
-hyperpacb // bootleg
-toppyrap // (c) 1996 SemiCom
-cookbib2 // (c) 1996 SemiCom
-cookbib3 // (c) 1997 SemiCom
-twinkle // (c) 1997 SemiCom
-pzlbreak // (c) 1997 SemiCom
-suhosong // (c) 1997 SemiCom
-3in1semi // (c) 1998 SemiCom
-mcheonru // (c) 1999 SemiCom
-moremore // (c) 1999 SemiCom + Exit
-moremorp // (c) 1999 SemiCom + Exit
-4in1boot // (c) 2002 KISoft (includes hacks of Semicom games + Snowbros)
-
-// More Toaplan Games
-tekipaki // TP-020 (c) 1991 Toaplan
-ghox // TP-021 (c) 1991 Toaplan
-ghoxj // TP-021 (c) 1991 Toaplan
-dogyuun // TP-022 (c) 1992 Toaplan
-dogyuuna // TP-022 (c) 1992 Toaplan
-dogyuunt // TP-022 (c) 1992 Toaplan
-kbash // TP-023 (c) 1993 Toaplan
-kbashk // TP-023 (c) 1993 Toaplan
-kbash2 // bootleg
-truxton2 // TP-024 (c) 1992 Toaplan
-pipibibs // TP-025
-pipibibsa // TP-025
-pipibibsp // TP-025
-pipibibsbl // (c) 1991 Ryouta Kikaku (bootleg)
-whoopee // TP-025
-fixeight // TP-026 (c) 1992 + Taito license
-fixeightt // TP-026 (c) 1992 + Taito license
-fixeightkt // TP-026 (c) 1992 + Taito license
-fixeightk // TP-026 (c) 1992 + Taito license
-fixeightht // TP-026 (c) 1992 + Taito license
-fixeighth // TP-026 (c) 1992 + Taito license
-fixeighttwt // TP-026 (c) 1992 + Taito license
-fixeighttw // TP-026 (c) 1992 + Taito license
-fixeightat // TP-026 (c) 1992 + Taito license
-fixeighta // TP-026 (c) 1992 + Taito license
-fixeightu // TP-026 (c) 1992 + Taito license
-fixeightut // TP-026 (c) 1992 + Taito license
-fixeightj // TP-026 (c) 1992 + Taito license
-fixeightjt // TP-026 (c) 1992 + Taito license
-fixeightbl // bootleg
-grindstm // TP-027 (c) 1993 Toaplan + Unite Trading license (Korea)
-grindstma // TP-027 (c) 1993 Toaplan + Unite Trading license (Korea)
-vfive // TP-027 (c) 1993 Toaplan (Japan)
-batsugun // TP-030 (c) 1993 Toaplan
-batsuguna // TP-030 (c) 1993 Toaplan
-batsugunsp // TP-030 (c) 1993 Toaplan
-snowbro2 // TP-033 (c) 1994 Hanafram
-snowbro2b //
-pwrkick // (c) 1994 Sunwise
-othldrby // (c) 1995 Sunwise
-sstriker // (c) 1993 Raizing
-sstrikera // (c) 1993 Raizing
-mahoudai // (c) 1993 Raizing + Able license
-kingdmgp // (c) 1994 Raizing/8ing
-shippumd // (c) 1994 Raizing/8ing
-bgaregga // (c) 1996 Raizing/8ing
-bgareggahk // (c) 1996 Raizing/8ing
-bgareggatw // (c) 1996 Raizing/8ing
-bgaregganv // (c) 1996 Raizing/8ing
-bgareggat2 // (c) 1996 Raizing/8ing
-bgareggacn // (c) 1996 Raizing/8ing
-bgareggabl // hack
-bgareggabla // hack
-batrider // (c) 1998 Raizing/8ing
-batrideru // (c) 1998 Raizing/8ing
-batriderc // (c) 1998 Raizing/8ing
-batriderj // (c) 1998 Raizing/8ing
-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
-
-/*
- Toa Plan's board list
- (translated from http://www.aianet.ne.jp/~eisetu/rom/rom_toha.html)
-
- Title ROMno. Remark(1) Remark(2)
- --------------------------------------------------
- Tiger Heli A47 GX-551
- Hishouzame B02 TP-007
- Kyukyoku Tiger B30 TP-011
- Dash Yarou B45 TP-012
- Tatsujin B65 TP-013B M6100649A
- Zero Wing O15 TP-015
- Horror Story O16 TP-016
- Same!Same!Same! O17 TP-017
- Out Zone TP-018
- Vimana TP-019
- Teki Paki O20 TP-020
- Ghox TP-21 TP-021
- Dogyuun TP-022
- Tatsujin Oh TP-024 *1
- Fixeight TP-026
- V-V TP-027
-
- *1 There is a doubt this game uses TP-024 board and TP-025 romsets.
-
- 86 Mahjong Sisters Kit 2P 8W+2B HC Mahjong TP-
- 88 Dash Kit 2P 8W+2B TP-
- 89 Fire Shark Kit 2P 8W+2B VC Shooter TP-017
- 89 Twin Hawk Kit 2P 8W+2B VC Shooter TP-
- 91 Whoopie Kit 2P 8W+2B HC Action
- 92 Teki Paki Kit 2P TP-020
- 92 Ghox Kit 2P Paddle+1B VC Action TP-021
- 10/92 Dogyuun Kit 2P 8W+2B VC Shooter TP-022
- 92/93 Knuckle Bash Atari Games Kit 2P 8W+2B HC Action TP-023
- 10/92 Tatsujin II/Truxton II Taito Kit 2P 8W+2B VC Shooter TP-024
- 10/92 Truxton II/Tatsujin II Taito Kit 2P 8W+2B VC Shooter TP-024
- Pipi & Bipi TP-025
- 92 Fix Eight Kit 2P 8W+2B VC Action TP-026
- 12/92 V - V (5)/Grind Stormer Kit 2P 8W+2B VC Shooter TP-027
- 1/93 Grind Stormer/V - V (Five) Kit 2P 8W+2B VC Shooter TP-027
- 2/94 Batsugun Kit 2P 8W+2B VC TP-
- 4/94 Snow Bros. 2 Kit 2P 8W+2B HC Action TP-
-*/
-
-// Cave games
-// Cave was formed in 1994 from the ruins of Toaplan, like Raizing was.
-pwrinst2 // (c) 1994 Atlus
-pwrinst2j // (c) 1994 Atlus
-plegends // (c) 1994 Atlus
-plegendsj // (c) 1994 Atlus
-mazinger // (c) 1994 Banpresto (country is in EEPROM)
-mazingerj // (c) 1994 Banpresto (country is in EEPROM)
-donpachi // (c) 1995 Atlus/Cave
-donpachij // (c) 1995 Atlus/Cave
-donpachikr // (c) 1995 Atlus/Cave
-donpachihk // (c) 1995 Atlus/Cave
-metmqstr // (c) 1995 Banpresto / Pandorabox
-nmaster // (c) 1995 Banpresto / Pandorabox
-sailormn // (c) 1995 Banpresto (country is in EEPROM)
-sailormnu // (c) 1995 Banpresto (country is in EEPROM)
-sailormnj // (c) 1995 Banpresto (country is in EEPROM)
-sailormnk // (c) 1995 Banpresto (country is in EEPROM)
-sailormnt // (c) 1995 Banpresto (country is in EEPROM)
-sailormnh // (c) 1995 Banpresto (country is in EEPROM)
-sailormno // (c) 1995 Banpresto (country is in EEPROM)
-sailormnou // (c) 1995 Banpresto (country is in EEPROM)
-sailormnoj // (c) 1995 Banpresto (country is in EEPROM)
-sailormnok // (c) 1995 Banpresto (country is in EEPROM)
-sailormnot // (c) 1995 Banpresto (country is in EEPROM)
-sailormnoh // (c) 1995 Banpresto (country is in EEPROM)
-agallet // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
-agalletu // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
-agalletj // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
-agalletk // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
-agallett // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
-agalleth // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
-hotdogst // (c) 1996 Marble
-pacslot // (c) 1996 Namco
-ppsatan // (c) 1996 <unknown>
-ddonpach // (c) 1997 Atlus/Cave
-ddonpachj // (c) 1997 Atlus/Cave
-ddonpacha // hack
-dfeveron // (c) 1998 Cave + Nihon System license
-feversos // (c) 1998 Cave + Nihon System license
-esprade // (c) 1998 Atlus/Cave
-espradej // (c) 1998 Atlus/Cave (Japan)
-espradejo // (c) 1998 Atlus/Cave (Japan)
-uopoko // (c) 1998 Cave + Jaleco license
-uopokoj // (c) 1998 Cave + Jaleco license
-guwange // (c) 1999 Atlus/Cave
-guwanges // (c) 1999 Atlus/Cave
-gaia // (c) 1999 Noise Factory
-theroes // (c) 2001 Primetek Investments
-korokoro // (c) 1999 Takumi
-crusherm // (c) 1999 Takumi
-tjumpman // (c) 1999 Namco
-
-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
-dfkbl // (c) 2010 Cave (AMI license) - 2010/1/18 BLACK LABEL
-
-deathsm2
-
-// Kyugo games
-// Kyugo only made four games: Repulse, Flash Gal, SRD Mission and Air Wolf.
-// Gyrodine was made by Crux. Crux was antecedent of Toa Plan, and spin-off from Orca.
-gyrodine // (c) 1984 Crux
-gyrodinet // (c) 1984 Crux (Taito Corporation license)
-buzzard // (c) 1984 Crux
-repulse // (c) 1985 Sega
-99lstwar // (c) 1985 Proma
-99lstwara // (c) 1985 Proma
-99lstwark // (c) 1985 Kyugo
-sonofphx // bootleg
-flashgal // (c) 1985 Sega
-flashgala // (c) 1985 Sega
-srdmissn // (c) 1986 Taito Corporation
-fx // bootleg
-legend // no copyright notice [1986 Sega/Coreland] (Arcade TV Game List - P.104, Left, 14 from top)
-legendb // no copyright notice [1986 Sega/Coreland] (Arcade TV Game List - P.104, Left, 14 from top)
-airwolf // (c) 1987 Kyugo
-airwolfa // (c) 1987 Kyugo
-skywolf // bootleg
-skywolf2 // bootleg
-skywolf3 // bootleg
-pprobe // Kyugo?
-
-// Williams games
-defender // (c) 1980
-defenderg // (c) 1980
-defenderb // (c) 1980
-defenderw // (c) 1980
-defndjeu // bootleg
-tornado1 // bootleg
-tornado2 // bootleg
-zero // bootleg
-zero2 // bootleg
-defcmnd // bootleg
-defence // bootleg
-startrkd // bootleg
-mayday // bootleg
-maydaya // bootleg
-maydayb // bootleg
-batlzone // bootleg?
-colony7 // (c) 1981 Taito
-colony7a // (c) 1981 Taito
-jin // Falcon bootleg/hack
-stargate // (c) 1981
-robotron // (c) 1982
-robotronyo // (c) 1982
-joust // (c) 1982
-joustr // (c) 1982
-joustwr // (c) 1982
-bubbles // (c) 1982
-bubblesr // (c) 1982
-bubblesp // (c) 1982
-splat // (c) 1982
-sinistar // (c) 1982
-sinistar1 // (c) 1982
-sinistar2 // (c) 1982
-playball // (c) 1983
-blaster // (c) 1983
-blastero // (c) 1983
-blasterkit // (c) 1983
-spdball // (c) 1985
-alienar // (c) 1985 Duncan Brown
-alienaru // (c) 1985 Duncan Brown
-mysticm // (c) 1983
-mysticmp // (c) 1983 Prototype
-tshoot // (c) 1984
-inferno // (c) 1984
-joust2 // (c) 1986
-joust2r1 // (c) 1986
-lottofun // (c) 1987 H.A.R. Management
-wmg // Williams 6in1 Multigame, Clay Cowgill
-
-
-// Capcom games
-// The following is a COMPLETE list of the Capcom games up to 1997, as shown on
-// their web site. The list is sorted by production date.
-// A comprehensive list of Capcom games with board info can be found here:
-// http://www.arcadeflyers.com/strider/capcom_list.html
-vulgus // 5/1984 (c) 1984
-vulgusa // 5/1984 (c) 1984
-vulgusj // 5/1984 (c) 1984
-sonson // 7/1984 (c) 1984
-sonsonj // 7/1984 (c) 1984 (Japan)
-higemaru // 9/1984 (c) 1984
-1942 // 12/1984 (c) 1984
-1942a // 12/1984 (c) 1984
-1942abl // bootleg
-1942b // 12/1984 (c) 1984
-1942w // 12/1984 (c) 1984 + Williams Electronics license (c) 1985
-1942p // prototype
-1942h // hack (Two Bit Score?)
-exedexes // 2/1985 (c) 1985
-savgbees // 2/1985 (c) 1985 + Memetron license
-commando // 5/1985 (c) 1985 (World)
-commandou // 5/1985 (c) 1985 + Data East license (US)
-commandou2 // 5/1985 (c) 1985 + Data East license (US)
-commandoj // 5/1985 (c) 1985 (Japan)
-commandob // bootleg
-commandob2 // bootleg 2
-sinvasn // Europe original?
-sinvasnb // bootleg
-gng // 9/1985 (c) 1985
-gnga // 9/1985 (c) 1985
-gngbl // bootleg
-gngblita // bootleg
-gngc // 9/1985 (c) 1985
-gngprot // Capcom/Romstar Proto
-gngt // 9/1985 (c) 1985
-makaimur // 9/1985 (c) 1985
-makaimurc // 9/1985 (c) 1985
-makaimurg // 9/1985 (c) 1985
-diamond // (c) 1989 KH Video (NOT A CAPCOM GAME but runs on GnG hardware)
-gunsmoke // 11/1985 (c) 1985 (World)
-gunsmokeb
-gunsmokeu // 11/1985 (c) 1985 + Romstar (US)
-gunsmokeua // 11/1985 (c) 1985 (US)
-gunsmokeub // 11/1985 (c) 1985 (US)
-gunsmokej // 11/1985 (c) 1985 (Japan)
-sectionz // 12/1985 (c) 1985
-sectionza // 12/1985 (c) 1985
-trojan // 4/1986 (c) 1986 (US)
-trojana // 4/1986 (c) 1986 (US)
-trojanr // 4/1986 (c) 1986 + Romstar
-trojanj // 4/1986 (c) 1986 (Japan)
-trojanb // bootleg
-srumbler // 9/1986 (c) 1986
-srumbler2 // 9/1986 (c) 1986
-srumbler3 // 9/1986 (c) 1986 + Tecfri
-rushcrsh // 9/1986 (c) 1986
-lwings // 11/1986 (c) 1986
-lwings2 // 11/1986 (c) 1986
-lwingsj // 11/1986 (c) 1986
-lwingsb // 11/1986 (c) 1986 (bootleg)
-sidearms // 12/1986 (c) 1986 (World)
-sidearmsu // 12/1986 (c) 1986 + Romstar license (US)
-sidearmsur1 // 12/1986 (c) 1986 + Romstar license (US)
-sidearmsj // 12/1986 (c) 1986 (Japan)
-turtship // (c) 1988 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-turtshipj // (c) 1988 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-turtshipk // (c) 1988 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-turtshipko // (c) 1988 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-turtshipkn // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-dyger // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-dygera // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-twinfalc // (c) 1989 Philko (Poara Enterprises license) (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-whizz // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
-avengers // 2/1987 (c) 1987 (US)
-avengers2 // 2/1987 (c) 1987 (US)
-buraiken // 2/1987 (c) 1987 (Japan)
-buraikenb // 2/1987 (c) 1987 (Japan)
-bionicc // 3/1987 (c) 1987 (Euro)
-bionicc1 // 3/1987 (c) 1987 (US)
-bionicc2 // 3/1987 (c) 1987 (US)
-topsecrt // 3/1987 (c) 1987 (Japan)
-bioniccbl // bootleg
-supduck // (c) Comad
-1943 // 6/1987 (c) 1987 (Euro)
-1943u // 6/1987 (c) 1987 (US) Rev C
-1943ua // 6/1987 (c) 1987 (US)
-1943j // 6/1987 (c) 1987 (Japan) Rev B
-1943ja // 6/1987 (c) 1987 (Japan)
-1943b // bootleg
-1943bj // bootleg
-blktiger // 8/1987 (c) 1987 (US)
-blktigera // 8/1987 (c) 1987 (US)
-blktigerb1 // bootleg
-blktigerb2 // bootleg
-blktigerb3 // bootleg?
-blkdrgon // 8/1987 (c) 1987 (Japan)
-blkdrgonb // bootleg, hacked to say Black Tiger
-sf // 8/1987 (c) 1987 (US)
-sfua // 8/1987 (c) 1987 (US)
-sfj // 8/1987 (c) 1987 (Japan)
-sfan // 8/1987 (c) 1987 (World)
-sfp // 8/1987 (c) 1987
-tigeroad // 11/1987 (c) 1987 (US)
-tigeroadu // 11/1987 (c) 1987 + Romstar (US)
-toramich // 11/1987 (c) 1987 (Japan
-tigeroadb // bootleg
-f1dream // 4/1988 (c) 1988 + Romstar
-f1dreamb // bootleg
-f1dreamba // bootleg
-1943kai // 6/1988 (c) 1987 (Japan)
-lastduel // 7/1988 (c) 1988 (US)
-lastduelo // 7/1988 (c) 1988 (US)
-lastduelj // 7/1988 (c) 1988 (Japan)
-lastduelb // bootleg
-madgear // 2/1989 (c) 1989 (US)
-madgearj // 2/1989 (c) 1989 (Japan)
-ledstorm // 1988 (c) 1988 (US)
-leds2011 // 1988 (c) 1988 (World)
-leds2011u // 1988 (c) 1988 (US)
-// 3/1989 Dokaben (baseball) - see below among "Mitchell" games
-// 8/1989 Dokaben 2 (baseball) - see below among "Mitchell" games
-// 10/1989 Capcom Baseball - see below among "Mitchell" games
-// 11/1989 Capcom World - see below among "Mitchell" games
-// 3/1990 Adventure Quiz 2 Hatena no Dai-Bouken - see below among "Mitchell" games
-// 1/1991 Quiz Tonosama no Yabou - see below among "Mitchell" games
-// 4/1991 Ashita Tenki ni Naare (golf) - see below among "Mitchell" games
-// 5/1991 Ataxx - see below among "Leland" games
-// 6/1991 Quiz Sangokushi - see below among "Mitchell" games
-// 10/1991 Block Block - see below among "Mitchell" games
-// 6/1995 Street Fighter - the Movie - see below among "Incredible Technologies" games
-
-// Capcom CPS1 games
-forgottn // 7/1988 (c) 1988 (World)
-forgottna // 7/1988 (c) 1988 (World)
-forgottnu // 7/1988 (c) 1988 (USA)
-forgottnu1 // 7/1988 (c) 1988 (USA)
-forgottnua // 7/1988 (c) 1988 (USA)
-forgottnuaa // 7/1988 (c) 1988 (USA)
-lostwrld // 7/1988 (c) 1988 (Japan)
-lostwrldo // 7/1988 (c) 1988 (Japan)
-ghouls // 12/1988 (c) 1988 (World)
-ghoulsu // 12/1988 (c) 1988 (USA)
-daimakai // 12/1988 (c) 1988 (Japan)
-daimakair // 12/1988 (c) 1988 (Japan)
-strider // 3/1989 (c) 1989 (not explicitly stated but should be USA)
-striderua // 3/1989 (c) 1989 (not explicitly stated but should be USA)
-strideruc // conversion
-striderj // 3/1989 (c) 1989 (Japan)
-striderjr // 3/1989 (c) 1989 (Japan)
-dynwar // 4/1989 (c) 1989 (USA)
-dynwara // 4/1989 (c) 1989 (USA)
-dynwarj // 4/1989 (c) 1989 (Japan)
-dynwarjr // 4/1989 (c) 1989 (Japan)
-willow // 6/1989 (c) 1989 (World)
-willowu // 6/1989 (c) 1989 (USA)
-willowuo // 6/1989 (c) 1989 (USA)
-willowj // 6/1989 (c) 1989 (Japan)
-unsquad // 8/1989 (c) 1989 (USA)
-area88 // 8/1989 (c) 1989 (Japan)
-area88r // 8/1989 (c) 1989 (Japan)
-ffight // 12/1989 (c) 1989 (World)
-ffighta // 12/1989 (c) 1989 (World)
-ffightu // 12/1989 (c) 1989 (USA)
-ffightu1 // 12/1989 (c) 1989 (USA)
-ffightua // 12/01/1990 (c) 1989 (USA)
-ffightub // 24/04/1990 (c) 1989 (USA)
-ffightuc // 12/06/1990 (c) 1989 (USA)
-ffightj // 12/1989 (c) 1989 (Japan)
-ffightj1 // 12/01/1990 (c) 1989 (Japan)
-ffightj2 // 05/03/1990 (c) 1989 (Japan)
-ffightj3 // 13/06/1990 (c) 1989 (Japan)
-ffightjh // hack
-1941 // 27/02/1990 (c) 1990 (World)
-1941r1 // 2/1990 (c) 1990 (World)
-1941u // 27/02/1990 (c) 1990 (USA)
-1941j // 2/1990 (c) 1990 (Japan)
-mercs // 02/03/1990 (c) 1990 (World)
-mercsu // 08/06/1990 (c) 1990 (USA)
-mercsur1 // 02/03/1990 (c) 1990 (USA)
-mercsj // 02/03/1990 (c) 1990 (Japan)
-mtwins // 19/06/1990 (c) 1990 (World)
-chikij // 19/06/1990 (c) 1990 (Japan)
-msword // 25/07/1990 (c) 1990 (World)
-mswordr1 // 23/06/1990 (c) 1990 (World)
-mswordu // 25/07/1990 (c) 1990 (USA)
-mswordj // 23/06/1990 (c) 1990 (Japan)
-cawing // 12/10/1990 (c) 1990 (World)
-cawingr1 // 09/10/1990 (c) 1990 (World)
-cawingu // 12/10/1990 (c) 1990 (USA)
-cawingj // 12/10/1990 (c) 1990 (Japan)
-cawingbl // bootleg
-cawingb2 // bootleg
-nemo // 30/11/1990 (c) 1990 (World)
-nemor1 // 09/11/1990 (c) 1990 (World)
-nemoj // 20/11/1990 (c) 1990 (Japan)
-sf2 // 22/05/1991 (c) 1991 (World)
-sf2eb // 14/02/1991 (c) 1991 (World)
-sf2ed // 18/03/1991 (c) 1991 (World)
-sf2ee // 28/02/1991 (c) 1991 (World)
-sf2ebbl // 14/02/1991 (c) 1991 (World, bootleg)
-sf2ebbl2 // 14/02/1991 (c) 1991 (World, bootleg)
-sf2ebbl3 // 14/02/1991 (c) 1991 (World, bootleg)
-sf2stt // bootleg
-sf2rk // bootleg
-sf2ua // 06/02/1991 (c) 1991 (USA)
-sf2ub // 14/02/1991 (c) 1991 (USA)
-sf2uc // 06/03/1991 (c) 1991 (USA)
-sf2ud // 18/03/1991 (c) 1991 (USA)
-sf2ue // 28/02/1991 (c) 1991 (USA)
-sf2uf // 11/04/1991 (c) 1991 (USA)
-sf2ug // 22/05/1991 (c) 1991 (USA, Rev. G)
-sf2ui // 22/05/1991 (c) 1991 (USA, Rev. I)
-sf2uk // 01/11/1991 (c) 1991 (USA)
-sf2j // 10/12/1991 (c) 1991 (Japan)
-sf2ja // 14/02/1991 (c) 1991 (Japan)
-sf2jc // 06/03/1991 (c) 1991 (Japan)
-sf2jf // 11/04/1991 (c) 1991 (Japan)
-sf2jh // 22/05/1991 (c) 1991 (Japan)
-sf2jl // 12/03/1992 (c) 1991 (Japan)
-sf2qp1 // hack
-sf2thndr // hack
-3wonders // 20/05/1991 (c) 1991 (World)
-3wondersr1 // 13/05/1991 (c) 1991 (World)
-3wondersu // 20/05/1991 (c) 1991 (USA)
-wonder3 // 20/05/1991 (c) 1991 (Japan)
-3wondersb // bootleg
-3wondersh // hack
-kod // 05/08/1991 (c) 1991 (World)
-kodr1 // 11/07/1991 (c) 1991 (World)
-kodu // 10/09/1991 (c) 1991 (USA)
-kodj // 05/08/1991 (c) 1991 (Japan)
-kodja // 05/08/1991 (c) 1991 (Japan)
-kodb // bootleg
-captcomm // 02/12/1991 (c) 1991 (World)
-captcommr1 // 14/10/1991 (c) 1991 (World)
-captcommu // 28/09/1991 (c) 1991 (USA)
-captcommj // 02/12/1991 (c) 1991 (Japan)
-captcommjr1 // 28/09/1991 (c) 1991 (Japan)
-captcommb // bootleg
-knights // 27/11/1991 (c) 1991 (World)
-knightsu // 27/11/1991 (c) 1991 (USA)
-knightsj // 27/11/1991 (c) 1991 (Japan)
-knightsja // 27/11/1991 (c) 1991 (Japan)
-knightsb // bootleg
-sf2ce // 13/05/1992 (c) 1992 (World)
-sf2ceea // 13/03/1992 (c) 1992 (World)
-sf2ceua // 13/03/1992 (c) 1992 (USA)
-sf2ceub // 13/05/1992 (c) 1992 (USA)
-sf2ceuc // 03/08/1992 (c) 1992 (USA)
-sf2ceja // 22/03/1992 (c) 1992 (Japan)
-sf2cejb // 13/05/1992 (c) 1992 (Japan)
-sf2cejc // 03/08/1992 (c) 1992 (Japan)
-sf2bhh // hack
-sf2rb // hack
-sf2rb2 // hack
-sf2rb3 // hack
-sf2red // hack
-sf2v004 // hack
-sf2acc // hack
-sf2acca // hack
-sf2ceblp // hack
-sf2cebltw // hack
-sf2accp2 // hack
-sf2amf // bootleg
-sf2amf2 // bootleg
-sf2dkot2 // hack
-sf2m1 // hack
-sf2m2 // hack
-sf2m3 // hack
-sf2m4 // hack
-sf2m5 // hack
-sf2m6 // hack
-sf2m7 // hack
-sf2m8 // bootleg
-sf2m9 // bootleg
-sf2m10 // bootleg
-sf2yyc // hack
-sf2koryu // hack
-sf2dongb // hack
-sf2mdt // bootleg
-sf2mdta // bootleg
-sf2mdtb // bootleg
-sf2b // bootleg
-cworld2j // 11/06/1992 (c) 1992 (Japan)
-cworld2ja // 11/06/1992 (c) 1992 (Japan)
-cworld2jb // 11/06/1992 (c) 1992 (Japan)
-varth // 14/07/1992 (c) 1992 (World)
-varthr1 // 12/06/1992 (c) 1992 (World)
-varthu // 12/06/1992 (c) 1992 (USA)
-varthj // 14/07/1992 (c) 1992 (Japan)
-varthjr // 14/07/1992 (c) 1992 (Japan)
-qad // 01/07/1992 (c) 1992 (USA)
-qadjr // 21/09/1994 (c) 1994 (Japan)
-wof // 31/10/1992 (c) 1992 (World) (CPS1 + QSound)
-wofr1 // 02/10/1992 (c) 1992 (World) (CPS1 + QSound)
-wofu // 31/10/1992 (c) 1992 (USA) (CPS1 + QSound)
-wofa // 05/10/1992 (c) 1992 (Asia) (CPS1 + QSound)
-wofj // 31/10/1992 (c) 1992 (Japan) (CPS1 + QSound)
-wofhfh // bootleg
-sgyxz // bootleg (All-In Electronics)
-sf2hf // 09/12/1992 (c) 1992 (World)
-sf2hfu // 09/12/1992 (c) 1992 (USA)
-sf2hfj // 09/12/1992 (c) 1992 (Japan)
-dino // 01/02/1993 (c) 1993 (World) (CPS1 + QSound)
-dinou // 01/02/1993 (c) 1993 (USA) (CPS1 + QSound)
-dinoj // 01/02/1993 (c) 1993 (Japan) (CPS1 + QSound)
-dinopic // bootleg
-dinopic2 // bootleg
-dinohunt // bootleg
-punisher // 22/04/1993 (c) 1993 (World) (CPS1 + QSound)
-punisheru // 22/04/1993 (c) 1993 (USA) (CPS1 + QSound)
-punisherh // 22/04/1993 (c) 1993 (Hispanic) (CPS1 + QSound)
-punisherj // 22/04/1993 (c) 1993 (Japan) (CPS1 + QSound)
-punipic // bootleg
-punipic2 // bootleg
-punipic3 // bootleg
-punisherbz // bootleg
-slammast // 13/07/1993 (c) 1993 (World) (CPS1 + QSound)
-slammastu // 13/07/1993 (c) 1993 (USA) (CPS1 + QSound)
-slampic // bootleg
-mbomberj // 13/07/1993 (c) 1993 (Japan) (CPS1 + QSound)
-mbombrd // 06/12/1993 (c) 1993 (World) (CPS1 + QSound)
-mbombrdj // 06/12/1993 (c) 1993 (Japan) (CPS1 + QSound)
-kenseim // 18/04/1994 (c) 1994 Togo/Sigma (Japan) not listed on Capcom's site
-pnickj // 08/06/1994 (c) 1994 Compile + Capcom license (Japan) not listed on Capcom's site
-qtono2j // 23/01/1995 (c) 1995 (Japan)
-pang3 // 01/06/1995 (c) 1995 Mitchell (Euro) not listed on Capcom's site
-pang3r1 // 11/05/1995 (c) 1995 Mitchell (Euro) not listed on Capcom's site
-pang3j // 11/05/1995 (c) 1995 Mitchell (Japan) not listed on Capcom's site
-pang3b // bootleg
-megaman // 06/10/1995 (c) 1995 (USA)
-megamana // 06/10/1995 (c) 1995 (Asia)
-rockmanj // 22/09/1995 (c) 1995 (Japan)
-fcrash // bootleg of Final Fight
-ffightbl // bootleg
-ffightbla // bootleg
-ganbare // 11/04/2000 (c) 2000 (Japan)
-
-
-// Capcom CPS2 games
-// list completed by CPS2Shock
-// http://cps2shock.retrogames.com
-ssf2 // 05/10/1993 (c) 1993 (World)
-ssf2r1 // 11/09/1993 (c) 1993 (World)
-ssf2u // 11/09/1993 (c) 1993 (USA)
-ssf2a // 05/10/1993 (c) 1993 (Asia)
-ssf2ar1 // 14/09/1993 (c) 1993 (Asia)
-ssf2j // 05/10/1993 (c) 1993 (Japan)
-ssf2jr1 // 11/09/1993 (c) 1993 (Japan)
-ssf2jr2 // 10/09/1993 (c) 1993 (Japan)
-ssf2h // 11/09/1993 (c) 1993 (Hispanic)
-ssf2tb // 19/11/1993 (c) 1993 (World)
-ssf2tbr1 // 11/09/1993 (c) 1993 (World)
-ssf2tbj // 11/09/1993 (c) 1993 (Japan)
-ssf2tbh // 05/10/1993 (c) 1993 (Hispanic)
-ecofghtr // 03/12/1993 (c) 1994 (World)
-ecofghtru // 15/02/1994 (c) 1994 (USA)
-ecofghtru1 // 03/12/1993 (c) 1994 (USA)
-ecofghtra // 03/12/1993 (c) 1994 (Asia)
-ecofghtrh // 03/12/1993 (c) 1994 (Hispanic)
-uecology // 03/12/1993 (c) 1994 (Japan)
-ddtod // 12/04/1994 (c) 1993 (Euro)
-ddtodr1 // 13/01/1994 (c) 1993 (Euro)
-ddtodu // 25/01/1994 (c) 1993 (USA)
-ddtodur1 // 13/01/1994 (c) 1993 (USA)
-ddtodj // 12/04/1994 (c) 1993 (Japan)
-ddtodjr1 // 25/01/1994 (c) 1993 (Japan)
-ddtodjr2 // 13/01/1994 (c) 1993 (Japan)
-ddtoda // 12/04/1994 (c) 1993 (Asia)
-ddtodar1 // 13/01/1994 (c) 1993 (Asia)
-ddtodh // 12/04/1994 (c) 1993 (Hispanic)
-ddtodhr1 // 25/01/1994 (c) 1993 (Hispanic)
-ddtodhr2 // 13/01/1994 (c) 1993 (Hispanic)
-ssf2t // 23/02/1994 (c) 1994 (World)
-ssf2th // 23/02/1994 (c) 1994 (Hispanic)
-ssf2tu // 23/03/1994 (c) 1994 (USA)
-ssf2tur1 // 23/02/1994 (c) 1994 (USA)
-ssf2ta // 23/02/1994 (c) 1994 (Asia)
-ssf2xj // 23/02/1994 (c) 1994 (Japan)
-avsp // 20/05/1994 (c) 1994 (Euro)
-ssf2xjr // 23/02/1994 (c) 1994 (Japan)
-avspu // 20/05/1994 (c) 1994 (USA)
-avspj // 20/05/1994 (c) 1994 (Japan)
-avspa // 20/05/1994 (c) 1994 (Asia)
-avsph // 20/05/1994 (c) 1994 (Hispanic)
- // 06/1994? Galum Pa! (not listed on Capcom's site)
-dstlk // 05/07/1994 (c) 1994 (Euro)
-dstlku // 18/08/1994 (c) 1994 (USA)
-dstlkur1 // 05/07/1994 (c) 1994 (USA)
-dstlka // 05/07/1994 (c) 1994 (Asia)
-dstlkh // 18/08/1994 (c) 1994 (Hispanic)
-vampj // 05/07/1994 (c) 1994 (Japan)
-vampja // 05/07/1994 (c) 1994 (Japan)
-vampjr1 // 30/06/1994 (c) 1994 (Japan)
-ringdest // 02/09/1994 (c) 1994 (Euro)
-ringdesta // 31/08/1994 (c) 1994 (Asia)
-ringdesth // 02/09/1994 (c) 1994 (Hispanic)
-smbomb // 31/08/1994 (c) 1994 (Japan)
-smbombr1 // 08/08/1994 (c) 1994 (Japan)
-armwar // 24/10/1994 (c) 1994 (Euro)
-armwarr1 // 11/10/1994 (c) 1994 (Euro)
-armwaru // 24/10/1994 (c) 1994 (USA)
-armwaru1 // 20/09/1994 (c) 1994 (USA)
-pgear // 24/10/1994 (c) 1994 (Japan)
-pgearr1 // 16/09/1994 (c) 1994 (Japan)
-armwara // 24/10/1994 (c) 1994 (Asia)
-armwarar1 // 20/09/1994 (c) 1994 (Asia)
-xmcota // 31/03/1995 (c) 1994 (Euro)
-xmcotar1 // 05/01/1995 (c) 1994 (Euro)
-xmcotau // 05/01/1995 (c) 1994 (USA)
-xmcotah // 31/03/1995 (c) 1994 (Hispanic)
-xmcotahr1 // 05/01/1995 (c) 1994 (Hispanic)
-xmcotaj // 05/01/1995 (c) 1994 (Japan)
-xmcotaj1 // 22/12/1994 (c) 1994 (Japan)
-xmcotaj2 // 19/12/1994 (c) 1994 (Japan)
-xmcotaj3 // 17/12/1994 (c) 1994 (Japan)
-xmcotaa // 05/01/1995 (c) 1994 (Asia)
-xmcotaar1 // 17/12/1994 (c) 1994 (Asia)
-xmcotajr // 08/12/1994 (c) 1994 (Japan Rent)
-nwarr // 16/03/1995 (c) 1995 (Euro)
-nwarru // 06/04/1995 (c) 1995 (USA)
-nwarrh // 03/04/1995 (c) 1995 (Hispanic)
-nwarrb // 03/04/1995 (c) 1995 (Brazil)
-nwarra // 02/03/1995 (c) 1995 (Asia)
-vhuntj // 02/03/1995 (c) 1995 (Japan)
-vhuntjr1s // 07/03/1995 (c) 1995 (Japan)
-vhuntjr1 // 07/03/1995 (c) 1995 (Japan)
-vhuntjr2 // 02/03/1995 (c) 1995 (Japan)
-cybots // 24/04/1995 (c) 1995 (Euro)
-cybotsu // 24/04/1995 (c) 1995 (USA)
-cybotsj // 20/04/1995 (c) 1995 (Japan)
-sfa // 27/07/1995 (c) 1995 (Euro)
-sfar1 // 18/07/1995 (c) 1995 (Euro)
-sfar2 // 27/06/1995 (c) 1995 (Euro)
-sfar3 // 05/06/1995 (c) 1995 (Euro)
-sfau // 27/06/1995 (c) 1995 (USA)
-sfza // 27/06/1995 (c) 1995 (Asia)
-sfzar1 // 05/06/1995 (c) 1995 (Asia)
-sfzj // 27/07/1995 (c) 1995 (Japan)
-sfzjr1 // 27/06/1995 (c) 1995 (Japan)
-sfzjr2 // 05/06/1995 (c) 1995 (Japan)
-sfzh // 18/07/1995 (c) 1995 (Hispanic)
-sfzhr1 // 27/06/1995 (c) 1995 (Hispanic)
-sfzb // 09/11/1995 (c) 1995 (Brazil)
-sfzbr1 // 27/07/1995 (c) 1995 (Brazil)
-mmancp2u // 06/10/1995 (c) 1995 (USA)
-mmancp2ur1 // 26/09/1995 (c) 1995 (USA)
-rmancp2j // 22/09/1995 (c) 1995 (Japan)
-msh // 24/10/1995 (c) 1995 (Euro)
-mshu // 24/10/1995 (c) 1995 (USA)
-mshj // 17/11/1995 (c) 1995 (Japan)
-mshjr1 // 24/10/1995 (c) 1995 (Japan)
-msha // 24/10/1995 (c) 1995 (Asia)
-mshh // 17/11/1995 (c) 1995 (Hispanic)
-mshb // 17/11/1995 (c) 1995 (Brazil)
-19xx // 07/12/1995 (c) 1996 (USA)
-19xxj // 04/01/1996 (c) 1996 (Japan)
-19xxjr1 // 25/12/1995 (c) 1996 (Japan)
-19xxjr2 // 07/12/1995 (c) 1996 (Japan)
-19xxa // 04/01/1996 (c) 1996 (Asia)
-19xxar1 // 07/12/1995 (c) 1996 (Asia)
-19xxh // 18/12/1995 (c) 1996 (Hispanic)
-19xxb // 18/12/1995 (c) 1996 (Brazil)
-ddsom // 19/06/1996 (c) 1996 (Euro)
-ddsomr1 // 23/02/1996 (c) 1996 (Euro)
-ddsomr2 // 09/02/1996 (c) 1996 (Euro)
-ddsomr3 // 08/02/1996 (c) 1996 (Euro)
-ddsomu // 19/06/1996 (c) 1996 (USA)
-ddsomur1 // 09/02/1996 (c) 1996 (USA)
-ddsomjr1 // 06/02/1996 (c) 1996 (Japan)
-ddsomj // 19/06/1996 (c) 1996 (Japan)
-ddsoma // 19/06/1996 (c) 1996 (Asia)
-ddsomar1 // 08/02/1996 (c) 1996 (Asia)
-ddsomh // 23/02/1996 (c) 1996 (Hispanic)
-ddsomb // 23/02/1996 (c) 1996 (Brazil)
-sfa2 // 06/03/1996 (c) 1996 (Euro)
-sfa2u // 30/04/1996 (c) 1996 (USA)
-sfa2ur1 // 06/03/1996 (c) 1996 (USA)
-sfz2j // 30/04/1996 (c) 1996 (Japan)
-sfz2jr1 // 27/02/1996 (c) 1996 (Japan)
-sfz2a // 27/02/1996 (c) 1996 (Asia)
-sfz2b // 31/05/1996 (c) 1996 (Brazil)
-sfz2br1 // 04/03/1996 (c) 1996 (Brazil)
-sfz2h // 04/03/1996 (c) 1996 (Hispanic)
-sfz2n // 29/02/1996 (c) 1996 (Oceania)
-spf2t // 29/05/1996 (c) 1996 (Europe)
-spf2tu // 20/06/1996 (c) 1996 (USA)
-spf2xj // 31/05/1996 (c) 1996 (Japan)
-spf2ta // 29/05/1996 (c) 1996 (Asia)
-spf2th // 31/05/1996 (c) 1996 (Hispanic)
-megaman2 // 08/07/1996 (c) 1996 (USA)
-megaman2a // 08/07/1996 (c) 1996 (Asia)
-rockman2j // 08/07/1996 (c) 1996 (Japan)
-megaman2h // 12/07/1996 (c) 1996 (Hispanic)
-gigaman2 // bootleg
-sfz2al // 26/08/1996 (c) 1996 (Asia)
-sfz2alj // 05/08/1996 (c) 1996 (Japan)
-sfz2alh // 13/08/1996 (c) 1996 (Hispanic)
-sfz2alb // 13/08/1996 (c) 1996 (Brazil)
-qndream // 26/08/1996 (c) 1996 (Japan)
-xmvsf // 04/10/1996 (c) 1996 (Euro)
-xmvsfr1 // 10/09/1996 (c) 1996 (Euro)
-xmvsfu // 23/10/1996 (c) 1996 (USA)
-xmvsfur1 // 04/10/1996 (c) 1996 (USA)
-xmvsfur2 // 10/09/1996 (c) 1996 (USA)
-xmvsfj // 04/10/1996 (c) 1996 (Japan)
-xmvsfjr1 // 10/09/1996 (c) 1996 (Japan)
-xmvsfjr2 // 09/09/1996 (c) 1996 (Japan)
-xmvsfa // 23/10/1996 (c) 1996 (Asia)
-xmvsfar1 // 04/10/1996 (c) 1996 (Asia)
-xmvsfar2 // 19/09/1996 (c) 1996 (Asia)
-xmvsfar3 // 10/09/1996 (c) 1996 (Asia)
-xmvsfh // 04/10/1996 (c) 1996 (Hispanic)
-xmvsfb // 23/10/1996 (c) 1996 (Brazil)
-batcir // 19/03/1997 (c) 1997 (Euro)
-batcirj // 19/03/1997 (c) 1997 (Japan)
-batcira // 19/03/1997 (c) 1997 (Asia)
-vsav // 19/05/1997 (c) 1997 (Euro)
-vsavu // 19/05/1997 (c) 1997 (USA)
-vsavj // 19/05/1997 (c) 1997 (Japan)
-vsava // 19/05/1997 (c) 1997 (Asia)
-vsavh // 19/05/1997 (c) 1997 (Hispanic)
-mshvsf // 25/06/1997 (c) 1997 (Euro)
-mshvsfu // 27/08/1997 (c) 1997 (USA)
-mshvsfu1 // 25/06/1997 (c) 1997 (USA)
-mshvsfj // 07/07/1997 (c) 1997 (Japan)
-mshvsfj1 // 02/07/1997 (c) 1997 (Japan)
-mshvsfj2 // 25/06/1997 (c) 1997 (Japan)
-mshvsfh // 25/06/1997 (c) 1997 (Hispanic)
-mshvsfa // 25/06/1997 (c) 1997 (Asia)
-mshvsfa1 // 20/06/1997 (c) 1997 (Asia)
-mshvsfb // 27/08/1997 (c) 1997 (Brazil)
-mshvsfb1 // 25/06/1997 (c) 1997 (Brazil)
-csclub // 17/10/1997 (c) 1997 (Euro)
-csclub1 // 22/07/1997 (c) 1997 (Euro)
-csclubj // 22/07/1997 (c) 1997 (Japan)
-csclubjy // 22/07/1997 (c) 1997 (Japan)
-cscluba // 22/07/1997 (c) 1997 (Asia)
-csclubh // 22/07/1997 (c) 1997 (Hispanic)
-sgemf // 04/09/1997 (c) 1997 (USA)
-pfghtj // 04/09/1997 (c) 1997 (Japan)
-sgemfa // 04/09/1997 (c) 1997 (Asia)
-sgemfh // 04/09/1997 (c) 1997 (Hispanic)
-vhunt2r1 // 13/09/1997 (c) 1997 (Japan)
-vhunt2 // 29/09/1997 (c) 1997 (Japan)
-vsav2 // 13/09/1997 (c) 1997 (Japan)
-mvsc // 23/01/1998 (c) 1998 (Euro)
-mvscr1 // 12/01/1998 (c) 1998 (Euro)
-mvscu // 23/01/1998 (c) 1998 (USA)
-mvscur1 // 23/01/1998 (c) 1998 (USA)
-mvscj // 23/01/1998 (c) 1998 (Japan)
-mvscjr1 // 12/01/1998 (c) 1998 (Japan)
-mvscjsing // 23/01/1998 (c) 1998 (Japan) - Single PCB
-mvsca // 23/01/1998 (c) 1998 (Asia)
-mvscar1 // 12/01/1998 (c) 1998 (Asia)
-mvsch // 23/01/1998 (c) 1998 (Hispanic)
-mvscb // 23/01/1998 (c) 1998 (Brazil)
-sfa3 // 04/09/1998 (c) 1998 (USA)
-sfa3u // 04/09/1998 (c) 1998 (USA)
-sfa3ur1 // 29/06/1998 (c) 1998 (USA)
-sfa3us // 16/06/1998 (c) 1998 (USA)
-sfa3h // 04/09/1998 (c) 1998 (Hispanic)
-sfa3hr1 // 29/06/1998 (c) 1998 (Hispanic)
-sfa3b // 29/06/1998 (c) 1998 (Brazil)
-sfz3j // 04/09/1998 (c) 1998 (Japan)
-sfz3jr1 // 27/07/1998 (c) 1998 (Japan)
-sfz3jr2 // 29/06/1998 (c) 1998 (Japan)
-sfz3a // 04/09/1998 (c) 1998 (Asia)
-sfz3ar1 // 01/07/1998 (c) 1998 (Asia)
-gigawing // 22/02/1999 (c) 1999 Takumi (USA)
-gigawingj // 23/02/1999 (c) 1999 Takumi (Japan)
-gigawinga // 22/02/1999 (c) 1999 Takumi (Asia)
-gigawingh // 22/02/1999 (c) 1999 Takumi (Hispanic)
-gigawingb // 22/02/1999 (c) 1999 Takumi (Brazil)
-jyangoku // 27/05/1999 (c) 1999 (Japan)
-dimahoo // 21/01/2000 (c) 2000 Eighting/Raizing (USA)
-dimahoou // 21/01/2000 (c) 2000 Eighting/Raizing (USA)
-gmahou // 21/01/2000 (c) 2000 Eighting/Raizing (Japan)
-mmatrix // 12/04/2000 (c) 2000 Takumi (USA)
-mmatrixj // 12/04/2000 (c) 2000 Takumi (Japan)
-1944 // 20/06/2000 (c) 2000 Eighting/Raizing (USA)
-1944j // 20/06/2000 (c) 2000 Eighting/Raizing (Japan)
-mpang // 10/10/2000 (c) 2000 Mitchell (Euro)
-mpangr1 // 25/09/2000 (c) 2000 Mitchell (Euro)
-mpangu // 10/10/2000 (c) 2000 Mitchell (USA)
-mpangj // 11/10/2000 (c) 2000 Mitchell (Japan)
-progear // 17/01/2001 (c) 2001 Cave (USA)
-progearj // 17/01/2001 (c) 2001 Cave (Japan)
-progeara // 17/01/2001 (c) 2001 Cave (Asia)
-pzloop2 // 02/03/2001 (c) 2001 Mitchell (Euro)
-pzloop2j // 26/02/2001 (c) 2001 Mitchell (Japan)
-pzloop2jr1 // 05/02/2001 (c) 2001 Mitchell (Japan)
-choko // 20/08/2001 (c) 2001 Mitchell (Japan)
-hsf2 // 02/02/2004 (c) 2003, 2004 (USA)
-hsf2j // 22/12/2003 (c) 2003, 2004 (Japan)
-hsf2a // 02/02/2004 (c) 2003, 2004 (Asia)
-
-// CPS2 'Phoenix' bootlegs
-ssf2ud
-ddtodd
-ecofghtrd
-avspd
-dstlku1d
-ringdstd
-xmcotar1d
-nwarrud
-sfad
-mshud
-19xxd
-sfz2ad
-sfz2jd
-spf2td
-spf2xjd
-ddsomud
-megamn2d
-sfz2ald
-xmvsfu1d
-batcird
-vsavd
-mvscud
-sfa3ud
-gigawingd
-gigawingjd
-1944d
-progearud
-progearjd
-progearjbl
-hsf2d
-ssf2tbd
-ssf2tad
-ssf2xjd
-sgemfd
-armwar1d
-dimahoud
-mmatrixd
-vhunt2d
-vsav2d
-csclub1d
-cybotsud
-cybotsjd
-mshvsfu1d
-sfz3jr2d
-
-// Capcom CPS3 games
-redearth // 21/11/1996 (c) 1996 (Euro)
-redearthr1 // 23/10/1996 (c) 1996 (Euro)
-warzard // 21/11/1996 (c) 1996 (Japan)
-warzardr1 // 23/10/1996 (c) 1996 (Japan)
-sfiii // 04/02/1997 (c) 1997 (Euro)
-sfiiiu // 04/02/1997 (c) 1997 (USA)
-sfiiia // 04/02/1997 (c) 1997 (Asia)
-sfiiij // 04/02/1997 (c) 1997 (Japan)
-sfiiih // 04/02/1997 (c) 1997 (Hispanic)
-sfiii2 // 30/09/1997 (c) 1997 (USA)
-sfiii2j // 30/09/1997 (c) 1997 (Japan)
-jojo // 28/01/1999 (c) 1998 (USA)
-jojor1 // 08/01/1999 (c) 1998 (USA)
-jojor2 // 02/12/1998 (c) 1998 (USA)
-jojoj // 28/01/1999 (c) 1998 (Japan)
-jojojr1 // 08/01/1999 (c) 1998 (Japan)
-jojojr2 // 02/12/1998 (c) 1998 (Japan)
-sfiii3 // 08/06/1999 (c) 1999 (Euro)
-sfiii3r1 // 12/05/1999 (c) 1999 (Euro)
-sfiii3u // 08/06/1999 (c) 1999 (USA)
-sfiii3ur1 // 12/05/1999 (c) 1999 (USA)
-jojoba // 27/09/1999 (c) 1999 (Japan)
-jojobar1 // 13/09/1999 (c) 1999 (Japan)
-sfiiin // 04/02/1997 (c) 1997 (Asia)
-sfiiina // 04/02/1997 (c) 1997 (Asia)
-sfiii2n // 30/09/1997 (c) 1997 (Asia)
-jojon // 28/01/1999 (c) 1998 (Asia)
-jojonr1 // 08/01/1999 (c) 1998 (Asia)
-jojonr2 // 02/12/1998 (c) 1998 (Asia)
-sfiii3n // 08/06/1999 (c) 1999 (Japan)
-sfiii3nr1 // 12/05/1999 (c) 1999 (Japan)
-jojoban // 27/09/1999 (c) 1999 (Japan)
-jojobanr1 // 13/09/1999 (c) 1999 (Japan)
-jojobane // 27/09/1999 (c) 1999 (Euro)
-jojobaner1 // 13/09/1999 (c) 1999 (Euro)
-cps3boot // bootleg
-cps3boota // bootleg
-cps3booto // bootleg
-cps3bootao // bootleg
-cps3booto2 // bootleg
-cps3bootao2 // bootleg
-cps3bs32 //
-cps3bs32a //
-
-// Capcom ZN1
-cpzn1
-ts2 // Battle Arena Toshinden 2 (USA 951124)
-ts2a // Battle Arena Toshinden 2 (USA 951124)
-ts2j // Battle Arena Toshinden 2 (JAPAN 951124)
-starglad // Star Gladiator (USA 960627)
-stargladj // Star Gladiator (JAPAN 960627)
-sfex // Street Fighter EX (EURO 961219)
-sfexu // Street Fighter EX (USA 961219)
-sfexa // Street Fighter EX (ASIA 961219)
-sfexj // Street Fighter EX (JAPAN 961130)
-glpracr // Gallop Racer (English Ver 10.17.K)
-glpracrj // Gallop Racer (Japanese Ver 9.01.12)
-sfexp // Street Fighter EX Plus (USA 970407)
-sfexpu1 // Street Fighter EX Plus (USA 970311)
-sfexpj // Street Fighter EX Plus (JAPAN 970407)
-sfexpj1 // Street Fighter EX Plus (JAPAN 970311)
-
-// Capcom ZN2
-cpzn2
-rvschool // Rival Schools (EURO 971117)
-rvschoolu // Rival Schools (USA 971117)
-rvschoola // Rival Schools (ASIA 971117)
-jgakuen // Justice Gakuen (JAPAN 971117)
-sfex2 // Street Fighter EX 2 (USA 980526)
-sfex2j // Street Fighter EX 2 (JAPAN 980312)
-sfex2a // Street Fighter EX 2 (ASIA 980312)
-sfex2h // Street Fighter EX 2 (HISPANIC 980312)
-plsmaswd // Plasma Sword (USA 980316)
-stargld2 // Star Gladiator 2 (JAPAN 980316)
-plsmaswda // Plasma Sword (ASIA 980316)
-tgmj // Tetris The Grand Master (JAPAN 980710)
-techromn // Tech Romancer (EURO 980914)
-techromnu // Tech Romancer (USA 980914)
-kikaioh // Kikaioh (JAPAN 980914)
-sfex2p // Street Fighter EX 2 Plus (USA 990611)
-sfex2pa // Street Fighter EX 2 Plus (ASIA 990611)
-sfex2ph // Street Fighter EX 2 Plus (HISPANIC 990611)
-sfex2pj // Street Fighter EX 2 Plus (JAPAN 990611)
-strider2 // Strider 2 (USA 991213)
-strider2a // Strider 2 (ASIA 991213)
-shiryu2 // Strider Hiryu 2 (JAPAN 991213)
-
-// Capcom medal games
-alien // (c) 2005
-
-// Capcom Nintendo HW?
-tvcapcom
-
-// Tecmo ZN1
-tps
-glpracr2 // Gallop Racer 2 (USA)
-glpracr2j // Gallop Racer 2 (JAPAN)
-glpracr2l // Gallop Racer 2 Link HW (JAPAN)
-doapp // Dead Or Alive ++ (JAPAN)
-cbaj // Cool Boaders Arcade Jam
-shngmtkb // Shanghai Matekibuyuu
-tondemo // Tondemo Crisis (JAPAN)
-glpracr3 // Gallop Racer 3 (Export)
-glpracr3j // Gallop Racer 3 (JAPAN)
-flamegun // Flame Gunner (USA)
-flamegunj // Flame Gunner (JAPAN)
-lpadv // Logic Pro Adventure (JAPAN)
-tblkkuzu // The Block Kuzushi (JAPAN)
-1on1gov // 1 on 1 Government (JAPAN)
-tecmowcm // Tecmo World Cup Millennium (JAPAN)
-mfjump // Monster Farm Jump (JAPAN)
-
-// Atlus ZN1
-atluspsx
-hvnsgate // Heaven's Gate (JAPAN)
-
-// PS Arcade 95
-psarc95
-beastrzr // Beastorizer (USA)
-bldyroar // Bloody Roar (JAPAN)
-beastrzrb // Beastorizer (USA Bootleg)
-bldyror2 // Bloody Roar 2 (WORLD)
-bldyror2u // Bloody Roar 2 (USA)
-bldyror2a // Bloody Roar 2 (ASIA)
-bldyror2j // Bloody Roar 2 (JAPAN)
-brvblade // Brave Blade (WORLD)
-brvbladeu // Brave Blade (USA)
-brvbladea // Brave Blade (ASIA)
-brvbladej // Brave Blade (JAPAN)
-bam2 // Bust a Move 2 (JAPANESE ROM ver. 1999/07/17 10:00:00)
-
-// Atari PSX
-atpsx
-primrag2 // Primal Rage 2
-
-// Acclaim PSX
-acpsx
-nbajamex // NBA Jam Extreme
-jdredd // Judge Dredd (Rev C)
-jdreddb // Judge Dredd (Rev B)
-
-// Video System ZN1
-vspsx
-aerofgts // Aero Fighters Special (TAIWAN)
-sncwgltd // Sonic Wings Limited (JAPAN)
-
-// Taito FX1a
-taitofx1
-sfchamp // Super Football Champ (Ver 2.5O)
-sfchampo // Super Football Champ (Ver 2.4O)
-sfchampu // Super Football Champ (Ver 2.4A)
-sfchampj // Super Football Champ (Ver 2.4J)
-psyforce // Psychic Force (Ver 2.4O)
-psyforcej // Psychic Force (Ver 2.4J)
-psyforcex // Psychic Force EX (Ver 2.0J)
-mgcldate // Magical Date (JAPAN Ver 2.02J)
-mgcldtex // Magical Date EX (JAPAN Ver 2.01J)
-
-// Taito FX1b
-raystorm // Ray Storm (Ver 2.06A)
-raystormo // Ray Storm (Ver 2.05O)
-raystormu // Ray Storm (Ver 2.05A)
-raystormj // Ray Storm (Ver 2.05J)
-ftimpact // Fighters' Impact (Ver 2.02O)
-ftimpactu // Fighters' Impact (Ver 2.02A)
-ftimpactj // Fighters' Impact (Ver 2.02J)
-ftimpcta // Fighters' Impact A (Ver 2.00J)
-gdarius // G-Darius (Ver 2.01J)
-gdariusb // G-Darius (Ver 2.02A)
-gdarius2 // G-Darius Ver.2 (Ver 2.03J)
-
-// Taito GNET
-taitogn
-chaoshea // 1998.10 Chaos Heat (V2.09O)
-chaosheaj // 1998.10 Chaos Heat (V2.08J)
-raycris // 1998.12 Ray Crisis (V2.03J)
-otenamih // 1999.02 Otenami Haiken (Success)
-otenamhf // 2005.04 Otenami Haiken Final (V2.07JC)
-spuzboblj // 1999.03 Super Puzzle Bobble (Japan)
-spuzbobl // 1999.?? Super Puzzle Bobble (V2.05O)
-gobyrc // 1999.?? Go By RC (V2.03O)
-rcdego // 1999.06 RC De Go (V2.03J)
-flipmaze // 1999.09 Flip Maze (V2.04J)
-mahjngoh // 1999.12 Mahjong Oh (V2.06J)
-psyvaria // 2000.03 Psyvariar -Medium Unit- (V2.04J)
-shanghss // 2000.07 Shanghai Shoryu Sairin (V2.03J)
-psyvarrv // 2000.09 Psyvariar -Revision- (V2.04J)
-zokuoten // 2000.12 Zoku Otenamihaiken (V2.03J)
- // 2000.?? Taito Classic (Success, not released?)
-soutenry // 2001.02 Soutenryu (V2.07J)
-nightrai // 2001.05 Night Raid (V2.03J)
-shikigam // 2001.09 Shikigami no Shiro
-otenki // 2001.10 Otenki Kororin
-usagi // 2001.12 Usagi (V2.02J)
-shangtou // 2002.02 Shanghai Sangokuhaitougi
-xiistag // 2002.07 XII Stag (V2.01J)
-sianniv // 2003.10 Space Invaders Anniversary (V2.02J)
-kollon // 2003.11 Kollon (V2.04J)
-kollonc // 2003.11 Kollon (V2.04JC, Compact Flash version)
-zooo // 2004.05 Zooo
-
-// Namco System 11
-tekken // 1995.01 Tekken (World, TE4/VER.C)
-tekkenac // 1995.01 Tekken (Asia, TE2/VER.C)
-tekkenab // 1994.12 Tekken (Asia, TE2/VER.B)
-tekkenjb // 1994.12 Tekken (Japan, TE1/VER.B)
-tekken2 // 1996.04 Tekken 2 Ver.B (US, TES3/VER.D)
-tekken2ub // 1995.09 Tekken 2 Ver.B (US, TES3/VER.B)
-tekken2ab // 1995.09 Tekken 2 Ver.B (Asia, TES2/VER.B)
-tekken2jc // 1995.11 Tekken 2 Ver.B (Japan, TES1/VER.C)
-tekken2jb // 1995.09 Tekken 2 Ver.B (Japan, TES1/VER.B)
-tekken2aa // 1995.08 Tekken 2 (Asia, TES2/VER.A)
- // 1995.08 Tekken 2 (Japan, TES1/VER.A)
-souledge // 1996.05 Soul Edge Ver. II (World, SO4/VER.C)
-souledgeuc // 1996.05 Soul Edge Ver. II (US, SO3/VER.C)
- // 1996.05 Soul Edge Ver. II (Japan, SO1)
-souledgeua // 1996.01 Soul Edge (US, SO3/VER.A)
-souledgeaa // 1996.02 Soul Edge (Asia, SO2/VER.A)
-souledgeja // 1996.02 Soul Edge (Japan, SO1/VER.A)
-primglex // 1996.03 Prime Goal EX (Japan, PG1/VER.A)
-xevi3dg // 1996.05 Xevious 3D/G (Japan, XV31/VER.A)
-dunkmnia // 1996.05 Dunk Mania (Asia, DM2/VER.C)
-dunkmniajc // 1996.05 Dunk Mania (Japan, DM1/VER.C)
-danceyes // 1996.10 Dancing Eyes (US, DC3/VER.C)
-danceyesj // 1996.09 Dancing Eyes (Japan, DC1/VER.A)
-pocketrc // 1997.03 Pocket Racer (Japan, PKR1/VER.B)
-starswep // 1997.07 Star Sweep (Japan, STP1/VER.A)
-myangel3 // 1998.03 Kosodate Quiz My Angel 3 (Japan, KQT1/VER.A)
-ptblank2ua // 1999.?? Point Blank 2 (US, GNB3/VER.A)
- // 1999.02 Gunbaarl (Japan, GNB1)
-
-// Namco System 12
-tekken3 // 1997.03 Tekken 3 (Japan, TET1/VER.E1)
-tekken3ae // 1997.03 Tekken 3 (Asia, TET2/VER.E1)
-tekken3ud // 1997.?? Tekken 3 (US, TET3/VER.D)
-tekken3ab // 1997.?? Tekken 3 (Asia, TET2/VER.B)
-tekken3ua // 1997.?? Tekken 3 (US, TET3/VER.A)
-tekken3aa // 1997.?? Tekken 3 (Asia, TET2/VER.A)
-tekken3ja // 1997.?? Tekken 3 (Japan, TET1/VER.A)
-lbgrande // 1997.?? Libero Grande (Asia, LG2/VER.A)
-lbgrandeja // 1997.12 Libero Grande (Japan, LG1/VER.A)
-toukon3 // 1997.12 Shin Nihon Pro Wrestling Toukon Retsuden 3 Arcade Edition (Japan, TR1/VER.A)
-ehrgeiz // 1998.?? Ehrgeiz (US, EG3/VER.A)
-ehrgeizaa // 1998.?? Ehrgeiz (Asia, EG2/VER.A)
-ehrgeizja // 1998.05 Ehrgeiz (Japan, EG1/VER.A)
-sws98 // 1998.06 Super World Stadium '98 (SS81/VER.A, Japan)
-soulclbr // 1998.?? Soul Calibur (World, SOC14/VER.C)
-soulclbruc // 1998.?? Soul Calibur (US, SOC13/VER.C)
-soulclbrjc // 1998.07 Soul Calibur (Japan, SOC11/VER.C)
-soulclbrwb // 1998.?? Soul Calibur (World, SOC14/VER.B)
-soulclbrub // 1998.?? Soul Calibur (US, SOC13/VER.B)
-soulclbrjb // 1998.?? Soul Calibur (Japan, SOC11/VER.B)
-soulclbrja // 1998.?? Soul Calibur (Japan, SOC11/VER.A2)
-technodr // 1998.07 Techno Drive
-mdhorse // 1998.11 Derby Quiz My Dream Horse (Japan, MDH1/VER.A2)
-aplarail // 1998.12 Attack Pla Rail
-tenkomor // 1998.?? Tenkomori Shooting (Asia, TKM2/VER.A1)
-tenkomorja // 1998.12 Tenkomori Shooting (Japan, TKM1/VER.A1)
-pacapp // 1998.12 Paca Paca Passion (Japan, PPP1/VER.A2)
-fgtlayer // 1998.12 Fighting Layer (Japan, FTL0/VER.A)
- // 1999.01 Bust A Move (Metro)
-ptblank2 // 1999.?? Point Blank 2 (GNB5/VER.A)
-gunbarl // 1999.?? Gunbarl (Japan, GNB4/VER.A)
-sws99 // 1999.05 Super World Stadium '99 (Japan, SS91/VER.A3)
-ghlpanic // 1999.?? Ghoul Panic (Asia, OB2/VER.A)
-ohbakyuun // 1999.07 Oh! Bakyuuun (Japan, OB1/VER.A)
-pacapp2 // 1999.07 Paca Paca Passion 2 (Japan, PKS1/VER.A)
- // 1999.07 Bust A Move 2 (Metro)
-tektagt // 1999.?? Tekken Tag Tournament (US, TEG3/VER.C1)
-tektagtac // 1999.?? Tekken Tag Tournament (Asia, TEG2/VER.C1)
-tektagtac1 // 1999.?? Tekken Tag Tournament (Asia, TEG2/VER.C1) - alt mainboard & rom board
-tektagtub // 1999.?? Tekken Tag Tournament (US, TEG3/VER.B)
-tektagtjc1 // 1999.?? Tekken Tag Tournament (Japan, TEG1/VER.C1)
-tektagtjb // 1999.07 Tekken Tag Tournament (Japan, TEG1/VER.B)
-tektagtja // 1999.07 Tekken Tag Tournament (Japan, TEG1/VER.A)
-mrdrillr // 1999.11 Mr Driller (US, DRI3/VER.A2)
-mrdrillrj // 1999.11 Mr Driller (Japan, DRI1/VER.A2, Japan)
- // 1999.12 UmJammer Lammy NOW! (Japan)
- // 1999.12 Quest for Fame (Japan)
-pacappsp // 1999.12 Paca Paca Passion Special (PSP1/VER.A, Japan)
-kaiunqz // 1999.12 Kaiun Quiz (KW1/VER.A, Japan)
-aquarush // 2000.02 Aqua Rush (AQ1/VER.A1, Japan)
-golgo13 // 2000.03 Golgo 13 (GLG1/VER.A, Japan)
-sws2000 // 2000.03 Super World Stadium 2000 (SS01/VER.A, Japan)
-truckk // 2000.06 Truck Kyousoukyoku (Metro)
-kartduel // 2000.07 Kart Duel
- // 2000.08 Teknowerk
-g13knd // 2000.10 Golgo 13 Kiseki no Dandou (GLS1/VER.A, Japan)
-sws2001 // 2001.04 Super World Stadium 2001 (SS11/VER.A, Japan)
-
-// Namco System 10
-mrdrilr2 // 2000.07 Mr Driller 2 (DR21 Ver.A)
-mrdrlr2a // 2000.?? Mr Driller 2 (DR22 Ver.A)
-ptblank3 // 2000.12 Point Blank 3 (GNN2 Ver.A)
-gunbalina // 2000.12 Gunbalina (GNN1 Ver.A)
- // 2001.02 Photo Battole
- // 2001.02 Taiko no Tatsujin
- // 2001.03 Gahaha Ippatsudou
-mrdrilrg // 2001.03 Mr. Driller G (DRG1 Ver.A)
-mrdrilrga // 2001.03 Mr. Driller G ALT (DRG1 Ver.A)
- // 2001.07 Golgo 13 Juusei no Requiem
- // 2001.08 Taiko no Tatsujin 2
- // 2001.09 Gahaha Ippatsudou 2
- // 2001.11 Knock Down 2001
-knpuzzle // 2001.12 Kotoba no Puzzle Mojipittan (KPM1 Ver.A)
-gjspace // 2001.12 Gekitoride-Jong Space (10011 Ver.A)
-panikuru // 2002.03 Panicuru Panekuru
- // 2002.03 Taiko no Tatsujin 3
-startrgn // 2002.07 Star Trigon (STT1 Ver.A)
- // 2002.07 Tsukkomi Yousei Gips Nice Tsukkomi
-gamshara // 2002.08 Gamshara (10021 Ver.A)
-chocovdr // 2002.10 Uchuu Daisakusen : Chocovader Contactee
- // 2002.12 Taiko no Tatsujin 4
-nflclsfb // 2003.?? NFL Classic Football
- // 2003.04 Seisyun Quiz Colorful High School
- // 2003.10 Taiko no Tatsujin 5
- // 2004.07 Taiko no Tatsujin 6
-konotako // 2003.?? Kono Tako (10021 Ver.A)
-
-// Konami GQ
-cryptklr // Crypt Killer (GQ420 UAA)
-
-// Konami GV
-konamigv
-kdeadeye // GV054, UA01
-powyak96 // GV017, Japan 1.03
-hyperath // GV021, Japan 1.00
-lacrazyc // GV027, Asia 1.10
-susume // GV027, Japan 1.20
-btchamp // GV053, UAA01
-weddingr // GX624, JAA
-tmosh // GQ673, JAA
-tmoshs // GE755, JAA
-tmoshsp // GE756, JAB
-tmoshspa // GE756, JAA
-nagano98 // GX720, EAA
-naganoj // GX720, JAA
-simpbowl // GQ829, UAA
-
-// Konami System 573
-sys573
-hndlchmp // 1997 - Handle Champ (GQ710 VER. JAA)
-darkhleg // 1998 - Dark Horse Legend (GX706 VER. JAA)
-fbaitbc // 1998 - Fisherman's Bait - A Bass Challenge (GE765 VER. UAB)
-bassangl // 1998 - Bass Angler (GE765 VER. JAA)
-powyakex // 1998 - Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB)
-konam80s // 1998 - Konami 80's AC Special (GC826 VER. EAA)
-konam80u // 1998 - Konami 80's AC Special (GC826 VER. UAA)
-konam80j // 1998 - Konami 80's Gallery (GC826 VER. JAA)
-konam80a // 1998 - Konami 80's AC Special (GC826 VER. AAA)
-konam80k // 1998 - Konami 80's AC Special (GC826 VER. KAA)
-dstage // 1999 - Dancing Stage - Internet Ranking Ver (GC845 VER. EBA)
-dstagea // 1999 - Dancing Stage (GN845 VER. EAA)
-ddru // 1999 - Dance Dance Revolution (GN845 VER. UAA)
-ddrj // 1998 - Dance Dance Revolution - Internet Ranking Ver (GC845 VER. JBA)
-ddrja // 1998 - Dance Dance Revolution (GC845 VER. JAA)
-ddrjb // 1998 - Dance Dance Revolution (GC845 VER. JAB)
-ddra // 1999 - Dance Dance Revolution (GN845 VER. AAA)
-fbait2bc // 1998 - Fisherman's Bait 2 - A Bass Challenge (GE865 VER. UAB)
-bassang2 // 1998 - Bass Angler 2 (GE865 VER. JAA)
-hyperbbc // 1998 - Hyper Bishi Bashi (GQ876 VER. EAA)
-hyperbbca // 1998 - Hyper Bishi Bashi (GQ876 VER. AAA)
-gchgchmp // 1999 - Gachaga Champ (GE877 VER. JAB)
-drmn // 1999 - DrumMania (GQ881 VER. JAD)
-gtrfrks // 1999 - Guitar Freaks (GQ886 VER. EAC)
-gtrfrksu // 1999 - Guitar Freaks (GQ886 VER. UAC)
-gtrfrksj // 1999 - Guitar Freaks (GQ886 VER. JAC)
-gtrfrksa // 1999 - Guitar Freaks (GQ886 VER. AAC)
-fbaitmc // 1999 - Fisherman's Bait - Marlin Challenge (GX889 VER. EA)
-fbaitmcu // 1999 - Fisherman's Bait - Marlin Challenge (GX889 VER. UA)
-fbaitmcj // 1999 - Fisherman's Bait - Marlin Challenge (GX889 VER. JA)
-fbaitmca // 1999 - Fisherman's Bait - Marlin Challenge (GX889 VER. AA)
-ddr2m // 1999 - Dance Dance Revolution 2nd Mix (GN895 VER. JAA)
-ddr2ml // 1999 - Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAB)
-ddr2mla // 1999 - Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAA)
-ddrbocd // 1999 - Dance Dance Revolution Best of Cool Dancers (GE892 VER. JAA)
-ddr2mc // 1999 - Dance Dance Revolution 2nd Mix with beatmaniaIIDX CLUB VERSiON (GE896 VER. JAA)
-ddr2mc2 // 1999 - Dance Dance Revolution 2nd Mix with beatmaniaIIDX substream CLUB VERSiON 2 (GE984 VER. JAA)
-gtrfrk2m // 1999 - Guitar Freaks 2nd Mix Ver 1.01 (GQ883 VER. JAD)
-dsftkd // 1999 - Dancing Stage featuring TRUE KiSS DESTiNATiON (G*884 VER. JAA)
-cr589fw // 1999 - CR-589 Firmware (700B04)
-cr589fwa // 1999 - CR-589 Firmware (700A04)
-ddr3mk // 2000 - Dance Dance Revolution 3rd Mix - Ver.Korea2 (GN887 VER. KBA)
-ddr3mka // 2000 - Dance Dance Revolution 3rd Mix - Ver.Korea (GN887 VER. KAA)
-ddr3ma // 1999 - Dance Dance Revolution 3rd Mix (GN887 VER. AAA)
-ddr3mj // 1999 - Dance Dance Revolution 3rd Mix (GN887 VER. JAA)
-ddrsbm // 1999 - Dance Dance Revolution Solo Bass Mix (GQ894 VER. JAA)
-ddrs2k // 1999 - Dance Dance Revolution Solo 2000 (GC905 VER. AAA)
-ddrs2kj // 1999 - Dance Dance Revolution Solo 2000 (GC905 VER. JAA)
-hypbbc2p // 1999 - Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. JAA)
-hypbbc2pk // 1999 - Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. KAA)
-dsfdct // 1999 - Dancing Stage featuring Dreams Come True (GC910 VER. JCA)
-dsfdcta // 1999 - Dancing Stage featuring Dreams Come True (GC910 VER. JAA)
-drmn2m // 1999 - DrumMania 2nd Mix (GE912 VER. JAB)
-drmn2mpu // 1999 - DrumMania 2nd Mix Session Power Up Kit (GE912 VER. JAB)
-stepchmp // 1999 - Step Champ (GE930 VER. JA)
-dncfrks // 2000 - Dance Freaks (G*874 VER. KAA)
-dmx // 2000 - Dance Maniax (G*874 VER. JAA)
-gunmania // 2000 - GunMania (GL906 VER. JAA)
-fghtmn // 2000 - Fighting Mania (QG918 VER. EAA)
-fghtmna // 2000 - Fighting Mania (QG918 VER. AAA)
-pnchmn // 2000 - Punch Mania: Hokuto No Ken (GQ918 VER. JAB)
-pnchmna // 2000 - Punch Mania: Hokuto No Ken (GQ918 VER. JAB, ALT CD)
-fghtmnk // 2000 - Fighting Mania (QG918 VER. KAA)
-fghtmnu // 2000 - Fighting Mania (QG918 VER. IAA)
-dsem // 2000 - Dancing Stage Euro Mix (G*936 VER. EAA)
-gtrfrk3m // 2000 - Guitar Freaks 3rd Mix (GE949 VER. JAC)
-gtfrk3ma // 2000 - Guitar Freaks 3rd Mix (GE949 VER. JAB)
-gtfrk3mb // 2000 - Guitar Freaks 3rd Mix - security cassette versionup (949JAZ02)
-pnchmn2 // 2000 - Punch Mania 2: Hokuto No Ken (GQA09 JAA)
-salarymc // 2000 - Salary Man Champ (G*A18 VER. JAA)
-ddr3mp // 2000 - Dance Dance Revolution 3rd Mix Plus (G*A22 VER. JAA)
-pcnfrk3m // 2000 - Percussion Freaks 3rd Mix (G*A23 VER. KAA)
-drmn3m // 2000 - DrumMania 3rd Mix (G*A23 VER. JAA)
-gtrfrk4m // 2000 - Guitar Freaks 4th Mix (G*A24 VER. JAA)
-drmn4m // 2000 - DrumMania 4th Mix (G*A25 VER. JAA)
-ddr4m // 2000 - Dance Dance Revolution 4th Mix (G*A33 VER. AAA)
-ddr4mj // 2000 - Dance Dance Revolution 4th Mix (G*A33 VER. JAA)
-ddr4ms // 2000 - Dance Dance Revolution Solo 4th Mix (G*A33 VER. ABA)
-ddr4msj // 2000 - Dance Dance Revolution Solo 4th Mix (G*A33 VER. JBA)
-dsfdr // 2000 - Dancing Stage Featuring Disney's Rave (GCA37JAA)
-ddrusa // 2000 - Dance Dance Revolution USA (G*A44 VER. UAA)
-ddr4mp // 2000 - Dance Dance Revolution 4th Mix Plus (G*A34 VER. JAA)
-ddr4mps // 2000 - Dance Dance Revolution 4th Mix Plus Solo (G*A34 VER. JBA)
-dmx2m // 2000 - Dance Maniax 2nd Mix (G*A39 VER. JAA)
-gtrfrk5m // 2001 - Guitar Freaks 5th Mix (G*A26 VER. JAA)
-ddr5m // 2001 - Dance Dance Revolution 5th Mix (G*A27 VER. JAA)
-dmx2majp // 2001 - Dance Maniax 2nd Mix Append J-Paradise (G*A38 VER. JAA
-mamboagg // 2001 - Mambo A Go-Go (GQA40 VER. JAB)
-mamboagga // 2001 - Mambo A Go-Go e-Amusement (GQA40 VER. JRB)
-drmn5m // 2001 - DrumMania 5th Mix (G*B05 VER. JAA)
-gtrfrk6m // 2001 - Guitar Freaks 6th Mix (G*B06 VER. JAA)
-drmn6m // 2001 - DrumMania 6th Mix (G*B16 VER. JAA)
-gtrfrk7m // 2001 - Guitar Freaks 7th Mix (G*B17 VER. JAA)
-ddrmax // 2001 - DDR Max - Dance Dance Revolution 6th Mix (G*B19 VER. JAA)
-ddrmax2 // 2002 - DDR Max 2 - Dance Dance Revolution 7th Mix (G*B20 VER. JAA)
-mrtlbeat // 2002 - Martial Beat (Martial Beat (G*B47 VER. JBA)
-drmn7m // 2002 - DrumMania 7th Mix power-up ver. (G*C07 VER. JBA)
-drmn7ma // 2002 - DrumMania 7th Mix (G*C07 VER. JAA)
-gtrfrk8m // 2002 - Guitar Freaks 8th Mix power-up ver. (G*C08 VER. JBA)
-gtrfrk8ma // 2002 - Guitar Freaks 8th Mix (G*C08 VER. JAA)
-dsem2 // 2002 - Dancing Stage Euro Mix 2 (G*C23 VER. EAA)
-ddrextrm // 2002 - Dance Dance Revolution Extreme (G*C36 VER. JAA)
-drmn8m // 2003 - DrumMania 8th Mix (G*C38 VER. JAA)
-gtrfrk9m // 2003 - Guitar Freaks 9th Mix (G*C39 VER. JAA)
-drmn9m // 2003 - DrumMania 9th Mix (G*D09 VER. JAA)
-gtfrk10m // 2003 - Guitar Freaks 10th Mix (G*D10 VER. JAB)
-gtfrk10ma // 2003 - Guitar Freaks 10th Mix (G*D10 VER. JAA)
-gtfrk10mb // 2003 - Guitar Freaks 10th Mix eAmusement (G*D10 VER. JBA)
-gtfrk11m // 2004 - Guitar Freaks 11th Mix (G*D39 VER. JAA)
-drmn10m // 2004 - DrumMania 10th Mix (G*D40 VER. JAA)
-
-// Konami Twinkle games
-gq863
-bmiidx
-bmiidxa
-bmiidxc
-bmiidxca
-bmiidxs
-bmiidxc2
-bmiidx2
-bmiidx3
-bmiidx3a
-bmiidx4
-bmiidx5
-bmiidx6
-bmiidx6a
-bmiidx7
-bmiidx8
-
-// Konami Viper games
-kviper // 1999
-ppp2nd // 2001
-boxingm // 2001
-code1d // 2000
-code1db // 2000
-gticlub2 // 2001
-gticlub2ea // 2001
-jpark3 // 2001
-mocapglf // 2001
-mocapb // 2001
-mocapbj // 2001
-p911 // 2001
-p911uc // 2001
-p911kc // 2001
-p911e // 2001
-p911ea // 2001
-p911j // 2001
-p9112 // 2001
-popn9 // 2003
-sscopex // 2001
-sogeki // 2001
-sscopefh // 2002
-thrild2 // 2001
-thrild2a // 2001
-thrild2ab // 2001
-thrild2ac // 2001
-thrild2c // 2001
-tsurugi // 2001
-tsurugie // 2001
-tsurugij // 2001
-wcombat // 2002
-wcombatb // 2002
-wcombatk // 2002
-wcombatj // 2002
-wcombatu // 2002
-xtrial // 2002
-mfightc // 2002
-mfightcc // 2002
-
-// Mitchell games
-mgakuen // (c) 1988 Yuga
-7toitsu // (c) 1988 Yuga
-mgakuen2 // (c) 1989 Face
-pkladies // (c) 1989 Mitchell
-pkladiesl // (c) 1989 Leprechaun
-pkladiesla // (c) 1989 Leprechaun
-pkladiesbl // bootleg
-dokaben // 3/1989 (c) 1989 Capcom (Japan)
- // 8/1989 Dokaben 2 (baseball)
-pang // (c) 1989 Mitchell (World)
-pangb // bootleg
-pangbold // bootleg
-pangba // bootleg
-pangb2 // bootleg
-bbros // (c) 1989 Capcom (US) not listed on Capcom's site
-pompingw // (c) 1989 Mitchell (Japan)
-cbasebal // 10/1989 (c) 1989 Capcom (Japan) (different hardware)
-cworld // 11/1989 (QUIZ 1) (c) 1989 Capcom
-hatena // 28/02/1990 (QUIZ 2) (c) 1990 Capcom (Japan)
-spang // 14/09/1990 (c) 1990 Mitchell (World)
-spangj // --/--/1990 (c) 1990 Mitchell (Japan)
-spangbl // bootleg
-sbbros // 01/10/1990 (c) 1990 Mitchell + Capcom (US) not listed on Capcom's site
-marukin // 17/10/1990 (c) 1990 Yuga (Japan)
-qtono1 // 25/12/1990 (QUIZ 3) (c) 1991 Capcom (Japan)
- // 4/1991 Ashita Tenki ni Naare (golf)
-qsangoku // 07/06/1991 (QUIZ 4) (c) 1991 Capcom (Japan)
-block // 19/12/1991 (c) 1991 Capcom (World) (Joystick version)
-blockr1 // 06/11/1991 (c) 1991 Capcom (World) (Joystick version)
-blockr2 // 10/09/1991 (c) 1991 Capcom (World)
-blockj // 10/09/1991 (c) 1991 Capcom (Japan)
-blockbl // bootleg
-
-// Incredible Technologies games
-// http://www.itsgames.com
-capbowl // (c) 1988 Incredible Technologies
-capbowl2 // (c) 1988 Incredible Technologies
-capbowl3 // (c) 1988 Incredible Technologies
-capbowl4 // (c) 1989 Incredible Technologies
-clbowl // (c) 1989 Incredible Technologies
-bowlrama // (c) 1991 P & P Marketing
-wfortune // (c) 1989 GameTek
-wfortunea // (c) 1989 GameTek
-grmatch // (c) 1989 Yankee Game Technology
-stratab // (c) 1990 Strata/Incredible Technologies
-stratab1 // (c) 1990 Strata/Incredible Technologies
-stratabs // (c) 1990 Strata/Incredible Technologies
-sstrike // (c) 1990 Strata/Incredible Technologies
-gtg // (c) 1990 Strata/Incredible Technologies
-gtgt // (c) 1990 Strata/Incredible Technologies
-gtgt1 // (c) 1990 Strata/Incredible Technologies
-hstennis // (c) 1990 Strata/Incredible Technologies
-hstennis10 // (c) 1990 Strata/Incredible Technologies
-slikshot // (c) 1990 Grand Products/Incredible Technologies
-slikshot17 // (c) 1990 Grand Products/Incredible Technologies
-slikshot16 // (c) 1990 Grand Products/Incredible Technologies
-dynobop // (c) 1990 Grand Products/Incredible Technologies
-arlingtn // (c) 1991 Strata/Incredible Technologies
-peggle // (c) 1991 Strata/Incredible Technologies
-pegglet // (c) 1991 Strata/Incredible Technologies
-pokrdice // (c) 1991 Strata/Incredible Technologies
-rimrockn // (c) 1991 Strata/Incredible Technologies
-rimrockn20 // (c) 1991 Strata/Incredible Technologies
-rimrockn16 // (c) 1991 Strata/Incredible Technologies
-rimrockn12 // (c) 1991 Strata/Incredible Technologies
-ninclown // (c) 1991 Strata/Incredible Technologies
-gpgolf // (c) 1992 Strata/Incredible Technologies
-gtg2 // (c) 1992 Strata/Incredible Technologies
-gtg2t // (c) 1989 Strata/Incredible Technologies
-gtg2j // (c) 1991 Strata/Incredible Technologies
-neckneck // (c) 1992 Bundra Games/Incredible Technologies
-timekill // (c) 1992 Strata/Incredible Technologies
-timekill131 // (c) 1992 Strata/Incredible Technologies
-timekill121 // (c) 1992 Strata/Incredible Technologies
-hardyard // (c) 1993 Strata/Incredible Technologies
-hardyard10 // (c) 1993 Strata/Incredible Technologies
-bloodstm // (c) 1994 Strata/Incredible Technologies
-bloodstm22 // (c) 1994 Strata/Incredible Technologies
-bloodstm21 // (c) 1994 Strata/Incredible Technologies
-bloodstm11 // (c) 1994 Strata/Incredible Technologies
-bloodstm10 // (c) 1994 Strata/Incredible Technologies
-pairsred // (c) 1994 Strata/Incredible Technologies
-pairs // (c) 1994 Strata/Incredible Technologies
-pairsa // (c) 1994 Strata/Incredible Technologies
-hotmemry // (c) 1994 Tuning/Incredible Technologies
-hotmemry11 // (c) 1994 Tuning/Incredible Technologies
-drivedge // (c) 1994 Strata/Incredible Technologies
-wcbowl // (c) 1995 Incredible Technologies
-wcbowl165 // (c) 1995 Incredible Technologies
-wcbowl161 // (c) 1995 Incredible Technologies
-wcbowl16 // (c) 1995 Incredible Technologies
-wcbowl140 // (c) 1995 Incredible Technologies
-wcbowl15 // (c) 1995 Incredible Technologies
-wcbowl14 // (c) 1995 Incredible Technologies
-wcbowl13 // (c) 1995 Incredible Technologies
-wcbowl13j // (c) 1995 IT Inc, Licensed to Excellent System Ltd. for Japan
-wcbowl12 // (c) 1995 Incredible Technologies
-wcbowl11 // (c) 1995 Incredible Technologies
-sftm // (c) 1995 Capcom/Incredible Technologies
-sftm110 // (c) 1995 Capcom/Incredible Technologies
-sftm111 // (c) 1995 Capcom/Incredible Technologies
-sftmj // (c) 1995 Capcom/Incredible Technologies
-shufshot // (c) Strata/Incredible Technologies
-shufshot139 // (c) Strata/Incredible Technologies
-shufshot137 // (c) Strata/Incredible Technologies
-wcbowldx // (c) 1999 Incredible Technologies
-gt3d // (c) 1995 Incredible Technologies
-gt3dl192 // (c) 1995 Incredible Technologies
-gt3dl191 // (c) 1995 Incredible Technologies
-gt3dl19 // (c) 1995 Incredible Technologies
-gt3ds192 // (c) 1995 Incredible Technologies
-gt3dv18 // (c) 1995 Incredible Technologies
-gt3dv17 // (c) 1995 Incredible Technologies
-gt3dv16 // (c) 1995 Incredible Technologies
-gt3dv15 // (c) 1995 Incredible Technologies
-gt3dv14 // (c) 1995 Incredible Technologies
-gt3dt231 // (c) 1995 Incredible Technologies
-gt3dt211 // (c) 1995 Incredible Technologies
-gt97 // (c) 1997 Incredible Technologies
-gt97v122 // (c) 1997 Incredible Technologies
-gt97v121 // (c) 1997 Incredible Technologies
-gt97s121 // (c) 1997 Incredible Technologies
-gt97v120 // (c) 1997 Incredible Technologies
-gt97t240 // (c) 1997 Incredible Technologies
-gt97t243 // (c) 1997 Incredible Technologies
-gt98 // (c) 1998 Incredible Technologies
-gt98v100 // (c) 1998 Incredible Technologies
-gt98s100 // (c) 1998 Incredible Technologies
-gt98t303 // (c) 1998 Incredible Technologies
-gtdiamond // (c) 1998 Incredible Technologies
-gt99 // (c) 1999 Incredible Technologies
-gt99s100 // (c) 1999 Incredible Technologies
-gt99t400 // (c) 1999 Incredible Technologies
-gtroyal // (c) 1999 Incredible Technologies
-gt2k // (c) 2000 Incredible Technologies
-gt2kp100 // (c) 2000 Incredible Technologies
-gt2ks100 // (c) 2000 Incredible Technologies
-gt2kt500 // (c) 2000 Incredible Technologies
-gtsupreme // (c) 2000 Incredible Technologies
-gtclassc // (c) 2001 Incredible Technologies
-gtclasscp // (c) 2001 Incredible Technologies
-gtclasscs // (c) 2001 Incredible Technologies
-
-iteagle // (c) 2000 Incredible Technologies
-virtpool
-carnking
-gtfore01
-gtfore02
-gtfore03
-gtfore03a
-gtfore04
-gtfore04a
-gtfore05
-gtfore05a
-gtfore05b
-gtfore05c
-gtfore06
-bbhsc
-bbhcotw
-
-// Leland games
-cerberus // (c) 1985 Cinematronics
-mayhem // (c) 1985 Cinematronics
-powrplay // (c) 1985 Cinematronics
-wseries // (c) 1985 Cinematronics
-alleymas // (c) 1986 Cinematronics
-upyoural // (c) 1987 Cinematronics
-dangerz // (c) 1986 Cinematronics USA
-basebal2 // (c) 1987 Cinematronics
-dblplay // (c) 1987 Tradewest / Leland
-strkzone // (c) 1988 Leland
-redlin2p // (c) 1987 Cinematronics + Tradewest license
-quarterb // (c) 1987 Leland
-quarterba // (c) 1987 Leland
-viper // (c) 1988 Leland
-teamqb // (c) 1988 Leland
-teamqb2 // (c) 1988 Leland
-aafb // (c) 1989 Leland
-aafbd2p // (c) 1989 Leland
-aafbc // (c) 1989 Leland
-aafbb // (c) 1989 Leland
-offroad // (c) 1989 Leland
-offroadt // (c) 1989 Leland
-offroadt2p // (c) 1989 Leland
-pigout // (c) 1990 Leland
-pigouta // (c) 1990 Leland
-ataxx // (c) 1990 Leland
-ataxxa // (c) 1990 Leland
-ataxxe // (c) 1990 Leland
-ataxxj // (c) 1990 Leland
-wsf // (c) 1990 Leland
-indyheat // (c) 1991 Leland
-brutforc // (c) 1991 Leland
-asylum // (c) 1991 Leland
-dlair2 // (c) 1991 Leland
-dlair2_319e // (c) 1991 Leland
-dlair2_319s // (c) 1991 Leland
-dlair2_318 // (c) 1991 Leland
-dlair2_317e // (c) 1991 Leland
-dlair2_316e // (c) 1991 Leland
-dlair2_315 // (c) 1991 Leland
-dlair2_315s // (c) 1991 Leland
-dlair2_314 // (c) 1991 Leland
-dlair2_312 // (c) 1991 Leland
-dlair2_300 // (c) 1991 Leland
-dlair2_211 // (c) 1991 Leland
-dlair2_200 // (c) 1991 Leland
-spacea91 // (c) 1991 Leland
-spacea91_13e // (c) 1991 Leland
-
-// Gremlin 8080 games
-// the numbers listed are the range of ROM part numbers
-blockade // 1-4 [1977 Gremlin]
-comotion // 5-7 [1977 Gremlin]
-hustle // 16-21 [1977 Gremlin]
-blasto // [1978 Gremlin]
-mineswpr // [1977 Amutech]
-mineswpr4 // [1977 Amutech]
-
-// Gremlin/Sega "VIC dual game board" games
-// the numbers listed are the range of ROM part numbers
-depthch // 50-55 [1977 Gremlin?]
-depthcho // ? [1977 Gremlin?]
-subhunt // ? [1977 Taito]
-safari // 57-66 [1977 Gremlin?]
-safaria // bootleg?
-frogs // 112-119 [1978 Gremlin?]
-sspaceat // 155-162 (c)
-sspaceat2 // 155-162 (c) 1979 Sega
-sspaceat3 // 155-162 (c) 1979 Sega
-sspaceatc // 139-146 (c)
-sspacaho // ? epr00001.bin - epr00008.bin
-headon // 163-167/192-193 (c) Gremlin
-headon1 // 163-167/192-193 (c) Gremlin
-headonb // bootleg, headonb.cpp
-headons // Sidam bootleg
-headonsa // Sidam bootleg
-headonmz // bootleg
-supcrash // bootleg
-hocrash // bootleg
-headon2 // ???-??? (c) 1979 Sega
-headon2s // Sidam bootleg
-car2 // bootleg
- // ???-??? Fortress
- // ???-??? Gee Bee
- // 255-270 Head On 2 / Deep Scan
-invho2 // 271-286 (c) 1979 Sega
-nsub // 268-275 (c) 1980 Sega
-samurai // 289-302 + upgrades (c) 1980 Sega
-invinco // 310-318 (c) 1979 Sega
-invds // 367-382 (c) 1979 Sega
-carhntds //
-tranqgun // 413-428 (c) 1980 Sega
- // 450-465 Tranquilizer Gun (different version?)
- // ???-??? Car Hunt / Deep Scan
-spacetrk // 630-645 (c) 1980 Sega
-spacetrkc // (c) 1980 Sega
-carnival // 651-666 (c) 1980 Sega
-carnivalc // 501-516 (c) 1980 Sega
-carnivalh
-carnivalha
-brdrline // (c) 1980 Sega
-starrkr // (c) 1981 Sega
-brdrlins // Sidam bootleg
-brdrlinb // Karateco bootleg
-brdrlinet // (c) 1981 Sega
-startrks // Sidam bootleg
-digger // 684-691 no copyright notice
-pulsar // 790-805 (c) 1981 Sega
-heiankyo // (c) [1979?] Denki Onkyo
-alphaho // Data East
-
-// Sega G-80 vector games
-spacfury // (c) 1981
-spacfurya // no copyright notice
-spacfuryb // no copyright notice
-zektor // (c) 1982
-tacscan // (c) 1982
-elim2 // (c) 1981 Gremlin
-elim2a // (c) 1981 Gremlin
-elim2c // (c) 1981 Gremlin
-elim4 // (c) 1981 Gremlin
-elim4p // (c) 1981 Gremlin
-startrek // (c) 1982
-
-// Sega G-80 raster games
-astrob // (c) 1981
-astrob2 // (c) 1981
-astrob2a // (c) 1981
-astrob1 // (c) 1981
-astrobg // (c) 1981
-005 // (c) 1981
-monsterb // (c) 1982
-monsterb2 // (c) 1982
-spaceod // (c) 1981
-spaceod2 // (c) 1981
-pignewt // (c) 1983
-pignewta // (c) 1983
-sindbadm // 834-5244 (c) 1983 Sega
-
-// Sega "Zaxxon hardware" games
-zaxxon // (c) 1982
-zaxxonj // (c) 1982
-zaxxon2 // (c) 1982
-zaxxon3 // (c) 1982
-zaxxonb // bootleg
-szaxxon // (c) 1982
-futspy // (c) 1984
-razmataz // modified 834-0213, 834-0214 (c) 1983
-ixion // (c) 1983
-congo // 605-5167 (c) 1983 (2 board stack)
-congoa // 605-5167 (c) 1983 (3 board stack)
-tiptop // 605-5167 (c) 1983 (3 board stack)
-
-// Sega "LaserDisc hardware" games
-astron // (c) 1983
-astronp // (c) 1983
-galaxyr // (c) 1983
-galaxyrp // (c) 1983
-sblazerp // (c) 1983
-cobraseg // (c) ????
-gpworld // (c) 1984
-timetrv // (c) 1991.10 Virtual Image Productions
-
-// Sega SG1000 based games
-chboxing // (c) 1984
-chwrestl // (c) 1985
-dokidoki // (c) 1985
-
-// Sega System 1 / System 2 games
-starjack // 834-5191 (c) 1983 (S1)
-starjacks // (c) 1983 Stern (S1)
-regulus // 834-5328?(c) 1983 (S1)
-reguluso // 834-5328?(c) 1983 (S1)
-regulusu // 834-5328?(c) 1983 (S1)
-upndown // (c) 1983 (S1)
-upndownu // (c) 1983 (S1)
-mrviking // 834-5383 (c) 1984 (S1)
-mrvikingj // 834-5383 (c) 1984 (S1)
-swat // 834-5388 (c) 1984 Coreland / Sega (S1)
-flicky // (c) 1984 (S1)
-flickys2 // (c) 1984 (S1)
-flickyo // (c) 1984 (S1)
-flickys1 // (c) 1984 (S1)
-wmatch // (c) 1984 (S1)
-bullfgt // 834-5478 (c) 1984 Sega / Coreland (S1)
-thetogyu // 834-5478 (c) 1984 Sega / Coreland (S1)
-spatter // 834-5583 (c) 1984 (S1)
-spattera // 834-5583 (c) 1984 (S1)
-ssanchan // 834-5583 (c) 1984 (S1)
-pitfall2 // 834-5627 [1985?] reprogrammed, (c) 1984 Activision (S1)
-pitfall2a // 834-5627 [1985?] reprogrammed, (c) 1984 Activision (S1)
-pitfall2u // 834-5627 [1985?] reprogrammed, (c) 1984 Activision (S1)
-seganinj // 834-5677 (c) 1985 (S1)
-seganinju // 834-5677 (c) 1985 (S1)
-ninja // 834-5677 (c) 1985 (S1)
-nprinces // 834-5677 (c) 1985 (S1)
-nprinceso // 834-5677 (c) 1985 (S1)
-nprincesu // 834-5677 (c) 1985 (S1)
-nprincesb // bootleg? (S1)
-imsorry // 834-5707 (c) 1985 Coreland / Sega (S1)
-imsorryj // 834-5707 (c) 1985 Coreland / Sega (S1)
-teddybb // 834-5712 (c) 1985 (S1)
-teddybbo // 834-5712 (c) 1985 (S1)
-teddybbobl // bootleg
-hvymetal // 834-5745 (c) 1985 (S2?)
-myhero // 834-5755 (c) 1985 (S1)
-sscandal // 834-5755 (c) 1985 Coreland / Sega (S1)
-myherok // 834-5755 (c) 1985 Coreland / Sega (S1)
-shtngmst // 834-5719/5720 (c) 1985 (S2)
-shtngmste // 834-5719/5720 (c) 1985 (S2)
-choplift // 834-5795 (c) 1985, (c) 1982 Dan Gorlin (S2)
-chopliftu // 834-5795 (c) 1985, (c) 1982 Dan Gorlin (S2)
-chopliftbl // bootleg (S2)
-4dwarrio // 834-5918 (c) 1985 Coreland / Sega (S1)
-brain // (c) 1986 Coreland / Sega (S2?)
-raflesia // 834-5753 (c) 1985 Coreland / Sega (S1)
-wboy // 834-5984 (c) 1986 + Escape license (S1)
-wboyo // 834-5984 (c) 1986 + Escape license (S1)
-wboy2 // 834-5984 (c) 1986 + Escape license (S1)
-wboy2u // 834-5984 (c) 1986 + Escape license (S1)
-wboy3 // 834-5984 (c) 1986 + Escape license (S1)
-wboy4 // 834-5984 (c) 1986 + Escape license (S1)
-wboy5 // 834-5984 (c) 1986 + Escape license (S1)
-wboyu // 834-5753 (? maybe a conversion) (c) 1986 + Escape license (S1)
-wboyub // bootleg of wboyu
-wbdeluxe // (c) 1986 + Escape license (S1)
-wboysys2 // 834-5984 (c) 1986 + Escape license (S1)
-gardia // 834-6119 (S2?)
-gardiaj //
-gardiab // bootleg
-nob // (c) Data East
-nobb // bootleg
-blockgal // 834-6303 (S1)
-blockgalb // bootleg
-tokisens // (c) 1987 (from a bootleg board) (S2)
-wbml // bootleg (S2)
-wbmljo // (c) 1987 Sega/Westone (S2)
-wbmljb // (c) 1987 Sega/Westone (S2)
-wbmlb // bootleg? (S2)
-wbmlbg // bootleg (Galaxy Electronics)
-wbmlbge // bootleg (Gecas)
-wbmlvc // Virtual Console
-dakkochn // 836-6483 (S2)
-ufosensi // 834-6659 (S2)
-ufosensib // bootleg
-/*
- other System 1 / System 2 games:
-
- WarBall
- DokiDoki Penguin Land *not confirmed
-*/
-
-// Sega System E games (Master System hardware)
-hangonjr // (c) 1985
-transfrm // 834-5803 (c) 1986
-astrofl // 834-5803 (c) 1986
-ridleofp // (c) 1986 Sega / Nasco
-fantzn2 // (c) 1988
-opaopa
-tetrisse // (c) 1988
-
-// Shooting Zone (SMS Gun Games on a timer)
-shtzone // (c) 1987
-
-// other Sega 8-bit games
-stactics // (c) 1981 Sega
-turbo // (c) 1981 Sega
-turboa // (c) 1981 Sega
-turbob // (c) 1981 Sega
-turboc // (c) 1981 Sega
-turbod // (c) 1981 Sega
-turbobl // bootleg
-subroc3d // (c) 1982 Sega
-buckrog // (c) 1982 Sega
-buckrogn // (c) 1982 Sega
-buckrogn2 // (c) 1982 Sega
-zoom909 // (c) 1982 Sega
-kopunch // 834-0103 (c) 1981 Sega
-suprloco // (c) 1982 Sega
-suprlocoo // (c) 1982 Sega
-dotrikun // cabinet test board
-dotrikun2 // cabinet test board
-spcpostn // (c) 1986 Sega / Nasco"
-angelkds // 833-6599 (c) 1988 Sega / Nasco?
-calorie // (c) 1986 Sega
-calorieb // (c) 1986 Sega (but bootleg)
-
-// Bingo-based games
-bingoc // (c) 1989 Sega
-// Bingo Fantasy // (c) 19?? Sega
-// Bingo Star // (c) 19?? Sega
-// Bingo Party // (c) 1993 Sega
-// BP Phoenix // (c) 1998 Sega
-// BP Special // (c) 2000 Sega
-// BP Multicards // (c) 2002 Sega
-// BP Splash // (c) 2002 Sega
-// Bingo Planet // (c) 1997 Sega
-
-segajw
-
-// Enduro Racer / Space Harrier / Hang On
-enduror // (c) 1985 (FD1089B)
-enduror1 // (c) 1985 (FD1089B)
-endurob2 // (c) 1985 (Beta bootleg)
-endurobl // (c) 1985 (Herb bootleg)
-endurord // bootleg
-enduror1d // bootleg
-hangon // (c) 1985 (Rev A)
-hangon1 // (c) 1985
-hangon2 // (c) 1985
-sharrier // (c) 1985
-sharrier1 // (c) 1985
-shangonro // (c) 1987 (FD1094)
-shangonrb // (c) 1992 (but bootleg, hangon hw?)
-
-// Pre-16
-aliensynjo // (c) 1987 (FD1089A)
-aliensyn2 // (c) 1987 (FD1089A)
-aliensyn5 // (c) 1987 (FD1089B)
-bodyslam // (c) 1986 (8751)
-dumpmtmt // (c) 1986 (Japan)
-mjleague // (c) 1985
-quartet // (c) 1986 (8751)
-quarteta // (c) 1986 (8751)
-quartet2 // (c) 1986 (8751)
-quartet2a // (c) 1986
-
-// System 16A
-aceattaca // (c) 1988 (FD1094)
-afighter // (c) 1986 (FD1089A)
-alexkidd // (c) 1986 (Unprotected)
-alexkidd1 // (c) 1986 (FD1089A)
-fantzone // (c) 1986 (Unprotected Rev A)
-fantzone1 // (c) 1986 (Unprotected)
-fantzonep // (c) 1986 (NEC 0317-5000, encrypted)
-fantzonepr //
-sdi // (c) 1987 (FD1089B)
-sdia // (c) 1987 (FD1089B)
-shinobi // (c) 1987 (Unprotected)
-shinobi1 // (c) 1987 (FD1094)
-shinobls // (c) 1987 (Star bootleg)
-sjryuko1 // (c) 1988 White Board (FD1089B)
-tetris // (c) 1988 (FD1094)
-tetris3 // (c) 1988 (FD1094)
-timescan1 // (c) 1987 (FD1089B)
-wb31 // (c) 1988 Sega / Westone (FD1094)
-wb35 // (c) 1988 Sega / Westone (FD1089A)
-passsht16a // (c) 1988 (FD1094)
-
-// System 16A decrypted bootlegs
-wb31d
-wb35d
-shinobi1d
-tetrisd
-tetris3d
-
-// System 16B
-aceattac // (c) 1988 (FD1094)
-aliensyn // (c) 1987 (Unprotected)
-aliensyn7 // (c) 1987 (MC-8123B)
-aliensyn3 // (c) 1987 (FD1089A)
-aliensynj // (c) 1987 (FD1089A)
-altbeast // (c) 1988 (8751)
-altbeastj // (c) 1988 (8751)
-altbeast6 // (c) 1988 (8751)
-altbeast5 // (c) 1988 (FD1094)
-altbeast4 // (c) 1988 (MC-8123B)
-altbeast2 // (c) 1988 (MC-8123B)
-altbeastj1 // (c) 1988 (protected)
-altbeastj3 // (c) 1988 (FD1094)
-altbeastbl //
-aurail // (c) 1990 Sega / Westone
-aurail1 // (c) 1990 Sega / Westone (FD1089B)
-aurailj // (C) 1990 Sega / Westone (FD1089A)
-bayroute // (c) 1989 Sunsoft / Sega (FD1094)
-bayroutej // (c) 1989 Sunsoft / Sega (FD1094)
-bayroute1 // (c) 1989 Sunsoft / Sega (Unprotected)
-bullet // (c) 1987 (FD1094)
-cotton // (c) 1990 (FD1094)
-cottonu // (c) 1990 (FD1094)
-cottonj // (c) 1990 (FD1094)
-cottonja // (c) 1990 (FD1094)
-ddux // (c) 1989 (FD1094)
-dduxj // (c) 1989 (FD1094)
-ddux1 // (c) 1989 (8751)
-dunkshot // (c) 1986 (FD1089A)
-dunkshota // (c) 1986 (FD1089A)
-dunkshoto // (c) 1986 (FD1089A)
-eswat // (c) 1989 (FD1094)
-eswatu // (c) 1989 (FD1094)
-eswatj // (c) 1989 (FD1094)
-eswatj1 // (c) 1989 (FD1094)
-exctleag // (c) 1988 (FD1094)
-fpoint // (c) 1989 (Japan, FD1094)
-fpoint1 // (c) 1989 (Japan, FD1094)
-goldnaxe // (c) 1989 (8751)
-goldnaxeu // (c) 1989 (FD1094)
-goldnaxej // (c) 1989 (FD1094)
-goldnaxe3 // (c) 1989 (FD1094)
-goldnaxe2 // (c) 1989 (8751)
-goldnaxe1 // (c) 1989 (FD1094)
-hwchamp // (c) 1987 (Unprotected)
-hwchampj // (c) 1987 (FD1094)
-mvp // (c) 1989 (FD1094)
-mvpj // (c) 1989 (FD1094)
-passsht // (c) 1988 (FD1094)
-passshta // (c) 1988 (FD1094)
-passshtj // (c) 1988 (FD1094)
-cencourt // (c) 1988 (MC-8123B)
-riotcity // (c) 1991 Sega / Westone (Unprotected)
-ryukyu // (c) 1990 (FD1094)
-sdib // (c) 1987 (FD1089A)
-sdibl // (c) 1987 bootleg
-sdibl2 // bootleg
-sdibl3 // bootleg
-sdibl4 // bootleg
-sdibl5 // bootleg
-sdibl6 // bootleg
-defense // (c) 1987 (FD1094)
-shinobi5 // (c) 1987 (Unprotected)
-shinobi4 // (c) 1987 (MC-8123B)
-shinobi3 // (c) 1987 (MC-8123B)
-shinobi2 // (c) 1987 (FD1094)
-sonicbom // (c) 1987 (FD1094)
-sjryuko // (c) 1988 White Board (FD1094)
-suprleag // (c) 1987 (FD1094)
-tetris2 // (c) 1988 (FD1094) S16B
-tetris1 // (c) 1988 (FD1094) S16B
-timescan // (c) 1987 (Unprotected)
-toryumon // (c) 1995 (Unprotected)
-tturf // (c) 1989 Sega / Sunsoft (8751)
-tturfu // (c) 1989 Sega / Sunsoft (8751)
-wb3 // (c) 1988 Sega / Westone (8751)
-wb34 // (c) 1988 Sega / Westone (FD1094)
-wb33 // (c) 1988 Sega / Westone (FD1094)
-wb32 // (c) 1988 Sega / Westone (FD1094)
-wrestwar // (c) 1989 (8751)
-wrestwar2 // (c) 1989 (FD1094)
-wrestwar1 // (c) 1989 (FD1094)
-fantzoneta // (c) 2008 Sega / M2 (bootleg conversion)
-
-// System 16C
-fantzn2x // (c) 2008 Sega / M2
-fantzn2xp // (c) 2008 Sega / M2
-
-// Philko Boards
-atomicp // (c) 1990 Philko - korean clone board
-snapper // (c) 1990 Philko - korean clone board
-
-// S16 decrypted bootlegs
-cottonjd
-cottond
-cottonud
-cottonjad
-sonicbomd
-ryukyud
-mvpd
-mvpjd
-exctleagd
-fpointd
-fpoint1d
-bulletd
-eswatd
-eswatud
-eswatjd
-eswatj1d
-passshtd
-passshtad
-passshtjd
-tetris2d
-tetris1d
-wb34d
-wb33d
-wb32d
-dduxd
-dduxjd
-goldnaxeud
-goldnaxe1d
-goldnaxe3d
-goldnaxejd
-hwchampjd
-altbeast5d
-altbeastj3d
-aurail1d
-aurailjd
-bayrouted
-bayroutejd
-wrestwar2d
-wrestwar1d
-shinobi2d
-
-// S16 Bootlegs
-bayrouteb1 // (c) 1989 (protected) (bootleg)
-bayrouteb2 // (c) 1989 (protected) (bootleg)
-dduxbl // (c) 1989 (Datsu bootleg)
-eswatbl // bootleg
-fpointbl // (c) 1989 (Datsu bootleg)
-fpointbj // (c) 1989 (Datsu bootleg, Japan)
-goldnaxeb1 // bootleg
-goldnaxeb2 // bootleg
-passht4b // bootleg
-passshtb // bootleg
-shinoblb // (c) 1987 (but bootleg)
-shinobld // (c) 1987 (but bootleg)
-shinoblda //
-tetrisbl // (c) 1988 (but bootleg)
-beautyb // (c) 1991 AMT
-iqpipe // (c) 1991 AMT
-tturfbl // (c) 1989 (Datsu bootleg)
-wb3bbl // bootleg
-wb3bble // bootleg
-
-// ISG S16 bootleg system
-isgsm
-tetrbx
-shinfz
-
-// System 18
-shdancer // 1989.05 Shadow Dancer (US)
-shdancerj // 1989.11 Shadow Dancer (Japan)
-shdancer1 // 1989.?? Shadow Dancer (World)
-bloxeed // 1989.12 Bloxeed (Japan, FD1094)
- // 1990.04 Bloxeed (US)
-astormu // 1990.04 Alien Storm (US, FD1094)
-astormj // 1990.05 Alien Storm (Japan, FD1094)
-astorm // 1990.?? Alien Storm (World, FD1094, 2 Players)
-astorm3 // 1990.?? Alien Storm (World, FD1094)
-mwalku // 1990.08 Micheal Jackson's Moonwalker (US, FD1094+8751)
-mwalkj // 1990.08 Micheal Jackson's Moonwalker (Japan, FD1094+8751)
-mwalk // 1990.?? Micheal Jackson's Moonwalker (World, FD1094+8751)
-lghost // 1990.?? Laser Ghost (World, FD1094)
-lghostj // 1990.12 Laser Ghost (Japan)
-lghostu // 1991.01 Laser Ghost (US, FD1094)
-cltchitr // 1991.02 Clutch Hitter (US, FD1094)
-cltchitrj // 1991.05 Clutch Hitter (Japan, FD1094)
-ddcrewj // 1991.07 D.D.Crew (Japan, FD1094)
-ddcrewj2 // 1991.07 D.D.Crew (Japan, FD1094)
-ddcrewu // 1991.09 D.D.Crew (US, FD1094)
-ddcrew // 1991.?? D.D.Crew (World, FD1094)
-ddcrew2 // 1991.?? D.D.Crew (World, FD1094)
-ddcrew1 // 1991.?? D.D.Crew (World, FD1094)
-wwallyj // 1992.06 Wally wo Sagase! (Japan, FD1094)
-wwallyja // 1992.06 Wally wo Sagase! (Japan, FD1094)
-desertbr // 1993.?? Desert Breaker (World, FD1094)
-desertbrj // 1992.10 Desert Breaker (Japan, FD1094)
-pontoon
-hamaway // prototype
-
-ddcrewd
-ddcrewud
-ddcrew2d
-ddcrew1d
-ddcrewjd
-ddcrewj2d
-cltchitrd
-cltchitrjd
-desertbrd
-desertbrjd
-lghostd
-lghostud
-astorm3d
-astormud
-astormjd
-bloxeedd
-mwalkd
-mwalkud
-mwalkjd
-wwallyjd
-wwallyjad
-
-// System18 Bootlegs
-astormbl // BOOTLEG
-astormb2 // BOOTLEG
-shdancbl // BOOTLEG
-shdancbla // BOOTLEG
-mwalkbl // BOOTLEG
-
-
-// Outrun Hardware
- // 1986.11 Outrun (US)
- // 1986.?? Outrun (World)
-outrun // Revision B
-outrunra // Revision A (added support for Standard and Mini cabinets)
-outrundx // Deluxe version
-outrundxj // 1986.09 Deluxe version (Japan, FD1089A)
-outrundxa // Deluxe version (ealier??)
-outrunb // 1986 (protected beta bootleg)
- // 1987.04 Super Hang-On (Japan)
- // 1987.06 Super Hang-On (US)
- // 1987.?? Super Hang-On (World)
-shangon // 1987 (unprotected)
-shangon3 // 1987 (FD1089B)
-shangon2 // 1987 (FD1089B)
-shangon1 // 1987 (FD1089B)
-shangonle // 1991 (Unprotected)
- // 1989.04 Turbo Outrun (US, FD1094)
- // 1989.?? Turbo Outrun (World, FD1094)
-toutrun // 1987 (FD1094)
-toutrunj // 1989.02 Turbo Outrun (Japan, FD1094)
-toutrun3 // 1987 (FD1094)
-toutrun2 // 1987 (FD1094)
-toutrun1 // 1987 (FD1094)
-toutrunj1 // 1987 (FD1094)
-toutrund // bootleg
-toutrunjd // bootleg
-toutrun3d // bootleg
-toutrunj1d // bootleg
-toutrun2d // bootleg
-shangon3d // bootleg
-outrundxeh // hack
-outruneh // hack
-
-// X Board
-aburner // 1987.07 After Burner (Japan)
-aburner2 // 1987.09 After Burner II (Japan)
-aburner2g // 1987.09 After Burner II (German)
-thndrbld1 // 1987.12 Thunder Blade (Japan, deluxe/standard)
-thndrbld // 1988.02 Thunder Blade (US?, upright, FD1094)
-lastsurv // 1989.01 Last Survivor (Japan, FD1094)
-smgpj // 1989.06 Super Monaco GP (Japan, FD1094)
-smgpja // 1989.06 Super Monaco GP (Japan, FD1094)
-smgp // 1989.?? Super Monaco GP (World, FD1094)
-smgp6 // 1989.?? Super Monaco GP (World, FD1094)
-smgp5 // 1989.?? Super Monaco GP (World, FD1094)
-smgpu // 1989.08 Super Monaco GP (US, FD1094)
-smgpu1 // 1989.08 Super Monaco GP (US, FD1094)
-smgpu2 // 1989.08 Super Monaco GP (US, FD1094)
-loffirej // 1989.12 Line of Fire (Japan, FD1094)
-loffire // 1989.?? Line of Fire (World, FD1094)
-loffireu // 1990.04 Line of Fire (US, FD1094)
- // 1990.03 Racing Hero (Japan)
-rachero // 1990.?? Racing Hero (World, FD1094)
-abcop // 1990.?? A.B.Cop (World, FD1094)
-abcopj // 1991.01 A.B.Cop (Japan, FD1094)
-gpriderjs // 1990.10 GP Rider (Japan, FD1094)
-gpriderj // as above
-gpriders // 1990.?? GP Rider (World, FD1094)
-gprider // as above
-gpriderus // 1990.12 GP Rider (US, FD1094)
-gprideru // as above
-rascot // 1991.?? Royal Ascot (Japan)
-
-// decrypted X-Board bootlegs
-thndrbldd
-racherod
-smgpd
-smgp6d
-smgp5d
-smgpud
-smgpu1d
-smgpu2d
-smgpjd
-abcopd
-abcopjd
-lastsurvd
-loffired
-loffireud
-loffirejd
-
-// Y-Board
- // 1988.05 Galaxy Force (Japan)
- // 1988.08 Galaxy Force (US)
-gforce2j // 1988.07 Galaxy Force II (Japan)
-gforce2ja // 1988.07 Galaxy Force II (Japan)
-gforce2sd // 1988.?? Galaxy Force II (World, Super Deluxe unit)
-gforce2 // 1988.?? Galaxy Force II (World)
- // 1988.12 Galaxy Force II (US)
- // 1988.08 Power Drift (US)
-pdriftj // 1988.09 Power Drift (Japan)
-pdrift // 1988.?? Power Drift (World)
-pdrifta // 1988.?? Power Drift (World)
-pdrifte // 1988.?? Power Drift (World)
-pdriftl
-gloc // 1990.?? G-LOC Air Battle (World)
-glocu // 1990.04 G-LOC Air Battle (US)
- // 1990.05 G-LOC Air Battle (Japan)
-glocr360 // 1990.?? G-LOC (R360, World?)
-strkfgtr // 1991.06 Strike Fighter (World)
-strkfgtrj // 1991.06 Strike Fighter (Japan)
-rchase // 1991.09 Rail Chase (World)
-rchasej // 1991.09 Rail Chase (Japan)
- // 1991.09 Rail Chase (US)
-
-// Sega System 24 games
-// disk based
-hotrodj // 1988.03 Hot Rod (Japan)
-hotrodja // 1988.03 Hot Rod (Japan)
-hotrod // 1988.?? Hot Rod (World)
-hotroda
- // 1988.07 Hot Rod (US)
-sspiritj // 1988.10 Scramble Spirits (Japan)
-sspirits // 1988.?? Scramble Spirits (World)
-sspirtfc // 1988.?? Scramble Spirits (FD1094)
- // 1988.11 Scramble Spirits (US)
-ggroundj // 1988.11 Gain Ground (Japan, FD1094)
-gground // 1989.?? Gain Ground (World, FD1094)
- // 1989.03 Gain Ground (US)
-crkdownj // 1989.03 Crack Down (Japan, FD1094)
-crkdown // 1989.?? Crack Down (World, FD1094)
-crkdownu // 1989.06 Crack Down (US, FD1094)
-sgmastj // 1989.06 Jumbo Ozaki Super Masters (Japan, FD1094)
-sgmast // 1989.?? Super Masters Golf (World, FD1094)
-sgmastc // 1989.?? Jumbo Ozaki Super Masters Golf (World, FD1094)
- // 1989.09 Super Masters Golf (US)
-roughrac // 1990.03 Rough Racer (Japan, FD1094)
-bnzabrosj // 1990.06 Bonanza Bros. (Japan)
-bnzabros // 1990.08 Bonanza Bros. (US)
-qsww // 1991.02 Quiz Syukudai wo Wasuremashita! (Japan)
-dcclubfd // 1991.07 Dynamic Country Club (US)
-
-// ROM based
-dcclubj // 1991.06 Dynamic Country Club (Japan)
-dcclub // 1991.?? Dynamic Country Club (World)
-qrouka // 1991.12 Quiz Rouka ni Tattenasai! (Japan)
-mahmajn // 1992.12 Tokorosan no Mahmahjong (Japan)
-quizmeku // 1993.05 Quiz Mekurumeku Story (Japan)
-mahmajn2 // 1994.05 Tokorosan no Mahmahjong 2 (Japan)
-qgh // 1994.09 Quiz Ghost Hunter
-
-// M1 board
-bingpty // ?
-
-// Sega System 32 games
-radm // 1991.?? Rad Mobile (World)
-radmu // 1991.03 Rad Mobile (US)
- // 1991.02 Rad Mobile (Japan)
-radr // 1991.?? Rad Rally (World)
-radru // 1991.09 Rad Rally (US)
-radrj // 1991.07 Rad Rally (Japan)
-spidman // 1991.?? Spiderman (World)
-spidmanu // 1991.09 Spiderman (US)
-spidmanj // 1991.09 Spiderman (Japan)
-f1en // 1991.?? F-1 Exhaust Note (World)
-f1enu // 1992.01 F-1 Exhaust Note (US)
-f1enj // 1991.11 F-1 Exhaust Note (Japan)
-arabfgt // 1992.?? Arabian Fight (World)
-arabfgtu // 1992.03 Arabian Fight (US)
-arabfgtj // 1992.03 Arabian Fight (Japan)
-arescue // 1992.03 Air Rescue (US)
-arescuej // 1992.04 Air Rescue (Japan)
-ga2 // 1992.?? Golden Axe II (World)
-ga2u // 1992.09 Golden Axe II (US)
-ga2j // 1992.10 Golden Axe Death Adder no Fukusyuu (Japan)
-holo // 1992.?? Hologram Holosseum (US)
- // 1992.11 Hologram Holosseum (Japan)
-darkedge // 1993.?? Dark Edge (World)
- // 1993.?? Dark Edge (US)
-darkedgej // 1993.03 Dark Edge (Japan)
-brival // 1993.?? Burning Rival (World)
-brivalj // 1993.08 Burning Rival (Japan)
-f1lap // 1993.?? F-1 Super Lap (World)
-f1lapj // 1993.09 F-1 Super Lap (Japan)
-alien3 // 1993.?? Aliens 3 (World)
-alien3u // 1993.11 Aliens 3 (US)
- // 1993.09 Aliens 3 the Gun (Japan)
-sonic // 1993.09 Sonic the Hedgehog (Japan)
-sonicp // 1993.?? Sonic the Hedgehog (proto, Japan)
-kokoroj2 // 1993.12 Soreike! Kokoroji 2 (Japan)
-jpark // 1994.?? Jurassic Park (World)
- // 1994.?? Jurassic Park (US)
-jparkj // 1994.02 Jurassic Park (Japan) - Deluxe with moving cabinet, Rev A
-jparkja // 1994.02 Jurassic Park (Japan) - Deluxe with moving cabinet
-jparkjc // 1994.02 Jurassic Park (Japan) - Cabinet conversion kit
-dbzvrvs // 1994.03 Dragon Ball Z V.R.V.S. (Japan)
-jleague // 1994.07 The J League 1994 (Japan)
-svf // 1994.?? Super Visual Football
-svs // 1994.?? Super Visual Soccer
-slipstrm // 1995.?? Slip Stream (950515 Brazil) (c) Capcom
-slipstrmh // 1995.?? Slip Stream (950515 Hispanic) (c) Capcom
-
-// Sega Multi System 32 games
-orunners // 1993.?? Outrunners (World)
-orunnersu // 1993.06 Outrunners (US)
-orunnersj // 1993.05 Outrunners (Japan)
-harddunkj // 1994.04 Hard Dunk 3on3 (Japan)
-harddunk // 1994.?? Hard Dunk 3on3 (World)
-titlef // 1993.?? Title Fight (World)
-titlefu // 1993.04 Title Fight (US)
-titlefj // 1993.03 Title Fight (Japan)
- // 1992.07 Stadium Cross (Japan)
-scross // 1992.?? Stadium Cross (World)
-scrossa // 1992.?? Stadium Cross (World, alt)
-scrossu // 1992.09 Stadium Cross (US)
-
-// Model 1 Games
-vr // 1992.08 Virtua Racing
-vf // 1993.12 Virtua Fighter
-vformula // 1993.?? Virtua Formula
-swa // 1994.04 Star Wars Arcade
-wingwar // 1994.06 Wing War
-wingwarj // 1994.06 Wing War (Japan)
-wingwaru // 1994.09 Wing War (US)
-netmerc // ?? Info available in time ??
-
-// Sega H1 games
-coolridr // 1995.04 Cool Riders
-aquastge
-
-// Sega ST-V games
-stvbios
- // 1994.07 Sports Fishing
-gaxeduel // 1995.02 Golden Axe the Duel
-suikoenb // 1995.03 Suiko Enbu (Data East)
-bakubaku // 1995.04 Bakubaku Animal
-vfremix // 1995.06 Virtua Fighter Remix
-ejihon // 1995.07 Ejihon Tantei Jimusyo
-finlarch // 1995.07 Final Arch
-sfish2j // 1995.08 Sports Fishing 2 (Japan)
-shanhigw // 1995.08 Shanghai Banri no Choujou
-sandor // 1995.11 Nido Aru Koto wa Sando-R
-kiwames // 1995.11 Pro Mahjong Kiwame S (Athena)
-sfish2 // 1995.11 Sports Fishing 2 (Export)
-critcrsh // 1995.?? Critter Crusher
- // 1995.12 Tatakott
-batmanfr // 1996.02 Batman Forever (Acclaim)
-fhboxers // 1996.02 Funky Head Boxers
-vfkids // 1996.03 Virtua Fighter Kids
-pblbeach // 1996.03 Pebble Beach the Great Shot (T&E Soft)
-introdon // 1996.04 Karaoke Quiz Intro Dondon (Sunsoft / Success)
-smleague // 1996.04 Super Major League
-decathlt // 1996.05 Decathlete
-decathlto // 1996.05 Decathlete
-dnmtdeka // 1996.07 Dynamite Deka
-mausuke // 1996.07 Mausuke no Ojama the World (Data East)
-diehard // 1996.08 Die Hard Arcade
-sokyugrt // 1996.09 Soukyuu Gurentai (Raizing / 8ing)
-prikura // 1996.10 Prikura Daisakusen (Atlus)
-magzun // 1996.11 Magical Zunou Power
-puyosun // 1996.12 Puyo Puyo SUN (Compile)
-colmns97 // 1997.01 Columns 97
-shienryu // 1997.02 Shienryu (Warashi)
-vmahjong // 1997.02 Virtual Mahjong (Micronet)
-pclub2kc // 1997.02 Print Club Kome Kome Club
-pclub2fc // 1997.04 Print Club 2 Felix The Cat
-pclub2pe //
-pclub2wb //
-pclub2pf //
-pclub26w //
-pclub27s //
-pclubyo2 //
-groovef // 1997.05 Groove on Fight (Atlus)
-nclubv3 // 1997.07 Name Club Ver. 3
-nclubv2 //
-nameclub //
-pclb2elk // 1997.07 Print Club Custom
-pclub2 // 1997.09 Print Club 2
-thunt // 1997.09 Puzzle & Action Treasure Hunt (Sega (Deniam License))
-thuntk
-winterht // 1997.10 Winter Heat (Data East)
-prc297wi // 1997.10 Print Club 2 '97 Winter Ver
-prc297wia //
-prc298sp // 1997.10 Print Club 2 '98 Spring Ver
-prc298su //
-pclove //
-pclove2 //
-cotton2 // 1997.11 Cotton 2 (Success)
-hanagumi // 1997.11 Sakura Taisen Hanagumi Taisen Columns
-findlove // 1997.12 Find Love (Daiki / FCF)
-maruchan // 1997.12 Maruchan de Goo!!!
-techbowl // 1997.12 Technical Bowling
-znpwfv // 1997.12 Zen Nippon Pro Wrestling featuring Virtua
-seabass // 1998.02 Sea Bass Fishing (A wave Inc (Able License))
-sasissu // 1998.02 Taisen Tanto-R Sasissu!!
- // 1998.03 Bass Master Challenge
-twcup98 // 1998.04 Tecmo World Cup '98 (Tecmo)
-grdforce // 1998.05 Guardian Force (Success)
-rsgun // 1998.05 Radient Silver Gun (Treasure)
-astrass // 1998.06 Astra Super Stars (Sunsoft)
-myfairld // 1998.07 My Fair Lady (Micronet)
-othellos // 1998.07 Othello Shiyouyo (Success)
-pclubol // 1998.07 Print Club Olive
-prc298au // 1998.08 Print Club 2 '98 Autumn Ver
-cottonbm // 1998.09 Cotton Boomerang (Success)
-stress // 1998.10 Stress Busters
-elandore // 1998.11 Touryuu Densetsu Elandore (Sai-Mate)
-sss // 1998.12 Steep Slope Sliders (Capcom / Cave / Victor)
-micrombc // 1999.03 Microman Battle Charge
-pclub2v3 // 1999.03 Print Club 2 Vol. 3
-sanjeon // 1999.04 Sanjun Sujun (Sega / Deniam)
-danchih // 1999.06 Danchi de Hanafuda Okusan Komeya Desuyo! (Altron (Tecmo License))
-ffrevng10 // 1999.09 Final Fight Revenge (Capcom) (V1.000)
-ffreveng // 1999.09 Final Fight Revenge (Capcom) (V1.100)
-pclubpok // 1999.11 Print Club Pokemon
-pclubor // 1999.11 Print Club Goukakenran
-danchiq // 2000.12 Danchi de Quiz Okusan Yontaku Desuyo! (Altron)
-
-// Sega Model 2 Games
-
-// Model 2 (TGPs, Model 1 sound board)
-daytona // 1994.03 Daytona USA (Japan, Revision A)
-daytonase // 1994 Daytona USA Special Edition (Japan, Revision A)
-daytona93
-daytonas
-daytonat // 1993, hack
-daytonata // 1993, hack
-daytonam // 1993, hack
-desert // 1994.07 Desert Tank
-vcop // 1994.09 Virtua Cop (Revision B)
-vcopa // 1994.09 Virtua Cop (Revision A)
-
-// Model 2A-CRX (TGPs, SCSP sound board)
-vf2o // 1994.11 Virtua Fighter 2
-vf2a // 1995.?? Virtua Fighter 2 (Revision A)
-vf2b // 1995.?? Virtua Fighter 2 (Revision B)
-srallyc // 1995.02 Sega Rally Championship TWIN (Revision C)
-srallycb // 1995.02 Sega Rally Championship TWIN (Revision B)
-srallyca // 1995.02 Sega Rally Championship DX (Revision A)
-vcop2 // 1995.09 Virtua Cop 2
-vf2 // 1995.09 Virtua Fighter (Version 2.1)
-skytargt // 1995.10 Sky Target
-manxtt // 1995.11 Manx T.T. DX (Revision D)
-manxttc // 1995.11 Manx T.T. (Revision C)
-doaa // 1996.11 Dead or Alive (Revision A)
-motoraid // 1997.10 Motor Raid
-zeroguna // 1997.12 Zero Gunner (Export)
-zerogunaj // 1997.12 Zero Gunner (Japan)
-dyndeka2 // 1998.05 Dynamite Deka 2 (Japan)
-dynamcop // 1998.09 Dynamic Cop (Export)
-pltkidsa // 1999.03 Pilot Kids
-
-// Model 2B-CRX (SHARC, SCSP sound board)
-vstriker // 1995.05 Virtua Striker (Revision A)
-vstrikero // 1995.05 Virtua Striker
-rchase2 // 1995.06 Rail Chase 2 (Revision A)
-indy500 // 1995.07 Indy 500 (Revision A, Newer)
-indy500d // 1995.07 Indy 500 Deluxe (Revision A)
-indy500to // 1995.07 Indy 500 Twin (Revision A)
-fvipers // 1995.11 Fighting Vipers (Revision D)
-von // 1996.01 Cyber Troopers Virtual-On (USA, Revision B)
-vonj // 1996.01 Cyber Troopers Virtual-On (Japan, Revision B)
-gunblade // 1996.04 Gunblade N.Y. (Revision A)
-schamp // 1996.05 Sonic Championship (USA)
-sfight // 1996.05 Sonic the Fighters (Japan)
-lastbrnx // 1996.06 Last Bronx (Export, Revision A)
-lastbrnxu // 1996.06 Last Bronx (USA, Revision A)
-lastbrnxj // 1996.06 Last Bronx (Japan, Revision A)
-sgt24h // 1996.07 Super GT 24h
-dynabb // 1996.08 Dynamite Baseball
-doa // 1996.11 Dead or Alive (Revision B)
-dynabb97 // 1997.04 Dynamite Baseball 97 (Revision A)
-zerogun // 1997.12 Zero Gunner (Export)
-zerogunj // 1997.12 Zero Gunner (Japan)
-dyndeka2b // 1998.05 Dynamite Deka 2 (Japan)
-dynamcopb // 1998.09 Dynamite Cop (Export)
-pltkids // 1999.03 Pilot Kids (Revision A)
-overrevb // 1997.09 Over Rev (Revision B)
-
-// Model 2C-CRX (TGPx4, SCSP sound board)
-skisuprg // 1996.12 Sega Ski Super G
-stcc // 1996.09 Sega Touring Car Championship
-stcca // 1996.09 Sega Touring Car Championship (Revision A)
-stccb // 1996.09 Sega Touring Car Championship
-waverunr // 1996.10 Wave Runner (Japan, Revision A)
-hotd // 1997.03 The House of the Dead
-topskatr // 1997.05 Top Skater (Export, Revision A)
-topskatru // 1997.05 Top Skater (USA, Revision A)
-topskatrj // 1997.05 Top Skater (Japan)
-overrev // 1997.09 Over Rev (Revision A)
-segawski // 1997.09 Sega Water Ski (Japan, Revision A)
-dynamcopc // 1998.09 Dynamite Cop (USA)
-bel // 1998.12 Behind Enemy Lines
-
-// Sega Model 3 Games
-
-// Step 1.0
-vf3 // 1996.09 Virtua Fighter 3
-vf3a
-vf3tb // 1997.10 Virtua Fighter 3tb
-bass // 1997.12 Get Bass
-bassdx
-getbass
- // 1998.03 Get Bass Brast
-
-// Step 1.5
-scud // 1996.12 Scud Race
-scudj
-scuda
-vs215 // 1997.06 Virtua Striker 2
-vs215o // 1997.06 Virtua Striker 2
-lostwsga // 1997.07 Lost World Jurassic Park
-scudplus // 1997.09 Scud Race Plus (rev A)
-scudplusa // 1997.09 Scud Race Plus
-lemans24 // 1997.09 Le Mans 24
-vs29815 // 1998.05 Virtua Striker 2 ver.98
-
-// Step 2.0
-vs2 // 1997.06 Virtua Striker 2
-harley // 199?.?? Harley Davidson & L.A.Riders (rev B)
-harleya // 1997.12 Harley Davidson & L.A.Riders (rev A)
-skichamp // 1998.01 Ski Champ
-srally2 // 1998.02 Sega Rally 2 Championship
-srally2x
-von2 // 1998.03 Dennou Senki Virtual-On Oratorio Tangram
-fvipers2 // 1998.04 Fighting Vipers 2
-vs298 // 1998.05 Virtua Striker 2 ver.98
-vs299 // 1998.12 Virtual Striker 2 ver.99
-vs299b // 1999.?? Virtual Striker 2 ver.99 (rev B)
-vs299a // 1999.?? Virtual Striker 2 ver.99 (rev A)
-vs2v991 // 1999.?? Virtual Striker 2 ver.99.1
-von254g // 1999.05 Dennou Senki Virtual-On Oratorio Tangram ver.5.4
-
-// Step 2.1
-daytona2 // 1998.06 Daytona USA 2
-oceanhun // 1998.09 Ocean Hunter
-spikeout // 1998.09 Spikeout
-dirtdvls // 1998.10 Dirt Devils
-dirtdvlsa
-swtrilgy // 1998.11 Star Wars Trilogy Arcade
-swtrilgya
- // 1998.11 Magical Torokko Adventure (Japan)
-lamachin // 1998.12 L.A. Machine Guns
-dayto2pe // 1998.12 Daytone USA 2 Power Edition
- // 1998.12 Virtua Striker 2 ver.99
-spikeofe // 1999.01 Spikeout Final Edition
-magtruck // 1999.03 Magical Truck Adventure (US)
-eca // 1999.10 Kyukyuusya Emergency Call Ambulance
-ecau
-ecap // 1999.12 Emergency Call Ambulance - US proto or location test
-
-
-// Sega Lindbergh games
-lindbios
-hotd4
-vf5
-abclimax
-letsgoju
-outr2sdx
-psmash3
-vtennis3
-2spicy
-ghostsev
-initiad4
-initiad4c
-segartv
-hotdex
-primevah
-rambo
-hummerxt
-lbvbiosu
-
-// Deniam games
-// they run on Sega System 16 video hardware
-logicpro // (c) 1996 Deniam
-croquis // (c) 1996 Deniam (Germany)
-karianx // (c) 1996 Deniam
-logicpr2 // (c) 1997 Deniam (Japan)
-
-/*
- Deniam is a Korean company (http://deniam.co.kr).
-
- Game list:
- Title System Date
- ---------------- ---------- ----------
- GO!GO! deniam-16b 1995/10/11
- Logic Pro deniam-16b 1996/10/20
- Karian Cross deniam-16b 1997/04/17
- LOTTERY GAME deniam-16c 1997/05/21
- Logic Pro 2 deniam-16c 1997/06/20
- Propose deniam-16c 1997/06/21
- BOMULEUL CHAJARA SEGA ST-V 1997/04/11
-*/
-
-// System C games
-bloxeedc // (c) 1989 Sega / Elorg
-bloxeedu // (c) 1989 Sega / Elorg
-columns // (c) 1990 Sega
-columnsu // (c) 1990 Sega
-columnsj // (c) 1990 Sega
-columns2 // (c) 1990 Sega
-column2j // (c) 1990 Sega
-
-// System C-2 games
-borench // (c) 1990 Sega
-borencha // (c) 1990 Sega
-tfrceac // (c) 1990 Sega / Technosoft
-tfrceacj // (c) 1990 Sega / Technosoft
-tfrceacb // bootleg
-twinsqua // (c) 1991 Sega
-soniccar // (c) 1991 Sega
-wwmarine // (c) 1992 Sega
-sonicpop // (c) 1993 Sega
-ribbit // (c) 1991 Sega
-tantr // (c) 1992 Sega
-tantrkor // (c) 1992 Sega
-tantrbl // bootleg
-tantrbl2 // bootleg
-tantrbl3 // bootleg
-puyo // (c) 1992 Sega / Compile
-puyobl // bootleg
-puyoj // (c) 1992 Sega / Compile
-puyoja // (c) 1992 Sega / Compile
-ichir // (c) 1994 Sega
-ichirk // (c) 1994 Sega
-ichirj // (c) 1994 Sega
-ichirjbl // bootleg
-stkclmns // (c) 1994 Sega
-stkclmnsj // (c) 1994 Sega
-puyopuy2 // (c) 1994 Compile + Sega license
-potopoto // (c) 1994 Sega
-zunkyou // (c) 1994 Sega
-
-// Atlus Print Club 'Games' C-2 board
-pclubj
-pclubjv2
-pclubjv4
-pclubjv5
-
-// Genie Hardware (uses Genesis VDP) also has 'Sun Mixing Co' put into tile ram
-puckpkmn // (c) 2000 Genie
-puckpkmna // (c) 2000 IBS
-puckpkmnb // (c) 2000 IBS
-topshoot // (c) 1995 Sun Mixing
-
-jzth
-
-// Sega MegaTech, the number shown is on the label of the instruction rom
-megatech
-mt_beast // 01
-mt_shar2 // 02
-mt_stbld // 03
-mt_ggolf // 04
-mt_gsocr // 05
-mt_orun // 06
-mt_asyn // 07
-mt_shnbi // 08
-mt_fz // 09
-mt_aftrb // 10
-mt_tfor2 // 11
- // 12
-mt_astro // 13
- // 14
- // 15
- // 16
- // 17
- // 18
-mt_gfoot // 19
-mt_lastb // 20
-mt_wcsoc // 21
-mt_tetri // 22
-mt_gng // 23
-mt_shang // 24
-mt_gaxe // 25
-mt_fwrld // 26
-mt_mystd // 27
-mt_revsh // 28
-mt_parlg // 29
- // 30
-mt_tgolf // 31
-mt_srbb // 32
- // 33
- // 34
-mt_tlbba // 35
-mt_cols // 36
- // 37
-mt_eswat // 38
-mt_smgp // 39
-mt_mwalk // 40
-mt_crack // 41
- // 42
-mt_shado // 43
-mt_arrow // 44
- // 45
- // 46
-mt_astrm // 47
-mt_wwar // 48
-mt_bbros // 49
- // 50
-mt_srage // 51
-mt_sonic // 52
-mt_sonia // ^^
-mt_fshrk // 53
-mt_spman // 54
-mt_calga // 55
- // 56
-mt_gaxe2 // 57
-mt_stf // 58
-mt_mlh // 59
-mt_kcham // 60
-mt_tout // 61
-mt_soni2 // 62
-
-// Sega MegaPlay
-megaplay
-mp_sonic // 01
-mp_gaxe2 // 02
-mp_gaxe2a // 02
-mp_gslam // 03
-mp_twc // 04
-mp_sor2 // 05
-mp_bio // 06
-mp_soni2 // 07
- // 08
-mp_shnb3 // 09
- // 10
-mp_mazin // 11
-mp_col3 // ??
-
-// Megadrive bootlegs
-ssf2mdb // MegaDrive-based hack
-aladmdb // MegaDrive-based hack
-mk3mdb // MegaDrive-based hack
-srmdb // MegaDrive-based hack
-sonic2mb // MegaDrive-based hack
-
-// Sega Naomi-based (Dreamcast) systems
-naomi // 1998.?? Naomi BIOS
-naomigd // 2001.?? Naomi GD-ROM Bios
-hod2bios // 1998.11 The House of the Dead 2 (BIOS)
-hotd2 // 1998.11 The House of the Dead 2
-hotd2o // 1998.11 The House of the Dead 2 (original)
-hotd2p // 1998.11 The House of the Dead 2 (prototype)
-dybbnao // 1998.12 Dynamite Baseball NAOMI
-crzytaxi // 1999.02 Crazy Taxi
-pstone // 1999.02 Power Stone
-zombrvno // 1999.02 Zombie Revenge
-airlbios // 1999.03 Airline Pilots (BIOS)
-alpilota // 1999.03 Airline Pilots (Rev A)
-zombrvn // 1999.03 Zombie Revenge (Rev A)
-ggram2 // 1999.04 Giant Gram: All Japan Pro Wrestling 2
- // 1999.05 Taisen Puzzle Kurutto Stone
-ringout // 1999.06 Ring Out 4x4
-f355dlx // 1999.07 F355 Challenge Deluxe (BIOS)
-f355 // 1999.07 F355 Challenge Deluxe
-f355twin // 1999.07 F355 Challenge Twin
-shangril // 1999.08 Dengen Tenshi Taisen Janshi Shangri-la
-f355bios // 1999.08 F355 Challenge Twin (BIOS)
-tduno // 1999.08 Touch de UNO! / Unou Nouryoku Check Machine
-vs2_2k // 1999.08 Virtua Striker 2 version 2000 (Rev C)
-suchie3 // 1999.09 Idol Janshi Su-Chi-Pi 3
-jambo // 1999.09 Jambo! Safari (Rev A)
-smlg99 // 1999.09 Super Major League 99
-toyfight // 1999.09 Toy Fighter
-sgtetris // 1999.10 Sega Tetris
-derbyoc // 1999.10 Derby Owners Club (Rev B)
-doa2 // 1999.11 Dead or Alive 2
-dybb99 // 1999.11 Dynamite Baseball '99 (Rev B)
-otrigger // 1999.11 OutTrigger
-marstv // 1999.12 Mars TV
-puyoda // 1999.12 Puyo Puyo Da!
-samba // 1999.12 Samba de Amigo (Rev B)
-vtennis // 1999.12 Virtua Tennis / Power Smash (cartridge)
-alpiltdx // 1999.?? Airline Pilots Deluxe (Rev B)
- // 1999.?? Charge'N'Blast
- // 1999.?? Mayjinsen (Formation Battle in May) (prototype)
- // 1999.?? Pocket Shooting
-sambap // 1999.?? Samba de Amigo (prototype)
-spawn // 1999.?? Spawn In the Demon's Hand
-tokyobus // 1999.?? Tokyo Bus Guide (Rev A)
-vtennisg // 1999.?? Virtua Tennis / Power Smash (GD-ROM)
-18wheelr // 2000.01 18 Wheeler Deluxe (Rev A)
-18wheels // 2000.01 18 Wheeler (Standard)
-18wheelu // 2000.01 18 Wheeler (Upright)
-doa2m // 2000.01 Dead or Alive 2 Millennium
-totdo // 2000.01 The Typing of the Dead
-totd // 2000.01 The Typing of the Dead (Rev A)
-tduno2 // 2000.02 Touch de UNO! 2
-virnba // 2000.02 Virtua NBA
-virnbao // 2000.02 Virtua NBA (original)
-virnbap // 2000.02 Virtua NBA (prototype)
-mvsc2 // 2000.03 Marvel Vs. Capcom 2 New Age of Heroes (Rev A)
-smarinef // 2000.03 Sega Marine Fishing
-wldkicksa // 2000.03 World Kicks (Asia, WK2 Ver.A)
-wldkicks // 2000.03 World Kicks (US, WK3 Ver.A)
-wldkicksj // 2000.03 World Kicks PCB (Japan, WKC1 Ver.A)
-pstone2 // 2000.04 Power Stone 2
-toukon4 // 2000.04 Shin Nihon Prowrestling Toukon Retsuden 4 Arcade Edition (TRF1 Ver. A)
-qmegamis // 2000.05 Quiz Ah Megamisama
-derbyo2k // 2000.06 Derby Owners Club 2000 Ver.2 (Rev A)
-vonot // 2000.06 Virtual-on Oratorio Tangram M.S.B.S. Ver.5.66 2000 Edition
-ggx // 2000.07 Guilty Gear X
-slasho // 2000.07 Slashout
-capsnkb // 2000.08 Capcom vs. SNK Millennium Fight 2000
-capsnka // 2000.08 Capcom vs. SNK Millennium Fight 2000 (Rev A)
- // 2000.08 Tokyo Bus Tour / Tokyo Bus Annai
-capsnk // 2000.09 Capcom vs. SNK Millennium Fight 2000 (Rev C)
-gram2000 // 2000.09 Giant Gram 2000
- // 2000.09 Nittere Shiki! Mirai Yosou Studio
-crackndj // 2000.10 Crackin' DJ
-deathcox // 2000.10 Death Crimson OX
-cspike // 2000.10 Gun Spike / Cannon Spike
-sstrkfgt // 2000.10 Sega Strike Fighter (Rev A, set 1)
-sstrkfgta // 2000.10 Sega Strike Fighter (Rev A, set 2)
-confmiss // 2000.10.11 Confidential Mission // First GD-ROM game?
-ninjasltj // 2000.11 Ninja Assault (Japan, NJA1 Ver.A)
-ninjaslta // 2000.11 Ninja Assault (Asia, NJA2 Ver.A)
-ninjasltu // 2000.11 Ninja Assault (US, NJA3 Ver.A)
-ninjaslt // 2000.11 Ninja Assault (World, NJA4 Ver.A)
-wwfroyal // 2000.11 WWF Royal Rumble
-sprtjam // 2000.11.13 Sports Jam
-starhrcl // 2000.11.28 Star Horse (satellite)
-starhrct // 2000.12 Star Horse (server)
-starhrse // 2000.?? Star Horse (big screens)
-pjustic // 2000.12 Moero! Justice Gakuen / Project Justice
-samba2k // 2000.12 Samba de Amigo Ver.2000
-shaktam // 2000.12.28 Shakatto Tambourine (Rev B)
- // 2000.?? Boat Race Ocean Heats
-csmash // 2000.?? Cosmic Smash
-csmasho // 2000.?? Cosmic Smash (original)
-gwing2 // 2000.?? Giga Wing 2
-slashout // 2000.?? Slashout
-f355twn2 // 2001.01 F355 Challenge 2 Twin
-sfz3ugd // 2001.02 Street Fighter ZERO3 Upper
-gundmgd // 2001.03 Mobile Suit Gundam: Federation Vs. Zeon (GD-ROM)
-gundmct // 2001.03 Mobile Suit Gundam: Federation Vs. Zeon (cartridge)
-shaktmsp // 2001.04.04 Shakatto Tambourine Motto Norinori Shinkyoku Tsuika (2K1 SPR)
-dygolf // 2001.04.27 Dynamic Golf / Virtua Golf (Rev A)
-cvsgd // 2001.05 Capcom Vs. SNK Millennium Fight 2000 Pro
-monkeyba // 2001.05 Monkey Ball
-zerogu2 // 2001.05 Zero Gunner 2
-crakndj2 // 2001.06 Crackin' DJ Part 2
-hmgeo // 2001.06 Heavy Metal Geomatrix (Rev B)
-wsbbgd // 2001.06 Super Major League / World Series Baseball
-starseek // 2001.07 Dokidoki Idol Star Seeker
-gunsur2j // 2001.07 Gun Survivor 2 Biohazard Code: Veronica (Japan, BHF1 Ver.E)
-gunsur2 // 2001.07 Gun Survivor 2 Biohazard Code: Veronica (Asia, BHF2 Ver.E)
-spkrbtl // 2001.07 Spikers Battle
-cvs2gd // 2001.07.05 Capcom Vs. SNK 2 Millionaire Fighting 2001 (Rev A)
-wrungp // 2001.08 Wave Runner GP
-vtennis2 // 2001.08.27 Virtua Tennis 2 / Power Smash 2 (GD-ROM)
-alienfnt // 2001.09 Alien Front (Rev T)
-alienfnta // 2001.09 Alien Front (Rev A)
-gundmxgd // 2001.09 Mobile Suit Gundam: Federation Vs. Zeon DX
-derbyoc2 // 2001.10 Derby Owners Club II (Rev B)
-inunoos // 2001.10 Inu No Osanpo / Dog Walking (Rev A)
-vtenis2c // 2001.10 Virtua Tennis 2 / Power Smash 2 (Rev A) (cart)
-shaktamb // 2001.10.17 Shakatto Tambourine Cho Powerup Chu (2K1 AUT)
-keyboard // 2001.11 La Keyboard
-ikaruga // 2001.12 Ikaruga
-lupinsho // 2001.12 Lupin the Third: the Shooting
-drbyocwc // 2001.?? Derby Owners Club World Edition (Rev C)
-derbyocw // 2001.?? Derby Owners Club World Edition (Rev D)
- // 2001.?? Star Horse 2001
-vathlete // 2002.03 Virtua Athletics / Virtua Athlete
-mok // 2002.03.06 The Maze of the Kings
-luptype // 2002.04 Lupin The Third - The Typing (Rev A)
-cleoftp // 2002.05 Cleopatra Fortune Plus
-ggxx // 2002.05 Guilty Gear XX
-chocomk // 2002.06 Musapey's Choco Marker (Rev A)
-mazana // 2002.07 Mazan: Flash of the Blade (Asia, MAZ2 Ver.A)
-mazan // 2002.07 Mazan: Flash of the Blade (US, MAZ3 Ver.A)
- // 2002.09 Yonin Uchi Mahjong MJ
-azumanga // 2002.12 Azumanga Daiou Puzzle Bobble
-moeru // 2002.12 Moeru Casinyo
- // 2002.?? Pochinya
-quizqgd // 2002.?? Quiz Keitai Q mode
-shootopl // 2002.?? Shootout Pool
-hopper // 2002.?? SWP Hopper Board
-mtkob2 // 2003.02 MushiKing The King Of Beetle
-ggxxrlo // 2003.02 Guilty Gear XX # Reload
-ggxxrl // 2003.03 Guilty Gear XX # Reload (Rev A)
- // 2003.03 Sega Network Taisen Mahjong MJ
-shikgam2 // 2003.04 Shikigami No Shiro II / The Castle of Shikigami II
-usagiym // 2003.06 Usagi Yamashiro Mahjong Hen
- // 2003.07 Sega Network Taisen Mahjong MJ (Rev A)
-oinori // 2003.08 Oinori-daimyoujin Matsuri
-bdrdown // 2003.09 Border Down (Rev A)
-psyvar2 // 2003.11 Psyvariar 2 - The Will To Fabricate
-puyofev // 2003.11 Puyo Puyo Fever
-starhrsp // 2003.12.01 Star Horse Progress (satellite) (Rev A)
- // 2003.?? Dragon Treasure
-puyofevp // 2003.?? Puyo Puyo Fever (prototype ver 0.01)
-shootpl // 2003.?? Shootout Pool The Medal / Shootout Pool Prize (Rev A)
-cfield // 2004.06 Chaos Field
-tetkiwam // 2004.06 Tetris Kiwamemichi (Arcade TV Game List - P.88, Right, 11 from bottom)
-trizeal // 2004.09 Trizeal
-dragntr2 // 2004.?? Dragon Treasure 2 (Rev A)
-kick4csh // 2004.?? Kick '4' Cash
-shootplm // 2004.?? Shootout Pool The Medal Ver. B / Shootout Pool Prize Ver. B
- // 2004.?? The Quiz Show
-meltyblo // 2005.03 Melty Blood Act Cadenza
-ss2005o // 2005.03 Super Shanghai 2005
-ss2005 // 2005.04 Super Shanghai 2005 (Rev A)
-senkoo // 2005.04 Senko no Ronde
-senko // 2005.08 Senko no Ronde (Rev A)
-meltybld // 2005.08 Melty Blood Act Cadenza Ver. A (Rev C)
-ggxxsla // 2005.09 Guilty Gear XX Slash (Rev A)
-radirgyo // 2005.10 Radirgy
-undefeat // 2005.10 Under Defeat
-dragntr3 // 2005.11 Dragon Treasure 3 (Rev A)
-radirgy // 2005.12.04 Radirgy (Rev A)
- // 2005.?? ExZeus
-mushi2eo // 2005.?? Mushiking The King Of Beetles II ENG (Ver. 1.001)
-mushik2e // 2005.?? Mushiking The King Of Beetles II ENG (Ver. 2.001)
- // 2005.?? MushiKing The King Of Beetle III
-mushi2k5 // 2005.?? MushiKing The King Of Beetle 2K5 1st
-kurucham // 2006.03 Kurukuru Chameleon
-trgheart // 2006.05 Trigger Heart Exelica (Rev A)
-zunou // 2006.07 Touch de Zunou
-senkosp // 2006.08 Senkou no Rondo SP
-jingystm // 2006.09 Jingi Storm
-karous // 2006.11 Karous
-ggxxac // 2006.11 Guilty Gear XX Accent Core
-meltybo // 2006.12 Melty Blood Act Cadenza Version B
-takoron // 2006.12.16 Noukone Puzzle Takoron
-meltyb // 2007.03 Melty Blood Act Cadenza Version B2 (Rev A) // Last GD-ROM game?
-ndcfboxa // 2009.04.01 DIMM Firmware Updater for CF-BOX (Rev A)
-ngdup23a // DIMM Firmware Updater (Rev A)
-ngdup23c // DIMM Firmware Updater (Rev C)
-ngdup23e // DIMM Firmware Updater (Rev E)
-
-// Releases below use flash/mask ROMs like older NAOMI titles, not GD-ROM as GD-ROM Hardware (Drives and Discs) were no longer being produced.
-manicpnc // 2007.07 Manic Panic Ghosts!
-pokasuka // 2007.07 Pokasuka Ghost!
-sl2007 // 2007.07 Shooting Love
-asndynmt // 2007.07 Dynamite Deka EX - Asian dynamite
-rhytngk // 2007.09 Rhythm Tengoku
-ausfache // 2008.02.20 Akatsuki Blitzkampf Ausf. Achse
-illvelo // 2008.06 Illvelo (Illmatic Envelope)
-mamonoro // 2008.07 Mamoru-kun wa Norowarete Shimatta!
-mbaao // 2008.09 Melty Blood Actress Again
-mbaa // 2008.12 Melty Blood Actress Again Version A (Rev A)
-radirgyn // 2009.06 Radirgy Noa
-starhrpr // 2009.07.27 Star Horse Progress Returns (satellite)
- // 2009.?? Project Cerberus (planned to be released in 2009)
-
-// NAOMI based (System SP)
-segasp
-lovebery // 2004.10 Oshare Majo Love and Berry / Fashionable Witch Love and Berry
-lovebero
-dinoking // 2005.09 Kodai Ouja Kyouryuu King / Ancient Ruler Dinosaur King
-dinokior
- // 2007.06 Issyo ni Wanwan
- // 2007.06 Konchuu Dash!!
- // 2007.07 Marine Marine
- // 2007.11 Magical Dance on Dream Stage
- // 2008.02 Marine Marine Ver.2
- // 2008.04 Issyo ni Wanwan Waiwai Puppy
- // 2008.07 Issyo ni Turbo Drive
-brickppl
-tetgiant
-tetgiano
-dinoki25
-loveber3
-
-// NAOMI 2
-naomi2 // 2001.?? Naomi 2 BIOS
-vstrik3co // 2001.04 Virtua Striker 3 (cartridge)
-vstrik3c // 2001.04 Virtua Striker 3 (Rev B) (cartridge)
-vstrik3 // 2001.04.06 Virtua Striker 3 Ver. 2002
-wldrider // 2001.05 Wild Riders
-clubkrto // 2001.06 Club Kart: European Session
-clubkrt // 2001.06 Club Kart: European Session (Rev D)
-beachspi // 2001.07 Beach Spikers
-vf4cart // 2001.08.02 Virtua Fighter 4 (cartridge)
-vf4o // 2001.08.02 Virtua Fighter 4 (GD-ROM)
-vf4b // 2001.08.20 Virtua Fighter 4 (Rev B) (cartridge)
-clubkrtc // 2001.?? Club Kart: European Session (Rev C)
-vf4 // 2002.01.31 Virtua Fighter 4 (Rev C) (cartridge)
-kingrt66 // 2002.02 The King of Route 66 (Rev A)
- // 2002.02.14 Initial D Arcade Stage (Japan)
-initd // 2002.03 Initial D Arcade Stage (Japan) (Rev B)
-initdo // 2002.03 Initial D Arcade Stage (Japan)
- // 2002.06 World Club Champion Football Serie A 2001-2002
-soulsurf // 2002.07 Soul Surfer
-initdexp // 2002.07.18 Initial D Arcade Stage (Export) (Rev A)
-vf4evoct // 2002.08 Virtua Fighter 4 Evolution (cartridge)
-vf4evoa // 2002.08 Virtua Fighter 4 Evolution
- // 2002.11 World Club Champion Football Serie A 2001-2002 Ver.1.2
-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
-initdexpo // 2002.?? Initial D Arcade Stage (Export)
- // 2002.?? Sega Driving Simulator
- // 2003.03 World Club Champion Football Serie A 2001-2002 Ver.2
- // 2003.05 Initial D Arcade Stage Ver. 2 (Japan) (Rev A)
-initdv2j // 2003.05.27 Initial D Arcade Stage Ver. 2 (Japan) (Rev B)
- // 2003.09 World Club Champion Football Serie A 2002-2003
-clubkcyc // 2003.?? Club Kart Cycraft Edition (Rev A)
-clubk2k3 // 2003.?? Club Kart: European Session (2003, Rev A)
-clubk2kp // 2003.?? Club Kart: European Session (2003, prototype)
-clubkprz // 2003.?? Club Kart Prize
-clubkpzb // 2004.01.23 Club Kart Prize Ver. B (strings in the EPROM indicate a build date of Jan. 23, 2004 for the game's program)
-initdv3j // 2004.01.30 Initial D Arcade Stage Ver. 3 (Japan) (Rev C)
-initdv3jb // 2004.01 Initial D Arcade Stage Ver. 3 (Japan) (Rev B)
-initdv3e // 2004.05.18 Initial D Arcade Stage Ver. 3 (Export)
- // 2004.06 World Club Champion Football Serie A 2002-2003 Ver.2
- // 2004.07 Virtua Fighter 4 Final Tuned
-vf4tuneda // 2004.09 Virtua Fighter 4 Final Tuned (Rev A)
-vf4tunedd // 2004.10 Virtua Fighter 4 Final Tuned (Rev D)
-vf4tuned // 2004.12 Virtua Fighter 4 Final Tuned (Rev F)
-wccf212e // 2004.12 World Club Champion Football Serie A 2002-2003 Ver.2.12
-wccf234j // 2004.12 World Club Champion Football Serie A 2002-2003 Ver.2.34
- // 2005.04 Menkyo no Tetsujin / Sega Driving Simulator
-wccf310j // 2005.06 World Club Champion Football European Clubs 2004-2005
-wccf331e // 2005.06 World Club Champion Football European Clubs 2004-2005 Ver.1.1
- // 2005.06 World Club Champion Football European Clubs 2004-2005 Ver.1.2
-wccf322e // 2005.11 World Club Champion Football European Clubs 2004-2005 Ver.3.22
-wccf420e // 2006.08 World Club Champion Football European Clubs 2005-2006
- // 2006.10 World Club Champion Football European Clubs 2005-2006 bugfix
-inidv3ca // 2006.?? Initial D Arcade Stage Ver. 3 Cycraft Edition (Rev A)
-inidv3cy // 2006.?? Initial D Arcade Stage Ver. 3 Cycraft Edition (Rev B)
-
-
-// Atomiswave (Dreamcast-based) games
-awbios // 2002.?? Atomiswave BIOS
-maxspeed // 2002.12 Maximum Speed
-sprtshot // 2002.12 Sports Shooting USA
-ggx15 // 2003.03 Guilty Gear X Ver.1.5
-demofist // 2003.06 Demolish Fist
-dolphin // 2003.08 Dolphin Blue
-kov7sprt // 2003.11 Knights of Valour - The Seven Sprits
-ggisuka // 2003.12 Guilty Gear Isuka
- // 2003.12 Sangoku Senki Shichisei Tensei (IGS)
-rumblef // 2004.03 The Rumble Fish
-rangrmsn // 2004.03 Ranger Mission
-salmankt // 2004.06 Salary Man Kintarou Net Select
-kofnw // 2004.07 The King of Fighters Neo Wave
-kofnwj // 2004.07 The King of Fighters Neo Wave (Japan)
-xtrmhunt // 2004.09 Extreme Hunting
-dirtypig // 2004.09 Dirty Pig Skin Football
-ftspeed // 2004.09 Faster than Speed
-rumblf2p // 2005.01 The Rumble Fish 2 (prototype)
-anmlbskt // 2005.01 Animal Basket (date is inside of ROM, probably earlier than release)
-vfurlong // 2005.03 Net Select Keiba Victory Furlong
-rumblef2 // 2005.03 The Rumble Fish 2
-ngbc // 2005.07 NeoGeo Battle Colloseum
-samsptk // 2005.09 Samurai Spirits Tenkaichi Kenkakuden
-kofxi // 2005.10 The King of Fighters XI
-fotns // 2005.12 Hokuto no Ken
-mslug6 // 2006.02 Metal Slug 6
-xtrmhnt2 // 2006.09 Extreme Hunting 2 Tournament Edition
-claychal // 2008.11 Sega Clay Challenge
-basschalo // 2009.02 Sega Bass Challenge
-basschal // 2009.07 Sega Bass Challenge Version A
-
-// Hikaru
-hikaru // 2000.?? Hikaru BIOS
-braveff // 1999.06 Syouboushi Brave Fire Fighters
-podrace // 2000.06 Star Wars: Racer Arcade
-sgnascar // 2000.09 Nascar Arcade
-pharrier // 2000.12 Planet Harriers
-airtrix // 2001.02 Air Trix
- // 2001.10 Dennou Senki Virtual-On Force
- // 2002.04 Dennou Senki Virtual-On Force Ver.7.7
-
-// Triforce (GameCube based)
-triforce // 2002.?? Triforce BIOS
-vs2002ex // 2002.07.30 Virtua Striker 2002 (Export)
-vs2002j // 2002.10 Virtua Striker 2002 (Japan)
-fzeroaxc // 2003.06.11 F-Zero AX (Rev C)
-avalonsc // 2003.07 The Key Of Avalon: The Wizard Master (server) (Rev C)
-avalonse // 2003.08 The Key Of Avalon: The Wizard Master (server) (Rev E)
-avalonce // 2003.08 The Key Of Avalon: The Wizard Master (client) (Rev E)
-avalonsf // 2003.09 The Key Of Avalon: The Wizard Master (server) (Rev F)
-avaloncf // 2003.09 The Key Of Avalon: The Wizard Master (client) (Rev F)
-gekpuryb // 2003.10 Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev B)
-gekpurya // 2003.10 Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev C)
- // 2003.10 The Key Of Avalon 1.01
-avalons // 2003.11 The Key Of Avalon: The Wizard Master (server) (Rev G)
-avalonc // 2003.11 The Key Of Avalon: The Wizard Master (client) (Rev G)
-fzeroax // 2003.12 F-Zero AX (Rev E)
- // 2003.12 The Key Of Avalon 1.10
-avalns12 // 2004.03 The Key Of Avalon 1.20 - Summon The New Monsters (server) (Rev A)
-avalnc12 // 2004.03 The Key Of Avalon 1.20 - Summon The New Monsters (client) (Rev A)
- // 2004.04 The Key Of Avalon 1.20 - Summon The New Monsters
-avalns13 // 2004.06.08 The Key Of Avalon 1.30 - Chaotic Sabbat (server) (Rev C)
-avalnc13 // 2004.06.08 The Key Of Avalon 1.30 - Chaotic Sabbat (client) (Rev C)
-vs4j // 2004.10 Virtua Striker 4 (Japan) (Rev E)
-avalon20 // 2004.11.02 The Key Of Avalon 2 - Eutaxy Commandment (client) (Rev B)
-vs4 // 2004.12.02 Virtua Striker 4 (Export)
- // 2004.?? F-Zero AX - Monster Ride Cycraft Edition
-tfupdate // 2004.?? Triforce GDROM Boot Update
- // 2005.08 Avalon no Kagi Ver.2.5 Kagi Seisen
-mkartagp // 2005.12 Mario Kart Arcade GP (MKA2 Ver.B)
- // 2005.?? Donkey Kong Jungle Fever
-vs42k6ex // 2006.01.31 Virtua Striker 4 Ver.2006 (Export)
-vs42006 // 2006.05 Virtua Striker 4 Ver.2006 (Japan) (Rev D)
-tcfboxa // 2006.?? Firmware Update For Compact Flash Box (Rev A)
-mkartag2 // 2007.03 Mario Kart Arcade GP 2 (MK21 Ver.A)
-mkartag2a // 2007.03 Mario Kart Arcade GP 2 (MK21 Ver.A, alt dump)
-
-// Chihiro (X-Box based)
-chihiro // 2002.?? Chihiro BIOS
-hotd3 // 2002.10.29 The House of the Dead III
- // 2003.02 Crazy Taxi High Roller
- // 2003.02 Crazy Taxi High Roller (Rev A)
- // 2003.02 Virtua Cop 3
-crtaxihr // 2003.02.24 Crazy Taxi High Roller (Rev B)
-vcop3 // 2003.02.26 Virtua Cop 3 (Rev A)
- // 2003.12 Outrun 2 Prototype (Rev P)
- // 2003.12 Outrun 2
-outr2 // 2003.12 Outrun 2 (Rev A)
-ollie // 2004.03 Ollie King
- // 2004.03 Sega Network Taisen Mahjong MJ 2
- // 2004.04 Sega Network Taisen Mahjong MJ 2 (Rev A)
- // 2004.04 Sega Network Taisen Mahjong MJ 2 (Rev B)
- // 2004.07 Wangan Midnight Maximum Tune (Japan)
- // 2004.07 Wangan Midnight Maximum Tune (Japan) (Rev A)
- // 2004.07 Wangan Midnight Maximum Tune (Japan) (Rev B)
- // 2004.07 Wangan Midnight Maximum Tune (export)
- // 2004.07 Wangan Midnight Maximum Tune (export) (Rev A)
-wangmid // 2004.07 Wangan Midnight Maximum Tune (export) (Rev B)
- // 2004.09 Quest of D
- // 2004.11 Sega Golf Club Network Pro Tour
-ghostsqo // 2004.12 Ghost Squad
- // 2004.12 Quest of D Ver.1.01C
- // 2004.12 Quest of D Ver.1.02
- // 2004.12 Quest of D Ver.1.10
- // 2004.12 Quest of D Ver.1.10a
- // 2004.12 Outrun 2 SP (Japan)
- // 2004.12 Outrun 2 Special Tours
-outr2st // 2004.12 Outrun 2 Special Tours (Rev A)
-mj2c // 2004.12 Sega Network Taisen Mahjong MJ 2 (Rev C)
- // 2004.12 Sega Network Taisen Mahjong MJ 2 (Rev D)
-ghostsqu // 2004.12.09 Ghost Squad (Rev A)
- // 2005.02 Sega Network Taisen Mahjong MJ 2 (Rev E)
-mj2f // 2005.02 Sega Network Taisen Mahjong MJ 2 (Rev F)
-mj2 // 2005.02.02 Sega Network Taisen Mahjong MJ 2 (Rev G)
- // 2005.03 Sangokushi Taisen
-gundamos // 2005.03 Gundam Battle Operating Simulator
- // 2005.04 Quest of D Ver.1.20
-wangmid2 // 2005.04 Wangan Midnight Maximum Tune 2 (Japan)
- // 2005.04 Wangan Midnight Maximum Tune 2 (Export)
- // 2005.06 Sangokushi Taisen Ver.1.002
- // 2005.06 Sangokushi Taisen Ver.1.03
- // 2005.06 Sega Golf Club Network Pro Tour 2005
- // 2005.06 Quest of D Ver.1.20a
- // 2005.09 Quest of D Ver.1.21
- // 2005.10 Sangokushi Taisen Ver.1.100
-wangmd2b // 2005.10 Wangan Midnight Maximum Tune 2 (Export) (Rev A)
- // 2005.11 Sangokushi Taisen Ver.1.110
- // 2005.12 Mobile Suit Gundam 0079 Card Builder
- // 2005.12 Quest of D Gofu no Keisyousya Ver.2.00
- // 2005.12 Quest of D Gofu no Keisyousya Ver.2.01
- // 2005.12 Sega Network Taisen Mahjong MJ 3
- // 2005.12 Sega Network Taisen Mahjong MJ 3 (Rev A)
- // 2005.12 Sega Network Taisen Mahjong MJ 3 (Rev B)
- // 2005.12 Sega Network Taisen Mahjong MJ 3 (Rev C)
-mj3d // 2005.12 Sega Network Taisen Mahjong MJ 3 (Rev D)
- // 2005.12 Sega Network Taisen Mahjong MJ 3 (Rev E)
-mj3 // 2005.12 Sega Network Taisen Mahjong MJ 3 (Rev F)
- // 2005.12 Sega Golf Club 2006: Next Tours
-scg06nt // 2005.12 Sega Golf Club 2006: Next Tours (Rev A)
- // 2006.02 Sangokushi Taisen Ver.1.12
- // 2006.03 Quest of D Gofu no Keisyousya Ver.2.02b
- // 2006.03 Mobile Suit Gundam 0079 Card Builder Ver.1.007
- // 2006.04 Sega Network Taisen Mahjong MJ 3 Evolution
- // 2006.05 Sangokushi Taisen 2
- // 2006.05 Sangokushi Taisen 2 Firmware Update
- // 2006.07 Mobile Suit Gundam 0079 Card Builder Ver.2.00
- // 2006.09 Mobile Suit Gundam 0079 Card Builder Ver.2.01
- // 2006.09 Sangokushi Taisen 2 Ver.2.007
- // 2006.09 Sangokushi Taisen 2 Ver.2.01
- // 2006.09 Sega Network Taisen Mahjong MJ 3 Evolution (Rev A)
- // 2006.10 Quest of D Oukoku no Syugosya Ver.3.00
- // 2006.11 Quest of D Oukoku no Syugosya Ver.3.01
- // 2006.11 Mobile Suit Gundam 0079 Card Builder Ver.2.02
- // 2007.03 Mobile Suit Gundam 0083 Card Builder
-mj3evo // 2007.06 Sega Network Taisen Mahjong MJ 3 Evolution (Rev B)
- // 2007.10 Mobile Suit Gundam 0083 Card Builder Ryouyuu Gekitotsu
- // 2007.11 Quest of D The Battle Kingdom Ver.4.00
- // 2008.01 Quest of D The Battle Kingdom Ver.4.00b
- // 2008.02 Quest of D The Battle Kingdom Ver.4.00c
- // 2008.06 Quest of D The Battle Kingdom Ver.4.01
- // 2008.?? Sangokushi Taisen 3
- // 2008.?? Sangokushi Taisen 3 Ver.J
- // 2008.?? Sangokushi Taisen 3 War Begins
- // 2008.?? Sangokushi Taisen 3 War Begins Ver.3.59
- // 2009.03 Firmware Update For Compact Flash Box
-ccfboxa // 2009.03.31 Firmware Update For Compact Flash Box (Rev A)
-
-hshavoc // (c) 1993 Data East
-
-// Data East "Burger Time hardware" games
-lnc // (c) 1981
-zoar // (c) 1982
-btime // (c) 1982
-btime2 // (c) 1982
-btime3 // (c) 1982
-btimem // (c) 1982 + Midway
-tisland // (c) 1982
-protennb // bootleg
-cookrace // bootleg
-wtennis // bootleg 1982
-brubber // (c) 1982
-bnj // (c) 1982
-bnjm // (c) 1982 + Midway
-caractn // bootleg
-caractn2 // bootleg
-disco // (c) 1982
-discof // (c) 1982
-sdtennis // (c) 1983
-mmonkey // (c) 1982 Technos Japan + Roller Tron
-
-// cassette system, parent is decocass
-decocass
-ctsttape // ?
-chwy // 01 1980.12 Highway Chase
- // 02 1980.12 Sengoku Ninjatai
-cmanhat // 03 1981.01 Manhattan
-cterrani // 04 1981.02 Terranean
- // 05 1981.?? Missile Sprinter
- // 06 1980.12 Nebula
-castfant // 07 1981.02 Astro Fantasia
- // 08 1981.03 The Tower
-csuperas // 09 1981.05 Super Astro Fighter
- // 10 1981.?? Ocean to Ocean (medal)
-clocknch // 11 1981.04 Lock'n'Chase
- // 12 1981.08 Flash Boy/DECO Kid
-cprogolf // 13 1981.08 Tournament Pro Golf
-cprogolfj // 13 1981.08 Tournament Pro Golf (Japan)
-cdsteljn // 14 1981.06 DS Telejan
-cluckypo // 15 1981.?? Lucky Poker
-ctisland // 16 1982.02 Treasure Island
-ctisland2 // 16
-ctisland3 // 16
- // 17 1981.10 Bobbitto
-cexplore // 18 1982.02 Explorer
-cdiscon1 // 19 1982.04 Disco No.1
-csweetht // 19 Sweet Heart
-ctornado // 20 1982.05 Tornado
-cmissnx // 21 1982.04 Mission-X/Zoar
-cptennis // 22 1982.06 Pro Tennis
-cprogolf18 // 23 1982.?? 18 Hole Pro Golf
- // 24 1982.07 Tsumego Kaisyou
-cadanglr // 25 1982.10 Angler Dangler
-cfishing // 25 1982.10 Fishing
-cbtime // 26 1982.08 Hamburger/Burger Time
-chamburger // 26 1982.08 Hamburger (Japan)
-cburnrub // 27 1982.11 Burnin' Rubber
-cburnrub2 // 27
-cbnj // 27 Bump 'n' Jump
-cgraplop // 28 1982.11 Cluster Buster / Graplop
-cgraplop2 // 28
-clapapa // 29 1982.11 La-Pa-Pa
-clapapa2 // 29 Rootin' Tootin' // this one doesn't display lapapa anywhere
-cskater // 30 1983.03 Skater
-cprobowl // 31 1983.03 Pro Bowling
-cnightst // 32 1983.04 Night Star
-cnightst2 // 32
-cpsoccer // 33 1982.08 Pro Soccer
-cpsoccerj // 33 1982.08 Pro Soccer (Japan)
-csdtenis // 34 1983.09 Super Doubles Tennis
-cflyball // 35 1983.?? Flying Ball/Bampoline
- // 36 1984.04 Genesis/Boomer Rang'r
-czeroize // 37 1983.10 Zeroize
-cscrtry // 38 1984.03 Scrum Try
-cscrtry2 // 38
-cppicf // 39 1984.02 Peter Pepper's Ice Cream Factory
-cppicf2 // 39
-cfghtice // 40 1984.04 Fighting Ice Hockey
-coozumou // 41 1984.05 Oozumou/The Grand Sumo
- // 42 1984.08 Hellow Gateball // not a typo, this is official spelling
- // 43 1984.08 Yellow Cab
-cbdash // 44 1985.08 Boulder Dash
- // UX7 1984.12 Tokyo MIE Clinic/Tokyo MIE Shinryoujo
- // UX8 1985.01 Tokyo MIE Clinic/Tokyo MIE Shinryoujo Part 2
- // UX9 1985.05 Geinoujin Shikaku Shiken
-
-// Data East LD games
-begas // (c) 1983
-begas1 // (c) 1983
-cobra // (c) 1984
-cobraa //
-rblaster // (c) 1985
-
-// other Data East games
-madalien // (c) 1980
-madaliena // (c) 1980
-madalienb // (c) 1980
-astrof // (c) [1980?]
-astrof2 // (c) [1980?]
-astrof3 // (c) [1980?]
-abattle // Sidam
-abattle2 // Sidam
-afire // Rene Pierre
-acombat // bootleg
-acombato // bootleg
-acombat3 // bootleg
-sstarbtl // bootleg
-spfghmk2 // (c) [1979] Data East Corporation
-spfghmk22 // (c) [1979] Data East Corporation
-tomahawk // (c) 1980 Data East, Inc.
-tomahawk1 // (c) 1980 Data East, Inc.
-progolf // (c) 1981
-progolfa // (c) 1981
-destiny // (c) 1983
-prosoccr // (c) 1983
-prosport // (c) 1983
-prosporta // (c) 1983
-boomrang // (c) 1983
-boomranga // (c) 1983
-kamikcab // (c) 1984
-yellowcbj // (c) 1984
-yellowcbb // bootleg
-liberate // (c) 1984 Data East Corporation
-dualaslt // (c) 1984 Data East USA (US)
-liberateb // bootleg
-bwings // (c) 1984
-bwingso // (c) 1984
-bwingsa // (c) 1984
-zaviga // (c)
-zavigaj // (c)
-kchamp // (c) 1984 Data East USA (US)
-karatedo // (c) 1984 Data East Corporation (Japan)
-kchampvs // (c) 1984 Data East USA (US)
-kchampvs2 // (c) 1984 Data East USA (US)
-karatevs // (c) 1984 Data East Corporation (Japan)
-compgolf // (c) 1985 Data East Corporation (Japan)
-compgolfo // (c) 1985 Data East Corporation (Japan)
-cntsteer // (c) 1985 Data East Corporation
-zerotrgt // (c) 1985 Data East Corporation
-zerotrgta // (c) 1985 Data East Corporation
-gekitsui // (c) 1985 Data East Corporation (Japan)
-tryout // (c) 1985 Data East Corporation (Japan)
-firetrap // (c) 1986 Data East USA (US)
-firetrapa // (c) 1986 Data East USA (US)
-firetrapj // (c) 1986 Wood Place Inc. (Japan)
-firetrapbl // bootleg
-metlclsh // (c) 1985 Data East
-chanbara // (c) 1985 Data East
-brkthru // (c) 1986 Data East USA (US)
-brkthruj // (c) 1986 Data East Corporation (Japan)
-forcebrk // (c) 1986 Data East Corporation (Japan)
-darwin // (c) 1986 Data East Corporation (Japan)
-shootout // (c) 1985 Data East USA (US)
-shootoutj // (c) 1985 Data East USA (Japan)
-shootoutb // bootleg
-sidepckt // (c) 1986 Data East Corporation
-sidepcktj // (c) 1986 Data East Corporation
-sidepcktb // bootleg
-exprraid // (c) 1986 Data East Corporation
-exprraidu // (c) 1986 Data East USA (US)
-exprraidi // (c) 1986 Data East Corporation PCB manufactured by Gecas under license
-wexpress // (c) 1986 Data East Corporation
-wexpressb1 // bootleg
-wexpressb2 // bootleg
-wexpressb3 // bootleg
-pcktgal // (c) 1987 Data East Corporation (Japan)
-pcktgalb // bootleg
-pcktgal2 // (c) 1989 Data East Corporation (World?)
-pcktgal2j // (c) 1989 Data East Corporation (World?)
-pokechmp // Korean hack of Pocket Gal
-pokechmpa //
-billlist //
-spool3 // (c) 1989 Data East Corporation (World?)
-spool3i // (c) 1990 Data East Corporation + I-Vics license
-battlera // (c) 1988 Data East Corporation (World)
-bldwolf // (c) 1988 Data East USA (US)
-bldwolfj // (c) 1988 Data East Corporation (Japan)
-actfancr // (c) 1989 Data East Corporation (World)
-actfancr1 // (c) 1989 Data East Corporation (World)
-actfancrj // (c) 1989 Data East Corporation (Japan)
-triothep // (c) 1989 Data East Corporation (World)
-triothepj // (c) 1989 Data East Corporation (Japan)
-
-// Data East 8-bit games
-lastmisn // (c) 1986 Data East USA (US)
-lastmisno // (c) 1986 Data East USA (US)
-lastmisnj // (c) 1986 Data East Corporation (Japan)
-shackled // (c) 1986 Data East USA (US)
-breywood // (c) 1986 Data East Corporation (Japan)
-csilver // (c) 1987 Data East Corporation (Japan)
-csilverj // (c) 1987 Data East Corporation (Japan)
-ghostb // (c) 1987 Data East USA (US)
-ghostb2a // (c) 1987 Data East USA (US)
-ghostb3 // (c) 1987 Data East USA (US)
-meikyuh // (c) 1987 Data East Corporation (Japan)
-meikyuha // (c) 1987 Data East Corporation (Japan)
-srdarwin // (c) 1987 Data East Corporation (World)
-srdarwinj // (c) 1987 Data East Corporation (Japan)
-gondo // (c) 1987 Data East USA (US)
-makyosen // (c) 1987 Data East Corporation (Japan)
-garyoret // (c) 1987 Data East Corporation (Japan)
-cobracom // (c) 1988 Data East Corporation (World)
-cobracomj // (c) 1988 Data East Corporation (Japan)
-oscar // (c) 1988 Data East Corporation (World)
-oscaru // (c) 1987 Data East USA (US)
-oscarj1 // (c) 1987 Data East Corporation (Japan)
-oscarj2 // (c) 1987 Data East Corporation (Japan)
-
-// Data East 16-bit games
-karnov // (c) 1987 Data East USA (US)
-karnova // (c) 1987 Data East USA (US)
-karnovj // (c) 1987 Data East Corporation (Japan)
-wndrplnt // (c) 1987 Data East Corporation (Japan)
-chelnov // (c) 1988 Data East USA (World)
-chelnovu // (c) 1988 Data East USA (US)
-chelnovj // (c) 1988 Data East Corporation (Japan)
-chelnovjbl // bootleg
-chelnovjbla // bootleg
-// the following ones all run on similar hardware
-hbarrel // (c) 1987 Data East USA (US)
-hbarrelw // (c) 1987 Data East Corporation (World)
-baddudes // EI (c) 1988 Data East USA (US)
-drgninja // EG (c) 1988 Data East Corporation (Japan)
-drgninjab // bootleg
-drgninjab2 // bootleg
-birdtry // (c) 1988 Data East Corporation (Japan)
-robocop // EP? (c) 1988 Data East Corporation (World)
-robocopw // EP? (c) 1988 Data East Corporation (World)
-robocopj // EM (c) 1988 Data East Corporation (Japan)
-robocopu // (c) 1988 Data East USA (US)
-robocopu0 // (c) 1988 Data East USA (US)
-robocopb // bootleg
-automat // bootleg
-hippodrm // EW (c) 1989 Data East USA (US)
-ffantasy // EV (c) 1989 Data East Corporation (Japan)
-ffantasya // EV (c) 1989 Data East Corporation (Japan)
-ffantasybl // bootleg
-secretag // (c) 1989 Data East Corporation (World)
-secretagj // (c) 1989 Data East Corporation (Japan)
-slyspy // (c) 1989 Data East USA (US)
-slyspy3 // (c) 1989 Data East USA (US)
-slyspy2 // (c) 1989 Data East USA (US)
-secretab // bootleg
-midres // (c) 1989 Data East Corporation (World)
-midresu // (c) 1989 Data East USA (US)
-midresj // (c) 1989 Data East Corporation (Japan)
-midresb // bootleg
-midresbj // bootleg
-bouldash // (c) 1990 Data East Corporation (World)
-bouldashj // (c) 1990 Data East Corporation (Japan)
-// end of similar hardware
-stadhero // (c) 1988 Data East Corporation (Japan)
-madmotor // (c) [1989] Mitchell
-// All these games have a unique code stamped on the mask roms
-vaportra // MAA (c) 1989 Data East Corporation (World)
-vaportra3 // MAA (c) 1989 Data East Corporation (World)
-vaportrau // MAA (c) 1989 Data East Corporation (US)
-kuhga // MAA (c) 1989 Data East Corporation (Japan)
-cbuster // MAB (c) 1990 Data East Corporation (World)
-cbusterw // MAB (c) 1990 Data East Corporation (World)
-cbusterj // MAB (c) 1990 Data East Corporation (Japan)
-twocrude // MAB (c) 1990 Data East USA (US)
-twocrudea // MAB (c) 1990 Data East USA (US)
-darkseal // MAC (c) 1990 Data East Corporation (World)
-darkseal1 // MAC (c) 1990 Data East Corporation (World)
-darksealj // MAC (c) 1990 Data East Corporation (Japan)
-gatedoom // MAC (c) 1990 Data East Corporation (US)
-gatedoom1 // MAC (c) 1990 Data East Corporation (US)
-edrandy // MAD (c) 1990 Data East Corporation (World)
-edrandy2 // MAD (c) 1990 Data East Corporation (World)
-edrandy1 // MAD (c) 1990 Data East Corporation (World)
-edrandyj // MAD (c) 1990 Data East Corporation (Japan)
-supbtime // MAE (c) 1990 Data East Corporation (World)
-supbtimea // MAE (c) 1990 Data East Corporation (World)
-supbtimej // MAE (c) 1990 Data East Corporation (Japan)
-mutantf // MAF (c) 1992 Data East Corporation (World)
-mutantf4 // MAF (c) 1992 Data East Corporation (World)
-mutantf3 // MAF (c) 1992 Data East Corporation (World)
-mutantf2 // MAF (c) 1992 Data East Corporation (World)
-deathbrd // MAF (c) 1992 Data East Corporation (Japan)
-cninja // MAG (c) 1991 Data East Corporation (World)
-cninja1 // MAG (c) 1991 Data East Corporation (World)
-cninjau // MAG (c) 1991 Data East Corporation (US)
-joemac // MAG (c) 1991 Data East Corporation (Japan)
-cninjabl // bootleg
-cninjabl2 // bootleg
-stoneage // bootleg
-robocop2 // MAH (c) 1991 Data East Corporation (World)
-robocop2u // MAH (c) 1991 Data East Corporation (US)
-robocop2ua // MAH (c) 1991 Data East Corporation (US)
-robocop2j // MAH (c) 1991 Data East Corporation (Japan)
-thndzone // MAJ (c) 1991 Data East Corporation (World) - Rev 1
-thndzonea // MAJ (c) 1991 Data East Corporation (World)
-thndzone4 // MAJ (c) 1991 Data East Corporation (World) - 4 Player only
-thndzonej // MAJ (c) 1991 Data East Corporation (Japan) - Some MASK ROMS stamped MAL
-dassault // MAJ (c) 1991 Data East Corporation (US)
-dassault4 // MAJ (c) 1991 Data East Corporation (US) - 4 Player only
-chinatwn // MAK (c) 1991 Data East Corporation (Japan)
-rohga // MAM (c) 1991 Data East Corporation (Asia/Euro)
-rohga1 // MAM (c) 1991 Data East Corporation (Asia/Euro)
-rohga2 // MAM (c) 1991 Data East Corporation (Asia/Euro)
-rohgah // MAM (c) 1991 Data East Corporation (Hong Kong)
-rohgau // MAM (c) 1991 Data East Corporation (US)
-wolffang // MAM (c) 1991 Data East Corporation (Japan)
-schmeisr // (c) 1993 Hot B
-captaven // MAN (c) 1991 Data East Corporation (Asia)
-captavena // MAN (c) 1991 Data East Corporation (Asia)
-captavene // MAN (c) 1991 Data East Corporation (UK)
-captavenu // MAN (c) 1991 Data East Corporation (US)
-captavenuu // MAN (c) 1991 Data East Corporation (US)
-captavenua // MAN (c) 1991 Data East Corporation (US)
-captavenj // MAN (c) 1991 Data East Corporation (Japan)
- // MAO ??
-tumblep // MAP (c) 1991 Data East Corporation (World)
-tumblepj // MAP (c) 1991 Data East Corporation (Japan)
-tumbleb // bootleg
-tumbleb2 // bootleg
-tumblepba
-jumpkids // (c) 1993 Comad
-jumppop // (c) 2001 ESD
-jumppope // (c) 2001 Emag Soft (on original ESD 11-09-98 hardware)
-pangpang // (c) 1994 Dong Gue La Mi Ltd.
-fncywld // (c) 1996 Unico
-suprtrio // (c) 1994 GameAce
-lemmings // prototype (c) 1991 Data East USA (US)
- // MAQ ??
-dragngun // MAR (c) 1992 Data East Corporation (US)
-dragngunj // MAR (c) 1992 Data East Corporation (Japan)
-wizdfire // MAS (c) 1992 Data East Corporation (Over Sea)
-wizdfireu // MAS (c) 1992 Data East Corporation (US)
-darkseal2 // MAS (c) 1992 Data East Corporation (Japan)
-funkyjet // MAT (c) 1992 Data East (Mitchell license) (World, Rev 1)
-funkyjeta // MAT (c) 1992 Data East (Mitchell license) (World) - Rev unverified
-funkyjetj // MAT (c) 1992 Data East (Mitchell license) (Japan, Rev 2)
- // MAU ??
-nitrobal // MAV (c) 1992 Data East Corporation (World)
-nitrobala // MAV (c) 1992 Data East Corporation (World)
-gunball // MAV (c) 1992 Data East Corporation (Japan)
- // MAW ??
- // MAX ??
-dietgo // MAY (c) 1993
-dietgoe // MAY (c) 1993
-dietgou // MAY (c) 1993
-dietgoj // MAY (c) 1993
-pktgaldx // MAZ (c) 1993 Data East (Euro v3.00)
-pktgaldxj // MAZ (c) 1993
-pktgaldxb // bootleg
- // MBA ??
- // MBB ??
- // MBC ??
-boogwing // MBD (c) 1992 (Euro, v1.5)
-boogwingu // MBD (c) 1992 (USA, v1.7)
-boogwinga // MBD (c) 1992 (Asia, v1.5)
-ragtime // MBD (c) 1992 (Japan, v1.5)
-ragtimea // MBD (c) 1992 (Japan, v1.3)
-dblewing // MBE (c) 1993 Mitchell
-fghthist // MBF (c) 1993 Data East Corporation (World) DE-0395-1 PCB
-fghthista // MBF (c) 1993 Data East Corporation (World) DE-0380-2 PCB
-fghthistb // MBF (c) 1993 Data East Corporation (World) DE-0380-2 PCB
-fghthistu // MBF (c) 1993 Data East Corporation (US) DE-0396-0 PCB
-fghthistua // MBF (c) 1993 Data East Corporation (US) DE-0395-1 PCB
-fghthistub // MBF (c) 1993 Data East Corporation (US) DE-0395-1 PCB
-fghthistuc // MBF (c) 1993 Data East Corporation (US) DE-0380-2 PCB
-fghthistj // MBF (c) 1993 Data East Corporation (Japan) DE-0395-1 PCB
-fghthistja // MBF (c) 1993 Data East Corporation (Japan) DE-0380-2 PCB
-fghthistjb // MBF (c) 1993 Data East Corporation (Japan) DE-0380-1 PCB
-hvysmsh // MBG (c) 1993 Data East Corporation (World)
-hvysmsha // MBG (c) 1993 Data East Corporation (Asia)
-hvysmshj // MBG (c) 1993 Data East Corporation (Japan)
-nslasher // MBH (c) 1993 Data East Corporation
-nslasherj // MBH (c) 1993 Data East Corporation (Japan)
-nslashers // MBH (c) 1993 Data East Corporation
-nslasheru // MBH (c) 1993 Data East Corporation (US)
- // MBI ??
- // MBJ ??
- // MBK ??
- // MBL ??
-lockload // MBM (c) 1994 Data East Corporation (World)
-lockloadu // MBM (c) 1994 Data East Corporation (US)
-gunhard // MBM (c) 1994 Data East Corporation (Japan)
-joemacr // MBN (c) 1994 Data East Corporation (World)
-joemacra // MBN (c) 1994 Data East Corporation (World)
-joemacrj // MBN (c) 1994 Data East Corporation (Japan)
- // MBO ??
- // MBP ??
- // MBQ ??
-tattass // prototype (c) 1994 Data East Pinball (US)
-tattassa // prototype (c) 1994 Data East Pinball (Asia)
-charlien // MBR (c) 1994 Mitchell
- // MBS ??
- // MBT ??
- // MBU ??
- // MBV ??
- // MBW ??
-wcvol95 // MBX (c) 1993 Data East
-wcvol95x // ?
- // MBY ??
-backfire // MBZ (c) 1995
-backfirea // MBZ (c) 1995
- // MCA ??
-prtytime // MCB (c) 1995 Mitchell
-gangonta // MCB (c) 1995 Mitchell
-chainrec // MCC (c) 1994
-magdrop // MCC (c) 1995 Data East
-magdropp // MCC (c) 1995 Data East
- // MCD ??
-// MCE Dunk Dream 95/Hoops96 See MLC games below
-osman // MCF (c) 1996 Mitchell
-candance // MCF (c) 1996 Mitchell
-sotsugyo // (c) 1995 Mitchell (Atlus license)
-sshangha // (c) 1992 Hot-B
-sshanghab // bootleg
-dreambal // MM
-
-// Data East MLC Games
-hoops96 // MCE (c) 1996 Data East Corporation
-ddream95 // MCE (c) 1996 Data East Corporation
-hoops95 // MCE (c) 1996 Data East Corporation
-avengrgs // MCG (c) 1995 Data East Corporation (World)
-avengrgsj // MCG (c) 1995 Data East Corporation (Japan)
-skullfng // MCH (c) 1996 Data East Corporation (World)
-skullfngj // MCH (c) 1996 Data East Corporation (Japan)
-stadhr96 // MCM (c) 1996 Data East Corporation (World)
-stadhr96u // MCM (c) 1996 Data East Corporation (USA)
-stadhr96j // MCM (c) 1996 Data East Corporation (Japan)
-
-// SemiCom games on Tumble Pop based hardware
-metlsavr // (c) 1994 First Amusements
-magicbal // (c) 1994 SemiCom
-wlstar // (c) 1995 Mijin
-sdfight // (c) 1996 SemiCom
-wondl96 // (c) 1996 SemiCom
-htchctch // (c) 1995 SemiCom
-cookbib // (c) 1995 SemiCom
-cookbiba
-chokchok // (c) 1995 SemiCom
-carket //
-bcstry // (c) 1997 SemiCom
-bcstrya // (c) 1997 SemiCom
-semibase // (c) 1997 SemiCom
-dquizgo // (c) 1998 SemiCom
-
-// Tehkan / Tecmo games (Tehkan became Tecmo in 1986)
-senjyo // (c) 1983 Tehkan
-starforc // (c) 1984 Tehkan
-starforce // (c) 1984 Tehkan
-starforcb // (c) 1984 Tehkan
-starforca // (c) 1984 Tehkan
-megaforc // (c) 1985 Tehkan + Video Ware license
-baluba // (c) 1986 Able Corp.
-bombjack // (c) 1984 Tehkan
-bombjack2 // (c) 1984 Tehkan
-bombjackt // (c) 1984 Tehkan + Tecfri license
-pbaction // (c) 1985 Tehkan
-pbaction2 // (c) 1985 Tehkan
-pbaction3 // (c) 1985 Tehkan
-pbaction4 // (c) 1985 Tehkan
-pbaction5 // (c) 1985 Tehkan
- // 6009 Tank Busters
-ponttehk // 6011 - (c) 1985 Tehkan
-lvpoker // ???? - (c) 1985 Tehkan
-lvcards // (c) 1985 Tehkan
-tehkanwc // (c) 1985 Tehkan
-tehkanwcb // bootleg
-tehkanwcc // bootleg
-gridiron // (c) 1985 Tehkan
-teedoff // 6102 - (c) 1986 Tecmo
-solomon // (c) 1986 Tecmo
-solomonj // (c) 1986 Tecmo
-rygar // 6002 - (c) 1986 Tecmo
-rygar2 // 6002 - (c) 1986 Tecmo
-rygar3 // 6002 - (c) 1986 Tecmo
-rygarj // 6002 - (c) 1986 Tecmo
-gemini // (c) 1987 Tecmo
-silkworm // 6217 - (c) 1988 Tecmo
-silkwormj // 6217 - (c) 1988 Tecmo
-backfirt // bootleg [(c) 1988 Tecmo]
-tbowl // 6206 - (c) 1987 Tecmo
-tbowlj // 6206 - (c) 1987 Tecmo
-tbowlp // Suspected proto of Japanese version for US Market
-shadoww // 6215 - (c) 1988 Tecmo (World)
-shadowwa // 6215 - (c) 1988 Tecmo (World)
-gaiden // 6215 - (c) 1988 Tecmo (US)
-ryukendn // 6215 - (c) 1989 Tecmo (Japan)
-ryukendna // 6215 - (c) 1989 Tecmo (Japan)
-mastninj // bootleg
-wildfang // (c) 1989 Tecmo
-wildfangs // (c) 1989 Tecmo
-tknight // (c) 1989 Tecmo
-stratof // (c) 1991 Tecmo
-raiga // (c) 1991 Tecmo
-drgnbowl // (c) 1992 Nics
-drgnbowla // (c) 1992 Nics
-wc90 // (c) 1989 Tecmo
-wc90a // (c) 1989 Tecmo
-wc90b // (c) 1989 Tecmo
-wc90t // (c) 1989 Tecmo
-wc90b1 // bootleg
-wc90b2 // bootleg
-wc90ba // bootleg
-pac90 // bootleg
-spbactn // 9002 - (c) 1991 Tecmo
-spbactnj // 9002 - (c) 1991 Tecmo
-spbactnp // prototype
-fstarfrc // (c) 1992 Tecmo
-fstarfrcj // (c) 1992 Tecmo
-ginkun // (c) 1995 Tecmo
-deroon // (c) 1996 Tecmo
-tkdensho // (c) 1996 Tecmo
-tkdenshoa // (c) 1996 Tecmo
-
-// Konami games
-kamikaze // (c) 1979 Leijac Corporation
-astinvad // (c) 1980 Stern
-kosmokil // bootleg
-spcking2 // (c) 1979 Konami
-junofrst // GX310 (c) 1983 Konami
-junofrstg // GX310 (c) 1983 Konami + Gottlieb license
-pooyan // GX320 (c) 1982
-pooyans // GX320 (c) 1982 Stern
-pootan // bootleg
-timeplt // GX393 (c) 1982
-timepltc // GX393 (c) 1982 + Centuri license
-timeplta // GX393 (c) 1982 + Atari license
-spaceplt // bootleg
-psurge // (c) 1988 unknown (NOT Konami)
-chkun // Peni Soft (NOT Konami)
-bikkuric // Peni Soft (NOT Konami)
-megazone // GX319 (c) 1983
-megazonea // GX319 (c) 1983
-megazoneb // GX319 (c) 1983 + Kosuka
-megazonec // GX319 (c) 1983 + Kosuka
-megazonei // GX319 (c) 1983 + Interlogic / Kosuka
-pandoras // GX328 (c) 1984 + Interlogic
-gyruss // GX347 (c) 1983
-gyrussce // GX347 (c) 1983 + Centuri license
-gyrussb // bootleg or actual Taito NZ license?
-venus // bootleg
-tutankhm // GX350 (c) 1982 Konami
-tutankhms // GX350 (c) 1982 Stern
-trackfld // GX361 (c) 1983
-trackfldc // GX361 (c) 1983 + Centuri license
-trackfldnz // (c) 1982 Goldberg Enterprizes Inc.
-hyprolym // GX361 (c) 1983
-hyprolymb // bootleg
-hyprolymba // bootleg
-atlantol // bootleg
-wizzquiz // (c) 1985 Konami
-wizzquiza // (c) 1985 Zilec-Zenitone
-reaktor // (c) 1985 Zilec
-mastkin // (c) 1988 Du Tech
-rocnrope // GX364 (c) 1983
-rocnropek // GX364 (c) 1983 + Kosuka
-ropeman // (c) 1983 bootleg
-circusc // GX380 (c) 1984
-circusc2 // GX380 (c) 1984
-circusc3 // GX380 (c) 1984
-circusc4 // GX380 (c) 1984
-circuscc // GX380 (c) 1984 + Centuri license
-circusce // GX380 (c) 1984 + Centuri license
-tp84 // GX388 (c) 1984
-tp84a // GX388 (c) 1984
-tp84b // GX388 (c) 1984
-hyperspt // GX330 (c) 1984 + Centuri
-hypersptb // bootleg
-hpolym84 // GX330 (c) 1984
-sbasketb // GX405 (c) 1984 (Version I, Encrypted)
-sbasketh // GX405 (c) 1984 (Version H, Unprotected)
-sbasketg // GX405 (c) 1984 (Version G, Encrypted)
-sbaskete // GX405 (c) 1984 (Version E, Encrypted)
-mikie // GX469 (c) 1984
-mikiej // GX469 (c) 1984
-mikiehs // GX469 (c) 1984
-roadf // GX461 (c) 1984
-roadf2 // GX461 (c) 1984
-yiear // GX407 (c) 1985
-yiear2 // GX407 (c) 1985
-yieartf // GX361 (c) 1985
-kicker // GX477 (c) 1985
-shaolins // GX477 (c) 1985
-shaolinb // bootleg
-pingpong // GX555 (c) 1985
-merlinmm // (c) 1986 Zilec-Zenitone
-cashquiz // (c) 1986 Zilec-Zenitone
-gberet // GX577 (c) 1985
-rushatck // GX577 (c) 1985
-gberetb // bootleg on different hardware
-mrgoemon // GX621 (c) 1986 (Japan)
-jailbrek // GX507 (c) 1986
-manhatan // GX507 (c) 1986 (Japan)
-jailbrekb // bootleg
-scotrsht // GX545 (c) 1985
-finalizr // GX523 (c) 1985
-finalizrb // bootleg
-ironhors // GX560 (c) 1986
-dairesya // GX560 (c) 1986 (Japan)
-farwest // bootleg
-jackal // GX631 (c) 1986 (World)
-jackalr // GX631 (c) 1986 (World)
-topgunr // GX631 (c) 1986 (US)
-jackalj // GX631 (c) 1986 (Japan)
-topgunbl // bootleg
-ddribble // GX690 (c) 1986
-ddribblep // GX690 (c) 1986
-contra // GX633 (c) 1987
-contra1 // GX633 (c) 1987
-contrae // GX633 (c) 1987
-contraj // GX633 (c) 1987 (Japan)
-contraj1 // GX633 (c) 1987 (Japan)
-gryzor // GX633 (c) 1987
-gryzor1 // GX633 (c) 1987
-contrab // bootleg
-contrabj // bootleg
-contrabj1 // bootleg
-combatsc // GX611 (c) 1988
-combatsct // GX611 (c) 1987
-combatscj // GX611 (c) 1987 (Japan)
-bootcamp // GX611 (c) 1987
-bootcampa // GX611 (c) 1987
-combatscb // bootleg
-rockrage // GX620 (c) 1986 (World?)
-rockragea // GX620 (c) 1986 (Prototype?)
-rockragej // GX620 (c) 1986 (Japan)
-mx5000 // GX669 (c) 1987
-flkatck // GX669 (c) 1987 (Japan)
-flkatcka // GX669 (c) 1987 (Japan)
-fastlane // GX752 (c) 1987
-tricktrp // GX771 (c) 1987
-labyrunr // GX771 (c) 1987 (Japan)
-labyrunrk // GX771 (c) 1987 (Japan)
-thehustl // GX765 (c) 1987 (Japan)
-thehustlj // GX765 (c) 1987 (Japan)
-rackemup // GX765 (c) 1987
-battlnts // GX777 (c) 1987
-battlntsa // GX777 (c) 1987
-battlntsj // GX777 (c) 1987 (Japan)
-bladestl // GX797 (c) 1987
-bladestll // GX797 (c) 1987
-bladestle // GX797 (c) 1987
-kontest // GX800 (c) 198? (Japan)
-hcastle // GX768 (c) 1988
-hcastlek // GX768 (c) 1988
-hcastlee // GX768 (c) 1988
-akumajou // GX768 (c) 1988 (Japan)
-akumajoun // GX768 (c) 1988 (Japan)
-ajax // GX770 (c) 1987
-typhoon // GX770 (c) 1987
-ajaxj // GX770 (c) 1987 (Japan)
-scontra // GX775 (c) 1988
-scontraj // GX775 (c) 1988 (Japan)
-thunderx // GX873 (c) 1988
-thunderxa // GX873 (c) 1988
-thunderxb // GX873 (c) 1988
-thunderxj // GX873 (c) 1988 (Japan)
-mainevt // GX799 (c) 1988
-mainevto // GX799 (c) 1988
-mainevt2p // GX799 (c) 1988
-ringohja // GX799 (c) 1988 (Japan)
-devstors // GX890 (c) 1988
-devstors2 // GX890 (c) 1988
-devstors3 // GX890 (c) 1988
-garuka // GX890 (c) 1988 (Japan)
-88games // GX861 (c) 1988
-konami88 // GX861 (c) 1988
-hypsptsp // GX861 (c) 1988 (Japan)
-gbusters // GX878 (c) 1988
-gbustersa // GX878 (c) 1988
-crazycop // GX878 (c) 1988 (Japan)
-crimfght // GX821 (c) 1989 (US)
-crimfght2 // GX821 (c) 1989 (World)
-crimfghtj // GX821 (c) 1989 (Japan)
-spy // GX857 (c) 1989 (World)
-spyu // GX857 (c) 1989 (US)
-bottom9 // GX891 (c) 1989
-bottom9n // GX891 (c) 1989
-mstadium // GX891 (c) 1989 (Japan)
-blockhl // GX973 (c) 1989
-quarth // GX973 (c) 1989 (Japan)
-aliens // GX875 (c) 1990 (World)
-aliens2 // GX875 (c) 1990 (World)
-aliens3 // GX875 (c) 1990 (World)
-aliensu // GX875 (c) 1990 (US)
-aliensj // GX875 (c) 1990 (Japan)
-aliensj2 // GX875 (c) 1990 (Japan)
-aliensa // GX875 (c) 1990 (Asia)
-suratk // GX911 (c) 1990 (World)
-suratka // GX911 (c) 1990 (Asia)
-suratkj // GX911 (c) 1990 (Japan)
-parodius // GX955 (c) 1990 (World)
-parodiuse // GX955 (c) 1990 (World)
-parodiusj // GX955 (c) 1990 (Japan)
-parodiusa // GX955 (c) 1990 (Asia)
-rollerg // GX999 (c) 1991 (US)
-rollergj // GX999 (c) 1991 (Japan)
-simpsons // GX072 (c) 1991
-simpsons4pa // GX072 (c) 1991
-simpsons2p // GX072 (c) 1991
-simpsons2p2 // GX072 (c) 1991
-simpsons2p3 // GX072 (c) 1991
-simpsons2pa // GX072 (c) 1991 (Asia)
-simpsons2pj // GX072 (c) 1991 (Japan)
-esckids // GX975 (c) 1991 (Asia)
-esckidsj // GX975 (c) 1991 (Japan)
-vendetta // GX081 (c) 1991 (World)
-vendettar // GX081 (c) 1991 (World)
-vendettaz // GX081 (c) 1991 (World)
-vendetta2p // GX081 (c) 1991 (World)
-vendetta2peba // GX081 (c) 1991 (World)
-vendetta2pu // GX081 (c) 1991 (Asia)
-vendetta2pd // GX081 (c) 1991 (Asia)
-vendettaj // GX081 (c) 1991 (Japan)
-mogura // GX141 (c) 1991
-wecleman // GX602 (c) 1986
-weclemana // GX602?(c) 1988
-weclemanb // GX602 (c) 1986
-hotchase // GX763 (c) 1988
-hotchasea
-chqflag // GX717 (c) 1988
-chqflagj // GX717 (c) 1988 (Japan)
-ultraman // GX910 (c) 1991 Banpresto/Bandai
-hexion // GX122 (c) 1992
-hexionb // bootleg
-lethalen // GX191 (c) 1992
-lethalenub // GX191 (c) 1992
-lethalenua // GX191 (c) 1992
-lethalenux // GX191 (c) 1992
-lethaleneae // GX191 (c) 1992
-lethaleneab // GX191 (c) 1992
-lethaleneaa // GX191 (c) 1992
-lethalenj // GX191 (c) 1992
-tgtpanic // GX601 (c) 1996
-
-// Konami "Nemesis hardware" games
-nemesis // GX456 (c) 1985
-nemesisuk // GX456 (c) 1985
-konamigt // GX561 (c) 1985
-salamand // GX587 (c) 1986
-salamandj // GX587 (c) 1986
-lifefrce // GX587 (c) 1986 (US)
-lifefrcej // GX587 (c) 1986 (Japan)
-blkpnthr // GX604 (c) 1987 (Japan)
-citybomb // GX787 (c) 1987 (World)
-citybombj // GX787 (c) 1987 (Japan)
-kittenk // GX712 (c) 1988
-nyanpani // GX712 (c) 1988 (Japan)
-hcrash // GX790 (c) 1987
-hcrashc // GX790 (c) 1987
-
-// Bubble System
-bubsys
-
-// GX400 BIOS based games
-rf2 // GX561 (c) 1985
-twinbee // GX412 (c) 1985
-gradius // GX456 (c) 1985
-gwarrior // GX578 (c) 1985
-
-// Konami "Twin 16" games
-devilw // GX687 (c) 1987
-darkadv // GX687 (c) 1987
-majuu // GX687 (c) 1987 (Japan)
-vulcan // GX785 (c) 1988
-vulcana // GX785 (c) 1988
-vulcanb // GX785 (c) 1988
-gradius2 // GX785 (c) 1988 (Japan)
-gradius2a // GX785 (c) 1988 (Japan)
-gradius2b // GX785 (c) 1988 (Japan)
-cuebrickj // GX903 (c) 1989 (Japan)
-fround // GX870 (c) 1988
-froundl // GX870 (c) 1988
-hpuncher // GX870 (c) 1988 (Japan)
-miaj // GX808 (c) 1989 (Japan)
-
-// (some) Konami 68000 games
-cuebrick // GX903 (c) 1989
-mia // GX808 (c) 1989
-mia2 // GX808 (c) 1989
-tmnt // GX963 (c) 1989 (World)
-tmntu // GX963 (c) 1989 (US)
-tmntua // GX963 (c) 1989 (US)
-tmht // GX963 (c) 1989 (UK)
-tmhta // GX963 (c) 1989 (UK)
-tmhtb // GX963 (c) 1989 (UK?)
-tmntj // GX963 (c) 1990 (Japan)
-tmht2p // GX963 (c) 1989 (UK)
-tmht2pa // GX963 (c) 1989 (UK)
-tmnt2pj // GX963 (c) 1990 (Japan)
-tmnt2po // GX963 (c) 1989 (Oceania)
-punkshot // GX907 (c) 1990 (US)
-punkshot2 // GX907 (c) 1990 (US)
-punkshotj // GX907 (c) 1990 (Japan)
-lgtnfght // GX939 (c) 1990 (World)
-lgtnfghta // GX939 (c) 1990 (Asia)
-lgtnfghtu // GX939 (c) 1990 (US)
-trigon // GX939 (c) 1990 (Japan)
-blswhstl // GX060 (c) 1991 (World)
-blswhstla // GX060 (c) 1991 (Asia)
-detatwin // GX060 (c) 1991 (Japan)
-glfgreat // GX061 (c) 1991
-glfgreatj // GX061 (c) 1991 (Japan)
-tmnt2 // GX063 (c) 1991 (US)
-tmnt2a // GX063 (c) 1991 (Asia)
-tmht22pe // GX063 (c) 1991 (UK)
-tmnt22pu // GX063 (c) 1991 (US)
-ssriders // GX064 (c) 1991 (World)
-ssridersebd // GX064 (c) 1991 (World)
-ssridersebc // GX064 (c) 1991 (World)
-ssridersuda // GX064 (c) 1991 (US)
-ssriderseaa // GX064 (c) 1991 (US)
-ssridersuab // GX064 (c) 1991 (US)
-ssridersuac // GX064 (c) 1991 (US)
-ssridersubc // GX064 (c) 1991 (US)
-ssridersabd // GX064 (c) 1991 (Asia)
-ssridersadd // GX064 (c) 1991 (Asia)
-ssridersjbd // GX064 (c) 1991 (Japan)
-ssridersjad // GX064 (c) 1991 (Japan)
-ssridersjac // GX064 (c) 1991 (Japan)
-ssridersb // bootleg
-ssriders2 // bootleg
-xmen // GX065 (c) 1992 (US)
-xmenj // GX065 (c) 1992 (Japan)
-xmene // GX065 (c) 1992 (World)
-xmena // GX065 (c) 1992 (Asia)
-xmenaa // GX065 (c) 1992 (Asia)
-xmen2pe // GX065 (c) 1992 (World)
-xmen2pu // GX065 (c) 1992 (US)
-xmen2pa // GX065 (c) 1992 (Asia)
-xmen2pj // GX065 (c) 1992 (Japan)
-xmen6p // GX065 (c) 1992 (World)
-xmen6pu // GX065 (c) 1992 (US)
-xexex // GX067 (c) 1991 (World)
-orius // GX067 (c) 1991 (USA)
-xexexa // GX067 (c) 1991 (Asia)
-xexexj // GX067 (c) 1991 (Japan)
-asterix // GX068 (c) 1992 (World)
-asterixeac // GX068 (c) 1992 (World)
-asterixeaa // GX068 (c) 1992 (World)
-asterixaad // GX068 (c) 1992 (Asia)
-asterixj // GX068 (c) 1992 (Japan)
-gijoe // GX069 (c) 1991 (World)
-gijoea // GX069 (c) 1991 (World)
-gijoeu // GX069 (c) 1991 (US)
-gijoej // GX069 (c) 1991 (Japan)
-thndrx2 // GX073 (c) 1991 (World)
-thndrx2a // GX073 (c) 1991 (Asia)
-thndrx2j // GX073 (c) 1991 (Japan)
-prmrsocr // GX101 (c) 1993 (Europe)
-prmrsocrj // GX101 (c) 1993 (Japan)
-qgakumon // GX248 (c) 1993 (Japan)
-moomesa // GX151 (c) 1992 (World)
-moomesauac // GX151 (c) 1992 (US)
-moomesauab // GX151 (c) 1992 (US)
-moomesaaab // GX151 (c) 1992 (Asia)
-moomesabl // bootleg
-bucky // GX173 (c) 1992 (World)
-buckyea // GX173 (c) 1992 (World)
-buckyuab // GX173 (c) 1992 (US)
-buckyaab // GX173 (c) 1992 (Asia)
-gaiapols // GX123 (c) 1993 (Europe)
-gaiapolsu // GX123 (c) 1993 (US)
-gaiapolsj // GX123 (c) 1993 (Japan)
-mystwarr // GX128 (c) 1993 (World)
-mystwarru // GX128 (c) 1993 (US)
-mystwarrj // GX128 (c) 1993 (Japan)
-mystwarra // GX128 (c) 1993 (Asia)
-viostorm // GX168 (c) 1993 (Europe)
-viostormeb // GX168 (c) 1993 (Europe)
-viostormu // GX168 (c) 1993 (US)
-viostormub // GX168 (c) 1993 (US)
-viostormj // GX168 (c) 1993 (Japan)
-viostorma // GX168 (c) 1993 (Asia)
-viostormab // GX168 (c) 1993 (Asia)
-mmaulers // GX170 (c) 1993 (Europe)
-dadandrn // GX170 (c) 1993 (Japan)
-metamrph // GX224 (c) 1993 (Europe)
-metamrphu // GX224 (c) 1993 (US)
-metamrphj // GX224 (c) 1993 (Japan)
-mtlchamp // GX234 (c) 1993 (World)
-mtlchamp1 // GX234 (c) 1993 (World)
-mtlchampu // GX234 (c) 1993 (US)
-mtlchampu1 // GX234 (c) 1993 (US)
-mtlchampj // GX234 (c) 1993 (Japan)
-mtlchampa // GX234 (c) 1993 (Japan)
-rungun // GX247 (c) 1993 (World)
-runguna // GX247 (c) 1993 (World)
-rungunb // GX247 (c) 1993 (World)
-rungunua // GX247 (c) 1993 (US)
-slmdunkj // GX247 (c) 1993 (Japan)
-
-rungund // GX247 (c) 1993 (World)
-rungunad // GX247 (c) 1993 (World)
-rungunbd // GX247 (c) 1993 (World)
-rungunuad // GX247 (c) 1993 (US)
-slmdunkjd // GX247 (c) 1993 (Japan)
-
-rungunud // GX247 (c) 1993 (US)
-
-dbz // (c) 1993 Banpresto
-dbza // (c) 1993 Banpresto
-dbz2 // (c) 1994 Banpresto
-bishi // GX575 (c) 1996 (Japan)
-sbishi // GX675 (c) 1998 (Japan)
-sbishik // GX675 (c) 1998 (Korea)
-
-// Konami dual 68000 games
-overdriv // GX789 (c) 1990
-overdriva // GX789 (c) 1990
-overdrivb // GX789 (c) 1990
-gradius3 // GX945 (c) 1989 (World)
-gradius3j // GX945 (c) 1989 (Japan)
-gradius3js // GX945 (c) 1989 (Japan, split)
-gradius3a // GX945 (c) 1989 (Asia)
-
-// Konami 68020 games
-plygonet // GX305 (c) 1993
-polynetw // GX305 too? (c) 1993
-
-// Konami System GX games
-konamigx
-
-// GX Type 1
-racinfrc // 1994.?? GX250 (Europe)
-racinfrcu // 1994.03 GX250 (US)
- // 1994.02 (Japan)
-opengolf // 1994.?? GX218 (Europe)
-opengolf2 // 1994.?? GX218 (Europe)
-ggreats2 // 1994.03 GX218 (Japan)
- // 1995.03 GX218 (US)
-
-// GX Type 2
-le2 // 1994.?? GX312 (Europe)
-le2u // 1994.04 GX312 (US)
-le2j // 1994.06 GX312 (Japan)
-crzcross // 1994.?? GX315 (Europe)
-puzldama // 1994.07 GX315 (Japan)
-gokuparo // 1994.04 GX321 (Japan)
-fantjour // 1994.?? GX321 (Euro)
-fantjoura // 1994.?? GX321 (Asia)
-dragoona // 1995.?? GX417 (Asia)
-dragoonj // 1995.08 GX417 (Japan)
-tbyahhoo // 1995.04 GX424 (Japan)
-tkmmpzdm // 1995.12 GX515 (Japan)
-salmndr2 // 1996.01 GX521 (Japan)
-salmndr2a // 1996.?? GX521 (Asia)
-sexyparo // 1996.02 GX533 (Japan)
-sexyparoa // 1996.02 GX533 (Asia)
-daiskiss // 1996.03 GX535 (Japan)
-tokkae // 1996.10 GX615 (Japan)
-winspike // 1997.?? GX705 (Europe)
-winspikej // 1997.07 GX705 (Japan)
-
-// GX Type 3
-soccerss // 1994.?? GX427 (Europe)
-soccerssj // 1994.12 GX427 (Japan)
-soccerssja // 1994.12 GX427 (Japan)
-soccerssa // 1994.?? GX427 (Asia)
-soccerssu // 1995.04 GX427 (US)
-
-// GX Type 4
-vsnetscr // 1996.?? GX627 (Europe)
-vsnetscreb // 1996.?? GX627 (Europe)
-vsnetscru // 1996.?? GX627 (US)
-vsnetscra // 1996.?? GX627 (Asia)
-vsnetscrj // 1996.12 GX627 (Japan)
-rungun2 // 1996.03 GX505 (US)
-slamdnk2 // 1996.03 GX505 (Japan)
-rushhero // 1997.10 GX605 (US)
-
-// 68k + HD
-qdrmfgp // 1994.12 GQ460 (Japan)
-qdrmfgp2 // 1995.09 GE557 (Japan)
-
-// Konami 'Tasman' gambling hardware
-kingtut
-moneybnk
-dragsphr
-ivorytsk
-vikingt
-
-// Konami 'Endeavour' gambling hardware
-enchlamp // Enchanted Lamp
-whiterus // White Russia
-aadvent // African Adventure
-dragnfly // Dragonfly
-gypmagic // Gypsy Magic
-incanp // Incan P
-jestmagi // Jester Magic
-luckfoun // Lucky Fountain
-mohicans // Mohican Sun
-monshow // Mon Show
-romanl // Roman L
-safemon // Safe Money
-showqn // Show Queen
-spiceup // Spice It Up
-sultanw // Sultan W
-konzero // Zero
-
-
-
-// DJ Main
-bm1stmix // GQ753 (c) 1997 (Japan)
-bm2ndmix // GX853 (c) 1998 (Japan)
-bm2ndmxa // GX853 (c) 1998 (Japan)
-bm3rdmix // GX853 (c) 1998 (Japan)
-//bm3rdmxb // GX853 (c) 1998 (Japan)
-bmcompmx // GX858 (c) 1999 (Japan)
-hmcompmx // GX858 (c) 1999
-bm4thmix // GX847 (c) 1999 (Japan)
-bm5thmix // GX981 (c) 1999 (Japan)
-bmclubmx // GX993 (c) 2000 (Japan)
-bmcorerm // GXA05 (c) 1999 (Japan)
-bmdct // GX995 (c) 2000 (Japan)
-bmcompm2 // GX988 (c) 2000 (Japan)
-hmcompm2 // GX988 (c) 2000
-bm6thmix // GXA21 (c) 2001 (Japan)
-bm7thmix // GXB07 (c) 2001 (Japan)
-bmfinal // GXC01 (c) 2002 (Japan)
-
-popn1 // GX803 (c) 1998 (Asia)
-//popn1j // GX803 (c) 1998 (Japan)
-popn2 // GX831 (c) 1998 (Japan)
-popn3 // GX980 (c) 1999 (Japan)
-//popnstex // GX970 (c) 1999 (Japan)
-
-// Firebeat games
-ppp // GQ977 (c) 2000 (Japan)
-ppd // GQ977 (c) 2000 (Korea)
-ppp11 // GQ977 (c) 2000 (Japan)
-ppp1mp // GQA11 (c) 2000 (Japan)
-kbm // GQ974 (c) 2000 (Japan)
-kbm2nd // GCA01 (c) 2000 (Japan)
-kbm3rd // GCA12 (c) 2001 (Japan)
-popn4 // GQ986 (c) 2000 (Japan)
-popn5 // GCA04 (c) 2000 (Japan)
-popn6 // GQA16 (c) 2001 (Japan)
-popn7 // GCB00 (c) 2001 (Japan)
-popnanm2 // GEA02 (c) 2001 (Japan)
-popn8 // GQB30 (c) 2002 (Japan)
-bm3core // GCA05 (c) 2000 (Japan)
-bm36th // GCA21 (c) 2001 (Japan)
-bm37th // GCB07 (c) 2002 (Japan JCA)
-bm3final // GCC01 (c) 2003 (Japan JCA)
-
-// PowerPC based Konami games
-bujutsu // G?645 (c)1997
-fiveside // GX479 (c)1995
-thunderh // GX680 (c)1996 Euro EAA
-thunderhu // GX680 (c)1996 USA UAA
-slrasslt // GX792 (c)1996 USA UAA
-gticlub // GX688 (c)1996 Euro EAA
-gticlubu // GX688 (c)1996 USA UAA
-gticluba // GX688 (c)1996 Asia AAA
-gticlubj // GX688 (c)1996 Japan JAA
-hangplt // GX685 (c)1997 Japan JAB
-hangpltu // GX685 (c)1997 USA UAA
-nbapbp // GX778 (c)1998
-terabrst // GX715 (c)1998 USA UEL 1998/07/17
-terabrsta // GX715 (c)1998 Asia AAA 1998/02/25
-gradius4 // GX837 (c)1999
-sscope // GX830 (c)1999
-sscopea // GX830 (c)1999
-sscopeb // GX830 (c)1999
-sscopec // GX830 (c)1999
-sscope2 // GX931 (c)2000
-racingj // GX676 (c)1998
-racingj2 // GX888 (c)1999 (EAE)
-racingj2j // GX888 (c)1999 (JAE)
-racjamdx // G?676 (c)1997 Japan JAA
-thrilld // GX713 (c)1998 Japan JAE
-thrilldb // GX713 (c)1998 Japan JAB
-thrilldae // GX713 (c)1998 Europe EAA
-midnrun // GX476 (c)1995 Europe EAA
-midnruna // GX477 (c)1995 Asia AAA
-windheat // GX677 (c)1996 Europe EAA
-windheatu // GX677 (c)1996 USA UBC
-windheatj // GX677 (c)1996 Japan JAA
-windheata // GX677 (c)1996 Asia AAA
-jetwave // GX678 (c)1996 Euro EAB
-waveshrk // GX678 (c)1996 USA UAB
-jetwavej // GX678 (c)1996 Japan JAB
-
-
-// Konami M2 games
-polystar // GX623 (c)1997
-totlvice // GX639 (c)1997
-totlvicu // GX639 (c)1997
-totlvica // GX639 (c)1997
-totlvicj // GX639 (c)1997
-btltryst // GX636 (c)1998
-heatof11 // GX703 (c)1998
-evilngt // GX810 (c)1998
-evilngte // GX810 (c)1998
-hellngt // GX810 (c)1998
-
-// Konami Pyson
-pyson // Konami Pyson Bios
-wswe // World Soccer Winning Eleven
-wswe2k3 // World Soccer Winning Eleven 2003
-
-// Exidy games
-carpolo // (c) 1977
-sidetrac // (c) 1979
-targ // (c) 1980
-targc // (c) 1980
-spectar // (c) 1980
-spectar1 // (c) 1980
-rallys // (c) 1980 Novar (bootleg)
-rallysa // (c) 1980 Musik Box Brescia (bootleg)
-panzer // (c) 1980 Proel (bootleg)
-phantoma // (c) 1980 Jeutel (bootleg)
-phantom // (c) 1980 Proel (bootleg)
-venture // (c) 1981
-venture2 // (c) 1981
-venture4 // (c) 1981
-teetert // (c) 1981
-mtrap // (c) 1981
-mtrap3 // (c) 1981
-mtrap4 // (c) 1981
-mtrapb // bootleg
-pepper2 // (c) 1982
-pepper27 // (c) 1982
-hardhat // (c) 1982
-fax // (c) 1983
-fax2 // (c) 1983
-circus // no copyright notice [1977?]
-springbd // Sub-Electro bootleg of Circus
-robotbwl // no copyright notice
-crash // Exidy [1979?]
-smash // bootleg
-ripcord // Exidy [1977?]
-starfire // Exidy [1979?]
-starfirea // Exidy [1979?]
-fireone // (c) 1979 Exidy
-starfir2 // (c) 1979 Exidy
-victory // (c) 1982
-victorba // (c) 1982
-topgunnr // (c) 1986
-
-// Exidy 440 games
-crossbow // (c) 1983
-cheyenne // (c) 1984
-combat // (c) 1985
-catch22 // (c) 1985
-cracksht // (c) 1985
-claypign // (c) 1986
-chiller // (c) 1986
-topsecex // (c) 1986
-hitnmiss // (c) 1987
-hitnmiss2 // (c) 1987
-whodunit // (c) 1988
-whodunit8 // (c) 1988
-showdown // (c) 1988
-yukon // (c) 1989
-yukon1 // (c) 1989
-
-// Exidy Max-A-Flex
-maxaflex
-mf_achas // (c) 1982 Exidy / First Star Software
-mf_brist // (c) 1983 Exidy / First Star Software
-mf_flip // (c) 1983 Exidy / First Star Software
-mf_bdash // (c) 1984 Exidy / First Star Software
-
-// Atari b/w games
-quizshow // 005464 1976/04 [2650]
-tank8 // ?????? 1976/04 [6800]
-tank8a // ?????? 1976/04 [6800]
-tank8b // ?????? 1976/04 [6800]
-tank8c // ?????? 1976/04 [6800]
-tank8d // ?????? 1976/04 [6800]
-cball // ?????? prototype 1976/?? [6800]
-copsnrob // 005625 1976/07 [6502]
-flyball // 005629 1976/07 [6502]
-flyball1 // 005629 1976/07 [6502]
-sprint2 // 005922 1976/11 [6502]
-sprint2a // 005922 1976/11 [6502]
-sprint2h // 005922 romkit
-sprint4 // 008716 1977/12 [6502]
-sprint4a // 008716 1977/12 [6502]
-nitedrvr // 006321 1976/10 [6502]
-dominos // 007305 1977/01 [6502]
-dominos4 // 007754-007765 ??????? [6502]
-triplhnt // 008422-008791 1977/04 [6800]
-sprint8 // ?????? 1977/05 [6800]
-sprint8a // ?????? 1977/05 [6800]
-dragrace // 008505-008521 1977/06 [6800]
-poolshrk // 006281 1977/06 [6800]
-starshp1 // 007513-007531 1977/07 [6502]
-starshpp // 007513-007531 1977/07 [6502]
-superbug // 009115-009467 1977/09 [6800]
-canyon // 009493-009504 1977/10 [6502]
-canyonp // 009493-009504 1977/10 [6502]
-destroyr // 030131-030136 1977/10 [6800]
-destroyr1 // 030131-030136 1977/10 [6800]
-catchp // 008837 prototype 1977/?? [6502]
-sprint1 // 006443 1978/01 [6502]
-ultratnk // 009801 1978/02 [6502]
-skyraid // 009709 1978/03 [6502]
-tourtabl // 030170 1978/03 [6507]
-tourtab2 // 030170 1978/03 [6507]
-avalnche // 030574 1978/04 [6502]
-cascade // bootleg
-firetrk // 030926 1978/06 [6808]
-skydiver // 009787 1978/06 [6800]
-// Smokey Joe // 030926 1978/07 [6502]
-sbrkout3 // 033442-033452 1978/09 [6502]
-sbrkout // 033453-033455 1978/09 [6502]
-sbrkoutc // unrealeased proto
-sbrkoutct // 034555-034559 proto ???? [6502]
-atarifb // 033xxx 1978/10 [6502]
-atarifb1 // 033xxx 1978/10 [6502]
-atarifb2 // 035330-035350 ??? [6502]
-orbit // 033689-033702 1978/11 [6800]
-boxer // ?????? prototype 1978 [6502]
-wolfpack // ?????? prototype [6502]
-mgolf // ?????? prototype 1978 [6502]
-videopin // 034253-034267 1979/02 [6502]
-solarwar // 036154-036169 1979 [6502]
-atarifb4 // 034754 1979/04 [6502]
-subs // 033714 1979/05 [6502]
-bsktball // 034756-034766 1979/05 [6502]
-abaseb // 034711-034738 1979/06 [6502]
-abaseb2 // 034711-034738 1979/06 [6502]
-montecar // 035763-035780 1980/04 [6502]
-soccer // 035222-035260 1980/04 [6502]
-
-
-// Atari "Missile Command hardware" games
-missile // 035820-035825 (c) 1980, 1 ROM update to rev 2 board
-missile2 // 035820-035825 (c) 1980
-missile1 // 035820-035825 (c) 1980
-suprmatk // (c) 1980 + (c) 1981 Gencomp
-suprmatkd // (c) 1980 + (c) 1981 Gencomp
-mcombat // bootleg
-mcombata // bootleg
-mcombats // bootleg
-missilem // hack
-
-// Atari vector games
-llander // 0345xx no copyright notice
-llander1 // 0345xx no copyright notice
-llandert // (test) no copyright notice
-asteroid // 035127-035145 (c) 1979
-asteroid2 // 035127-035145 (c) 1979
-asteroid1 // 035127-035145 no copyright notice
-asteroidb // (bootleg)
-spcrocks // J.Estevez (c) 1981
-aerolitos // Rodmar Elec. bootleg
-asterock // Sidam bootleg (c) 1979
-asterockv // Videotron bootleg(c) 1979
-hyperspc // Rumiano bootleg (c) 1979
-meteorts // VCC bootleg (c) 1979
-meteorho // Hoei? bootleg (c) 1980
-astdelux // 0351xx (c) 1980
-astdelux2 // 0351xx (c) 1980
-astdelux1 // 0351xx (c) 1980
-bzone // 0364xx (c) 1980
-bzonea // 0364xx (c) 1980
-bzonec // 0364xx (c) 1980
-bradley // ?? (c) 1980
-redbaron // 036995-037007 (c) 1980
-redbarona // 036995-037007 (c) 1980
-tempest // 136002 (c) 1980
-tempest3 // 136002 (c) 1980
-tempest2 // 136002 (c) 1980
-tempest1 // 136002 (c) 1980
-tempest1r // 136002 (c) 1980
-temptube // (hack)
-spacduel // 136006 (c) 1980
-spacduel1 // 136006 (c) 1980
-spacduel0 // 136006 (c) 1980
-gravitar // 136010 (c) 1982
-gravitar2 // 136010 (c) 1982
-gravitar1 // 136010 (c) 1982
-lunarbat // (proto) (c) 1982
-lunarba1 // (proto) (c) 1982
-quantum // 136016 (c) 1982 // made by Gencomp
-quantum1 // 136016 (c) 1982 // made by Gencomp
-quantump // 136016 (c) 1982 // made by Gencomp
-bwidow // 136017 (c) 1982
-bwidowp // (proto) (c) 1982
-starwars // 136021 (c) 1983
-starwars1 // 136021 (c) 1983
-starwarso // 136021 (c) 1983
-tomcatsw // (proto) (c) 1983
-mhavoc // 136025 (c) 1983
-mhavoc2 // 136025 (c) 1983
-mhavocp // 136025 (c) 1983
-mhavocrv // (hack)
-alphaone // (proto) (c) 1983
-alphaonea // (proto) (c) 1983
-esb // 136031 (c) 1985
-tomcat // (proto) (c) 1985
-
-// Atari "Centipede hardware" games
-warlords // 037153-037159 (c) 1980
-centiped // 136001 (c) 1980
-centiped3 // 136001 (c) 1980
-centiped2 // 136001 (c) 1980
-centiped1 // 136001 (c) 1980
-centipdb // (bootleg)
-centipdd // hack by Two Bit Score
-caterplr // (bootleg)
-millpac // Valadon
-magworm // (bootleg)
-magworma // (bootleg)
-mazeinv // (proto) (c) 1982
-milliped // 136013 (c) 1982
-multiped // hack
-millipdd // hack by Two Bit Score
-qwak // (proto) (c) 1982
-runaway // (proto) (c) 1982
-bullsdrt // (c) 1985 Shinkai
-cmmb162
-
-// misc Atari games
-tunhunt // 136000 (c) 1979
-tunhuntc // 136000 (c) 1981 // licensed to / distributed by Centuri
-liberatr // 136012 (c) 1982
-liberatr2 // 136012 (c) 1982
-foodf // 136020 (c) 1982 // made by Gencomp
-foodf1 // 136020 (c) 1982 // made by Gencomp
-foodf2 // 136020 (c) 1982 // made by Gencomp
-foodfc // 136020 (c) 1982 // made by Gencomp
-ccastles // 136022 (c) 1983
-ccastlesg // 136022 (c) 1983
-ccastlesp // 136022 (c) 1983
-ccastlesf // 136022 (c) 1983
-ccastles3 // 136022 (c) 1983
-ccastles2 // 136022 (c) 1983
-ccastles1 // 136022 (c) 1983
-ccastlesj // 136022 (c) 1983
-cloak // 136023 (c) 1983
-cloaksp // 136023 (c) 1983
-cloakfr // 136023 (c) 1983
-cloakgr // 136023 (c) 1983
-agentx4 // 136023 (c) 1983
-agentx3 // 136023 (c) 1983
-agentx2 // 136023 (c) 1983
-agentx1 // 136023 (c) 1983
-cloud9 // (proto) (c) 1983
-firebeas // (proto) (c) 1983
-barbball // (proto) (c) 1983
-firefox // 136026 (c) 1984
-firefoxa // 136026 (c) 1984
-jedi // 136030 (c) 1984
-
-// Atari System 1 games
-atarisy1 // 136033 (c) 1984
-peterpak // 136028 (c) 1984
-// Marble Madness
-marble // 136033 (c) 1984
-marble2 // 136033 (c) 1984
-marble3 // 136033 (c) 1984
-marble4 // 136033 (c) 1984
-marble5 // 136033 (c) 1984 (LSI Cartridge)
-// Indiana Jones and the Temple of Doom
-indytemp // 136036 (c) 1985
-indytemp2 // 136036 (c) 1985
-indytemp3 // 136036 (c) 1985
-indytemp4 // 136036 (c) 1985
-indytempd // 136036 (c) 1985
-indytempc // 136036 (c) 1985
-// Road Runner
-roadrunn // 136040 (c) 1985
-roadrunn2 // 136040 (c) 1985
-roadrunn1 // 136040 (c) 1985
-// Road Blasters
-roadblst // 136048 (c) 1986, 1987
-roadblstg // 136048 (c) 1986, 1987
-roadblst3 // 136048 (c) 1986, 1987
-roadblstg2 // 136048 (c) 1986, 1987
-roadblst2 // 136048 (c) 1986, 1987
-roadblstg1 // 136048 (c) 1986, 1987
-roadblst1 // 136048 (c) 1986, 1987
-roadblstc // 136048 (c) 1986, 1987
-roadblstcg // 136048 (c) 1986, 1987
-roadblstc1 // 136048 (c) 1986, 1987
-roadblstgu // 136048 (c) 1986, 1987
-
-// Atari System 2 games
-// Paperboy
-paperboy // 136034 (c) 1984
-paperboyr2 // 136034 (c) 1984
-paperboyr1 // 136034 (c) 1984
-// Super Sprint
-ssprint // 136042 (c) 1986
-ssprint3 // 136042 (c) 1986
-ssprint1 // 136042 (c) 1986
-ssprintg // 136042 (c) 1986
-ssprintg1 // 136042 (c) 1986
-ssprintf // 136042 (c) 1986
-ssprints // 136042 (c) 1986
-// Championship Sprint
-csprint // 136045 (c) 1986
-csprint2 // 136045 (c) 1986
-csprint1 // 136045 (c) 1986
-csprintg // 136045 (c) 1986
-csprintg1 // 136045 (c) 1986
-csprintf // 136045 (c) 1986
-csprints // 136045 (c) 1986
-csprints1 // 136045 (c) 1986
-// 720 Degrees
-720 // 136047 (c) 1986
-720r3 // 136047 (c) 1986
-720r2 // 136047 (c) 1986
-720r1 // 136047 (c) 1986
-720g // 136047 (c) 1986
-720gr1 // 136047 (c) 1986
-// APB.
-apb // 136051 (c) 1987
-apb6 // 136051 (c) 1987
-apb5 // 136051 (c) 1987
-apb4 // 136051 (c) 1987
-apb3 // 136051 (c) 1987
-apb2 // 136051 (c) 1987
-apb1 // 136051 (c) 1987
-apbg // 136051 (c) 1987
-apbf // 136051 (c) 1987
-
-// Atari polygon games
-irobot // 136029 (c) 1983
-// Atari System IV
-laststar // (proto) (c) 1984
-airrace // (proto) (c) 1985
-// Hard Drivin'
-harddriv // 136052 (c) 1988
-harddrivb // 136052 (c) 1988
-harddrivg // 136052 (c) 1988
-harddrivj // 136052 (c) 1988
-harddrivb6 // 136052 (c) 1988
-harddrivj6 // 136052 (c) 1988
-harddrivb5 // 136052 (c) 1988
-harddrivg4 // 136052 (c) 1988
-harddriv3 // 136052 (c) 1988
-harddriv2 // 136052 (c) 1988
-harddriv1 // 136052 (c) 1988
-// Hard Drivin' Compact
-harddrivc // 136068 (c) 1990
-harddrivcg // 136068 (c) 1990
-harddrivcb // 136068 (c) 1990
-harddrivc1 // 136068 (c) 1990
-// Stun Runner
-stunrun // 136070 (c) 1989
-stunrunj // 136070 (c) 1989
-stunrun5 // 136070 (c) 1989
-stunrune // 136070 (c) 1989
-stunrun4 // 136070 (c) 1989
-stunrun3 // 136070 (c) 1989
-stunrun3e // 136070 (c) 1989
-stunrun2 // 136070 (c) 1989
-stunrun2e // 136070 (c) 1989
-stunrun0 // 136070 (c) 1989
-stunrunp // (proto) (c) 1989
-// Race Drivin'
-racedriv // 136077 (c) 1990
-racedrivb // 136077 (c) 1990
-racedrivg // 136077 (c) 1990
-racedriv4 // 136077 (c) 1990
-racedrivb4 // 136077 (c) 1990
-racedrivg4 // 136077 (c) 1990
-racedriv3 // 136077 (c) 1990
-racedriv2 // 136077 (c) 1990
-racedriv1 // 136077 (c) 1990
-racedrivb1 // 136077 (c) 1990
-racedrivg1 // 136077 (c) 1990
-// Race Drivin' Compact
-racedrivc // 136077 (c) 1990
-racedrivcb // 136077 (c) 1990
-racedrivcg // 136077 (c) 1990
-racedrivc4 // 136077 (c) 1990
-racedrivcb4 // 136077 (c) 1990
-racedrivcg4 // 136077 (c) 1990
-racedrivc2 // 136077 (c) 1990
-racedrivc1 // 136077 (c) 1990
-// Race Drivin' Panorama
-racedrivpan // 136077 (c) 1990
- // 136086 - BMX Heat (proto)
-// Steel Talons
-steeltal // 136087 (c) 1990
-steeltalg // 136087 (c) 1990
-steeltal1 // 136087 (c) 1990
-steeltalp // 136087 (c) 1990
- // 136088 - Race Drivin' Panorama
-// Street Drivin'
-strtdriv // 136091 (proto)
-// Hard Drivin' Airbourne
-hdrivair // 136098 (proto)
-hdrivairp // 136098 (proto)
-
-// later Atari games
-
-// Gauntlet Hardware
-// Gauntlet
-gauntlet // 136037 (c) 1985
-gauntlets // 136037 (c) 1985
-gauntletj // 136037 (c) 1985
-gauntletg // 136037 (c) 1985
-gauntletj12 // 136037 (c) 1985
-gauntletr9 // 136037 (c) 1985
-gauntletgr8 // 136037 (c) 1985
-gauntletr7 // 136037 (c) 1985
-gauntletgr6 // 136037 (c) 1985
-gauntletr5 // 136037 (c) 1985
-gauntletr4 // 136037 (c) 1985
-gauntletgr3 // 136037 (c) 1985
-gauntletr2 // 136037 (c) 1985
-gauntletr1 // 136037 (c) 1985
-// Gauntlet - 2 Player
-gauntlet2p // 136037 (c) 1985
-gauntlet2pj // 136037 (c) 1985
-gauntlet2pg // 136037 (c) 1985
-gauntlet2pr3 // 136037 (c) 1985
-gauntlet2pj2 // 136037 (c) 1985
-gauntlet2pg1 // 136037 (c) 1985
-// Gauntlet 2
-gaunt2 // 136043 (c) 1986
-gaunt2g // 136043 (c) 1986
-// Gauntlet 2 - 2 Player
-gaunt22p // 136043 (c) 1986
-gaunt22p1 // 136043 (c) 1986
-gaunt22pg // 136043 (c) 1986
-// Vindicators Part II
-vindctr2 // 136059 (c) 1988
-vindctr2r2 // 136059 (c) 1988
-vindctr2r1 // 136059 (c) 1988
-
-// Other Hardware
-
-// Xybots
-xybots // 136054 (c) 1987
-xybotsg // 136054 (c) 1987
-xybotsf // 136054 (c) 1987
-xybots1 // 136054 (c) 1987
-xybots0 // 136054 (c) 1987
-// Blasteroids
-blstroid // 136057 (c) 1987
-blstroid3 // 136057 (c) 1987
-blstroid2 // 136057 (c) 1987
-blstroidg // 136057 (c) 1987
-blstroidh // (proto) (c) 1987
-// Vindicators
-vindictr // 136059 (c) 1988
-vindictre // 136059 (c) 1988
-vindictrg // 136059 (c) 1988
-vindictre4 // 136059 (c) 1988
-vindictr4 // 136059 (c) 1988
-vindictre3 // 136059 (c) 1988
-vindictr2 // 136059 (c) 1988
-vindictr1 // 136059 (c) 1988
-// Toobin
-toobin // 136061 (c) 1988
-toobine // 136061 (c) 1988
-toobing // 136061 (c) 1988
-toobin2 // 136061 (c) 1988
-toobin2e // 136061 (c) 1988
-toobin1 // 136061 (c) 1988
-// Cyberball
-cyberbal // 136064 (c) 1989
-cyberbal2 // 136064 (c) 1989
-cyberbalp // 136064 (c) 1989
-// Atari Tetris
-atetrisc // 136066 (c) 1989
-atetrisc2 // 136066 (c) 1989
-atetris // 136066 (c) 1988
-atetrisa // 136066 (c) 1988
-atetrisb // (bootleg)
-atetrisb2 // (bootleg)
-atetrisb3 // (bootleg)
-// Escape from the Planet of Robot Monsters
-eprom // 136069 (c) 1989
-eprom2 // 136069 (c) 1989
-guts // prototype
-// Cyberball 2 Player
-cyberbal2p // 136071 (c) 1989
-cyberbal2p3 // 136071 (c) 1989
-cyberbal2p2 // 136071 (c) 1989
-cyberbal2p1 // 136071 (c) 1989
-// Skull and Crossbones
-skullxbo // 136072 (c) 1989
-skullxbo4 // 136072 (c) 1989
-skullxbo3 // 136072 (c) 1989
-skullxbo2 // 136072 (c) 1989
-skullxbo1 // 136072 (c) 1989
-// Cyberball Tournament
-cyberbalt // 136073 (c) 1989
-cyberbalt1 // 136073 (c) 1989
-badlands // 136074 (c) 1989
-badlandsb // bootleg
-badlandsb2 // bootleg set 2
-klax // 136075 (c) 1989
-klax2 // 136075 (c) 1989
-klax2bl // bootleg
-klax3 // 136075 (c) 1989
-klaxj // 136075 (c) 1989 (Japan)
-klaxd // 136075 (c) 1989 (Germany)
-klaxp1 // prototype
-klaxp2 // prototype
-thunderj // 136076 (c) 1990
-thunderja // 136076 (c) 1990
-hydra // 136079 (c) 1990
-hydrap // (proto) (c) 1990
-hydrap2 // (proto) (c) 1990
-pitfight // 136081 (c) 1990
-pitfight7 // 136081 (c) 1990
-pitfight6 // 136081 (c) 1990
-pitfight5 // 136081 (c) 1990
-pitfight4 // 136081 (c) 1990
-pitfight3 // 136081 (c) 1990
-pitfightj // Japan
-pitfightb // bootleg
-rampart // 136082 (c) 1990
-rampart2p // 136082 (c) 1990
-rampartj // 136082 (c) 1990 (Japan)
-shuuz // 136083 (c) 1990
-shuuz2 // 136083 (c) 1990
- // 136084 - Marble Man (proto)
-batman // 136085 (c) 1991
-roadriot // 136089 (c) 1991
-roadrioto // 136089 (c) 1991
-offtwall // 136090 (c) 1991
-offtwallc // 136090 (c) 1991
-guardian // 136092 (c) 1992
-relief // 136093 (c) 1992
-relief2 // 136093 (c) 1992
-relief3 // 136093 (c) 1992
-arcadecl // (proto) (c) 1992
-sparkz // (proto) (c) 1992
-motofren // 136094 (c) 1992
-motofrenmd // 136094 (c) 1992
-motofrenft // 136094 (c) 1992
-motofrenmf // 136094 (c) 1992
-spclords // 136095 (c) 1992
-spclordsb // 136095 (c) 1992
-spclordsa // 136095 (c) 1992
-spclordsg // 136095 (c) 1992
-rrreveng // ?? (c) 1993
-rrrevenga // ?? (c) 1993
-rrrevengb // ?? (c) 1993
-beathead // (proto) (c) 1993
-tmek // 136100 (c) 1994
-tmek51p // 136100 (c) 1994
-tmek45 // 136100 (c) 1994
-tmek44 // 136100 (c) 1994
-tmek20 // 136100 (c) 1994
-primrage // 136102 (c) 1994
-primrage20 // 136102 (c) 1994
-metalmx // 136103? (c) 1994
-area51 // 136105 (c) 1995
-area51t // 136105 (c) 1995
-area51ta // 136105 (c) 1995
-area51a // 136105 (c) 1995
-fishfren // (proto) (c) 1995
-freezeat // (proto) (c) 1996
-freezeatjp // (proto) (c) 1996
-freezeat2 // (proto) (c) 1996
-freezeat3 // (proto) (c) 1996
-freezeat4 // (proto) (c) 1996
-freezeat5 // (proto) (c) 1996
-freezeat6 // (proto) (c) 1996
-area51mx // 136105 (c) 1998
-a51mxr3k // ?? (c) 1998
-maxforce // ?? (c) 1996
-maxf_102 // ?? (c) 1996
-maxf_ng // ?? (c) 1996
-vcircle // (proto) (c) 1996
-a51site4 // ?? (c) 1998
-a51site4a // Sept.11,1998 (c) 1998
-
-// Atari/Nova Laserdisc
-cops // (c) 1994
-copsuk // (c) 1994 (Nova/Deith Leisure)
-revlatns // (c) 199?
-
-// SNK / Rock-ola games
-sasuke // [1980] Shin Nihon Kikaku (SNK)
-satansat // (c) 1981 SNK
-satansata // (c) 1981 SNK
-zarzon // (c) 1981 Taito, gameplay says SNK
-satansatind // bootleg
-vanguard // (c) 1981 SNK
-vanguardc // (c) 1981 SNK + Centuri
-vanguardj // (c) 1981 SNK
-fantasy // (c) 1981 SNK
-fantasyu // (c) 1981 Rock-Ola
-fantasyj // (c) 1981 SNK
-pballoon // (c) 1982 SNK
-pballoonr // (c) 1982 SNK (Rock-Ola license)
-nibbler // (c) 1982 Rock-ola (version 9)
-nibbler8 // (c) 1982 Rock-ola (version 8)
-nibbler6 // (c) 1982 Rock-ola (vresion 6)
-nibblerp // (c) 1982 Rock-ola (pballoon conversion)
-nibblero // (c) 1983 Olympia/Rock-Ola (version 8)
-
-// later SNK games, each game can be identified by PCB code and ROM
-// code, the ROM code is the same between versions, and usually based
-// upon the Japanese title.
-lasso // 'WM' (c) 1982
-chameleo // (c) 1983 Jaleco
-wwjgtin // (c) 1984 Jaleco / Casio
-photof // (c) 1984 Jaleco / Casio
-pinbo // (c) 1984 Jaleco
-pinboa // (c) 1984 Jaleco
-pinbos // (c) 1985 Strike
-joyfulr // A2001 (c) 1983
-mnchmobl // A2001 (c) 1983 + Centuri license
-marvins // A2003 (c) 1983
-madcrash // A2005 (c) 1984
-madcrush // A2005 (c) 1984
-vangrd2 // A2005 (c) 1984
-mainsnk // (c) 1984
-canvas // A3008 (c) 1985
-jcross // A3006 (c) 1984
-sgladiat // A3006 (c) 1984
-hal21 // A4031 (c) 1985
-hal21j // (c) 1985 (Japan)
-aso // (c) 1985
-alphamis // (c) 1985
-arian // (c) 1985
-tnk3 // A5001 (c) 1985
-tnk3j // A5001 (c) 1985
-athena // 'UP' (c) 1986
-fitegolf // 'GU' (c) 1988
-fitegolfu // 'GU' (c) 1988
-fitegolf2 //
-countryc // A7004 'CC' (c) 1988
-ikari // A5004 'IW' (c) 1986
-ikaria // A5004 'IW' (c) 1986
-ikarinc // A5004 'IW' (c) 1986
-ikarijp // A5004 'IW' (c) 1986 (Japan)
-ikarijpb // bootleg
-ikariram // bootleg
-victroad // A6002 (c) 1986
-dogosoke // A6002 (c) 1986
-dogosokb // bootleg
-gwar // A7003 'GV' (c) 1987
-gwarj // A7003 'GV' (c) 1987 (Japan)
-gwara // A7003 'GV' (c) 1987
-gwarb // bootleg
-bermudat // (c) 1987
-bermudatj // (c) 1987
-bermudata // A6004 'WW' (c) 1987
-worldwar // A6004 'WW' (c) 1987
-psychos // 'PS' (c) 1987
-psychosj // 'PS' (c) 1987 (Japan)
-chopper // A7003 'KK' (c) 1988
-choppera // A7003 'KK' (c) 1988
-chopperb // A7003 'KK' (c) 1988
-legofair // A7003 'KK' (c) 1988
-fsoccer // A6006 'FS' (c) 1988
-fsoccerj // A6006 'FS' (c) 1988
-fsoccerb // (c) 1988
-fsoccerba // (c) 1988
-tdfever // A6006 'TD' (c) 1987
-tdfeverj // A6006 'TD' (c) 1987
-tdfever2 // A6006 'TD'?(c) 1988
-ikari3 // A7007 'IK3'(c) 1989
-ikari3u // A7007 'IK3'(c) 1989
-ikari3j // A7007 'IK3'(c) 1989
-ikari3k // A7007 'IK3'(c) 1989
-pow // A7008 'DG' (c) 1988
-powj // A7008 'DG' (c) 1988
-searchar // A8007 'BH' (c) 1989
-searcharu // A8007 'BH' (c) 1989
-searcharj // A8007 'BH' (c) 1989
-streetsm // A8007 'S2' (c) 1989
-streetsm1 // A7008 'S2' (c) 1989
-streetsmw // (c) 1989
-streetsmj // A8007 'S2' (c) 1989
-prehisle // A8003 'GT' (c) 1989
-prehisleu // A8003 'GT' (c) 1989
-prehislek // A8003 'GT' (c) 1989
-gensitou // A8003 'GT' (c) 1989
-mechatt // A8002 'MA' (c) 1989
-mechattj // A8002 'MA' (c) 1989
-mechattu // A8002 'MA' (c) 1989
-mechattu1 // A8002 'MA' (c) 1989
-bbusters // A9003 'BB' (c) 1989
-bbustersu // A9003 'BB' (c) 1989
-bbustersua // A9003 'BB' (c) 1989
-
-// Electrocoin on early SNK hardware
-dmndrby // G4001 'DD' (c) 1986
-dmndrbya // G4001 'DD' (c) 1986
-
-// Neo Geo games
-// the four digits number is the game ID stored at address 0x0108 of the program ROM
-// info on prototypes taken from http://www.members.tripod.com/fresa/proto/puzzle.htm
-neogeo
-nam1975 // 0001 (c) 1990 SNK
-bstars // 0002 (c) 1990 SNK
-bstarsh // 0002 (c) 1990 SNK
-tpgolf // 0003 (c) 1990 SNK
-mahretsu // 0004 (c) 1990 SNK
-maglord // 0005 (c) 1990 Alpha Denshi Co.
-maglordh // 0005 (c) 1990 Alpha Denshi Co.
-ridhero // 0006 (c) 1990 SNK
-ridheroh // 0006 (c) 1990 SNK
-alpham2 // 0007 (c) 1991 SNK
-alpham2p // 0007 (c) 1991 SNK (prototype)
- // 0008 Sunshine (prototype) 1990 SNK
-ncombat // 0009 (c) 1990 Alpha Denshi Co.
-ncombath // 0009 (c) 1990 Alpha Denshi Co.
-cyberlip // 0010 (c) 1990 SNK
-superspy // 0011 (c) 1990 SNK
- // 0012
- // 0013
-mutnat // 0014 (c) 1992 SNK
- // 0015
-kotm // 0016 (c) 1991 SNK
-kotmh // 0016 (c) 1991 SNK
-sengoku // 0017 (c) 1991 SNK
-sengokuh // 0017 (c) 1991 SNK
-burningf // 0018 (c) 1991 SNK
-burningfh // 0018 (c) 1991 SNK
-burningfp // 0018 (c) 1991 SNK (prototype)
-lbowling // 0019 (c) 1990 SNK
-gpilots // 0020 (c) 1991 SNK
-gpilotsh // 0020 (c) 1991 SNK
-joyjoy // 0021 (c) 1990 SNK
-bjourney // 0022 (c) 1990 Alpha Denshi Co.
-quizdais // 0023 (c) 1991 SNK
-quizdaisk // 0123 (c) 1991 SNK
-lresort // 0024 (c) 1992 SNK
-eightman // 0025 (c) 1991 SNK / Pallas
- // 0026 Fun Fun Brothers (prototype) 1991 Alpha
-minasan // 0027 (c) 1990 Monolith Corp.
- // 0028 Dunk Star (prototype) Sammy
-legendos // 0029 (c) 1991 SNK
-2020bb // 0030 (c) 1991 SNK / Pallas
-2020bba // 0030 (c) 1991 SNK / Pallas
-2020bbh // 0030 (c) 1991 SNK / Pallas
-socbrawl // 0031 (c) 1991 SNK
-socbrawlh // 0031 (c) 1991 SNK
-roboarmy // 0032 (c) 1991 SNK
-fatfury1 // 0033 (c) 1991 SNK
-fbfrenzy // 0034 (c) 1992 SNK
- // 0035 Mystic Wand (prototype) 1991 Alpha
-bakatono // 0036 (c) 1991 Monolith Corp.
-crsword // 0037 (c) 1991 Alpha Denshi Co.
-trally // 0038 (c) 1991 Alpha Denshi Co.
-kotm2 // 0039 (c) 1992 SNK
-kotm2p // 0039 (c) 1992 SNK (prototype)
-sengoku2 // 0040 (c) 1993 SNK
-bstars2 // 0041 (c) 1992 SNK
-quizdai2 // 0042 (c) 1992 SNK
-3countb // 0043 (c) 1993 SNK
-aof // 0044 (c) 1992 SNK
-samsho // 0045 (c) 1993 SNK
-samshoh // 0045 (c) 1993 SNK
-tophuntr // 0046 (c) 1994 SNK
-tophuntrh // 0046 (c) 1994 SNK
-fatfury2 // 0047 (c) 1992 SNK
-janshin // 0048 (c) 1994 Aicom
-androdun // 0049 (c) 1992 Visco
-ncommand // 0050 (c) 1992 Alpha Denshi Co.
-viewpoin // 0051 (c) 1992 Sammy
-ssideki // 0052 (c) 1992 SNK
-wh1 // 0053 (c) 1992 Alpha Denshi Co.
-wh1h // 0053 (c) 1992 Alpha Denshi Co.
-wh1ha // 0053 (c) 1992 Alpha Denshi Co.
- // 0054 Crossed Swords 2 (CD only? not confirmed, MVS might exist)
-kof94 // 0055 (c) 1994 SNK
-aof2 // 0056 (c) 1994 SNK
-aof2a // 0056 (c) 1994 SNK
-wh2 // 0057 (c) 1993 ADK
-fatfursp // 0058 (c) 1993 SNK
-fatfurspa // 0058 (c) 1993 SNK
-savagere // 0059 (c) 1995 SNK
-fightfev // 0060 (c) 1994 Viccom
-fightfeva // 0060 (c) 1994 Viccom
-ssideki2 // 0061 (c) 1994 SNK
-spinmast // 0062 (c) 1993 Data East Corporation
-samsho2 // 0063 (c) 1994 SNK
-samsho2k // 0063 (c) 1994 SNK (Korean hack)
-wh2j // 0064 (c) 1994 ADK / SNK
-wjammers // 0065 (c) 1994 Data East Corporation
-karnovr // 0066 (c) 1994 Data East Corporation
-gururin // 0067 (c) 1994 Face
-pspikes2 // 0068 (c) 1994 Video System Co.
- // Super Volley '94 was once released in Mar.1994, and recalled. Then released as Power Spikes 2 (with some tweaks).
-fatfury3 // 0069 (c) 1995 SNK
-zupapa // 0070 Zupapa - released in 2001, 1994 prototype probably exists
- // 0071 Bang Bang Busters (prototype) 1994 Visco
- // 0072 Last Odyssey Pinball Fantasia (prototype) 1995 Monolith
-panicbom // 0073 (c) 1994 Eighting / Hudson
-aodk // 0074 (c) 1994 ADK / SNK
-sonicwi2 // 0075 (c) 1994 Video System Co.
-zedblade // 0076 (c) 1994 NMK
- // 0077 The Warlocks of the Fates (prototype) 1995 Astec
-galaxyfg // 0078 (c) 1995 Sunsoft
-strhoop // 0079 (c) 1994 Data East Corporation
-quizkof // 0080 (c) 1995 Saurus
-quizkofk // 0080 (c) 1995 Saurus
-ssideki3 // 0081 (c) 1995 SNK
-doubledr // 0082 (c) 1995 Technos
-pbobblen // 0083 (c) 1994 Taito
-pbobblenb // bootleg
-kof95 // 0084 (c) 1995 SNK
-kof95a // 0084 (c) 1995 SNK, alternate board
-kof95h // 0084 (c) 1995 SNK
- // 0085 Shinsetsu Samurai Spirits Bushidoretsuden / Samurai Shodown RPG (CD only)
-tws96 // 0086 (c) 1996 Tecmo
-samsho3 // 0087 (c) 1995 SNK
-samsho3h // 0087 (c) 1995 SNK
-fswords // 0187 Korean hack of samsho3
-stakwin // 0088 (c) 1995 Saurus
-pulstar // 0089 (c) 1995 Aicom
-whp // 0090 (c) 1995 ADK / SNK
- // 0091
-kabukikl // 0092 (c) 1995 Hudson
-neobombe // 0093 (c) 1997 Hudson
-gowcaizr // 0094 (c) 1995 Technos
-rbff1 // 0095 (c) 1995 SNK
-rbff1a // 0095 (c) 1995 SNK
-aof3 // 0096 (c) 1996 SNK
-aof3k // 0196 Censored Korean release of aof3
-sonicwi3 // 0097 (c) 1995 Video System Co.
- // 0098 Idol Mahjong - final romance 2 (CD only? not confirmed, MVS might exist)
- // 0099 Neo Pool Masters
-turfmast // 0200 (c) 1996 Nazca
-mslug // 0201 (c) 1996 Nazca
-puzzledp // 0202 (c) 1995 Taito (Visco license)
-mosyougi // 0203 (c) 1995 ADK / SNK
- // 0204 QP (prototype)
- // 0205 Neo-Geo CD Special (CD only)
-marukodq // 0206 (c) 1995 Takara
-neomrdo // 0207 (c) 1996 Visco
-sdodgeb // 0208 (c) 1996 Technos
-goalx3 // 0209 (c) 1995 Visco
- // 0210 Karate Ninja Sho (prototype) 1995 Yumekobo
- // 0211 Oshidashi Zintrick (CD only? not confirmed, MVS might exist) 1996 SNK/ADK
-zintrckb // 0211 hack - this is not a genuine MVS proto, its a bootleg made from the CD version
-overtop // 0212 (c) 1996 ADK
-neodrift // 0213 (c) 1996 Visco
-kof96 // 0214 (c) 1996 SNK
-kof96h // 0214 (c) 1996 SNK
-ssideki4 // 0215 (c) 1996 SNK
-kizuna // 0216 (c) 1996 SNK
-kizuna4p // 0216 (c) 1996 SNK - same cartridge as kizuna, needs extension board and a compatible MVS to enable 4p mode
-ninjamas // 0217 (c) 1996 ADK / SNK
-ragnagrd // 0218 (c) 1996 Saurus
-pgoal // 0219 (c) 1996 Saurus
-ironclad // 0220 (c) 1996 Saurus - Choutetsu Brikin'ger - Iron clad (protoype)
-ironclado // 0220 (c) 1996 Saurus - Choutetsu Brikin'ger - Iron clad (protoype, older)
-magdrop2 // 0221 (c) 1996 Data East Corporation
-samsho4 // 0222 (c) 1996 SNK
-samsho4k // Censored Korean release of samsho4
-rbffspec // 0223 (c) 1996 SNK
-rbffspeck // 0124 (c) 1996 SNK
-twinspri // 0224 (c) 1996 ADK
-wakuwak7 // 0225 (c) 1996 Sunsoft
- // 0226 Pair Pair Wars (prototype) 1996 Sunsoft?
-stakwin2 // 0227 (c) 1996 Saurus
-ghostlop // 0228 GhostLop (prototype) 1996? Data East
- // 0229 King of Fighters '96 CD Collection (CD only)
-breakers // 0230 (c) 1996 Visco
-miexchng // 0231 (c) 1997 Face
-kof97 // 0232 (c) 1997 SNK
-kof97h // 0232 (c) 1997 SNK
-kof97k // 0232 (c) 1997 SNK
-kof97pls // bootleg of kof97
-kof97oro // bootleg of kof97
-kog // bootleg of kof97
-magdrop3 // 0233 (c) 1997 Data East Corporation
-lastblad // 0234 (c) 1997 SNK
-lastbladh // 0234 (c) 1997 SNK
-lastsold // 0196 Censored Korean release of lastblad
-puzzldpr // 0235 (c) 1997 Taito (Visco license)
-irrmaze // 0236 (c) 1997 SNK / Saurus
-popbounc // 0237 (c) 1997 Video System Co.
-shocktro // 0238 (c) 1997 Saurus
-shocktroa // 0238 (c) 1997 Saurus
-blazstar // 0239 (c) 1998 Yumekobo
-rbff2 // 0240 (c) 1998 SNK
-rbff2h // 0240 (c) 1998 SNK
-rbff2k // 0140 Censored Korean release of rbff2
-mslug2 // 0241 (c) 1998 SNK
-kof98 // 0242 (c) 1998 SNK
-kof98a // 0242 (c) 1998 SNK, alternate board
-kof98k // 0242 (c) 1998 SNK
-kof98ka // 0242 (c) 1998 SNK
-kof98h // 0242 (c) 1998 SNK
-lastbld2 // 0243 (c) 1998 SNK
-neocup98 // 0244 (c) 1998 SNK
-breakrev // 0245 (c) 1998 Visco
-shocktr2 // 0246 (c) 1998 Saurus
-lans2004 // bootleg of shocktr2
-flipshot // 0247 (c) 1998 Visco
-pbobbl2n // 0248 (c) 1999 Taito (SNK license)
-ctomaday // 0249 (c) 1999 Visco
-mslugx // 0250 (c) 1999 SNK
-kof99 // 0251 (c) 1999 SNK
-kof99h // 0251 (c) 1999 SNK
-kof99e // 0251 (c) 1999 SNK
-kof99k // 0152 (c) 1999 SNK
-kof99p // 0251 (c) 1999 SNK
-ganryu // 0252 (c) 1999 Visco
-garou // 0253 (c) 1999 SNK
-garouh // 0253 (c) 1999 SNK
-garoup // 0253 (c) 1999 SNK
-garoubl // bootleg
-s1945p // 0254 (c) 1999 Psikyo
-preisle2 // 0255 (c) 1999 Yumekobo
-mslug3 // 0256 (c) 2000 SNK
-mslug3h // 0256 (c) 2000 SNK
-mslug3b6 // bootleg
-kof2000 // 0257 (c) 2000 SNK
-kof2000n // 0257 (c) 2000 SNK
- // 0258 SNK vs. Capcom?
-bangbead // 0259 (c) 2000 Visco
-b2b // 0071 (c) 2000 Visco (released by NCI in 2010)
-nitd // 0260 (c) 2000 Eleven / Gavaking
-nitdbl // bootleg
-sengoku3 // 0261 (c) 2001 Noise Factory / SNK
-kof2001 // 0262 (c) 2001 Eolith / SNK
-kof2001h // 0262 (c) 2001 Eolith / SNK
-cthd2003 // bootleg of kof2001
-ct2k3sp // bootleg of kof2001
-ct2k3sa // bootleg of kof2001
-mslug4 // 0263 (c) 2002 Mega Enterprise
-mslug4h // 0263 (c) 2002 Mega Enterprise
-ms4plus // bootleg
-rotd // 0264 (c) 2002 Evoga
-kof2002 // 0265 (c) 2002 Eolith / Playmore
-kof2002b // bootleg
-kf2k2pls // bootleg
-kf2k2pla // bootleg
-kf2k2mp // bootleg
-kf2k2mp2 // bootleg
-kof10th // bootleg of kof2002
-kf2k5uni // bootleg of kof2002
-kf10thep // bootleg of kof2002
-kof2k4se // bootleg of kof2002
-matrim // 0266 (c) 2002 Atlus
-matrimbl // bootleg
-pnyaa // 0267 (c) 2003 Aiky / Taito
-ms5pcb // 0268 (c) 2003 Playmore
-mslug5 // 0268 (c) 2003 Playmore
-mslug5h // 0268 (c) 2003 Playmore
-ms5plus // bootleg
-svcpcb // 0269 (c) 2003 Playmore / Capcom - JAMMA PCB
-svcpcba // 0269 (c) 2003 Playmore / Capcom - JAMMA PCB
-svc // 0269 (c) 2003 Playmore / Capcom
-svcboot // bootleg
-svcplus // bootleg
-svcplusa // bootleg
-svcsplus // bootleg
-samsho5 // 0270 (c) 2003 Playmore
-samsho5h // 0270 (c) 2003 Playmore
-samsho5b // bootleg
-kf2k3pcb // 0271 (c) 2003 Playmore - JAMMA PCB
-kof2003 // 0271 (c) 2003 Playmore
-kof2003h // 0271 (c) 2003 Playmore
-kf2k3bl // bootleg
-kf2k3bla // bootleg
-kf2k3pl // bootleg
-kf2k3upl // bootleg
-samsh5sp // 0272 (c) 2004 Playmore
-samsh5sph // 0272 (c) 2004 Playmore
-samsh5spho // 0272 (c) 2004 Playmore
-
-// Unlicensed commercial releases (no game ID)
-jockeygp
-jockeygpa
-vliner
-vlinero
-diggerma // No Game ID (unlicensed), (c) 2000 Kyle Hodgetts, prototype
-sbp // (c)2004 Vektorlogik
-
-// Hyper NeoGeo 64 uses a 3 digit rom code?
-
-hng64
-roadedge // 001 1997/09/10 Roads Edge / Round Trip RV
-sams64 // 002 1997/12/19 Samurai Shodown 64 / Samurai Spirits 64
-xrally // 003 1998/05/13 Xtreme Rally / Off Beat Racer!
-bbust2 // 004 1998/09/11 Beast Busters: Second Nightmare
-sams64_2 // 005 1998/10/16 Samurai Shodown: Warrior's Rage / Samurai Spirits: Asura Zanmaden
-fatfurwa // 006 1999/01/28 Fatal Fury: Wild Ambition / Garou Densetsu: Wild Ambition
-buriki // 007 1999/05/21 Buriki One
-
-// Neo Print
-neoprint
-npcartv1
-98best44
-nprsp
-
-// Alpha Denshi games
-shougi // (c) 1982 (Arcade TV Game List - P.80, Left, 9 from top)
-shougi2 // (c) 1982 (Arcade TV Game List - P.80, Left, 10 from top)
-champbas // (c) 1983 Sega
-champbasj // (c) 1983 Alpha Denshi Co.
-champbasja // (c) 1983 Alpha Denshi Co.
-champbb2 // (c) 1983 Sega
-champbb2a // (c) 1983 ?
-champbb2j // (c) 1983 ?
-exctsccr // (c) 1983 Alpha Denshi Co.
-exctsccra // (c) 1983 Alpha Denshi Co.
-exctsccru // (c) 1983 Alpha Denshi Co.
-exctsccrj // (c) 1983 Alpha Denshi Co.
-exctsccrjo // (c) 1983 Alpha Denshi Co.
-exctsccrb // bootleg
-exctscc2 // (c) 1984 Alpha Denshi Co.
-talbot // Volt Electronics
-equites // (c) 1984 Alpha Denshi Co.
-equitess // (c) 1984 Alpha Denshi Co./Sega
-gekisou // (c) 1985 Eastern
-bullfgtr // (c) 1984 Alpha Denshi Co.
-bullfgtrs // (c) 1984 Alpha Denshi Co./Sega
-kouyakyu // (c) 1985 Alpha Denshi Co.
-splndrbt // (c) 1985 Alpha Denshi Co.
-hvoltage // (c) 1985 Alpha Denshi Co.
-
-// SNK / Alpha 68K games
-sstingry // (c) 1986 Alpha Denshi Co.
-kyros // (c) 1987 World Games
-kyrosj // (c) 1986 Alpha Denshi Co.
-jongbou // (c) 1987 SNK
-paddlema // Alpha-68K96I 'PM' (c) 1988 SNK
-timesold // Alpha-68K96II 'BT' (c) 1987 SNK / Romstar
-timesold1 // Alpha-68K96II 'BT' (c) 1987
-btlfield // Alpha-68K96II 'BT' (c) 1987
-btlfieldb // bootleg
-skysoldr // Alpha-68K96II 'SS' (c) 1988 SNK (Romstar with dip switch)
-skysoldrbl // bootleg
-goldmedl // Alpha-68K96II 'GM' (c) 1988 SNK
-goldmedla // Alpha-68K96II 'GM' (c) 1988 SNK
-goldmedlb // Alpha-68K96II bootleg
-skyadvnt // Alpha-68K96V 'SA' (c) 1989 Alpha Denshi Co.
-skyadvntu // Alpha-68K96V 'SA' (c) 1989 SNK of America licensed from Alpha
-skyadvntj // Alpha-68K96V 'SA' (c) 1989 Alpha Denshi Co.
-gangwars // Alpha-68K96V (c) 1989 Alpha Denshi Co.
-gangwarsj // Alpha-68K96V (c) 1989 Alpha Denshi Co.
-gangwarsu // Alpha-68K96V (c) 1989 Alpha Denshi Co.
-gangwarsb // bootleg
-sbasebal // Alpha-68K96V (c) 1989 SNK of America licensed from Alpha
-sbasebalj // Alpha-68K96V
-tnextspc // A8003 'NS' (c) 1989 - MASKROM
-tnextspc2 // A8003 'NS' (c) 1989 - EPROMs
-tnextspcj // A8003 'NS' (c) 1989 - Japan
-meijinsn // (c) 1986 SNK
-
-// Technos games
-scregg // TA-0001 (c) 1983
-eggs // TA-0002 (c) 1983 Universal USA
-rockduck // bootleg? 1983 Datel SAS
-dommy // TA-00?? (c) 1983 (Arcade TV Game List - P.90, Left, 13 from top)
-bigprowr // TA-0007 (c) 1983
-tagteam // TA-0007 (c) 1983 + Data East license
-ssozumo // TA-0008 (c) 1984
-mystston // TA-0010 (c) 1984
-myststono // TA-0010 (c) 1984
-myststonoi // PCB manufactured by Itisa
-dogfgt // TA-0011 (c) 1984
-dogfgtu // TA-0011 (c) 1985 Data East USA, Inc.
-dogfgtj // TA-0011 (c) 1984
-bogeyman // -0204-0 (Data East part number) (c) 1985 (Arcade TV Game List - P.96, Right, 8 from top)
-matmania // TA-0015 (c) 1985 + Taito America license
-excthour // TA-0015 (c) 1985 + Taito license
-maniach // TA-0017 (c) 1986 + Taito America license
-maniach2 // TA-0017 (c) 1986 + Taito America license
-renegade // TA-0018 (c) 1986 + Taito America license
-kuniokun // TA-0018 (c) 1986
-kuniokunb // bootleg
-xsleena // TA-0019 (c) 1986 + Taito license
-xsleenaj // TA-0019 (c) 1986
-xsleenab // bootleg
-xsleenaba // bootleg
-solrwarr // TA-0019 (c) 1986 + Taito / Memetron license
-battlane // -0215, -0216 (Data East part number) (c) 1986 + Taito license
-battlane2 // -0215, -0216 (Data East part number) (c) 1986 + Taito license
-battlane3 // -0215, -0216 (Data East part number) (c) 1986 + Taito license
-ddragon // TA-0021 (c) 1987
-ddragonu // TA-0021 (c) 1987 Taito America
-ddragonua // TA-0021 (c) 1987 Taito America
-ddragonub // TA-0021 (c) 1987 Taito America
-ddragonw // TA-0021 (c) 1987 Taito
-ddragonw1 // TA-0021 (c) 1987 Taito
-ddragonb // bootleg
-ddragonba // bootleg
-ddragon6809 // bootleg
-ddragon6809a // bootleg
-ddragonb2 // bootleg
-spdodgeb // TA-0022 (c) 1987
-nkdodge // TA-0022 (c) 1987 (Japan)
-nkdodgeb // TA-0022 (c) 1987 (Japan)
-chinagat // TA-0023 (c) 1988 Taito + Romstar license (US)
-saiyugou // TA-0023 (c) 1988 (Japan)
-saiyugoub1 // bootleg
-saiyugoub2 // bootleg
-wwfsstar // TA-0024 (c) 1989 (Europe)
-wwfsstaru // TA-0024 (c) 1989 (US, newer)
-wwfsstarua // TA-0024 (c) 1989 (US)
-wwfsstarj // TA-0024 (c) 1989 (Japan)
-wwfsstarb // TA-0024 (c) 1989 (Japan)
-vball // TA-0025 (c) 1988 (US)
-vball2pj // TA-0025 (c) 1988 (Japan)
-vballb // bootleg (of US set)
-vball2pjb // bootleg (of Japan set)
-ddragon2 // TA-0026 (c) 1988 (World)
-ddragon2u // TA-0026 (c) 1988 (US)
-ddragon2j // TA-0026 (c) 1988 (Japan)
-ddragon2b // bootleg
-toffy // (c) 1993 Midas
-stoffy // (c) 1994 Midas
-stoffyu // (c) 1994 Midas + Unico
-ddungeon // Game Room
-ddungeone // East Coast Coin Company (Melbourne)
-darktowr // Game Room
-tstrike // East Coast Coin Company (Melbourne)
-tstrikea // Game Room
-ctribe // TA-0028 (c) 1990 (US)
-ctribe1 // TA-0028 (c) 1990 (US)
-ctribeo // TA-0028 (c) 1990 (US)
-ctribej // TA-0028 (c) 1990 (Japan)
-ctribeb // bootleg
-ctribeb2 // bootleg
-blockout // TA-0029 (c) 1989 + California Dreams
-blockout2 // TA-0029 (c) 1989 + California Dreams
-blockoutj // TA-0029 (c) 1989 + California Dreams (Japan)
-agress // TA-0029 (c) 1991 Palco
-agressb // TA-0029 (c) 1991 Palco
-ddragon3 // TA-0030 (c) 1990
-ddragon3p // TA-0030 (c) 1990
-ddragon3j // TA-0030 (c) 1990 (Japan)
-ddragon3b // bootleg
-wwfwfest // TA-0031 (c) 1991 (US)
-wwfwfesta // TA-0031 (c) 1991 + Tecmo license (US)
-wwfwfestb // bootleg
-wwfwfestj // TA-0031 (c) 1991 (Japan)
-wwfwfestk // TA-0031 (c) 1991 (Korea)
-shadfrce // TA-0032 (c) 1993 (World)
-shadfrceu // TA-0032 (c) 1993 (US)
-shadfrcej // TA-0032 (c) 1993 (Japan)
-
-// Stern "Berzerk hardware" games
-berzerk // (c) 1980
-berzerk1 // (c) 1980
-berzerkf // (c) 1980 (French speech)
-berzerkg // (c) 1980 (German speech)
-berzerks // (c) 1980 Sonic license(Spanish speech)
-frenzy // (c) 1982
-moonwarp // (c) 1982 - prototype
-
-// Stern 'Mazer Blazer hardware' games
-mazerbla // (c) 1983
-mazerblaa // (c) 1983
-greatgun // (c) 1983
-
-// Other Stern
-cliffhgr // (c) 1983
-cliffhgra // (c) 1983
-cliffhgra2 // (c) 1983
-goaltogo // (c) 1983
-
-// GamePlan games
-toratora // (c) 1980 Game Plan
-toratorab // (c) 1980 Game Plan
-megatack // (c) 1980 Centuri
-killcom // (c) 1980 Centuri
-challeng // (c) 1981 Centuri
-kaos // (c) 1981
-
-// Zaccaria games
-sia2650 // (c) 1978
-tinv2650 // (c) 1978
-dodgem // (c) 1979
-galaxia // (c) 1979
-galaxiaa // (c) 1979
-galaxiab // (c) 1979
-galaxiac // (c) 1979
-astrowar // (c) 1980
-laserbat // (c) 1981
-lazarian // (c) 1981
-catnmous // (c) 1982
-catnmousa // (c) 1982
-seabattl // (c) 1980
-seabattla // (c) 1980
-monymony // (c) 1983
-jackrabt // (c) 1984
-jackrabt2 // (c) 1984
-jackrabts // (c) 1984
-
-// UPL games
-mouser // UPL-83001 (c) 1983
-mouserc // UPL-83001 (c) 1983
-nova2001 // UPL-83005 (c) 1983
-nova2001h // hack?
-nova2001u // UPL-83005 (c) [1983] + Universal license
-ninjakun // UPL-84003 (c) 1984 Taito Corporation
-raiders5 // UPL-85004 (c) 1985
-raiders5t // UPL-85004 (c) 1985 Taito license
-pkunwar // UPL-????? (c) 1985 (Arcade Game TV List - P.98, Left, 22 from top)
-pkunwarj // UPL-????? (c) 1985 (Arcade Game TV List - P.98, Left, 22 from top)
-xxmissio // UPL-86001 [1986]
-ninjakd2 // UPL-????? (c) 1987
-ninjakd2a // UPL-????? (c) 1987
-ninjakd2b // UPL-????? (c) 1987
-ninjakd2c // 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
-robokidj // UPL-88013 (c) 1988
-robokidj2 // UPL-88013 (c) 1988
-omegaf // UPL-89016 (c) 1989
-omegafs // UPL-89016 (c) 1989
-
-// UPL/NMK/Banpresto games
-urashima // UPL-89052
-tharrier // UPL-89053 (c) 1989 UPL
-tharrieru // UPL-89053 (c) 1989 UPL + American Sammy license
-mustang // UPL-90058 (c) 1990 UPL
-mustangs // UPL-90058 (c) 1990 UPL + Seoul Trading
-bioship // UPL-90062 (c) 1990 UPL + American Sammy license
-sbsgomo // UPL-90062 (c) 1990 UPL
-vandyke // UPL-90064 (c) UPL
-vandykejal // UPL-90064 (c) Jaleco
-vandykejal2 // UPL-90064 (c) Jaleco
-vandykeb // bootleg
-blkheart // UPL-91069
-blkheartj // UPL-91069
-acrobatm // UPL-91073 (c) 1991 UPL + Taito license
-strahl // UPL-91074 (c) 1992 UPL (Japan)
-strahla // UPL-91074 (c) 1992 UPL (Japan)
-bjtwin // UPL-93087 (c) 1993 NMK
-bjtwina // UPL-93087 (c) 1993 NMK
-bjtwinp // UPL-93087 (c) 1993 NMK
-atombjt // bootleg
-tdragon2 // UPL-93091 (c) 1993 NMK
-tdragon2a // UPL-93091 (c) 1993 NMK
-bigbang // UPL-93091 (c) 1993 NMK
-tdragon // (c) 1991 NMK / Tecmo
-tdragon1 // (c) 1991 NMK / Tecmo
-hachamf // (c) 1991 NMK
-hachamfb // bootleg
-macross // (c) 1992 Banpresto
-riot // (c) 1992 NMK
-gunnail // (c) 1993 NMK / Tecmo
-macross2 // (c) 1993 Banpresto
-macross2g // review build
-sabotenb // (c) 1992 NMK / Tecmo
-sabotenba // (c) 1992 NMK / Tecmo
-cactus // bootleg
-nouryoku // (c) 1995 Tecmo
-nouryokup // (c) 1995 Tecmo
-arcadian // (c) 1994 NMK
-raphero // (c) 1994 Media Trading Corp
-
-// nmk16.cpp bootlegs using the Seibu Sound System
-mustangb // bootleg
-mustangb2 // TAB Austria bootleg
-tdragonb // bootleg
-
-// Comad games on unofficial hardware based on nmk16.cpp
-ssmissin // (c) 1992 Comad
-airattck // (c) 1996 Comad
-airattcka // (c) 1996 Comad
-
-// Bee-Oh games on unofficial hardware based on nmk16.cpp
-manybloc // (c) 1991 Bee-Oh
-
-// Jaleco Mahjong Games, Similar Hardware to the NMK ones above?
-daireika // (c) 1989 Jaleco/NMK
-mjzoomin // (c) 1990
-kakumei // (c) 1990
-kakumei2 // (c) 1992
-suchipi // (c) 1993
-
-// NMK Double Dealer, Similar Hardware to Jaleco Mahjong games above
-ddealer // (c) 1991 NMK
-
-// Based on nmk16?
-quizpani // (c) 1993 NMK
-acommand // (c) 1990
-
-// don't know what hardare Banpresto used for these games
-macrossp // (c) 1996 Banpresto
-quizmoon // (c) 1997 Banpresto
-
-// Face/NMK games
-gakupara // (c) 1991 NMK
-quizdna // (c) 1992 Face
-gekiretu // (c) 1992 Face
-cultures // (c) 1994 Face
-
-// Midway Atlantis games
-mwskins // (c) 2000 Midway
-mwskinsa // (c) 2000 Midway
-mwskinso // (c) 2000 Midway
-
-// Williams/Midway TMS games
-narc // (c) 1988 Williams
-narc3 // (c) 1988 Williams
-narc2 // (c) 1988 Williams
-trog // (c) 1990 Midway
-trog4 // (c) 1990 Midway
-trog3 // (c) 1990 Midway
-trogpa6 // (c) 1990 Midway
-trogpa4 // (c) 1990 Midway
-smashtv // (c) 1990 Williams
-smashtv6 // (c) 1990 Williams
-smashtv5 // (c) 1990 Williams
-smashtv4 // (c) 1990 Williams
-smashtv3 // (c) 1990 Williams
-hiimpact // (c) 1990 Williams
-hiimpact4 // (c) 1990 Williams
-hiimpact3 // (c) 1990 Williams
-hiimpact2 // (c) 1990 Williams
-hiimpact1 // (c) 1990 Williams
-hiimpactp // (c) 1990 Williams
-shimpact // (c) 1991 Midway
-shimpactp6 // (c) 1991 Midway
-shimpactp5 // (c) 1991 Midway
-shimpactp4 // (c) 1991 Midway
-strkforc // (c) 1991 Midway
-mk // (c) 1992 Midway
-mkr4 // (c) 1992 Midway
-mktturbo // hack
-mkyturbo // hack
-mkyturboe // hack
-mknifty // hack
-mknifty666 // hack
-mkprot4 // (c) 1992 Midway
-mkprot8 // (c) 1992 Midway
-mkprot9 // (c) 1992 Midway
-mkla1 // (c) 1992 Midway
-mkla2 // (c) 1992 Midway
-mkla3 // (c) 1992 Midway
-mkla4 // (c) 1992 Midway
-mkyawdim // bootleg
-mkyawdim2 // bootleg
-mkyawdim3 // bootleg
-mkyawdim4 // bootleg
-term2 // (c) 1992 Midway
-term2la3 // (c) 1992 Midway
-term2la2 // (c) 1992 Midway
-term2la1 // (c) 1992 Midway
-totcarn // (c) 1992 Midway
-totcarnp // (c) 1992 Midway
-mk2 // (c) 1993 Midway
-mk2r32e // (c) 1993 Midway
-mk2r31e // (c) 1993 Midway
-mk2r30 // (c) 1993 Midway
-mk2r21 // (c) 1993 Midway
-mk2r20 // (c) 1993 Midway
-mk2r14 // (c) 1993 Midway
-mk2r11 // (c) 1993 Midway
-mk2r42 // hack
-mk2r91 // hack
-mk2chal // hack
-jdreddp // (c) 1993 Midway
-nbajam // (c) 1993 Midway
-nbajamr2 // (c) 1993 Midway
-nbajamr1 // (c) 1993 Midway
-nbajamte // (c) 1994 Midway
-nbajamte1 // (c) 1994 Midway
-nbajamte2 // (c) 1994 Midway
-nbajamte3 // (c) 1994 Midway
-nbajamten // (c) 1995 Midway
-revx // (c) 1994 Midway
-revxp5 // (c) 1994 Midway
-mk3 // (c) 1994 Midway
-mk3r20 // (c) 1994 Midway
-mk3r10 // (c) 1994 Midway
-mk3p40 // (c) 1994 Midway
-umk3 // (c) 1994 Midway
-umk3r11 // (c) 1994 Midway
-umk3r10 // (c) 1994 Midway
-wwfmania // (c) 1995 Midway
-wwfmaniab // (c) 1995 Midway
-wwfmaniac // (c) 1995 Midway
-openice // (c) 1995 Midway
-nbahangt // (c) 1996 Midway
-nbamht // (c) 1996 Midway
-nbamht1 // (c) 1996 Midway
-rmpgwt // (c) 1997 Midway
-rmpgwt11 // (c) 1997 Midway
-
-// Midway V-unit games
-crusnusa // (c) 1994 Midway
-crusnusa40 // (c) 1994 Midway
-crusnusa21 // (c) 1994 Midway
-crusnwld // (c) 1996 Midway
-crusnwld24 // (c) 1996 Midway
-crusnwld23 // (c) 1996 Midway
-crusnwld20 // (c) 1996 Midway
-crusnwld19 // (c) 1996 Midway
-crusnwld17 // (c) 1996 Midway
-crusnwld13 // (c) 1996 Midway
-offroadc // (c) 1997 Midway (v1.63)
-offroadc5 // (c) 1997 Midway (v1.50)
-offroadc4 // (c) 1997 Midway (v1.40)
-offroadc3 // (c) 1997 Midway (v1.30)
-offroadc1 // (c) 1997 Midway (v1.10)
-wargods // (c) 1996 Midway (HD 10/09/1996 - Dual Resolution)
-wargodsa // (c) 1996 Midway (HD 08/15/1996)
-wargodsb // (c) 1996 Midway (HD 12/11/1995)
-
-// Midway Zeus games
-mk4 // (c) 1997 Midway (v3.0) Latest offical release
-mk4a // (c) 1997 Midway (v2.1)
-mk4b // (c) 1997 Midway (v1.0)
-invasnab // (c) 1999 Midway (v5.0) Latest offical release
-invasnab4 // (c) 1999 Midway (v4.0)
-invasnab3 // (c) 1999 Midway (v3.0)
-crusnexo // (c) 1999 Midway (v2.4) Latest offical release
-crusnexoa // (c) 1999 Midway (v2.0)
-crusnexob // (c) 1999 Midway (v1.6)
-crusnexoc // (c) 1999 Midway (v1.3)
-crusnexod // (c) 1999 Midway (v1.0)
-thegrid // (c) 2001 Midway (v1.2) Latest offical release
-thegrida // (c) 2001 Midway (v1.1)
-
-// Midway / Atari Voodoo based Hardware (Seattle, Flagstaff)
-wg3dh // (c) 1996 Atari Games
-mace // (c) 1996 Atari Games
-macea // (c) 1996 Atari Games
-sfrush // (c) 1996 Atari Games
-sfrushrk // (c) 1996 Atari Games
-calspeed // (c) 1996 Atari Games
-calspeeda // (c) 1996 Atari Games
-calspeedb // (c) 1996 Atari Games
-vaportrx // (c) 1998 Atari Games
-vaportrxp // (c) 1998 Atari Games
-carnevil // (c) 1998 Midway Games (v1.0.3)
-carnevil1 // (c) 1998 Midway Games (v1.0.1)
-biofreak // (c) 1997 Midway Games (prototype)
-blitz // (c) 1997 Midway Games
-blitz11 // (c) 1997 Midway Games
-blitz99 // (c) 1998 Midway Games
-blitz99a // (c) 1998 Midway Games
-blitz2k // (c) 1999 Midway Games
-hyprdriv // (c) 1998 Midway Games
-
-// Midway / Atari Voodoo 2 & 3 - based Hardware (Vegas, Denver, Durango)
-gauntleg // (c) 1998 Atari Games
-gauntleg12 // (c) 1998 Atari Games
-tenthdeg // (c) 1998 Atari Games (prototype)
-roadburn // (c) 1999 Atari Games
-sf2049 // (c) 1999 Atari Games
-sf2049se // (c) 1999 Atari Games
-sf2049te // (c) 1999 Atari Games
-warfa // (c) 1999 Atari Games
-warfaa // (c) 1999 Atari Games
-nbashowt // (c) 1998 Midway Games
-nbanfl // (c) 1999 Midway Games
-nbagold // (c) 2000 Midway Games
-gauntdl // (c) 1999 Midway Games
-gauntdl24 // (c) 1999 Midway Games
-cartfury // (c) 2000 Midway Games
-
-// Midway Quicksilver
-hydrthnd // (c) 1999 Midway Games
-offrthnd // (c) 2000 Midway Games
-arctthnd // (c) 2001 Midway Games
-ultarctc // (c) 2001 Midway Games
-ultarctcup // (c) 2001 Midway Games
-
-// Midway Touchmaster / Galaxy Games
-tm // (c) 1996 Midway Games
-tmdo // (c) 1996 Midway Games
-tm2k // (c) 1996 Midway Games
-tm2ka // (c) 1996 Midway Games
-tm2kb // (c) 1996 Midway Games
-tm3k // (c) 1997 Midway Games
-tm3ka // (c) 1997 Midway Games
-tm4k // (c) 1998 Midway Games
-tm4ka // (c) 1998 Midway Games
-tm4kca // (c) 1998 Midway Games
-tm4kmn // (c) 1998 Midway Games
-tm4knj // (c) 1998 Midway Games
-tm4kb // (c) 1998 Midway Games
-tm5k // (c) 1998 Midway Games
-tm5kca // (c) 1998 Midway Games
-tm5kmn // (c) 1998 Midway Games
-tm5ka // (c) 1998 Midway Games
-tm7k // (c) 1999 Midway Games
-tm7kmn // (c) 1999 Midway Games
-tm7knj // (c) 1999 Midway Games
-tm7ka // (c) 1999 Midway Games
-tm7kmna // (c) 1999 Midway Games
-tm7keval // (c) 1999 Midway Games
-tm8k // (c) 2000 Midway Games
-tm8k902 // (c) 2000 Midway Games
-galgbios // (c) 1998 Creative Electronics & Software (CES)
-galgame2 // (c) 1998 Creative Electronics & Software (CES) / Namco
-
-// Williams/Bally/Midway Pinball 2000
-swe1pb
-rfmpb
-rfmpbr2
-
-// Creative Electronics & Software
-tapatune
-hrclass
-ccclass
-tsclass
-// Bromley
-srockbwl
-// Smart Industries
-smartoss
-
-
-// Cinematronics raster games
-embargo
-tripool // (c) 1981 Noma (Casino Tech license)
-tripoola // (c) 1981 Noma (Costal Games license)
-unclepoo // (c) 1983 Diatec
-joinem // (c) 1983 Global
-loverboy // (c) 1983 G.T
-striv // (c) 1985 Nova du Canada
-jack // (c) 1982 Cinematronics
-jack2 // (c) 1982 Cinematronics
-jack3 // (c) 1982 Cinematronics
-treahunt // (c) 1982 Hara Industries
-zzyzzyxx // (c) 1982 Cinematronics + Advanced Microcomputer Systems
-zzyzzyxx2 // (c) 1982 Cinematronics + Advanced Microcomputer Systems
-brix // (c) 1982 Cinematronics + Advanced Microcomputer Systems
-freeze // Cinematronics
-sucasino // (c) 1982 Data Amusement
-
-// Cinematronics vector games
-spacewar // (c) 1977
-spaceshp // (c) 1978 Cinematronics (Sega licence)
-barrier // (c) 1979 Vectorbeam
-starcas // (c) 1980
-starcas1 // (c) 1980
-starcasp // (c) 1980 prototype
-starcase // (c) 1980 Cinematronics (Mottoeis license)
-stellcas // bootleg
-spaceftr // (c) 1981 Zaccaria
-tailg // (c) 1979
-ripoff // (c) 1980
-armora // (c) 1980
-armorap // (c) 1980
-armorar // (c) 1980 Cinematronics (Rock-ola license)
-wotw // (c) 1981
-wotwc // (c) 1981
-warrior // (c) 1979 Vectorbeam
-starhawk // (c) 1979
-solarq // (c) 1981
-boxingb // (c) 1981
-speedfrk // (c) 1979 Vectorbeam
-sundance // (c) 1979
-demon // (c) 1982 Rock-ola
-qb3 // (c) 1982 Rock-ola - prototype
-// this one uses 68000+Z80 instead of the Cinematronics CPU
-cchasm
-cchasm1 // (c) 1983 Cinematronics / GCE
-
-// "The Pit hardware" games
-roundup // (c) 1981 Amenip/Centuri
-fitter // (c) 1981 Taito
-fitterbl // bootleg
-ttfitter // bootleg
-thepit // (c) 1982 Zilec
-thepitu1 // (c) 1982 Centuri (licensed)
-thepitu2 // (c) 1982 Centuri (licensed)
-thepitj // (c) 1982 Taito (licensed)
-thepitm // bootleg
-dockman // (c) 1982 Taito Corp.
-portman // (c) 1982 Nova Games Ltd.
-suprmous // (c) 1982 Taito
-funnymou // (c) 1982 Chuo Co. Ltd
-machomou // (c) 1982 Techstar
-desertdn // (c) 1982 Video Optics
-intrepid // (c) 1983 Nova Games Ltd.
-intrepid2 // (c) 1983 Nova Games Ltd.
-intrepidb // bootleg
-intrepidb2 // bootleg
-intrepidb3 // bootleg
-zaryavos // (c) 1983 Nova Games of Canada (prototype)
-timelimt // (c) 1983 Chuo Co. Ltd
-progress // (c) 1984 Chuo Co. Ltd
-rtriv // (c) 198? Romar
-
-// TIA-MC1 hardware games
-konek // (c) 1988 Terminal
-sosterm // (c) 1988 Terminal
-bilyard // (c) 1988 Terminal
-koroleva // (c) 1988 Terminal
-
-// Photon hardware games
-phtetris
-phpython
-phklad
-
-// Photon IK2 hardware
-kok
-black
-brod
-
-// Valadon Automation games
-bagman // (c) 1982
-bagnard // (c) 1982
-bagnarda // (c) 1982
-bagnardi // (c) 1982 + Itisa license
-bagmans // (c) 1982 + Stern license
-bagmans2 // (c) 1982 + Stern license
-pickin // (c) 1983
-supdrapo // (c) 1983 + Stern license
-supdrapoa // (c) 1983 + Jeutel license?
-supdrapob // bootleg
-sbagman // (c) 1984
-sbagmans // (c) 1984 + Stern license
-botanic // (c) 1983
-botanicf // (c) 1984
-squaitsa // (c) 1985
-tankbust // (c) 1985
-
-// Seibu Denshi / Seibu Kaihatsu games
-stinger // (c) 1983 Seibu Denshi
-stinger2 // (c) 1983 Seibu Denshi
-scion // (c) 1984 Seibu Denshi
-scionc // (c) 1984 Seibu Denshi + Cinematronics license
-kungfut // (c) 1984 Seibu Kaihatsu
-kungfuta // (c) 1984 Seibu Kaihatsu
-wiz // (c) 1985 Seibu Kaihatsu
-wizt // (c) 1985 Taito Corporation
-wizta // (c) 1985 Taito Corporation
-kncljoe // (c) 1985 Taito Corporation
-kncljoea // (c) 1985 Taito Corporation
-bcrusher // bootleg
-empcity // (c) 1986 Seibu Kaihatsu (bootleg?)
-empcityu // (c) 1986 Taito (Romstar License)
-empcityj // (c) 1986 Taito Corporation (Japan)
-empcityi // (c) 1986 Seibu Kaihatsu (Eurobed license)
-stfight // (c) 1986 Seibu Kaihatsu (Germany) (bootleg?)
-stfighta // (c) 1986 Seibu Kaihatsu (bootleg?)
-darkmist // (c) 1986 Taito
-mustache // (c) 1987 March
-cshooter // (c) 1987 Taito
-cshootere // (c) 1987 JKH (bootleg)
-airraid // (c) 1987 Seibu Kaihatsu
-panicr // Seibu / Taito
-panicrg // Seibu / TV-Tuning (Germany)
-deadang // (c) 1988 Seibu Kaihatsu
-leadang // (c) 1988 Seibu Kaihatsu
-ghunter // (c) 1988 Seibu Kaihatsu
-ghunters // (c) 1988 Seibu Kaihatsu + Segasa/Sonic license
-dynduke // (c) 1989 Seibu Kaihatsu
-dyndukea // (c) 1989 Seibu Kaihatsu
-dyndukej // (c) 1989 Seibu Kaihatsu
-dyndukeu // (c) 1989 Seibu Kaihatsu + Fabtek license
-dbldynj // (c) 1989 Seibu Kaihatsu
-dbldynu // (c) 1989 Seibu Kaihatsu + Fabtek license
-raiden // (c) 1990 Seibu Kaihatsu
-raidena // (c) 1990 Seibu Kaihatsu
-raidenb // (c) 1990 Seibu Kaihatsu
-raidenk // (c) 1990 Seibu Kaihatsu + IBL Corporation license
-raident // (c) 1990 Seibu Kaihatsu + Liang HWA Electronics license
-raidenu // (c) 1990 Seibu Kaihatsu + Fabtek license
-raidenua // (c) 1990 Seibu Kaihatsu + Fabtek license
-sdgndmps // (c) Banpresto / Bandai (Japan)
-sengokmj // (c) 1991 Sigma
-totmejan // (c) 1991 Seibu/Tecmo
-goodejan // (c) 1991 Seibu/Tecmo
-goodejana // (c) 1991 Seibu/Tecmo
-
-raiden2 // (c) 1993 Seibu Kaihatsu + Fabtek license
-raiden2sw // (c) 1993 Seibu Kaihats
-raiden2u // (c) 1993 Seibu Kaihatsu + Fabtek license
-raiden2hk // (c) 1993 Seibu Kaihatsu + Metrotainment license
-raiden2j // (c) 1993 Seibu Kaihatsu
-raiden2i // (c) 1993 Seibu Kaihatsu
-raiden2e // (c) 1993 Seibu Kaihatsu
-raiden2ea // (c) 1993 Seibu Kaihatsu
-raiden2eu // (c) 1993 Seibu Kaihatsu + Fabtek license
-raiden2eua // (c) 1993 Seibu Kaihatsu + Fabtek license
-raiden2nl // (c) 1993 Seibu Kaihatsu
-raiden2f // (c) 1993 Seibu Kaihatsu
-raiden2g // (c) 1993 Seibu Kaihatsu + Tuning license
-raiden2dx // (c) 1993 Seibu Kaihatsu
-
-raidendx // (c) 1994 Seibu Kaihatsu
-raidendxk // (c) 1994 Seibu Kaihatsu
-raidendxu // (c) 1994 Seibu Kaihatsu + Fabtek license
-raidendxa1 // (c) 1994 Seibu Kaihatsu + Metrotainment license
-raidendxa2 // (c) 1994 Seibu Kaihatsu + Metrotainment license
-raidendxg // (c) 1994 Seibu Kaihatsu + Tuning license
-raidendxnl // (c) 1994 Seibu Kaihatsu
-raidendxj // (c) 1994 Seibu Kaihatsu
-raidendxch
-zeroteam // (c) 1993 Seibu Kaihatsu + Fabtek license
-zeroteama // (c) 1993 Seibu Kaihatsu
-zeroteamb // (c) 1993 Seibu Kaihatsu
-zeroteamc // (c) 1993 Seibu Kaihatsu + Liang Hwa license
-zeroteamd // (c) 1993 Seibu Kaihatsu + Dreamsoft license
-zeroteams // (c) 1993 Seibu Kaihatsu
-zeroteamsr // (c) 1993 Seibu Kaihatsu
-xsedae // (c) 1995 Dream Island
-
-// Newer V33 PCB with COP3 protection
-r2dx_v33 // (c) 1996 Seibu Kaihatsu
-r2dx_v33_r2 // (c) 1996 Seibu Kaihatsu
-nzeroteam // (c) 1997 Seibu Kaihatsu
-zerotm2k // (c) 2000 Seibu Kaihatsu
-
-// Seibu SPI System games
-
-senkyu // (c) 1995 Seibu Kaihatsu
-senkyua // (c) 1995 Seibu Kaihatsu
-batlball // (c) 1995 Seibu Kaihatsu (Tuning License)
-batlballa // (c) 1995 Seibu Kaihatsu (Metrotainment License)
-batlballe // (c) 1995 Seibu Kaihatsu (Metrotainment License)
-batlballu // (c) 1995 Seibu Kaihatsu (Fabtek license)
-
-viprp1 // (c) 1995 Seibu Kaihatsu
-viprp1k // (c) 1995 Seibu Kaihatsu (Dream Island license)
-viprp1u // (c) 1995 Seibu Kaihatsu (Fabtek license)
-viprp1ua // (c) 1995 Seibu Kaihatsu (Fabtek license)
-viprp1j // (c) 1995 Seibu Kaihatsu
-viprp1h // (c) 1995 Seibu Kaihatsu
-viprp1s // (c) 1995 Seibu Kaihatsu
-viprp1oj // (c) 1995 Seibu Kaihatsu
-viprp1ot // (c) 1995 Seibu Kaihatsu (Tuning License)
-viprp1hk // (c) 1995 Seibu Kaihatsu (Metrotainment License)
-
-ejanhs // (c) 1996 Seibu Kaihatsu
-
-rdft // (c) 1996 Seibu Kaihatsu (Tuning License)
-rdftu // (c) 1996 Seibu Kaihatsu (Fabtek license)
-rdftau // (c) 1996 Seibu Kaihatsu
-rdftauge // (c) 1996 Seibu Kaihatsu (Tuning license and text display, but Australia region code)
-rdftj // (c) 1996 Seibu Kaihatsu
-rdftja // (c) 1996 Seibu Kaihatsu
-rdftjb // (c) 1996 Seibu Kaihatsu
-rdftadi // (c) 1996 Seibu Kaihatsu (Dream Island license)
-rdftam // (c) 1996 Seibu Kaihatsu (Metrotainment license)
-rdftit // (c) 1996 Seibu Kaihatsu
-rdfta // (c) 1996 Seibu Kaihatsu
-rdfts // (c) 1996 Seibu Kaihatsu (Explorer System Corp.)
-
-rdft2 // (c) 1997 Seibu Kaihatsu (Tuning License)
-rdft2a // (c) 1997 Seibu Kaihatsu (Metrotainment license)
-rdft2aa // (c) 1997 Seibu Kaihatsu (Dream Island license)
-rdft2j // (c) 1997 Seibu Kaihatsu
-rdft2ja // (c) 1997 Seibu Kaihatsu
-rdft2it // (c) 1997 Seibu Kaihatsu
-rdft2t // (c) 1997 Seibu Kaihatsu
-rdft2u // (c) 1997 Seibu Kaihatsu (Fabtek license)
-rdft2us // (c) 1997 Seibu Kaihatsu (Fabtek license)
-rdft22kc // (c) 2000 Seibu Kaihatsu
-
-rfjet // (c) 1998 Seibu Kaihatsu (Tuning License)
-rfjetu // (c) 1998 Seibu Kaihatsu (Fabtek license)
-rfjeta // (c) 1998 Seibu Kaihatsu (Dream Island license)
-rfjetj // (c) 1998 Seibu Kaihatsu
-rfjets // (c) 1998 Seibu Kaihatsu
-rfjetsa // (c) 1998 Seibu Kaihatsu
-rfjett // (c) 1998 Seibu Kaihatsu (Taiwan license)
-rfjet2kc // (c) 2000 Seibu Kaihatsu
-
-ejsakura // (c) 1999 Seibu Kaihatsu
-ejsakura12 // (c) 1999 Seibu Kaihatsu
-
-// Seibu System SH2B games
-feversoc // (c) 2004
-
-// Tad games (Tad games run on Seibu hardware)
-cabal // (c) 1988 Tad + Fabtek license
-cabala // (c) 1988 Tad + Fabtek license
-cabalbl // bootleg
-cabalbl2 // bootleg
-cabalus // (c) 1988 Tad + Fabtek license
-cabalus2 // (c) 1988 Tad + Fabtek license
-toki // (c) 1989 Tad (World)
-tokia // (c) 1989 Tad (World)
-tokiu // (c) 1989 Tad + Fabtek license (US)
-tokiua // (c) 1989 Tad + Fabtek license (US)
-tokib // bootleg
-jujub // bootleg
-juju // (c) 1989 Tad (Japan)
-jujuba // bootleg
-bloodbro // (c) 1990 Tad
-bloodbroa // (c) 1990 Tad
-bloodbrob // (c) 1990 Tad
-weststry // bootleg
-skysmash // (c) 1990 Nihon System Inc.
-legionna // (c) 1992 Tad (World)
-legionnau // (c) 1992 Tad + Fabtek license (US)
-legionnaj // (c) 1992 Tad (Japan)
-heatbrl // (c) 1992 Tad (World version 3)
-heatbrl2 // (c) 1992 Tad (World version 2)
-heatbrlo // (c) 1992 Tad (World)
-heatbrlu // (c) 1992 Tad (US)
-heatbrle // (c) 1992 Tad (Electronic Devices license)
-godzilla // (c) 1993 Banpresto
-denjinmk // (c) 199? Banpresto
-grainbow // (c) 1993 Banpresto
-cupsoc // (c) 1992 Seibu
-cupsoca // (c) 1992 Seibu
-cupsocb // (c) 1992 Seibu
-cupsocs // (c) 1992 Seibu
-cupsocs2 // (c) 1992 Seibu
-cupsocsb // bootleg
-cupsocsb2 // bootleg
-cupsocsb3 // bootleg
-olysoc92 // (c) 1992 Seibu
-olysoc92a // (c) 1992 Seibu
-olysoc92b // (c) 1992 Seibu
-goal92 // bootleg
-
-// Jaleco games
-exerion // (c) 1983 Jaleco
-exeriont // (c) 1983 Jaleco + Taito America license
-exerionb // bootleg
-fcombat // (c) 1985 Jaleco
-pturn // (c) 1984 Jaleco
-ddayjlc // (c) 1984 Jaleco
-ddayjlca // (c) 1984 Jaleco
-formatz // (c) 1984 Jaleco
-aeroboto // (c) 1984 Williams
-citycon // (c) 1985 Jaleco
-citycona // (c) 1985 Jaleco
-cruisin // (c) 1985 Jaleco/Kitkorp
-momoko // (c) 1986 Jaleco
-argus // (c) 1986 Jaleco
-valtric // (c) 1986 Jaleco
-butasan // (c) 1987 Jaleco - english subtitled
-butasanj // (c) 1987 Jaleco
-psychic5 // (c) 1987 Jaleco
-psychic5j // (c) 1987 Jaleco
-bombsa // (c) 1988 Jaleco
-ginganin // (c) 1987 Jaleco
-ginganina // (c) 1987 Jaleco
-skyfox // (c) 1987 Jaleco + Nichibutsu USA license
-exerizer // (c) 1987? Jaleco
-exerizerb // bootleg
-homerun // (c) 1988 Jaleco
-dynashot // (c) 1988 Jaleco
-ganjaja // (c) 1990 Jaleco
-bigrun // (c) 1989 Jaleco
-cischeat // (c) 1990 Jaleco
-f1gpstar // (c) 1991 Jaleco
-armchmp2 // (c) 1992 Jaleco
-armchmp2o // (c) 1992 Jaleco
-wildplt // (c) 1992 Jaleco
-captflag // (c) 1993 Jaleco
-f1gpstr2 // (c) 1993 Jaleco
-scudhamm // (c) 1994 Jaleco
-tetrisp2 // (c) 1997 Jaleco
-tetrisp2j // (c) 1997 Jaleco
-tetrisp2ja // (c) 1997 Jaleco
-nndmseal // (c) 1997 I'Max/Jaleco
-nndmseala // (c) 1997 I'Max/Jaleco
-stepstag // (c) 1999 Jaleco
-step3 // (c) 1999 Jaleco
-rockn // (c) 1999 Jaleco
-rockna // (c) 1999 Jaleco
-rockn2 // (c) 1999 Jaleco
-rocknms // (c) 1999 Jaleco
-rockn3 // (c) 1999 Jaleco
-rockn4 // (c) 2000 Jaleco
-
-// Jaleco Mega System 1 games
-lomakai // (c) 1988 (World)
-makaiden // (c) 1988 (Japan)
-p47 // (c) 1988
-p47j // (c) 1988 (Japan)
-p47je // (c) 1988 (Japan, Export)
-kickoff // (c) 1988 (Japan)
-tshingen // (c) 1988 (Japan)
-tshingena // (c) 1988 (Japan)
-kazan // (c) 1988 (World)
-iganinju // (c) 1988 (Japan)
-astyanax // (c) 1989
-lordofk // (c) 1989 (Japan)
-hachoo // (c) 1989
-jitsupro // (c) 1989 (Japan)
-plusalph // (c) 1989
-stdragon // (c) 1989
-stdragona // (c) 1989
-stdragonb // bootleg
-rodland // (c) 1990
-rodlandj // (c) 1990 (Japan)
-rittam // Prototype or hack of Rod-Land
-rodlandjb // bootleg
-avspirit // (c) 1991
-phantasm // (c) 1991 (Japan)
-monkelf // bootleg
-edf // (c) 1991
-edfa // (c) 1991
-edfu // (c) 1991 (North America)
-edfbl // (c) 1991
-64street // (c) 1991
-64streetj // (c) 1991 (Japan)
-64streetja // (c) 1991 (Japan)
-soldam // (c) 1992
-soldamj // (c) 1992 (Japan)
-bigstrik // (c) 1992
-bigstrkb // bootleg on different hardware
-bigstrkba // alt set of 'bigstrkb' with Italian teams
-bestleag // bootleg, by Playmark?
-bestleaw // bootleg
-chimerab // (c) 1993
-cybattlr // (c) 1993
-hayaosi1 // (c) 1993
-peekaboo // (c) 1993
-peekaboou // (c) 1993
-
-// Jaleco Mega System 32 games
-hayaosi2 // (c) 1993
-hayaosi3 // (c) 1994
-bbbxing // (c) 1994
-47pie2 // (c) 1994
-47pie2o // (c) 1994
-desertwr // (c) 1995
-gametngk // (c) 1995
-tetrisp // (c) 1995 Jaleco / BPS
-p47aces // (c) 1995
-akiss // (c) 1995
-gratia // (c) 1996
-gratiaa // (c) 1996
-kirarast // (c) 1996
-tp2m32 // (c) 1997
-bnstars // (c) 1997
-wpksocv2 // (c) 1997
-f1superb // (c) 1994
-bnstars1 // (c) 1997
-
-// Video System Co. games
-rabiolep // (c) 1987 V-System Co. (Japan)
-rpunch // (c) 1987 V-System Co. + Bally/Midway/Sente license (US)
-svolley // (c) 1989 V-System Co. (Japan)
-svolleyk // (c) 1989 V-System Co. (Korea)
-svolleyu // (c) 1989 V-System Co. + Data East license (US)
-svolleybl // bootleg
-tail2nos // [1989] V-System Co.
-sformula // [1989] V-System Co. (Japan)
-sformulaa // [1989] V-System Co. (Japan)
-ojankoc // [1986] V-System Co. (Japan)
-ojankoy // [1986] V-System Co. (Japan)
-ojanko2 // [1987] V-System Co. (Japan)
-ccasino // [1987] V-System Co. (Japan)
-ojankohs // [1988] V-System Co. (Japan)
-nekkyoku // [1988] Video System Co. (Japan)
-idolmj // [1988] (c) System Service (Japan)
-mjnatsu // [1989] Video System presents (Japan)
-natsuiro // [1989] Video System presents (Japan)
-mfunclub // [1989] V-System (Japan)
-daiyogen // [1990] Video System Co. (Japan)
-nmsengen // (c) 1991 Video System (Japan)
-fromance // (c) 1991 Video System Co. (Japan)
-pipedrm // (c) 1990 Video System Co. (World)
-pipedrmu // (c) 1990 Video System Co. (US)
-pipedrmj // (c) 1990 Video System Co. (Japan)
-pipedrmt // (c) 1990 Video System Co. (Taiwan)
-hatris // (c) 1990 Video System Co. (US)
-hatrisj // (c) 1990 Video System Co. (Japan)
-spinlbrk // (c) 1990 V-System Co. (World)
-spinlbrku // (c) 1990 V-System Co. (US)
-spinlbrkj // (c) 1990 V-System Co. (Japan)
-pspikes // (c) 1991 Video System Co. (World)
-pspikesk // (c) 1991 Video System Co. (Korea)
-pspikesu // (c) 1991 Video System Co. (US)
-svolly91 // (c) 1991 Video System Co. (Japan)
-pspikesb // bootleg
-pspikesba // bootleg
-spikes91 // bootleg
-spikes91b // bootleg
-pspikesc // bootleg
-karatblz // (c) 1991 Video System Co.
-karatblza // (c) 1991 Video System Co.
-karatblzu // (c) 1991 Video System Co. (US)
-karatblzj // (c) 1991 Video System / Tecmo (Japan)
-karatblzbl // bootleg
-turbofrc // (c) 1991 Video System Co.
-aerofgt // (c) 1992 Video System Co.
-aerofgtb // (c) 1992 Video System Co.
-aerofgtc // (c) 1992 Video System Co.
-sonicwi // (c) 1992 Video System Co. (Japan)
-aerfboot // bootleg
-aerfboo2 // bootleg
-wbbc97 // (c) 1997 Comad
-welltris // (c) 1991 Video System Co. (Japan)
-welltrisj // (c) 1991 Video System Co. (Japan)
-quiz18k // (c) 1992 EIM (Welltris hardware)
-f1gp // (c) 1991 Video System Co.
-f1gpb // bootleg
-f1gp2 // (c) 1992 Video System Co.
-crshrace // (c) 1993 Video System Co.
-crshrace2 // (c) 1993 Video System Co.
-taotaido // (c) 1993 Video System Co.
-taotaidoa // (c) 1993 Video System Co.
-taotaido3 // (c) 1993 Video System Co.
-gstriker // (c) [1993] Human
-gstrikera // (c) [1993] Human
-gstrikerj // (c) [1993] Human
-vgoalsoc // (c) 199? Temco
-vgoalsca // (c) 199? Temco
-twrldc94 // (c) 1994 Tecmo
-twrldc94a // (c) 1994 Tecmo
-suprslam // (c) 1995 Banpresto
-fromanc2 // (c) 1995 Video System Co. (Japan)
-fromancr // (c) 1995 Video System Co. (Japan)
-fromanc4 // (c) 1998 Video System Co. (Japan)
-inufuku // (c) 1998 Video System Co. (Japan)
-3on3dunk // (c) 1996 Video System Co. (Japan)
-
-// Psikyo games
-// 68020 board
-samuraia // (c) 1993 (World)
-sngkace // (c) 1993 (Japan)
-sngkacea // (c) 1993 (Japan)
-gunbird // (c) 1994
-gunbirdk // (c) 1994
-gunbirdj // (c) 1994
-btlkroad // (c) 1994
-btlkroadk // (c) 1994
-s1945 // (c) 1995
-s1945a // (c) 1995
-s1945j // (c) 1995
-s1945jn // (c) 1995
-s1945bl // (c) 1995 (Hong Kong bootleg)
-s1945k // (c) 1995
-tengai // (c) 1996
-tengaij // (c) 1996
-// Semicom games on "Psikyo 68020"-like hardware
-baryon // (c) 1997 SemiCom
-baryona // (c) 1997 SemiCom
-dreamwld // (c) 2000 SemiCom
-rolcrush // (c) 1999 Trust
-cutefght // (c) 1998 SemiCom
-gaialast // (c) 1999 SemiCom
-
-// SH2 board
-s1945ii // (c) 1997
-soldivid // (c) 1997
-sbomber // (c) 1998
-sbombera // (c) 1998
-daraku // (c) 1998
-gunbird2 // (c) 1998
-s1945iii // (c) 1999
-dragnblz // (c) 2000
-tgm2 // (c) 2000
-tgm2p // (c) 2000
-gnbarich // (c) 2001
-mjgtaste // (c) 2002
-hotgmck // (c) 1997
-hgkairak // (c) 1998
-hotgmck3 // (c) 1999
-hotgm4ev // (c) 2000
-hotgmcki // (c) 2001
-loderndf // (c) 2000
-loderndfa // (c) 2000
-hotdebut // (c) 2000
-
-// Orca games
-marineb // (c) 1982 Orca
-changes // (c) 1982 Orca
-changesa // (c) 1982 Orca + Eastern Micro Electronics license
-looper // (c) 1982 Orca
-springer // (c) 1982 Orca
-hoccer // (c) 1983 Eastern Micro Electronics, Inc.
-hoccer2 // (c) 1983 Eastern Micro Electronics, Inc.
-bcruzm12 // (c) 1983 Sigma Ent. Inc.
-hopprobo // (c) 1983 Sega
-wanted // (c) 1984 Sigma Ent. Inc.
-funkybee // (c) 1982 Orca
-funkybeeb // (c) 1982 Orca
-skylancr // (c) 1983 Orca
-skylancre // (c) 1983 Orca + Esco Trading Co license
-zodiack // (c) 1983 Orca + Esco Trading Co license
-dogfight // (c) 1983 Thunderbolt
-moguchan // (c) 1982 Orca + Eastern Commerce Inc. license (doesn't appear on screen)
-percuss // (c) 1981 Orca
-bounty // (c) 1982 Orca
-espial // (c) 1983 Thunderbolt, Orca logo is hidden in title screen
-espialu // (c) 1983 Thunderbolt, Orca logo is hidden in title screen
-netwars // (c) 1983 Orca + Esco Trading Co license
-// Vastar was made by Orca, but when it was finished, Orca had already bankrupted.
-// So they sold this game as "Made by Sesame Japan" because they couldn't use
-// the name "Orca"
-vastar // (c) 1983 Sesame Japan
-vastar2 // (c) 1983 Sesame Japan
-vastar3 // (c) 1983 Sesame Japan
-vastar4 // (c) 1983 Sesame Japan
-/*
- other Orca games:
- 82 Battle Cross Kit 2P
- 82 River Patrol Empire Mfg/Kerstens Ind Ded 2P HC Action
- 82 Slalom Kit 2P HC Action
- 83 Net Wars 2P
- 83 Super Crush Kit 2P Action
-*/
-
-// Gaelco 2D games
-mastboy // (c) 1987 - No Ref on the PCB
-mastboyi // (c) 1987 - No Ref on the PCB
-mastboyia // (c) 1987 - No Ref on the PCB
-xorworld // (c) 1990 - prototype
-bigkarnk // (c) 1991 - Ref 901112-1
-// Master Boy 2 // (c) 1991 - Ref ???
-splash // (c) 1992 - Ref 922804
-splash10 // (c) 1992 - Ref 922804
-paintlad // (c) 1992 - ver 1.3
-roldfrog // not a gaelco game but based on splash code
-roldfroga // not a gaelco game but based on splash code
-rebus // not a gaelco game but on similar hw to splash
-funystrp // not a gaelco game but on similar hw to splash
-puckpepl // not a gaelco game but on similar hw to splash
-thoop // (c) 1992 - Ref 922804/1
-squash // (c) 1992 - Ref 922804/2
-wrally // (c) 1993 - Ref 930705
-wrallya // (c) 1993 - Ref 930705
-wrallyb // (c) 1993 - Ref 930217
-wrallyat // (c) 1993 - Ref 930217
-glass // (c) 1993 - Ref 931021
-glass10 // (c) 1993 - Ref 931021
-glass10a // (c) 1993 - Ref 931021 shows "Break Edition" on a real PCB
-glasskr // (c) 1994 - Ref 931021 shows 1994 version, Anime girls, unprotected
-targeth // (c) 1994 - Ref 940531
-targetha // (c) 1994 - Ref 940531
-thoop2 // (c) 1994 - Ref ???
-aligator // (c) 1994 - Ref 940411
-aligatorun // (c) 1994 - Ref 940411 (unprotected)
-biomtoy // (c) 1995 - Ref 922804/2 - (unprotected)
-biomtoya // (c) 1995 - Ref 922804/2 - (unprotected)
-touchgo // (c) 1995 - Ref 950906
-touchgon // (c) 1995 - Ref 950906
-touchgoe // (c) 1995 - Ref 950510-1
-wrally2 // (c) 1995 - Ref 950510
-maniacsp // (c) 1996 - Ref 922804/2 - (prototype)
-maniacsq // (c) 1996 - Ref 940411 - (unprotected)
-maniacsqa // (c) 1996 - Ref 940411
-snowboar // (c) 1996 - Ref 960419/1
-snowboara // (c) 1996 - Ref 960419/1
-bang // (c) 1998 - Ref ???
-bangj // (c) 1999 - Ref ???
-grtesoro // (c) 1999 - Ref ???
-grtesoro4 // (c) 1999 - Ref ???
-
-// Gaelco 3D games
-speedup // (c) 1996 - Ref ???
-speedup10 // (c) 1996 - Ref ???
-surfplnt // (c) 1997 - Ref 971223
-surfplnt40 // (c) 1997 - Ref 970514
-radikalb // (c) 1998 - Ref ???
-radikalba // (c) 1998 - Ref ???
-rollext // (c) 1999 - Ref 991015
-
-// SH-4 hardware
-atvtrack // (c) 2002 - Ref 020419
-atvtracka // (c) 2002 - Ref 020419
-smashdrv // (c) 2000
-
-/*
- Remaining Gaelco Games:
- =======================
- 2000: Football Power
-*/
-
-// Galeco PC based games
-tokyocop // (c) 2003 (Arcade TV Game List - P.168, Right, 19 from bottom)
-
-// Kaneko games
-hvyunit // (c) 1988 Kaneko
-hvyunitj // (c) 1988 Kaneko
-hvyunitjo // (c) 1988 Kaneko
-hvyunitu // (c) 1988 Kaneko
-djboy // (c) 1989 Kaneko
-djboyj // (c) 1989 Kaneko
-djboya // (c) 1989 Kaneko
-airbustr // (c) 1990 Kaneko + Namco
-airbustrj // (c) 1990 Kaneko + Namco (Japan)
-airbustrb // bootleg
-galpanic // (c) 1990 Kaneko
-galpanica // (c) 1990 Kaneko
-galsnew // (c) 1990 Kaneko
-galsnewa // (c) 1990 Kaneko
-galsnewj // (c) 1990 Kaneko
-galsnewk // (c) 1990 Kaneko
-galpani2 // (c) 1993 Kaneko
-galpani2e // (c) 1993 Kaneko
-galpani2e2 // (c) 1993 Kaneko
-galpani2g // (c) 1993 Kaneko
-galpani2t // (c) 1993 Kaneko
-galpani2i // (c) 1993 Kaneko
-galpani2gs // (c) 1993 Kaneko
-galpani2j // (c) 1993 Kaneko
-gp2quiz // (c) 1993 Kaneko
-gp2se // (c) 1994 Kaneko
-jchan // (c) 1995 Kaneko
-jchan2 // (c) 1995 Kaneko
-galpani3 // (c) 1995 Kaneko (World)
-galpani3j // (c) 1995 Kaneko (Japan)
-galpani3k // (c) 1995 Kaneko (Korea)
-galpani3hk // (c) 1995 Kaneko (Hong Kong)
-
-// Kaneko "AX System" games
-berlwall // (c) 1991 Kaneko
-berlwallt // (c) 1991 Kaneko
-berlwallk // (c) 1991 Kaneko (Korea, Inter license)
-packbang // (c) 1994 Kaneko (prototype)
-mgcrystl // (c) 1991 Kaneko (World)
-mgcrystlo // (c) 1991 Kaneko (World)
-mgcrystlj // (c) 1991 Kaneko + distributed by Atlus (Japan)
-blazeon // (c) 1992 Atlus
-sandscrp // (c) 1992 Face
-sandscrpa // (c) 1992 Face
-sandscrpb // (c) 1992 Face
-explbrkr // (c) 1992 Kaneko
-bakubrkr // (c) 1992 Kaneko
-shogwarr // (c) 1992 Kaneko
-shogwarru // (c) 1992 Kaneko
-fjbuster // (c) 1992 Kaneko
-brapboys // (c) 1992 Kaneko
-brapboysj // (c) 1992 Kaneko
-brapboysu // (c) 1992 Kaneko
-wingforc // (c) 1993 Atlus (Japan, prototype)
-bloodwar // (c) 1994 Kaneko
-oedfight // (c) 1994 Kaneko
-bonkadv // (c) 1994 Kaneko
-gtmr // (c) 1994 Kaneko
-gtmra // (c) 1994 Kaneko
-gtmrb // (c) 1994 Kaneko
-gtmro // (c) 1994 Kaneko
-gtmre // (c) 1994 Kaneko
-gtmrusa // (c) 1994 Kaneko (US)
-gtmr2 // (c) 1995 Kaneko
-gtmr2a // (c) 1995 Kaneko
-gtmr2u // (c) 1995 Kaneko
-
-// Kaneko "Super Nova System" games
-skns
-galpani4 // 1996.09 (c) 1996 Kaneko (Japan)
-galpani4k // 1996.09 (c) 1996 Kaneko (Korea)
-jjparads // 1996.12 (c) 1996 Electro Design Co. (Japan)
-sarukani // 1997.01 (c) 1997 Kaneko / Mediaworks (Japan)
-vblokbrk // 1997.?? (c) 1997 Kaneko / Mediaworks (Asia)
-galpanis // 1997.04 (c) 1997 Kaneko (Europe)
-galpanisj // 1997.04 (c) 1997 Kaneko (Japan)
-galpanisk // 1997.04 (c) 1997 Kaneko (Korea)
-sengekis // 1997.?? (c) 1997 Kaneko / Warashi (Asia)
-sengekisj // 1997.07 (c) 1997 Kaneko / Warashi (Japan)
-jjparad2 // 1997.12 (c) 1997 Electro Design Co. (Japan)
-cyvern // 1998.02 (c) 1998 Kaneko (US)
-cyvernj // 1998.02 (c) 1998 Kaneko (Japan)
-ryouran // 1998.07 (c) 1998 Electro Design Co. (Japan)
-ryourano // 1998.07 (c) 1998 Electro Design Co. (Japan)
-puzzloop // 1998.?? (c) 1998 Mitchell (Europe)
-puzzloope // 1998.?? (c) 1998 Mitchell (Europe)
-puzzloopj // 1998.12 (c) 1998 Mitchell (Japan)
-puzzloopa // 1998.?? (c) 1998 Mitchell (Asia)
-puzzloopk // 1998.?? (c) 1998 Mitchell (Korea)
-puzzloopu // 1999.05 (c) 1998 Mitchell (USA)
-galpans2 // 1999.02 (c) 1999 Kaneko (Japan)
-galpans2a // 1999.?? (c) 1999 Kaneko (Asia)
-galpansu // 1999.?? (c) 1999 Kaneko (Korea)
-senknow // 1999.04 (c) 1999 Kaneko / Kouyousha (Japan)
-panicstr // 1999.09 (c) 1999 Kaneko (Japan)
-teljan // 1999.11 (c) 1999 Electro Design Co. (Japan)
-gutsn // 2000.06 (c) 2000 Kaneko / Kouyousha (Japan)
-galpans3 // 2002.07 (c) 2002 Kaneko (Japan)
-
-// Seta games
-hanaawas // (c) SetaKikaku
-speedatk // CB-0 (c) SetaKikaku
-srmp1 // UB or UC?? (c) 1987
-srmp2 // UB or UC?? (c) 1987
-srmp3 // ZA-0? (c) 1988
-rmgoldyh // ZF-0? (c) 1988
-mjyuugi // (c) 1990 Visco
-mjyuugia // (c) 1990 Visco
-ponchin // (c) 1991 Visco
-ponchina // (c) 1991 Visco
-
-// Seta 1st Generation HW (seta.cpp)
-tndrcade // UA-0 (c) 1987 Taito
-tndrcadej // UA-0 (c) 1987 Taito
-twineagl // UA-2 (c) 1988 + Taito license
-downtown // UD-2 (c) 1989 + Romstar or Taito license (DSW)
-downtown2 // UD-2 (c) 1989 + Romstar or Taito license (DSW)
-downtownj // UD-2 (c) 1989 + Romstar or Taito license (DSW)
-downtownp // UD-2 (c) 1989 + Romstar or Taito license (DSW)
-usclssic // UE (c) 1989 + Romstar or Taito license (DSW)
-calibr50 // UH (c) 1989 + Romstar or Taito license (DSW)
-arbalest // UK (c) 1989 + Jordan, Romstar or Taito license (DSW)
-metafox // UP (c) 1989 + Jordan, Romstar or Taito license (DSW)
-setaroul // UF (c) 19?? Seta / Visco
-drgnunit // (c) 1989 Athena / Seta + Romstar or Taito license (DSW)
-wits // (c) 1989 Athena (Visco license)
-thunderl // (c) 1990 Seta + Romstar or Visco license (DSW)
-thunderlbl // (c) 1990 Seta + Romstar or Visco license (DSW) - bootleg with Tetris sound
-wiggie // (c) 1994 Promat (not genuine seta hardware, but based on thunderl code)
-superbar // (c) 1994 Promat (not genuine seta hardware, but based on thunderl code)
-jockeyc // (c) 1990 [Seta] (Visco license)
-rezon // (c) 1991 Allumer
-rezont // (c) 1991 Allumer / Taito
-stg // (c) 1991 Athena / Tecmo
-pairlove // (c) 1991 Athena
-blandia // (c) 1992 Allumer
-blandiap // (c) 1992 Allumer
-blockcar // (c) 1992 Visco
-blockcarb // bootleg
-qzkklogy // (c) 1992 Tecmo
-neobattl // (c) 1992 Banpresto / Sotsu Agency. Sunrise
-umanclub // (c) 1992 Tsuburaya Prod. / Banpresto
-zingzip // UY (c) 1992 Allumer + Tecmo
-zingzipbl // bootleg
-atehate // (C) 1993 Athena
-jjsquawk // (c) 1993 Athena / Able
-jjsquawko // (c) 1993 Athena / Able
-jjsquawkb // bootleg
-jjsquawkb2 // bootleg
-kamenrid // (c) 1993 Toei / Banpresto
-madshark // (c) 1993 Allumer
-msgundam // (c) 1993 Banpresto
-msgundam1 // (c) 1993 Banpresto
-daioh // (C) 1993 Athena
-daioha // (C) 1993 Athena
-daiohp // (C) 1993 Athena (prototype)
-daiohc // (C) 1993 Athena (93111A PCB conversion)
-oisipuzl // (c) 1993 SunSoft / Atlus
-triplfun // bootleg
-utoukond // (c) 1993 Banpresto + Tsuburaya Prod.
-qzkklgy2 // (c) 1993 Tecmo
-wrofaero // (c) 1993 Yang Cheng
-eightfrc // (c) 1994 Tecmo
-kiwame // (c) 1994 Athena
-krzybowl // (c) 1994 American Sammy
-magspeed // (c) 1994 Allumer
-orbs // (c) 1994 American Sammy
-keroppi // (c) 1993 Sammy
-keroppij // (c) 1993 Sammy
-extdwnhl // (c) 1995 Sammy Japan
-gundhara // (c) 1995 Banpresto
-gundharac // (c) 1995 Banpresto (Chinese, bootleg?)
-sokonuke // (c) 1995 Sammy Industries
-zombraid // (c) 1995 American Sammy
-zombraidp // (c) 1995 American Sammy
-zombraidpj // (c) 1995 Sammy Industries Co.,Ltd.
-crazyfgt // (c) 1998 Subsino
-inttoote // (c) 1998 Coinmaster
-inttootea // (c) 1998 Coinmaster
-
-// Seta 2nd Generation HW (seta2.cpp)
-gundamex // (c) 1994 Banpresto
-grdians // (c) 1995 Banpresto
-mj4simai // (c) 1996 Maboroshi Ware
-myangel // (c) 1996 Namco
-myangel2 // (c) 1997 Namco
-reelquak // (c) 1997 <unknown>
-endrichs // (c) 199? E.N.Tiger
-pzlbowl // (c) 1999 Nihon System / Moss
-namcostr // (c) 2000 Namco
-penbros // (c) 2000 Subsino
-deerhunt // (c) 2000 Sammy USA Corporation
-deerhunta // (c) 2000 Sammy USA Corporation
-deerhuntb // (c) 2000 Sammy USA Corporation
-deerhuntc // (c) 2000 Sammy USA Corporation
-deerhuntd // (c) 2000 Sammy USA Corporation
-deerhunte // (c) 2000 Sammy USA Corporation
-turkhunt // (c) 2001 Sammy USA Corporation
-wschamp // (c) 2001 Sammy USA Corporation
-wschampa // (c) 2001 Sammy USA Corporation
-wschampb // (c) 2001 Sammy USA Corporation
-funcube // (c) 2000 Namco
-funcube2 // (c) 2001 Namco
-funcube3 // (c) 2001 Namco
-funcube4 // (c) 2001 Namco
-funcube5 // (c) 2002 Namco
-trophyh // (c) 2002 Sammy USA Corporation
-
-// SSV System (Seta, Sammy, Visco) games
-srmp4 // (c) 1993 Seta
-srmp4o // (c) 1993 Seta
-twineag2 // (c) 1994 Seta
-srmp7 // (c) 1997 Seta
-dynagear // (c) 1993 Sammy
-survarts // (c) 1993 Sammy
-survartsu // (c) 1993 Sammy (American)
-survartsj // (c) 1993 Sammy
-eaglshot // (c) 1994 Sammy
-hypreact // (c) 1995 Sammy
-meosism // (c) 1996?Sammy
-hypreac2 // (c) 1997 Sammy
-sxyreact // (c) 1998 Sammy
-sxyreac2 // (c) 1999 Sammy
-cairblad // (c) 1999 Sammy
-keithlcy // (c) 1993 Visco
-drifto94 // (c) 1994 Visco
-janjans1 // (c) 1996 Visco
-stmblade // (c) 1996 Visco
-stmbladej // (c) 1996 Visco
-jsk // (c) 1997 Visco
-koikois2 // (c) 1997 Visco
-mslider // (c) 1997 Visco / Datt Japan
-ryorioh // (c) 1998 Visco
-janjans2 // (c) 2000 Visco
-vasara // (c) 2000 Visco
-vasara2 // (c) 2001 Visco
-vasara2a // (c) 2001 Visco
-
-ultrax // (c) 1995 Banpresto
-ultraxg // review build
-gdfs // (c) 1995 Banpresto
-
-jclub2 // (c) 199? Seta
-jclub2o // (c) 199? Seta
-jclub2ob // (c) 199? Seta
-darkhors // bootleg of Jockey Club II
-
-// ST-0016 based games (ST-0016 is a SoC Z80-based HW)
-// plain ST-0016
-renju // (c) 1994 Visco
-koikois // (c) 1995 Seta
-nratechu // (c) 1996 Seta
-dcrown // 199? unknown
-dcrowna // 199? unknown
-gostop // 2001 Visco
-// R3000 + ST-0016
-srmp5 // (c) 199? Seta
-speglsht // (c) 1994 Seta
-// V810 + ST-0016
-mayjinsn // (c) 1994 Seta
-mayjisn2 // (c) 1994 Seta
-
-// Seta System S12
-srmp6 // (c) 1996 Seta (Japan)
-
-// Seta Aleck64 and similar (N64 based)
-aleck64 // (c) 1998 Nintendo/Seta
-11beat // (c) 1998 Hudson
-mtetrisc // (c) 1998 Capcom
-starsldr // (c) 1998 Hudson/Seta
-vivdolls // (c) 1998 Visco
-srmvs // (c) 1999 Seta
-twrshaft // (c) 2003 Aruze
-hipai // (c) 2003 Seta/Aruze (Arcade TV Game List - P.92, Right, 16 from top)
-doncdoon // (c) 2003 Aruze (Arcade TV Game List - P.90, Right, 8 from bottom)
-kurufev // (c) 2003 Aruze (Arcade TV Game List - P.75, Right, 1st entry on top)
-mayjin3 // (c) 2000 Seta (Arcade TV Game List - P.101, Right, 9 from top)
-
-// Atlus games
-powerins // (c) 1993 Atlus (USA)
-powerinsj // (c) 1993 Atlus (Japan)
-powerinsa // (c) 1993 Atlus (bootleg of USA version)
-powerinsb // (c) 1993 Atlus (bootleg of USA version)
-ohmygod // (c) 1993 Atlus (Japan)
-naname // (c) 1994 Atlus (Japan)
-blmbycar // (c) 1994 ABM & Gecas - uses same gfx chip as powerins?
-blmbycaru // (c) 1994 ABM & Gecas - uses same gfx chip as powerins?
-watrball // (c) 1996 ABM
-bowltry // (c) 200? Atlus
-
-// Sun Electronics / SunSoft games
-dai3wksi // 1979.09 Dai San Wakusei (The Third Planet)
-speakres // [Sun Electronics]
-speakresb // bootleg
-stratvox // [1980 Sun Electronics] Taito
-stratvoxb // bootleg
-spacecho // bootleg
-spacecho2 // bootleg
-route16 // (c) 1981 Tehkan/Sun + Centuri license
-route16a // (c) 1981 Tehkan/Sun + Centuri license
-route16c // (c) 1981 Tehkan/Sun + Centuri license
-route16bl // bootleg
-routex // bootleg
-ttmahjng // Taito
-fnkyfish // (c) 1981 Sun Electronics
-kangaroo // (c) 1982 Sun Electronics
-kangarooa // 136008 (c) 1982 Atari
-kangaroob // (bootleg)
-arabian // TVG13 (c) 1983 Sun Electronics
-arabiana // 136019 (c) 1983 Atari
-markham // TVG14 (c) 1983 Sun Electronics
-strnskil // TVG15 (c) 1984 Sun Electronics
-guiness // TVG15 (c) 1984 Sun Electronics
-pettanp // TVG16 (c) 1984 Sun Electronics (Japan)
-banbam // TVG16 (c) 1984 Sun Electronics
-ikki // TVG17 (c) 1985 Sun Electronics (Japan)
-farmer // TVG17 (c) 1985 Sun Electronics
-shanghai // (c) 1988 Sunsoft (Sun Electronics)
-shanghaij // (c) 1988 Sunsoft (Sun Electronics)
-shangha2 // (c) 1989 Sunsoft (Sun Electronics)
-shangha2a // (c) 1989 Sunsoft (Sun Electronics)
-shangha3 // (c) 1993 Sunsoft
-shangha3u // (c) 1993 Sunsoft
-shangha3j // (c) 1993 Sunsoft
-heberpop // (c) 1994 Sunsoft / Atlus
-blocken // (c) 1994 KID / Visco
-/*
- Other Sun games
- 1978.11 (GT)Block Perfect
- 1978.12 (GT)Block Challenger
- 1979.04 Galaxy Force
- 1979.07 Run Away
- 1979.12 Warp 1
- 1980.10 Cosmo Police (Cosmopolis?)
-*/
-
-// SunA games
-goindol // (c) 1987 Sun a Electronics
-goindolu // (c) 1987 Sun a Electronics
-goindolk // (c) 1987 Sun a Electronics
-homo // bootleg
-rranger // (c) 1988 SunA + Sharp Image license (distributed by CAPCOM)
-rrangerb // bootleg
-sranger // (c) 1988
-srangero // (c) 1988
-srangerb // bootleg
-srangern // (c) 1988 SunA (NOVA License)
-srangerw // (c) 1988 SunA (WDK License)
-hardhead // (c) 1988 SunA
-hardheadb // bootleg
-hardheadb2 // bootleg
-pop_hh // bootleg
-sparkman // (c) 1989 SunA
-sparkmana // (c) 1989 SunA
-starfigh // (c) 1990 SunA
-hardhea2 // (c) 1991 SunA
-hardhea2b // bootleg
-brickzn // (c) 1992 SunA
-brickznv5 // (c) 1992 SunA
-brickznv4 // (c) 1992 SunA
-brickzn11 // (c) 1992 SunA
-bestbest // (c) 1994 SunA
-sunaq // (c) 1994 SunA
-bssoccer // (c) 1996 SunA
-bssoccera // (c) 1996 SunA
-uballoon // (c) 1996 SunA
-go2000 // (c) 2000 SA
-
-// Dooyong games
-gundealr // (c) 1990 Dooyong
-gundealra // (c) 1990 Dooyong
-gundealrt // (c) 1990 Tecmo
-gundealrbl // bootleg
-yamyam // (c) 1990 Dooyong
-yamyamk // (c) 1990 Dooyong
-wiseguy // (c) 1990 Dooyong
-lastday // (c) 1990 Dooyong
-lastdaya // (c) 1990 Dooyong
-ddaydoo // (c) 1990 Dooyong
-gulfstrm // (c) 1991 Dooyong
-gulfstrma // (c) 1991 Dooyong
-gulfstrmb // (c) 1991 Dooyong
-gulfstrmm // (c) 1991 Dooyong + distributed by Media Shoji
-pollux // (c) 1991 Dooyong
-polluxa // (c) 1991 Dooyong
-polluxa2 // (c) 1991 Dooyong
-polluxn // (c) 1991 NTC
-flytiger // (c) 1992 Dooyong
-flytigera // (c) 1992 Dooyong
-bluehawk // (c) 1993 Dooyong
-bluehawkn // (c) 1993 NTC
-sadari // (c) 1993 NTC
-gundl94 // (c) 1994 Dooyong
-primella // (c) 1994 NTC
-superx // (c) 1994 NTC
-superxm // (c) 1994 Mitchell
-rshark // (c) 1995 Dooyong
-popbingo // (c) 1996 Dooyong
-
-// Tong Electronic games
-leprechn // (c) 1982
-potogold // (c) 1982
-leprechp // (c) 1982
-piratetr // (c) 1982
-beezer // (c) 1982
-beezer1 // (c) 1982
-
-// Comad games
-pushman // (c) 1990 Comad
-pushmana // (c) 1990 Comad
-pushmans // (c) 1990 Comad + American Sammy license
-pushmant // (c) 1990 Comad + Top Tronic license
-bballs // (c) 1991 Comad
-bballsa // (c) 1991 Comad
-zerozone // (c) 1993 Comad
-lvgirl94 // (c) 1994 Comad
-hotpinbl // (c) 1995 Comad & New Japan System
-galspnbl // (c) 1996 Comad
- // the following ones run on modified Gals Panic hardware
-fantasia // (c) 1994 Comad & New Japan System
-fantasiaa // (c) 1994 Comad & New Japan System
-fantasiab // (c) 1994 Comad & New Japan System
-supmodel // (c) 1994 Comad & New Japan System
-fantasian //
-newfant // (c) 1994 Comad & New Japan System
-newfanta // (c) 1995 Comad & New Japan System
-fantsy95 // (c) 1995 Hi-max Technology Inc.
-zipzap // (c) 1995 Barko Corp
-missw96 // (c) 1996 Comad
-missw96a // (c) 1996 Comad
-missw96b // (c) 1996 Comad
-missw96c // (c) 1996 Comad
-missmw96 // (c) 1996 Comad
-smissw //
-fantsia2 // (c) 1997 Comad
-fantsia2a // (c) 1997 Comad
-fantsia2n // (c) 1998 Comad
-wownfant // (c) 2002 Comad
-pgalvip // (c) 1996 ACE International (Afega stickers on ROMs)
-pgalvipa //
-galhustl // (c) 1997 ACE International
-
-// Playmark games
-sslam // (c) 1993 - hack of Namco's Super World Court
-sslama // ^
-sslamb // ^
-powerbal // (c) 1994
-powerbals // (c) 1994
-magicstk // (c) 1995
-hotminda // (c) 1995
-bigtwin // (c) 1995
-bigtwinb // (c) 1995
-wbeachvl // (c) 1995
-wbeachvl2 // (c) 1995
-wbeachvl3 // (c) 1995
-excelsr // (c) 1995
-excelsra // (c) 1995
-hotmind // (c) 1995
-luckboomh // (c) 1995
-hrdtimes // (c) 1994
-hrdtimesa // (c) 1994
-drtomy // (c) 1993 no copyright message (1993 on pcb), some code taken from 'Big Karnak'
-sderby // (c) 1996
-sderbya // (c) 1996
-croupier // (c) 1997 Playmark
-croupiera // (c) 1997 Playmark
-spacewin
-luckboom
-
-// Pacific Novelty games
-sharkatt // (c) 1980
-thief // (c) 1981
-natodef // (c) 1982
-natodefa // (c) 1982
-mrflea // (c) 1982
-
-// Tecfri games
-ambush // (c) 1983
-ambushh // (c) 1983
-ambushj // (c) 1983 Nippon Amuse license
-ambushv // (c) 1983 Volt Electronics license
-holeland // (c) 1984
-crzrally // (c) 1985
-crzrallya // (c) 1985
-crzrallyg // (c) 1985
-speedbal // (c) 1987
-musicbal // (c) 1987
-sauro // (c) 1987
-saurop // (c) 1987
-saurorr // (c) 1987
-trckydoc // (c) 1987
-trckydoca // (c) 1987
-
-// Metro games
-karatour // (c) 1992 Mitchell
-karatourj // (c) 1992 Mitchell
-ladykill // (c) 1993 Yanyaka + Mitchell license - (Arcade TV Game List - P.101, Right, 2 from Bottom)
-moegonta // (c) 1993 Yanyaka (Japan) (Arcade TV Game List - P.101, Right, 2 from Bottom)
-pangpoms // (c) 1992
-pangpomsm // (c) 1992 Mitchell / Metro
-skyalert // (c) 1992
-poitto // (c) 1993 Metro / Able Corp.
-dharma // (c) 1994
-dharmaj // (c) 1994
-dharmak // (c) 1994
-lastfort // (c) 1994
-lastforte // (c) 1994
-lastfortea // (c) 1994
-lastfortk // (c) 1994
-lastfortg // (c) 1994
-toride2g // (c) 1994
-toride2gg // (c) 1994
-toride2gk // (c) 1994
-toride2j // (c) 1994
-gunmast // (c) 1994
-daitorid // (c) 1995
-daitorida // (c) 1996
-dokyusei // (c) 1995 Make Software / Elf / Media Trading
-dokyusp // (c) 1995 Make Software / Elf / Media Trading
-msgogo // (c) 1995 Metro
-puzzli // (c) 1995 Metro / Banpresto
-3kokushi // (c) 1996 Mitchell
-pururun // (c) 1995 Metro / Banpresto
-balcube // (c) 1996
-mouja // (c) 1996 Etona (Japan)
-bangball // (c) 1996 Banpresto / Kunihiko Tashiro+Goodhouse
-batlbubl // (c) 1996 Banpresto / Kunihiko Tashiro+Goodhouse
-gakusai // (c) 1997 MakeSoft
-gakusai2 // (c) 1998 MakeSoft
-blzntrnd // (c) 1994 Human Amusement
-gstrik2 // (c) 1996 Human Amusement
-gstrik2j // (c) 1996 Human Amusement
-hyprduel // (c) 1993 Technosoft (Japan)
-hyprduel2 // (c) 1993 Technosoft (Japan)
-magerror // (c) 1994 Technosoft (Japan) (Arcade TV Game List - P.100, Left, 13 from Bottom)
-puzzlet // (c) 2000 Yunizu Corporation (Japan)
-
-// Venture Line games
-spcforce // (c) 1980 Venture Line
-spcforc2 // bootleg
-meteor // (c) 1981 Venture Line
-meteors // (c) 1981 Amusement World
-looping // (c) 1982 Video Games GmbH
-loopingv // (c) 1982 Video Games GmbH (Venture Line license)
-loopingva // (c) 1982 Video Games GmbH (Venture Line license)
-skybump // (c) 1982 Venture Line
-suprridr // (c) 1983 Venture Line + Taito license
-
-// Yun Sung games
-paradise // (c) 1994 Yun Sung
-paradisea // (c) 1994 Yun Sung
-paradisee // (c) 1994 Yun Sung (Escape license)
-paradlx // (c) >1994 Yun Sung
-para2dx // (c) >1994 Yun Sung
-penky // (c) 1995 Yun Sung
-tgtball // (c) 1995 Yun Sung
-tgtballa // (c) 1995 Yun Sung
-torus // (c) 1996 Yun Sung
-paprazzi // (c) 1996 Yun Sung
-madball // (c) 1998 Yun Sung
-madballn // (c) 1998 Yun Sung
-cannball // (c) 1995 Yun Sung / Soft Visio
-cannballv // (c) 1995 Yun Sung / T&K
-magix // (c) 1995 Yun Sung
-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
-shockingko // (c) 1997 Yun Sung
-bombkick // (c) 1998 Yun Sung
-bombkicka // (c) 1998 Yun Sung
-nmg5 // (c) 1998 Yun Sung
-nmg5a // (c) 1998 Yun Sung
-nmg5e // (c) 1998 Yun Sung
-searchey // (c) 1999 Yun Sung (English, Korean, Japanese & Spanish)
-searcheya // (c) 1999 Yun Sung (English & Korean only)
-searchp2 // (c) 1999 Yun Sung
-pclubys // (c) 2000 Yun Sung
-pclubysa // (c) 2000 Yun Sung
-garogun // (c) 2000 Yun Sung
-7ordi // (c) 2002 Yun Sung
-wondstck // (c) ???? Yun Sung
-wondstcka // (c) ???? Yun Sung
-
-// Zilec games
-blueprnt // (c) 1982 Bally Midway (Zilec in ROM 3U, and the programmer names)
-blueprntj // (c) 1982 Jaleco (Zilec in ROM 3U, and the programmer names)
-saturnzi // (c) 1983 Jaleco (Zilec in ROM R6, and the programmer names)
-grasspin // (c) 1983 Jaleco (Zilec / Ashby programmer names in sound rom)
-
-// Fuuki FG-2 games
-gogomile // (c) 1995
-gogomileo // (c) 1995 (Japan)
-pbancho // (c) 1996 (Japan)
-
-// Fuuki FG-3 games
-asurabld // (c) 1998 (Japan)
-asurabus // (c) 2000 (Japan)
-asurabusa // review build
-
-// Unico games
-drgnmst // (c) 1994
-burglarx // (c) 1997
-zeropnt // (c) 1998
-zeropnta // (c) 1998
-zeropntj // (c) 1998 (Japan)
-zeropnt2 // (c) 1999
-silkroad // (c) 1999
-silkroada // (c) 1999
-aoh // (c) 2001
-
-// Afega games
-twinactn // (c) 1995 - bootleg of US AFF Mustang
-dolmen // (c) 1995
-stagger1 // (c) 1998
-redhawk // (c) 1997 New Vision Ent. license
-redhawke // (c) 1997 Excellent Co., Ltd license
-redhawki // (c) 1997 Haedong Corp. license
-redhawkb // (c) 1997
-redhawkk // (c) 1997
-grdnstrm // (c) 1998 Apples Industries license
-grdnstrmv // (c) 1998 Apples Industries license
-grdnstrmk // (c) 1998 (Korea)
-grdnstrmg // (c) 1998
-grdnstrmj // (c) 1998 (Japan)
-redfoxwp2 // (c) 1998 (China)
-redfoxwp2a // (c) 1998 (China)
-bubl2000 // (c) 1998 Tuning
-hotbubl // (c) 1998 Pandora (Korea, Nudes)
-hotbubla // (c) 1998 Pandora (Korea)
-popspops // (c) 1999
-firehawk // (c) 2001 ESD
-firehawkv // (c) 2001 ESD
-mangchi // (c) 2000
-spec2k // (c) 2000 Yonatech
-spec2kh // (c) 2000 Yonatech
-
-// ESD games
-// http://www.esdgame.co.kr/english/
-multchmp // (c) 1999 (World)
-multchmpk // (c) 1998 (Korea)
-multchmpa // (c) 1998 (World)
-mchampdx // (c) 1999 ESD
-mchampdxa // (c) 1999 ESD
-mchampdxb // (c) 1999 ESD
-hedpanic // (c) 2000 ESD
-hedpanicf // (c) 2000 ESD + Fuuki, Co. Ltd.
-hedpanico // (c) 1999 ESD
-deluxe5 // (c) 2000 ESD
-deluxe5a // (c) 2000 ESD
-deluxe5b // (c) 2000 ESD
-tangtang // (c) 2000 ESD
-swatpolc // (c) 2001 ESD
-
-// Dyna Electronics / Dynax / Nakanihon games
-royalmj // (c) 1982 Nichibutsu
-openmj // (c) 1982 Nichibutsu
-royalmah // Falcon bootleg
-janyoup2 // Falcon bootleg
-janputer // (c) 1982 Taito
-janoh // (c) 1984 Toaplan
-janoha // (c) 1984 Toaplan
-jansou // (c) 1985 Dyna
-jansoua // (c) 1985 Dyna
-tahjong // (c) 1985 Bally Pond / Nasco
-mjsiyoub // (c) 1986 Visco
-mjsenka // (c) 1986 Visco
-mjyarou // (c) 1986 Visco / Video System
-mjclub // (c) 1986 Xex
-daisyari // (c) 1989 Best System
-ippatsu // 01? (c) 1986 Dyna Electronics
-hnayayoi // "02" (c) 1987 Dyna Electronics
-dondenmj // "03" (c) 1986 Dyna Electronics
-suzume // 04? (c) 1986 Dyna Electronics
-makaijan // "05" (c) 1987 Dynax
-hnfubuki // "06" (c) 1987 Dynax
-mjdiplob // "07" (c) 1987 Dynax
-untoucha // "08" (c) 1987 Dynax
-tontonb // "09" (c) 1987 Dynax
-mjapinky // "14" (c) 1988 Dynax
-hanamai // "16" (c) 1988 Dynax
-majs101b // "17" (c) [1988] Dynax
-janyuki // ?? (c) 1988 Dynax
-hnkochou // "20" (c) 1989 Dynax
-mjdejavu // "21" (c) 1989 Dynax
-mjdejav2 // "21" (c) 1989 Dynax
-mjderngr // "22" (c) 1989 Dynax
-hnoridur // "23" (c) 1989 Dynax
-drgpunch // "24" (c) 1989 Dynax
-mjfriday // "26" (c) 1989 Dynax
-jantouki // "27" Jantouki 1989 Dynax
-gekisha // "28" (c) 1989 Dynax
-mjifb // "29" (c) 1990 Dynax
-mjifb2 // "29" (c) 1990 Dynax
-mjifb3 // "29" (c) 1990 Dynax
-sprtmtch // "31" (c) 1989 Dynax + Fabtek license
-mcnpshnt // "33" Mahjong Campus Hunting 1990 Dynax
-7jigen // "37" 7jigen no Youseitachi 1990 Dynax
-mjembase // "38" Mahjong Electromagnetic Base 1989 Dynax
-majxtal7 // "40" (c) 1990 Dynax
-neruton // "45" Mahjong Neruton Haikujiradan 1990 Dynax
-nerutona // "45" Mahjong Neruton Haikujiradan 1990 Dynax
-hjingi // ?? (c) 1990 Dynax
-hjingia // ?? (c) 1990 Dynax
-tenkai // (c) 1991 Dynax
-tenkai2b // (c) 1991 bootleg
-tenkaibb // (c) 1991 bootleg
-tenkaicb // (c) 1991 bootleg
-tenkaie // (c) 1991 Dynax
-mjvegas // "50" 1991 Dynax
-mjvegasa // "50" 1991 Dynax
-mjdialq2 // "52" (c) 1991 Dynax
-mjdialq2a // "52" (c) 1991 Dynax
-yarunara // "55" Mahjong Yarunara 1991 Dynax
-hanayara // "55" (c) 1991 Dynax
-mjcomv1 // "61" (c) 1991 Dynax
-mjangels // "612" Mahjong Angels 1991 Dynax
-ougonpai // "62" (c) 1991 Dynax
-ougonpaib // "62" (c) 1991 bootleg
-cafetime // "63" (c) 1992 Dynax
-quiztvqq // "64" Quiz TV Gassyuukoku Q&Q 1992 Dynax
-htengoku // "65" (c) 1992 Dynax
-mmpanic // "70" (c) 1992 Nakanihon/Taito
-mjmyornt // "71" (c) 1992 Dynax
-mjmyorn2 // "71?" (c) 1993 Dynax
-mjelctrn // ?? Mahjong Electron Base parts 2 & 4
-mjelct3 // ?? Mahjong Electron Base parts 2 & 3
-mjelct3a // ?? Mahjong Electron Base parts 2 & 3
-mjelctrb // ?? (c) 1993 bootleg Mahjong Electron Base parts 2 & 4
-quizchq // "73" (c) 1993 Nakanihon
-quizchql // "73" (c) 1993 Laxan
-funkyfig // "74" (c) 1993 Nakanihon + East Technology
-funkyfiga // "74" (c) 1993 Nakanihon + East Technology
-animaljr // "75" (c) 1993 Nakanihon/Taito (USA)
-animaljrs // "75" (c) 1993 Nakanihon/Taito (Spanish version)
-animaljrj // "75" (c) 1993 Nakanihon/Taito (Japan)
-cafedoll // "76" (c) 1993 Dynax
-mjmyster // "77" (c) 1994 Dynax
-mjmywrld // "77" (c) 1994 Dynax
-quiz365 // "78" (c) 1994 Nakanihon
-quiz365t // "78" (c) 1994 Nakanihon (Taiwan)
-rongrong // "80" (c) 1994 Nakanihon
-rongrongj // "80" (c) 1994 Nakanihon
-rongrongg // "80" (c) 1994 Nakanihon
-hginga // "81" (c) 1994 Dynax
-mjmyuniv // "85" (c) 1994 Dynax
-mjreach // (c) 1994 bootleg
-cdracula // (c) 1994 Y.S.E.
-mjtensin // "100" (c) 1995 Dynax
-hparadis // "101" (c) 1994 Nakanihon
-nettoqc // "103" (c) 1995 Nakanihon
-ultrchmp // "104" (c) 1995 Nakanihon
-ultrchmph // "114" (c) 1995 Nakanihon
-majrjhdx // "105" (c) 1996 Dynax
-hgokou // "108" (c) 1995 Dynax (Alba license)
-mjdchuka // "111" (c) 1995 Nakanihon
-ddenlovj // "112" (c) 1995 Dynax (Japan)
-ddenlovrk // "113" (c) 1995 Dynax (Korea)
-ddenlovr // "113" (c) 1996 Dynax (Hong Kong)
-mjschuka // "115" (c) 1995 Dynax
-hgokbang // "116" (c) 1995 Dynax
-mjchuuka // "121" (c) 1998 Dynax
-ddenlovrb // bootleg
-mjflove // "500" (c) 1996 Dynax
-akamaru // "501" (c) 1996 Dynax
-sryudens // "502" (c) 1996 Dynax / Face
-janptr96 // "503" (c) 1996 Dynax
-hanakanz // "507" (c) 1996 Dynax
-hkagerou // "510" Hana Kagerou 1996 Nakanihon
-janptrsp // "511" (c) 1997 Dynax
-realbrkj // "523" Billiard Academy Real Break 1998 (Japan)
-dai2kaku // "522" DaiDaiKakumei (Japan)
-mjreach1 // "526" Mahjong Reach Ippatsu 1998 Nihon System/Dynax
-cafebrk // "528" Mahjong Cafe Break (C) 1999 Nakanihon / Dynax
-jongtei // "532" Mahjong Jong-Tei (C) 1999 Dynax
-seljan2 // "557" 1996 Dynax / Face
-realbrk // "600" Billiard Academy Real Break 1998 (Europe)
-realbrko // "600" Billiard Academy Real Break 1998 (Europe)
-realbrkk // "600" Billiard Academy Real Break 1998 (Korea)
-janshinp // "700j" 1996 Dynax / Sigma
-dtoyoken // "700d" 1996 Dynax / Sigma
-cafepara // "001" 1999 Techno-Top
-mjgnight // "003" 2000 Techno-Top
-daimyojn // "017" 2002 Dynax / Techno-Top
-momotaro // "027" 2004 Techno-Top
-kotbinyo // 1997 Dynax / Shinwhajin
-kotbinsp // "909" 1997 Dynax / Shinwhajin
-
-pkgnsh // "505" Pachinko Gindama Shoubu 1998 (Japan)
-pkgnshdx // "522" Pachinko Gindama Shoubu DX 1998 (Japan)
-
-maya // (c) 1994 Promat
-mayaa // (c) 1994 Promat
-mayab // (c) 1994 Promat
-mayac // (c) 1994 Promat
-inca // (c) 199? ????
-blktouch // (c) Yang Gi Co Ltd.
-shpeng // (c) 1995 WSAC Systems
-
-// Sigma games
-nyny // (c) 1980 Sigma Ent. Inc.
-nynyg // (c) 1980 Sigma Ent. Inc. + Gottlieb
-warcadia // (c) 1982 Sigma Ent. Inc.
-r2dtank // (c) 1980 Sigma Ent. Inc.
-spiders // (c) 1981 Sigma Ent. Inc.
-spiders2 // (c) 1981 Sigma Ent. Inc.
-spiders3 // (c) 1981 Sigma Ent. Inc.
-spinner // bootleg
-sub // (c) 1985 Sigma Ent. Inc.
-
-// Sigma B52
-jwildb52 // (c) 199? Sigma
-jwildb52a // (c) 199? Sigma
-jwildb52h // (c) 199? Sigma
-s8waysfc // (c) 199? Sigma
-
-// Sigma B98 / Sammy Medal Games
-dodghero // b9802 (c) 1997 Sigma
-sushimar // b9803 (c) 1997 Sigma
-gegege // b9804 (c) 1997 Sigma / Banpresto
-b3rinsya // b9805 (c) 1997 Sigma
-pepsiman // b9806 (c) 1997 Sigma
-tbeastw2 // b9808 (c) 1998 Sigma / Transformer Production Company / Takara
-ucytokyu // b9809 (c) 1997 Sigma
-dashhero // b9811 (c) 1999 Sigma
-sammymdl // (c) 2000-2003 Sammy
-animalc // (c) 2000 Sammy
-itazuram // (c) 2000 Sammy
-pyenaget // (c) 2000 Sammy
-tdoboon // (c) 2000 Sammy
-haekaka // (c) 2001 Sammy
-
-// IGS games (www.igs.com.tw)
-goldstar // (c) 198? IGS
-goldstbl // (c) 198? IGS
-moonlght // bootleg
-moonlghta // bootleg
-moonlghtb // bootleg
-moonlghtc // bootleg
-chry10 // bootleg
-chrygld // bootleg
-chryglda // bootleg
-goldfrui // bootleg
-wcherry // bootleg
-super9 // (c) 2001 Playmark
-cabaret // (c) 1992 AMT
-cpoker // (c) 1993? IGS
-cpokert // (c) 1993? Tuning
-csk227it // (c) 198? IGS
-csk234it // (c) 198? IGS
-igs_ncs // (c) 198? IGS
-igs_ncs2 // (c) 2000 IGS
-spk115it // (c) 199? IGS
-spk116it // (c) 199? IGS
-kungfu // (c) 1992 IGS
-jackie // (c) 1993 IGS
-pktet346 // (c) 199? IGS
-cpokerx // (c) 1993 IGS
-chleague // (c) 199? IGS
-chleagul // (c) 199? IGS
-number10 // (c) IGS (Board labeled Playmark Srl)
-numbr10l // (c) IGS (Board labeled Playmark Srl)
-cpokerpk // (c) SGS (bootleg blue board)
-cpokerpkg // (c) SGS (bootleg green board)
-citalcup // (c) SGS (bootleg of IGS v220it)
-stellecu // (c) 1998
-iqblock // (c) 1993
-grndtour // (c) 1993
-5clown // (c) IGS 1993
-5clowna // (c) IGS 1993
-5clownsp // (c) IGS 1993
-
-// IGS005 + IGS006 + IGS007 + IGS008 Games
-lordgun // (c) 1994
-aliencha // (c) 1994
-alienchac // (c) 1994
-
-// IGS009 Games
-jingbell // (c) 1995?
-gp98 // (c) 1998
-
-// IGS011 Games
-lhb // (c) 1995
-lhbv33c // (c) 1995
-ryukobou // (c) 1995
-dbc // (c) 199?
-lhb2 // (c) 1996
-xymg // (c) 1996
-wlcc // (c) 1996
-vbowl // (c) 1996
-vbowlj // (c) 1996
-drgnwrld // (c) 1997
-drgnwrldv30 // (c) 1995
-drgnwrldv21 // (c) 1995
-drgnwrldv21j // (c) 1995
-drgnwrldv20j // (c) 1995
-drgnwrldv10c // (c) 1995
-drgnwrldv11h // (c) 1995
-drgnwrldv40k
-nkishusp // (c) 1998
-
-// IGS017 / IGS031 Games
-iqblocka // (c) 1996
-iqblockf // (c) 1996
-tjsb // (c) 1997
-spkrform // (c) ????
-sdmg2 // (c) 1997
-mgdh // (c) 1997
-mgdha // (c) 1997
-mgcs // (c) 1998
-lhzb2 // (c) 1998
-lhzb2a // (c) 1998
-slqz2 // (c) 1998
-tarzan // (c) 1999?
-tarzana // (c) 1999?
-starzan // (c) 2000?
-
-// IGS027A Cpu Games
-slqz3 // (c) 1999
-amazonia // (c) 1999
-fruitpar // (c) 200?
-zhongguo // (c) 2000
-sdwx // (c) 2002
-amazoni2 // (c) 2002
-sddz // (c) 200?
-lhzb3 // (c) 200?
-lhzb4 // (c) 200?
-klxyj // (c) 200?
-mgfx // (c) 200?
-gonefsh2 // (c) 200?
-chessc2 // (c) 200?
-haunthig // (c) 200?
-fearless // (c) 2006
-
-// IGS036 Cpu Games
-cjdh2 // (c) 200?
-cjdh2a // (c) 200?
-cjdh2b // (c) 200?
-cjdh2c // (c) 200?
-cjddzsp // (c) 200?
-igsm312 // (c) 200?
-
-// IGS PGM System Games
-pgm // Base Unit
-orlegend // (c) 1997 Oriental Legend
-orlegende //
-orlegendc //
-orlegendca //
-orlegend111c //
-orlegend111t //
-orlegend111k //
-orlegend105k //
-drgw2 // (c) 1997 Dragon World 2
-dw2v100x //
-drgw2c //
-drgw2j //
-drgw2hk //
-drgw3 // (c) 1998 Dragon World 3
-drgw3105 //
-drgw3103 //
-drgw3100 //
-dwex // (c) 1998 Dragon World 3 EX
-killbld // (c) 1998 The Killing Blade
-killbld104 //
-kov // (c) 1999 Knights of Valor
-kov115 //
-kov100 //
-kovplus // (c) 1999 Knights of Valor Plus (aka 10 Character version)
-kovplusa //
-kovsgqyz // bootleg
-kovsgqyza // bootleg
-kovsgqyzb // bootleg
-kovsh // (c) 1999 Knights of Valor Superheroes
-kovsh103 //
-kovsh102 //
-kovsh101 //
-kovsh100 //
-kovqhsgs // bootleg
-photoy2k // (c) 1999 Photo Y2k
-photoy2k102 //
-photoy2k104 //
-puzlstar // (c) 1999 Puzzle Star
-olds // (c) 1999 Oriental Legend Super / Special
-olds100 //
-olds100a //
-olds103t //
-kov2 // (c) 2000 Knights of Valor 2
-kov2106 //
-kov2103 //
-kov2102 //
-kov2101 //
-kov2100 //
-kov2p // (c) 2000 Knights of Valor 2 Nine Dragons
-kov2p204 //
-kov2p202 //
-ddp2 // (c) 2001 DoDonPachi 2 - Bee Storm
-ddp2101 //
-ddp2100 //
-ddp2hk //
-ddp2101hk //
-ddp2100hk //
-ddp2k //
-ddp2101k //
-ddp2100k //
-ddp2j //
-ddp2101j //
-ddp2100j //
-ddp2t //
-ddp2101t //
-ddp2100t //
-ddp2c //
-ddp2101c //
-ddp2100c //
-puzzli2 // (c) 1999 Puzzli 2
-puzzli2s // (c) 2001 Puzzli 2 Super
-martmast // (c) 2001 Martial Masters
-martmastc //
-martmastc102 //
-theglad // (c) 2003 The Gladiator
-theglad100 //
-theglad101 //
-thegladpcb //
-dw2001 // (c) 2001 Dragon World 2001
-dwpc // (c) 2001 Dragon World Pretty Chance
-py2k2 // (c) 2001 Photo Y2K2
-pgm3in1 // (c) 2004 Photo Y2K2 3-in-1
-dmnfrnt // (c) 2002 Demon Front
-dmnfrnta //
-dmnfrntb //
-dmnfrntpcb //
-kovshp // (c) 2004 Knights of Valor Superheroes PLUS
-kovshpa //
-kovytzy // (c) 1999 Knights of Valour: Yi Tong Zhong Yuan
-kovshxas // bootleg
-kovlsqh // bootleg
-kovlsqh2 // bootleg
-kovlsjb // bootleg
-kovlsjba // bootleg
-oldsplus // (c) 2004 Oriental Legend Super Plus
-killbldp // (c) 2004 Killing Blade Plus
-happy6 // (c) 2004 Happy 6
-happy6101 //
-svg // (c) 2003 Spectral vs Generation
-svgtw
-svgpcb //
-ket // (c) 2002 Ketsui
-ket1 //
-keta //
-ketb //
-ketarr // hack
-ketarr151 // hack
-ketarr15 // hack
-ketarr10 // hack
-ketarrs151 // hack
-ketarrs15 // hack
-ketarrf // hack
-ddpdoj // (c) 2002 DoDonPachi Dai-Ou-Jou
-ddpdoja //
-ddpdojb //
-ddpdojblk //
-ddpdojblka //
-espgal // (c) 2003 Espgaluda
-
-// IGS PGM2 Platform
-orleg2 // (c) 2007
-orleg2o //
-orleg2oa //
-kov2nl // (c) 2008
-kov2nlo //
-kov2nloa //
-ddpdojh //
-kov3 //
-
-// IGS PC based HW
-speeddrv // (c) 2004
-eztouch // (c) 200?
-
-// Spirit Tech. Corp.
-dunhuang // (c) 1995
-
-// RamTek games
-hitme // (c) 05/1976 Ramtek
-hitme1 // (c) 05/1976 Ramtek
-m21 // (c) 08/1976 Mirco
-barricad // (c) 1976 Ramtek
-brickyrd // (c) 1976 Ramtek
-starcrus // (c) 1977 Ramtek
-super21 // (c) 1978 Mirco
-
-// Omori games
-shuttlei // (c) 1979 Omori (Arcade Tv Game List - P.79, Left, 6 from bottom)
-skylove // (c) 1979 Omori
-battlex // (c) 1982 Omori E. Co., Ltd.
-carjmbre // (c) 1983 Omori Electric Co., Ltd.
-popper // (c) 1983 Omori Electric Co., Ltd.
-
-// TCH games
-speedspn // (c) 1994
-mstworld // (c) 1994
-kickgoal // (c) 1995
-actionhw // (c) 1995
-
-// U.S. Games games
-usg32 // (c) 1987
-superten // (c) 1988
-usg83x // (c) 1988
-usg82 // (c) 1988
-usgames // (c) 1992
-usg187c // (c) 1991
-usg185 // (c) 1990
-usg182 // (c) 1989
-
-// Sanritsu games
-mermaid // (c) 1982 Rock-ola, made by Sanritsu
-yachtmn // (c) 1982 [Sanritsu] Esco
-rougien // (c) 1982 Sanritsu
-drmicro // (c) 1983 Sanritsu
-jantotsu // (c) 1983 Sanritsu
-appoooh // (c) 1984 Sega, made by Sanritsu
-robowres // (c) 1986 Sega
-robowresb // bootleg
-bankp // (c) 1984 Sega, made by Sanritsu
-combh // (c) 1987 Sega, made by Sanritsu
-mjkjidai // (c) 1986 Sanritsu
-chinsan // (c) 1987 Sanritsu
-mayumi // (c) 1988 Victory L.L.C., made by Sanritsu
-
-// Rare games
-xtheball // (c) 1991 Rare
-btoads // (c) 1994 Rare
-kinst // (c) 1994 Rare
-kinst14 // (c) 1994 Rare
-kinst13 // (c) 1994 Rare
-kinstp // (c) 1994 Rare
-kinst2 // (c) 1995 Rare
-kinst2k4 // (c) 1995 Rare
-kinst213 // (c) 1995 Rare
-kinst2k3 // (c) 1995 Rare
-kinst211 // (c) 1995 Rare
-kinst210 // (c) 1995 Rare
-
-// Nihon System games
-gigas // (c) 1986 Sega
-gigasb // (c) 1986 bootleg
-gigasm2b // (c) 1986 bootleg
-oigas // (c) 1986 bootleg
-pbillrd // (c) 1987 Nihon System
-pbillrds // (c) 1987 Nihon System (Sega license?)
-pbillrdsa // (c) 1987 Nihon System (Sega license?)
-freekick // (c) 1988 Nihon System licensed to Merit (+ optional Sega) NS6201-A 1987.10
-freekicka // (c) 1988 Nihon System (+ optional Sega) NS6201-A 1987.9
-freekickb1 // (c) 1987 bootleg
-freekickb2 // (c) 1987 bootleg
-freekickb3 // (c) 1987 bootleg
-countrun // (c) 1988 Nihon System (+ optional Sega) NS6201-A 1988.3
-countrunb // (c) 1988 bootleg
-countrunb2 // (c) 1988 bootleg
-
-// Alba games
-rmhaihai // (c) 1985 Alba
-rmhaihib // (c) 1985 Alba
-rmhaijin // (c) 1986 Alba
-rmhaisei // (c) 1986 Visco
-themj // (c) 1987 Visco
-hanaroku // (c) 1988 Alba
-yumefuda // (c) 198? Alba
-
-// Home Data games
-hourouki // (c) 1987 Home Data
-mhgaiden // (c) 1987 Home Data
-mirderby // (c) 1988 Home Data?
-mjhokite // (c) 1988 Home Data
-mjclinic // (c) 1988 Home Data
-mrokumei // (c) 1988 Home Data
-reikaids // (c) 1988 Home Data
-mjkojink // (c) 1989 Home Data
-vitaminc // (c) 1989 Home Data
-mjyougo // (c) 1989 Home Data
-lemnangl // (c) 1990 Home Data
-mjkinjas // (c) 1991 Home Data
-battlcry // (c) 1991 Home Data
-jogakuen // (c) 1992 Windom corporation
-mjikaga // (c) 1991 Mitchell
-mjprivat // (c) 1991 Matoba
-
-// Art & Magic games
-ultennis // (c) 1993
-ultennisj // (c) 1993
-cheesech // (c) 1994
-stonebal // (c) 1994
-stonebal2 // (c) 1994
-shtstar // (c) 1994 Nova
-
-// Dynamo games
-skeetsht // (c) 1991
-popshot // (c) 1991 (prototype)
-toursol // (c) 1995 Dynamo
-toursol1 // (c) 1995 Dynamo
-
-// Taiyo games
-dynamski // (c) 1984 Taiyo
-chinhero // (c) 1984 Taiyo
-chinhero2 // (c) 1984 Taiyo
-chinhero3 // (c) 1984 Taiyo
-chinherot // (c) 1984 Taiyo
-shangkid // (c) 1985 Taiyo + Data East license
-hiryuken // (c) 1985 Taito
-
-// Tatsumi Games
-kingdrby // (c) 1981 Tatsumi
-kingdrbb // (c) 1986 hack
-kingdrbb2 // (c) 198? hack
-cowrace // (c) 20?? hack
-tx1 // (c) 1983 Tatsumi + Atari, Namco and Taito license
-tx1jb // (c) 1983 Tatsumi
-tx1jc // (c) 1983 Tatsumi
-// TX-1 V8 // (c) 1984 Tatsumi
-buggyboy // (c) 1985 Tatsumi
-buggyboyjr // (c) 1986 Tatsumi
-lockon // (c) 1986 Tatsumi
-lockonc // (c) 1986 Tatsumi
-// Gray-Out // (c) 1987 Tatsumi
-apache3 // (c) 1988 Tatsumi
-apache3a // (c) 1988 Tatsumi + Kana Corporation license
-roundup5 // (c) 1989 Tatsumi
-// Round Up 5 cockpit
-cyclwarr // (c) 1991 Tatsumi
-cyclwarra // (c) 1991 Tatsumi
-bigfight // (c) 1992 Tatsumi
-// Life // (c) 1997 Tatsumi
-
-// Electronic Devices
-mugsmash // (c) Electronic Devices (Italy) / 3D Games (England)
-stlforce // (c) 1994 Electronic Devices (Italy) / Ecogames S.L. (Spain)
-fantland // (c) 198? Electronic Devices Italy
-fantlanda // (c) 198? Electronic Devices Italy
-wheelrun // (c) 1988? International Games
-galaxygn // (c) 1989 Electronic Devices Italy
-borntofi // (c) International Games?
-diverboy // (c) 1992 Electronic Devices
-twinbrat // (c) 1995
-twinbrata // (c) 1995
-ppmast93 // (c) 1993 Electronic Devices S.R.L.
-twins // (c) 1994
-twinsa // (c) 1994
-spider
-mwarr
-pzletime
-
-// Arcadia System
-ar_bios
-ar_airh // (c) 1988
-ar_airh2 // (c) 1988
-ar_blast // (c) 1988
-ar_bowl // (c) 1988
-ar_dart // (c) 1987
-ar_dart2 // (c) 1987
-ar_fast // (c) 1988 v2.8
-ar_fasta // (c) 1988 v2.7
-ar_ldrb // (c) 1988 v2.5
-ar_ldrba // (c) 1988 v2.4
-ar_ldrbb // (c) 1988
-ar_ninj // (c) 1987
-ar_ninj2 // (c) 1987
-ar_pm // (c) 198?
-ar_rdwr // (c) 1988
-ar_sdwr // (c) 1988
-ar_sdwr2 // (c) 1988
-ar_socc // (c) 1989
-ar_spot // (c) 1990
-ar_sprg // (c) 1987
-ar_xeon // (c) 1988
-ar_dlta // (c) 198?
-ar_argh
-
-// Sente Super System
-mquake // (c) 1987
-
-// Other Amiga-based games
-upscope // (c) 1986 Grand products
-
-// Cubo32 (Commodore CD32-based HW)
-cubo // Base unit
-cndypuzl // (c) 1995
-haremchl // (c) 1995
-lsrquiz // (c) 1995
-lsrquiz2 // (c) 1995
-mgprem11 // (c) 1995
-lasstixx // (c) 1995
-mgnumber // (c) 1995
-odeontw2 // (c) 1999
-
-// American Laser Games
-alg_bios
-maddoga // (c) 1990
-wsjr // (c) 1991
-wsjr_15 // (c) 1991
-maddog // (c) 1990
-maddog_202 // (c) 1990
-maddog2 // (c) 1992
-maddog2_202 // (c) 1992
-maddog2_110 // (c) 1992
-maddog2_100 // (c) 1992
-spacepir // (c) 1992
-spacepir_14 // (c) 1992
-gallgall // (c) 1992
-gallgall_21 // (c) 1992
-crimepat // (c) 1993
-crimepat_14 // (c) 1993
-crimepat_12 // (c) 1993
-crimep2 // (c) 1993
-crimep2_11 // (c) 1993
-lastbh // (c) 1994
-lastbh_006 // (c) 1994
-fastdraw // (c) 1995
-fastdraw_130 // (c) 1995
-
-aplatoon // (c) 199? Nova?
-zortonbr // (c) 1993 Web Picmatic
-
-crospuzl //
-// Crystal System
-crysbios
-crysking // 2001 Brezzasoft. Crystal of the kings
-evosocc // 2001 Evoga. Evolution Soccer
-topbladv // 2002 Sonokong. Top Blade V
-officeye
-donghaer
-trivrus // 2009 AGT. Trivia R Us
-
-ddz // (c) 200?
-
-psattack // 2004 Uniana
-
-// ADP games
-backgamn // (c) 1990
-quickjac // (c) 1993
-skattv // (c) 1994
-skattva // (c) 1995
-fashiong // (c) 1997
-fashiong2 // (c) 1997
-fstation // (c) 2000
-
-// Other games on adp hardware
-funlddlx // (c) 1999
-
-
-// Other Games
-vega // (c) 19?? Olympia?
-spaceint // [1980] Shoei
-spaceintj // [1980] Shoei
-spacefb // (c) [1980?] Nintendo
-spacefbe // (c) [1980?] Nintendo
-spacefbe2 // (c) [1980?] Nintendo
-spacefba // (c) [1980?] Nintendo
-spacefbg // 834-0031 (c) 1980 Gremlin
-spacefbb // bootleg
-spacebrd // bootleg
-spacedem // (c) 1980 Fortrek + made by Nintendo
-starwarr // Potomac Mortgage
-omegrace // (c) 1981 Midway
-omegrace2 // (c) 1981 Midway
-deltrace // bootleg
-lbeach // (c) 1979 Olympia / Seletron
-monzagp // (c) 1981 Olympia
-monzagpb // bootleg
-dday // (c) 1982 Olympia
-ddayc // (c) 1982 Olympia + Centuri license
-flipjack // 1983? Jackson Co., Ltd.
-exterm // (c) 1989 Premier Technology - a Gottlieb game
-flower // (c) 1986 Komax license
-flowerj // 834-5998 (c) 1986 Sega / Alpha license?
-kingofb // (c) 1985 Wood Place Inc.
-ringking // (c) 1985 Data East USA
-ringking2 // (c) 1985 Data East USA
-ringking3 // (c) 1985 Data East USA
-ringkingw // (c) 1985 Wood Place Inc.
-dlair // (c) 1983 Cinematronics
-dlair_1 // (c) 1983 Cinematronics
-dlair_2 // (c) 1983 Cinematronics
-dlairf // (c) 1983 Cinematronics
-dlaire // (c) 1983 Cinematronics
-dlaird // (c) 1983 Cinematronics
-dlairc // (c) 1983 Cinematronics
-dlairb // (c) 1983 Cinematronics
-dlaira // (c) 1983 Cinematronics
-dleuro // (c) 1983 Atari
-dleuroalt // (c) 1983 Atari
-dlital // (c) 1983 Sidam
-spaceace // (c) 1983 Cinematronics
-spaceacea2 // (c) 1983 Cinematronics
-spaceacea // (c) 1983 Cinematronics
-spaceaceeuro // (c) 1983 Atari
-aztarac // (c) 1983 Centuri (vector game)
-mole // (c) 1982 Yachiyo Electronics, Ltd.
-thehand // (c) 1981 T.I.C.
-mrjong // (c) 1983 Kiwako
-crazyblk // (c) 1983 Kiwako + ECI license
-blkbustr // (c) 1983 Kiwako + ECI license
-polyplay
-amspdwy // no copyright notice, but (c) 1987 Enerdyne Technologies, Inc.
-amspdwya // no copyright notice, but (c) 1987 Enerdyne Technologies, Inc.
-jankenmn // (c) 1985 Sunwise
-quizpun // (c) 1989 Space Computer System of Korea
-quizpun2 // (c) 1989 Space Computer System of Korea
-mosaic // (c) 1990 Space
-mosaica // (c) 1990 Space + Fuuki license
-gfire2 // (c) 1992 Topis Corp
-sprcros2 // (c) 1986 GM Shoji
-sprcros2a // (c) 1986 GM Shoji
-d9final // (c) 1992 Excellent System
-dblcrown // (c) 1994 Excellent System
-lastbank // (c) 1994 Excellent System
-gcpinbal // (c) 1994 Excellent System
-vmetal // (c) 1995 Excellent System?
-vmetaln // (c) 1995 Excellent System?
-aquarium // (c) 1996 Excellent System
-aquariumj // (c) 1996 Excellent System
-policetr // (c) 1996 P&P Marketing
-policetr11 // (c) 1996 P&P Marketing
-policetr10 // (c) 1996 P&P Marketing
-policetr13a // (c) 1996 P&P Marketing
-policetr13b // (c) 1996 P&P Marketing
-sshooter // (c) 1998 P&P Marketing
-sshooter17 // (c) 1998 P&P Marketing
-sshooter12 // (c) 1998 P&P Marketing
-sshooter11 // (c) 1998 P&P Marketing
-pass // (c) 1992 Oksan
-news // "Virus"??? ((c) 1993 Poby in ROM VIRUS.4)
-newsa // "Jeansole / Poby
-taxidriv // [1984 Graphic Techno]
-xyonix // [1989 Philko]
-gt507uk // (c) 1986 Grayhound Electronics
-gtsers8 // (c) 1984 Greyhound Electronics
-gtsers8a // (c) 1984 Greyhound Electronics
-gtsers9 // (c) 1984 Greyhound Electronics
-gtsers10 // (c) 1984 Greyhound Electronics
-gtsers11 // (c) 1984 Greyhound Electronics
-gtsers11a // (c) 1984 Greyhound Electronics
-gtsers12 // (c) 1984 Greyhound Electronics
-gtsers14 // (c) 1986 Greyhound Electronics
-gtsers15 // (c) 1986 Greyhound Electronics
-gt103a1 // (c) 1984 Greyhound Electronics
-gt103aa // (c) 1984 Greyhound Electronics
-gt103ab // (c) 1984 Greyhound Electronics
-gt103asx // (c) 1984 Greyhound Electronics
-reelfun // (c) 1986 Grayhound Electronics
-reelfun1 // (c) 1986 Grayhound Electronics
-findout // (c) 1987 [Elettronolo]
-quizvid // (c) 1986 Italian bootleg
-quiz // (c) 1986 Elettronolo
-quiz211 // (c) 1986 Elettronolo
-jokpoker // (c) 1982 Greyhound Electronics
-jokpokera // (c) 1983 Greyhound Electronics
-jokpokerb // (c) 1983 Greyhound Electronics
-jokpokerc // (c) 1983 Greyhound Electronics
-superbwl // (c) 1982 Greyhound Electronics
-amuse // (c) 1982 Greyhound Electronics
-amuse1 // (c) 1982 Greyhound Electronics
-amuse1a // (c) 1983 Greyhound Electronics
-gs4002 // (c) 1982 G.E.I.
-gs4002a // (c) 1982 G.E.I.
-gepoker // (c) 1984 Greyhound Electronics
-gepoker1 // (c) 1984 Greyhound Electronics
-gepoker2 // (c) 1984 Greyhound Electronics
-gtsers1 // (c) 1984 Greyhound Electronics
-gtsers2 // (c) 1984 Greyhound Electronics
-gtsers3 // (c) 1984 Greyhound Electronics
-gtsers4 // (c) 1984 Greyhound Electronics
-gtsers5 // (c) 1985 Greyhound Electronics
-gtsers7 // (c) 1985 Greyhound Electronics
-gtsersa // (c) 1985 Greyhound Electronics
-gtsersb // (c) 1985 Greyhound Electronics
-sextriv1 // (c) 1985 Kinky Kit and Game Co.
-sextriv2 // (c) 1985 Kinky Kit and Game Co.
-geimulti // (c) 1992 Grayhound Electronics
-sexappl // (c) 1992 Grayhound Electronics
-sprtauth // (c) 1992 Classic Games
-suprpokr // (c) 1986 Grayhound Electronics
-suprpokra // (c) 1986 Grayhound Electronics
-suprpokrb // (c) 1986 Grayhound Electronics
-sshot // (c) 1979 Model Racing
-dribling // (c) 1983 Model Racing
-driblingo // (c) 1983 Olympia
-driblingbr // bootleg
-ace // [1976 Allied Leisure]
-clayshoo // [1979 Allied Leisure]
-pirates // (c) 1994 NIX
-piratesb // bootleg?
-genix // (c) 199? NIX
-fitfight // bootleg of Art of Fighting
-histryma // bootleg of Fighter's History
-bbprot // unfinished prototype
-hotmindff // (c) Playmark
-beaminv // (c) 1979 Tekunon Kougyou (Arcade TV Game List - P.95, Left, 9 from top)
-pacominv // (c) 1979 Pacom Corporation
-mcatadv // (c) 1993 Wintechno
-mcatadvj // (c) 1993 Wintechno
-catt // (c) 1993 Wintechno
-nost // (c) 1993 Face
-nostj // (c) 1993 Face
-nostk // (c) 1993 Face
-4enraya // (c) 1990 IDSA
-4enrayaa //
-4enlinea // (c) 1991 System Compumatic
-unkpacg // (c) 19?? ???
-oneshot // no copyright notice
-maddonna // (c) 1995 Tuning
-maddonnb // (c) 1995 Tuning
-tugboat // (c) 1982 ETM
-noahsark // (c) 1983 Enter-Tech
-berenstn // (c) 1984 Enter-Tech
-gotcha // (c) 1997 Dongsung + "presented by Para"
-ppchamp // (c) 1997 Dongsung + "presented by Para"
-amerdart // (c) 1989 Ameri Corporation
-amerdart2 // (c) 1989 Ameri Corporation
-amerdart3 // (c) 1989 Ameri Corporation
-coolpool // (c) 1992 Catalina Games
-9ballsht // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
-9ballsht2 // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
-9ballsht3 // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
-9ballshtc // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
-megaphx // (c) 1991 Dinamic / Inder
-flagrall // ?
-gumbo // (c) 1994 Min Corp.
-mspuzzleg // (c) 1994 Min Corp.
-mspuzzle // (c) 1994 Min Corp.
-mspuzzlen // (c) 1994 Min Corp.
-msbingo // (C) 1994 Min Corp.
-dblpoint // (c) 1995 Min Corp.
-dblpointd // (c) 1995 Dong Bang Electron
-statusbj // (c) 1981 Status Games
-tripdraw // (c) 1981 Status Games
-funcsino // (c) 1981 Status Games
-hangman // (c) 1984 Status Games
-trivquiz // (c) 1984 Status Games
-statriv2 // (c) 1984 Status Games
-statriv2v // (c) 1984 Status Games
-statriv4 // (c) 1985 Status Games
-sextriv // (c) 1985 Status Games
-quaquiz2 // (c) 1985 Status Games
-supertr2 // (c) 1986 Status Games
-supertr3 // (c) 1986 Status Games
-cstripxi // (c) 1981 Status Games
-tickee // (c) 1994 Raster Elite
-ghoshunt // (c) 1995? Hanaho Games
-tutstomb // (c) 199?? Island Design
-mouseatk // (c) 1996 ICE
-rapidfir // (c) 1998 Hanaho Games
-rapidfira // (c) 1998 Hanaho Games
-rapidfire // (c) 1998 Hanaho Games
-maletmad // (c) 1999 Hanaho Games, licensed to Capcom
-potgoldu // (c) 200? U.S. Games
-crgolf // (c) 1984 Nasco Japan
-crgolfa // (c) 1984 Nasco Japan
-crgolfb // (c) 1984 Nasco Japan
-crgolfc // (c) 1984 Nasco Japan
-crgolfbt // bootleg
-crgolfhi // (c) 1984 Nasco Japan
-truco // (c) 198? Playtronic SRL
-thedeep // (c) 1987 Wood Place
-rundeep // (c) 1988 Cream (bootleg?)
-wallc // (c) 1984 Midcoin
-wallca // (c) 1984 Midcoin
-brkblast // bootleg (Fadesa)
-sidampkr //
-wink // (c) 1985 Midcoin
-winka // (c) 1985 Midcoin
-24cdjuke // (c) 1988 Midcoin
-skyarmy // (c) 1982 Shoei
-lethalj // (c) 1996 The Game Room
-franticf // (c) 1996 The Game Room
-eggventr // (c) 1997 The Game Room
-eggventr8 // (c) 1997 The Game Room
-eggventr7 // (c) 1997 The Game Room
-eggventr2 // (c) 1997 The Game Room
-eggventra // (c) 1997 The Game Room (Allied Leisure license)
-eggventrd // (c) 1997 The Game Room
-hostinv // (c) 1998 The Game Room
-calchase // (c) 1999 The Game Room
-eggsplc // (c) 2002 The Game Room
-ripribit // (c) 1997 LAI Games
-ripribita // (c) 1997 LAI Games
-cfarm // (c) 1999 LAI Games
-cclownz // (c) 1999 LAI Games
-rotaryf
-portrait // (c) 1983 Olympia
-portraita // (c) 1983 Olympia
-enigma2 // (c) 1981 Game Plan (Zilec Electronics license)
-enigma2a // (c) 1984 Zilec Electronics (bootleg?)
-enigma2b // (c) 1981 Zilec Electronics
-ltcasino // (c) 1982 Digital Controls Inc
-mv4in1 // (c) 1983 Entertainment Enterprises
-ltcasinn // (c) 1984 Digital Controls Inc
-coolmini // (c) 1999 SemiCom
-luplup // (c) 1999 Omega System
-luplup29 // (c) 1999 Omega System
-puzlbang // (c) 1999 Omega System
-puzlbanga // (c) 1999 Omega System
-suplup // (c) 1999 Omega System
-jmpbreak // (c) 1999 F2 System
-vamphalf // (c) 1999 DanBi & F2 System
-vamphalfk // (c) 1999 DanBi & F2 System
-dquizgo2 // (c) 2000 Semicom
-dtfamily // (c) 2001 Semicom
-toyland // (c) 2001 Semicom
-misncrft // (c) 2000 Sun
-misncrfta // (c) 2000 Sun
-mrdig // (c) 2000 Sun
-yorijori // (c)
-
-hidnctch // (c) 1998 Eolith
-linkypip // (c) 1998 Eolith
-ironfort // (c) 1998 Eolith
-ironfortj // (c) 1998 Eolith
-puzzlekg // (c) 1998 Eolith
-candy // (c) 1999 Eolith
-hidctch2 // (c) 1999 Eolith
-hidctch2a // (c) 1999 Eolith
-nhidctch // (c) 1999 Eolith
-landbrk // (c) 1999 Eolith
-landbrka // (c) 1999 Eolith
-penfan // (c) 1999 Eolith
-penfana // (c) 1999 Eolith
-stealsee // (c) 2000 Moov Generation / Eolith
-raccoon // (c) 1999 Eolith
-fort2b // (c) 2001 Eolith
-fort2ba // (c) 2001 Eolith
-hidnc2k // (c) 2000 Eolith
-klondkp // (c) 1999 Eolith
-hidctch3 // (c) 2000 Eolith
-crazywar // (c) 2002 Eolith
-bballoon // (c) 2003 Eolith
-hapytour // (c) 2005 GAV Company (on Eolith's Ghost hardware)
-
-touryuu // (c) 200? Yuki Enterprise
-
-funkball // (c) 1998 dgPIX Entertainment Inc
-elfin // (c) 1999 dgPIX Entertainment Inc
-jumpjump // (c) 1999 dgPIX Entertainment Inc
-xfiles // (c) 1999 dgPIX Entertainment Inc
-xfilesk // (c) 1999 dgPIX Entertainment Inc (censored for the Korean market)
-kdynastg // (c) 1999 EZ Graphics
-fmaniac3 // (c) 2002 Saero Entertainment
-
-promutrv // (c) 1985 Enerdyne Technologies Inc
-promutrva // (c) 1985 Enerdyne Technologies Inc
-promutrvb // (c) 1985 Enerdyne Technologies Inc
-promutrvc // (c) 1985 Enerdyne Technologies Inc
-strvmstr // (c) 1986 Enerdyne Technologies Inc
-dorachan // (c) 1980 Craul Denshi
-ladyfrog // (c) 1990 Mondial Games
-toucheme
-touchemea
-rabbit // (c) 1997 Electronic Arts
-tmmjprd // (c) 1997 Media / Sonnet
-tmpdoki // (c) 1998 Media Syouji
-malzak // (c) 1980? Kitronix
-malzak2 // (c) 1980? Kitronix
-supertnk // (c) 1981 VIDEO GAMES GmbH, W.-GERMANY
-crospang // (c) 1998 F2 System
-heuksun // (c) 1998 Oksan / F2 System
-bestri // (c) F2 System
-silvmil // (c) 1995 Para
-puzzlove // (c) 1994 Para
-puzzlovek // (c) 1994 Para
-funybubl // (c) 1999 In Chang Electronic Co
-funybublc // (c) 1999 Comad Industries
-dcheese // (c) 1993 HAR
-lottof2 // (c) 1993 HAR
-fredmem // (c) 1994 Coastal Amusements
-fredmemus // (c) 1994 Coastal Amusements
-fredmemuk // (c) 1994 Coastal Amusements
-fredmemj // (c) 1994 Coastal Amusements
-fredmemc // (c) 1994 Coastal Amusements
-fredmesp // (c) 1994 Coastal Amusements
-cecmatch // (c) 1993 Coastal Amusements
-f15se // (c) 1991 Microprose Games Inc.
-f15se21 // (c) 1991 Microprose Games Inc.
-botss // (c) 1992 Microprose Games Inc.
-botss11 // (c) 1992 Microprose Games Inc.
-tankbatl // (c) 1992 Microprose Games Inc.
-dynadice // ?
-atamanot // (c) 1983 Yachiyo Denki / Uni Enterprize
-ssingles // Yachiyo?
-tcl // (c) 1995 Uniwang
-quake // (c) 19?? Lazer-Tron / iD Software
-majorpkr // (c) 1994 PAL System.
-su2000 // (c) 1993 Virtuality
-boonggab // (c) 2001 Taff System
-fresh // (c) Chain Leisure
-stuntair // (c) 1983 Nuova Videotron
-
-// Success
-tonton // (c) 199? Success / Taiyo Jidoki.
-kurukuru // (c) 1990 Success / Taiyo Jidoki.
-ppj // (c) 199? Success / Taiyo Jidoki.
-othello // (c) 1984 Success.
-sothello // (c) 1986 Success / Fujiwara.
-kothello // (c) 1990 Success.
-dcon // (c) 1992 Success.
-
-// Nexus 3D
-acheart
-acheartf // (c) 2006 Examu
-
-// Multi Amenity Cassette System
-macsbios
-mac2bios
-kisekaem // (c) 1995 I'Max
-kisekaeh // (c) 1995 I'Max
-cultname // (c) 1995 I'Max
-yuka // (c) 1999 Yubis
-yujan // (C) 1999 Yubis
-
-// Team Play, Inc.
-voyager // (c) 2002 Team Play, Inc.
-
-// BMC
-bmcbowl // (c) 1994 BMC
-koftball // (c) 1995 BMC
-bmcpokr // (c) 1999 BMC
-popobear // (c) 2000 BMC
-mjmaglmp // (c) 2000 BMC
-
-// Merit
-mgames // (c) 1981 Merit
-pitboss // (c) 1983 Merit
-pitbossa // (c) 1983 Merit
-pitbossa1 // (c) 1983 Merit
-pitbossb // (c) 1983 Merit
-pitbossc // (c) 1983 Merit
-casino5 // (c) 1984 Merit
-mroundup // (c) 1984 Merit
-trvwzh // (c) 1985 Merit
-trvwzha // (c) 1985 Merit
-trvwzhb // (c) 1985 Merit
-trvwzv // (c) 1985 Merit
-trvwz2 // (c) 1985 Merit
-trvwz2a // (c) 1985 Merit
-trvwz3h // (c) 1985 Merit
-trvwz3ha // (c) 1985 Merit
-trvwz3v // (c) 1985 Merit
-trvwz4 // (c) 1985 Merit
-trvwz4a // (c) 1985 Merit
-dtrvwz5 // (c) 1987 Merit
-tictac // (c) 1985 Merit
-tictacv // (c) 1985 Merit
-phrcraze // (c) 1986 Merit
-phrcrazea // (c) 1986 Merit
-phrcrazeb // (c) 1986 Merit
-phrcrazec // (c) 1986 Merit
-phrcrazev // (c) 1986 Merit
-bigappg // (c) 1986 Merit / Big Apple Games
-misdraw // (c) 1986 Merit / Big Apple Games
-riviera // (c) 1987 Merit
-rivieraa // (c) 1986 Merit
-rivierab // (c) 1986 Merit
-americna // (c) 1987 Merit
-americnaa // (c) 1987 Merit
-meritjp // (c) 1987 Merit
-dodgecty // (c) 1988 Merit
-dodgectya // (c) 1986 Merit
-dodgectyb // (c) 1986 Merit
-dodgectyc // (c) 1986 Merit
-couple // (c) 1988 Merit
-couplep // (c) 1988 Merit
-couplei // (c) 1988 Merit
-pitboss2 // (c) 1988 Merit
-spitboss // (c) 1988 Merit
-pitbosss // (c) 1990 Merit
-pitbosssa // (c) 1990 Merit
-pitbosssc // (c) 1992 Merit
-pitbossm // (c) 1994 Merit
-pitbossma // (c) 1994 Merit
-pbss330 // (c) 1994 Merit
-pbst30 // (c) 1994 Merit
-pbst30a // (c) 1993 Merit
-realbrod // (c) 1995 Merit
-mtjpoker // (c) 1994 Merit
-megat // (c) 1994 Merit
-megat2 // (c) 1994 Merit
-megat2a // (c) 1994 Merit
-megat2b // (c) 1994 Merit
-megat2mn // (c) 1994 Merit
-megat2ca // (c) 1994 Merit
-megat2caa // (c) 1994 Merit
-megat3 // (c) 1996 Merit
-megat3a // (c) 1996 Merit
-megat3b // (c) 1996 Merit
-megat3c // (c) 1996 Merit
-megat3d // (c) 1996 Merit
-megat3ca // (c) 1996 Merit
-megat3caa // (c) 1995 Merit
-megat3nj // (c) 1995 Merit
-megat3te // (c) 1996 Merit
-megat4 // (c) 1996 Merit
-megat4a // (c) 1996 Merit
-megat4b // (c) 1996 Merit
-megat4c // (c) 1996 Merit
-megat4d // (c) 1996 Merit
-megat4s // (c) 1996 Merit
-megat4sa // (c) 1996 Merit
-megat4sb // (c) 1996 Merit
-megat4smn // (c) 1996 Merit
-megat4snj // (c) 1996 Merit
-megat4te // (c) 1996 Merit
-megat4tea // (c) 1996 Merit
-megat4st // (c) 1996 Merit
-megat4stg // (c) 1996 Merit
-megat5 // (c) 1997 Merit
-megat5a // (c) 1997 Merit
-megat5nj // (c) 1997 Merit
-megat5t // (c) 1997 Merit
-megat5tg // (c) 1997 Merit
-megat6 // (c) 1998 Merit
-suprgolf // (c) 1989 Nasco
-onetwo // (c) 1997 Barko
-onetwoe // (c) 1997 Barko
-1945kiii // (c) 2000 Oriental
-witch // (c) 1992 Excellent System
-witchb // (c) 1992 Excellent System
-witchs // (c) 1992 Sega / Vic Tokai license
-pbchmp95 // (c) 1995 Veltmeijer Automaten
-cardline // (c) 199? Veltmeijer
-albatross
-hotblock // (c) 1993 Nics? / Nix?
-pntnpuzl // Century?
-trucocl // (c) 1991 Miky SRL
-ertictac // (c) 1992 Sisteme
-ertictaca // (c) 1992 Sisteme
-ertictacb // (c) 1992 Sisteme
-poizone // (c) 1990 Sisteme
-ssfindo // (c) 1999 Icarus
-ppcar // (c) 1999 Icarus
-tetfight // (c) 2001 Sego
-imolagp // (c) 198? RB Bologna
-imolagpo // (c) 198? RB Bologna
-dambustr // (c) 1981 South West Research
-dambustra // (c) 1981 South West Research
-dambustruk // (c) 1981 South West Research
-gunpey // (c) 2000 Banpresto
-hideseek //
-spaceg // (c) 19??
-gldarrow // (c) 1984 Meyco Games
-wldarrow // (c) 1982 Meyco Games
-casbjack // (c) 1983 Meyco Games
-mdrawpkr // (c) 1984 Meyco Games
-mdrawpkra // (c) 1984 Meyco Games
-laserbas // (c) 1981 Amstar/HOEI
-laserbasa // (c) 1981 Amstar/HOEI
-futflash // (c) 1981 HOEI (Arcade TV Game List - P.96, Right, 18 from top)
-turbosub // (c) 1985 Entertainment Sciences
-turbosub7 // (c) 1985 Entertainment Sciences
-turbosub6 // (c) 1985 Entertainment Sciences
-pipeline // (c) 1990 Daehyun Electronics
-ttchamp
-ttchampa
-cybertnk // (c) 1990 Coreland
-cubeqst // (c) 1983 Simutrek Inc.
-cubeqsta // (c) 1983 Simutrek Inc.
-pkscram // (c) 1993 Cosmo Electronics Corporation
-
-// Fun World
-jollycrd // (c) 1985 TAB-Austria
-jolyc3x3 // (c) 1985 TAB-Austria
-jolycmzs // (c) 1993 MZS Tech
-jolyc980 // (c) 2000 Spale-Soft
-jolycdev // (c) 1998 TAB/Evona
-jolyccra // (c) 1985 TAB-Austria
-jolyccrb // (c) 1993 Soft Design
-jolycdit // 199? bootleg
-jolycdib // 1990 bootleg
-jolycdic // 1993 bootleg
-jolycdid // 1990 bootleg
-jolycdie // 1990 bootleg
-sjcd2kx3 // (c) 1985 M.P.
-jolycdab // (c) 1986 Inter Games
-jolycdsp // (c) 1992 TAB-Austria
-bonuscrd // (c) 1986 Fun World
-bonuscrda // (c) 1986 Fun World
-bigdeal // (c) 1986 Fun World
-bigdealb // (c) 1986 Fun World
-cuoreuno // (c) 1996 C.M.C.
-elephfam // (c) 1997 C.M.C.
-elephfmb // (c) 1996 C.M.C.
-pool10 // (c) 1996 C.M.C.
-pool10b // (c) 1996 C.M.C.
-pool10c // (c) 1996 C.M.C.
-pool10d // (c) 1997 C.M.C.
-pool10e // (c) 1997 C.M.C.
-pool10f // (c) 1997 C.M.C.
-pool10g // (c) 1996 C.M.C.
-pool10h // (c) 1996 C.M.C.
-pool10i // (c) 1997 C.M.C.
-royal // 2001, hack.
-tortufam // (c) 1997 C.M.C.
-potgame // (c) 1996 C.M.C.
-bottle10 // (c) 1996 C.M.C.
-bottl10b // (c) 1996 C.M.C.
-lunapark // 1998 unknown.
-lunaparkb // 1998 unknown.
-lunaparkc // 1998 unknown.
-crystal // (c) 1998 J.C.D. srl
-royalcrd // (c) 1991 TAB-Austria
-royalcrda // (c) 1991 TAB-Austria
-royalcrdb // (c) 1991 TAB-Austria
-royalcrdc // (c) 1991 TAB-Austria
-royalcrdd // (c) 1991 TAB-Austria
-royalcrde // (c) 1991 TAB-Austria
-royalcrdf // (c) 1991 Evona Electronic
-royalcrdg // (c) 1991 TAB-Austria
-royalcdfr // (c) 1991 TAB-Austria
-royalcrdt // (c) 1991 TAB-Austria orig
-royalcrdp // (c) 1993 Digital Dreams
-lluck3x3 // (c) 1991 TAB-Austria
-lluck4x1 // (c) 1991 TAB-Austria
-magicrd2 // (c) 1996 Impera
-magicrd2a // (c) 1996 Impera
-magicrd2b // (c) 1996 Impera
-magicrd2c // (c) 1996 Impera
-vegasslw // (c) 1993 Fun World
-vegasfst // (c) 1993 Soft Design
-vegasfte // (c) 1993 Soft Design
-vegasmil // (c) 1993 Mile
-jolyjokr // (c) 198? Impera
-jolyjokra // (c) 198? Impera
-jolyjokrb // (c) 198? Impera
-multiwin // (c) 1992 Fun World
-powercrd // (c) 1993 Fun World
-jokercrd // (c) 1993 Vesely Svet
-mongolnw // 199? bootleg
-soccernw // 199? bootleg
-saloon // 199? unknown
-funquiz // (c) 198? Fun World
-witchryl // (c) 199? Video Klein
-novoplay // (c) 1986 Novomatic
-rcdino4 // 1998 unknown
-chinatow // 1998 unknown
-photoply
-supercrd // (c) 1992 Fun World
-fruitstr // (c) 1992 Fun World
-
-// with 2nd set of hardware on PCB for stealth purposes
-royalcrd_nes
-royalcrd_msx
-
-// Sandii'
-snookr10 // (c) 1998 Sandii'
-apple10 // (c) 1998 Sandii'
-tenballs // 1997 unknown
-crystalc // 199? unknown
-
-// Game-A-Tron
-gotya // (c) 1981 Game-A-Tron
-sbugger // (c) 1981 Game-A-Tron
-sbuggera // (c) 1981 Game-A-Tron
-poker41 // (c) 1983 Game-A-Tron
-pulltabs // (c) 1983 Game-A-Tron
-bingo // Game-A-Tron?
-
-vroulet // (c) 1989 World Game
-rcasino // (c) 1984 Dyna Electronics (D-2608208A1-2)
-rcasino1 // (c) 1984 Dyna Electronics (D-2608208A1-1, Larger Board)
-rcasinoo // (c) 1984 Dyna Electronics (D-2608208A1-1, Smaller Board)
-ampoker2 // (c) 1990 Novomatic
-piccolop // (c) 1990 Admiral - Novomatic
-ampkr2b1 // 1990 bootleg
-ampkr2b2 // 1990 bootleg
-ampkr2b3 // 1994 bootleg
-ampkr2b4 // 1994 bootleg
-ampkr228 // 1990 bootleg
-pkrdewin // 1990 bootleg
-ampkr95 // 1995 bootleg
-videomat // 1990 bootleg
-rabbitpk // 1990 bootleg
-sigmapkr // (c) 1995 Sigma
-sigma2k // (c) 2000 Sigma
-
-
-attckufo // (c) 1980 Ryoto Electric Co.
-unkhorse
-fortecar
-fortecrd
-jackpool // (c) 1997 Electronic Projects
-murogem // ???
-murogema // ???
-murogemb // ???
-murogmbl // ???
-lasvegas // hack
-quizmstr // (c) 1985 Coinmaster
-trailblz // (c) 1987 Coinmaster
-supnudg2 // (c) 1989 Coinmaster
-pokeroul // (c) 1990 Coinmaster
-jpcoin // (c) 19?? Coinmaster
-jpcoin2 // (c) 19?? Coinmaster
-egghunt // (c) 1995 Invi Image
-magic10 // (c) 1995 A.W.P. Games
-magic10a // (c) 1995 A.W.P. Games
-magic10b // (c) 1995 A.W.P. Games
-magic10c // (c) 1995 A.W.P. Games
-magic102 // (c) 1997 ABM Games
-suprpool // (c) 1997 ABM Games
-hotslot // (c) 1996 ABM Electronics
-mcolors // 1999 unknown
-sgsafari // (c) 1996 New Impeuropex Corp.
-musicsrt // (c) 1995 ABM Games
-galaxi // (c) 2000 BRL S.R.L. Bologna
-magjoker // (c) 2000 BRL S.R.L. Bologna
-lastfour // (c) 2001 BRL S.R.L. Bologna
-dwarfd // (c) 198? Electro-Sports
-dwarfda // (c) 198? Electro-Sports
-quarterh // (c) 1983 Electro-Sports
-quarterha // (c) 1983 Electro-Sports
-quarterhb // (c) 1983 Electro-Sports
-qc // (c) 1995 ArJay Exports/Prestige Games
-trvquest // (c) 1984 Sunn / Techstar
-rltennis // (c) 1993 TCH
-wheelfir // (c) 199? TCH
-littlerb // (c) 1993 TCH
-tattack // (c) 198? Shonan
-mosaicf2 // (c) 1999 F2 System
-royalpk2 //
-finalgdr // (c) 2001 Semicom
-mrkicker // (c) 2001 Semicom
-mrkickera // (c) 2001 Semicom
-wivernwg // (c) 2001 Semicom
-wyvernwg // (c) 2001 Semicom / Game Vision
-wyvernwga // (c) 2001 Semicom / Game Vision
-rbmk // (c) 1995 GMS
-mirax // (c) 1985 Current Technologies
-miraxa // (c) 1985 Current Technologies
-
-// Subsino
-victor5 // (c) 1990 Subsino
-victor21 // (c) 1990 Subsino
-crsbingo // (c) 1991 Subsino
-tisub // (c) 1992 Subsino
-tisuba // (c) 1992 Subsino
-stbsub // (c) 1995 Subsino (Alpha license)
-stisub // (c) 1995 Subsino
-tesorone // (c) 1995 Subsino
-tesorone240 // (c) 1995 Subsino
-tesorone230 // (c) 1995 Subsino
-victor6 // (c) 1995 Subsino (Alpha license)
-victor6a // (c) 1995 Subsino (Alpha license)
-victor6b // (c) 1995 Subsino (Alpha license)
-mtrain // (c) 1996 Subsino
-mtrainnv // (c) 1996 Subsino
-sharkpy // (c) 1996 Subsino
-sharkpya // (c) 1996 Subsino
-sharkpye // (c) 1996 Subsino (Alpha license)
-smoto20 // (c) 1996 Subsino
-smoto16 // (c) 1996 Subsino
-wtrnymph // (c) 1996 Subsino
-expcard // (c) 1998 American Alpha
-saklove // (c) 1998 Subsino
-bishjan // (c) 1999 Subsino
-ptrain // (c) 1999 Subsino
-xtrain // (c) 1999 Subsino
-lastfght // (c) 2000 Subsino
-xplan // (c) 2006 Subsino
-
-sliver // (c) 1996 Hollow Corp
-slivera //
-intrscti // ????
-pasha2 // (c) 1998 Dong Sung
-trvmadns // (c) 1985 Thunderhead Inc.
-trvmadnsa // (c) 1985 Thunderhead Inc.
-rcorsair // (c) 1984 Nakasawa
-pzlestar // (c) 199? Sang Ho Soft
-sexyboom // (c) 1992 Sang Ho Soft
-sfkick // (c) 1988 Haesung/HJ Corp
-sfkicka // (c) 198? Haesung
-spinkick // (c) 1988 Haesung/Seojin
-dynabomb // (c) 2000 Limenko
-legendoh // (c) 2000 Limenko
-sb2003 // (c) 2003 Limenko
-sb2003a // (c) 2003 Limenko
-spotty // (c) 2001 Prince Co.
-carrera // (c) 19?? BS Electronics
-chance32 // (c) 19?? PAL Company
-
-// Magic Fly hardware
-magicfly // (c) 198? P&A GAMES
-7mezzo // 198? Unknown
-bchance // 198? Unknown
-
-// Golden Poker / Potten's Poker / Witch Card hardware
-goldnpkr // (c) 1981 Bonanza
-goldnpkb // (c) 1981 Bonanza
-videtron // Unknown
-videtron2 // Unknown
-videtrna // Unknown
-pottnpkr // Bootleg
-potnpkra // Bootleg in Coinmaster H/W
-potnpkrb // Bootleg
-potnpkrc // Bootleg
-potnpkrd // Bootleg
-potnpkre // Bootleg
-potnpkrf // Bootleg
-potnpkrg // Bootleg
-potnpkrh // Bootleg
-ngold // 198? Unknown
-ngolda // 198? Unknown
-ngoldb // 198? Unknown
-goodluck // Unknown
-bsuerte // 1990, Unknown
-bsuertea // 1991, Unknown
-bsuerteb // 1991, Unknown
-bsuertec // 1991, Unknown
-bsuerted // 1991, Unknown
-bsuertee // 1991, Unknown
-bsuertef // 1991, Unknown
-bsuerteg // 1991, Unknown
-bsuerteh // 1991, Unknown
-bsuertei // 1991, Unknown
-bsuertej // 1991, Unknown
-bsuertek // 1991, Unknown
-bsuertel // 1991, Unknown
-bsuertem // 1991, Unknown
-bsuerten // 1991, Unknown
-bsuerteo // 1991, Unknown
-bsuertep // 1991, Unknown
-bsuerteq // 1991, Unknown
-bsuerter // 1991, Unknown
-bsuertes // 1991, Unknown
-bsuertet // 1991, Unknown
-bsuerteu // 1991, Unknown
-falcnwld // 1991, TVG
-falcnwlda // (c) 1990, Video Klein
-falcnwldb // (c) 1990, Video Klein
-falcnwldc // (c) 1983, Falcon
-witchcrd // (c) 1991, Video Klein
-witchcda // 1991, Unknown
-witchcdb // 1991, Unknown
-witchcdc // 1991, Unknown
-witchcdd // (c) 1994, TV Game Elektronik - Proma
-witchcde // (c) 1991, Video Klein
-witchcdf // (c) 1991, PlayMan
-witchcdg // (c) 199?, Falcon
-witchcdh // (c) 1994, TV Game Elektronik - Proma
-witchcdi // (c) 1994, TV Game Elektronik - Proma
-witchgme // (c) 1991 Video Klein
-witchcdk // (c) 1991, Video Klein
-witchjol // 1994, Unknown
-wldwitch // (c) 1992-2001, Video Klein
-wldwitcha // (c) 1992-2001, Video Klein
-wldwitchb // (c) 1992-2001, Video Klein
-wldwitchc // (c) 1992-2001, Video Klein
-wldwitchd // (c) 1992-2001, Video Klein
-wldwitche // (c) 1992-2001, Video Klein
-wldwitchf // (c) 1992-2001, Video Klein
-wldwitchg // (c) 1992-2001, Video Klein
-wldwitchh // (c) 1992-2001, Video Klein
-wldwitchi // (c) 1992-2001, Video Klein
-wldwitchj // (c) 1992-2001, Video Klein
-wldwitchk // (c) 1992-2001, Video Klein
-wldwitchl // (c) 1992-2001, Video Klein
-wldwitchm // (c) 1992-2001, Video Klein
-wldwitchn // (c) 1992-2001, Video Klein
-wldwitcho // (c) 1992-2001, Video Klein
-wldwitchp // (c) 1992-2001, Video Klein
-wldwitchq // (c) 1992-2001, Video Klein
-wldwitchr // (c) 1992-2001, Video Klein
-wldwitchs // (c) 1992-2001, Video Klein
-wldwitcht // (c) 1992-2001, Video Klein
-wldwitchu // (c) 1992-2001, Video Klein
-wldwitchv // (c) 1992-2001, Video Klein
-wupndown // (c) 1998, Video Klein
-wupndowna // (c) 1998, Video Klein
-wupndownb // (c) 1998, Video Klein
-wupndownc // (c) 1998, Video Klein
-wupndownd // (c) 1998, Video Klein
-wstrike // (c) 1992, Video Klein
-wstrikea // (c) 1992, Video Klein
-wtchjack // (c) 1996, Video Klein
-wtchjacka // (c) 1996, Video Klein
-wtchjackb // (c) 1996, Video Klein
-wtchjackc // (c) 1996, Video Klein
-wtchjackd // (c) 1996, Video Klein
-wtchjacke // (c) 1995, Video Klein
-wtchjackf // (c) 1995, Video Klein
-wtchjackg // (c) 1995, Video Klein
-wtchjackh // (c) 1995, Video Klein
-wtchjacki // (c) 1995, Video Klein
-wtchjackj // (c) 1994, Video Klein
-pmpoker // (c) 1981 PlayMan
-royale // Unknown
-royalea // Unknown
-sloco93 // 1993, Unknown
-sloco93a // 1993, Unknown
-maverik // 198?, Unknown
-brasil86 // 1986, Unknown
-brasil87 // 1987, Unknown
-brasil89 // 1989, Unknown
-brasil89a // 1989, Unknown
-brasil93 // 1993, Unknown
-poker91 // 1991, Unknown
-genie // (c) 198? Video Fun Games Ltd.
-geniea // 198?, Unknown
-silverga // 1983, Unknown
-superdbl // 198? Karateco
-pokerdub // 198?, Unknown
-pokerduc // 198?, Unknown
-bchancep // 198?, Unknown
-bchanceq // 198?, Unknown
-pokermon // 1987, Unknown
-pokersis // 198?, Sisteme France.
-super98 // 199?, Unknown
-animpkr // 198?, Unknown
-animpkra // 198?, Unknown
-
-
-// Cal Omega
-comg074 // (c) 1981 Cal Omega Inc.
-comg076 // (c) 1981 Cal Omega Inc.
-comg079 // (c) 1981 Cal Omega Inc.
-comg080 // (c) 1981 Cal Omega Inc.
-comg094 // (c) 1981 Cal Omega Inc.
-comg107 // (c) 1982 Cal Omega Inc.
-comg123 // (c) 1982 Cal Omega Inc.
-comg125 // (c) 1982 Cal Omega Inc.
-comg127 // (c) 1982 Cal Omega Inc.
-comg128 // (c) 1982 Cal Omega Inc.
-comg134 // (c) 1982 Cal Omega Inc.
-comg145 // (c) 1982 Cal Omega Inc.
-comg157 // (c) 1983 Cal Omega Inc.
-comg159 // (c) 1983 Cal Omega Inc.
-comg164 // (c) 1983 Cal Omega Inc.
-comg168 // (c) 1983 Cal Omega Inc.
-comg172 // (c) 1983 Cal Omega Inc.
-comg175 // (c) 1984 Cal Omega / Casino Electronics Inc.
-comg176 // (c) 1982 Cal Omega Inc.
-comg181 // (c) 1983 Cal Omega Inc.
-comg183 // (c) 1983 Cal Omega Inc.
-comg185 // (c) 1983 Cal Omega Inc.
-comg186 // (c) 1983 Cal Omega Inc.
-comg187 // (c) 1983 Cal Omega Inc.
-comg204 // (c) 1984 Cal Omega Inc.
-comg208 // (c) 1984 Cal Omega Inc.
-comg227 // (c) 1984 Cal Omega Inc.
-comg230 // (c) 1984 Cal Omega Inc.
-comg236 // (c) 1984 Cal Omega Inc.
-comg239 // (c) 1985 Cal Omega / Casino Electronics Inc.
-comg240 // (c) 1985 Cal Omega / Casino Electronics Inc.
-comg246 // (c) 1985 Cal Omega Inc.
-comg272a // (c) 1985 Cal Omega Inc.
-comg272b // (c) 1985 Cal Omega Inc.
-comg5108 // (c) 1985 Cal Omega Inc.
-comg903d // (c) 198? Cal Omega Inc.
-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
-peset012 // (c) 1987 IGT - International Game Technology
-peset022 // (c) 1987 IGT - International Game Technology
-peset038 // (c) 1987 IGT - International Game Technology
-peset100 // (c) 1987 IGT - International Game Technology
-peset117 // (c) 1987 IGT - International Game Technology
-peivc006 // (c) 1987 IGT - International Game Technology
-pepk0719 // (c) 1987 IGT - International Game Technology
-pepk0719a // (c) 1987 IGT - International Game Technology
-pepk0719b // (c) 1987 IGT - International Game Technology
-pepk0756 // (c) 1987 IGT - International Game Technology
-pepk0756a // (c) 1987 IGT - International Game Technology
-pepk0756b // (c) 1987 IGT - International Game Technology
-pepk0757 // (c) 1987 IGT - International Game Technology
-pepk0758 // (c) 1987 IGT - International Game Technology
-pepk0769 // (c) 1987 IGT - International Game Technology
-pepk0773 // (c) 1987 IGT - International Game Technology
-pepk0810 // (c) 1987 IGT - International Game Technology
-pepk0810a // (c) 1987 IGT - International Game Technology
-pepk0811 // (c) 1987 IGT - International Game Technology
-pepk0823 // (c) 1987 IGT - International Game Technology
-pepk0832 // (c) 1987 IGT - International Game Technology
-pepk0849 // (c) 1987 IGT - International Game Technology
-pepk0856 // (c) 1987 IGT - International Game Technology
-pepk0856a // (c) 1987 IGT - International Game Technology
-pepk0858 // (c) 1987 IGT - International Game Technology
-pepk0873 // (c) 1987 IGT - International Game Technology
-pepk0873a // (c) 1987 IGT - International Game Technology
-pepk0930 // (c) 1987 IGT - International Game Technology
-pepk0930a // (c) 1987 IGT - International Game Technology
-pepk1004 // (c) 1987 IGT - International Game Technology
-pepk1013 // (c) 1987 IGT - International Game Technology
-pepk1020 // (c) 1987 IGT - International Game Technology
-pepk1024 // (c) 1987 IGT - International Game Technology
-pepk1030 // (c) 1987 IGT - International Game Technology
-pepk1069 // (c) 1987 IGT - International Game Technology
-pepp0002 // (c) 1987 IGT - International Game Technology
-pepp0002a // (c) 1987 IGT - International Game Technology
-pepp0008 // (c) 1987 IGT - International Game Technology
-pepp0009 // (c) 1987 IGT - International Game Technology
-pepp0010 // (c) 1987 IGT - International Game Technology
-pepp0014 // (c) 1987 IGT - International Game Technology
-pepp0014a // (c) 1987 IGT - International Game Technology
-pepp0021 // (c) 1987 IGT - International Game Technology
-pepp0023 // (c) 1987 IGT - International Game Technology
-pepp0038 // (c) 1987 IGT - International Game Technology
-pepp0040 // (c) 1987 IGT - International Game Technology
-pepp0040a // (c) 1987 IGT - International Game Technology
-pepp0040b // (c) 1987 IGT - International Game Technology
-pepp0041 // (c) 1987 IGT - International Game Technology
-pepp0042 // (c) 1987 IGT - International Game Technology
-pepp0042a // (c) 1987 IGT - International Game Technology
-pepp0043 // (c) 1987 IGT - International Game Technology
-pepp0043a // (c) 1987 IGT - International Game Technology
-pepp0043b // (c) 1987 IGT - International Game Technology
-pepp0045 // (c) 1987 IGT - International Game Technology
-pepp0045a // (c) 1987 IGT - International Game Technology
-pepp0045b // (c) 1987 IGT - International Game Technology
-pepp0045c // (c) 1987 IGT - International Game Technology
-pepp0045d // (c) 1987 IGT - International Game Technology
-pepp0046 // (c) 1987 IGT - International Game Technology
-pepp0046a // (c) 1987 IGT - International Game Technology
-pepp0046b // (c) 1987 IGT - International Game Technology
-pepp0048 // (c) 1987 IGT - International Game Technology
-pepp0051 // (c) 1987 IGT - International Game Technology
-pepp0053 // (c) 1987 IGT - International Game Technology
-pepp0055 // (c) 1987 IGT - International Game Technology
-pepp0055a // (c) 1987 IGT - International Game Technology
-pepp0055b // (c) 1987 IGT - International Game Technology
-pepp0055c // (c) 1987 IGT - International Game Technology
-pepp0057 // (c) 1987 IGT - International Game Technology
-pepp0057a // (c) 1987 IGT - International Game Technology
-pepp0059 // (c) 1987 IGT - International Game Technology
-pepp0059a // (c) 1987 IGT - International Game Technology
-pepp0060 // (c) 1987 IGT - International Game Technology
-pepp0060a // (c) 1987 IGT - International Game Technology
-pepp0060b // (c) 1987 IGT - International Game Technology
-pepp0060c // (c) 1987 IGT - International Game Technology
-pepp0063 // (c) 1987 IGT - International Game Technology
-pepp0064 // (c) 1987 IGT - International Game Technology
-pepp0065 // (c) 1987 IGT - International Game Technology
-pepp0083 // (c) 1987 IGT - International Game Technology
-pepp0085 // (c) 1987 IGT - International Game Technology
-pepp0089 // (c) 1987 IGT - International Game Technology
-pepp0094 // (c) 1987 IGT - International Game Technology
-pepp0103 // (c) 1987 IGT - International Game Technology
-pepp0104 // (c) 1987 IGT - International Game Technology
-pepp0116 // (c) 1987 IGT - International Game Technology
-pepp0116a // (c) 1987 IGT - International Game Technology
-pepp0118 // (c) 1987 IGT - International Game Technology
-pepp0120 // (c) 1987 IGT - International Game Technology
-pepp0125 // (c) 1987 IGT - International Game Technology
-pepp0126 // (c) 1987 IGT - International Game Technology
-pepp0127 // (c) 1987 IGT - International Game Technology
-pepp0127a // (c) 1987 IGT - International Game Technology
-pepp0129 // (c) 1987 IGT - International Game Technology
-pepp0130 // (c) 1987 IGT - International Game Technology
-pepp0132 // (c) 1987 IGT - International Game Technology
-pepp0150 // (c) 1987 IGT - International Game Technology
-pepp0158 // (c) 1987 IGT - International Game Technology
-pepp0158a // (c) 1987 IGT - International Game Technology
-pepp0158b // (c) 1987 IGT - International Game Technology
-pepp0158c // (c) 1987 IGT - International Game Technology
-pepp0158d // (c) 1987 IGT - International Game Technology
-pepp0159 // (c) 1987 IGT - International Game Technology
-pepp0171 // (c) 1987 IGT - International Game Technology
-pepp0171a // (c) 1987 IGT - International Game Technology
-pepp0178 // (c) 1987 IGT - International Game Technology
-pepp0181 // (c) 1987 IGT - International Game Technology
-pepp0188 // (c) 1987 IGT - International Game Technology
-pepp0188a // (c) 1987 IGT - International Game Technology
-pepp0189 // (c) 1987 IGT - International Game Technology
-pepp0190 // (c) 1987 IGT - International Game Technology
-pepp0190a // (c) 1987 IGT - International Game Technology
-pepp0190b // (c) 1987 IGT - International Game Technology
-pepp0190c // (c) 1987 IGT - International Game Technology
-pepp0197 // (c) 1987 IGT - International Game Technology
-pepp0197a // (c) 1987 IGT - International Game Technology
-pepp0197b // (c) 1987 IGT - International Game Technology
-pepp0197c // (c) 1987 IGT - International Game Technology
-pepp0197d // (c) 1987 IGT - International Game Technology
-pepp0197e // (c) 1987 IGT - International Game Technology
-pepp0203 // (c) 1987 IGT - International Game Technology
-pepp0203a // (c) 1987 IGT - International Game Technology
-pepp0203b // (c) 1987 IGT - International Game Technology
-pepp0203c // (c) 1987 IGT - International Game Technology
-pepp0203d // (c) 1987 IGT - International Game Technology
-pepp0203e // (c) 1987 IGT - International Game Technology
-pepp0219 // (c) 1987 IGT - International Game Technology
-pepp0221 // (c) 1987 IGT - International Game Technology
-pepp0221a // (c) 1987 IGT - International Game Technology
-pepp0221b // (c) 1987 IGT - International Game Technology
-pepp0223 // (c) 1987 IGT - International Game Technology
-pepp0224 // (c) 1987 IGT - International Game Technology
-pepp0224a // (c) 1987 IGT - International Game Technology
-pepp0230 // (c) 1987 IGT - International Game Technology
-pepp0242 // (c) 1987 IGT - International Game Technology
-pepp0249 // (c) 1987 IGT - International Game Technology
-pepp0250 // (c) 1987 IGT - International Game Technology
-pepp0250a // (c) 1987 IGT - International Game Technology
-pepp0265 // (c) 1987 IGT - International Game Technology
-pepp0265a // (c) 1987 IGT - International Game Technology
-pepp0265b // (c) 1987 IGT - International Game Technology
-pepp0265c // (c) 1987 IGT - International Game Technology
-pepp0274 // (c) 1987 IGT - International Game Technology
-pepp0288 // (c) 1987 IGT - International Game Technology
-pepp0290 // (c) 1987 IGT - International Game Technology
-pepp0290a // (c) 1987 IGT - International Game Technology
-pepp0291 // (c) 1987 IGT - International Game Technology
-pepp0291a // (c) 1987 IGT - International Game Technology
-pepp0401 // (c) 1987 IGT - International Game Technology
-pepp0409 // (c) 1987 IGT - International Game Technology
-pepp0410 // (c) 1987 IGT - International Game Technology
-pepp0410a // (c) 1987 IGT - International Game Technology
-pepp0417 // (c) 1987 IGT - International Game Technology
-pepp0417a // (c) 1987 IGT - International Game Technology
-pepp0418 // (c) 1987 IGT - International Game Technology
-pepp0419 // (c) 1987 IGT - International Game Technology
-pepp0420 // (c) 1987 IGT - International Game Technology
-pepp0423 // (c) 1987 IGT - International Game Technology
-pepp0423a // (c) 1987 IGT - International Game Technology
-pepp0423b // (c) 1987 IGT - International Game Technology
-pepp0423c // (c) 1987 IGT - International Game Technology
-pepp0426 // (c) 1987 IGT - International Game Technology
-pepp0428 // (c) 1987 IGT - International Game Technology
-pepp0429 // (c) 1987 IGT - International Game Technology
-pepp0429a // (c) 1987 IGT - International Game Technology
-pepp0430 // (c) 1987 IGT - International Game Technology
-pepp0431 // (c) 1987 IGT - International Game Technology
-pepp0434 // (c) 1987 IGT - International Game Technology
-pepp0447 // (c) 1987 IGT - International Game Technology
-pepp0447a // (c) 1987 IGT - International Game Technology
-pepp0449 // (c) 1987 IGT - International Game Technology
-pepp0449a // (c) 1987 IGT - International Game Technology
-pepp0452 // (c) 1987 IGT - International Game Technology
-pepp0454 // (c) 1987 IGT - International Game Technology
-pepp0454a // (c) 1987 IGT - International Game Technology
-pepp0455 // (c) 1987 IGT - International Game Technology
-pepp0458 // (c) 1987 IGT - International Game Technology
-pepp0459 // (c) 1987 IGT - International Game Technology
-pepp0467 // (c) 1987 IGT - International Game Technology
-pepp0488 // (c) 1987 IGT - International Game Technology
-pepp0508 // (c) 1987 IGT - International Game Technology
-pepp0509 // (c) 1987 IGT - International Game Technology
-pepp0510 // (c) 1987 IGT - International Game Technology
-pepp0514 // (c) 1987 IGT - International Game Technology
-pepp0514a // (c) 1987 IGT - International Game Technology
-pepp0514b // (c) 1987 IGT - International Game Technology
-pepp0515 // (c) 1987 IGT - International Game Technology
-pepp0515a // (c) 1987 IGT - International Game Technology
-pepp0515b // (c) 1987 IGT - International Game Technology
-pepp0515c // (c) 1987 IGT - International Game Technology
-pepp0516 // (c) 1987 IGT - International Game Technology
-pepp0516a // (c) 1987 IGT - International Game Technology
-pepp0516b // (c) 1987 IGT - International Game Technology
-pepp0526 // (c) 1987 IGT - International Game Technology
-pepp0531 // (c) 1987 IGT - International Game Technology
-pepp0536 // (c) 1987 IGT - International Game Technology
-pepp0538 // (c) 1987 IGT - International Game Technology
-pepp0540 // (c) 1987 IGT - International Game Technology
-pepp0542 // (c) 1987 IGT - International Game Technology
-pepp0542a // (c) 1987 IGT - International Game Technology
-pepp0550 // (c) 1987 IGT - International Game Technology
-pepp0550a // (c) 1987 IGT - International Game Technology
-pepp0555 // (c) 1987 IGT - International Game Technology
-pepp0559 // (c) 1987 IGT - International Game Technology
-pepp0562 // (c) 1987 IGT - International Game Technology
-pepp0568 // (c) 1987 IGT - International Game Technology
-pepp0585 // (c) 1987 IGT - International Game Technology
-pepp0587 // (c) 1987 IGT - International Game Technology
-pepp0596 // (c) 1987 IGT - International Game Technology
-pepp0598 // (c) 1987 IGT - International Game Technology
-pepp0711 // (c) 1987 IGT - International Game Technology
-pepp0713 // (c) 1987 IGT - International Game Technology
-pepp0725 // (c) 1987 IGT - International Game Technology
-pepp0725a // (c) 1987 IGT - International Game Technology
-pepp0726 // (c) 1987 IGT - International Game Technology
-pepp0728 // (c) 1987 IGT - International Game Technology
-pepp0733 // (c) 1987 IGT - International Game Technology
-pepp0750 // (c) 1987 IGT - International Game Technology
-pepp0757 // (c) 1987 IGT - International Game Technology
-pepp0760 // (c) 1987 IGT - International Game Technology
-pepp0763 // (c) 1987 IGT - International Game Technology
-pepp0764 // (c) 1987 IGT - International Game Technology
-pepp0775 // (c) 1987 IGT - International Game Technology
-pepp0797 // (c) 1987 IGT - International Game Technology
-pepp0812 // (c) 1987 IGT - International Game Technology
-pepp0816 // (c) 1987 IGT - International Game Technology
-peip0028 // (c) 1987 IGT - International Game Technology
-peip0029 // (c) 1987 IGT - International Game Technology
-peip0031 // (c) 1987 IGT - International Game Technology
-peip0041 // (c) 1987 IGT - International Game Technology
-peip0051 // (c) 1987 IGT - International Game Technology
-peip0058 // (c) 1987 IGT - International Game Technology
-peip0062 // (c) 1987 IGT - International Game Technology
-peip0074 // (c) 1987 IGT - International Game Technology
-peip0079 // (c) 1987 IGT - International Game Technology
-peip0101 // (c) 1987 IGT - International Game Technology
-peip0103 // (c) 1987 IGT - International Game Technology
-peip0105 // (c) 1987 IGT - International Game Technology
-peip0108 // (c) 1987 IGT - International Game Technology
-peip0111 // (c) 1987 IGT - International Game Technology
-peip0112 // (c) 1987 IGT - International Game Technology
-peip0114 // (c) 1987 IGT - International Game Technology
-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
-pemg0183 // (c) 1994 IGT - International Game Technology
-pemg0252 // (c) 1994 IGT - International Game Technology
-pebe0014 // (c) 1994 IGT - International Game Technology
-pebe0014a // (c) 1994 IGT - International Game Technology
-peke0004 // (c) 1994 IGT - International Game Technology
-peke0017 // (c) 1994 IGT - International Game Technology
-peke1001 // (c) 1994 IGT - International Game Technology
-peke1006 // (c) 1994 IGT - International Game Technology
-peke1012 // (c) 1994 IGT - International Game Technology
-peke1012a // (c) 1994 IGT - International Game Technology
-peke1012b // (c) 1994 IGT - International Game Technology
-peke1013 // (c) 1994 IGT - International Game Technology
-peke1013a // (c) 1994 IGT - International Game Technology
-peps0014 // (c) 1996 IGT - International Game Technology
-peps0021 // (c) 1996 IGT - International Game Technology
-peps0022 // (c) 1996 IGT - International Game Technology
-peps0042 // (c) 1996 IGT - International Game Technology
-peps0043 // (c) 1996 IGT - International Game Technology
-peps0045 // (c) 1996 IGT - International Game Technology
-peps0047 // (c) 1996 IGT - International Game Technology
-peps0090 // (c) 1996 IGT - International Game Technology
-peps0092 // (c) 1996 IGT - International Game Technology
-peps0206 // (c) 1996 IGT - International Game Technology
-peps0207 // (c) 1996 IGT - International Game Technology
-peps0296 // (c) 1996 IGT - International Game Technology
-peps0298 // (c) 1996 IGT - International Game Technology
-peps0308 // (c) 1996 IGT - International Game Technology
-peps0358 // (c) 1996 IGT - International Game Technology
-peps0364 // (c) 1996 IGT - International Game Technology
-peps0366 // (c) 1996 IGT - International Game Technology
-peps0372 // (c) 1996 IGT - International Game Technology
-peps0373 // (c) 1996 IGT - International Game Technology
-peps0425 // (c) 1996 IGT - International Game Technology
-peps0426 // (c) 1996 IGT - International Game Technology
-peps0470 // (c) 1996 IGT - International Game Technology
-peps0581 // (c) 1996 IGT - International Game Technology
-peps0615 // (c) 1996 IGT - International Game Technology
-peps0628 // (c) 1996 IGT - International Game Technology
-peps0631 // (c) 1996 IGT - International Game Technology
-peps0708 // (c) 1996 IGT - International Game Technology
-peps0716 // (c) 1996 IGT - International Game Technology
-peps0722 // (c) 1996 IGT - International Game Technology
-pex0002p // (c) 1995 IGT - International Game Technology
-pex0002pa // (c) 1995 IGT - International Game Technology
-pex0006p // (c) 1995 IGT - International Game Technology
-pex0040p // (c) 1995 IGT - International Game Technology
-pex0042p // (c) 1995 IGT - International Game Technology
-pex0045p // (c) 1995 IGT - International Game Technology
-pex0046p // (c) 1995 IGT - International Game Technology
-pex0054p // (c) 1995 IGT - International Game Technology
-pex0053p // (c) 1995 IGT - International Game Technology
-pex0055p // (c) 1995 IGT - International Game Technology
-pex0055pa // (c) 1995 IGT - International Game Technology
-pex0055pb // (c) 1995 IGT - International Game Technology
-pex0055pc // (c) 1995 IGT - International Game Technology
-pex0055pd // (c) 1995 IGT - International Game Technology
-pex0055pe // (c) 1995 IGT - International Game Technology
-pex0055pf // (c) 1995 IGT - International Game Technology
-pex0055pg // (c) 1995 IGT - International Game Technology
-pex0055ph // (c) 1995 IGT - International Game Technology
-pex0055pi // (c) 1995 IGT - International Game Technology
-pex0055pj // (c) 1995 IGT - International Game Technology
-pex0055pk // (c) 1995 IGT - International Game Technology
-pex0055pl // (c) 1995 IGT - International Game Technology
-pex0055pm // (c) 1995 IGT - International Game Technology
-pex0055pn // (c) 1995 IGT - International Game Technology
-pex0055po // (c) 1995 IGT - International Game Technology
-pex0055pp // (c) 1995 IGT - International Game Technology
-pex0055pq // (c) 1995 IGT - International Game Technology
-pex0055pr // (c) 1995 IGT - International Game Technology
-pex0055ps // (c) 1995 IGT - International Game Technology
-pex0055pt // (c) 1995 IGT - International Game Technology
-pex0057p // (c) 1995 IGT - International Game Technology
-pex0057pa // (c) 1995 IGT - International Game Technology
-pex0057pb // (c) 1995 IGT - International Game Technology
-pex0057pc // (c) 1995 IGT - International Game Technology
-pex0057pd // (c) 1995 IGT - International Game Technology
-pex0057pe // (c) 1995 IGT - International Game Technology
-pex0060p // (c) 1995 IGT - International Game Technology
-pex0124p // (c) 1995 IGT - International Game Technology
-pex0150p // (c) 1995 IGT - International Game Technology
-pex0158p // (c) 1995 IGT - International Game Technology
-pex0171p // (c) 1995 IGT - International Game Technology
-pex0188p // (c) 1995 IGT - International Game Technology
-pex0190p // (c) 1995 IGT - International Game Technology
-pex0197p // (c) 1995 IGT - International Game Technology
-pex0203p // (c) 1995 IGT - International Game Technology
-pex0224p // (c) 1995 IGT - International Game Technology
-pex0225p // (c) 1995 IGT - International Game Technology
-pex0242p // (c) 1995 IGT - International Game Technology
-pex0265p // (c) 1995 IGT - International Game Technology
-pex0291p // (c) 1995 IGT - International Game Technology
-pex0417p // (c) 1995 IGT - International Game Technology
-pex0426p // (c) 1995 IGT - International Game Technology
-pex0430p // (c) 1995 IGT - International Game Technology
-pex0434p // (c) 1995 IGT - International Game Technology
-pex0447p // (c) 1995 IGT - International Game Technology
-pex0449p // (c) 1995 IGT - International Game Technology
-pex0451p // (c) 1995 IGT - International Game Technology
-pex0452p // (c) 1995 IGT - International Game Technology
-pex0454p // (c) 1995 IGT - International Game Technology
-pex0455p // (c) 1995 IGT - International Game Technology
-pex0458p // (c) 1995 IGT - International Game Technology
-pex0459p // (c) 1995 IGT - International Game Technology
-pex0459pa // (c) 1995 IGT - International Game Technology
-pex0489p // (c) 1995 IGT - International Game Technology
-pex0508p // (c) 1995 IGT - International Game Technology
-pex0514p // (c) 1995 IGT - International Game Technology
-pex0515p // (c) 1995 IGT - International Game Technology
-pex0516p // (c) 1995 IGT - International Game Technology
-pex0536p // (c) 1995 IGT - International Game Technology
-pex0537p // (c) 1995 IGT - International Game Technology
-pex0550p // (c) 1995 IGT - International Game Technology
-pex0557p // (c) 1995 IGT - International Game Technology
-pex0568p // (c) 1995 IGT - International Game Technology
-pex0578p // (c) 1995 IGT - International Game Technology
-pex0588p // (c) 1995 IGT - International Game Technology
-pex0581p // (c) 1995 IGT - International Game Technology
-pex0725p // (c) 1995 IGT - International Game Technology
-pex0726p // (c) 1995 IGT - International Game Technology
-pex0727p // (c) 1995 IGT - International Game Technology
-pex0763p // (c) 1995 IGT - International Game Technology
-pex0764p // (c) 1995 IGT - International Game Technology
-pex2010p // (c) 1995 IGT - International Game Technology
-pex2016p // (c) 1995 IGT - International Game Technology
-pex2017p // (c) 1995 IGT - International Game Technology
-pex2018p // (c) 1995 IGT - International Game Technology
-pex2021p // (c) 1995 IGT - International Game Technology
-pex2024p // (c) 1995 IGT - International Game Technology
-pex2025p // (c) 1995 IGT - International Game Technology
-pex2026p // (c) 1995 IGT - International Game Technology
-pex2027p // (c) 1995 IGT - International Game Technology
-pex2028p // (c) 1995 IGT - International Game Technology
-pex2029p // (c) 1995 IGT - International Game Technology
-pex2031p // (c) 1995 IGT - International Game Technology
-pex2033p // (c) 1995 IGT - International Game Technology
-pex2034p // (c) 1995 IGT - International Game Technology
-pex2035p // (c) 1995 IGT - International Game Technology
-pex2036p // (c) 1995 IGT - International Game Technology
-pex2037p // (c) 1995 IGT - International Game Technology
-pex2038p // (c) 1995 IGT - International Game Technology
-pex2039p // (c) 1995 IGT - International Game Technology
-pex2040p // (c) 1995 IGT - International Game Technology
-pex2042p // (c) 1995 IGT - International Game Technology
-pex2043p // (c) 1995 IGT - International Game Technology
-pex2044p // (c) 1995 IGT - International Game Technology
-pex2045p // (c) 1995 IGT - International Game Technology
-pex2066p // (c) 1995 IGT - International Game Technology
-pex2067p // (c) 1995 IGT - International Game Technology
-pex2068p // (c) 1995 IGT - International Game Technology
-pex2069p // (c) 1995 IGT - International Game Technology
-pex2070p // (c) 1995 IGT - International Game Technology
-pex2111p // (c) 1995 IGT - International Game Technology
-pex2121p // (c) 1995 IGT - International Game Technology
-pex2121pa // (c) 1995 IGT - International Game Technology
-pex2127p // (c) 1995 IGT - International Game Technology
-pex2134p // (c) 1995 IGT - International Game Technology
-pex2150p // (c) 1995 IGT - International Game Technology
-pex2152p // (c) 1995 IGT - International Game Technology
-pex2172p // (c) 1995 IGT - International Game Technology
-pex2172pa // (c) 1995 IGT - International Game Technology
-pex2173p // (c) 1995 IGT - International Game Technology
-pex2178p // (c) 1995 IGT - International Game Technology
-pex2179p // (c) 1995 IGT - International Game Technology
-pex2180p // (c) 1995 IGT - International Game Technology
-pex2211p // (c) 1995 IGT - International Game Technology
-pex2236p // (c) 1995 IGT - International Game Technology
-pex2241p // (c) 1995 IGT - International Game Technology
-pex2244p // (c) 1995 IGT - International Game Technology
-pex2245p // (c) 1995 IGT - International Game Technology
-pex2245pa // (c) 1995 IGT - International Game Technology
-pex2247p // (c) 1995 IGT - International Game Technology
-pex2250p // (c) 1995 IGT - International Game Technology
-pex2251p // (c) 1995 IGT - International Game Technology
-pex2270p // (c) 1995 IGT - International Game Technology
-pex2272p // (c) 1995 IGT - International Game Technology
-pex2275p // (c) 1995 IGT - International Game Technology
-pex2276p // (c) 1995 IGT - International Game Technology
-pex2279p // (c) 1995 IGT - International Game Technology
-pex2283p // (c) 1995 IGT - International Game Technology
-pex2284p // (c) 1995 IGT - International Game Technology
-pex2287p // (c) 1995 IGT - International Game Technology
-pex2297p // (c) 1995 IGT - International Game Technology
-pex2297pa // (c) 1995 IGT - International Game Technology
-pex2302p // (c) 1995 IGT - International Game Technology
-pex2303p // (c) 1995 IGT - International Game Technology
-pex2306p // (c) 1995 IGT - International Game Technology
-pex2307p // (c) 1995 IGT - International Game Technology
-pex2308p // (c) 1995 IGT - International Game Technology
-pex2310p // (c) 1995 IGT - International Game Technology
-pex2312p // (c) 1995 IGT - International Game Technology
-pex2314p // (c) 1995 IGT - International Game Technology
-pex2315p // (c) 1995 IGT - International Game Technology
-pex2374p // (c) 1995 IGT - International Game Technology
-pex2376p // (c) 1995 IGT - International Game Technology
-pex2377p // (c) 1995 IGT - International Game Technology
-pex2386p // (c) 1995 IGT - International Game Technology
-pex2412p // (c) 1995 IGT - International Game Technology
-pex2419p // (c) 1995 IGT - International Game Technology
-pex2420p // (c) 1995 IGT - International Game Technology
-pex2421p // (c) 1995 IGT - International Game Technology
-pex2440p // (c) 1995 IGT - International Game Technology
-pex2461p // (c) 1995 IGT - International Game Technology
-pex2474p // (c) 1995 IGT - International Game Technology
-pex2478p // (c) 1995 IGT - International Game Technology
-pex2479p // (c) 1995 IGT - International Game Technology
-pex2480p // (c) 1995 IGT - International Game Technology
-pex2485p // (c) 1995 IGT - International Game Technology
-pekoc766 // (c) 1997 IGT - International Game Technology
-pekoc801 // (c) 1997 IGT - International Game Technology
-pekoc802 // (c) 1997 IGT - International Game Technology
-pekoc803 // (c) 1997 IGT - International Game Technology
-pekoc803a // (c) 1997 IGT - International Game Technology
-pekoc804 // (c) 1997 IGT - International Game Technology
-pekoc806 // (c) 1997 IGT - International Game Technology
-pekoc818 // (c) 1997 IGT - International Game Technology
-pekoc819 // (c) 1997 IGT - International Game Technology
-pekoc822 // (c) 1997 IGT - International Game Technology
-pekoc825 // (c) 1997 IGT - International Game Technology
-pex0006k // (c) 1997 IGT - International Game Technology
-pex0013k // (c) 1997 IGT - International Game Technology
-pex0838s // (c) 1997 IGT - International Game Technology
-pex0841s // (c) 1997 IGT - International Game Technology
-pex0998s // (c) 1997 IGT - International Game Technology
-pex1087s // (c) 1997 IGT - International Game Technology
-pexm001p // (c) 1997 IGT - International Game Technology
-pexm002p // (c) 1997 IGT - International Game Technology
-pexm002pa // (c) 1997 IGT - International Game Technology
-pexm003p // (c) 1997 IGT - International Game Technology
-pexm004p // (c) 1997 IGT - International Game Technology
-pexm005p // (c) 1997 IGT - International Game Technology
-pexm006p // (c) 1997 IGT - International Game Technology
-pexm006pa // (c) 1997 IGT - International Game Technology
-pexm007p // (c) 1997 IGT - International Game Technology
-pexm008p // (c) 1997 IGT - International Game Technology
-pexm009p // (c) 1997 IGT - International Game Technology
-pexm013p // (c) 1997 IGT - International Game Technology
-pexmp013 // (c) 1997 IGT - International Game Technology
-pexmp017 // (c) 1997 IGT - International Game Technology
-pexmp017a // (c) 1997 IGT - International Game Technology
-pexmp017b // (c) 1997 IGT - International Game Technology
-pexmp022 // (c) 1997 IGT - International Game Technology
-pexmp026 // (c) 1997 IGT - International Game Technology
-pexmp030 // (c) 1997 IGT - International Game Technology
-pexmp030a // (c) 1997 IGT - International Game Technology
-
-// IGT Game King
-ms72c
-gkigt4
-gkigt4ms
-gkigt43
-gkigt43n
-gkigtez
-gkigt5p
-igtsc
-gkkey
-
-elgrande // (c) 1982 Tuni Electro Service / E.T. Marketing
-jjpoker // (c) 1983 Enter-Tech
-jjpokerb // (c) 1983 Enter-Tech
-ssipkr24 // (c) 1988 SSI
-ssipkr30 // (c) 1988 SSI
-ssipkr40 // (c) 1990 SSI
-altair // (c) 1981 Cidelsa
-destryer // (c) 1981 Cidelsa
-destryera // (c) 1981 Cidelsa
-draco // (c) 1981 Cidelsa
-tetriskr // (c) 1988? bootleg
-trvhang // (c) 1984 SMS MFG CORP
-trvhanga // (c) 1984 SMS MFG CORP
-sureshot // (c) 1985 SMS MFG CORP
-secondch // (c) 1985 SMS MFG CORP
-skylncr // (c) 1995 Bordun International
-butrfly // (c) 1995 Bordun International
-mbutrfly // (c) 1999 (Bordun International?)
-madzoo // (c) 1995 Bordun International
-leader // Bootleg?
-gallag50 // Bootleg?
-neraidou // Bootleg?
-sstar97 // (c) 199? Bordun International
-livequiz // (c) 1999 Andamiro
-hammer // (c) 2000 Andamiro
-discoboy // (c) 1993 Soft Art Co.
-discoboyp // (c) 1993 Soft Art Co. (Promat license?)
-pangofun // (c) 1995 InfoCube
-koikoi // (c) 1983 Kiwako
-good // (c) 1998
-filetto // (c) 1990 Novamatic
-quizo // (c) 1985 Seoul Coin Corp.
-quizoa // (c) 1985 Seoul Coin Corp.
-gstream // (c) 2002, Oriental Soft Japan
-x2222 // (c) 2000, Oriental Soft
-x2222o // (c) 2000, Oriental Soft
-miniboy7 // (c) 1983, Bonanza Enterprises
-miniboy7a // (c) 1983, Bonanza Enterprises
-4in1a // MAME based bootleg
-4in1b // MAME based bootleg
-19in1 // MAME based bootleg
-39in1 // MAME based bootleg
-48in1 // MAME based bootleg
-48in1a // MAME based bootleg
-48in1b // MAME based bootleg
-60in1 // MAME based bootleg
-kingpin // (c) 1983 American Communications Laboratories Inc.
-maxideal // (c) 1983 American Communications Laboratories Inc.
-thayers // (c) 1983 RDI Video Systems
-thayersa // (c) 1983 RDI Video Systems
-istellar // (c) 1983 Funai / Gakken
-esh // (c) 1984 Funai / Gakken
-esha // (c) 1984 Funai / Gakken
-eshb // (c) 1984 Funai / Gakken
-comebaby // (c) 2000 ExPotato
-bntyhunt // (c) 200? GCTech Co., LTD
-mirage // (c) 1994 Mitchell
-dominob // (c) 1996 Wonwoo Systems
-dominobv2 // (c) 1996 Wonwoo Systems
-jongkyo // (c) 1985 Kiwako
-gamecstl // MAME based bootleg
-gamecst2 // MAME based bootleg, version 2.613
-drw80pkr // (c) 1982 IGT
-drw80pk2 // (c) 1983 IGT
-fortune1 // (c) 1984 IGT
-blazlaz // (c) 1989 Hudson Soft
-keith // (c) 1989 Hudson Soft
-aliencr // (c) 1989 Hudson Soft
-paclandp // (c) 1989 Namco
-ggconnie // (c) ???? Capcom
-paranoia // (c) 1990 Naxat Soft
-tourvis // (c) ???? Tourvision
-tvdrgnst // (c) 1988 Namcot (Tourvision bootleg)
-tvlegaxe // (c) 1988 Victor Musical Industries, Inc. (Tourvision bootleg)
-tvflaptw // (c) 1989 Namco (Tourvision bootleg)
-tvdensho // (c) 1989 Big Club / Wolf Team (Tourvision bootleg)
-tvshnobi // (c) 1989 Sega / Asmik Corporation (Tourvision bootleg)
-tvsdarms // (c) 1989 Capcom / Nec Avenue (Tourvision bootleg)
-tvsson2 // (c) 1989 Capcom / Nec Avenue (Tourvision bootleg)
-tvgunhed // (c) 1989 Hudson / Toho Sunrise (Tourvision bootleg)
-tvmrheli // (c) 1989 IREM Corp (Tourvision bootleg)
-tvusapb // (c) 1989 Aicom (Tourvision bootleg)
-tvvolfd // (c) 1989 Taito (Tourvision bootleg)
-tvdormon // (c) 1989 Hudson / Fujiko-Shogakukan-TV Asahi (Tourvision bootleg)
-tvdunexp // (c) 1989 Hudson / Atlus (Tourvision bootleg)
-tvwnshot // (c) 1989 Data East Corp. (Tourvision bootleg)
-tvablast // (c) 1990 Hudson / Kaneko (Tourvision bootleg)
-tvaburn // (c) 1990 Sega / Nec Avenue (Tourvision bootleg)
-tvarmedf // (c) 1990 Nichibutsu / Big Don (Tourvision bootleg)
-tvbeball // (c) 1990 Hudson (Tourvision bootleg)
-tvbomber // (c) 1990 Hudson (Tourvision bootleg)
-tvdsenpu // (c) 1990 Toaplan / Nec Avenue (Tourvision bootleg)
-tvdevilc // (c) 1990 Naxat / Red (Tourvision bootleg)
-tvdodgeb // (c) 1990 Technos Japan Corp / Naxat Soft (Tourvision bootleg)
-tvfblast // (c) 1990 Namco / Namcot (Tourvision bootleg)
-tvbrabho // (c) 1990 Namco / Namcot (Tourvision bootleg)
-tvfsoc90 // (c) 1990 Human (Tourvision bootleg)
-tvgomola // (c) 1990 Human (Tourvision bootleg)
-tvkaikai // (c) 1990 Taito (Tourvision bootleg)
-tvsssold // (c) 1990 Hudson / Kaneko (Tourvision bootleg)
-tvthbld // (c) 1990 Sega / NEC Avenue (Tourvision bootleg)
-tvrs2 // (c) 1990 Taito (Tourvision bootleg)
-tvninjas // (c) 1990 IREM Corp (Tourvision bootleg)
-tvopwolf // (c) 1990 Taito / Nec Avenue (Tourvision bootleg)
-tvovride // (c) 1990 Sting / Data East Corporation (Tourvision bootleg)
-tvpchasr // (c) 1990 Naxat Soft (Tourvision bootleg)
-tvsvball // (c) 1990 Video System (Tourvision bootleg)
-tvtsboys // (c) 1990 Victor Musical Industries, Inc. (Tourvision bootleg)
-tveigues // (c) 1990 Victor Musical Industries, Inc. (Tourvision bootleg)
-tvwring // (c) 1990 Naxat Soft (Tourvision bootleg)
-tvxvious // (c) 1990 Namco Ltd. / Namcot (Tourvision bootleg)
-tv1943 // (c) 1991 Capcom / Nexat Soft (Tourvision bootleg)
-tvbalstx // (c) 1991 Psygnosis / Coconuts Japan (Tourvision bootleg)
-tvcolumn // (c) 1991 Telenet Japan (Tourvision bootleg)
-tvcoryon // (c) 1991 Naxat Soft (Tourvision bootleg)
-tvdmoon // (c) 1991 T.S.S. (Tourvision bootleg)
-tvftenis // (c) 1991 Human (Tourvision bootleg)
-tvhtdaka // (c) 1991 Taito(Tourvision bootleg)
-tvtonma // (c) 1991 IREM Corp (Tourvision bootleg)
-tvjchan // (c) 1991 Hudson (Tourvision bootleg)
-tvpcgen2 // (c) 1991 Hudson Soft / Red (Tourvision bootleg)
-tvpaclnd // (c) 1991 Namco / Namcot (Tourvision bootleg)
-tvpdrift // (c) 1991 Sega / Asmik Corporation (Tourvision bootleg)
-tvpros91 // (c) 1991 Namco / Namcot (Tourvision bootleg)
-tvpow11 // (c) 1991 Hudson (Tourvision bootleg)
-tvpwlg4 // (c) 1991 Hudson (Tourvision bootleg)
-tvpzlboy // (c) 1991 Atlus / Telenet Japan (Tourvision bootleg)
-tvraiden // (c) 1991 Seibu Kaihatsu inc / Hudson Soft (Tourvision bootleg)
-tvrtype2 // (c) 1991 IREM (Tourvision bootleg)
-tvslmndr // (c) 1991 Konami (Tourvision bootleg)
-tvsci // (c) 1991 Taito (Tourvision bootleg)
-tvskweek // (c) 1991 Victor Musical Industries, Inc. (Tourvision bootleg)
-tvtaisen // (c) 1992 Taito (Tourvision bootleg)
-tvlqkids // (c) 1992 Taito (Tourvision bootleg)
-tvninjar // (c) 1992 Tecmo / Hudson Soft (Tourvision bootleg)
-tvpcybrg // (c) 1992 Hudson Soft / Red (Tourvision bootleg)
-tvtsujin // (c) 1992 Toaplan Co Ltd / Taito Corporation (Tourvision bootleg)
-tvtcrst2 // (c) 1992 Nichibutsu / Nihon Bussan Co., Ltd (Tourvision bootleg)
-vcombat // (c) 1993 VR8 Inc.
-shadfgtr // (c) 1993 DUTECH Inc.
-skimaxx // (c) 1996 Kyle Hodgetts/ICE
-blackt96 // (c) 1996 D.G.R.M. of Korea
-magictg // (c) 199? Acclaim
-magictga // (c) 199? Acclaim
-re900 // (c) 1993 Entretenimientos GEMINIS
-bs94 // (c) 1994 Entretenimientos GEMINIS
-jokrwild // (c) 1988 Sigma
-pesadelo // (c) 1989 Forte II Games
-pengadvb // (c) 1988 Screen
-spool99 // (c) 1998 Electronic Projects
-spool99a // (c) 1998 Electronic Projects
-spool99b // (c) 1998 Electronic Projects
-spool99c // (c) 1998 Electronic Projects
-vcarn // (c) 1999 Electronic Projects
-4roses // (c) 1999 Unknown
-4rosesa // (c) 1999 Unknown
-rugby // (c) 1999 C.M.C.
-big10 // (c) 198? Unknown
-bingor1 // (c) 2002 Unknown
-bingor2 // (c) 2002 Unknown
-bingor3 // (c) 2002 Unknown
-bingor4 // (c) 2002 Unknown
-bingor5 // (c) 2002 Unknown
-galgame // (c) 1971 Computer Recreations, Inc
-ichiban // (c) 199? Excel
-3x3puzzl // (c) 199? Ace
-3x3puzzla // (c) 199? Ace
-gambl186 // unknown
-gambl186a // unknown
-gambl186b // unknown
-
-// InterFlip / Recreativos Franco
-videopkr // (c) 1984 InterFlip
-blckjack // (c) 1984 InterFlip
-videodad // (c) 1987 InterFlip
-videocba // (c) 1987 InterFlip
-babypkr // (c) 1987 Recreativos Franco
-bpoker // (c) 198? Codere?
-babydad // (c) 1987 Recreativos Franco
-
-// H8/3048 italian gambling games
-laperla // (c) 2002 Nazionale Elettronica
-laperlag // (c) 2001 Nazionale Elettronica
-capunc // (c) 2000 Nazionale Elettronica
-capcor // (c) 2001 Nazionale Elettronica
-euro2k2 // (c) 2001 Nazionale Elettronica
-euro2k2a // (c) 2001 Nazionale Elettronica
-euro2k2s // (c) 2002 Nazionale Elettronica
-mnumber // (c) 200? M.M. - B.R.L.
-abacus // (c) 200? unknown
-bookthr // (c) 200? unknown
-
-// H8/3337 italian gambling games
-ntcash // (c) 1999 unknown
-wizard // (c) 1999 A.A.
-trstar2k // (c) 1999 A.M.
-laser2k1 // (c) 2001 unknown
-mdrink // (c) 2001 unknown
-te0144 // (c) 2001 unknown
-cmagica // (c) 200? unknown
-millsun // (c) 200? unknown
-sspac2k1 // (c) 200? unknown
-elvis // (c) 200? unknown
-sstar // (c) 200? unknown
-pirati // (c) 2001 Cin
-mnumitg // (c) 200? unknown
-mclass // (c) 200? unknown
-europass // (c) 200? unknown
-thedrink // (c) 200? unknown
-unkh8gam // (c) 200? unknown
-
-// Intel 8086-based italian gambling games
-newmcard // (c) 19?? unknown
-brasil // (c) 2000 unknown
-fashion // (c) 2000 unknown
-ciclone // (c) 2000 unknown
-record // (c) 2000 High Video
-
-// V30-based italian gambling games
-tour4000 // (c) 2000 High Video
-cfever40 // (c) 2000 High Video
-cfever50 // (c) 2000 High Video
-tour4010 // (c) 2000 High Video
-cfever51 // (c) 2000 High Video
-cfever61 // (c) 2000 High Video
-cfever1k // (c) 2000 High Video
-girotutt // (c) 2000 High Video
-nyjoker //
-grancapi // (c) 2000 High Video
-galeone
-magicbom // (c) 2000 High Video
-
-// Sure games
-mil4000 // (c) 2000 Sure Milano
-mil4000a // (c) 2000 Sure Milano
-mil4000b // (c) 2000 Sure Milano
-mil4000c // (c) 2000 Sure Milano
-top21 // (c) 200? Assogiochi Assago (Mi)
-chewheel // (c) 200? Assogiochi Assago (Mi)
-
-// Mitsubishi/Renesas M16/62A italian gambling games
-ejollyx5 // (c) 200? Solar Games
-grandprx // (c) 200? 4fun
-supjolly // (c) 200? unknown
-x5jokers // (c) 200? Electronic Projects
-queenotg //
-ejollyx9 //
-
-// Sealy
-crzyddz // (c) 2004? Sealy
-
-// Astro Corp.
-showhand // (c) 2000 Astro Corp.
-showhanc // (c) 2000 Astro Corp.
-skilldrp // (c) 2002 Astro Corp.
-speeddrp // (c) 2003 Astro Corp.
-dinodino // (c) 2003? Astro Corp.
-astoneag // (c) 2004? Astro Corp.
-winbingo // (c) 2005? Astro Corp.
-winbingoa // (c) 2005? Astro Corp.
-hacher // (c) 2005? bootleg (Gametron)
-zoo // (c) 2005? Astro Corp.
-westvent // (c) 2007? Astro Corp.
-
-// Dyna
-ncb3 // (c) 199? Dyna Electronics
-cb3a // (c) 199? Dyna Electronics
-cb3 // (c) 199? Dyna Electronics
-cb3b // (c) 199? Dyna Electronics
-cb3c // (c) 199? Dyna Electronics
-cb3d // (c) 199? Dyna Electronics
-cb3e // 199? bootleg
-chryangl // (c) 199? Dyna Electronics
-cmv801 // (c) 198? Corsica
-cmv4 // (c) 1992 Dyna Electronics
-cmv4a // (c) 1992 Dyna Electronics
-cmwm // (c) 199? Dyna Electronics
-cmfun // (c) 1995 Dyna Electronics
-cmaster // (c) 1991 Dyna Electronics
-cmasterb // (c) 1991 Dyna Electronics
-cmezspin // (c) 1991 Dyna Electronics
-cmasterc // (c) 1991 Dyna Electronics
-cmasterbv // (c) 1991 Dyna Electronics / Gerald Duhamel?
-cmasterd // (c) 1991 Dyna Electronics
-cmastere // (c) 1991 Dyna Electronics
-cmasterf // (c) 1991 Dyna Electronics
-cmasterg // (c) 1991 Dyna Electronics
-cmasterh // (c) 1991 Dyna Electronics
-cmast91 // (c) 1991 Dyna Electronics
-cmast92 // (c) 1992 Dyna Electronics
-cmast97 // (c) 1996 Dyna Electronics
-cmast99 // 1999?
-
-tonypok // (c) 1991 Corsica
-jkrmast // (c) 199? unknown
-pkrmast // (c) 199? unknown
-pkrmasta // (c) 199? unknown
-
-cb2001 // (c) 2001 Dyna Electronics
-scherrym // (c) 2001? Dyna Electronics
-
-star100 // (c) 199? Sang Ho
-crazybon // (c) 199? Sang Ho
-
-cmpacman
-cmtetris
-cmtetrsa
-cmtetrsb
-
-// STG?
-queen
-
-// Aristocrat
-86lions // (c) 1985?
-caswin // (c) 1985
-
-// Aristocrat Mk4 hardware
-gtroppo // (c) 1986 Ainsworth Nominees P.L.
-clkwise // (c) 1986 Ainsworth Nominees P.L.
-gldnpkr // (c) 1986 Ainsworth Nominees P.L.
-cgold // (c) 1986 Ainsworth Nominees P.L.
-fvrpitch // (c) 1986 Ainsworth Nominees P.L.
-gunnrose // (c) 1993
-3bagflvt // (c) 1994
-3bagflnz // (c) 1994
-eforest // (c) 1994
-eforesta // (c) 1995
-eforestb // (c) 1996
-cgold2 // (c) 1995
-blkrhino // (c) 1996
-goldenc // (c) 1996
-kgbird // (c) 1996
-kgbirda // (c) 1996
-topgear // (c) 1996
-wtigernz // (c) 1996
-fhunter // (c) 1996
-fhuntera // (c) 1996
-arcwins // (c) 1996
-wildone // (c) 1997
-phantomp // (c) 1998
-swtht2nz // (c) 1998
-ffortune // (c) 1998
-autmoon // (c) 1999
-coralr2 // (c) 2002
-
-// Aristocrat Mk5 hardware
-aristmk5 // (c) 1995, USA platform set chips
-swthrt2v // (c) 1995
-enchfrst // (c) 1995
-minemine // (c) 1996
-dolphntr // (c) 1996
-dolphtra // (c) 1996
-dolphtre // (c) 1996
-cashcham // (c) 1996
-enchfore // (c) 1997
-mgarden // (c) 1997
-goldprmd // (c) 1997
-qotn // (c) 1997
-qotna // (c) 1997
-goldpyra // (c) 1997
-dmdtouch // (c) 1997
-wldcougr // (c) 1997
-bumblbug // (c) 1997
-pengpays // (c) 1997
-trpdlght // (c) 1997
-chickena // (c) 1998
-adonis // (c) 1998
-adonisa // (c) 1998
-swheart2 // (c) 1998
-thgamblr // (c) 1998
-reelrock // (c) 1998
-indiandr // (c) 1998
-chariotc // (c) 1998
-wtiger // (c) 1999
-bootsctn // (c) 1999
-cuckoo // (c) 2000
-magicmsk // (c) 2000
-magicmska // (c) 2000
-margmgc // (c) 2000
-marmagic // (c) 2000
-prtygras // (c) 2001
-geishanz // (c) 2001
-adonise // (c) 2001
-koalamnt // (c) 2001
-partygrs // (c) 2001
-
-// Aristocrat Mk6 hardware
-aristmk6
-antcleo // (c) 2004
-50lions // (c) 2002
-50lionsa // (c) 2003
-choysun // (c) 2003
-crystals // (c) 2003
-indianmm // (c) 2003
-wheregld // (c) 2004
-whalecsh // (c) 2002
-wildways // (c) 2003
-thaiprin // (c) 2003
-
-// Eagle
-janshi
-ronjan
-pinkiri8
-
-// Wing
-superwng // (c) 1985 Wing Co. Ltd
-slotcarn // (c) 1985 Wing Co. Ltd
-lucky74 // (c) 1988 Wing Co. Ltd
-lucky74a // (c) 1988 Wing Co. Ltd
-lucky74b // (c) 1988 Wing Co. Ltd
-lucky8 // (c) 1989 Wing Co. Ltd
-lucky8a // (c) 1989 Wing Co. Ltd
-lucky8b // (c) 1989 Wing Co. Ltd
-lucky8c // (c) 1989 Wing Co. Ltd
-lucky8d // (c) 1989 Wing Co. Ltd
-lucky8e // (c) 1989 Wing Co. Ltd
-megaline // (c) 1991 Fun World.
-bonusch // (c) 1990 Wing Co. Ltd
-luckgrln // (c) 1991 Wing Co. Ltd
-7smash // (c) 1993 Sovic
-luckylad // (c) 1985 Wing Co. Ltd
-bingowng // (c) 1993 Wing Co. Ltd
-bingownga // (c) 1993 Wing Co. Ltd
-excitbj // (c) 1992 Wing Co. Ltd
-
-carb2002 // bootleg
-carb2003 // bootleg
-nfm // bootleg
-scmaster // 1994, unknown
-unkch1 // bootleg
-unkch2 // bootleg
-unkch3 // bootleg
-unkch4 // bootleg
-cherry96 // bootleg
-ns8lines // unknown
-ns8linew // unknown
-ladylinr // (c) 198? TAB Austria
-kkotnoli // 198? south korean hack
-wcat3
-magodds // 198? (c) Micro Manufacturing Ltd.
-magoddsa // 198? (c) Micro Manufacturing Ltd.
-magoddsb // 198? (c) Micro Manufacturing Ltd.
-magoddsc // 198? (c) Micro Manufacturing Ltd.
-magoddsd // 198? (c) Micro Manufacturing Ltd.
-
-// Amcoe
-skill98 // (c) 1998 Amcoe
-match98 // (c) 1998 Amcoe
-schery97 // (c) 1998 Amcoe
-schery97a // (c) 1998 Amcoe
-roypok96 // (c) 1996 Amcoe
-roypok96a // (c) 1996 Amcoe
-roypok96b // (c) 1996 Amcoe
-roypok96c // (c) 1996 Amcoe
-pokonl97 // (c) 1997 Amcoe
-nc96 // (c) 1996 Amcoe
-nc96a // (c) 1996 Amcoe
-nc96b // (c) 1996 Amcoe
-nc96c // (c) 1996 Amcoe
-nc96d // (c) 1996 Amcoe
-nc96e // (c) 1996 Amcoe
-nc96f // (c) 1996 Amcoe
-nc96txt // (c) 2000 Amcoe
-nfb96 // (c) 1996 Amcoe
-nfb96a // (c) 1996 Amcoe
-nfb96b // (c) 1996 Amcoe
-nfb96c // (c) 1996 Amcoe
-nfb96txt // (c) 2000 Amcoe
-fb2010 // (c) 2009 Amcoe
-nfb96se // bootleg
-nfb96sea // bootleg
-nfb96seb // bootleg
-suprball // (c) 2002 Amcoe - Skill based
-sfbonus // (c) 2003 Amcoe - Skill Fruit Bonus
-sfbonusd1 // (c) 2003 Amcoe
-sfbonusv1 // (c) 2003 Amcoe
-sfbonuso // (c) 2003 Amcoe
-sfbonuso2 // (c) 2003 Amcoe
-parrot3 // (c) 2003 Amcoe - Parrot Poker III
-parrot3b1 // (c) 2004 Amcoe
-parrot3d1 // (c) 2004 Amcoe
-parrot3v1 // (c) 2004 Amcoe
-parrot3o // (c) 2004 Amcoe
-hldspin1 // (c) 2000 Amcoe - Hold & Spin I
-hldspin1dt // (c) 2000 Amcoe
-hldspin1vt // (c) 2000 Amcoe
-hldspin1o // (c) 2000 Amcoe
-hldspin2 // (c) 2000 Amcoe - Hold & Spin II
-hldspin2d1 // (c) 2000 Amcoe
-hldspin2v1 // (c) 2000 Amcoe
-hldspin2o // (c) 2000 Amcoe
-fcnudge // (c) 2003 Amcoe - Fruit Carnival Nudge
-fcnudgeo // (c) 2003 Amcoe
-fcnudgeo2 // (c) 2003 Amcoe
-fcnudgeo3 // (c) 2003 Amcoe
-pickwin // (c) 2001 Amcoe - Pick 'n Win
-pickwinb1 // (c) 2001 Amcoe
-pickwind1 // (c) 2001 Amcoe
-pickwinv1 // (c) 2001 Amcoe
-pickwinbt // (c) 2001 Amcoe
-pickwindt // (c) 2001 Amcoe
-pickwinvt // (c) 2001 Amcoe
-pickwino // (c) 2001 Amcoe
-pickwino2 // (c) 2001 Amcoe
-tighook // (c) 2004 Amcoe - Tiger Hook
-tighookc1 // (c) 2004 Amcoe
-tighookd1 // (c) 2004 Amcoe
-tighookv1 // (c) 2004 Amcoe
-tighookc2 // (c) 2004 Amcoe
-tighookd2 // (c) 2004 Amcoe
-tighookv2 // (c) 2004 Amcoe
-tighooko // (c) 2004 Amcoe
-tighooko2 // (c) 2004 Amcoe
-robadv // (c) 2004 Amcoe - Robin's Adventure
-robadvc1 // (c) 2004 Amcoe
-robadvd1 // (c) 2004 Amcoe
-robadvv1 // (c) 2004 Amcoe
-robadvo // (c) 2004 Amcoe
-robadv2 // (c) 2004 Amcoe - Robin's Adventure 2
-robadv2c1 // (c) 2004 Amcoe
-robadv2d1 // (c) 2004 Amcoe
-robadv2v1 // (c) 2004 Amcoe
-robadv2c2 // (c) 2004 Amcoe
-robadv2d2 // (c) 2004 Amcoe
-robadv2v2 // (c) 2004 Amcoe
-robadv2c3 // (c) 2004 Amcoe
-robadv2d3 // (c) 2004 Amcoe
-robadv2v3 // (c) 2004 Amcoe
-robadv2o // (c) 2004 Amcoe
-robadv2o2 // (c) 2004 Amcoe
-pirpok2 // (c) 2003 Amcoe - Pirate Poker II
-pirpok2b1 // (c) 2003 Amcoe
-pirpok2d1 // (c) 2003 Amcoe
-pirpok2v1 // (c) 2003 Amcoe
-pirpok2o // (c) 2003 Amcoe
-anibonus // (c) 2003 Amcoe - Animal Bonus
-anibonusv1 // (c) 2003 Amcoe
-anibonusv2 // (c) 2003 Amcoe
-anibonusb1 // (c) 2003 Amcoe
-anibonusd1 // (c) 2003 Amcoe
-anibonusb2 // (c) 2003 Amcoe
-anibonusd2 // (c) 2003 Amcoe
-anibonuso // (c) 2003 Amcoe
-anibonuso2 // (c) 2003 Amcoe
-anibonuso3 // (c) 2003 Amcoe
-anibonusxo // (c) 2003 Amcoe
-anibonusxo2 // (c) 2003 Amcoe
-anibonusxo3 // (c) 2003 Amcoe
-abnudge // (c) 2003 Amcoe - Animal Bonus Nudge
-abnudgeb // (c) 2003 Amcoe
-abnudged // (c) 2003 Amcoe
-abnudgeo // (c) 2003 Amcoe
-dblchal // (c) 2003 Amcoe - Double Challenge
-dblchalc1 // (c) 2003 Amcoe
-dblchald1 // (c) 2003 Amcoe
-dblchalv1 // (c) 2003 Amcoe
-dblchalo // (c) 2003 Amcoe
-anithunt // (c) 2003 Amcoe - Animal Treasure Hunt
-anithuntd1 // (c) 2003 Amcoe
-anithuntv1 // (c) 2003 Amcoe
-anithunto // (c) 2003 Amcoe
-anithunto2 // (c) 2003 Amcoe
-sfruitb // (c) 2002 Amcoe - Super Fruit Bonus
-sfruitbb1 // (c) 2002 Amcoe
-sfruitbd1 // (c) 2002 Amcoe
-sfruitbv1 // (c) 2002 Amcoe
-sfruitbb2 // (c) 2002 Amcoe
-sfruitbd2 // (c) 2002 Amcoe
-sfruitbv2 // (c) 2002 Amcoe
-sfruitbo // (c) 2002 Amcoe
-sfruitbo2 // (c) 2002 Amcoe
-sfruitbh // (c) 2002 Amcoe
-sfruitbbh // (c) 2002 Amcoe
-sfruitbdh // (c) 2002 Amcoe
-sfruitbvh // (c) 2002 Amcoe
-sfruitboh // (c) 2002 Amcoe
-fb2gen // (c) 2004 Amcoe - Fruit Bonus 2nd Generation
-fb2genc1 // (c) 2004 Amcoe
-fb2gend1 // (c) 2004 Amcoe
-fb2genv1 // (c) 2004 Amcoe
-fb2genc2 // (c) 2004 Amcoe
-fb2gend2 // (c) 2004 Amcoe
-fb2genv2 // (c) 2004 Amcoe
-fb2geno // (c) 2004 Amcoe
-fb2geno2 // (c) 2004 Amcoe
-fb2nd // (c) 2004 Amcoe - Fruit Bonus 2nd Edition
-fb2ndd1 // (c) 2004 Amcoe
-fb2ndv1 // (c) 2004 Amcoe
-fb2ndc2 // (c) 2004 Amcoe
-fb2ndd2 // (c) 2004 Amcoe
-fb2ndv2 // (c) 2004 Amcoe
-fb2ndo // (c) 2004 Amcoe
-fb4 // (c) 2004 Amcoe - Fruit Bonus 2004
-fb4c1 // (c) 2004 Amcoe
-fb4d1 // (c) 2004 Amcoe
-fb4v1 // (c) 2004 Amcoe
-fb4exp // (c) 2004 Amcoe
-fb4b2 // (c) 2004 Amcoe
-fb4c2 // (c) 2004 Amcoe
-fb4d2 // (c) 2004 Amcoe
-fb4v2 // (c) 2004 Amcoe
-fb4o // (c) 2004 Amcoe
-fb4o2 // (c) 2004 Amcoe
-fb5 // (c) 2005 Amcoe - Fruit Bonus 2005
-fb5c // (c) 2005 Amcoe
-fb5d // (c) 2005 Amcoe
-fb5v // (c) 2005 Amcoe
-fb6 // (c) 2006 Amcoe - Fruit Bonus '06 - 10th anniversary
-fb6v // (c) 2006 Amcoe
-fb6d1 // (c) 2006 Amcoe
-fb6s1 // (c) 2006 Amcoe
-fb6v1 // (c) 2006 Amcoe
-fb6d2 // (c) 2006 Amcoe
-fb6s2 // (c) 2006 Amcoe
-fb6v2 // (c) 2006 Amcoe
-fb6s3 // (c) 2006 Amcoe
-fb6se // (c) 2006 Amcoe - Fruit Bonus 2006 Special Edition
-fb6sev // (c) 2006 Amcoe
-fb6sed1 // (c) 2006 Amcoe
-fb6sev1 // (c) 2006 Amcoe
-fb6sed2 // (c) 2006 Amcoe
-fb6sev2 // (c) 2006 Amcoe
-version4 // (c) 2006 Amcoe - Version 4
-version4v // (c) 2006 Amcoe
-version4d2 // (c) 2006 Amcoe
-version4v2 // (c) 2006 Amcoe
-version4d3 // (c) 2006 Amcoe
-version4v3 // (c) 2006 Amcoe
-version4o // (c) 2006 Amcoe
-spooky // (c) 200? Amcoe - Spooky Night (2nd Edition)
-spookyo // (c) 200? Amcoe - Spooky Night
-fb3g // (c) 200? Amcoe - Fruit Bonus 3G
-getrich // (c) 200? Amcoe - Get Rich
-bugfever // (c) 2006 Amcoe - Bug Fever
-bugfevero // (c) 2006 Amcoe
-bugfeverd // (c) 2006 Amcoe
-bugfeverv // (c) 2006 Amcoe
-bugfeverv2 // (c) 2006 Amcoe
-funriver // (c) 2005 Amcoe - Fun River
-funriverd1 // (c) 2005 Amcoe
-funriverv // (c) 2005 Amcoe
-dvisland // (c) 2006 Amcoe - Devil's Island
-dvislando // (c) 2006 Amcoe
-atworld // (c) 2007 Amcoe - Around The World
-atworldd1 // (c) 2007 Amcoe
-atworlde1 // (c) 2007 Amcoe
-amclink // (c) 200? Amcoe - Amcoe Link Control Box?
-fbdeluxe // (c) 200? Amcoe - Fruit Bonus Deluxe
-fbdeluxeo // (c) 200? Amcoe
-act2000 // (c) 1999 Amcoe - Action 2000
-act2000v1 // (c) 1999 Amcoe
-act2000d1 // (c) 1999 Amcoe
-act2000b1 // (c) 1999 Amcoe
-act2000vx // (c) 1999 Amcoe
-act2000dx // (c) 1999 Amcoe
-act2000bx // (c) 1999 Amcoe
-act2000o // (c) 1999 Amcoe
-act2000o2 // (c) 1999 Amcoe
-act2000o3 // (c) 1999 Amcoe
-ch2000 // (c) 2000 Amcoe - Fruit Bonus 2000 / New Cherry 2000
-ch2000b1 // (c) 2000 Amcoe
-ch2000c1 // (c) 2000 Amcoe
-ch2000d1 // (c) 2000 Amcoe
-ch2000v1 // (c) 2000 Amcoe
-ch2000b2 // (c) 2000 Amcoe
-ch2000c2 // (c) 2000 Amcoe
-ch2000d2 // (c) 2000 Amcoe
-ch2000v2 // (c) 2000 Amcoe
-ch2000o // (c) 2000 Amcoe
-ch2000o2 // (c) 2000 Amcoe
-ch2000o3 // (c) 2000 Amcoe
-pir2001 // (c) 2001 Amcoe - Pirate 2001
-pir2001b1 // (c) 2001 Amcoe
-pir2001d1 // (c) 2001 Amcoe
-pir2001v1 // (c) 2001 Amcoe
-pir2001bx // (c) 2001 Amcoe
-pir2001dx // (c) 2001 Amcoe
-pir2001vx // (c) 2001 Amcoe
-pir2001o // (c) 2001 Amcoe
-pir2001o2 // (c) 2001 Amcoe
-pir2001o3 // (c) 2001 Amcoe
-pir2002 // (c) 2001 Amcoe - Pirate 2002
-pir2002b1 // (c) 2001 Amcoe
-pir2002d1 // (c) 2001 Amcoe
-pir2002v1 // (c) 2001 Amcoe
-pir2002bx // (c) 2001 Amcoe
-pir2002dx // (c) 2001 Amcoe
-pir2002vx // (c) 2001 Amcoe
-pir2002o // (c) 2001 Amcoe
-pir2002o2 // (c) 2001 Amcoe
-pir2002o3 // (c) 2001 Amcoe
-classice // (c) 2004 Amcoe - Classic Edition
-classicev // (c) 2004 Amcoe
-classice1 // (c) 2004 Amcoe
-classiced1 // (c) 2004 Amcoe
-classicev1 // (c) 2004 Amcoe
-classice2 // (c) 2004 Amcoe
-classiced2 // (c) 2004 Amcoe
-classicev2 // (c) 2004 Amcoe
-seawld // (c) 200? Amcoe - Sea World
-seawldd1 // (c) 200? Amcoe
-moneymac // (c) 200? Amcoe - Money Machine
-moneymacd1 // (c) 200? Amcoe
-moneymacv1 // (c) 200? Amcoe
-moneymacd2 // (c) 200? Amcoe
-moneymacv2 // (c) 200? Amcoe
-
-chsuper3 // unknown
-chsuper2 // unknown
-chmpnum // unknown
-3super8 // unknown
-buster // (c) 1987 Marian Electronics Ltd.
-spielbud // (c) 1985 ADP
-
-// Hi-Soft
-himesiki // (c) 1989 Hi-Soft
-
-// Draw Poker HI-LO based (z80)
-norautp // (c) 1988 Noraut Ltd.
-norautdx // (c) 198? Noraut Ltd.
-norautpn // (c) 199? unknown
-norautjo // (c) 198? Noraut Ltd.
-norautpl // (c) 198? Prologic / Noraut Ltd.
-norautjp // (c) 198? Noraut Ltd.
-norautrh // (c) 198? Noraut Ltd.
-norautra // (c) 198? Noraut Ltd.
-norautu // (c) 198? Noraut Ltd.
-noraut3a // (c) 2002 Noraut Ltd.
-noraut3b // (c) 2003 Noraut Ltd.
-norautua // (c) 198? Noraut Ltd.
-norautub // (c) 198? Noraut Ltd.
-mainline // (c) Mainline London
-df_djpkr // (c) DellFern Ltd.
-ndxron10 // 2005, unknown
-cgip30cs // (c) 1999, CGI
-kimblz80 // (c) 198?, Kimble Ireland
-pma // 1983, PMA
-bjpoker // (c) M. Kramer Inc.
-newhilop
-
-// Draw Poker HI-LO based (8080)
-dphl // (c) 1983 M. Kramer Inc.
-dphla // unknown
-dphljp // unknown
-kimbldhl // (c) 198?, Kimble Ireland
-gtipoker // (c) 1983 GTI Inc
-gtipokra // (c) 1983 GTI Inc
-smshilo // (c) 1983 SMS Manufacturing Corp.
-drhl // (c) 1986 Drew, Inc.
-drhla // (c) 1986 Drew, Inc.
-tpoker2 // (c) 1993 Micro Manufacturing, Inc.
-ssjkrpkr // (c) 1982 Southern Systems & Assembly, Ltd.
-fastdrwp // Stern?
-dphlunka // SMS Manufacturing Corp?
-dphlunkb // SMS Manufacturing Corp?
-pkii_dm // Unknown Poker PKII/DM
-
-// Sanki Denshi Kogyo
-pachifev // (c) 1983?
-
-// New Image Technologies
-bonanza // (c) 1993
-bonanzar2 // (c) 1993
-streetg // (c) 1993
-streetgr3 // (c) 1993
-streetg2 // (c) 1993
-streetg2r5 // (c) 1993
-
-// Micro Manufacturing
-magtouch // (c) 1995
-
-// Coinmaster-Gaming VGA based
-colorama // (c) 2000 Coinmaster-Gaming, Ltd.
-coloramas // (c) 2000 Coinmaster-Gaming, Ltd.
-cmrltv75 // (c) 2001 Coinmaster-Gaming, Ltd.
-cmkenosp // (c) 2000 Coinmaster-Gaming, Ltd.
-cmkenospa // (c) 2000 Coinmaster-Gaming, Ltd.
-
-// Igrosoft Original sets
-// Multifish
-goldfish // (c) 2002 - Prototype of Multifish
-//mfish // (c) 2002
-//mfish_2 // (c) 2002
-mfish_3 // (c) 2002
-//mfish_4 // (c) 2002
-//mfish_5 // (c) 2002
-mfish_6 // (c) 2002
-//mfish_7 // (c) 2002
-mfish_8 // (c) 2002
-//mfish_9 // (c) 2002
-//mfish_10 // (c) 2002
-mfish_11 // (c) 2002
-mfish_12 // (c) 2002
-mfish_13 // (c) 2002
-
-// Windjammer
-windjamr // (c) 2002
-
-// Crazy Monkey
-//crzmon // (c) 2003
-//czmon_2 // (c) 2003
-//czmon_3 // (c) 2003
-//czmon_4 // (c) 2003
-//czmon_5 // (c) 2003
-//czmon_6 // (c) 2003
-czmon_5 // (c) 2003
-czmon_7 // (c) 2003
-czmon_8 // (c) 2003
-czmon_9 // (c) 2003
-//czmon_10 // (c) 2003
-//czmon_11 // (c) 2003
-//czmon_12 // (c) 2003
-czmon_13 // (c) 2003
-//czmon_14 // (c) 2003
-czmon_15 // (c) 2003
-czmon_16 // (c) 2003
-
-// Fruit Cocktail
-//fcockt // (c) 2003
-//fcockt_2 // (c) 2003
-fcockt_3 // (c) 2003
-//fcockt_4 // (c) 2003
-fcockt_5 // (c) 2003
-fcockt_6 // (c) 2003
-fcockt_7 // (c) 2003
-fcockt_8 // (c) 2003
-fcockt_9 // (c) 2003
-fcockt_10 // (c) 2003
-fcockt_11 // (c) 2003
-fcockt_12 // (c) 2003
-//fcockt_13 // (c) 2003
-fcockt_14 // (c) 2003
-
-// Lucky Haunter
-//lhaunt // (c) 2003
-lhaunt_2 // (c) 2003
-//lhaunt_3 // (c) 2003
-lhaunt_4 // (c) 2003
-lhaunt_5 // (c) 2003
-lhaunt_6 // (c) 2003
-lhaunt_7 // (c) 2003
-lhaunt_8 // (c) 2003
-//lhaunt_9 // (c) 2003
-lhaunt_10 // (c) 2003
-lhaunt_11 // (c) 2003
-
-// Rollfruit
-//rollfr // (c) 2003
-rollfr_2 // (c) 2003
-rollfr_3 // (c) 2003
-rollfr_4 // (c) 2003 (bootleg?)
-
-// Garage
-//garage // (c) 2004
-//garage_2 // (c) 2004
-//garage_3 // (c) 2004
-garage_4 // (c) 2004
-garage_5 // (c) 2004
-garage_6 // (c) 2004
-garage_7 // (c) 2004
-//garage_8 // (c) 2004
-garage_9 // (c) 2004
-
-// Rock Climber
-//rclimb_2 // (c) 2004
-rclimb // (c) 2004
-rclimb_3 // (c) 2004
-rclimb_4 // (c) 2004
-rclimb_5 // (c) 2004
-//rclimb_6 // (c) 2004
-rclimb_7 // (c) 2004
-
-// Sweet Life
-sweetl // (c) 2004
-sweetl_2 // (c) 2004
-
-// Resident
-resdnt // (c) 2004
-resdnt_2 // (c) 2004
-resdnt_3 // (c) 2004
-//resdnt_4 // (c) 2004
-//resdnt_5 // (c) 2004
-resdnt_6 // (c) 2004
-//resdnt_7 // (c) 2004
-resdnt_8 // (c) 2004
-resdnt_9 // (c) 2004
-
-// Island
-island // (c) 2005
-island_2 // (c) 2005
-
-// Pirate
-//pirate // (c) 2005
-pirate_2 // (c) 2005
-pirate_3 // (c) 2005
-pirate_4 // (c) 2005
-
-// Island 2
-island2 // (c) 2006
-island2_3 // (c) 2006
-island2_4 // (c) 2006
-island2_5 // (c) 2006
-island2_6 // (c) 2006
-
-// Pirate 2
-pirate2 // (c) 2006
-pirate2_2 // (c) 2006
-pirate2_3 // (c) 2006
-pirate2_4 // (c) 2006
-
-// Keks
-keks // (c) 2006
-keks_2 // (c) 2006
-keks_3 // (c) 2006
-keks_4 // (c) 2006
-keks_5 // (c) 2006
-
-// Gnome
-gnome // (c) 2007
-gnome_2 // (c) 2007
-gnome_3 // (c) 2007
-gnome_4 // (c) 2007
-gnome_5 // (c) 2007
-//gnome_6 // (c) 2007
-gnome_7 // (c) 2007
-//gnome_8 // (c) 2007
-gnome_9 // (c) 2007
-gnome_10 // (c) 2007
-gnome_11 // (c) 2007
-gnome_12 // (c) 2007
-
-// Sweet Life 2
-sweetl2 // (c) 2007
-sweetl2_2 // (c) 2007
-sweetl2_3 // (c) 2007
-sweetl2_4 // (c) 2007
-
-// Fruit Cocktail 2
-fcockt2 // (c) 2008
-//fcockt2_2 // (c) 2008
-fcockt2_3 // (c) 2008
-fcockt2_4 // (c) 2008
-fcockt2_5 // (c) 2008
-fcockt2_6 // (c) 2008
-fcockt2_7 // (c) 2008
-
-// Crazy Monkey 2
-crzmon2 // (c) 2010
-crzmon2_2 // (c) 2010
-crzmon2_3 // (c) 2010
-
-
-// Igrosoft bootleg sets
-
-mfish_3a // bootleg - Multifish
-mfish_12a // bootleg
-czmon_7a // bootleg - Crazy Monkey
-czmon_7b // bootleg
-czmon_8a // bootleg
-czmon_8b // bootleg
-czmon_8c // bootleg
-czmon_8d // bootleg
-czmon_8e // bootleg
-czmon_8f // bootleg
-czmon_9a // bootleg
-czmon_9b // bootleg
-czmon_9c // bootleg
-fcockt_6a // bootleg - Fruit Cocktail
-fcockt_6b // bootleg
-fcockt_6c // bootleg
-fcockt_6d // bootleg
-fcockt_7a // bootleg
-fcockt_7b // bootleg
-fcockt_7c // bootleg
-fcockt_7d // bootleg
-fcockt_7e // bootleg
-fcockt_7f // bootleg
-fcockt_7g // bootleg
-fcockt_7h // bootleg
-fcockt_8a // bootleg
-fcockt_8b // bootleg
-lhaunt_4a // bootleg - Lucky Haunter
-lhaunt_5a // bootleg
-lhaunt_6a // bootleg
-lhaunt_6b // bootleg
-lhaunt_6c // bootleg
-lhaunt_6d // bootleg
-lhaunt_6e // bootleg
-lhaunt_6f // bootleg
-garage_4a // bootleg - Garage
-garage_4b // bootleg
-garage_4c // bootleg
-garage_5a // bootleg
-garage_5b // bootleg
-garage_5c // bootleg
-garage_5d // bootleg
-garage_5e // bootleg
-rclimb_3a // bootleg - Rock Climber
-rclimb_3b // bootleg
-rclimb_3c // bootleg
-rclimb_3d // bootleg
-rclimb_3e // bootleg
-sweetla // bootleg - Sweet Life
-sweetlb // bootleg
-resdnt_2a // bootleg - Resident
-resdnt_2b // bootleg
-resdnt_2c // bootleg
-resdnt_2d // bootleg
-resdnt_2e // bootleg
-resdnt_2f // bootleg
-resdnt_2g // bootleg
-islanda // bootleg - Island
-islandb // bootleg
-islandc // bootleg
-island2a // bootleg - Island 2
-island2b // bootleg
-island2c // bootleg
-island2_3a // bootleg
-island2_4a // bootleg
-pirate2a // bootleg - Pirate 2
-pirate2b // bootleg
-pirate2c // bootleg
-pirate2d // bootleg
-pirate2e // bootleg
-pirate2f // bootleg
-pirate2g // bootleg
-pirate2h // bootleg
-pirate2_2a // bootleg
-keksa // bootleg - Keks
-keksb // bootleg
-keksc // bootleg
-keks_2a // bootleg
-keks_2b // bootleg
-keks_2c // bootleg
-keks_2d // bootleg
-keks_2e // bootleg
-keks_2f // bootleg
-keks_2g // bootleg
-keks_3a // bootleg
-keks_3b // bootleg
-gnomea // bootleg - Gnome
-gnomeb // bootleg
-gnomec // bootleg
-gnomed // bootleg
-gnomee // bootleg
-gnome_2a // bootleg
-gnome_3a // bootleg
-gnome_3b // bootleg
-gnome_3c // bootleg
-gnome_5a // bootleg
-gnome_5b // bootleg
-sweetl2_2a // bootleg - Sweet Life 2
-sweetl2_2b // bootleg
-sweetl2_2c // bootleg
-sweetl2_2d // bootleg
-fcockt2a // bootleg - Fruit Cocktail 2
-fcockt2_4a // bootleg
-fcockt2_4b // bootleg
-fcockt2_4c // bootleg
-fcockt2_4d // bootleg
-fcockt2_4e // bootleg
-fcockt2_4f // bootleg
-
-igromult // Multigame bootleg
-igromula // Multigame bootleg
-
-// Novomatic
-g4u2 // Games 4 U
-g4u3 //
-g4u3a //
-g4u4 //
-g4u5 //
-g4u6 //
-g4u7 //
-gamt1 // Gaminator 1
-gamt1a //
-gamt1b //
-gamt4 // Gaminator 4
-gamt4a //
-gamt4b //
-gamt4c //
-gamt4d //
-gamt4e //
-gamt4f //
-gamt4g //
-gamt4h //
-gamt4i //
-gamt4j //
-gamt5 // Gaminator 5
-gamt6 // Gaminator 6
-gamt6a //
-gamt6b //
-gamt6c //
-gamt6d //
-gamt6e //
-gamt6f //
-gamt7 // Gaminator 7
-gamt7a //
-gamt7b //
-gamt7c //
-gamt7d //
-gamt7e //
-gamt7f //
-gamt7g //
-gamt7h //
-gamt8 // Gaminator 8
-gamt8a //
-gamt8b //
-gamt8c //
-gamt8d //
-gamt9 // Gaminator 9
-gamt9a //
-gamt10 //
-gamt10a //
-gamt10b //
-gamt10c //
-gamt10d //
-gamt10e //
-gamt10f //
-gamt10g //
-gamt10h //
-gamt10i //
-gamt10j //
-gamt10k //
-gamt10l //
-gamt10m //
-gamt10n //
-gamt10o //
-gamt11 //
-gamt11a //
-gamt11b //
-gamt11c //
-gamt12 //
-gamt12a //
-gamt12b //
-gamt16 //
-gamt16a //
-gamt16b //
-gamt16c //
-gamt16d //
-gamt16e //
-gamt16f //
-gamt16g //
-gamt16h //
-gamt16i //
-gamt16j //
-gamt16k //
-gamt17 //
-gamt17a //
-gamt17b //
-gamt18 //
-gamt18a //
-gamt18b //
-gamt18c //
-gamt18d //
-gamt19 //
-gamt19a //
-gamt20 //
-gamt20a //
-gamt20b //
-gamt21 //
-gamt21a //
-gamt22 //
-gamt22a //
-gamt22b //
-gamt23 //
-gamt23a //
-gamt23b //
-gamt29 //
-gamt29a //
-gamt30 //
-gamt31 //
-megakat //
-hspot2 //
-hspot3 //
-gamt1lotc //
-gamt4lotc //
-gamt4lotca //
-gamt6lotc //
-gamt8lotc //
-gamt9lotc //
-gamt10lotc //
-gamt16lotc //
-gamt18lotc //
-gamt19lotc //
-gamt20lotc //
-gamt4lotm //
-gamt10lotm //
-gamt20lotm //
-gamt4hmult //
-gamt10gmult //
-gamt11bmult //
-gamt16fmult //
-gamt18bmult //
-gamt19mult //
-gamt21amult //
-gamt22amult //
-gamt31mult //
-gamt1ent //
-gamt4ent //
-gamt6ent //
-gamt10ent //
-gamt18ent //
-gamt19ent //
-gamt20ent //
-gamt4dbag //
-gamt4fbag //
-gamt4hbag //
-gamt4ibag //
-gamt10bag //
-ancienta //
-ancientaa //
-ancientab //
-ancientac //
-ancientad //
-bananas //
-bananasa //
-beebop //
-beebopa //
-beebopb //
-beebopc //
-beebopd //
-beebope //
-beetlem //
-beetlema //
-beetlemb //
-beetlemc //
-beetlemd //
-bungeem //
-bungeema //
-bookra //
-bsplash //
-chillicc //
-columbus //
-columbusa //
-columbusb //
-columbusc //
-columbusd //
-columbuse //
-columbusf //
-ditrio //
-dolphinp //
-eurogame //
-eurogamea //
-firstcl //
-llcharm //
-llcharma //
-
-// Belatra
-
-fairyl2 //
-fairyl2a //
-fairyl2b //
-fairyl2bl //
-ldrink //
-ldrinka //
-merryjn //
-
-// Astro (Russia)
-
-blackbd //
-blackbda //
-blackbdb //
-dslayrr //
-dslayrra //
-hawaii //
-oligam //
-rasce //
-
-// Atronic (Russia)
-
-atronic //
-atronica //
-atlantca // Atlantica
-atlantcaa //
-baboshka // Baboshka
-cfblue // Crazy Fruits Blue
-cfbluea //
-cfgreen // Crazy Fruits Green
-chicken // Chicken
-aclown // Clown
-goldglen // Golden Glenn
-iccash // I C Cash
-shpinxii // Sphinx II
-bearnec // Bear Necessities
-beachpt // Beach Patrol
-beetleup // Beetles Unplugged
-abigchs // Big Cheese
-bigblue // Big Blue
-castaway // Castaway
-castawaya //
-dncsprt // Dancing Spirit
-drmmake // Dream Maker
-goldcity // Gold City
-jumpjkpt // Jumping Jackpots
-mushmagi // Mushroom Magic
-santam // Santa Maria
-splmastr // Spell Master
-tajmah // Tajmahal
-3wishrd // Three Wishes Red
-
-
-// WMS 360 / 550
-
-wms // Set Chips
-wmsa //
-wmsb //
-
-btippers // Big Tippers (Russian)
-wmsboom // Boom (Russian)
-cashcrop // Cash Crop (Russian)
-filthyr // Filthy Rich (Russian)
-hottop // Hot Toppings (English)
-hottopa // Hot Toppings (Russian?)
-inwinner // In Winner (Russian)
-jptparty // Jackpot Party (Russian)
-leprgld // Leprecorns Gold (Russian)
-leprglds // Leprecorns Gold (Spanish)
-lol // Life of Luxury (Russian)
-lovewin // Love To Win (Russian)
-mtburn // Money To Burn (Russian)
-otchart // Off The Charts (Russian)
-perfect // Perfect Game (Russian)
-reelemin // Reel 'Em In (Russian)
-sonoth // Sum Of Nothing (Russian)
-swingin // Swingin' Green (Russian)
-wmstopb // Top Banana (Russian)
-wdun // Who Dunnit (Russian)
-winbid // Winning Bid (Russian)
-wldstrek // Wild Streak (Russian)
-yukongld // Yukon Gold (Russian)
-
-// Extrema (Russian)
-
-maski // Maski Show (Russia)
-adults // Adults Only (Russia)
-bloto // Blits Loto (Russia)
-blpearl // Black Pearl (Russia)
-grancan // Grand Canyon (Russia)
-luckshel // Lucky Shell (Russia)
-exsafar // Safari (Russia)
-strlink // Strong Link (Russia)
-extrmth // Treasure Hunt (Russia)
-extrmti // Treasure Island (Russia)
-
-// Cupidon / Kupidon (Russian)
-
-tsarevna //
-tsarevnaa //
-gangrose //
-funnyfm //
-funnyfma //
-funnyfmb //
-cashtrn //
-
-// TAB Austria
-// Quizard (Philips CD-I based HW)
-cdibios // Base unit
-quizard // (c) TAB Austria 199?
-quizard_17 // (c) TAB Austria 1996
-quizard_12 // (c) TAB Austria 1996
-quizard_10 // (c) TAB Austria 1996
-quizard2 // (c) TAB Austria 1995
-quizard2_22 // (c) TAB Austria 199?
-quizard3 // (c) TAB Austria 1996
-quizard3_32 // (c) TAB Austria 1996
-quizard4 // (c) TAB Austria 1998
-quizard4_41 // (c) TAB Austria 1998
-quizard4_40 // (c) TAB Austria 1997
-
-// Impera (Philips CD-I based HW)
-magicard // (c) 199? Impera
-magicarda // (c) 199? Impera
-magicardb // (c) 199? Impera
-magicarde // (c) 1994 Impera
-magicardj // (c) 1998 Impera
-magicle // (c) 1998 Impera
-hotslots // (c) 2002 Impera
-
-// GCE / Roy Abel & Associates
-//vectrex // Base unit
-raaspec // (c) Roy Abel & Associates 1984
-
-// Matsushita 3DO
-// (used by Orbatak prototype, and Beavis + Butthead prototype)
-3dobios
-//3do_pal
-orbatak
-
-// Global VR
-hyperv2 // Hyper V2 (Global VR) Install - 06/12/02
-hyperv2a // Hyper V2 (Global VR) Install - 09/30/01
-gvrxpsys // Global VR XP OS Install - 09/30/01
-gvrxpsup // Global VR XP OS Update/Install - 06/11/02
-
-bhead2k // Beach Head 2000 Install - 05/27/03
-bhead2ka // Beach Head 2000 Install - 09/16/01
-bhead2k2 // Beach Head 2002 Install - 05/27/03
-bhead2k3 // Beach Head 2003 Desert War Install - 05/27/03
-nfsug // Need For Speed: Underground Install (2 Discs) (v1.1)
-
-// unknown
-fruitpc // ???
-casanova //
-
-// American Alpha / Paokai
-gogostrk
-
-// Leisure Ent.
-roul // (c) 1990
-
-// Accept LTD.
-hitpoker // (c) 1997
-
-// Videotronics
-vpoker // (c) 198?
-5acespkr // (c) 198?
-
-// Play Mechanix
-specfrce // (c) 2002 ICE/Play Mechanix
-jnero // (c) 2004 ICE/Play Mechanix
-
-// Amatic Trading GmbH
-suprstar // (c) 1996 Amatic
-am_mg24 // (c) 2000 Amatic
-am_mg3 // (c) 2000 Amatic
-am_mg3a // (c) 2000 Amatic
-am_mg35i // (c) Amatic
-am_mg34i // (c) Amatic
-am_mg33i // (c) Amatic
-am_mg31i // (c) Amatic
-
-
-neptunp2
-rgum
-
-// Extrema Systems International Ltd.
-poker72
-
-// Blitz System Inc.
-megadpkr // (c) 1990 Blitz System Inc
-megadpkrb // (c) 1990 Blitz System Inc
-
-// Blitz System Inc. 68k + Blitter Hardware
-megadblj // (c) 1990 Blitz Systems Inc.
-megadble // (c) 1990 Blitz Systems Inc.
-maxidbl // (c) 1992 Blitz Systems Inc.
-bankrob // (c) 1993 Entertainment Technology Corp.
-bankroba // (c) 1993 Entertainment Technology Corp.
-poker52 // (c) 1993 Blitz Systems Inc. ?
-steaser // (c) 1993 unknown
-dualgame // (c) 1995 Labtronix Technologies
-hermit // (c) 1995 Dugamex
-deucesw2 // (c) 1997
-cj3play // (c) 1998 Cadillac Jack
-cjffruit // (c) 1998 Cadillac Jack
-ilpag // (c) 199? unknown
-
-// Olympic Video Gaming
-hotstuff
-
-// Interactive Light
-savquest
-
-// Jamie System Development
-xtom3d
-
-// Jubilee
-jubileep
-
-// Golden Games / C+M Technics AG
-swisspkr // (c) 1990 Golden Games
-moviecrd // (c) 1998 Golden Games
-
-// NSM
-nsmpoker
-
-// Advanced Video Technologies
-avtsym14 // (c) 1985 AVT
-avtsym25 // (c) 1985 AVT
-avtbingo // (c) 1985 AVT
-avtnfl // (c) 1989 AVT
-
-// Corona hardware
-winner81 // (c) 1981 Corona Co, Ltd.
-winner81b // (c) 1981 Corona Co, Ltd.
-winner82 // (c) 1982 Corona Co, Ltd.
-re800ea // (c) 1991 Entretenimientos GEMINIS
-re800v1 // (c) 1991 Entretenimientos GEMINIS
-re800v3 // (c) 1992 Entretenimientos GEMINIS
-rcirulet // (c) 199? Entretenimientos GEMINIS
-luckyrlt // (c) 1990 unknown
-
-dfruit
-
-umipoker
-saiyukip
-
-tmspoker
-kas89 // 1989, SFC S.R.L.
-caspoker // 1987, PM / Beck Elektronik.
-wildpkr // 199?, TAB Austria.
-tabpkr // 199?, TAB Austira
-subhuntr // 1979 Model Racing
-
-manohman // 199?, Merkur.
-
-
-// Atari TTL logic games + roms
-antiairc // (c) 1975 Atari
-crashnsc // (c) 1975 Atari
-indy4 // (c) 1976 Atari / Kee
-indy800 // (c) 1975 Atari / Kee
-jetfight // (c) 1975 Atari
-jetfighta // (c) 1975 Atari
-outlaw // (c) 1976 Atari
-sharkjaw // (c) 1975 Atari / Horror Games
-steeplec // (c) 1975 Atari
-stuntcyc // (c) 1976 Atari
-tank // (c) 1974 Atari / Kee
-tankii // (c) 1975 Atari / Kee
-
-// Atari TTL Missing Rom Dumps
-//astrotrf // (c) 1975 Atari
-//lemans // (c) 1974 Atari
-//gtrak10 // (c) 1974 Atari / Kee
-//gtrak20 // (c) 1976 Atari / Kee
-//qwak // (c) 1974 Atari
-
-// Atari 100% TTL
-pong // (c) 1972 Atari
-pongf // (c) 1972 Atari
-pongd // (c) 1973 Atari
-breakout // (c) 1976 Atari
-//cktpong // (c) 1974 Atari / National Entertainment Co.
-//coupedav // (c) 1973 Atari France
-//coupdmnd // (c) 1974 Atari France
-//coupfran // (c) 1974 Atari Europe
-//drpong // (c) 1974 Atari
-//pupppong // (c) 1974 Atari
-//snoopong // (c) 1974 Atari
-//suprpong // (c) 1974 Atari
-//breakckt // (c) 1976 Atari
-//consolet // (c) 1976 Atari Europe
-//crossfir // (c) 1975 Atari / Kee
-//eliminat // (c) 1973 Atari / Kee
-//goaliv // (c) 1975 Atari
-//gotchaat // (c) 1973 Atari
-//gotchaatc // (c) 1973 Atari
-//hiway // (c) 1975 Atari
-//pinpong // (c) 1974 Atari
-//pursuit // (c) 1975 Atari / Kee
-//quadpong // (c) 1974 Atari
-//rebound // (c) 1974 Atari / Kee
-//spacrace // (c) 1973 Atari
-//touchme // (c) 1974 Atari
-//worldcup // (c) 1974 Atari
-
-// Meadows TTL
-bombaway // (c) 1976 Meadows
-ckidzo // (c) 1976 Meadows
-cgunship // (c) 1976 Meadows
-mead4in1 // (c) 197? Meadows
-
-// Misc TTL + roms
-sburners // (c) 1975 Allied Leisure
-fun4 // (c) 1976 Bailey
-fun4a // (c) 1976 Bailey
-dmodrbcc // (c) 1976 Chicago Coin
-avenger // (c) 1975 Electra
-attckexd // (c) 1977 Exidy
-attckexd2 // (c) 1977 Exidy
-deathrac // (c) 1976 Exidy
-biplane4 // (c) 1976 Fun Games
-take5 // (c) 1975 Fun Games
-//knightar // (c) 1976 PSE
-bazooka // (c) 1976 PSE
-bazookabr // (c) 1977 Taito do Brasil
-dpatrol // (c) 1977 PSE
-dpatrola // (c) 1977 PSE / Telegames
-//gametree // (c) 1978 PSE
-vollyrmt // (c) 1973 Ramtek
-hockyrmt // (c) 1973 Ramtek
-soccrrmt // (c) 1973 Ramtek
-wipeormt // (c) 1974 Ramtek
-cleanswp // (c) 1974 Ramtek
-bballrmt // (c) 1974 Ramtek
-trivia // (c) 1976 Ramtek
-monacogp // (c) 1980 Sega
-monacogpa // (c) 1980 Sega
-gunman // (c) 1977 Taito
-missilex // (c) 1977 Taito
-ttblock // (c) 1977 Taito
-zzblock // (c) 1979 Taito
-
-// A-1 Supply
-tv21 // (c) 197? A-1 Supply
-tv21_3 // (c) 197? A-1 Supply
-tvpoker // (c) 197? A-1 Supply
-
-// JPM System 5 + Video Expansion 2
-monopoly // Monopoly (JPM)
-monopolya // Monopoly (JPM)
-monoplcl // Monopoly Classic (JPM)
-monopldx // Monopoly Deluxe (JPM)
-cashcade // Cashcade (JPM)
-
-// JPM Impact + Video Board
-cluedo // (c) 1995
-cluedod // (c) 1995
-cluedo2c // (c) 1995
-cluedo2 // (c) 1995
-trivialp // (c) 1996
-trivialpd // (c) 1996
-trivialpo // (c) 1996
-scrabble // (c) 1997
-scrabbled // (c) 1997
-hngmnjpm // (c) 1998
-hngmnjpmd // (c) 1998
-coronatn // (c) 1999
-coronatnd // (c) 1999
-tqst // (c) ACE?
-snlad // (c) 199?
-buzzundr // Buzzundrum (Ace)
-monspdr // Money Spider (Ace)
-
-// Scorpion 1 + Adder Video board
-
-m_tppokr // (c) 1996 BFM/ELAM,Game Card 95-750-899, uses Adder board for feature gfx
-
-// Cobra Hardware (SC1 expansion?)
-inquiztr // 1989 BFM
-escounts // 1990 BFM
-trebltop // 1991 BFM
-beeline // 1991 BFM
-quizvadr // 1991 BFM
-qos // 1992 BFM
-qosa // 1992 BFM
-qosb // 1992 BFM
-
-
-// MPU4 + Video board
-
-/* Barcrest */
-
-v4bios // MPU4 Video Firmware
-v4cmaze // The Crystal Maze (v1.3)
-v4cmazedat //
-v4cmazea //
-v4cmazeb //
-v4cmazec //
-v4cmazed //
-v4cmaze2 // The New Crystal Maze Featuring Ocean Zone
-v4cmaze2d //
-v4cmaze2a //
-v4cmaze2b //
-v4cmaze2c //
-v4cmaze3 // The Crystal Maze Team Challenge
-v4cmaze3d //
-v4cmaze3a //
-v4cmaze3b //
-v4cmaze3c //
-v4turnov // Turnover
-v4skltrk // Skill Trek
-v4skltrka //
-v4sklcsh // Skill Cash
-v4addlad // Adders and Ladders
-v4addlad20 //
-v4time // Time Machine
-v4mate // The Mating Game
-v4mated //
-v4strike // Strike it Lucky
-v4striked //
-v4strike2 //
-v4strike2d //
-v4eyedwn // Eyes Down
-v4eyedwnd //
-v4quidgr // Ten Quid Grid
-v4quidgrd //
-v4quidgr2 //
-v4quidgr2d //
-v4barqst // Barquest (v2.6d)
-v4barqs2 // Barquest 2 (v0.3)
-v4wize // Wize Move (v1.3d)
-v4wizea // Wize Move
-v4opt3 // Option 3
-v4opt3d //
-
-/* Bwb */
-
-v4vgpok // Vegas Poker (prototype release 2)
-v4psi // Prize Space Invaders
-v4psia //
-v4psib //
-v4blox // Blox
-v4bloxd //
-v4reno // Reno Reels
-v4redhtp // Red Hot Poker
-v4tetrs // BwB Tetris v 2.2
-v4frfact // Fruit Factory
-v4bigfrt // Big Fruits
-v4bubbnk // Bubbly Bonk
-v4mazbel // Mazooma Belle
-v4mazbla //
-v4shpwnd // Shop Window
-v4big40 // Big 40
-v4bulblx // Bullion Blox
-v4cshinf // Cash Inferno
-v4dbltak // Double Take
-v4gldrsh // Gold Rush
-v4mdice // Miami Dice
-v4monte // Monte Carlo Or Bust
-v4ovrmn3 // Over Moon Pt3
-v4pztet // Prize Tetris
-v4pzteta //
-v4rhmaz // Red Hot Mazooma Belle
-v4sunbst // Sunburst
-v4timebn // Time Bandit
-v4sixx // 6-X
-v4megbuk // Megabucks Poker
-v4rencas // Reno Casino
-
-/* Nova (Bwb board) */
-
-v4cybcas // Cyber Casino
-v4miami // Miami Dice
-v4missis // Mississippi Lady
-v4picdil // Piccadilly Nights
-
-/* Zenitone (custom video board) */
-
-v4dealem // Deal 'Em
-
-// Scorpion 2 + Adder 2 Video Board
-qntoondo // 1993
-quintoon // 1993
-quintond // 1993
-quintono // 1993
-qntoond // 1993
-pokio // 1994
-slotsnl // 1995
-paradice // 1995
-pyramid // 1996
-sltblgtk // 1996
-sltblgpo // 1996
-sltblgp1 // 1996
-gldncrwn // 1997
-
-// RasterSpeed
-rotr // 1994
-fbcrazy // 1997
-
-// Cobra 3
-
-c3_rtime // Radio Times
-c3_telly // Telly Addicts
-c3_totp // Top of the Pops
-c3_ppays // The Phrase That Pays
-
-// Maygay 68K based SWP hardware
-
-mg_gbr // Guinness Book Of Records
-mg_ewg // Each Way Gambler
-mg_jv // Jack & Vera
-mg_alad // Aladdin's Cave
-mg_bb // Big Break
-mg_lug // London Underground
-mg_pbw // Pinball Wizard
-mg_risk // Risk
-mg_scl // Super Clue
-mg_kf // Krypton Factor
-
-
-/* Drivers below are _mostly_ mechanical games, usually with no video display, requiring external artwork to function. */
-
-/* [BEGIN] fruit machine drivers */
-
-/* JPM */
-
-// JPM SRU?
-j_ewnud // Each Way Nudger
-j_ewnda
-j_ewnd20
-j_ews // Each Way Shifter
-j_ews8a
-j_luckac // Lucky Aces
-j_nuddup // Nudge Double Up
-j_nuddup2
-j_unk
-j_super2 // Super 2
-j_plus2 // Plus 2
-j_luck2 // Lucky Twos
-
-// JPM System 80
-j80bac // Bank A Coin (JPM)
-j80bounc // Bouncer (JPM)
-j80frogh // Frog Hop (JPM)
-j80fruit // Fruit Snappa (JPM)
-j80golds // Golden Steppa (JPM)
-j80hotln // Hot Lines (JPM)
-j80myspn // Mystery Spin (JPM)
-j80nudg2 // Nudge Double Up MkII (JPM)
-j80rr // Road Runner (JPM)
-j80rra //
-j80supst // Supa Steppa (JPM)
-j80supbk // Superbank (JPM)
-j80topsp // Top Sprint (JPM)
-j80topup // Top Up (JPM)
-j80tumbl // Tumble (JPM)
-j80wsprt // Winsprint (JPM)
-j80wsprt3 // Winsprint (JPM)
-j80wsprt2 // Winsprint (JPM)
-
-j80blbnk // Blankity Bank (PCP)
-
-// Close to System 80
-j80alad // Aladdin's Cave (PCP)
-j80fortr // Fortune Trail (JPM)
-j80mster // Masterspy (Pcp)
-j80plsnd // Plus Nudge (JPM)
-
-// JPM MPS1/2 Hardware
-j2adnote // Add A Note (JPM)
-j2adnotea
-j2adnoteb
-j2adnotec
-j2adnoted
-j2adnotee
-j2adnotef
-j2adnoteg
-j2adnoteh
-j2adnotei
-j2bankch // Bank Chase (JPM)
-j2bankrd // Bank Raid (JPM)
-j2bigbnk // Big Banker (JPM)
-j2bigbox // Big Box (JPM)
-j2bigbuk // Big Buck$ (JPM)
-j2bigdl // Big Deal (JPM)
-j2blkchy // Black Cherry (JPM)
-j2cashbn // Cash Bonus Club (JPM)
-j2cashfl // Cash Falls (JPM)
-j2cashrl // Cash Reels (JPM)
-j2cashrv // Cash Reserve (JPM)
-j2cashro // Cash Rolls (JPM)
-j2cashtk // Cash Track (JPM)
-j2cashtd // Cash Track Deluxe (JPM)
-j2coppot // Copper Pot (JPM)
-j2coprun // Copper Run (JPM)
-j2cprndx // Copper Run Deluxe (JPM)
-j2crkbnk // Crack The Bank (JPM)
-j2droplt // Drop The Lot (JPM)
-j2dropld // Drop The Lot Deluxe (JPM)
-j2ewn // Each Way Nudger (JPM)
-j2ews // Each Way Shuffle (JPM)
-j2exec // Executive Club (JPM)
-j2fasttk // Fast Trak (JPM)
-j2fqueen // Find The Queen (JPM)
-j2fiveal // Five Alive (JPM)
-j2fiveln // Five Liner (JPM) [Mps]
-j2fws // Five Way Shuffle (JPM)
-j2fwsa
-j2frmtch // Fruit Match (JPM)
-j2fullhs // Full House Club (JPM)
-j2ghostb // Ghostbuster (JPM)
-j2goldrn // Gold Run (JPM)
-j2goldbr // Golden Bars (JPM)
-j2gldchy // Golden Cherry (JPM)
-j2gldwin // Golden Win (JPM)
-j2hinote // Hi Note (JPM)
-j2hiroll // Hi Roller (JPM) [Mps]
-j2hotpot // Hot Pot (JPM)
-j2hotptd // Hot Pot Deluxe (JPM)
-j2hotsht // Hot Shot Club (JPM)
-j2hypnot // Hypernote (JPM)
-j2jackbr // Jackpot Bars (JPM)
-j2jackdc // Jackpot Dice (JPM)
-j2jokers // Jokers (JPM)
-j2kingcl // King Of Clubs (JPM)
-j2litean // Lite A Nudge (JPM)
-j2lovsht // Loot Shoot (JPM)
-j2lovshd // Loot Shoot Deluxe (JPM)
-j2luckar // Lucky Arrows (JPM)
-j2lucky2 // Lucky 2s (JPM)
-j2monblt // Money Belt (JPM)
-j2mongam // Money Game (JPM)
-j2mongmd // Money Game Deluxe (JPM)
-j2multwn // Multi Win (JPM)
-j2notexc // Note Exchange (JPM)
-j2notexca
-j2notexcb
-j2notesh // Note Shoot (JPM)
-j2nudbnz // Nudge Bonanza Deluxe (JPM)
-j2nudbnza
-j2nuddup // Nudge Double Up (JPM)
-j2nuddud // Nudge Double Up Deluxe (JPM)
-j2nudup3 // Nudge Double Up MkIII (JPM)
-j2nudshf // Nudge Shuffler (JPM)
-j2plsmon // Plus Money (JPM)
-j2plsmnd // Plus Money Deluxe (JPM)
-j2plsnud // Plus Nudge (JPM)
-j2potlck // Pot Luck (JPM)
-j2pndrsh // Pound Rush (JPM)
-j2pyramd // Pyramid (JPM)
-j2reelbn // Reel Bingo Club (JPM)
-j2reelbna
-j2reelbo // Reel Bonus (JPM)
-j2reelmg // Reel Magic (JPM)
-j2reelmgd // Reel Magic (JPM) [Dutch]
-j2reelmc // Reel Magic Club (JPM)
-j2reelmo // Reel Money (JPM) [Mps]
-j2rotnot // Rota Note (JPM)
-j2roulcl // Roulette Club (JPM)
-j2rdclb // Royal Deal Club (JPM)
-j2sldgld // Solid Gold (JPM)
-j2slvrgh // Silver Ghost (JPM)
-j2spcrsv // Special Reserve (JPM)
-j2stahed // Streets Ahead (JPM)
-j2supfrt // Supa Fruit (JPM)
-j2supfrc // Supa Fruit Club (JPM)
-j2supsft // Supashifta (JPM)
-j2supstp // Supa Steppa (JPM)
-j2suptrk // Supa Track (JPM)
-j2suprft // Super Fruit (JPM)
-j2supln // Super Line (JPM)
-j2suppot // Super Pots (JPM)
-j2suprl // Super Reel (JPM)
-j2suprsh // Supershot (JPM)
-j2supstr // Superstars (JPM)
-j2swbank // Switch Back (JPM)
-j2take2 // Take 2 (JPM)
-j2topsht // Top Shot (JPM)
-j2westrn // Western (JPM)
-
-j2blustr // Blue Streak (Pcp)
-j2cshalm // Cash Alarm (Pcp)
-j2cshcrd // Cash Cards (Pcp)
-j2cshfil // Cash-Filla (Pcp)
-j2cshsmh // Cash Smash (Pcp)
-j2criscr // Criss Cross Jackpot (Pcp)
-j2frucnx // Fruit Connexion (Pcp)
-j2hitmon // Hit Money (Pcp)
-j2penny // In For A Penny In For A Pound (Pcp)
-j2maxima // Maxima (Pcp)
-j2montrp // Money Trapper (Pcp)
-j2nudmon // Nudge Money (Pcp)
-j2paypkt // Pay Packet (Pcp)
-j2silvcl // Silver Classic (Pcp)
-j2silvsh // Silver Shot (Pcp)
-j2sstrea // Supa Streak (Pcp)
-j2tstplt // Test Pilot (Pcp)
-j2tstplta
-
-j2bonanz // Bonanza (Eurocoin)
-j2supchy // Super Cherry (Eurocoin)
-
-j2hilocl // Hi Lo Climber Club (Crystal)
-j2litnot // Lite A Note Club (Crystal)
-j2missis // Mississippi Gambler Club (Crystal)
-
-j2always // Always Eight (Bwb)
-j2coinsh // Coin Shoot (Bwb)
-j2nudfev // Nudge Fever (Bwb)
-j2trail // Trailblazer (Bwb)
-j2wag // Win-A-Gain (Bwb)
-
-j2cshnud // Cash Nudger (Mdm)
-j2fivepn // Fivepenny Nudger (Mdm)
-j2nolimt // No Limit Nudge (Mdm)
-
-j2strk10 // Strike Ten (Ace)
-
-j2bkroll // Bank Roll (JPM)
-j2bodym // Body Match (JPM)
-j2cvault // Cash Vault (JPM)
-j2cashab // Cashablanca (JPM)
-j2cashry // Cashino Royale (Pcp)
-j2casino // Casino Classic (Pcp)
-j2coinct // Coin Count (JPM)
-j2loots // Loot Shoot (Pcp)
-j2match // Match It (JPM)
-j2monbnd // Money Bands (JPM)
-j2monmtx // Money Matrix (Bwb)
-j2tst // MPS 1 Test Rom (JPM)
-j2nudnud // Nudge Nudge (JPM)
-j2pinac // Pinnacle (JPM)
-j2pinclb // Pinnacle Club (JPM)
-j2reelcz // Reel Crazy (JPM)
-j2reeldc // Reel Deal Club (JPM)
-j2topcd // Top Card (Bwb)
-j2xxx // Triple X (Bwb)
-j2tupnud // Tuppenny Nudger (JPM)
-j2wrb // Wild Reel Bingo (JPM)
-j2ncsp // zzz_unk ncsp0pp (Bwb)
-j2nrrp // zzz_unk nprpopp (Bwb)
-j2nsc15 // zzz_unk nsc15 (Pcp)
-j2nsw12 // zzz_unk nsw12 (Pcp)
-
-j2club77 // Club 77 (Unk)
-j2contnd // Continuous Nudger (Mdm)
-j2crown // Crown Dealer (Unk)
-j2hirola // Hi Roll (Unk)
-j2monmin // Money Mine (Unk)
-j2notspn // Note Spinner (Unk)
-j2pharo // Pharoah (Unk)
-j2super7 // Super 7's (Unk)
-j2sex // Super Exchanger (Unk)
-j2sng // Super Nudge Gambler (Cotswold Microsystems)
-j2tupnd // Tuppenny Nudger (Mdm)
-j2008 // zzz_unk 008 (Unk)
-j2chsn // zzz_unk chsnsn05 (Unk)
-j2lhs // zzz_unk lhs (Unk)
-j2nn2 // zzz_unk nn_2 (Unk)
-j2rm941 // zzz_unk rm941 (Unk)
-j2nud5p // 5p Nudger (JPM)
-j2b7 // Bar 7? (JPM)
-j2ss // Supa Stepper (JPM)
-j2nbz // Nudge Bonanza (JPM)
-j2clbbin // Club Bingo (Crystal)
-j2sirich // Strike It Rich? (Maygay?)
-j2siricha //
-j2hcash // Hot Cash
-j2sset
-
-// JPM Give us a Break hardware
-guab // (c) 1986
-crisscrs // (c) 1986
-tenup // (c) 1988
-
-
-// JPM System 5
-j5tstal // JPM System 5 Alpha Display Test Utility (JPM)
-j5tst1 // JPM System 5 Test Set (JPM)
-j5tst2 //
-j5fifth // 5th Avenue (JPM)
-j5ar80 // Around The World In Eighty Days (JPM)
-j5ar80a //
-j5ar80b //
-j5ar80c //
-j5ar80d //
-j5ar80cl // Around The World Club (JPM)
-j5ar80cla //
-j5ar80clb //
-j5ar80clc //
-j5buc // Buccaneer (JPM)
-j5cir // Circus (JPM)
-j5cira //
-j5cirb //
-j5circ //
-j5cird //
-j5cire //
-j5clbnud // Club Nudger (JPM)
-j5clbnuda //
-j5daytn // Daytona (JPM)
-j5daytna //
-j5daycls // Daytona Classic (JPM)
-j5dayclsa //
-j5dirty // Dirty Dozen (JPM)
-j5dirtya //
-j5dirtyb //
-j5dirtyc //
-j5fairgd // Fairground Attraction Club (JPM)
-j5fairgda //
-j5fairgdb //
-j5fairgdc //
-j5fairgdd //
-j5fairgde //
-j5fair // Fairground
-j5faira //
-j5fairb //
-j5fairc //
-j5faird //
-j5faire //
-j5fairf //
-j5fairg //
-j5fairh //
-j5fairi //
-j5fairj //
-j5fairk //
-j5fairl //
-j5fairm //
-j5fairn //
-j5fairo //
-j5fairp //
-j5fairq //
-j5filth // Filthy Rich (JPM)
-j5filtha //
-j5filthb //
-j5filthc //
-j5filthd //
-j5filthe //
-j5filthf //
-j5filthg //
-j5filthh //
-j5filthi //
-j5filthj //
-j5firebl // Fireball (JPM)
-j5firebla //
-j5fireblb //
-j5frmag // Fruit Magic (JPM)
-j5goldbr // Golden Bars (JPM)
-j5hagar // Hagar (JPM)
-j5hagara //
-j5hagarb //
-j5hagarc //
-j5hagard //
-j5hagare //
-j5hagarf //
-j5hagarg //
-j5hagarh //
-j5hagari //
-j5hagarj //
-j5hagsho // Hagar Showcase (JPM)
-j5hagshoa //
-j5hagshob //
-j5hagshoc //
-j5holly // Hollywood Nights (JPM)
-j5hollya //
-j5hollyb //
-j5hollyc //
-j5hollyd //
-j5hollye //
-j5hotdog // Hot Dogs (JPM),
-j5hotdoga //
-j5indsum // Indian Summer (JPM)
-j5intr // Intrigue (JPM)
-j5intra //
-j5intrb //
-j5intrc //
-j5jokgld // Jokers Gold (JPM)
-j5jokglda //
-j5jokgldb //
-j5jokgldc //
-j5jokgldd //
-j5jokglde //
-j5jokgldf //
-j5jokgldg //
-j5jokgldh //
-j5nite // Nite Club (JPM)
-j5nitea //
-j5palm // Palm Springs (JPM)
-j5palma //
-j5phnx // Phoenix (JPM)
-j5phnxa //
-j5popeye // Popeye (JPM)
-j5popeyea //
-j5popeyeb //
-j5popeyec //
-j5popeyed //
-j5popeyee //
-j5popeyef //
-j5popeyeg //
-j5popeyeh //
-j5popeyei //
-j5popth // Popeye's Treasure Hunt (JPM)
-j5poptha //
-j5popthb //
-j5popprz // Prize Popeye Vending (JPM)
-j5popprza //
-j5reelgh // Reel Ghost (JPM)
-j5roul // Roulette (JPM)
-j5roulcl // Roulette Club (JPM)
-j5roulcla //
-j5roulclb //
-j5roulclc //
-j5slvree // Silver Reels (JPM)
-j5slvreea //
-j5slvstr // Silver Streak (JPM), set 1
-j5slvstra //
-j5slvstrb //
-j5street // Streetwise (JPM)
-j5sup4 // Super 4 (JPM)
-j5supbar // Super Bars (JPM)
-j5supbara //
-j5suphi // Super Hi-Lo (JPM)
-j5swop // Swop A Fruit Club (JPM)
-j5term // Terminator (JPM)
-j5topshp // Top Of The Shop Club (JPM)
-j5trail // Trailblazer Club (JPM)
-j5traila //
-j5trailb //
-j5td // Tumbling Dice (JPM)
-j5uj // Union Jackpot (JPM)
-j5uja //
-j5ujb //
-j5wsc // Wall Street Club (JPM)
-j5wsca //
-j5movie // Movie Magic Club (Crystal?)
-j5nudfic // Nudge Fiction (JPM)
-j5revo // Revolver (JPM)
-j5revoa //
-j5sizl // Sizzling (JPM)
-j5hilos // Hi Lo Silver (JPM)
-
-// JPM Impact
-j6fifth // 5th Dimension (Ace)
-j6aceclb // Ace Of Clubs (Crystal)
-j6aceclba //
-j6acehi // Aces High (Ace)
-j6amdrm // American Dream (Mdm)
-j6arcade // Arcadia (JPM)
-j6arcadea //
-j6arcadeb //
-j6arcadec //
-j6arcaded //
-j6arcadee //
-j6arcadef //
-j6arcadeg //
-j6arcadeh //
-j6arcadei //
-j6arcadej //
-j6arcadek //
-j6bnkrcl // Banker Club (JPM)
-j6bnkrcla //
-j6bnkrclb //
-j6bnkrclc //
-j6big50 // Big 50 (JPM)
-j6big50a //
-j6big50b //
-j6big50c //
-j6big50d //
-j6bigbnk // Big Banker (JPM)
-j6bigbnka //
-j6bigbnkb //
-j6bigbnkc //
-j6bigbnkd //
-j6bigbnke //
-j6bigbnkf //
-j6bigbnkg //
-j6bigbnkh //
-j6bigbnki //
-j6bigbnkj //
-j6bigbnkk //
-j6bigbnkl //
-j6bigbnkm //
-j6bigbnkn //
-j6bigbnko //
-j6bigbnkp //
-j6bigbuk // Big Bucks (JPM)
-j6bigbuka //
-j6bigbukb //
-j6bigbukc //
-j6bigbukd //
-j6bigbuke //
-j6bigbukf //
-j6bigbukg //
-j6bigbukh //
-j6bigbuki //
-j6bigbukj //
-j6bigcsh // Big Cash Machine (Empire)
-j6bigpct // Big Picture (Ace)
-j6bigpcta //
-j6bigpctb //
-j6bigtop // Big Top Club (JPM)
-j6bigtopa //
-j6bigtopb //
-j6bigtopc //
-j6bigwhl // Big Wheel (JPM)
-j6bigwhla //
-j6bigwhlb //
-j6bigwhlc //
-j6bigwhld //
-j6bigwhle //
-j6bnza // Bonanza (JPM)
-j6bnzaa //
-j6bnzab //
-j6bnzac //
-j6bnzad //
-j6bnzae //
-j6bnzaf //
-j6bnzag //
-j6bnzah //
-j6bnzai //
-j6bnzaj //
-j6bnzak //
-j6brkout // Breakout (JPM)
-j6brkouta //
-j6bucks // Bucks Fizz (Ace)
-j6cpclb // Caesar's Palace Club (JPM)
-j6cpclba //
-j6cpclbb //
-j6camelt // Camelot (JPM)
-j6camelta //
-j6cameltb //
-j6cameltc //
-j6cameltd //
-j6scarlt // Captain Scarlet (Ace)
-j6cshbox // Cash Box Club (Empire)
-j6cshboxa //
-j6cshboxb //
-j6cshbeu // Cash Box Club (Empire) [Euro]
-j6cshbst // Cash Buster (JPM)
-j6cshbsta //
-j6cshbstb //
-j6cshbstc //
-j6cshbstd //
-j6cshcnt // Cash Countdown (JPM)
-j6cshcnta //
-j6cshrd // Cash Raider (Ace)
-j6cshrda //
-j6cshrdb //
-j6cshrdc //
-j6cshrdd //
-j6cshtwr // Cash Towers (JPM)
-j6cshvgs // Cash Vegas Strip (JPM)
-j6cshvgsa //
-j6cshvgsb //
-j6cshvgsc //
-j6cshvgsd //
-j6cshvgse //
-j6cshvgsf //
-j6cshvgsg //
-j6cshvgsh //
-j6cshvgsi //
-j6cshvgsj //
-j6cshvgsk //
-j6cshvgsl //
-j6cshvgsm //
-j6cshvgsn //
-j6cshvgso //
-j6cshvgsp //
-j6cshvgsq //
-j6cshvgsr //
-j6cas5 // Casino 5ive Liner (JPM) (IMPACT)
-j6cas5a //
-j6cas5b //
-j6cas5c //
-j6cas5d //
-j6cas5e //
-j6cas5f //
-j6cas5g //
-j6cas5h //
-j6cas5i //
-j6cas5j //
-j6cas5k //
-j6cas5l //
-j6cascz // Casino Crazy (JPM)
-j6cascza //
-j6casczb //
-j6casczc //
-j6casczd //
-j6cascze //
-j6casczf //
-j6casczg //
-j6casczh //
-j6casczi //
-j6casczj //
-j6casczk //
-j6casczl //
-j6casczm //
-j6cccla // Casino Crazy Classic (JPM)
-j6ccclaa //
-j6ccclab //
-j6ccclac //
-j6ccclad //
-j6ccclae //
-j6ccclaf //
-j6ccclag //
-j6ccclah //
-j6ccclai //
-j6ccclaj //
-j6ccclak //
-j6cascla // Casino Crazy Classic Club (JPM)
-j6casclaa //
-j6casclab //
-j6casclac //
-j6casclad //
-j6casclae //
-j6casclaf //
-j6casclag //
-j6casclah //
-j6casclai //
-j6casclaj //
-j6casclak //
-j6casclal //
-j6casclam //
-j6casclan //
-j6casclao //
-j6casclap //
-j6casclaq //
-j6casclar //
-j6casclas //
-j6casclat //
-j6casclb // Casino Crazy Club (JPM)
-j6casclba //
-j6caslas // Casino Las Vegas (JPM)
-j6caslasa //
-j6caslasb //
-j6caslasc //
-j6cheque // Cheque Mate (JPM)
-j6cluclb // Cluedo Club (JPM)
-j6cluclba //
-j6cluclbb //
-j6cluclbc //
-j6cluclbd //
-j6cluclbe //
-j6cluclbf //
-j6cluclbg //
-j6cluclbh //
-j6cluclbi //
-j6cluclbj //
-j6cluclbk //
-j6cluclbl //
-j6col // Coliseum (Mdm)
-j6cola //
-j6colb //
-j6colc //
-j6cold //
-j6cole //
-j6colf //
-j6colcsh // Coliseum Cash (JPM)
-j6colcsha //
-j6colcshb //
-j6colcshc //
-j6colcshd //
-j6colmon // Colour Of Money (JPM)
-j6colmona //
-j6colmonb //
-j6colmonc //
-j6colmond //
-j6colmone //
-j6colmonf //
-j6colmong //
-j6colmonh //
-j6colmoni //
-j6colmonj //
-j6coprob // Cops 'n' Robbers (Qps)
-j6coproba //
-j6coprobb //
-j6coprobc //
-j6coprobd //
-j6coprobe //
-j6crack // Cracker (JPM)
-j6cracka //
-j6crackb //
-j6crackc //
-j6crackd //
-j6cracke //
-j6crackf //
-j6crackg //
-j6crackh //
-j6cracki //
-j6crackj //
-j6crzclb // Crazy Club (JPM)
-j6crzclba //
-j6crzclbb //
-j6crzclbc //
-j6crsfir // Cross Fire (JPM)
-j6crsfira //
-j6daygld // Daytona Gold (JPM)
-j6dayglda //
-j6daygldb //
-j6daygldc //
-j6daygldd //
-j6dayglde //
-j6dayml // Daytona Millennium (JPM)
-j6daymla //
-j6daymlb //
-j6dmnjkr // Demon Jokers (JPM)
-j6dmnjkra //
-j6dmnjkrb //
-j6dmnjkrc //
-j6dmngz // Diamond Geezer (JPM)
-j6dyfl // Do You Feel Lucky (JPM)
-j6dyfla //
-j6dyflb //
-j6dyflc //
-j6dyfld //
-j6dyfle //
-j6dyflf //
-j6dyflg //
-j6dyflh //
-j6dyfli //
-j6dyflj //
-j6drdogh // Dr Dough (Qps)
-j6euphor // Euphoria (Ace)
-j6euphora //
-j6euphorb //
-j6euphorc //
-j6euphord //
-j6euphore //
-j6euphorf //
-j6fastfr // Fast Fruits Club (Qps)
-j6fastfra //
-j6fasttk // Fast Trak (JPM)
-j6fasttka //
-j6fasttkb //
-j6fasttkc //
-j6filth // Filthy Rich Club (JPM)
-j6filtha //
-j6filthb //
-j6filthc //
-j6firbl // Fireball (JPM)
-j6firbla //
-j6firblb //
-j6firblc //
-j6firbld //
-j6fireck // Firecracker (JPM)
-j6firecka //
-j6fireckb //
-j6fireckc //
-j6fireckd //
-j6firecke //
-j6firclb // Firecracker Club (JPM)
-j6firclba //
-j6firclbb //
-j6firclbc //
-j6fivalv // Five Alive Club (JPM)
-j6fivalva //
-j6fivalvb //
-j6fiveln // Five Liner (JPM)
-j6fivelna //
-j6fivelnb //
-j6fivelnc //
-j6frc10 // Force 10 (JPM)
-j6frc10a //
-j6frc10b //
-j6frc10c //
-j6frc10d //
-j6framft // Frame & Fortune Club (JPM)
-j6frtmch // Fruit Machine, The (JPM)
-j6frtpot // Fruitpots (Qps)
-j6frtpota //
-j6frtpotb //
-j6frtpotc //
-j6gforce // G Force (JPM)
-j6gforcea //
-j6gforceb //
-j6gforcec //
-j6gforced // G Force (JPM) 15GBP
-j6gidogh // G.I. Dough (Ace)
-j6guab // Give Us A Break (JPM)
-j6guaba //
-j6guabb //
-j6guabc //
-j6guabd //
-j6guabe //
-j6guabf //
-j6guabcl // Give Us A Break Club (JPM)
-j6guabcla //
-j6gldclb // Gladiator Club (JPM)
-j6gldclba //
-j6gldclbb //
-j6gogold // Go For Gold (JPM)
-j6gogolda //
-j6gogoldb //
-j6gogoldc //
-j6gldday // Gold Day (JPM)
-j6gldmin // Gold Mine (Empire)
-j6golddm // Golden Demons (JPM)
-j6golddma //
-j6goldgl // Golden Goal (JPM)
-j6goldgla //
-j6goldglb //
-j6goldglc //
-j6goldgld //
-j6goldgle //
-j6goldglf //
-j6goldglg //
-j6goldglh //
-j6goldgli //
-j6goldglj //
-j6goldglk //
-j6goldgll //
-j6hapyhr // Happy Hour (JPM)
-j6hapyhra //
-j6hapyhrb //
-j6hifly // Hi Flyer (Ace)
-j6impact // Hi Impact (JPM)
-j6impacta //
-j6impactb //
-j6impactc // Hi Impact (JPM) 15GBP
-j6hilosv // Hi Lo Silver (JPM)
-j6hilosva //
-j6hilosvb //
-j6hilosvc //
-j6hilosvd //
-j6hilosve //
-j6hirol // Hi Roller (JPM)
-j6hirola //
-j6hirolb //
-j6hirolc //
-j6hirold //
-j6hirlcl // Hi Roller Club (JPM)
-j6hirlcla //
-j6hirlclb //
-j6hirlclc //
-j6histk // Hi Stakes (Qps)
-j6histka //
-j6hiphop // Hip Hopper (Ace)
-j6hiphopa //
-j6hiphopb //
-j6hiphopc //
-j6hiphopd //
-j6hotsht // Hot Shot (Ace)
-j6hotshta //
-j6hotshtb //
-j6hotshtc //
-j6hotshtd //
-j6hotshte //
-j6hotshtf //
-j6hotshtg //
-j6hotshth //
-j6hotshti //
-j6hotshtj //
-j6hotshtk //
-j6hotshtl //
-j6impuls // Impulse (JPM)
-j6impulsa //
-j6impulsb //
-j6impulsc //
-j6impulsd //
-j6impulse //
-j6impulsf //
-j6indy // Indiana Jones (JPM)
-j6indya //
-j6indyb //
-j6indyc //
-j6indyd //
-j6indye //
-j6indyf //
-j6indyg //
-j6indyh //
-j6indyi //
-j6indyj //
-j6indyk //
-j6indyge //
-j6indyge2 //
-j6showtm // It's Showtime (JPM)
-j6showtma //
-j6showtmb //
-j6showtmc //
-j6showtmd //
-j6showtme //
-j6showtmf //
-j6showtmg //
-j6showtmh //
-j6showtmi //
-j6showtmj //
-j6showtmk //
-j6showtml //
-j6jackjs // Jackpot Justice (Qps)
-j6jackjsa //
-j6jackjsb //
-j6jackjsc //
-j6jkrgld // Jokers Gold (JPM)
-j6jkrpls // Jokers Plus (JPM)
-j6jkrplsa //
-j6jkrplsb //
-j6jkrplsc //
-j6jkrplsd //
-j6jkrplse //
-j6jkpldx // Jokers Plus Deluxe (JPM)
-j6jkpldxa //
-j6jkwld // Jokers Wild (JPM)
-j6jungfv // Jungle Fever (Ace)
-j6kamel // Kameleon (JPM)
-j6kungfu // Kung Fu (Ace)
-j6kungfua //
-j6kungfub //
-j6kungfuc //
-j6kungfud //
-j6luckla // Lucky Las Vegas (JPM)
-j6lucklaa //
-j6lucklab //
-j6magcir // Magic Circle Club (JPM)
-j6magcira //
-j6magcirb //
-j6magcirc //
-j6magcird //
-j6mavrk // Maverick (JPM)
-j6mavrka //
-j6mavrkb //
-j6mavrkc //
-j6mavrkd //
-j6maxod // Maximum Overdrive (JPM)
-j6maxoda //
-j6maxodb //
-j6maxodc //
-j6maxcsh // Maximus Cash (JPM)
-j6medal // Medallion Job (Qps)
-j6medala //
-j6medalb //
-j6medalc //
-j6medald //
-j6megbck // Mega Bucks (JPM)
-j6megbcka //
-j6megbckb //
-j6megbckc //
-j6megbckd //
-j6monmad // Money Madness (Ace)
-j6montlk // Money Talks (JPM)
-j6montlka //
-j6montlkb //
-j6montlkc //
-j6montlkd //
-j6montlke //
-j6montlkf //
-j6montlkg //
-j6montlkh //
-j6mono60 // Monopoly 60th Anniversary Edition (JPM)
-j6mono60a //
-j6mono60b //
-j6mono60c //
-j6mono60d //
-j6mono60e //
-j6mono60f //
-j6mono60g //
-j6mono60h //
-j6mono60i //
-j6mono60j //
-j6mono60k //
-j6mono60l //
-j6monobn // Monopoly Bingo (JPM)
-j6monobna //
-j6monobnb //
-j6outlaw // Outlaw (JPM)
-j6outlawc // Outlaw (JPM) Club?
-j6outlawd // Outlaw (JPM) Protocol
-j6oxo // Oxo (JPM)
-j6oxoa //
-j6oxob //
-j6oxoc //
-j6oxod //
-j6oxoe //
-j6oxobin // Oxo Bingo (JPM)
-j6oxobina //
-j6oxobinb //
-j6oxobinc //
-j6oxobind //
-j6oxobine //
-j6oxobinf //
-j6pacman // Pac Man Plus (Qps)
-j6papa // Paparazzi (Empire)
-j6papaa //
-j6papab //
-j6papac //
-j6papad //
-j6papae //
-j6papaf //
-j6phxgld // Phoenix Gold (JPM)
-j6phxglda //
-j6phxgldb //
-j6phxgldc //
-j6phxgldd //
-j6phxglde //
-j6phxgldf //
-j6phxgldg //
-j6pnxgd // Phoenix Gold De Luxe (JPM)
-j6pnxmil // Phoenix Millennium (JPM)
-j6pnxmila //
-j6pnxmilb //
-j6pnxmilc //
-j6pinwzd // Pinball Wizard (JPM)
-j6pinwzda //
-j6pinwzdb //
-j6pinwzdc //
-j6pinwzdd //
-j6pinwzde //
-j6pinwzc // Pinball Wizard (Crystal)
-j6pinwzca //
-j6pinwzcb //
-j6pirgld // Pirates Gold (JPM)
-j6pirglda //
-j6popoli // Popeye & Olive (JPM)
-j6popolia //
-j6pog // Pot Of Gold (Ace)
-j6poga //
-j6pogb //
-j6pogc //
-j6pogd //
-j6pogcls // Pot Of Gold Classic (JPM)
-j6pogclsa //
-j6pogclsb //
-j6pwrlin // Power Lines (JPM)
-j6pwrlina //
-j6pwrspn // Powerspin (JPM)
-j6pwrspna //
-j6pwrspnb //
-j6pwrspnc //
-j6pwrspnd //
-j6pwrspne //
-j6quantm // Quantum Leap (JPM)
-j6quantma //
-j6quantmb //
-j6quantmc //
-j6quick // Quicksilver (RAL)
-j6rager // Red Alert (JPM) [German]
-j6ra // Red Alert (JPM)
-j6raa //
-j6rab //
-j6rac //
-j6rad //
-j6raclb // Red Alert Club (JPM)
-j6raclba //
-j6raclbb //
-j6raclbc //
-j6raclbd //
-j6redarw // Red Arrow (JPM)
-j6redarwa //
-j6redarwb //
-j6redarwc //
-j6redarwd //
-j6redarwe //
-j6redarwf //
-j6redarwg //
-j6redarwh //
-j6redarwi //
-j6redarwj //
-j6redarww // Red Arrow (Whitbread / JPM)
-j6reddmn // Red Demon (JPM)
-j6rh6 // Red Hot 6 (JPM)
-j6rh6a //
-j6rh6b //
-j6rh6c //
-j6rh6d //
-j6rh6e //
-j6rhchil // Red Hot Chili Stepper (Ace)
-j6rhchila //
-j6rhchilb //
-j6rhchilc //
-j6rhchild //
-j6rh6cl // Red Hot Six Club (JPM)
-j6rh6cla //
-j6rh6clb //
-j6rh6clc //
-j6rh6cld //
-j6reelmn // Reel Money (JPM)
-j6reelmna //
-j6reelmnb //
-j6reelmnc //
-j6reelmnd //
-j6reelth // Reel Thing (Ace)
-j6reeltha //
-j6reelthb //
-j6richpk // Rich Pickings (Ace)
-j6rico // Ricochet (JPM)
-j6ricoa //
-j6ricob //
-j6ricoc //
-j6ricod //
-j6ricoe //
-j6robin // Robin Hood (Ace)
-j6robina //
-j6robinb //
-j6robinc //
-j6roller // Roller Coaster (JPM)
-j6rollera //
-j6rollerb //
-j6rollerc //
-j6rollerd //
-j6rollere //
-j6rollerf //
-j6rollerg //
-j6rollerh //
-j6rolleri //
-j6rollerj //
-j6rollerk //
-j6rollerl //
-j6rollerm //
-j6rollern //
-j6rollero //
-j6rollerp //
-j6rccls // Roller Coaster Classic (JPM)
-j6rcclsa //
-j6rcclsb //
-j6royfls // Royal Flush Club (JPM)
-j6royflsa //
-j6royflsb //
-j6royflsc //
-j6royflsd //
-j6royflse //
-j6samur // Samurai Club (JPM)
-j6samura //
-j6samurb //
-j6samurc //
-j6samurd //
-j6sidewd // Sidewinder (JPM)
-j6sidewda //
-j6sidewdb //
-j6sidewdc //
-j6sidewdd //
-j6sidewde //
-j6snakes // Snakes & Ladders (JPM)
-j6snakesa //
-j6snakesb //
-j6snakesc //
-j6snakesd //
-j6snakese //
-j6snakesf //
-j6snakesg //
-j6sonic // Sonic The Hedgehog (JPM)
-j6sonica //
-j6sonicb //
-j6sonicc //
-j6sonicd //
-j6sonice //
-j6sonicf //
-j6sonicg //
-j6sonich //
-j6spcinv // Space Invaders (Crystal)
-j6stards // Stardust (JPM)
-j6stardsa //
-j6stardsb //
-j6stardsc //
-j6start // Starturn (JPM)
-j6starta //
-j6strk10 // Strike 10 (Ace)
-j6strk10a //
-j6strk10b //
-j6strk10c //
-j6strk10d //
-j6strk10e //
-j6strk10f //
-j6strk10g //
-j6strk10h //
-j6strk10i //
-j6strk10j //
-j6strk10k //
-j6supbrk // Super Breakout (JPM)
-j6supbrka //
-j6supbrkb //
-j6supbrkc //
-j6supbrkd //
-j6supbrke //
-j6supbrkf //
-j6supbrkg //
-j6supbrkh //
-j6supbrki //
-j6supbrkj //
-j6swpdrp // Swop Till Ya Drop (JPM)
-j6bags // Three Bags Full (JPM)
-j6roof // Thru' The Roof (Ace)
-j6roofa //
-j6tbirds // Thunderbirds
-j6tbirdsa //
-j6tbirdsb //
-j6tbirdsc //
-j6tbirdsd //
-j6tbirdse //
-j6tbirdsf //
-j6tbirdsg //
-j6tbirdsh //
-j6tbirdsi //
-j6tbirdsj //
-j6tbirdsk //
-j6tbirdsl //
-j6tbirdsm //
-j6tbirdsn //
-j6tbirdso //
-j6tbirdsp //
-j6tbirdsq //
-j6tbirdsr //
-j6tbrdcl // Thunderbirds Club (JPM)
-j6tbrdcla //
-j6tbrdclb //
-j6tbrdclc //
-j6tbrdcld //
-j6tbrdcle //
-j6tbrdclf //
-j6tbrdclg //
-j6tbrdclh //
-j6tbrdcli //
-j6tbrdclj //
-j6tbrdclk //
-j6tbrdcll //
-j6tomb // Tomb Raider (JPM)
-j6tomba //
-j6tombb //
-j6tombc //
-j6tombd //
-j6tombe //
-j6tombf //
-j6tombg //
-j6topflg // Top Flight (Ace)
-j6tutti // Tutti Frutti (Qps)
-j6twst // Twister (Ace)
-j6twsta //
-j6twstb //
-j6twstc //
-j6twstd //
-j6twste //
-j6twstf //
-j6twstg //
-j6twsth //
-j6twsti //
-j6twstj //
-j6twstdt // Twister (JPM) [Dutch]
-j6untch // Untouchables (JPM)
-j6untcha //
-j6pompay // Up Pompay (Ace)
-j6pompaya //
-j6pompayb //
-j6pompayc //
-j6vindal // Vindaloot (JPM)
-j6vivark // Viva Rock Vegas (JPM)
-j6vivarka //
-j6vivarkb //
-j6vivarkc //
-j6vivarkd //
-j6vivarke //
-j6vivarkf //
-j6vivarkg //
-j6vivarkh //
-j6vivarki //
-j6vivarkj //
-j6vivarkk //
-j6vivrkc // Viva Rock Vegas Club (JPM)
-j6vivrkca //
-j6vivrkcb //
-j6wldkng // Wild King Club (JPM)
-j6wldknga //
-j6wthing // Wild Thing (Empire)
-j6wthinga //
-j6wthingb //
-j6wildw // Wild West (Ace)
-j6wildwa //
-j6wildwb //
-j6wildwc //
-j6wildwd //
-j6wildwe //
-j6wildwf //
-j6wildwg //
-j6wizard // Wizard Of Odds (JPM)
-j6wizarda //
-j6wizardb //
-j6wizardc //
-j6wizardd //
-j6wizarde //
-j6knight // Your Lucky Knight (JPM)
-j6knighta //
-j6knightb //
-j6knightc //
-j6knightd //
-j6knighte //
-j6svndb // 7 Deadly Bins (Ace)
-j6ewn // Each Way Nudger (JPM)
-j6hikar // Hi Karate (Crystal)
-j6hikara //
-j6hikarb //
-j6hisprt // High Spirits (Empire)
-j6rcclub // Roller Coaster Club (JPM)
-j6rccluba //
-j6rcclubb //
-j6slvgst // Silver Ghost (JPM)
-j6slvgsta //
-j6slvgstb //
-j6slvgstc //
-j6slvgstd //
-j6slvgste //
-j6slvgstf //
-j6slvgstg //
-j6footy // Football Fever (Empire)
-j6footya //
-j6footyb //
-j6fbcrz // Football Crazy (JPM)
-j6h5clb // High Five Club (JPM)
-j6h5clba //
-j6bbankr // Big Banker (Crystal)
-j6bmc // Big Money Club (Crystal)
-j6bmca //
-j6bno // Big Nite Out (Crystal)
-j6bnoa //
-j6bnob //
-j6bnoc //
-j6btbw // Born To Be Wild Club (Crystal)
-j6btbwa //
-j6btbwb //
-j6btbwc //
-j6btbwd //
-j6cpal // Caesars Palace (Crystal)
-j6cpala //
-j6cpalb //
-j6cpalc //
-j6cpald //
-j6cpale //
-j6cpalf //
-j6cpalg //
-j6cdivr // Cash Diver (Crystal)
-j6ccc // Casino Crazy Club (Crystal)
-j6ccca //
-j6cccb //
-j6cccc //
-j6colic // Coliseum (Crystal)
-j6colica //
-j6colicb //
-j6colicc //
-j6colicd //
-j6crakr // Cracker (Crystal)
-j6crakra //
-j6crakrb //
-j6ewndg // Each Way Nudger (Crystal)
-j6ewndga //
-j6ewndgb //
-j6easy // Easy Money (Crystal)
-j6easya //
-j6easyb //
-j6easyc //
-j6ffc // Frame & Fortune Club (Crystal)
-j6ffca //
-j6ffcb //
-j6ffcc //
-j6ffcd //
-j6ffce //
-j6grc // Gold Rush Club (Crystal)
-j6grca //
-j6hdc // Hot Dogs Club (Crystal)
-j6hdca //
-j6hdcb //
-j6hdcc //
-j6hdcd //
-j6hdce //
-j6hdcf //
-j6hdcg //
-j6impls // Impulse (Crystal)
-j6kapang // Kapang! (Crystal)
-j6kapanga //
-j6kfc // Kung Fu Club (Crystal)
-j6kfca //
-j6kfcb //
-j6lucklo // Lucky Lottery Club (Crystal)
-j6luckloa //
-j6monst // Monster Cash Club (Crystal)
-j6monsta //
-j6monstb //
-j6monstc //
-j6monstd //
-j6pinfvr // Pinball Fever (Crystal)
-j6potg // Pot Of Gold (Crystal)
-j6potga //
-j6potgb //
-j6ramese // Rameses' Riches Club (Crystal)
-j6ramesea //
-j6rameseb //
-j6ramesec //
-j6ramesed //
-j6ramesee //
-j6ramesef //
-j6r2rum // Ready To Rumble (Crystal)
-j6r2ruma //
-j6r2rumb //
-j6r2rumc //
-j6r2rumd //
-j6r2rume //
-j6redal // Red Alert (Crystal)
-j6redala //
-j6reelb // Reel Bingo Classic Club (Crystal)
-j6reelba //
-j6slagn // Snakes & Ladders Slides Again (Crystal)
-j6slagna //
-j6slagnb //
-j6slagnc //
-j6slagnd //
-j6slagne //
-j6slagnf //
-j6slagng //
-j6slagnh //
-j6thril // Thriller (Crystal)
-j6thrila //
-j6tqust // Treasure Quest (Crystal)
-j6tqusta //
-j6tqustb //
-j6tqustc //
-j6gldpl // Golden Palace (QPS / Mazooma)
-j6shoot // ShootOut
-j6milln // Millionaire / Who Wants To Be A Millionaire (JPM)?
-j6millna //
-
-
-// Unknown JPM platform
-j7bmagic // Black Magic (JPM)
-j7cexprs // Cash Xpress (JPM)
-j7crztrl // Crazy Trails (JPM)
-j7fantaz // Fantaztec (JPM)
-j7kerchn // Ker - Chinq (JPM)
-j7clbmag // Club Magic (Qps)
-j7razzma // Razzamataz (JPM)
-j7razzmaa //
-j7r2roll // Ready To Roll (JPM)
-j7tubgld // Turbo Gold (JPM)
-j7wldwkd // Wild 'N' Wicked (JPM)
-j7bullio // Bullionaire (Ace)
-
-/* Bellfruit Hardware */
-
-// System83 games
-
-b83catms
-b83cops
-
-// System85 games
-
-b85scard // (c) 198? BFM
-b85cexpl
-b85royal
-b85bdclb
-b85bdclba
-b85bdclbb
-b85cblit
-b85cblita
-b85cblitb
-b85clbpm
-b85dbldl
-b85dbldla
-b85hilo
-b85hiloa
-b85ritz
-b85ritza
-b85ritzb
-b85ritzc
-b85ritzd
-b85jpclb
-b85jpclba
-b85jpclbb
-b85jpclbc
-b85jkwld
-b85lucky
-b85luckd
-b85sngam
-b85cops // Cops 'n' Robbers (Bellfruit) [Dutch]
-b85koc
-b85koca
-b85disc
-b85cb7p
-b85potp // Pick Of The Pack (Bellfruit)
-b85dbldlb // Double Dealer (Bellfruit)?
-
-// Scorpion 1 games
-
-sc1lotus // (c) 198? BFM Dutch ROMS
-sc1lotusa
-sc1roul // (c) 198? BFM Dutch ROMS, prelim
-sc1clatt // (c) 1990 BFM, Game Card 39-370-196
-sc1clatta
-sc1actv8
-sc1armad
-sc1bartk
-sc1barcd
-sc1barcda
-sc1bigmt
-sc1btclka
-sc1btclkb
-sc1calyp
-sc1carro
-sc1cdmp
-sc1cshat // Cash Attraction
-sc1cshata
-sc1cshatb
-sc1cshatc
-sc1cshatf
-sc1cshatg
-sc1cshath
-sc1cshati
-sc1cshcd
-sc1cshcda
-sc1cshcdb
-sc1ccoin
-sc1cexpd // Cash Explosion (Bellfruit) (Dutch)
-sc1cexpl // Cash Explosion (Bellfruit)
-sc1cexpla
-sc1cexplb
-sc1clbxpa
-sc1cshwz // Cash Wise (Bellfruit)
-sc1cshwza
-sc1cshwzb
-sc1cshwzc
-sc1cshwzd
-sc1cshwze
-sc1cshwzf
-sc1cshwzg
-sc1cshin // Cashino (Bellfruit) (Dutch)
-sc1china // China Town Club (Bellfruit)
-sc1chinap
-sc1chinaa
-sc1chinaap
-sc1chinab
-sc1chinabp
-sc1class // Classic (Bellfruit)
-sc1cwcl // Clockwise Club (Bellfruit)
-sc1clown // Clown Around (Bellfruit)
-sc1cl2k // Club 2000 (Bellfruit)
-sc1cl2k1 // Club 2001 (Bellfruit)
-sc1cl65 // Club 65 Special (Bellfruit)
-sc1cl65a
-sc1cl65cp
-sc1cl65b
-sc1cl65bp
-sc1cl65c
-sc1cl65d
-sc1cl65dp
-sc1cl65ap
-sc1clbdm // Club Diamond (Bellfruit)
-sc1clbxp // Club Explosion (Bellfruit)
-sc1clbrn // Club Runner (Bellfruit)
-sc1clbsp // Club Spinner (Bellfruit)
-sc1clbtm // Club Temptation (Bellfruit)
-sc1clbtma
-sc1clbw // Club Wise (Bellfruit)
-sc1clbwa
-sc1cops // Cops 'n' Robbers (Bellfruit)
-sc1copsa
-sc1copdd // Cops 'n' Robbers Deluxe (Bellfruit) [Dutch]
-sc1copdx // Cops 'n' Robbers Deluxe (Bellfruit)
-sc1count // Count Cash Club (Bellfruit)
-sc1countp
-sc1counta
-sc1countap
-sc1dago // Dagobert's Vault (Bellfruit)
-sc1disc // Discovey (Bellfruit)
-sc1dblch // Double Chance (Bellfruit)
-sc1dblcha
-sc1dblchb
-sc1dream // Dream Machine (Bellfruit)
-sc1final // Final Touch (Bellfruit)
-sc1flash // Flash (Bellfruit)
-sc1frpusa
-sc1fruit // Fruit Lines (Bellfruit)
-sc1frtln // Fruitlines (Bellfruit)
-sc1funh // Fun House Club (Bellfruit)
-sc1funhp
-sc1funha
-sc1gtime // Good Times (Bellfruit)
-sc1tiara // Tiara (Elam)
-sc1gprix // Grand Prix (Bellfruit)
-sc1gslam // Grand Slam (Bellfruit) (Dutch)
-sc1happy // Happy Hour (Bellfruit - Elam)
-sc1hfccp
-sc1impc // Impact (Bellfruit)
-sc1kings // Kings Club (Bellfruit)
-sc1linx // Linx (Bellfruit)
-sc1linxa
-sc1linxp
-sc1magc // Magic Circle (Bellfruit)
-sc1manha // Manhattan (Bellfruit)
-sc1mast // Master Club (Bellfruit)
-sc1quat // Quatro (Bellfruit)
-sc1mist // Mistral (Bellfruit)
-sc1olym // Olympia (Bellfruit)
-sc1orac // Oracle (Bellfruit)
-sc1pwrl // Power Lines (Bellfruit)
-sc1rain // Rainbow (Bellfruit)
-sc1re // Reel Cash (Bellfruit)
-sc1rese // Reel Cash SE (Bellfruit)
-sc1revo // Revolution (Bellfruit) (Dutch)
-sc1rose // Rose 'n' Crown (Bellfruit)
-sc1sant // Santana (Bellfruit)
-sc1sat // Satellite (Bellfruit)
-sc1shan // Shanghai (Bellfruit)
-sc1spct // Spectre (Bellfruit)
-sc1spcta
-sc1spit // Spitfire (Elam)
-sc1ster // Sterling (Bellfruit)
-sc1str4 // Strike 4 (Bellfruit)
-sc1str4a //
-sc1sir // Strike It Rich (Bellfruit)
-sc1sira
-sc1sirb
-sc1sirc
-sc1sups // Superstar (Bellfruit) (Dutch)
-sc1torn // Tornado (Bellfruit)
-sc1torna
-sc1tri // Tri Star (Bellfruit)
-sc1tria
-sc1triap
-sc1trib
-sc1tribp
-sc1typ // Typhoon Club (Bellfruit)
-sc1typp
-sc1ult // Ultimate (Bellfruit)
-sc1vent // Ventura (Bellfruit)
-sc1vict // Victory (Bellfruit)
-sc1voy // Voyager (Bellfruit)
-sc1voya
-sc1winfl // Winfalls (Bellfruit)
-sc1winst // Winning Streak (Bellfruit)
-sc1winstp
-sc1winsta
-sc1zep // Zeppelin (Bellfruit)
-sc1wthn // Wild Thing (Eurocoin)
-sc1days // All In A Days Work (Global)
-sc1daysa
-sc1cscl // Cash Classic (Global)
-sc1cscla
-sc1driv // Driving School (Global)
-sc1driva
-sc1drivb
-sc1drivc
-sc1vsd // Vegas Super Deal (Global)
-sc1moonl // Moon Lite (Bwb)
-sc1ltdv // Little Devil (Pcp)
-sc1t1k // Top 1000 (Eurocoin)
-sc1dip // Diplomat (Eurocoin)
-sc1lamb // Lambada (Eurocoin)
-sc1reply // Replay (Eurocoin)
-sc1smoke // Smokey Vs The Bandit (Mdm)
-sc1smokea
-sc1ccroc // Crazy Crocs (Mdm)
-sc1ccroca
-sc1ccrocb
-sc1ccrocc
-sc1crocr // Croc And Roll (Mdm)
-sc1btclk // Beat The Clock (Mdm)
-sc1btbc // Beat The Bank Club (Bellfruit)
-sc1boncl // Bonanza Club (Bellfruit)
-sc1clins // Cash Lines (Bellfruit)
-sc1clinsa //
-sc1clinsb //
-sc1clinsc //
-sc1clinsd //
-sc1clinse //
-sc1clb3 // Club 3000 (Bellfruit)
-sc1czbrk // Crazy Break (Bellfruit)
-sc1energ // Energy (Bellfruit)
-sc1hipt // High Point (Bellfruit)
-sc1hipta //
-sc1satse // Satellite SE (Bellfruit)
-sc1strk // Strike (Bellfruit)
-sc1supfl // Super Flush (Bellfruit)
-sc1ofs56 // zzz_unk ofs56cp (Bellfruit)
-sc1frpus // Fruit Pursuit (Bellfruit)
-sc1wof // Wheel Of Fortune (Global)
-sc1wofa //
-sc1wofb //
-sc1crzyc // Crazy Cash (Global)
-sc1crzyca //
-sc1clbdy // Club Dynamite (Global)
-sc1clbdya //
-sc1chqfl // Chequered Flag (Global)
-sc1s1000 // Super 1000 (Deltasoft)
-sc1cdm // Club Diamond (Crystal)
-sc1hfcc // Hi-Flyer Club (Crystal)
-sc1twice // Twice As Nice (Associated Leisure)
-sc1chain // Chain Reaction (Bellfruit)
-sc1chainp
-sc1scunk //
-sc1wud // What's Up Dr
-sc1goldw
-sc1druby
-sc1drubya
-
-// Scorpion 2 / 3
-
-sc2brkfs // The Big Breakfast
-sc2brkfsp //
-sc2brkfs1 //
-sc2brkfs1p //
-sc2brkfs2 //
-sc2brkfs3 //
-sc2brkfs3p //
-sc2brkfs4 //
-sc2brkfs4p //
-sc2brkfs5 //
-sc2brkfs5p //
-sc2brkfs6 //
-sc2brkfsm //
-sc2brkfsm1 //
-sc2brkfsm2 //
-sc2drwho // Dr.Who The Timelord
-sc2drwho7 //
-sc2drwho1p //
-sc2drwhop //
-sc2drwho1 //
-sc2drwho2 //
-sc2drwho4p //
-sc2drwho7p //
-sc2drwho5p //
-sc2drwho6p //
-sc2drwho3p //
-sc2drwho2p //
-sc2drwho4 //
-sc2drwho5 //
-sc2drwho6 //
-sc2drwho3 //
-sc2drwhodx //
-sc2drwhou //
-sc2drwhomzp // (Mazooma set)
-sc2drwhomz // (Mazooma set)
-sc2drwhodx1 // (Deluxe)
-sc2focus // Focus (Dutch, Game Card 95-750-347)
-sc2gslam // Club Grandslam (UK, Game Card 95-750-843)
-sc2gslamp
-sc2gslam1
-sc2gslam1p
-sc2cshcl // Cashino Club (Bellfruit)
-sc2cshclp
-sc2cshcl1
-sc2cshcl1p
-sc2catms // Cat & Mouse (Bellfruit)
-sc2catms1
-sc2catms1p
-sc2catms2
-sc2catms2p
-sc2catms3
-sc2ctms2 // Cat & Mouse (Mark 2 - Bellfruit)
-sc2ctms21
-sc2ctms21p
-sc2ctms22
-sc2ctms22p
-sc2ctms23
-sc2ctms23p
-sc2ctms24p
-sc2ctms25
-sc2eggs // Eggs On Legs Tour (Bellfruit)
-sc2eggsp
-sc2eggs1
-sc2eggs1p
-sc2gsclb // The Game Show Club (Bellfruit)
-sc2gsclbp
-sc2gsclb1
-sc2gsclb1p
-sc2gsclb2
-sc2gsclb2p
-sc2gsclb3
-sc2gsclb3p
-sc2gsclb4
-sc2gsclb4p
-sc2gsclb5
-sc2gsclb6
-sc2gsclb6p
-sc2gsclb7
-sc2suprz // Surprise Surprize (Bellfruit)
-sc2suprzp
-sc2suprz1
-sc2suprz1p
-sc2suprz2
-sc2suprz2p
-sc2suprz3
-sc2cpg // Pharaoh's Gold Club (Bellfruit)
-sc2cpgp
-sc2cpg1
-sc2cpg1p
-sc2cpg2
-sc2cpg2p
-sc2motd // Match Of The Day (Bellfruit)
-sc2motdp
-sc2motd1
-sc2motd1p
-sc2motd2
-sc2motd2p
-sc2motd3
-sc2motd3p
-sc2motd4
-sc2motd4p
-sc2motd5
-sc2motd5p
-sc2motd6
-sc2motd6p
-sc2motd7
-sc2motd8p
-sc2motd9
-sc2easy // Easy Money (Bellfruit)
-sc2easyp
-sc2easy1
-sc2easy1p
-sc2easy2
-sc2easy2p
-sc2majes // Majestic Bells (Bellfruit)
-sc2majesp
-sc2dels // Del's Millions (Bellfruit)
-sc2delsp
-sc2dels1
-sc2dels1p
-sc2dels2
-sc2dels2p
-sc2dels3
-sc2dels3p
-sc2dels4
-sc2dels4p
-sc2dels5
-sc2dels6
-sc2dels7
-sc2dels8
-sc2dels9
-sc2delsd
-sc2delsm // (Mazooma set)
-sc2delsmp
-sc2delsm1
-sc2delsm1p
-sc2delsm2
-sc2delsm2p
-sc2delsm3
-sc2delsm3p
-sc2wembl // Road To Wembley (Bellfruit)
-sc2wemblp
-sc2wembl1
-sc2wembl1p
-sc2wembl2
-sc2wembl2p
-sc2wembl4p
-sc2wembl5a
-sc2wembl5ap
-sc2wembl6ap
-sc2wembl7a
-sc2wembl7ap
-sc2wembl8
-sc2wembl9
-sc2wembl10
-sc2wemblm // (Mazooma set)
-sc2downt // Down Town (Bellfruit)
-sc2downtp
-sc2downt1
-sc2downt1p
-sc2downt2
-sc2downt2p
-sc2downt3
-sc2downt3p
-sc2downt3a
-sc2downt3ap
-sc2downt4
-sc2downt4p
-sc2downt4a
-sc2downt4ap
-sc2downt5
-sc2downt6
-sc2downt7
-sc2downt8a
-sc2downt8ap
-sc2goldr // Gold Reserve (Mdm)
-sc2goldrp
-sc2goldr1
-sc2hifly // High Flyer (Mdm)
-sc2hifly2
-sc2hifly3
-sc2hifly4
-sc2inst // Instant Jackpot (Bellfruit)
-sc2instp
-sc2inst1
-sc2inst1p
-sc2inst2
-sc2inst2p
-sc2inst3
-sc2inst3p
-sc2inst4
-sc2inst4p
-sc2inst5
-sc2inst6
-sc2mam // Make A Million (Bellfruit)
-sc2mamp
-sc2mam1
-sc2mam1p
-sc2mam2
-sc2mam2p
-sc2mam3
-sc2mam3p
-sc2mam4
-sc2mam4p
-sc2mam3a
-sc2mamcl // Make A Million Club (Bellfruit)
-sc2mamclp
-sc2mamcl1
-sc2mamcl1p
-sc2mamcl2
-sc2mamcl2p
-sc2mamcl3
-sc2scc // Safe Cracker Club (Mdm)
-sc2showt // Showtime Spectacular (Bellfruit)
-sc2showtp
-sc2showt1
-sc2showt1p
-sc2showt2
-sc2showt2p
-sc2showt3
-sc2showt3p
-sc2showt4
-sc2showt4p
-sc2sstar // Superstar (Bellfruit)
-sc2sstarp
-sc2sstar1
-sc2sstar1p
-sc2sstar2
-sc2sstar2p
-sc2sstar3
-sc2sstar3p
-sc2pe1g // Public Enemy No1 (Bellfruit) [German]
-sc2wwcl // Wild West Club (Bellfruit)
-sc2wwclp
-sc2wwcl1
-sc2wwcl1p
-sc2dick // Spotted Dick (Global)
-sc2dickp
-sc2dick1
-sc2dick2
-sc2dick2p
-sc2dick2e
-sc2dick2eu
-sc2pick // Pick Of The Bunch (Global)
-sc2pickp
-sc2pickc
-sc2pickcp
-sc2rock // How Big's Your Rock? (Global)
-sc2rockp
-sc2rock1
-sc2rock1p
-sc2rocke
-sc2call // It's Your Call (Global)
-sc2callp
-sc2callc
-sc2callcp
-sc2prom // Along The Prom
-sc2payr // Pay Roll (Mazooma)
-sc2cgc // Carrot Gold Club (Bellfruit)
-sc2cnile // Cash On The Nile Club (Bellfruit)
-sc2cnile1
-sc2cnile2
-sc2cnile2p
-sc2cnilep
-sc2casr // Casino Royale (Bellfruit)
-sc2casrp
-sc2casr1
-sc2casr1p
-sc2casr2
-sc2casr2p
-sc2casr3
-sc2casr3p
-sc2casr4
-sc2casr4p
-sc2cmbt // Cat & Mouse & Bonzo Too (Bellfruit)
-sc2cmbtp
-sc2dbl // Double Diamond (Bellfruit
-sc2dblp
-sc2dbl1
-sc2dbl1p
-sc2flaca // Flash Cash (Bellfruit)
-sc2flacap
-sc2flaca1
-sc2flaca1p
-sc2flaca2
-sc2flaca2p
-sc2foot // Football Club (Bellfruit)
-sc2footp
-sc2foot1
-sc2foot1p
-sc2foot2
-sc2foot2p
-sc2gcclb // Golden Casino Club (Bellfruit)
-sc2gcclbp
-sc2gcclb1
-sc2gcclb1p
-sc2gcclb2
-sc2gcclb2p
-sc2groul // Golden Roulette (Bellfruit)
-sc2groulp
-sc2gtr // Great Train Robbery (Bellfruit)
-sc2heypr // Hey Presto (Bellfruit)
-sc2heyprp
-sc2hypr // Hyperactive (Bellfruit)
-sc2hyprp
-sc2hypr1
-sc2hypr1p
-sc2kcclb // King Cash Club (Bellfruit)
-sc2kcclbp
-sc2kcclb1
-sc2kcclb1p
-sc2maina // Main Attraction (Bellfruit)
-sc2olgld // Olympic Gold (Bellfruit)
-sc2olgldp
-sc2olgld1
-sc2olgld1p
-sc2relgm // Reel Gems (Bellfruit)
-sc2relgmp
-sc2relgm1p
-sc2topwk // Top Wack (Bellfruit)
-sc2topwkp
-sc2cb7 // Casino Bar 7 (Bellfruit)
-sc2cb71
-sc2cb72
-sc2cb72p
-sc2cb7p
-sc2cgcas // Club Grand Casino
-sc2cgcasp
-sc2cgcas1
-sc2cgcas1p
-sc2cvega // Cash Vegas
-sc2cvega1
-sc2cvega1p
-sc2cvega2
-sc2cvega2p
-sc2cvega3
-sc2cvega3p
-sc2cvega4p
-sc2bar7 // Bar 7 (Concept)
-sc2bar7a
-sc2bar7b
-sc2bar7c
-sc2bar7d
-sc2bar7e
-sc2bar7f
-sc2bar7g
-sc2bar7h
-sc2bar7i
-sc2bar7j
-sc2bar7k
-sc2bbar7 // Big Bar 7 (Concept)
-sc2bbar7a
-sc2bbar7b
-sc2bbar7c
-sc2bbar7d
-sc2bbar7e
-sc2bbar7f
-sc2bbar7g
-sc2bbar7h
-sc2bbar7i
-sc2bbar7j
-sc2bbar7k
-sc2bbar7l
-sc2bbar7m
-sc2bbar7n
-sc2bbar7o
-sc2bbar7p
-sc2flutr // Flutter (Concept)
-sc2sghst // Super Ghost (Concept)
-sc2smnud // Super Multi Nudge (Concept)
-sc2scshx // Super Cash X (Concept)
-sc2scshxgman // Gamesman hardware
-sc2scshxstar // Starpoint hardware
-sc2scshxcas // Super Casino Cash X (Concept)
-
-
-
-// Scorpion 2 + Dot Matrix Display
-
-sc2luvv // Luvvly Jubbly (UK Multisite 10/25p, Game Card 95-750-808)
-sc2luvv1
-sc2luvv1p
-sc2luvv2
-sc2luvv2p
-sc2luvv4
-sc2luvvp
-sc2luvv6p
-sc2luvv4p
-sc2cpe // Club Public Enemy No.1 (UK, Game Card 95-750-846)
-sc2cpep
-sc2cpe1
-sc2cpe1p
-sc2cpe2
-sc2cpe2p
-sc2cpe3
-sc2cpe3p
-sc2cpe4
-sc2cpe4p
-sc2town // Round The Town (Bellfruit)
-sc2townp
-sc2town1
-sc2town1a
-sc2town1p
-sc2town2
-sc2town3
-sc2town3p
-sc2town4
-sc2town5
-sc2ofool // Only Fools & Horses (Bellfruit)
-sc2ofool1
-sc2ofool2
-sc2ofool3
-sc2ofool4
-sc2ptytm // Party Time (Bellfruit)
-sc2ptytm1
-sc2ptytmp
-sc2cops // Cops 'n' Robbers (Bellfruit)
-sc2copsp
-sc2cops1p
-sc2cops2
-sc2cops3
-sc2cops3p
-sc2cops4
-sc2cops5
-sc2copsc // Casino Cops 'n' Robbers (Bellfruit)
-sc2copscp
-sc2copsc1
-sc2copsc1p
-sc2copsc1pa
-sc2copcl //
-sc2copclp
-sc2copcl1
-sc2copcl1p
-sc2copcl2
-sc2copcl3
-sc2copcl3p
-sc2copcl4
-sc2copcl5
-sc2copcl6
-sc2copcl6p
-sc2copcl7
-sc2copcl8
-sc2copcl8p
-sc2copcl9
-sc2copcl9p
-sc2copcl10
-sc2copcl11
-sc2copcl11p
-sc2copcl12
-sc2copdc // Cops 'n' Robbers Club Deluxe (Bellfruit)
-sc2copdcp
-sc2copdc1
-sc2copdc1p
-sc2copdc2
-sc2copdc2p
-sc2copdc3
-sc2copdc3p
-sc2copdc4
-sc2copdc4p
-sc2copdc5
-sc2copdc5p
-sc2copdc6
-sc2prem // Premier Club Manager (Bellfruit)
-sc2prem1
-sc2prem1p
-sc2prem2
-sc2winstb // Winning Streak
-sc2winstbp
-sc2winst
-sc2winstp
-sc2winstd
-sc2winstdp
-sc2winste
-sc2winstep
-sc2winstf
-sc2winstfp
-sc2winstg
-sc2cexpl // Cash Explosion
-sc2cexpla
-sc2cexplb
-sc2cexplc
-sc2cexpld
-sc2cexple
-
-
-// Scorpion 4 (& 5 & Adder 5)
-
-
-
-/* Scorpion 4 */
-
-sc4tst // Scorpion 4 Test Rig (Bellfruit)
-
-sc4bbust // Blockbuster (Mazooma)
-sc4pstat // Paystation (Qps)
-sc4pstata //
-sc4pstatb //
-sc4pstatc //
-sc4pstatd //
-sc4pstate //
-sc4pstatf //
-sc4pstatg //
-sc4pstath //
-sc4pstati //
-sc4pstatj //
-sc4pstatm //
-sc4pstatn //
-sc4pstato //
-sc4pstatp //
-sc4pstatq //
-sc4cvani // Cashvania (Qps)
-sc4cvania //
-sc4cvanib //
-sc4cvanic //
-sc4cvanid //
-sc4cvanie //
-sc4cvanif //
-sc4cvanig //
-sc4cvanih //
-sc4cvanii //
-sc4cvclb // Cashvania Club (Qps)
-sc4cvclba //
-sc4cvclbb //
-sc4cvclbc //
-sc4cvclbd //
-sc4cvclbe //
-sc4cvclbf //
-sc4cvclbg //
-sc4spark // South Park (BFM)
-sc4sparka //
-sc4sparkb //
-sc4sparkc //
-sc4sparkd //
-sc4sparke //
-sc4brkfs // The Big Breakfast (BFM)
-sc4brkfsa //
-sc4brkfsb //
-sc4brkfsc //
-sc4gslam // Grandslam Club (BFM)
-sc4gslama //
-sc4gslamb //
-sc4gslamc //
-sc4gslamd //
-sc4gslame //
-sc4gslamf //
-sc4ivply // 4 Play (Bellfruit)
-sc4abra // Abracadabra (Qps)
-sc4abraa //
-sc4abrab //
-sc4abrac //
-sc4abrad //
-sc4abrae //
-sc4acesh // Aces High (Mazooma)
-sc4acesha //
-sc4aceshb //
-sc4aceshc //
-sc4adren // Adrenalin (Mazooma)
-sc4adrena //
-sc4adrenb //
-sc4adrenc //
-sc4alad // Aladdin's Cave (Mazooma)
-sc4alada //
-sc4a40cl // Around The Board In 40 Days Club (Mazooma)
-sc4a40cla //
-sc4a40clb //
-sc4a40clc //
-sc4aztec // Aztec (Bellfruit)
-sc4azteca //
-sc4botn // Back Of The Net (Qps)
-sc4botna //
-sc4broll // Bank Roll (Mazooma)
-sc4brolla //
-sc4brollb //
-sc4brollc //
-sc4bankb // Bankety Bank (Qps)
-sc4bankba //
-sc4bed // Bedazzled (Mazooma)
-sc4beda //
-sc4bedb //
-sc4bedc //
-sc4bedd //
-sc4bede //
-sc4bedcl // Bedazzled Club (Mazooma)
-sc4bedcla //
-sc4bedclb //
-sc4bedclc //
-sc4bedcld //
-sc4bblas // Big Blaster (Mazooma)
-sc4bblasa //
-sc4bblasb //
-sc4bblasc //
-sc4bblasd //
-sc4bblase //
-sc4bblasf //
-sc4bigdl // Big Deal (Qps)
-sc4bigdla //
-sc4bingb // Bingo Belle (Mazooma)
-sc4bingba //
-sc4bb // Blankety Bank (Qps)
-sc4bba //
-sc4bbclb // Blankety Bank Club (Qps)
-sc4bbclba //
-sc4bbclbb //
-sc4bbclbc //
-sc4blast // Blast Off (Qps)
-sc4blasta //
-sc4blastb //
-sc4blastc //
-sc4blastd //
-sc4blaste //
-sc4blue // Blue Rinse (Mazooma)
-sc4bluea //
-sc4blueb //
-sc4bluec //
-sc4blued //
-sc4bluee //
-sc4bobcl // Bobby Dazzler Club (Mazooma)
-sc4bobcla //
-sc4bonbx // Bonus Bar X (Mazooma)
-sc4bonbxa //
-sc4bonbxb //
-sc4bonbxc //
-sc4bonbxd //
-sc4bonbxe //
-sc4bonbxf //
-sc4bonbxg //
-sc4bonbxh //
-sc4bonbxi //
-sc4bonbxj //
-sc4bonbxk //
-sc4bonbxl //
-sc4brksp // Break The Spell (Mazooma)
-sc4brkspa //
-sc4brix // Brix (Nova)
-sc4brixa //
-sc4brixb //
-sc4bugs // Bugs Money (Bellfruit)
-sc4bugsa //
-sc4bugsb //
-sc4bugsc //
-sc4bulcl // Bullseye Club (Bellfruit)
-sc4bulcla //
-sc4bulclb //
-sc4bulclc //
-sc4bulcld //
-sc4bulcle //
-sc4bulclf //
-sc4bulclg //
-sc4bulclh //
-sc4bulcli //
-sc4canca // Can Can Cash (Mazooma)
-sc4cancaa //
-sc4cancab //
-sc4cancac //
-sc4captn // Captain Cash (Qps)
-sc4captna //
-sc4captnb //
-sc4captnc //
-sc4captnd //
-sc4captne //
-sc4captnf //
-sc4carry // Carry On Winning (Bellfruit)
-sc4carrya //
-sc4cmous // Cash & Mouse (Qps)
-sc4cmousa //
-sc4cmousb //
-sc4cmousc //
-sc4cburn // Cash 'n' Burn (Qps)
-sc4cburna //
-sc4cnfr // Cash 'n' Fruit (Bellfruit)
-sc4cnfra //
-sc4cnfrb //
-sc4cnfrc //
-sc4cnfrd //
-sc4cnfre //
-sc4cnfrf //
-sc4cnfrg //
-sc4cnfrh //
-sc4cnfri //
-sc4cad // Cash Adder (Qps)
-sc4cada //
-sc4cadb //
-sc4cadc //
-sc4cadd //
-sc4cade //
-sc4cadf //
-sc4cadg //
-sc4cadh //
-sc4cadi //
-sc4cadj //
-sc4cadk //
-sc4cadl //
-sc4cadm //
-sc4cadn //
-sc4cado //
-sc4cadp //
-sc4cadq //
-sc4cadcl // Cash Adder Club (Qps)
-sc4cadcla //
-sc4cbaz // Cash Bazaar Club (Bellfruit)
-sc4cbaza //
-sc4cbazb //
-sc4cbazc //
-sc4cbazd //
-sc4cbaze //
-sc4cbazf //
-sc4cbazg //
-sc4cbazh //
-sc4cbazi //
-sc4cbazj //
-sc4cbazk //
-sc4cconx // Cash Connexion (Mazooma)
-sc4cconxa //
-sc4cconxb //
-sc4cconxc //
-sc4cconxd //
-sc4ccrus // Cash Crusaders (Mazooma)
-sc4ccrusa //
-sc4ccrusb //
-sc4cerup // Cash Eruption (Mazooma)
-sc4cexpl // Cash Explosion (Mazooma)
-sc4cexpla //
-sc4cexplb //
-sc4cexplc //
-sc4cexpld //
-sc4cexple //
-sc4cexplf //
-sc4cexplg //
-sc4chand // Cash In Hand (Bellfruit)
-sc4chanda //
-sc4chandb //
-sc4chandc //
-sc4cinv // Cash Invaders (Bellfruit)
-sc4cinva //
-sc4cinvb //
-sc4cinvc //
-sc4cinvd //
-sc4cinve //
-sc4cinvf //
-sc4cinvg //
-sc4cinvh //
-sc4cinvi //
-sc4clash // Cash On The Lash (Mazooma)
-sc4clasha //
-sc4clashb //
-sc4clashc //
-sc4clashd //
-sc4clashe //
-sc4clashf //
-sc4clashg //
-sc4cr // Cash Raker (Qps)
-sc4cra //
-sc4crb //
-sc4crc //
-sc4crd //
-sc4cre //
-sc4crf //
-sc4crcl // Cash Raker Club (Qps)
-sc4crcla //
-sc4crclb //
-sc4crclc //
-sc4crcld //
-sc4crcle //
-sc4crclf //
-sc4cashn // Cashanova (Bellfruit)
-sc4cashm // Cashanova (Mazooma)
-sc4cashma //
-sc4cashmb //
-sc4cashmc //
-sc4cashmd //
-sc4cashme //
-sc4cashg //
-sc4cckey // Casino Crazy Keys (Bellfruit)
-sc4cckeya //
-sc4cckeyb //
-sc4cckeyc //
-sc4cckeyd //
-sc4cckeye //
-sc4cckeyf //
-sc4cckeyg //
-sc4cckeyh //
-sc4cckeyi //
-sc4cckeyj //
-sc4cckeyk //
-sc4cckeyl //
-sc4cckeym //
-sc4cckeyn //
-sc4cckeyo //
-sc4ckx // Casino King X (Mazooma)
-sc4ckxa //
-sc4ckxb //
-sc4ckxc //
-sc4ckxd //
-sc4ckxe //
-sc4ckxf //
-sc4ckxg //
-sc4casry // Casino Royale (Mazooma)
-sc4casrya //
-sc4casryb //
-sc4casryc //
-sc4casryd //
-sc4casrye //
-sc4chick // Chickendales (Mazooma)
-sc4chub // Chubby Does Vegas (Mazooma)
-sc4chuba //
-sc4chubb //
-sc4cla7 // Classic 7s (Mazooma)
-sc4cla7a //
-sc4cla7b //
-sc4cla7c //
-sc4ccogs // Clever Cogs (Qps)
-sc4cclas // Club Class (Bellfruit)
-sc4cclasa //
-sc4cclasb //
-sc4cclasc //
-sc4cclasd //
-sc4cclase //
-sc4cclasf //
-sc4cclasg //
-sc4cclash //
-sc4cclasi //
-sc4cclasj //
-sc4cclask //
-sc4cclasl //
-sc4cclasm //
-sc4cclasn //
-sc4cclaso //
-sc4cclasp //
-sc4cclasq //
-sc4cclasr //
-sc4cclass //
-sc4cclast //
-sc4cclasu //
-sc4cclasv //
-sc4cclasw //
-sc4cclasx //
-sc4cclasy //
-sc4cclasz //
-sc4cclas0 //
-sc4cclas1 //
-sc4cclas2 //
-sc4cclas3 //
-sc4cclas4 //
-sc4clclo // Club Clouseau (Mazooma)
-sc4clucl // Cluedo Club (Mazooma)
-sc4clucla //
-sc4colos // Colossus (Bellfruit)
-sc4cjcl // Cool Jewels Club (Bellfruit)
-sc4cjcla //
-sc4cjclb //
-sc4cjclc //
-sc4cjcld //
-sc4cjcle //
-sc4cjclf //
-sc4ctlcl // Cop The Lot Club (Bellfruit)
-sc4ctlcla //
-sc4ctlclb //
-sc4ctlclc //
-ad4ctl //
-ad4ctla //
-sc4crcc // Cops 'n' Robbers Club Classic (Bellfruit)
-sc4crcca //
-sc4crccb //
-sc4crccc //
-sc4crcp // Cops 'n' Robbers Club Platinum (Bellfruit)
-sc4crcpa //
-sc4crcpc //
-sc4crcpd //
-sc4crcpe //
-sc4crcpf //
-sc4crcpg //
-sc4crcph //
-sc4crcpi //
-sc4crcpj //
-sc4crgc // Cops 'n' Robbers Gold Club (Bellfruit)
-sc4crgca //
-sc4crgcb //
-sc4crgcc //
-sc4crgcd //
-sc4crgce //
-sc4crgcf //
-sc4crgcg //
-sc4crgch //
-sc4crgci //
-sc4crgcj //
-sc4crgck //
-sc4crgcl //
-sc4crgcm //
-sc4crgcn //
-sc4crgco //
-sc4crgcp //
-sc4crgcq //
-sc4crgcr //
-sc4crgcs //
-sc4crgct //
-sc4crgcu //
-sc4crgcv //
-sc4crgcw //
-sc4corcl // Coronation Street Club (Mazooma)
-sc4corcla //
-sc4cyc // Count Yer Cash (Mazooma)
-sc4cyca //
-sc4cycb //
-sc4cycc //
-sc4cycd //
-sc4cyccl // Count Yer Cash Club (Mazooma)
-sc4cyccla //
-sc4cycclb //
-sc4cycclc //
-sc4crzcs // Crazy Casino (Bellfruit)
-sc4crzcsa //
-sc4crzcsb //
-sc4crzcsc //
-sc4cclim // Crazy Climber (Bellfruit)
-sc4cclima //
-sc4cclimb //
-sc4cclimc //
-sc4cclimd //
-sc4cclime //
-sc4cclimf //
-sc4cclimg //
-sc4cclimh //
-sc4cclimi //
-sc4cclimj //
-sc4cclimk //
-sc4ccliml //
-sc4cclimm //
-sc4cclimn //
-sc4cclimo //
-sc4cclimp //
-sc4cclimq //
-sc4cclimr //
-sc4cclims //
-sc4cclimt //
-sc4cclimu //
-sc4clbmn //
-sc4clbmna //
-sc4clbmnb //
-sc4clbmnc //
-sc4boomb //
-sc4boomba //
-sc4cfqps // Crazy Fruits (Qps)
-sc4cfqpsa //
-sc4cfqpsb //
-sc4cfqpsc //
-sc4cfqpsd //
-sc4cfqpse //
-sc4cfqpsf //
-sc4cfqpsg //
-sc4cfqpsh //
-sc4cfqpsi //
-sc4cfqpsj //
-sc4cfqpsk //
-sc4cfcas // Crazy Fruits Casino (Bellfruit)
-sc4cfcasa //
-sc4cfcasb //
-sc4cfcasc //
-sc4cfcasd //
-sc4cfcase //
-sc4cfcasf //
-sc4cfcasg //
-sc4cfcash //
-sc4cfcasi //
-sc4cfcasj //
-sc4cfcask //
-sc4cfcasl //
-sc4cfcasm //
-sc4cfcasn //
-sc4cfcaso //
-sc4cfcasp //
-sc4cfcasq //
-sc4cfcasr //
-sc4czfrg
-sc4cfqpsl
-sc4cfqpsm
-sc4czfrh
-sc4czfri
-sc4czfrj
-sc4czfrk
-sc4cfqpsn
-sc4cfqpso
-sc4cfcass
-sc4cfcast
-sc4cfcasu
-sc4cfcasv
-sc4cfcasw
-sc4cfcasx
-sc4cfcasy
-sc4cfcasz
-sc4cfcas0
-sc4cfcas1
-sc4cfcas2
-sc4cfcas8
-sc4cfcas9
-sc4cfcas3
-sc4cfcas4
-sc4cfcas5
-sc4cfcas6
-sc4cfcas7
-sc4cfcasaa
-sc4cfcasab
-sc4cfcasac
-sc4cfcasad
-sc4cfcasae
-sc4cfcasaf
-sc4cfcasag
-sc4cfcasah
-sc4cfcasai
-sc4cfqpsp
-sc4cfcasaj
-sc4cfcasak
-sc4cfcasal
-sc4cfcasam
-sc4cfcla // Crazy Fruits Classic (Bellfruit)
-sc4cfclab //
-sc4cfclac //
-sc4cfclad //
-sc4cfclae //
-sc4cfclaf //
-sc4cfclb // Crazy Fruits Club (Bellfruit)
-sc4cfclba //
-sc4cfclbb //
-sc4cfdu // Crazy Fruits Down Under (Bellfruit)
-sc4cfdua //
-sc4cfdub //
-sc4cfduc //
-sc4cfgcl // Crazy Fruits Gold Club (Bellfruit)
-sc4cfgcla //
-sc4cfgclb //
-sc4cfgclc //
-sc4crzgn // Crazy Gang (Bellfruit)
-sc4crzgna //
-sc4crzgnb //
-sc4crzgnc //
-sc4crzgnd //
-sc4crzgne //
-sc4crzgnf //
-sc4crzgng //
-sc4crzgnh //
-sc4crzgni //
-sc4crzgnj //
-sc4crzgnk //
-sc4crzgnl //
-sc4crzgnm //
-sc4crzgnn //
-sc4crzgno //
-sc4crzgnp //
-sc4crzgnq //
-sc4crzgnr //
-sc4crzgns //
-sc4crzgnt //
-sc4crzgnu //
-sc4crzgnv //
-sc4crzgnw //
-sc4crzgnx //
-sc4crzgny //
-sc4crzgnz //
-sc4crzgn0 //
-sc4crzgn1 //
-sc4crzgn2 //
-sc4crzgn3 //
-sc4crzgn4 //
-sc4crzgn5 //
-sc4crzgn6 //
-sc4crzgn7 //
-sc4crzgn8 //
-sc4crzky // Crazy Keys (Bellfruit)
-sc4crzkya //
-sc4crzkyb //
-sc4crzkyc //
-sc4crzkyd //
-sc4crzkye //
-sc4crzkyf //
-sc4crzkyg //
-sc4crzkyh //
-sc4crzkyi //
-sc4crzkyj //
-sc4crzkyk //
-sc4crzkyl //
-sc4crzkym //
-sc4crzkyn //
-sc4crzkyo //
-sc4crzkyp //
-sc4crzkyq //
-sc4crzkyr //
-sc4crzkys //
-sc4crzkyt //
-sc4crzkyu //
-sc4crzkyv //
-sc4crzkyw //
-sc4crzwl // Crazy World (Mazooma)
-sc4crzwla //
-sc4crzwlb //
-sc4crzwlc //
-sc4crzwld //
-sc4crzwle //
-sc4crzwlf //
-sc4crzwlg //
-sc4cccsh // Criss Cross Cash (Mazooma)
-sc4cccsha //
-sc4cccshb //
-sc4cccshc //
-sc4cccshd //
-sc4cccshe //
-sc4ccc // Criss Cross Crazy (Bellfruit)
-sc4db // D & B (Mazooma)
-sc4daylt // Daylight Robbery (Bellfruit)
-sc4daylta //
-sc4dayltb //
-sc4dayltc //
-sc4dayltd //
-sc4daylte //
-sc4dayltf //
-sc4dayltg //
-sc4daylth //
-sc4daylti //
-sc4dayltj //
-sc4dayltk //
-sc4dayltl //
-sc4dayltm //
-sc4deepi // Deep Impact (Mazooma)
-sc4deepia //
-sc4deepib //
-sc4deepid //
-sc4derby // Demolition Derby (Bellfruit)
-sc4derbya //
-sc4derbyb //
-sc4derbyc //
-sc4derbyd //
-sc4derbye //
-sc4druby // Diamonds & Rubys (Bellfruit)
-sc4drubya //
-sc4drubyb //
-sc4drubyc //
-sc4drubyd //
-sc4disco // Disco Inferno (Mazooma)
-sc4discoa //
-sc4discob //
-sc4discoc //
-sc4discod //
-sc4dbldm // Double Diamond (Qps)
-sc4dblfr // Double Frenzy (Qps)
-sc4dblfra //
-sc4dblfrb //
-sc4dblfrc //
-sc4dblfrd //
-sc4dblfre //
-sc4darw // Dough & Arrow (Qps)
-sc4darwa //
-sc4darwb //
-sc4darwc //
-sc4duckq // Ducks Of Hazzard (Qps)
-sc4duckqa //
-sc4dyna // Dynamite (Bellfruit)
-sc4dynaa //
-sc4easy // Easy Streak (Bellfruit)
-sc4easya //
-sc4easyb //
-sc4easyc //
-sc4easyd //
-sc4easye //
-sc4eascs //
-sc4eascsa //
-sc4eascsb //
-sc4eascsc //
-sc4easyf //
-sc4eascsd //
-sc4eascse //
-sc4eascsf //
-sc4eascsg //
-sc4eascsh //
-sc4eascsi //
-sc4eascsj //
-sc4eascsk //
-sc4fastf // Fast 'n' Furious (Mazooma)
-sc4fastfa //
-sc4fastfb //
-sc4fastfc //
-sc4ffru // Fast Fruit (Qps)
-sc4ffrua //
-sc4ffrub //
-sc4ffruc //
-sc4ffrud //
-sc4ffrue //
-sc4fever // Fever (Bellfruit)
-sc4fevera //
-sc4feverb //
-sc4feverc //
-sc4feverd //
-sc4fevere //
-sc4feverf //
-sc4feverg //
-sc4feverh //
-sc4feverk //
-sc4fevdt // Fever (Dutch)
-sc4fevdta //
-sc4fevdtb //
-sc4fpitc // Fever Pitch (Bellfruit)
-sc4fpitca //
-sc4fpitcb //
-sc4fpitcc //
-sc4fpitcd //
-sc4fpitce //
-sc4fpitcf //
-sc4fpitcg //
-sc4fpitch //
-sc4fpitci //
-sc4fpitcj //
-sc4fpitck //
-sc4fevnx // Fever The Next (Bellfruit)
-sc4fevnxa //
-sc4fcc // Firecracker Club (Bellfruit)
-sc4fcca //
-sc4fccb //
-sc4fccc //
-sc4fire // Firepower (Mazooma)
-sc4firea //
-sc4fwp // Five Ways Pays (Mazooma)
-sc4fwpa //
-sc4fwpb //
-sc4fwpc //
-sc4fwpcs // Five Ways Pays Casino (Mazooma)
-sc4fwpcsa //
-sc4fwpcsb //
-sc4fbcrz // Football Crazy (Bellfruit)
-sc4fbcrza //
-sc4fbcrzb //
-sc4fbcrzc //
-sc4fbcrzd //
-sc4fbcrze //
-sc4fbcrzf //
-sc4fbcrzg //
-sc4fbcrzh //
-sc4fbcrzi //
-sc4fd7th // Frankie Dettori's 7th Heaven (Bellfruit)
-sc4fd7tha //
-sc4fd7thb //
-sc4fd7thc //
-sc4fd7thd //
-sc4fd7the //
-sc4fd7thf //
-sc4fd7thg //
-sc4fd7thh //
-sc4fd7thi //
-sc4frboo // Frooty Booty (Bellfruit)
-sc4frbooa //
-sc4frboob //
-sc4frbooc //
-sc4frenz // Fruit Frenzy (Bellfruit)
-sc4frenza //
-sc4frenzb //
-sc4frenzc //
-sc4frenzd //
-sc4frenze //
-sc4ftopi // Fruitopia (Qps)
-sc4ftopia //
-sc4ftopib //
-sc4ftopic //
-sc4ftopid //
-sc4ftopie //
-sc4ftopif //
-sc4ftopig //
-sc4ftopih //
-sc4ftopii //
-sc4frsu // Fruits 'n' Suits (Bellfruit)
-sc4frsua //
-sc4frsub //
-sc4frsuc //
-sc4frsud //
-sc4frsue //
-sc4frsuf //
-sc4frsug //
-sc4fullt // Full Throttle (Qps)
-sc4fullta //
-sc4fulltb //
-sc4fulltc //
-sc4fulltd //
-sc4fullte //
-sc4fulltf //
-sc4fulltg //
-sc4fullth //
-sc4fullti //
-sc4gamcs // Game Casino, The (Bellfruit)
-sc4game // Game, The (Bellfruit)
-sc4ziggy // Gettin Ziggy With It (Mazooma)
-sc4ziggya //
-sc4ziggyb //
-sc4ziggyc //
-sc4ziggyd //
-sc4ziggye //
-sc4ziggyf //
-sc4ziggyg //
-sc4gldcl // Gladiator Club (Mazooma)
-sc4gldcla //
-sc4gfev // Gold Fever (Mazooma)
-sc4gfeva //
-sc4gfevb //
-sc4ggcas // Golden Game Casino (Mazooma)
-sc4ggcasa //
-sc4ggcasb //
-sc4ggcasc //
-sc4gnc // Golden Game Club (Mazooma)
-sc4gnca //
-sc4gncb //
-sc4gncc //
-sc4gncd //
-sc4gnce //
-sc4ghost // Golden Ghost (Mazooma)
-sc4ghosta //
-sc4ghostb //
-sc4ghostc //
-sc4ghostd //
-sc4ghoste //
-sc4ghostf //
-sc4ghostg //
-sc4ghosth //
-sc4ggrid // Golden Grid (Qps)
-sc4ggrida //
-sc4ggridb //
-sc4ggridc //
-sc4ggridd //
-sc4ggride //
-sc4ggridf //
-sc4ggridg //
-sc4ggridh //
-sc4ggridi //
-sc4ggridj //
-sc4ggridk //
-sc4ggridl //
-sc4ggridm //
-sc4ggridn //
-sc4ggcl // Golden Grid Club (Qps)
-sc4ggcla //
-sc4ggclb //
-sc4ggclc //
-sc4ggcld //
-sc4goldo // Golden Oldie (Mazooma)
-sc4goldoa //
-sc4goldob //
-sc4goldoc //
-sc4gocas // Golden Oldie Casino (Mazooma)
-sc4gocasa //
-sc4gshot // Golden Shot (Qps)
-sc4gshota //
-sc4gshotb //
-sc4gshotc //
-sc4goldw // Golden Winner (Bellfruit)
-sc4goldwa //
-sc4goldwb //
-sc4goldwc //
-sc4goldwd //
-sc4goldwe //
-sc4goldwf //
-sc4goldwg //
-sc4gx // Golden X (Mazooma)
-sc4gxa //
-sc4gxb //
-sc4gxcasa // Golden X Casino (Mazooma)
-sc4gxcasb //
-sc4gxcasc //
-sc4gxcasd //
-sc4gxcase //
-sc4gxcasf //
-sc4gx3 // Golden X Triple (Mazooma)
-sc4gx3a //
-sc4gx3b //
-sc4gx3c //
-sc4gx3d //
-sc4gx3e //
-sc4gx3f //
-sc4gx3g //
-sc4goud // Goudkoorts (Bellfruit)
-sc4gag // Grab A Granny (Mazooma)
-sc4gaga //
-sc4gagb //
-sc4gagc //
-sc4gcb // Grand Blaster Cash (Mazooma)
-sc4gcba //
-sc4gcbb //
-sc4gcbc //
-sc4gcbd //
-sc4gcbe //
-sc4gcbf //
-sc4gcbg //
-sc4gcbh //
-sc4gcbi //
-sc4gcbj //
-sc4greed // Greedy Gonzalez (Bellfruit)
-sc4greeda //
-sc4hf // Happy Fruits (Bellfruit)
-sc4hfa //
-sc4hfb //
-sc4hfc //
-sc4hfd //
-sc4hfe //
-sc4hff //
-sc4hfg //
-sc4hfcl // Happy Fruits Club (Bellfruit)
-sc4hfcla //
-sc4heatw // Heatwave (Bellfruit)
-sc4helrd // Hellraiser (Bellfruit) [Dutch]
-sc4helrs // Hellraiser (Bellfruit)
-sc4hdd // Hickory Dickory Dosh (Mazooma)
-sc4hdda //
-sc4hddb //
-sc4hddc //
-sc4hddd //
-sc4hdde //
-sc4hddf //
-sc4himi // High 'n' Mighty (Mazooma)
-sc4himia //
-sc4himib //
-sc4himic //
-sc4himid //
-sc4himie //
-sc4himif //
-sc4himig //
-sc4himih //
-sc4himii //
-sc4hi5 // High 5 (Bellfruit)
-sc4hi5a //
-sc4hi5b //
-sc4hi5c //
-sc4hi5d //
-sc4hi5e //
-sc4hi5f //
-sc4hi5g //
-sc4sprng // Highly Sprung (Mazooma)
-sc4hilo // Hilowatha (Bellfruit)
-sc4hiloa //
-sc4hilob //
-sc4hiloc //
-sc4hilod //
-sc4hiloe //
-sc4hilof //
-sc4hilog //
-sc4hiloh //
-sc4hiloi //
-sc4hiloj //
-sc4hilok //
-sc4hitsh // Hit Shot (Bellfruit)
-sc4hitsha //
-sc4hitshb //
-sc4hitshc //
-sc4hitshd //
-sc4hitshe //
-sc4holyw // Hollywood (Bellfruit)
-sc4holywa //
-sc4holywb //
-sc4holywc //
-sc4hotpr // Hot Property (Bellfruit)
-sc4hotpra //
-sc4hotprb //
-sc4hotprc //
-sc4hotprd //
-sc4hotpre //
-sc4h6cl // Hot Six Club (Bellfruit)
-sc4h6cla //
-sc4h6clb //
-sc4h6clc //
-sc4hyde // Hyde & Streak (Mazooma)
-sc4hydea //
-sc4hydeb //
-sc4hydec //
-sc4hyper // Hyperactive (Mazooma)
-sc4hypera //
-sc4ijclb // Italian Job Club (Mazooma)
-sc4jack // Jack The Kipper (Mazooma)
-sc4jacka //
-sc4jackb //
-sc4jackc //
-sc4jackd //
-sc4jacke //
-sc4jackf //
-sc4jackg //
-sc4jjunc // Jackpot Junction (Bellfruit)
-sc4jjunca //
-sc4jjuncb //
-sc4jjuncc //
-sc4jjuncd //
-sc4jjunce //
-sc4jjuncf //
-sc4jjuncg //
-sc4jjunch //
-sc4jjunci //
-sc4jjucl // Jackpot Junction Club (Bellfruit)
-sc4jjucla //
-sc4jjuclb //
-sc4jjuclc //
-sc4jjucld //
-sc4jjucle //
-sc4jiggn // Jiggery Pockery (Nova)
-sc4jiggr // Jiggery Pokery (Mazooma)
-sc4jiggra //
-sc4jiggrb //
-sc4jiggrc //
-sc4jive // Jive Money (Mazooma)
-sc4jivea //
-sc4jiveb //
-sc4jivec //
-sc4jived //
-sc4jolly // Jolly Jousting (Qps)
-sc4jollya //
-sc4juicy // Juicy Jackpots Club (Bellfruit)
-sc4juicya //
-sc4juicyb //
-sc4juicyc //
-sc4juicyd //
-sc4juicye //
-sc4juicyf //
-sc4juicyg //
-sc4juicyi //
-sc4juicyj //
-sc4jjc // Jumping Jack Cash (Mazooma)
-sc4jjca //
-sc4jjcb //
-sc4jjcc //
-sc4jjcd //
-sc4jjce //
-sc4jjcf //
-sc4jjcg //
-sc4jjch //
-sc4jjci //
-sc4jjf // Jumping Jack Flash (Bellfruit)
-sc4jjfa //
-sc4jjfb //
-sc4jjfc //
-sc4jjfd //
-sc4jjfe //
-sc4jjff //
-sc4jjfg //
-sc4jjfh //
-sc4jjfi //
-sc4jjfj //
-sc4jjfk //
-sc4jjfl //
-sc4jjfm //
-sc4jbuck // Jungle Bucks (Bellfruit)
-sc4jbucka //
-sc4jbuckb //
-sc4jbuckc //
-sc4jbuckd //
-sc4kalei // Kaleidoscope (Qps)
-sc4kaleia //
-sc4kaleib //
-sc4kaleic //
-sc4kaleid //
-sc4kaleie //
-sc4kkong // King Kong Cash (Mazooma)
-sc4kkonga //
-sc4kkongb //
-sc4kkongc //
-sc4kkongd //
-sc4kkonge //
-sc4kkongf //
-sc4kkongg //
-sc4kkongh //
-sc4kkongi //
-sc4kkongj //
-sc4knok // Knockout (Mazooma)
-sc4knoka //
-sc4knokb //
-sc4knokc //
-sc4lasv // Las Vegas (Bellfruit)
-sc4lasva //
-sc4lir // Let It Roll (Bellfruit)
-sc4lira //
-sc4lirb //
-sc4lirc //
-sc4lird //
-sc4lire //
-sc4lirf //
-sc4lirg //
-sc4lirh //
-sc4liri //
-sc4lined // Line Dancer (Mazooma)
-sc4lineda //
-sc4linedb //
-sc4linedc //
-sc4linedd //
-sc4linede //
-sc4linedf //
-sc4linedg //
-sc4linedh //
-sc4linedi //
-sc4ldcas // Line Dancer Casino (Mazooma)
-sc4ldcasa //
-sc4ldcasb //
-sc4ldcasc //
-sc4ldcasd //
-sc4ldcase //
-sc4ldvcl // Little Devil Club (Mazooma)
-sc4lockb // Lock Buster (Bellfruit)
-sc4lockba //
-sc4lockbb //
-sc4lockbc //
-sc4lockbd //
-sc4lockbe //
-sc4lockbf //
-sc4lockbg //
-sc4lkbcl // Lock Buster Club (Bellfruit)
-sc4lkbcla //
-sc4lkbclb //
-sc4lkbclc //
-sc4lkbcld //
-sc4lkbcle //
-sc4lkbclf //
-sc4lkbclg //
-sc4lkbclh //
-sc4lkbcli //
-sc4lotrf // Lord Of The Rings - The Fellowship Of The Ring (Bellfruit)
-sc4lotrfa //
-sc4lotrfb //
-sc4lotrfc //
-sc4lotrfd //
-sc4lotrfe //
-sc4lotrff //
-sc4lotrfg //
-sc4lotrt // Lord Of The Rings Triology (Bellfruit)
-sc4lotrta //
-sc4lotr2 // Lord Of The Rings - The Two Towers (Bellfruit)
-sc4lotr2a //
-sc4lotr2b //
-sc4lotr2c //
-sc4lotr2d //
-sc4lotr2e //
-sc4lotr2f //
-sc4lotr2g //
-sc4lotr2h //
-sc4lotr2i //
-sc4lotr2j //
-sc4lotr2k //
-sc4lotr2l //
-sc4lotr2m //
-sc4ltr2c // Lord Of The Rings - The Two Towers Club (Bellfruit)
-sc4ltr2ca //
-sc4ltr2cb //
-sc4ltr2cc //
-sc4ltr2cd //
-sc4ltr2ce //
-sc4ltr2cf //
-sc4ltr2cg //
-sc4ltr2ch //
-sc4ltr2ci //
-sc4ltr2cj //
-sc4ltr2ck //
-sc4luck7 // Lucky 7s (Mazooma)
-sc4luck7a //
-sc4luck7b //
-sc4luck7c //
-sc4luck7d //
-sc4luckb // Lucky Balls (Bellfruit)
-sc4luckba //
-sc4luckbb //
-sc4luckbc //
-sc4luckbd //
-sc4luckbe //
-sc4luckbf //
-sc4luckbg //
-sc4luckbh //
-sc4luckbi //
-sc4luckbj //
-sc4luckbk //
-sc4luckbl //
-sc4luckbm //
-sc4luckbn //
-sc4luckbo //
-sc4luckbp //
-sc4luckbq //
-sc4luckbr //
-sc4luckbs //
-sc4luckbt //
-sc4luckbu //
-sc4luckbv //
-sc4luckbw //
-sc4luckbx //
-sc4luckby //
-sc4luckbz //
-sc4luckb0 //
-sc4luckb1 //
-sc4luckb2 //
-sc4luckb3 //
-sc4luckb4 //
-sc4magci // Magic Circle (Qps)
-sc4magcia //
-sc4magcib //
-sc4magcic //
-sc4magcid //
-sc4magcie //
-sc4magcif //
-sc4magcig //
-sc4magcih //
-sc4magcii //
-sc4magcij //
-sc4magcik //
-sc4magcil //
-sc4magcim //
-sc4magcin //
-sc4magcio //
-sc4magcip //
-sc4magciq //
-sc4magcir //
-sc4magcis //
-sc4magcit //
-sc4magciu //
-sc4magic // Magic Poundabout (Qps)
-sc4magica //
-sc4magicb //
-sc4magicc //
-sc4maxim // Maximus Cash (Mazooma)
-sc4maxima //
-sc4maximb //
-sc4maximc //
-sc4maximd //
-sc4maxime //
-sc4maximf //
-sc4maximg //
-sc4maxcc // Maximus Cash Club (Mazooma)
-sc4maxcca //
-sc4maxccb //
-sc4maxccc //
-sc4miljo // Miljonairs (Bellfruit)
-sc4milja // Miljonairs Arcade (Bellfruit)
-sc4milro //
-sc4mbags // Money Bags (Bellfruit)
-sc4mbagsa //
-sc4mbagsb //
-sc4mbagsc //
-sc4mgr // Money Go Round (Bellfruit)
-sc4mgra //
-sc4mgrb //
-sc4mgrc //
-sc4mgrd //
-sc4mgre //
-sc4mgrf //
-sc4mgrg //
-sc4mgrh //
-sc4mgri //
-sc4mgrj //
-sc4mgrk //
-sc4mgrl //
-sc4mgrm //
-sc4mspid // Money Spider (Bellfruit)
-sc4mspida //
-sc4mspidb //
-sc4mspidc //
-sc4mspidd //
-sc4mspide //
-sc4mspidf //
-sc4mspidg //
-sc4mspidh //
-sc4mspidi //
-sc4mspidj //
-sc4mspidk //
-sc4mspidl //
-sc4mspidm //
-sc4msclb // Money Spinner Club (Bellfruit)
-sc4msclba //
-sc4msclbb //
-sc4msclbc //
-sc4msclbd //
-sc4msclbe //
-sc4msclbf //
-sc4msclbg //
-sc4mtb // Money To Burn (Bellfruit)
-sc4mtba //
-sc4mtbb //
-sc4mtbc //
-sc4mtbd //
-sc4mtbe //
-sc4mtbf //
-sc4mtbg //
-sc4mtbh //
-sc4mtbi //
-sc4mtbj //
-sc4mtbcl // Money To Burn Club (Bellfruit)
-sc4mtbcla //
-sc4mtbclb //
-sc4mtbclc //
-sc4mtbcld //
-sc4mtbcle //
-sc4mtbclf //
-sc4mtbclg //
-sc4mtbclh //
-sc4mtbcli //
-sc4mtbclj //
-sc4mtbclk //
-sc4mtbcll //
-sc4mtbclm //
-sc4mtbcln //
-sc4mtbclo //
-sc4m2m // Money To Money (Mazooma)
-sc4m2ma //
-sc4monob // Monopoly (Bellfruit)
-sc4monoba //
-sc4monobb //
-sc4monobc //
-sc4monobd //
-sc4monobe //
-sc4monobf //
-sc4monobg //
-sc4monobh //
-sc4monobi //
-sc4monobj //
-sc4monobk //
-sc4monobl //
-sc4monobm //
-sc4monod // Monopoly (Mazooma) [German]
-sc4monoda //
-sc4monodb //
-sc4mclb // Monopoly Club (Mazooma)
-sc4mclba //
-sc4mclbb //
-sc4mclbc //
-sc4mclbd //
-sc4mclbe //
-sc4mont // Montego Pay (Qps)
-sc4monta //
-sc4montb //
-sc4montc //
-sc4montd //
-sc4monte //
-sc4montf //
-sc4montg //
-sc4month //
-sc4monti //
-sc4motor // Motorway Mania (Bellfruit)
-sc4motora //
-sc4motorb //
-sc4motorc //
-sc4motord //
-sc4motore //
-sc4motorf //
-sc4motorg //
-sc4motorh //
-sc4mou // Move On Up (Qps)
-sc4moua //
-sc4moub //
-sc4nmtj // Never Mind The Jackpots (Mazooma)
-sc4nmtja //
-sc4nmtjb //
-sc4nmtjc //
-sc4nmtjd //
-sc4nudit // Nudge It (Mazooma)
-sc4nudita //
-sc4nuditb //
-sc4oyf // Off Your Face (Bellfruit)
-sc4oyfa //
-sc4opses // Open Sesame (Bellfruit)
-sc4opsesa //
-sc4outlw // Outlaw (Bellfruit)
-sc4outlwa //
-sc4outlwb //
-sc4outlwc //
-sc4pacmn // Pac Man (Mazooma)
-sc4pacmna //
-sc4pacmnb //
-sc4pacqp //
-sc4pacqpa //
-sc4pacqpb //
-sc4paccs // Pac Man Casino (Mazooma)
-sc4paccsa //
-sc4paccsb //
-sc4paccsc //
-sc4paccsd //
-sc4paccse //
-sc4paccsf //
-sc4paccsg //
-sc4paccsh //
-sc4paccsi //
-sc4paccsj //
-sc4paccsk //
-sc4paccsl //
-sc4paccl // Pac Man Club (Mazooma)
-sc4paccla //
-sc4pacclb //
-sc4pacclc //
-sc4pacpl // Pac Man Plus (Mazooma)
-sc4pacpla //
-sc4pacplb //
-sc4pacplc //
-sc4pacpld //
-sc4pacple //
-sc4pacplf //
-sc4pacplg //
-sc4pacplh //
-sc4pmani // Pac Mania (Mazooma)
-sc4pmania //
-sc4party // Party Time (Nova)
-sc4paytm // Pay Time (Bellfruit)
-sc4pgold // Pharaoh's Gold (Bellfruit)
-sc4pgolda //
-sc4pgoldb //
-sc4pgoldc //
-sc4pgoldd //
-sc4pglcs //
-sc4pgoldf //
-sc4pglcsa //
-sc4pglcsb //
-sc4ppclb // Pink Panther Club (Qps)
-sc4ppclba //
-sc4ppclbb //
-sc4ppclbc //
-sc4pipe // Piping Hot (Mazooma)
-sc4pipea //
-sc4plumb // Plumb Crazy Club (Qps)
-sc4plumba //
-sc4plumbb //
-sc4plumbc //
-sc4plumbd //
-sc4plumbe //
-sc4polem // Pole Position (Mazooma)
-sc4polema //
-sc4polemb //
-sc4polemc //
-sc4polemd //
-sc4polen // Pole Position (Nova)
-sc4polic // Police Squid (Qps)
-sc4polica //
-sc4policb //
-sc4policc //
-sc4potsh // Pot Shot (Qps)
-sc4potsha //
-sc4pogbl // Pots Of Gold Club (Bellfruit)
-sc4pogbla //
-sc4pogblb //
-sc4pogblc //
-sc4pogbld //
-sc4pogble //
-sc4pwcrz // Power Crazy (Bellfruit)
-sc4pwcrza //
-sc4pwcrzb //
-sc4pwcrzc //
-sc4pwcrzd //
-sc4pwcrze //
-sc4pwcrzf //
-sc4pwcrzg //
-sc4pwcrzh //
-sc4pwcrzi //
-sc4pwrsg // Power Surge (Qps)
-sc4pwrsga //
-sc4pwrsgb //
-sc4pwrsgc //
-sc4pwrbq // Powerball (Qps)
-sc4pwrbqa //
-sc4pir // The Prize Is Right (Bellfruit)
-sc4pira //
-sc4pirb //
-sc4pirc //
-sc4pird //
-sc4pire //
-sc4pirf //
-sc4pirg //
-sc4pen1 // Public Enemy No1 (Bellfruit)
-sc4pen1a //
-sc4pen1b //
-sc4pen1c //
-sc4pen1d //
-sc4quart // Quaterback (Mazooma)
-sc4quarta //
-sc4quartb //
-sc4quartc //
-sc4quartd //
-sc4quarte //
-sc4quartf //
-sc4quartg //
-sc4quarth //
-sc4quarti //
-sc4quartj //
-sc4quartk //
-sc4quartl //
-sc4quartm //
-sc4qmodo // Quazzi Mo' Dough (Qps)
-sc4qmodoa //
-sc4qmodob //
-sc4qmodoc //
-sc4qmodod //
-sc4quidr // Quid Rock (Qps)
-sc4quidra //
-sc4quidrb //
-sc4quidrc //
-sc4redad // Red Alert (Bellfruit) [Dutch]
-sc4redada //
-sc4rdrag // Red Dragon (Qps)
-sc4rdraga //
-sc4rdragc //
-sc4rdragf //
-sc4rdrcl // Red Dragon Club (Qps)
-sc4rdrcla //
-sc4rdrclb //
-sc4ibiza // Red Hot Ibiza (Bellfruit)
-sc4ibizaa //
-sc4ibizab //
-sc4ibizac //
-sc4ibizad //
-sc4ibizae //
-sc4ibizaf //
-sc4ibizag //
-sc4ibizah //
-sc4ibizai //
-sc4rhxcl // Red Hot X Club (Mazooma)
-sc4rhxcla //
-sc4rhxclb //
-sc4rhxclc //
-sc4r2r // Reel To Reel (Mazooma)
-sc4r2ra //
-sc4r2rb //
-sc4r2rc //
-sc4relcz // Reely Crazy (Bellfruit)
-sc4relcza //
-sc4relczb //
-sc4relczc //
-sc4rotc // Return Of The Count (Mazooma)
-sc4rotca //
-sc4rotcb //
-sc4rotcc //
-sc4rotcd //
-sc4rvlnx // Revoluion The Next (Bellfruit)
-sc4rvl // Revolution (Bellfruit)
-sc4revo // Revolver (Mazooma)
-sc4revoa //
-sc4revob //
-sc4revoc //
-sc4revod //
-sc4revoe //
-sc4rich // Rich Geezer (Bellfruit)
-sc4richa //
-sc4richb //
-sc4richc //
-sc4richd //
-sc4riche //
-sc4richf //
-sc4richg //
-sc4richh //
-sc4richi //
-sc4richj //
-sc4richk //
-sc4richl //
-sc4rio // Rio Grande (Bellfruit)
-sc4rttt // Rise To The Top (Mazooma)
-sc4rttta //
-sc4rtttb //
-sc4rtttc //
-sc4rtttd //
-sc4rttte //
-sc4roksc // Rocket Science (Qps)
-sc4roksca //
-sc4rokscb //
-sc4rokscc //
-sc4rogds // Rogan Dosh (Qps)
-sc4rogdsa //
-sc4rogdsb //
-sc4rogdsc //
-sc4rogdsd //
-sc4rogdse //
-sc4rogdsf //
-sc4rogdsg //
-sc4rmo // Roll Me Over (Bellfruit)
-sc4rmoa //
-sc4rt // Rolling Thunder (Mazooma)
-sc4rta //
-sc4rtb //
-sc4rtc //
-sc4rtd //
-sc4rtclb // Rolling Thunder Club (Mazooma)
-sc4rtclba //
-sc4rollo // Rollover Jackpot (Mazooma)
-sc4rolloa //
-sc4rollob //
-sc4rolloc //
-sc4rollod //
-sc4rolloe //
-sc4rollof //
-sc4r66 // Route 66 (Mazooma)
-sc4rbank // Royle Banker (Bellfruit)
-sc4rbanka //
-sc4rbankb //
-sc4rbankc //
-sc4royle // Royle Family (Bellfruit)
-sc4roylea //
-sc4royleb //
-sc4roylec //
-sc4royled //
-sc4roylee //
-sc4roylef //
-sc4royleg //
-sc4royleh //
-sc4roylei //
-sc4roylej //
-sc4roylek //
-sc4roylel //
-sc4roylem //
-sc4srrmz // Shake Rattle Roll (Mazooma)
-sc4srrmza //
-sc4srrmzb //
-sc4srrmzc //
-sc4srrmzd //
-sc4srrmze //
-sc4srrmzf //
-sc4srrmzg //
-sc4srrmzh //
-sc4srrmzi //
-sc4srrmzj //
-sc4srrmzk //
-sc4srrmzl //
-sc4srrmzm //
-sc4srrca // Shake Rattle Roll Casino (Mazooma)
-sc4srrcaa //
-sc4srrcab //
-sc4srrcac //
-sc4srrcad //
-sc4srrcae //
-sc4sidsp // Side Splitter (Mazooma)
-sc4sidspa //
-sc4sidspb //
-sc4sidspc //
-sc4s2k // Sinbad 2000 (Nova)
-sc4sirpz // Sir Prize (Mazooma)
-sc4sirpza //
-sc4sirpzb //
-sc4stl // Sky's The Limit, The (Bellfruit)
-sc4stla //
-sc4stlb //
-sc4stlc //
-sc4stld //
-sc4stle //
-sc4stlf //
-sc4stlg //
-sc4smk7 // Smoking 7's (Bellfruit)
-sc4srr // Snake Rattle 'n' Roll (Bellfruit)
-sc4srra //
-sc4srrb //
-sc4srrc //
-sc4slc // Snakes & Ladders Club (Bellfruit)
-sc4slca //
-sc4slcb //
-sc4slcc //
-sc4slcd //
-sc4slce //
-sc4slcf //
-sc4slcg //
-sc4slch //
-sc4slci //
-sc4slcj //
-sc4slck //
-sc4slcl //
-sc4slcm //
-sc4slcn //
-sc4solgl // Solid Gold (Bellfruit)
-sc4solgla //
-sc4solglb //
-sc4solglc //
-sc4slih // Some Like It Hot (Mazooma)
-sc4sliha //
-sc4slihb //
-sc4slihc //
-sc4slihd //
-sc4slihe //
-sc4sace // Space Ace (Qps)
-sc4sacea //
-sc4sbust // Space Buster (Qps)
-sc4sbusta //
-sc4splgb // Splash & Grab (Mazooma)
-sc4splgba //
-sc4spred // Spread Your Bet (Mazooma)
-sc4stag // Stag Night (Bellfruit)
-sc4staga //
-sc4starp // Starprize (Bellfruit)
-sc4starpa //
-sc4starpb //
-sc4starpc //
-sc4starpd //
-sc4starpe //
-sc4starpf //
-sc4starpg //
-sc4starph //
-sc4starpi //
-sc4starpj //
-sc4starpk //
-sc4strbr // Stars 'n' Bars (Bellfruit)
-sc4strbra //
-sc4strbrb //
-sc4strbrc //
-sc4strbrd //
-sc4stirc // Stir Crazy (Mazooma)
-sc4stirca //
-sc4stircb //
-sc4stircc //
-sc4stircd //
-sc4stirce //
-sc4stircf //
-sc4stircg //
-sc4stirch //
-sc4stirci //
-sc4stircj //
-sc4strk // Streak, The (Mazooma)
-sc4strka //
-sc4strkb //
-sc4strkc //
-sc4strkd //
-sc4strke //
-sc4strkf //
-sc4strkg //
-sc4strkh //
-sc4strki //
-sc4strkj //
-sc4strkk //
-sc4sahed // Streaks Ahead (Qps)
-sc4saheda //
-sc4sahedb //
-sc4sf // Street Fighter (Mazooma)
-sc4sfa //
-sc4sfb //
-sc4sfc //
-sc4sfd //
-sc4strx // Strike X (Bellfruit)
-sc4strxa //
-sc4strxb //
-sc4strxc //
-sc4suscl // Suits U Sir Club (Qps)
-sc4suscla //
-sc4susclb //
-sc4susclc //
-sc4s6c // Super 6 Club (Bellfruit)
-sc4s6ca //
-sc4s6cb //
-sc4s6cc //
-sc4s6cd //
-sc4s6ce //
-sc4s6cf //
-sc4sdr // Super Diamonds & Rubies (Bellfruit)
-sc4sdra //
-sc4sdrb //
-sc4sdrc //
-sc4sstep // Super Step (Qps)
-sc4sstepa //
-sc4sstepb //
-sc4supst // Super Streax (Mazooma)
-sc4supsta //
-sc4taekw // Tae Kwon Dough (Qps)
-sc4taekwa //
-sc4taekwb //
-sc4taekwc //
-sc4taekwd //
-sc4taekwe //
-sc4taekwf //
-sc4taekwg //
-sc4taekwh //
-sc4taekwi //
-sc4taekwj //
-sc4taknt // Take Note (Bellfruit)
-sc4taknta //
-sc4takcl // Take Note Club (Bellfruit)
-sc4takcla //
-sc4takclb //
-sc4takclc //
-sc4takcld //
-sc4takcle //
-sc4takclf //
-sc4takclg //
-sc4takclh //
-sc4takcli //
-sc4takclj //
-sc4ttp // Take The Piste (Mazooma)
-sc4ttpa //
-sc4ttpb //
-sc4ttpc //
-sc4ttpd //
-sc4ttpe //
-sc4ttpf //
-sc4tempt // Temptation (Bellfruit)
-sc4tempta //
-sc4temptb //
-sc4temptc //
-sc4temptd //
-sc4tempte //
-sc4temptf //
-sc4temptg //
-sc4tetri // Tetris (Mazooma)
-sc4tetria //
-sc4tetrib //
-sc4tetric //
-sc4tetrid //
-sc4tetrie //
-sc4tetrif //
-sc4tetrig //
-sc4tetrih //
-sc4tetrii //
-sc4tetrij //
-sc4tetrik //
-sc4lions // Three Lions (Mazooma)
-sc4lionsa //
-sc4lionsb //
-sc4lionsc //
-sc4lionsd //
-sc4lionse //
-sc4lionsf //
-sc4tic2 // Tic Tac Two (Mazooma)
-sc4tic2a //
-sc4tic2b //
-sc4tic2c //
-sc4tic2d //
-sc4tic2e //
-sc4tic2f //
-sc4tic2g //
-sc4tic2h //
-sc4tic2i //
-sc4tic2j //
-sc4tic2k //
-sc4tic2l //
-sc4tic2m //
-sc4tic2n //
-sc4tic2o //
-sc4tbana // Top Banana (Bellfruit)
-sc4tbanaa //
-sc4tgear // Top Gear (Mazooma)
-sc4tgeara //
-sc4tgearb //
-sc4tgearc //
-sc4tgeard //
-sc4tgeare //
-sc4tgearf //
-sc4tgearg //
-sc4tload // Top Loader (Mazooma)
-sc4ticlb // Treasure Island Club (Bellfruit)
-sc4ticlba //
-sc4ticlbb //
-sc4ticlbc //
-sc4ticlbd //
-sc4ttomb // Treasure Tomb (Bellfruit)
-sc4ttomba //
-sc4ttombb //
-sc4ttombc //
-sc4tridn // Trident, The (Mazooma)
-sc4tridna //
-sc4tri7 // Triple 7's (Bellfruit)
-sc4tri7a //
-sc4tri7b //
-sc4tri7c //
-sc4tri7d //
-sc4tri7e //
-sc4tri7f //
-sc4tri7g //
-sc4tri7h //
-sc4tri7i //
-sc4tri7j //
-sc4tri7k //
-sc4tri7l //
-sc4tri7m //
-sc4tri7n //
-sc4tri7o //
-sc4tri7p //
-sc4tri7q //
-sc4tri7r //
-sc4tri7s //
-sc4tri7t //
-sc4tri7u //
-sc4tri7v //
-sc4tri7w //
-sc4trist // Triple Streak (Mazooma)
-sc4trista //
-sc4tristb //
-sc4tristc //
-sc4tristd //
-sc4triste //
-sc4tristf //
-sc4tristg //
-sc4tristh //
-sc4tristi //
-sc4tristj //
-sc4tristk //
-sc4tristl //
-sc4tristm //
-sc4tristn //
-sc4tristo //
-sc4tristp //
-sc4tristq //
-sc4tristr //
-sc4trists //
-sc4tristt //
-sc4tristu //
-sc4tristv //
-sc4tristw //
-sc4tristx //
-sc4tristy //
-sc4tub // Tubular Bells (Bellfruit)
-sc4tuba //
-sc4tubb //
-sc4tubc //
-sc4tfclb // Tutti Frutti Club (Bellfruit)
-sc4tfclba //
-sc4twilt // Twilight (Bellfruit)
-sc4ufg // Up For Grabs (Mazooma)
-sc4ufga //
-sc4ufi // Up For It (Bellfruit)
-sc4ufia //
-sc4ufib //
-sc4ufic //
-sc4ufid //
-sc4ufie //
-sc4valnv // Valhalla (Nova)
-sc4valqp // Valhalla (Qps)
-sc4vrgcl // Very Rich Geezer Club (Bellfruit)
-sc4vrgcla //
-sc4vrgclb //
-sc4vrgclc //
-sc4vrgcld //
-sc4vrgcle //
-sc4vrgclf //
-sc4vrgclg //
-sc4vrgclh //
-sc4vrgcli //
-sc4vmnv // Viva Mexico (Nova)
-sc4vmnva //
-sc4vmclb // Viva Mexico Club (Bellfruit)
-sc4vmclba //
-sc4vmclbb //
-sc4wadzl // Wadzilla (Mazooma)
-sc4wadzla //
-sc4wernr // Werner (Nova)
-sc4wrnlt // Werner Light (Nova)
-sc4waw // Wet & Wild (Mazooma)
-sc4wawa //
-sc4wawb //
-sc4wawc //
-sc4wawd //
-sc4wawe //
-sc4wawf //
-sc4wdw // Who Dares Wins (Bellfruit)
-sc4wdwa //
-sc4wdwb //
-sc4wdwc //
-sc4wdwd //
-sc4wdwe //
-sc4wdwf //
-sc4wdwg //
-sc4wdwh //
-sc4wdwi //
-sc4wdwj //
-sc4leg // Who Wants To Be A Legionnaire (Bellfruit)
-sc4lega //
-sc4legb //
-sc4legc //
-sc4legd //
-sc4lege //
-sc4legf //
-sc4legg //
-sc4legh //
-sc4legcb // Who Wants To Be A Legionnaire Club (Bellfruit)
-sc4legcba //
-sc4legcbb //
-sc4legcbc //
-sc4legcbd //
-sc4legcbe //
-sc4wldbn // Wild Bunch (Bellfruit)
-sc4wldbna //
-sc4wldbnb //
-sc4wldbnc //
-sc4wldbnd //
-sc4wldbne //
-sc4wldbnf //
-sc4wldbng //
-sc4wldbnh //
-sc4wldbni //
-sc4wldbnj //
-sc4wldbnk //
-sc4wldbnl //
-sc4wldbnm //
-sc4wldbnn //
-sc4wldbno //
-sc4wldbnp //
-sc4wldbnq //
-sc4wthng // Wild Thing (Bellfruit)
-sc4wthnga //
-sc4wthngb //
-sc4wthngc //
-sc4wthnm // Wild Thing (Mazooma)
-sc4wthnma //
-sc4wthnmb //
-sc4wthnmc //
-sc4wthnmd //
-sc4wthnme //
-sc4wthnmf //
-sc4wtc // Wild Thing Casino (Mazooma)
-sc4wtca //
-sc4wtcb //
-sc4wtcc //
-sc4wtcd //
-sc4wtce //
-sc4wtcf //
-sc4wspin // Win Spinner (Qps)
-sc4wspinb //
-sc4wspinc //
-sc4wspind //
-sc4wwys // Win When Your Spinning (Bellfruit)
-sc4wwysa //
-sc4winxp // Win X-plosion (Bellfruit)
-sc4winsp // Winning Spin (Qps)
-sc4winspa //
-sc4winspb //
-sc4winspc //
-sc4winspd //
-sc4winspe //
-sc4winspf //
-sc4winspg //
-sc4winsph //
-sc4winspi //
-sc4winspj //
-sc4winspk //
-sc4winspl //
-sc4winspm //
-sc4winspn //
-sc4winspo //
-sc4winspp //
-sc4winspq //
-sc4winspr //
-sc4winsps //
-sc4winspt //
-sc4winspu //
-sc4winspv //
-sc4winspw //
-sc4winspx //
-sc4winspy //
-sc4winspz //
-sc4winsp0 //
-sc4wondw // Wonder Wheel (Bellfruit)
-sc4wondwa //
-sc4xmark // X Marks The Spot (Bellfruit)
-sc4xmarka //
-sc4xcash // Xtra Cash (Bellfruit)
-sc4s16 // Section 16 (Mazooma)
-sc4s16a //
-sc4bgold // Black Gold (Nova)
-sc4bgolda //
-sc4blokq // Blockbuster (Qps)
-sc4blokqa //
-sc4blokqb //
-sc4blokqc //
-sc4blokqd //
-sc4blokqe //
-sc4clbtm // Club Temptation (Bellfruit)
-sc4clbtma //
-sc4clbtmb //
-sc4clbtmc //
-sc4clbtmd //
-sc4clbtme //
-sc4dcrls // Double Crazy Reels (Mazooma)
-sc4dcrlsa //
-sc4dcrlsb //
-sc4dcrlsc //
-sc4dcrlsd //
-sc4dcrlse //
-sc4dcrlsf //
-sc4dcrlsg //
-sc4dcrlsh //
-sc4dcrlsi //
-sc4dcrlsj //
-sc4dcrlsk //
-sc4gcclb // Grand Casino Club (Bellfruit)
-sc4gcclba //
-sc4gcclbb //
-sc4gcclbc //
-sc4gcclbd //
-sc4gcclbe //
-sc4gcclbf //
-sc4gcclbg //
-sc4gcclbh //
-sc4gcclbi //
-sc4gcclbj //
-sc4gcclbk //
-sc4gcclbl //
-sc4gcclbm //
-sc4gcclbn //
-sc4gcclbo //
-sc4gcclbp //
-sc4gcclbq //
-sc4onup // On The Up (Mazooma)
-sc4onupa //
-sc4pglcl // Pharaoh's Gold Club (Bellfruit)
-sc4pglcla //
-sc4pglclb //
-sc4pglclc //
-sc4pglcld //
-sc4pglcle //
-sc4pglclf //
-sc4pglclg //
-sc4pglclh //
-sc4po8 // Pieces Of Eight (Qps)
-sc4po8a //
-sc4po8b //
-sc4po8c //
-sc4po8d //
-sc4po8e //
-sc4po8f //
-sc4po8g //
-sc4po8h //
-sc4po8i //
-sc4po8j //
-sc4po8k //
-sc4po8l //
-sc4po8m //
-sc4po8n //
-sc4wag // Win-A-Gain (Nova)
-
-/* Mixed SC4 / SC5 / AD5 */
-
-sc4adjb // Ant & Dec's Jiggy Bank (Bellfruit)
-sc4adjba //
-sc4adjbb //
-sc4adjbc //
-sc4adjbd //
-sc4adjbe //
-sc4adjbf //
-sc4adjbg //
-sc4adjbh //
-sc4adjbi //
-sc4adwta // Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit)
-sc4adwtaa //
-sc4a40 // Around The Board In 40 Days (Mazooma)
-sc4a40a //
-sc4a40b //
-sc4a40c //
-sc4bantm // Bantam Of The Opera (Mazooma)
-sc4bantma //
-sc4bantmb //
-sc4bantmc //
-sc4bar7 // Bar 7's (Bellfruit)
-sc4bar7a //
-sc4bar7b //
-sc4bar7c //
-sc4bar7d //
-sc4bar7e //
-sc4batl // Battleships & Cruisers (Bellfruit)
-sc4batla //
-sc4bob // Bobby Dazzler (Mazooma)
-sc4boba //
-sc4bobb //
-sc4bobc //
-sc4bobd //
-sc4bobe //
-sc4bobf //
-sc4bobg //
-sc4bobh //
-sc4bobi //
-sc4bull // Bullseye (Bellfruit)
-sc4bulla //
-sc4bulcs //
-sc4bullb //
-sc4bulcsa //
-sc4bullc //
-sc4butch // Butch Cashidy & The Sundance Quid (Bellfruit)
-sc4butcha //
-sc4butchb //
-sc4butchc //
-sc4butchd //
-sc4butche //
-sc4butchf //
-sc4butchg //
-sc4cabin // Cabin Fever (Mazooma)
-sc4cabina //
-sc4cabinb //
-sc4cabinc //
-sc4cabind //
-sc4cabine //
-sc4cabinf //
-sc4cabing //
-sc4cabinh //
-sc4cabini //
-sc4cabinj //
-sc4cabink //
-sc4cabinl //
-sc4cabinm //
-sc4cari // Caribbean Cash (Qps)
-sc4caria //
-sc4carib //
-sc4caric //
-sc4carid //
-sc4carie //
-sc4cariq //
-sc4cariqa //
-sc4cariqb //
-sc4cariqc //
-sc4cariqd //
-sc4cariqe //
-sc4cariqf //
-sc4cariqg //
-sc4cblas // Cash Blast (Bellfruit)
-sc4cblasa //
-sc4casxt // Casino Xtravaganza (Mazooma)
-sc4casxta //
-sc4casxtb //
-sc4casxtc //
-sc4casxtd //
-sc4casxte //
-sc4chavi // Chav It (Bellfruit)
-sc4chavia //
-sc4chavib //
-sc4chavic //
-sc4chavid //
-sc4chavie //
-sc4chavif //
-sc4chavig //
-sc4chavy // Chavy Chase (Mazooma)
-sc4chavya //
-sc4chavyb //
-sc4chavyc //
-sc4chavyd //
-sc4chavye //
-sc4chavyf //
-sc4chavyg //
-sc4clue // Cluedo (Mazooma)
-sc4cluea //
-sc4clueb //
-sc4cluec //
-sc4clued //
-sc4cluee //
-sc4cluef //
-sc4clueg //
-sc4cmani // Colour Mania (Bellfruit)
-sc4cmania //
-sc4cj // Cool Jewels (Bellfruit)
-sc4cja //
-sc4cjb //
-sc4cjc //
-sc4cjd //
-sc4ctl // Cop The Lot (Bellfruit)
-sc4ctla //
-sc4ctlb //
-sc4ctlc //
-sc4ctld //
-sc4ctle //
-sc4crsc // Cops 'n' Robbers Safe Cracker (Bellfruit)
-sc4crsca //
-sc4crscb //
-sc4crscc //
-sc4crscd //
-sc4crsce //
-sc4crscf //
-sc4crscg //
-sc4coro // Coronation Street (Mazooma)
-sc4coroa //
-sc4corotb //
-sc4coroc //
-sc4corod //
-sc4corotba //
-sc4corof //
-sc4corog //
-sc4coroh //
-sc4coroi //
-sc4coroj //
-sc4corok //
-sc4corol //
-sc4corom //
-sc4coron //
-sc4count // Countdown (Bellfruit)
-sc4counta //
-sc4czfr // Crazy Fruits (Bellfruit)
-sc4czfra //
-sc4czfrb //
-sc4czfrc //
-sc4czfrd //
-sc4czfre //
-sc4czfrf //
-sc4crnjw // Crown Jewels (Bellfruit)
-sc4crnjwa //
-sc4dnd // Deal Or No Deal (Bellfruit)
-sc4dnda //
-sc4dndb //
-sc4dndc //
-sc4dndd //
-sc4dnde //
-sc4dndf //
-sc4dndg //
-sc4dndh //
-sc4dndi //
-sc4dndj //
-sc4dndk //
-sc4dndl //
-sc4dndm //
-sc4dndn //
-sc4dndo //
-sc4dndcs // Deal Or No Deal Classic (Bellfruit)
-sc4dndcsa //
-sc4dndcsb //
-sc4dndcsc //
-sc4dndcsd //
-sc4dndcse //
-sc4dndbb // Deal Or No Deal Break The Bank (Bellfruit)
-sc4dndbba //
-sc4dndbbb //
-sc4dndbbc //
-sc4dndbbd //
-sc4dndbbe //
-sc4dndbbf //
-sc4dndbbg //
-sc4dndbbh //
-sc4dndbbi //
-sc4dndcl // Deal Or No Deal Club (Bellfruit)
-sc4dndcla //
-sc4dndclb //
-sc4dndclc //
-sc4dndcld //
-sc4dndcle //
-sc4dndclf //
-sc4dndclg //
-sc4dnddd // Deal Or No Deal Double Deal Or No Deal (Bellfruit)
-sc4dnddda //
-sc4dndddb //
-sc4dndddc //
-sc4dndddd //
-sc4dnddde //
-sc4dndddf //
-sc4dndddg //
-sc4dndhf // Deal Or No Deal Hall Of Fame (Bellfruit)
-sc4dndhfa //
-sc4dndhfb //
-sc4dndhfc //
-sc4dndhfd //
-sc4dndhfe //
-sc4dndhff //
-sc4dndhfg //
-sc4dndhfh //
-sc4dndhfi //
-sc4dndhfj //
-sc4dndhfk //
-sc4dndhfl //
-sc4dndys // Deal Or No Deal It's Your Show (Bellfruit)
-sc4dndysa //
-sc4dndysb //
-sc4dndysc //
-sc4dndlp // Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit)
-sc4dndlpa //
-sc4dndlpb //
-sc4dndlpc //
-sc4dndlpd //
-sc4dndlpe //
-sc4dndra // Deal Or No Deal Red Alert (Bellfruit)
-sc4dndraa //
-sc4dndrab //
-sc4dndrac //
-sc4dndrad //
-sc4dndrae //
-sc4dndbd // Deal Or No Deal The Big Deal (Bellfruit)
-sc4dndbda //
-sc4dndbdb //
-sc4dndbdc //
-sc4dndbdd //
-sc4dndbde //
-sc4dndbr // Deal Or No Deal The Big Reds (Bellfruit)
-sc4dndbra //
-sc4dndbrb //
-sc4dndbrc //
-sc4dndbrd //
-sc4dndbre //
-sc4dndbrf //
-sc4dndbrg //
-sc4dndcc // Deal Or No Deal The Crazy Chair (Bellfruit)
-sc4dndcca //
-sc4dndccb //
-sc4dndccc //
-sc4dndccd //
-sc4dndcce //
-sc4dndccf //
-sc4dnddw // Deal Or No Deal The Deal Wheel (Bellfruit)
-sc4dnddwa //
-sc4dnddwb //
-sc4dnddwc //
-sc4dnddwd //
-sc4dnddwe //
-sc4dnddwf //
-sc4dnddwg //
-sc4dnddf // Deal Or No Deal The Dream Factory (Bellfruit)
-sc4dnddfa //
-sc4dnddfb //
-sc4dnddfc //
-sc4dnddfd //
-sc4dnddfe //
-sc4dndpg // Deal Or No Deal The Perfect Game (Bellfruit)
-sc4dndpga //
-sc4dndpgb //
-sc4dndpgc //
-sc4dndpgd //
-sc4dndpge //
-sc4dndtp // Deal Or No Deal The Power (Bellfruit)
-sc4dndtpa //
-sc4dndtpb //
-sc4dndtpc //
-sc4dndtpd //
-sc4dndtpe //
-sc4dndtpf //
-sc4dndtpg //
-sc4dndtph //
-sc4dndtpi //
-sc4dndtpj //
-sc4dndtpk //
-sc4dndtpl //
-sc4dndtpm //
-sc4dndww // Deal Or No Deal The Walk Of Wealth (Bellfruit)
-sc4dndwwa //
-sc4dndwwb //
-sc4dndwwc //
-sc4dndwwd //
-sc4dndwwe //
-sc4dndcw // Deal Or No Deal The Walk Of Wealth Classic (Bellfruit)
-sc4dndcwa //
-sc4dndcwb //
-sc4dndcwc //
-sc4dndtr // Deal Or No Deal Think Red (Bellfruit)
-sc4dndtra //
-sc4dndwb // Deal Or No Deal What's In Your Box (Bellfruit)
-sc4dndwba //
-sc4dndwbb //
-sc4dndwbc //
-sc4dndwbd //
-sc4dndwbe //
-sc4dndwbf //
-sc4dndwbg //
-sc4dmine // Diamond Mine (Bellfruit)
-sc4dminea //
-sc4dmineb //
-sc4dminec //
-sc4dmined //
-sc4dminee //
-sc4ddosh // Doctor Dosh (Bellfruit)
-sc4ddosha //
-sc4ddoshb //
-sc4ddoshc //
-sc4ddoshd //
-sc4ddoshe //
-sc4ddoshf //
-sc4ddoshg //
-sc4ddoshh //
-sc4ddoshi //
-sc4ddoshj //
-sc4ddoshk //
-sc4ddoshl //
-sc4ddoshm //
-sc4ddoshn //
-sc4ddosho //
-sc4dhh // Dough Ho Ho (Bellfruit)
-sc4dhha //
-sc4dhhb //
-sc4dhhc //
-sc4dhhd //
-sc4dhhe //
-sc4dough // Dough Selecta (Bellfruit)
-sc4dougha //
-sc4ducks // Ducks Of Hazzard (Mazooma)
-sc4ducksa //
-sc4ducksb //
-sc4ducksc //
-sc4emmer // Emmerdale (Mazooma)
-sc4emmera //
-sc4emmerb //
-sc4emmerc //
-sc4evol // Evolution (Qps)
-sc4evola //
-sc4evolb //
-sc4evolc //
-sc4evold //
-sc4evole //
-sc4evolf //
-sc4evolg //
-sc4fguy // Family Guy (Bellfruit)
-sc4fguya //
-sc4fguyb //
-sc4fguyc //
-sc4fguyd //
-sc4fguye //
-sc4fbspn // Fat Boy Spin (Bellfruit)
-sc4fbspna //
-sc4fbspnb //
-sc4fbspnc //
-sc4fmj // Full Metal Jackpot (Mazooma)
-sc4fmja //
-sc4fmjb //
-sc4fmjc //
-sc4glad // Gladiator (Mazooma)
-sc4glada //
-sc4gladb //
-sc4gladc //
-sc4gladd //
-sc4glade //
-sc4gladf //
-sc4gladg //
-sc4gd // Gold Digger (Bellfruit)
-sc4gda //
-sc4gdb //
-sc4gdc //
-sc4gdd //
-sc4gde //
-sc4gdf //
-sc4gdg //
-sc4gdmz // Gold Digger (Mazooma)
-sc4gdmza //
-sc4gdclb // Gold Digger Club (Bellfruit)
-sc4gdclba //
-sc4gdclbb //
-sc4gdclbc //
-sc4gdclbd //
-sc4gdclbe //
-sc4gdclbf //
-sc4gdclbg //
-sc4gdclbh //
-sc4gdclbi //
-sc4gdclbj //
-sc4gdclbk //
-sc4gbcas // Golden Balls (Bellfruit)
-sc4gbcasa //
-sc4gbcasb //
-sc4gbcasc //
-sc4gball //
-sc4gballa //
-sc4gballb //
-sc4gballc //
-sc4ggtb // Golden Game (Mazooma) Top Box
-sc4ggtba //
-sc4ggtbb //
-sc4ggame // Golden Game
-sc4ggamea //
-sc4ggameb //
-sc4ggamec //
-sc4ggamed //
-sc4ggamef //
-sc4ggameg //
-sc4ggamei //
-sc4ggamej //
-sc4ggamek //
-sc4ggamel //
-sc4ggamem //
-sc4ggamen //
-sc4ggamep //
-sc4ggameq //
-sc4ggamer //
-sc4ggames //
-sc4ggamet //
-sc4ggameu //
-sc4ggamev //
-sc4ggamew //
-sc4ggamex //
-sc4ggamey //
-sc4ggamez //
-sc4ggame0 //
-sc4ggame1 //
-sc4ggame2 //
-sc4ggame3 //
-sc4ggame4 //
-sc4ggame5 //
-sc4ggame6 //
-sc4ggame7 //
-sc4ggame8 //
-sc4ggame9 //
-sc4ggameaa //
-sc4ggameab //
-sc4ggameac //
-sc4ggamead //
-sc4ggameae //
-sc4ggdlx // Golden Game Deluxe (Mazooma)
-sc4ggdlxa //
-sc4ggdlxb //
-sc4ggdlxc //
-sc4ggdlxd //
-sc4ggdlxe //
-sc4ggdlxf //
-sc4ggdlxg //
-sc4gggtb // Grand Golden Game (Mazooma)
-sc4gggtba //
-sc4ggg //
-sc4gggb //
-sc4gggc //
-sc4gggd //
-sc4ggge //
-sc4gggf //
-sc4gggg //
-sc4gggh //
-sc4gggi //
-sc4gggk //
-sc4gggl //
-sc4gggm //
-sc4gggn //
-sc4gggo //
-sc4gggp //
-sc4gggq //
-sc4gggr //
-sc4gggs //
-sc4gunp // Gunpowder Slot (Bellfruit)
-sc4gunpa //
-sc4gunpb //
-sc4gunpc //
-sc4gunpd //
-sc4gunpe //
-sc4gunpf //
-sc4gunpg //
-sc4hapnt // Happy Notes (Bellfruit)
-sc4hapnta //
-sc4hntcs //
-sc4hntcsa //
-sc4hntcsb //
-sc4hntcsc //
-sc4hapntb //
-sc4hapntc //
-sc4hapntd //
-sc4hapnte //
-sc4hntcsd //
-sc4hntcse //
-sc4hntcsf //
-sc4hntcsg //
-sc4hntcsh //
-sc4hntcsi //
-sc4hntcsj //
-sc4hntcsk //
-sc4hntcsl //
-sc4hntcsm //
-sc4hntcsn //
-sc4hntcso //
-sc4hntcsp //
-sc4hntcsq //
-sc4hntcsr //
-sc4hntcss //
-sc4helld // Hells Bells (BFG / Eurocoin) (Dutch)
-sc4hellb // Hells Bells (Bellfruit)
-sc4hellbb //
-sc4hellbc //
-sc4hellbd //
-sc4hellbe //
-sc4hellbf //
-sc4hellbg //
-sc4hellbh //
-sc4hellbi //
-sc4hellbj //
-sc4hill // Hill Billionaire (Bellfruit)
-sc4hilla //
-sc4hiss // Hissing Quid (Qps)
-sc4hissa //
-sc4hissb //
-sc4hissc //
-sc4hissd //
-sc4hisse //
-sc4hissf //
-sc4hissg //
-sc4hotdg // Hot Dog (Bellfruit)
-sc4hotdga //
-sc4hotdgb //
-sc4hotdgc //
-sc4hotrd // Hot Rod (Bellfruit)
-sc4hotrda //
-sc4hotsh // Hot Shots (Bellfruit)
-sc4hotsha //
-sc4hotwd // Hot Wad (Bellfruit)
-sc4hotwda //
-sc4hotwdb //
-sc4hotwdc //
-sc4hotwdd //
-sc4hotwde //
-sc4celeb // I'm A Celebrity (Bellfruit)
-sc4celeba //
-sc4celebb //
-sc4celebc //
-sc4celebd //
-sc4inspn // Inner Spin (Mazooma)
-sc4inspna //
-sc4ijob // Italian Job (Mazooma)
-sc4ijoba //
-sc4ijobb //
-sc4ijobc //
-sc4ijobd //
-sc4ijobe //
-sc4ijobf //
-sc4ijobg //
-sc4ijobh //
-sc4ijobi //
-sc4ijobj //
-sc4ijobk //
-sc4ijobl //
-sc4ijobm //
-sc4jjok // Jackpot Jokers (Bellfruit)
-sc4jjoka //
-sc4ldvl // Little Devil (Mazooma)
-sc4ldvla //
-sc4ldvlb //
-sc4ldvlc //
-sc4lotrr // Lord Of The Rings - Return Of The King (Bellfruit)
-sc4lotrra //
-sc4lotrrb //
-sc4lotrrc //
-sc4lotrrd //
-sc4lotrre //
-sc4manic // Manic Miner (Bellfruit)
-sc4manica //
-sc4manicb //
-sc4manicc //
-sc4manicd //
-sc4manice //
-sc4manicf //
-sc4manicg //
-sc4mmm // Mental Money Monsters (Mazooma)
-sc4mmma //
-sc4mmmb //
-sc4mmmc //
-sc4mmmd //
-sc4mmme //
-sc4mmmf //
-sc4mmmg //
-sc4mmad // Money Madness (Mazooma)
-sc4mmada //
-sc4mmadb //
-sc4mmadc //
-sc4mmadd //
-sc4mmade //
-sc4mmadf //
-sc4mmadg //
-sc4monsp // Money Spinner (Bellfruit)
-sc4monop // Monopoly (Mazooma)
-sc4monopa //
-sc4mono5 //
-sc4mono5a //
-sc4monoa //
-sc4monoaa //
-sc4monoan //
-sc4monoal //
-sc4monot //
-sc4monota //
-sc4monotb //
-sc4monotc //
-sc4monoab //
-sc4monoac //
-sc4monog //
-sc4monoga //
-sc4mondx //
-sc4monoad //
-sc4monoae //
-sc4monoaf //
-sc4monoag //
-sc4monoao //
-sc4monoap //
-sc4monoaq //
-sc4monoam //
-sc4monoah //
-sc4monoai //
-sc4monoaj //
-sc4monoak //
-sc4mondxa //
-sc4mondxd //
-sc4mondxe //
-sc4mondxb //
-sc4mondxf //
-sc4mondxc //
-sc4mondxg //
-sc4mcas // Monopoly Casino (Mazooma)
-sc4mcask //
-sc4mcasm //
-sc4mcasn //
-sc4mcaso //
-sc4mcasp //
-sc4mcasq //
-sc4mcasr //
-sc4mcass //
-sc4mcast //
-sc4mcasu //
-sc4mcasv //
-sc4mcasw //
-sc4mcasx //
-sc4mcasy //
-sc4mcasz //
-sc4mcas0 //
-sc4mcas1 //
-sc4mcas2 //
-sc4mcas3 //
-sc4mcas4 //
-sc4cmon //
-sc4cmona //
-sc4cmonb //
-sc4cmonc //
-sc4cmond //
-sc4cmone //
-sc4cmonf //
-sc4cmong //
-sc4cmonh //
-sc4cmoni //
-sc4mdm // Monopoly Double Money (Bellfruit)
-sc4mdma //
-sc4mhn // Monopoly Here & Now (Mazooma)
-sc4mhna //
-sc4mhp // Monopoly Hot Property (Bellfruit)
-sc4mhpa //
-sc4mhpb //
-sc4mhpc //
-sc4mhpd //
-sc4mhpe //
-sc4mhpf //
-sc4mhpg //
-sc4mhph //
-sc4mhpi //
-sc4mhpj //
-sc4mhpk //
-sc4mhpl //
-sc4mhpm //
-sc4mhpn //
-sc4mhpo //
-sc4mmb // Monopoly Money Bags (Bellfruit)
-sc4mmba //
-sc4mrh // Monopoly Red Hot (Mazooma)
-sc4mrha //
-sc4mrhb //
-sc4mrhc //
-sc4mrhd //
-sc4mrhe //
-sc4mr2r // Monopoly Road To Riches (Mazooma)
-sc4mr2ra //
-sc4mr2rb //
-sc4mr2rc //
-sc4mr2rd //
-sc4mr2re //
-sc4nmare // A Nightmare On Elm Street (Bellfruit)
-sc4nmarea //
-sc4nmareb //
-sc4nmarec //
-sc4potp // Pick Of The Pack (Bellfruit)
-sc4potpa //
-sc4pp // Pink Panther (Mazooma)
-sc4ppa //
-sc4ppb //
-sc4ppc //
-sc4ppd //
-sc4ppcr // Pink Panther Clouseau's Revenge (Mazooma)
-sc4ppcra //
-sc4ppcrb //
-sc4ppcrtb //
-sc4ppcrd //
-sc4ppcre //
-sc4ppcrf //
-sc4ppcrg //
-sc4ppcrh //
-sc4ppcri //
-sc4ppcrj //
-sc4ppctc // Pink Panther Crack The Code (Bellfruit)
-sc4ppctca //
-sc4ppctcb //
-sc4ppctcc //
-sc4ppctcd //
-sc4ppctce //
-sc4ppctcf //
-sc4ppctcg //
-sc4ppdym // Pink Panther Double Your Money (Mazooma)
-sc4ppdymb //
-sc4ppdymc //
-sc4ppdymd //
-sc4ppdymf //
-sc4ppdymg //
-sc4ppdymh //
-sc4ppdymi //
-sc4ppdymtb //
-sc4ppdymtba //
-sc4ppsag // Pink Panther Strikes Again (Mazooma)
-sc4ppsaga //
-sc4ppsagb //
-sc4ppsagc //
-sc4ppsagd //
-sc4ppsage //
-sc4ppsagf //
-sc4ppsagg //
-sc4ppsagh //
-sc4ppsagi //
-sc4pony // Pony Express (Bellfruit)
-sc4ponya //
-sc4ponyb //
-sc4ponyc //
-sc4ponyd //
-sc4ponye //
-sc4popey // Popeye (Mazooma)
-sc4popeya //
-sc4popeyb //
-sc4popeyc //
-sc4popeyd //
-sc4popeye //
-sc4pog // Pots Of Gold (Bellfruit)
-sc4bulcsb //
-sc4poga //
-sc4pogb //
-sc4bulcsc //
-sc4pogc //
-sc4pogd //
-sc4poge //
-sc4pogf //
-sc4pogg //
-sc4pogh //
-sc4pogi //
-sc4pwrpl // Power Play (Mazooma)
-sc4pwrpla //
-sc4pwrplb //
-sc4pwrplc //
-sc4pwrbl // Powerball (Bellfruit)
-sc4pwrbla //
-sc4quidv // Quid Vicious (Mazooma)
-sc4quidva //
-sc4quidvb //
-sc4quidvc //
-sc4rhx // Red Hot X (Mazooma)
-sc4rhxa //
-sc4rhxb //
-sc4rhxc //
-sc4rhxd //
-sc4rhxe //
-sc4rhxf //
-sc4rhxg //
-sc4rhxh //
-sc4rhxi //
-sc4rhxj //
-sc4rhxk //
-sc4rhxl //
-sc4rhxm //
-sc4rhxn //
-sc4rhxo //
-sc4rhxp //
-sc4rhxq //
-sc4rhxr //
-sc4rhxs //
-sc4rhxt //
-sc4rhxu //
-sc4rhxv //
-sc4rhxw //
-sc4rhxcs // Red Hot X Casino (Mazooma)
-sc4rhxcsa //
-sc4rhxcsb //
-sc4rhxcsc //
-sc4rhxcsd //
-sc4rhxcse //
-sc4redsq // Red Square (Mazooma)
-sc4redsqa //
-sc4redsqb //
-sc4redsqc //
-sc4rosts // Ronnie O'Sullivan's Tournament Snooker (Bellfruit)
-sc4rostsa //
-sc4rostsb //
-sc4rostsc //
-sc4rostsd //
-sc4rostse //
-sc4rostsf //
-sc4rostsg //
-sc4rovrt // Rovers Return (Mazooma)
-sc4rovrta //
-sc4rovrtb //
-sc4rovrtc //
-sc4rovrtd //
-sc4rovrte //
-sc4showt // Showtime (Bellfruit)
-sc4showta //
-sc4showtb //
-sc4showtc //
-sc4showtd //
-sc4showte //
-sc4showtf //
-sc4slad // Snakes & Ladders (Bellfruit)
-sc4slada //
-sc4sladb //
-sc4sladc //
-sc4sladd //
-sc4slade //
-sc4sladf //
-sc4sladg //
-sc4sladh //
-sc4spice // Spice It Up (Bellfruit)
-sc4spicea //
-sc4spiceb //
-sc4spicec //
-sc4swywm // Spin When Your Winning (Mazooma)
-sc4swywma //
-sc4swywmb //
-sc4swywmc //
-sc4swywmd //
-sc4swywme //
-sc4swywmf //
-sc4swywmg //
-sc4sumit // Summit Up (Mazooma)
-sc4sumita //
-sc4sumitb //
-sc4sumitc //
-sc4sus // Suits U Sir (Qps)
-sc4susc //
-sc4susf //
-sc4susg //
-sc4sush //
-sc4susi //
-sc4susj //
-sc4susk //
-sc4sslam // Super Slam (Bellfruit)
-sc4sslama //
-sc4swbak // Switch Back (Mazooma)
-sc4swbaka //
-sc4swbakb //
-sc4swbakc //
-sc4ttpie // Take The Piece (Bellfruit)
-sc4ttpiea //
-sc4ttpieb //
-sc4ttpiec //
-sc4ttpied //
-sc4ttpiee //
-sc4ttpief //
-sc4ttpieg //
-sc4typ // Take Your Pick (Bellfruit)
-sc4typa //
-sc4typb //
-sc4typc //
-sc4tbox // Top Box (Mazooma)
-sc4tpsht // Top Of The Shots (Mazooma)
-sc4tpshta //
-sc4tpshtb //
-sc4tpshtc //
-sc4tpshtd //
-sc4tpshte //
-sc4tpshtf //
-sc4tpshtg //
-sc4trail // Trailblazer (Mazooma)
-sc4traila //
-sc4trailb //
-sc4trailc //
-sc4vivam // Viva Mexico (Bellfruit)
-sc4vivama //
-sc4vivcs //
-sc4vivamb //
-sc4vivamc //
-sc4vivcsa //
-sc4vivcsb //
-sc4vivcsc //
-sc4vivcsd //
-sc4vivcse //
-sc4vivcsf //
-sc4vivcsg //
-sc4wldjk // Wild Jackpots (Mazooma)
-sc4wldjka //
-sc4wldjkb //
-sc4wldjkc //
-sc4wldjkd //
-sc4wldjke //
-sc4wldjkf //
-sc4wldjkg //
-sc4adsnt // Ant & Dec's Saturday Night Takeaway (Bellfruit)
-sc4adsnta //
-sc4bpb // Bully's Prize Board (Bellfruit)
-sc4bpba //
-sc4bpbb //
-sc4bpbc //
-sc4bpbd //
-sc4bpbe //
-sc4bsp // Bully's Star Prize (Bellfruit)
-sc4bspa //
-sc4bspb //
-sc4bspc //
-sc4bspd //
-sc4bspe //
-sc4bspf //
-sc4bspg //
-sc4chain // Chain Reaction (Bellfruit)
-sc4chaina //
-sc4chainb //
-sc4chainc //
-sc4clown // Clown Around (Bellfruit)
-sc4clowna //
-sc4clownb //
-sc4clownc //
-sc4clownd //
-sc4clowne //
-sc4clownf //
-sc4clowng //
-sc4copsr // Cops 'n' Robbers (Bellfruit)
-sc4copsra //
-sc4copsrb //
-sc4copsrc //
-sc4copsrd //
-sc4copsre //
-sc4copsrf //
-sc4copsrg //
-sc4copsrh //
-sc4copsri //
-sc4dndbe // Deal Or No Deal Beat The Banker (Bellfruit)
-sc4dndbeb //
-sc4dndbec //
-sc4dndbed //
-sc4dndbee //
-sc4dndbef //
-sc4dndbeg //
-sc4dndbeh //
-sc4dndbei //
-sc4dndbej //
-sc4dndbek //
-sc4dndbel //
-sc4dndbem //
-sc4dndben //
-sc4dndbc // Deal Or No Deal Box Clever (Bellfruit)
-sc4dndbca //
-sc4bwow // Wheel of Wealth (Bellfruit)
-sc4bwowa //
-sc4mowow // Monopoly Wheel Of Wealth (Mazooma)
-sc4mowowa //
-sc4mowowb //
-sc4mowowc //
-sc4mwwtb //
-sc4mwwtba //
-sc4mwwtbb //
-sc4mwwtbc //
-sc4mwwtbd //
-sc4nunsm // Nuns 'n' Roses (Mazooma)
-sc4nunsmb //
-sc4nunsmc //
-sc4nunsmd //
-sc4nunsme //
-sc4nunsmf //
-sc4nunsmg //
-sc4nunsmh //
-sc4nunsmi //
-sc4nunsmj //
-
-/* Scorpion 4 + Adder 4 */
-
-ad4skill // Skill Dice (BFM)
-ad4film //
-ad4filma //
-
-// Scorpion 5
-
-sc5plays // 28 Plays Later (Qps)
-sc5playsa //
-sc5adga // Ant & Dec's Grab The Ads (Bellfruit)
-sc5adgaa //
-sc5adgab //
-sc5adgac //
-sc5adgad //
-sc5adgae //
-sc5adgtc // Ant & Dec's Grab The Cash (Bellfruit)
-sc5adgtca //
-sc5bjob // Bank Job (Bellfruit)
-sc5bjoba //
-sc5bjobb //
-sc5bjobc //
-sc5bjobd //
-sc5bjobe //
-sc5bjobf //
-sc5bjobg //
-sc5bjobh //
-sc5bjobi //
-sc5bkngx // Bar King X (Mazooma)
-sc5bkngxa //
-sc5bucc // Buccaneers (Bellfruit)
-sc5bucca //
-sc5buccb //
-sc5buccc //
-sc5buccd //
-sc5bucce //
-sc5bpfpb // Bullseye Pounds For Points (Bellfruit)
-sc5bpfpba //
-sc5btiab // Bullseye Three In A Bed (Bellfruit)
-sc5btrip // Bullseye Triple (Bellfruit)
-sc5btripa //
-sc5btripb //
-sc5btripc //
-sc5bunny // Bunny Money (Mazooma)
-sc5bunnya //
-sc5cbrun // Cannonball Run (Bellfruit)
-sc5cbruna //
-sc5cfact // Cash Factor (Bellfruit)
-sc5cfacta //
-sc5ctit // Cash Of The Titans (Bellfruit)
-sc5ctita //
-sc5craid // Cash Raider (Mazooma)
-sc5craida //
-sc5cvega // Cash Vegas (Bellfruit)
-sc5cvegaa //
-sc5chopc // Chop 'n' Change (Mazooma)
-sc5chopca //
-sc5cbar7 // Classic Bar 7 (Mazooma)
-sc5cbar7a //
-sc5clu70 // Cluedo 70 (Qps)
-sc5clu70a //
-sc5clcas // Cluedo Casino (Mazooma)
-sc5clcasa //
-sc5clnot // Cluedo Notorious (Bellfruit)
-sc5clnota //
-sc5clnotb //
-sc5clnotc //
-sc5clnotd //
-sc5clnote //
-sc5clnotf //
-sc5clnotg //
-sc5clus // Cluedo The Usual Suspects (Mazooma)
-sc5clusa //
-sc5clusb //
-sc5clusc //
-sc5clusd //
-sc5cluse //
-sc5clusf //
-sc5clusg //
-sc5clush //
-sc5clusi //
-sc5clusj //
-sc5clusk //
-sc5colmo // Colour Of Money (Bellfruit)
-sc5colmoa //
-sc5colmob //
-sc5colmoc //
-sc5newcm // Colour Of Money New, The (Bellfruit)
-sc5newcma //
-sc5newcmb //
-sc5newcmc //
-sc5newcmd //
-sc5newcme //
-sc5crotr // Cops 'n' Robbers On The Run (Bellfruit)
-sc5crotra //
-sc5crsgc // Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit)
-sc5crsgca //
-sc5crsgcb //
-sc5crsgcc //
-sc5crsgr // Cops 'n' Robbers Smash 'n' Grab (Bellfruit)
-sc5crsgra //
-sc5crsgrb //
-sc5crsgrc //
-sc5crsgrd //
-sc5crsgre //
-sc5crsgrf //
-sc5crsgrg //
-sc5corst // Coronation Street (Bellfruit)
-sc5corsta //
-sc5corstb //
-sc5corstc //
-sc5cfnc // Crazy Fruit & Nutcase (Bellfruit)
-sc5cfnca //
-sc5cfcp // Crazy Fruits Community Party (Bellfruit)
-sc5cfcpa //
-sc5cfcpb //
-sc5cfcpc //
-sc5cfcpd //
-sc5cfcpe //
-sc5cfcpf //
-sc5cfcpg //
-sc5cfcph //
-sc5cfcpi //
-sc5cfcpj //
-sc5cfcpk //
-sc5cfcpl //
-sc5cfcpm //
-sc5cfcpn //
-sc5cfcpo //
-sc5cfcpp //
-sc5cfcpq //
-sc5cfcpr //
-sc5cfcps //
-sc5cfcpt //
-sc5cfcpu //
-sc5cfcpv //
-sc5cfcpw //
-sc5cfpt // Crazy Fruits Party Time (Bellfruit)
-sc5cfpta //
-sc5cfptb //
-sc5cfptc //
-sc5cfptd //
-sc5cfptj //
-sc5cfpte //
-sc5cfptf //
-sc5cfptk //
-sc5cfptn //
-sc5cfpti //
-sc5cfpto //
-sc5cfptg //
-sc5cfptl //
-sc5cfpth //
-sc5cfptm //
-sc5cfptp //
-sc5cfptq //
-sc5cfptr //
-sc5cfpts //
-sc5cknig // Crazy Knights (Bellfruit)
-sc5ckniga //
-sc5cknigb //
-sc5cknigc //
-sc5cpays // Crazy Pays (Bellfruit)
-sc5cpaysa //
-sc5dndbo // Deal Or No Deal Banker's Bonus (Bellfruit)
-sc5dndboa //
-sc5dndbob //
-sc5dndboc //
-sc5dndbod //
-sc5dndboe //
-sc5dndbof //
-sc5dndbog //
-sc5dndboh //
-sc5dndboi //
-sc5dndboj //
-sc5dndbok //
-sc5dndbol //
-sc5dndbom //
-sc5dndbl // Deal Or No Deal Beat The Banker Club (Bellfruit)
-sc5dndbla //
-sc5dndblb //
-sc5dndblc //
-sc5dndbld //
-sc5dndble //
-sc5dndblf //
-sc5dndblg //
-sc5dndblh //
-sc5dndbli //
-sc5dndblj //
-sc5dndblk //
-sc5dndbll //
-sc5dndblm //
-sc5dndbln //
-sc5dndblo //
-sc5dndblp //
-sc5dndblq //
-sc5dndblr //
-sc5dndbls //
-sc5dndbq // Deal Or No Deal Beat The Banker (Qps)
-sc5dndbqa //
-sc5dndbqb //
-sc5dndbqc //
-sc5dndbqd //
-sc5dndbqe //
-sc5dndcr // Deal Or No Deal Cops 'n' Robbers (Bellfruit)
-sc5dndcra //
-sc5dndcrb //
-sc5dndcrc //
-sc5dndcrd //
-sc5dndcre //
-sc5dndde // Deal Or No Deal Desert Island Deal (Bellfruit)
-sc5dnddea //
-sc5dnddeb //
-sc5dnddec //
-sc5dndded //
-sc5dnddee //
-sc5dnddef //
-sc5dnddeg //
-sc5dnddi // Deal Or No Deal Diamond (Bellfruit)
-sc5dnddia //
-sc5dnddib //
-sc5dnddic //
-sc5dnddt // Deal Or No Deal Double Take (Bellfruit)
-sc5dnddta //
-sc5dnddtb //
-sc5dnddtc //
-sc5dnddtd //
-sc5dnddte //
-sc5dnddtf //
-sc5dnddo // Deal Or No Deal Dream Offer (Bellfruit)
-sc5dnddoa //
-sc5dnddob //
-sc5dnddoc //
-sc5dndfl // Deal Or No Deal Feeling Lucky (Bellfruit)
-sc5dndfla //
-sc5dndflb //
-sc5dndflc //
-sc5dndfld //
-sc5dndfle //
-sc5dndgo // Deal Or No Deal Game On (Bellfruit)
-sc5dndgoa //
-sc5dndgl // Deal Or No Deal Gold (Bellfruit)
-sc5dndgla //
-sc5dndglb //
-sc5dndglc //
-sc5dndgld //
-sc5dndgle //
-sc5dndglf //
-sc5dndglg //
-sc5dndglh //
-sc5dndgli //
-sc5dndglj //
-sc5dndglk //
-sc5dndld // Deal Or No Deal Live The Dream (Bellfruit)
-sc5dndlda //
-sc5dndldb //
-sc5dndldc //
-sc5dndmb // Deal Or No Deal Make Or Break (Bellfruit)
-sc5dndmba //
-sc5dndmbb //
-sc5dndmbc //
-sc5dndmbd //
-sc5dndmbe //
-sc5dndmbf //
-sc5dndmbg //
-sc5dndmbh //
-sc5dndmbi //
-sc5dndmbj //
-sc5dndmbk //
-sc5dndmd // Deal Or No Deal Mega Deal Or No Deal (Bellfruit)
-sc5dndmda //
-sc5dndmdb //
-sc5dndmdc //
-sc5dndmdd //
-sc5dndmde //
-sc5dndmdf //
-sc5dndmdg //
-sc5dndmdh //
-sc5dndmdi //
-sc5dndmdj //
-sc5dndmdk //
-sc5dndpa // Deal Or No Deal Play It Again (Bellfruit)
-sc5dndpaa //
-sc5dndpab //
-sc5dndpac //
-sc5ddptg // Deal Or No Deal Play The Game (Bellfruit)
-sc5ddptga //
-sc5ddptgb //
-sc5ddptgc //
-sc5ddply // Deal Or No Deal Player's Choice (Bellfruit)
-sc5ddplya //
-sc5dndrr // Deal Or No Deal Road To Riches (Bellfruit)
-sc5dndrra //
-sc5dndrrb //
-sc5dndrrc //
-sc5dndrrd //
-sc5dndrre //
-sc5dndsi // Deal Or No Deal Simply Deal Or No Deal (Bellfruit)
-sc5dndsia //
-sc5dndsib //
-sc5dndsic //
-sc5dndsid //
-sc5dndrt // Deal Or No Deal The Banker Rings Twice (Bellfruit)
-sc5dndrta //
-sc5dndrtb //
-sc5dndrtc //
-sc5dndrtd //
-sc5dndrte //
-sc5dndpd // Deal Or No Deal The Perfect Deal (Bellfruit)
-sc5dndpda //
-sc5dndpdb //
-sc5dndpdc //
-sc5dndpdd //
-sc5dndpde //
-sc5dndpc // Deal Or No Deal The Players Choice (Bellfruit)
-sc5dndpca //
-sc5dndtb // Deal Or No Deal Think Big (Bellfruit)
-sc5dndtba //
-sc5devil // Devil Of A Deal (Mazooma)
-sc5devila //
-sc5devilb //
-sc5devilc //
-sc5dracp // Drac Pack (Bellfruit)
-sc5dracpa //
-sc5fgbh // Family Guy Booze Hound (Bellfruit)
-sc5fgbha //
-sc5fgbhb //
-sc5fgbhc //
-sc5fggp // Family Guy Griffin Plumbing (Bellfruit)
-sc5fggpa //
-sc5fggpb //
-sc5fggpc //
-sc5fggpd //
-sc5fggpe //
-sc5fggpf //
-sc5fggpg //
-sc5fast // Fast Cash (Qps)
-sc5fnclb // Fight Night Club (Bellfruit)
-sc5fnclba //
-sc5fnclbb //
-sc5fnclbc //
-sc5fnclbd //
-sc5fnclbe //
-sc5fdice // Fire 'n' Dice (Bellfruit)
-sc5fdicea //
-sc5fires // Firestarter (Bellfruit)
-sc5firesa //
-sc5firesb //
-sc5firesc //
-sc5ftcas // Flash The Cash (Mazooma)
-sc5ftcasa //
-sc5floop // Fruit Loops (Mazooma)
-sc5floopa //
-sc5grq // Get Rich Quick (Bellfruit)
-sc5grqa //
-sc5grqb //
-sc5grqc //
-sc5gldfv // Gold Fever (Bellfruit)
-sc5gldfva //
-sc5gldfvb //
-sc5gldfvc //
-sc5gldfvd //
-sc5gldfve //
-sc5gldfvf //
-sc5gldfvg //
-sc5gldgo // Golden Goals (Bellfruit)
-sc5gldgoa //
-sc5gldsp // Golden Spinner (Mazooma)
-sc5gldspa //
-sc5gldspb //
-sc5gldspc //
-sc5gldspd //
-sc5gldspe //
-sc5gldspf //
-sc5gldspg //
-sc5gldsph //
-sc5gldspi //
-sc5gldspj //
-sc5gldspk //
-sc5gldspl //
-sc5gldspm //
-sc5gldspn //
-sc5gldspo //
-sc5gldspp //
-sc5gmclb // Grand Master Cash (Bellfruit)
-sc5gmclba //
-sc5gmclbb //
-sc5gmclbc //
-sc5hirol // High Roller (Mazooma)
-sc5hirola //
-sc5hirolb //
-sc5hirolc //
-sc5hirold //
-sc5hirole //
-sc5hulk // Hulk, The (Bellfruit)
-sc5hulka //
-sc5hulkb //
-sc5hulkc //
-sc5hulkd //
-sc5hulke //
-sc5hulkf //
-sc5hulkg //
-sc5hulkh //
-sc5hulki //
-sc5iab // It's A Bullseye (Mazooma)
-sc5iaba //
-sc5ijbdo // Italian Job - Blow The Doors Off (Qps)
-sc5ijbdoa //
-sc5ijbdob //
-sc5ijbdoc //
-sc5kingx // King X (Mazooma)
-sc5kingxa //
-sc5kingxb //
-sc5kingxc //
-sc5kingxd //
-sc5kingxe //
-sc5monky // Monkey Business (Mazooma)
-sc5monkya //
-sc5mobob // Monopoly Boom Or Bust (Bellfruit)
-sc5moboba //
-sc5mobobb //
-sc5mobobc //
-sc5mobobd //
-sc5mobobe //
-sc5mobobf //
-sc5mobobg //
-sc5mobobh //
-sc5mobobi //
-sc5mogta // Monopoly Go To Auction (Bellfruit)
-sc5mogtaa //
-sc5mogtab //
-sc5mogtac //
-sc5mogtad //
-sc5mogtae //
-sc5momil // Monopoly Millionaire (Bellfruit)
-sc5momila //
-sc5momilb //
-sc5momilc //
-sc5momild //
-sc5momile //
-sc5mombc // Monopoly Money Bags Club (Mazooma)
-sc5mombca //
-sc5mombcb //
-sc5mombcc //
-sc5moms // Monopoly Money Spinner (Qps)
-sc5momsa //
-sc5momsb //
-sc5momsc //
-sc5momsd //
-sc5momse //
-sc5mopl // Monopoly Property Ladder (Bellfruit)
-sc5mopla //
-sc5moplb //
-sc5moplc //
-sc5mopld //
-sc5mople //
-sc5moplf //
-sc5moplg //
-sc5mor2r // Monopoly Road To Riches (Qps)
-sc5mor2ra //
-sc5monwa // Monopoly Win Again (Qps)
-sc5monwaa //
-sc5cmcob // Monte Carlo Or Bust Club (Qps)
-sc5cmcoba //
-sc5cmcobb //
-sc5cmcobc //
-sc5nunsb // Nuns 'n' Roses (Bellfruit)
-sc5rainb // Over The Rainbow (Bellfruit)
-sc5rainba //
-sc5rainbb //
-sc5rainbc //
-sc5rainbd //
-sc5rainbe //
-sc5parot // Parrots Of The Caribbean (Bellfruit)
-sc5parota //
-sc5parotb //
-sc5parotc //
-sc5parotd //
-sc5parote //
-sc5parotf //
-sc5parotg //
-sc5pilep // Pile On The Pounds (Qps)
-sc5pilepa //
-sc5pilepb //
-sc5pilepc //
-sc5potsm // Pots Of Luck (Mazooma)
-sc5potsma //
-sc5cpen1 // Public Enemy No1 Club (Bellfruit)
-sc5cpen1a //
-sc5cpen1b //
-sc5cpen1c //
-sc5qual // Quality Streak (Bellfruit)
-sc5quala //
-sc5qualb //
-sc5qualc //
-sc5quald //
-sc5quale //
-sc5qualf //
-sc5qualg //
-sc5qualh //
-sc5quali //
-sc5qualj //
-sc5qualk //
-sc5quall //
-sc5qualm //
-sc5rssh // Reel Spin Shady (Mazooma)
-sc5rssha //
-sc5hog // Road Hog (Bellfruit)
-sc5hoga //
-sc5rhclb // Road Hog Club (Bellfruit)
-sc5rhclba //
-sc5rhclbb //
-sc5rhclbc //
-sc5rhclbd //
-sc5rhclbe //
-sc5rhclbf //
-sc5rhclbg //
-sc5sharp // Sharp Shooter (Voodoo)
-sc5sharpa //
-sc5sfts // Shoot For The Stars (Bellfruit)
-sc5sftsa //
-sc5sftsb //
-sc5sftsc //
-sc5srrqp // Snake Rattle & Roll (Qps)
-sc5srrqpa //
-sc5sitwi // Spin It To Win It (Bellfruit)
-sc5sitwia //
-sc5spnrn // Spinning Around (Mazooma)
-sc5spnrna //
-sc5srace // Streak Racer (Bellfruit)
-sc5sracea //
-sc5sleut // Super Sleuth (Mazooma)
-sc5sleuta //
-sc5tsmp // Trick Shot Multi Player (Bellfruit)
-sc5tsmpa //
-sc5pompa // Up Pompay (Bellfruit)
-sc5pompaa //
-sc5pompab //
-sc5vamp // Vampire Payer (Qps)
-sc5vampa //
-sc5viper // Viper Active (Bellfruit)
-sc5vipera //
-sc5viz // Viz (Qps)
-sc5viza //
-sc5vizb //
-sc5vizc //
-sc5wacky // Wacky Racers (Bellfruit)
-sc5wackya //
-sc5wackyb //
-sc5wackyc //
-sc5wotw // War Of The Wads (Mazooma)
-sc5wotwa //
-sc5wild // Wild Reels (Mazooma)
-sc5wilda //
-sc5wca // Win Can Alley (Qps)
-sc5wcaa //
-sc5wcab //
-sc5wcac //
-sc5wcad //
-sc5wcae //
-sc5wcaf //
-sc5wcag //
-sc5wcah //
-sc5wcai //
-sc5wcaj //
-sc5wcak //
-sc5wcal //
-sc5wcam //
-sc5wcan //
-sc5wcao //
-sc5wok // Wok n' Roll (Bellfruit)
-sc5woka //
-sc5rhr // Red Hot Reels (Qps)
-sc5rhra //
-sc5rhrb //
-sc5rhrc //
-sc5rhrd //
-sc5rhre //
-sc5srrcl // Snake Rattle 'n' Roll Club (Bellfruit)
-sc5srrcla //
-sc5srrclb //
-sc5srrclc //
-sc5pircl // The Prize Is Right Club (Bellfruit)
-sc5pircla //
-sc5pirclb //
-sc5pirclc //
-sc5pircld //
-sc5pircle //
-sc5pirclf //
-sc5pirclg //
-sc5mrrcl // Monopoly Road To Riches Club (Mazooma)
-sc5mrrcla //
-sc5mrrclb //
-sc5mrrclc //
-sc5crcpt // Cops 'n' Robbers Community Party (Bellfruit)
-sc5crcpta //
-sc5crcptb //
-sc5adjb // Ant & Dec's Jiggy Bank (Bellfruit)
-sc5adjba //
-sc5adjbb //
-sc5adjbc //
-sc5adjbd //
-sc5adjbe //
-sc5adjbf //
-sc5adjbg //
-sc5adjbh //
-sc5adjbi //
-sc5adjbj //
-sc5adjbk //
-sc5adjbl //
-sc5adjbm //
-sc5adjbn //
-sc5adjbo //
-sc5adjbp //
-sc5adjbq //
-sc5adjbr //
-sc5adjbs //
-sc5adjbt //
-sc5adwta // Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit)
-sc5adwtaa //
-sc5a40 // Around The Board In 40 Days (Mazooma)
-sc5a40a //
-sc5bantm // Bantam Of The Opera (Mazooma)
-sc5bantma //
-sc5bar7 // Bar 7's (Bellfruit)
-sc5bar7a //
-sc5bar7b //
-sc5bar7c //
-sc5bar7d //
-sc5bar7e //
-sc5bar7f //
-sc5bar7g //
-sc5batl // Battleships & Cruisers (Bellfruit)
-sc5batla //
-sc5bob // Bobby Dazzler (Mazooma)
-sc5boba //
-sc5bobb //
-sc5bobc //
-sc5bull // Bullseye (Bellfruit)
-sc5bulla //
-sc5bullb //
-sc5bullc //
-sc5sbull //
-sc5sbulla //
-sc5bull5 //
-sc5bull5a //
-sc5bull5b //
-sc5bull5c //
-sc5butch // Butch Cashidy & The Sundance Quid (Bellfruit)
-sc5butcha //
-sc5butchb //
-sc5butchc //
-sc5butchd //
-sc5butche //
-sc5cabin // Cabin Fever (Mazooma)
-sc5cabina //
-sc5cabinb //
-sc5cabinc //
-sc5cari // Caribbean Cash (Qps)
-sc5caria //
-sc5carib //
-sc5caric //
-sc5carid //
-sc5carie //
-sc5carif //
-sc5carig //
-sc5cblas // Cash Blast (Bellfruit)
-sc5cblasa //
-sc5casxt // Casino Xtravaganza (Mazooma)
-sc5casxta //
-sc5chavi // Chav It (Bellfruit)
-sc5chavia //
-sc5chavib //
-sc5chavic //
-sc5chavid //
-sc5chavie //
-sc5chavy // Chavy Chase (Mazooma)
-sc5chavya //
-sc5chavyb //
-sc5chavyc //
-sc5clue // Cluedo (Mazooma)
-sc5cluea //
-sc5clueb //
-sc5cluec //
-sc5cmani // Colour Mania (Bellfruit)
-sc5cmania //
-sc5cmanib //
-sc5cmanic //
-sc5cj // Cool Jewels (Bellfruit)
-sc5cja //
-sc5cjb //
-sc5cjc //
-sc5cjd //
-sc5cje //
-sc5ctl // Cop The Lot (Bellfruit)
-sc5ctla //
-sc5ctlb //
-sc5ctlc //
-sc5crsc // Cops 'n' Robbers Safe Cracker (Bellfruit)
-sc5crsca //
-sc5crscb //
-sc5crscc //
-sc5crscd //
-sc5crsce //
-sc5crscf //
-sc5crscg //
-sc5crsch //
-sc5crsci //
-sc5crscj //
-sc5crsck //
-sc5crscl //
-sc5crscm //
-sc5crscn //
-sc5crsco //
-sc5crscp //
-sc5crscq //
-sc5crscr //
-sc5crscs //
-sc5crsct //
-sc5crscu //
-sc5coro // Coronation Street (Mazooma)
-sc5coroa //
-sc5corob //
-sc5coroc //
-sc5corod //
-sc5coroe //
-sc5corof //
-sc5corog //
-sc5coroh //
-sc5coroi //
-sc5coroj //
-sc5corok //
-sc5corol //
-sc5corom //
-sc5coron //
-sc5coroo //
-sc5corop //
-sc5coroq //
-sc5coror //
-sc5coros //
-sc5corot //
-sc5corou //
-sc5corov //
-sc5corow //
-sc5corox //
-sc5coroy //
-sc5coroz //
-sc5coro0 //
-sc5coro1 //
-sc5count // Countdown (Bellfruit)
-sc5counta //
-sc5czfr // Crazy Fruits (Bellfruit)
-sc5frcrza //
-sc5frcrz //
-sc5crnjw // Crown Jewels (Bellfruit)
-sc5crnjwa //
-sc5crnjwb //
-sc5cjqps //
-sc5cjqpsa //
-sc5cjqpsb //
-sc5cjqpsc //
-sc5dnd // Deal Or No Deal (Bellfruit)
-sc5dnda //
-sc5dndb //
-sc5dndc //
-sc5dndd //
-sc5dnde //
-sc5dndf //
-sc5dndg //
-sc5dndh //
-sc5dndi //
-sc5dndj //
-sc5dndk //
-sc5dndl //
-sc5dndm //
-sc5dndn //
-sc5dndo //
-sc5dndp //
-sc5dndq //
-sc5dndr //
-sc5dnds //
-sc5dndt //
-sc5dndcs //
-sc5dndcsa //
-sc5dndcsb //
-sc5dndcsc //
-sc5dndcsd //
-sc5dndcse //
-sc5dndcsf //
-sc5dndcsg //
-sc5dndcsh //
-sc5dndcsi //
-sc5dndcsj //
-sc5dndcsk //
-sc5dndcsl //
-sc5dndcsm //
-sc5dndc2 //
-sc5dndc2a //
-sc5dndc2b //
-sc5dndc2c //
-sc5dndc2d //
-sc5dndc2e //
-sc5dndc2f //
-sc5dndc2g //
-sc5dndc2h //
-sc5dndc2i //
-sc5dndc2j //
-sc5dndc2k //
-sc5dndc2l //
-sc5dndc2m //
-sc5dndc2n //
-sc5dndc2o //
-sc5dndc2p //
-sc5dndc2q //
-sc5dndc2r //
-sc5dndc2s //
-sc5dndc2t //
-sc5dndc2u //
-sc5dndc2v //
-sc5dndc2w //
-sc5dndc3 //
-sc5dndc3a //
-sc5dndc3b //
-sc5dndc3c //
-sc5dndbb // Deal Or No Deal Break The Bank (Bellfruit)
-sc5dndbba //
-sc5dndbbb //
-sc5dndbbc //
-sc5dndbbd //
-sc5dndbbe //
-sc5dndbbf //
-sc5dndbbg //
-sc5dndcl // Deal Or No Deal Club (Bellfruit)
-sc5dndcla //
-sc5dnddd // Deal Or No Deal Double Deal Or No Deal (Bellfruit)
-sc5dnddda //
-sc5dndddb //
-sc5dndddc //
-sc5dndddd //
-sc5dnddde //
-sc5dndddf //
-sc5dndddg //
-sc5dndddh //
-sc5dndddi //
-sc5dndhf // Deal Or No Deal Hall Of Fame (Bellfruit)
-sc5dndhfa //
-sc5dndhfb //
-sc5dndhfc //
-sc5dndhfd //
-sc5dndhfe //
-sc5dndhff //
-sc5dndhfg //
-sc5dndhfh //
-sc5dndhfi //
-sc5dndhfj //
-sc5dndhfk //
-sc5dndhfl //
-sc5dndhfm //
-sc5dndhfn //
-sc5dndhfo //
-sc5dndhfp //
-sc5dndhfq //
-sc5dndhfr //
-sc5dndhfs //
-sc5dndhft //
-sc5dndhfu //
-sc5dndys // Deal Or No Deal It's Your Show (Bellfruit)
-sc5dndysa //
-sc5dndysb //
-sc5dndysc //
-sc5dndysd //
-sc5dndyse //
-sc5dndysf //
-sc5dndysg //
-sc5dndysh //
-sc5dndlp // Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit)
-sc5dndlpa //
-sc5dndlpb //
-sc5dndlpc //
-sc5dndlpd //
-sc5dndlpe //
-sc5dndlpf //
-sc5dndlpg //
-sc5dndlph //
-sc5dndlpi //
-sc5dndlpj //
-sc5dndlpk //
-sc5dndlpl //
-sc5dndlpm //
-sc5dndlpn //
-sc5dndlpo //
-sc5dndlpp //
-sc5dndlpq //
-sc5dndlpr //
-sc5dndlps //
-sc5dndlpt //
-sc5dndlpu //
-sc5dndra // Deal Or No Deal Red Alert (Bellfruit)
-sc5dndraa //
-sc5dndrab //
-sc5dndrac //
-sc5dndrad //
-sc5dndrae //
-sc5dndraf //
-sc5dndrag //
-sc5dndrah //
-sc5dndrai //
-sc5dndraj //
-sc5dndrak //
-sc5dndbd // Deal Or No Deal The Big Deal (Bellfruit)
-sc5dndbda //
-sc5dndbdb //
-sc5dndbdc //
-sc5dndbdd //
-sc5dndbde //
-sc5dndbdf //
-sc5dndbdg //
-sc5dndbdh //
-sc5dndbdi //
-sc5dndbr // Deal Or No Deal The Big Reds (Bellfruit)
-sc5dndbra //
-sc5dndbrb //
-sc5dndbrc //
-sc5dndbrd //
-sc5dndbre //
-sc5dndbrf //
-sc5dndbrg //
-sc5dndbrh //
-sc5dndbri //
-sc5dndbrj //
-sc5dndbrk //
-sc5dndbrl //
-sc5dndbrm //
-sc5dndbrn //
-sc5dndbro //
-sc5dndbrp //
-sc5dndbrq //
-sc5dndbrr //
-sc5dndbrs //
-sc5dndbrt //
-sc5dndbru //
-sc5dndbrv //
-sc5dndbrw //
-sc5dndcc // Deal Or No Deal The Crazy Chair (Bellfruit)
-sc5dndcca //
-sc5dndccb //
-sc5dndccc //
-sc5dndccd //
-sc5dndcce //
-sc5dndccf //
-sc5dndccg //
-sc5dndcch //
-sc5dndcci //
-sc5dndccj //
-sc5dndcck //
-sc5dndccl //
-sc5dndccm //
-sc5dndccn //
-sc5dndcco //
-sc5dndccp //
-sc5dndccq //
-sc5dndccr //
-sc5dndca //
-sc5dndcaa //
-sc5dndcab //
-sc5dndcac //
-sc5dndcad //
-sc5dndcae //
-sc5dnddw // Deal Or No Deal The Deal Wheel (Bellfruit)
-sc5dnddwa //
-sc5dnddwb //
-sc5dnddwc //
-sc5dnddwd //
-sc5dnddwe //
-sc5dnddwf //
-sc5dnddwg //
-sc5dnddwh //
-sc5dnddwi //
-sc5dnddwj //
-sc5dnddf // Deal Or No Deal The Dream Factory (Bellfruit)
-sc5dnddfa //
-sc5dnddfb //
-sc5dnddfc //
-sc5dnddfd //
-sc5dnddfe //
-sc5dnddff //
-sc5dnddfg //
-sc5dnddfh //
-sc5dnddfi //
-sc5dnddfj //
-sc5dnddfk //
-sc5dnddfl //
-sc5dnddfm //
-sc5dnddfn //
-sc5dndpg // Deal Or No Deal The Perfect Game (Bellfruit)
-sc5dndpga //
-sc5dndpgb //
-sc5dndpgc //
-sc5dndpgd //
-sc5dndpge //
-sc5dndpgf //
-sc5dndpgg //
-sc5dndpgh //
-sc5dndpgi //
-sc5dndpgj //
-sc5dndpgk //
-sc5dndpgl //
-sc5dndpgm //
-sc5dndpgn //
-sc5dndpgo //
-sc5dndpgp //
-sc5dndpgq //
-sc5dndpgr //
-sc5dndpgs //
-sc5dndpgt //
-sc5dndpgu //
-sc5dndpgv //
-sc5dndpgw //
-sc5dndpl // Deal Or No Deal The Perfect Game Classic (Bellfruit)
-sc5dndpla //
-sc5dndplb //
-sc5dndplc //
-sc5dndtp // Deal Or No Deal The Power (Bellfruit)
-sc5dndtpa //
-sc5dndtpb //
-sc5dndtpc //
-sc5dndtpd //
-sc5dndtpe //
-sc5dndtpf //
-sc5dndtpg //
-sc5dndtph //
-sc5dndtpi //
-sc5dndtpj //
-sc5dndtpk //
-sc5dndtpl //
-sc5dndtpm //
-sc5dndtpn //
-sc5dndtpo //
-sc5dndtpp //
-sc5dndtpq //
-sc5dndtpr //
-sc5dndtps //
-sc5dndtpt //
-sc5dndtpu //
-sc5dndtpv //
-sc5dndww // Deal Or No Deal The Walk Of Wealth (Bellfruit)
-sc5dndwwa //
-sc5dndwwb //
-sc5dndwwc //
-sc5dndwwd //
-sc5dndwwe //
-sc5dndwwf //
-sc5dndwwg //
-sc5dndwwh //
-sc5dndwwi //
-sc5dndwwj //
-sc5dndwwk //
-sc5dndwwl //
-sc5dndwwm //
-sc5dndwwn //
-sc5dndwwo //
-sc5dndwwp //
-sc5dndwwq //
-sc5dndwwr //
-sc5dndwws //
-sc5dndcb //
-sc5dndcba //
-sc5dndwc //
-sc5dndwca //
-sc5dndwcb //
-sc5dndwcc //
-sc5dndwcd //
-sc5dndwce //
-sc5dndwcf //
-sc5dndwcg //
-sc5dndtr // Deal Or No Deal Think Red (Bellfruit)
-sc5dndtra //
-sc5dndtrb //
-sc5dndtrc //
-sc5dndtrd //
-sc5dndtre //
-sc5dndtrf //
-sc5dndtrg //
-sc5dndtrh //
-sc5dndtri //
-sc5dndtrj //
-sc5dndtrk //
-sc5dndwb // Deal Or No Deal What's In Your Box (Bellfruit)
-sc5dndwba //
-sc5dndwbb //
-sc5dndwbc //
-sc5dndwbd //
-sc5dndwbe //
-sc5dndwbf //
-sc5dndwbg //
-sc5dndwbh //
-sc5dndwbi //
-sc5dndwbj //
-sc5dndwbk //
-sc5dndwbl //
-sc5dndwbm //
-sc5dndwbn //
-sc5dndwbo //
-sc5dndwbp //
-sc5dndwbq //
-sc5dndwbr //
-sc5dndwbs //
-sc5dndwi // Deal Or No Deal What's In Your Box Casino (Bellfruit)
-sc5dndwia //
-sc5dndwib //
-sc5dndwic //
-sc5dndwid //
-sc5dndwie //
-sc5dndwif //
-sc5dndwig //
-sc5dmine // Diamond Mine (Bellfruit)
-sc5dminea //
-sc5dmineb //
-sc5dminec //
-sc5dmined //
-sc5dminee //
-sc5dminef //
-sc5dmineg //
-sc5dmineh //
-sc5dminei //
-sc5dminej //
-sc5dminek //
-sc5dminel //
-sc5ddosh // Doctor Dosh (Bellfruit)
-sc5ddosha //
-sc5dhh // Dough Ho Ho (Bellfruit)
-sc5dhha //
-sc5dhhb //
-sc5dhhc //
-sc5dhhd //
-sc5dhhe //
-sc5dhhf //
-sc5dhhg //
-sc5dough // Dough Selecta (Bellfruit)
-sc5dougha //
-sc5ducks // Ducks Of Hazzard (Mazooma)
-sc5emmer // Emmerdale (Mazooma)
-sc5emmera //
-sc5fguy // Family Guy (Bellfruit)
-sc5fguya //
-sc5fguyb //
-sc5fguyc //
-sc5fguyd //
-sc5fguye //
-sc5fguyf //
-sc5fguyg //
-sc5fbspn // Fat Boy Spin (Bellfruit)
-sc5fbspna //
-sc5fmj // Full Metal Jackpot (Mazooma)
-sc5fmja //
-sc5glad // Gladiator (Mazooma)
-sc5glada //
-sc5gladb //
-sc5gladc //
-sc5gd // Gold Digger (Bellfruit)
-sc5gda //
-sc5gdmz // Gold Digger (Mazooma)
-sc5gdmza //
-sc5gdclb // Gold Digger Club (Bellfruit)
-sc5gdclba //
-sc5gdclbb //
-sc5gdclbc //
-sc5gdclbd //
-sc5gdclbe //
-sc5gdclbf //
-sc5gdclbg //
-sc5gdclbh //
-sc5gdclbi //
-sc5gdclbj //
-sc5gdclbk //
-sc5gball // Golden Balls (Bellfruit)
-sc5gballa //
-sc5gballb //
-sc5gballc //
-sc5ggame // Golden Game (Mazooma)
-sc5ggamea //
-sc5ggameb //
-sc5ggamec //
-sc5ggamed //
-sc5ggg // Grand Golden Game (Mazooma)
-sc5ggga //
-sc5gggb //
-sc5gggc //
-sc5gunp // Gunpowder Slot (Bellfruit)
-sc5gunpa //
-sc5gunpb //
-sc5gunpc //
-sc5gunpd //
-sc5gunpe //
-sc5gunpf //
-sc5gunpg //
-sc5gunph //
-sc5gunpi //
-sc5gunpj //
-sc5gunpk //
-sc5gunpl //
-sc5hapnt // Happy Notes (Bellfruit)
-sc5hapnta //
-sc5hapntb //
-sc5hapntc //
-sc5hapntd //
-sc5hapnte //
-sc5hapntf //
-sc5hapntg //
-sc5hellb // Hells Bells (Bellfruit)
-sc5hellba //
-sc5hill // Hill Billionaire (Bellfruit)
-sc5hilla //
-sc5hillb //
-sc5hiss // Hissing Quid (Qps)
-sc5hissa //
-sc5hissb //
-sc5hissc //
-sc5hotdg // Hot Dog (Bellfruit)
-sc5hotdga //
-sc5hotdgb //
-sc5hotdgc //
-sc5hotdgd //
-sc5hotdge //
-sc5hotrd // Hot Rod (Bellfruit)
-sc5hotrda //
-sc5hotsh // Hot Shots (Bellfruit)
-sc5hotsha //
-sc5hotshb //
-sc5hotshc //
-sc5hotshd //
-sc5hotshe //
-sc5hotshf //
-sc5hotshg //
-sc5hotshh //
-sc5hotshi //
-sc5hotshj //
-sc5hotshk //
-sc5hotshl //
-sc5hotshm //
-sc5hotshn //
-sc5hotsho //
-sc5hotshp //
-sc5hotshq //
-sc5hotwd // Hot Wad (Bellfruit)
-sc5hotwda //
-sc5hotwdb //
-sc5hotwdc //
-sc5hotwdd //
-sc5hotwde //
-sc5hotwdf //
-sc5hotwdg //
-sc5celeb // I'm A Celebrity (Bellfruit)
-sc5celeba //
-sc5celebb //
-sc5celebc //
-sc5celebd //
-sc5inspn // Inner Spin (Mazooma)
-sc5inspna //
-sc5ijob // Italian Job (Mazooma)
-sc5ijoba //
-sc5ijobb //
-sc5ijobc //
-sc5ijobd //
-sc5ijobe //
-sc5ijobf //
-sc5ijobg //
-sc5ijobh //
-sc5ijobi //
-sc5jjok // Jackpot Jokers (Bellfruit)
-sc5jjoka //
-sc5ldvl // Little Devil (Mazooma)
-sc5ldvla //
-sc5ldvlb //
-sc5ldvlc //
-sc5ldvld //
-sc5ldvle //
-sc5lotrr // Lord Of The Rings - Return Of The King (Bellfruit)
-sc5lotrra //
-sc5lotrrb //
-sc5lotrrc //
-sc5lotrrd //
-sc5lotrre //
-sc5lotrrf //
-sc5lotrrg //
-sc5lotrrh //
-sc5lotrri //
-sc5manic // Manic Miner (Bellfruit)
-sc5manica //
-sc5manicb //
-sc5manicc //
-sc5manicd //
-sc5manice //
-sc5manicf //
-sc5manicg //
-sc5manich //
-sc5manici //
-sc5manicj //
-sc5manick //
-sc5manicl //
-sc5manicm //
-sc5manicn //
-sc5manico //
-sc5manicp //
-sc5manicq //
-sc5manicr //
-sc5manics //
-sc5manict //
-sc5manicu //
-sc5manicv //
-sc5manicw //
-sc5manicx //
-sc5manicy //
-sc5mmm // Mental Money Monsters (Mazooma)
-sc5mmma //
-sc5mmmb //
-sc5mmmc //
-sc5mmad // Money Madness (Mazooma)
-sc5mmada //
-sc5mmadb //
-sc5mmadc //
-sc5monsp // Money Spinner (Bellfruit)
-sc5monspa //
-sc5monop // Monopoly (Mazooma)
-sc5mcas // Monopoly Casino (Mazooma)
-sc5mcasa //
-sc5mcasb //
-sc5mcasc //
-sc5mdm // Monopoly Double Money (Bellfruit)
-sc5mdma //
-sc5mdmb //
-sc5mdmc //
-sc5mhn // Monopoly Here & Now (Mazooma)
-sc5mhna //
-sc5mhnb //
-sc5mhnc //
-sc5mhnd //
-sc5mhne //
-sc5mhp // Monopoly Hot Property (Bellfruit)
-sc5mhpa //
-sc5mhpb //
-sc5mhpc //
-sc5mhpd //
-sc5mhpe //
-sc5mhpf //
-sc5mhpg //
-sc5mhph //
-sc5mhpi //
-sc5mhpj //
-sc5mhpk //
-sc5mhpl //
-sc5mmb // Monopoly Money Bags (Bellfruit)
-sc5mmba //
-sc5mmbb //
-sc5mmbc //
-sc5mmbd //
-sc5mmbe //
-sc5mrh // Monopoly Red Hot (Mazooma)
-sc5mrha //
-sc5mr2r // Monopoly Road To Riches (Mazooma)
-sc5mr2ra //
-sc5mr2rb //
-sc5mww // Monopoly Wonders Of The World (Mazooma)
-sc5mwwa //
-sc5mwwb //
-sc5mwwc //
-sc5nmare // A Nightmare On Elm Street (Bellfruit)
-sc5nmarea //
-sc5nmareb //
-sc5nmarec //
-sc5potp // Pick Of The Pack (Bellfruit)
-sc5potpa //
-sc5pp // Pink Panther (Mazooma)
-sc5ppa //
-sc5ppb //
-sc5ppc //
-sc5ppd //
-sc5ppe //
-sc5ppf //
-sc5ppg //
-sc5ppcr // Pink Panther Clouseau's Revenge (Mazooma)
-sc5ppcra //
-sc5ppcrb //
-sc5ppcrc //
-sc5ppcrd //
-sc5ppctc // Pink Panther Crack The Code (Bellfruit)
-sc5ppctca //
-sc5ppctcb //
-sc5ppctcc //
-sc5ppctcd //
-sc5ppctce //
-sc5ppctcf //
-sc5ppctcg //
-sc5ppctch //
-sc5ppctci //
-sc5ppdym // Pink Panther Double Your Money (Mazooma)
-sc5ppdyma //
-sc5ppsag // Pink Panther Strikes Again (Mazooma)
-sc5ppsaga //
-sc5ppsagb //
-sc5ppsagc //
-sc5ppsagd //
-sc5ppsage //
-sc5pony // Pony Express (Bellfruit)
-sc5ponya //
-sc5ponyb //
-sc5ponyc //
-sc5ponyd //
-sc5ponye //
-sc5popey // Popeye (Mazooma)
-sc5popeya //
-sc5popeyb //
-sc5popeyc //
-sc5popeyd //
-sc5popeye //
-sc5popeyf //
-sc5popeyg //
-sc5pog // Pots Of Gold (Bellfruit)
-sc5poga //
-sc5pogb //
-sc5pogc //
-sc5potog //
-sc5potoga //
-sc5potogb //
-sc5potogc //
-sc5potogd //
-sc5potoge //
-sc5potogf //
-sc5potogg //
-sc5potogh //
-sc5potogi //
-sc5pogd //
-sc5poge //
-sc5pogf //
-sc5pogg //
-sc5pwrpl // Power Play (Mazooma)
-sc5pwrpla //
-sc5pwrbl // Powerball (Bellfruit)
-sc5pwrbla //
-sc5quidv // Quid Vicious (Mazooma)
-sc5quidva //
-sc5quidvb //
-sc5quidvc //
-sc5quidvd //
-sc5quidve //
-sc5quidvf //
-sc5quidvg //
-sc5rhx // Red Hot X (Mazooma)
-sc5rhxa //
-sc5rhxb //
-sc5rhxc //
-sc5rhxd //
-sc5rhxe //
-sc5rhxf //
-sc5rhxcs // Red Hot X Casino (Mazooma)
-sc5rhxcsa //
-sc5redsq // Red Square (Mazooma)
-sc5redsqa //
-sc5rosts // Ronnie O'Sullivan's Tournament Snooker (Bellfruit)
-sc5rostsa //
-sc5rostsb //
-sc5rostsc //
-sc5rostsd //
-sc5rostse //
-sc5rovrt // Rovers Return (Mazooma)
-sc5rovrta //
-sc5rovrtb //
-sc5rovrtc //
-sc5smtm // Show Me The Money (Mazooma)
-sc5smtma //
-sc5showt // Showtime (Bellfruit)
-sc5showta //
-sc5showtb //
-sc5showtc //
-sc5showtd //
-sc5showte //
-sc5showtf //
-sc5showtg //
-sc5showth //
-sc5showti //
-sc5showtj //
-sc5showtk //
-sc5showtl //
-sc5showtm //
-sc5showtn //
-sc5showto //
-sc5showtp //
-sc5showtq //
-sc5showtr //
-sc5showts //
-sc5slad // Snakes & Ladders (Bellfruit)
-sc5slada //
-sc5sladb //
-sc5sladc //
-sc5sladd //
-sc5slade //
-sc5sladf //
-sc5sladg //
-sc5spice // Spice It Up (Bellfruit)
-sc5spicea //
-sc5spiceb //
-sc5spicec //
-sc5spiced //
-sc5spicee //
-sc5swywm // Spin When Your Winning (Mazooma)
-sc5swywma //
-sc5swywmb //
-sc5swywmc //
-sc5sumit // Summit Up (Qps)
-sc5sumita //
-sc5sus // Suits U Sir (Qps)
-sc5susa //
-sc5susb //
-sc5susc //
-sc5swbak // Switch Back (Mazooma)
-sc5swbaka //
-sc5ttpie // Take The Piece (Bellfruit)
-sc5ttpiea //
-sc5ttpieb //
-sc5ttpiec //
-sc5ttpied //
-sc5ttpiee //
-sc5ttpief //
-sc5ttpieg //
-sc5ttpieh //
-sc5ttpiei //
-sc5typ // Take Your Pick (Bellfruit)
-sc5typa //
-sc5typb //
-sc5typc //
-sc5tbox // Top Box (Mazooma)
-sc5tboxa //
-sc5tboxb //
-sc5tboxc //
-sc5tboxd //
-sc5tboxe //
-sc5tboxf //
-sc5tboxg //
-sc5tboxh //
-sc5tboxi //
-sc5tboxj //
-sc5tboxk //
-sc5tboxl //
-sc5tboxm //
-sc5tboxn //
-sc5tboxo //
-sc5tboxp //
-sc5tboxq //
-sc5tpsht // Top Of The Shots (Mazooma)
-sc5tpshta //
-sc5tpshtb //
-sc5tpshtc //
-sc5tpshtd //
-sc5trail // Trailblazer (Mazooma)
-sc5traila //
-sc5vivam // Viva Mexico (Bellfruit)
-sc5vivama //
-sc5wldjk // Wild Jackpots (Mazooma)
-sc5wldjka //
-sc5adsnt // Ant & Dec's Saturday Night Takeaway (Bellfruit)
-sc5adsnta //
-sc5bpb // Bully's Prize Board (Bellfruit)
-sc5bpba //
-sc5bpbb //
-sc5bpbc //
-sc5bpbd //
-sc5bpbe //
-sc5bpbf //
-sc5bpbg //
-sc5bsp // Bully's Star Prize (Bellfruit)
-sc5bspa //
-sc5bspb //
-sc5bspc //
-sc5bspd //
-sc5bspe //
-sc5bspf //
-sc5bspg //
-sc5bsph //
-sc5bspi //
-sc5bspj //
-sc5bspk //
-sc5bspl //
-sc5bspm //
-sc5bspn //
-sc5bspo //
-sc5bspp //
-sc5bspq //
-sc5chain // Chain Reaction (Bellfruit)
-sc5chaina //
-sc5chainb //
-sc5chainc //
-sc5chaind //
-sc5chaine //
-sc5clown // Clown Around (Bellfruit)
-sc5clowna //
-sc5clownb //
-sc5clownc //
-sc5clownd //
-sc5clowne //
-sc5copsr // Cops 'n' Robbers (Bellfruit)
-sc5copsra //
-sc5copsrb //
-sc5copsrc //
-sc5copsrd //
-sc5copsre //
-sc5copsrf //
-sc5copsrg //
-sc5copsrh //
-sc5copsri //
-sc5dndbea //
-sc5dndbeb //
-sc5dndbec //
-sc5ddbbc //
-sc5ddbbca //
-sc5dndbed //
-sc5dndbee //
-sc5dndbef //
-sc5dndbeg //
-sc5dndbeh //
-sc5ddbbcb //
-sc5ddbbcc //
-sc5dndbei //
-sc5dndbej //
-sc5dndbek //
-sc5dndbel //
-sc5dndbem //
-sc5dndben //
-sc5ddbbcd //
-sc5ddbbce //
-sc5ddbbcf //
-sc5ddbbcg //
-sc5dndbc // Deal Or No Deal Box Clever (Bellfruit)
-sc5dndbca //
-sc5dndbcb //
-sc5dndbcc //
-sc5dndbcd //
-sc5dndbce //
-sc5dndbcf //
-sc5dndbcg //
-sc5dndbch //
-sc5dndbci //
-sc5dndbcj //
-sc5dndbck //
-sc5mowow // Monopoly Wheel Of Wealth (Mazooma)
-sc5mowowb //
-sc5nunsm // Nuns 'n' Roses (Mazooma)
-sc5nunsma //
-sc5nunsmb //
-sc5nunsmc //
-sc5nunsmd //
-sc5nunsme //
-sc5dndbe // Deal Or No Deal Beat The Banker (Bellfruit)
-sc5_3512
-sc5_3437
-sc5_3438
-sc5_3508
-sc5_3514
-sc5_3517
-sc5_3524
-sc5_3515
-sc5_3511
-sc5_3513
-sc5_3516
-sc5_3530
-sc5_3552
-sc5_3551
-sc5_3525
-sc5_3553
-sc5_3555
-sc5_3519
-sc5_3510
-sc5_3557
-sc5_3451
-sc5_3450
-sc5_3435
-sc5_3520
-sc5_3434
-sc5_z059
-sc5_z058
-sc5_z060
-sc5_z057
-sc5_3414
-sc5_3518
-
-// Adder 5
-
-ad5crcpt // Cops 'n' Robbers Community Party (Bellfruit)
-ad5crcpta //
-ad5bpfpm // Bullseye Pounds For Points (Mazooma)
-ad5bpfpma //
-ad5bpfpmb //
-ad5bpfpmc //
-ad5bpfpmd //
-ad5cmons // Crazy Money (Bellfruit)
-ad5cmonsa //
-ad5dndpl // Deal Or No Deal Platinum (Bellfruit)
-ad5dndpla //
-ad5dndplb //
-ad5dndplc //
-ad5hir // Hi Roller (Bellfruit)
-ad5hira //
-ad5hirb //
-ad5hirc //
-ad5hircl // Hi Roller Club (Bellfruit)
-ad5hircla //
-ad5hirclb //
-ad5dnd // Deal Or No Deal (Bellfruit) (AD5)
-ad5dnda //
-ad5dndb //
-ad5dndc //
-ad5dndd //
-ad5dnde //
-ad5dndf //
-ad5dndg //
-ad5dndh //
-ad5dndi //
-ad5dndj //
-ad5dndk //
-ad5dndl //
-ad5dndm //
-ad5dndn //
-ad5dndo //
-ad5dndp //
-ad5dndq //
-ad5dndr //
-ad5dndu //
-ad5dndv //
-ad5dndcl // Deal Or No Deal Club (Bellfruit) (AD5)
-ad5dndcla //
-ad5dndclb //
-ad5dndclc //
-ad5dndcld //
-ad5dndcle //
-ad5dndclf //
-ad5dndclg //
-ad5dnddd // Deal Or No Deal Double Deal Or No Deal (Bellfruit) (AD5)
-ad5dnddda //
-ad5dndpg // Deal Or No Deal The Perfect Game (Bellfruit)
-ad5dndpga //
-ad5dndpgb //
-ad5dndpgc //
-ad5crsc // Cops 'n' Robbers Safe Cracker (Bellfruit)
-ad5crsca //
-ad5crscb //
-ad5crscc //
-ad5crscd //
-ad5crsce //
-ad5crscf //
-ad5crscg //
-ad5crsch //
-ad5copsr // Cops 'n' Robbers (Bellfruit)
-ad5copsra //
-ad5copsrb //
-ad5copsrc //
-ad5copsrd //
-ad5copsre //
-ad5copsrf //
-ad5copsrg //
-ad5copsrh //
-ad5copsri //
-ad5copsrj //
-ad5copsrk //
-ad5copsrl //
-ad5copsrm //
-ad5copsrn //
-ad5copsro //
-ad5copsrp //
-ad5copsrq //
-ad5copsrr //
-ad5copsrs //
-ad5copsrt //
-ad5copsru //
-ad5copsrv //
-ad5copsrw //
-ad5copsrx //
-ad5copsry //
-ad5copsrz //
-ad5copsr0 //
-ad5copsr1 //
-ad5copsr2 //
-ad5copsr3 //
-ad5copsr4 //
-ad5copsr5 //
-ad5copsr6 //
-ad5copsr7 //
-ad5gldmn // Gold Mine (Bellfruit)
-ad5gldmna //
-ad5gldmnb //
-ad5gldmnc //
-ad5gldmnd //
-ad5gldmne //
-ad5gldmnf //
-ad5gldmng //
-ad5gldmnh //
-ad5gldmni //
-ad5gldmnj //
-ad5gldmnk //
-ad5mowow // Monopoly Wheel Of Wealth (Mazooma)
-ad5mowowa //
-ad5mowowb //
-ad5mowowc //
-ad5mowowd //
-ad5mowowe //
-ad5mowowf //
-ad5mowowg //
-ad5mowowh //
-ad5mowowi //
-ad5mowowj //
-ad5mowowk //
-ad5mowowl //
-ad5mowowm //
-ad5pp // Pink Panther (Mazooma)
-ad5ppa //
-ad5ppb //
-ad5ppc //
-ad5ppd //
-ad5ppe //
-ad5ppf //
-ad5ppg //
-ad5pph //
-ad5ppi //
-ad5ppj //
-ad5rsclb // Random Spinner Club (Bellfruit)
-ad5rsclba //
-ad5rsclbb //
-ad5rsclbc //
-ad5rsclbd //
-ad5rsclbe //
-ad5rsclbf //
-ad5rsclbg //
-ad5rsclbh //
-ad5rsclbi //
-ad5rsclbj //
-ad5monop // Monopoly (Mazooma)
-ad5monopa //
-ad5monopb //
-ad5monopc //
-ad5monopd //
-ad5monope //
-ad5monopf //
-ad5monopg //
-ad5monoph //
-ad5monopi //
-ad5monopj //
-ad5monopk //
-ad5rspin // Random Spinner (Bellfruit)
-ad5rspinb //
-ad5rspinc //
-ad5btc // Bullseye Triple Club (Bellfruit)
-ad5btca //
-ad5btcb //
-ad5rsnw // Random Spin 'n' Win (Mazooma)
-ad5rsnwa //
-ad5rsnwb //
-ad5rsnwc //
-ad5sslam // Super Slam (Bellfruit)
-ad5sslama //
-ad5sslamb //
-ad5sslamc //
-ad5sslamd //
-ad5sslame //
-ad5sslamf //
-ad5mr2r // Monopoly Road To Riches (Mazooma)
-ad5mr2ra //
-ad5mr2rb //
-ad5mr2rc //
-ad5mr2rd //
-ad5mr2re //
-ad5mr2rf //
-ad5mr2rg //
-ad5mr2rh //
-ad5rwclb // Random Winner Club (Bellfruit)
-ad5rwclba //
-ad5rwclbb //
-ad5rwclbc //
-ad5rwclbd //
-ad5rwclbe //
-ad5gldwn // Golden Winner (Mazooma)
-ad5gldwna //
-ad5rapid // Rapid Pay (Bellfruit)
-ad5rapida //
-ad5jckmo // Jackpot Monopoly (Mazooma)
-ad5jckmoa //
-ad5jckmob //
-ad5jckmoc //
-ad5jckmod //
-ad5jckmoe //
-ad5ppbtb // Pink Panther Break The Bank (Mazooma)
-ad5ppbtba //
-ad5ppbtbb //
-ad5ppbtbc //
-ad5vlv // Viva Las Vegas (Bellfruit)
-ad5vlvb //
-ad5vlvc //
-ad5vlvd //
-ad5vlve //
-ad5vlvf //
-ad5rroul // Reel Roulette (Mazooma)
-ad5rroula //
-ad5rroulb //
-ad5rroulc //
-ad5mcob // Monte Carlo Or Bust (Qps)
-ad5mcoba //
-ad5mcobb //
-ad5mcobc //
-ad5pking // Poker King (Bellfruit)
-ad5pkinga //
-ad5vpa // Video Poker Ace (Bellfruit)
-ad5vpaa //
-ad5vpab //
-ad5vpac //
-ad5tornc // Tornado Club (Bellfruit)
-ad5tornca //
-ad5torncb //
-ad5torncc //
-ad5torncd //
-ad5tornce //
-ad5rcash // Reel Cash (Mazooma)
-ad5rcasha //
-ad5mww // Monopoly Wonders Of The World (Mazooma)
-ad5mwwa //
-ad5eyes // Eyes Down (Mazooma)
-ad5eyesa //
-ad5eyesb //
-ad5eyesc //
-ad5eyesd //
-ad5eyese //
-ad5eyesf //
-ad5eyesg //
-ad5rsrm // Ronnie O'Sullivan's Rocket Money (Bellfruit)
-ad5rsrma //
-ad5rsrr // Ronnie O'Sullivan's Rocket Ronnie (Bellfruit)
-ad5rsrra //
-
-
-
-
-
-/* Maygay Machines Ltd. */
-
-// Triple M (MMM) Hardware?
-
-mmm_ldip // Lucky Dip
-
-// Maygay M1 A/B hardware
-
-m1albsq // Albert Square (Maygay)
-m1albsqp
-m1albsq3
-m1albsq2
-m1albsq1
-m1albsq1p
-m1alley // Alley Cat (Maygay)
-m1apollo // Apollo 9 (Maygay)
-m1apollop
-m1apolloh
-m1apolloa
-m1apolloap
-m1apolloao
-m1apollo9
-m1apollo9p
-m1apollo4
-m1apollo4p
-m1apollo11
-m1apollo11b
-m1apollo11p
-m1apollo8
-m1apollo8p
-m1apollo7
-m1apollo7p
-m1apollo5
-m1apollo5p
-m1apollo4o
-m1apollo3
-m1apollo3p
-m1apollo2
-m1apollo2p
-m1bankbs // Bank Buster Club (Maygay)
-m1bankbsp // Bank Buster Club (Maygay)
-m1bankbso // Bank Buster Club (Maygay)
-m1bankrl // Bank Roll (Maygay)
-m1bankrlp
-m1bankrl2p
-m1bargn // Bar-gain (Maygay)
-m1bargnp
-m1bargnc // Casino Bar-gain (Maygay)
-m1bargncp
-m1bigdel // Big Deal (Maygay)
-m1blkhol // Black Hole (Maygay)
-m1bluemx // Blue Max (Maygay)
-m1bluemxp
-m1bondi // Bondi Beach (Maygay)
-m1bondip
-m1bondi4
-m1bondi4p
-m1bondi3
-m1bondi2
-m1bondi2p
-m1bondi2po
-m1bondi1
-m1bondi1p
-m1bountc // Bounty Hunter Club (Maygay)
-m1bountcp
-m1cik // Cash Is King (Maygay)
-m1cikp
-m1cikh
-m1cik51
-m1cik51p
-m1cik51o
-m1cik41
-m1cik41p
-m1cik31
-m1cik31p
-m1cik21
-m1cik21p
-m1cik12
-m1cik11
-m1cik11p
-m1cik11n
-m1cik11np
-m1casclb // Casino Club (Maygay)
-m1casclbp
-m1casclb1
-m1casgcl // Casino Gambler Club (Maygay)
-m1casgclp
-m1casroy // Casino Royale Club (Maygay)
-m1casroyp
-m1casroy1
-m1chain // Chain Reaction (Maygay)
-m1clbfvr // Club Fever (Maygay)
-m1clbfvrp
-m1cluedo // Cluedo (Maygay)
-m1cluedop
-m1cluedo5
-m1cluedo5p
-m1cluedoi
-m1cluedoip
-m1cluedon
-m1cluedonp
-m1cluedob2 //These are BwB builds
-m1cluedob2p //
-m1cluedob2h //
-m1cluedob1 //
-m1cluedob1p //
-m1cluedob1h //
-m1cluedobi2 //
-m1cluedobi2p //
-m1cluedo4
-m1cluedo4p
-m1cluedo3
-m1cluedo3p
-m1cluedo3h
-m1cluedo1
-m1cluedo1p
-m1cluedo1h
-m1cluecb // Cluedo Club (Maygay)
-m1cluecbp
-m1cluecb2
-m1cluecb2p
-m1cluecb1
-m1cluecb1p
-m1cluesh // Super Cluedo Showcase (Maygay)
-m1clueshp
-m1cluesho
-m1clueshop
-m1cluess // Cluedo Super Sleuth (Maygay)
-m1cluessh
-m1cluessp
-m1cluessa
-m1cluessap
-m1cluessb
-m1cluessbp
-m1cluessc
-m1cluesscp
-m1cluessd
-m1cluessdp
-m1cluesse
-m1cluessep
-m1cluessf
-m1cluessfp
-m1cluessg
-m1cluessi
-m1cluessj
-m1cluessk
-m1cluessl
-m1cluesslp
-m1cluessm
-m1cluessmp
-m1cluessn
-m1cluesso
-m1cluessop
-m1cluessq
-m1cluessqp
-m1cluessr
-m1cluessrp
-m1cluesss
-m1cluesssp
-m1coderd
-m1coderdp
-m1coro // Coronation Street (Maygay)
-m1corop
-m1coro32g
-m1coro32gh
-m1coro12g
-m1coro12gp
-m1coro12a
-m1coro10h1
-m1coro10h2
-m1coro10h3
-m1coro81
-m1coro81p
-m1coro32n
-m1coro32np
-m1coro22n
-m1coro21n
-m1coro21np
-m1coro12n
-m1coro12np
-m1coro11n
-m1coro11np
-m1coro31
-m1coro31p
-m1coro30h
-m1coro21v
-m1coro21vp
-m1cororr // Coronation Street - Rovers Return (Maygay)
-m1cororrp
-m1cororra
-m1cororrb
-m1cororrbh
-m1cororrb1
-m1cororrbp
-m1cororrc
-m1cororrc1
-m1cororrc2
-m1cororrd
-m1cororrdp
-m1cororre
-m1cororrf
-m1cororrfp
-m1cororrg
-m1cororrgp
-m1cororrh
-m1cororri
-m1cororrip
-m1cororrj
-m1cororrjp
-m1cororrk
-m1cororrl
-m1cororrlp
-m1corocb // Coronation Street Club (Maygay)
-m1corocbp
-m1corocb1
-m1corocb1p
-m1corosh // Coronation Street Showcase (Maygay)
-m1coroshp
-m1criss // Criss Cross Club (Maygay) (Dutch)
-m1dxmono // Deluxe Monopoly (Maygay)
-m1dxmonop
-m1dxmono12n
-m1dxmono31b
-m1dxmono31p
-m1dxmono31h
-m1dxmono31h2
-m1dxmono51
-m1dxmono12
-m1dxmono12p
-m1dxmono12a
-m1dxmono21p
-m1dxmono11p
-m1dxmono11
-m1dxmono51o
-m1dxmono51p
-m1dxmono30h
-m1dxmono11o
-m1dxmono11m
-m1dxmono11mb
-m1dmnhrt // Diamond Hearts (Maygay)
-m1dm4ev // Diamonds Are Forever Club (Maygay)
-m1dm4evp
-m1dm4ev11
-m1dkong // Donkey Kong (Maygay)
-m1dkongp
-m1dkonga
-m1dkong91n
-m1dkong91np
-m1dkong91na
-m1dkong81n
-m1dkong81na
-m1dkong81np
-m1dkong21n
-m1dkong91
-m1dkong91p
-m1dkong91a
-m1dkong91h1
-m1dkong91h2
-m1dkong81
-m1dkong81p
-m1dkong51
-m1dkong51p
-m1dkong41
-m1dkong41p
-m1dkong31
-m1dkong31p
-m1dkong21
-m1dkong21p
-m1dkong11
-m1dkong11p
-m1eastnd // Eastenders (Bwb)
-m1eastnda
-m1eastndb
-m1eastndc
-m1eastndd
-m1eastnde
-m1eastndf
-m1eastndg
-m1eastndh
-m1eastndi
-m1eastndj
-m1eastndk
-m1eastndl
-m1eastndn
-m1eastndp
-m1eastndq
-m1eastndr
-m1eastnds
-m1eastndt
-m1eastndu
-m1eastndv
-m1eastndw
-m1eastndx
-m1eastndy
-m1eastndz
-m1eastnd0
-m1eastnd1
-m1eastnd2
-m1eastnd3
-m1eastnd4
-m1eastnd5
-m1eastnd6
-m1eastnd7
-m1eastnd8
-m1eastnd9
-m1eastndaa
-m1eastndab
-m1eastndac
-m1eastndad
-m1eastndae
-m1eastndaf
-m1eastqv // Eastenders - Queen Vic (Maygay - Whitbread)
-m1eastqva
-m1eastqvb
-m1eastqvc
-m1eastqvd
-m1eastqvf
-m1eastqvg
-m1eastqvh
-m1eastqvi
-m1eastqvj
-m1eastqvk
-m1eastqvl
-m1eastqvm
-m1eastqvn
-m1eastqvo
-m1eastqvp
-m1eastqvq
-m1eastqvr
-m1eastqvs
-m1eastqvt
-m1eastqvu
-m1eastqvv
-m1eastqvw
-m1eastqvx
-m1eastqvy
-m1eastqvz
-m1eastqv0
-m1eastqv1
-m1eastqv2
-m1eastqv3
-m1eastqv5
-m1eastqv6
-m1eastqv7
-m1eastqv8
-m1eastqvaa
-m1expclb // Explorer Club (Maygay)
-m1expclba
-m1fantfb // Fantasy Football (Maygay)
-m1fantfba
-m1fantfbb
-m1fantfbc
-m1fantfbd
-m1fantfbf
-m1fantfbg
-m1fantfbh
-m1fantfbj
-m1fantfbk
-m1fantfbl
-m1fight // Fight Night (Maygay)
-m1fighta
-m1fightb
-m1fightc
-m1fightd
-m1fighte
-m1fightg
-m1fighth
-m1fighti
-m1fightj
-m1fightk
-m1fightl
-m1fightm
-m1fightn
-m1fighto
-m1fightp
-m1fightq
-m1fightr
-m1fights
-m1fightt
-m1fightu
-m1fightv
-m1fightw
-m1fightx
-m1fivest // Five Star (Maygay)
-m1frexpl // Fruit Explosion (Maygay)
-m1frexpla
-m1frexplc
-m1frexpld
-m1frexple
-m1frexplg
-m1frexplh
-m1frexpli
-m1frexplj
-m1frexplk
-m1frexpll
-m1frexplm
-m1frexpln
-m1frexplo
-m1frexplp
-m1frexplq
-m1frexplr
-m1frexpls
-m1frexplt
-m1frexplu
-m1frexplv
-m1glad // Gladiators (Maygay)
-m1glada
-m1gladb
-m1gladc
-m1gladd
-m1glade
-m1gladf
-m1gladg
-m1gladh
-m1gladj
-m1gladk
-m1gladl
-m1gladm
-m1gladn
-m1glado
-m1gladp
-m1gladq
-m1gladr
-m1glads
-m1gladt
-m1gladu
-m1gladv
-m1gladw
-m1gladx
-m1glady
-m1gladz
-m1glad0
-m1glad1
-m1goldsv // Gold & Silver (Maygay)
-m1goldsva
-m1gold10 // Golden 10 (Maygay)
-m1goldng // Golden Nugget Club (Maygay)
-m1goldnga
-m1goldngb
-m1goldngc
-m1goldngd
-m1goldnge
-m1gresc // Great Escape, The (Maygay)
-m1gresca
-m1grescb
-m1grescc
-m1grescd
-m1gresce
-m1grescf
-m1grescg
-m1gresch
-m1gresci
-m1grescj
-m1gresck
-m1grescl
-m1grescm
-m1grescn
-m1gresco
-m1grescp
-m1grescq
-m1guvnor // The Guvnor (Maygay)
-m1guvnora
-m1guvnorb
-m1guvnorc
-m1guvnord
-m1guvnore
-m1guvnorf
-m1guvnorg
-m1guvnorh
-m1guvnori
-m1guvnorj
-m1guvnork
-m1guvnorl
-m1guvnorm
-m1guvnorn
-m1guvnoro
-m1guvnorp
-m1guvnorq
-m1guvnorr
-m1guvnors
-m1guvnort
-m1htclb // Hi Tension Club (Maygay)
-m1htclba
-m1hotpot // Hot Pots (Maygay)
-m1hotpotd
-m1hotpote
-m1hotpoth
-m1hotpoti
-m1hotpotj
-m1hotpotk
-m1hotpotl
-m1hotpotm
-m1hotpotn
-m1hotpoto
-m1hotpotp
-m1hotpotq
-m1hotpotr
-m1hotpots
-m1hotpott
-m1hotpotu
-m1hotpotv
-m1hotpotw
-m1hotpotx
-m1hotpoty
-m1hotpotz
-m1hotpot0
-m1infern // Inferno (Maygay)
-m1inferna
-m1infernb
-m1infernc
-m1infernd
-m1inferne
-m1infernf
-m1inferng
-m1infernh
-m1inferni
-m1infernj
-m1infernk
-m1infernl
-m1imclb // Instant Millionaire Club (Maygay)
-m1imclba
-m1imclbb
-m1inwin // Instant Win (Maygay)
-m1inwina
-m1inwinb
-m1inwinc
-m1inwinf
-m1inwinh
-m1inwini
-m1inwinj
-m1inwink
-m1inwinl
-m1inwinm
-m1inwinn
-m1inwino
-m1inwinp
-m1inwinq
-m1inwinr
-m1inwins
-m1inwint
-m1inwinu
-m1inwinv
-m1inwinw
-m1inwinx
-m1itsko // It's A Knockout (Maygay)
-m1itskoa
-m1itskob
-m1itskoc
-m1itskod
-m1itskoe
-m1itskof
-m1itskog
-m1itskoh
-m1itskoi
-m1itskoj
-m1itskok
-m1itskol
-m1itskom
-m1itskon
-m1itskoo
-m1itskop
-m1itskoq
-m1itskor
-m1itskos
-m1itskot
-m1itskou
-m1itskov
-m1itskow
-m1itskox
-m1itskoy
-m1itskoz
-m1itsko0
-m1itsko1
-m1itsko2
-m1itsko3
-m1itsko4
-m1itsko5
-m1itsko6
-m1itsko7
-m1itsko8
-m1itjob // Italian Job (Maygay)
-m1itjobc
-m1itjobd
-m1itjobe
-m1itjobf
-m1itjobg
-m1itjobh
-m1itjobi
-m1itjobj
-m1itjobk
-m1itjobl
-m1itjobm
-m1itjobn
-m1itjobo
-m1itjobp
-m1itjobq
-m1itjobr
-m1jpmult // Jackpot Multiplier (Maygay)
-m1jpmulta
-m1jbond // James Bond (Maygay)
-m1jbonda
-m1jbondb
-m1jbondc
-m1jbondd
-m1jbonde
-m1jbondf
-m1jbondg
-m1jbondh
-m1jbondi
-m1jbondj
-m1jbondk
-m1jbondl
-m1jbondm
-m1jbondn
-m1jbondo
-m1jbondp
-m1jbondq
-m1jdwins // Jim Davison's Winning Streak (Maygay)
-m1jdwinsa
-m1jdwinsb
-m1jdwinsc
-m1jdwinsd
-m1jdwinse
-m1jdwinsf
-m1jdwinsg
-m1jdwinsh
-m1jdwinsi
-m1jdwinsj
-m1jdwinsk
-m1jdwinsl
-m1jdwinsm
-m1jdwinsn
-m1liveam // Living In America (Maygay)
-m1liveama
-m1liveamb
-m1lotmil // Lottery Millionaire Club (Maygay)
-m1lotmila
-m1lotmilb
-m1lotmilc
-m1luckno // Lucky Numbers (Maygay)
-m1lucknoa
-m1lucknob
-m1lucknoc
-m1lucknod
-m1lucknoe
-m1lucknof
-m1lucknog
-m1lucknoh
-m1lucknoi
-m1lucknoj
-m1lucknok
-m1lucknol
-m1lucknom
-m1lucknon
-m1lucknoo
-m1lucknop
-m1lucknoq
-m1lucknor
-m1lucknos
-m1magic // Magic Squares (Maygay)
-m1magica
-m1magicb
-m1magicc
-m1manhat // Manhattan Skylines (Maygay)
-m1bignit // Mike Reid's Big Night Out (Maygay)
-m1bignita
-m1bignitb
-m1bignitc
-m1mongam // Money Game Club (Maygay)
-m1mongama
-m1mongamb
-m1monmon // Money Money Money (Maygay)
-m1monmona
-m1monmonb
-m1monmonc
-m1monmond
-m1monmone
-m1monmonf
-m1monmong
-m1monmonh
-m1monmoni
-m1monmonj
-m1monmonk
-m1monmonl
-m1monmonm
-m1monmonn
-m1monmono
-m1monmonp
-m1monmonq
-m1monmonr
-m1monmons
-m1monmont
-m1monmonu
-m1monmonv
-m1monmonw
-m1monodt // Monopoly (Maygay) [Dutch]
-m1mono // Monopoly (Maygay)
-m1monoa
-m1monoc
-m1monod
-m1monoe
-m1monof
-m1monog
-m1monoh
-m1monoi
-m1monok
-m1monol
-m1monom
-m1monon
-m1monoo
-m1monop
-m1monoq
-m1monor
-m1monos
-m1monot
-m1monou
-m1monov
-m1monow
-m1monox
-m1monoy
-m1monoz
-m1mono0
-m1mono1
-m1mono2
-m1mono3
-m1mono4
-m1mono5
-m1mono6
-m1mono7
-m1mono8
-m1mono9
-m1monoaa
-m1moncls // Monopoly Classic (Maygay)
-m1monclsa
-m1monclsb
-m1monclsc
-m1monclsd
-m1monclb // Monopoly Club (Maygay)
-m1monclba
-m1monclbb
-m1monclbc
-m1monclbd
-m1monclbe
-m1monclbf
-m1monclbg
-m1monclbh
-m1monclbi
-m1monclbj
-m1monclbk
-m1monclbl
-m1monclbm
-m1monstr // Monster Cash (Maygay)
-m1monstra
-m1monstrb
-m1monstrc
-m1nhp // Noel's House Party (Maygay)
-m1nhpa
-m1nhpb
-m1nhpc
-m1nhpd
-m1nhpe
-m1nhpf
-m1nhpg
-m1nhph
-m1nhpi
-m1nhpj
-m1nhpk
-m1nhpl
-m1nhpm
-m1nudbnk // Nudge Banker (Maygay)
-m1nudbnka
-m1nudbnkb
-m1nudbnkc
-m1nudbnkd
-m1nudbnke
-m1nudbnkf
-m1nudbnkg
-m1nudbnkh
-m1nudbnki
-m1nudbnkj
-m1nudbnkk
-m1nudbnkl
-m1nudbnkm
-m1nudbnkn
-m1nudbnko
-m1nudbnkp
-m1nudbnkq
-m1nudbnkr
-m1nudbnks
-m1nudbnkt
-m1nudbnku
-m1nudbnkv
-m1nudunl // Nudges Unlimited (Maygay)
-m1nudunla
-m1nudunlb
-m1nudunlc
-m1nudunld
-m1nudunle
-m1omega // Omega (Maygay)
-m1omegaa
-m1onbus // On The Buses (Maygay)
-m1onbusa
-m1onbusb
-m1onbusc
-m1onbusd
-m1onbuse
-m1onbusf
-m1onbusg
-m1onbush
-m1onbusi
-m1onbusj
-m1onbusk
-m1onbusl
-m1onbusm
-m1onbusn
-m1onbuso
-m1onbusp
-m1ott // Over The Top (Maygay)
-m1otta
-m1piggy // Piggy Bank (Maygay)
-m1piggya
-m1piggyb
-m1piggyc
-m1ppdt // Pink Panther (Maygay) [Dutch]
-m1pinkp // Pink Panther (Maygay)
-m1pinkpa
-m1pinkpb
-m1pinkpc
-m1pinkpd
-m1pinkpe
-m1pinkpf
-m1pinkpg
-m1pinkph
-m1pinkpi
-m1pinkpj
-m1pinkpk
-m1pinkpl
-m1pinkpm
-m1pinkpn
-m1pinkpo
-m1pinkpp
-m1pinkpq
-m1pinkpr
-m1ppc // Pink Panther Club (Maygay)
-m1ppca
-m1ppcb
-m1przclu // Prize Cluedo (Maygay)
-m1przclua
-m1przclub
-m1przee // Prize Eastenders (Maygay)
-m1przeea
-m1przeeb
-m1przeec
-m1reeldm // Reel Diamonds (Maygay)
-m1reeldma
-m1reeldmb
-m1reeldmc
-m1reeldmd
-m1reeldme
-m1reeldmf
-m1reeldmg
-m1reeldmh
-m1reeldmi
-m1reeldmj
-m1reeldmk
-m1reeldml
-m1reeldmm
-m1reeldmn
-m1reeldmo
-m1retpp // Return Of The Pink Panther (Maygay)
-m1retppa
-m1retppb
-m1retppc
-m1retppd
-m1search // Search Light (Maygay)
-m1searcha
-m1searchb
-m1sixspn // Six Spinner (Maygay)
-m1spid // Spiderman (Maygay)
-m1spida
-m1spidb
-m1sptlgt // Spotlight (Maygay)
-m1sptlgta
-m1sptlgtb
-m1sptlgtc
-m1sptlgtd
-m1sptlgte
-m1sudnim // Sudden Impact (Maygay)
-m1sudnima
-m1sudnimb
-m1sudnimc
-m1sprnov // Super Nova (Maygay)
-m1suppot // Super Pots (Maygay)
-m1suppota
-m1suppotb
-m1suppotc
-m1suppotd
-m1suppote
-m1suppotf
-m1suppotg
-m1suppoti
-m1suppotj
-m1suppotk
-m1suppotl
-m1suppotm
-m1suppotn
-m1suppoto
-m1suppotp
-m1suppotq
-m1suppotr
-m1suppots
-m1suppott
-m1suppotu
-m1suppotv
-m1suppotw
-m1suppotx
-m1suppoty
-m1suppotz
-m1suppot0
-m1taknot // Take Note (Maygay)
-m1tstunt // Test Unit (Maygay)
-m1thatlf // That's Life (Maygay)
-m1thatlfa
-m1thatlfb
-m1thatlfc
-m1thatlfd
-m1topten // Top Tenner (Maygay)
-m1toptena
-m1trivia // Trivial Pursuit (Maygay)
-m1triviaa
-m1triviab
-m1triviac
-m1triviad
-m1triviae
-m1triviaf
-m1triviag
-m1triviah
-m1triviai
-m1triviaj
-m1triviak
-m1trivial
-m1trivian
-m1triviap
-m1triviaq
-m1triviar
-m1trivias
-m1triviat
-m1triviau
-m1triviav
-m1triviaw
-m1triviax
-m1triviay
-m1triviaz
-m1tpclb // Trivial Pursuit Club (Maygay)
-m1tpclba
-m1tpclbb
-m1tpclbc
-m1ultchl // Ultimate Challenge (Maygay)
-m1ultchla
-m1ultchlb
-m1ultchlc
-m1undsie // Under Siege (Maygay)
-m1undsiea
-m1undsieb
-m1undsiec
-m1vegas // Vegas Gambler Club (Maygay)
-m1vegasa
-m1vegasb
-m1wagon // Wagon Trail (Maygay)
-m1wagona
-m1wagonb
-m1wagonc
-m1wotw // War Of The Worlds (Maygay)
-m1wotwa
-m1wotwb
-m1wldzne // Wild Zone (Maygay)
-m1wldznea
-m1wldzneb
-m1wldznec
-m1wldzned
-m1wldznee
-m1wldznef
-m1wldzneg
-m1wldzneh
-m1wldznei
-m1wldznej
-m1wldznek
-m1wldznel
-m1wldznem
-m1wldznen
-m1wldzneo
-m1wldznep
-m1wldzneq
-m1wldzner
-m1wldznes
-m1winenc // Winners Enclosure (Maygay)
-m1winenca
-m1winencb
-m1winencc
-m1simps // The Simpsons (Maygay - Bwb)
-m1simpsa
-m1simpsb
-m1simpsc
-m1simpsd
-m1simpse
-m1simpsf
-m1simpsg
-m1bghou // Big Ghoulies (Gemini)
-m1bghoua
-m1bghoub
-m1bghouc
-m1bghoud
-m1bghoue
-m1bghouf
-m1bghoug
-m1crzco // Crazy Cobra (Gemini)
-m1crzcoa
-m1crzcob
-m1crzcoc
-m1crzcod
-m1crzcoe
-m1hiloc // Hi Lo Casino (Global)
-m1hiloca
-m1jtjob // Just The Job (Global)
-m1jtjoba
-m1jtjobb
-m1jtjobc
-m1jtjobd
-m1jtjobe
-m1kingsw // King Of The Swingers (Global)
-m1kingswa
-m1kingswb
-m1kingswc
-m1lca // Lights Camera Action (Global)
-m1lcaa
-m1lcab
-m1lcac
-m1mb // Monkey Business (Global)
-m1mba
-m1mbb
-m1mbc
-m1mbclb // Monkey Business Club (Global)
-m1sycc // Stake Yer Claim Club (Global)
-m1sycca
-m1syccb
-m1thrill // Thrills 'n' Spills (Global)
-m1thrilla
-m1thrillb
-m1thrillc
-m1trtr // Trick Or Treat (Global)
-m1trtra
-m1trtrcl // Trick Or Treat Club (Global)
-m1vegcrw // Vegetable Crew (Global)
-m1calyps // Calypso (Maygay)
-m1calypsa
-m1calypsb
-m1cashln // Cash Lines (Maygay)
-m1races // A Day At The Races (Maygay)
-m1racesa
-m1racesb
-m1racesc
-m1digdel // Diggers Delight (Global)
-m1digdela
-m1startr // Star Trekking (Mdm)
-m1startra
-m1startrb
-m1startrc
-m1startrd
-m1startre
-m1startrf
-m1startrg
-m1startrh
-m1startri
-m1startrj
-m1startrk
-m1startrm
-m1startrn
-m1startro
-m1startrp
-m1startrq
-m1startrr
-m1ttcash // Tick Tock Cash (Empire)
-m1topstr // Top Strike (Maygay - Bwb)
-m1sirich // Strike It Rich
-m1siricha
-m1sirichb
-m1sirichc
-m1gskill // Greek Skill
-m1luxor // Luxor Casino
-m1luxora
-m1luxorb
-m1luxorc
-m1cashc // Cash Classic
-m1cashca
-m1atunk
-
-// Maygay MV1 hardware
-
-screenpl // Screenplay
-screenp1 //
-screenp1a //
-screenp2 //
-screenp2a //
-screenp3 //
-screenp3a //
-screenp4 //
-mv1bon // Believe It Or Not
-mv1cpc // Caesar's Palace Club
-mv1cpca //
-mv1cpcb //
-mv1cwq // Crossword Quiz
-mv1cwqa //
-mv1guac // Give Us A Clue
-mv1guaca //
-mv1sfx // Special Effects
-mv1sfxa //
-mv1sfx2
-mv1wc // World Cup
-
-// Maygay EPOCH hardware
-ep_simp // The Simpsons (Maygay)
-ep_simpa //
-ep_simpb //
-ep_simpc //
-ep_simpd //
-ep_simpe //
-ep_simpf //
-ep_simpg //
-ep_simph //
-ep_simpj //
-ep_simpk //
-ep_simpl //
-ep_simpm //
-ep_dblim // Double Impact (Maygay - Impulse)
-ep_dblima //
-ep_dblimb //
-ep_dblimc //
-ep_dblimd //
-ep_itjb3 // Italian Job 3 (Maygay)
-ep_itjb3a //
-ep_merln // Merlin's Magic (Maygay)
-ep_wipeo // Wipeout (Maygay)
-ep_wipeoa //
-ep_wipeob //
-ep_wipeoc //
-ep_wipeoe //
-ep_bingb // Bingo Belle (Maygay)
-ep_bingba //
-ep_calyp // Calypso (Maygay)
-ep_calypa //
-ep_cow // Carry On Winning (Maygay)
-ep_cowa //
-ep_cfall // Cash Falls (Maygay)
-ep_cfalla //
-ep_cfallb //
-ep_cfallc //
-ep_cfalld //
-ep_cfalle //
-ep_cfallf //
-ep_cflow // Cash Flow (Maygay)
-ep_cflowa //
-ep_cflowc //
-ep_cflowd //
-ep_doubl // Double Top (Maygay)
-ep_doubla //
-ep_doublb //
-ep_doublc //
-ep_doubld //
-ep_evil // Evil Streak (Maygay)
-ep_evila //
-ep_evilb //
-ep_nyny // New York New York (Maygay)
-ep_nynya //
-ep_nynyb //
-ep_nynyc //
-ep_nynyd //
-ep_nynye //
-ep_nynyf //
-ep_pizza // Pizza The Action (Maygay)
-ep_pizzaa //
-ep_pizzab //
-ep_pizzac //
-ep_crazy // Reel Crazy (Maygay)
-ep_crazya //
-ep_crazyb //
-ep_crazyc //
-ep_crazyd //
-ep_crazye //
-ep_mario // Super Mario (Maygay)
-ep_marioa //
-ep_mariob //
-ep_marioc //
-ep_mariod //
-ep_marioe //
-ep_mariof //
-ep_mariog //
-ep_marioh //
-ep_tincn // Tin Can Alley (Maygay)
-ep_tincna //
-ep_tonfn // Tons Of Fun (Maygay)
-ep_tonfna //
-ep_tcrwn // Triple Crown (Maygay)
-ep_tcrwna //
-ep_tcrwnb //
-ep_tcrwnc //
-ep_tcrwnd //
-ep_tcrwne //
-ep_word // Word Up (Maygay)
-ep_worda //
-ep_wordb //
-ep_wordc //
-ep_wordd //
-ep_worde //
-ep_wordf //
-ep_wordg //
-ep_xtra // X-tra X-tra (Maygay)
-ep_xtraa //
-ep_25crt // 25 Carrot Gold (Maygay)
-ep_25crta //
-ep_25crtb //
-ep_25crtc //
-ep_25crtd //
-ep_bartk // Bar Trekkin (Maygay)
-ep_bartka //
-ep_bartkb //
-ep_bartkc //
-ep_bartkd //
-ep_bartke //
-ep_bartkf //
-ep_batls // Battleships (Maygay)
-ep_batlsa //
-ep_batlsb //
-ep_batlsc //
-ep_bbonz // Bingo Bonanza (Maygay - Union)
-ep_bbonza //
-ep_bubsq // Bubble & Squeak (Extreme)
-ep_bubsqa //
-ep_bubsqb //
-ep_bubsqc //
-ep_bubsqd //
-ep_cdspn // Cardinal Spin (Maygay)
-ep_cdspna //
-ep_cosc // Carry On Screaming (Maygay)
-ep_cosca //
-ep_cahoy // Cash Ahoy (Maygay)
-ep_cahoya //
-ep_cahoyb //
-ep_ccock // Cash Cocktail (Maygay)
-ep_ccocka //
-ep_ccockb //
-ep_ccockc //
-ep_cgord // Cash Gordon (Maygay)
-ep_cgorda //
-ep_cgordb //
-ep_cgordc //
-ep_cshpn // Cash In The Pan (Maygay)
-ep_cshpna //
-ep_ctit // Cash Of The Titans (Maygay)
-ep_ctita //
-ep_cashn // Cashino (Maygay - Extreme)
-ep_cashna //
-ep_casgc // Casino Grand Club (Maygay)
-ep_casgca //
-ep_casgcb //
-ep_casgcc //
-ep_casrd // Casino Royale Deluxe Club (Maygay)
-ep_casrda //
-ep_chock // Chocks Away (Maygay)
-ep_chocka //
-ep_chockb //
-ep_cock // Cock A Doodle Dosh (Maygay - Union)
-ep_cocka //
-ep_cockb //
-ep_cockc //
-ep_cockd //
-ep_cocke //
-ep_commd // Complete Madness (Maygay)
-ep_commda //
-ep_commdb //
-ep_commdc //
-ep_commdd //
-ep_cor2 // Coronation Street 2 (Maygay)
-ep_cor2a //
-ep_cor2b //
-ep_cor2c //
-ep_cormn // Coronation Street Monopoly Club (Maygay)
-ep_cormna //
-ep_cycl // Cyclone Club (Maygay)
-ep_cycla //
-ep_cyclb //
-ep_duff // Duff Beer Guide (Maygay)
-ep_duffa //
-ep_duffb //
-ep_duffc //
-ep_flash // Flashback (Maygay - Impulse)
-ep_flasha //
-ep_flashb //
-ep_flashc //
-ep_flashd //
-ep_flashe //
-ep_flashf //
-ep_fortg // Fortune & Glory (Maygay - Impulse)
-ep_fortga //
-ep_fortgb //
-ep_fran // Frantic (Maygay)
-ep_frana //
-ep_fnclb // Fruit & Nudge Club (Maygay)
-ep_fnclba //
-ep_fgods // Fruit Of The Gods (Maygay)
-ep_fgodsa //
-ep_fgodsb //
-ep_fgodsc //
-ep_fgodsd //
-ep_fgodse //
-ep_fgodsf //
-ep_fgodsg //
-ep_fullm // Full Moon Fever (Maygay - Impulse)
-ep_fullma //
-ep_fullmb //
-ep_fullmc //
-ep_fullmd //
-ep_fullme //
-ep_fullmf //
-ep_funny // Funny Money (Maygay)
-ep_funnya //
-ep_funnyb //
-ep_funnyc //
-ep_funnyd //
-ep_funnye //
-ep_funnyf //
-ep_funnyg //
-ep_geron // Geronimo (Maygay - Impulse)
-ep_gerona //
-ep_geronb //
-ep_geronc //
-ep_gerond //
-ep_gerone //
-ep_gldtp // Gold Top (Maygay)
-ep_gldtpa //
-ep_gesc2 // Great Escape 2 (Maygay)
-ep_gesc2a //
-ep_geclb // Great Escape Club (Maygay)
-ep_geclba //
-ep_geclbb //
-ep_gresc // Great Escape (Maygay)
-ep_gresca //
-ep_gridr // Gridrunner (Maygay - Impulse)
-ep_gridra //
-ep_gridrb //
-ep_gridrc //
-ep_gridrd //
-ep_hhclb // Haunted House Club (Maygay)
-ep_hhclba //
-ep_hhclbb //
-ep_hhclbc //
-ep_hvns // Heavens Above (Maygay)
-ep_hvnsa //
-ep_highv // High Voltage (Maygay - Impulse)
-ep_highva //
-ep_highvb //
-ep_highvc //
-ep_highvd //
-ep_highve //
-ep_highvf //
-ep_hogmn // Hog Money (Maygay - Impulse)
-ep_hogmna //
-ep_hogmnb //
-ep_homer // Homer's Meltdown (Maygay)
-ep_homera //
-ep_homerb //
-ep_homerc //
-ep_homerd //
-ep_homere //
-ep_homerf //
-ep_homerg //
-ep_homerh //
-ep_homeri //
-ep_htdgs // Hot Dogs (Maygay)
-ep_htdgsa //
-ep_hubbl // Hubble Bubble (Maygay)
-ep_hubbla //
-ep_huric // Hurricane (Maygay - Impulse)
-ep_hurica //
-ep_huricb //
-ep_huricc //
-ep_huricd //
-ep_hurice //
-ep_hyst // Hysteria (Maygay - Impulse)
-ep_hysta //
-ep_icebg // Ice Burger (Maygay)
-ep_icebga //
-ep_icebgb //
-ep_icebgc //
-ep_icebgd //
-ep_icebge //
-ep_icebgf //
-ep_icebgg //
-ep_icebgh //
-ep_icebgi //
-ep_inca // Inca Dinka Do (Maygay - Extreme)
-ep_incaa //
-ep_incab //
-ep_itjb2 // Italian Job 2 (Maygay)
-ep_itjb2a //
-ep_itjb2b //
-ep_itjb2c //
-ep_ijcl // Italian Job Club (Maygay)
-ep_ijcla //
-ep_ijob // Italian Job (Maygay)
-ep_ijoba //
-ep_jakbn // Jackpot & The Beanstreak (Extreme)
-ep_jakbna //
-ep_jakbnb //
-ep_jakbnc //
-ep_jsttt // Just The Ticket (Maygay)
-ep_jsttta //
-ep_jstttb //
-ep_jstttc //
-ep_jstttd //
-ep_jsttte //
-ep_jstttf //
-ep_jstttg //
-ep_loadd // Loaded (Maygay)
-ep_loadda //
-ep_lukld // Lucky Ladders (Maygay)
-ep_luklda //
-ep_manic // Manic Miner (Maygay - Impulse)
-ep_manica //
-ep_manicb //
-ep_manicc //
-ep_manicd //
-ep_manice //
-ep_manicf //
-ep_mkart // Mario Kart (Maygay)
-ep_mkarta //
-ep_mkartb //
-ep_mkartc //
-ep_mkartd //
-ep_mkarte //
-ep_matrx // Matrix (Maygay - Impulse)
-ep_midas // Midas Touch Club (Maygay)
-ep_midasa //
-ep_monbs // Monte Carlo Or Bust (Maygay)
-ep_monbsa //
-ep_mwom // Mortal Wombat (Maygay)
-ep_mwoma //
-ep_mwomb //
-ep_mwomc //
-ep_mwomd //
-ep_mrmus // Mr Muscle (Maygay)
-ep_mrmusa //
-ep_noter // Note Runner (Maygay)
-ep_notera //
-ep_noterb //
-ep_noterc //
-ep_noterd //
-ep_notere //
-ep_nuns // Nuns Of Navarone (Maygay)
-ep_nunsa //
-ep_otm // Over The Moon (Maygay)
-ep_otma //
-ep_otmcl // Over The Moon Club (Maygay)
-ep_otmcla //
-ep_ozzie // Ozzie Ozzie Ozzie (Maygay)
-ep_ozziea //
-ep_ozzieb //
-ep_ozziec //
-ep_ozzied //
-ep_ozziee //
-ep_ozzief //
-ep_ozzieg //
-ep_ozzieh //
-ep_pascl // Passport To Riches Classic Club (Maygay)
-ep_pascla //
-ep_passp // Passport To Riches Club (Maygay)
-ep_passpa //
-ep_passpb //
-ep_passpc //
-ep_pharo // Pharaoh's Treasure (Maygay)
-ep_pharoa //
-ep_pesos // Pick Yer Pesos (Maygay - Impulse)
-ep_pesosa //
-ep_pesosb //
-ep_pesosc //
-ep_baskr // Pounds Of The Baskervilles (Maygay)
-ep_baskra //
-ep_baskrb //
-ep_baskrc //
-ep_baskrd //
-ep_baskre //
-ep_pwrpl // Power Play (Maygay)
-ep_pwrpla //
-ep_rags // Rags To Riches Club (Maygay)
-ep_ragsa //
-ep_react // Reactor (Maygay - Impulse)
-ep_reacta //
-ep_reactb //
-ep_reactc //
-ep_reactd //
-ep_reacte //
-ep_roost // Roosters Millions (Maygay)
-ep_roosta //
-ep_rtt // Round The Twist (Maygay)
-ep_rtta //
-ep_royrl // Royal Roulette (Maygay)
-ep_royrla //
-ep_royrlb //
-ep_royrlc //
-ep_royrld //
-ep_royrle //
-ep_scrm // Screamin Demon (Maygay)
-ep_scrma //
-ep_scrmb //
-ep_scrmc //
-ep_secag // Secret Agent (Maygay)
-ep_secaga //
-ep_secagb //
-ep_simfr // Simply Fruits (Maygay)
-ep_simfra //
-ep_srwin // Sir Winalot (Maygay)
-ep_srwina //
-ep_srwinb //
-ep_srwinc //
-ep_srwind //
-ep_spart // Spartacash (Maygay - Impulse)
-ep_sparta //
-ep_spartb //
-ep_spcbw // Special Brew (Maygay)
-ep_spcbwa //
-ep_spcbwb //
-ep_spcbwc //
-ep_spcbwd //
-ep_spcbwe //
-ep_spcbwf //
-ep_spcbwg //
-ep_spcbwh //
-ep_spcbwi //
-ep_spcbwj //
-ep_spcbwk //
-ep_spcbwl //
-ep_spcbwm //
-ep_spec // Spectre (Maygay)
-ep_speca //
-ep_specb //
-ep_spntn // Spin & Tonic (Maygay - Impulse)
-ep_spntna //
-ep_spntnb //
-ep_spntnc //
-ep_spin // Spin On It (Maygay - Impulse)
-ep_spina //
-ep_spinb //
-ep_spinc //
-ep_spind //
-ep_spine //
-ep_step // Stepping Stones (Maygay)
-ep_stepa //
-ep_strat // Stratagem (Maygay)
-ep_strata //
-ep_subb // Subbuteo (Maygay)
-ep_subba //
-ep_subbb //
-ep_subbc //
-ep_subbd //
-ep_subbe //
-ep_subbf //
-ep_subbg //
-ep_snw // Super Nudge Wink (Maygay - Union)
-ep_snwa //
-ep_snwb //
-ep_snwc //
-ep_snwd //
-ep_survi // Survival (Maygay)
-ep_survia //
-ep_tak5 // Take Five (Maygay - Union)
-ep_tak5a //
-ep_tits // Title Shot Club (Maygay)
-ep_titsa //
-ep_titsb //
-ep_tortr // Torture TV (Maygay)
-ep_tortra //
-ep_trail // Trailblazer (Maygay - Impulse)
-ep_traila //
-ep_trailb //
-ep_treas // Treasure Hunt (Global)
-ep_tree // Tree Amigos (Maygay)
-ep_treea //
-ep_trics // Triple Cash (Maygay - Union)
-ep_tricsa //
-ep_tp // Trivial Pursuit (Maygay)
-ep_tpa //
-ep_tpb //
-ep_tp2 // Trivial Pursuit 2 (Maygay)
-ep_tp2a //
-ep_tutcl // Tutankhamun Club (Maygay)
-ep_tutcla //
-ep_tutclb //
-ep_21clb // Twenty One Club (Maygay)
-ep_21clba //
-ep_vipjv // Viper Jive (Maygay - Extreme)
-ep_vipjva //
-ep_vipjvb //
-ep_vipjvc //
-ep_vipjvd //
-ep_wildf // Wildfire (Maygay - Impulse)
-ep_wildfa //
-ep_xspot // X Marks The Spot (Maygay)
-ep_xspota //
-ep_xspotb //
-ep_braid // Bank Raid (Unk)
-ep_braida //
-ep_braidb //
-ep_braidc //
-ep_braidd //
-ep_braide //
-ep_bathl // Bat Outa Hell (Global)
-ep_bathla //
-ep_bathlb //
-ep_bathlc //
-ep_bathld //
-ep_bathle //
-ep_bathlf //
-ep_bathlg //
-ep_bathlh //
-ep_beavr // Casino Beaver Las Vegas (Global)
-ep_beavra //
-ep_beavrb //
-ep_beavrc //
-ep_beavrd //
-ep_beavre //
-ep_beavrf //
-ep_beavrg //
-ep_beavrh //
-ep_beavri //
-ep_beavrj //
-ep_beavrk //
-ep_beavrl //
-ep_beavrm //
-ep_beavrn //
-ep_beavro //
-ep_beav3 //
-ep_beav3a //
-ep_beav3b //
-ep_beav3c //
-ep_bvrcl // Beaver Las Vegas Club (Global)
-ep_bvrcla //
-ep_bvrclb //
-ep_bvrclc //
-ep_bvrcld //
-ep_bvrcle //
-ep_bvrclf //
-ep_bvrclg //
-ep_bvrclh //
-ep_bvrcli //
-ep_bvrclj //
-ep_bvrclk //
-ep_bvruc // Beaver Uncovered (Global)
-ep_bvruca //
-ep_bvrucb //
-ep_bvrucc //
-ep_bjclb // Blackjack Club, The (Global)
-ep_cbrun // Cannonball Run (Global)
-ep_cbruna //
-ep_cbrunb //
-ep_cbrunc //
-ep_cbrund //
-ep_cbrune //
-ep_cbrcl // Cannonball Run Club (Global)
-ep_cbrcla //
-ep_cbrclb //
-ep_cbrclc //
-ep_cbrcld //
-ep_cbrcle //
-ep_cbrclf //
-ep_cbrclg //
-ep_cbrclh //
-ep_cbrcli //
-ep_cbrclj //
-ep_cbrclk //
-ep_cclas // Casino Classic (Global)
-ep_cclasa //
-ep_cgrc // Casino Grand Classic (Unk)
-ep_cgrca //
-ep_cgred // Club Greed (Global)
-ep_cgreda //
-ep_cstrk // Crazy Streak Club (Global)
-ep_cstrka //
-ep_cstrkb //
-ep_cstrkc //
-ep_cstrkd //
-ep_cstrke //
-ep_cstrkf //
-ep_cstrkg //
-ep_ctc // Cut Throat Cash (Global)
-ep_ctca //
-ep_cyc // Cyclone (Unk)
-ep_cyca //
-ep_cycb //
-ep_cycc //
-ep_cycd //
-ep_cyce //
-ep_dmbus // Dambusters (Impulse)
-ep_dmbusa //
-ep_dmbusb //
-ep_dmbusc //
-ep_dmbusd //
-ep_dmbuse //
-ep_dmbusf //
-ep_ddq // Dungeons & Drag Queens (Global)
-ep_ddqa //
-ep_ddqb //
-ep_ddqc //
-ep_ddqd //
-ep_ddqe //
-ep_ddqf //
-ep_ddqg //
-ep_ddqh //
-ep_ddqi //
-ep_ddqcl // Dungeons & Drag Queens Club (Global)
-ep_ddqcla //
-ep_ddqclb //
-ep_ddqclc //
-ep_ddqcld //
-ep_ddqcle //
-ep_ddqclf //
-ep_ddqclg //
-ep_fog // Fields of Gold (Global)
-ep_foga //
-ep_fmf // Full Moon Fever (Global)
-ep_fmfa //
-ep_gtrot // Globe Trotter (Unk)
-ep_gtrota //
-ep_greed // Greed (Global)
-ep_greeda //
-ep_grun // Grid Runner (Global)
-ep_gruna //
-ep_grncl // Grid Runner Club (Global)
-ep_grncla //
-ep_grnclb //
-ep_grnclc //
-ep_heybg // Hey Big Spender (Global)
-ep_heybga //
-ep_heybgb //
-ep_heybgc //
-ep_heybc // Hey Big Spender Club (Global)
-ep_heybca //
-ep_hispr // Hi Spirits (Global)
-ep_hispra //
-ep_hisprb //
-ep_hisprc //
-ep_hisprd //
-ep_hispre //
-ep_hiscl // Hi Spirits Club (Global)
-ep_hiscla //
-ep_spirt // High Spirits (Global)
-ep_spirta //
-ep_spirtb //
-ep_smoke // Holy Smoke! (Impulse)
-ep_smokea //
-ep_smokeb //
-ep_smokec //
-ep_smoked //
-ep_smokee //
-ep_smokef //
-ep_smokeg //
-ep_smokeh //
-ep_smokei //
-ep_smokej //
-ep_hur // Hurricane (Global)
-ep_hura //
-ep_hurb //
-ep_ifern // Inferno (Impulse)
-ep_iferna //
-ep_kopcl // Knockout Punch Club (Global)
-ep_kopcla //
-ep_kopclb //
-ep_ltt // Licence To Thrill (Global)
-ep_ltta //
-ep_ll // Lucky Ladders (Unk)
-ep_lla //
-ep_monrt // Money Returns Club, The (Global)
-ep_monrta //
-ep_monrtb //
-ep_monrtc //
-ep_monrtd //
-ep_monrte //
-ep_monrtf //
-ep_monsh // Moonshine Club, The (Unk)
-ep_monsha //
-ep_monshb //
-ep_monshc //
-ep_monshd //
-ep_monshe //
-ep_monshf //
-ep_mummy // Mummy Talks (Impulse)
-ep_mummya //
-ep_mummyb //
-ep_mummyc //
-ep_mummyd //
-ep_mummye //
-ep_mummyf //
-ep_pkni // The Phoenix Knights (Global)
-ep_pknia //
-ep_pknib //
-ep_pknic //
-ep_pknid //
-ep_pknie //
-ep_pknif //
-ep_redl // Red Line (Unk)
-ep_redla //
-ep_rchik // Rich Chics Club (Unk)
-ep_rchika //
-ep_rlgdt // Reel Good Time Rebuild (Global)
-ep_royrc // Royal Roulette Club (Unk)
-ep_royrca //
-ep_snbev // Saturday Night Beaver (Global)
-ep_snbeva //
-ep_snbevb //
-ep_snbevc //
-ep_snbevd //
-ep_snbeve //
-ep_spook // Spooky Hollow (Global)
-ep_spooka //
-ep_spookb //
-ep_sdcla // Spotted Dick Classic (Global)
-ep_sdclaa //
-ep_sdclab //
-ep_sdclac //
-ep_sdclad //
-ep_sdclae //
-ep_sdclaf //
-ep_sdclag //
-ep_sdclb // Spotted Dick Club (Global)
-ep_sdclba //
-ep_stm // Storm Force (Global)
-ep_stma //
-ep_stmb //
-ep_stmc //
-ep_stmcl // Storm Force Club (Global)
-ep_stmcla //
-ep_snset // Sunset Strip (Unk)
-ep_snseta //
-ep_twarp // Time Warp (Unk)
-ep_twarpa //
-ep_twarpb //
-ep_twarpc //
-ep_tod // Truth Or Dare (Global)
-ep_toda //
-ep_utnut // Utter Nutter (Global)
-ep_utnuta //
-ep_utnutb //
-ep_utnutc //
-ep_utncl // Utter Nutter Club (Global)
-ep_utncla //
-ep_wleek // Weakest Leek Club (Global)
-ep_wleeka //
-ep_wud // What's Up Doc (Global)
-ep_wuda //
-ep_wudb //
-ep_wudc //
-ep_wudd //
-ep_wude //
-ep_milhr // Who Wants To Be A Millionhare? (Global)
-ep_milhra //
-ep_milhrb //
-ep_milhrc //
-ep_milhrd //
-ep_milhre //
-ep_milhrf //
-ep_milhrg //
-ep_mlhrc // Who Whats To Be A Millionhare Club (Global)
-ep_mlhrca //
-ep_mlhrcb //
-ep_mlhrcc //
-ep_mlhrcd //
-ep_mlhrce //
-ep_wf // Wildfire (Global)
-ep_wfa //
-ep_wfb //
-ep_wfc //
-ep_wfd //
-ep_wfe //
-ep_wff //
-ep_wfg //
-ep_bbars // Balloon Bars (Maygay)
-ep_bbarsa //
-ep_bbarsb //
-ep_bbarsc //
-ep_cslay // Cash Slayer (Global)
-ep_cslaya //
-ep_monky // Monkey Business (Global)
-ep_monkya //
-ep_makmv // Make Your Move (Global)
-ep_makmva //
-ep_lug // London Underground (Maygay)
-ep_luga //
-ep_lugb //
-ep_lugc //
-ep_crzbn // Crazy Bingo (Maygay)
-ep_crzbna //
-ep_crzbnb //
-ep_crzbnc //
-ep_cascz // Casino Crazy (Global)
-ep_cascza //
-ep_wside // Wildside (Global)
-ep_wsidea //
-ep_goldf // Gold Fever (Impulse)
-ep_imj // I'm A Jackpot (Global)
-ep_party
-
-
-// MPU2
-
-m2hilite // Hi-Lights (Barcrest) (MPU2)
-m2svlite // Silver Lights (Barcrest) (MPU2)
-
-// MPU3
-
-m3tst // MPU3 Unit Test (Program 5) (Barcrest)
-
-m3autort // Autoroute (Barcrest)
-m3big20j // Big 20 Joker (Barcrest)
-m3biggam // The Big Game (Barcrest)
-m3bigsht // Big Shot (Barcrest)
-m3blkhle // Black Hole (Barcrest)
-m3cabret // Cabaret (Barcrest)
-m3cabreta //
-m3cunlim // Chances Unlimited (Barcrest)
-m3cskill // Circle Skill (Barcrest)
-m3cjoker // Crazy Joker (Barcrest)
-m3xchngg // Exchanges Galore (Barcrest)
-m3xchngu // Exchanges Unlimited (Barcrest)
-m3xchngua //
-m3fortun // Fortune Numbers (Barcrest)
-m3fortuna //
-m3fortund //
-m3gaward // Golden Award (Barcrest)
-m3hprvpr // Hyper Viper (Barcrest)
-m3snappy // Snappy Viper (Barcrest)
-m3replay // Instant Replay (Barcrest)
-m3lineup // Line Up (Barcrest)
-m3llotto // Lucky Lotto (Barcrest)
-m3lstrik // Lucky Strike Club (Barcrest)
-m3lstrika //
-m3magrp // Magic Replay (Barcrest)
-m3nnice // Naughty But Nice (Barcrest)
-m3nudge // Nudges Unlimited (Barcrest)
-m3oddson // Odds On (Barcrest)
-m3optunl // Options Unlimited (Barcrest)
-m3razdaz // Razzle Dazzle (Barcrest)
-m3razdaza //
-m3razdazd //
-m3rxchng // Royal Exchange Club (Barcrest)
-m3circle // Special Circle Club (Barcrest)
-m3circlea //
-m3circleb //
-m3slight // Strike A Light (Barcrest)
-m3supadr // Super Adders & Ladders (Barcrest)
-m3sdeal // Super Deal (Barcrest)
-m3sexcu // Super Exchanges Unlimited (Barcrest)
-m3suplin // Super Line Up (Barcrest)
-m3suplina //
-m3supnud // Super Nudges Unlimited (Barcrest)
-m3supser // Super Series (Barcrest)
-m3sweep // Sweep Stake Club (Barcrest)
-m3sweepa //
-m3topsht // Top Shot (Barcrest)
-m3winstra // Winstrike (Barcrest)
-
-/* Bwb */
-
-m3acech // Ace Chase (Bwb)
-m3bankr // Banker (Bwb)
-m3chase // Chase It (Bwb)
-m3gmine // Gold Mine (Bwb)
-m3ratrce // Rat Race (Bwb)
-m3supasw // Supaswop (Bwb)
-m3supwin // Super Win (Bwb)
-m3supwina //
-m3winagn // Win-A-Gain (Bwb)
-m3winagna //
-m3winagnb //
-m3winstr // Winstrike (Bwb)
-
-/* Pcp */
-
-m3cdash // Cash Dash (Pcp)
-m3loony // Loonybin (Pcp)
-m3online // On Line (Pcp)
-m3rockpl // Rock Pile (Pcp)
-m3rollem // Roll 'Em (Pcp)
-m3snaphp // Snap Happy (Pcp)
-m3spoof // Spoof (Pcp)
-m3spoofa //
-m3supspo // Super Spoof (Pcp)
-m3supspoa //
-m3toplin // Top Line (Pcp)
-m3wigwam // Wig Wam (Pcp)
-
-
-/* Mdm */
-
-m3gcrown // Golden Crowns (Mdm)
-m3tfair // Tuppenny Fair (Mdm)
-m3wacky // Wacky Racer (Mdm)
-
-/* VFS */
-m3oxo // Noughts 'n' Crosses (VFS)
-m3mremon // More Money (VFS)
-
-/* Others */
-
-m3minmax // Mini Max (Associated Leisure)
-m3scoop // Scoop (Peter Simper, prototype?)
-m3tlktwn // Talk of The Town (Unknown)
-
-// MPU4
-
-/* Barcrest */
-
-m4tst // MPU4 Unit Test (Program 4)
-m4tst2 // MPU4 Unit Test (Program 2)
-m4rltst // MPU4 Reel Test (3.0)
-m4clr // MPU4 Meter Clear ROM
-
-
-m4tenten // 10 X 10 (Barcrest)
-m4tenten__a //
-m4tenten__b //
-m4tenten__c //
-m4tenten__d //
-m4tenten__e //
-m4tenten__f //
-m4tenten__g //
-m4tenten__h //
-m4tenten__i //
-m4tenten__j //
-m4tenten__k //
-m4tenten__l //
-m4tenten__m //
-m4tenten__n //
-m4tenten__o //
-m4tenten__p //
-m4tenten__q //
-m4tenten__r //
-m4tenten__s //
-m4tenten__t //
-m4tenten__u //
-m4tenten__v //
-m4tenten__w //
-m4tenten__x //
-m4tenten__y //
-m4tenten__z //
-m4tenten__0 //
-m4tenten__1 //
-m4tenten__2 //
-m4tenten__3 //
-m4tenten__4 //
-m4tenten__5 //
-m4tenten__6 //
-m4tenten__7 //
-m4tenten__8 //
-m4tenten__9 //
-m4tenten__aa //
-m4tenten__ab //
-m4tenten__ac //
-m4tenten__ad //
-m4tenten__ae //
-m4tenten__af //
-m4tenten__ag //
-m4tenten__ah //
-m4tenten__ai //
-m4tenten__aj //
-m4tenten__ak //
-m4tenten__al //
-m4tenten__am //
-m4tenten__an //
-m4tenten__ao //
-m4tenten__ap //
-m4tenten__aq //
-m4tenten__ar //
-m4tenten__as //
-m4tenten__at //
-m4tenten__au //
-m4tenten__av //
-m4tenten__aw //
-m4tenten__ax //
-m4tenten__ay //
-m4tenten__az //
-m4tenten__a0 //
-m4tenten__a1 //
-m4tenten__a2 //
-m421club // 21 Club (Barcrest)
-m4actbnk // Action Bank (Barcrest)
-m4actbnk__a //
-m4actbnk__b //
-m4actbnk__c //
-m4actbnk__d //
-m4actbnk__e //
-m4actbnk__f //
-m4actbnk__g //
-m4actbnk__h //
-m4actbnk__i //
-m4actbnka //
-m4actbnkb //
-m4actclb // Action Club (Barcrest)
-m4actclba //
-m4actnot // Action Note (Barcrest)
-m4actpak // Action Pack (Barcrest)
-m4actpaka //
-m4addr // Adders & Ladders (Barcrest)
-m4addr_h1 //
-m4addr6lybd //
-m4addr6lc //
-m4addr6ld //
-m4addr6lyd //
-m4addr6lk //
-m4addr_h2 //
-m4addr6ly //
-m4addr3_d //
-m4addr10 //
-m4addr3 //
-m4addr4 //
-m4addr5 //
-m4addr5_a //
-m4addr10yd //
-m4addr3yd //
-m4addr4yd //
-m4addr5yd //
-m4addr5yd_a //
-m4addr10d //
-m4addr3d //
-m4addr4d //
-m4addr5d //
-m4addr5d_a //
-m4addr10_a //
-m4addr4_a //
-m4addr10yd_a //
-m4addr10d_a //
-m4addr3_a //
-m4addr3_b //
-m4addr3_c //
-m4addr3yd_a //
-m4addr3yd_b //
-m4addr3yd_c //
-m4addr3d_a //
-m4addr3d_b //
-m4addr3d_c //
-m4addr10c //
-m4addr4c //
-m4addr5c //
-m4addr5c_a //
-m4addr10c_a //
-m4addr4c_a //
-m4addr4c_b //
-m4addrd //
-m4addrc // Adders & Ladders Classic (Barcrest)
-m4addrc__a //
-m4addrc__b //
-m4addrc__c //
-m4addrc__d //
-m4addrc__e //
-m4addrc__f //
-m4addrc__h //
-m4addrc__i //
-m4addrc__j //
-m4addrc__k //
-m4addrc__l //
-m4addrc__m //
-m4addrc__n //
-m4addrcc // Adders & Ladders Classic Club (Barcrest)
-m4addrcc__a //
-m4addrcc__b //
-m4addrcc__c //
-m4addrcc__d //
-m4alladv // All Cash Advance (Barcrest)
-m4alpha // Alphabet (Barcrest)
-m4ambass // Ambassador (Barcrest)
-m4amhiwy // American Highway (Barcrest)
-m4andycp // Andy Capp (Barcrest)
-m4andycpacc_b //
-m4andycpacc_c //
-m4andycpaccsd //
-m4andycpacc_d //
-m4andycp10c_c //
-m4andycpc2_a //
-m4andycp20_b //
-m4andycpdy_a //
-m4andycpacc_e //
-m4andycp10c_a //
-m4andycp10c_b //
-m4andycp8ad //
-m4andycp8b //
-m4andycp8c //
-m4andycp8d //
-m4andycp8kd //
-m4andycp8yd //
-m4andycp8k //
-m4andycp8 //
-m4andycp8y //
-m4andycpdc //
-m4andycpdd //
-m4andycpdyd //
-m4andycpdk //
-m4andycpd //
-m4andycpdy //
-m4andycpc2ad //
-m4andycpc2b //
-m4andycpc2bd //
-m4andycpc2d //
-m4andycpc2kd //
-m4andycpc2rd //
-m4andycpc2yd //
-m4andycpc2k //
-m4andycpc2r //
-m4andycpc2 //
-m4andycpc2y //
-m4andycpc5ad //
-m4andycpc5b //
-m4andycpc5bd //
-m4andycpc5d //
-m4andycpc5kd //
-m4andycpc5yd //
-m4andycpc5k //
-m4andycpc5 //
-m4andycpc5y //
-m4andycpack //
-m4andycpac //
-m4andycpacyd //
-m4andycpacd //
-m4andycp10k //
-m4andycp10yd //
-m4andycp10d //
-m4andycpacc_a //
-m4andycpac_a //
-m4andycp10c_d //
-m4andycp10_a //
-m4andycp20 //
-m4andycp20_a //
-m4andycpacc //
-m4andycp10c //
-m4andycpdut // (Dutch set)
-m4andyfl // Andy Loves Flo (Barcrest)
-m4andyfl3ad //
-m4andyfl3b //
-m4andyfl3bd //
-m4andyfl3d //
-m4andyfl3kd //
-m4andyfl3yd //
-m4andyfl3k //
-m4andyfl3 //
-m4andyfl3y //
-m4andyfl8ad //
-m4andyfl8b //
-m4andyfl8bd //
-m4andyfl8c //
-m4andyfl8d //
-m4andyfl8kd //
-m4andyfl8k //
-m4andyfl8 //
-m4andyfl8y //
-m4andyflfb //
-m4andyflfc //
-m4andyflfk //
-m4andyflfr //
-m4andyflf //
-m4andyfltad //
-m4andyfltb //
-m4andyfltbd //
-m4andyfltd //
-m4andyfltkd //
-m4andyfltrd //
-m4andyfltyd //
-m4andyfltk //
-m4andyfltr //
-m4andyflt //
-m4andyflty //
-m4andyfluad //
-m4andyflub //
-m4andyflubd //
-m4andyflud //
-m4andyflukd //
-m4andyflurd //
-m4andyfluyd //
-m4andyfluk //
-m4andyflur //
-m4andyflu //
-m4andyfluy //
-m4andyfl8bs //
-m4andybt // Andy's Big Time Club (Barcrest)
-m4andybt__a //
-m4andybt__b //
-m4andybt__c //
-m4andyfh // Andy's Full House (Barcrest)
-m4andyfh__a //
-m4andyfh__b //
-m4andyfh__c //
-m4andyfh__d //
-m4andyfh__e //
-m4andyfh__f //
-m4andyfh__g //
-m4andyfh__h //
-m4andyfh__i //
-m4andyfh__j //
-m4andyfh__k //
-m4andyfh__l //
-m4andyfh__m //
-m4andyfh__n //
-m4andyfh__o //
-m4andyfh__p //
-m4andyfh__q //
-m4andyfh__r //
-m4andyfh__s //
-m4andyfh__t //
-m4andyfh__u //
-m4andyfh__v //
-m4andyfh__w //
-m4andyfh__x //
-m4andyfh__y //
-m4andyfh__z //
-m4andyfh__0 //
-m4andyfh__1 //
-m4andyfh__2 //
-m4andyfh__3 //
-m4andyfh__4 //
-m4andyfh__5 //
-m4andyfh__6 //
-m4andyfh__7 //
-m4andyfh__8 //
-m4andyfh__9 //
-m4andyfh__aa //
-m4andyfh__ab //
-m4andyfh__ac //
-m4andyfh__ad //
-m4andyfh__ae //
-m4andyfh__af //
-m4andyfh__ag //
-m4andyfh__ah //
-m4andyfh__ai //
-m4andyfh__aj //
-m4andyfh__ak //
-m4andyfh__al //
-m4andyfh__am //
-m4andyfh__an //
-m4andyfh__ao //
-m4andyfh__ap //
-m4andyfh__aq //
-m4andyfh__ar //
-m4andyfh__as //
-m4andyfh__at //
-m4andyfh__au //
-m4andyfh__av //
-m4andyfh__aw //
-m4andyfh__ax //
-m4andyfh__ay //
-m4andyfh__az //
-m4andyfh__a0 //
-m4andyfh__a1 //
-m4andyfh__a2 //
-m4andyfh__a3 //
-m4andyfh__a4 //
-m4andyge // Andy's Great Escape (Barcrest)
-m4andyge28ad //
-m4andyge28b //
-m4andyge28bd //
-m4andyge28c //
-m4andyge28d //
-m4andyge28kd //
-m4andyge28yd //
-m4andyge28k //
-m4andyge28 //
-m4andyge28y //
-m4andyge2tad //
-m4andyge2tb //
-m4andyge2tbd //
-m4andyge2td //
-m4andyge2tkd //
-m4andyge2tyd //
-m4andyge2tk //
-m4andyge2t //
-m4andyge2ty //
-m4andyge5tad //
-m4andyge5tb //
-m4andyge5tbd //
-m4andyge5td //
-m4andyge5tkd //
-m4andyge5tyd //
-m4andyge5tk //
-m4andyge5t //
-m4andyge5ty //
-m4andyge_hx1 //
-m4andygegc2d //
-m4andyge_h1 //
-m4andyge_h3 //
-m4andyge_h2 //
-m4andygen2_a //
-m4andygeg5a //
-m4andygen2c //
-m4andygen2d //
-m4andygen2k //
-m4andygen2y //
-m4andygegc2 //
-m4andygeg5k //
-m4andygeg5 //
-m4andygeg5yd //
-m4andygeg5d //
-m4andygeg_2k //
-m4andygeg_2 //
-m4andygeg_2yd //
-m4andygeg_2d //
-m4andyge_hx4 //
-m4andyge_hx5 //
-m4andyge_h4 //
-m4andyge_hx2 //
-m4andyge_hx3 //
-m4andygeg5c //
-m4andygeg_2c //
-m4apach // Apache (Barcrest)
-m4atlan // Atlantis (Barcrest)
-m4bagtel // Bagatelle (Barcrest)
-m4bagtel__a //
-m4bagtel__b //
-m4bagtel__c //
-m4bagtel__d //
-m4bagtel__e //
-m4bagtel__f //
-m4bagtel__g //
-m4bagtel__h //
-m4bagtel__i //
-m4bagtel__j //
-m4bagtel__k //
-m4bagtel__l //
-m4bagtel__m //
-m4bagtel__n //
-m4bagtel__o //
-m4bagtel__p //
-m4bagtel__q //
-m4bagtel__r //
-m4bagtel__s //
-m4bagtel__t //
-m4bagtel__u //
-m4bagtel__v //
-m4bagtel__w //
-m4bagtel__x //
-m4bagtel__y //
-m4bagtel__z //
-m4bagtel__0 //
-m4bagtel__1 //
-m4bagtel__2 //
-m4bagtel__3 //
-m4bagtel__4 //
-m4bagtel__5 //
-m4bagtel__6 //
-m4bagtel__7 //
-m4bagtel__8 //
-m4bagtel__9 //
-m4bagtel__aa //
-m4bagtel__ab //
-m4bagtel__ac //
-m4bagtel__ad //
-m4bagtel__ae //
-m4bagtel__af //
-m4bagtel__ag //
-m4bnknot // Bank A Note (Barcrest)
-m4bnkrol // Bank Roller Club (Barcrest)
-m4bnkrol__a //
-m4bnkrol__b //
-m4bnkrol__c //
-m4bnkrol__d //
-m4bnkrol__e //
-m4btclok // Beat The Clock (Barcrest)
-m4berser // Berserk (Barcrest)
-m4berser__a //
-m4berser__b //
-m4berser__c //
-m4berser__d //
-m4berser__e //
-m4berser__f //
-m4berser__g //
-m4berser__h //
-m4berser__i //
-m4berser__j //
-m4berser__k //
-m4berser__l //
-m4berser__m //
-m4berser__n //
-m4berser__o //
-m4berser__p //
-m4berser__q //
-m4berser__r //
-m4berser__s //
-m4berser__t //
-m4berser__u //
-m4berser__v //
-m4berser__w //
-m4berser__x //
-m4berser__y //
-m4berser__z //
-m4berser__0 //
-m4berser__1 //
-m4bigbn // Big Ben (Barcrest)
-m4bigchf // Big Chief (Barcrest)
-m4bigchfa //
-m4bigchfb //
-m4bigchfc //
-m4bigchd //
-m4blkwhd // Black & White (Barcrest) [Dutch]
-m4blkbul // Black Bull (Barcrest)
-m4blkbuld //
-m4blkcat // Black Cat (Barcrest)
-m4bj // Black Jack (Barcrest) [Dutch]
-m4bjc // Black Jack Club (Barcrest) [Dutch]
-m4bjac // Blackjack Club (Barcrest)
-m4bjaca //
-m4bjack // Blackjack (Barcrest)
-m4bjacka //
-m4bjsm // Blackjack Super Multi (Barcrest)
-m4bjsma //
-m4blstbk // Blast A Bank (Barcrest)
-m4bluedm // Blue Diamond (Barcrest)
-m4bluemn // Blue Moon (Barcrest)
-m4bluemna //
-m4bluemnb //
-m4bdash // Boulder Dash (Barcrest)
-m4bdash__a //
-m4bdash__b //
-m4bdash__c //
-m4bdash__d //
-m4bdash__e //
-m4bdash__f //
-m4bdash__g //
-m4bdash__h //
-m4bdash__i //
-m4bdash__j //
-m4bdash__k //
-m4bdash__l //
-m4bdash__m //
-m4bdash__n //
-m4bdash__o //
-m4bdash__p //
-m4bdash__q //
-m4bdash__r //
-m4bdash__s //
-m4bdash__t //
-m4bdash__u //
-m4bdash__v //
-m4bdash__w //
-m4bdash__x //
-m4bdash__y //
-m4bdash__z //
-m4bdash__0 //
-m4bdash__1 //
-m4bdash__2 //
-m4bdash__3 //
-m4bdash__4 //
-m4bdash__5 //
-m4bdash__6 //
-m4bdash__7 //
-m4bdash__8 //
-m4bdash__9 //
-m4bdash__aa //
-m4bdash__ab //
-m4bdash__ac //
-m4bdash__ad //
-m4bdash__ae //
-m4bdash__af //
-m4bdash__ag //
-m4bdash__ah //
-m4bdash__ai //
-m4bdash__aj //
-m4bdash__ak //
-m4bdash__al //
-m4bdash__am //
-m4bdash__an //
-m4bdash__ao //
-m4bdash__ap //
-m4bdash__aq //
-m4bdash__ar //
-m4bdash__as //
-m4bdash__at //
-m4bdash__au //
-m4bdash__av //
-m4bdash__aw //
-m4bdash__ax //
-m4bdash__ay //
-m4bdash__az //
-m4bdash__a0 //
-m4bdash__a1 //
-m4bdash__a2 //
-m4bdash__a3 //
-m4bdash__a4 //
-m4brktak // Break & Take (Barcrest)
-m4brdway // Broadway (Barcrest) [Dutch]
-m4brook // Brooklyn (Barcrest)
-m4buc // Buccaneer (Barcrest)
-m4buc__a //
-m4buc__b //
-m4buc__c //
-m4buc__d //
-m4buc__e //
-m4buc__f //
-m4buc__g //
-m4buc__h //
-m4buc__i //
-m4buc__j //
-m4buc__k //
-m4buc__l //
-m4buc__m //
-m4buc__n //
-m4buc__o //
-m4buc__p //
-m4buc__q //
-m4buc__r //
-m4buc__s //
-m4buc__t //
-m4buc__u //
-m4buc__v //
-m4buc__w //
-m4buc__x //
-m4buc__y //
-m4buc__z //
-m4buc__0 //
-m4buc__1 //
-m4buc__2 //
-m4buc__3 //
-m4buc__4 //
-m4buc__5 //
-m4buc__6 //
-m4buc__7 //
-m4buc__8 //
-m4buc__9 //
-m4buc__aa //
-m4buc__ab //
-m4buc__ac //
-m4buc__ad //
-m4buc__ae //
-m4buc__af //
-m4buc__ag //
-m4buc__ah //
-m4buc__ai //
-m4buc__aj //
-m4buc__ak //
-m4buc__al //
-m4buc__am //
-m4buc__an //
-m4buc__ao //
-m4buc__ap //
-m4buc__aq //
-m4buc__ar //
-m4buc__as //
-m4buc__at //
-m4buc__au //
-m4buc__av //
-m4buc__aw //
-m4buc__ax //
-m4buc__ay //
-m4buc__az //
-m4bucks // Bucks Fizz Club (Barcrest)
-m4calama // Calamari Club (Barcrest)
-m4calama__a //
-m4calama__b //
-m4calama__c //
-m4calama__d //
-m4calama__e //
-m4calama__f //
-m4calama__g //
-m4calama__h //
-m4calama__i //
-m4calama__j //
-m4calicl // California Club (Barcrest)
-m4calicla //
-m4caliclb //
-m4caliclc //
-m4calicld //
-m4cardcs // Card Cash (Barcrest)
-m4cojok // Carry On Joker (Barcrest)
-m4cojok__a //
-m4cojok__b //
-m4cojok__c //
-m4cojok__d //
-m4cojok__e //
-m4cojok__f //
-m4cashat // Cash Attack (Barcrest)
-m4cashat__a //
-m4cashat__b //
-m4cashat__c //
-m4cashat__d //
-m4cashat__e //
-m4cashat__f //
-m4cashat__g //
-m4cashat__h //
-m4cashat__i //
-m4cashat__j //
-m4cashat__k //
-m4cashat__l //
-m4cashat__m //
-m4cashat__n //
-m4cashat__o //
-m4cashat__p //
-m4cashat__q //
-m4cashat__r //
-m4cashat__s //
-m4cashat__t //
-m4cashat__u //
-m4cashat__v //
-m4cashat__w //
-m4cashat__x //
-m4cashat__y //
-m4cashat__z //
-m4cashat__0 //
-m4cashat__1 //
-m4cashat__2 //
-m4cashat__3 //
-m4cashat__4 //
-m4cashat__5 //
-m4cashat__6 //
-m4cashat__7 //
-m4cashat__8 //
-m4cashat__9 //
-m4cashat__aa //
-m4cashat__ab //
-m4cashat__ac //
-m4cashat__ad //
-m4cashat__ae //
-m4cashat__af //
-m4cashat__ag //
-m4cashat__ah //
-m4cashat__ai //
-m4cashat__aj //
-m4cashat__ak //
-m4cashat__al //
-m4cashat__am //
-m4cashat__an //
-m4cashat__ao //
-m4cashat__ap //
-m4cashat__aq //
-m4cashat__ar //
-m4cashcn // Cash Connect (Barcrest)
-m4cashco // Cash Counter (Barcrest)
-m4cashcoa //
-m4cashcob //
-m4cashcoc //
-m4cashcod //
-m4cashln // Cash Lines (Barcrest)
-m4cashln__a //
-m4cashln__b //
-m4cashln__c //
-m4cashln__d //
-m4cashln__e //
-m4cashln__f //
-m4cashln__g //
-m4cashln__h //
-m4cashln__i //
-m4cashln__j //
-m4cashln__k //
-m4cashln__l //
-m4cashln__m //
-m4cashln__n //
-m4cashln__o //
-m4cashln__p //
-m4cashln__q //
-m4cashln__r //
-m4cashln__s //
-m4cashln__t //
-m4cashln__u //
-m4cashln__v //
-m4cashln__w //
-m4cashln__x //
-m4cashln__y //
-m4cashln__z //
-m4cashln__0 //
-m4cashln__1 //
-m4cashln__2 //
-m4cashln__3 //
-m4cashln__4 //
-m4cashln__5 //
-m4cashln__6 //
-m4cashln__7 //
-m4cashln__8 //
-m4cashln__9 //
-m4cashln__aa //
-m4cashln__ab //
-m4cashln__ac //
-m4cashln__ad //
-m4cashln__ae //
-m4cashln__af //
-m4cashln__ag //
-m4cashln__ah //
-m4cashln__ai //
-m4cashln__aj //
-m4cashln__ak //
-m4cashln__al //
-m4cashln__am //
-m4cashln__an //
-m4cashln__ao //
-m4cashln__ap //
-m4cashln__aq //
-m4cashln__ar //
-m4cashln__as //
-m4cashln__at //
-m4cashln__au //
-m4cashln__av //
-m4cashln__aw //
-m4cashln__ax //
-m4cashln__ay //
-m4cashln__az //
-m4cashln__a0 //
-m4cashln__a1 //
-m4cashln__a2 //
-m4cashln__a3 //
-m4cashln__a4 //
-m4cashln__a5 //
-m4cashln__a6 //
-m4cashln__a7 //
-m4cashln__a8 //
-m4cashln__a9 //
-m4cashln__ba //
-m4cashln__bb //
-m4cashln__bc //
-m4cashln__bd //
-m4cashln__be //
-m4cashln__bf //
-m4cashln__bg //
-m4cashln__bh //
-m4cashln__bi //
-m4cashln__bj //
-m4cashmn // Cash Machine (Barcrest)
-m4cashmn__a //
-m4cashmn__b //
-m4cashmn__c //
-m4cashmn__d //
-m4cashmn__e //
-m4cashmn__f //
-m4cashmn__g //
-m4cashmn__h //
-m4cashmn__i //
-m4cashmn__j //
-m4cashmn__k //
-m4cashmn__l //
-m4cashmn__m //
-m4cashmn__n //
-m4cashmn__o //
-m4cashmn__p //
-m4cashmn__q //
-m4cashmn__r //
-m4cashmn__s //
-m4cashmn__t //
-m4cashmn__u //
-m4cashmn__v //
-m4cashmn__w //
-m4cashmn__x //
-m4cashmn__y //
-m4cashmn__z //
-m4cashmn__0 //
-m4cashmn__1 //
-m4cashmn__2 //
-m4cashmn__3 //
-m4cashmn__4 //
-m4cashmn__5 //
-m4cashmn__6 //
-m4cashmn__7 //
-m4cashmn__8 //
-m4cashmn__9 //
-m4cashmn__aa //
-m4cashmn__ab //
-m4cashmn__ac //
-m4cashmn__ad //
-m4cashmn__ae //
-m4cashmn__af //
-m4cashmn__ag //
-m4cashmn__ah //
-m4cashmn__ai //
-m4cashmn__aj //
-m4cashmn__ak //
-m4cashmn__al //
-m4cashmn__za //
-m4cashmn__zb //
-m4cashmx // Cash Matrix (Barcrest)
-m4cashmxa //
-m4cashzn // Cash Zone (Barcrest)
-m4cashzna //
-m4casmul // Casino Multiplay (Barcrest)
-m4celclb // Celebration Club (Barcrest)
-m4centpt // Centrepoint (Barcrest)
-m4centpta // Centrepoint (Barcrest)
-m4ceptr // Ceptor (Barcrest)
-m4chasei // Chase Invaders (Barcrest)
-m4chaseia //
-m4chaseib //
-m4chaseic //
-m4chaseid //
-m4chaseie //
-m4chaseif //
-m4cheryo // Cherryo (Barcrest)
-m4click // Clickity Click (Barcrest)
-m4c999 // Cloud 999 (Barcrest)
-m4c999a //
-m4c999b //
-m4c999c //
-m4c9 // Cloud Nine (Barcrest)
-m4c9__a //
-m4c9__b //
-m4c9__c //
-m4c9__d //
-m4c9__e //
-m4c9__f //
-m4c9__g //
-m4c9__h //
-m4c9__i //
-m4c9__j //
-m4c9__k //
-m4c9__l //
-m4c9__m //
-m4c9__n //
-m4c9__o //
-m4c9__p //
-m4c9__q //
-m4c9__r //
-m4c9__s //
-m4c9__t //
-m4c9__u //
-m4c9__v //
-m4c9__w //
-m4c9__x //
-m4c9__y //
-m4c9__z //
-m4c9__0 //
-m4c9__1 //
-m4c9__2 //
-m4c9__3 //
-m4c9__4 //
-m4c9__5 //
-m4c9__6 //
-m4c9__7 //
-m4c9__8 //
-m4c9__9 //
-m4c9__aa //
-m4c9__ab //
-m4c9__ac //
-m4c9__ad //
-m4c9__ae //
-m4c9__af //
-m4c9__ag //
-m4c9__ah //
-m4c9__ai //
-m4c9__aj //
-m4c9__ak //
-m4c9__al //
-m4c9__am //
-m4c9__an //
-m4c9__ao //
-m4c9__ap //
-m4c9__aq //
-m4c9__ar //
-m4c9__as //
-m4c9__at //
-m4c9__au //
-m4c9__av //
-m4c9__aw //
-m4c9__ax //
-m4c9__ay //
-m4c9__az //
-m4c9__a0 //
-m4c9__a1 //
-m4c9__a2 //
-m4c9__a3 //
-m4c9c // Cloud Nine Club (Barcrest)
-m4clbcls // Club Classic (Barcrest)
-m4clbclm // Club Climber (Barcrest)
-m4clbclma //
-m4clbcnt // Club Connect (Barcrest)
-m4clbcnta //
-m4clbcntb //
-m4clbcntc //
-m4clbcntd //
-m4clbdbl // Club Double (Barcrest)
-m4clbshf // Club Shuffle (Barcrest)
-m4clbveg // Club Vegas (Barcrest)
-m4clbvega //
-m4clbvegb //
-m4clbvegc //
-m4clbx // Club X (Barcrest)
-m4clbxa //
-m4clbxb //
-m4copcsh // Coppa Cash (Barcrest)
-m4coscas // Cosmic Casino (Barcrest)
-m4coscas__a //
-m4coscas__b //
-m4coscas__c //
-m4coscas__d //
-m4coscas__e //
-m4coscas__f //
-m4coscas__g //
-m4coscas__h //
-m4coscas__i //
-m4coscas__j //
-m4coscas__k //
-m4coscas__l //
-m4coscas__m //
-m4coscas__n //
-m4coscas__o //
-m4coscas__p //
-m4coscas__q //
-m4coscas__r //
-m4coscas__s //
-m4coscas__t //
-m4coscas__u //
-m4coscas__v //
-m4crkpot // Crackpot Club (Barcrest)
-m4crkpota //
-m4crkpotb //
-m4crzjk // Crazy Jokers (Barcrest)
-m4crzjwl // Crown Jewels (Barcrest)
-m4crzjwla //
-m4crzjwlb //
-m4crzjwlc //
-m4crzjwld //
-m4crzjwle //
-m4crzjwlf //
-m4crzjwlg //
-m4crzjwlh //
-m4crjwl // Crown Jewels Club (Barcrest)
-m4crjwla //
-m4crjwlb //
-m4crjwlc //
-m4crjwl2 // Crown Jewels Mk II Club (Barcrest)
-m4crjwl2a //
-m4crjwl2b //
-m4crdome // Crystal Dome (Barcrest)
-m4crdome__a //
-m4crdome__b //
-m4crdome__c //
-m4crdome__d //
-m4crdome__e //
-m4crdome__f //
-m4crdome__g //
-m4crdome__h //
-m4crdome__i //
-m4crdome__j //
-m4crdome__k //
-m4crdome__l //
-m4crdome__m //
-m4crdome__n //
-m4crmaze // Crystal Maze (Barcrest)
-m4crmaze__c //
-m4crmaze__d //
-m4crmaze__e //
-m4crmaze__f //
-m4crmaze__g //
-m4crmaze__h //
-m4crmaze__i //
-m4crmaze__j //
-m4crmaze__k //
-m4crmaze__l //
-m4crmaze__m //
-m4crmaze__n //
-m4crmaze__o //
-m4crmaze__p //
-m4crmaze__q //
-m4crmaze__r //
-m4crmaze__s //
-m4denmen // Dennis The Menace (Barcrest)
-m4denmen_h2 //
-m4denmendnc //
-m4denmendnd //
-m4denmendnk //
-m4denmendnb //
-m4denmendny //
-m4denmend5ad //
-m4denmend5b //
-m4denmend5bd //
-m4denmend5d //
-m4denmend5kd //
-m4denmend5yd //
-m4denmend5k //
-m4denmend5 //
-m4denmend5y //
-m4denmend8c //
-m4denmend8d //
-m4denmend8yd //
-m4denmend8k //
-m4denmend8 //
-m4denmend8y //
-m4denmendtad //
-m4denmendtb //
-m4denmendtbd //
-m4denmendtd //
-m4denmendtkd //
-m4denmendtyd //
-m4denmendtk //
-m4denmendt //
-m4denmendty //
-m4denmen_h1 //
-m4denmen_h3 //
-m4dbl9 // Double 9's (Barcrest)
-m4dbl9a //
-m4dbldm // Double Diamond Club (Barcrest)
-m4dbldm__a //
-m4dbldm__b //
-m4dbldm__c //
-m4dblup // Double Up (Barcrest)
-m4draca //
-m4dracb //
-m4drac // Dracula (Barcrest - Nova)
-m4dtyfre // Duty Free (Barcrest)
-m4dtyfref5ad //
-m4dtyfref5b
-m4dtyfref5bd
-m4dtyfref5d
-m4dtyfref5kd
-m4dtyfref5rd
-m4dtyfref5yd
-m4dtyfref5k
-m4dtyfref5r
-m4dtyfref5
-m4dtyfref5y
-m4dtyfref8c
-m4dtyfref8d
-m4dtyfref8yd
-m4dtyfref8k
-m4dtyfref8
-m4dtyfref8y
-m4dtyfre_h1
-m4dtyfreftad
-m4dtyfreftb
-m4dtyfreftbd
-m4dtyfreftd
-m4dtyfreftkd
-m4dtyfreftyd
-m4dtyfreftk
-m4dtyfreft
-m4dtyfrefty
-m4dtyfreutb
-m4dtyfreutc
-m4dtyfre_h2
-m4dtyfrexdad
-m4dtyfrexdb
-m4dtyfrexdbd
-m4dtyfrexdc
-m4dtyfrexdd
-m4dtyfrexdkd
-m4dtyfrexdrd
-m4dtyfrexdyd
-m4dtyfrexdk
-m4dtyfrexdr
-m4dtyfrexd
-m4dtyfrexdy
-m4dtyfrexd_a
-m4dtyfrexfad
-m4dtyfrexfb
-m4dtyfrexfbd
-m4dtyfrexfc
-m4dtyfrexfd
-m4dtyfrexfkd
-m4dtyfrexfrd
-m4dtyfrexfyd
-m4dtyfrexfk
-m4dtyfrexfr
-m4dtyfrexf
-m4dtyfrexfy
-m4dtyfrebwb
-m4dtyfrebwb_a
-m4dtyfrebwb_b
-m4dtyfrebwb_c
-m4dtyfrebwb_d
-m4dtyfrebwb_e
-m4dtyfrebwb_f
-m4dtyfrebwb_g
-m4dtyfrebwb_h
-m4eighth // Eighth Wonder (Barcrest)
-m4eightha //
-m4eighthb //
-m4eighthc //
-m4eighthd //
-m4eighthe //
-m4eighthf //
-m4eighthg //
-m4elite // Elite (Barcrest)
-m4eaw // Everyone's A Winner (Barcrest)
-m4eaw__a //
-m4eaw__b //
-m4eaw__c //
-m4eaw__d //
-m4eaw__e //
-m4eaw__f //
-m4eaw__g //
-m4eaw__h //
-m4eaw__i //
-m4eaw__j //
-m4eaw__k //
-m4eaw__l //
-m4eaw__m //
-m4eaw__n //
-m4eaw__o //
-m4eaw__p //
-m4eaw__q //
-m4eaw__r //
-m4eaw__s //
-m4eaw__t //
-m4eaw__u //
-m4eaw__v //
-m4eaw__w //
-m4eaw__x //
-m4eaw__y //
-m4eaw__z //
-m4eaw__0 //
-m4eaw__1 //
-m4eaw__2 //
-m4eaw__3 //
-m4eaw__4 //
-m4eaw__5 //
-m4eaw__6 //
-m4eaw__7 //
-m4eaw__8 //
-m4eaw__9 //
-m4eaw__aa //
-m4eaw__ab //
-m4eaw__ac //
-m4eaw__ad //
-m4eaw__ae //
-m4eaw__af //
-m4eaw__ag //
-m4eaw__ah //
-m4eaw__ai //
-m4eaw__aj //
-m4eaw__ak //
-m4eaw__al //
-m4eaw__am //
-m4eaw__an //
-m4eaw__ao //
-m4eaw__ap //
-m4eaw__aq //
-m4eaw__ar //
-m4eaw__as //
-m4eaw__at //
-m4eaw__au //
-m4eaw__av //
-m4eaw__aw //
-m4eaw__ax //
-m4eaw__ay //
-m4eaw__az //
-m4eaw__a0 //
-m4eaw__a1 //
-m4eaw__a2 //
-m4eaw__a3 //
-m4eaw__a4 //
-m4eaw__a5 //
-m4eaw__a6 //
-m4eaw__a7 //
-m4eaw__a8 //
-m4eaw__a9 //
-m4eaw__ba //
-m4eaw__bb //
-m4eaw__bc //
-m4eaw__bd //
-m4eaw__be //
-m4eaw__bf //
-m4eaw__bg //
-m4eaw__bh //
-m4eaw__bi //
-m4eaw__bj //
-m4eaw__bk //
-m4eaw__bl //
-m4eaw__bm //
-m4eaw__bn //
-m4eaw__bo //
-m4eaw__bp //
-m4eaw__bq //
-m4eaw__br //
-m4eaw__bs //
-m4eaw__bt //
-m4eaw__bu //
-m4eaw__bv //
-m4eaw__bw //
-m4eaw__bx //
-m4eaw__bz //
-m4exprs // Express (Barcrest)
-m4exgam // Extra Game (Fairplay - Barcrest)
-m4fastfw // Fast Forward (Barcrest - Bwb)
-m4fastfw__a //
-m4fastfw__b //
-m4fastfw__c //
-m4fastfw__d //
-m4fastfw__e //
-m4fastfw__f //
-m4class // First Class (Barcrest)
-m4classa //
-m4flash // Flash Cash (Barcrest)
-m4fortcb // Fortune Club (Barcrest)
-m4fortcba //
-m4fortcbb //
-m4frtfl // Fruit Full (Barcrest)
-m4frtfla //
-m4frtflc // Fruit Full Club (Barcrest)
-m4frtgm // Fruit Game (Barcrest)
-m4frtlnk // Fruit Link Club (Barcrest)
-m4frtlnka //
-m4frtprs // Fruit Preserve (Barcrest)
-m4frtprsa //
-m4gambal // Gamball (Barcrest)
-m4gambal__a //
-m4gambal__b //
-m4gambal__c //
-m4gb006 // Games Bond 006 (Barcrest)
-m4gb006__a //
-m4gb006__b //
-m4gb006__c //
-m4gbust // Ghost Buster (Barcrest)
-m4gbust__a //
-m4gbust__b //
-m4gbust__c //
-m4gbust__d //
-m4gbust__e //
-m4gbust__f //
-m4gbust__g //
-m4gbust__h //
-m4gbust__i //
-m4gbust__j //
-m4gbust__k //
-m4gbust__l //
-m4gbust__m //
-m4gbust__n //
-m4gbust__o //
-m4gbust__p //
-m4gbust__q //
-m4gbust__r //
-m4gbust__s //
-m4gbust__t //
-m4gbust__u //
-m4gbust__v //
-m4gbust__w //
-m4giant // Giant (Barcrest)
-m4gclue // Give Us A Clue (Barcrest)
-m4gclue__a //
-m4gclue__b //
-m4gclue__c //
-m4gclue__d //
-m4gclue__e //
-m4gclue__f //
-m4gclue__g //
-m4gclue__h //
-m4gclue__i //
-m4gclue__j //
-m4gclue__k //
-m4gclue__l //
-m4gclue__m //
-m4gclue__n //
-m4gclue__o //
-m4gclue__p //
-m4gclue__q //
-m4gclue__r //
-m4gclue__s //
-m4gclue__t //
-m4gclue__u //
-m4gclue__v //
-m4gclue__w //
-m4gldstr // Gold Strike (Barcrest)
-m4gldgat // Golden Gate (Barcrest)
-m4gldjok // Golden Joker (Barcrest)
-m4grbbnk // Grab The Bank (Barcrest)
-m4grbbnka //
-m4grbbnkb //
-m4graff // Graffiti (Barcrest)
-m4graff__a //
-m4graff__b //
-m4graffd //
-m4grands // Grandstand Club (Barcrest)
-m4grandsa //
-m4gnsmk // Gun Smoke (Barcrest)
-m4hpyjok // Happy Joker (Barcrest)
-m4hijinx // Hi Jinx (Barcrest)
-m4hijinx__a //
-m4hijinx__b //
-m4hijinx__c //
-m4hijinx__d //
-m4hijinx__e //
-m4hijinx__f //
-m4hijinx__g //
-m4hijinx__h //
-m4hijinx__i //
-m4hijinx__j //
-m4hijinx__k //
-m4hijinx__l //
-m4hijinx__m //
-m4hijinx__n //
-m4hijinx__o //
-m4hijinx__p //
-m4hijinx__q //
-m4hijinx__r //
-m4hijinx__s //
-m4hijinx__t //
-m4hijinx__u //
-m4hijinx__v //
-m4hijinx__w //
-m4hijinx__x //
-m4hijinx__y //
-m4hijinx__z //
-m4hijinx__0 //
-m4hijinx__1 //
-m4hijinx__2 //
-m4hijinx__3 //
-m4hijinx__4 //
-m4hijinx__5 //
-m4hijinx__6 //
-m4hijinx__7 //
-m4hijinx__8 //
-m4hijinx__9 //
-m4hijinx__aa //
-m4hijinx__ab //
-m4hirise // High Rise (Barcrest)
-m4hirisea //
-m4hiriseb //
-m4hirisec //
-m4hirised //
-m4hirisee //
-m4hiroll // High Roller (Barcrest)
-m4hittop // Hit The Top (Barcrest)
-m4hittop__a //
-m4hittop__b //
-m4hittop__c //
-m4hittop__d //
-m4hittop__e //
-m4hittop__f //
-m4hittop__g //
-m4hittop__h //
-m4hittop__i //
-m4hittop__j //
-m4hittop__k //
-m4hittop__l //
-m4hittop__m //
-m4hittop__n //
-m4hittop__o //
-m4hittop__p //
-m4hittop__q //
-m4hittop__r //
-m4hittop__s //
-m4hittop__t //
-m4hittop__u //
-m4hittop__v //
-m4hittop__w //
-m4hittop__x //
-m4hittop__y //
-m4hittop__z //
-m4hittop__0 //
-m4hittop__1 //
-m4hittop__2 //
-m4hittop__3 //
-m4hittop__4 //
-m4hittop__5 //
-m4hittop__6 //
-m4hittop__7 //
-m4hittop__8 //
-m4hittop__9 //
-m4hittop__aa //
-m4hittop__ab //
-m4hittop__ac //
-m4hittop__ad //
-m4hittop__ae //
-m4hittop__af //
-m4hittop__ag //
-m4hittop__ah //
-m4hittop__ai //
-m4hittop__aj //
-m4hittop__ak //
-m4hittop__al //
-m4hittop__am //
-m4hittop__an //
-m4hittop__ao //
-m4hittop__ap //
-m4hittop__aq //
-m4hittop__ar //
-m4hittop__as //
-m4hittop__at //
-m4hittop__au //
-m4hittop__av //
-m4hittop__aw //
-m4hittop__ax //
-m4hittp2 //
-m4hittp2a //
-m4thehit // The Hit (Barcrest)
-m4holdon // Hold On (Barcrest)
-m4holdtm // Hold Timer (Barcrest)
-m4hotrod // Hot Rod (Barcrest)
-m4hotrod__a //
-m4hotrod__b //
-m4hotrod__c //
-m4hotrod__d //
-m4hotrod__e //
-m4hotrod__f //
-m4hotrod__g //
-m4hotrod__h //
-m4hotrod__i //
-m4hotrod__j //
-m4hotrod__k //
-m4hotrod__l //
-m4hotrod__m //
-m4hotrod__n //
-m4hotrod__o //
-m4hotrod__p //
-m4hotrod__q //
-m4hotrod__r //
-m4hotrod__s //
-m4hotrod__t //
-m4hotrod__u //
-m4hotrod__v //
-m4hypvip // Hyper Viper (Barcrest)
-m4hypvip__a //
-m4hypvip__b //
-m4hypvip__c //
-m4hypvip__d //
-m4hypvip__e //
-m4hypvip__f //
-m4hypvip__g //
-m4hypvip__h //
-m4hypvip__i //
-m4hypvip__j //
-m4hypvip__k //
-m4hypvip__l //
-m4hypvip__m //
-m4hypvip__n //
-m4hypvip__o //
-m4hypvip__p //
-m4hypvip__q //
-m4hypvip__r //
-m4hypvip__s //
-m4hypvip__t //
-m4hypvip__u //
-m4hypvip__v //
-m4hypclb // Hyper Viper Club (Barcrest)
-m4hypclb__a //
-m4hypclb__b //
-m4hypclb__c //
-m4intcep // Interceptor (Barcrest)
-m4intcepa //
-m4intcepb //
-m4jpgem // Jackpot Gems (Barcrest)
-m4jpgem__a //
-m4jpgem__b //
-m4jpgem__c //
-m4jpgem__d //
-m4jpgem__e //
-m4jpgem__f //
-m4jpgem__g //
-m4jpgem__h //
-m4jpgem__i //
-m4jpgem__j //
-m4jpgem__k //
-m4jpgem__l //
-m4jpgem__m //
-m4jpgem__n //
-m4jpgem__o //
-m4jpgem__p //
-m4jpgem__q //
-m4jpgem__r //
-m4jpgem__s //
-m4jpgem__t //
-m4jpgem__u //
-m4jpgem__v //
-m4jpgem__w //
-m4jpgem__x //
-m4jpgem__y //
-m4jpgem__z //
-m4jpgem__0 //
-m4jpgem__1 //
-m4jpgem__2 //
-m4jpgem__3 //
-m4jpgem__4 //
-m4jpgem__5 //
-m4jpgem__6 //
-m4jpgem__7 //
-m4jpgem__8 //
-m4jpgem__9 //
-m4jpgem__aa //
-m4jpgem__ab //
-m4jpgem__ac //
-m4jpgem__ad //
-m4jpgem__ae //
-m4jpgem__af //
-m4jpgem__ag //
-m4jpgem__ah //
-m4jpgem__ai //
-m4jpgem__aj //
-m4jpgem__ak //
-m4jpgem__al //
-m4jpgem__am //
-m4jpgem__an //
-m4jpgem__ao //
-m4jpgem__ap //
-m4jpgem__aq //
-m4jpgem__ar //
-m4jpgem__as //
-m4jpgem__at //
-m4jpgem__au //
-m4jpgem__av //
-m4jpgem__aw //
-m4jpgem__ax //
-m4jpgem__ay //
-m4jpgem__az //
-m4jpgem__a0 //
-m4jpgem__a1 //
-m4jpgem__a2 //
-m4jpgem__a3 //
-m4jpgem__a4 //
-m4jpgem__a5 //
-m4jpgem__a6 //
-m4jpgem__a7 //
-m4jpgem__a8 //
-m4jpgem__a9 //
-m4jpgem__ba //
-m4jpgem__bb //
-m4jpgem__bc //
-m4jpgem__bd //
-m4jpgem__be //
-m4jpgem__bf //
-m4jpgem__bg //
-m4jpgem__bh //
-m4jpgem__bi //
-m4jpgem__bj //
-m4jpgem__bk //
-m4jpgem__bl //
-m4jpgem__bm //
-m4jpgem__bn //
-m4jpgem__bo //
-m4jpgem__bp //
-m4jpgemc // Jackpot Gems Classic (Barcrest)
-m4jpgemc__a //
-m4jpgemc__b //
-m4jpgemc__c //
-m4jpgemc__d //
-m4jpgemc__e //
-m4jpgemc__f //
-m4jpgemc__g //
-m4jpgemc__h //
-m4jpgemc__i //
-m4jpgemc__j //
-m4jpgemc__k //
-m4jpgemc__l //
-m4jpgemc__m //
-m4jpgemc__n //
-m4jpgemc__o //
-m4jpgemc__p //
-m4jpgemc__q //
-m4jpgemc__r //
-m4jpgemc__s //
-m4jpgemc__t //
-m4jpgemc__u //
-m4jpgemc__v //
-m4jpgemc__w //
-m4jpjmp // Jackpot Jump (Barcrest)
-m4jpjmpa //
-m4jwlcwn // Jewel In the Crown (Barcrest)
-m4jwlcwn__a //
-m4jwlcwn__b //
-m4jwlcwn__c //
-m4jwlcwn__d //
-m4jwlcwn__e //
-m4jwlcwn__f //
-m4jwlcwn__g //
-m4jwlcwn__h //
-m4jwlcwn__i //
-m4jwlcwn__j //
-m4jwlcwn__k //
-m4jwlcwn__l //
-m4jwlcwn__m //
-m4jwlcwn__n //
-m4jwlcwn__o //
-m4jwlcwn__p //
-m4jwlcwn__q //
-m4jwlcwn__r //
-m4jwlcwn__s //
-m4jwlcwn__t //
-m4jwlcwn__u //
-m4jwlcwn__v //
-m4jwlcwn__w //
-m4jwlcwn__x //
-m4jwlcwn__y //
-m4jwlcwn__z //
-m4jwlcwn__0 //
-m4jwlcwn__1 //
-m4jwlcwn__2 //
-m4jwlcwn__3 //
-m4jwlcwn__4 //
-m4jwlcwn__5 //
-m4jwlcwn__6 //
-m4jok300 // Jokers 300 (Barcrest)
-m4jokmil // Jokers Millennium (Barcrest)
-m4jolgem // Jolly Gems (Barcrest)
-m4jolgem__a //
-m4jolgem__b //
-m4jolgem__c //
-m4jolgem__d //
-m4jolgem__e //
-m4jolgem__f //
-m4jolgem__g //
-m4jolgem__h //
-m4jolgem__i //
-m4jolgem__j //
-m4jolgem__k //
-m4jolgem__l //
-m4jolgem__m //
-m4jolgem__n //
-m4jolgem__o //
-m4jolgem__p //
-m4jolgem__q //
-m4jolgem__r //
-m4jolgem__s //
-m4jolgem__t //
-m4jolgem__u //
-m4jolgem__v //
-m4jolgem__w //
-m4jolgem__x //
-m4jolgem__y //
-m4jolgem__z //
-m4jolgem__0 //
-m4jolgem__1 //
-m4jolgem__2 //
-m4jolgem__3 //
-m4jolgem__4 //
-m4jolgem__5 //
-m4jolgem__6 //
-m4jolgem__7 //
-m4jolgem__8 //
-m4jolgem__9 //
-m4jolgem__aa //
-m4jolgem__ab //
-m4jolgem__ac //
-m4jolgem__ad //
-m4jolgem__ae //
-m4jolgem__af //
-m4jolgem__ag //
-m4jolgem__ah //
-m4jolgem__ai //
-m4jolgem__aj //
-m4jolgem__ak //
-m4jolgem__al //
-m4jolgem__am //
-m4jolgem__an //
-m4jolgem__ao //
-m4jolgem__ap //
-m4joljokd //
-m4joljokh //
-m4joljok // Jolly Joker (Barcrest)
-m4joltav // Jolly Taverner (Barcrest)
-m4joltava //
-m4joltavb //
-m4goodtm // Let The Good Times Roll (Barcrest)
-m4goodtm__a //
-m4goodtm__b //
-m4goodtm__c //
-m4goodtm__d //
-m4goodtm__e //
-m4goodtm__f //
-m4goodtm__g //
-m4goodtm__h //
-m4goodtm__i //
-m4goodtm__j //
-m4goodtm__k //
-m4goodtm__l //
-m4goodtm__m //
-m4goodtm__n //
-m4goodtm__o //
-m4goodtm__p //
-m4goodtm__q //
-m4goodtm__r //
-m4goodtm__s //
-m4goodtm__t //
-m4goodtm__u //
-m4goodtm__v //
-m4goodtm__w //
-m4goodtm__x //
-m4goodtm__y //
-m4goodtm__z //
-m4goodtm__0 //
-m4goodtm__1 //
-m4goodtm__2 //
-m4goodtm__3 //
-m4goodtm__4 //
-m4goodtm__5 //
-m4goodtm__6 //
-m4goodtm__7 //
-m4goodtm__8 //
-m4goodtm__9 //
-m4goodtm__aa //
-m4goodtm__ab //
-m4goodtm__ac //
-m4goodtm__ad //
-m4goodtm__ae //
-m4goodtm__af //
-m4goodtm__ag //
-m4goodtm__ah //
-m4goodtm__ai //
-m4goodtm__aj //
-m4goodtm__ak //
-m4goodtm__al //
-m4goodtm__am //
-m4goodtm__an //
-m4goodtm__ao //
-m4goodtm__ap //
-m4goodtm__aq //
-m4goodtm__ar //
-m4goodtm__as //
-m4goodtm__at //
-m4goodtm__au //
-m4goodtm__av //
-m4goodtm__aw //
-m4goodtm__ax //
-m4goodtm__ay //
-m4goodtm__az //
-m4goodtm__a0 //
-m4goodtm__a1 //
-m4goodtm__a2 //
-m4goodtm__a3 //
-m4goodtm__a4 //
-m4goodtm__a5 //
-m4goodtm__a6 //
-m4libty // Liberty (Barcrest)
-m4lineup // Line Up (Bwb - Barcrest)
-m4lineupa //
-m4loadmn // Loads A Money (Barcrest)
-m4loadmna //
-m4loadmnb //
-m4luck7 // Lucky 7 (Barcrest)
-m4luckdv // Lucky Devil (Barcrest) [Czech]
-m4luckdvd //
-m4lucklv // Lucky Las Vegas (Barcrest)
-m4lucklv__a //
-m4lucklv__b //
-m4lucklv__c //
-m4lucklv__d //
-m4lucklv__e //
-m4lucklv__f //
-m4lucklv__g //
-m4lucklv__h //
-m4lucklv__i //
-m4lucklv__j //
-m4lucklv__k //
-m4lucklv__l //
-m4lucklv__m //
-m4lucklv__n //
-m4lucklv__o //
-m4lucklv__p //
-m4lucklv__q //
-m4lucklv__r //
-m4lucklv__s //
-m4lucklv__t //
-m4lucklv__u //
-m4lucklv__v //
-m4lucklv__w //
-m4lucklv__x //
-m4lucklv__y //
-m4lucklv__z //
-m4lucklv__0 //
-m4lucklv__1 //
-m4lucklv__2 //
-m4lucklv__3 //
-m4lucklv__4 //
-m4lucklv__5 //
-m4lucklv__6 //
-m4lucklv__7 //
-m4lucklv__8 //
-m4lucklv__9 //
-m4lucklv__aa //
-m4lucklv__ab //
-m4lucklv__ac //
-m4lucklv__ad //
-m4lucklv__ae //
-m4lucklv__af //
-m4lucklv__ag //
-m4lucklv__ah //
-m4lucklv__ai //
-m4luckst // Lucky Strike (Barcrest)
-m4luckst__a //
-m4luckst__b //
-m4luckst__c //
-m4luckst__d //
-m4luckst__e //
-m4luckst__f //
-m4luckst__g //
-m4luckst__h //
-m4luckst__i //
-m4luckst__j //
-m4luckst__k //
-m4luckst__l //
-m4luckst__m //
-m4luckst__n //
-m4luckst__p //
-m4luckst__q //
-m4luckst__r //
-m4luckst__s //
-m4luckst__t //
-m4luckst__u //
-m4luckst__v //
-m4luckst__w //
-m4luckst__x //
-m4luckst__y //
-m4luckst__z //
-m4luckst__0 //
-m4luckst__1 //
-m4luckst__2 //
-m4luckst__3 //
-m4luckst__4 //
-m4luckst__5 //
-m4luckst__6 //
-m4luckst__7 //
-m4luckst__8 //
-m4luckst__9 //
-m4luckst__aa //
-m4luckst__ab //
-m4luckst__ac //
-m4luckst__ad //
-m4luckst__ae //
-m4luckst__af //
-m4luckst__ag //
-m4luckst__ah //
-m4luckst__ai //
-m4luckst__aj //
-m4luckst__ak //
-m4luckst__al //
-m4luckst__am //
-m4luckst__an //
-m4luckst__ao //
-m4luckst__ap //
-m4luckst__aq //
-m4luckst__ar //
-m4luckst__as //
-m4luckst__at //
-m4luckst__au //
-m4luckst__av //
-m4luckst__aw //
-m4lucksc // Lucky Strike Club (Barcrest) [MPU 4]
-m4lucksc__a //
-m4lucksc__b //
-m4lucksc__c //
-m4lucksc__d //
-m4lucksc__e //
-m4lucksc__f //
-m4lucksc__g //
-m4lucksc__h //
-m4lucksc__i //
-m4lucksc__j //
-m4lucksc__k //
-m4lucksc__l //
-m4luckwb // Lucky Wild Boar (Barcrest)
-m4luckwba //
-m4luckwbb //
-m4luckwbc //
-m4luckwbd //
-m4luckwbe //
-m4luckwbf //
-m4luxor // Luxor (Barcrest)
-m4luxor__a //
-m4luxor__b //
-m4luxor__c //
-m4luxor__d //
-m4luxor__e //
-m4luxor__f //
-m4luxor__g //
-m4luxor__h //
-m4luxor__i //
-m4luxor__j //
-m4luxor__k //
-m4luxor__l //
-m4luxor__m //
-m4luxor__n //
-m4luxor__o //
-m4luxor__p //
-m4luxor__q //
-m4luxor__r //
-m4luxor__s //
-m4luxor__t //
-m4luxor__u //
-m4luxor__v //
-m4luxor__w //
-m4luxor__x //
-m4luxor__y //
-m4luxor__z //
-m4madhse // Mad House (Barcrest)
-m4madhse__a //
-m4madhse__b //
-m4madhse__c //
-m4madhse__d //
-m4madhse__e //
-m4madhse__f //
-m4madhse__g //
-m4madhse__h //
-m4madhse__i //
-m4madhse__j //
-m4madhse__k //
-m4madhse__l //
-m4madhse__m //
-m4madhse__n //
-m4madhse__o //
-m4madhse__p //
-m4madhse__q //
-m4madhse__r //
-m4madhse__s //
-m4madhse__t //
-m4madhse__u //
-m4madhse__v //
-m4madhse__w //
-m4madhse__x //
-m4madhse__y //
-m4madhse__z //
-m4madhse__0 //
-m4magdrg // Magic Dragon (Barcrest)
-m4magtbo // Magic Turbo
-m4maglin // Magic Liner (Barcrest)
-m4magrep // Magic Replay DeLuxe (Barcrest)
-m4mag7s // Magnificent 7's (Barcrest)
-m4mag7s__a //
-m4mag7s__b //
-m4mag7s__c //
-m4mag7s__d //
-m4mag7s__e //
-m4mag7s__f //
-m4mag7s__g //
-m4mag7s__h //
-m4mag7s__i //
-m4mag7s__j //
-m4mag7s__k //
-m4mag7s__l //
-m4mag7s__m //
-m4mag7s__n //
-m4mag7s__o //
-m4mag7s__p //
-m4mag7s__q //
-m4mag7s__r //
-m4mag7s__s //
-m4mag7s__t //
-m4mag7s__u //
-m4mag7s__v //
-m4mag7s__w //
-m4mag7s__x //
-m4mag7s__y //
-m4mag7s__z //
-m4mag7s__0 //
-m4mag7s__1 //
-m4mag7s__2 //
-m4mag7s__3 //
-m4mag7s__4 //
-m4mag7s__5 //
-m4mag7s__6 //
-m4mag7s__7 //
-m4mag7s__8 //
-m4mag7s__9 //
-m4mag7s__aa //
-m4mag7s__ab //
-m4mag7s__ac //
-m4mag7s__ad //
-m4mag7s__ae //
-m4mag7s__af //
-m4mag7s__ag //
-m4mag7s__ah //
-m4mag7s__ai //
-m4mag7s__aj //
-m4mag7s__ak //
-m4mag7s__al //
-m4mag7s__am //
-m4mag7s__an //
-m4mag7s__ao //
-m4mag7s__ap //
-m4mag7s__aq //
-m4mag7s__ar //
-m4mag7s__as //
-m4mag7s__at //
-m4mag7s__au //
-m4mag7s__av //
-m4mag7s__aw //
-m4mag7s__ax //
-m4makmnt // Make A Mint (Barcrest)
-m4makmnt__a //
-m4makmnt__b //
-m4makmnt__c //
-m4makmnt__d //
-m4makmnt__e //
-m4makmnt__f //
-m4makmnt__g //
-m4makmnt__h //
-m4makmnt__i //
-m4makmnt__j //
-m4makmnt__k //
-m4makmnt__l //
-m4makmnt__m //
-m4makmnt__n //
-m4makmnt__o //
-m4makmnt__p //
-m4makmnt__q //
-m4makmnt__r //
-m4makmnt__s //
-m4makmnt__t //
-m4makmnt__u //
-m4makmnt__v //
-m4makmnt__w //
-m4makmnt__x //
-m4makmnt__y //
-m4makmnt__z //
-m4makmnt__0 //
-m4makmnt__1 //
-m4makmnt__2 //
-m4makmnt__3 //
-m4makmnt__4 //
-m4makmnt__5 //
-m4makmnt__6 //
-m4makmnt__7 //
-m4makmnt__8 //
-m4makmnt__9 //
-m4makmnt__aa //
-m4makmnt__ab //
-m4makmnt__ac //
-m4makmnt__ad //
-m4makmnt__ae //
-m4makmnt__af //
-m4makmnt__ag //
-m4makmnt__ah //
-m4makmnt__ai //
-m4makmnt__aj //
-m4makmnt__ak //
-m4makmnt__al //
-m4makmnt__am //
-m4makmnt__an //
-m4makmnt__ao //
-m4makmnt__ap //
-m4makmnt__aq //
-m4makmnt__ar //
-m4makmnt__as //
-m4megbks // Mega Bucks (Barcrest)
-m4megbksa //
-m4megbksb //
-m4megbksc //
-m4meglnk // Megalink (Barcrest)
-m4milclb // Millionaire's Club (Barcrest)
-m4milclba //
-m4milclbb //
-m4milclbc //
-m4milclbd //
-m4mirage // Mirage (Barcrest)
-m4moneym // Money Maker (Barcrest)
-m4monte // Monte Carlo (Barcrest)
-m4monte__a //
-m4monte__b //
-m4monte__c //
-m4monte__d //
-m4monte__e //
-m4monte__f //
-m4monte__g //
-m4monte__h //
-m4monte__i //
-m4monte__j //
-m4monte__k //
-m4monte__l //
-m4monte__m //
-m4multcl // Multiplay Club (Barcrest)
-m4multwy // Multiway (Barcrest)
-m4nhtt // New Hit the Top (Barcrest)
-m4nhtt__a //
-m4nhtt__b //
-m4nhtt__c //
-m4nhtt__d //
-m4nhtt__e //
-m4nhtt__f //
-m4nhtt__g //
-m4nhtt__h //
-m4nhtt__i //
-m4nhtt__j //
-m4nick // Nickelodeon (Barcrest)
-m4nicka //
-m4nickb //
-m4nickc //
-m4nickd //
-m4nicke //
-m4nifty // Nifty Fifty (Barcrest)
-m4niftya //
-m4niftyb //
-m4nspot // Night Spot Club (Barcrest)
-m4nspota //
-m4nspotb //
-m4nile // Nile Jewels (Barcrest)
-m4nudbnk // Nudge Banker (Barcrest)
-m4nudbnk__a //
-m4nudbnk__b //
-m4nudbnk__c //
-m4nudbnk__d //
-m4nnww // Nudge Nudge Wink Wink (Barcrest)
-m4nnww__a //
-m4nnww__b //
-m4nnww__c //
-m4nnww__d //
-m4nnww__e //
-m4nnww__f //
-m4nnww__g //
-m4nnww__h //
-m4nnww__i //
-m4nnww__j //
-m4nnww__k //
-m4nnww__l //
-m4nnww__m //
-m4nnww__n //
-m4nnww__o //
-m4nnww__p //
-m4nnww__q //
-m4nnww__r //
-m4nnww__s //
-m4nnww__t //
-m4nnww__u //
-m4nnww__v //
-m4nnww__w //
-m4nnww__x //
-m4nnww__y //
-m4nnww__z //
-m4nnww__0 //
-m4nnww__1 //
-m4nnww__2 //
-m4nnww__3 //
-m4nnww__4 //
-m4nnww__5 //
-m4nnww__6 //
-m4nnww__7 //
-m4nnww__8 //
-m4nnww__9 //
-m4nnww__aa //
-m4nnww__ab //
-m4nnww__ac //
-m4nnww__ad //
-m4nnww__ae //
-m4nnww__af //
-m4nnww__ag //
-m4nnww__ah //
-m4nnww__ai //
-m4nnww__aj //
-m4nnww__ak //
-m4nnww__al //
-m4nnww__am //
-m4nnww__an //
-m4nnww__ao //
-m4nnww__ap //
-m4nnww__aq //
-m4nnww__ar //
-m4nnww__as //
-m4nnww__at //
-m4nnww__au //
-m4nnww__av //
-m4nnww__aw //
-m4nnww__ax //
-m4nnww__ay //
-m4nnww__az //
-m4nnwwc // Nudge Nudge Wink Wink Classic (Barcrest)
-m4nnwwc__a //
-m4nnwwc__b //
-m4nnwwc__c //
-m4nnwwc__d //
-m4nnwwc__e //
-m4nnwwc__f //
-m4nnwwc__g //
-m4nnwwc__h //
-m4nnwwc__i //
-m4nnwwc__j //
-m4nnwwc__k //
-m4nnwwc__l //
-m4nnwwc__m //
-m4nnwwc__n //
-m4nnwwc__o //
-m4nnwwc__p //
-m4nnwwc__q //
-m4nnwwc__r //
-m4nnwwc__s //
-m4nnwwc__t //
-m4nnwwc__u //
-m4nnwwc__v //
-m4nnwwc__w //
-m4nnwwc__x //
-m4nnwwc__y //
-m4nnwwc__z //
-m4nnwwc__0 //
-m4nnwwc__1 //
-m4nnwwc__2 //
-m4nnwwc__3 //
-m4nnwwc__4 //
-m4nnwwc__5 //
-m4nnwwc__6 //
-m4nnwwc__7 //
-m4nnwwc__8 //
-m4nnwwc__9 //
-m4nnwwc__aa //
-m4nnwwc__ab //
-m4nnwwc__ac //
-m4nnwwc__ad //
-m4nudqst // Nudge Quest (Barcrest)
-m4nudshf // Nudge Shuffle (Barcrest)
-m4nudshfa //
-m4nudshfb //
-m4nudshfc //
-m4nudup // Nudge Up (Barcrest)
-m4num1 // Number One (Barcrest)
-m4oldtmr // Old Timer (Barcrest)
-m4casot // Casino Old Timer (Barcrest)
-m4jpmcla // JPM Classic (Barcrest)
-m4omega // Omega (Barcrest)
-m4ordmnd // Oriental Diamonds (Barcrest)
-m4overmn // Over The Moon (Barcrest)
-m4overmn__a //
-m4overmn__b //
-m4overmn__c //
-m4overmn__d //
-m4overmn__e //
-m4overmn__f //
-m4overmn__g //
-m4overmn__h //
-m4overmn__i //
-m4overmn__j //
-m4overmn__k //
-m4overmn__l //
-m4overmn__m //
-m4overmn__n //
-m4overmn__o //
-m4overmn__p //
-m4overmn__q //
-m4overmn__r //
-m4overmn__s //
-m4overmn__t //
-m4overmn__u //
-m4overmn__v //
-m4overmn__w //
-m4overmn__x //
-m4overmn__y //
-m4overmn__z //
-m4overmn__0 //
-m4overmn__1 //
-m4overmn__2 //
-m4overmn__3 //
-m4overmn__4 //
-m4overmn__5 //
-m4overmn__6 //
-m4overmn__7 //
-m4overmn__8 //
-m4placbt // Place Your Bets (Barcrest)
-m4placbt__a //
-m4placbt__b //
-m4placbt__c //
-m4placbt__d //
-m4placbt__e //
-m4placbt__f //
-m4placbt__g //
-m4placbt__h //
-m4placbt__i //
-m4placbt__j //
-m4placbt__k //
-m4placbt__l //
-m4placbt__m //
-m4placbt__n //
-m4placbt__o //
-m4placbt__p //
-m4placbt__q //
-m4placbt__r //
-m4placbt__s //
-m4placbt__t //
-m4placbt__u //
-m4placbt__v //
-m4placbt__w //
-m4placbt__x //
-m4placbt__y //
-m4placbt__z //
-m4placbt__0 //
-m4placbt__1 //
-m4placbt__2 //
-m4placbt__3 //
-m4placbt__4 //
-m4placbt__5 //
-m4placbt__6 //
-m4placbt__7 //
-m4placbt__8 //
-m4placbt__9 //
-m4placbt__aa //
-m4placbt__ab //
-m4placbt__ac //
-m4placbt__ad //
-m4placbt__ae //
-m4placbt__af //
-m4placbt__ag //
-m4placbt__ah //
-m4placbt__ai //
-m4placbt__aj //
-m4placbt__ak //
-m4placbt__al //
-m4placbt__am //
-m4placbt__an //
-m4placbt__ao //
-m4pont // Pontoon Club (Barcrest)
-m4ponta //
-m4potblk // Pot Black (Barcrest)
-m4potblk__a //
-m4potblk__b //
-m4potblk__c //
-m4potblk__d //
-m4potblk__e //
-m4potblk__f //
-m4potblk__g //
-m4potblk__h //
-m4potblk__i //
-m4potblk__j //
-m4potblk__k //
-m4potblk__l //
-m4potblk__m //
-m4potblk__n //
-m4potblk__o //
-m4potblk__p //
-m4potblk__q //
-m4potblk__r //
-m4potblk__s //
-m4potblk__t //
-m4potblk__u //
-m4potblk__v //
-m4potblk__w //
-m4potblk__x //
-m4potblk__y //
-m4potblk__z //
-m4potblk__0 //
-m4potblk__1 //
-m4potblk__2 //
-m4potblk__3 //
-m4potblk__4 //
-m4potblk__5 //
-m4potblk__6 //
-m4potblk__7 //
-m4potblk__8 //
-m4potblk__9 //
-m4potblk__aa //
-m4potblk__ab //
-m4potblk__ac //
-m4potblk__ad //
-m4potblk__ae //
-m4potblk__af //
-m4potblk__ag //
-m4potblk__ah //
-m4potblk__ai //
-m4potblk__aj //
-m4potblk__ak //
-m4potblk__al //
-m4potblk__am //
-m4potblk__an //
-m4potblk__ao //
-m4potblk__ap //
-m4potblk__aq //
-m4potblk__ar //
-m4potblk__as //
-m4potblk__at //
-m4potblk__au //
-m4potblk__av //
-m4potblk__aw //
-m4potblk__ax //
-m4ptblkc // Pot Black Casino (Bwb - Barcrest)
-m4potlck // Pot Luck Club (Barcrest)
-m4potlcka //
-m4prem // Premier (Barcrest)
-m4przdty // Prize Duty Free (Barcrest)
-m4przdty__a //
-m4przdty__b //
-m4przdty__c //
-m4przdty__d //
-m4przdty__e //
-m4przdty__f //
-m4przdty__g //
-m4przdty__h //
-m4przdty__i //
-m4przdty__j //
-m4przdty__k //
-m4przdty__l //
-m4przdty__m //
-m4przdty__n //
-m4przdty__o //
-m4przdty__p //
-m4przfrt // Prize Fruit & Loot (Barcrest)
-m4przfrt__a //
-m4przfrt__b //
-m4przfrt__c //
-m4przfrt__d //
-m4przfrt__e //
-m4przfrt__f //
-m4przfrt__g //
-m4przfrt__h //
-m4przfrt__i //
-m4przfrt__j //
-m4przfrt__k //
-m4przfrt__l //
-m4przhr // Prize High Roller (Barcrest)
-m4przhr__a //
-m4przhr__b //
-m4przhr__c //
-m4przhr__d //
-m4przhr__e //
-m4przhr__f //
-m4przhr__g //
-m4przhr__h //
-m4przhr__i //
-m4przhr__j //
-m4przhr__k //
-m4przhr__l //
-m4przhr__m //
-m4przhr__n //
-m4przhr__o //
-m4przhr__p //
-m4przlux // Prize Luxor (Barcrest)
-m4przlux__a //
-m4przlux__b //
-m4przlux__c //
-m4przlux__d //
-m4przlux__e //
-m4przlux__f //
-m4przmon // Prize Money (Barcrest)
-m4przmon__a //
-m4przmon__b //
-m4przmon__c //
-m4przmon__d //
-m4przmon__e //
-m4przmon__f //
-m4przmon__g //
-m4przmon__h //
-m4przmon__i //
-m4przmon__j //
-m4przmon__k //
-m4przmon__l //
-m4przmon__m //
-m4przmon__n //
-m4przmon__o //
-m4przmon__p //
-m4przmon__q //
-m4przmon__r //
-m4przmon__s //
-m4przmon__t //
-m4przmon__u //
-m4przmon__v //
-m4przmon__w //
-m4przmon__x //
-m4przmon__y //
-m4przmon__z //
-m4przmon__0 //
-m4przmon__1 //
-m4przmns // Prize Money ShowCase (Barcrest)
-m4przmns__a //
-m4przmns__b //
-m4przmns__c //
-m4przmns__d //
-m4przmns__e //
-m4przmns__f //
-m4przmns__g //
-m4przmns__h //
-m4przmns__i //
-m4przmns__j //
-m4przmns__k //
-m4przmns__l //
-m4przmns__m //
-m4przmns__n //
-m4przmc // Prize Monte Carlo (Barcrest)
-m4przmc__a //
-m4przmc__b //
-m4przmc__c //
-m4przmc__d //
-m4przmc__e //
-m4przmc__f //
-m4przrf // Prize Rich And Famous (Barcrest)
-m4przrf__a //
-m4przrf__b //
-m4przrf__c //
-m4przrf__d //
-m4przrf__e //
-m4przrf__f //
-m4przrf__g //
-m4przrf__h //
-m4przrf__i //
-m4przrf__j //
-m4przrfm // Prize Run For Your Money (Barcrest)
-m4przrfm__a //
-m4przrfm__b //
-m4przrfm__c //
-m4przrfm__d //
-m4przrfm__e //
-m4przrfm__f //
-m4przrfm__g //
-m4przrfm__h //
-m4przrfm__i //
-m4przrfm__j //
-m4przrfm__k //
-m4przrfm__l //
-m4przrfm__m //
-m4przrfm__n //
-m4przrfm__o //
-m4przsss // Prize Spend Spend Spend (Barcrest)
-m4przsss__a //
-m4przsss__b //
-m4przsss__c //
-m4przsss__d //
-m4przsss__e //
-m4przsss__f //
-m4przsss__g //
-m4przsss__h //
-m4przsss__i //
-m4przsss__j //
-m4przsss__k //
-m4przsss__l //
-m4przsss__m //
-m4przsss__n //
-m4przsss__o //
-m4przsss__p //
-m4przsss__q //
-m4przsss__r //
-m4przsss__s //
-m4przsss__t //
-m4przsss__u //
-m4przsss__v //
-m4przsss__w //
-m4przsss__x //
-m4przsss__y //
-m4przsss__z //
-m4przsss__0 //
-m4przve // Prize Viva Esapana (Barcrest)
-m4przve__a //
-m4przve__b //
-m4przve__c //
-m4przve__d //
-m4przve__e //
-m4przve__f //
-m4przve__g //
-m4przve__h //
-m4przve__i //
-m4przve__j //
-m4przve__k //
-m4przve__l //
-m4przve__m //
-m4przve__n //
-m4przve__o //
-m4przve__p //
-m4przwo // Prize What's On (Barcrest)
-m4przwo__a //
-m4przwo__b //
-m4przwo__c //
-m4przwo__d //
-m4przwo__e //
-m4przwo__f //
-m4przwta // Prize Winner Takes All (Barcrest)
-m4przwta__a //
-m4przwta__b //
-m4przwta__c //
-m4przwta__d //
-m4przwta__e //
-m4przwta__f //
-m4przwta__g //
-m4przwta__h //
-m4przwta__i //
-m4przwta__j //
-m4przwta__k //
-m4przwta__l //
-m4przwta__m //
-m4przwta__n //
-m4przwta__o //
-m4przwta__p //
-m4randr // Random Roulette (Barcrest)
-m4rsg // Ready Steady Go (Barcrest) (type 1)
-m4rsga //
-m4ready // Ready Steady Go (Barcrest) (type 2)
-m4ready__a //
-m4ready__b //
-m4ready__c //
-m4ready__d //
-m4ready__e //
-m4ready__f //
-m4ready__g //
-m4ready__h //
-m4ready__i //
-m4ready__j //
-m4ready__k //
-m4ready__l //
-m4ready__m //
-m4ready__n //
-m4ready__o //
-m4ready__p //
-m4ready__q //
-m4ready__r //
-m4ready__s //
-m4ready__t //
-m4ready__u //
-m4ready__v //
-m4ready__w //
-m4ready__x //
-m4ready__y //
-m4ready__z //
-m4ready__0 //
-m4ready__1 //
-m4ready__2 //
-m4ready__3 //
-m4ready__4 //
-m4ready__5 //
-m4ready__6 //
-m4ready__7 //
-m4ready__8 //
-m4ready__9 //
-m4ready__aa //
-m4ready__ab //
-m4ready__ac //
-m4ready__ad //
-m4ready__ae //
-m4ready__af //
-m4ready__ag //
-m4ready__ah //
-m4ready__ai //
-m4ready__aj //
-m4ready__ak //
-m4ready__al //
-m4ready__am //
-m4ready__an //
-m4ready__ao //
-m4ready__ap //
-m4ready__aq //
-m4ready__ar //
-m4ready__as //
-m4ready__at //
-m4ready__au //
-m4ready__av //
-m4ready__aw //
-m4ready__ax //
-m4ready__ay //
-m4ready__az //
-m4ready__a0 //
-m4ready__a1 //
-m4ready__a2 //
-m4ready__a3 //
-m4ready__a4 //
-m4ready__a5 //
-m4ra // Red Alert (Barcrest)
-m4ra__a //
-m4ra__b //
-m4ra__c //
-m4ra__d //
-m4ra__e //
-m4ra__f //
-m4ra__g //
-m4ra__h //
-m4ra__i //
-m4ra__j //
-m4ra__k //
-m4ra__l //
-m4ra__m //
-m4ra__n //
-m4ra__o //
-m4ra__p //
-m4ra__q //
-m4ra__r //
-m4rdht // Red Heat (Barcrest)
-m4rhr // Red Hot Roll (Barcrest)
-m4rhr__a //
-m4rhr__b //
-m4rhr__c //
-m4rhr__d //
-m4rhr__e //
-m4rhr__f //
-m4rhr__g //
-m4rhr__h //
-m4rhr__i //
-m4rhr__j //
-m4rhr__k //
-m4rhr__l //
-m4rhr__m //
-m4rhr__n //
-m4rhr__o //
-m4rhr__p //
-m4rhr__q //
-m4rhr__r //
-m4rhr__s //
-m4rhr__t //
-m4rhr__u //
-m4rhr__v //
-m4rhr__w //
-m4rhr__x //
-m4rhr__y //
-m4rhr__z //
-m4rhr__0 //
-m4rhr__1 //
-m4rhr__2 //
-m4rhr__3 //
-m4rhr__4 //
-m4rhr__5 //
-m4rhr__6 //
-m4rhr__7 //
-m4rhr__8 //
-m4rhr__9 //
-m4rhr__aa //
-m4rhr__ab //
-m4rhr__ac //
-m4rhr__ad //
-m4rhr__ae //
-m4rhr__af //
-m4rhr__ag //
-m4rhr__ah //
-m4rhr__ai //
-m4rhr__aj //
-m4rhr__ak //
-m4rhr__al //
-m4rhr__am //
-m4rhr__an //
-m4rhr__ao //
-m4rhr__ap //
-m4rhr__aq //
-m4rhr__ar //
-m4rhr__as //
-m4rhr__at //
-m4rhr__au //
-m4rhr__av //
-m4rhr__aw //
-m4rhr__ax //
-m4rhr__ay //
-m4rhr__az //
-m4rhr__a0 //
-m4rhr__a1 //
-m4rhr__a2 //
-m4rhr__a3 //
-m4rhrc // Red Hot Roll Classic (Barcrest)
-m4rhrc__a //
-m4rhrc__b //
-m4rhrc__c //
-m4rhrc__d //
-m4rhrc__e //
-m4rhrc__f //
-m4rhrc__g //
-m4rhrc__h //
-m4rhrc__i //
-m4rhrc__j //
-m4rhrc__k //
-m4rhrc__l //
-m4rhrc__m //
-m4rhrc__n //
-m4rhrc__o //
-m4rhrc__p //
-m4rhrc__q //
-m4rhrc__r //
-m4rhrc__s //
-m4rhrc__t //
-m4rhrc__u //
-m4rhrc__v //
-m4rhrc__w //
-m4rhrc__x //
-m4rhrc__y //
-m4rhrc__z //
-m4rhrc__0 //
-m4rhrc__1 //
-m4rhrc__2 //
-m4rhrc__3 //
-m4rhrc__4 //
-m4rhrc__5 //
-m4rhrc__6 //
-m4rhrc__7 //
-m4rhrc__8 //
-m4rhrc__aa //
-m4rhrcl // Red Hot Roll Club (Barcrest)
-m4rhrcl__a //
-m4rhrcl__b //
-m4rhrcl__c //
-m4rwb // Red White & Blue (Barcrest)
-m4r2r // Reel 2 Reel (Barcrest)
-m4reelpk // Reel Poker (Barcrest)
-m4reeltm // Reel Timer (Barcrest)
-m4richfm // Rich & Famous (Barcrest)
-m4richfm__a //
-m4richfm__b //
-m4richfm__c //
-m4richfm__d //
-m4richfm__e //
-m4richfm__f //
-m4richfm__g //
-m4richfm__h //
-m4richfm__i //
-m4richfm__j //
-m4richfm__k //
-m4richfm__l //
-m4richfm__m //
-m4richfm__n //
-m4richfm__o //
-m4richfm__p //
-m4richfm__q //
-m4richfm__r //
-m4richfm__s //
-m4richfm__t //
-m4richfm__u //
-m4richfm__v //
-m4richfm__w //
-m4richfm__x //
-m4richfm__y //
-m4richfm__z //
-m4richfm__0 //
-m4richfm__1 //
-m4richfm__2 //
-m4richfm__3 //
-m4ringfr // Ring Of Fire (Barcrest)
-m4rhog // Road Hog (Barcrest)
-m4rhog_h1 //
-m4rhogr6y_a //
-m4rhogr3 //
-m4rhr__a4 //
-m4rhog_h2 //
-m4rhog_h8 //
-m4rhog_h9 //
-m4rhog_h15 //
-m4rhog_h12 //
-m4rhog_h3 //
-m4rhog_h4 //
-m4rhogr1k_a //
-m4rhogr2yd //
-m4rhog_roc //
-m4rhogr6ad //
-m4rhogr6b //
-m4rhogr6c //
-m4rhogr6d //
-m4rhogr6yd //
-m4rhogr6k //
-m4rhogr6y //
-m4rhog_h5 //
-m4rhog_h6 //
-m4rhog_h7 //
-m4rhog_h10 //
-m4rhog_h11 //
-m4rhog_h14 //
-m4rhog_h13 //
-m4rhogr2k //
-m4rhogr2 //
-m4rhogr2d //
-m4rhogr2y //
-m4rhogr1k //
-m4rhogr1 //
-m4rhogr1yd //
-m4rhogr1d //
-m4rhogr1y //
-m4rhogr2c //
-m4rhogr1c //
-m4rhog2 // Road Hog 2 - I'm Back (Barcrest)
-m4rhog2__a //
-m4rhog2__b //
-m4rhog2__c //
-m4rhog2__d //
-m4rhog2__e //
-m4rhog2__f //
-m4rhog2__g //
-m4rhog2__h //
-m4rhog2__i //
-m4rhog2__j //
-m4rhog2__k //
-m4rhog2__l //
-m4rhog2__m //
-m4rhogc // Road Hog Club (Barcrest)
-m4rhogc__a //
-m4rhogc__b //
-m4roadrn // Road Runner (Barcrest)
-m4rockmn // Rocket Money (Barcrest)
-m4rockmn__a //
-m4rockmn__b //
-m4rockmn__c //
-m4rockmn__d //
-m4rockmn__e //
-m4rockmn__f //
-m4rockmn__g //
-m4rockmn__h //
-m4rockmn__i //
-m4rockmn__j //
-m4rockmn__k //
-m4royjwl // Royal Jewels (Barcrest)
-m4rfym // Run For Your Money (Barcrest)
-m4rfym__a //
-m4rfym__b //
-m4rfym__c //
-m4rfym__d //
-m4rfym__e //
-m4rfym__f //
-m4rfym__g //
-m4rfym__h //
-m4rfym__i //
-m4rfym__j //
-m4rfym__k //
-m4rfym__l //
-m4rfym__m //
-m4rfym__n //
-m4rfym__o //
-m4rfym__p //
-m4rfym__q //
-m4rfym__r //
-m4rfym__s //
-m4rfym__t //
-m4rfym__u //
-m4rfym__v //
-m4rfym__w //
-m4rfym__x //
-m4rfym__y //
-m4rfym__z //
-m4rfym__0 //
-m4rfym__1 //
-m4rfym__2 //
-m4rfym__3 //
-m4rfym__4 //
-m4rfym__5 //
-m4rfym__6 //
-m4rfym__7 //
-m4rfym__8 //
-m4rfym__9 //
-m4rfym__aa //
-m4rfym__ab //
-m4rfym__ac //
-m4rfym__ad //
-m4rfym__ae //
-m4rfym__af //
-m4rfym__ag //
-m4rfym__ah //
-m4rfym__ai //
-m4rfym__aj //
-m4rfym__ak //
-m4rfym__al //
-m4rfym__am //
-m4rfym__an //
-m4rfym__ao //
-m4rfym__ap //
-m4rfym__aq //
-m4rfym__ar //
-m4rfym__as //
-m4rfym__at //
-m4rfym__au //
-m4rfym__av //
-m4rfym__aw //
-m4rfym__ax //
-m4rfym__ay //
-m4rfym__az //
-m4rfym__a0 //
-m4rfym__a1 //
-m4rfym__a2 //
-m4rfym__a3 //
-m4rfym__a4 //
-m4rfym__a5 //
-m4runawy // Runaway Trail (Barcrest)
-m4runawyb //
-m4salsa // Salsa (Barcrest)
-m4samu // Samurai (Barcrest)
-m4sayno // Say No More (Barcrest)
-m4sayno__a //
-m4sayno__b //
-m4sayno__c //
-m4sayno__d //
-m4showtm // Show Timer (Barcrest)
-m4shocm // Showcase Crystal Maze (Barcrest)
-m4shocm__a //
-m4shocm__b //
-m4shocm__c //
-m4shocm__d //
-m4shocm__e //
-m4shocm__f //
-m4shocm__g //
-m4shocm__h //
-m4shocm__i //
-m4shocm__j //
-m4shodf // Showcase Duty Free (Barcrest)
-m4shodf__a //
-m4shodf__b //
-m4shodf__c //
-m4shodf__d //
-m4shodf__e //
-m4shodf__f //
-m4shodf__g //
-m4shodf__h //
-m4shodf__i //
-m4shodf__j //
-m4shodf__k //
-m4shodf__l //
-m4silnud // Silver Nudger (Mdm?)
-m4nud2p // 2p Nudger (Mdm?)
-m4ctn // Tuppenny Nudger Classic (Mdm?)
-m4silshd // Silver Shadow (Barcrest)
-m4silshda //
-m4silshdb //
-m4sgrab // Smash 'n' Grab (Barcrest)
-m4sgraba //
-m4sgrabb //
-m4solsil // Solid Silver Club (Barcrest)
-m4solsila //
-m4sss // Spend Spend Spend (Barcrest)
-m4sss__a //
-m4sss__b //
-m4sss__c //
-m4sss__d //
-m4sss__e //
-m4sss__f //
-m4sss__g //
-m4sss__h //
-m4sss__i //
-m4sss__j //
-m4sss__k //
-m4sss__l //
-m4squid // Squids In (Barcrest)
-m4squid__a //
-m4squid__b //
-m4squid__c //
-m4stakeu // Stake Up Club (Barcrest)
-m4stakeua //
-m4stards // Stardust (Barcrest)
-m4starbr // Stars And Bars (Barcrest)
-m4steptm // Step Timer (Barcrest)
-m4stopcl // Stop the Clock (Barcrest)
-m4sunset // Sunset Boulevard (Barcrest)
-m4sunseta //
-m4sunsetb //
-m4sunsetc //
-m4sunsetd //
-m4sunsete //
-m4sunsetf //
-m4sunsetg //
-m4sunseth //
-m4sunseti //
-m4sunsetj //
-m4sunsetk //
-m4sunsetl //
-m4sunsetm //
-m4sunsetn //
-m4sunseto //
-m4sunsetp //
-m4sunsetq //
-m4sunsetr //
-m4sunsets //
-m4sunsett //
-m4supslt // Supa Slot (Barcrest)
-m4suptrn // Supatron (Barcrest)
-m4supbjc // Super Blackjack Club (Barcrest)
-m4supbjca //
-m4supbjcb //
-m4supbjcc //
-m4supbjcd //
-m4supbf // Super Bucks Fizz Club (Barcrest)
-m4supbfa //
-m4suphv // Super Hyper Viper (Barcrest)
-m4suphv__a //
-m4suphv__b //
-m4suphv__c //
-m4suphv__d //
-m4suphv__e //
-m4suphv__f //
-m4suphv__g //
-m4suphv__h //
-m4suphv__i //
-m4suphv__j //
-m4suphv__k //
-m4suphv__l //
-m4suphv__m //
-m4suphv__n //
-m4suphv__o //
-m4suphv__p //
-m4supst // Super Streak (Barcrest)
-m4supst__a //
-m4supst__b //
-m4supst__c //
-m4supst__d //
-m4supst__e //
-m4supst__f //
-m4supst__g //
-m4supst__h //
-m4supst__i //
-m4supst__j //
-m4supst__k //
-m4supst__l //
-m4supst__m //
-m4supst__n //
-m4supst__o //
-m4supst__p //
-m4supst__q //
-m4supst__r //
-m4supst__s //
-m4supst__t //
-m4supst__u //
-m4supst__v //
-m4supst__w //
-m4supst__x //
-m4supst__y //
-m4supst__z //
-m4supst__0 //
-m4supst__1 //
-m4supst__2 //
-m4supst__3 //
-m4supst__4 //
-m4supst__5 //
-m4supst__6 //
-m4supst__7 //
-m4supst__8 //
-m4supst__9 //
-m4supst__aa //
-m4supst__ab //
-m4supst__ac //
-m4supst__ad //
-m4supst__ae //
-m4supst__af //
-m4supst__ag //
-m4supst__ah //
-m4supst__ai //
-m4supst__aj //
-m4supst__ak //
-m4supst__al //
-m4supst__am //
-m4supst__an //
-m4supst__ao //
-m4supst__ap //
-m4supst__aq //
-m4supst__ar //
-m4supst__as //
-m4supst__at //
-m4supst__au //
-m4supst__av //
-m4supst__aw //
-m4supst__ax //
-m4supst__ay //
-m4supst__az //
-m4supst__a0 //
-m4supst__a1 //
-m4supst__a2 //
-m4supst__a3 //
-m4supst__a4 //
-m4supst__a5 //
-m4supst__a6 //
-m4supst__a7 //
-m4supst__a8 //
-m4supst__a9 //
-m4supst__ba //
-m4supst__bb //
-m4supst__bc //
-m4supst__bd //
-m4supst__be //
-m4supst__bf //
-m4supst__bg //
-m4supst__bh //
-m4supst__bi //
-m4supst__bj //
-m4supst__bk //
-m4supst__bl //
-m4supst__bm //
-m4supst__bn //
-m4supst__bo //
-m4supst__bp //
-m4supst__bq //
-m4supst__br //
-m4supst__bs //
-m4supst__bt //
-m4supst__bu //
-m4supst__bv //
-m4supst__bw //
-m4supst__bx //
-m4supst__by //
-m4supst__bz //
-m4supst__b0 //
-m4supst__b1 //
-m4supst__b2 //
-m4supst__b3 //
-m4supst__b4 //
-m4supst__b5 //
-m4suptub // Super Tubes (Barcrest)
-m4suptuba //
-m4suptwo // Super Two (Barcrest)
-m4swpnot // Swap-A-Note (Barcrest)
-m4swpnota // Swap-A-Note (Barcrest)
-m4taj // Taj Mahal (Barcrest)
-m4take5 // Take 5 (Barcrest)
-m4take2 // Take Two (Barcrest)
-m4take2a //
-m4takepk // Take Your Pick (Barcrest)
-m4takepk__a //
-m4takepk__b //
-m4takepk__c //
-m4takepk__d //
-m4takepk__e //
-m4takepk__f //
-m4takepk__g //
-m4takepk__h //
-m4takepk__i //
-m4takepk__j //
-m4takepk__k //
-m4takepk__l //
-m4takepk__m //
-m4takepk__n //
-m4takepk__o //
-m4takepk__p //
-m4takepk__q //
-m4takepk__r //
-m4takepk__s //
-m4takepk__t //
-m4takepk__u //
-m4takepk__v //
-m4takepk__w //
-m4takepk__x //
-m4takepk__y //
-m4takepk__z //
-m4takepk__0 //
-m4takepk__1 //
-m4typcl // Take Your Pick Club (Barcrest)
-m4typcl__a //
-m4typcl__b //
-m4typcl__c //
-m4typcl__d //
-m4techno // Techno Reel (Barcrest)
-m4technoa //
-m4toot // Ten Out Of Ten (Barcrest)
-m4toot__a //
-m4toot__b //
-m4toot__c //
-m4toot__d //
-m4toot__e //
-m4toot__f //
-m4toot__g //
-m4toot__h //
-m4toot__i //
-m4toot__j //
-m4toot__k //
-m4toot__l //
-m4toot__m //
-m4toot__n //
-m4toot__o //
-m4toot__p //
-m4toot__q //
-m4toot__r //
-m4toot__s //
-m4toot__t //
-m4toot__u //
-m4toot__v //
-m4toot__w //
-m4toot__x //
-m4toot__y //
-m4toot__z //
-m4toot__0 //
-m4toot__1 //
-m4toot__2 //
-m4toot__3 //
-m4toot__4 //
-m4toot__5 //
-m4toot__6 //
-m4toot__7 //
-m4toot__8 //
-m4toot__9 //
-m4toot__aa //
-m4toot__ab //
-m4toot__ac //
-m4toot__ad //
-m4toot__ae //
-m4toot__af //
-m4toot__ag //
-m4toot__ah //
-m4toot__ai //
-m4toot__aj //
-m4toot__ak //
-m4toot__al //
-m4toot__za //
-m4toot__zb //
-m4ttdia // Ten Ten Do It Again (Barcrest)
-m4ttdia__a //
-m4ttdia__b //
-m4ttdia__c //
-m4ttdia__d //
-m4ttdia__e //
-m4ttdia__f //
-m4ttdia__g //
-m4ttdia__h //
-m4ttdia__i //
-m4ttdia__j //
-m4ttdia__k //
-m4ttdia__l //
-m4ttdia__m //
-m4tiktak // Tic Tak Cash (Barcrest)
-m4toma // Tomahawk (Barcrest)
-m4topact // Top Action (Barcrest)
-m4topacta //
-m4topdk // Top Deck (Barcrest)
-m4topgr // Top Gear (Barcrest)
-m4toprn // Top Run (Barcrest)
-m4topst // Top Stop (Barcrest)
-m4toptak // Top Take (Barcrest)
-m4topten // Top Tenner (Barcrest)
-m4topten__a //
-m4topten__b //
-m4topten__e //
-m4topten__f //
-m4topten__g //
-m4topten__h //
-m4topten__i //
-m4topten__j //
-m4topten__k //
-m4topten__l //
-m4topten__m //
-m4topten__n //
-m4topten__o //
-m4topten__p //
-m4topten__q //
-m4topten__r //
-m4topten__s //
-m4topten__t //
-m4topten__u //
-m4topten__v //
-m4topten__w //
-m4topten__x //
-m4topten__y //
-m4topten__z //
-m4topten__0 //
-m4topten__1 //
-m4topten__2 //
-m4topten__3 //
-m4topten__4 //
-m4topten__5 //
-m4topten__6 //
-m4topten__7 //
-m4topten__8 //
-m4topten__9 //
-m4topten__aa //
-m4topten__ab //
-m4topten__ac //
-m4topten__ad //
-m4topten__ae //
-m4topten__af //
-m4topten__ag //
-m4topten__ah //
-m4topten__ai //
-m4topten__aj //
-m4topten__ak //
-m4topten__al //
-m4topten__am //
-m4topten__an //
-m4topten__ao //
-m4topten__ap //
-m4topten__aq //
-m4topten__ar //
-m4topten__as //
-m4topten__at //
-m4topten__au //
-m4topten__av //
-m4topten__aw //
-m4topten__ax //
-m4toptena //
-m4toplot // Top The Lot (Barcrest)
-m4toptim // Top Timer (Barcrest)
-m4toptima //
-m4tricol // Tricolor (Barcrest)
-m4tribnk // Triple Bank (Barcrest)
-m4tridic // Triple Dice (Barcrest)
-m4tropcl // Tropicana Club (Barcrest)
-m4tropcla //
-m4tropclb //
-m4tropclc //
-m4tropcld //
-m4tupen // Tuppenny Cracker (Barcrest - Bootleg)
-m4tbplay // Turbo Play (Barcrest)
-m4tbplaya //
-m4tbplayb //
-m4tbreel // Turbo Reel (Barcrest)
-m4tbrldx // Turbo Reel Deluxe (Barcrest)
-m4tutfrt // Tutti Fruity (Barcrest)
-m4tutfrt__a //
-m4tutfrt__b //
-m4tutfrt__c //
-m4tutfrt__d //
-m4tutfrt__e //
-m4tutfrt__f //
-m4tutfrt__g //
-m4tutfrt__h //
-m4tutfrt__i //
-m4tutfrt__j //
-m4tutfrt__k //
-m4tutfrt__l //
-m4tutfrt__m //
-m4tutfrt__n //
-m4tutfrt__o //
-m4tutfrt__p //
-m4tutfrt__q //
-m4tutfrt__r //
-m4tutfrt__s //
-m4tutfrt__t //
-m4tutfrt__u //
-m4tutfrt__v //
-m4tutfrt__w //
-m4tutfrt__x //
-m4tutfrt__y //
-m4tutfrt__z //
-m4tutfrt__0 //
-m4tutfrt__1 //
-m4tutfrt__2 //
-m4tutfrt__3 //
-m4tutfrt__4 //
-m4tutfrt__5 //
-m4tutfrt__6 //
-m4tutfrt__7 //
-m4tutfrt__8 //
-m4tutfrt__9 //
-m4tutfrt__aa //
-m4tutfrt__ab //
-m4tutfrt__ac //
-m4tutfrt__ad //
-m4tutfrt__ae //
-m4tutfrt__af //
-m4tutfrt__ag //
-m4tutfrt__ai //
-m4tutfrt__aj //
-m4tutfrt__ak //
-m4tutfrt__al //
-m4tutfrt__am //
-m4tutfrt__an //
-m4tutfrt__ao //
-m4tutfrt__ap //
-m4tutfrt__aq //
-m4tutfrt__ar //
-m4tutfrt__as //
-m4tutfrt__at //
-m4tutfrt__au //
-m4tutfrt__av //
-m4tutfrt__aw //
-m4tutfrt__ax //
-m4tutfrt__ay //
-m4tutfrt__az //
-m4tutfrt__a0 //
-m4tutfrt__a1 //
-m4tutfrt__a2 //
-m4tutfrt__a3 //
-m4tutfrt__a4 //
-m4tutfrt__a5 //
-m4tutcl // Tutti Fruity Classic (Barcrest)
-m4tutcl__a //
-m4tutcl__b //
-m4tutcl__c //
-m4tutcl__d //
-m4tutcl__e //
-m4tutcl__f //
-m4tutcl__g //
-m4tutcl__h //
-m4tutcl__i //
-m4tutcl__j //
-m4tutcl__k //
-m421 // Twenty One (Barcrest)
-m4twilgt // Twilight (Barcrest)
-m4twintm // Twin Timer (Barcrest)
-m4twist // Twist Again (Barcrest)
-m4twista //
-m4twistb //
-m4univ // Universe (Barcrest)
-m4uuaw // Up Up and Away (Barcrest)
-m4uuaw__a //
-m4uuaw__b //
-m4uuaw__c //
-m4uuaw__d //
-m4uuaw__e //
-m4uuaw__f //
-m4uuaw__g //
-m4uuaw__h //
-m4uuaw__i //
-m4uuaw__j //
-m4uuaw__k //
-m4uuaw__l //
-m4uuaw__m //
-m4uuaw__n //
-m4uuaw__o //
-m4uuaw__p //
-m4uuaw__q //
-m4uuaw__r //
-m4uuaw__s //
-m4uuaw__t //
-m4uuaw__u //
-m4uuaw__v //
-m4uuaw__w //
-m4uuaw__x //
-m4uuaw__y //
-m4uuaw__z //
-m4uuaw__0 //
-m4uuaw__1 //
-m4uuaw__2 //
-m4uuaw__3 //
-m4uuaw__4 //
-m4uuaw__5 //
-m4uuaw__6 //
-m4uuaw__7 //
-m4uuaw__8 //
-m4uuaw__9 //
-m4uuaw__aa //
-m4uuaw__ab //
-m4uuaw__ac //
-m4uuaw__ad //
-m4uuaw__ae //
-m4uuaw__af //
-m4uuaw__ag //
-m4uuaw__ah //
-m4uuaw__ai //
-m4uuaw__aj //
-m4uuaw__ak //
-m4uuaw__al //
-m4uuaw__am //
-m4uuaw__an //
-m4uuaw__ao //
-m4uuaw__ap //
-m4uuaw__aq //
-m4vegast // Vegas Strip (Barcrest)
-m4vegast__a //
-m4vegast__b //
-m4vegast__c //
-m4vegast__d //
-m4vegast__e //
-m4vegast__f //
-m4vegast__g //
-m4vegast__h //
-m4vegast__i //
-m4vegast__j //
-m4vegast__k //
-m4vegast__l //
-m4vegast__m //
-m4vegast__n //
-m4vegast__o //
-m4vegast__p //
-m4vegast__q //
-m4vegast__r //
-m4vegast__s //
-m4vegast__t //
-m4vegast__u //
-m4vegast__v //
-m4vegast__w //
-m4vegast__x //
-m4vegastg //
-m4vivaes // Viva Espana (Barcrest)
-m4vivaes__a //
-m4vivaes__b //
-m4vivaes__c //
-m4vivaes__d //
-m4vivaes__e //
-m4vivaes__f //
-m4vivaes__g //
-m4vivaes__h //
-m4vivaes__i //
-m4vivaes__j //
-m4vivaes__k //
-m4vivaes__l //
-m4vivaes__m //
-m4vivaes__n //
-m4vivaes__o //
-m4vivaes__p //
-m4vivaes__q //
-m4vivaes__r //
-m4vivaes__s //
-m4vivaes__t //
-m4vivaes__u //
-m4vivaes__v //
-m4vivaes__w //
-m4vivaes__x //
-m4vivaes__y //
-m4vivaes__z //
-m4vivaes__0 //
-m4vivaes__1 //
-m4vivaes__2 //
-m4vivaes__3 //
-m4vivaes__4 //
-m4vivaes__5 //
-m4vivaes__6 //
-m4vivaes__7 //
-m4vivaes__8 //
-m4vivaes__9 //
-m4vivaes__aa //
-m4vivaes__ab //
-m4vivaes__ac //
-m4vivaes__ad //
-m4vivaes__ae //
-m4vivaes__af //
-m4vivaes__ag //
-m4vivaes__ah //
-m4vivaes__ai //
-m4vivaes__aj //
-m4vivaes__ak //
-m4vivaes__al //
-m4vivaes__am //
-m4vivaes__an //
-m4vivaes__ao //
-m4vivaes__ap //
-m4vivess // Viva Espana Showcase (Barcrest)
-m4vivess__a //
-m4vivess__b //
-m4vivess__c //
-m4vivess__d //
-m4vivess__f //
-m4vivess__g //
-m4vivess__i //
-m4vivess__j //
-m4vivess__k //
-m4vivess__l //
-m4vivess__m //
-m4vivess__n //
-m4vivess__o //
-m4vivess__p //
-m4vivalvd //
-m4vivalv // Viva Las Vegas (Barcrest)
-m4vivalv__a //
-m4vivalv__b //
-m4vivalv__c //
-m4vivalv__e //
-m4vivalv__f //
-m4vivalv__g //
-m4vivalv__h //
-m4vivalv__i //
-m4vivalv__j //
-m4vivalv__k //
-m4vivalv__l //
-m4vivalv__m //
-m4vivalv__n //
-m4vivalv__o //
-m4vivalv__p //
-m4vivalv__q //
-m4vivalv__r //
-m4vivalv__s //
-m4vivalv__t //
-m4vivalv__u //
-m4vivalv__v //
-m4vivalv__w //
-m4vivalv__x //
-m4vivalv__y //
-m4vivalv__z //
-m4vivalv__0 //
-m4vivalv__1 //
-m4vivalv__2 //
-m4vivalv__3 //
-m4vivalv__4 //
-m4vivalv__5 //
-m4vivalv__6 //
-m4vivalv__7 //
-m4vivalv__8 //
-m4viz // Viz (Barcrest)
-m4viz__a //
-m4viz__b //
-m4viz__c //
-m4viz__d //
-m4viz__e //
-m4viz__f //
-m4viz__g //
-m4viz__h //
-m4viz__i //
-m4viz__j //
-m4viz__k //
-m4viz__l //
-m4viz__m //
-m4viz__n //
-m4viz__o //
-m4viz__p //
-m4viz__q //
-m4viz__r //
-m4viz__s //
-m4viz__t //
-m4viz__u //
-m4viz__v //
-m4viz__w //
-m4voodoo // Voodoo 1000 (Barcrest)
-m4wayin // Way In (Barcrest)
-m4wayina //
-m4wildms // Wild Mystery (Barcrest)
-m4wildtm // Wild Timer (Barcrest)
-m4wta // Winner Takes All (Barcrest)
-m4wta__b //
-m4wta__d //
-m4wta__e //
-m4wta__f //
-m4wta__g //
-m4wta__h //
-m4wta__i //
-m4wta__j //
-m4wta__k //
-m4wta__l //
-m4wta__m //
-m4wta__n //
-m4wta__o //
-m4wta__p //
-m4wta__q //
-m4wta__r //
-m4wta__s //
-m4wta__t //
-m4wta__u //
-m4wta__v //
-m4wta__w //
-m4wta__x //
-m4wta__y //
-m4wta__z //
-m4wta__0 //
-m4wta__1 //
-m4wta__2 //
-m4wta__3 //
-m4wta__4 //
-m4wta__5 //
-m4wta__6 //
-m4wta__7 //
-m4wta__8 //
-m4wta__9 //
-m4wta__aa //
-m4wta__ab //
-m4wta__ac //
-m4wta__ad //
-m4wta__ae //
-m4wta__af //
-m4wta__ag //
-m4ch30 // Unknown MPU4 'CH30' (Barcrest)
-m4sb5 // Unknown MPU4 'BSB 0.3' (Barcrest)
-m4stc // Unknown MPU4 'STC 0.1' (Barcrest)
-
-/* Bwb */
-
-m4acechs // Ace Chase (Bwb)
-m4acechs__a //
-m4acechs__b //
-m4acechs__c //
-m4acechs__d //
-m4acechs__e //
-m4acechs__f //
-m4acechs__g //
-m4acechs__h //
-m4acechs__i //
-m4acechs__j //
-m4acechs__k //
-m4acechs__l //
-m4acechs__m //
-m4acechs__n //
-m4acechs__o //
-m4acechs__p //
-m4acechs__q //
-m4acechs__r //
-m4acechs__s //
-m4acechs__t //
-m4acechs__u //
-m4bigmt // The Big Match (Bwb)
-m4bigmt__a //
-m4bigmt__b //
-m4bigmt__c //
-m4bigmt__d //
-m4bigmt__e //
-m4bigmt__f //
-m4bingbl // Bingo Belle (Bwb)
-m4bingbl__a //
-m4bingbl__b //
-m4bingbl__c //
-m4bingbl__d //
-m4bingbl__e //
-m4bingbl__f //
-m4bingbl__g //
-m4bingbs // Bingo Belle Showcase (Bwb)
-m4bingbs__a //
-m4bingbs__b //
-m4bingbs__c //
-m4bingbs__d //
-m4bingbs__e //
-m4bingbs__f //
-m4bingcl // Bingo Club (Bwb)
-m4bingcl__a //
-m4bingcl__b //
-m4blflsh // Blue Flash (Bwb)
-m4blflsha //
-m4blflshb //
-m4blflshc //
-m4blflshd //
-m4blflshe //
-m4cshenc // Cash Encounters (Bwb)
-m4cshenc__a //
-m4cshenc__b //
-m4cshenc__c //
-m4cshenc__d //
-m4czne // Cash Zone (Bwb)
-m4csoc // Championship Soccer (Bwb)
-m4csoc__a //
-m4csoc__b //
-m4csoc__c //
-m4csoc__d //
-m4csoc__e //
-m4csoc__f //
-m4csoc__g //
-m4csoc__h //
-m4csoc__i //
-m4csoc__j //
-m4cpycat // Copy Cat (Bwb)
-m4cpycat__a //
-m4cpycat__b //
-m4cpycat__c //
-m4cpycat__d //
-m4cpycat__e //
-m4cpycat__f //
-m4cpycat__g //
-m4cpycat__h //
-m4cpycat__i //
-m4cpycat__j //
-m4cpycat__k //
-m4cpycat__l //
-m4cpycat__m //
-m4cpycat__n //
-m4cpycat__o //
-m4cpycat__p //
-m4cpycat__q //
-m4cpycat__r //
-m4cpycat__s //
-m4cpycat__t //
-m4cpycat__u //
-m4cpycat__v //
-m4cpycat__w //
-m4cpycat__x //
-m4cpycat__y //
-m4cpycat__z //
-m4cpycat__0 //
-m4cpycat__1 //
-m4cpycat__2 //
-m4cpycat__3 //
-m4cpycat__4 //
-m4cpycat__5 //
-m4cpycat__6 //
-m4cpycat__7 //
-m4cpycat__8 //
-m4cpfinl // Cup Final (Bwb)
-m4cpfinl__a //
-m4cpfinl__b //
-m4cpfinl__c //
-m4cpfinl__d //
-m4cpfinl__e //
-m4cpfinl__f //
-m4cpfinl__g //
-m4cpfinl__h //
-m4cpfinl__i //
-m4cpfinl__j //
-m4cpfinl__k //
-m4danced // Dancing Diamonds (Bwb)
-m4danced__a //
-m4danced__b //
-m4danced__c //
-m4danced__d //
-m4danced__e //
-m4danced__f //
-m4danced__g //
-m4danced__h //
-m4danced__i //
-m4danced__j //
-m4danced__k //
-m4danced__l //
-m4danced__m //
-m4danced__n //
-m4danced__o //
-m4danced__p //
-m4danced__q //
-m4danced__r //
-m4danced__s //
-m4danced__t //
-m4danced__u //
-m4danced__v //
-m4danced__w //
-m4daytn // Daytona (Bwb)
-m4daytn__a //
-m4daytn__b //
-m4daytn__c //
-m4daytn__d //
-m4daytn__e //
-m4daytn__f //
-m4daytn__g //
-m4daytn__h //
-m4daytn__i //
-m4daytn__j //
-m4daytn__k //
-m4daytn__l //
-m4daytn__m //
-m4daytn__n //
-m4excal // Excalibur (Bwb)
-m4excal__a //
-m4excal__b //
-m4excal__c //
-m4excal__d //
-m4excal__e //
-m4excal__f //
-m4excal__g //
-m4excal__h //
-m4excal__i //
-m4excal__j //
-m4exotic // Exotic Fruits (Bwb)
-m4exotic__a //
-m4exotic__b //
-m4exotic__c //
-m4exotic__d //
-m4exotic__e //
-m4firice // Fire & Ice (Bwb)
-m4firice__a //
-m4firice__b //
-m4firice__c //
-m4firice__d //
-m4firice__e //
-m4firice__f //
-m4firice__g //
-m4firice__h //
-m4firice__i //
-m4firice__j //
-m4flshlt // Flashlite (Bwb)
-m4flshlta //
-m4flshltb //
-m4flshltc //
-m4flshltd //
-m4flshlte //
-m4flshltf //
-m4flshltg //
-m4fourmr // Four More (Bwb)
-m4harle // Harlequin (Bwb)
-m4harle__a //
-m4harle__b //
-m4harle__c //
-m4harle__d //
-m4harle__e //
-m4harle__f //
-m4harle__g //
-m4harle__h //
-m4harle__i //
-m4harle__j //
-m4harle__k //
-m4harle__l //
-m4harle__m //
-m4harle__n //
-m4harle__o //
-m4harle__p //
-m4harle__q //
-m4harle__r //
-m4harle__s //
-m4harle__t //
-m4harle__u //
-m4harle__v //
-m4harle__w //
-m4harle__x //
-m4hvhel // Heaven & Hell (Bwb)
-m4hvhel__a //
-m4hvhel__b //
-m4hvhel__c //
-m4hvhel__d //
-m4hvhel__e //
-m4hvhel__f //
-m4hvhel__g //
-m4hvhel__h //
-m4holywd // Hollywood (Bwb)
-m4indycr // Indy Cars (Bwb)
-m4indycr__a //
-m4indycr__b //
-m4indycr__c //
-m4indycr__d //
-m4indycr__e //
-m4indycr__f //
-m4jakjok // Jackpot Jokers (Bwb)
-m4jakjok__a //
-m4jakjok__b //
-m4jakjok__c //
-m4jakjoka
-m4jflash // Jumping Jack Flash (Bwb)
-m4jflash__a //
-m4jflash__b //
-m4jflash__c //
-m4jflash__d //
-m4jflash__e //
-m4jflash__f //
-m4jflash__g //
-m4jflash__h //
-m4jflash__i //
-m4kingq // Kings & Queens (Bwb)
-m4kingq__a //
-m4kingq__b //
-m4kingq__c //
-m4kingq__d //
-m4kingq__e //
-m4kingq__f //
-m4kingq__g //
-m4kingq__h //
-m4kingq__i //
-m4kingq__j //
-m4kingq__k //
-m4kingq__l //
-m4kingq__m //
-m4kingq__n //
-m4kingq__o //
-m4kingq__p //
-m4kingq__r //
-m4kingq__s //
-m4kingq__t //
-m4kingqc // Kings & Queens Classic (Bwb)
-m4kingqc__a //
-m4kingqc__b //
-m4kingqc__c //
-m4kingqc__d //
-m4kingqc__e //
-m4kingqc__f //
-m4kingqc__g //
-m4kingqc__h //
-m4kingqc__i //
-m4kingqc__j //
-m4kingqc__k //
-m4kingqc__l //
-m4kingqc__m //
-m4kingqc__n //
-m4kingqc__q //
-m4kingqc__r //
-m4kingqc__s //
-m4kingqc__t //
-m4kingqc__u //
-m4kingqc__v //
-m4kingqc__w //
-m4kingqc__x //
-m4kingqc__y //
-m4kingqc__z //
-m4kingqc__0 //
-m4kingqc__1 //
-m4kingqc__2 //
-m4kingqc__3 //
-m4kingqc__4 //
-m4kingqc__5 //
-m4lazy // Lazy Bones (Bwb)
-m4lazya //
-m4lazyb //
-m4lvlcl // Lucky Las Vegas Classic (Bwb)
-m4lvlcl__a //
-m4lvlcl__b //
-m4lvlcl__c //
-m4lvlcl__d //
-m4lvlcl__e //
-m4lvlcl__f //
-m4ln7 // Lucky No7 (Bwb)
-m4ln7__a //
-m4ln7__b //
-m4ln7__c //
-m4ln7__d //
-m4madmon // Mad Money (Bwb)
-m4madmon__a //
-m4madmon__b //
-m4madmon__c //
-m4madmon__d //
-m4madmon__e //
-m4madmon__f //
-m4madmon__g //
-m4madmon__h //
-m4madmon__i //
-m4madmon__j //
-m4madmon__k //
-m4madmnc // Mad Money Classic (Bwb)
-m4madmnc__a //
-m4madmnc__b //
-m4madmnc__c //
-m4madmnc__d //
-m4madmnc__e //
-m4madmnc__f //
-m4madmnc__g //
-m4madmnc__h //
-m4madmnc__i //
-m4madmnc__j //
-m4madmnc__k //
-m4madmnc__l //
-m4madmnc__m //
-m4madmnc__n //
-m4madmnc__o //
-m4madmnc__p //
-m4madmnc__q //
-m4madmnc__r //
-m4madmnc__s //
-m4madmnc__t //
-m4madmnc__u //
-m4madmnc__v //
-m4madmnc__w //
-m4mmm // Money Mummy Money (Bwb)
-m4mmm__a //
-m4mmm__b //
-m4mmm__c //
-m4mmm__d //
-m4mmm__e //
-m4mmm__f //
-m4oadrac // Ooh Aah Dracula (Bwb)
-m4oadrac__a //
-m4oadrac__b //
-m4oadrac__c //
-m4oadrac__d //
-m4oadrac__e //
-m4oadrac__f //
-m4oadrac__g //
-m4oadrac__h //
-m4orland // Orlando Magic (Bwb)
-m4orland__a //
-m4orland__b //
-m4orland__c //
-m4orland__d //
-m4orland__e //
-m4orland__f //
-m4orland__g //
-m4orland__h //
-m4pzbing // Prize Bingo (Bwb)
-m4pzbing__a //
-m4pzbing__b //
-m4pzbing__c //
-m4pzbing__d //
-m4pzbing__e //
-m4quidin // Quids In (Bwb)
-m4quidin__a //
-m4quidin__b //
-m4quidis // Quids In Showcase (Bwb)
-m4quidis__a //
-m4quidis__b //
-m4quidis__c //
-m4quidis__d //
-m4rackem // Rack Em Up (Bwb)
-m4rackem__a //
-m4rackem__b //
-m4rackem__c //
-m4rackem__d //
-m4rbgold // Rainbow Gold (Bwb)
-m4rbgold__a //
-m4rbgold__b //
-m4rbgold__c //
-m4rbgold__d //
-m4rbgold__e //
-m4rbgold__f //
-m4rbgold__g //
-m4rbgold__h //
-m4rbgold__i //
-m4rbgold__j //
-m4rbgold__k //
-m4rbgold__l //
-m4rbgold__m //
-m4rbgold__n //
-m4rbgold__o //
-m4rbgold__p //
-m4rbgold__q //
-m4rhfev // Red Hot Fever (Bwb)
-m4rhfev__a //
-m4rhfev__b //
-m4rhfev__c //
-m4rhfev__d //
-m4rhs // Rocky Horror Show (Bwb)
-m4rhs__a //
-m4rhs__b //
-m4rhs__c //
-m4rhs__d //
-m4rhs__e //
-m4rhs__f //
-m4rhs__g //
-m4rhs__h //
-m4rhs__i //
-m4rhs__j //
-m4rhs__k //
-m4rhs__l //
-m4sinbd // Sinbad (Bwb)
-m4sinbd__a //
-m4sinbd__b //
-m4sinbd__c //
-m4sinbd__d //
-m4sinbd__e //
-m4sinbd__f //
-m4sinbd__g //
-m4sinbd__h //
-m4sinbd__i //
-m4sinbd__j //
-m4sinbd__k //
-m4sinbd__l //
-m4sinbd__m //
-m4sinbd__n //
-m4sinbd__o //
-m4sinbd__p //
-m4sinbd__q //
-m4sinbd__r //
-m4sinbd__s //
-m4sinbd__t //
-m4sinbd__u //
-m4sinbd__v //
-m4sinbd__w //
-m4sinbd__x //
-m4sky // Sky Sports (Bwb)
-m4sky__a //
-m4sky__b //
-m4sky__c //
-m4sky__d //
-m4souls // Soul Sister (Bwb)
-m4souls__a //
-m4souls__b //
-m4souls__c //
-m4souls__d //
-m4souls__e //
-m4souls__f //
-m4specu // Speculator Club (Bwb)
-m4spinbt // Spin The Bottle (Bwb)
-m4spinbt__a //
-m4spinbt__b //
-m4spinbt__c //
-m4spinbt__d //
-m4spinbt__e //
-m4spinbt__f //
-m4spinbt__g //
-m4starst // Stars & Stripes (Bwb)
-m4starst__a //
-m4starst__b //
-m4starst__c //
-m4starst__d //
-m4starst__e //
-m4starst__f //
-m4starst__g //
-m4starst__h //
-m4starst__i //
-m4starst__j //
-m4thestr // The Streak (Bwb)
-m4thestr__a //
-m4thestr__b //
-m4thestr__c //
-m4thestr__d //
-m4thestr__e //
-m4thestr__f //
-m4thestr__g //
-m4thestr__h //
-m4thestr__i //
-m4thestr__j //
-m4thestr__k //
-m4thestr__l //
-m4thestr__m //
-m4thestr__n //
-m4thestr__o //
-m4thestr__p //
-m4thestr__q //
-m4thestr__r //
-m4thestr__s //
-m4thestr__t //
-m4thestr__u //
-m4thestr__v //
-m4thestr__w //
-m4thestr__x //
-m4thestr__y //
-m4sunclb // Sun Club (Bwb)
-m4sunclba //
-m4sunscl // Sunset Club (Bwb)
-m4sunscla //
-m4sunsclb //
-m4supleg // Super League (Bwb)
-m4supleg__a //
-m4supleg__b //
-m4supleg__c //
-m4supleg__d //
-m4suplegw //
-m4supscr // Super Soccer (Bwb)
-m4supscr__a //
-m4supscr__b //
-m4supscr__c //
-m4supscr__d //
-m4supscr__e //
-m4supscr__f //
-m4supscr__g //
-m4supscr__h //
-m4supscr__i //
-m4supscr__j //
-m4supscr__k //
-m4supscr__l //
-m4supscr__m //
-m4supscr__n //
-m4ssclas // Super Streak Classic (Bwb)
-m4ssclas__a //
-m4ssclas__b //
-m4ssclas__c //
-m4ssclas__d //
-m4ssclas__e //
-m4ssclas__f //
-m4sure // Sure Thing (Bwb)
-m4sure__a //
-m4sure__b //
-m4sure__c //
-m4tic // Tic Tac Toe (Bwb)
-m4tic__a //
-m4tic__b //
-m4tic__c //
-m4tic__d //
-m4tic__e //
-m4tic__f //
-m4tic__g //
-m4tic__h //
-m4tic__i //
-m4tic__j //
-m4tic__k //
-m4tic__l //
-m4tic__m //
-m4tic__n //
-m4tic__o //
-m4tic__p //
-m4tic__r //
-m4tic__s //
-m4ticcla // Tic Tac Toe Classic (Bwb)
-m4ticcla__a //
-m4ticcla__b //
-m4ticcla__c //
-m4ticcla__d //
-m4ticcla__e //
-m4ticcla__f //
-m4ticcla__g //
-m4ticcla__h //
-m4ticcla__i //
-m4ticcla__j //
-m4ticcla__k //
-m4ticcla__l //
-m4ticcla__m //
-m4ticcla__n //
-m4ticcla__o //
-m4ticcla__p //
-m4ticcla__q //
-m4ticcla__r //
-m4ticcla__s //
-m4ticcla__t //
-m4ticcla__u //
-m4ticcla__v //
-m4ticcla__w //
-m4ticcla__x //
-m4ticcla__y //
-m4ticcla__z //
-m4ticcla__0 //
-m4ticglc // Tic Tac Toe Gold (Bwb)
-m4ticglc__a //
-m4ticglc__b //
-m4ticglc__c //
-m4ticglc__d //
-m4topdog // Top Dog (Bwb)
-m4topdog__a //
-m4topdog__b //
-m4topdog__c //
-m4topdog__d //
-m4topdog__e //
-m4topdog__f //
-m4topdog__g //
-m4topdog__h //
-m4topdog__i //
-m4topdog__j //
-m4topdog__k //
-m4topdog__l //
-m4topdog__m //
-m4topdog__n //
-m4topdog__o //
-m4topdog__p //
-m4topdog__q //
-m4topdog__r //
-m4topdog__s //
-m4topdog__t //
-m4topdog__u //
-m4topdog__v //
-m4topdog__w //
-m4topdog__x //
-m4topdog__y //
-m4topdog__z //
-m4trex // Trex (Bwb)
-m4trex__a //
-m4trex__b //
-m4trex__c //
-m4trex__d //
-m4trex__e //
-m4trex__f //
-m4trex__g //
-m4trex__h //
-m4trex__i //
-m4trex__j //
-m4trex__k //
-m4trex__l //
-m4volcan // Volcano (Bwb)
-m4volcan__a //
-m4volcan__b //
-m4volcan__c //
-m4volcan__d //
-m4volcan__e //
-m4volcan__f //
-m4volcan__g //
-m4vdexpr // Voodoo Express (Bwb)
-m4vdexpr__a //
-m4vdexpr__b //
-m4vdexpr__c //
-m4vdexpr__d //
-m4xch // X-change (Bwb)
-m4xch__a //
-m4xch__b //
-m4xch__c //
-m4xch__d //
-m4xch__e //
-m4xch__f //
-m4xch__g //
-m4xch__h //
-m4xch__i //
-m4xch__j //
-m4xch__k //
-m4xs // X-s (Bwb)
-m4xs__a //
-m4xs__b //
-m4xs__c //
-m4xs__d //
-m4xs__e //
-m4xs__f //
-m4xtrm // X-treme (Bwb)
-m4xtrm__a //
-m4xtrm__b //
-
-/* Concept */
-m4rhfevc // Red Hot Fever (Concept)
-m4rhfevc__a //
-m4rhfevc__b //
-m4rhfevc__c //
-m4rhfevc__d //
-m4rhfevc__e //
-m4rhfevc__f //
-m4rhfevc__g //
-m4rhfevc__h //
-m4rhfevc__i //
-m4rhfevc__j //
-m4rhfevc__k //
-m4rhfevc__l //
-m4rhfevc__m //
-m4rhfevc__n //
-m4rhfevc__o //
-m4rhfevc__p //
-m4rhfevc__q //
-m4rhfevc__r //
-m4rhfevc__s //
-m4rhfevc__t //
-m4rhfevc__u //
-m4rhfevc__v //
-m4rhfevc__w //
-m4rhfevc__x //
-m4rhfevc__y //
-m4nudgwc // Nudge a Win (Concept)
-m4nudgwc__a //
-m4nudgwc__b //
-m4nudgwc__c //
-m4nudgwc__d //
-m4nudgwc__e //
-m4nudgwc__f //
-m4nudgwc__g //
-m4nudgwc__h //
-m4pulwnc // Pull-a-Win (Concept)
-m4pulwnc__a //
-m4pulwnc__b //
-m4pulwnc__c //
-m4pulwnc__d //
-m4pulwnc__e //
-m4pulwnc__f //
-m4pulwnc__g //
-m4pulwnc__h //
-m4pulwnc__i //
-m4pulwnc__j //
-m4pulwnc__k //
-m4pulwnc__l //
-m4pulwnc__m //
-m4pulwnc__n //
-m4pulwnc__o //
-m4pulwnc__p //
-m4pulwnc__q //
-m4pulwnc__r //
-m4pulwnc__s //
-m4pulwnc__t //
-m4pulwnc__u //
-m4pulwnc__v //
-m4pulwnc__w //
-m4pulwnc__x //
-m4pulwnc__y //
-m4pulwnc__z //
-m4pulwnc__0 //
-m4pulwnc__1 //
-m4pulwnc__2 //
-m4pulwnc__3 //
-m4pulwnc__4 //
-m4spnwnc // Spin-A-Win (Concept)
-m4spnwnc__a //
-m4spnwnc__b //
-
-/* Empire */
-
-m4apachg // Apache Gold (Empire)
-m4apachga //
-m4apachgb //
-m4apachgc //
-m4apachgd //
-m4apachge //
-m4apachgf //
-m4bangrs // Bangers 'n' Cash (Empire)
-m4bangrsa //
-m4bangrsb //
-m4bankrd // Bank Raid (Empire)
-m4bankrda //
-m4bankrdb //
-m4bankrdc //
-m4bankrdd //
-m4bigchs // Big Cheese (Empire)
-m4bigchsa //
-m4bigchsb //
-m4cstrik // Cash Strike (Empire)
-m4cstrika //
-m4cstrikb //
-m4cstrikc //
-m4chacec // Chase The Ace [Cards] (Empire)
-m4chaceca //
-m4chacef // Chase The Ace [Fruits] (Empire)
-m4chacefa //
-m4chacefb //
-m4chacefc //
-m4crzcap // Crazy Capers (Empire)
-m4crzcapa //
-m4crzcapb //
-m4crzcapc //
-m4crfire // Crossfire (Empire)
-m4crfirea //
-m4eureka // Eureka (Empire)
-m4eurekaa //
-m4eurekab //
-m4fright // Fright Night (Empire)
-m4frighta //
-m4frightb //
-m4frightc //
-m4frightd //
-m4frighte //
-m4frightf //
-m4gamblr // The Gambler (Empire)
-m4gamblra //
-m4gamblrb //
-m4gtrain // Ghost Train (Empire)
-m4gtraina //
-m4gtrainb //
-m4gtrainc //
-m4goldfv // Gold Fever (Empire)
-m4haunt // Haunted House (Empire)
-m4haunta //
-m4hauntb //
-m4hauntc //
-m4hauntd //
-m4hisprt // High Spirits (Empire)
-m4hisprta //
-m4hisprtb //
-m4hisprtc //
-m4hisprtd //
-m4hisprte //
-m4hotcsh // Hot Cash (Empire)
-m4hotcsha //
-m4hotcshb //
-m4hotcshc //
-m4monspn // Money Spinner (Empire)
-m4monspna //
-m4monspnb //
-m4pbnudg // Pinball Nudger (Empire)
-m4pbnudga //
-m4pbnudgb //
-m4pitfal // Pitfall (Empire)
-m4pitfala //
-m4pitfalb //
-m4pitfalc //
-m4ttrail // Treasure Trail (Empire)
-m4ttraila //
-m4ttrailb //
-m4jne // The Jackpot's Not Enough (Empire?)
-
-/* MDM */
-
-m42punlm // 2p Unlimited (Mdm)
-m4bigapl // The Big Apple (Mdm)
-m4bigapla //
-m4bigaplb //
-m4bigaplc //
-m4bigapld //
-m4bigaple //
-m4blztrl // Blazing Trails (Mdm)
-m4blztrla //
-m4bodymt // Body Match (Mdm)
-m4coloss // Colossus (Mdm)
-m4colossa //
-m4colossb //
-m4colossc //
-m4colossd //
-m4colosse //
-m4colossf //
-m4colossg //
-m4firebl // Fireball (Mdm)
-m4firebla //
-m4fireblb //
-m4fireblc //
-m4firebld //
-m4mayhem // Mayhem (Mdm)
-m4mayhema //
-m4themob // The Mob (Mdm)
-m4themoba //
-m4themobb //
-m4nudbon // Nudge Bonanza (Mdm)
-m4nudbona //
-m4nudgem // Nudge Gems (Mdm)
-m4smshgb // Smash 'n' Grab (Mdm)
-m4smshgba //
-m4smshgbb //
-m4smshgbc //
-m4snklad // Snakes & Ladders (Mdm)
-
-/* Pcp */
-
-m4cshino //Cashino Deluxe (Pcp)
-m4jjc //Jumping Jack Cash (Pcp)
-m4jjca //
-m4spton //Spot On (Pcp)
-m4clbrpl //Club Replay (PCP)
-m4exlin //Extra Lines (Pcp)
-m4exlina //
-m4supjst //Super Jester (Pcp)
-m4supjsta
-m4supjstb
-m4supjstc
-m4supjstd
-m4supjste
-
-/* Nova - German licensed Barcrest / Bwb sets? */
-
-m4bigban //Big Bandit (Nova)
-m4crzcsn //Crazy Casino (Nova)
-m4crzcav //Crazy Cavern (Nova)
-m4dragon //Dragon (Nova)
-m4hilonv //Hi Lo Casino (Nova)
-m4octo //Octopus (Nova)
-m4sctagt //Secret Agent (Nova)
-
-/* Union */
-
-m4cwalk // Cake Walk (Union)
-m4eezee // Eezee Fruits (Union)
-m4frdrop // Fruit Drop (Union)
-m4gobana // Go Bananas (Union)
-m4gobanaa //
-m4gobanab //
-m4gobanac //
-m4gobanad //
-m4lotty // Lotty Time (Union)
-m4maxmze // Maximize (Union)
-m4maxmzea //
-m4maxmzeb //
-m4maxmzec //
-m4maxmzed //
-m4mecca // Mecca Money (Union)
-m4purmad // Pure Madness (Union)
-m4revolv // Revolva (Union)
-m4rotex // Rotex (Union)
-m4select // Select (Union)
-m4supfru // Supafruits (Union)
-m4supfrua //
-m4trimad // Triple Madness (Union)
-m4unibox // Unibox (Union)
-m4uniboxa //
-m4unique // Unique (Union)
-m4uniquep //
-m4crzbn // Crazy Bingo
-
-/* Union + Empire */
-
-m4gvibes // Good Vibrations (Union - Empire)
-m4gvibesa //
-m4rckrol // Rock 'n' Roll (Union - Empire)
-m4rckrola //
-m4rckrolb //
-
-/* Others */
-
-m4aao // Against All Odds (Eurotek)
-m4bandgd // Bands Of Gold (Eurogames)
-m4bangin // Bangin' Away (Global)
-m4vfm // Value For Money (Global)
-m4bangina //
-m4banginb //
-m4wwc // Wacky Weekend Club (Global)
-m4wwca //
-m4wwcb //
-m4screw // Screwin' Around (Global)
-m4screwp
-m4screwa
-m4screwb
-m4bigben // Big Ben (Coinworld)
-m4bigbena //
-m4bigbenb //
-m4bigbend //
-m4bigbene //
-m4kqclub // Kings & Queens Club (Newby)
-m4snookr // Snooker (Eurocoin)
-m4spnwin // Spin A Win (Cotswold Microsystems)
-m4spnwina //
-m4stakex // Stake X (Leisurama)
-m4stakexa // Stake X (Leisurama)
-m4sstrek // Super Streak (bootleg)
-m4boltbl // Bolt From The Blue (DJE)
-m4boltbla //
-m4boltblb //
-m4boltblc //
-m4dblchn // Double Chance (DJE)
-m4stand2 // Stand To Deliver (DJE)
-
-/* Crystal */
-
-m4frkstn // Frank 'n' Stein (unencrypted)
-m4frkstna //
-m4frkstnb //
-m4frkstnc //
-m4frkstnd //
-m4frkstne //
-m4frkstnf //
-m4frkstng //
-m4frkstnh //
-m4aladn // Aladdin's Cave (Crystal)
-m4aladna //
-m4aladnb //
-m4aladnc //
-m4aladnd //
-m4aladne //
-m4aladnf //
-m4aladng //
-m4aladnh //
-m4aladni //
-m4bagcsh // Bags Of Cash Club (Crystal)
-m4bagcsha //
-m4bucclb // Buccaneer Club (Crystal)
-m4bucclba //
-m4bucclbb //
-m4bucclbc //
-m4bullio // Bullion Club (Crystal)
-m4bullioa //
-m4bulliob //
-m4carou // Carousel Club (Crystal)
-m4caroua //
-m4caroub //
-m4carouc //
-m4cclimb // Crazy Climber (Crystal)
-m4cclimba //
-m4crzcl // Crazy Climber Club (Crystal)
-m4crzcla //
-m4crzclb //
-m4crzclc //
-m4crzcld //
-m4elitc // Elite Club (Crystal)
-m4elitca //
-m4fairg // Fairground (Crystal)
-m4frmani // Fruit Mania (Crystal)
-m4frmania //
-m4frmanib //
-m4frmanic //
-m4goldxc // Gold Exchange Club (Crystal)
-m4goldxca //
-m4goldxcb //
-m4goldxcc //
-m4goldxcd //
-m4goldxce //
-m4goldfc // Gold Fever (Crystal)
-m4goldfca //
-m4goldfcb //
-m4hirol // Hi Roller Club (Crystal)
-m4hirola //
-m4kingqn // Kings & Queens Club (Crystal)
-m4kingqna //
-m4lotclb // Lottery Club (Crystal)
-m4lotclba //
-m4montrl // Money Trail (Crystal)
-m4montrla //
-m4montrlb //
-m4montrlc //
-m4montrld //
-m4mystiq // Mystique Club (Crystal)
-m4mystiqa //
-m4mystiqb //
-m4mystiqc //
-m4nudwin // Nudge & Win (Crystal)
-m4nudwina //
-m4paracl // Paradise Club (Crystal)
-m4paracla //
-m4rlpick // Reel Picks (Crystal)
-m4rlpicka //
-m4rlpickb //
-m4rlpickc //
-m4twstr // Twister (Crystal)
-m4twstra //
-m4twstrb //
-m4twstrc //
-m4twstrd //
-m4twstcl // Twister Club (Crystal)
-m4twstcla //
-m4twstclb //
-m4dz // Danger Zone (Crystal?)
-m4tylb // Thank Your Lucky Bars (Crystal)
-m4tylba //
-m4magi7 // Magic 7s (Crystal)
-m4magi7a //
-m4rags // Rags to Riches Club (Crystal)
-m4ragsa //
-m4ragsb //
-m4ragsc //
-m4riocr // Rio Grande (Grystal)
-m4riocra //
-m4ndup // Nudge Double Up (Crystal)
-m4ndupa //
-m4ndupb //
-m4ndupc //
-
-/* Unknown */
-
-m4barcrz // Bar Crazy (unknown)
-m4bonzbn // Bingo Bonanza (unknown)
-m4cld02 // Unknown MPU4 'CLD 0.2C'
-m4dnj // Double Nudge (unknown)
-m4dnja //
-m4dnjb //
-m4matdr // Matador (unknown)
-m4ttak // Tic Tac Take (unknown)
-m4hslo // Unknown MPU4 'HOT 3.0'
-m4sbx // Super Bear X
-m4sbxa //
-m4sbxb //
-m4sbxc //
-m4sbxd //
-m4sbxe //
-m4bclimb // Bear Climber
-m4captb // Captain Bear
-m4jungj // Jungle Japes
-m4jungja //
-m4jungjb //
-m4jungjc //
-m4fsx // Fun Spot X
-m4fsxa //
-m4fsxb //
-m4unkjok // Unknown MPU4 'Joker'
-m4unkjoka //
-m4unkjokb //
-m4unkjokc //
-m4remag // Unknown MPU4 'ZTP 0.7'
-m4rmg // Unknown MPU4 'CTP 0.4'
-m4wnud // Unknown MPU4 'W Nudge'
-m4t266 // Unknown MPU4 'TTO 1.1'
-m4brnze // Bronze Voyage (unknown)
-m4brnzea //
-m4brnzeb //
-m4riotrp // Rio Tropico (unknown)
-m4ccop
-m4ccopa
-m4ccopb
-m4ccc
-m4treel
-m4treela
-m4nod
-m4dcrls // Double Crazy Reels (Qps)
-m4dcrls__a //
-m4dcrls__b //
-m4dcrls__c //
-m4dcrls__d //
-m4dcrls__e //
-m4dcrls__f //
-m4dcrls__g //
-m4dcrls__h //
-m4dcrls__i //
-m4dcrls__j //
-m4dcrls__k //
-m4dcrls__l //
-m4dcrls__m //
-m4dcrls__n //
-m4dcrls__o //
-m4dcrls__p //
-m4dcrls__q //
-m4dcrls__r //
-m4aliz // AlizBaz (Qps)
-m4bluesn // Blues Boys (Nova)
-m4c2 // Circus Circus 2 (Nova)
-m4coney // Coney Island (Qps)
-m4cfinln // Cup Final (Nova)
-m4cfinln__a //
-m4ftladn // Find the Lady (Nova)
-m4goldnn // Golden Years (Nova)
-m4jungjk // Jungle Jackpots (Mazooma - Qps)
-m4jungjk__a //
-m4jungjk__b //
-m4jungjk__c //
-m4jungjk__d //
-m4jungjk__e //
-m4clab // Cash Lab (Mazooma - Qps)
-m4clab__a //
-m4clab__b //
-m4clab__c //
-m4clab__d //
-m4clab__e //
-m4clab__f //
-m4clab__g //
-m4clab__h //
-m4clab__i //
-m4clab__j //
-m4looplt // Loop The Loot (Qps)
-m4looplt__a //
-m4looplt__b //
-m4looplt__c //
-m4looplt__d //
-m4looplt__e //
-m4looplt__f //
-m4looplt__g //
-m4looplt__h //
-m4looplt__i //
-m4looplt__j //
-m4looplt__k //
-m4looplt__l //
-m4looplt__m //
-m4mgpn // Monaco Grand Prix (Nova)
-m4olygn // Olympic Gold (Nova)
-m4olygn__a //
-m4rhnote // Red Hot Notes (Qps)
-m4rhnote__a //
-m4rhnote__b //
-m4rhnote__c //
-m4rhnote__d //
-m4rhnote__e //
-m4rhnote__f //
-m4rhnote__g //
-m4rhnote__h //
-m4rhnote__i //
-m4rhnote__j //
-m4rhnote__k //
-m4rhnote__l //
-m4rhnote__m //
-m4rhnote__n //
-m4rhnote__o //
-m4rhnote__p //
-m4rhnote__q //
-m4rhnote__r //
-m4rhnote__s //
-m4rhnote__t //
-m4rhnote__u //
-m4rhnote__v //
-m4rhnote__w //
-m4rhnote__x //
-m4rhnote__y //
-m4rhrock // Red Hot Rocks (Qps)
-m4rhrock__a //
-m4rhwhl // Red Hot Wheels (Mazooma - Qps)
-m4rhwhl__a //
-m4rhwhl__b //
-m4rhwhl__c //
-m4rdeal // Reel Deal (Qps)
-m4rdeal__a //
-m4rdeal__b //
-m4rdeal__c //
-m4rdeal__d //
-m4rdeal__e //
-m4rdeal__f //
-m4rdeal__g //
-m4rdeal__h //
-m4rdeal__i //
-m4shoknr // Shock 'n' Roll (Mazooma - Qps)
-m4shoknr__a //
-m4shoknr__b //
-m4shoknr__c //
-m4shkwav // Shockwave (Mazooma - Qps)
-m4shkwav__a //
-m4shkwav__b //
-m4shkwav__c //
-m4shkwav__d //
-m4shkwav__e //
-m4shkwav__f //
-m4shkwav__g //
-m4sinbdn // Sinbad (Nova)
-m4sinbdn__a //
-m4sinbdn__b //
-m4sinbdn__c //
-m4sinbdn__d //
-m4sinbdn__e //
-m4sinbdn__f //
-m4spotln // Spotlight (Nova)
-m4sdquid // Sundance Quid (Qps)
-m4sdquid__a //
-m4sdquid__b //
-m4sdquid__c //
-m4sdquid__d //
-m4sdquid__e //
-m4sdquid__f //
-m4sdquid__g //
-m4sdquid__h //
-m4sdquid__i //
-m4sdquid__j //
-m4sdquid__k //
-m4tornad // Tornado (Qps - Mazooma)
-m4tornad__a //
-m4tornad__b //
-m4tornad__c //
-m4tornad__d //
-m4tornad__e //
-m4tornad__f //
-m4tornad__g //
-m4vivan // Viva Las Vegas (Nova)
-m4blsbys // Blues Boys (Bwb)
-m4blsbys__a //
-m4blsbys__b //
-m4blsbys__c //
-m4blsbys__d //
-m4blsbys__e //
-m4blsbys__f //
-m4blsbys__g //
-m4blsbys__h //
-m4blsbys__i //
-m4blsbys__j //
-m4blsbys__k //
-m4blsbys__l //
-m4blsbys__m //
-m4blsbys__n //
-m4blsbys__o //
-m4blsbys__p //
-m4blsbys__q //
-m4blsbys__r //
-m4blsbys__s //
-m4blsbys__t //
-m4blsbys__u //
-m4blsbys__v //
-m4blsbys__w //
-m4blsbys__x //
-m4blsbys__y //
-m4blsbys__z //
-m4blsbys__0 //
-m4blsbys__1 //
-m4blsbys__2 //
-m4blsbys__3 //
-m4blsbys__4 //
-m4blsbys__5 //
-m4blsbys__6 //
-m4blsbys__7 //
-m4blsbys__8 //
-m4blsbys__9 //
-m4blsbys__aa //
-m4blsbys__ab //
-m4blsbys__ac //
-m4blsbys__ad //
-
-/* Unsorted */
-
-m4conn4 // Connect 4
-
-m4surf // Super Surfin' (Gemini)
-m4surfa //
-m4surfb //
-m4wife // Money Or Yer Wife (Gemini)
-m4blkgd // Black Gold (Gemini)
-m4blkgda //
-m4excam // Excalibur (Mdm)
-m4front // Final Frontier (Mdm)
-m4pick // Pick A Fruit (JPM)
-m4safar // Safari Club (Mdm)
-m4zill // Zillionare's Challenge (Pure Leisure)
-m4zilla //
-m4snowbl //
-m4hstr // Happy Streak (Coinworld)
-m4hstra //
-m4hstrb //
-m4hstrcs // Casino Happy Streak (Coinworld)
-m4hstrcsa //
-m4hstrcsb //
-m4hstrcsc //
-m4hstrcsd //
-m4ddb // Ding Dong Bells (Coinworld)
-m4ddba //
-m4hapfrt // Happy Fruits (Coinworld)
-m4hapfrta //
-m4hapfrtb //
-m4frcrak // Fruit Cracker
-m4ewshft // Each Way Shifter
-m4jiggin // Jiggin' In The Riggin'
-m4jiggina //
-m4sunday // Sunday Sport
-m4jp777 // Jackpot 777
-m4booze // Booze Cruise
-m4cbing // Cherry Bingo
-m4supsl
-m4abra // Abracadabra (Bwb)
-m4abra__a //
-m4abra__b //
-m4abra__c //
-m4wcnov // World Cup (Nova)
-m4excaln // Excalibur (Nova)
-m4excaln__a //
-
-/* Bdd? */
-m4robo //
-m4robo__a //
-m4robo__b //
-m4robo__c //
-m4robo__d //
-m4robo__e //
-m4robo__f //
-m4robo__g //
-m4robo__h //
-m4robo__i //
-m4robo__j //
-m4robo__k //
-m4robo__l //
-m4robo__m //
-m4robo__n //
-m4robo__o //
-m4robo__p //
-m4robo__q //
-m4robo__r //
-m4robo__s //
-m4robo__t //
-m4robo__u //
-m4robo__v //
-m4robo__w //
-m4robo__x //
-m4robo__y //
-m4robo__z //
-m4robo__0 //
-m4robo__1 //
-m4robo__2 //
-m4robo__3 //
-m4robo__4 //
-m4robo__5 //
-m4robo__6 //
-m4robo__7 //
-m4robo__8 //
-m4robo__9 //
-m4robo__aa //
-m4robo__ab //
-
-m4trg //
-m4trg__a //
-m4trg__b //
-m4trg__c //
-m4trg__d //
-m4trg__e //
-m4trg__f //
-m4trg__g //
-m4trg__h //
-m4trg__i //
-m4trg__j //
-m4trg__k //
-m4trg__l //
-m4trg__m //
-m4trg__n //
-m4trg__o //
-m4trg__p //
-m4trg__q //
-m4trg__r //
-m4trg__s //
-m4trg__t //
-m4trg__u //
-m4trg__v //
-m4trg__w //
-m4trg__x //
-m4trg__y //
-m4trg__z //
-m4trg__0 //
-m4trg__1 //
-m4trg__2 //
-m4trg__3 //
-m4trg__4 //
-
-m4mbel //
-m4mbel__a //
-m4mbel__b //
-m4mbel__c //
-m4mbel__d //
-m4mbel__e //
-m4mbel__f //
-m4mbel__g //
-m4mbel__h //
-m4mbel__i //
-m4mbel__j //
-m4mbel__k //
-m4mbel__m //
-m4mbel__n //
-m4mbel__o //
-m4mbel__p //
-m4mbel__q //
-m4mbel__r //
-m4mbel__s //
-m4mbel__t //
-m4mbel__u //
-m4mbel__v //
-m4mbel__w //
-m4mbel__x //
-m4mbel__y //
-m4mbel__z //
-m4mbel__0 //
-m4mbel__1 //
-m4mbel__2 //
-m4mbel__3 //
-m4mbel__4 //
-m4mbel__5 //
-m4mbel__6 //
-m4mbel__7 //
-m4mbel__8 //
-m4mbel__9 //
-m4mbel__aa //
-m4mbel__ab //
-m4mbel__ac //
-m4mbel__ad //
-m4mbel__ae //
-m4mbel__af //
-m4mbel__ag //
-m4mbel__ah //
-m4mbel__ai //
-m4mbel__aj //
-m4mbel__ak //
-m4mbel__al //
-m4mbel__am //
-m4mbel__an //
-m4mbel__ao //
-m4mbel__ap //
-m4mbel__aq //
-m4mbel__ar //
-m4mbel__as //
-m4mbel__at //
-m4mbel__au //
-m4mbel__av //
-m4mbel__aw //
-m4mbel__ax //
-m4mbel__ay //
-m4mbel__az //
-m4mbel__a0 //
-m4abeaut //
-m4abeaut_1 //
-m4abeaut_2 //
-m4abeaut_3 //
-m4abeaut_4 //
-m4abeaut_5 //
-m4abeaut_6 //
-m4abeaut_7 //
-m4abeaut_8 //
-m4abeaut_9 //
-m4abeaut_u1 //
-m4abeaut_u2 //
-m4abeaut_u3 //
-m4abeaut_u4 //
-m4abeaut_u5 //
-m4abeaut_u6 //
-m4abeaut_u7 //
-m4abeaut_u8 //
-m4abeaut_u9 //
-m4abeaut_u10 //
-m4abeaut_u11 //
-m4abeaut_u12 //
-m4abeaut_u13 //
-m4abeaut_u14 //
-m4abeaut_u15 //
-m4abeaut_u16 //
-m4abeaut_u17 //
-m4abeaut_u18 //
-m4abeaut_u19 //
-m4abeaut_u20 //
-m4abeaut_u21 //
-m4abeaut_u22 //
-m4abeaut_u23 //
-m4abeaut_u24 //
-m4abeaut_u25 //
-m4abeaut_u26 //
-m4abeaut_u27 //
-m4abeaut_u28 //
-m4abeaut_u29 //
-m4abeaut_u30 //
-m4abeaut_u31 //
-m4abeaut_u32 //
-m4abeaut_u33 //
-m4abeaut_u34 //
-m4abeaut_u35 //
-m4abeaut_u36 //
-m4abeaut_u37 //
-m4abeaut_u38 //
-m4abeaut_u39 //
-m4abeaut_u40 //
-m4abeaut_u41 //
-m4abeaut_u42 //
-m4abeaut_u43 //
-m4abeaut_u44 //
-m4abeaut_u45 //
-m4abeaut_u46 //
-m4abeaut_u47 //
-m4abeaut_u48 //
-m4abeaut_u49 //
-m4abeaut_u50 //
-m4abeaut_u51 //
-m4abeaut_u52 //
-m4abeaut_u53 //
-m4abeaut_u54 //
-m4abeaut_u55 //
-m4abeaut_u56 //
-m4abeaut_u57 //
-m4abeaut_u58 //
-m4abeaut_u59 //
-m4abeaut_u60 //
-m4abeaut_u61 //
-m4abeaut_u62 //
-m4abeaut_u63 //
-m4abeaut_u64 //
-m4abeaut_r1 //
-m4abeaut_r2 //
-m4abeaut_r3 //
-m4abeaut_r4 //
-m4abeaut_r5 //
-m4abeaut_r6 //
-m4abeaut_r7 //
-m4abeaut_r8 //
-m4abeaut_r9 //
-m4abeaut_r10 //
-m4abeaut_r11 //
-m4abeaut_r12 //
-m4abeaut_r13 //
-m4abeaut_r14 //
-m4abeaut_l1 //
-m4abeaut_l2 //
-m4abeaut_l3 //
-m4abeaut_l4 //
-m4abeaut_l5 //
-m4abeaut_l6 //
-m4abeaut_l7 //
-m4abeaut_l8 //
-m4abeaut_l9 //
-m4abeaut_l10 //
-m4abeaut_l11 //
-m4abeaut_l12 //
-m4abeaut_l13 //
-m4abeaut_l14 //
-m4abeaut_l15 //
-m4abeaut_l16 //
-m4abeaut_l17 //
-m4abeaut_l18 //
-m4abeaut_l19 //
-m4abeaut_l20 //
-m4abeaut_l21 //
-m4abeaut_l22 //
-m4abeaut_l23 //
-m4abeaut_l24 //
-m4abeaut_l25 //
-m4abeaut_l26 //
-m4abeaut_l27 //
-m4abeaut_l28 //
-m4abeaut_l29 //
-m4abeaut_l30 //
-m4abeaut_l31 //
-m4abeaut_l32 //
-m4abeaut_l33 //
-m4abeaut_l34 //
-m4abeaut_l35 //
-m4abeaut_l36 //
-m4abeaut_l37 //
-m4abeaut_l38 //
-m4abeaut_pb1 //
-m4abeaut_pb2 //
-m4abeaut_i1 //
-m4abeaut_i2 //
-m4abeaut_c1 //
-m4abeaut_c2 //
-m4abeaut_c3 //
-m4abeaut_c4 //
-m4abeaut_c5 //
-m4abeaut_c6 //
-m4abeaut_c7 //
-m4abeaut_c8 //
-m4abeaut_c9 //
-m4abeaut_c10 //
-m4abeaut_c11 //
-m4abeaut_c12 //
-m4abeaut_c13 //
-m4abeaut_c14 //
-m4abeaut_c15 //
-m4abeaut_c16 //
-m4abeaut_c17 //
-m4abeaut_c18 //
-m4abeaut_c19 //
-m4abeaut_c20 //
-m4abeaut_c21 //
-m4abeaut_c22 //
-m4abeaut_c23 //
-m4abeaut_c24 //
-m4abeaut_c25 //
-m4abeaut_c26 //
-m4abeaut_c27 //
-m4abeaut_c28 //
-m4abeaut_c29 //
-m4abeaut_c30 //
-m4abeaut_c31 //
-m4abeaut_s1 //
-m4abeaut_s2 //
-m4abeaut_s3 //
-m4abeaut_s4 //
-m4abeaut_m1 //
-m4abeaut_m2 //
-m4abeaut_m3 //
-m4abeaut_m4 //
-m4abeaut_k1 //
-m4abeaut_k2 //
-m4rmtp // Reel Magic Turbo Play
-m4rmtp__a //
-m4rmtp__b //
-m4rmtp__c //
-m4rmtp__d //
-m4rmtp__e //
-m4rmtp__f //
-m4rmtp__g //
-m4rmtpd // Reel Magic Turbo Play Deluxe
-m4rmtpd__a //
-m4rmtpd__b //
-m4rmtpd__c //
-m4rmtpd__d //
-m4rmtpd__e //
-m4rmtpd__f //
-m4rmtpd__g //
-m4rmtpd__h //
-m4rmtpd__i //
-m4rmtpd__j //
-m4rmtpd__k //
-m4rmtpd__l //
-m4rmtpd__m //
-m4rmtpd__n //
-m4rmtpd__o //
-m4rmtpd__p //
-m4rmtpd__q //
-m4rmtpd__r //
-m4rmtpd__s //
-m4rmtpd__t //
-m4rmtpd__u //
-m4rmtpd__v //
-m4rmtpd__w //
-m4rmtpd__x //
-m4rmtpd__y //
-m4rmtpd__z //
-m4rmtpd__0 //
-m4rmtpd__1 //
-m4rmtpd__2 //
-m4rmtpd__3 //
-m4rmtpd__4 //
-m4rmtpd__5 //
-m4rmtpd__6 //
-m4rmtpd__7 //
-m4rmtpd__8 //
-m4rmtpd__9 //
-m4rmtpd__aa //
-m4rmtpd__ab //
-m4rmtpd__ac //
-m4rmtpd__ad //
-m4rmtpd__ae //
-m4rmtpd__af //
-m4rmtpd__ag //
-m4rmtpd__ah //
-m4rmtpd__ai //
-m4rmtpd__aj //
-m4rmtpd__ak //
-m4rmtpd__al //
-m4rmtpd__am //
-m4cmont
-m4cmont_1 //
-m4cmont_2 //
-m4cmont_3 //
-m4cmont_4 //
-m4cmont_5 //
-m4cmont_6 //
-m4cmont_7 //
-m4cmont_8 //
-m4cmont_9 //
-m4cmont_10 //
-m4cmont_11 //
-m4cmont_12 //
-m4cmont_13 //
-m4cmont_u1 //
-m4cmont_u2 //
-m4cmont_u3 //
-m4cmont_u4 //
-m4cmont_u5 //
-m4cmont_u6 //
-m4cmont_u7 //
-m4cmont_u8 //
-m4cmont_u9 //
-m4cmont_u10 //
-m4cmont_u11 //
-m4cmont_u12 //
-m4cmont_u13 //
-m4cmont_u14 //
-m4cmont_u15 //
-m4cmont_u16 //
-m4cmont_u17 //
-m4cmont_u18 //
-m4cmont_u19 //
-m4cmont_u20 //
-m4cmont_u21 //
-m4cmont_u22 //
-m4cmont_u23 //
-m4cmont_u24 //
-m4cmont_u25 //
-m4cmont_u26 //
-m4cmont_u27 //
-m4cmont_l1 //
-m4cmont_l2 //
-m4cmont_l3 //
-m4cmont_l4 //
-m4cmont_l5 //
-m4cmont_l6 //
-m4cmont_l7 //
-m4cmont_l8 //
-m4cmont_l9 //
-m4cmont_l10 //
-m4cmont_l11 //
-m4cmont_l12 //
-m4cmont_l13 //
-m4cmont_l14 //
-m4cmont_l15 //
-m4cmont_l16 //
-m4cmont_r1 //
-m4cmont_r2 //
-m4cmont_r3 //
-m4cmont_r4 //
-m4cmont_r5 //
-m4cmont_r6 //
-m4cmont_r7 //
-m4cmont_r8 //
-m4cmont_gt1 //
-m4cmont_gt2 //
-m4cmont_gt3 //
-m4blkmgc // Black Magic
-m4blkmgc_1 //
-m4blkmgc_u1 //
-m4blkmgc_u2 //
-m4blkmgc_u3 //
-m4blkmgc_u4 //
-m4blkmgc_u5 //
-m4blkmgc_u6 //
-m4amalad // American Aladdin
-m4amalad__a //
-m4amalad__b //
-m4amalad__c //
-m4amalad__d //
-m4amalad__e //
-m4amalad__f //
-m4amalad__g //
-m4amalad__h //
-m4amalad__i //
-m4amalad__j //
-m4amalad__k //
-m4amalad__l //
-m4amalad__m //
-m4amalad__n //
-m4bben // Big Ben
-m4bben__a //
-m4bben__b //
-m4bben__c //
-m4bben__d //
-m4bben__e //
-m4bben__f //
-m4bben__g //
-m4bben__h //
-m4bben__i //
-m4bbox // Brain Box
-m4bbox__a //
-m4bbox__b //
-m4bbox__c //
-m4bbox__d //
-m4bbox__e //
-m4bbox__f //
-m4bbox__g //
-m4bbox__h //
-m4bbox__i //
-m4frnudg // Fruit & Nudge
-m4frnudg__a //
-m4frnudg__b //
-m4frnudg__c //
-m4frmtx // Fruit Matrix
-m4frmtx__a //
-m4frmtx__b //
-m4frmtx__c //
-m4frmtx__d //
-m4frmtx__e //
-m4frmtx__f //
-m4jok2k // Joker 2000
-m4jok2k__a //
-m4jok2k__b //
-m4mjp // Mega Jackpot
-m4mjp__a //
-m4mjp__b //
-m4mjp__c //
-m4mjp__d //
-m4mjp__e //
-m4mjp__f //
-m4mjp__g //
-m4milrou // Millennium Roulette
-m4milrou__a //
-m4kingg // King George
-m4kingg__a //
-m4funh // Fun House
-
-// MPU5
-
-/* Barcrest */
-
-m5clr // MPU 5 Ram & Meter Clear (Barcrest)
-m5tst // MPU 5 Test Rom (Barcrest)
-
-m5addams // Addams Family (Barcrest)
-m5addamsa //
-m5addamsb //
-m5addamsc //
-m5addamsd //
-m5addamse //
-m5addamsf //
-m5addamsg //
-m5addamsh //
-m5addamsi //
-m5addamsj //
-m5addamsk //
-m5addamsl //
-m5addamsm //
-m5addamsn //
-m5addamso //
-m5addamsp //
-m5addamsq //
-m5addamsr //
-m5addamss //
-m5addlad // Adders & Ladders (Barcrest)
-m5addlada //
-m5addladb //
-m5addladc //
-m5addladd //
-m5addlade //
-m5addladf //
-m5addladg //
-m5addladh //
-m5addladi //
-m5addladj //
-m5addladk //
-m5addladl //
-m5addladm //
-m5addladn //
-m5addlado //
-m5addladp //
-m5addladq //
-m5addladr //
-m5addlads //
-m5fire // All Fired Up (Barcrest)
-m5arab // Arabian Nights (Barcrest)
-m5arab03 //
-m5austin // Austin Powers (Barcrest)
-m5austin10 //
-m5austin11 //
-m5bankrl // The Bank Roll (Barcrest)
-m5barkng // Barking Mad (Barcrest)
-m5barmy // Barmy Army (Barcrest)
-m5baxe // Battle Axe (Barcrest)
-m5baxe04 //
-m5bbro // Big Brother (Barcrest)
-m5bbro02 //
-m5bbrocl // Big Brother Club (Barcrest)
-m5bigchs // The Big Cheese (Barcrest)
-m5bigchs05 //
-m5biggam // The Big Game (Barcrest)
-m5biggam11 //
-m5blkwht // Black & White (Barcrest)
-m5blkwht11 //
-m5blkwht01 //
-m5bwaves // Brain Waves (Barcrest)
-m5bwaves07 //
-m5bling // Bling King Crazy (Barcrest)
-m5cbw // Ca$h Bang Wallop (Barcrest)
-m5cbwa //
-m5cpcash // Captain Cash (Barcrest)
-m5carclb // Caribbean Club (Barcrest)
-m5cashar // Cash Arena (Barcrest)
-m5cashar04 //
-m5cashat // Cash Attack (Barcrest)
-m5cashln // Cash Lines (Barcrest)
-m5cashrn // Cash Run (Barcrest)
-m5cashrn01 //
-m5cashrn02 //
-m5cashrn04 //
-m5codft // The Codfather (Barcrest)
-m5codft02 //
-m5cos // Costa Del Cash Casino (Barcrest)
-m5cosclb // Costa Del Cash Club (Barcrest)
-m5crzkni // Crazy Crazy Knights (Barcrest)
-m5crzkni03 //
-m5doshpk // Do$h & Pecks (Barcrest)
-m5doshpk05 //
-m5draclb // Ooh Aah Dracula Club (Barcrest)
-m5draclb07 //
-m5draclb01 //
-m5ewn // Each Way Nudge (Barcrest)
-m5ewn08 //
-m5elim // Eliminator (Barcrest)
-m5elim03 //
-m5elim04 //
-m5egr // Elvis Gold Rush (Barcrest)
-m5egra //
-m5egss // Elvis Gold Super Streak (Barcrest)
-m5egssa //
-m5evgrhr // Elvis Gold Red Hot Roll (Barcrest)
-m5evgrhra //
-m5xchn // Exchanges Unlimited (Barcrest)
-m5firebl // Fireball (Barcrest)
-m5flipcr // Flippin Crazy (Barcrest)
-m5fortby // Fort Boyard (Barcrest)
-m5fortby01 //
-m5frnzy // Frenzy (Barcrest)
-m5frnzya //
-m5beans // Full Of Beans (Barcrest)
-m5beansa //
-m5funsun // Fun In The Sun (Barcrest)
-m5funsun03 //
-m5gimmie // Gimmie Gimmie Gimmie (Barcrest)
-m5grush // Gold Rush (Barcrest)
-m5grush10 //
-m5grush04 //
-m5grush03 //
-m5grush02 //
-m5grush01 //
-m5grush5 // Gold Rush Five Liner (Barcrest)
-m5grush504 //
-m5gruss // Gold Rush Sit Down (Barcrest)
-m5grusst // Gold Rush Stampede (Barcrest)
-m5grusst04 //
-m5grusst03 //
-m5gstrik // Gold Strike (Barcrest)
-m5gstrik11 //
-m5gstrik02 //
-m5gstrik01 //
-m5gstrik01a //
-m5gstrika //
-m5gsstrk // Gold Super Streak (Barcrest)
-m5gsstrk07 //
-m5gdrag // Golden Dragon (Barcrest)
-m5gdrgcl // Golden Dragon Club (Barcrest)
-m5gdrgcl05 //
-m5gkeys // Golden Keys (Barcrest)
-m5hellrz // Hellraiser (Barcrest)
-m5hlsumo // Hi Lo Sumo (Barcrest)
-m5hifly // High Flyer (Barcrest)
-m5hifly03 //
-m5hifly04 //
-m5holy // The Holy Grail (Barcrest)
-m5holy10 //
-m5hotslt // Hot Slot (Barcrest)
-m5hotstf // Hot Stuff (Barcrest)
-m5hypvip // Hyper Viper (Barcrest)
-m5jackpt // Jackpoteers (Barcrest)
-m5jackpt07 //
-m5jackp2 // Jackpoteers 2 (Barcrest)
-m5jackp2a //
-m5jlyjwl // Jolly Jewels (Barcrest)
-m5jlyjwl01 //
-m5jlyjwl02 //
-m5jlyrog // Jolly Roger (Barcrest)
-m5jlyroga //
-m5kkebab // King Kebab (Barcrest)
-m5kkebab10 //
-m5kkebaba //
-m5kingko // King KO (Barcrest)
-m5kingko04 //
-m5kingko05 //
-m5lotta // Lotta Luck (Barcrest)
-m5mega // Mega Zone (Barcrest)
-m5martns // Money Mad Martians (Barcrest)
-m5martns07 //
-m5mmak // Money Maker (Barcrest)
-m5mmak06 //
-m5monjok // Monedin Joker (Spanish) (Barcrest)
-m5monjoka //
-m5monty // Monty Python (Barcrest)
-m5mprio // Monty Python Rio (Barcrest)
-m5mpfc // Monty Python's Flying Circus (Barcrest)
-m5mpfccl // Monty Python's Flying Circus Club (Barcrest)
-m5neptun // Neptunes Treasure (Barcrest)
-m5nnww // Nudge Nudge Wink Wink (Barcrest)
-m5nnwwgl // Nudge Nudge Wink Wink Gold (Barcrest)
-m5fiddle // On The Fiddle (Barcrest)
-m5fiddle03 //
-m5oohaah // Ooh Aah Dracula (Barcrest)
-m5oohaah01 //
-m5oohrio // Ooh Ahh Dracula Rio (Barcrest)
-m5openbx // Open The Box (Barcrest)
-m5openbx06 //
-m5openbx05 //
-m5openbx01 //
-m5overld // Overload (Barcrest)
-m5overld02 //
-m5overld10 //
-m5overld11 //
-m5ptyani // Party Animal (Barcrest)
-m5ptyani01 //
-m5peepsh // Peep Show (Barcrest)
-m5psy2 // Psycho Cash Beast 2 (Barcrest)
-m5qshot // Quack Shot (Barcrest)
-m5qshot04 //
-m5roof // Raise The Roof (Barcrest)
-m5roofa //
-m5razdz // Razzle Dazzle Club (Barcrest)
-m5razdz10 //
-m5razdz11 //
-m5redrck // Ready To Rock (Barcrest)
-m5redrck10 //
-m5redrcka //
-m5rhkni // Red Hot Knights (Barcrest)
-m5rhrg // Red Hot Roll Gold (Barcrest)
-m5rhrga //
-m5rhrgt // Red Hot Roll Triple (Barcrest)
-m5rhrgt12 //
-m5rhrgt02 //
-m5revo // Revolution (Barcrest)
-m5revo13 //
-m5revoa //
-m5rgclb // Rio Grande Club (Barcrest)
-m5rgclb11 //
-m5rgclb12 //
-m5rgclb20 //
-m5rgclb21 //
-m5rgclb03 //
-m5rgclb01 //
-m5rgclb01a //
-m5rcx // Royal Exchange Club (Barcrest)
-m5rcxa //
-m5rub // Rubies & Diamonds (Barcrest)
-m5ritj // Rumble In The Jungle (Barcrest)
-m5rfymc // Run For Your Money Club (Barcrest)
-m5rfymc06 //
-m5seven // Seven Deadly Spins (Barcrest)
-m5sheik // Sheik Yer Money (Barcrest)
-m5showtm // Showtime (Barcrest)
-m5silver // Silver Screen (Barcrest)
-m5silver06 //
-m5silver03 //
-m5sondr // Son Of Dracula (Barcrest)
-m5sondr05 //
-m5sondra //
-m5spicer // The Spice Is Right (Barcrest)
-m5spicer06 //
-m5spiker // Spiker The Biker (Barcrest)
-m5spiker02 //
-m5spikera //
-m5spins // Spinsation (Barcrest)
-m5squids // Squids In (Barcrest)
-m5squids04a //
-m5squids05 //
-m5squids06 //
-m5stax // Stax Of Cash (Barcrest)
-m5scharg // Super Charged (Barcrest)
-m5scharg05 //
-m5scharg06 //
-m5scharga //
-m5supstr // Super Star (Barcrest)
-m5supstra //
-m5sstrk // Super Streak (Barcrest)
-m5sstrk02a //
-m5supnov // Supernova (Barcrest)
-m5supnova //
-m5tempt // Temple Of Treasure (Barcrest)
-m5tempt05 //
-m5tempta //
-m5temptb //
-m5tempt2 // Temple Of Treasure 2 (Barcrest)
-m5tempt203 //
-m5tempt2a //
-m5tempcl // Temple Of Treasure Club (Barcrest)
-m5tbird // Thunderbird (Barcrest)
-m5topdog // Top Dog (Barcrest)
-m5topdog04 //
-m5topdoga //
-m5trail // Trailblazer Club (Barcrest)
-m5ultimo // Ultimo (Barcrest)
-m5ultimo03a //
-m5ultimo04 //
-m5upover // Up & Over (Barcrest)
-m5upover15 //
-m5vampup // Vamp It Up (Barcrest)
-m5wking // Wild King (Barcrest)
-m5wking05 //
-m5costa // Costa Del Cash (Barcrest)
-m5ttwo // Take Two (Barcrest)
-m5horn // Horn Of Plenty (Barcrest)
-m5hotrk // Hot Rocks (Barcrest)
-
-/* Barcrest / Red Gaming */
-
-m5ashock // Aftershock (Barcrest - Red Gaming)
-m5ashocka //
-m5bigsht // Big Shot (Barcrest - Red Gaming)
-m5bigsht04 //
-m5bigsht11 //
-m5bigsht13 //
-m5bigshta //
-m5bnkrs // Bonkers (Barcrest - Red Gaming)
-m5bbank // Break The Bank (Barcrest - Red Gaming)
-m5bbank13 //
-m5casfev // Casino Fever (Red Gaming)
-m5casfev12 //
-m5dmnstr // Demon Streak (Barcrest - Red Gaming)
-m5dmnstra //
-m5dbubl // Double Bubble (Barcrest - Red Gaming)
-m5dragnd // Dragon Drop (Barcrest - Red Gaming)
-m5dragnda
-m5fnfair // Funfair (Barcrest - Red Gaming)
-m5fnfaird //
-m5fusir // Fruits U Sir (Barcrest - Red Gaming)
-m5fusir11 //
-m5fusir12 //
-m5hypalx // Hypalinx (Barcrest - Red Gaming)
-m5invad // Invaders (Barcrest - Red Gaming)
-m5jcptgn // Jackpot Genie (Barcrest - Red Gaming)
-m5jlstrk // Jewel Strike (Barcrest - Red Gaming)
-m5lock // Lock 'n' Load (Barcrest - Red Gaming)
-m5lock13 //
-m5lock12 //
-m5lockcl // Lock 'n' Load Club (Barcrest - Red Gaming)
-m5lockcl15 //
-m5lockcl14 //
-m5nitro // Nitro (Barcrest - Red Gaming)
-m5paint // Paint The Town Red (Barcrest - Red Gaming)
-m5quake // Quake (Barcrest - Red Gaming)
-m5rainrn // Rainbow Runner (Barcrest - Red Gaming)
-m5rainrna //
-m5rampg // Rampage (Barcrest - Red Gaming)
-m5rampg11 //
-m5rampg12 //
-m5rdwarf // Red Dwarf (Barcrest - Red Gaming)
-m5redx // Red X (Barcrest - Red Gaming)
-m5redx12 //
-m5thtsmg // That's Magic (Barcrest - Red Gaming)
-m5topdol // Top Dollar (Barcrest - Red Gaming)
-m5topdola //
-m5zigzag // Zig Zag
-m5cmass // Critical Mass (Barcrest - Red Gaming)
-m5sblz // Snail Blazer (Barcrest - Red Gaming)
-m5slide // Slider (Barcrest - Red Gaming)
-
-/* Vivid */
-
-m5sixsht // 6 Shooter (Vivid)
-m5sixshta //
-m5sixshtb //
-m5sixshtc //
-m5sixshtd //
-m5sixshte //
-m5sixshtf //
-m5sixshtg //
-m5sixshth //
-m5sixshti //
-m5sixshtj //
-m5sixshtk //
-m5sixshtl //
-m5sixshtm //
-m5sixshtn //
-m5all41 // All 4 One (Vivid)
-m5all41a //
-m5all41b //
-m5all41c //
-m5all41d //
-m5all41e //
-m5all41f //
-m5all41g //
-m5all41h //
-m5all41i //
-m5all41j //
-m5all41k //
-m5all41l //
-m5all41m //
-m5atlan // Atlantic (Vivid)
-m5atlana //
-m5bttf // Back To The Features (Vivid)
-m5bttfa //
-m5btlbnk // Bottle Bank (Vivid)
-m5caesc // Caesar's Cash (Vivid)
-m5card // Card Shark (Vivid)
-m5cshkcb // Card Shark Club (Vivid)
-m5cshkcb12 //
-m5cshkcb13 //
-m5clifhn // Cliffhanger (Vivid)
-m5cnct4 // Connect 4 (Vivid)
-m5cnct415 //
-m5cnct420 //
-m5devil // Devil Of A Deal (Vivid)
-m5elband // El Bandido Club (Vivid)
-m5fair // Fairground Attraction (Vivid)
-m5ggems // Giant Gems (Vivid)
-m5ggems20 //
-m5groll // Golden Roll (Vivid)
-m5hilok // Hi Lo Karate (Vivid)
-m5hiclau // High Claudius (Vivid)
-m5honmon // Honey Money (Vivid)
-m5honmona //
-m5hopidl // Hop Idol (Vivid)
-m5hypno // Hypnotic (Vivid)
-m5jmpjok // Jumpin Jokers (Vivid)
-m5jmpjok11 //
-m5jmpjoka //
-m5jmpjokb //
-m5loony // Loony Juice (Vivid)
-m5loot // Loot 'n' Khamun (Vivid)
-m5loota //
-m5mag7s // Magnificent 7s (Vivid)
-m5mag7sa //
-m5mag7sb //
-m5mag7sc //
-m5mag7sd //
-m5mag7se //
-m5msf // Manic Streak Features (Vivid)
-m5msfa //
-m5piefac // Pie Factory (Vivid)
-m5piefac23 //
-m5piefac12 //
-m5piefaca //
-m5piefc2 // Pie Factory 2 (Vivid)
-m5piefc2a //
-m5piefc2b //
-m5piefcr // Pie Factory Rio (Vivid)
-m5qdraw // Quick On The Draw (Vivid)
-m5qdraw12 //
-m5qdraw14 //
-m5qdraw15 //
-m5qdrawa //
-m5qdrawb //
-m5redbal // Random Red Ball (Vivid)
-m5ratpk // Rat Pack (Vivid)
-m5ratpka //
-m5rollup // Roll Up Roll Up (Vivid)
-m5shark // Shark Raving Mad (Vivid)
-m5sharka //
-m5speccl // Spectrum Club (Vivid)
-m5spddmn // Speed Demon (Vivid)
-m5stars // Stars & Stripes (Vivid)
-m5stars13a //
-m5stars26 //
-m5stars25a //
-m5stars25 //
-m5stars22 //
-m5stars20 //
-m5stars10 //
-m5stars10a //
-m5starcl // Stars & Stripes Club (Vivid)
-m5startr // Stars & Stripes Triple (Vivid)
-m5supro // Super Roulette (Vivid)
-m5suproa //
-m5tempp // Temple Of Pleasure (Vivid)
-m5whdres // Who Dares Spins (Vivid)
-m5winway // Winning Ways (Vivid)
-m5rawin // Reel A Win (Vivid)
-
-/* Empire */
-
-m5fewmor // A Few Dollars More (Empire)
-m5fewmora //
-m5fewmorb //
-m5fewmorc //
-m5wonga // A Fish Called Wonga (Empire)
-m5aceclb // Ace Of Clubs (Empire)
-m5aceclba //
-m5aceclbb //
-m5barxdx // Bar X Deluxe (Empire)
-m5bnzclb // Bonanza Club (Empire)
-m5bnzclb11 //
-m5bukroo // Buckaroo (Empire)
-m5cbrun // Cannonball Run (Empire)
-m5carou // Carousel (Empire)
-m5casroc // Casino Royale Club (Empire)
-m5centcl // Centurion Club (Empire)
-m5centcl20 //
-m5centcl21 //
-m5centcl21a //
-m5centcla //
-m5cworan // Clockwork Oranges (Empire)
-m5cworan12 //
-m5clbtro // Club Tropicana (Empire)
-m5clbtro24 //
-m5clbtro25 //
-m5cockdd // Cock A Doodle Dough! (Empire)
-m5cockdd05 //
-m5coloss // Colossus Club (Empire)
-m5crocrk // Crocodile Rock (Empire)
-m5crocrk10 //
-m5croclb // Crocodile Rock Club (Empire)
-m5crsfir // Crossfire (Empire)
-m5dmnf // Diamonds Are Forever (Empire)
-m5dmnf10 //
-m5dmnfcl // Diamonds Are Forever Club (Empire)
-m5dmnfcl04 //
-m5extrm // Extreme (Empire)
-m5extrmm // Extreme Madness (Empire)
-m5extrmm04a //
-m5extrmm04b //
-m5extrmm10 //
-m5fatcat // Fat Cat (Empire)
-m5fishdl // Fish Full Of Dollars (Empire)
-m5fishdl10 //
-m5fishcl // Fish Full Of Dollars Club (Empire)
-m5fmonty // The Full Monty (Empire)
-m5fmonty04a //
-m5fmonty04b //
-m5fmonty04c //
-m5fmount // Full Mountie (Empire)
-m5gophr // Gopher Gold (Empire)
-m5gophcl // Gopher Gold Club (Empire)
-m5hisprt // High Spirits (Empire)
-m5hocus // Hocus Pocus (Empire)
-m5hocus10 //
-m5hocscl // Hocus Pocus Club (Empire)
-m5hotsht // Hot Shots (Empire)
-m5hotsht07a //
-m5hotsht08 //
-m5hotsht08a //
-m5hotsht10 //
-m5hotsht10a //
-m5hula // Hula Moolah (Empire)
-m5hula10 //
-m5hulacl // Hula Moolah Club (Empire)
-m5jackbx // Jack In The Box (Empire)
-m5jackbx03 //
-m5jcy // Juicy Fruits (Empire)
-m5jmpgem // Jumping Gems (Empire)
-m5jmpgem01 //
-m5jmpgem03 //
-m5jmpgmc // Jumping Gems Club (Empire)
-m5kaleid // Kaleidoscope Club (Empire)
-m5kcclb // King Cobra Club (Empire)
-m5kcclb24 //
-m5kingqc // Kings & Queens Club (Empire)
-m5kingqc06 //
-m5kingqc07 //
-m5kingqc08 //
-m5korma // Korma Chameleon (Empire)
-m5korma12 //
-m5kormcl // Korma Chameleon Club (Empire)
-m5monmst // Money Monster (Empire)
-m5monmsta //
-m5ramrd // Ram Raid (Empire)
-m5ramrcl // Ram Raid Club (Empire)
-m5ronr // Reel Or No Reel (Empire)
-m5ronr05 //
-m5ronr07 //
-m5resfrg // Reservoir Frogs (Empire)
-m5rthh // Return To The Haunted House (Empire)
-m5rollx // Roll X (Empire)
-m5rollx12 //
-m5skulcl // Skullduggery Club (Empire)
-m5skulcl20 //
-m5skulcl23 //
-m5tball // Thunderball (Empire)
-m5tomb // Tomb Raiders (Empire)
-m5trclb // Tomb Raiders Club (Empire)
-m5ttop // Treble Top (Empire)
-m5ttop04 //
-m5ttop10 //
-m5ttopcl // Treble Top Club (Empire)
-m5tsar // Tsar Wars (Empire)
-m5vertgo // Vertigo (Empire)
-m5vertcl // Vertigo Club (Empire)
-m5wthing // Wild Thing Club (Empire)
-m5wthing11 //
-m5wthing20 //
-m5xfact // X Factor (Empire)
-m5xfact02 //
-m5xfact04 //
-m5xfact11 //
-
-/* Bwb */
-m5carwsh // Car Wash (Bwb)
-m5carwsh10 //
-m5cshstx // Cash Stax (Bwb)
-m5circus // Circus (Bwb)
-m5circus0a //
-m5circus0b //
-m5circus20 //
-m5circus21 //
-m5circus11 //
-m5circlb // Circus Club (Bwb)
-m5circlb00 //
-m5circlb15 //
-m5circlb33 //
-m5clown // Clown In Around (Bwb)
-m5clown11 //
-m5clown13 //
-m5clubsn // Club Sandwich (Bwb)
-m5clubsn11 //
-m5clubsn14 //
-m5clubsn16 //
-m5dick // Dick Turnip (Bwb)
-m5dick10
-m5donna // Donna Kebab (Bwb)
-m5donnad //
-m5donnaa //
-m5dblqts // Double Or Quits (Bwb)
-m5dblqtsa //
-m5dblqtsb //
-m5dblqts1b //
-m5eggold // Egyptian Gold (Bwb)
-m55050 // Fifty Fifty (Bwb)
-m5gpclub // Get Plastered Club (Bwb)
-m5goape // Going Ape (Bwb)
-m5hgl // Happy Go Lucky (Bwb)
-m5hgl16 //
-m5hgl14 //
-m5jokpak // Joker In The Pack (Bwb)
-m5lvwire // Live Wire (Bwb)
-m5lvwirea //
-m5carpet // Magic Carpet (Bwb)
-m5carpet12 //
-m5minesw // Minesweeper (Bwb)
-m5psycho // Psycho Cash Beast (Barcrest)
-m5psycho06 //
-m5psychoa // Psycho Cash Beast (Bwb)
-m5psychoa21 //
-m5psyccl // Psycho Cash Beast Club (Barcrest)
-m5psyccl01 //
-m5psyccla // Psycho Cash Beast Club (Bwb)
-m5psyccla24 //
-m5psyccla02 //
-m5rwb // Red White & Blue (Barcrest)
-m5rwbbwb // Red White & Blue (Bwb)
-m5rwbbwb24 //
-m5rwbbwb25 //
-m5rwbbwb15 //
-m5reelwn // Reel A Win (Bwb)
-m5reelwn24 //
-m5reelth // Reel Thunder (Bwb)
-m5rlup // Roll Up (Bwb)
-m5round // Round & Round (Bwb)
-m5sec7 // Secret 7s (Bwb)
-m5sec7a //
-m5sil7 // Silver 7s (Bwb)
-m5sil7a //
-m5smobik // Smokey Bikin (Bwb)
-m5smobik12
-m5tictac // Tic Tac Tut (Vivid)
-m5tictacbwb // Tic Tac Tut (Bwb)
-m5tictacbwb16 //
-m5xena // Xena Warrior Princess (Bwb)
-
-
-/* Lowen */
-m5all41low // All 4 One (Lowen)
-m5dblfun // Double Fun (Lowen)
-m5jakjok // Jackpot Jokers (Lowen)
-m5roundl // Round & Round (Lowen)
-m5scfinl // Super Cup Final (Lowen)
-
-/* Others / Uncertain */
-
-m5ppussy // Pink Pussy (Mdm)
-
-// Castle
-castrev // Revolution
-castfpt // Fortune Pot
-
-// ACE
-
-sidewndr // (c) 1981? ACE
-spellbnd // (c) 1981? ACE
-starspnr // (c) 1982? ACE
-acefruit // (c) 1982? ACE
-
-// Ace System 1
-
-ac1clbmn // Club Money (Ace)
-ac1gogld // Go For Gold (Ace)
-ac1hotpf // Hot Profit (Ace)
-ac1pster // Pound Sterling (Ace)
-ac1pstrt // Pound Stretcher (Pcp)
-ac1primt // Primetime (Ace)
-ac1taklv // Take It Or Leave It (Ace)
-ac1cshtw // Cash Towers (Ace)
-ac1bbclb // Big Break Club (Ace)
-ac1bbclba //
-ac1clbsv // Club Sovereign (Ace)
-ac1clbxt // Club Xtra (Ace)
-ac1clbxta //
-ac1piaca // Play It Again Casino (Ace)
-ac1piacl // Play It Again Club (Ace)
-ac1piacla //
-ac1piaclb //
-ac1piaclc //
-ac1prmcl // Premier Club (Ace)
-ac1prmcla //
-ac1prmclb //
-ac1prmclc //
-ac1rundx // Runner Deluxe Club (Ace)
-ac1rundxa //
-ac1totb // Top Of The Bill (Ace)
-ac1shid // Super Hi De Hi (Ace)
-ac1shida //
-ac1bluec // Blue Chip (Pcp)
-ac1blueca //
-ac1bluecb //
-ac1bluecc //
-ac1bluecd //
-ac1dbldx // Double Deluxe (Pcp)
-ac1nudbk // Nudge Break (Pcp)
-ac1nudbka //
-ac1nudbkb //
-ac1nudbkc //
-ac1nudbkd //
-ac1sstrk // Starstruck (Pcp)
-ac1sstrka //
-ac1sstrkb //
-ac1xpres // Xpress (Pcp)
-ac1roll // Roll Up (Pcp)
-ac1rolla //
-ac1rollb //
-ac1hideh // Hi De Hi Deluxe
-ac1hideha //
-
-// Ace 'sp.ACE system'
-
-sp_cbowl // Cash Bowl (Ace)
-sp_cbowla //
-sp_cbowlb //
-sp_cbowlc //
-sp_cbowld //
-sp_cbowle //
-sp_cbowlf //
-sp_cbowlg //
-sp_cbowlh //
-sp_cbowli //
-sp_cbowlj //
-sp_cbowlk //
-sp_cbowll //
-sp_cbowlm //
-sp_cbowln //
-sp_cbowlo //
-sp_cbowlp //
-sp_cbowlq //
-sp_cbowlr //
-sp_cbowls //
-sp_cbowlt //
-sp_cbowlu //
-sp_crime // Crime Watch (Ace)
-sp_crimea //
-sp_crimeb //
-sp_crimec //
-sp_crimed //
-sp_crimee //
-sp_crimef //
-sp_crimeg //
-sp_crimeh //
-sp_emmrd // Emmerdale (Ace)
-sp_emmrda //
-sp_emmrdb //
-sp_emmrdc //
-sp_emmrdd //
-sp_emmrde //
-sp_emmrdf //
-sp_emmrdg //
-sp_emmrdh //
-sp_emmrdi //
-sp_emmrdj //
-sp_emmrdk //
-sp_emmrdn //
-sp_emmrdo //
-sp_woolp // Woolpack (Ace)
-sp_woolpa //
-sp_woolpb //
-sp_woolpc //
-sp_woolpd //
-sp_woolpe //
-sp_woolpf //
-sp_woolpg //
-sp_woolph //
-sp_woolpi //
-sp_woolpj //
-sp_woolpk //
-sp_woolpl //
-sp_woolpm //
-sp_woolpn //
-sp_woolpo //
-sp_zigzg // Zig Zag (Ace)
-sp_zigzga //
-sp_zigzgb //
-sp_zigzgc //
-sp_zigzgd //
-sp_zigzge //
-sp_zigzgf //
-sp_zigzgg //
-sp_zigzgh //
-sp_zigzgi //
-sp_zigzgj //
-sp_zigzgk //
-sp_zigzgl //
-sp_zigzgm //
-sp_goldm // Golden Mile (Ace)
-sp_goldma //
-sp_goldmb //
-sp_goldmc //
-sp_goldmd //
-sp_goldme //
-sp_goldmf //
-sp_goldmg //
-sp_goldmh //
-sp_goldmi //
-sp_goldmj //
-sp_goldmk //
-sp_goldml //
-sp_goldmm //
-sp_goldmn //
-sp_goldmo //
-sp_goldmp //
-sp_goldmq //
-sp_goldmr //
-sp_goldms //
-sp_goldmt //
-sp_goldmu //
-sp_goldmv //
-sp_goldmw //
-sp_goldmx //
-sp_goldmy //
-sp_goldmz //
-sp_goldm0 //
-sp_goldm1 //
-sp_goldm2 //
-sp_goldm3 //
-sp_gnat // Grand National (Ace)
-sp_gnata //
-sp_gnatb //
-sp_gnatc //
-sp_gnatd //
-sp_gnate //
-sp_gnatf //
-sp_gnatg //
-sp_gnath //
-sp_gnati //
-sp_gnatj //
-sp_gnatk //
-sp_gnatl //
-sp_gnatm //
-sp_gnatn //
-sp_gnato //
-sp_przna // Prize National (Ace)
-sp_prznaa //
-sp_prznab //
-sp_prznac //
-sp_prznad //
-sp_prznae //
-sp_prznaf //
-sp_prznag //
-sp_gprix // Grand Prix (Ace)
-sp_gprixa //
-sp_gprixb //
-sp_gprixc //
-sp_gprixd //
-sp_gprixe //
-sp_gprixf //
-sp_gprixg //
-sp_gprixh //
-sp_hideh // Hi De Hi (Ace)
-sp_hideha //
-sp_hidehb //
-sp_hidehc //
-sp_hidehd //
-sp_hidehe //
-sp_hidehf //
-sp_hidehg //
-sp_hidehh //
-sp_hidehi //
-sp_hidehj //
-sp_hidehk //
-sp_hidehl //
-sp_hidehm //
-sp_hidehn //
-sp_hideho //
-sp_hidehp //
-sp_hifly // Hi Flyer (Ace) [Mps]
-sp_hiflya //
-sp_hiflyb //
-sp_hiflyc //
-sp_hiflyd //
-sp_hiflye //
-sp_hiflyf //
-sp_hiflyg //
-sp_hiflyh //
-sp_hiflyi //
-sp_hiflyj //
-sp_hiflyk //
-sp_hiflyl //
-sp_hiflym //
-sp_hiflyn //
-sp_hiflyo //
-sp_hiflyp //
-sp_juras // Jurassic Trial (Ace)
-sp_openb // Open The Box (Ace)
-sp_openba //
-sp_openbb //
-sp_openbc //
-sp_openbd //
-sp_openbe //
-sp_openbf //
-sp_openbg //
-sp_openbh //
-sp_openbi //
-sp_payrs // Payrise (Ace)
-sp_payrsa //
-sp_payrsb //
-sp_payrsc //
-sp_payrsd //
-sp_payrse //
-sp_payrsf //
-sp_payrsg //
-sp_payrsh //
-sp_playa // Play It Again (Ace)
-sp_playaa //
-sp_playab //
-sp_playac //
-sp_playad //
-sp_playae //
-sp_playaf //
-sp_playag //
-sp_playah //
-sp_playai //
-sp_spell // Spellbound (Ace)
-sp_spella //
-sp_spellb //
-sp_spellc //
-sp_spelld //
-sp_spelle //
-sp_spellf //
-sp_spellg //
-sp_spelli //
-sp_spellj //
-sp_swop // Swop Shop (Ace)
-sp_swopa //
-sp_swopb //
-sp_swopc //
-sp_swopd //
-sp_swope //
-sp_swopf //
-sp_swopg //
-sp_timem // Time Machine (Ace)
-sp_timema //
-sp_timemb //
-sp_timemc //
-sp_timemd //
-sp_timeme //
-sp_timemf //
-sp_timemg //
-sp_timemh //
-sp_timemi //
-sp_timemj //
-sp_timemk //
-sp_tz // Twilight Zone (Ace)
-sp_tza //
-sp_tzb //
-sp_tzc //
-sp_tzd //
-sp_tze //
-sp_tzf //
-sp_tzg //
-sp_tzh //
-sp_tzbwb //
-sp_tzfe // Twilight Zone - Further Encounters (Ace)
-sp_tzfea //
-sp_tzfeb //
-sp_tzfec //
-sp_tzfed //
-sp_tzfee //
-sp_tzfef //
-sp_tzfeg //
-sp_tzfeh //
-sp_tzfei //
-sp_tzfej //
-sp_tzfek //
-sp_tzfel //
-sp_tzfem //
-sp_tzfen //
-sp_tzfeo //
-sp_tzfep //
-sp_tzfeq //
-sp_tzfer //
-sp_tzfes //
-sp_tzfet //
-sp_tzfeu //
-sp_beau // Beau Peep (Ace)
-sp_beaua //
-sp_beaub //
-sp_beauc //
-sp_beaud //
-sp_beaue //
-sp_beauf //
-sp_beaug //
-sp_beauh //
-sp_bigbd // Big Break Deluxe Club (Ace)
-sp_bigbda //
-sp_brkbk // Break The Bank (Ace)
-sp_brkbka //
-sp_brkbkb //
-sp_brkbkc //
-sp_brkbkd //
-sp_camel // Camelot (Ace)
-sp_camela //
-sp_camelb //
-sp_camelc //
-sp_cameld //
-sp_camele //
-sp_camelf //
-sp_camelg //
-sp_camelh //
-sp_cameli //
-sp_camelj //
-sp_camelk //
-sp_camell //
-sp_camelm //
-sp_cameln //
-sp_camelo //
-sp_clbna // Club National (Ace)
-sp_clbnaa //
-sp_coder // Code Red (Ace)
-sp_codera //
-sp_coderb //
-sp_coderc //
-sp_coderd //
-sp_codere //
-sp_coderf //
-sp_coderg //
-sp_criss // Criss Cross Cash (Ace)
-sp_crissa //
-sp_crissb //
-sp_crissc //
-sp_crissd //
-sp_crisse //
-sp_crissf //
-sp_crissg //
-sp_daytr // Daytripper (Ace)
-sp_daytra //
-sp_daytrb //
-sp_daytrc //
-sp_donky // Donkey Derby (Ace)
-sp_donkya //
-sp_donkyb //
-sp_donkyc //
-sp_donkyd //
-sp_donkye //
-sp_donkyf //
-sp_donkyg //
-sp_dyour // Double Your Money (Ace)
-sp_festi // Festival (Ace)
-sp_beau2 // Further Adventures Of Beau Peep (Ace)
-sp_beau2a //
-sp_beau2b //
-sp_beau2c //
-sp_beau2d //
-sp_beau2e //
-sp_beau2f //
-sp_ghost // Ghost Trapper (Ace)
-sp_ghosta //
-sp_ghostb //
-sp_ghostc //
-sp_ghostd //
-sp_ghoste //
-sp_ghostf //
-sp_ghostg //
-sp_ghosth //
-sp_ghosti //
-sp_ghostj //
-sp_ghostk //
-sp_ghostl //
-sp_ghostm //
-sp_ghostn //
-sp_ghosto //
-sp_ghostp //
-sp_ghostq //
-sp_ghostr //
-sp_ghosts //
-sp_globe // Globe Trotter (Ace)
-sp_globea //
-sp_globeb //
-sp_globec //
-sp_globed //
-sp_globee //
-sp_globef //
-sp_globeg //
-sp_gol // Gol (Ace)
-sp_golda // Golden Arrow Club (Ace)
-sp_goldaa //
-sp_golds // Golden Streak (Ace)
-sp_goldsa //
-sp_goldsb //
-sp_goldsc //
-sp_goldsd //
-sp_goldse //
-sp_goldsf //
-sp_goldsg //
-sp_goldsh //
-sp_goldt // Golden Touch (Golden Streak) (Ace)
-sp_here // Here We Go (Ace)
-sp_herea //
-sp_hereb //
-sp_herec //
-sp_hered //
-sp_heree //
-sp_heref //
-sp_hereg //
-sp_holid // Holiday Club (Ace)
-sp_holida //
-sp_lotto // Lotto (Ace)
-sp_magmo // Magic Money (Ace)
-sp_magmoa //
-sp_magmob //
-sp_magmoc //
-sp_magmod //
-sp_megmo // Mega Money (Ace)
-sp_megmoa //
-sp_megmob //
-sp_megmoc //
-sp_megmod //
-sp_megmoe //
-sp_megmof //
-sp_megmog //
-sp_monma // Money Magic (Ace)
-sp_monmaa //
-sp_monmab //
-sp_monmac //
-sp_monmad //
-sp_monmo // Money Mountain (Ace)
-sp_monmoa //
-sp_monmob //
-sp_monmoc //
-sp_monmod //
-sp_monmoe //
-sp_monmof //
-sp_monmog //
-sp_nudex // Nudge Explosion (Ace)
-sp_nudexa //
-sp_onbox // On The Box (Ace)
-sp_onboxa //
-sp_onboxb //
-sp_onboxc //
-sp_onboxd //
-sp_onboxe //
-sp_onboxf //
-sp_onboxg //
-sp_onboxh //
-sp_onboxi //
-sp_onboxj //
-sp_onboxk //
-sp_onboxl //
-sp_onboxm //
-sp_onboxn //
-sp_piste // On The Piste (Ace)
-sp_pistea //
-sp_pisteb //
-sp_pistec //
-sp_pisted //
-sp_pistee //
-sp_pistef //
-sp_pisteg //
-sp_pisteh //
-sp_pistei //
-sp_pistej //
-sp_pistek //
-sp_pistel //
-sp_pistem //
-sp_pisten //
-sp_pisteo //
-sp_pistep //
-sp_pound // Pound For Pound (Ace)
-sp_pounda //
-sp_poundb //
-sp_poundc //
-sp_poundd //
-sp_pounde //
-sp_poundf //
-sp_poundg //
-sp_poundh //
-sp_poundi //
-sp_poundj //
-sp_poundk //
-sp_poundl //
-sp_poundm //
-sp_poundn //
-sp_poundo //
-sp_poundp //
-sp_poundbwb //
-sp_poundbwba //
-sp_poundbwbb //
-sp_poundbwbc //
-sp_poundbwbd //
-sp_poundbwbe //
-sp_poundbwbf //
-sp_poundbwbg //
-sp_road // Road To Hell (Ace)
-sp_skylm // Sky's The Limit Club, The (Ace)
-sp_skylma //
-sp_tkpik // Take Your Pick (Ace)
-sp_tkpika //
-sp_tkpikb //
-sp_tkpikc //
-sp_tkpikd //
-sp_tkpike //
-sp_tkpikf //
-sp_carry // Carry On (PCP)
-sp_carrya //
-sp_front // Final Frontier (Bwb)
-sp_atw // Around the World (Crystal)
-sp_five // Fiver Fever (Crystal)
-sp_fivea //
-sp_crun // Cash Run (Crystal)
-sp_cruna //
-sp_crunb //
-sp_roof // Thru The Roof (Ace)
-sp_roofa //
-sp_cpal // Caesars Palace (Ace)
-
-
-// Project - PROCONN
-
-pr_lday // 'L' Of A Day (Project)
-pr_ldaya
-pr_5xcsh // 5x Cash (Project)
-pr_7hvn // 777 Heaven (Project)
-pr_7hvna
-pr_7hvnb
-pr_7hvnc
-pr_7hvnd
-pr_7hvne
-pr_7hvnf
-pr_7hvng
-pr_7hvnh
-pr_7hvni
-pr_7hvnj
-pr_7hvnk
-pr_7hvnl
-pr_7hvnm
-pr_7hvnn
-pr_7hvno
-pr_7hvnp
-pr_7hvnq
-pr_7hvnr
-pr_7hvns
-pr_7hvnt
-pr_7hvnu
-pr_alwy9 // Always Nine (Pcp)
-pr_alwy9a
-pr_barbl // Bars & Bells (Project)
-pr_batls // Battleships (Project)
-pr_batlsa
-pr_batlsb
-pr_btwar // Beat The Warden (Project)
-pr_btwara
-pr_btwarb
-pr_bigdp // Big Dipper (Project)
-pr_bigdpa
-pr_bulls // Bullseye (Project)
-pr_bullsa
-pr_bullsb
-pr_bulbn // Bully's Big Night (Project)
-pr_bulbna
-pr_bulbnb
-pr_buljp // Bully's Jackpot (Project)
-pr_buljpa
-pr_cashb // Cash Back (Project)
-pr_cas7 // Casino Jackpot 7s (Project)
-pr_chico // Chico the Bandit (Project)
-pr_chicoa
-pr_chicob
-pr_coolm // Cool Million (Project)
-pr_coolma
-pr_coolmb
-pr_crz77 // Crazy 777s (Project)
-pr_crzbr // Crazy Bars (Project)
-pr_coyot // Crazy Coyote (Pcp)
-pr_coyota
-pr_crzpy // Crazy Pays (Project)
-pr_dblup // Double Up (Project)
-pr_fire // Fircecracker (Project)
-pr_flshc // Flash The Cash (Project)
-pr_ftwhl // Fortune Wheel (Project)
-pr_funrn // Fun On The Run (Project)
-pr_gogld // Go For Gold (Project)
-pr_gldnl // Golden Nile (Project)
-pr_gldng // Golden Nugget (Project)
-pr_gdft // Good Fortune (Project)
-pr_happy // Happy Days (Project)
-pr_heato // The Heat Is On (Project)
-pr_hiclm // Hi Climber (Project)
-pr_hit6 // Hit The Six (Project)
-pr_hit6a
-pr_hit6b
-pr_hotcs // Hot Cash (Project)
-pr_hotsp // Hot Spots (Project)
-pr_jkpt7 // Jackpot 7's (Project)
-pr_jkrwd // Jokers Wild (Project)
-pr_jumpj // Jumping Jacks (Project)
-pr_jumpja
-pr_medl // Medalist (Project)
-pr_megmn // Mega Money (Project)
-pr_nudxs // Nudge XS (Project)
-pr_qksht // Quickshot (Maygay)
-pr_rags // Rags To Riches (Project)
-pr_reflx // Reflex (Project)
-pr_roadr // Road Riot (Project)
-pr_roll // The Roll (Project)
-pr_supbr // Super Bars (PCP)
-pr_sevab // Seven's Above (Project)
-pr_sevml // Sevens & Melons (Project)
-pr_theme // Theme Park (Project)
-pr_ttrai // Treasure Trail (Project)
-pr_trpx // Triple X (Project)
-pr_trktr // Trick or Treat (Project)
-pr_trktp
-pr_walls // Wall Street (Project)
-pr_whlft // Wheel Of Fortune (Project)
-pr_wldkn // Wild Kings (Project)
-pr_nifty // Nifty Fifty (Project)
-pr_upnun // Up & Under (Project)
-pr_bears // Bear Streak (Coinworld)
-pr_bearsa
-pr_bearsb
-pr_bearx // Bear X (Coinworld)
-pr_bearxa
-pr_bearxb
-pr_bearxc
-pr_bearxd
-pr_bearxe
-pr_bearxf
-pr_bearxg
-pr_bearxh
-pr_bearxi
-pr_bearxj
-pr_bearxk
-pr_bearxl
-pr_bearxlp
-pr_bearxm
-pr_fspot // Fun Spot (Coinworld)
-pr_fspota
-pr_fspotb
-pr_fspotc
-pr_fspotd
-pr_fspote
-pr_fspotf
-pr_fspotg
-pr_gnuc // Golden Nugget (Coinworld)
-pr_gnuca
-pr_magln // Magic Lines (Coinworld)
-pr_maglna
-pr_wnstk // Winning Streak (Coinworld)
-pr_swop // Swop It (Ace)
-pr_sptb // Simply The Best (Pcp)
-
-/* Astra */
-
-as_party // Party Time (Astra)
-as_partya //
-as_partyb //
-as_partyc //
-as_partyd //
-as_partye //
-as_partyf //
-as_letsp // Let's Party (Astra)
-as_topsl // Top Slot (Astra)
-as_topsla //
-as_topslb //
-as_topslc //
-as_topsld //
-as_bigtm // Big Time (Astra)
-as_acp // unknown ACP (Astra)
-as_celeb // Celebration (Astra)
-as_celeba //
-as_celebb //
-as_cshah // Cash Ahoi (Lowen)
-as_srb // Super Ring a Bell (Astra)
-as_srba //
-as_srbb //
-as_srbc //
-as_srbd //
-as_srbe //
-as_hc // Hokey Cokey (Astra)
-as_hca //
-as_hcb //
-as_hcc //
-as_hcd //
-as_big10 // Big 10 (Astra)
-as_big10a //
-as_big10b //
-as_big10c //
-as_big10d //
-as_big15 // Big 16 (Astra)
-as_bigcs // Big Cash (Astra)
-as_bigcsa //
-as_bbr // Bullion Bars (Astra)
-as_bbra //
-as_bbrb //
-as_bbrc //
-as_bbrd //
-as_bbre //
-as_bbrf //
-as_dblcs // Double Cash (Astra)
-as_dblcsa //
-as_dblcsb //
-as_dblcsc //
-as_dblcsd //
-as_dblcse //
-as_dblcsf //
-as_dblcsg //
-as_dblcsh //
-as_fortn // Fortune Teller (Astra)
-as_gof // Game Of Fortune (Lowen)
-as_hog // Hearts Of Gold (Astra)
-as_hxr // Hot Cross Run (Astra)
-as_hr // Hot Reel (Astra)
-as_djp // Double Jackpot (Astra)
-as_djpa //
-as_djpb //
-as_cshcs // Cash Castle (Lowen)
-as_colmn // Colour of Money (Astra)
-as_colmna //
-as_colmnb //
-as_colmnc //
-as_colmnd //
-as_jackb // Jackpot Bell
-as_jpx // Jackpot X
-as_jpxa //
-as_jpxb //
-as_jolly // Jolly Roger
-as_jmpj // Jumping Jackpots
-as_jmpja //
-as_jjive // Jungle Jive
-as_jjivea //
-as_jjiveb //
-as_jjivec //
-as_jjived //
-as_jjivee //
-as_jjivef //
-as_jjiveg //
-as_kingc // King Cash
-as_kingca //
-as_koc // King Of Clubs
-as_koca //
-as_lbt // Little Big 10
-as_lbta //
-as_ldl //
-as_ldla //
-as_ldlb //
-as_ldlc //
-as_ldld //
-as_ldle //
-as_mp //
-as_mp2 //
-as_otr //
-as_otra //
-as_ptf //
-as_ptfa //
-as_ptfb //
-as_ptfc //
-as_pia //
-as_piaa //
-as_piab //
-as_pharg //
-as_pharga //
-as_phargb //
-as_phargc //
-as_phargd //
-as_pharge //
-as_pb //
-as_rtr //
-as_rtra //
-as_rtrb //
-as_rtrc //
-as_rtrd //
-as_rtre //
-as_rtrf //
-as_rtrg //
-as_rtrh //
-as_rab //
-as_raba //
-as_rabb //
-as_rabc //
-as_rbg //
-as_rbga //
-as_rbgb //
-as_rbgc //
-as_rbgd //
-as_rbge //
-as_rbglo //
-as_rox //
-as_csv //
-as_sltcl //
-as_stp //
-as_stpa //
-as_stpb //
-as_siu //
-as_siua //
-as_sld //
-as_slda //
-as_sldb //
-as_sldc //
-as_sldd //
-as_slde //
-as_tem //
-as_tema //
-as_tbl //
-as_tbla //
-as_tblb //
-as_tblc //
-as_tbld //
-as_tble //
-as_tblf //
-as_td //
-as_twp //
-as_twpa //
-as_vn //
-as_vcv //
-as_vcva //
-as_vcvb //
-as_vcvc //
-as_vcvd //
-as_vcve //
-as_ww //
-as_wwa //
-as_wwb //
-as_wwc //
-as_wwd //
-as_wwe //
-as_ws //
-
-
-/* Electrocoin */
-
-// Oldest PCB
-
-ec_bar5 // Bar 5 (older PCB) (Electrocoin)
-ec_barxo // Bar X (older PCB) (Electrocoin)
-ec_barxoa //
-ec_barxob //
-ec_barxoc //
-ec_barxod //
-ec_barxoe //
-ec_casbxo // Casino Bar X (older PCB) (Electrocoin)
-ec_casbxoa //
-
-// Regular PCB
-
-ec_barx // Bar X (Electrocoin)
-ec_barx__a //
-ec_barx__b //
-ec_barx__c //
-ec_barx__d //
-ec_barx__e //
-ec_barx__f //
-ec_barx__g //
-ec_barx__h //
-ec_barx__i //
-ec_barx__j //
-ec_barx__k //
-ec_barx__l //
-ec_barx__m //
-ec_barx__n //
-ec_barx__o //
-ec_barx__p //
-ec_barx__q //
-ec_barx__r //
-ec_barx__s //
-ec_barx__t //
-ec_barx__u //
-ec_barx__v //
-ec_barx__w //
-ec_barx__x //
-ec_barx__y //
-ec_barx__z //
-ec_barx__0 //
-ec_barx__1 //
-ec_barx__2 //
-ec_barx__3 //
-ec_barx__4 //
-ec_barx__5 //
-ec_barx__6 //
-ec_barx__7 //
-ec_barx__8 //
-ec_barx__9 //
-ec_barx__aa //
-ec_barx__ab //
-ec_barx__ac //
-ec_barx__ad //
-ec_barx__ae //
-ec_barx__af //
-ec_barx__ag //
-ec_barx__ah //
-ec_barx__ai //
-ec_barx__aj //
-ec_barx__ak //
-ec_barx__al //
-ec_barx__am //
-ec_barx__an //
-ec_barx__ao //
-ec_barx__ap //
-ec_barx__aq //
-ec_barx__ar //
-ec_barx__as //
-ec_barx__at //
-ec_barx__au //
-ec_barx__av //
-ec_barx__aw //
-ec_barx__ax //
-ec_barx__ay //
-ec_barx__az //
-ec_barx__a0 //
-ec_barx__a1 //
-ec_barx__a2 //
-ec_barx__a3 //
-ec_barx__a4 //
-ec_barx__a5 //
-ec_barx__a6 //
-ec_barx__a7 //
-ec_barx__a8 //
-ec_barx__a9 //
-ec_barx__ba //
-ec_barx__bb //
-ec_barx__bc //
-ec_barx__bd //
-ec_barx__be //
-ec_barx__bf //
-ec_barx__bg //
-ec_barx__bh //
-ec_barx__bi //
-ec_barx__bj //
-ec_barx__bk //
-ec_barx__bl //
-ec_barx__bm //
-ec_barx__bn //
-ec_barx__bo //
-ec_barx__bp //
-ec_barx__bq //
-ec_barx__br //
-ec_barx__bs //
-ec_barx__bt //
-ec_barx__bu //
-ec_mag7s // Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin)
-ec_mag7s__a //
-ec_mag7s__b //
-ec_mag7s__c //
-ec_mag7s__d //
-ec_mag7s__e //
-ec_mag7s__f //
-ec_mag7s__g //
-ec_mag7s__h //
-ec_mag7s__i //
-ec_mag7s__j //
-ec_mag7s__k //
-ec_mag7s__l //
-ec_mag7s__m //
-ec_mag7s__n //
-ec_mag7s__o //
-ec_mag7s__p //
-ec_mag7s__q //
-ec_mag7s__r //
-ec_mag7s__s //
-ec_mag7s__t //
-ec_mag7s__u //
-ec_mag7s__v //
-ec_mag7s__w //
-ec_mag7s__x //
-ec_mag7s__y //
-ec_mag7s__z //
-ec_mag7s__0 //
-ec_mag7s__1 //
-ec_mag7s__2 //
-ec_mag7s__3 //
-ec_mag7s__4 //
-ec_mag7s__5 //
-ec_mag7s__6 //
-ec_mag7s__7 //
-ec_mag7s__8 //
-ec_mag7s__9 //
-ec_mag7s__aa //
-ec_mag7s__ab //
-ec_mag7s__ac //
-ec_mag7s__ad //
-ec_mag7s__ae //
-ec_mag7s__af //
-ec_mag7s__ag //
-ec_mag7s__ah //
-ec_mag7s__ai //
-ec_mag7s__aj //
-ec_mag7s__ak //
-ec_mag7s__al //
-ec_mag7s__am //
-ec_mag7s__an //
-ec_mag7s__ao //
-ec_mag7s__ap //
-ec_mag7s__aq //
-ec_mag7s__ar //
-ec_mag7s__as //
-ec_mag7s__at //
-ec_mag7s__au //
-ec_mag7s__av //
-ec_mag7s__aw //
-ec_mag7s__ax //
-ec_mag7s__ay //
-ec_mag7s__az //
-ec_mag7s__a0 //
-ec_bxd7s // Bar X Diamond 7s (2006 COOL7) (Electrocoin)
-ec_bxd7s__a //
-ec_bxd7s__b //
-ec_bxd7s__c //
-ec_bxd7s__d //
-ec_big7 // Big 7 / Super Big 7 (Electrocoin)
-ec_big7__a //
-ec_big7__b //
-ec_big7__c //
-ec_big7__d //
-ec_big7__e //
-ec_big7__f //
-ec_big7__g //
-ec_big7__h //
-ec_big7__i //
-ec_big7__j //
-ec_big7__k //
-ec_big7__l //
-ec_big7__m //
-ec_big7__n //
-ec_big7__o //
-ec_big7__p //
-ec_big7__q //
-ec_big7__r //
-ec_big7__s //
-ec_big7__t //
-ec_big7__u //
-ec_big7__v //
-ec_big7__w //
-ec_big7__x //
-ec_big7__y //
-ec_big7__z //
-ec_big7__0 //
-ec_big7__1 //
-ec_big7__2 //
-ec_big7__3 //
-ec_big7__4 //
-ec_big7__5 //
-ec_big7__6 //
-ec_big7__7 //
-ec_big7__8 //
-ec_big7__9 //
-ec_big7__aa //
-ec_big7__ab //
-ec_big7__ac //
-ec_big7__ad //
-ec_big7__ae //
-ec_big7__af //
-ec_big7__ag //
-ec_big7__ah //
-ec_big7__ai //
-ec_big7__aj //
-ec_big7__ak //
-ec_big7__al //
-ec_big7__am //
-ec_big7__an //
-ec_big7__ao //
-ec_big7__ap //
-ec_big7__aq //
-ec_big7__ar //
-ec_big7__as //
-ec_big7__at //
-ec_big7__au //
-ec_big7__av //
-ec_big7__aw //
-ec_big7__ax //
-ec_big7__ay //
-ec_big7__az //
-ec_big7__a0 //
-ec_big7__a1 //
-ec_big7__a2 //
-ec_casbx // Casino Bar X (Electrocoin)
-ec_casbx__a //
-ec_casbx__b //
-ec_bx125 //
-ec_bx125a //
-ec_redbr // Red Bar (Electrocoin)
-ec_redbr__a //
-ec_redbr__b //
-ec_redbr__c //
-ec_redbr__d //
-ec_redbr__e //
-ec_redbr__f //
-ec_redbr__g //
-ec_redbr__h //
-ec_redbr__i //
-ec_redbr__j //
-ec_redbr__k //
-ec_redbr__l //
-ec_redbr__m //
-ec_redbr__n //
-ec_redbr__o //
-ec_redbr__p //
-ec_redbr__q //
-ec_redbr__r //
-ec_redbr__s //
-ec_redbr__t //
-ec_redbr__u //
-ec_redbr__v //
-ec_redbr__w //
-ec_redbr__x //
-ec_redbr__y //
-ec_redbr__z //
-ec_redbr__0 //
-ec_redbr__1 //
-ec_redbr__2 //
-ec_redbr__3 //
-ec_redbr__4 //
-ec_redbr__5 //
-ec_redbr__6 //
-ec_redbr__7 //
-ec_redbr__8 //
-ec_redbr__9 //
-ec_redbr__aa //
-ec_redbr__ab //
-ec_redbr__ac //
-ec_redbr__ad //
-ec_redbr__ae //
-ec_redbr__af //
-ec_redbr__ag //
-ec_redbr__ah //
-ec_redbr__ai //
-ec_redbr__aj //
-ec_redbr__ak //
-ec_redbr__al //
-ec_redbr__am //
-ec_redbr__an //
-ec_redbr__ao //
-ec_redbr__ap //
-ec_redbr__aq //
-ec_redbr__ar //
-ec_redbr__as //
-ec_redbr__at //
-ec_redbr__au //
-ec_redbr__av //
-ec_redbr__aw //
-ec_redbr__ax //
-ec_redbr__ay //
-ec_redbr__az //
-ec_redbr__a0 //
-ec_redbr__a1 //
-ec_redbr__a2 //
-ec_redbr__a3 //
-ec_redbr__a4 //
-ec_redbr__a5 //
-ec_redbr__a6 //
-ec_redbr__a7 //
-ec_redbr__a8 //
-ec_redbr__a9 //
-ec_redbr__ba //
-ec_redbr__bb //
-ec_redbr__bc //
-ec_redbr__bd //
-ec_redbr__be //
-ec_redbr__bf //
-ec_redbr__bg //
-ec_redbr__bh //
-ec_redbr__bi //
-ec_redbr__bj //
-ec_redbr__bk //
-ec_redbr__bl //
-ec_redbr__bm //
-ec_redbr__bn //
-ec_redbr__bo //
-ec_redbr__bp //
-ec_redbr__bq //
-ec_redbr__br //
-ec_redbr__bs //
-ec_redbr__bt //
-ec_redbr__bu //
-ec_redbr__bv //
-ec_redbr__bw //
-ec_redbr__bx //
-ec_redbr__by //
-ec_redbr__b0 //
-ec_redbr__b1 //
-ec_sbarx // Super Bar X (Electrocoin)
-ec_sbarx__a //
-ec_sbarx__b //
-ec_sbarx__c //
-ec_sbarx__d //
-ec_sbarx__e //
-ec_sbarx__f //
-ec_sbarx__g //
-ec_sbarx__h //
-ec_sbarx__i //
-ec_sbarx__j //
-ec_sbarx__k //
-ec_sbarx__l //
-ec_sbarx__m //
-ec_sbarx__n //
-ec_sbarx__o //
-ec_sbarx__p //
-ec_sbarx__q //
-ec_sbarx__r //
-ec_sbarx__s //
-ec_sbarx__t //
-ec_sbarx__u //
-ec_sbarx__v //
-ec_sbarx__w //
-ec_sbarx__x //
-ec_sbarx__y //
-ec_sbarx__z //
-ec_sbarx__0 //
-ec_sbarx__1 //
-ec_sbarx__2 //
-ec_sbarx__3 //
-ec_sbarx__4 //
-ec_sbarx__5 //
-ec_sbarx__6 //
-ec_sbarx__7 //
-ec_sbarx__8 //
-ec_sbarx__9 //
-ec_sbarx__aa //
-ec_sbarx__ab //
-ec_sbarx__ac //
-ec_sbarx__ad //
-ec_sbarx__ae //
-ec_sbarx__af //
-ec_sbarx__ag //
-ec_sbarx__ah //
-ec_sbarx__ai //
-ec_sbarx__aj //
-ec_sbarx__ak //
-ec_sbarx__al //
-ec_sbarx__am //
-ec_sbarx__an //
-ec_sbarx__ao //
-ec_sbarx__ap //
-ec_sbarx__aq //
-ec_sbarx__ar //
-ec_sbarx__as //
-ec_sbarx__at //
-ec_sbarx__au //
-ec_sbarx__av //
-ec_sbarx__aw //
-ec_sbarx__ax //
-ec_sbarx__ay //
-ec_sbarx__az //
-ec_sbarx__a0 //
-ec_sbarx__a1 //
-ec_sbarx__a2 //
-ec_sbarx__a3 //
-ec_sbarx__a4 //
-ec_sbxbr //
-ec_sbxbra //
-ec_sbxbrb //
-ec_sbxbrc //
-ec_sbxbrd //
-ec_sbxbre //
-ec_sbxbrf //
-ec_sbxbrg //
-ec_sbxbrh //
-ec_spbdx // Super Bar X Deluxe (Electrocoin)
-ec_spbdx__a //
-ec_spbdx__b //
-ec_spbdx__c //
-ec_spbdx__d //
-ec_unk5 // Unknown 'Electrocoin' Fruit Machine(s) (Electrocoin)
-ec_unk5__a //
-ec_unk5__b //
-ec_unk5__c //
-ec_bx180 // Bar X (Z180 hardware)
-ec_bx180a //
-
-ec_barxmab // Bar X (MAB PCB) (Electrocoin)
-ec_spbg7mab // Super Big 7 (MAB PCB) (Electrocoin)
-ec_supbxmab // Super Bar X (MAB PCB) (Electrocoin)
-
-// Concept PCB
-ec_casbxcon // Casino Bar X (Concept - Electrocoin)
-ec_multb // Multi Bar (Concept - Electrocoin)
-ec_casmb // Casino Multi Bar (Concept - Electrocoin)
-ec_supmb // Super Multi Bar (Concept - Electrocoin)
-ec_stkex // Stake X (Concept - Electrocoin)
-ec_bar7 // Bar 7 (Concept)
-ec_fltr // Flutter (Concept)
-ec_gold7 // Golden 7 (Concept)
-ec_mgbel // Megabell (Concept)
-ec_supbxcon // Super Bar X (MAB PCB) (Concept - Electrocoin)
-ec_jackb // Jackpot Bars (MAB PCB) (Concept - Electrocoin)
-ec_ndgxs // Nudge Excess (MAB PCB) (Concept - Electrocoin)
-ec_rdht7 // Red Hot 7 (MAB PCB) (Concept - Electrocoin)
-ec_unkt // Unknown 'T' (MAB PCB) (Concept - Electrocoin)
-
-// OXO PCB
-
-ec_oxocg // Oxo Classic Gold (Electrocoin)
-ec_oxocl // Oxo Club (Electrocoin)
-ec_oxogb // Oxo Golden Bars (Electrocoin)
-ec_oxorl // Oxo Reels (Electrocoin)
-ec_oxorv // Oxo Revolution (Electrocoin)
-ec_suprl // Super Reels (Electrocoin)
-ec_rcc // Royal Casino Club (Electrocoin)
-ec_sumnd // Super Multi Nudger (Concept/Electrocoin)
-ec_sumnc // Casino Super Multi Nudger (Concept/Electrocoin)
-
-// Pyramid PCB
-
-ec_pyram // Pyramid (Electrocoin)
-ec_pyrama //
-ec_sphin // Sphinx (Electrocoin)
-ec_sphina //
-ec_sphinb //
-ec_penni // Pennies From Heaven (Electrocoin)
-ec_pennia //
-ec_stair // Stairway to Heaven
-ec_staira //
-ec_laby // Labyrinth (Electrocoin)
-ec_labya //
-ec_secrt // Secret Castle (Electrocoin)
-
-
-/* BGT x86 based platform */
-bg_ddb //
-bg_barmy //
-bg_max //
-bg_maxa //
-
-/* Stella Mechanical */
-
-st_ohla
-st_vulkn
-
-/* Hazel Grove */
-
-hg_frd // Fruit Deuce
-
-/* Global Games 'Stealth' */
-
-gl_snbev
-gl_snbeva
-gl_grncl
-gl_grncla
-gl_dow // Deals On Wheels (Global)
-gl_dowp
-gl_dowcl // Deals On Wheels Club (Global)
-gl_dowclp
-gl_wywh // Wish You Were Here Club (Global)
-gl_wywhp
-gl_wywh24
-gl_wywh24p
-gl_coc // Carry On Clubbin' (Global)
-gl_cocp
-gl_coc29
-gl_coc29p
-gl_uyr // Up Yer Riggin Club (Global)
-gl_uyrp
-gl_hbh // Heartbreak Hotel (Global)
-gl_hbhcl // Heartbreak Hotel Club (Global)
-gl_hbhclp
-gl_hbhcla
-
-/* Unknown, Pluto? */
-
-hb_cr // Cash Raker (QPS)
-hb_cra //
-hb_crb //
-hb_bar7 // Bar Seven (Fairgames)
-hb_bar7a //
-hb_bigx // Big X (JPM)
-hb_bigxa //
-hb_bigxb //
-hb_bigxc //
-hb_bigxd //
-hb_ccow // Cash Cow (Qps)
-hb_ccowa //
-hb_ccowb //
-hb_cashc // Cash Crusade (Qps)
-hb_cashca //
-hb_cashcb //
-hb_cashx // Cash X (Fairgames)
-hb_cashxa //
-hb_cwf // Cherry Win Falls (Fairgames)
-hb_cwfa //
-hb_dac // Dough & Arrow Club (Qps) [c]
-hb_daca //
-hb_dacb //
-hb_dacc //
-hb_dacd //
-hb_dace //
-hb_dacf //
-hb_dacg //
-hb_dacz //
-hb_frtcl // Fruitopia Club (Qps) [c]
-hb_frtcla //
-hb_frtclb //
-hb_frtclc //
-hb_frtcld //
-hb_frtcle //
-hb_frtclf //
-hb_frtclg //
-hb_frtclh //
-hb_frtcli //
-hb_frtclj //
-hb_frtclk //
-hb_frtcll //
-hb_frtclm //
-hb_frtcln //
-hb_gpal // G' Palace (Qps)
-hb_gpala //
-hb_gpalb //
-hb_gpalc //
-hb_gpald //
-hb_gpale //
-hb_gpalf //
-hb_gpalg //
-hb_gpalh //
-hb_gpali //
-hb_gldpl // Golden Palace (Mazooma)
-hb_gldpla //
-hb_gldwn // Golden Winner (Fairgames)
-hb_gldwna //
-hb_jailb // Jail Break (Qps)
-hb_jailba //
-hb_jkrwl // Jokers Wild (Fairgames)
-hb_jkrwla //
-hb_mrmon // Mr. Money (Qps)
-hb_mrmona //
-hb_mrmonb //
-hb_mrmonc //
-hb_rhv // Red Hot Voucher (Qps)
-hb_rhva //
-hb_ringb // Ring A Bell (JPM)
-hb_ringba //
-hb_ringbb //
-hb_ringbc //
-hb_ringbd //
-hb_ringbe //
-hb_rckrl // Rock 'n' Roll (Qps)
-hb_rckrla //
-hb_rckrlb //
-hb_rckrlc //
-hb_rckrld //
-hb_rckrle //
-hb_rckrlf //
-hb_rckrlg //
-hb_ydd // Yabba-Dabba-Dough (Qps)
-hb_ydda //
-hb_hotst // Hot Stuff??
-hb_hotsta //
-hb_hotstb //
-hb_hotstc //
-hb_hotstd //
-hb_hotste //
-hb_hotstf //
-hb_hotstg //
-hb_hotsth //
-hb_medal // Medallion Job (Qps)
-
-/* Summit Coin */
-
-pushover // (c)1981 Summit Coin
-sm_ngacc // Nudge Accumulator
-sm_ultng // Ultimate Nudge
-
-/* IGT SPlus */
-
-spss4240
-
-/* Unknown Fruit Machines */
-
-//unkfr
-//unkfra
-
-/* [END] fruit machine drivers */
-
-
-
-/* [BEGIN] pinball drivers */
-
-// allied.cpp
-allied
-suprpick
-royclark
-thndbolt
-hoedown
-takefive
-heartspd
-foathens
-disco79
-erosone
-circa33
-starshot
-
-// alvg.cpp
-
-agsoccer
-
-wrldtour
-wrldtour2
-usafootb
-mystcast
-mystcasta
-pstlpkr
-punchy
-dinoeggs
-
-/*
- Atari Generation/System 1
-*/
-atarians
-time2000
-aavenger
-midearth
-spcrider
-/*
- Atari Generation/System 2
-*/
-supermap
-hercules
-fourx4
-/*
- Atari Generation/System 3
-*/
-roadrunr
-
-// bingo.cpp
-cntinntl
-goldgame
-goldgkitb
-goldgstake
-goldgnew
-goldgkit1
-penalty
-brooklyn
-brooklyna
-newdixie
-superdix
-cntine31
-domino2
-tripjok
-ggate
-ggatea
-michigan
-michkit1
-michkitb
-michstake
-michnew
-montana
-topgame
-topgamet
-
-/*
- Bally MPU AS-2518-17
-*/
-blackjck
-bowarrow
-eightbll
-evelknie
-freedom
-matahari
-nightrdr
-nightr20
-pwerplay
-stk_sprs
-
-/*
- Bally MPU AS-2518-35
-*/
-bullseye
-blakpyra
-bmx
-centaur
-cosflash
-cybrnaut
-dollyptn
-eballdlx
-eballd14
-elektra
-embryon
-fathom
-fbclass
-fball_ii
-flashgdn
-flashgdnf
-flashgdnv
-frontier
-futurspa
-goldball
-goldballn
-granslam
-granslam4
-hglbtrtr
-hotdoggn
-kosteel
-kiss
-lostwrlp
-medusa
-m_mpac
-mystic
-myststar
-newwave
-ngndshkr
-paragon
-playboy
-rapidfip
-rollston
-saturn2
-slbmania
-skatebll
-spacehaw
-spaceinv
-speakesy
-speakesy4p
-spectrm
-spectrm4
-spyhuntr
-startrep
-sst
-smman
-tigerrag
-vector
-viking
-voltan
-xsandos
-xenon
-xenonf
-worlddef
-darkshad
-skflight
-cobrap
-futrquen
-f1gpp
-toppin
-uboat65
-bbbowlin
-monrobwl
-mdntmrdr
-blbeauty
-suprbowl
-
-/*
- Bally Kiss 8035 prototype
-*/
-kissp
-
-/*
- Bally MPU A084-91786-AH06 (6803)
-*/
-atlantip
-beatclck
-blackblt
-blackblt2
-black100
-black100s
-cityslck
-dungdrag
-eballchp
-esclwrld
-esclwrldg
-hardbody
-hardbodyg
-hvymetap
-ladyluck
-motrdome
-prtyanim
-prtyanimg
-specforc
-strngsci
-strngscg
-trucksp3
-trucksp2
-
-/*
- Bally MPU AS-2518-133
-*/
-babypac
-babypac2
-granny
-
-// by68701.cpp
-flashgdnp1
-flashgdnp2
-eballdlxp1
-eballdlxp2
-eballdlxp3
-eballdlxp4
-
-// capcom.cpp
-abv106
-abv106r
-bbb109
-bbb108
-bsv103
-bsv100r
-bsv102r
-bsb105
-ffv104
-ffv101
-kpv106
-pmv112
-pmv112r
-ghv101
-
-
-// de_1.cpp
-lwar_a83
-lwar_e90
-
-
-// de_2.cpp
-mnfb_c27
-poto_a32
-play_a24
-robo_a34
-ssvc_a26
-ssvc_b26
-tmac_a24
-tmac_a18
-torp_e21
-
-
-// de_3.cpp
-rab_320
-rab_130
-rab_103
-aar_101
-bttf_a27
-bttf_a20
-bttf_a21
-bttf_g27
-btmn_103
-btmn_101
-btmn_g13
-btmn_106
-ckpt_a17
-gnr_300
-hook_408
-hook_401
-hook_404
-jupk_513
-jupk_501
-jupk_g51
-lah_112
-lah_l104
-lah_l108
-lah_110
-lw3_208
-lw3_207
-lw3_205
-lw3_200
-trek_201
-trek_200
-trek_120
-trek_110
-trek_11a
-stwr_104
-stwr_103
-stwr_g11
-stwr_a14
-stwr_102
-stwr_e12
-tftc_303
-tftc_302
-tftc_300
-tftc_200
-tftc_104
-tmnt_104
-tmnt_103
-simp_a27
-simp_a20
-tomy_400
-tomy_h30
-wwfr_106
-wwfr_103
-
-
-// de_3b.cpp
-batmanf
-batmanf3
-bmf_uk
-bmf_cn
-bmf_no
-bmf_sv
-bmf_at
-bmf_ch
-bmf_de
-bmf_be
-bmf_fr
-bmf_nl
-bmf_it
-bmf_sp
-bmf_jp
-bmf_time
-baywatch
-bay_e400
-frankst
-frankstg
-mav_402
-mav_401
-mav_400
-mav_100
-detest
-ctcheese
-
-
-// flicker.cpp
-flicker
-
-
-// g627.cpp
-rotation
-rota_115
-rota_101
-
-// gp_1.cpp
-gp_110
-blvelvet
-camlight
-chucklck
-famlyfun
-foxylady
-real
-rio
-startrip
-
-
-// gp_2.cpp
-agent777
-andromep
-andromepa
-attila
-cpthook
-cyclopes
-gwarfare
-ladyshot
-ladyshota
-mbossy
-coneyis
-lizard
-sshootr2
-sshootep
-suprnova
-vegasgp
-
-
-// gts1.cpp
-gts1
-gts1s
-astannie
-buckrgrs
-charlies
-cleoptra
-closeenc
-countdwn
-dragon
-geniep
-jokrpokr
-pinpool
-roldisco
-sinbad
-sinbadn
-solaride
-hulk
-torch
-totem
-hexagone
-sys1test
-
-
-// gts3.cpp
-barbwire
-bellring
-brooks
-cactjack
-carhop
-ccruise
-clas1812
-cueball
-deadweap
-bighurt
-freddy
-freddy4
-gladiatp
-hoops
-lca
-lca2
-andretti
-andretti4
-nudgeit
-opthund
-rescu911
-shaqattq
-shaqattq2
-silvslug
-stargatp
-stargatp1
-stargatp2
-stargatp3
-stargatp4
-sfight2
-sfight2a
-sfight2b
-smb
-smb1
-smb2
-smb3
-smbmush
-surfnsaf
-teedoffp
-teedoffp1
-teedoffp3
-tfight
-vegas
-waterwld
-waterwld2
-wipeout
-wcsoccer
-wcsoccerd2
-tt_game
-snspares
-snspares1
-
-
-// gts80.cpp
-blckhole
-blckhole2
-blckhols
-circusp
-cntforce
-eclipse
-forceii
-hh
-hh_1
-jamesb
-jamesb2
-marsp
-panthera
-pnkpnthr
-starrace
-spidermn
-timeline
-vlcno_ax
-vlcno_1b
-vlcno_1a
-s80tst
-
-
-// gts80a.cpp
-alienstr
-amazonh
-caveman
-cavemana
-dvlsdre
-dvlsdre2
-eldorado
-goinnuts
-icefever
-jack2opn
-krullp
-punk
-qbquest
-rackempp
-raimfire
-rocky
-rflshdlx
-spirit
-striker
-sorbit
-thegames
-touchdn
-
-
-// gts80b.cpp
-arena
-badgirls
-bighouse
-bonebstr
-bonebstrf
-bountyh
-triplay
-diamondp
-excalibr
-genesisp
-goldwing
-hlywoodh
-hotshots
-mntecrlo
-nmoves
-raven
-robowars
-rock
-rock_enc
-sprbreak
-sprbreaks
-tagteamp
-tagteamp2
-txsector
-victoryp
-
-
-// hankin.cpp
-fjholden
-howzat
-orbit1
-shark
-empsback
-
-
-// icecold.cpp
-icecold
-zekepeak
-
-// inder.cpp
-ind250cc
-atleta
-brvteam
-canasta
-pinclown
-corsario
-mundial
-pinmoonl
-lapbylap
-metalman
-
-// jeutel.cpp
-leking
-olympic
-
-// jp.cpp
-america
-aqualand
-faeton
-lortium
-pimbal
-petaco
-petaco2
-halley
-halleya
-olympus
-
-
-// jvh.cpp
-escape
-movmastr
-
-
-// ltd.cpp
-alcapone
-atla_ltd
-bhol_ltd
-columbia
-cowboy
-pecmen
-zephy
-
-// micropin.cpp
-pentacup
-pentacup2
-
-// mephisto.cpp
-mephistp
-mephistp1
-
-// mrgame.cpp
-dakar
-motrshow
-motrshowa
-macattck
-wcup90
-
-
-// nsm.cpp
-firebird
-
-
-// peyper.cpp
-odisea
-wolfman
-odin
-odin_dlx
-solarwap
-poleposn
-sonstwar
-gamatros
-nemesisp
-sonstwr2
-
-// play_1.cpp
-bigtown
-chance
-lastlap
-spcgambl
-party
-
-
-// play_2.cpp
-antar
-antar2
-evlfight
-attack
-blkfever
-cerberup
-madrace
-zira
-
-
-// play_3.cpp
-megaaton
-megaatona
-
-
-// play_5.cpp
-spain82
-nautilus
-theraid
-ufo_x
-kz26
-rock2500
-starfirp
-starfirpa
-trailer
-fldragon
-sklflite
-
-// rowamet.cpp
-heavymtl
-
-
-// s11.cpp
-gmine_l2
-grand_l4
-hs_l4
-hs_l3
-rdkng_l4
-rdkng_l1
-rdkng_l2
-rdkng_l3
-tdawg_l1
-shfin_l1
-tts_l2
-tts_l1
-
-
-// s11a.cpp
-f14_l1
-f14_p3
-f14_p4
-f14_p5
-fire_l3
-milln_l3
-pb_l5
-pb_l2
-pb_l3
-pb_p4
-
-
-// s11b.cpp
-bcats_l5
-bcats_l2
-bnzai_l3
-bnzai_g3
-bnzai_l1
-bnzai_pa
-bguns_l8
-bguns_l7
-bguns_la
-bguns_p1
-bk2k_l4
-bk2k_lg1
-bk2k_lg3
-bk2k_pu1
-cycln_l5
-cycln_l4
-esha_la3
-esha_ma3
-esha_pr4
-esha_lg1
-esha_lg2
-esha_la1
-esha_pa1
-eatpm_l4
-eatpm_l1
-eatpm_l2
-eatpm_4g
-eatpm_4u
-eatpm_p7
-jokrz_l6
-jokrz_l3
-mousn_l4
-mousn_l1
-mousn_lu
-mousn_lx
-polic_l4
-polic_l3
-polic_l2
-spstn_l5
-swrds_l2
-taxi_l4
-taxi_l3
-taxi_lg1
-tsptr_l3
-whirl_l3
-whirl_l2
-whirl_lg3
-
-
-// s11c.cpp
-bbnny_l2
-bbnny_lu
-diner_l4
-diner_l3
-diner_l1
-dd_l2
-dd_p6
-pool_l7
-pool_l6
-pool_l5
-pool_le2
-pool_p7
-radcl_l1
-radcl_g1
-radcl_p3
-rvrbt_l3
-rollr_l2
-rollr_ex
-rollr_e1
-rollr_p2
-rollr_l3
-rollr_g3
-gs_l3
-gs_l4
-strax_p7
-
-
-// s3.cpp
-httip_l1
-lucky_l1
-wldcp_l1
-cntct_l1
-disco_l1
-
-
-// s4.cpp
-flash_l1
-flash_l2
-flash_t1
-phnix_l1
-pkrno_l1
-stlwr_l2
-pomp_l1
-arist_l1
-topaz_l1
-taurs_l1
-kingt_l1
-omni_l1
-bstrk_l1
-tstrk_l1
-
-
-// s6.cpp
-blkou_l1
-blkou_t1
-blkou_f1
-frpwr_l6
-frpwr_t6
-frpwr_l2
-grgar_l1
-grgar_t1
-lzbal_l2
-lzbal_t2
-tmwrp_l2
-tmwrp_t2
-scrpn_l1
-scrpn_t1
-trizn_l1
-trizn_t1
-
-
-// s6a.cpp
-algar_l1
-alpok_l6
-alpok_l2
-alpok_f6
-
-
-// s7.cpp
-vrkon_l1
-barra_l1
-bk_l4
-bk_f4
-bk_l3
-csmic_l1
-dfndr_l4
-fpwr2_l2
-hypbl_l4
-hypbl_l2
-jst_l2
-jst_l1
-jngld_l1
-jngld_l2
-lsrcu_l2
-pharo_l2
-solar_l2
-strlt_l1
-tmfnt_l5
-wrlok_l3
-thund_p1
-thund_p2
-thund_p3
-ratrc_l1
-
-
-// s8.cpp
-pfevr_l2
-pfevr_p3
-scrzy_l1
-
-
-// s9.cpp
-comet_l4
-comet_l5
-sorcr_l1
-sorcr_l2
-sshtl_l7
-alcat_l7
-szone_l5
-szone_l2
-
-// sam.cpp
-
-24_130
-24_140
-24_144
-24_150
-bdk_130
-bdk_150
-bdk_160
-bdk_200
-bdk_210
-bdk_220
-bdk_290
-bdk_294
-bbh_140
-bbh_150
-bbh_160
-csi_102
-csi_103
-csi_104
-csi_200
-csi_210
-csi_230
-csi_240
-fg_1000af
-fg_1000ag
-fg_1000ai
-fg_1000al
-fg_110af
-fg_110ag
-fg_110ai
-fg_110al
-fg_120af
-fg_120ag
-fg_120ai
-fg_120al
-fg_300ai
-fg_400a
-fg_400ag
-fg_700af
-fg_700al
-fg_800al
-im2_100
-im2_110
-im2_120
-im2_140
-indy_113a
-indy_113f
-indy_113g
-indy_113i
-indy_113l
-indy_114a
-indy_114f
-indy_114g
-indy_114i
-indy_114l
-indy_116a
-indy_116f
-indy_116g
-indy_116i
-indy_116l
-indy_210
-indy_210f
-nba_500
-nba_600
-nba_700
-nba_801
-nba_802
-potc_110af
-potc_110ai
-potc_110gf
-potc_111as
-potc_113af
-potc_113ai
-potc_113as
-potc_113gf
-potc_115af
-potc_115ai
-potc_115as
-potc_115gf
-potc_300af
-potc_300ai
-potc_300as
-potc_300gf
-potc_400af
-potc_400ai
-potc_400as
-potc_400gf
-potc_600
-potc_600ai
-potc_600as
-potc_600gf
-sh_141
-skc_090
-skc_103
-skc_105
-sman_130ef
-sman_130ei
-sman_130es
-sman_130gf
-sman_140e
-sman_140ef
-sman_140ei
-sman_140es
-sman_140gf
-sman_142e
-sman_160e
-sman_160ef
-sman_160ei
-sman_160es
-sman_160gf
-sman_170e
-sman_170ef
-sman_170ei
-sman_170es
-sman_170gf
-sman_190e
-sman_190ef
-sman_190ei
-sman_190es
-sman_190gf
-sman_192e
-sman_192ef
-sman_192ei
-sman_192es
-sman_192gf
-sman_200e
-sman_210e
-sman_210f
-sman_210ei
-sman_210es
-sman_210gf
-sman_220e
-sman_230e
-sman_240
-wof_100a
-wof_200a
-wof_200f
-wof_200g
-wof_200i
-wof_300a
-wof_300f
-wof_300g
-wof_300i
-wof_300l
-wof_400a
-wof_400f
-wof_400g
-wof_400i
-wof_400l
-wof_500a
-wof_500f
-wof_500g
-wof_500i
-wof_500l
-wpt_103a
-wpt_105a
-wpt_106a
-wpt_106f
-wpt_106g
-wpt_106i
-wpt_106l
-wpt_108a
-wpt_108f
-wpt_108g
-wpt_108i
-wpt_108l
-wpt_109a
-wpt_109f
-wpt_109f2
-wpt_109g
-wpt_109i
-wpt_109l
-wpt_111a
-wpt_111af
-wpt_111ai
-wpt_111al
-wpt_111f
-wpt_111g
-wpt_111gf
-wpt_111i
-wpt_111l
-wpt_112a
-wpt_112af
-wpt_112ai
-wpt_112al
-wpt_112f
-wpt_112g
-wpt_112gf
-wpt_112i
-wpt_112l
-wpt_1400
-wpt_1400af
-wpt_1400ai
-wpt_1400al
-wpt_1400f
-wpt_1400g
-wpt_1400gf
-wpt_1400i
-wpt_1400l
-
-// sleic.cpp
-sleicpin
-
-
-// spectra.cpp
-spectra
-
-
-// spinb.cpp
-bushido
-bushidoa
-jolypark
-mach2
-vrnwrld
-
-
-// st_mp100.cpp
-princess
-dracula
-hothand
-lectrono
-magic
-memlane
-nugent
-pinball
-stars
-stingray
-trident
-wildfyre
-
-
-// st_mp200.cpp
-ali
-biggame
-catacomp
-cheetah
-//cue
-dragfist
-flight2k
-freefall
-galaxypi
-ironmaid
-lazrlord
-lightnin
-meteorp
-nineball
-orbitor1
-quicksil
-seawitch
-spltsecp
-stargzr
-viperp
-gamatron
-blkshpsq
-st_game
-
-
-// taito.cpp
-taitest
-cavnegro
-cavnegro1
-cavnegro2
-cosmic
-drakor
-fireact
-fireactd
-gemini2k
-gemini2k1
-gork
-hawkman
-hawkman1
-ladylukt
-lunelle
-meteort
-mrblack
-mrblack1
-obaoba
-obaoba1
-polar
-rally
-sharkt
-shock
-snake
-sshuttle
-sshuttle1
-stest
-sureshop
-titan
-titan1
-vegast
-voleybal
-vortexp
-zarza
-zarza1
-mrblkz80
-
-
-// techno.cpp
-xforce
-
-
-// vd.cpp
-//ator - missing most of rom
-break86
-papillon
-
-
-// whitestar.cpp
-apollo13
-apollo13_10
-aust301
-aust300
-aust201
-austin
-austnew
-austinf
-austing
-austini
-godzillp
-gldneye
-goldcue
-harl_a13
-harl_u13
-harl_a10
-harl_f13
-harl_g13
-harl_i13
-harl_l13
-harl_a40
-harl_f40
-harl_g40
-harl_i40
-harl_l40
-harl_a30
-harl_f30
-harl_g30
-harl_i30
-harl_l30
-harl_a18
-harl_f18
-harl_g18
-harl_i18
-harl_l18
-hirolcas
-hirolcas_210
-hironew
-hirolcat
-hirol_fr
-hirol_gr
-hirol_gr_210
-hirol_it
-id4
-id4_201
-lostspc
-monopolp
-monop303
-monop301
-monop251
-monop233
-monopolf
-monopolg
-monopoli
-monopoll
-mononew
-nfl
-playboys
-playboys_401
-playboys_303
-playboys_302
-playboys_300
-playboys_203
-playnew
-playboyf
-playboyf_401
-playboyf_303
-playboyf_302
-playboyf_300
-playboyf_203
-playboyg
-playboyg_401
-playboyg_303
-playboyg_302
-playboyg_300
-playboyg_203
-playboyi
-playboyi_401
-playboyi_303
-playboyi_302
-playboyi_300
-playboyi_203
-playboyl
-playboyl_401
-playboyl_303
-playboyl_302
-playboyl_300
-playboyl_203
-rctycn
-rctycn_701
-rctycn_600
-rctycn_400
-rctnew
-rctycng
-rctycng_701
-rctycng_400
-rctycnf
-rctycnf_701
-rctycnf_600
-rctycnf_400
-rctycni
-rctycni_701
-rctycni_600
-rctycni_400
-rctycnl
-rctycnl_701
-rctycnl_600
-rctycnl_400
-shrkysht
-shrky_207
-shrknew
-shrkygr
-shrkygr_207
-shrkyfr
-shrkyfr_207
-shrkyit
-shrkyit_207
-sprk_103
-sprk_096
-sprk_090
-spacejam
-spacejmg
-spacejmf
-spacejmi
-swtril43
-swtril41
-startrp
-strikext
-strknew
-strxt_uk
-strxt_gr
-strxt_fr
-strxt_it
-strxt_sp
-term3
-term3_301
-term3_205
-t3new
-term3g
-term3g_301
-term3l
-term3l_301
-term3l_205
-term3f
-term3f_301
-term3f_205
-term3i
-term3i_301
-term3i_205
-jplstw22
-jplstw20
-simpprty
-simpprty_400
-simpprty_300
-simpprty_204
-simpnew
-simpprtg
-simpprtg_400
-simpprtl
-simpprtl_400
-simpprtl_300
-simpprtl_204
-simpprtf
-simpprtf_400
-simpprtf_300
-simpprtf_204
-simpprti
-simpprti_400
-simpprti_300
-simpprti_204
-xfilesp
-xfiles2
-twst_405
-twst_404
-twst_300
-viprsega
-ctchzdlx
-titanic
-monopred
-wackadoo
-
-
-// white_mod.cpp
-elvisp
-elvisp4
-elvisp303
-elvisp302
-elvisl
-elvisl4
-elvisl303
-elvisl302
-elvisg
-elvisg4
-elvisg303
-elvisg302
-elvisf
-elvisf4
-elvisf303
-elvisf302
-elvisi
-elvisi4
-elvisi303
-elvisi302
-gprix
-gprix_400
-gprix_352
-gprix_350
-gprix_340
-gprix_301
-gprixg
-gprixg_400
-gprixg_352
-gprixg_350
-gprixg_340
-gprixg_301
-gprixl
-gprixl_400
-gprixl_352
-gprixl_350
-gprixl_340
-gprixl_301
-gprixf
-gprixf_400
-gprixf_352
-gprixf_350
-gprixf_340
-gprixf_301
-gprixi
-gprixi_400
-gprixi_352
-gprixi_350
-gprixi_340
-gprixi_301
-nascar
-nascar_400
-nascar_352
-nascar_350
-nascar_340
-nascar_301
-nascarl
-nascarl_400
-nascarl_352
-nascarl_350
-nascarl_340
-nascarl_301
-ripleys
-rip310
-rip302
-rip301
-rip300
-ripleysf
-ripf310
-ripf302
-ripf301
-ripf300
-ripleysg
-ripg310
-ripg302
-ripg301
-ripg300
-ripleysi
-ripi310
-ripi302
-ripi301
-ripi300
-ripleysl
-ripl310
-ripl302
-ripl301
-ripl300
-lotr
-lotr9
-lotr8
-lotr7
-lotr6
-lotr501
-lotr5
-lotr410
-lotr401
-lotr_le
-lotr_sp
-lotr_sp9
-lotr_sp8
-lotr_sp7
-lotr_sp6
-lotr_sp501
-lotr_sp5
-lotr_sp401
-lotr_gr
-lotr_gr9
-lotr_gr8
-lotr_gr7
-lotr_gr6
-lotr_gr501
-lotr_gr5
-lotr_gr410
-lotr_gr401
-lotr_fr
-lotr_fr9
-lotr_fr8
-lotr_fr7
-lotr_fr6
-lotr_fr501
-lotr_fr5
-lotr_fr410
-lotr_fr401
-lotr_it
-lotr_it9
-lotr_it8
-lotr_it7
-lotr_it6
-lotr_it501
-lotr_it5
-lotr_it410
-lotr_it401
-sopranos
-sopranos_400
-sopranos_300
-sopranos_204
-sopranog
-sopranog_400
-sopranog_300
-sopranog_107
-sopranof
-sopranof_400
-sopranof_300
-sopranof_107
-sopranol
-sopranol_400
-sopranol_300
-sopranol_107
-sopranoi
-sopranoi_400
-sopranoi_300
-sopranoi_107
-
-
-// wico.cpp
-aftor
-
-
-// wpc_95.cpp
-tf95_12
-afm_113
-afm_113b
-afm_11
-afm_11u
-afm_10
-cc_12
-cc_13
-cc_10
-cc_104
-cv_14
-cv_20h
-cv_10
-cv_11
-cv_13
-congo_21
-congo_20
-congo_13
-congo_11
-jy_12
-jy_11
-jy_03
-mm_10
-mm_10u
-mm_109
-mm_109b
-mm_109c
-mm_05
-mb_10
-mb_106
-mb_106b
-nbaf_31
-nbaf_31a
-nbaf_11s
-nbaf_11
-nbaf_11a
-nbaf_115
-nbaf_21
-nbaf_22
-nbaf_23
-ngg_13
-ngg_p06
-ngg_10
-sc_18
-sc_18n
-sc_18s2
-sc_17
-sc_17n
-sc_14
-sc_091
-ss_15
-ss_14
-ss_12
-ss_03
-ss_01
-totan_14
-totan_13
-totan_12
-totan_04
-cp_16
-cp_15
-ttt_10
-
-
-// wpc_an.cpp
-tfa_13
-dd_p7
-dd_p06
-fh_l9
-fh_l9b
-fh_905h
-fh_l3
-fh_l4
-fh_l5
-hd_l3
-hd_l1
-bop_l7
-bop_l6
-bop_l5
-bop_l4
-bop_l3
-bop_l2
-
-
-// wpc_dcs.cpp
-dm_lx4
-dm_pa2
-dm_px5
-dm_la1
-dm_lx3
-dm_h5
-dm_h6
-ij_l7
-ij_lg7
-ij_l6
-ij_l5
-ij_l4
-ij_l3
-jd_l7
-jd_l1
-jd_l6
-jd_l5
-jd_l4
-pop_lx5
-pop_la4
-pop_pa3
-sttng_l7
-sttng_x7
-sttng_p8
-sttng_p5
-sttng_p4
-sttng_s7
-sttng_g7
-sttng_l1
-sttng_l2
-sttng_l3
-afv_l4
-
-
-// wpc_dot.cpp
-tfdmd_l3
-gi_l9
-gi_l3
-gi_l4
-gi_l6
-hshot_p8
-hurr_l2
-pz_f4
-pz_l1
-pz_l2
-pz_l3
-sf_l1
-t2_l8
-t2_l6
-t2_p2f
-t2_l4
-t2_l3
-t2_l2
-
-
-// wpc_flip1.cpp
-taf_l5
-taf_p2
-taf_l1
-taf_l2
-taf_l3
-taf_l4
-taf_l7
-taf_l6
-taf_h4
-
-
-// wpc_flip2.cpp
-br_l4
-br_p17
-br_l1
-br_l3
-drac_l1
-drac_p11
-cftbl_l3
-cftbl_l4
-dw_l2
-dw_l1
-dw_p5
-ft_l5
-ft_l3
-ft_l4
-ft_p4
-tafg_lx3
-tafg_h3
-tafg_la2
-tafg_la3
-gw_l5
-gw_pb
-gw_pc
-gw_l1
-gw_l2
-gw_l3
-gw_p7
-tz_92
-tz_94h
-tz_94ch
-tz_pa1
-tz_p3
-tz_p4
-tz_l1
-tz_l2
-tz_ifpa
-tz_l3
-tz_l4
-tz_h7
-tz_h8
-ww_l5
-ww_lh6
-ww_lh5
-ww_l4
-ww_l3
-ww_l2
-ww_p8
-ww_p1
-strik_l4
-lc_11
-
-
-// wpc_s.cpp
-corv_21
-corv_px4
-corv_lx1
-corv_lx2
-corv_la1
-dh_lx2
-i500_11r
-i500_10r
-i500_11b
-jb_10r
-jb_10b
-jm_12r
-jm_12b
-jm_05r
-nf_23x
-nf_23
-nf_23f
-nf_22
-nf_20
-nf_10
-rs_l6
-rs_la5
-rs_lx5
-rs_la4
-rs_lx4
-rs_lx3
-rs_lx2
-fs_lx5
-fs_lx2
-fs_sp2
-fs_lx4
-ts_lx5
-ts_lh6
-ts_lx4
-ts_la4
-ts_la2
-ts_pa1
-ts_lf6
-ts_lm6
-tom_13
-tom_14h
-tom_12
-tom_10f
-tom_06
-wd_12
-wd_12g
-wd_11
-wd_10r
-wd_10g
-wd_10f
-wd_03r
-wd_048r
-wcs_l2
-wcs_la2
-wcs_p2
-wcs_p3
-tfs_12
-
-
-// zac_1.cpp
-ewf
-firemntn
-futurwld
-hotwheel
-hod
-locomotp
-strapids
-sshtlzac
-stargod
-stargoda
-wsports
-
-
-// zac_2.cpp
-bbeltzac
-clown
-dvlrider
-dvlrideri
-dvlriderg
-farfalla
-farfallai
-farfallag
-mcastle
-mcastlei
-mcastleg
-mcastlef
-mexico
-nstrphnx
-pinchamp
-pinchampg
-pinchampi
-pinchamp7
-pinchamp7g
-pinchamp7i
-poolcham
-poolchami
-poolchama
-robot
-roboti
-robotg
-robotf
-scram_tp
-socrking
-socrkingi
-socrkingg
-spookyp
-spookyi
-strsphnx
-tmachzac
-tmachzacg
-tmachzacf
-zankor
-
-
-// zac_proto.cpp
-skijump
-spacecty
-strike
-
-
-/* [END] pinball drivers */
-
-
-
-/* Below are misc lazy adds, or yet to be sorted out... */
-
-barata
-
-cspin2
-caprcyc
-
-newufo
-newufo_sonic
-newufo_nfl
-newufo_xmas
-ufomini
-ufo21
-ufo800
-westdrm
-
-// VLC Nevada
-nevada
-
-// Webak Austria
-fruitstb
-
-// HP Automaten
-bingoman
-bingomana
-
-// Arachnid - Super Six Plus II English Mark Darts 6000
-arac6000
-
-number1 // 1996 San Remo Games
-gluck2 // 1992 Yung Yu / CYE
-
-sanremmg // San Remo / Elsy
-
-// Valco fireball
-fireball
-
-//M.G.A.
-mgavegas
-mgavegas21
-mgavegas133
-
-amusco // 1987, Amusco.
-cocoloco // 198?, Petaco S.A.
-
-alinvade
-
-joystand // 1997 Yuvo
-chexx83 // 1983 ICE
-faceoffh // 1983 SoftLogic / Entertainment Enterprises
-
-// Doyle & Assoc.
-piggypas
-hoopshot
-rndrndqs
-fidlstix
-jackbean
-dumpump
-3lilpigs
-
-wackygtr // Wacky Gator
-
-amerihok
-
-ice_tbd // ICE - Turbo Drive
-ice_bozo // ICE - Bozo Pail Toss
-
-scm_500
-
-awetoss // Lazer-tron Awesome Toss'em
-aftrshok // Lazer-tron After Shock
-aftrshoka
-ribrac // Lazer-tron Ribbit Racing
-
-age_cand // AGE Candy Crane
-
-clowndwn // Elwood Clown Roll Down
-
-fi6845
-fi8275
-
-l9nibble // unknown Nibble game.
- \ No newline at end of file
diff --git a/src/mame/audio/zaccaria.h b/src/mame/audio/zaccaria.h
index 1414b9d2959..ec717f04db3 100644
--- a/src/mame/audio/zaccaria.h
+++ b/src/mame/audio/zaccaria.h
@@ -132,4 +132,4 @@ protected:
UINT8 m_host_command;
};
-#endif // __AUDIO_ZACCARIA_H__ \ No newline at end of file
+#endif // __AUDIO_ZACCARIA_H__
diff --git a/src/mame/drivers/1943.cpp b/src/mame/drivers/1943.cpp
index 4b64f9dae53..d794c1e98aa 100644
--- a/src/mame/drivers/1943.cpp
+++ b/src/mame/drivers/1943.cpp
@@ -786,9 +786,9 @@ ROM_START( 1943bj )
/* front background */
ROM_LOAD( "bm14.5f", 0x0000, 0x8000, CRC(4d3c6401) SHA1(ce4f6dbf8fa030ad45cbb5afd58df27fed2d4618) )
/* back background probably same gfx different layout */
- ROM_LOAD( "mkb07.8k", 0xc000, 0x4000, CRC(ae1b317f) SHA1(d311c198d77ec932d776427e2ebfffe90e5330c3) )
+ ROM_LOAD( "mkb07.8k", 0xc000, 0x4000, CRC(ae1b317f) SHA1(d311c198d77ec932d776427e2ebfffe90e5330c3) )
ROM_CONTINUE( 0x8000, 0x4000 )
-
+
ROM_REGION( 0x0c00, "proms", 0 )
ROM_LOAD( "bm1.12a", 0x0000, 0x0100, CRC(74421f18) SHA1(5b8b59f6f4e5ad358611de50608f47f41a5b0e51) ) /* red component */
ROM_LOAD( "bm2.13a", 0x0100, 0x0100, CRC(ac27541f) SHA1(1796c4c9041dfe28e6319576f21df1dbcb8d12bf) ) /* green component */
diff --git a/src/mame/drivers/1945kiii.cpp b/src/mame/drivers/1945kiii.cpp
index 93b649814e9..7893c97536e 100644
--- a/src/mame/drivers/1945kiii.cpp
+++ b/src/mame/drivers/1945kiii.cpp
@@ -160,9 +160,8 @@ WRITE16_MEMBER(k3_state::k3_soundbanks_w)
WRITE16_MEMBER(k3_state::flagrall_soundbanks_w)
{
-
data &= mem_mask;
-
+
// 0x0200 on startup
// 0x0100 on startup
@@ -311,13 +310,13 @@ static INPUT_PORTS_START( flagrall )
PORT_DIPSETTING( 0x0003, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x0002, DEF_STR( 1C_2C ) )
PORT_DIPUNUSED_DIPLOC( 0x0004, IP_ACTIVE_LOW, "SW1:3" )
- PORT_DIPUNUSED_DIPLOC( 0x0008, IP_ACTIVE_LOW, "SW1:4" )
+ PORT_DIPUNUSED_DIPLOC( 0x0008, IP_ACTIVE_LOW, "SW1:4" )
PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, "Dip Control" ) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x0040, IP_ACTIVE_LOW, "SW1:7" )
PORT_DIPNAME( 0x0080, 0x0080, "Picture Test" ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
@@ -331,13 +330,13 @@ static INPUT_PORTS_START( flagrall )
PORT_DIPNAME( 0x0400, 0x0400, "Bonus Type" ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING ( 0x0400, "0" )
PORT_DIPSETTING( 0x0000, "1" )
- PORT_DIPUNUSED_DIPLOC( 0x0800, IP_ACTIVE_LOW, "SW2:4" )
+ PORT_DIPUNUSED_DIPLOC( 0x0800, IP_ACTIVE_LOW, "SW2:4" )
PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) )
PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) )
- PORT_DIPUNUSED_DIPLOC( 0x4000, IP_ACTIVE_LOW, "SW2:7" )
+ PORT_DIPUNUSED_DIPLOC( 0x4000, IP_ACTIVE_LOW, "SW2:7" )
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
@@ -440,7 +439,7 @@ ROM_START( flagrall )
ROM_LOAD32_BYTE( "5_u6.bin", 0x000001, 0x080000, CRC(1ac0bd0c) SHA1(ab71bb84e61f5c7168601695f332a8d4a30d9948) )
ROM_LOAD32_BYTE( "2_u7.bin", 0x000002, 0x080000, CRC(5f6db2b3) SHA1(84caa019d3b75be30a14d19ccc2f28e5e94028bd) )
ROM_LOAD32_BYTE( "6_u8.bin", 0x000003, 0x080000, CRC(79e4643c) SHA1(274f2741f39c63e32f49c6a1a72ded1263bdcdaa) )
-
+
ROM_LOAD32_BYTE( "3_u58.bin", 0x200000, 0x040000, CRC(c913df7d) SHA1(96e89ecb9e5f4d596d71d7ba35af7b2af4670342) )
ROM_LOAD32_BYTE( "4_u59.bin", 0x200001, 0x040000, CRC(cb192384) SHA1(329b4c1a4dc388d9f4ce063f9a54cbf3b967682a) )
ROM_LOAD32_BYTE( "7_u60.bin", 0x200002, 0x040000, CRC(f187a7bf) SHA1(f4ce9ac9fe376250fe426de6ee404fc7841ef08a) )
diff --git a/src/mame/drivers/advision.cpp b/src/mame/drivers/advision.cpp
index d19956a4388..e303e3db28b 100644
--- a/src/mame/drivers/advision.cpp
+++ b/src/mame/drivers/advision.cpp
@@ -68,7 +68,7 @@ static MACHINE_CONFIG_START( advision, advision_state )
MCFG_CPU_IO_MAP(io_map)
MCFG_CPU_ADD(COP411_TAG, COP411, 52631*16) // COP411L-KCN/N
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_RAM_POWER_SUPPLY, COP400_MICROBUS_DISABLED)
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_RAM_POWER_SUPPLY, false)
MCFG_COP400_READ_L_CB(READ8(advision_state, sound_cmd_r))
MCFG_COP400_WRITE_G_CB(WRITE8(advision_state, sound_g_w))
MCFG_COP400_WRITE_D_CB(WRITE8(advision_state, sound_d_w))
diff --git a/src/mame/drivers/aim65.cpp b/src/mame/drivers/aim65.cpp
index 7bf47669d60..15240d13cfb 100644
--- a/src/mame/drivers/aim65.cpp
+++ b/src/mame/drivers/aim65.cpp
@@ -157,9 +157,9 @@ int aim65_state::load_cart(device_image_interface &image, generic_slot_device *s
if (image.software_entry() != nullptr && image.get_software_region(slot_tag) == nullptr)
{
- std::string errmsg;
- strprintf(errmsg,"Attempted to load file with wrong extension\nSocket '%s' only accepts files with '.%s' extension",
- slot_tag, slot_tag);
+ std::string errmsg = string_format(
+ "Attempted to load file with wrong extension\nSocket '%s' only accepts files with '.%s' extension",
+ slot_tag, slot_tag);
image.seterror(IMAGE_ERROR_UNSPECIFIED, errmsg.c_str());
return IMAGE_INIT_FAIL;
}
diff --git a/src/mame/drivers/amazonlf.cpp b/src/mame/drivers/amazonlf.cpp
index 129af7c3631..5a5b170fb08 100644
--- a/src/mame/drivers/amazonlf.cpp
+++ b/src/mame/drivers/amazonlf.cpp
@@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
/*
-
+
uses ADC 'Amazon-LF' SoC, EISC CPU core - similar to crystal system?
*/
diff --git a/src/mame/drivers/apple1.cpp b/src/mame/drivers/apple1.cpp
index 881209946ff..51449676180 100644
--- a/src/mame/drivers/apple1.cpp
+++ b/src/mame/drivers/apple1.cpp
@@ -6,67 +6,67 @@
Next generation driver written in February 2016 by R. Belmont.
Thanks to the original crew.
-
+
Apple I has:
- 6502 @ 1.023 MHz (~0.960 MHz with RAM refresh)
- 4 or 8 KB RAM on-board
- 256 byte Monitor ROM
- No IRQs, no sound, dumb terminal video
- 6820 PIA for keyboard / terminal interface
-
- -------------------------------------------------------------------
-
- How to use cassettes:
- The system has no error checking or checksums, and the cassette
- has no header.
- Therefore, you must know the details, and pass these to the
- interface yourself.
-
- BASIC has no cassette handling. You must enter the monitor
- with: CALL -151
- then when finished, re-enter BASIC with: E2B3R
-
- Examples:
-
- A machine-language program will typically be like this:
- C100R (enter the interface)
- 0300.0FFFR (enter the load and end addresses, then load the tape)
- You start the tape.
- When the prompt returns you stop the tape.
- 0300R (run your program)
-
-
- To Load Tape Basic:
- C100R
- E000.EFFFR
- You start the tape.
- When the prompt returns you stop the tape.
- E000R (It must say 4C - if not, your tape is no good).
- The BASIC prompt will appear
- >@
-
-
- A BASIC program is split into two areas, one for the scratch pad,
- and one for the program proper.
- In BASIC you may have to adjust the allowed memory area, such as
- LOMEM = 768
- Then, go to the monitor: CALL -151
- C100R (enter the interface)
- 00A4.00FFR 0300.0FFFR (load the 2 parts)
- You start the tape.
- When the prompt returns you stop the tape.
- E2B3R (back to BASIC)
- You can LIST or RUN now.
-
-
- Saving is almost the same, when you specify the address range, enter
- W instead of R. The difficulty is finding out how long your program is.
-
- Insert a blank tape
- C100R
- 0300.0FFFW
- Quickly press Record.
- When the prompt returns, press Stop.
+ 6502 @ 1.023 MHz (~0.960 MHz with RAM refresh)
+ 4 or 8 KB RAM on-board
+ 256 byte Monitor ROM
+ No IRQs, no sound, dumb terminal video
+ 6820 PIA for keyboard / terminal interface
+
+ -------------------------------------------------------------------
+
+ How to use cassettes:
+ The system has no error checking or checksums, and the cassette
+ has no header.
+ Therefore, you must know the details, and pass these to the
+ interface yourself.
+
+ BASIC has no cassette handling. You must enter the monitor
+ with: CALL -151
+ then when finished, re-enter BASIC with: E2B3R
+
+ Examples:
+
+ A machine-language program will typically be like this:
+ C100R (enter the interface)
+ 0300.0FFFR (enter the load and end addresses, then load the tape)
+ You start the tape.
+ When the prompt returns you stop the tape.
+ 0300R (run your program)
+
+
+ To Load Tape Basic:
+ C100R
+ E000.EFFFR
+ You start the tape.
+ When the prompt returns you stop the tape.
+ E000R (It must say 4C - if not, your tape is no good).
+ The BASIC prompt will appear
+ >@
+
+
+ A BASIC program is split into two areas, one for the scratch pad,
+ and one for the program proper.
+ In BASIC you may have to adjust the allowed memory area, such as
+ LOMEM = 768
+ Then, go to the monitor: CALL -151
+ C100R (enter the interface)
+ 00A4.00FFR 0300.0FFFR (load the 2 parts)
+ You start the tape.
+ When the prompt returns you stop the tape.
+ E2B3R (back to BASIC)
+ You can LIST or RUN now.
+
+
+ Saving is almost the same, when you specify the address range, enter
+ W instead of R. The difficulty is finding out how long your program is.
+
+ Insert a blank tape
+ C100R
+ 0300.0FFFW
+ Quickly press Record.
+ When the prompt returns, press Stop.
**********************************************************************/
@@ -82,9 +82,9 @@
#include "softlist.h"
-#define A1_CPU_TAG "maincpu"
-#define A1_PIA_TAG "pia6821"
-#define A1_BUS_TAG "a1bus"
+#define A1_CPU_TAG "maincpu"
+#define A1_PIA_TAG "pia6821"
+#define A1_BUS_TAG "a1bus"
#define A1_BASICRAM_TAG "basicram"
class apple1_state : public driver_device
@@ -146,20 +146,20 @@ private:
static const UINT8 apple1_keymap[] =
{
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '=', '[', ']', ';', '\'', // KEY0
- ',', '.', '/', '\\', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', // KEY1
- 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\r', '_', // KEY2
- ' ', '\x1b', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // KEY3
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '=', '[', ']', ';', '\'', // KEY0
+ ',', '.', '/', '\\', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', // KEY1
+ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\r', '_', // KEY2
+ ' ', '\x1b', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // KEY3
- ')', '!', '@', '#', '$', '%', '^', '&', '*', '(', '_', '+', '[', ']', ':', '"', // KEY0 + shift
+ ')', '!', '@', '#', '$', '%', '^', '&', '*', '(', '_', '+', '[', ']', ':', '"', // KEY0 + shift
'<', '>', '?', '\\', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', // KEY1 + shift
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\r', '_', // KEY2 + shift
- ' ', '\x1b', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // KEY3 + shift
+ ' ', '\x1b', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // KEY3 + shift
- '0', '1', '\x00', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', '8', '9', '\x1f', '=', '\x1b', '\x1d', ';', '\'', // KEY0 + CTRL
- ',', '.', '/', '\x1c', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x09', '\x0a', '\x0b', '\x0c', // KEY1 + CTRL
- '\x0d', '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a', '\r', '_', // KEY2 + CTRL
- ' ', '\x1b', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // KEY3 + CTRL
+ '0', '1', '\x00', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', '8', '9', '\x1f', '=', '\x1b', '\x1d', ';', '\'', // KEY0 + CTRL
+ ',', '.', '/', '\x1c', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\x09', '\x0a', '\x0b', '\x0c', // KEY1 + CTRL
+ '\x0d', '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a', '\r', '_', // KEY2 + CTRL
+ ' ', '\x1b', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // KEY3 + CTRL
};
@@ -236,7 +236,7 @@ void apple1_state::poll_keyboard()
bool bKeypress = false;
// handle special keys first:
- if (special & 0x10) // RESET
+ if (special & 0x10) // RESET
{
m_reset_down = true;
m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
@@ -248,7 +248,7 @@ void apple1_state::poll_keyboard()
m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
}
- if (special & 0x20) // CLEAR SCREEN
+ if (special & 0x20) // CLEAR SCREEN
{
m_clear_down = true;
memset(m_vram, 0, sizeof(m_vram));
@@ -282,10 +282,10 @@ void apple1_state::poll_keyboard()
{
rawkey = (port * 16) + bit;
m_lastports[port] |= (1 << bit);
- port = 4; // force outer for loop to quit too
+ port = 4; // force outer for loop to quit too
bKeypress = true;
}
- else // key up
+ else // key up
{
m_lastports[port] &= ~(1 << bit);
}
@@ -433,12 +433,12 @@ ADDRESS_MAP_END
READ8_MEMBER(apple1_state::pia_keyboard_r)
{
- return m_transchar | 0x80; // bit 7 is wired high, similar-ish to the Apple II
+ return m_transchar | 0x80; // bit 7 is wired high, similar-ish to the Apple II
}
WRITE8_MEMBER(apple1_state::pia_display_w)
{
- data &= 0x7f; // D7 is ignored by the video h/w
+ data &= 0x7f; // D7 is ignored by the video h/w
// ignore characters if CLEAR is down
if (m_clear_down)
@@ -624,4 +624,3 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME */
COMP( 1976, apple1, 0, 0, apple1, apple1, driver_device, 0, "Apple Computer", "Apple I", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
-
diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp
index 8cf7052f829..7727c74379f 100644
--- a/src/mame/drivers/apple2e.cpp
+++ b/src/mame/drivers/apple2e.cpp
@@ -2958,7 +2958,7 @@ static INPUT_PORTS_START( apple2ees )
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
- PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('`') PORT_CHAR(0xbf) // inverted question mark
+ PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('`') PORT_CHAR(0xbf) // inverted question mark
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR('=')
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('\'') PORT_CHAR('?')
@@ -2984,7 +2984,7 @@ static INPUT_PORTS_START( apple2ees )
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0xc7) PORT_CHAR(0xa1) // c with cedilla / inverted exclamation point
+ PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0xc7) PORT_CHAR(0xa1) // c with cedilla / inverted exclamation point
PORT_START("X7")
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_UNUSED)
@@ -3557,14 +3557,14 @@ ROM_END
ROM_START(apple2ees)
ROM_REGION(0x2000,"gfx1",0)
- ROM_LOAD( "341-0212-a.e9", 0x000000, 0x002000, CRC(bc5575ef) SHA1(aa20c257255ef552295d32a3f56ccbb52b8716c3) )
+ ROM_LOAD( "341-0212-a.e9", 0x000000, 0x002000, CRC(bc5575ef) SHA1(aa20c257255ef552295d32a3f56ccbb52b8716c3) )
ROM_REGION(0x8000,"maincpu",0)
ROM_LOAD ( "342-0135-b.64", 0x0000, 0x2000, CRC(e248835e) SHA1(523838c19c79f481fa02df56856da1ec3816d16e))
ROM_LOAD ( "342-0134-a.64", 0x2000, 0x2000, CRC(fc3d59d8) SHA1(8895a4b703f2184b673078f411f4089889b61c54))
ROM_REGION( 0x800, "keyboard", ROMREGION_ERASE00 )
- ROM_LOAD( "341-0211-a.f12", 0x000000, 0x000800, CRC(fac15d54) SHA1(abe019de22641b0647e829a1d4745759bdffe86a) )
+ ROM_LOAD( "341-0211-a.f12", 0x000000, 0x000800, CRC(fac15d54) SHA1(abe019de22641b0647e829a1d4745759bdffe86a) )
ROM_END
ROM_START(mprof3)
diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp
index 6a9d42a7dac..e916095811a 100644
--- a/src/mame/drivers/apple2gs.cpp
+++ b/src/mame/drivers/apple2gs.cpp
@@ -447,7 +447,7 @@ ROM_START(apple2gs)
ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) /* need label/part number */
ROM_REGION(0x40000,"maincpu",0)
- ROM_LOAD("341-0737", 0x0000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27)) /* Needs verification; 341-0737: IIgs ROM03 FC-FD */
+ ROM_LOAD("341-0737", 0x00000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27)) /* Needs verification; 341-0737: IIgs ROM03 FC-FD */
ROM_LOAD("341-0748", 0x20000, 0x20000, CRC(d4c50550) SHA1(2784cdd7ac7094b3e494409db3e72b4e6d2d9e81)) /* Needs verification; 341-0748: IIgs ROM03 FE-FF */
ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00)
@@ -469,7 +469,7 @@ ROM_START(apple2gsr3p)
ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) /* need label/part number */
ROM_REGION(0x40000,"maincpu",0)
- ROM_LOAD("341-0728", 0x0000, 0x20000, NO_DUMP) /* 341-0728: IIgs ROM03 prototype FC-FD */
+ ROM_LOAD("341-0728", 0x00000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27) ) /* 341-0728: IIgs ROM03 prototype FC-FD - 28 pin MASK rom */
ROM_LOAD("341-0729", 0x20000, 0x20000, NO_DUMP) /* 341-0729: IIgs ROM03 prototype FE-FF */
ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00)
@@ -488,11 +488,12 @@ ROM_START(apple2gsr3lp)
ROM_LOAD( "341-0124a.bin", 0x000000, 0x000400, CRC(2a3576bf) SHA1(58fbf770d3801a02d0944039829f9241b5279013) )
ROM_REGION(0x1000,"gfx1",0)
- ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89)) /* need label/part number */
+ ROM_LOAD ( "apple2gs.chr", 0x0000, 0x1000, CRC(91e53cd8) SHA1(34e2443e2ef960a36c047a09ed5a93f471797f89) ) /* need label/part number */
ROM_REGION(0x40000,"maincpu",0)
- ROM_LOAD("341-0737", 0x0000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27)) /* 341-0737: IIgs ROM03 FC-FD */
- ROM_LOAD("341-0749", 0x20000, 0x20000, NO_DUMP) /* 341-0749: unknown ?post? ROM03 IIgs prototype? FE-FF */
+ // The 341-0749 is known to also be matched with the 341-0728 MASK rom which holds the same data as the EPROM 341-0737 version.
+ ROM_LOAD("341-0737", 0x00000, 0x20000, CRC(8d410067) SHA1(c0f4704233ead14cb8e1e8a68fbd7063c56afd27) ) /* 341-0737: IIgs ROM03 FC-FD - 32 pin EPROM */
+ ROM_LOAD("341-0749", 0x20000, 0x20000, CRC(c6e9b4b4) SHA1(d754a3c3a26763c50bc9adfd0fcb9b71aef7999d) ) /* 341-0749: unknown ?post? ROM03 IIgs prototype? FE-FF - 32 pin EPROM */
ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00)
@@ -535,10 +536,11 @@ ROM_START(apple2gsr0)
ROM_REGION(0x20000,"maincpu",0)
/* Should these roms really be split like this? according to the unofficial apple rom list, IIgs ROM00 was on one rom labeled 342-0077-A */
- ROM_LOAD("rom0a.bin", 0x0000, 0x8000, CRC(9cc78238) SHA1(0ea82e10720a01b68722ab7d9f66efec672a44d3))
- ROM_LOAD("rom0b.bin", 0x8000, 0x8000, CRC(8baf2a79) SHA1(91beeb11827932fe10475252d8036a63a2edbb1c))
- ROM_LOAD("rom0c.bin", 0x10000, 0x8000, CRC(94c32caa) SHA1(4806d50d676b06f5213b181693fc1585956b98bb))
- ROM_LOAD("rom0d.bin", 0x18000, 0x8000, CRC(200a15b8) SHA1(0c2890bb169ead63369738bbd5f33b869f24c42a))
+// ROM_LOAD("rom0a.bin", 0x0000, 0x8000, CRC(9cc78238) SHA1(0ea82e10720a01b68722ab7d9f66efec672a44d3))
+// ROM_LOAD("rom0b.bin", 0x8000, 0x8000, CRC(8baf2a79) SHA1(91beeb11827932fe10475252d8036a63a2edbb1c))
+// ROM_LOAD("rom0c.bin", 0x10000, 0x8000, CRC(94c32caa) SHA1(4806d50d676b06f5213b181693fc1585956b98bb))
+// ROM_LOAD("rom0d.bin", 0x18000, 0x8000, CRC(200a15b8) SHA1(0c2890bb169ead63369738bbd5f33b869f24c42a))
+ ROM_LOAD("342-0077-a", 0x0000, 0x20000, CRC(dfbdd97b) SHA1(ff0c245dd0732ec4413a934fd80efc2defd8a8e3) ) /* 342-0077-A: IIgs ROM00 */
ROM_REGION(0x20000, "es5503", ROMREGION_ERASE00)
@@ -592,7 +594,7 @@ ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
COMP( 1989, apple2gs, 0, apple2, apple2gs, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM03)", MACHINE_SUPPORTS_SAVE )
COMP( 198?, apple2gsr3p, apple2gs, 0, apple2gs, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM03 prototype)", MACHINE_NOT_WORKING )
-COMP( 1989, apple2gsr3lp, apple2gs, 0, apple2gs, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM03 late prototype?)", MACHINE_NOT_WORKING )
+COMP( 1989, apple2gsr3lp, apple2gs, 0, apple2gs, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM03 late prototype?)", MACHINE_SUPPORTS_SAVE )
COMP( 1987, apple2gsr1, apple2gs, 0, apple2gsr1, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM01)", MACHINE_SUPPORTS_SAVE )
COMP( 1986, apple2gsr0, apple2gs, 0, apple2gsr1, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM00)", MACHINE_SUPPORTS_SAVE )
COMP( 1986, apple2gsr0p,apple2gs, 0, apple2gsr1, apple2gs, driver_device, 0, "Apple Computer", "Apple IIgs (ROM00 prototype 6/19/1986)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/argox.cpp b/src/mame/drivers/argox.cpp
index 737afea4be2..3ee71615d5c 100644
--- a/src/mame/drivers/argox.cpp
+++ b/src/mame/drivers/argox.cpp
@@ -51,7 +51,7 @@ public:
m_maincpu(*this, "maincpu")
{ }
- DECLARE_DRIVER_INIT(os214);
+ DECLARE_DRIVER_INIT(os214);
required_device<cpu_device> m_maincpu;
};
@@ -76,9 +76,9 @@ DRIVER_INIT_MEMBER( os214_state, os214 )
}
ROM_START( os214 )
- ROM_REGION( 0x080000, "maincpu", 0 )
- ROM_LOAD16_BYTE( "u9_s2a2-4.03_argox_am.u9", 0x000000, 0x040000, CRC(3bd8b2b1) SHA1(546f9fd8d7e1f589f6e594a332a3429041b49eea) )
- ROM_LOAD16_BYTE( "u8_s2a2-4.03_argox_am.u8", 0x000001, 0x040000, CRC(d49f52af) SHA1(0ca5a70c6c3995f275226af26db965f6ba7ed123) )
+ ROM_REGION( 0x080000, "maincpu", 0 )
+ ROM_LOAD16_BYTE( "u9_s2a2-4.03_argox_am.u9", 0x000000, 0x040000, CRC(3bd8b2b1) SHA1(546f9fd8d7e1f589f6e594a332a3429041b49eea) )
+ ROM_LOAD16_BYTE( "u8_s2a2-4.03_argox_am.u8", 0x000001, 0x040000, CRC(d49f52af) SHA1(0ca5a70c6c3995f275226af26db965f6ba7ed123) )
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
diff --git a/src/mame/drivers/asteroid.cpp b/src/mame/drivers/asteroid.cpp
index fbaf3ba8be5..b9ab4d1a6e1 100644
--- a/src/mame/drivers/asteroid.cpp
+++ b/src/mame/drivers/asteroid.cpp
@@ -774,7 +774,7 @@ ROM_END
/* Space Rocks (J.Estevez, Barcelona).
Seems to be a legit spanish set, since there are documented cabs
- registered in Spain.
+ registered in Spain.
*/
ROM_START( spcrocks )
ROM_REGION( 0x8000, "maincpu", 0 )
@@ -786,7 +786,7 @@ ROM_START( spcrocks )
/* DVG PROM */
ROM_REGION( 0x100, "user1", 0 )
- ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) )
+ ROM_LOAD( "034602-01.c8", 0x0000, 0x0100, BAD_DUMP CRC(97953db8) SHA1(8cbded64d1dd35b18c4d5cece00f77e7b2cab2ad) ) // still undumped.
ROM_END
ROM_START( aerolitos )
@@ -1011,7 +1011,6 @@ ROM_START( llandert )
ROM_END
-
/*************************************
*
* Driver initialization
@@ -1030,6 +1029,7 @@ DRIVER_INIT_MEMBER(asteroid_state,asterock)
m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x2007, read8_delegate(FUNC(asteroid_state::asterock_IN0_r),this));
}
+
/*************************************
*
* Game drivers
diff --git a/src/mame/drivers/astrcorp.cpp b/src/mame/drivers/astrcorp.cpp
index a82199c5d06..6440331aa95 100644
--- a/src/mame/drivers/astrcorp.cpp
+++ b/src/mame/drivers/astrcorp.cpp
@@ -684,7 +684,7 @@ No specific PCB model or numer....
Astro V02 0022 160pin PQFP ("ASTRO02" silkscreened under chip)
JX-1689F1028N GRC586.V5 (68K core, has direct connection to program roms)
- Lattice IspLSI 1016 60LJ socketted FPGA
+ Lattice IspLSI 1016 60LJ socketed FPGA
OKI 6295 clone chip (AD-65 or U6295)
EEPROM Atmel 93C46
@@ -755,7 +755,7 @@ No specific PCB model or numer, same as used for Skill Drop but with newer video
Astro V05 0206 160pin PQFP ("ASTRO02" silkscreened under chip)
JX-1689HP TA5265188 (68K core, has direct connection to program roms)
- Lattice IspLSI 1016 60LJ socketted FPGA
+ Lattice IspLSI 1016 60LJ socketed FPGA
OKI 6295 clone chip (AD-65 or U6295)
EEPROM Atmel 93C46
@@ -869,7 +869,7 @@ ASTRO M1.2 PCB:
Astro V06 0430 160pin PQFP ("ASTRO02" silkscreened under chip)
Boards are known to have either Astro V06 0430 or Astro V07 0610
Astro V102PX-006 at U10 (68K core, has direct connection to program roms)
- Astro F02 2005-09-17 socketted FPGA type chip (used for encryption?)
+ Astro F02 2005-09-17 socketed FPGA type chip (used for encryption?)
OKI 6295 clone chip (AD-65 or U6295)
RAM:
@@ -984,7 +984,7 @@ Zoo by Astro
ASTRO M1.1 PCB:
Astro V06 0430 160pin PQFP ("ASTRO02" silkscreened under chip)
Astro V102PX-005 T042652846 at U10 (68K core, has direct connection to program roms)
- Astro F02 2005-02-18 socketted FPGA type chip (used for encryption?)
+ Astro F02 2005-02-18 socketed FPGA type chip (used for encryption?)
OKI 6295 clone chip (AD-65 or U6295)
RAM:
diff --git a/src/mame/drivers/astrocde.cpp b/src/mame/drivers/astrocde.cpp
index e9c745f1ecc..43101fc49ed 100644
--- a/src/mame/drivers/astrocde.cpp
+++ b/src/mame/drivers/astrocde.cpp
@@ -337,7 +337,7 @@ READ8_MEMBER(astrocde_state::gorf_io_2_r)
case 4: output().set_lamp_value(4, data); break;
case 5: output().set_lamp_value(5, data); break;
case 6: /* n/c */ break;
- case 7: osd_printf_debug("io_2:%d\n", data); break;
+ case 7: output().set_lamp_value(7, data); break;
}
return 0xff;
}
diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp
index 4ac472fe0c1..55c2d1d9536 100644
--- a/src/mame/drivers/at.cpp
+++ b/src/mame/drivers/at.cpp
@@ -12,121 +12,113 @@
#endif /* i386 */
-#include "includes/at.h"
+#include "emu.h"
+#include "cpu/i86/i286.h"
+#include "cpu/i386/i386.h"
+#include "machine/at.h"
+#include "machine/wd7600.h"
+#include "machine/cs8221.h"
+#include "machine/nvram.h"
+#include "machine/vt82c496.h"
+#include "bus/lpci/pci.h"
+#include "bus/lpci/vt82c505.h"
+#include "machine/ds128x.h"
+#include "machine/ram.h"
+#include "bus/isa/isa_cards.h"
#include "bus/pc_kbd/keyboards.h"
-#include "softlist.h"
+
+class at_state : public driver_device
+{
+public:
+ at_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_mb(*this, "mb"),
+ m_ram(*this, RAM_TAG)
+ { }
+ required_device<cpu_device> m_maincpu;
+ required_device<at_mb_device> m_mb;
+ required_device<ram_device> m_ram;
+ DECLARE_DRIVER_INIT(at);
+ DECLARE_DRIVER_INIT(atpci);
+ DECLARE_DRIVER_INIT(megapcpla);
+ DECLARE_READ16_MEMBER(ps1_unk_r);
+ DECLARE_WRITE16_MEMBER(ps1_unk_w);
+ DECLARE_READ8_MEMBER(ps1_portb_r);
+ DECLARE_MACHINE_START(vrom_fix);
+
+ void init_at_common(int xmsbase);
+ UINT16 m_ps1_reg[2];
+};
+
+class megapc_state : public driver_device
+{
+public:
+ megapc_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_wd7600(*this, "wd7600"),
+ m_isabus(*this, "isabus"),
+ m_speaker(*this, "speaker")
+ { }
+
+public:
+ required_device<cpu_device> m_maincpu;
+ required_device<wd7600_device> m_wd7600;
+ required_device<isa16_device> m_isabus;
+ required_device<speaker_sound_device> m_speaker;
+
+ DECLARE_DRIVER_INIT(megapc);
+ DECLARE_DRIVER_INIT(megapcpl);
+
+ DECLARE_READ16_MEMBER( wd7600_ior );
+ DECLARE_WRITE16_MEMBER( wd7600_iow );
+ DECLARE_WRITE_LINE_MEMBER( wd7600_hold );
+ DECLARE_WRITE8_MEMBER( wd7600_tc ) { m_isabus->eop_w(offset, data); }
+ DECLARE_WRITE_LINE_MEMBER( wd7600_spkr ) { m_speaker->level_w(state); }
+};
+
static ADDRESS_MAP_START( at16_map, AS_PROGRAM, 16, at_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x09ffff) AM_RAMBANK("bank10")
- AM_RANGE(0x0c0000, 0x0c7fff) AM_ROM
- AM_RANGE(0x0c8000, 0x0cffff) AM_ROM
- AM_RANGE(0x0d0000, 0x0effff) AM_RAM
- AM_RANGE(0x0f0000, 0x0fffff) AM_ROM
- AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("maincpu", 0x0f0000)
+ AM_RANGE(0x0e0000, 0x0fffff) AM_ROM AM_REGION("bios", 0)
+ AM_RANGE(0xfe0000, 0xffffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( ps2m30286_map, AS_PROGRAM, 16, at_state)
- AM_RANGE(0x000000, 0x09ffff) AM_RAMBANK("bank10")
- AM_RANGE(0x0c0000, 0x0c7fff) AM_ROM
- AM_RANGE(0x0c8000, 0x0cffff) AM_ROM
- AM_RANGE(0x0d0000, 0x0dffff) AM_RAM
- AM_RANGE(0x0e0000, 0x0fffff) AM_ROM
- AM_RANGE(0xfe0000, 0xffffff) AM_ROM AM_REGION("maincpu", 0x0e0000)
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START( ps1_286_map, AS_PROGRAM, 16, at_state )
+static ADDRESS_MAP_START( at16l_map, AS_PROGRAM, 16, at_state )
+ ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000000, 0x09ffff) AM_RAMBANK("bank10")
- AM_RANGE(0x0a0000, 0x0bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffff)
- AM_RANGE(0x0c0000, 0x0fffff) AM_ROM
- AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("maincpu", 0x0f0000)
+ AM_RANGE(0x0e0000, 0x0fffff) AM_ROM AM_REGION("bios", 0x20000)
+ AM_RANGE(0xfe0000, 0xffffff) AM_ROM AM_REGION("bios", 0x20000)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( at386_map, AS_PROGRAM, 32, at_state )
+static ADDRESS_MAP_START( at32_map, AS_PROGRAM, 32, at_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("bank10")
- AM_RANGE(0x000a0000, 0x000bffff) AM_NOP
- AM_RANGE(0x000c0000, 0x000c7fff) AM_ROM
- AM_RANGE(0x000c8000, 0x000cffff) AM_ROM
- AM_RANGE(0x000d0000, 0x000effff) AM_ROM
- AM_RANGE(0x000f0000, 0x000fffff) AM_ROM
+ AM_RANGE(0x000e0000, 0x000fffff) AM_ROM AM_REGION("bios", 0)
AM_RANGE(0x00800000, 0x00800bff) AM_RAM AM_SHARE("nvram")
- AM_RANGE(0xffff0000, 0xffffffff) AM_ROM AM_REGION("maincpu", 0x0f0000)
+ AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("bios", 0)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( at586_map, AS_PROGRAM, 32, at586_state )
+static ADDRESS_MAP_START( at32l_map, AS_PROGRAM, 32, at_state )
+ ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("bank10")
- AM_RANGE(0x000a0000, 0x000bffff) AM_NOP
+ AM_RANGE(0x000e0000, 0x000fffff) AM_ROM AM_REGION("bios", 0x20000)
AM_RANGE(0x00800000, 0x00800bff) AM_RAM AM_SHARE("nvram")
- AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("isa", 0x20000)
+ AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("bios", 0x20000)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ficpio_map, AS_PROGRAM, 32, at_state )
+ ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("bank10")
- AM_RANGE(0x000a0000, 0x000bffff) AM_NOP
- AM_RANGE(0x000c0000, 0x000c7fff) AM_NOP
- AM_RANGE(0x000c8000, 0x000cffff) AM_NOP
- AM_RANGE(0x000d0000, 0x000effff) AM_RAM
- AM_RANGE(0x000f0000, 0x000fffff) AM_RAM
AM_RANGE(0x00800000, 0x00800bff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("isa", 0x20000)
ADDRESS_MAP_END
-
-READ8_MEMBER( at_state::at_dma8237_2_r )
-{
- return m_dma8237_2->read(space, offset / 2);
-}
-
-WRITE8_MEMBER( at_state::at_dma8237_2_w )
-{
- m_dma8237_2->write(space, offset / 2, data);
-}
-
-READ8_MEMBER( at_state::at_keybc_r )
-{
- switch (offset)
- {
- case 0: return m_keybc->data_r(space, 0);
- case 1: return at_portb_r(space, 0);
- }
-
- return 0xff;
-}
-
-WRITE8_MEMBER( at_state::at_keybc_w )
-{
- switch (offset)
- {
- case 0: m_keybc->data_w(space, 0, data); break;
- case 1: at_portb_w(space, 0, data); break;
- }
-}
-
-
-WRITE8_MEMBER( at_state::write_rtc )
-{
- if (offset==0) {
- m_nmi_enabled = BIT(data,7);
- m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
- m_mc146818->write(space,0,data);
- }
- else {
- m_mc146818->write(space,offset,data);
- }
-}
-
static ADDRESS_MAP_START( at16_io, AS_IO, 16, at_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", am9517a_device, read, write, 0xffff)
- AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0xffff)
- AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffff)
- AM_RANGE(0x0060, 0x0063) AM_READWRITE8(at_keybc_r, at_keybc_w, 0xffff)
- AM_RANGE(0x0064, 0x0067) AM_DEVREADWRITE8("keybc", at_keyboard_controller_device, status_r, command_w, 0xffff)
- AM_RANGE(0x0070, 0x007f) AM_DEVREAD8("rtc", mc146818_device, read, 0xffff) AM_WRITE8(write_rtc , 0xffff)
- AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffff)
- AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_slave", pic8259_device, read, write, 0xffff)
- AM_RANGE(0x00c0, 0x00df) AM_READWRITE8(at_dma8237_2_r, at_dma8237_2_w, 0xffff)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map)
ADDRESS_MAP_END
READ16_MEMBER( at_state::ps1_unk_r )
@@ -139,88 +131,41 @@ WRITE16_MEMBER( at_state::ps1_unk_w )
if((offset == 0) && (data == 0x60))
data = 0x68;
- m_ps1_reg[offset] = (m_ps1_reg[offset] & ~mem_mask) | (data & mem_mask);
+ COMBINE_DATA(&m_ps1_reg[offset]);
}
-READ8_MEMBER( at_state::ps1_kbdc_r )
+READ8_MEMBER( at_state::ps1_portb_r )
{
- UINT8 ret;
- if(offset == 0) ret = at_keybc_r(space, offset, mem_mask);
- else ret = ps2_portb_r(space,offset, mem_mask);
- return ret;
-}
+ UINT8 data = m_mb->portb_r(space, offset);
+ /* 0x10 is the dram refresh line bit, 15.085us. */
+ data = (data & ~0x10) | ((machine().time().as_ticks(66291) & 1) ? 0x10 : 0);
-static ADDRESS_MAP_START(ps1_286_io, AS_IO, 16, at_state )
- AM_RANGE(0x03b0, 0x03bf) AM_DEVREADWRITE8("vga", vga_device, port_03b0_r, port_03b0_w, 0xffff)
- AM_RANGE(0x03c0, 0x03cf) AM_DEVREADWRITE8("vga", vga_device, port_03c0_r, port_03c0_w, 0xffff)
- AM_RANGE(0x03d0, 0x03df) AM_DEVREADWRITE8("vga", vga_device, port_03d0_r, port_03d0_w, 0xffff)
- AM_RANGE(0x0060, 0x0063) AM_READWRITE8(ps1_kbdc_r, at_keybc_w, 0xffff)
- AM_RANGE(0x0102, 0x0105) AM_READWRITE(ps1_unk_r, ps1_unk_w)
- AM_IMPORT_FROM( at16_io )
-ADDRESS_MAP_END
-
-READ16_MEMBER( at_state::neat_chipset_r )
-{
- if (ACCESSING_BITS_0_7)
- return 0xff;
- if (ACCESSING_BITS_8_15)
- return m_cs8221->data_r(space, 0, 0) << 8;
- return 0xffff;
+ return data;
}
-WRITE16_MEMBER( at_state::neat_chipset_w )
-{
- if (ACCESSING_BITS_0_7)
- m_cs8221->address_w(space, 0, data, 0);
-
- if (ACCESSING_BITS_8_15)
- m_cs8221->data_w(space, 0, data >> 8, 0);
-}
-
-static ADDRESS_MAP_START( neat_io, AS_IO, 16, at_state )
+static ADDRESS_MAP_START(ps1_16_io, AS_IO, 16, at_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", am9517a_device, read, write, 0xffff)
- AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0xffff)
- AM_RANGE(0x0022, 0x0023) AM_READWRITE(neat_chipset_r, neat_chipset_w)
- AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffff)
- AM_RANGE(0x0060, 0x0063) AM_READWRITE8(at_keybc_r, at_keybc_w, 0xffff)
- AM_RANGE(0x0064, 0x0067) AM_DEVREADWRITE8("keybc", at_keyboard_controller_device, status_r, command_w, 0xffff)
- AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write , 0xffff)
- AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffff)
- AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_slave", pic8259_device, read, write, 0xffff)
- AM_RANGE(0x00c0, 0x00df) AM_READWRITE8(at_dma8237_2_r, at_dma8237_2_w, 0xffff)
+ AM_RANGE(0x0060, 0x0061) AM_READ8(ps1_portb_r, 0xff00)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map)
+ AM_RANGE(0x0102, 0x0105) AM_READWRITE(ps1_unk_r, ps1_unk_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( at386_io, AS_IO, 32, at_state )
+static ADDRESS_MAP_START( neat_io, AS_IO, 16, at_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", am9517a_device, read, write, 0xffffffff)
- AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0xffffffff)
- AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffffffff)
- AM_RANGE(0x0060, 0x0063) AM_READWRITE8(at_keybc_r, at_keybc_w, 0xffff)
- AM_RANGE(0x0064, 0x0067) AM_DEVREADWRITE8("keybc", at_keyboard_controller_device, status_r, command_w, 0xffff)
- AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write , 0xffffffff)
- AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
- AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_slave", pic8259_device, read, write, 0xffffffff)
- AM_RANGE(0x00c0, 0x00df) AM_READWRITE8(at_dma8237_2_r, at_dma8237_2_w, 0xffffffff)
+ AM_RANGE(0x0022, 0x0023) AM_DEVWRITE8("cs8221", cs8221_device, address_w, 0x00ff)
+ AM_RANGE(0x0022, 0x0023) AM_DEVREADWRITE8("cs8221", cs8221_device, data_r, data_w, 0xff00)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( at586_io, AS_IO, 32, at586_state )
+static ADDRESS_MAP_START( at32_io, AS_IO, 32, at_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_device, read, write)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE16("mb", at_mb_device, map, 0xffffffff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ficpio_io, AS_IO, 32, at_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", am9517a_device, read, write, 0xffffffff)
- AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0xffffffff)
- AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffffffff)
- AM_RANGE(0x0060, 0x0063) AM_READWRITE8(at_keybc_r, at_keybc_w, 0xffff)
- AM_RANGE(0x0064, 0x0067) AM_DEVREADWRITE8("keybc", at_keyboard_controller_device, status_r, command_w, 0xffff)
- AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write , 0xffffffff)
- AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
- AM_RANGE(0x00a0, 0x00a7) AM_DEVREADWRITE8("pic8259_slave", pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x00a8, 0x00af) AM_DEVREADWRITE8("chipset", vt82c496_device, read, write, 0xffffffff)
- AM_RANGE(0x00c0, 0x00df) AM_READWRITE8(at_dma8237_2_r, at_dma8237_2_w, 0xffffffff)
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE16("mb", at_mb_device, map, 0xffffffff)
AM_RANGE(0x0170, 0x0177) AM_DEVREADWRITE("ide2", ide_controller_32_device, read_cs0, write_cs0)
AM_RANGE(0x01f0, 0x01f7) AM_DEVREADWRITE("ide", ide_controller_32_device, read_cs0, write_cs0)
AM_RANGE(0x0370, 0x0377) AM_DEVREADWRITE("ide2", ide_controller_32_device, read_cs1, write_cs1)
@@ -231,28 +176,28 @@ ADDRESS_MAP_END
DRIVER_INIT_MEMBER(megapc_state, megapc)
{
UINT8* ROM = memregion("bios")->base();
- ROM[0xf9145] = 0x45; // hack to fix keyboard. To be removed when the keyboard controller from the MegaPC is dumped
- ROM[0xffea0] = 0x20; // to correct checksum
+ ROM[0x19145] = 0x45; // hack to fix keyboard. To be removed when the keyboard controller from the MegaPC is dumped
+ ROM[0x1fea0] = 0x20; // to correct checksum
}
DRIVER_INIT_MEMBER(megapc_state, megapcpl)
{
UINT8* ROM = memregion("bios")->base();
- ROM[0xf87b1] = 0x55; // hack to fix keyboard. To be removed when the keyboard controller from the MegaPC is dumped
- ROM[0xffea0] = 0x20; // to correct checksum
+ ROM[0x187b1] = 0x55; // hack to fix keyboard. To be removed when the keyboard controller from the MegaPC is dumped
+ ROM[0x1fea0] = 0x20; // to correct checksum
}
DRIVER_INIT_MEMBER(at_state, megapcpla)
{
- UINT8* ROM = memregion("maincpu")->base();
+ UINT8* ROM = memregion("bios")->base();
init_at_common(0xa0000);
- ROM[0xf3c2a] = 0x45; // hack to fix keyboard. To be removed when the keyboard controller from the MegaPC is dumped
- ROM[0xfaf37] = 0x45;
- ROM[0xfcf1b] = 0x54; // this will allow the keyboard to work during the POST memory test
- ROM[0xffffe] = 0x1c;
- ROM[0xfffff] = 0x41; // to correct checksum
+ ROM[0x33c2a] = 0x45; // hack to fix keyboard. To be removed when the keyboard controller from the MegaPC is dumped
+ ROM[0x3af37] = 0x45;
+ ROM[0x3cf1b] = 0x54; // this will allow the keyboard to work during the POST memory test
+ ROM[0x3fffe] = 0x1c;
+ ROM[0x3ffff] = 0x41; // to correct checksum
}
READ16_MEMBER( megapc_state::wd7600_ior )
@@ -294,162 +239,71 @@ static ADDRESS_MAP_START( megapcpl_io, AS_IO, 32, at_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_END
+/**********************************************************
+ *
+ * Init functions
+ *
+ **********************************************************/
-static INPUT_PORTS_START( atcga )
-INPUT_PORTS_END
-
-static INPUT_PORTS_START( atvga )
- PORT_START("IN0")
- PORT_DIPNAME( 0x08, 0x00, "VGA 1")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "VGA 2")
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "VGA 3")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x01, 0x01, "VGA 4")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-INPUT_PORTS_END
-
-WRITE_LINE_MEMBER( at_state::at_mc146818_irq )
+void at_state::init_at_common(int xmsbase)
{
- m_pic8259_slave->ir0_w((state) ? 0 : 1);
+ address_space& space = m_maincpu->space(AS_PROGRAM);
+
+ /* MESS managed RAM */
+ membank("bank10")->set_base(m_ram->pointer());
+
+ if (m_ram->size() > xmsbase)
+ {
+ offs_t ram_limit = 0x100000 + m_ram->size() - xmsbase;
+ space.install_read_bank(0x100000, ram_limit - 1, "bank1");
+ space.install_write_bank(0x100000, ram_limit - 1, "bank1");
+ membank("bank1")->set_base(m_ram->pointer() + xmsbase);
+ }
}
-UINT32 at_state::at_286_a20(bool state)
+DRIVER_INIT_MEMBER(at_state,at)
{
- return (state ? 0xffffff : 0xefffff);
+ init_at_common(0xa0000);
}
-WRITE_LINE_MEMBER( at_state::at_shutdown )
+DRIVER_INIT_MEMBER(at_state,atpci)
{
- if(state)
- m_maincpu->reset();
+ init_at_common(0x100000);
}
-static MACHINE_CONFIG_FRAGMENT( at_motherboard )
- MCFG_MACHINE_START_OVERRIDE(at_state, at )
- MCFG_MACHINE_RESET_OVERRIDE(at_state, at )
-
- MCFG_DEVICE_ADD("pit8254", PIT8254, 0)
- MCFG_PIT8253_CLK0(4772720/4) /* heartbeat IRQ */
- MCFG_PIT8253_OUT0_HANDLER(WRITELINE(at_state, at_pit8254_out0_changed))
- MCFG_PIT8253_CLK1(4772720/4) /* dram refresh */
- MCFG_PIT8253_CLK2(4772720/4) /* pio port c pin 4, and speaker polling enough */
- MCFG_PIT8253_OUT2_HANDLER(WRITELINE(at_state, at_pit8254_out2_changed))
-
- MCFG_DEVICE_ADD( "dma8237_1", AM9517A, XTAL_14_31818MHz/3 )
- MCFG_I8237_OUT_HREQ_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq0_w))
- MCFG_I8237_OUT_EOP_CB(WRITELINE(at_state, at_dma8237_out_eop))
- MCFG_I8237_IN_MEMR_CB(READ8(at_state, pc_dma_read_byte))
- MCFG_I8237_OUT_MEMW_CB(WRITE8(at_state, pc_dma_write_byte))
- MCFG_I8237_IN_IOR_0_CB(READ8(at_state, pc_dma8237_0_dack_r))
- MCFG_I8237_IN_IOR_1_CB(READ8(at_state, pc_dma8237_1_dack_r))
- MCFG_I8237_IN_IOR_2_CB(READ8(at_state, pc_dma8237_2_dack_r))
- MCFG_I8237_IN_IOR_3_CB(READ8(at_state, pc_dma8237_3_dack_r))
- MCFG_I8237_OUT_IOW_0_CB(WRITE8(at_state, pc_dma8237_0_dack_w))
- MCFG_I8237_OUT_IOW_1_CB(WRITE8(at_state, pc_dma8237_1_dack_w))
- MCFG_I8237_OUT_IOW_2_CB(WRITE8(at_state, pc_dma8237_2_dack_w))
- MCFG_I8237_OUT_IOW_3_CB(WRITE8(at_state, pc_dma8237_3_dack_w))
- MCFG_I8237_OUT_DACK_0_CB(WRITELINE(at_state, pc_dack0_w))
- MCFG_I8237_OUT_DACK_1_CB(WRITELINE(at_state, pc_dack1_w))
- MCFG_I8237_OUT_DACK_2_CB(WRITELINE(at_state, pc_dack2_w))
- MCFG_I8237_OUT_DACK_3_CB(WRITELINE(at_state, pc_dack3_w))
- MCFG_DEVICE_ADD( "dma8237_2", AM9517A, XTAL_14_31818MHz/3 )
- MCFG_I8237_OUT_HREQ_CB(WRITELINE(at_state, pc_dma_hrq_changed))
- MCFG_I8237_IN_MEMR_CB(READ8(at_state, pc_dma_read_word))
- MCFG_I8237_OUT_MEMW_CB(WRITE8(at_state, pc_dma_write_word))
- MCFG_I8237_IN_IOR_1_CB(READ8(at_state, pc_dma8237_5_dack_r))
- MCFG_I8237_IN_IOR_2_CB(READ8(at_state, pc_dma8237_6_dack_r))
- MCFG_I8237_IN_IOR_3_CB(READ8(at_state, pc_dma8237_7_dack_r))
- MCFG_I8237_OUT_IOW_1_CB(WRITE8(at_state, pc_dma8237_5_dack_w))
- MCFG_I8237_OUT_IOW_2_CB(WRITE8(at_state, pc_dma8237_6_dack_w))
- MCFG_I8237_OUT_IOW_3_CB(WRITE8(at_state, pc_dma8237_7_dack_w))
- MCFG_I8237_OUT_DACK_0_CB(WRITELINE(at_state, pc_dack4_w))
- MCFG_I8237_OUT_DACK_1_CB(WRITELINE(at_state, pc_dack5_w))
- MCFG_I8237_OUT_DACK_2_CB(WRITELINE(at_state, pc_dack6_w))
- MCFG_I8237_OUT_DACK_3_CB(WRITELINE(at_state, pc_dack7_w))
-
- MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE("maincpu", 0), VCC, READ8(at_state, get_slave_ack) )
- MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir2_w), GND, NULL )
-
- MCFG_DEVICE_ADD("isabus", ISA16, 0)
- MCFG_ISA16_CPU(":maincpu")
- MCFG_ISA_OUT_IRQ2_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir2_w)) // in place of irq 2 on at irq 9 is used
- MCFG_ISA_OUT_IRQ3_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir3_w))
- MCFG_ISA_OUT_IRQ4_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir4_w))
- MCFG_ISA_OUT_IRQ5_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir5_w))
- MCFG_ISA_OUT_IRQ6_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir6_w))
- MCFG_ISA_OUT_IRQ7_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir7_w))
- MCFG_ISA_OUT_IRQ10_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir3_w))
- MCFG_ISA_OUT_IRQ11_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir4_w))
- MCFG_ISA_OUT_IRQ12_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir5_w))
- MCFG_ISA_OUT_IRQ14_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir6_w))
- MCFG_ISA_OUT_IRQ15_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir7_w))
- MCFG_ISA_OUT_DRQ0_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq0_w))
- MCFG_ISA_OUT_DRQ1_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq1_w))
- MCFG_ISA_OUT_DRQ2_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq2_w))
- MCFG_ISA_OUT_DRQ3_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq3_w))
- MCFG_ISA_OUT_DRQ5_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq1_w))
- MCFG_ISA_OUT_DRQ6_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq2_w))
- MCFG_ISA_OUT_DRQ7_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq3_w))
-
- MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
- MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(INPUTLINE("maincpu", INPUT_LINE_RESET))
- MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(INPUTLINE("maincpu", INPUT_LINE_A20))
- MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir1_w))
- MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
- MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
- MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
- MCFG_PC_KBDC_OUT_CLOCK_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_clock_w))
- MCFG_PC_KBDC_OUT_DATA_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_data_w))
-
- MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
- MCFG_MC146818_IRQ_HANDLER(WRITELINE(at_state, at_mc146818_irq))
- MCFG_MC146818_CENTURY_INDEX(0x32)
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-MACHINE_CONFIG_END
+MACHINE_START_MEMBER(at_state,vrom_fix)
+{
+ address_space& space = m_maincpu->space(AS_PROGRAM);
+ space.install_read_bank(0xc0000, 0xcffff, "vrom_bank");
+ membank("vrom_bank")->set_base(machine().root_device().memregion("bios")->base());
+}
-static MACHINE_CONFIG_FRAGMENT( at_softlists )
- /* software lists */
- MCFG_SOFTWARE_LIST_ADD("pc_disk_list","ibm5150")
- MCFG_SOFTWARE_LIST_ADD("xt_disk_list","ibm5160_flop")
- MCFG_SOFTWARE_LIST_ADD("at_disk_list","ibm5170")
- MCFG_SOFTWARE_LIST_ADD("at_cdrom_list","ibm5170_cdrom")
-MACHINE_CONFIG_END
+static SLOT_INTERFACE_START( pci_devices )
+ SLOT_INTERFACE_INTERNAL("vt82c505", VT82C505)
+SLOT_INTERFACE_END
static MACHINE_CONFIG_START( ibm5170, at_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I80286, XTAL_12MHz/2 /*6000000*/)
MCFG_CPU_PROGRAM_MAP(at16_map)
MCFG_CPU_IO_MAP(at16_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
- MCFG_80286_A20(at_state, at_286_a20)
- MCFG_80286_SHUTDOWN(WRITELINE(at_state, at_shutdown))
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
+ MCFG_80286_SHUTDOWN(DEVWRITELINE("mb", at_mb_device, shutdown))
+ MCFG_DEVICE_ADD("mb", AT_MB, 0)
MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ MCFG_FRAGMENT_ADD(at_softlists)
- MCFG_FRAGMENT_ADD( at_motherboard )
-
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "ega", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, "fdc", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, "comat", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, "ide", false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "ega", false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa2", pc_isa16_cards, "fdc", false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa3", pc_isa16_cards, "comat", false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa4", pc_isa16_cards, "ide", false)
+ MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("1664K")
MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
MACHINE_CONFIG_END
@@ -463,320 +317,111 @@ static MACHINE_CONFIG_DERIVED( ec1842, ibm5170 )
MCFG_CPU_CLOCK(12000000)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( ec1849, ibm5170 )
+static MACHINE_CONFIG_DERIVED( ibm5162, ibm5170 )
MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_CLOCK(12000000)
+ MCFG_CPU_CLOCK(6000000)
+ MCFG_DEVICE_MODIFY("isa1")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_isa16_cards, "cga", false)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( ibmps1, at_state )
- MCFG_CPU_ADD("maincpu", I80286, XTAL_10MHz)
- MCFG_CPU_PROGRAM_MAP(ps1_286_map)
- MCFG_CPU_IO_MAP(ps1_286_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
- MCFG_80286_A20(at_state, at_286_a20)
- MCFG_80286_SHUTDOWN(WRITELINE(at_state, at_shutdown))
-
- MCFG_QUANTUM_TIME(attotime::from_hz(60))
- MCFG_FRAGMENT_ADD( pcvideo_vga )
-
- MCFG_FRAGMENT_ADD( at_motherboard )
-
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "fdc", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, "comat", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, "ide", false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("1664K")
- MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
-MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_START( ibm5162, at_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I80286, 6000000 /*6000000*/)
- MCFG_CPU_PROGRAM_MAP(at16_map)
- MCFG_CPU_IO_MAP(at16_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
- MCFG_80286_A20(at_state, at_286_a20)
- MCFG_80286_SHUTDOWN(WRITELINE(at_state, at_shutdown))
-
- MCFG_QUANTUM_TIME(attotime::from_hz(60))
-
- MCFG_FRAGMENT_ADD( at_motherboard )
-
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "fdc", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, "ide", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, "comat", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, "cga", false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("1664K")
- MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
+static MACHINE_CONFIG_DERIVED( ibmps1, ibm5170 )
+ MCFG_MACHINE_START_OVERRIDE(at_state, vrom_fix)
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK(XTAL_10MHz)
+ MCFG_CPU_PROGRAM_MAP(at16l_map)
+ MCFG_CPU_IO_MAP(ps1_16_io)
+ MCFG_DEVICE_MODIFY("isa1")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_isa16_cards, "vga", true)
+ MCFG_DEVICE_MODIFY("kbd")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL, false)
MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_START( ps2m30286, at_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I80286, 10000000)
- MCFG_CPU_PROGRAM_MAP(ps2m30286_map)
- MCFG_CPU_IO_MAP(ps1_286_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
- MCFG_80286_A20(at_state, at_286_a20)
- MCFG_80286_SHUTDOWN(WRITELINE(at_state, at_shutdown))
-
- MCFG_QUANTUM_TIME(attotime::from_hz(60))
- MCFG_FRAGMENT_ADD( pcvideo_vga )
-
- MCFG_FRAGMENT_ADD( at_motherboard )
-
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "fdc", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, "ide", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, "comat", false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("1664K")
- MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
+static MACHINE_CONFIG_DERIVED( atvga, ibm5170 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK(12000000)
+ MCFG_DEVICE_MODIFY("isa1")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_isa16_cards, "svga_et4k", false)
+ MCFG_DEVICE_MODIFY("kbd")
+ MCFG_DEVICE_SLOT_INTERFACE(pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa5", pc_isa16_cards, nullptr, false)
MACHINE_CONFIG_END
-
-static MACHINE_CONFIG_START( neat, at_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I80286, 12000000)
- MCFG_CPU_PROGRAM_MAP(at16_map)
+static MACHINE_CONFIG_DERIVED( neat, atvga )
+ MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(neat_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
- MCFG_80286_A20(at_state, at_286_a20)
- MCFG_80286_SHUTDOWN(WRITELINE(at_state, at_shutdown))
-
- MCFG_FRAGMENT_ADD( at_motherboard )
-
- MCFG_ISA16_SLOT_ADD("isabus", "isa1", pc_isa16_cards, "fdc", false)
- MCFG_ISA16_SLOT_ADD("isabus", "isa2", pc_isa16_cards, "ide", false)
- MCFG_ISA16_SLOT_ADD("isabus", "isa3", pc_isa16_cards, "comat", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, "svga_et4k", false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
-
- MCFG_CS8221_ADD("cs8221", "maincpu", "isa", "bios")
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("1664K")
- MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
+ MCFG_CS8221_ADD("cs8221", "maincpu", "mb:isa", "bios")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( atvga, at_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I80286, 12000000)
- MCFG_CPU_PROGRAM_MAP(at16_map)
- MCFG_CPU_IO_MAP(at16_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
- MCFG_80286_A20(at_state, at_286_a20)
- MCFG_80286_SHUTDOWN(WRITELINE(at_state, at_shutdown))
-
- MCFG_FRAGMENT_ADD( at_motherboard )
-
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "fdcsmc", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, "ide", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, "comat", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, "ne2000", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa5", pc_isa16_cards, "svga_et4k", false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("1664K")
- MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
+static MACHINE_CONFIG_DERIVED( xb42639, atvga )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK(12500000)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( xb42639, at_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I80286, 12500000)
- MCFG_CPU_PROGRAM_MAP(at16_map)
- MCFG_CPU_IO_MAP(at16_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
- MCFG_80286_A20(at_state, at_286_a20)
- MCFG_80286_SHUTDOWN(WRITELINE(at_state, at_shutdown))
-
- MCFG_FRAGMENT_ADD( at_motherboard )
-
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "fdc", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, "ide", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, "comat", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, "svga_et4k", false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("1664K")
- MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
+static MACHINE_CONFIG_DERIVED( k286i, ibm5162 )
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa5", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa6", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa7", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa8", pc_isa16_cards, nullptr, false)
MACHINE_CONFIG_END
-
static MACHINE_CONFIG_START( at386, at_state )
MCFG_CPU_ADD("maincpu", I386, 12000000)
- MCFG_CPU_PROGRAM_MAP(at386_map)
- MCFG_CPU_IO_MAP(at386_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
+ MCFG_CPU_PROGRAM_MAP(at32_map)
+ MCFG_CPU_IO_MAP(at32_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
- MCFG_FRAGMENT_ADD( at_motherboard )
+ MCFG_DEVICE_ADD("mb", AT_MB, 0)
+ MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ MCFG_FRAGMENT_ADD(at_softlists)
MCFG_NVRAM_ADD_0FILL("nvram")
// on board devices
- MCFG_ISA16_SLOT_ADD("isabus","board1", pc_isa16_cards, "fdcsmc", true)
- MCFG_ISA16_SLOT_ADD("isabus","board2", pc_isa16_cards, "comat", true)
- MCFG_ISA16_SLOT_ADD("isabus","board3", pc_isa16_cards, "ide", true)
- MCFG_ISA16_SLOT_ADD("isabus","board4", pc_isa16_cards, "lpt", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board1", pc_isa16_cards, "fdcsmc", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board2", pc_isa16_cards, "comat", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board3", pc_isa16_cards, "ide", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board4", pc_isa16_cards, "lpt", true)
// ISA cards
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "svga_et4k", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa5", pc_isa16_cards, nullptr, false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa2", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa3", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa4", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa5", pc_isa16_cards, nullptr, false)
+ MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("1664K")
- MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M,16M,32M,64M,128M,256M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
+ MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M,16M,32M,64M")
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( at386l, at386 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(at32l_map)
+MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( at486, at386 )
MCFG_CPU_REPLACE("maincpu", I486, 25000000)
- MCFG_CPU_PROGRAM_MAP(at386_map)
- MCFG_CPU_IO_MAP(at386_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
-MACHINE_CONFIG_END
-
-
-static MACHINE_CONFIG_START( k286i, at_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I80286, XTAL_12MHz/2 /*6000000*/)
- MCFG_CPU_PROGRAM_MAP(at16_map)
- MCFG_CPU_IO_MAP(at16_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
- MCFG_80286_A20(at_state, at_286_a20)
- MCFG_80286_SHUTDOWN(WRITELINE(at_state, at_shutdown))
-
- MCFG_QUANTUM_TIME(attotime::from_hz(60))
-
- MCFG_FRAGMENT_ADD( at_motherboard )
-
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "cga", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, "fdc", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, "comat", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa5", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa6", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa7", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa8", pc_isa16_cards, nullptr, false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
-
- /* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("1M")
- MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,16M")
-
- MCFG_FRAGMENT_ADD( at_softlists )
-MACHINE_CONFIG_END
-
-
-static MACHINE_CONFIG_FRAGMENT( tx_config )
- MCFG_I82439TX_CPU( "maincpu" )
- MCFG_I82439TX_REGION( "isa" )
-MACHINE_CONFIG_END
-
-static SLOT_INTERFACE_START( pci_devices )
- SLOT_INTERFACE_INTERNAL("i82439tx", I82439TX)
- SLOT_INTERFACE_INTERNAL("i82371ab", I82371AB)
- SLOT_INTERFACE_INTERNAL("i82371sb", I82371SB)
- SLOT_INTERFACE_INTERNAL("vt82c505", VT82C505)
-SLOT_INTERFACE_END
-
-
-static MACHINE_CONFIG_START( at586, at586_state )
- MCFG_CPU_ADD("maincpu", PENTIUM, 60000000)
- MCFG_CPU_PROGRAM_MAP(at586_map)
- MCFG_CPU_IO_MAP(at586_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pcibus:1:i82371ab:pic8259_master", pic8259_device, inta_cb)
-
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("4M")
- MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M,128M,256M")
-
- MCFG_PCI_BUS_ADD("pcibus", 0)
- MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "i82439tx", true)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("i82439tx", tx_config)
-
- MCFG_PCI_BUS_DEVICE("pcibus:1", pci_devices, "i82371ab", true)
-
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa2", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa3", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa4", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa5", pc_isa16_cards, nullptr, false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
-
- MCFG_FRAGMENT_ADD( at_softlists )
+ MCFG_CPU_PROGRAM_MAP(at32_map)
+ MCFG_CPU_IO_MAP(at32_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( at586x3, at586_state )
- MCFG_CPU_ADD("maincpu", PENTIUM, 60000000)
- MCFG_CPU_PROGRAM_MAP(at586_map)
- MCFG_CPU_IO_MAP(at586_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pcibus:1:i82371sb:pic8259_master", pic8259_device, inta_cb)
-
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("4M")
- MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M")
-
- MCFG_PCI_BUS_ADD("pcibus", 0)
- MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "i82439tx", true)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("i82439tx", tx_config)
-
- MCFG_PCI_BUS_DEVICE("pcibus:1", pci_devices, "i82371sb", true)
-
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa2", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa3", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa4", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa5", pc_isa16_cards, nullptr, false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
-
- MCFG_FRAGMENT_ADD( at_softlists )
+static MACHINE_CONFIG_DERIVED( at486l, at486 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(at32l_map)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( at386sx, atvga )
MCFG_CPU_REPLACE("maincpu", I386SX, 16000000) /* 386SX */
MCFG_CPU_PROGRAM_MAP(at16_map)
MCFG_CPU_IO_MAP(at16_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( ct386sx, neat )
- MCFG_CPU_REPLACE("maincpu", I386SX, 16000000)
- MCFG_CPU_PROGRAM_MAP(at16_map)
+static MACHINE_CONFIG_DERIVED( ct386sx, at386sx )
+ MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_IO_MAP(neat_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
+ MCFG_CS8221_ADD("cs8221", "maincpu", "mb:isa", "maincpu")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( megapc, megapc_state )
@@ -866,25 +511,28 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( megapcpla, at_state )
MCFG_CPU_ADD("maincpu", I486, 66000000 / 2) // 486SLC
- MCFG_CPU_PROGRAM_MAP(at386_map)
- MCFG_CPU_IO_MAP(at386_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
+ MCFG_CPU_PROGRAM_MAP(at32l_map)
+ MCFG_CPU_IO_MAP(at32_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
+ MCFG_MACHINE_START_OVERRIDE(at_state, vrom_fix)
- MCFG_FRAGMENT_ADD( at_motherboard )
+ MCFG_DEVICE_ADD("mb", AT_MB, 0)
+ MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ MCFG_FRAGMENT_ADD(at_softlists)
MCFG_NVRAM_ADD_0FILL("nvram")
// on board devices
- MCFG_ISA16_SLOT_ADD("isabus","board1", pc_isa16_cards, "fdcsmc", true)
- MCFG_ISA16_SLOT_ADD("isabus","board2", pc_isa16_cards, "comat", true)
- MCFG_ISA16_SLOT_ADD("isabus","board3", pc_isa16_cards, "ide", true)
- MCFG_ISA16_SLOT_ADD("isabus","board4", pc_isa16_cards, "lpt", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board1", pc_isa16_cards, "fdcsmc", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board2", pc_isa16_cards, "comat", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board3", pc_isa16_cards, "ide", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board4", pc_isa16_cards, "lpt", true)
// ISA cards
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "svga_dm", false) // closest to the CL-GD5420
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa5", pc_isa16_cards, nullptr, false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "svga_dm", false) // closest to the CL-GD5420
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa2", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa3", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa4", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa5", pc_isa16_cards, nullptr, false)
+ MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
@@ -892,7 +540,6 @@ static MACHINE_CONFIG_START( megapcpla, at_state )
MCFG_RAM_EXTRA_OPTIONS("2M,8M,15M,16M,32M,64M,128M,256M")
/* software lists */
- MCFG_FRAGMENT_ADD( at_softlists )
MCFG_SOFTWARE_LIST_ADD("disk_list","megapc")
MACHINE_CONFIG_END
@@ -900,13 +547,15 @@ static MACHINE_CONFIG_START( ficpio2, at_state )
MCFG_CPU_ADD("maincpu", I486, 25000000)
MCFG_CPU_PROGRAM_MAP(ficpio_map)
MCFG_CPU_IO_MAP(ficpio_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_master", pic8259_device, inta_cb)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
- MCFG_FRAGMENT_ADD(at_motherboard)
+ MCFG_DEVICE_ADD("mb", AT_MB, 0)
+ MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ MCFG_FRAGMENT_ADD(at_softlists)
- MCFG_DEVICE_REMOVE("rtc")
- MCFG_DS12885_ADD("rtc")
- MCFG_MC146818_IRQ_HANDLER(WRITELINE(at_state, at_mc146818_irq))
+ MCFG_DEVICE_REMOVE("mb:rtc")
+ MCFG_DS12885_ADD("mb:rtc")
+ MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic8259_slave", pic8259_device, ir0_w)) // this is in :mb
MCFG_MC146818_CENTURY_INDEX(0x32)
MCFG_RAM_ADD(RAM_TAG)
@@ -914,69 +563,38 @@ static MACHINE_CONFIG_START( ficpio2, at_state )
MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M,128M")
// on board devices
- MCFG_ISA16_SLOT_ADD("isabus","board1", pc_isa16_cards, "fdcsmc", true)
- MCFG_ISA16_SLOT_ADD("isabus","board2", pc_isa16_cards, "comat", true)
- MCFG_ISA16_SLOT_ADD("isabus","board3", pc_isa16_cards, "lpt", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board1", pc_isa16_cards, "fdcsmc", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board2", pc_isa16_cards, "comat", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board3", pc_isa16_cards, "lpt", true)
MCFG_IDE_CONTROLLER_32_ADD("ide", ata_devices, "hdd", nullptr, true)
- MCFG_ATA_INTERFACE_IRQ_HANDLER(DEVWRITELINE("pic8259_slave", pic8259_device, ir6_w))
+ MCFG_ATA_INTERFACE_IRQ_HANDLER(DEVWRITELINE("mb:pic8259_slave", pic8259_device, ir6_w))
MCFG_IDE_CONTROLLER_32_ADD("ide2", ata_devices, "cdrom", nullptr, true)
- MCFG_ATA_INTERFACE_IRQ_HANDLER(DEVWRITELINE("pic8259_slave", pic8259_device, ir7_w))
+ MCFG_ATA_INTERFACE_IRQ_HANDLER(DEVWRITELINE("mb:pic8259_slave", pic8259_device, ir7_w))
MCFG_PCI_BUS_ADD("pcibus", 0)
MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "vt82c505", true)
- MCFG_ISA16_SLOT_ADD("isabus","isa1", pc_isa16_cards, "svga_et4k", false)
- MCFG_ISA16_SLOT_ADD("isabus","isa2", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa3", pc_isa16_cards, nullptr, false)
- MCFG_ISA16_SLOT_ADD("isabus","isa4", pc_isa16_cards, nullptr, false)
- MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa2", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa3", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa4", pc_isa16_cards, nullptr, false)
+ MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
MCFG_VT82C496_ADD("chipset")
MCFG_VT82C496_CPU("maincpu")
MCFG_VT82C496_REGION("isa")
-
- MCFG_FRAGMENT_ADD( at_softlists )
MACHINE_CONFIG_END
-#if 0
- // ibm at
- // most likely 2 32 kbyte chips for 16 bit access
- ROM_LOAD("atbios.bin", 0xf0000, 0x10000, CRC(674426be)) // BASIC C1.1, beeps
- // split into 2 chips for 16 bit access
- ROM_LOAD_EVEN("ibmat.0", 0xf0000, 0x8000, CRC(4995be7a))
- ROM_LOAD_ODD("ibmat.1", 0xf0000, 0x8000, CRC(c32713e4))
-
- /* I know about a 1984 version in 2 32kb roms */
-
- /* at, ami bios and diagnostics */
- ROM_LOAD_EVEN("rom01.bin", 0xf0000, 0x8000, CRC(679296a7))
- ROM_LOAD_ODD("rom02.bin", 0xf0000, 0x8000, CRC(65ae1f97))
-
- /* */
- ROM_LOAD("neat286.bin", 0xf0000, 0x10000, CRC(07985d9b))
- // split into 2 chips for 16 bit access
- ROM_LOAD_EVEN("neat.0", 0xf0000, 0x8000, CRC(4c36e61d))
- ROM_LOAD_ODD("neat.1", 0xf0000, 0x8000, CRC(4e90f294))
-
- /* most likely 1 chip!, for lower costs */
- ROM_LOAD("at386.bin", 0xf0000, 0x10000, CRC(3df9732a))
-
- /* at486 */
- ROM_LOAD("at486.bin", 0xf0000, 0x10000, CRC(31214616))
-
- ROM_LOAD("", 0x??000, 0x2000, CRC())
-#endif
-
ROM_START( ibm5170 )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS( 0, "rev1", "IBM PC/AT 5170 01/10/84")
- ROMX_LOAD("6181028.u27", 0xf0000, 0x8000, CRC(f6573f2a) SHA1(3e52cfa6a6a62b4e8576f4fe076c858c220e6c1a), ROM_SKIP(1) | ROM_BIOS(1)) /* T 6181028 8506AAA // TMM23256P-5878 // (C)IBM CORP 1981,-1984 */
- ROMX_LOAD("6181029.u47", 0xf0001, 0x8000, CRC(7075fbb2) SHA1(a7b885cfd38710c9bc509da1e3ba9b543a2760be), ROM_SKIP(1) | ROM_BIOS(1)) /* T 6181029 8506AAA // TMM23256P-5879 // (C)IBM CORP 1981,-1984 */
+ ROMX_LOAD("6181028.u27", 0x10000, 0x8000, CRC(f6573f2a) SHA1(3e52cfa6a6a62b4e8576f4fe076c858c220e6c1a), ROM_SKIP(1) | ROM_BIOS(1)) /* T 6181028 8506AAA // TMM23256P-5878 // (C)IBM CORP 1981,-1984 */
+ ROMX_LOAD("6181029.u47", 0x10001, 0x8000, CRC(7075fbb2) SHA1(a7b885cfd38710c9bc509da1e3ba9b543a2760be), ROM_SKIP(1) | ROM_BIOS(1)) /* T 6181029 8506AAA // TMM23256P-5879 // (C)IBM CORP 1981,-1984 */
ROM_SYSTEM_BIOS( 1, "rev2", "IBM PC/AT 5170 06/10/85") /* Another verifaction of these crcs would be nice */
- ROMX_LOAD("6480090.u27", 0xf0000, 0x8000, CRC(99703aa9) SHA1(18022e93a0412c8477e58f8c61a87718a0b9ab0e), ROM_SKIP(1) | ROM_BIOS(2))
- ROMX_LOAD("6480091.u47", 0xf0001, 0x8000, CRC(013ef44b) SHA1(bfa15d2180a1902cb6d38c6eed3740f5617afd16), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD("6480090.u27", 0x10000, 0x8000, CRC(99703aa9) SHA1(18022e93a0412c8477e58f8c61a87718a0b9ab0e), ROM_SKIP(1) | ROM_BIOS(2))
+ ROMX_LOAD("6480091.u47", 0x10001, 0x8000, CRC(013ef44b) SHA1(bfa15d2180a1902cb6d38c6eed3740f5617afd16), ROM_SKIP(1) | ROM_BIOS(2))
// ROM_SYSTEM_BIOS( 2, "atdiag", "IBM PC/AT 5170 w/Super Diagnostics")
// ROMX_LOAD("atdiage.bin", 0xf8000, 0x4000, CRC(e8855d0c) SHA1(c9d53e61c08da0a64f43d691bf6cadae5393843a), ROM_SKIP(1) | ROM_BIOS(3))
@@ -996,33 +614,33 @@ ROM_START( ibm5170 )
ROM_END
ROM_START( ec1842 )
- ROM_REGION16_LE(0x100000,"maincpu", 0)
- ROM_LOAD16_BYTE( "4202004.bin", 0xfc001, 0x2000, CRC(33fb5382) SHA1(35eb62328324d93e7a06f2f9d1ad0002f83fc99b))
- ROM_LOAD16_BYTE( "4202005.bin", 0xfc000, 0x2000, CRC(8e05c119) SHA1(9d81613b4fc305c14ae9fda0b1dd97a290715530))
- ROM_LOAD16_BYTE( "4202006.bin", 0xf8001, 0x2000, CRC(6da537ef) SHA1(f79feb433dcf41f5cdef52b845e3550d5f0fb5c0))
- ROM_LOAD16_BYTE( "4202007.bin", 0xf8000, 0x2000, CRC(d6ee0e95) SHA1(6fd4c42190e879501198fede70ae43bc420681d0))
+ ROM_REGION16_LE(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "4202004.bin", 0x1c001, 0x2000, CRC(33fb5382) SHA1(35eb62328324d93e7a06f2f9d1ad0002f83fc99b))
+ ROM_LOAD16_BYTE( "4202005.bin", 0x1c000, 0x2000, CRC(8e05c119) SHA1(9d81613b4fc305c14ae9fda0b1dd97a290715530))
+ ROM_LOAD16_BYTE( "4202006.bin", 0x18001, 0x2000, CRC(6da537ef) SHA1(f79feb433dcf41f5cdef52b845e3550d5f0fb5c0))
+ ROM_LOAD16_BYTE( "4202007.bin", 0x18000, 0x2000, CRC(d6ee0e95) SHA1(6fd4c42190e879501198fede70ae43bc420681d0))
// EGA ROM
- ROM_LOAD16_BYTE( "4200009.bin", 0xc0000, 0x2000, CRC(9deeb39f) SHA1(255b859d3ea05891aa65a4a742ecaba744dfc923))
- ROM_LOAD16_BYTE( "4200010.bin", 0xc0001, 0x2000, CRC(f2c38d93) SHA1(dcb3741d06089bf1a80cb766a6b94029ad698d73))
+ //ROM_LOAD16_BYTE( "4200009.bin", 0xc0000, 0x2000, CRC(9deeb39f) SHA1(255b859d3ea05891aa65a4a742ecaba744dfc923))
+ //ROM_LOAD16_BYTE( "4200010.bin", 0xc0001, 0x2000, CRC(f2c38d93) SHA1(dcb3741d06089bf1a80cb766a6b94029ad698d73))
ROM_END
ROM_START( ec1849 )
- ROM_REGION16_LE(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "cpu-card_27c256_015.rom", 0xf0000, 0x8000, CRC(68eadf0a) SHA1(903a7f1c3ebc6b27c31b512b2908c483608b5c13))
- ROM_LOAD16_BYTE( "cpu-card_27c256_016.rom", 0xf0001, 0x8000, CRC(bc3924d6) SHA1(596be415e6c2bc4ff30a187f146664531565712c))
- ROM_LOAD16_BYTE( "video-card_573rf6( 2764)_040.rom", 0xc0001, 0x2000, CRC(a3ece315) SHA1(e800e11c3b1b6fcaf41bfb7d4058a9d34fdd2b3f))
- ROM_LOAD16_BYTE( "video-card_573rf6( 2764)_041.rom", 0xc0000, 0x2000, CRC(b0a2ba7f) SHA1(c8160e8bc97cd391558f1dddd3fd3ec4a19d030c))
+ ROM_REGION16_LE(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "cpu-card_27c256_015.rom", 0x10000, 0x8000, CRC(68eadf0a) SHA1(903a7f1c3ebc6b27c31b512b2908c483608b5c13))
+ ROM_LOAD16_BYTE( "cpu-card_27c256_016.rom", 0x10001, 0x8000, CRC(bc3924d6) SHA1(596be415e6c2bc4ff30a187f146664531565712c))
+ //ROM_LOAD16_BYTE( "video-card_573rf6( 2764)_040.rom", 0xc0001, 0x2000, CRC(a3ece315) SHA1(e800e11c3b1b6fcaf41bfb7d4058a9d34fdd2b3f))
+ //ROM_LOAD16_BYTE( "video-card_573rf6( 2764)_041.rom", 0xc0000, 0x2000, CRC(b0a2ba7f) SHA1(c8160e8bc97cd391558f1dddd3fd3ec4a19d030c))
ROM_END
ROM_START( ibm5170a )
- ROM_REGION(0x100000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS( 0, "rev3", "IBM PC/AT 5170 11/15/85")
- ROMX_LOAD("61x9266.u27", 0xf0000, 0x8000, CRC(4995be7a) SHA1(8e8e5c863ae3b8c55fd394e345d8cca48b6e575c), ROM_SKIP(1) | ROM_BIOS(1))
- ROMX_LOAD("61x9265.u47", 0xf0001, 0x8000, CRC(c32713e4) SHA1(22ed4e2be9f948682891e2fd056a97dbea01203c), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD("61x9266.u27", 0x10000, 0x8000, CRC(4995be7a) SHA1(8e8e5c863ae3b8c55fd394e345d8cca48b6e575c), ROM_SKIP(1) | ROM_BIOS(1))
+ ROMX_LOAD("61x9265.u47", 0x10001, 0x8000, CRC(c32713e4) SHA1(22ed4e2be9f948682891e2fd056a97dbea01203c), ROM_SKIP(1) | ROM_BIOS(1))
ROM_SYSTEM_BIOS( 1, "3270at", "IBM 3270 PC/AT 5281 11/15/85") /* pretty much just a part string and checksum change from the 5170 rev3 */
- ROMX_LOAD("62x0820.u27", 0xf0000, 0x8000, CRC(e9cc3761) SHA1(ff9373c1a1f34a32fb6acdabc189c61b01acf9aa), ROM_SKIP(1) | ROM_BIOS(2)) /* T 62X0820-U27 8714HAK // TMM23256P-6746 // (C)IBM CORP 1981,-1985 */
- ROMX_LOAD("62x0821.u47", 0xf0001, 0x8000, CRC(b5978ccb) SHA1(2a1aeb9ae3cd7e60fc4c383ca026208b82156810), ROM_SKIP(1) | ROM_BIOS(2)) /* T 62X0821-U47 8715HAK // TMM23256P-6747 // (C)IBM CORP 1981,-1985 */
+ ROMX_LOAD("62x0820.u27", 0x10000, 0x8000, CRC(e9cc3761) SHA1(ff9373c1a1f34a32fb6acdabc189c61b01acf9aa), ROM_SKIP(1) | ROM_BIOS(2)) /* T 62X0820-U27 8714HAK // TMM23256P-6746 // (C)IBM CORP 1981,-1985 */
+ ROMX_LOAD("62x0821.u47", 0x10001, 0x8000, CRC(b5978ccb) SHA1(2a1aeb9ae3cd7e60fc4c383ca026208b82156810), ROM_SKIP(1) | ROM_BIOS(2)) /* T 62X0821-U47 8715HAK // TMM23256P-6747 // (C)IBM CORP 1981,-1985 */
/* Mainboard PALS */
ROM_REGION( 0x2000, "pals", 0 )
@@ -1038,10 +656,10 @@ ROM_END
ROM_START( ibm5162 ) //MB p/n 62x1168
- ROM_REGION16_LE(0x1000000,"maincpu", 0)
+ ROM_REGION16_LE(0x20000,"bios", 0)
- ROM_LOAD16_BYTE("78x7460.u34", 0xf0000, 0x8000, CRC(1db4bd8f) SHA1(7be669fbb998d8b4626fefa7cd1208d3b2a88c31)) /* 78X7460 U34 // (C) IBM CORP // 1981-1986 */
- ROM_LOAD16_BYTE("78x7461.u35", 0xf0001, 0x8000, CRC(be14b453) SHA1(ec7c10087dbd53f9c6d1174e8f14212e2aec1818)) /* 78X7461 U35 // (C) IBM CORP // 1981-1986 */
+ ROM_LOAD16_BYTE("78x7460.u34", 0x10000, 0x8000, CRC(1db4bd8f) SHA1(7be669fbb998d8b4626fefa7cd1208d3b2a88c31)) /* 78X7460 U34 // (C) IBM CORP // 1981-1986 */
+ ROM_LOAD16_BYTE("78x7461.u35", 0x10001, 0x8000, CRC(be14b453) SHA1(ec7c10087dbd53f9c6d1174e8f14212e2aec1818)) /* 78X7461 U35 // (C) IBM CORP // 1981-1986 */
/* Mainboard PALS */
ROM_REGION( 0x2000, "pals", 0 )
@@ -1056,319 +674,167 @@ ROM_START( ibm5162 ) //MB p/n 62x1168
ROM_LOAD("59x7594.82s147an.u90", 0x0020, 0x0200, NO_DUMP) /* S N82S147AN 8629 // VCT 59X7594 */
ROM_END
-
-ROM_START( i8530286 )
- ROM_REGION(0x1000000,"maincpu", 0)
- // saved from running machine
- ROM_LOAD16_BYTE("ps2m30.0", 0xe0000, 0x10000, CRC(9965a634) SHA1(c237b1760f8a4561ec47dc70fe2e9df664e56596))
- ROM_RELOAD(0xfe0000,0x10000)
- ROM_LOAD16_BYTE("ps2m30.1", 0xe0001, 0x10000, CRC(1448d3cb) SHA1(13fa26d895ce084278cd5ab1208fc16c80115ebe))
- ROM_RELOAD(0xfe0001,0x10000)
-ROM_END
-
-/*
-
-8530-H31 (Model 30/286)
-======================
- P/N Date
-33F5381A EC C01446 1990
-
-*/
-ROM_START( i8530h31 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD( "33f5381a.bin", 0xe0000, 0x20000, CRC(ff57057d) SHA1(d7f1777077a8df43c3c14d175b9709bd3969c4b1))
- ROM_RELOAD(0xfe0000,0x20000)
-ROM_END
-
-/*
-8535-043 (Model 35)
-===================
- P/N Checksum Date
-04G2021 C26C 1991 ODD
-04G2022 9B94 1991 EVEN
-*/
-ROM_START( i8535043 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "04g2021.bin", 0xe0001, 0x10000, CRC(4069b2eb) SHA1(9855c84c81d1f07e1da66b1ca45c1c10c0717a90))
- ROM_RELOAD(0xfe0001, 0x10000)
- ROM_LOAD16_BYTE( "04g2022.bin", 0xe0000, 0x10000, CRC(35c1af65) SHA1(7d2445cc463969c808fdd78e0a27a03db5dfc698))
- ROM_RELOAD(0xfe0000, 0x10000)
-ROM_END
-
-/*
-8550-021 (Model 50)
-===================
- Code Date Internal
-90X7420 4/12/87 --> 90X6815
-90X7423 8/12/87 --> 90X6816
-90X7426 8/12/87 --> 90X6817
-90X7429 18/12/87 --> 90X6818
-
-Same ROMs used by : (According to http://www.ibmmuseum.com/ohlandl/8565/8560.html)
-
-IBM Personal System/2 Model 60 (8560-041 and 8560-071)
-IBM Personal System/2 Model 65 SX (8565-061 and 8565-121)
-
-*/
-ROM_START( i8550021 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "90x7423.zm14", 0xe0000, 0x8000, CRC(2c1633e0) SHA1(1af7faa526585a7cfb69e71d90a75e1f1c541586))
- ROM_RELOAD(0xfe0000, 0x8000)
- ROM_LOAD16_BYTE( "90x7426.zm16", 0xe0001, 0x8000, CRC(e7c762ce) SHA1(228f67dc915d84519da7fc1a59b7f9254278f3a0))
- ROM_RELOAD(0xfe0001, 0x8000)
- ROM_LOAD16_BYTE( "90x7420.zm13", 0xf0001, 0x8000, CRC(19a57cc1) SHA1(5b31ba66cd3690e651a450619a32b7210769945d))
- ROM_RELOAD(0xff0001, 0x8000)
- ROM_LOAD16_BYTE( "90x7429.zm18", 0xf0000, 0x8000, CRC(6f0120f6) SHA1(e112c291ac3d9f6507c93ac49ad26f9fd2245fd2))
- ROM_RELOAD(0xff0000, 0x8000)
-
- ROM_REGION( 0x800, "keyboard", 0 )
- ROM_LOAD( "72x8455.zm82", 0x000, 0x800, CRC(7da223d3) SHA1(54c52ff6c6a2310f79b2c7e6d1259be9de868f0e) )
-ROM_END
-
-/*
-8550-061 (Model 50Z)
-===================
- P/N Date
-AMI 8935MKN 15F8365 S63512 1988
-AMI 8948MML 15F8366 S63512 1988
-
-http://ps-2.kev009.com:8081/ohlandl/8550/8550z_Planar.html
-
-
-*/
-ROM_START( i8550061 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "15f8365.zm5", 0xe0001, 0x10000, CRC(35aa3ecf) SHA1(a122531092a9cb08600b276da9c9c3ce385aab7b))
- ROM_RELOAD(0xfe0001, 0x10000)
- ROM_LOAD16_BYTE( "15f8366.zm6", 0xe0000, 0x10000, CRC(11bf564d) SHA1(0dda6a7ca9294cfaab5bdf4c05973be13b2766fc))
- ROM_RELOAD(0xfe0000, 0x10000)
-ROM_END
-
-/*
-8555-X61 (Model 55SX)
-===================
- Code Date Internal
-ODD 33F8145 13/03/90 --> 33F8153
-EVEN 33F8146 31/01/90 --> 33F8152
-
-8555-081 (Model 55SX)
-===================
- Code Date Internal
-ODD AMI 9205MEN 92F0627 EC32680 88 --> 33F8153
-EVEN AMI 9203MGS 92F0626 EC32680 88 --> 33F8152
-
-*/
-ROM_START( i8555081 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE("33f8145.zm40", 0xe0001, 0x10000, CRC(0895894c) SHA1(7cee77828867ad1bdbe0ac223bc25d23c65b28a0))
- ROM_RELOAD(0xfe0001, 0x10000)
- ROM_LOAD16_BYTE("33f8146.zm41", 0xe0000, 0x10000, CRC(c6020680) SHA1(b25a64e4b2dca07c567648401100e04e89bbcddb))
- ROM_RELOAD(0xfe0000, 0x10000)
-ROM_END
-
-/*
-8580-071 (Model 80)
-===================
- Code Date Internal
-AMI 8924MBW 90X8548 1987 --> 72X7551
-AMI 8924MBL 90X8549 1987 --> 72X7554
-AMI 8924MBG 90X8550 1987 --> 72X7557
-AMI 8921MBK 90X8551 1987 --> 72X7560
-*/
-ROM_START( i8580071 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD32_BYTE( "90x8548.bin", 0xe0000, 0x8000, CRC(1f13eea5) SHA1(0bf53ad86f47db3825a713ea2e4ef23715cc4f79))
- ROM_LOAD32_BYTE( "90x8549.bin", 0xe0001, 0x8000, CRC(9e0f4a99) SHA1(b8600f04159ed281a57416274390ba9302be541b))
- ROM_LOAD32_BYTE( "90x8550.bin", 0xe0002, 0x8000, CRC(cb21df96) SHA1(0c2765f6becfa3f9171c4f13f7b74d19c4c9acc2))
- ROM_LOAD32_BYTE( "90x8551.bin", 0xe0003, 0x8000, CRC(3d7e9868) SHA1(2928fe0e48a573cc2c0c41bd7f7188a54a908229))
-ROM_END
-
-/*
-8580-111 (Model 80)
-===================
- Code Date Internal
-AMI 8934MDL 15F6637 1987 --> 15F6597
-AMI 8944MDI 15F6639 1987 --> 15F6600
-*/
-ROM_START( i8580111 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "15f6637.bin", 0xe0000, 0x10000, CRC(76c36d1a) SHA1(c68d52a2e5fbd303225ebb006f91869b29ef700a))
- ROM_LOAD16_BYTE( "15f6639.bin", 0xe0001, 0x10000, CRC(82cf0f7d) SHA1(13bb39225757b89749af70e881af0228673dbe0c))
-ROM_END
-
ROM_START( ibmps1es )
- ROM_REGION(0x1000000, "maincpu", 0)
- ROM_LOAD16_BYTE( "ibm_1057757_24-05-90.bin", 0xc0000, 0x20000, CRC(c8f81ea4) SHA1(925ed0e98f9f2997cb86554ef384bcfaf2a4ecbe))
- ROM_LOAD16_BYTE( "ibm_1057757_29-15-90.bin", 0xc0001, 0x20000, CRC(c2dd6b5c) SHA1(f6b5785002dd628b6b1fb3bb101e076299eba3b6))
+ ROM_REGION(0x40000, "bios", 0)
+ ROM_LOAD16_BYTE( "ibm_1057757_24-05-90.bin", 0x00000, 0x20000, CRC(c8f81ea4) SHA1(925ed0e98f9f2997cb86554ef384bcfaf2a4ecbe))
+ ROM_LOAD16_BYTE( "ibm_1057757_29-15-90.bin", 0x00001, 0x20000, CRC(c2dd6b5c) SHA1(f6b5785002dd628b6b1fb3bb101e076299eba3b6))
ROM_END
ROM_START( at )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "ami211", "AMI 21.1") /*(Motherboard Manufacturer: Dataexpert Corp. Motherboard) (Neat 286 Bios, 82c21x Chipset ) (BIOS release date:: 09-04-1990)*/
- ROMX_LOAD( "ami211.bin", 0xf0000, 0x10000,CRC(a0b5d269) SHA1(44db8227d35a09e39b93ed944f85dcddb0dd0d39), ROM_BIOS(1))
+ ROMX_LOAD( "ami211.bin", 0x10000, 0x10000,CRC(a0b5d269) SHA1(44db8227d35a09e39b93ed944f85dcddb0dd0d39), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "at", "PC 286") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 03-11-1987)*/
- ROMX_LOAD("at110387.1", 0xf0001, 0x8000, CRC(679296a7) SHA1(ae891314cac614dfece686d8e1d74f4763cf40e3),ROM_SKIP(1) | ROM_BIOS(2) )
- ROMX_LOAD("at110387.0", 0xf0000, 0x8000, CRC(65ae1f97) SHA1(91a29c7deecf7a9afbba330e64e0eee9aafee4d1),ROM_SKIP(1) | ROM_BIOS(2) )
+ ROMX_LOAD("at110387.1", 0x10001, 0x8000, CRC(679296a7) SHA1(ae891314cac614dfece686d8e1d74f4763cf40e3),ROM_SKIP(1) | ROM_BIOS(2) )
+ ROMX_LOAD("at110387.0", 0x10000, 0x8000, CRC(65ae1f97) SHA1(91a29c7deecf7a9afbba330e64e0eee9aafee4d1),ROM_SKIP(1) | ROM_BIOS(2) )
ROM_SYSTEM_BIOS(2, "ami206", "AMI C 206.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 15-10-1990)*/
- ROMX_LOAD( "amic206.bin", 0xf0000, 0x10000,CRC(25a67c34) SHA1(91e9d8cdc2f1b40a601a23ceaff2189fd1245f3b), ROM_BIOS(3) )
+ ROMX_LOAD( "amic206.bin", 0x10000, 0x10000,CRC(25a67c34) SHA1(91e9d8cdc2f1b40a601a23ceaff2189fd1245f3b), ROM_BIOS(3) )
ROM_SYSTEM_BIOS(3, "amic21", "AMI C 21.1") /* bad dump, checksum off by 8 in the lsb*/
- ROMX_LOAD( "amic21-2.bin", 0xf0001, 0x8000, CRC(8ffe7752) SHA1(68215f07a170ee7bdcb3e52b370d470af1741f7e),ROM_SKIP(1) | ROM_BIOS(4) )
- ROMX_LOAD( "amic21-1.bin", 0xf0000, 0x8000, CRC(5644ed38) SHA1(963555ec77845defc3b42b433280908e1797076e),ROM_SKIP(1) | ROM_BIOS(4) )
+ ROMX_LOAD( "amic21-2.bin", 0x10001, 0x8000, CRC(8ffe7752) SHA1(68215f07a170ee7bdcb3e52b370d470af1741f7e),ROM_SKIP(1) | ROM_BIOS(4) )
+ ROMX_LOAD( "amic21-1.bin", 0x10000, 0x8000, CRC(5644ed38) SHA1(963555ec77845defc3b42b433280908e1797076e),ROM_SKIP(1) | ROM_BIOS(4) )
ROM_SYSTEM_BIOS(4, "ami101", "AMI HT 101.1") /* Quadtel Enhanced 286 Bios Version 3.04.02 */
- ROMX_LOAD( "amiht-h.bin", 0xf0001, 0x8000, CRC(8022545f) SHA1(42541d4392ad00b0e064b3a8ccf2786d875c7c19),ROM_SKIP(1) | ROM_BIOS(5) )
- ROMX_LOAD( "amiht-l.bin", 0xf0000, 0x8000, CRC(285f6b8f) SHA1(2fce4ec53b68c9a7580858e16c926dc907820872),ROM_SKIP(1) | ROM_BIOS(5) )
+ ROMX_LOAD( "amiht-h.bin", 0x10001, 0x8000, CRC(8022545f) SHA1(42541d4392ad00b0e064b3a8ccf2786d875c7c19),ROM_SKIP(1) | ROM_BIOS(5) )
+ ROMX_LOAD( "amiht-l.bin", 0x10000, 0x8000, CRC(285f6b8f) SHA1(2fce4ec53b68c9a7580858e16c926dc907820872),ROM_SKIP(1) | ROM_BIOS(5) )
ROM_SYSTEM_BIOS(5, "ami121", "AMI HT 12.1")
- ROMX_LOAD( "ami2od86.bin", 0xf0001, 0x8000, CRC(04a2cec4) SHA1(564d37a8b2c0f4d0e23cd1e280a09d47c9945da8),ROM_SKIP(1) | ROM_BIOS(6) )
- ROMX_LOAD( "ami2ev86.bin", 0xf0000, 0x8000, CRC(55deb5c2) SHA1(19ce1a7cc985b5895c585e39211475de2e3b0dd1),ROM_SKIP(1) | ROM_BIOS(6) )
+ ROMX_LOAD( "ami2od86.bin", 0x10001, 0x8000, CRC(04a2cec4) SHA1(564d37a8b2c0f4d0e23cd1e280a09d47c9945da8),ROM_SKIP(1) | ROM_BIOS(6) )
+ ROMX_LOAD( "ami2ev86.bin", 0x10000, 0x8000, CRC(55deb5c2) SHA1(19ce1a7cc985b5895c585e39211475de2e3b0dd1),ROM_SKIP(1) | ROM_BIOS(6) )
ROM_SYSTEM_BIOS(6, "ami122", "AMI HT 12.2")
- ROMX_LOAD( "ami2od89.bin", 0xf0001, 0x8000, CRC(7c81bbe8) SHA1(a2c7eca586f6e2e76b9101191e080a1f1cb8b833),ROM_SKIP(1) | ROM_BIOS(7) )
- ROMX_LOAD( "ami2ev89.bin", 0xf0000, 0x8000, CRC(705d36e0) SHA1(0c9cfb71ced4587f109b9b6dfc2a9c92302fdb99),ROM_SKIP(1) | ROM_BIOS(7) )
+ ROMX_LOAD( "ami2od89.bin", 0x10001, 0x8000, CRC(7c81bbe8) SHA1(a2c7eca586f6e2e76b9101191e080a1f1cb8b833),ROM_SKIP(1) | ROM_BIOS(7) )
+ ROMX_LOAD( "ami2ev89.bin", 0x10000, 0x8000, CRC(705d36e0) SHA1(0c9cfb71ced4587f109b9b6dfc2a9c92302fdb99),ROM_SKIP(1) | ROM_BIOS(7) )
ROM_SYSTEM_BIOS(7, "ami123", "AMI HT 12.3") /*(Motherboard Manufacturer: Aquarius Systems USA Inc.) (BIOS release date:: 13-06-1990)*/
- ROMX_LOAD( "ht12h.bin", 0xf0001, 0x8000, CRC(db8b471e) SHA1(7b5fa1c131061fa7719247db3e282f6d30226778),ROM_SKIP(1) | ROM_BIOS(8) )
- ROMX_LOAD( "ht12l.bin", 0xf0000, 0x8000, CRC(74fd178a) SHA1(97c8283e574abbed962b701f3e8091fb82823b80),ROM_SKIP(1) | ROM_BIOS(8) )
+ ROMX_LOAD( "ht12h.bin", 0x10001, 0x8000, CRC(db8b471e) SHA1(7b5fa1c131061fa7719247db3e282f6d30226778),ROM_SKIP(1) | ROM_BIOS(8) )
+ ROMX_LOAD( "ht12l.bin", 0x10000, 0x8000, CRC(74fd178a) SHA1(97c8283e574abbed962b701f3e8091fb82823b80),ROM_SKIP(1) | ROM_BIOS(8) )
ROM_SYSTEM_BIOS(8, "ami181", "AMI HT 18.1") /* not a bad dump, sets unknown probably chipset related registers at 0x1e8 before failing post */
- ROMX_LOAD( "ht18.bin", 0xf0000, 0x10000, CRC(f65a6f9a) SHA1(7dfdf7d243f9f645165dc009c5097dd515f86fbb), ROM_BIOS(9) )
+ ROMX_LOAD( "ht18.bin", 0x10000, 0x10000, CRC(f65a6f9a) SHA1(7dfdf7d243f9f645165dc009c5097dd515f86fbb), ROM_BIOS(9) )
ROM_SYSTEM_BIOS(9, "amiht21", "AMI HT 21.1") /* as above */
- ROMX_LOAD( "ht21e.bin", 0xf0000, 0x10000, CRC(e80f7fed) SHA1(62d958d98c95e9e4d1b290a6c1054ae98770f276), ROM_BIOS(10) )
+ ROMX_LOAD( "ht21e.bin", 0x10000, 0x10000, CRC(e80f7fed) SHA1(62d958d98c95e9e4d1b290a6c1054ae98770f276), ROM_BIOS(10) )
ROM_SYSTEM_BIOS(10, "amip1", "AMI P.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 09-04-1990)*/
- ROMX_LOAD( "poisk-h.bin", 0xf0001, 0x8000, CRC(83fd3f8c) SHA1(ca94850bbd949b97b11710629886b0ee69489a81),ROM_SKIP(1) | ROM_BIOS(11) )
- ROMX_LOAD( "poisk-l.bin", 0xf0000, 0x8000, CRC(0b2ed291) SHA1(bb51a3f317cf4d429a6cfb44a46ca0ac39d9aaa7),ROM_SKIP(1) | ROM_BIOS(11) )
+ ROMX_LOAD( "poisk-h.bin", 0x10001, 0x8000, CRC(83fd3f8c) SHA1(ca94850bbd949b97b11710629886b0ee69489a81),ROM_SKIP(1) | ROM_BIOS(11) )
+ ROMX_LOAD( "poisk-l.bin", 0x10000, 0x8000, CRC(0b2ed291) SHA1(bb51a3f317cf4d429a6cfb44a46ca0ac39d9aaa7),ROM_SKIP(1) | ROM_BIOS(11) )
ROM_SYSTEM_BIOS(11, "aw201", "Award 201")
- ROMX_LOAD( "83201-5h.bin", 0xf0001, 0x8000, CRC(968d1fc0) SHA1(dc4122a6c696f0b43e7894dc1b669346eed755d5),ROM_SKIP(1) | ROM_BIOS(12) )
- ROMX_LOAD( "83201-5l.bin", 0xf0000, 0x8000, CRC(bf50a89a) SHA1(2349a1db6017a7fb0673e99d3680c8753407be8d),ROM_SKIP(1) | ROM_BIOS(12) )
+ ROMX_LOAD( "83201-5h.bin", 0x10001, 0x8000, CRC(968d1fc0) SHA1(dc4122a6c696f0b43e7894dc1b669346eed755d5),ROM_SKIP(1) | ROM_BIOS(12) )
+ ROMX_LOAD( "83201-5l.bin", 0x10000, 0x8000, CRC(bf50a89a) SHA1(2349a1db6017a7fb0673e99d3680c8753407be8d),ROM_SKIP(1) | ROM_BIOS(12) )
ROM_SYSTEM_BIOS(12, "aw303", "Award 303 NFS")
- ROMX_LOAD( "aw303-hi.bin", 0xf8001, 0x4000, CRC(78f32d7e) SHA1(1c88398fb171b33b7e6191bad63704ae85bfed8b), ROM_SKIP(1) | ROM_BIOS(13) )
- ROMX_LOAD( "aw303-lo.bin", 0xf8000, 0x4000, CRC(3d2a70c0) SHA1(1329113bec514ed2a6d803067b1132744ef534dd), ROM_SKIP(1) | ROM_BIOS(13) )
+ ROMX_LOAD( "aw303-hi.bin", 0x18001, 0x4000, CRC(78f32d7e) SHA1(1c88398fb171b33b7e6191bad63704ae85bfed8b), ROM_SKIP(1) | ROM_BIOS(13) )
+ ROMX_LOAD( "aw303-lo.bin", 0x18000, 0x4000, CRC(3d2a70c0) SHA1(1329113bec514ed2a6d803067b1132744ef534dd), ROM_SKIP(1) | ROM_BIOS(13) )
ROM_SYSTEM_BIOS(13, "aw303gs", "Award 303GS")
- ROMX_LOAD( "aw303gs-hi.bin", 0xf8001, 0x4000, CRC(82392e18) SHA1(042453b7b29933a1b72301d21fcf8fa6b293c9c9), ROM_SKIP(1) | ROM_BIOS(14) )
- ROMX_LOAD( "aw303gs-lo.bin", 0xf8000, 0x4000, CRC(a4cf8ba1) SHA1(b73e34be3b2754aaed1ac06471f4441fea06c67c), ROM_SKIP(1) | ROM_BIOS(14) )
+ ROMX_LOAD( "aw303gs-hi.bin", 0x18001, 0x4000, CRC(82392e18) SHA1(042453b7b29933a1b72301d21fcf8fa6b293c9c9), ROM_SKIP(1) | ROM_BIOS(14) )
+ ROMX_LOAD( "aw303gs-lo.bin", 0x18000, 0x4000, CRC(a4cf8ba1) SHA1(b73e34be3b2754aaed1ac06471f4441fea06c67c), ROM_SKIP(1) | ROM_BIOS(14) )
ROM_END
ROM_START( cmdpc30 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROMX_LOAD( "commodore pc 30 iii even.bin", 0xf8000, 0x4000, CRC(36307aa9) SHA1(50237ffea703b867de426ab9ebc2af46bac1d0e1),ROM_SKIP(1))
- ROMX_LOAD( "commodore pc 30 iii odd.bin", 0xf8001, 0x4000, CRC(41bae42d) SHA1(27d6ad9554be86359d44331f25591e3122a31519),ROM_SKIP(1))
+ ROM_REGION(0x20000,"bios", 0)
+ ROMX_LOAD( "commodore pc 30 iii even.bin", 0x18000, 0x4000, CRC(36307aa9) SHA1(50237ffea703b867de426ab9ebc2af46bac1d0e1),ROM_SKIP(1))
+ ROMX_LOAD( "commodore pc 30 iii odd.bin", 0x18001, 0x4000, CRC(41bae42d) SHA1(27d6ad9554be86359d44331f25591e3122a31519),ROM_SKIP(1))
ROM_END
ROM_START( atvga )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "vl82c", "VL82C311L-FC4")/*(Motherboard Manufacturer: Biostar Microtech Corp.) (BIOS release date: 05-05-1991)*/
- ROMX_LOAD( "2vlm001.bin", 0xf0000, 0x10000, CRC(f34d800a) SHA1(638aca592a0e525f957beb525e95ca666a994ee8), ROM_BIOS(1) )
+ ROMX_LOAD( "2vlm001.bin", 0x10000, 0x10000, CRC(f34d800a) SHA1(638aca592a0e525f957beb525e95ca666a994ee8), ROM_BIOS(1) )
ROM_SYSTEM_BIOS(1, "ami211", "AMI 21.1") /*(Motherboard Manufacturer: Dataexpert Corp. Motherboard) (Neat 286 Bios, 82c21x Chipset ) (BIOS release date:: 09-04-1990)*/
- ROMX_LOAD( "ami211.bin", 0xf0000, 0x10000,CRC(a0b5d269) SHA1(44db8227d35a09e39b93ed944f85dcddb0dd0d39), ROM_BIOS(2))
+ ROMX_LOAD( "ami211.bin", 0x10000, 0x10000,CRC(a0b5d269) SHA1(44db8227d35a09e39b93ed944f85dcddb0dd0d39), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "ami206", "AMI C 206.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 15-10-1990)*/
- ROMX_LOAD( "amic206.bin", 0xf0000, 0x10000,CRC(25a67c34) SHA1(91e9d8cdc2f1b40a601a23ceaff2189fd1245f3b), ROM_BIOS(3) )
+ ROMX_LOAD( "amic206.bin", 0x10000, 0x10000,CRC(25a67c34) SHA1(91e9d8cdc2f1b40a601a23ceaff2189fd1245f3b), ROM_BIOS(3) )
ROM_SYSTEM_BIOS(3, "amic21", "AMI C 21.1") /* bad dump, checksum off by 8 in the lsb*/
- ROMX_LOAD( "amic21-2.bin", 0xf0001, 0x8000, CRC(8ffe7752) SHA1(68215f07a170ee7bdcb3e52b370d470af1741f7e),ROM_SKIP(1) | ROM_BIOS(4) )
- ROMX_LOAD( "amic21-1.bin", 0xf0000, 0x8000, CRC(5644ed38) SHA1(963555ec77845defc3b42b433280908e1797076e),ROM_SKIP(1) | ROM_BIOS(4) )
+ ROMX_LOAD( "amic21-2.bin", 0x10001, 0x8000, CRC(8ffe7752) SHA1(68215f07a170ee7bdcb3e52b370d470af1741f7e),ROM_SKIP(1) | ROM_BIOS(4) )
+ ROMX_LOAD( "amic21-1.bin", 0x10000, 0x8000, CRC(5644ed38) SHA1(963555ec77845defc3b42b433280908e1797076e),ROM_SKIP(1) | ROM_BIOS(4) )
ROM_SYSTEM_BIOS(4, "ami101", "AMI HT 101.1") /* Quadtel Enhanced 286 Bios Version 3.04.02 */
- ROMX_LOAD( "amiht-h.bin", 0xf0001, 0x8000, CRC(8022545f) SHA1(42541d4392ad00b0e064b3a8ccf2786d875c7c19),ROM_SKIP(1) | ROM_BIOS(5) )
- ROMX_LOAD( "amiht-l.bin", 0xf0000, 0x8000, CRC(285f6b8f) SHA1(2fce4ec53b68c9a7580858e16c926dc907820872),ROM_SKIP(1) | ROM_BIOS(5) )
+ ROMX_LOAD( "amiht-h.bin", 0x10001, 0x8000, CRC(8022545f) SHA1(42541d4392ad00b0e064b3a8ccf2786d875c7c19),ROM_SKIP(1) | ROM_BIOS(5) )
+ ROMX_LOAD( "amiht-l.bin", 0x10000, 0x8000, CRC(285f6b8f) SHA1(2fce4ec53b68c9a7580858e16c926dc907820872),ROM_SKIP(1) | ROM_BIOS(5) )
ROM_SYSTEM_BIOS(5, "ami121", "AMI HT 12.1")
- ROMX_LOAD( "ami2od86.bin", 0xf0001, 0x8000, CRC(04a2cec4) SHA1(564d37a8b2c0f4d0e23cd1e280a09d47c9945da8),ROM_SKIP(1) | ROM_BIOS(6) )
- ROMX_LOAD( "ami2ev86.bin", 0xf0000, 0x8000, CRC(55deb5c2) SHA1(19ce1a7cc985b5895c585e39211475de2e3b0dd1),ROM_SKIP(1) | ROM_BIOS(6) )
+ ROMX_LOAD( "ami2od86.bin", 0x10001, 0x8000, CRC(04a2cec4) SHA1(564d37a8b2c0f4d0e23cd1e280a09d47c9945da8),ROM_SKIP(1) | ROM_BIOS(6) )
+ ROMX_LOAD( "ami2ev86.bin", 0x10000, 0x8000, CRC(55deb5c2) SHA1(19ce1a7cc985b5895c585e39211475de2e3b0dd1),ROM_SKIP(1) | ROM_BIOS(6) )
ROM_SYSTEM_BIOS(6, "ami122", "AMI HT 12.2")
- ROMX_LOAD( "ami2od89.bin", 0xf0001, 0x8000, CRC(7c81bbe8) SHA1(a2c7eca586f6e2e76b9101191e080a1f1cb8b833),ROM_SKIP(1) | ROM_BIOS(7) )
- ROMX_LOAD( "ami2ev89.bin", 0xf0000, 0x8000, CRC(705d36e0) SHA1(0c9cfb71ced4587f109b9b6dfc2a9c92302fdb99),ROM_SKIP(1) | ROM_BIOS(7) )
+ ROMX_LOAD( "ami2od89.bin", 0x10001, 0x8000, CRC(7c81bbe8) SHA1(a2c7eca586f6e2e76b9101191e080a1f1cb8b833),ROM_SKIP(1) | ROM_BIOS(7) )
+ ROMX_LOAD( "ami2ev89.bin", 0x10000, 0x8000, CRC(705d36e0) SHA1(0c9cfb71ced4587f109b9b6dfc2a9c92302fdb99),ROM_SKIP(1) | ROM_BIOS(7) )
ROM_SYSTEM_BIOS(7, "ami123", "AMI HT 12.3") /*(Motherboard Manufacturer: Aquarius Systems USA Inc.) (BIOS release date:: 13-06-1990)*/
- ROMX_LOAD( "ht12h.bin", 0xf0001, 0x8000, CRC(db8b471e) SHA1(7b5fa1c131061fa7719247db3e282f6d30226778),ROM_SKIP(1) | ROM_BIOS(8) )
- ROMX_LOAD( "ht12l.bin", 0xf0000, 0x8000, CRC(74fd178a) SHA1(97c8283e574abbed962b701f3e8091fb82823b80),ROM_SKIP(1) | ROM_BIOS(8) )
+ ROMX_LOAD( "ht12h.bin", 0x10001, 0x8000, CRC(db8b471e) SHA1(7b5fa1c131061fa7719247db3e282f6d30226778),ROM_SKIP(1) | ROM_BIOS(8) )
+ ROMX_LOAD( "ht12l.bin", 0x10000, 0x8000, CRC(74fd178a) SHA1(97c8283e574abbed962b701f3e8091fb82823b80),ROM_SKIP(1) | ROM_BIOS(8) )
ROM_SYSTEM_BIOS(8, "ami181", "AMI HT 18.1") /* not a bad dump, sets unknown probably chipset related registers at 0x1e8 before failing post */
- ROMX_LOAD( "ht18.bin", 0xf0000, 0x10000, CRC(f65a6f9a) SHA1(7dfdf7d243f9f645165dc009c5097dd515f86fbb), ROM_BIOS(9) )
+ ROMX_LOAD( "ht18.bin", 0x10000, 0x10000, CRC(f65a6f9a) SHA1(7dfdf7d243f9f645165dc009c5097dd515f86fbb), ROM_BIOS(9) )
ROM_SYSTEM_BIOS(9, "amiht21", "AMI HT 21.1") /* as above */
- ROMX_LOAD( "ht21e.bin", 0xf0000, 0x10000, CRC(e80f7fed) SHA1(62d958d98c95e9e4d1b290a6c1054ae98770f276), ROM_BIOS(10) )
+ ROMX_LOAD( "ht21e.bin", 0x10000, 0x10000, CRC(e80f7fed) SHA1(62d958d98c95e9e4d1b290a6c1054ae98770f276), ROM_BIOS(10) )
ROM_SYSTEM_BIOS(10, "amip1", "AMI P.1") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 09-04-1990)*/
- ROMX_LOAD( "poisk-h.bin", 0xf0001, 0x8000, CRC(83fd3f8c) SHA1(ca94850bbd949b97b11710629886b0ee69489a81),ROM_SKIP(1) | ROM_BIOS(11) )
- ROMX_LOAD( "poisk-l.bin", 0xf0000, 0x8000, CRC(0b2ed291) SHA1(bb51a3f317cf4d429a6cfb44a46ca0ac39d9aaa7),ROM_SKIP(1) | ROM_BIOS(11) )
+ ROMX_LOAD( "poisk-h.bin", 0x10001, 0x8000, CRC(83fd3f8c) SHA1(ca94850bbd949b97b11710629886b0ee69489a81),ROM_SKIP(1) | ROM_BIOS(11) )
+ ROMX_LOAD( "poisk-l.bin", 0x10000, 0x8000, CRC(0b2ed291) SHA1(bb51a3f317cf4d429a6cfb44a46ca0ac39d9aaa7),ROM_SKIP(1) | ROM_BIOS(11) )
ROM_SYSTEM_BIOS(11, "ami1131", "AMI-1131") /*(Motherboard Manufacturer: Elitegroup Computer Co., Ltd.) (BIOS release date:: 09-04-1990)*/
- ROMX_LOAD( "2hlm003h.bin", 0xf0001, 0x8000, CRC(2babb42b) SHA1(3da6538f44b434cdec0cbdddd392ccfd34666f06),ROM_SKIP(1) | ROM_BIOS(12) )
- ROMX_LOAD( "2hlm003l.bin", 0xf0000, 0x8000, CRC(317cbcbf) SHA1(1adad6280d8b07c2921fc5fc13ecaa10e6bfebdc),ROM_SKIP(1) | ROM_BIOS(12) )
+ ROMX_LOAD( "2hlm003h.bin", 0x10001, 0x8000, CRC(2babb42b) SHA1(3da6538f44b434cdec0cbdddd392ccfd34666f06),ROM_SKIP(1) | ROM_BIOS(12) )
+ ROMX_LOAD( "2hlm003l.bin", 0x10000, 0x8000, CRC(317cbcbf) SHA1(1adad6280d8b07c2921fc5fc13ecaa10e6bfebdc),ROM_SKIP(1) | ROM_BIOS(12) )
ROM_SYSTEM_BIOS(12, "at", "PC 286") /*(Motherboard Manufacturer: Unknown.) (BIOS release date:: 03-11-1987)*/
- ROMX_LOAD("at110387.1", 0xf0001, 0x8000, CRC(679296a7) SHA1(ae891314cac614dfece686d8e1d74f4763cf40e3),ROM_SKIP(1) | ROM_BIOS(13) )
- ROMX_LOAD("at110387.0", 0xf0000, 0x8000, CRC(65ae1f97) SHA1(91a29c7deecf7a9afbba330e64e0eee9aafee4d1),ROM_SKIP(1) | ROM_BIOS(13) )
+ ROMX_LOAD("at110387.1", 0x10001, 0x8000, CRC(679296a7) SHA1(ae891314cac614dfece686d8e1d74f4763cf40e3),ROM_SKIP(1) | ROM_BIOS(13) )
+ ROMX_LOAD("at110387.0", 0x10000, 0x8000, CRC(65ae1f97) SHA1(91a29c7deecf7a9afbba330e64e0eee9aafee4d1),ROM_SKIP(1) | ROM_BIOS(13) )
ROM_END
ROM_START( xb42639 )
/* actual VGA BIOS not dumped*/
- ROM_REGION(0x1000000, "maincpu", 0)
+ ROM_REGION(0x20000, "bios", 0)
// XEN-S (Venus I Motherboard)
- ROM_LOAD16_BYTE("3-10-17i.lo", 0xf0000, 0x8000, CRC(3786ca1e) SHA1(c682d7c76f234559d03bcf21010c13c4dbeafb69))
- ROM_RELOAD(0xff0000,0x8000)
- ROM_LOAD16_BYTE("3-10-17i.hi", 0xf0001, 0x8000, CRC(d66710eb) SHA1(e8c1cd5f9ecfbd8825655e416d7ddf2ae362e69b))
- ROM_RELOAD(0xff0001,0x8000)
+ ROM_LOAD16_BYTE("3-10-17i.lo", 0x10000, 0x8000, CRC(3786ca1e) SHA1(c682d7c76f234559d03bcf21010c13c4dbeafb69))
+ ROM_LOAD16_BYTE("3-10-17i.hi", 0x10001, 0x8000, CRC(d66710eb) SHA1(e8c1cd5f9ecfbd8825655e416d7ddf2ae362e69b))
ROM_END
ROM_START( xb42639a )
/* actual VGA BIOS not dumped*/
- ROM_REGION(0x1000000, "maincpu", 0)
+ ROM_REGION(0x20000, "bios", 0)
// XEN-S (Venus II Motherboard)
- ROM_LOAD16_BYTE("10217.lo", 0xf0000, 0x8000, CRC(ea53406f) SHA1(2958dfdbda14de4e6b9d6a8c3781131ab1e32bef))
- ROM_RELOAD(0xff0000,0x8000)
- ROM_LOAD16_BYTE("10217.hi", 0xf0001, 0x8000, CRC(111725cf) SHA1(f6018a45bda4476d40c5881fb0a506ff75ec1688))
- ROM_RELOAD(0xff0001,0x8000)
+ ROM_LOAD16_BYTE("10217.lo", 0x10000, 0x8000, CRC(ea53406f) SHA1(2958dfdbda14de4e6b9d6a8c3781131ab1e32bef))
+ ROM_LOAD16_BYTE("10217.hi", 0x10001, 0x8000, CRC(111725cf) SHA1(f6018a45bda4476d40c5881fb0a506ff75ec1688))
ROM_END
ROM_START( xb42664 )
/* actual VGA BIOS not dumped */
- ROM_REGION(0x1000000, "maincpu", 0)
+ ROM_REGION(0x20000, "bios", 0)
// XEN-S (Venus I Motherboard)
- ROM_LOAD16_BYTE("3-10-17i.lo", 0xf0000, 0x8000, CRC(3786ca1e) SHA1(c682d7c76f234559d03bcf21010c13c4dbeafb69))
- ROM_RELOAD(0xff0000,0x8000)
- ROM_LOAD16_BYTE("3-10-17i.hi", 0xf0001, 0x8000, CRC(d66710eb) SHA1(e8c1cd5f9ecfbd8825655e416d7ddf2ae362e69b))
- ROM_RELOAD(0xff0001,0x8000)
+ ROM_LOAD16_BYTE("3-10-17i.lo", 0x10000, 0x8000, CRC(3786ca1e) SHA1(c682d7c76f234559d03bcf21010c13c4dbeafb69))
+ ROM_LOAD16_BYTE("3-10-17i.hi", 0x10001, 0x8000, CRC(d66710eb) SHA1(e8c1cd5f9ecfbd8825655e416d7ddf2ae362e69b))
ROM_END
ROM_START( xb42664a )
/* actual VGA BIOS not dumped*/
- ROM_REGION(0x1000000, "maincpu", 0)
+ ROM_REGION(0x20000, "bios", 0)
// XEN-S (Venus II Motherboard)
- ROM_LOAD16_BYTE("10217.lo", 0xf0000, 0x8000, CRC(ea53406f) SHA1(2958dfdbda14de4e6b9d6a8c3781131ab1e32bef))
- ROM_RELOAD(0xff0000,0x8000)
- ROM_LOAD16_BYTE("10217.hi", 0xf0001, 0x8000, CRC(111725cf) SHA1(f6018a45bda4476d40c5881fb0a506ff75ec1688))
- ROM_RELOAD(0xff0001,0x8000)
+ ROM_LOAD16_BYTE("10217.lo", 0x10000, 0x8000, CRC(ea53406f) SHA1(2958dfdbda14de4e6b9d6a8c3781131ab1e32bef))
+ ROM_LOAD16_BYTE("10217.hi", 0x10001, 0x8000, CRC(111725cf) SHA1(f6018a45bda4476d40c5881fb0a506ff75ec1688))
ROM_END
ROM_START( neat )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
//ROM_SYSTEM_BIOS(0, "neat286", "NEAT 286")
- ROM_LOAD16_BYTE("at030389.0", 0xf0000, 0x8000, CRC(4c36e61d) SHA1(094e8d5e6819889163cb22a2cf559186de782582))
- //ROM_RELOAD(0xff0000,0x8000)
- ROM_LOAD16_BYTE("at030389.1", 0xf0001, 0x8000, CRC(4e90f294) SHA1(18c21fd8d7e959e2292a9afbbaf78310f9cad12f))
- //ROM_RELOAD(0xff0001,0x8000)
+ ROM_LOAD16_BYTE("at030389.0", 0x10000, 0x8000, CRC(4c36e61d) SHA1(094e8d5e6819889163cb22a2cf559186de782582))
+ ROM_LOAD16_BYTE("at030389.1", 0x10001, 0x8000, CRC(4e90f294) SHA1(18c21fd8d7e959e2292a9afbbaf78310f9cad12f))
ROM_END
ROM_START( ct386sx )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "neatsx", "NEATsx 386sx")
- ROMX_LOAD("012l-u25.bin", 0xf0000, 0x8000, CRC(4ab1862d) SHA1(d4e8d0ff43731270478ca7671a129080ff350a4f),ROM_SKIP(1) | ROM_BIOS(1) )
- ROMX_LOAD("012h-u24.bin", 0xf0001, 0x8000, CRC(17472521) SHA1(7588c148fe53d9dc4cb2d0ab6e0fd51a39bb5d1a),ROM_SKIP(1) | ROM_BIOS(1) )
- ROM_FILL(0xfe2c9, 1, 0x00) // skip incompatible keyboard controller test
- ROM_FILL(0xfe2cb, 1, 0xbb) // fix checksum
+ ROMX_LOAD("012l-u25.bin", 0x10000, 0x8000, CRC(4ab1862d) SHA1(d4e8d0ff43731270478ca7671a129080ff350a4f),ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD("012h-u24.bin", 0x10001, 0x8000, CRC(17472521) SHA1(7588c148fe53d9dc4cb2d0ab6e0fd51a39bb5d1a),ROM_SKIP(1) | ROM_BIOS(1) )
+ ROM_FILL(0x1e2c9, 1, 0x00) // skip incompatible keyboard controller test
+ ROM_FILL(0x1e2cb, 1, 0xbb) // fix checksum
ROM_END
ROM_START( at386 )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "ami386", "AMI 386")
- ROMX_LOAD("ami386.bin", 0xf0000, 0x10000, CRC(3a807d7f) SHA1(8289ba36a3dfc3324333b1a834bc6b0402b546f0), ROM_BIOS(1))
+ ROMX_LOAD("ami386.bin", 0x10000, 0x10000, CRC(3a807d7f) SHA1(8289ba36a3dfc3324333b1a834bc6b0402b546f0), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "at386", "unknown 386") // This dump possibly comes from a MITAC INC 386 board, given that the original driver had it as manufacturer
- ROMX_LOAD("at386.bin", 0xf0000, 0x10000, CRC(3df9732a) SHA1(def71567dee373dc67063f204ef44ffab9453ead), ROM_BIOS(2))
- //ROM_RELOAD(0xff0000,0x10000)
-
+ ROMX_LOAD("at386.bin", 0x10000, 0x10000, CRC(3df9732a) SHA1(def71567dee373dc67063f204ef44ffab9453ead), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "amicg", "AMI CG")
- ROMX_LOAD( "amicg.1", 0xf0000, 0x10000,CRC(8408965a) SHA1(9893d3ac851e01b06a68a67d3721df36ca2c96f5), ROM_BIOS(3) )
+ ROMX_LOAD( "amicg.1", 0x10000, 0x10000,CRC(8408965a) SHA1(9893d3ac851e01b06a68a67d3721df36ca2c96f5), ROM_BIOS(3) )
ROM_END
ROM_START( at486 )
- ROM_REGION(0x1000000, "maincpu", 0)
+ ROM_REGION(0x20000, "bios", 0)
ROM_SYSTEM_BIOS(0, "at486", "PC/AT 486")
- ROMX_LOAD("at486.bin", 0x0f0000, 0x10000, CRC(31214616) SHA1(51b41fa44d92151025fc9ad06e518e906935e689), ROM_BIOS(1))
+ ROMX_LOAD("at486.bin", 0x10000, 0x10000, CRC(31214616) SHA1(51b41fa44d92151025fc9ad06e518e906935e689), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "mg48602", "UMC MG-48602")
- ROMX_LOAD("mg48602.bin", 0x0f0000, 0x10000, CRC(45797823) SHA1(a5fab258aecabde615e1e97af5911d6cf9938c11), ROM_BIOS(2))
+ ROMX_LOAD("mg48602.bin", 0x10000, 0x10000, CRC(45797823) SHA1(a5fab258aecabde615e1e97af5911d6cf9938c11), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "ft01232", "Free Tech 01-232")
- ROMX_LOAD("ft01232.bin", 0x0f0000, 0x10000, CRC(30efaf92) SHA1(665c8ef05ca052dcc06bb473c9539546bfef1e86), ROM_BIOS(3))
+ ROMX_LOAD("ft01232.bin", 0x10000, 0x10000, CRC(30efaf92) SHA1(665c8ef05ca052dcc06bb473c9539546bfef1e86), ROM_BIOS(3))
/* 486 boards from FIC
@@ -1384,47 +850,47 @@ ROM_START( at486 )
/* this is the year 2000 beta bios from FIC, supports GIO-VT, GAC-V, GAC-2, VIP-IO, VIO-VP and GVT-2 */
ROM_SYSTEM_BIOS(3, "ficy2k", "FIC 486 3.276GN1") /* 1997-06-16, includes CL-GD5429 VGA BIOS 1.00a */
- ROMX_LOAD("3276gn1.bin", 0x0e0000, 0x20000, CRC(d4ff0cc4) SHA1(567b6bdbc9bff306c8c955f275e01ae4c45fd5f2), ROM_BIOS(4))
+ ROMX_LOAD("3276gn1.bin", 0x00000, 0x20000, CRC(d4ff0cc4) SHA1(567b6bdbc9bff306c8c955f275e01ae4c45fd5f2), ROM_BIOS(4))
ROM_SYSTEM_BIOS(4, "ficgac2", "FIC 486-GAC-2") /* 1994-04-29, includes CL-GD542X VGA BIOS 1.50 */
- ROMX_LOAD("att409be.bin", 0x0e0000, 0x20000, CRC(c58e017b) SHA1(14c19e720ce62eb2afe28a70f4e4ebafab0f9e77), ROM_BIOS(5))
+ ROMX_LOAD("att409be.bin", 0x00000, 0x20000, CRC(c58e017b) SHA1(14c19e720ce62eb2afe28a70f4e4ebafab0f9e77), ROM_BIOS(5))
ROM_SYSTEM_BIOS(5, "ficgacv", "FIC 486-GAC-V 3.27GN1") /* 1996-04-08, includes CL-GD542X VGA BIOS 1.41 */
- ROMX_LOAD("327gn1.awd", 0x0e0000, 0x20000, CRC(017614d4) SHA1(2228c28f21a7e78033d24319449297936465b164), ROM_BIOS(6))
+ ROMX_LOAD("327gn1.awd", 0x00000, 0x20000, CRC(017614d4) SHA1(2228c28f21a7e78033d24319449297936465b164), ROM_BIOS(6))
ROM_SYSTEM_BIOS(6, "ficgiovp", "FIC 486-GIO-VP 3.15GN") /* 1994-05-06 */
- ROMX_LOAD("giovp315.rom", 0x0f0000, 0x10000, CRC(e102c3f5) SHA1(f15a7e9311cc17afe86da0b369607768b030ddec), ROM_BIOS(7))
+ ROMX_LOAD("giovp315.rom", 0x10000, 0x10000, CRC(e102c3f5) SHA1(f15a7e9311cc17afe86da0b369607768b030ddec), ROM_BIOS(7))
ROM_SYSTEM_BIOS(7, "ficgiovt", "FIC 486-GIO-VT 3.06G") /* 1994-11-20 */
- ROMX_LOAD("306gcd00.awd", 0x0f0000, 0x10000, CRC(75f3ded4) SHA1(999d4b58204e0b0f33262d0613c855b528bf9597), ROM_BIOS(8))
+ ROMX_LOAD("306gcd00.awd", 0x10000, 0x10000, CRC(75f3ded4) SHA1(999d4b58204e0b0f33262d0613c855b528bf9597), ROM_BIOS(8))
ROM_SYSTEM_BIOS(8, "ficgiovt2_326", "FIC 486-GIO-VT2 3.26G") /* 1994-07-06 */
- ROMX_LOAD("326g1c00.awd", 0x0f0000, 0x10000, CRC(2e729ab5) SHA1(b713f97fa0e0b62856dab917f417f5b21020b354), ROM_BIOS(9))
+ ROMX_LOAD("326g1c00.awd", 0x10000, 0x10000, CRC(2e729ab5) SHA1(b713f97fa0e0b62856dab917f417f5b21020b354), ROM_BIOS(9))
ROM_SYSTEM_BIOS(9, "ficgiovt2_3276", "FIC 486-GIO-VT2 3.276") /* 1997-07-17 */
- ROMX_LOAD("32760000.bin", 0x0f0000, 0x10000, CRC(ad179128) SHA1(595f67ba4a1c8eb5e118d75bf657fff3803dcf4f), ROM_BIOS(10))
+ ROMX_LOAD("32760000.bin", 0x10000, 0x10000, CRC(ad179128) SHA1(595f67ba4a1c8eb5e118d75bf657fff3803dcf4f), ROM_BIOS(10))
ROM_SYSTEM_BIOS(10, "ficgvt2", "FIC 486-GVT-2 3.07G") /* 1994-11-02 */
- ROMX_LOAD("3073.bin", 0x0f0000, 0x10000, CRC(a6723863) SHA1(ee93a2f1ec84a3d67e267d0a490029f9165f1533), ROM_BIOS(11))
+ ROMX_LOAD("3073.bin", 0x10000, 0x10000, CRC(a6723863) SHA1(ee93a2f1ec84a3d67e267d0a490029f9165f1533), ROM_BIOS(11))
ROM_SYSTEM_BIOS(11, "ficgpak2", "FIC 486-PAK-2 5.15S") /* 1995-06-27, includes Phoenix S3 TRIO64 Enhanced VGA BIOS 1.4-01 */
- ROMX_LOAD("515sbd8a.awd", 0x0e0000, 0x20000, CRC(778247e1) SHA1(07d8f0f2464abf507be1e8dfa06cd88737782411), ROM_BIOS(12))
+ ROMX_LOAD("515sbd8a.awd", 0x00000, 0x20000, CRC(778247e1) SHA1(07d8f0f2464abf507be1e8dfa06cd88737782411), ROM_BIOS(12))
ROM_SYSTEM_BIOS(12, "ficpio3g7", "FIC 486-PIO-3 1.15G705") /* pnp */
- ROMX_LOAD("115g705.awd", 0x0e0000, 0x20000, CRC(ddb1544a) SHA1(d165c9ecdc9397789abddfe0fef69fdf954fa41b), ROM_BIOS(13))
+ ROMX_LOAD("115g705.awd", 0x00000, 0x20000, CRC(ddb1544a) SHA1(d165c9ecdc9397789abddfe0fef69fdf954fa41b), ROM_BIOS(13))
ROM_SYSTEM_BIOS(13, "ficpio3g1", "FIC 486-PIO-3 1.15G105") /* non-pnp */
- ROMX_LOAD("115g105.awd", 0x0e0000, 0x20000, CRC(b327eb83) SHA1(9e1ff53e07ca035d8d43951bac345fec7131678d), ROM_BIOS(14))
+ ROMX_LOAD("115g105.awd", 0x00000, 0x20000, CRC(b327eb83) SHA1(9e1ff53e07ca035d8d43951bac345fec7131678d), ROM_BIOS(14))
ROM_SYSTEM_BIOS(14, "ficpos", "FIC 486-POS")
- ROMX_LOAD("116di6b7.bin", 0x0e0000, 0x20000, CRC(d1d84616) SHA1(2f2b27ce100cf784260d8e155b48db8cfbc63285), ROM_BIOS(15))
+ ROMX_LOAD("116di6b7.bin", 0x00000, 0x20000, CRC(d1d84616) SHA1(2f2b27ce100cf784260d8e155b48db8cfbc63285), ROM_BIOS(15))
ROM_SYSTEM_BIOS(15, "ficpvt", "FIC 486-PVT 5.15") /* 1995-06-27 */
- ROMX_LOAD("5150eef3.awd", 0x0e0000, 0x20000, CRC(eb35785d) SHA1(1e601bc8da73f22f11effe9cdf5a84d52576142b), ROM_BIOS(16))
+ ROMX_LOAD("5150eef3.awd", 0x00000, 0x20000, CRC(eb35785d) SHA1(1e601bc8da73f22f11effe9cdf5a84d52576142b), ROM_BIOS(16))
ROM_SYSTEM_BIOS(16, "ficpvtio", "FIC 486-PVT-IO 5.162W2") /* 1995-10-05 */
- ROMX_LOAD("5162cf37.awd", 0x0e0000, 0x20000, CRC(378d813d) SHA1(aa674eff5b972b31924941534c3c988f6f78dc93), ROM_BIOS(17))
+ ROMX_LOAD("5162cf37.awd", 0x00000, 0x20000, CRC(378d813d) SHA1(aa674eff5b972b31924941534c3c988f6f78dc93), ROM_BIOS(17))
ROM_SYSTEM_BIOS(17, "ficvipio426", "FIC 486-VIP-IO 4.26GN2") /* 1994-12-07 */
- ROMX_LOAD("426gn2.awd", 0x0e0000, 0x20000, CRC(5f472aa9) SHA1(9160abefae32b450e973651c052657b4becc72ba), ROM_BIOS(18))
+ ROMX_LOAD("426gn2.awd", 0x00000, 0x20000, CRC(5f472aa9) SHA1(9160abefae32b450e973651c052657b4becc72ba), ROM_BIOS(18))
ROM_SYSTEM_BIOS(18, "ficvipio427", "FIC 486-VIP-IO 4.27GN2A") /* 1996-02-14 */
- ROMX_LOAD("427gn2a.awd", 0x0e0000, 0x20000, CRC(035ad56d) SHA1(0086db3eff711fc710b30e7f422fc5b4ab8d47aa), ROM_BIOS(19))
+ ROMX_LOAD("427gn2a.awd", 0x00000, 0x20000, CRC(035ad56d) SHA1(0086db3eff711fc710b30e7f422fc5b4ab8d47aa), ROM_BIOS(19))
ROM_SYSTEM_BIOS(19, "ficvipio2", "FIC 486-VIP-IO2")
- ROMX_LOAD("1164g701.awd", 0x0e0000, 0x20000, CRC(7b762683) SHA1(84debce7239c8b1978246688ae538f7c4f519d13), ROM_BIOS(20))
+ ROMX_LOAD("1164g701.awd", 0x00000, 0x20000, CRC(7b762683) SHA1(84debce7239c8b1978246688ae538f7c4f519d13), ROM_BIOS(20))
ROM_SYSTEM_BIOS(20, "qdi", "QDI PX486DX33/50P3")
- ROMX_LOAD("qdi_px486.u23", 0x0f0000, 0x10000, CRC(c80ecfb6) SHA1(34cc9ef68ff719cd0771297bf184efa83a805f3e), ROM_BIOS(21))
+ ROMX_LOAD("qdi_px486.u23", 0x10000, 0x10000, CRC(c80ecfb6) SHA1(34cc9ef68ff719cd0771297bf184efa83a805f3e), ROM_BIOS(21))
ROM_END
@@ -1442,212 +908,178 @@ ROM_START( ficpio2 )
ROMX_LOAD("115b101.awd", 0x020000, 0x20000, CRC(ff69617d) SHA1(ecbfc7315dcf6bd3e5b59e3ae9258759f64fe7a0), ROM_BIOS(4))
ROM_END
-
-ROM_START( at586 )
- ROM_REGION32_LE(0x40000, "isa", 0)
- ROM_SYSTEM_BIOS(0, "sptx", "SP-586TX")
- ROMX_LOAD("sp586tx.bin", 0x20000, 0x20000, CRC(1003d72c) SHA1(ec9224ff9b0fdfd6e462cb7bbf419875414739d6), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "unisys", "Unisys 586") // probably bad dump due to need of hack in i82439tx to work
- ROMX_LOAD("at586.bin", 0x20000, 0x20000, CRC(717037f5) SHA1(1d49d1b7a4a40d07d1a897b7f8c827754d76f824), ROM_BIOS(2))
-
- ROM_SYSTEM_BIOS(2, "ga586t2", "Gigabyte GA-586T2") // ITE 8679 I/O
- ROMX_LOAD("gb_ga586t2.bin", 0x20000, 0x20000, CRC(3a50a6e1) SHA1(dea859b4f1492d0d08aacd260ed1e83e00ebac08), ROM_BIOS(3))
- ROM_SYSTEM_BIOS(3, "5tx52", "Acorp 5TX52") // W83877TF I/O
- ROMX_LOAD("acorp_5tx52.bin", 0x20000, 0x20000, CRC(04d69419) SHA1(983377674fef05e710c8665c14cc348c99166fb6), ROM_BIOS(4))
- ROM_SYSTEM_BIOS(4, "txp4", "ASUS TXP4") // W83977TF-A I/O
- ROMX_LOAD("asus_txp4.bin", 0x20000, 0x20000, CRC(a1321bb1) SHA1(92e5f14d8505119f85b148a63510617ac12bcdf3), ROM_BIOS(5))
-ROM_END
-
-ROM_START( at586x3 )
- ROM_REGION32_LE(0x40000, "isa", 0)
- ROM_LOAD("5hx29.bin", 0x20000, 0x20000, CRC(07719a55) SHA1(b63993fd5186cdb4f28c117428a507cd069e1f68))
-ROM_END
-
ROM_START( c386sx16 )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
/* actual VGA BIOS not dumped - uses a WD Paradise according to http://www.cbmhardware.de/pc/pc.php */
/* Commodore 80386SX BIOS Rev. 1.03 */
/* Copyright (C) 1985-1990 Commodore Electronics Ltd. */
/* Copyright (C) 1985-1990 Phoenix Technologies Ltd. */
- ROM_LOAD16_BYTE( "390914-01.u39", 0xf0000, 0x8000, CRC(8f849198) SHA1(550b04bac0d0807d6e95ec25391a81272779b41b)) /* 390914-01 V1.03 CS-2100 U39 Copyright (C) 1990 CBM */
- ROM_LOAD16_BYTE( "390915-01.u38", 0xf0001, 0x8000, CRC(ee4bad92) SHA1(6e02ef97a7ce336485814c06a1693bc099ce5cfb)) /* 390915-01 V1.03 CS-2100 U38 Copyright (C) 1990 CBM */
+ ROM_LOAD16_BYTE( "390914-01.u39", 0x10000, 0x8000, CRC(8f849198) SHA1(550b04bac0d0807d6e95ec25391a81272779b41b)) /* 390914-01 V1.03 CS-2100 U39 Copyright (C) 1990 CBM */
+ ROM_LOAD16_BYTE( "390915-01.u38", 0x10001, 0x8000, CRC(ee4bad92) SHA1(6e02ef97a7ce336485814c06a1693bc099ce5cfb)) /* 390915-01 V1.03 CS-2100 U38 Copyright (C) 1990 CBM */
ROM_END
ROM_START( xb42663 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "qi310223.lo", 0xe0000, 0x10000, CRC(53047f49) SHA1(7b38e533f7f27295269549c63e5477d950239167))
- ROM_LOAD16_BYTE( "qi310223.hi", 0xe0001, 0x10000, CRC(4852869f) SHA1(98599d4691d40b3fac2936034c70b386ce4caf77))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "qi310223.lo", 0x00000, 0x10000, CRC(53047f49) SHA1(7b38e533f7f27295269549c63e5477d950239167))
+ ROM_LOAD16_BYTE( "qi310223.hi", 0x00001, 0x10000, CRC(4852869f) SHA1(98599d4691d40b3fac2936034c70b386ce4caf77))
ROM_END
ROM_START( qi600 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "qi610223.lo", 0xe0000, 0x10000, CRC(563114a9) SHA1(62932b3bf0b5502ff708f604c21773f00afda58e))
- ROM_LOAD16_BYTE( "qi610223.hi", 0xe0001, 0x10000, CRC(0ae133f6) SHA1(6039c366f7fe0ebf60b34c1a7d6b2d781b664001))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "qi610223.lo", 0x00000, 0x10000, CRC(563114a9) SHA1(62932b3bf0b5502ff708f604c21773f00afda58e))
+ ROM_LOAD16_BYTE( "qi610223.hi", 0x00001, 0x10000, CRC(0ae133f6) SHA1(6039c366f7fe0ebf60b34c1a7d6b2d781b664001))
ROM_END
ROM_START( qi900 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "qi910224.lo", 0xe0000, 0x10000, CRC(b012ad3c) SHA1(807e788a6bd03f5e983fe503af3d0b202c754b8a))
- ROM_LOAD16_BYTE( "qi910224.hi", 0xe0001, 0x10000, CRC(36e66d56) SHA1(0900c5272ec3ced550f18fb08db59ab7f67a621e))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "qi910224.lo", 0x00000, 0x10000, CRC(b012ad3c) SHA1(807e788a6bd03f5e983fe503af3d0b202c754b8a))
+ ROM_LOAD16_BYTE( "qi910224.hi", 0x00001, 0x10000, CRC(36e66d56) SHA1(0900c5272ec3ced550f18fb08db59ab7f67a621e))
ROM_END
ROM_START( ftsserv )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "fts10226.lo", 0xe0000, 0x10000, CRC(efbd738f) SHA1(d5258760bafdaf1bf13c4a49da76d4b5e7b4ccbd))
- ROM_LOAD16_BYTE( "fts10226.hi", 0xe0001, 0x10000, CRC(2460853f) SHA1(a6bba8d2f800140afd129c4d5278f7ae8fe7e63a))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "fts10226.lo", 0x00000, 0x10000, CRC(efbd738f) SHA1(d5258760bafdaf1bf13c4a49da76d4b5e7b4ccbd))
+ ROM_LOAD16_BYTE( "fts10226.hi", 0x00001, 0x10000, CRC(2460853f) SHA1(a6bba8d2f800140afd129c4d5278f7ae8fe7e63a))
/* FT Server series Front Panel */
ROM_REGION(0x10000,"front", 0)
ROM_LOAD( "fp10009.bin", 0x0000, 0x8000, CRC(8aa7f718) SHA1(9ee6c6a5bb92622ea8d3805196d42ff68887d820))
ROM_END
ROM_START( apxenls3 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "31020.lo", 0xf0000, 0x8000, CRC(a19678d2) SHA1(d13c12fa7e94333555eabf58b81bad421e21cd91))
- ROM_LOAD16_BYTE( "31020.hi", 0xf0001, 0x8000, CRC(4922e020) SHA1(64e6448323dad2209e004cd93fa181582e768ed5))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "31020.lo", 0x10000, 0x8000, CRC(a19678d2) SHA1(d13c12fa7e94333555eabf58b81bad421e21cd91))
+ ROM_LOAD16_BYTE( "31020.hi", 0x10001, 0x8000, CRC(4922e020) SHA1(64e6448323dad2209e004cd93fa181582e768ed5))
ROM_END
ROM_START( aplanst )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "31024", "Bios 3-10-24")
- ROMX_LOAD("31024.lo", 0xf0000, 0x8000, CRC(e52b59e1) SHA1(cfcaa4d8d658df8df463108ef30695bd4ee7a617), ROM_SKIP(1) | ROM_BIOS(1) )
- ROMX_LOAD("31024.hi", 0xf0001, 0x8000, CRC(7286aefa) SHA1(dfc0e3f4936780fa62ae9ec392ce17aa65e717cd), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD("31024.lo", 0x10000, 0x8000, CRC(e52b59e1) SHA1(cfcaa4d8d658df8df463108ef30695bd4ee7a617), ROM_SKIP(1) | ROM_BIOS(1) )
+ ROMX_LOAD("31024.hi", 0x10001, 0x8000, CRC(7286aefa) SHA1(dfc0e3f4936780fa62ae9ec392ce17aa65e717cd), ROM_SKIP(1) | ROM_BIOS(1) )
ROM_SYSTEM_BIOS(1, "31025", "Bios 3-10-25")
- ROMX_LOAD("31025.lo", 0xf0000, 0x8000, CRC(1aec09bc) SHA1(51d56c97c7c1674554aa89b68945329ea967a8bc), ROM_SKIP(1) | ROM_BIOS(2) )
- ROMX_LOAD("31025.hi", 0xf0001, 0x8000, CRC(0763caa5) SHA1(48510a933dcd6efea3b14d04444f584c3e6fefeb), ROM_SKIP(1) | ROM_BIOS(2) )
+ ROMX_LOAD("31025.lo", 0x10000, 0x8000, CRC(1aec09bc) SHA1(51d56c97c7c1674554aa89b68945329ea967a8bc), ROM_SKIP(1) | ROM_BIOS(2) )
+ ROMX_LOAD("31025.hi", 0x10001, 0x8000, CRC(0763caa5) SHA1(48510a933dcd6efea3b14d04444f584c3e6fefeb), ROM_SKIP(1) | ROM_BIOS(2) )
ROM_SYSTEM_BIOS(2, "31026", "Bios 3-10-26i")
- ROMX_LOAD("31026i.lo", 0xf0000, 0x8000, CRC(670b6ab4) SHA1(8d61a0edf187f99b67eb58f5e11276deee801d17), ROM_SKIP(1) | ROM_BIOS(3) )
- ROMX_LOAD("31026i.hi", 0xf0001, 0x8000, CRC(ef01c54f) SHA1(911f95d65ab96878e5e7ebccfc4b329db47a1351), ROM_SKIP(1) | ROM_BIOS(3) )
+ ROMX_LOAD("31026i.lo", 0x10000, 0x8000, CRC(670b6ab4) SHA1(8d61a0edf187f99b67eb58f5e11276deee801d17), ROM_SKIP(1) | ROM_BIOS(3) )
+ ROMX_LOAD("31026i.hi", 0x10001, 0x8000, CRC(ef01c54f) SHA1(911f95d65ab96878e5e7ebccfc4b329db47a1351), ROM_SKIP(1) | ROM_BIOS(3) )
ROM_END
ROM_START( aplannb )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "lsl31025.lo", 0xe0000, 0x10000, CRC(8bb7229b) SHA1(31449d12884ec4e7752e6c1ce7ce9e0d044eadf2))
- ROM_LOAD16_BYTE( "lsh31025.hi", 0xe0001, 0x10000, CRC(09e5c1b9) SHA1(d42be83b4181d3733268c29df04a4d2918370f4e))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "lsl31025.lo", 0x00000, 0x10000, CRC(8bb7229b) SHA1(31449d12884ec4e7752e6c1ce7ce9e0d044eadf2))
+ ROM_LOAD16_BYTE( "lsh31025.hi", 0x00001, 0x10000, CRC(09e5c1b9) SHA1(d42be83b4181d3733268c29df04a4d2918370f4e))
ROM_END
ROM_START( apvxft )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "ft10221.lo", 0xe0000, 0x10000, CRC(8f339de0) SHA1(a6542406746eaf1ff7f9e3678c5cbe5522fb314a))
- ROM_LOAD16_BYTE( "ft10221.hi", 0xe0001, 0x10000, CRC(3b16bc31) SHA1(0592d1d81e7fd4715b0612083482db122d78c7f2))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "ft10221.lo", 0x00000, 0x10000, CRC(8f339de0) SHA1(a6542406746eaf1ff7f9e3678c5cbe5522fb314a))
+ ROM_LOAD16_BYTE( "ft10221.hi", 0x00001, 0x10000, CRC(3b16bc31) SHA1(0592d1d81e7fd4715b0612083482db122d78c7f2))
ROM_END
ROM_START( aplscar )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x40000,"bios", 0)
ROM_SYSTEM_BIOS(0, "car306", "Caracal 3.06")
- ROMX_LOAD("car306.bin", 0xc0000, 0x40000, CRC(fc271dea) SHA1(6207cfd312c9957243b8157c90a952404e43b237), ROM_BIOS(1))
+ ROMX_LOAD("car306.bin", 0x00000, 0x40000, CRC(fc271dea) SHA1(6207cfd312c9957243b8157c90a952404e43b237), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "car307", "Caracal 3.07")
- ROMX_LOAD("car307.bin", 0xc0000, 0x40000, CRC(66a01852) SHA1(b0a68c9d67921d27ba483a1c50463406c08d3085), ROM_BIOS(2))
+ ROMX_LOAD("car307.bin", 0x00000, 0x40000, CRC(66a01852) SHA1(b0a68c9d67921d27ba483a1c50463406c08d3085), ROM_BIOS(2))
ROM_END
ROM_START( apxena1 )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD("a1-r26.bin", 0xe0000, 0x20000, CRC(d29e983e) SHA1(5977df7f8d7ac2a154aa043bb6f539d96d51fcad))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD("a1-r26.bin", 0x00000, 0x20000, CRC(d29e983e) SHA1(5977df7f8d7ac2a154aa043bb6f539d96d51fcad))
ROM_END
ROM_START( apxenp2 )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "p2r02g2", "p2r02g2")
- ROMX_LOAD("p2r02g2.bin", 0xe0000, 0x20000, CRC(311bcc5a) SHA1(be6fa144322077dcf66b065e7f4e61aab8c278b4), ROM_BIOS(1))
+ ROMX_LOAD("p2r02g2.bin", 0x00000, 0x20000, CRC(311bcc5a) SHA1(be6fa144322077dcf66b065e7f4e61aab8c278b4), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "lep121s", "SCSI-Enabling ROMs")
- ROMX_LOAD("p2r01f0.bin", 0xe0000, 0x20000, CRC(bbc68f2e) SHA1(6954a52a7dda5521794151aff7a04225e9c7df77), ROM_BIOS(2))
+ ROMX_LOAD("p2r01f0.bin", 0x00000, 0x20000, CRC(bbc68f2e) SHA1(6954a52a7dda5521794151aff7a04225e9c7df77), ROM_BIOS(2))
ROM_END
ROM_START( apxeni )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "lep121", "Rom Bios 1.2.1")
- ROMX_LOAD( "lep121.bin", 0xf8000, 0x8000, CRC(948c1927) SHA1(d06bdbd6292db73c815ad1060daf055293dfddf5), ROM_BIOS(1))
+ ROMX_LOAD( "lep121.bin", 0x18000, 0x8000, CRC(948c1927) SHA1(d06bdbd6292db73c815ad1060daf055293dfddf5), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "lep121s", "SCSI-Enabling ROMs")
- ROMX_LOAD( "lep121s.bin", 0xf8000, 0x8000, CRC(296118e4) SHA1(d1feaa9704e6ce3bc10c900bdd310d9494b02304), ROM_BIOS(2))
+ ROMX_LOAD( "lep121s.bin", 0x18000, 0x8000, CRC(296118e4) SHA1(d1feaa9704e6ce3bc10c900bdd310d9494b02304), ROM_BIOS(2))
ROM_END
ROM_START( aplsbon )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "bon106", "Boinsai 1-06")
- ROMX_LOAD("bon106.bin", 0xe0000, 0x20000, CRC(98a4eb76) SHA1(e0587afa78aeb9a8803f9b9f9e457e9847b0a2b2), ROM_BIOS(1))
+ ROMX_LOAD("bon106.bin", 0x00000, 0x20000, CRC(98a4eb76) SHA1(e0587afa78aeb9a8803f9b9f9e457e9847b0a2b2), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "bon203", "Boinsai 2-03")
- ROMX_LOAD("bon203.bin", 0xe0000, 0x20000, CRC(32a0e125) SHA1(a4fcbd76952599993fa8b76aa36a96386648abb2), ROM_BIOS(2))
+ ROMX_LOAD("bon203.bin", 0x00000, 0x20000, CRC(32a0e125) SHA1(a4fcbd76952599993fa8b76aa36a96386648abb2), ROM_BIOS(2))
ROM_SYSTEM_BIOS(2, "bon10703", "Boinsai 1-07-03")
- ROMX_LOAD("bon10703.bin", 0xe0000, 0x20000, CRC(0275b3c2) SHA1(55ef4cbb7f3166f678aaa478234a42049deaba5f), ROM_BIOS(3))
+ ROMX_LOAD("bon10703.bin", 0x00000, 0x20000, CRC(0275b3c2) SHA1(55ef4cbb7f3166f678aaa478234a42049deaba5f), ROM_BIOS(3))
ROM_SYSTEM_BIOS(3, "bon20402", "Boinsai 2.03")
- ROMX_LOAD("bon20402.bin", 0xe0000, 0x20000, CRC(ac5803fb) SHA1(b8fe92711c6a38a5d9e6497e76a0929c1685c631), ROM_BIOS(4))
+ ROMX_LOAD("bon20402.bin", 0x00000, 0x20000, CRC(ac5803fb) SHA1(b8fe92711c6a38a5d9e6497e76a0929c1685c631), ROM_BIOS(4))
ROM_END
ROM_START( apxlsam )
- ROM_REGION(0x1000000,"maincpu", 0)
+ ROM_REGION(0x20000,"bios", 0)
ROM_SYSTEM_BIOS(0, "sam107", "ROM BIOS Version 1-07")
- ROMX_LOAD("sam1-07.bin", 0xe0000, 0x20000, CRC(65e05a8e) SHA1(c3cd198a129122cb05a28798e54331b06cfdd310), ROM_BIOS(1))
+ ROMX_LOAD("sam1-07.bin", 0x00000, 0x20000, CRC(65e05a8e) SHA1(c3cd198a129122cb05a28798e54331b06cfdd310), ROM_BIOS(1))
ROM_SYSTEM_BIOS(1, "sam206", "ROM BIOS Version 2-06")
- ROMX_LOAD("sam2-06.bin", 0xe0000, 0x20000, CRC(9768bb0f) SHA1(8166b77b133072f72f23debf85984eb19578ffc1), ROM_BIOS(2))
-ROM_END
-
-/* FIC VT-503 (Intel TX chipset, ITE 8679 Super I/O) */
-ROM_START( ficvt503 )
- ROM_REGION32_LE(0x40000, "isa", 0)
- ROM_SYSTEM_BIOS(0, "109gi13", "1.09GI13") /* 1997-10-02 */
- ROMX_LOAD("109gi13.bin", 0x20000, 0x20000, CRC(0c32af48) SHA1(2cce40a98598f1ed1f398975f7a90c8be4200667), ROM_BIOS(1))
- ROM_SYSTEM_BIOS(1, "109gi14", "1.09GI14") /* 1997-11-07 */
- ROMX_LOAD("109gi14.awd", 0x20000, 0x20000, CRC(588c5cc8) SHA1(710e5405850fd975b362a422bfe9bc6d6c9a36cd), ROM_BIOS(2))
- ROM_SYSTEM_BIOS(2, "109gi15", "1.09GI15") /* 1997-11-07 */
- ROMX_LOAD("109gi15.awd", 0x20000, 0x20000, CRC(649a3481) SHA1(e681c6ab55a67cec5978dfffa75fcddc2aa0de4d), ROM_BIOS(3))
- ROM_SYSTEM_BIOS(3, "109gi16", "1.09GI16") /* 2000-03-23 */
- ROMX_LOAD("109gi16.bin", 0x20000, 0x20000, CRC(a928f271) SHA1(127a83a60752cc33b3ca49774488e511ec7bac55), ROM_BIOS(4))
- ROM_SYSTEM_BIOS(4, "115gk140", "1.15GK140") /* 1999-03-03 */
- ROMX_LOAD("115gk140.awd", 0x20000, 0x20000, CRC(65e88956) SHA1(f94bb0732e00b5b0f18f4e349db24a289f8379c5), ROM_BIOS(5))
+ ROMX_LOAD("sam2-06.bin", 0x00000, 0x20000, CRC(9768bb0f) SHA1(8166b77b133072f72f23debf85984eb19578ffc1), ROM_BIOS(2))
ROM_END
ROM_START( aprpand )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "pf10226.std", 0xe0000, 0x10000, CRC(7396fb87) SHA1(a109cbad2179eec55f86c0297a59bb015461da21))
- ROM_CONTINUE( 0xe0001, 0x10000 )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "pf10226.std", 0x00000, 0x10000, CRC(7396fb87) SHA1(a109cbad2179eec55f86c0297a59bb015461da21))
+ ROM_CONTINUE( 0x00001, 0x10000 )
ROM_END
ROM_START( aprfte )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD( "1-2r2-4.486", 0xe0000, 0x20000, CRC(bccc236d) SHA1(0765299363e68cf65710a688c360a087856ece8f))
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD( "1-2r2-4.486", 0x00000, 0x20000, CRC(bccc236d) SHA1(0765299363e68cf65710a688c360a087856ece8f))
ROM_END
ROM_START( megapc )
ROM_REGION(0x40000, "isa", ROMREGION_ERASEFF)
- ROM_REGION(0x100000, "bios", 0)
- ROM_LOAD16_BYTE( "41651-bios lo.u18", 0xe0000, 0x10000, CRC(1e9bd3b7) SHA1(14fd39ec12df7fae99ccdb0484ee097d93bf8d95))
- ROM_LOAD16_BYTE( "211253-bios hi.u19", 0xe0001, 0x10000, CRC(6acb573f) SHA1(376d483db2bd1c775d46424e1176b24779591525))
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD16_BYTE( "41651-bios lo.u18", 0x00000, 0x10000, CRC(1e9bd3b7) SHA1(14fd39ec12df7fae99ccdb0484ee097d93bf8d95))
+ ROM_LOAD16_BYTE( "211253-bios hi.u19", 0x00001, 0x10000, CRC(6acb573f) SHA1(376d483db2bd1c775d46424e1176b24779591525))
ROM_END
ROM_START( megapcpl )
ROM_REGION(0x40000, "isa", ROMREGION_ERASEFF)
- ROM_REGION(0x100000, "bios", 0)
- ROM_LOAD16_BYTE( "41652.u18", 0xe0000, 0x10000, CRC(6f5b9a1c) SHA1(cae981a35a01234fcec99a96cb38075d7bf23474))
- ROM_LOAD16_BYTE( "486slc.u19", 0xe0001, 0x10000, CRC(6fb7e3e9) SHA1(c439cb5a0d83176ceb2a3555e295dc1f84d85103))
+ ROM_REGION(0x20000, "bios", 0)
+ ROM_LOAD16_BYTE( "41652.u18", 0x00000, 0x10000, CRC(6f5b9a1c) SHA1(cae981a35a01234fcec99a96cb38075d7bf23474))
+ ROM_LOAD16_BYTE( "486slc.u19", 0x00001, 0x10000, CRC(6fb7e3e9) SHA1(c439cb5a0d83176ceb2a3555e295dc1f84d85103))
ROM_END
ROM_START( megapcpla )
- ROM_REGION(0x40000, "isa", ROMREGION_ERASEFF)
- ROM_REGION(0x100000, "maincpu", 0)
- ROM_LOAD( "megapc_bios.bin", 0xc0000, 0x10000, CRC(b84938a2) SHA1(cecab72a96993db4f7c648c229b4211a8c53a380))
- ROM_CONTINUE(0xf0000, 0x10000)
+ ROM_REGION(0x40000, "bios", 0)
+ ROM_LOAD( "megapc_bios.bin", 0x00000, 0x10000, CRC(b84938a2) SHA1(cecab72a96993db4f7c648c229b4211a8c53a380))
+ ROM_CONTINUE(0x30000, 0x10000)
ROM_END
ROM_START( t2000sx )
- ROM_REGION( 0x1000000, "maincpu", 0 )
- ROM_LOAD( "014d.ic9", 0xe0000, 0x20000, CRC(e9010b02) SHA1(75688fc8e222640fa22bcc90343c6966fe0da87f))
+ ROM_REGION( 0x20000, "bios", 0 )
+ ROM_LOAD( "014d.ic9", 0x00000, 0x20000, CRC(e9010b02) SHA1(75688fc8e222640fa22bcc90343c6966fe0da87f))
ROM_END
ROM_START( pc2386 )
- ROM_REGION( 0x1000000, "maincpu", 0 )
- ROM_LOAD( "c000.bin", 0xc0000, 0x4000, CRC(33145bbf) SHA1(c49eaec19f656482e12c8bf282cd4ee5986d227d) )
- ROM_LOAD( "f000.bin", 0xf0000, 0x10000, CRC(f54a063c) SHA1(ce70ec493053afab662f51199ef9c9304a209b8e) )
+ ROM_REGION( 0x40000, "bios", 0 )
+ ROM_LOAD( "c000.bin", 0x00000, 0x4000, CRC(33145bbf) SHA1(c49eaec19f656482e12c8bf282cd4ee5986d227d) )
+ ROM_LOAD( "f000.bin", 0x30000, 0x10000, CRC(f54a063c) SHA1(ce70ec493053afab662f51199ef9c9304a209b8e) )
+ ROM_FILL(0x3fff1, 1, 0x5b) // f000:e05b is the standard at reset vector jump address
+ ROM_FILL(0x3fff2, 1, 0xe0) // why does this rom's point to nowhere sane?
+ ROM_FILL(0x3fff3, 1, 0x00) // and why does the rest of the rom look okay?
+ ROM_FILL(0x3fff4, 1, 0xf0)
- ROM_REGION( 0x2000, "gfx1", ROMREGION_ERASE00 )
ROM_REGION( 0x1000, "keyboard", 0 ) // PC2286 / PC2386 102-key keyboard
ROM_LOAD( "40211.ic801", 0x000, 0x1000, CRC(4440d981) SHA1(a76006a929f26c178e09908c66f28abc92e7744c) )
ROM_END
ROM_START( k286i )
- ROM_REGION(0x1000000,"maincpu", 0)
- ROM_LOAD16_BYTE( "81_1598", 0xf8000, 0x4000, CRC(e25a1e43) SHA1(d00b976ac94323f3867b1c256e315839c906dd5a) )
- ROM_LOAD16_BYTE( "81_1599", 0xf8001, 0x4000, CRC(08e2a17b) SHA1(a86ef116e82eb9240e60b52f76e5e510cdd393fd) )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "81_1598", 0x18000, 0x4000, CRC(e25a1e43) SHA1(d00b976ac94323f3867b1c256e315839c906dd5a) )
+ ROM_LOAD16_BYTE( "81_1599", 0x18001, 0x4000, CRC(08e2a17b) SHA1(a86ef116e82eb9240e60b52f76e5e510cdd393fd) )
ROM_END
/***************************************************************************
@@ -1657,56 +1089,45 @@ ROM_END
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-COMP ( 1984, ibm5170, 0, ibm5150, ibm5170, atcga, at_state, atcga, "International Business Machines", "IBM PC/AT 5170", MACHINE_NOT_WORKING )
-COMP ( 1985, ibm5170a, ibm5170, 0, ibm5170a, atcga, at_state, atcga, "International Business Machines", "IBM PC/AT 5170 8MHz", MACHINE_NOT_WORKING )
-COMP ( 1985, ibm5162, ibm5170, 0, ibm5162, atcga, at_state, atcga, "International Business Machines", "IBM PC/XT-286 5162", MACHINE_NOT_WORKING )
-COMP ( 1990, i8530h31, ibm5170, 0, ps2m30286, atvga, at_state, atvga, "International Business Machines", "IBM PS/2 8530-H31 (Model 30/286)", MACHINE_NOT_WORKING )
-COMP ( 1988, i8530286, ibm5170, 0, ps2m30286, atvga, at_state, atvga, "International Business Machines", "IBM PS/2 Model 30-286", MACHINE_NOT_WORKING )
-COMP ( 198?, i8535043, ibm5170, 0, at386, atvga, at_state, atvga, "International Business Machines", "IBM PS/2 8535-043 (Model 35)", MACHINE_NOT_WORKING )
-COMP ( 198?, i8550021, ibm5170, 0, at386, atvga, at_state, atvga, "International Business Machines", "IBM PS/2 8550-021 (Model 50)", MACHINE_NOT_WORKING )
-COMP ( 198?, i8550061, ibm5170, 0, at386, atvga, at_state, atvga, "International Business Machines", "IBM PS/2 8550-061 (Model 50Z)", MACHINE_NOT_WORKING )
-COMP ( 1989, i8555081, ibm5170, 0, at386, atvga, at_state, atvga, "International Business Machines", "IBM PS/2 8550-081 (Model 55SX)", MACHINE_NOT_WORKING )
-COMP ( 198?, i8580071, ibm5170, 0, at386, atvga, at_state, atvga, "International Business Machines", "IBM PS/2 8580-071 (Model 80)", MACHINE_NOT_WORKING )
-COMP ( 198?, i8580111, ibm5170, 0, at386, atvga, at_state, atvga, "International Business Machines", "IBM PS/2 8580-111 (Model 80)", MACHINE_NOT_WORKING )
-COMP ( 1989, ibmps1es, ibm5170, 0, ibmps1, atvga, at_state, atvga, "International Business Machines", "IBM PS/1 (Spanish)", MACHINE_NOT_WORKING )
-COMP ( 1987, at, ibm5170, 0, ibm5162, atcga, at_state, atcga, "<generic>", "PC/AT (CGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
-COMP ( 1987, atvga, ibm5170, 0, atvga, atvga, at_state, atvga, "<generic>", "PC/AT (VGA, MF2 Keyboard)" , MACHINE_NOT_WORKING )
-COMP ( 1988, at386, ibm5170, 0, at386, atvga, at_state, atvga, "<generic>", "PC/AT 386 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
-COMP ( 1988, ct386sx, ibm5170, 0, ct386sx, atvga, at_state, atvga, "<generic>", "NEAT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
-//COMP ( 1988, at386sx, ibm5170, 0, ct386sx, atvga, at_state, atvga, "<generic>", "PC/AT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
-COMP ( 1990, at486, ibm5170, 0, at486, atvga, at_state, atvga, "<generic>", "PC/AT 486 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
-COMP ( 1990, at586, ibm5170, 0, at586, atvga, at586_state, at586, "<generic>", "PC/AT 586 (PIIX4)", MACHINE_NOT_WORKING )
-COMP ( 1990, at586x3, ibm5170, 0, at586x3, atvga, at586_state, at586, "<generic>", "PC/AT 586 (PIIX3)", MACHINE_NOT_WORKING )
-COMP ( 1989, neat, ibm5170, 0, neat, atvga, at_state, atvga, "<generic>", "NEAT (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
-COMP ( 1989, ec1842, ibm5150, 0, ec1842, atcga, at_state, atcga, "<unknown>", "EC-1842", MACHINE_NOT_WORKING )
-COMP ( 1993, ec1849, ibm5170, 0, ec1849, atcga, at_state, atcga, "<unknown>", "EC-1849", MACHINE_NOT_WORKING )
-COMP ( 1993, megapc, 0, 0, megapc, 0, megapc_state,megapc, "Amstrad plc", "MegaPC", MACHINE_NOT_WORKING )
-COMP ( 199?, megapcpl, megapc, 0, megapcpl, 0, megapc_state,megapcpl, "Amstrad plc", "MegaPC Plus", MACHINE_NOT_WORKING )
-COMP ( 199?, megapcpla, megapc, 0, megapcpla, 0, at_state, megapcpla,"Amstrad plc", "MegaPC Plus (WINBUS chipset)", MACHINE_NOT_WORKING )
-COMP ( 1989, pc2386, ibm5170, 0, at386, atvga, at_state, atvga, "Amstrad plc", "Amstrad PC2386", MACHINE_NOT_WORKING )
-COMP ( 1991, aprfte, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot FT//ex 486 (J3 Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1991, ftsserv, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot FTs (Scorpion)", MACHINE_NOT_WORKING )
-COMP ( 1992, aprpand, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot FTs (Panther Rev F 1.02.26)", MACHINE_NOT_WORKING )
-COMP ( 1990, aplanst, ibm5170, 0, at386, atvga, at_state, atvga, "Apricot", "Apricot LANstation (Krypton Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1990, aplannb, ibm5170, 0, at386, atvga, at_state, atvga, "Apricot", "Apricot LANstation (Novell Remote Boot)", MACHINE_NOT_WORKING )
-COMP ( 1992, aplscar, ibm5170, 0, at386, atvga, at_state, atvga, "Apricot", "Apricot LS Pro (Caracal Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1992, aplsbon, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot LS Pro (Bonsai Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1988, xb42663, ibm5170, 0, at386, atvga, at_state, atvga, "Apricot", "Apricot Qi 300 (Rev D,E & F Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1988, qi600, ibm5170, 0, at386, atvga, at_state, atvga, "Apricot", "Apricot Qi 600 (Neptune Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1990, qi900, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot Qi 900 (Scorpion Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1989, apvxft, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot VX FT server", MACHINE_NOT_WORKING )
-COMP ( 1991, apxenls3, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot XEN-LS (Venus IV Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1993, apxlsam, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot XEN-LS II (Samurai Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1987, apxeni, ibm5170, 0, at386, atvga, at_state, atvga, "Apricot", "Apricot XEN-i 386 (Leopard Motherboard)" , MACHINE_NOT_WORKING )
-COMP ( 1989, xb42639, ibm5170, 0, xb42639, atvga, at_state, atvga, "Apricot", "Apricot XEN-S (Venus I Motherboard 286)" , MACHINE_NOT_WORKING )
-COMP ( 1990, xb42639a, ibm5170, 0, xb42639, atvga, at_state, atvga, "Apricot", "Apricot XEN-S (Venus II Motherboard 286)" , MACHINE_NOT_WORKING )
-COMP ( 1989, xb42664, ibm5170, 0, at386, atvga, at_state, atvga, "Apricot", "Apricot XEN-S (Venus I Motherboard 386)" , MACHINE_NOT_WORKING )
-COMP ( 1990, xb42664a, ibm5170, 0, at386, atvga, at_state, atvga, "Apricot", "Apricot XEN-S (Venus II Motherboard 386)" , MACHINE_NOT_WORKING )
-COMP ( 1993, apxena1, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot XEN PC (A1 Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1993, apxenp2, ibm5170, 0, at486, atvga, at_state, atvga, "Apricot", "Apricot XEN PC (P2 Motherboard)", MACHINE_NOT_WORKING )
-COMP ( 1990, c386sx16, ibm5170, 0, at386sx, atvga, at_state, atvga, "Commodore Business Machines", "Commodore 386SX-16", MACHINE_NOT_WORKING )
-COMP ( 1988, cmdpc30, ibm5170, 0, ibm5162, atcga, at_state, atcga, "Commodore Business Machines", "PC 30 III", MACHINE_NOT_WORKING )
-COMP ( 1995, ficpio2, ibm5170, 0, ficpio2, atvga, at_state, atpci, "FIC", "486-PIO-2", MACHINE_NOT_WORKING )
-COMP ( 1997, ficvt503, ibm5170, 0, at586, atvga, driver_device, 0, "FIC", "VT-503", MACHINE_NOT_WORKING )
-COMP ( 1985, k286i, ibm5170, 0, k286i, atcga, at_state, atcga, "Kaypro", "286i", MACHINE_NOT_WORKING )
-COMP ( 1991, t2000sx, ibm5170, 0, at386sx, atvga, at_state, atvga, "Toshiba", "T2000SX", MACHINE_NOT_WORKING )
+COMP ( 1984, ibm5170, 0, ibm5150, ibm5170, 0, at_state, at, "International Business Machines", "IBM PC/AT 5170", MACHINE_NOT_WORKING )
+COMP ( 1985, ibm5170a, ibm5170, 0, ibm5170a, 0, at_state, at, "International Business Machines", "IBM PC/AT 5170 8MHz", MACHINE_NOT_WORKING )
+COMP ( 1985, ibm5162, ibm5170, 0, ibm5162, 0, at_state, at, "International Business Machines", "IBM PC/XT-286 5162", MACHINE_NOT_WORKING )
+COMP ( 1989, ibmps1es, ibm5170, 0, ibmps1, 0, at_state, at, "International Business Machines", "IBM PS/1 (Spanish)", MACHINE_NOT_WORKING )
+COMP ( 1987, at, ibm5170, 0, ibm5162, 0, at_state, at, "<generic>", "PC/AT (CGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
+COMP ( 1987, atvga, ibm5170, 0, atvga, 0, at_state, at, "<generic>", "PC/AT (VGA, MF2 Keyboard)" , MACHINE_NOT_WORKING )
+COMP ( 1988, at386, ibm5170, 0, at386, 0, at_state, at, "<generic>", "PC/AT 386 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
+COMP ( 1988, ct386sx, ibm5170, 0, ct386sx, 0, at_state, at, "<generic>", "NEAT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
+//COMP ( 1988, at386sx, ibm5170, 0, ct386sx, 0, at_state, at, "<generic>", "PC/AT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
+COMP ( 1990, at486, ibm5170, 0, at486, 0, at_state, at, "<generic>", "PC/AT 486 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
+COMP ( 1989, neat, ibm5170, 0, neat, 0, at_state, at, "<generic>", "NEAT (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING )
+COMP ( 1989, ec1842, ibm5150, 0, ec1842, 0, at_state, at, "<unknown>", "EC-1842", MACHINE_NOT_WORKING )
+COMP ( 1993, ec1849, ibm5170, 0, ec1842, 0, at_state, at, "<unknown>", "EC-1849", MACHINE_NOT_WORKING )
+COMP ( 1993, megapc, 0, 0, megapc, 0, megapc_state, megapc, "Amstrad plc", "MegaPC", MACHINE_NOT_WORKING )
+COMP ( 199?, megapcpl, megapc, 0, megapcpl, 0, megapc_state, megapcpl, "Amstrad plc", "MegaPC Plus", MACHINE_NOT_WORKING )
+COMP ( 199?, megapcpla, megapc, 0, megapcpla, 0, at_state, megapcpla,"Amstrad plc", "MegaPC Plus (WINBUS chipset)", MACHINE_NOT_WORKING )
+COMP ( 1989, pc2386, ibm5170, 0, at386l, 0, at_state, at, "Amstrad plc", "Amstrad PC2386", MACHINE_NOT_WORKING )
+COMP ( 1991, aprfte, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FT//ex 486 (J3 Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1991, ftsserv, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FTs (Scorpion)", MACHINE_NOT_WORKING )
+COMP ( 1992, aprpand, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FTs (Panther Rev F 1.02.26)", MACHINE_NOT_WORKING )
+COMP ( 1990, aplanst, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot LANstation (Krypton Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1990, aplannb, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot LANstation (Novell Remote Boot)", MACHINE_NOT_WORKING )
+COMP ( 1992, aplscar, ibm5170, 0, at486l, 0, at_state, at, "Apricot", "Apricot LS Pro (Caracal Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1992, aplsbon, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot LS Pro (Bonsai Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1988, xb42663, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot Qi 300 (Rev D,E & F Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1988, qi600, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot Qi 600 (Neptune Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1990, qi900, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot Qi 900 (Scorpion Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1989, apvxft, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot VX FT server", MACHINE_NOT_WORKING )
+COMP ( 1991, apxenls3, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN-LS (Venus IV Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1993, apxlsam, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN-LS II (Samurai Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1987, apxeni, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-i 386 (Leopard Motherboard)" , MACHINE_NOT_WORKING )
+COMP ( 1989, xb42639, ibm5170, 0, xb42639, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus I Motherboard 286)" , MACHINE_NOT_WORKING )
+COMP ( 1990, xb42639a, ibm5170, 0, xb42639, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus II Motherboard 286)" , MACHINE_NOT_WORKING )
+COMP ( 1989, xb42664, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus I Motherboard 386)" , MACHINE_NOT_WORKING )
+COMP ( 1990, xb42664a, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus II Motherboard 386)" , MACHINE_NOT_WORKING )
+COMP ( 1993, apxena1, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN PC (A1 Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1993, apxenp2, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN PC (P2 Motherboard)", MACHINE_NOT_WORKING )
+COMP ( 1990, c386sx16, ibm5170, 0, at386sx, 0, at_state, at, "Commodore Business Machines", "Commodore 386SX-16", MACHINE_NOT_WORKING )
+COMP ( 1988, cmdpc30, ibm5170, 0, ibm5162, 0, at_state, at, "Commodore Business Machines", "PC 30 III", MACHINE_NOT_WORKING )
+COMP ( 1995, ficpio2, ibm5170, 0, ficpio2, 0, at_state, atpci, "FIC", "486-PIO-2", MACHINE_NOT_WORKING )
+COMP ( 1985, k286i, ibm5170, 0, k286i, 0, at_state, at, "Kaypro", "286i", MACHINE_NOT_WORKING )
+COMP ( 1991, t2000sx, ibm5170, 0, at386sx, 0, at_state, at, "Toshiba", "T2000SX", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/atpci.cpp b/src/mame/drivers/atpci.cpp
new file mode 100644
index 00000000000..565f916bbd7
--- /dev/null
+++ b/src/mame/drivers/atpci.cpp
@@ -0,0 +1,136 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol, Miodrag Milanovic, Carl
+
+#include "emu.h"
+#include "cpu/i386/i386.h"
+#include "bus/lpci/pci.h"
+#include "bus/lpci/i82371ab.h"
+#include "bus/lpci/i82371sb.h"
+#include "bus/lpci/i82439tx.h"
+#include "machine/at.h"
+#include "bus/pc_kbd/pc_kbdc.h"
+#include "bus/pc_kbd/keyboards.h"
+
+class at586_state : public driver_device
+{
+public:
+ at586_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu") { }
+ required_device<cpu_device> m_maincpu;
+
+};
+
+static MACHINE_CONFIG_FRAGMENT( tx_config )
+ MCFG_I82439TX_CPU( "maincpu" )
+ MCFG_I82439TX_REGION( "isa" )
+MACHINE_CONFIG_END
+
+static SLOT_INTERFACE_START( pci_devices )
+ SLOT_INTERFACE_INTERNAL("i82439tx", I82439TX)
+ SLOT_INTERFACE_INTERNAL("i82371ab", I82371AB)
+ SLOT_INTERFACE_INTERNAL("i82371sb", I82371SB)
+SLOT_INTERFACE_END
+
+static ADDRESS_MAP_START( at586_map, AS_PROGRAM, 32, at586_state )
+ AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("bank10")
+ AM_RANGE(0x000a0000, 0x000bffff) AM_NOP
+ AM_RANGE(0x00800000, 0x00800bff) AM_RAM AM_SHARE("nvram")
+ AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("isa", 0x20000)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( at586_io, AS_IO, 32, at586_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_device, read, write)
+ADDRESS_MAP_END
+
+static MACHINE_CONFIG_START( at586, at586_state )
+ MCFG_CPU_ADD("maincpu", PENTIUM, 60000000)
+ MCFG_CPU_PROGRAM_MAP(at586_map)
+ MCFG_CPU_IO_MAP(at586_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pcibus:1:i82371ab:pic8259_master", pic8259_device, inta_cb)
+
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("4M")
+ MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M,128M,256M")
+
+ MCFG_PCI_BUS_ADD("pcibus", 0)
+ MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "i82439tx", true)
+ MCFG_SLOT_OPTION_MACHINE_CONFIG("i82439tx", tx_config)
+
+ MCFG_PCI_BUS_DEVICE("pcibus:1", pci_devices, "i82371ab", true)
+
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa2", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa3", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa4", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371ab:isabus","isa5", pc_isa16_cards, nullptr, false)
+ MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
+
+ MCFG_FRAGMENT_ADD( at_softlists )
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( at586x3, at586_state )
+ MCFG_CPU_ADD("maincpu", PENTIUM, 60000000)
+ MCFG_CPU_PROGRAM_MAP(at586_map)
+ MCFG_CPU_IO_MAP(at586_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pcibus:1:i82371sb:pic8259_master", pic8259_device, inta_cb)
+
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("4M")
+ MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M,128M,256M")
+
+ MCFG_PCI_BUS_ADD("pcibus", 0)
+ MCFG_PCI_BUS_DEVICE("pcibus:0", pci_devices, "i82439tx", true)
+ MCFG_SLOT_OPTION_MACHINE_CONFIG("i82439tx", tx_config)
+
+ MCFG_PCI_BUS_DEVICE("pcibus:1", pci_devices, "i82371sb", true)
+
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa2", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa3", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa4", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD(":pcibus:1:i82371sb:isabus","isa5", pc_isa16_cards, nullptr, false)
+ MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
+
+ MCFG_FRAGMENT_ADD( at_softlists )
+MACHINE_CONFIG_END
+
+ROM_START( at586 )
+ ROM_REGION32_LE(0x40000, "isa", 0)
+ ROM_SYSTEM_BIOS(0, "sptx", "SP-586TX")
+ ROMX_LOAD("sp586tx.bin", 0x20000, 0x20000, CRC(1003d72c) SHA1(ec9224ff9b0fdfd6e462cb7bbf419875414739d6), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "unisys", "Unisys 586") // probably bad dump due to need of hack in i82439tx to work
+ ROMX_LOAD("at586.bin", 0x20000, 0x20000, CRC(717037f5) SHA1(1d49d1b7a4a40d07d1a897b7f8c827754d76f824), ROM_BIOS(2))
+
+ ROM_SYSTEM_BIOS(2, "ga586t2", "Gigabyte GA-586T2") // ITE 8679 I/O
+ ROMX_LOAD("gb_ga586t2.bin", 0x20000, 0x20000, CRC(3a50a6e1) SHA1(dea859b4f1492d0d08aacd260ed1e83e00ebac08), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(3, "5tx52", "Acorp 5TX52") // W83877TF I/O
+ ROMX_LOAD("acorp_5tx52.bin", 0x20000, 0x20000, CRC(04d69419) SHA1(983377674fef05e710c8665c14cc348c99166fb6), ROM_BIOS(4))
+ ROM_SYSTEM_BIOS(4, "txp4", "ASUS TXP4") // W83977TF-A I/O
+ ROMX_LOAD("asus_txp4.bin", 0x20000, 0x20000, CRC(a1321bb1) SHA1(92e5f14d8505119f85b148a63510617ac12bcdf3), ROM_BIOS(5))
+ROM_END
+
+ROM_START( at586x3 )
+ ROM_REGION32_LE(0x40000, "isa", 0)
+ ROM_LOAD("5hx29.bin", 0x20000, 0x20000, CRC(07719a55) SHA1(b63993fd5186cdb4f28c117428a507cd069e1f68))
+ROM_END
+
+/* FIC VT-503 (Intel TX chipset, ITE 8679 Super I/O) */
+ROM_START( ficvt503 )
+ ROM_REGION32_LE(0x40000, "isa", 0)
+ ROM_SYSTEM_BIOS(0, "109gi13", "1.09GI13") /* 1997-10-02 */
+ ROMX_LOAD("109gi13.bin", 0x20000, 0x20000, CRC(0c32af48) SHA1(2cce40a98598f1ed1f398975f7a90c8be4200667), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "109gi14", "1.09GI14") /* 1997-11-07 */
+ ROMX_LOAD("109gi14.awd", 0x20000, 0x20000, CRC(588c5cc8) SHA1(710e5405850fd975b362a422bfe9bc6d6c9a36cd), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(2, "109gi15", "1.09GI15") /* 1997-11-07 */
+ ROMX_LOAD("109gi15.awd", 0x20000, 0x20000, CRC(649a3481) SHA1(e681c6ab55a67cec5978dfffa75fcddc2aa0de4d), ROM_BIOS(3))
+ ROM_SYSTEM_BIOS(3, "109gi16", "1.09GI16") /* 2000-03-23 */
+ ROMX_LOAD("109gi16.bin", 0x20000, 0x20000, CRC(a928f271) SHA1(127a83a60752cc33b3ca49774488e511ec7bac55), ROM_BIOS(4))
+ ROM_SYSTEM_BIOS(4, "115gk140", "1.15GK140") /* 1999-03-03 */
+ ROMX_LOAD("115gk140.awd", 0x20000, 0x20000, CRC(65e88956) SHA1(f94bb0732e00b5b0f18f4e349db24a289f8379c5), ROM_BIOS(5))
+ROM_END
+
+COMP ( 1990, at586, ibm5170, 0, at586, 0, driver_device, 0, "<generic>", "PC/AT 586 (PIIX4)", MACHINE_NOT_WORKING )
+COMP ( 1990, at586x3, ibm5170, 0, at586x3, 0, driver_device, 0, "<generic>", "PC/AT 586 (PIIX3)", MACHINE_NOT_WORKING )
+COMP ( 1997, ficvt503, ibm5170, 0, at586, 0, driver_device, 0, "FIC", "VT-503", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/bfm_sc45_helper.cpp b/src/mame/drivers/bfm_sc45_helper.cpp
index d49c449a230..4c269798ba9 100644
--- a/src/mame/drivers/bfm_sc45_helper.cpp
+++ b/src/mame/drivers/bfm_sc45_helper.cpp
@@ -155,7 +155,7 @@ int find_input_strings(running_machine &machine)
{
for (int j = 0; j < 16; j++)
{
- sc4inputs[i][j].name = strformat("IN%d-%d", i, j);
+ sc4inputs[i][j].name = string_format("IN%d-%d", i, j);
sc4inputs[i][j].used = false;
}
}
diff --git a/src/mame/drivers/blackt96.cpp b/src/mame/drivers/blackt96.cpp
index ac63060d5aa..cfabbf3c0f1 100644
--- a/src/mame/drivers/blackt96.cpp
+++ b/src/mame/drivers/blackt96.cpp
@@ -44,31 +44,8 @@ Notes:
2008-07
Added Dip Locations based on Service Mode
-
-The video system is a little weird, and looks like it was overdesigned for
-what the hardware is capable of.
-
-The video RAM can be viewed as 8 'banks', the first bank is the sprite 'list'
-The other video banks contain 1x32 tile strips which are the sprites.
-
-For every tile strip the first bank contains an x/y position, entries
-which would coincide with strips in the first bank are left blank, presumably
-due to this bank being the actual list.
-
-This would suggest the hardware is capable of drawing 31x32 (992) sprites,
-each made of 1x32 tile strips, however the game only ever appears to use 3
-banks of tile strips (96 sprites)
-
-In practice it seems like the hardware can probably only draw these 3 banks
-as separate layers with seemingly hardcoded priority levels, despite the odd
-design.
-
-Furthermore there are two sets of graphics, background tiles and 'sprite'
-tiles which are of different bitdepths, but are addressed in the same way.
-
-Tilemap hookup is just to make viewing easier, it's not used for rendering
-
-There is also an additional 8x8 text layer..
+The hardware is cloned from 'snk68' with some extra capabilities
+the drivers can probably be merged.
Bugs:
@@ -88,7 +65,7 @@ There are some unmapped writes past the end of text ram too
#include "cpu/pic16c5x/pic16c5x.h"
#include "cpu/m68000/m68000.h"
#include "sound/okim6295.h"
-
+#include "video/snk68_spr.h"
class blackt96_state : public driver_device
{
@@ -96,27 +73,13 @@ public:
blackt96_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_tilemapram(*this, "tilemapram"),
- m_spriteram0(*this, "spriteram0"),
- m_spriteram1(*this, "spriteram1"),
- m_spriteram2(*this, "spriteram2"),
- m_spriteram3(*this, "spriteram3"),
- m_spriteram4(*this, "spriteram4"),
- m_spriteram5(*this, "spriteram5"),
- m_spriteram6(*this, "spriteram6"),
- m_spriteram7(*this, "spriteram7"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_sprites(*this, "sprites")
+ { }
required_shared_ptr<UINT16> m_tilemapram;
- required_shared_ptr<UINT16> m_spriteram0;
- required_shared_ptr<UINT16> m_spriteram1;
- required_shared_ptr<UINT16> m_spriteram2;
- required_shared_ptr<UINT16> m_spriteram3;
- required_shared_ptr<UINT16> m_spriteram4;
- required_shared_ptr<UINT16> m_spriteram5;
- required_shared_ptr<UINT16> m_spriteram6;
- required_shared_ptr<UINT16> m_spriteram7;
DECLARE_WRITE16_MEMBER(blackt96_c0000_w);
DECLARE_WRITE16_MEMBER(blackt96_80000_w);
DECLARE_READ_LINE_MEMBER(PIC16C5X_T0_clk_r);
@@ -126,147 +89,35 @@ public:
DECLARE_READ8_MEMBER(blackt96_soundio_port02_r);
DECLARE_WRITE8_MEMBER(blackt96_soundio_port02_w);
+ void tile_callback(int &tile, int& fx, int& fy, int& region);
+
DECLARE_READ16_MEMBER( random_r )
{
return machine().rand();
}
- DECLARE_WRITE16_MEMBER(bg_videoram0_w);
- DECLARE_WRITE16_MEMBER(bg_videoram1_w);
- DECLARE_WRITE16_MEMBER(bg_videoram2_w);
- DECLARE_WRITE16_MEMBER(bg_videoram3_w);
- DECLARE_WRITE16_MEMBER(bg_videoram4_w);
- DECLARE_WRITE16_MEMBER(bg_videoram5_w);
- DECLARE_WRITE16_MEMBER(bg_videoram6_w);
- DECLARE_WRITE16_MEMBER(bg_videoram7_w);
-
- UINT16* m_spriteram[8];
- tilemap_t *m_bg_tilemap[8];
UINT8 m_txt_bank;
- TILE_GET_INFO_MEMBER(get_bg0_tile_info);
- TILE_GET_INFO_MEMBER(get_bg1_tile_info);
- TILE_GET_INFO_MEMBER(get_bg2_tile_info);
- TILE_GET_INFO_MEMBER(get_bg3_tile_info);
- TILE_GET_INFO_MEMBER(get_bg4_tile_info);
- TILE_GET_INFO_MEMBER(get_bg5_tile_info);
- TILE_GET_INFO_MEMBER(get_bg6_tile_info);
- TILE_GET_INFO_MEMBER(get_bg7_tile_info);
virtual void video_start() override;
UINT32 screen_update_blackt96(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_strip(bitmap_ind16 &bitmap, const rectangle &cliprect, int page, int column);
- void draw_page(bitmap_ind16 &bitmap, const rectangle &cliprect, int page);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
-};
+ required_device<snk68_spr_device> m_sprites;
-#define GET_INFO( ram ) \
- int tileno = (ram[tile_index*2+1] & 0x1fff); \
- int rgn = (ram[tile_index*2+1] & 0x2000) >> 13; \
- int flipyx = (ram[tile_index*2+1] & 0xc000)>>14; \
- int col = (ram[tile_index*2] & 0x00ff); \
- if (rgn==1) col >>=4; \
- SET_TILE_INFO_MEMBER(1-rgn, tileno, col, TILE_FLIPYX(flipyx));
-
-TILE_GET_INFO_MEMBER(blackt96_state::get_bg0_tile_info){ GET_INFO(m_spriteram0); }
-TILE_GET_INFO_MEMBER(blackt96_state::get_bg1_tile_info){ GET_INFO(m_spriteram1); }
-TILE_GET_INFO_MEMBER(blackt96_state::get_bg2_tile_info){ GET_INFO(m_spriteram2); }
-TILE_GET_INFO_MEMBER(blackt96_state::get_bg3_tile_info){ GET_INFO(m_spriteram3); }
-TILE_GET_INFO_MEMBER(blackt96_state::get_bg4_tile_info){ GET_INFO(m_spriteram4); }
-TILE_GET_INFO_MEMBER(blackt96_state::get_bg5_tile_info){ GET_INFO(m_spriteram5); }
-TILE_GET_INFO_MEMBER(blackt96_state::get_bg6_tile_info){ GET_INFO(m_spriteram6); }
-TILE_GET_INFO_MEMBER(blackt96_state::get_bg7_tile_info){ GET_INFO(m_spriteram7); }
-
-WRITE16_MEMBER(blackt96_state::bg_videoram0_w) { COMBINE_DATA(&m_spriteram0[offset]); m_bg_tilemap[0]->mark_tile_dirty(offset/2); }
-WRITE16_MEMBER(blackt96_state::bg_videoram1_w) { COMBINE_DATA(&m_spriteram1[offset]); m_bg_tilemap[1]->mark_tile_dirty(offset/2); }
-WRITE16_MEMBER(blackt96_state::bg_videoram2_w) { COMBINE_DATA(&m_spriteram2[offset]); m_bg_tilemap[2]->mark_tile_dirty(offset/2); }
-WRITE16_MEMBER(blackt96_state::bg_videoram3_w) { COMBINE_DATA(&m_spriteram3[offset]); m_bg_tilemap[3]->mark_tile_dirty(offset/2); }
-WRITE16_MEMBER(blackt96_state::bg_videoram4_w) { COMBINE_DATA(&m_spriteram4[offset]); m_bg_tilemap[4]->mark_tile_dirty(offset/2); }
-WRITE16_MEMBER(blackt96_state::bg_videoram5_w) { COMBINE_DATA(&m_spriteram5[offset]); m_bg_tilemap[5]->mark_tile_dirty(offset/2); }
-WRITE16_MEMBER(blackt96_state::bg_videoram6_w) { COMBINE_DATA(&m_spriteram6[offset]); m_bg_tilemap[6]->mark_tile_dirty(offset/2); }
-WRITE16_MEMBER(blackt96_state::bg_videoram7_w) { COMBINE_DATA(&m_spriteram7[offset]); m_bg_tilemap[7]->mark_tile_dirty(offset/2); }
+};
void blackt96_state::video_start()
{
- m_bg_tilemap[0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(blackt96_state::get_bg0_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
- m_bg_tilemap[1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(blackt96_state::get_bg1_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
- m_bg_tilemap[2] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(blackt96_state::get_bg2_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
- m_bg_tilemap[3] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(blackt96_state::get_bg3_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
- m_bg_tilemap[4] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(blackt96_state::get_bg4_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
- m_bg_tilemap[5] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(blackt96_state::get_bg5_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
- m_bg_tilemap[6] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(blackt96_state::get_bg6_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
- m_bg_tilemap[7] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(blackt96_state::get_bg7_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 32, 32);
-
- m_spriteram[0] = m_spriteram0;
- m_spriteram[1] = m_spriteram1;
- m_spriteram[2] = m_spriteram2;
- m_spriteram[3] = m_spriteram3;
- m_spriteram[4] = m_spriteram4;
- m_spriteram[5] = m_spriteram5;
- m_spriteram[6] = m_spriteram6;
- m_spriteram[7] = m_spriteram7;
-}
-
-void blackt96_state::draw_strip(bitmap_ind16 &bitmap, const rectangle &cliprect, int page, int column)
-{
- /* the very first 'page' in the spriteram contains the x/y positions for each tile strip */
- gfx_element *gfxbg = m_gfxdecode->gfx(0);
- gfx_element *gfxspr = m_gfxdecode->gfx(1);
-
- int base = column * (0x80/2);
- base += page * 2;
-
- /* ---- ---- ---x xxxx
- xxxx ---y yyyy yyyy */
-
- int xx= ((m_spriteram[0][base+0]&0x001f)<<4) | (m_spriteram[0][base+1]&0xf000)>>12;
- int yy = ((m_spriteram[0][base+1]&0x1ff));
-
- if (xx&0x100) xx-=0x200;
- yy = 0x1ff-yy;
- if (yy&0x100) yy-=0x200;
-
- yy -= 15;
-
- UINT16* base2 = m_spriteram[page]+column * (0x80/2);
- for (int y=0;y<32;y++)
- {
- /* -Xtt tttt tttt tttt
- ---- ---- cccc cccc */
-
- UINT16 tile = (base2[y*2+1]&0x3fff);
- UINT16 flipx = (base2[y*2+1]&0x4000);
- UINT16 colour = (base2[y*2]&0x00ff);
-
- if (tile&0x2000)
- {
- gfxbg->transpen(bitmap,cliprect,tile&0x1fff,colour>>4,flipx,0,xx,yy+y*16,0);
- }
- else
- {
- gfxspr->transpen(bitmap,cliprect,tile&0x1fff,colour,flipx,0,xx,yy+y*16,0);
- }
- }
}
-void blackt96_state::draw_page(bitmap_ind16 &bitmap, const rectangle &cliprect, int page)
-{
- for (int strip=0;strip<32;strip++)
- {
- draw_strip(bitmap, cliprect, page, strip);
- }
-}
UINT32 blackt96_state::screen_update_blackt96(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
- draw_page(bitmap, cliprect, 2); // bg
- draw_page(bitmap, cliprect, 3); // lower pri sprites
- draw_page(bitmap, cliprect, 1); // higher pri sprites
-
+ m_sprites->draw_sprites_all(bitmap, cliprect);
/* Text Layer */
int count = 0;
@@ -279,7 +130,7 @@ UINT32 blackt96_state::screen_update_blackt96(screen_device &screen, bitmap_ind1
{
UINT16 tile = (m_tilemapram[count*2]&0xff);
tile += m_txt_bank * 0x100;
- gfx->transpen(bitmap,cliprect,tile,0,0,0,x*8,-16+y*8,0);
+ gfx->transpen(bitmap,cliprect,tile,0,0,0,x*8,y*8,0);
count++;
}
}
@@ -319,17 +170,7 @@ static ADDRESS_MAP_START( blackt96_map, AS_PROGRAM, 16, blackt96_state )
AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW2")
AM_RANGE(0x100000, 0x100fff) AM_RAM AM_SHARE("tilemapram") // text tilemap
- AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(bg_videoram0_w) AM_SHARE("spriteram0") // this is the 'list'
- AM_RANGE(0x201000, 0x201fff) AM_RAM_WRITE(bg_videoram1_w) AM_SHARE("spriteram1") // sprites layer 0
- AM_RANGE(0x202000, 0x202fff) AM_RAM_WRITE(bg_videoram2_w) AM_SHARE("spriteram2") // bg layer?
- AM_RANGE(0x203000, 0x203fff) AM_RAM_WRITE(bg_videoram3_w) AM_SHARE("spriteram3") // sprites layer 1
- // the following potentially exist (the ram is cleared, there is room for entries in the 'spriteram0' region
- // but they never get used..)
- AM_RANGE(0x204000, 0x204fff) AM_RAM_WRITE(bg_videoram4_w) AM_SHARE("spriteram4")
- AM_RANGE(0x205000, 0x205fff) AM_RAM_WRITE(bg_videoram5_w) AM_SHARE("spriteram5")
- AM_RANGE(0x206000, 0x206fff) AM_RAM_WRITE(bg_videoram6_w) AM_SHARE("spriteram6")
- AM_RANGE(0x207000, 0x207fff) AM_RAM_WRITE(bg_videoram7_w) AM_SHARE("spriteram7")
-
+ AM_RANGE(0x200000, 0x207fff) AM_DEVREADWRITE("sprites", snk68_spr_device, spriteram_r, spriteram_w) AM_SHARE("spriteram") // only partially populated
AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0xc00000, 0xc03fff) AM_RAM // main ram
@@ -368,108 +209,6 @@ static INPUT_PORTS_START( blackt96 )
PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
-#if 0
- PORT_START("IN2")
- PORT_DIPNAME( 0x0001, 0x0001, "2" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
-
- PORT_START("IN3")
- PORT_DIPNAME( 0x0001, 0x0001, "3" )
- PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
- PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
-#endif
-
/* Dipswitch Port A */
PORT_START("DSW1")
PORT_DIPNAME( 0x0300, 0x0000, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!7,!8")
@@ -589,6 +328,21 @@ WRITE8_MEMBER(blackt96_state::blackt96_soundio_port02_w)
{
}
+void blackt96_state::tile_callback(int &tile, int& fx, int& fy, int& region)
+{
+ fx = tile & 0x4000;
+ fy = tile & 0x8000;
+ tile &= 0x3fff;
+
+ if (tile & 0x2000)
+ {
+ region = 0;
+ }
+ else
+ {
+ region = 1;
+ }
+}
static MACHINE_CONFIG_START( blackt96, blackt96_state )
@@ -611,13 +365,18 @@ static MACHINE_CONFIG_START( blackt96, blackt96_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(256, 256)
// MCFG_SCREEN_VISIBLE_AREA(0*8, 16*32-1, 0*8, 16*32-1)
- MCFG_SCREEN_VISIBLE_AREA(0*8, 256-1, 0*8, 224-1)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 256-1, 2*8, 240-1)
MCFG_SCREEN_UPDATE_DRIVER(blackt96_state, screen_update_blackt96)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 0x800)
MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB)
+ MCFG_DEVICE_ADD("sprites", SNK68_SPR, 0)
+ MCFG_SNK68_SPR_GFXDECODE("gfxdecode")
+ MCFG_SNK68_SPR_PALETTE("palette")
+ MCFG_SNK68_SPR_SET_TILE_INDIRECT( blackt96_state, tile_callback )
+ MCFG_SNK68_SPR_NO_PARTIAL
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
diff --git a/src/mame/drivers/blmbycar.cpp b/src/mame/drivers/blmbycar.cpp
index b3bef4ec1c6..a23016b3b04 100644
--- a/src/mame/drivers/blmbycar.cpp
+++ b/src/mame/drivers/blmbycar.cpp
@@ -329,7 +329,7 @@ MACHINE_START_MEMBER(blmbycar_state,blmbycar)
{
save_item(NAME(m_pot_wheel));
save_item(NAME(m_old_val));
-
+
membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
}
@@ -377,7 +377,7 @@ MACHINE_CONFIG_END
MACHINE_START_MEMBER(blmbycar_state,watrball)
{
save_item(NAME(m_retvalue));
-
+
membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
}
diff --git a/src/mame/drivers/bublbobl.cpp b/src/mame/drivers/bublbobl.cpp
index f79a6e7c61a..a14e4eda207 100644
--- a/src/mame/drivers/bublbobl.cpp
+++ b/src/mame/drivers/bublbobl.cpp
@@ -1897,7 +1897,7 @@ GAME( 1986, boblbobl, bublbobl, boblbobl, boblbobl, bublbobl_state, bublbobl
GAME( 1986, sboblbobl, bublbobl, boblbobl, sboblbobl, bublbobl_state, bublbobl, ROT0, "bootleg (Datsu)", "Super Bobble Bobble (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, sboblbobla, bublbobl, boblbobl, boblbobl, bublbobl_state, bublbobl, ROT0, "bootleg", "Super Bobble Bobble (bootleg, set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, sboblboblb, bublbobl, boblbobl, sboblboblb, bublbobl_state, bublbobl, ROT0, "bootleg", "Super Bobble Bobble (bootleg, set 3)", MACHINE_SUPPORTS_SAVE )
-GAME( 1986, sboblbobld, bublbobl, boblbobl, sboblboblb, bublbobl_state, bublbobl, ROT0, "bootleg", "Super Bobble Bobble (bootleg, set 4)", MACHINE_SUPPORTS_SAVE )
+GAME( 1986, sboblbobld, bublbobl, boblbobl, sboblboblb, bublbobl_state, bublbobl, ROT0, "bootleg", "Super Bobble Bobble (bootleg, set 4)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, sboblboblc, bublbobl, boblbobl, sboblboblb, bublbobl_state, bublbobl, ROT0, "bootleg", "Super Bubble Bobble (bootleg)", MACHINE_SUPPORTS_SAVE ) // the title screen on this one isn't hacked
GAME( 1986, bub68705, bublbobl, bub68705, bublbobl, bublbobl_state, bublbobl, ROT0, "bootleg", "Bubble Bobble (bootleg with 68705)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/cabal.cpp b/src/mame/drivers/cabal.cpp
index d60976bc679..9f41c09a89a 100644
--- a/src/mame/drivers/cabal.cpp
+++ b/src/mame/drivers/cabal.cpp
@@ -648,6 +648,38 @@ ROM_START( cabala )
ROM_LOAD( "epr-a-1.1u", 0x00000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) )
ROM_END
+
+
+ROM_START( cabaluk )
+ ROM_REGION( 0x50000, "maincpu", 0 ) /* 64k for cpu code */
+ ROM_LOAD16_BYTE( "9-7H.BIN", 0x00000, 0x10000, CRC(f66378e5) SHA1(b3802f24863f857506ae1aeddc4e5c2908810695) )
+ ROM_LOAD16_BYTE( "7-6H.BIN", 0x00001, 0x10000, CRC(960991ac) SHA1(7e3ab0673585424206d791e8b0ed6af38e2ae8a9) )
+ ROM_LOAD16_BYTE( "8-7K.BIN", 0x20000, 0x10000, CRC(82160ab0) SHA1(a486f30ec3068025b690da4c1ae7295e79e7cd74) )
+ ROM_LOAD16_BYTE( "6-6K.BIN", 0x20001, 0x10000, CRC(7ef2ecc7) SHA1(43d621e2e7cfea8d906a968047817e23a3e4d047) )
+
+ ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound cpu code */
+ ROM_LOAD( "4-3n", 0x0000, 0x2000, CRC(4038eff2) SHA1(0bcafc1b78c3bef9a0e9b822c482ea4a942fd180) )
+ ROM_LOAD( "3-3p", 0x8000, 0x8000, CRC(d9defcbf) SHA1(f26b10b1dbe5aa6446f70fd18e5f1379455578ec) )
+
+ ROM_REGION( 0x4000, "gfx1", 0 )
+ ROM_LOAD( "5-6s", 0x00000, 0x04000, CRC(6a76955a) SHA1(733cb4b862b5dac97c2641b58f2362471e62fcf2) ) /* characters */
+
+ ROM_REGION( 0x80000, "gfx2", 0 )
+ ROM_LOAD( "tad-2.7s", 0x00000, 0x80000, CRC(13ca7ae1) SHA1(b26bb4876a6518e3809e0fa4d442616508b3e7e8) ) /* tiles */
+
+ ROM_REGION( 0x80000, "gfx3", 0 )
+ ROM_LOAD( "tad-1.5e", 0x00000, 0x80000, CRC(8324a7fe) SHA1(aed4470df35ec18e65e35bddc9c217a5019fdcbf) ) /* sprites */
+
+
+ ROM_REGION( 0x10000, "adpcm1", 0 ) /* Samples */
+ ROM_LOAD( "2-1s", 0x00000, 0x10000, CRC(850406b4) SHA1(23ac1650c6d6f35607a5264b3aa89868401a645a) )
+
+ ROM_REGION( 0x10000, "adpcm2", 0 ) /* Samples */
+ ROM_LOAD( "1-1u", 0x00000, 0x10000, CRC(8b3e0789) SHA1(b1450db1b1bada237c90930623e4def321099f13) )
+ROM_END
+
+
+
ROM_START( cabalus )
ROM_REGION( 0x50000, "maincpu", 0 ) /* 64k for cpu code */
ROM_LOAD16_BYTE( "h7_512.bin", 0x00000, 0x10000, CRC(8fe16fb4) SHA1(fedb2d0c6c21516f68cfa99093772fe8fa862389) )
@@ -855,10 +887,11 @@ DRIVER_INIT_MEMBER(cabal_state,cabalbl2)
}
-GAME( 1988, cabal, 0, cabal, cabalj, cabal_state, cabal, ROT0, "TAD Corporation", "Cabal (World, Joystick version)", MACHINE_SUPPORTS_SAVE )
-GAME( 1989, cabala, cabal, cabal, cabalj, cabal_state, cabal, ROT0, "TAD Corporation (Alpha Trading license)", "Cabal (Alpha Trading)", MACHINE_SUPPORTS_SAVE ) // korea?
-GAME( 1988, cabalbl, cabal, cabalbl, cabalbl, driver_device, 0, ROT0, "bootleg (Red Corporation)", "Cabal (bootleg of Joystick version, set 1, alternate sound hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1988, cabalbl2,cabal, cabalbl2,cabalj, cabal_state, cabalbl2,ROT0, "bootleg", "Cabal (bootleg of Joystick version, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, cabal, 0, cabal, cabalj, cabal_state, cabal, ROT0, "TAD Corporation", "Cabal (World, Joystick)", MACHINE_SUPPORTS_SAVE )
+GAME( 1989, cabala, cabal, cabal, cabalj, cabal_state, cabal, ROT0, "TAD Corporation (Alpha Trading license)", "Cabal (Korea?, Joystick)", MACHINE_SUPPORTS_SAVE ) // korea?
+GAME( 1988, cabalbl, cabal, cabalbl, cabalbl,driver_device, 0, ROT0, "bootleg (Red Corporation)", "Cabal (bootleg of Joystick version, set 1, alternate sound hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1988, cabalbl2,cabal, cabalbl2,cabalj, cabal_state, cabalbl2,ROT0, "bootleg", "Cabal (bootleg of Joystick version, set 2)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, cabalus, cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 1, Trackball version)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, cabalus2,cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 2, Trackball version)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, cabalus, cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 1, Trackball)", MACHINE_SUPPORTS_SAVE )
+GAME( 1988, cabalus2,cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 2, Trackball)", MACHINE_SUPPORTS_SAVE )
+GAME( 1989, cabaluk, cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Electrocoin license)", "Cabal (UK, Trackball)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/cidelsa.cpp b/src/mame/drivers/cidelsa.cpp
index 6d2d91c21b1..3ccb993621b 100644
--- a/src/mame/drivers/cidelsa.cpp
+++ b/src/mame/drivers/cidelsa.cpp
@@ -460,7 +460,7 @@ static MACHINE_CONFIG_START( draco, draco_state )
MCFG_CPU_ADD(COP402N_TAG, COP402, DRACO_SND_CHR1)
MCFG_CPU_PROGRAM_MAP(draco_sound_map)
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED )
+ MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false )
MCFG_COP400_WRITE_D_CB(WRITE8(draco_state, sound_bankswitch_w))
MCFG_COP400_WRITE_G_CB(WRITE8(draco_state, sound_g_w))
MCFG_COP400_READ_L_CB(READ8(draco_state, psg_r))
diff --git a/src/mame/drivers/cobra.cpp b/src/mame/drivers/cobra.cpp
index 8062af06612..30fc021028b 100644
--- a/src/mame/drivers/cobra.cpp
+++ b/src/mame/drivers/cobra.cpp
@@ -156,7 +156,7 @@
0x000ac: Viewport center Y
0x00114: xxxxxxxx xxxxxxxx -------- -------- Framebuffer pixel read line count
- -------- -------- xxxxxxxx xxxxxxxx Framebuffer pixel read pixel count
+ -------- -------- xxxxxxxx xxxxxxxx Framebuffer pixel read pixel count
0x00118: xxxxxxxx xxxxxxxx -------- -------- Framebuffer pixel read X pos
-------- -------- xxxxxxxx xxxxxxxx Framebuffer pixel read Y pos
@@ -2668,7 +2668,7 @@ void cobra_renderer::gfx_fifo_exec()
case 0x0e0000: buffer = &m_overlay->pix32(y+i); break;
case 0x000800: buffer = &m_zbuffer->pix32(y+i); break;
case 0x000200: buffer = &m_stencil->pix32(y+i); break;
-
+
default:
{
fatalerror("gfxfifo_exec: fb read from buffer %08X!\n", m_gfx_gram[0x80100/4]);
diff --git a/src/mame/drivers/cps3.cpp b/src/mame/drivers/cps3.cpp
index 8ec2c17c68a..56097b63472 100644
--- a/src/mame/drivers/cps3.cpp
+++ b/src/mame/drivers/cps3.cpp
@@ -774,7 +774,7 @@ void cps3_state::init_common(void)
// flash roms
for (int simmnum = 0; simmnum < 7; simmnum++)
for (int chipnum = 0; chipnum < 8; chipnum++)
- m_simm[simmnum][chipnum] = machine().device<fujitsu_29f016a_device>(strformat("simm%d.%d", simmnum + 1, chipnum).c_str());
+ m_simm[simmnum][chipnum] = machine().device<fujitsu_29f016a_device>(string_format("simm%d.%d", simmnum + 1, chipnum).c_str());
m_eeprom = std::make_unique<UINT32[]>(0x400/4);
machine().device<nvram_device>("eeprom")->set_base(m_eeprom.get(), 0x400);
diff --git a/src/mame/drivers/dvk_kcgd.cpp b/src/mame/drivers/dvk_kcgd.cpp
index eb2236cee5d..6ddebb26b09 100644
--- a/src/mame/drivers/dvk_kcgd.cpp
+++ b/src/mame/drivers/dvk_kcgd.cpp
@@ -307,7 +307,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(kcgd_state::scanline_callback)
offset = BIT(m_video.status, KCGD_STATUS_PAGE) ? (KCGD_PAGE_1 >> 1) : (KCGD_PAGE_0 >> 1);
- DBG_LOG(2,"scanline_cb", ("frame %" I64FMT "d y %.3d page %d offset %04X *offset %04X\n",
+ DBG_LOG(2,"scanline_cb", ("frame %d y %.3d page %d offset %04X *offset %04X\n",
m_screen->frame_number(), BIT(m_video.status, KCGD_STATUS_PAGE),
y, offset + y, m_videoram[offset + y]));
diff --git a/src/mame/drivers/esq5505.cpp b/src/mame/drivers/esq5505.cpp
index 928ccee913c..fa0d3dc8a56 100644
--- a/src/mame/drivers/esq5505.cpp
+++ b/src/mame/drivers/esq5505.cpp
@@ -582,7 +582,7 @@ INPUT_CHANGED_MEMBER(esq5505_state::key_stroke)
}
else if (val == 0x02)
{
-// printf("Analog tests!\n");
+// printf("Analog tests!\n");
m_panel->xmit_char(54 | 0x80); m_panel->xmit_char(0); // Preset down
m_panel->xmit_char(8 | 0x80); m_panel->xmit_char(0); // Compare down
m_panel->xmit_char(8); m_panel->xmit_char(0); // Compare up
@@ -595,7 +595,7 @@ INPUT_CHANGED_MEMBER(esq5505_state::key_stroke)
if (val < 20) val += shift;
if (oldval == 0 && newval == 1)
{
- // printf("key pressed %d\n", val);
+ // printf("key pressed %d\n", val);
m_panel->xmit_char(val);
m_panel->xmit_char(0x00);
}
@@ -794,27 +794,27 @@ INPUT_PORTS_END
static INPUT_PORTS_START( sq1 )
#if KEYBOARD_HACK
PORT_START("KEY0")
- PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 148) PORT_NAME("PITCH") // 148=PITCH (lo 1)
- PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 149) PORT_NAME("CONTROL") // 149=CONTROL (hi 1)
- PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 132) PORT_NAME("ENV1") // 132=ENV1 (lo 2)
- PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 133) PORT_NAME("CLICK") // 133=CLICK (hi 2)
- PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 182) PORT_NAME("LFO") // 182=LFO (lo 3)
- PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 183) PORT_NAME("SONG") // 183=SONG (hi 3)
- PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 134) PORT_NAME("FILTER") // 134=FILTER (lo 4)
- PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 135) PORT_NAME("SEQ") // 135=SEQ (hi 4)
- PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 142) PORT_NAME("ENV2") // 142=ENV2 (lo 5)
- PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 143) PORT_NAME("EVENT") // 143=EVENT (hi 5)
- PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 150) PORT_NAME("AMP") // 150=AMP (lo 6)
- PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 151) PORT_NAME("PARAM") // 151=PARAM (hi 6)
- PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 166) PORT_NAME("OUTPUT") // 166=OUTPUT (lo 7)
- PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 167) PORT_NAME("MIX") // 167=MIX (hi 7)
- PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 158) PORT_NAME("P. EFFECT") // 158=P.EFFECT (lo 8)
- PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 159) PORT_NAME("S. EFFECT") // 159=S.EFFECT (hi 8)
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 148) PORT_NAME("PITCH") // 148=PITCH (lo 1)
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 149) PORT_NAME("CONTROL") // 149=CONTROL (hi 1)
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 132) PORT_NAME("ENV1") // 132=ENV1 (lo 2)
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 133) PORT_NAME("CLICK") // 133=CLICK (hi 2)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 182) PORT_NAME("LFO") // 182=LFO (lo 3)
+ PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 183) PORT_NAME("SONG") // 183=SONG (hi 3)
+ PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 134) PORT_NAME("FILTER") // 134=FILTER (lo 4)
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 135) PORT_NAME("SEQ") // 135=SEQ (hi 4)
+ PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 142) PORT_NAME("ENV2") // 142=ENV2 (lo 5)
+ PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 143) PORT_NAME("EVENT") // 143=EVENT (hi 5)
+ PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 150) PORT_NAME("AMP") // 150=AMP (lo 6)
+ PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 151) PORT_NAME("PARAM") // 151=PARAM (hi 6)
+ PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 166) PORT_NAME("OUTPUT") // 166=OUTPUT (lo 7)
+ PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 167) PORT_NAME("MIX") // 167=MIX (hi 7)
+ PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 158) PORT_NAME("P. EFFECT") // 158=P.EFFECT (lo 8)
+ PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 159) PORT_NAME("S. EFFECT") // 159=S.EFFECT (hi 8)
PORT_START("KEY1")
- PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 174) PORT_NAME("MIDI") // 174=MIDI (lo 9)
- PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 175) PORT_NAME("SYSTEM") // 175=SYSTEM (hi 9)
- PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 164) PORT_NAME("WAVE") // 164=WAVE (lo 0)
- PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 165) PORT_NAME("LOCATE") // 165=LOCATE (hi 0)
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 174) PORT_NAME("MIDI") // 174=MIDI (lo 9)
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 175) PORT_NAME("SYSTEM") // 175=SYSTEM (hi 9)
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 164) PORT_NAME("WAVE") // 164=WAVE (lo 0)
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 165) PORT_NAME("LOCATE") // 165=LOCATE (hi 0)
PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 144) PORT_NAME("TRACK 1") // 144=Track 1
PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 160) PORT_NAME("TRACK 2") // 160=Track 2
PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 152) PORT_NAME("TRACK 3") // 152=Track 3
@@ -828,8 +828,8 @@ static INPUT_PORTS_START( sq1 )
PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 140) PORT_NAME("PROG DN") // 140=ProgDn
PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 141) PORT_NAME("PROG UP") // 141=ProgUp
PORT_START("KEY2")
- PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 156) PORT_NAME("ROM/INT SELECT +") // 156=ROM/INT Select 189=track +
- PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 157) PORT_NAME("ROM/INT SELECT -") // 157=ROM/INT Select 190=track -
+ PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 156) PORT_NAME("ROM/INT SELECT +") // 156=ROM/INT Select 189=track +
+ PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 157) PORT_NAME("ROM/INT SELECT -") // 157=ROM/INT Select 190=track -
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 180) PORT_NAME("SOUND SELECT") // 180=SOUND Select
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 181) PORT_NAME("SOUND EDIT") // 181=SOUND Edit
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S') PORT_CHANGED_MEMBER(DEVICE_SELF, esq5505_state, key_stroke, 184) PORT_NAME("SEQ EDIT") // 184=SEQ Edit
diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp
index 43bdd8337c8..45b4181c393 100644
--- a/src/mame/drivers/fidel6502.cpp
+++ b/src/mame/drivers/fidel6502.cpp
@@ -3,7 +3,7 @@
/******************************************************************************
Fidelity Electronics 6502 based board driver
-
+
******************************************************************************
Champion Sensory Chess Challenger (CSC)
@@ -286,7 +286,7 @@ public:
// devices/pointers
optional_device<pia6821_device> m_6821pia;
optional_device<generic_slot_device> m_cart;
-
+
TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); }
TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); }
@@ -309,7 +309,7 @@ public:
DECLARE_WRITE8_MEMBER(sc12_control_w);
DECLARE_READ8_MEMBER(sc12_input_r);
DECLARE_READ8_MEMBER(sc12_cart_r);
-
+
// 6080/6092/6093 (Excellence)
DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch);
DECLARE_READ8_MEMBER(fexcelv_speech_r);
@@ -331,7 +331,7 @@ void fidel6502_state::csc_prepare_display()
{
// 7442 0-8: led select, input mux
m_inp_mux = 1 << m_led_select & 0x3ff;
-
+
// 7442 9: speaker out
m_speaker->level_w(m_inp_mux >> 9 & 1);
@@ -374,7 +374,7 @@ WRITE8_MEMBER(fidel6502_state::csc_pia0_pb_w)
// d1: TSI START line
m_speech->start_w(data >> 1 & 1);
-
+
// d4: lower TSI volume
m_speech->set_output_gain(0, (data & 0x10) ? 0.5 : 1.0);
}
@@ -391,7 +391,7 @@ READ8_MEMBER(fidel6502_state::csc_pia0_pb_r)
// d5: button row 8 (active low)
// d6,d7: language switches
data |= (~read_inputs(9) >> 3 & 0x20) | (~m_inp_matrix[9]->read() << 6 & 0xc0);
-
+
return data;
}
@@ -520,7 +520,7 @@ WRITE8_MEMBER(fidel6502_state::fexcel_ttl_w)
// a0-a2,d0: 74259(1)
UINT8 mask = 1 << offset;
m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0);
-
+
// 74259 Q0-Q3: 7442 a0-a3
// 7442 0-8: led data, input mux
UINT16 sel = 1 << (m_led_select & 0xf) & 0x3ff;
@@ -536,7 +536,7 @@ WRITE8_MEMBER(fidel6502_state::fexcel_ttl_w)
// a0-a2,d1: digit segment data (model 6093)
m_7seg_data = (m_7seg_data & ~mask) | ((data & 2) ? mask : 0);
UINT8 seg_data = BITSWAP8(m_7seg_data,0,1,3,2,7,5,6,4);
-
+
// update display: 4 7seg leds, 2*8 chessboard leds
for (int i = 0; i < 6; i++)
m_display_state[i] = (led_sel >> i & 1) ? ((i < 2) ? led_data : seg_data) : 0;
@@ -550,7 +550,7 @@ WRITE8_MEMBER(fidel6502_state::fexcel_ttl_w)
{
// a0-a2,d2: 74259(2) to speech board
m_speech_data = (m_speech_data & ~mask) | ((data & 4) ? mask : 0);
-
+
// 74259 Q6: TSI ROM A11
m_speech->force_update(); // update stream to now
m_speech_bank = (m_speech_bank & ~1) | (m_speech_data >> 6 & 1);
@@ -566,7 +566,7 @@ READ8_MEMBER(fidel6502_state::fexcel_ttl_r)
{
// a0-a2,d6: from speech board: language switches and TSI BUSY line, otherwise tied to VCC
UINT8 d6 = (read_safe(m_inp_matrix[9], 0xff) >> offset & 1) ? 0x40 : 0;
-
+
// a0-a2,d7: multiplexed inputs (active low)
return d6 | ((read_inputs(9) >> offset & 1) ? 0 : 0x80);
}
diff --git a/src/mame/drivers/fidel68k.cpp b/src/mame/drivers/fidel68k.cpp
index 56cd651bb90..00cb94cc985 100644
--- a/src/mame/drivers/fidel68k.cpp
+++ b/src/mame/drivers/fidel68k.cpp
@@ -3,7 +3,7 @@
/******************************************************************************
Fidelity Electronics 68000 based board driver
-
+
TODO:
- how does dual-CPU work?
- IRQ level/timing is unknown
@@ -78,7 +78,7 @@ V11: 68060, 2MB h.RAM, high speed
V7 Hardware info:
-----------------
-- MC68020RC25E CPU, 25MHz XTAL
+- MC68020RC25E CPU, 25MHz XTAL - this PCB was overclocked, original was 20MHz so let's use that
- 4*AS7C164-20PC 8KB SRAM, 2*KM684000ALG-7L 512KB CMOS SRAM
- 2*27C512? 64KB EPROM, 2*HM6264LP-15 8KB SRAM, 2*AT28C64B 8KB EEPROM, 2*GAL16V8C
- same as 6114: M82C51A, NE555, SN74HC4060, module slot, chessboard, ..
@@ -409,7 +409,7 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( eagv7, eag )
/* basic machine hardware */
- MCFG_CPU_REPLACE("maincpu", M68020, XTAL_25MHz)
+ MCFG_CPU_REPLACE("maincpu", M68020, XTAL_20MHz)
MCFG_CPU_PROGRAM_MAP(eagv7_map)
MCFG_CPU_PERIODIC_INT_DRIVER(fidel68k_state, irq2_line_hold, 600) // complete guess
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp
index fd14411bfef..197b2845d5a 100644
--- a/src/mame/drivers/fidelz80.cpp
+++ b/src/mame/drivers/fidelz80.cpp
@@ -16,7 +16,7 @@
Chess pieces are required, but theoretically blindfold chess is possible.
Chessboard artwork is provided for boards with pressure/magnet sensors.
Read the official manual(s) on how to play.
-
+
Keypad legend:
- RE: Reset
- CL: Clear
@@ -29,17 +29,17 @@
- RV: Reverse
- ST: Set/Stop
- TM: Time
-
+
Peripherals, compatible with various boards:
- Fidelity Challenger Printer - thermal printer, MCU=?
-
+
Program/data cartridges, for various boards, some cross-compatible:
- CG6: Greatest Chess Games 1
- CAC: Challenger Advanced Chess - 8KB 101-1038A01
- CB9: Challenger Book Openings 1 - 8KB?
- CB16: Challenger Book Openings 2 - 8+8KB 101-1042A01,02
- others are alt. titles of these?
-
+
Board hardware descriptions below.
Detailed RE work done by Kevin 'kevtris' Horton, except where noted
@@ -534,7 +534,7 @@ public:
DECLARE_WRITE8_MEMBER(vcc_ppi_portc_w);
DECLARE_WRITE8_MEMBER(cc10_ppi_porta_w);
TIMER_DEVICE_CALLBACK_MEMBER(beeper_off_callback);
-
+
// BCC
DECLARE_READ8_MEMBER(bcc_input_r);
DECLARE_WRITE8_MEMBER(bcc_control_w);
@@ -938,7 +938,7 @@ READ8_MEMBER(fidelz80_state::vsc_pio_portb_r)
// d4: TSI BUSY line
data |= (m_speech->busy_r()) ? 0 : 0x10;
-
+
return data;
}
@@ -947,14 +947,14 @@ WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w)
// d0,d1: input mux highest bits
// d5: enable language switch
m_inp_mux = (m_inp_mux & 0xff) | (data << 8 & 0x300) | (data << 5 & 0x400);
-
+
// d7: TSI ROM A12
m_speech->force_update(); // update stream to now
m_speech_bank = data >> 7 & 1;
-
+
// d6: TSI START line
m_speech->start_w(data >> 6 & 1);
-
+
// d2: lower TSI volume
m_speech->set_output_gain(0, (data & 4) ? 0.5 : 1.0);
}
@@ -1025,7 +1025,8 @@ static ADDRESS_MAP_START( cc10_map, AS_PROGRAM, 8, fidelz80_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
AM_RANGE(0x0000, 0x0fff) AM_ROM
- AM_RANGE(0x3000, 0x31ff) AM_MIRROR(0x0e00) AM_RAM
+ AM_RANGE(0x1000, 0x10ff) AM_MIRROR(0x0f00) AM_RAM
+ AM_RANGE(0x3000, 0x30ff) AM_MIRROR(0x0f00) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( vcc_map, AS_PROGRAM, 8, fidelz80_state )
@@ -1146,7 +1147,7 @@ static INPUT_PORTS_START( vcc_base )
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_O)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
@@ -1215,7 +1216,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( bcc )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_O)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("d4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CODE(KEYCODE_D)
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_H)
diff --git a/src/mame/drivers/finalizr.cpp b/src/mame/drivers/finalizr.cpp
index d962c81ebc7..e52e22420c3 100644
--- a/src/mame/drivers/finalizr.cpp
+++ b/src/mame/drivers/finalizr.cpp
@@ -350,10 +350,6 @@ ROM_START( finalizrb )
ROM_END
-DRIVER_INIT_MEMBER(finalizr_state,finalizr)
-{
-}
-
-GAME( 1985, finalizr, 0, finalizr, finalizr, finalizr_state, finalizr, ROT90, "Konami", "Finalizer - Super Transformation", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1985, finalizrb, finalizr, finalizr, finalizrb, finalizr_state, finalizr, ROT90, "bootleg", "Finalizer - Super Transformation (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, finalizr, 0, finalizr, finalizr, driver_device, 0, ROT90, "Konami", "Finalizer - Super Transformation", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, finalizrb, finalizr, finalizr, finalizrb, driver_device, 0, ROT90, "bootleg", "Finalizer - Super Transformation (bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/gaelco.cpp b/src/mame/drivers/gaelco.cpp
index 56063dc3bed..6b78d61595d 100644
--- a/src/mame/drivers/gaelco.cpp
+++ b/src/mame/drivers/gaelco.cpp
@@ -62,11 +62,9 @@ WRITE16_MEMBER(gaelco_state::bigkarnk_coin_w)
WRITE16_MEMBER(gaelco_state::OKIM6295_bankswitch_w)
{
- UINT8 *RAM = memregion("oki")->base();
-
if (ACCESSING_BITS_0_7)
{
- memcpy(&RAM[0x30000], &RAM[0x40000 + (data & 0x0f) * 0x10000], 0x10000);
+ membank("okibank")->set_entry(data & 0x0f);
}
}
@@ -192,6 +190,12 @@ static ADDRESS_MAP_START( thoop_map, AS_PROGRAM, 16, gaelco_state )
ADDRESS_MAP_END
+static ADDRESS_MAP_START( oki_map, AS_0, 8, gaelco_state )
+ AM_RANGE(0x00000, 0x2ffff) AM_ROM
+ AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("okibank")
+ADDRESS_MAP_END
+
+
/*************************************
*
* Input ports
@@ -494,7 +498,9 @@ GFXDECODEINFO(0x100000,64)
void gaelco_state::machine_start()
{
-}
+ if (memregion("oki")->bytes() > 0x040000) //bigkarnk oki isn't banked
+ membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
+}
static MACHINE_CONFIG_START( bigkarnk, gaelco_state )
@@ -561,6 +567,7 @@ static MACHINE_CONFIG_START( maniacsq, gaelco_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -593,6 +600,7 @@ static MACHINE_CONFIG_START( squash, gaelco_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -625,6 +633,7 @@ static MACHINE_CONFIG_START( thoop, gaelco_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -676,11 +685,9 @@ ROM_START( maniacsp ) /* PCB - REF 922804/2 */
ROM_RELOAD( 0x380000, 0x040000 )
/* 0x340000-0x37ffff and 0x3c0000-0x3fffff empty */
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x080000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "c1", 0x000000, 0x080000, CRC(2557f2d6) SHA1(3a99388f2d845281f73a427d6dc797dce87b2f82) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x080000 )
- ROM_RELOAD( 0x0c0000, 0x080000 )
ROM_END
@@ -708,11 +715,10 @@ ROM_START( biomtoy ) /* PCB - REF 922804/2 */
ROM_LOAD( "j10", 0x300000, 0x040000, CRC(8e3e96cc) SHA1(761009f3f32b18139e98f20a22c433b6a49d9168) )
ROM_CONTINUE( 0x380000, 0x040000 )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "c1", 0x000000, 0x080000, CRC(0f02de7e) SHA1(a8779370cc36290616794ff11eb3eebfdea5b1a9) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x080000 )
- ROM_LOAD( "c3", 0x0c0000, 0x080000, CRC(914e4bbc) SHA1(ca82b7481621a119f05992ed093b963da70d748a) )
+ ROM_LOAD( "c3", 0x080000, 0x080000, CRC(914e4bbc) SHA1(ca82b7481621a119f05992ed093b963da70d748a) )
ROM_END
@@ -741,11 +747,10 @@ ROM_START( biomtoya ) /* PCB - REF 922804/2 */
ROM_CONTINUE( 0x380000, 0x040000 )
// using the same samples as the parent set causes bad sounds for most of the game
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "c1", 0x000000, 0x080000, BAD_DUMP CRC(0f02de7e) SHA1(a8779370cc36290616794ff11eb3eebfdea5b1a9) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x080000 )
- ROM_LOAD( "c3", 0x0c0000, 0x080000, BAD_DUMP CRC(914e4bbc) SHA1(ca82b7481621a119f05992ed093b963da70d748a) )
+ ROM_LOAD( "c3", 0x080000, 0x080000, BAD_DUMP CRC(914e4bbc) SHA1(ca82b7481621a119f05992ed093b963da70d748a) )
ROM_END
@@ -812,11 +817,9 @@ ROM_START( squash )
ROM_LOAD( "squash.c12", 0x000000, 0x80000, CRC(5c440645) SHA1(4f2fc1647ffc549fa079f2dc0aaaceb447afdf44) ) /* encrypted video ram */
ROM_RELOAD( 0x080000, 0x80000 )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x80000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "squash.d01", 0x000000, 0x80000, CRC(a1b9651b) SHA1(a396ba94889f70ea06d6330e3606b0f2497ff6ce) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x080000 )
- ROM_RELOAD( 0x0c0000, 0x080000 )
ROM_END
@@ -843,10 +846,9 @@ ROM_START( thoop )
ROM_CONTINUE( 0x040000, 0x040000 )
ROM_CONTINUE( 0x0c0000, 0x040000 )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "sound", 0x000000, 0x100000, CRC(99f80961) SHA1(de3a514a8f46dffd5f762e52aac1f4c3b08e2e18) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x100000 )
ROM_END
diff --git a/src/mame/drivers/galaxi.cpp b/src/mame/drivers/galaxi.cpp
index de2e1e47512..000078b8709 100644
--- a/src/mame/drivers/galaxi.cpp
+++ b/src/mame/drivers/galaxi.cpp
@@ -17,7 +17,7 @@
1x MC1458P (u10)(sound)
1x TDA2003 (u8)(sound)
1x oscillator 10.000MHz (QZ1)
- 1x oscillator 16.000000 (QZ2)
+ 1x oscillator 16.000000 (QZ2)
ROMs:
1x AT27C020 (1)
2x M27C4001 (2,3)
diff --git a/src/mame/drivers/gkigt.cpp b/src/mame/drivers/gkigt.cpp
index 867514520b8..cca5ee193e2 100644
--- a/src/mame/drivers/gkigt.cpp
+++ b/src/mame/drivers/gkigt.cpp
@@ -51,7 +51,7 @@ MULTIMEDIA LITE boards:
32 Macrocells
32 I/O Pins
5 Dedicated Inputs
- labeled MML1 REV A (socketted) for EPROM type (4 32pin eprom sockets)
+ labeled MML1 REV A (socketed) for EPROM type (4 32pin eprom sockets)
labeled MML2 REV A (surface mounted) for SIMM type (1 72pin SIMM socket)
16.9344MHz OSC
Yamaha YMZ280-B sound chip
diff --git a/src/mame/drivers/goldstar.cpp b/src/mame/drivers/goldstar.cpp
index 570b990c5fd..584767696c6 100644
--- a/src/mame/drivers/goldstar.cpp
+++ b/src/mame/drivers/goldstar.cpp
@@ -952,8 +952,8 @@ static ADDRESS_MAP_START( ladylinr_map, AS_PROGRAM, 8, goldstar_state )
AM_RANGE(0xb800, 0xb803) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) /* Input Ports */
AM_RANGE(0xb810, 0xb813) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) /* DSW bank */
- AM_RANGE(0xb830, 0xb830) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_w)
- AM_RANGE(0xb840, 0xb840) AM_DEVWRITE("aysnd", ay8910_device, address_w) /* no sound... only use ports */
+ AM_RANGE(0xb830, 0xb830) AM_DEVWRITE("aysnd", ay8910_device, address_w) /* no sound... unused? */
+ AM_RANGE(0xb840, 0xb840) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_w)
AM_RANGE(0xb850, 0xb850) AM_WRITENOP /* just turn off the lamps, if exist */
AM_RANGE(0xb870, 0xb870) AM_DEVWRITE("snsnd", sn76489_device, write) /* sound */
AM_RANGE(0xf800, 0xffff) AM_RAM
@@ -6137,29 +6137,35 @@ static INPUT_PORTS_START( crazybon )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Big")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) PORT_NAME("Big / Hold")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP_ALL ) PORT_NAME("Stop All / Take Score")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) /* also works as stop all and hold pair */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) PORT_NAME("Small / Info")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start")
PORT_INCLUDE( cmv4_coins )
PORT_MODIFY("IN1")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) /* Unused coin switch */
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SLOT_STOP2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP_ALL )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SLOT_STOP3 )
PORT_INCLUDE( cmv4_service )
PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x00, "Hold Pair" ) PORT_DIPLOCATION("DSW1:1") /* OK - use Take button */
+ PORT_DIPNAME( 0x01, 0x00, "Hold Pair" ) PORT_DIPLOCATION("DSW1:1") /* OK */
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, "Hopper Out Switch" ) PORT_DIPLOCATION("DSW1:2") /* not checked */
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, "Double Up Jack" ) PORT_DIPLOCATION("DSW1:2") /* from manual, not checked */
+ PORT_DIPSETTING( 0x02, "Poker" )
+ PORT_DIPSETTING( 0x00, "Missile" )
PORT_DIPNAME( 0x04, 0x00, "Coin Out Rate" ) PORT_DIPLOCATION("DSW1:3") /* OK */
PORT_DIPSETTING( 0x04, "1" )
- PORT_DIPSETTING( 0x00, "10" )
+ PORT_DIPSETTING( 0x00, "10" ) PORT_CONDITION("DSW3-0",0x03,EQUALS,0x03)
+ PORT_DIPSETTING( 0x00, "50" ) PORT_CONDITION("DSW3-0",0x03,EQUALS,0x02)
+ PORT_DIPSETTING( 0x00, "100" ) PORT_CONDITION("DSW3-0",0x03,EQUALS,0x01)
+ PORT_DIPSETTING( 0x00, "500" ) PORT_CONDITION("DSW3-0",0x03,EQUALS,0x00)
PORT_DIPNAME( 0x08, 0x00, "'7' In Double Up Game" ) PORT_DIPLOCATION("DSW1:4") /* OK */
PORT_DIPSETTING( 0x08, "Even" )
PORT_DIPSETTING( 0x00, "Win" )
@@ -6169,14 +6175,14 @@ static INPUT_PORTS_START( crazybon )
PORT_DIPNAME( 0x20, 0x00, "Double Up Game" ) PORT_DIPLOCATION("DSW1:6") /* OK */
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0xc0, 0x00, "Max Bet" ) PORT_DIPLOCATION("DSW1:7,8") /* OK */
+ PORT_DIPNAME( 0xc0, 0x40, "Max Bet" ) PORT_DIPLOCATION("DSW1:7,8") /* OK */
PORT_DIPSETTING( 0xc0, "16" )
PORT_DIPSETTING( 0x80, "32" )
PORT_DIPSETTING( 0x40, "64" )
PORT_DIPSETTING( 0x00, "96" )
PORT_START("DSW2")
- PORT_DIPNAME( 0x07, 0x00, "Main Game Pay Rate" ) PORT_DIPLOCATION("DSW2:1,2,3") /* OK */
+ PORT_DIPNAME( 0x07, 0x07, "Main Game Pay Rate" ) PORT_DIPLOCATION("DSW2:1,2,3") /* OK */
PORT_DIPSETTING( 0x00, "55%" )
PORT_DIPSETTING( 0x01, "60%" )
PORT_DIPSETTING( 0x02, "65%" )
@@ -6193,20 +6199,20 @@ static INPUT_PORTS_START( crazybon )
PORT_DIPNAME( 0x20, 0x00, "Mode" ) PORT_DIPLOCATION("DSW2:6") /* OK */
PORT_DIPSETTING( 0x00, "Game" )
PORT_DIPSETTING( 0x20, "Stealth" )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:7")
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:7")
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:8")
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW2:8")
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW3-0")
- PORT_DIPNAME( 0x03, 0x03, "Key In Rate" ) PORT_DIPLOCATION("DSW3:1,2") /* OK */
+ PORT_DIPNAME( 0x03, 0x02, "Key In Rate" ) PORT_DIPLOCATION("DSW3:1,2") /* OK */
PORT_DIPSETTING( 0x03, "1 Coin/10 Credits" )
PORT_DIPSETTING( 0x02, "1 Coin/50 Credits" )
PORT_DIPSETTING( 0x01, "1 Coin/100 Credits" )
PORT_DIPSETTING( 0x00, "1 Coin/500 Credits" )
- PORT_DIPNAME( 0x0c, 0x0c, "Coin A Rate" ) PORT_DIPLOCATION("DSW3:3,4") /* OK */
+ PORT_DIPNAME( 0x0c, 0x00, "Coin A Rate" ) PORT_DIPLOCATION("DSW3:3,4") /* OK */
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_5C ) )
PORT_DIPSETTING( 0x04, "1 Coin/10 Credits" )
@@ -6229,7 +6235,7 @@ static INPUT_PORTS_START( crazybon )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW4")
- PORT_DIPNAME( 0x07, 0x07, "Credit Limit" ) PORT_DIPLOCATION("DSW4:1,2,3") /* OK */
+ PORT_DIPNAME( 0x07, 0x01, "Credit Limit" ) PORT_DIPLOCATION("DSW4:1,2,3") /* OK */
PORT_DIPSETTING( 0x07, "5,000" )
PORT_DIPSETTING( 0x06, "10,000" )
PORT_DIPSETTING( 0x05, "20,000" )
@@ -6238,37 +6244,37 @@ static INPUT_PORTS_START( crazybon )
PORT_DIPSETTING( 0x02, "50,000" )
PORT_DIPSETTING( 0x01, "100,000" )
PORT_DIPSETTING( 0x00, "Unlimited" )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW4:4")
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x00, "Limit Credit" ) PORT_DIPLOCATION("DSW4:4") /* from manual, not checked */
+ PORT_DIPSETTING( 0x08, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
PORT_DIPNAME( 0x10, 0x10, "Fast Take With" ) PORT_DIPLOCATION("DSW4:5") /* OK */
PORT_DIPSETTING( 0x10, "Take" )
PORT_DIPSETTING( 0x00, "Start" )
PORT_DIPNAME( 0x20, 0x20, "Bonus Min Bet" ) PORT_DIPLOCATION("DSW4:6") /* OK */
PORT_DIPSETTING( 0x20, "16" )
PORT_DIPSETTING( 0x00, "32" )
- PORT_DIPNAME( 0x40, 0x40, "Reel Speed" ) PORT_DIPLOCATION("DSW4:7") /* OK */
+ PORT_DIPNAME( 0x40, 0x00, "Reel Speed" ) PORT_DIPLOCATION("DSW4:7") /* OK */
PORT_DIPSETTING( 0x40, DEF_STR( Low ) )
PORT_DIPSETTING( 0x00, DEF_STR( High ) )
- PORT_DIPNAME( 0x80, 0x80, "Hopper Out By Coin A" ) PORT_DIPLOCATION("DSW4:8") /* not working */
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "C.B" ) PORT_DIPLOCATION("DSW4:8") /* from manual, not checked */
+ PORT_DIPSETTING( 0x80, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
PORT_START("DSW5")
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW5:1")
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x06, 0x06, "Coin In Limit" ) PORT_DIPLOCATION("DSW5:2,3") /* OK */
+ PORT_DIPNAME( 0x01, 0x00, "Print" ) PORT_DIPLOCATION("DSW5:1") /* from manual, not checked */
+ PORT_DIPSETTING( 0x01, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x06, 0x06, "Max Key In" ) PORT_DIPLOCATION("DSW5:2,3") /* OK */
PORT_DIPSETTING( 0x06, "1,000" )
PORT_DIPSETTING( 0x04, "5,000" )
PORT_DIPSETTING( 0x02, "10,000" )
PORT_DIPSETTING( 0x00, "20,000" )
- PORT_DIPNAME( 0x18, 0x18, "Condition For 3 Fruit Bonus" ) PORT_DIPLOCATION("DSW5:4,5") /* OK */
- PORT_DIPSETTING( 0x18, "5-<-7" ) /* not sure about the "<" ??? */
+ PORT_DIPNAME( 0x18, 0x00, "Condition For 3 Fruit Bonus" ) PORT_DIPLOCATION("DSW5:4,5") /* OK */
+ PORT_DIPSETTING( 0x18, "5-<-7" ) /* don't know what "<" means, but that's what the game displays */
PORT_DIPSETTING( 0x10, "5-9-5" )
PORT_DIPSETTING( 0x08, "5-6-3" )
PORT_DIPSETTING( 0x00, "5-3-2" )
- PORT_DIPNAME( 0x60, 0x60, "Game Min Bet" ) PORT_DIPLOCATION("DSW5:6,7") /* OK */
+ PORT_DIPNAME( 0x60, 0x20, "Game Min Bet" ) PORT_DIPLOCATION("DSW5:6,7") /* OK */
PORT_DIPSETTING( 0x60, "1" )
PORT_DIPSETTING( 0x40, "8" )
PORT_DIPSETTING( 0x20, "16" )
@@ -6763,7 +6769,7 @@ static const gfx_layout super9_charlayout =
32*8 /* every char takes 32 consecutive bytes */
};
-static const gfx_layout super9_tilelayout = // Green is OK. Red needs normal goldstar order...
+static const gfx_layout super9_tilelayout = // Green is OK. Red needs normal goldstar order...
{
8,32, /* 8*32 characters */
256, /* 256 tiles */
@@ -7592,16 +7598,12 @@ MACHINE_CONFIG_END
PALETTE_INIT_MEMBER(wingco_state, magodds)
{
- int i;
- for (i = 0; i < 0x100; i++)
+ for (int i = 0; i < 0x100; i++)
{
- int r,g,b;
-
- UINT8*proms = memregion("proms")->base();
-
- b = proms[0x000 + i] << 4;
- g = proms[0x100 + i] << 4;
- r = proms[0x200 + i] << 4;
+ UINT8 *proms = memregion("proms")->base();
+ UINT8 b = proms[0x000 + i] << 4;
+ UINT8 g = proms[0x100 + i] << 4;
+ UINT8 r = proms[0x200 + i] << 4;
palette.set_pen_color(i, rgb_t(r, g, b));
}
@@ -7739,12 +7741,12 @@ static MACHINE_CONFIG_START( ladylinr, goldstar_state )
MCFG_VIDEO_START_OVERRIDE(goldstar_state,goldstar)
/* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")//set up a standard mono speaker called 'mono'
+ MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("snsnd", SN76489, PSG_CLOCK)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
- MCFG_SOUND_ADD("aysnd", AY8910, AY_CLOCK)
+ MCFG_SOUND_ADD("aysnd", AY8910, AY_CLOCK) // unused?
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
@@ -8633,11 +8635,11 @@ ROM_END
/* Cherry Gold I (bootleg)
It runs in CB3e similar hardware...
-1x TMPZ84C00AP-6 u15 8-bit Microprocessor
-3x D71055C u30, u39, u40 Programmable Peripheral Interface
-1x WF19054 u27 Programmable Sound Generator
-1x SN76489AN u28 Digital Complex Sound Generator
-1x oscillator unmarked Y1
+1x TMPZ84C00AP-6 u15 8-bit Microprocessor
+3x D71055C u30, u39, u40 Programmable Peripheral Interface
+1x WF19054 u27 Programmable Sound Generator
+1x SN76489AN u28 Digital Complex Sound Generator
+1x oscillator unmarked Y1
ROMs
1x D27256 1.u3
@@ -8664,7 +8666,7 @@ Others
1x battery 5,5V
Notes
-PCB is marked "REV.3"
+PCB is marked "REV.3"
*/
ROM_START( chryglda )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -9272,7 +9274,7 @@ ROM_END
/* Cherry Master I (CM1-1.01)
- Sticker with "Cherry Master V4 -B-" on the PCB.
+ Sticker with "Cherry Master V4 -B-" on the PCB.
Similar to cmasterb. Different program.
1x TMPZ84C00AP-6 u80 8-bit Microprocessor
@@ -9300,7 +9302,7 @@ Others
1x pushbutton (SW6)
1x trimmer (volume)(VR1)
5x 8x2 switches DIP(SW1-SW5)
-1x battery 5.5V(BT1)
+1x battery 5.5V(BT1)
*/
ROM_START( cmasterg )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -10169,6 +10171,84 @@ ROM_START( ns8linew )
ROM_END
+/* Lucky Bar
+ Unknown reels game based on Wing's Lucky 8 Lines.
+ W-4 hardware
+
+ Daughterboard with Z80 + program ROM + MC68705P3S MCU at location ic4 (14b)
+
+ Game seems to be meant for progressive modes...
+*/
+ROM_START( luckybar )
+ ROM_REGION( 0x8000, "maincpu", 0 )
+ ROM_LOAD( "27c256_subboard.ic4", 0x0000, 0x8000, CRC(b987115b) SHA1(1c2f6369170c9667996e5dde8ac93100a7234e19) )
+
+ ROM_REGION( 0x18000, "gfx1", 0 )
+ ROM_LOAD( "5.bin", 0x00000, 0x8000, CRC(994a9894) SHA1(4063c2c5e111f24a85df1665fd3f9fbb20fda4da) )
+ ROM_LOAD( "6.bin", 0x08000, 0x8000, CRC(80888d64) SHA1(91ec96709df77c534d381e391839984a88aeb1e0) )
+ ROM_LOAD( "7.bin", 0x10000, 0x8000, CRC(255d5860) SHA1(f171fde3d542594132b38b44300f750d45fb67a2) )
+
+ ROM_REGION( 0x8000, "gfx2", 0 )
+ ROM_LOAD( "1.bin", 0x0000, 0x2000, CRC(e3b96119) SHA1(292d2066e5deb442b9ba3403a73dbfac992c69c2) )
+ ROM_LOAD( "2.bin", 0x2000, 0x2000, CRC(e355d816) SHA1(bf709fd0597dd28d5e8a020a54064749e3d29988) )
+ ROM_LOAD( "3.bin", 0x4000, 0x2000, CRC(cf196c4a) SHA1(b36d9ab37590cbcf48352e6186bc137139ded0aa) )
+ ROM_LOAD( "4.bin", 0x6000, 0x2000, CRC(1432a1c2) SHA1(c7cdf3501b9545b5463a7051d22765a9601ccad0) )
+
+ ROM_REGION( 0x200, "proms", 0 ) /* proper dumps */
+ ROM_LOAD( "82s129.g13", 0x0000, 0x0100, CRC(23e81049) SHA1(78071dae70fad870e972d944642fb3a2374be5e4) )
+ ROM_LOAD( "82s129.g14", 0x0100, 0x0100, CRC(526cf9d3) SHA1(eb779d70f2507d0f26d225ac8f5de8f2243599ca) )
+
+ ROM_REGION( 0x20, "proms2", 0 )
+ ROM_LOAD( "82s123.d13", 0x0000, 0x0020, CRC(c387bd86) SHA1(abf37c60e859dcedb3de2c85e7ed8e5545c9f73c) )
+
+ ROM_REGION( 0x100, "unkprom", 0 )
+ ROM_LOAD( "82s129.f3", 0x0000, 0x0100, CRC(1d668d4a) SHA1(459117f78323ea264d3a29f1da2889bbabe9e4be) )
+
+ ROM_REGION( 0x20, "unkprom2", 0 )
+ ROM_LOAD( "82s123.d12", 0x0000, 0x0020, CRC(6df3f972) SHA1(0096a7f7452b70cac6c0752cb62e24b643015b5c) )
+ROM_END
+
+
+/* Cherry Angel
+ (W-4 / CB3 hardware)
+
+ Daughterboard with Z80 + program ROM + TTL at location ic4 (14b)
+
+ Encryption pattern:
+ For each 0x100 block:
+ 00-7f : 22 2a 82 2a...
+ 80-ff : a8 88 28 88...
+*/
+ROM_START( chryangla )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_ca.sub", 0x0000, 0x10000, CRC(e0c9d088) SHA1(b96ae39616f595eb461242705689570f96467c8a) )
+
+ ROM_REGION( 0x18000, "gfx1", 0 )
+ ROM_LOAD( "5.bin", 0x00000, 0x8000, CRC(5f4d51e4) SHA1(f88b786a3cb0c5b3609812d7cc5355a1791326b9) )
+ ROM_LOAD( "6.bin", 0x08000, 0x8000, CRC(c078ac8a) SHA1(9befeacb20b4a1ff08cd273f54fdf7a849509fec) )
+ ROM_LOAD( "7.bin", 0x10000, 0x8000, CRC(2311d258) SHA1(888a8c9d08bb7f0c35eacf02eae15f9ac0b816a8) )
+
+ ROM_REGION( 0x8000, "gfx2", 0 )
+ ROM_LOAD( "1.bin", 0x0000, 0x2000, CRC(7cc6d26b) SHA1(de33e8985affce7bd3ead89463117c9aaa93d5e4) )
+ ROM_LOAD( "2.bin", 0x2000, 0x2000, CRC(32057eb7) SHA1(95379c43e476d7908186e39608548e7ef61dedc3) )
+ ROM_LOAD( "3.bin", 0x4000, 0x2000, CRC(91162010) SHA1(3acc21e7074602b247f2f392eb181802092d2f21) )
+ ROM_LOAD( "4.bin", 0x6000, 0x2000, CRC(cbcc6bfb) SHA1(5bafc934fef1f50d8c182c39d3a7ce795c89d175) )
+
+ ROM_REGION( 0x200, "proms", 0 ) /* proper dumps */
+ ROM_LOAD( "82s129.g13", 0x0000, 0x0100, CRC(59ac98e4) SHA1(5fc0f1a48c49c956cdb8826e20663dc57a9175e4) )
+ ROM_LOAD( "82s129.g14", 0x0100, 0x0100, CRC(0d8f35bd) SHA1(0c2a0145cdaaf9beabdce241731a36b0c65f18a2) )
+
+ ROM_REGION( 0x20, "proms2", 0 )
+ ROM_LOAD( "82s123.d13", 0x0000, 0x0020, CRC(77a85e21) SHA1(3b41e0ab7cc55c5d78914d23e8289383f5bd5654) )
+
+ ROM_REGION( 0x100, "unkprom", 0 )
+ ROM_LOAD( "82s129.f3", 0x0000, 0x0100, CRC(1d668d4a) SHA1(459117f78323ea264d3a29f1da2889bbabe9e4be) )
+
+ ROM_REGION( 0x20, "unkprom2", 0 )
+ ROM_LOAD( "82s123.d12", 0x0000, 0x0020, CRC(6df3f972) SHA1(0096a7f7452b70cac6c0752cb62e24b643015b5c) )
+ROM_END
+
+
/******************************************************************************
Lucky Lady (1985, Wing)
@@ -12063,7 +12143,7 @@ ROM_END
Lacks of Dyna copyright. Maybe bootleg.
Not reels stop options.
- Tried any input on the real hardware without luck.
+ Tried any input on the real hardware without luck.
*/
ROM_START( scmaster ) // all roms unique
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -13487,7 +13567,7 @@ DRIVER_INIT_MEMBER(cmaster_state, rp36c3)
m_maincpu->space(AS_IO).install_read_handler(0x17, 0x17, read8_delegate(FUNC(cmaster_state::fixedval48_r),this));
}
-DRIVER_INIT_MEMBER(cmaster_state, rp96sub) // 95 33 95 33 70 6C 70 6C... XORs seem ok. need bitswap and handler.
+DRIVER_INIT_MEMBER(cmaster_state, rp96sub) // 95 33 95 33 70 6C 70 6C... XORs seem ok. need bitswap and handler.
{
int i;
UINT8 *ROM = memregion("maincpu")->base();
@@ -13506,7 +13586,7 @@ DRIVER_INIT_MEMBER(cmaster_state, rp96sub) // 95 33 95 33 70 6C 70 6C... XORs se
ROM[i] = x;
}
-// m_maincpu->space(AS_IO).install_read_handler(0x34, 0x34, read8_delegate(FUNC(cmaster_state::fixedvalb2_r),this));
+// m_maincpu->space(AS_IO).install_read_handler(0x34, 0x34, read8_delegate(FUNC(cmaster_state::fixedvalb2_r),this));
}
@@ -13774,6 +13854,7 @@ GAME( 1991, cmast91, 0, cmast91, cmast91, goldstar_state, cmast91,
GAME( 1992, cmast92, 0, cmast91, cmast91, goldstar_state, cmast91, ROT0, "Dyna", "Cherry Master '92", MACHINE_NOT_WORKING ) // no gfx roms are dumped
+// --- Wing W-4 hardware ---
GAMEL( 1989, lucky8, 0, lucky8, lucky8, driver_device, 0, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 1, W-4)", 0, layout_lucky8 )
GAMEL( 1989, lucky8a, lucky8, lucky8, lucky8a, wingco_state, lucky8a, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 2, W-4)", 0, layout_lucky8 )
GAMEL( 1989, lucky8b, lucky8, lucky8, lucky8b, driver_device, 0, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 3, W-4, extended gfx)", 0, layout_lucky8 )
@@ -13783,18 +13864,24 @@ GAMEL( 1989, lucky8e, lucky8, lucky8, lucky8d, driver_device, 0,
GAMEL( 198?, ns8lines, 0, lucky8, lucky8b, driver_device, 0, ROT0, "<unknown>", "New Lucky 8 Lines / New Super 8 Lines (W-4)", 0, layout_lucky8 )
GAMEL( 198?, ns8linew, 0, lucky8, ns8linew, driver_device, 0, ROT0, "<unknown>", "New Lucky 8 Lines / New Super 8 Lines (F-5, Witch Bonus)", 0, layout_lucky8 )
+GAME( 198?, luckybar, 0, lucky8, ns8linew, driver_device, 0, ROT0, "<unknown>", "Lucky Bar (W-4 with mc68705 MCU)", MACHINE_NOT_WORKING ) // MC68705 MCU
+GAME( 198?, chryangla, ncb3, lucky8, ns8linew, driver_device, 0, ROT0, "<unknown>", "Cherry Angel (encrypted, W-4 hardware)", MACHINE_NOT_WORKING )
GAMEL( 198?, kkotnoli, 0, kkotnoli, kkotnoli, driver_device, 0, ROT0, "hack", "Kkot No Li (Kill the Bees)", MACHINE_IMPERFECT_COLORS, layout_lucky8 )
GAME( 198?, ladylinr, 0, ladylinr, ladylinr, driver_device, 0, ROT0, "TAB Austria", "Lady Liner", 0 )
GAME( 198?, wcat3, 0, wcat3, lucky8, driver_device, 0, ROT0, "E.A.I.", "Wild Cat 3", MACHINE_NOT_WORKING )
GAME( 1985, luckylad, 0, lucky8, luckylad, driver_device, 0, ROT0, "Wing Co., Ltd.", "Lucky Lady (Wing, encrypted)", MACHINE_NOT_WORKING ) // encrypted (see notes in rom_load)...
GAME( 1991, megaline, 0, megaline, megaline, driver_device, 0, ROT0, "Fun World", "Mega Lines", MACHINE_NOT_WORKING )
-GAME( 1990, bonusch, 0, bonusch, bonusch, driver_device, 0, ROT0, "Wing Co., Ltd.", "Bonus Chance (W-8)", MACHINE_NOT_WORKING ) // M80C51F MCU
-
GAMEL( 1993, bingowng, 0, bingowng, bingowng, driver_device, 0, ROT0, "Wing Co., Ltd.", "Bingo (set 1)", 0, layout_bingowng )
GAMEL( 1993, bingownga, bingowng, bingownga,bingownga,driver_device, 0, ROT0, "Wing Co., Ltd.", "Bingo (set 2)", 0, layout_bingowng )
+
+// --- Wing W-8 hardware ---
+GAME( 1990, bonusch, 0, bonusch, bonusch, driver_device, 0, ROT0, "Wing Co., Ltd.", "Bonus Chance (W-8)", MACHINE_NOT_WORKING ) // M80C51F MCU
+
+
+// --- Magical Odds hardware ---
GAME( 1992, magodds, 0, magodds, magodds, driver_device, 0, ROT0, "Pal Company / Micro Manufacturing Inc.", "Magical Odds (set 1)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, magoddsa, magodds, magodds, magodds, driver_device, 0, ROT0, "Pal Company / Micro Manufacturing Inc.", "Magical Odds (set 2)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1992, magoddsb, magodds, magodds, magodds, driver_device, 0, ROT0, "Pal Company / Micro Manufacturing Inc.", "Magical Odds (set 3)", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_GRAPHICS )
@@ -13803,9 +13890,7 @@ GAME( 1991, magoddsd, magodds, magodds, magoddsc, wingco_state, magoddsc,
/* --- Amcoe games --- */
-
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT */
-
GAMEL( 1997, schery97, 0, amcoe1, schery97, cmaster_state, schery97, ROT0, "Amcoe", "Skill Cherry '97 (Talking ver. sc3.52)", 0, layout_nfb96 ) /* running in CB hardware */
GAMEL( 1997, schery97a, schery97, amcoe1, schery97, cmaster_state, schery97a, ROT0, "Amcoe", "Skill Cherry '97 (Talking ver. sc3.52c4)", 0, layout_nfb96 ) /* running in C4 hardware */
GAMEL( 1998, skill98, 0, amcoe1, schery97, cmaster_state, skill98, ROT0, "Amcoe", "Skill '98 (Talking ver. s98-1.33)", 0, layout_skill98 )
diff --git a/src/mame/drivers/goupil.cpp b/src/mame/drivers/goupil.cpp
index d1bdabb186d..8269dfdb8ae 100644
--- a/src/mame/drivers/goupil.cpp
+++ b/src/mame/drivers/goupil.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Jean-François DEL NERO
+// copyright-holders:Jean-Francois DEL NERO
/***************************************************************************
SMT Goupil G1 driver
@@ -17,7 +17,7 @@
-> The internal Basic is working (-> 6800 0xC3 illegal opcode emulation needed).
02/04/2016
- Jean-François DEL NERO
+ Jean-Francois DEL NERO
****************************************************************************/
@@ -39,58 +39,58 @@
class goupil_g1_state : public driver_device
{
public:
- goupil_g1_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_acia(*this, "ef6850")
- , m_ef9364(*this, "ef9364")
- , m_maincpu(*this, "maincpu")
- , m_via_video(*this, "m_via_video")
- , m_via_keyb(*this, "m_via_keyb")
- , m_via_modem(*this, "m_via_modem")
- , m_fdc(*this, "fd1791")
- , m_floppy0(*this, "fd1791:0")
- , m_floppy1(*this, "fd1791:1")
- , m_floppy(NULL)
- { }
-
- DECLARE_WRITE8_MEMBER(via_video_pba_w);
- DECLARE_WRITE8_MEMBER(via_video_pbb_w);
- DECLARE_WRITE_LINE_MEMBER(via_video_ca2_w);
-
- DECLARE_READ8_MEMBER(kbd1_r);
- DECLARE_READ8_MEMBER(kbd2_r);
- DECLARE_READ8_MEMBER(shift_kb1_r);
- DECLARE_READ8_MEMBER(shift_kb2_r);
- DECLARE_READ8_MEMBER(ctrl_kb1_r);
- DECLARE_READ8_MEMBER(ctrl_kb2_r);
-
- DECLARE_WRITE8_MEMBER(scanlines_kbd1_w);
- DECLARE_WRITE8_MEMBER(scanlines_kbd2_w);
-
- DECLARE_READ_LINE_MEMBER(via_keyb_ca2_r);
-
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
- UINT8 m_row_kbd1;
- UINT8 m_row_kbd2;
- int old_state_ca2;
- UINT8 via_video_pbb_data;
- UINT8 cnttim;
- UINT8 valkeyb;
- TIMER_DEVICE_CALLBACK_MEMBER(goupil_scanline);
+ goupil_g1_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_acia(*this, "ef6850")
+ , m_ef9364(*this, "ef9364")
+ , m_maincpu(*this, "maincpu")
+ , m_via_video(*this, "m_via_video")
+ , m_via_keyb(*this, "m_via_keyb")
+ , m_via_modem(*this, "m_via_modem")
+ , m_fdc(*this, "fd1791")
+ , m_floppy0(*this, "fd1791:0")
+ , m_floppy1(*this, "fd1791:1")
+ , m_floppy(NULL)
+ { }
+
+ DECLARE_WRITE8_MEMBER(via_video_pba_w);
+ DECLARE_WRITE8_MEMBER(via_video_pbb_w);
+ DECLARE_WRITE_LINE_MEMBER(via_video_ca2_w);
+
+ DECLARE_READ8_MEMBER(kbd1_r);
+ DECLARE_READ8_MEMBER(kbd2_r);
+ DECLARE_READ8_MEMBER(shift_kb1_r);
+ DECLARE_READ8_MEMBER(shift_kb2_r);
+ DECLARE_READ8_MEMBER(ctrl_kb1_r);
+ DECLARE_READ8_MEMBER(ctrl_kb2_r);
+
+ DECLARE_WRITE8_MEMBER(scanlines_kbd1_w);
+ DECLARE_WRITE8_MEMBER(scanlines_kbd2_w);
+
+ DECLARE_READ_LINE_MEMBER(via_keyb_ca2_r);
+
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ UINT8 m_row_kbd1;
+ UINT8 m_row_kbd2;
+ int old_state_ca2;
+ UINT8 via_video_pbb_data;
+ UINT8 cnttim;
+ UINT8 valkeyb;
+ TIMER_DEVICE_CALLBACK_MEMBER(goupil_scanline);
private:
- required_device<acia6850_device> m_acia;
- required_device<ef9364_device> m_ef9364;
- required_device<cpu_device> m_maincpu;
- required_device<via6522_device> m_via_video;
- required_device<via6522_device> m_via_keyb;
- required_device<via6522_device> m_via_modem;
- required_device<fd1791_t> m_fdc;
- required_device<floppy_connector> m_floppy0;
- required_device<floppy_connector> m_floppy1;
- floppy_image_device *m_floppy;
+ required_device<acia6850_device> m_acia;
+ required_device<ef9364_device> m_ef9364;
+ required_device<cpu_device> m_maincpu;
+ required_device<via6522_device> m_via_video;
+ required_device<via6522_device> m_via_keyb;
+ required_device<via6522_device> m_via_modem;
+ required_device<fd1791_t> m_fdc;
+ required_device<floppy_connector> m_floppy0;
+ required_device<floppy_connector> m_floppy1;
+ floppy_image_device *m_floppy;
};
/**********************************
@@ -104,295 +104,295 @@ private:
TIMER_DEVICE_CALLBACK_MEMBER( goupil_g1_state::goupil_scanline )
{
- m_ef9364->update_scanline((UINT16)param);
+ m_ef9364->update_scanline((UINT16)param);
}
static ADDRESS_MAP_START(goupil_mem, AS_PROGRAM, 8, goupil_g1_state)
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000,0x3fff) AM_RAM
- AM_RANGE(0x4000,0x7fff) AM_RAM
- AM_RANGE(0xC000,0xE3FF) AM_ROM AM_REGION("maincpu", 0x1000) // Basic ROM (BASIC 1 up to BASIC 9).
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000,0x3fff) AM_RAM
+ AM_RANGE(0x4000,0x7fff) AM_RAM
+ AM_RANGE(0xC000,0xE3FF) AM_ROM AM_REGION("maincpu", 0x1000) // Basic ROM (BASIC 1 up to BASIC 9).
- AM_RANGE(0xe400,0xe7ff) AM_RAM
- AM_RANGE(0xE800,0xE80F) AM_DEVREADWRITE("ef6850", acia6850_device, data_r, data_w)
- AM_RANGE(0xE810,0xE81F) AM_DEVREADWRITE("m_via_video", via6522_device, read, write)
+ AM_RANGE(0xe400,0xe7ff) AM_RAM
+ AM_RANGE(0xE800,0xE80F) AM_DEVREADWRITE("ef6850", acia6850_device, data_r, data_w)
+ AM_RANGE(0xE810,0xE81F) AM_DEVREADWRITE("m_via_video", via6522_device, read, write)
- AM_RANGE(0xE820,0xE820) AM_DEVREADWRITE("i8279_kb1", i8279_device, data_r, data_w )
- AM_RANGE(0xE821,0xE821) AM_DEVREADWRITE("i8279_kb1", i8279_device, status_r, cmd_w )
+ AM_RANGE(0xE820,0xE820) AM_DEVREADWRITE("i8279_kb1", i8279_device, data_r, data_w )
+ AM_RANGE(0xE821,0xE821) AM_DEVREADWRITE("i8279_kb1", i8279_device, status_r, cmd_w )
- AM_RANGE(0xE830,0xE830) AM_DEVREADWRITE("i8279_kb2", i8279_device, data_r, data_w )
- AM_RANGE(0xE831,0xE831) AM_DEVREADWRITE("i8279_kb2", i8279_device, status_r, cmd_w )
+ AM_RANGE(0xE830,0xE830) AM_DEVREADWRITE("i8279_kb2", i8279_device, data_r, data_w )
+ AM_RANGE(0xE831,0xE831) AM_DEVREADWRITE("i8279_kb2", i8279_device, status_r, cmd_w )
- AM_RANGE(0xE840,0xE84F) AM_DEVREADWRITE("m_via_keyb", via6522_device, read, write)
+ AM_RANGE(0xE840,0xE84F) AM_DEVREADWRITE("m_via_keyb", via6522_device, read, write)
- AM_RANGE(0xE860,0xE86F) AM_DEVREADWRITE("m_via_modem", via6522_device, read, write)
+ AM_RANGE(0xE860,0xE86F) AM_DEVREADWRITE("m_via_modem", via6522_device, read, write)
- AM_RANGE(0xe8f0,0xe8ff) AM_DEVREADWRITE("fd1791", fd1791_t, read, write)
- //AM_RANGE(0xf08a,0xf08a) AM_READWRITE( fdc_sel0_r, fdc_sel0_w )
- //AM_RANGE(0xf08b,0xf08b) AM_READWRITE( fdc_sel1_r, fdc_sel1_w )
+ AM_RANGE(0xe8f0,0xe8ff) AM_DEVREADWRITE("fd1791", fd1791_t, read, write)
+ //AM_RANGE(0xf08a,0xf08a) AM_READWRITE( fdc_sel0_r, fdc_sel0_w )
+ //AM_RANGE(0xf08b,0xf08b) AM_READWRITE( fdc_sel1_r, fdc_sel1_w )
- AM_RANGE(0xf400,0xf7ff) AM_ROM AM_REGION("maincpu", 0x0800) // Modem (MOD 3)
- AM_RANGE(0xf800,0xffff) AM_ROM AM_REGION("maincpu", 0x0000) // Monitor (MON 1 + MON 2)
+ AM_RANGE(0xf400,0xf7ff) AM_ROM AM_REGION("maincpu", 0x0800) // Modem (MOD 3)
+ AM_RANGE(0xf800,0xffff) AM_ROM AM_REGION("maincpu", 0x0000) // Monitor (MON 1 + MON 2)
ADDRESS_MAP_END
static ADDRESS_MAP_START( goupil_io, AS_IO, 8, goupil_g1_state)
- ADDRESS_MAP_UNMAP_HIGH
+ ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_END
WRITE8_MEMBER( goupil_g1_state::scanlines_kbd1_w )
{
- m_row_kbd1 = data;
+ m_row_kbd1 = data;
}
READ8_MEMBER( goupil_g1_state::ctrl_kb1_r )
{
- char kbdrow[6];
- unsigned char data;
-
- kbdrow[0] = 'C';
- kbdrow[1] = 'T';
- kbdrow[2] = 'R';
- kbdrow[3] = '0';
- kbdrow[4] = 0;
-
- data = ioport(kbdrow)->read();
- if( data & 0x02 )
- return 1;
- else
- return 0;
+ char kbdrow[6];
+ unsigned char data;
+
+ kbdrow[0] = 'C';
+ kbdrow[1] = 'T';
+ kbdrow[2] = 'R';
+ kbdrow[3] = '0';
+ kbdrow[4] = 0;
+
+ data = ioport(kbdrow)->read();
+ if( data & 0x02 )
+ return 1;
+ else
+ return 0;
}
READ8_MEMBER( goupil_g1_state::ctrl_kb2_r )
{
- return 1;
+ return 1;
}
READ8_MEMBER( goupil_g1_state::shift_kb1_r )
{
- char kbdrow[6];
- unsigned char data;
-
- kbdrow[0] = 'C';
- kbdrow[1] = 'T';
- kbdrow[2] = 'R';
- kbdrow[3] = '0';
- kbdrow[4] = 0;
-
- data = ioport(kbdrow)->read();
- if( data & 0x01 )
- return 1;
- else
- return 0;
+ char kbdrow[6];
+ unsigned char data;
+
+ kbdrow[0] = 'C';
+ kbdrow[1] = 'T';
+ kbdrow[2] = 'R';
+ kbdrow[3] = '0';
+ kbdrow[4] = 0;
+
+ data = ioport(kbdrow)->read();
+ if( data & 0x01 )
+ return 1;
+ else
+ return 0;
}
READ8_MEMBER( goupil_g1_state::shift_kb2_r )
{
- return 1;
+ return 1;
}
READ8_MEMBER( goupil_g1_state::kbd1_r )
{
- char kbdrow[6];
- UINT8 data = 0xff;
+ char kbdrow[6];
+ UINT8 data = 0xff;
- kbdrow[0] = 'A';
- kbdrow[1] = 'X';
- kbdrow[2] = '0' + ( m_row_kbd1 & 7 ) ;
- kbdrow[3] = 0;
+ kbdrow[0] = 'A';
+ kbdrow[1] = 'X';
+ kbdrow[2] = '0' + ( m_row_kbd1 & 7 ) ;
+ kbdrow[3] = 0;
- data = ioport(kbdrow)->read();
+ data = ioport(kbdrow)->read();
- return data;
+ return data;
}
WRITE8_MEMBER( goupil_g1_state::scanlines_kbd2_w )
{
- m_row_kbd2 = data & 7;
+ m_row_kbd2 = data & 7;
}
READ_LINE_MEMBER( goupil_g1_state::via_keyb_ca2_r )
{
- return 0;
+ return 0;
}
READ8_MEMBER( goupil_g1_state::kbd2_r )
{
- char kbdrow[6];
- UINT8 data = 0xff;
+ char kbdrow[6];
+ UINT8 data = 0xff;
- kbdrow[0] = 'B';
- kbdrow[1] = 'X';
- kbdrow[2] = '0' + ( m_row_kbd2 & 7 ) ;
- kbdrow[3] = 0;
+ kbdrow[0] = 'B';
+ kbdrow[1] = 'X';
+ kbdrow[2] = '0' + ( m_row_kbd2 & 7 ) ;
+ kbdrow[3] = 0;
- data = ioport(kbdrow)->read();
+ data = ioport(kbdrow)->read();
- return data;
+ return data;
}
/* Input ports */
static INPUT_PORTS_START( goupil_g1 )
- PORT_START("AX0")
- 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_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
- PORT_START("AX1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- 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_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
- PORT_START("AX2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('?')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_START("AX3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- 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_F2)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3)
- PORT_START("AX4")
- 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_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR(':') PORT_CHAR('/')
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('.')
- PORT_START("AX5")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB))
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BS") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_START("AX6")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00F9) PORT_CHAR('%')
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
- PORT_START("AX7")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- 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_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
-
- PORT_START("CTR0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
-
- PORT_START("BX0")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- 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_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("BX1")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- 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_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("BX2")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- 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_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("BX3")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
- PORT_START("BX4")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- 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_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("BX5")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
- 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_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_START("BX6")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
- PORT_START("BX7")
- PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
- PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
+ PORT_START("AX0")
+ 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_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_START("AX1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ 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_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_START("AX2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('?')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_START("AX3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ 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_F2)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3)
+ PORT_START("AX4")
+ 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_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR(':') PORT_CHAR('/')
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('.')
+ PORT_START("AX5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TAB") PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(TAB))
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("BS") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_START("AX6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00F9) PORT_CHAR('%')
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
+ PORT_START("AX7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ 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_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("CTR0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
+
+ PORT_START("BX0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ 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_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("BX1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ 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_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("BX2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ 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_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("BX3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
+ PORT_START("BX4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ 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_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("BX5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
+ 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_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_START("BX6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
+ PORT_START("BX7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
INPUT_PORTS_END
static SLOT_INTERFACE_START( goupil_floppies )
- SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
+ SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
SLOT_INTERFACE_END
void goupil_g1_state::machine_start()
{
- std::string region_tag;
+ std::string region_tag;
- m_floppy = NULL;
- valkeyb = 0xFF;
+ m_floppy = NULL;
+ valkeyb = 0xFF;
}
void goupil_g1_state::machine_reset()
@@ -401,108 +401,108 @@ void goupil_g1_state::machine_reset()
WRITE8_MEMBER(goupil_g1_state::via_video_pba_w)
{
- #ifdef DBGMODE
- printf("%s: write via_video_pba_w reg : 0x%X\n",machine().describe_context(),data);
- #endif
- m_ef9364->char_latch_w(data);
+ #ifdef DBGMODE
+ printf("%s: write via_video_pba_w reg : 0x%X\n",machine().describe_context(),data);
+ #endif
+ m_ef9364->char_latch_w(data);
}
WRITE8_MEMBER(goupil_g1_state::via_video_pbb_w)
{
- #ifdef DBGMODE
- printf("%s: write via_video_pbb_w reg : 0x%X\n",machine().describe_context(),data);
- #endif
- via_video_pbb_data = data;
+ #ifdef DBGMODE
+ printf("%s: write via_video_pbb_w reg : 0x%X\n",machine().describe_context(),data);
+ #endif
+ via_video_pbb_data = data;
}
WRITE_LINE_MEMBER( goupil_g1_state::via_video_ca2_w )
{
- if(old_state_ca2==0 && state==1)
- {
- m_ef9364->command_w(via_video_pbb_data&0xF);
- }
- old_state_ca2 = state;
+ if(old_state_ca2==0 && state==1)
+ {
+ m_ef9364->command_w(via_video_pbb_data&0xF);
+ }
+ old_state_ca2 = state;
}
static MACHINE_CONFIG_START( goupil_g1, goupil_g1_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu",M6808, CPU_CLOCK)
- MCFG_CPU_PROGRAM_MAP(goupil_mem)
- MCFG_CPU_IO_MAP(goupil_io)
-
- /* sound hardware */
- // TODO !
-
- MCFG_DEVICE_ADD ("ef6850", ACIA6850, 0)
-
- /* screen */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_UPDATE_DEVICE("ef9364", ef9364_device, screen_update)
-
- MCFG_SCREEN_SIZE((64*8), (16*(8+4)))
- MCFG_SCREEN_VISIBLE_AREA(0, (64*8)-1, 0, (16*(8+4))-1)
- MCFG_PALETTE_ADD("palette", 16)
-
- MCFG_DEVICE_ADD("ef9364", EF9364, VIDEO_CLOCK)
- MCFG_EF9364_PALETTE("palette")
- MCFG_EF9364_PAGES_CNT(1);
- MCFG_TIMER_DRIVER_ADD_SCANLINE("goupil_sl", goupil_g1_state, goupil_scanline, "screen", 0, 10)
-
- MCFG_DEVICE_ADD("m_via_video", VIA6522, 0)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(goupil_g1_state, via_video_pba_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(goupil_g1_state, via_video_pbb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(goupil_g1_state, via_video_ca2_w))
-
- MCFG_DEVICE_ADD("m_via_keyb", VIA6522, 0)
- MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m6808_cpu_device, irq_line))
-
- MCFG_DEVICE_ADD("m_via_modem", VIA6522, 0)
- MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m6808_cpu_device, irq_line))
-
- /* Floppy */
- MCFG_FD1791_ADD("fd1791", XTAL_8MHz )
- MCFG_FLOPPY_DRIVE_ADD("fd1791:0", goupil_floppies, "525qd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fd1791:1", goupil_floppies, "525qd", floppy_image_device::default_floppy_formats)
-
- MCFG_DEVICE_ADD("i8279_kb1", I8279, CPU_CLOCK)
- MCFG_I8279_OUT_SL_CB(WRITE8(goupil_g1_state, scanlines_kbd1_w)) // scan SL lines
- MCFG_I8279_IN_RL_CB(READ8(goupil_g1_state, kbd1_r)) // kbd RL lines
- MCFG_I8279_IN_SHIFT_CB(READ8(goupil_g1_state, shift_kb1_r))
- MCFG_I8279_IN_CTRL_CB(READ8(goupil_g1_state, ctrl_kb1_r))
- MCFG_I8279_OUT_IRQ_CB(DEVWRITELINE("m_via_keyb", via6522_device, write_ca1))
-
- MCFG_DEVICE_ADD("i8279_kb2", I8279, CPU_CLOCK)
- MCFG_I8279_OUT_SL_CB(WRITE8(goupil_g1_state, scanlines_kbd2_w)) // scan SL lines
- MCFG_I8279_IN_RL_CB(READ8(goupil_g1_state, kbd2_r)) // kbd RL lines
- MCFG_I8279_IN_SHIFT_CB(READ8(goupil_g1_state, shift_kb2_r))
- MCFG_I8279_IN_CTRL_CB(READ8(goupil_g1_state, ctrl_kb2_r))
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu",M6808, CPU_CLOCK)
+ MCFG_CPU_PROGRAM_MAP(goupil_mem)
+ MCFG_CPU_IO_MAP(goupil_io)
+
+ /* sound hardware */
+ // TODO !
+
+ MCFG_DEVICE_ADD ("ef6850", ACIA6850, 0)
+
+ /* screen */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(50)
+ MCFG_SCREEN_UPDATE_DEVICE("ef9364", ef9364_device, screen_update)
+
+ MCFG_SCREEN_SIZE((64*8), (16*(8+4)))
+ MCFG_SCREEN_VISIBLE_AREA(0, (64*8)-1, 0, (16*(8+4))-1)
+ MCFG_PALETTE_ADD("palette", 16)
+
+ MCFG_DEVICE_ADD("ef9364", EF9364, VIDEO_CLOCK)
+ MCFG_EF9364_PALETTE("palette")
+ MCFG_EF9364_PAGES_CNT(1);
+ MCFG_TIMER_DRIVER_ADD_SCANLINE("goupil_sl", goupil_g1_state, goupil_scanline, "screen", 0, 10)
+
+ MCFG_DEVICE_ADD("m_via_video", VIA6522, 0)
+ MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(goupil_g1_state, via_video_pba_w))
+ MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(goupil_g1_state, via_video_pbb_w))
+ MCFG_VIA6522_CA2_HANDLER(WRITELINE(goupil_g1_state, via_video_ca2_w))
+
+ MCFG_DEVICE_ADD("m_via_keyb", VIA6522, 0)
+ MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m6808_cpu_device, irq_line))
+
+ MCFG_DEVICE_ADD("m_via_modem", VIA6522, 0)
+ MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("maincpu", m6808_cpu_device, irq_line))
+
+ /* Floppy */
+ MCFG_FD1791_ADD("fd1791", XTAL_8MHz )
+ MCFG_FLOPPY_DRIVE_ADD("fd1791:0", goupil_floppies, "525qd", floppy_image_device::default_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD("fd1791:1", goupil_floppies, "525qd", floppy_image_device::default_floppy_formats)
+
+ MCFG_DEVICE_ADD("i8279_kb1", I8279, CPU_CLOCK)
+ MCFG_I8279_OUT_SL_CB(WRITE8(goupil_g1_state, scanlines_kbd1_w)) // scan SL lines
+ MCFG_I8279_IN_RL_CB(READ8(goupil_g1_state, kbd1_r)) // kbd RL lines
+ MCFG_I8279_IN_SHIFT_CB(READ8(goupil_g1_state, shift_kb1_r))
+ MCFG_I8279_IN_CTRL_CB(READ8(goupil_g1_state, ctrl_kb1_r))
+ MCFG_I8279_OUT_IRQ_CB(DEVWRITELINE("m_via_keyb", via6522_device, write_ca1))
+
+ MCFG_DEVICE_ADD("i8279_kb2", I8279, CPU_CLOCK)
+ MCFG_I8279_OUT_SL_CB(WRITE8(goupil_g1_state, scanlines_kbd2_w)) // scan SL lines
+ MCFG_I8279_IN_RL_CB(READ8(goupil_g1_state, kbd2_r)) // kbd RL lines
+ MCFG_I8279_IN_SHIFT_CB(READ8(goupil_g1_state, shift_kb2_r))
+ MCFG_I8279_IN_CTRL_CB(READ8(goupil_g1_state, ctrl_kb2_r))
MACHINE_CONFIG_END
/* ROM definition */
ROM_START( goupilg1 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_DEFAULT_BIOS("v1_0")
-
- ROM_SYSTEM_BIOS(0, "v1_0", "Version 1.0")
- ROMX_LOAD( "SMT_Goupil_G1_MON_1.bin", 0x0000, 0x0400, CRC(98B7BE69) SHA1(69E83FE78A43FCF2B08FB0BCEFB0D217A57B1ECB), ROM_BIOS(1) )
- ROM_LOAD ( "SMT_Goupil_G1_MON_2.bin", 0x0400, 0x0400, CRC(19386B81) SHA1(E52F63FD29D374319781E9677DE6D3FD61A3684C) )
-
- ROM_LOAD( "SMT_Goupil_G1_MOD_3.bin", 0x0800, 0x0400, CRC(E662F152) SHA1(11B91C5737E7572A2C18472B66BBD16B485132D5) )
-
- ROMX_LOAD( "SMT_Goupil_G1_Basic_1.bin", 0x1000, 0x0400, CRC(AD105B12) SHA1(631CD4B997F76B57BF2509E4BFF30B1595C8BD13), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_2.bin", 0x1400, 0x0400, CRC(0C5C309C) SHA1(F1CAB4B0F9191E53113790A95F1AB7108F9406A1), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_3.bin", 0x1800, 0x0400, CRC(1F1EB127) SHA1(DBBB880C79D515ACBFCB2BE9A4C96962F3E4EDEA), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_4.bin", 0x1C00, 0x0400, CRC(09BE48E4) SHA1(86CAE0D159583C1D572A5754F3BB6B4A2E479359), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_5.bin", 0x2000, 0x0400, CRC(BDEB395C) SHA1(32A50468F1CA772EE45A1F5C61C66F3ECC774074), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_6.bin", 0x2400, 0x0400, CRC(850A4000) SHA1(720F0BB3E45877835219B7E1D943EF4F19B9977D), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_7.bin", 0x2800, 0x0400, CRC(586C7670) SHA1(13E2E96B9F1A53555CE0D55F657CF3C6B96F10A0), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_8.bin", 0x2C00, 0x0400, CRC(33281300) SHA1(CE631FA8157A3F8869C5FEFE24B7F40E06696DF9), ROM_BIOS(1) )
- ROMX_LOAD( "SMT_Goupil_G1_Basic_9.bin", 0x3000, 0x0400, CRC(A3911201) SHA1(8623A0A2D83EB3A27A795030643C5C05A4350A9F), ROM_BIOS(1) )
-
- ROM_REGION( 0x400, "ef9364", 0 )
- ROM_LOAD( "SMT_Goupil_G1_Charset.bin", 0x0000, 0x0400, CRC(8B6DA54B) SHA1(AC2204600F45C6DD0DF1E759B62ED25928F02A12) )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_DEFAULT_BIOS("v1_0")
+
+ ROM_SYSTEM_BIOS(0, "v1_0", "Version 1.0")
+ ROMX_LOAD( "SMT_Goupil_G1_MON_1.bin", 0x0000, 0x0400, CRC(98B7BE69) SHA1(69E83FE78A43FCF2B08FB0BCEFB0D217A57B1ECB), ROM_BIOS(1) )
+ ROM_LOAD ( "SMT_Goupil_G1_MON_2.bin", 0x0400, 0x0400, CRC(19386B81) SHA1(E52F63FD29D374319781E9677DE6D3FD61A3684C) )
+
+ ROM_LOAD( "SMT_Goupil_G1_MOD_3.bin", 0x0800, 0x0400, CRC(E662F152) SHA1(11B91C5737E7572A2C18472B66BBD16B485132D5) )
+
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_1.bin", 0x1000, 0x0400, CRC(AD105B12) SHA1(631CD4B997F76B57BF2509E4BFF30B1595C8BD13), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_2.bin", 0x1400, 0x0400, CRC(0C5C309C) SHA1(F1CAB4B0F9191E53113790A95F1AB7108F9406A1), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_3.bin", 0x1800, 0x0400, CRC(1F1EB127) SHA1(DBBB880C79D515ACBFCB2BE9A4C96962F3E4EDEA), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_4.bin", 0x1C00, 0x0400, CRC(09BE48E4) SHA1(86CAE0D159583C1D572A5754F3BB6B4A2E479359), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_5.bin", 0x2000, 0x0400, CRC(BDEB395C) SHA1(32A50468F1CA772EE45A1F5C61C66F3ECC774074), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_6.bin", 0x2400, 0x0400, CRC(850A4000) SHA1(720F0BB3E45877835219B7E1D943EF4F19B9977D), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_7.bin", 0x2800, 0x0400, CRC(586C7670) SHA1(13E2E96B9F1A53555CE0D55F657CF3C6B96F10A0), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_8.bin", 0x2C00, 0x0400, CRC(33281300) SHA1(CE631FA8157A3F8869C5FEFE24B7F40E06696DF9), ROM_BIOS(1) )
+ ROMX_LOAD( "SMT_Goupil_G1_Basic_9.bin", 0x3000, 0x0400, CRC(A3911201) SHA1(8623A0A2D83EB3A27A795030643C5C05A4350A9F), ROM_BIOS(1) )
+
+ ROM_REGION( 0x400, "ef9364", 0 )
+ ROM_LOAD( "SMT_Goupil_G1_Charset.bin", 0x0000, 0x0400, CRC(8B6DA54B) SHA1(AC2204600F45C6DD0DF1E759B62ED25928F02A12) )
ROM_END
/* Driver */
diff --git a/src/mame/drivers/hh_cop400.cpp b/src/mame/drivers/hh_cop400.cpp
index a032acec210..78ef6c2271c 100644
--- a/src/mame/drivers/hh_cop400.cpp
+++ b/src/mame/drivers/hh_cop400.cpp
@@ -261,7 +261,7 @@ static MACHINE_CONFIG_START( ctstein, ctstein_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP421, 1000000) // approximation - RC osc. R=12K to +6V, C=100pf to GND
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_cop400_state, display_decay_tick, attotime::from_msec(1))
// MCFG_DEFAULT_LAYOUT(layout_ctstein)
@@ -306,7 +306,7 @@ static MACHINE_CONFIG_START( h2hbaskb, h2hbaskb_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP420, 1000000) // approximation - RC osc. R=43K to +9V, C=101pf to GND
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_cop400_state, display_decay_tick, attotime::from_msec(1))
// MCFG_DEFAULT_LAYOUT(layout_h2hbaskb)
@@ -416,7 +416,7 @@ static MACHINE_CONFIG_START( einvaderc, einvaderc_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP444, 1000000) // approximation - RC osc. R=47K to +9V, C=100pf to GND(-9V)
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
MCFG_COP400_READ_IN_CB(IOPORT("IN.0"))
MCFG_COP400_WRITE_D_CB(WRITE8(einvaderc_state, write_d))
MCFG_COP400_WRITE_G_CB(WRITE8(einvaderc_state, write_g))
@@ -524,7 +524,7 @@ static MACHINE_CONFIG_START( funjacks, funjacks_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP410, 2000000) // approximation - RC osc. R=47K, C=56pf
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_ENABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true) // guessed
MCFG_COP400_WRITE_D_CB(WRITE8(funjacks_state, write_d))
MCFG_COP400_WRITE_L_CB(WRITE8(funjacks_state, write_l))
MCFG_COP400_WRITE_G_CB(WRITE8(funjacks_state, write_g))
@@ -620,7 +620,7 @@ static MACHINE_CONFIG_START( funrlgl, funrlgl_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP410, 2000000) // approximation - RC osc. R=51K, C=91pf
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_ENABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true) // guessed
MCFG_COP400_WRITE_D_CB(WRITE8(funrlgl_state, write_d))
MCFG_COP400_WRITE_L_CB(WRITE8(funrlgl_state, write_l))
MCFG_COP400_WRITE_G_CB(WRITE8(funrlgl_state, write_g))
@@ -669,7 +669,7 @@ static MACHINE_CONFIG_START( plus1, plus1_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP410, 1000000) // approximation - RC osc. R=51K to +5V, C=100pf to GND
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_ENABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true) // guessed
/* no visual feedback! */
@@ -800,7 +800,7 @@ static MACHINE_CONFIG_START( lightfgt, lightfgt_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", COP421, 950000) // approximation - RC osc. R=82K to +6V, C=56pf to GND(-6V)
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
MCFG_COP400_WRITE_SO_CB(WRITELINE(lightfgt_state, write_so))
MCFG_COP400_WRITE_D_CB(WRITE8(lightfgt_state, write_d))
MCFG_COP400_WRITE_L_CB(WRITE8(lightfgt_state, write_l))
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index 36bfd7a52ab..0ed890fc5d5 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -2788,7 +2788,7 @@ static MACHINE_CONFIG_START( eturtles, eturtles_state )
MCFG_HMCS40_WRITE_D_CB(WRITE16(eturtles_state, grid_w))
MCFG_CPU_ADD("audiocpu", COP411, 215000) // approximation
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
MCFG_COP400_WRITE_SK_CB(WRITELINE(eturtles_state, speaker_w))
MCFG_COP400_WRITE_D_CB(WRITE8(eturtles_state, cop_irq_w))
MCFG_COP400_READ_L_CB(READ8(eturtles_state, cop_latch_r))
@@ -2895,7 +2895,7 @@ static MACHINE_CONFIG_START( estargte, estargte_state )
MCFG_HMCS40_WRITE_D_CB(WRITE16(eturtles_state, grid_w))
MCFG_CPU_ADD("audiocpu", COP411, 190000) // approximation
- MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED) // guessed
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false) // guessed
MCFG_COP400_WRITE_SK_CB(WRITELINE(eturtles_state, speaker_w))
MCFG_COP400_WRITE_D_CB(WRITE8(eturtles_state, cop_irq_w))
MCFG_COP400_READ_L_CB(READ8(estargte_state, cop_data_r))
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index a201672c98f..0dea42a26fa 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -4,10 +4,17 @@
This driver is a collection of simple dedicated handheld and tabletop
toys based around the TMS1000 MCU series. Anything more complex or clearly
- part of a series is (or will be) in its own driver.
+ part of a series is (or will be) in its own driver, see:
+ - hh_tms1k: here
+ - microvsn: Milton Bradley MicroVision
+ - mbdtower: Milton Bradley Dark Tower
+ - elecbowl: Marx Electronic Bowling
+ - ticalc1x: TI TMS1K-based calculators
+ - tispellb: TI Spelling B series gen. 1
+ - tispeak: TI Speak & Spell series gen. 1
Let's use this driver for a list of known devices and their serials,
- excluding TI's own products (see ticalc1x.cpp, tispeak.cpp, tispellb.cpp)
+ excluding TI's own products.
serial device etc.
--------------------------------------------------------------------
@@ -99,7 +106,6 @@
but not for newer ones (rev. E or TMS1400 MCUs). TMS0970/0980 osc. is on-die.
- some of the games rely on the fact that faster/longer strobed leds appear
brighter: tc4/h2hfootb(offense), bankshot(cue ball), ...
- - add softwarelist for tc4 cartridges?
- stopthiep: unable to start a game (may be intentional?)
- tbreakup: some of the leds flicker (rom and PLAs doublechecked)
@@ -669,7 +675,7 @@ MACHINE_CONFIG_END
Coleco Zodiac - The Astrology Computer
* TMS1100 MP3435 (no decap)
* 8-digit 7seg display, 12 other LEDs, 1-bit sound
-
+
As the name suggests, this is an astrologic calculator. Refer to the
(very extensive) manual on how to use it.
@@ -858,7 +864,7 @@ void cqback_state::prepare_display()
UINT16 seg = m_o;
if (m_r & 0x200)
seg = (m_o << 7 & 0x300) | (m_o & 0xf9);
-
+
set_display_segmask(0x1ff, 0xff);
display_matrix(11, 9, seg, m_r & 0x1ff);
}
@@ -1351,7 +1357,7 @@ MACHINE_CONFIG_END
Conic Electronic Football II
* TMS1100 MP1181 (no decap)
* 9-digit LED grid, 1-bit sound
-
+
This is a clone of Coleco's Quarterback, similar at hardware-level too.
It was also sold by Tandy under the same title.
@@ -1378,7 +1384,7 @@ void cnfball2_state::prepare_display()
UINT16 seg = m_o;
if (~m_r & 2)
seg = (m_o << 7 & 0x300) | (m_o & 0xf9);
-
+
set_display_segmask(0x1ff, 0xff);
display_matrix(11, 9, seg, m_r >> 1 & 0x1ff);
}
@@ -1390,7 +1396,7 @@ WRITE16_MEMBER(cnfball2_state::write_r)
// R8-R10: input mux
m_inp_mux = data >> 8 & 7;
-
+
// R1-R10: select digit/segment
m_r = data;
prepare_display();
@@ -4397,7 +4403,7 @@ MACHINE_CONFIG_END
Featuring The Electronic Dive-Control Center
* TMS1100 M34038-NLL (die labeled 1100E, M34038)
* 11 LEDs, 4-bit sound
-
+
This is a board game. The electronic accessory is the emulated part here.
***************************************************************************/
diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp
index 9eaf283d33f..6d1368f63bc 100644
--- a/src/mame/drivers/hh_ucom4.cpp
+++ b/src/mame/drivers/hh_ucom4.cpp
@@ -4,6 +4,9 @@
NEC uCOM4 MCU tabletops/handhelds or other simple devices,
most of them (emulated ones) are VFD electronic games/toys.
+ List of child drivers:
+ - tb303: Roland TB-303
+ - tr606: Roland TR-606
Commonly used VFD(vacuum fluorescent display) are by NEC or Futaba.
diff --git a/src/mame/drivers/hk68v10.cpp b/src/mame/drivers/hk68v10.cpp
index a6b5a357595..8faecfece09 100644
--- a/src/mame/drivers/hk68v10.cpp
+++ b/src/mame/drivers/hk68v10.cpp
@@ -243,7 +243,7 @@ INPUT_PORTS_END
/* Start it up */
void hk68v10_state::machine_start ()
{
- LOG (("%" I64FMT "d %s\n", m_maincpu->total_cycles(), __func__));
+ LOG (("%d %s\n", m_maincpu->total_cycles(), __func__));
/* Setup pointer to bootvector in ROM for bootvector handler bootvect_r */
m_sysrom = (UINT16*)(memregion ("maincpu")->base () + 0x0fc0000);
@@ -257,7 +257,7 @@ void hk68v10_state::machine_start ()
*/
void hk68v10_state::machine_reset ()
{
- LOG (("%" I64FMT "d %s\n", m_maincpu->total_cycles(), __func__));
+ LOG (("%d %s\n", m_maincpu->total_cycles(), __func__));
/* Reset pointer to bootvector in ROM for bootvector handler bootvect_r */
if (m_sysrom == &m_sysram[0]) /* Condition needed because memory map is not setup first time */
diff --git a/src/mame/drivers/hp9845.cpp b/src/mame/drivers/hp9845.cpp
index 7f83f001fe3..a8fb77fa17c 100644
--- a/src/mame/drivers/hp9845.cpp
+++ b/src/mame/drivers/hp9845.cpp
@@ -79,7 +79,7 @@ public:
m_io_key1(*this , "KEY1"),
m_io_key2(*this , "KEY2"),
m_io_key3(*this , "KEY3"),
- m_t15(*this , "t15")
+ m_t15(*this , "t15")
{ }
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -101,9 +101,9 @@ public:
DECLARE_WRITE8_MEMBER(pa_w);
- DECLARE_WRITE_LINE_MEMBER(t15_irq_w);
- DECLARE_WRITE_LINE_MEMBER(t15_flg_w);
- DECLARE_WRITE_LINE_MEMBER(t15_sts_w);
+ DECLARE_WRITE_LINE_MEMBER(t15_irq_w);
+ DECLARE_WRITE_LINE_MEMBER(t15_flg_w);
+ DECLARE_WRITE_LINE_MEMBER(t15_sts_w);
private:
required_device<hp_5061_3001_cpu_device> m_lpu;
@@ -113,7 +113,7 @@ private:
required_ioport m_io_key1;
required_ioport m_io_key2;
required_ioport m_io_key3;
- required_device<hp_taco_device> m_t15;
+ required_device<hp_taco_device> m_t15;
void set_video_mar(UINT16 mar);
void video_fill_buff(bool buff_idx);
@@ -150,8 +150,8 @@ private:
UINT8 m_kb_scancode;
UINT16 m_kb_status;
- // State of PPU I/O
- UINT8 m_ppu_pa;
+ // State of PPU I/O
+ UINT8 m_ppu_pa;
};
static INPUT_PORTS_START(hp9845b)
@@ -332,13 +332,13 @@ void hp9845b_state::machine_reset()
m_video_frame = 0;
m_irl_pending = 0;
- m_irh_pending = 0;
+ m_irh_pending = 0;
memset(&m_kb_state[ 0 ] , 0 , sizeof(m_kb_state));
m_kb_scancode = 0x7f;
m_kb_status = 0;
- m_ppu_pa = 0;
+ m_ppu_pa = 0;
}
void hp9845b_state::set_video_mar(UINT16 mar)
@@ -593,13 +593,13 @@ WRITE16_MEMBER(hp9845b_state::kb_irq_clear_w)
WRITE8_MEMBER(hp9845b_state::pa_w)
{
- m_ppu_pa = data;
+ m_ppu_pa = data;
// TODO: handle sts & flg
if (data == 15) {
- // RHS tape drive (T15)
- m_ppu->status_w(m_t15->sts_r());
- m_ppu->flag_w(m_t15->flg_r());
+ // RHS tape drive (T15)
+ m_ppu->status_w(m_t15->sts_r());
+ m_ppu->flag_w(m_t15->flg_r());
} else {
m_ppu->status_w(0);
m_ppu->flag_w(0);
@@ -608,26 +608,26 @@ WRITE8_MEMBER(hp9845b_state::pa_w)
WRITE_LINE_MEMBER(hp9845b_state::t15_irq_w)
{
- if (state) {
- BIT_SET(m_irh_pending , 7);
- } else {
- BIT_CLR(m_irh_pending , 7);
- }
- update_irq();
+ if (state) {
+ BIT_SET(m_irh_pending , 7);
+ } else {
+ BIT_CLR(m_irh_pending , 7);
+ }
+ update_irq();
}
WRITE_LINE_MEMBER(hp9845b_state::t15_flg_w)
{
- if (m_ppu_pa == 15) {
- m_ppu->flag_w(state);
- }
+ if (m_ppu_pa == 15) {
+ m_ppu->flag_w(state);
+ }
}
WRITE_LINE_MEMBER(hp9845b_state::t15_sts_w)
{
- if (m_ppu_pa == 15) {
- m_ppu->status_w(state);
- }
+ if (m_ppu_pa == 15) {
+ m_ppu->status_w(state);
+ }
}
static MACHINE_CONFIG_START( hp9845a, hp9845_state )
@@ -678,9 +678,9 @@ static ADDRESS_MAP_START(ppu_io_map , AS_IO , 16 , hp9845b_state)
// PA = 0, IC = 3
// Keyboard status input & keyboard interrupt clear
AM_RANGE(HP_MAKE_IOADDR(0 , 3) , HP_MAKE_IOADDR(0 , 3)) AM_READWRITE(kb_status_r , kb_irq_clear_w)
- // PA = 15, IC = 0..3
- // Right-hand side tape drive (T15)
- AM_RANGE(HP_MAKE_IOADDR(15 , 0) , HP_MAKE_IOADDR(15 , 3)) AM_DEVREADWRITE("t15" , hp_taco_device , reg_r , reg_w)
+ // PA = 15, IC = 0..3
+ // Right-hand side tape drive (T15)
+ AM_RANGE(HP_MAKE_IOADDR(15 , 0) , HP_MAKE_IOADDR(15 , 3)) AM_DEVREADWRITE("t15" , hp_taco_device , reg_r , reg_w)
ADDRESS_MAP_END
static MACHINE_CONFIG_START( hp9845b, hp9845b_state )
@@ -706,11 +706,11 @@ static MACHINE_CONFIG_START( hp9845b, hp9845b_state )
// Actual keyboard refresh rate should be KEY_SCAN_OSCILLATOR / 128 (2560 Hz)
MCFG_TIMER_DRIVER_ADD_PERIODIC("kb_timer" , hp9845b_state , kb_scan , attotime::from_hz(100))
- // Tape controller
- MCFG_DEVICE_ADD("t15" , HP_TACO , 4000000)
- MCFG_TACO_IRQ_HANDLER(WRITELINE(hp9845b_state , t15_irq_w))
- MCFG_TACO_FLG_HANDLER(WRITELINE(hp9845b_state , t15_flg_w))
- MCFG_TACO_STS_HANDLER(WRITELINE(hp9845b_state , t15_sts_w))
+ // Tape controller
+ MCFG_DEVICE_ADD("t15" , HP_TACO , 4000000)
+ MCFG_TACO_IRQ_HANDLER(WRITELINE(hp9845b_state , t15_irq_w))
+ MCFG_TACO_FLG_HANDLER(WRITELINE(hp9845b_state , t15_flg_w))
+ MCFG_TACO_STS_HANDLER(WRITELINE(hp9845b_state , t15_sts_w))
MCFG_SOFTWARE_LIST_ADD("optrom_list", "hp9845b_rom")
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/igs009.cpp b/src/mame/drivers/igs009.cpp
index 7e0f44ad2d9..96fb1c164e0 100644
--- a/src/mame/drivers/igs009.cpp
+++ b/src/mame/drivers/igs009.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Luca Elia, David Haywood
+// copyright-holders:Luca Elia, David Haywood, Roberto Fresca
/***************************************************************************
-= IGS009 Based Games =-
@@ -15,12 +15,16 @@ NVRAM : Battery for main RAM
The interesting part is the background tilemap, that is designed specifically
for simulating the nine reels of a slot machine.
-----------------------------------------------------------------------
-Year Game Manufacturer Notes
-----------------------------------------------------------------------
-1995? Jingle Bell IGS
-1998 Grand Prix '98 Romtec 1 reel gfx rom is bad
-----------------------------------------------------------------------
+---------------------------------------------------------------------------
+Year Game Manufacturer Notes
+---------------------------------------------------------------------------
+1997 Jingle Bell (US, V157) IGS NMI issues...
+1997 Jingle Bell (EU, V155) IGS NMI issues...
+1997 Jingle Bell (EU, V153) IGS NMI issues...
+1995 Jingle Bell (EU, V141) IGS Working
+1995? Jingle Bell (Italy, V133I) IGS Working
+1998 Grand Prix '98 Romtec 1 reel gfx rom is bad
+---------------------------------------------------------------------------
***************************************************************************/
@@ -230,10 +234,6 @@ TILE_GET_INFO_MEMBER(igs009_state::get_gp98_reel4_tile_info)
-
-
-
-
WRITE8_MEMBER(igs009_state::bg_scroll_w)
{
m_bg_scroll[offset] = data;
@@ -469,8 +469,6 @@ READ8_MEMBER(igs009_state::magic_r)
}
-
-
static ADDRESS_MAP_START( jingbell_map, AS_PROGRAM, 8, igs009_state )
AM_RANGE( 0x00000, 0x0f3ff ) AM_ROM
AM_RANGE( 0x0f400, 0x0ffff ) AM_RAM AM_SHARE("nvram")
@@ -493,8 +491,42 @@ static ADDRESS_MAP_START( jingbell_portmap, AS_IO, 8, igs009_state )
AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
- AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(nmi_and_coins_w )
+ AM_RANGE(0x6480, 0x6483) AM_DEVREADWRITE("ppi8255_0", i8255_device, read, write) /* NMI and coins (w), service (r), coins (r) */
+ AM_RANGE(0x6490, 0x6493) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) /* buttons 1 (r), video and leds (w), leds (w) */
+ AM_RANGE( 0x64a0, 0x64a0 ) AM_READ_PORT( "BUTTONS2" )
+
+ AM_RANGE( 0x64b0, 0x64b1 ) AM_DEVWRITE("ymsnd", ym2413_device, write)
+
+ AM_RANGE( 0x64c0, 0x64c0 ) AM_DEVREADWRITE("oki", okim6295_device, read, write)
+
+ AM_RANGE( 0x64d0, 0x64d1 ) AM_READWRITE(magic_r, magic_w ) // DSW1-5
+
+ AM_RANGE( 0x7000, 0x7fff ) AM_RAM_WRITE(fg_color_w ) AM_SHARE("fg_color_ram")
+
+ AM_RANGE( 0x8000, 0xffff ) AM_ROM AM_REGION("data", 0)
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( gp98_portmap, AS_IO, 8, igs009_state )
+ AM_RANGE( 0x0000, 0x003f ) AM_RAM // Z180 internal regs
+
+ AM_RANGE( 0x1000, 0x11ff ) AM_RAM_WRITE(bg_scroll_w ) AM_SHARE("bg_scroll")
+
+ AM_RANGE( 0x2000, 0x23ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
+ AM_RANGE( 0x2400, 0x27ff ) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
+
+ AM_RANGE( 0x3000, 0x33ff ) AM_RAM_WRITE(reel1_ram_w ) AM_SHARE("reel1_ram")
+ AM_RANGE( 0x3400, 0x37ff ) AM_RAM_WRITE(reel2_ram_w ) AM_SHARE("reel2_ram")
+ AM_RANGE( 0x3800, 0x3bff ) AM_RAM_WRITE(reel3_ram_w ) AM_SHARE("reel3_ram")
+ AM_RANGE( 0x3c00, 0x3fff ) AM_RAM_WRITE(reel4_ram_w ) AM_SHARE("reel4_ram")
+
+ AM_RANGE( 0x4000, 0x407f ) AM_RAM AM_SHARE("bg_scroll2")
+
+ AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
+
+ // seems to lacks of PPI devices...
+ AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(nmi_and_coins_w )
AM_RANGE( 0x6481, 0x6481 ) AM_READ_PORT( "SERVICE" )
AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" )
AM_RANGE( 0x6490, 0x6490 ) AM_READ_PORT( "BUTTONS1" )
@@ -685,6 +717,7 @@ static INPUT_PORTS_START( jingbell )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
+
/***************************************************************************
Graphics Layout
***************************************************************************/
@@ -781,9 +814,18 @@ static MACHINE_CONFIG_START( jingbell, igs009_state )
MCFG_CPU_IO_MAP(jingbell_portmap)
MCFG_CPU_VBLANK_INT_DRIVER("screen", igs009_state, interrupt)
-
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_DEVICE_ADD("ppi8255_0", I8255A, 0)
+ MCFG_I8255_OUT_PORTA_CB(WRITE8(igs009_state, nmi_and_coins_w))
+ MCFG_I8255_IN_PORTB_CB(IOPORT("SERVICE"))
+ MCFG_I8255_IN_PORTC_CB(IOPORT("COINS"))
+
+ MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
+ MCFG_I8255_IN_PORTA_CB(IOPORT("BUTTONS1"))
+ MCFG_I8255_OUT_PORTB_CB(WRITE8(igs009_state, video_and_leds_w))
+ MCFG_I8255_OUT_PORTC_CB(WRITE8(igs009_state, leds_w))
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -797,7 +839,6 @@ static MACHINE_CONFIG_START( jingbell, igs009_state )
MCFG_PALETTE_ADD("palette", 0x400)
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
-
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz)
@@ -807,7 +848,12 @@ static MACHINE_CONFIG_START( jingbell, igs009_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
+
static MACHINE_CONFIG_DERIVED( gp98, jingbell )
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_IO_MAP(gp98_portmap)
+
MCFG_GFXDECODE_MODIFY("gfxdecode", gp98)
MCFG_VIDEO_START_OVERRIDE(igs009_state,gp98)
@@ -816,7 +862,140 @@ MACHINE_CONFIG_END
/***************************************************************************
+ Jingle Bell
+ IGS, 1997.
+
+ English versions.
+
+ 1x HD64180RP8 (u18)
+ 2x NEC D8255AC-2 (u19, u20)
+ 1x custom IGS 009 F56D 246 (u22)
+ 1x YM2413 (u45)
+ 1x AR17961-AP0640 (u46)(sound equivalent to OKI M6295)
+
+ 4x 27C512 (1, 2, 3, V)
+ 3x 27C2001 (4, 5, 6)
+ 1x 27C256 (7)
+ 1x 27C1001 (sp)
+
+ 1x UMC UM6264B-10L (u42)
+ 2x UMC UM6164DK-12 (u1, u2)
+
+ 1x crystal 12.000 MHz.
+ 1x crystal 3.579545 MHz.
+
+ 1x 38x2 edge connector.
+ 2x 10x2 edge connectors.
+ 1x switch.
+ 1x 3.6 V. lithium battery.
+ 5x 8 DIP switches banks.
+
+***************************************************************************/
+
+/* Jingle Bells (V157 US)
+ Original IGS.
+ For amusement.
+*/
+ROM_START( jingbell )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v157_us.u44", 0x00000, 0x10000, CRC(37f95b60) SHA1(db2022802ce553ce7a0e8403408f3194b2f10007) )
+
+ ROM_REGION( 0x8000, "data", 0 )
+ ROM_LOAD( "27c256_v157_us.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) )
+
+ ROM_REGION( 0x30000, "reels", 0 )
+ ROM_LOAD( "27c512_v157_us.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) )
+ ROM_LOAD( "27c512_v157_us.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) )
+ ROM_LOAD( "27c512_v157_us.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) )
+
+ ROM_REGION( 0xc0000, "tiles", 0 )
+ ROM_LOAD( "27c2001_v157_us.u25", 0x00000, 0x40000, CRC(daa56ce5) SHA1(4f14a8efac16b03bd14dd26d586bcb8d5bef65c1) )
+ ROM_LOAD( "27c2001_v157_us.u24", 0x40000, 0x40000, CRC(b10b38e1) SHA1(397b2d899e47c6249fbbb6e6262d0390d9b796e6) )
+ ROM_LOAD( "27c2001_v157_us.u23", 0x80000, 0x40000, CRC(a3304b5a) SHA1(bf51cb1f728758d50ce27275aa19ef649f6b34b9) )
+
+ ROM_REGION( 0x40000, "oki", 0 )
+ ROM_LOAD( "mx29f001t_v157_us_sp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) )
+ROM_END
+
+/* Jingle Bells (V155 EU)
+ Original IGS.
+ For amusement.
+*/
+ROM_START( jingbella )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v155.u44", 0x00000, 0x10000, CRC(0813d12b) SHA1(4c35b656d1e54619bbfd26cbc017eba336e6abda) )
+
+ ROM_REGION( 0x8000, "data", 0 )
+ ROM_LOAD( "27c256_v155.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) )
+
+ ROM_REGION( 0x30000, "reels", 0 )
+ ROM_LOAD( "27c512_v155.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) )
+ ROM_LOAD( "27c512_v155.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) )
+ ROM_LOAD( "27c512_v155.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) )
+
+ ROM_REGION( 0xc0000, "tiles", 0 )
+ ROM_LOAD( "27c2001_v155.u25", 0x00000, 0x40000, CRC(daa56ce5) SHA1(4f14a8efac16b03bd14dd26d586bcb8d5bef65c1) )
+ ROM_LOAD( "27c2001_v155.u24", 0x40000, 0x40000, CRC(b10b38e1) SHA1(397b2d899e47c6249fbbb6e6262d0390d9b796e6) )
+ ROM_LOAD( "27c2001_v155.u23", 0x80000, 0x40000, CRC(a3304b5a) SHA1(bf51cb1f728758d50ce27275aa19ef649f6b34b9) )
+
+ ROM_REGION( 0x40000, "oki", 0 )
+ ROM_LOAD( "27c1001_v155_sp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) )
+ROM_END
+
+/* Jingle Bells (V153 EU)
+ Original IGS.
+ For amusement.
+*/
+ROM_START( jingbellb )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v153.u44", 0x00000, 0x10000, CRC(fd3bc092) SHA1(a92dc9bc15d7a4816887d66d46cea925d230c5b8) )
+
+ ROM_REGION( 0x8000, "data", 0 )
+ ROM_LOAD( "27c256_v153.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) )
+
+ ROM_REGION( 0x30000, "reels", 0 )
+ ROM_LOAD( "27c512_v153.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) )
+ ROM_LOAD( "27c512_v153.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) )
+ ROM_LOAD( "27c512_v153.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) )
+
+ ROM_REGION( 0xc0000, "tiles", 0 )
+ ROM_LOAD( "27c2001_v153.u25", 0x00000, 0x40000, CRC(daa56ce5) SHA1(4f14a8efac16b03bd14dd26d586bcb8d5bef65c1) )
+ ROM_LOAD( "27c2001_v153.u24", 0x40000, 0x40000, CRC(b10b38e1) SHA1(397b2d899e47c6249fbbb6e6262d0390d9b796e6) )
+ ROM_LOAD( "27c2001_v153.u23", 0x80000, 0x40000, CRC(a3304b5a) SHA1(bf51cb1f728758d50ce27275aa19ef649f6b34b9) )
+
+ ROM_REGION( 0x40000, "oki", 0 )
+ ROM_LOAD( "27c1001_v153_sp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) )
+ROM_END
+
+/* Jingle Bells (V141 EU)
+ Original IGS.
+ For amusement.
+*/
+ROM_START( jingbellc )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "27c512_v141.u44", 0x00000, 0x10000, CRC(6997a903) SHA1(991508d85e55a3c6f811070352e06ae6bf65cc2e) )
+
+ ROM_REGION( 0x8000, "data", 0 )
+ ROM_LOAD( "27c256_v141.u43", 0x0000, 0x8000, CRC(a7affa15) SHA1(f9d33e32b57ad267d383e075663994e0af0b3016) )
+
+ ROM_REGION( 0x30000, "reels", 0 )
+ ROM_LOAD( "27c512_v141.u17", 0x00000, 0x10000, CRC(cadd7910) SHA1(aa514ddb29c8c9a77478d56bea4ae71995fdd518) )
+ ROM_LOAD( "27c512_v141.u16", 0x10000, 0x10000, CRC(a9e1f5aa) SHA1(68d7f4e9e9a5bbce0904e406ee6fe82e9e52a9ba) )
+ ROM_LOAD( "27c512_v141.u15", 0x20000, 0x10000, CRC(865b7d3a) SHA1(c1dff3a27d747ee499aaee0c4468534f0249a3e5) )
+
+ ROM_REGION( 0xc0000, "tiles", 0 )
+ ROM_LOAD( "27c2001_v141.u25", 0x00000, 0x40000, CRC(f53bac7e) SHA1(f4375da0780fba59fcb65e24a33099af35e4d286) )
+ ROM_LOAD( "27c2001_v141.u24", 0x40000, 0x40000, CRC(bddd6001) SHA1(2a6395e9593352d3ea2d477a7f41805f389c9c50) )
+ ROM_LOAD( "27c2001_v141.u23", 0x80000, 0x40000, CRC(e8322c75) SHA1(c3385538fb673a4ab14c315ce8bce792eb264ec7) )
+
+ ROM_REGION( 0x40000, "oki", 0 )
+ ROM_LOAD( "27c1001_v141_sp.u38", 0x00000, 0x20000, CRC(a42d73b1) SHA1(93157e9630d5c8bb34c71186415d0aa8c5d51951) )
+ROM_END
+
+/***************************************************************************
+
Jingle Bell
+Italy, V133I
(C) IGS ("COPYRIGHT 1995" in ROM, "FEB. 23 1998" on sticker)
CPU:
@@ -849,8 +1028,7 @@ Notes:
12/02/2008 f205v
***************************************************************************/
-
-ROM_START( jingbell )
+ROM_START( jingbelli )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "jinglev133i.u44", 0x00000, 0x10000, CRC(df60dc39) SHA1(ff57afd50c045b621395353fdc50ffd1e1b65e9e) )
@@ -877,6 +1055,7 @@ ROM_START( jingbell )
ROM_LOAD( "palce22v10h-ch-jin-u27.u27", 0x000, 0x2dd, BAD_DUMP CRC(5c4e9024) SHA1(e9d1e4df3d79c21f4ce053a84bb7b7a43d650f91) )
ROM_END
+
DRIVER_INIT_MEMBER(igs009_state,jingbell)
{
int i;
@@ -965,5 +1144,11 @@ ROM_START( gp98 )
// no OKI on this
ROM_END
-GAME( 1995?, jingbell, 0, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (Italy, V133I)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, gp98, 0, gp98, jingbell, driver_device, 0, ROT0, "Romtec Co. Ltd", "Grand Prix '98 (V100K)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+
+/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
+GAME( 1997, jingbell, 0, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (US, V157)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 1997, jingbella, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (EU, V155)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 1997, jingbellb, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (EU, V153)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+GAME( 1995, jingbellc, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (EU, V141)", MACHINE_SUPPORTS_SAVE )
+GAME( 1995?, jingbelli, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (Italy, V133I)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, gp98, 0, gp98, jingbell, driver_device, 0, ROT0, "Romtec Co. Ltd", "Grand Prix '98 (V100K)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/indy_indigo2.cpp b/src/mame/drivers/indy_indigo2.cpp
index 9d76f45c753..20eee2b6f27 100644
--- a/src/mame/drivers/indy_indigo2.cpp
+++ b/src/mame/drivers/indy_indigo2.cpp
@@ -46,7 +46,6 @@
#include "machine/sgi.h"
#include "machine/pckeybrd.h"
#include "machine/pc_lpt.h"
-#include "includes/at.h"
#include "machine/8042kbdc.h"
#include "machine/pit8253.h"
#include "video/newport.h"
diff --git a/src/mame/drivers/jangou.cpp b/src/mame/drivers/jangou.cpp
index d8dd8401ba7..5351f5f1b79 100644
--- a/src/mame/drivers/jangou.cpp
+++ b/src/mame/drivers/jangou.cpp
@@ -100,7 +100,7 @@ public:
UINT32 screen_update_jangou(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(cvsd_bit_timer_callback);
DECLARE_WRITE_LINE_MEMBER(jngolady_vclk_cb);
-
+
std::unique_ptr<bitmap_ind16> m_tmp_bitmap;
};
@@ -846,7 +846,7 @@ static MACHINE_CONFIG_START( jangou, jangou_state )
MCFG_CPU_IO_MAP(cpu1_io)
MCFG_JANGOU_BLITTER_ADD("blitter", MASTER_CLOCK/4)
-
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK/4,320,0,256,264,16,240) // assume same as nightgal.cpp
diff --git a/src/mame/drivers/jankenmn.cpp b/src/mame/drivers/jankenmn.cpp
index f6182842d14..10195a3d4f1 100644
--- a/src/mame/drivers/jankenmn.cpp
+++ b/src/mame/drivers/jankenmn.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Roberto Fresca
+// copyright-holders:Roberto Fresca, hap
/***************************************************************************
JANKENMAN UNIT
@@ -308,9 +308,9 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( jankenmn )
PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_CODE(KEYCODE_Z) PORT_NAME("Guu (Rock)")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_CODE(KEYCODE_X) PORT_NAME("Choki (Scissors)")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_CODE(KEYCODE_C) PORT_NAME("Paa (Paper)")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Guu (Rock)")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Choki (Scissors)")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Paa (Paper)")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN3 ) // 100 yen coin
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, jankenmn_state, hopper_status_r, NULL)
diff --git a/src/mame/drivers/k28.cpp b/src/mame/drivers/k28.cpp
index 0dddfd432c8..2cc76c0f2c3 100644
--- a/src/mame/drivers/k28.cpp
+++ b/src/mame/drivers/k28.cpp
@@ -8,12 +8,12 @@
* MM5445N VFD driver, 9-digit alphanumeric display same as snmath
* 2*TMS6100 (32KB VSM)
* SC-01-A speech chip
-
+
3 models exist:
- 7-230: darkblue case, toy-ish looks
- 7-231: gray case, hardware is the same
- 7-232: this one is completely different hw --> driver tispeak.cpp
-
+
TODO:
- external module support (no dumps yet)
- SC-01 frog speech is why this driver is marked NOT_WORKING
@@ -83,7 +83,7 @@ public:
DECLARE_WRITE8_MEMBER(mcu_p2_w);
DECLARE_WRITE8_MEMBER(mcu_prog_w);
DECLARE_READ8_MEMBER(mcu_t1_r);
-
+
DECLARE_INPUT_CHANGED_MEMBER(power_on);
void power_off();
@@ -140,7 +140,7 @@ void k28_state::machine_reset()
{
m_power_on = true;
m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
-
+
// the game relies on reading the on-button as pressed when it's turned on
m_onbutton_timer->adjust(attotime::from_msec(250));
}
@@ -274,13 +274,13 @@ WRITE8_MEMBER(k28_state::mcu_p0_w)
// d0-d2: input mux high bits
m_inp_mux = (m_inp_mux & 0xf) | (~data << 4 & 0x70);
m_phoneme = (m_phoneme & 0xf) | (data << 4 & 0x30);
-
+
// d3: SC-01 strobe, latch phoneme on rising edge
int strobe = data >> 3 & 1;
if (!strobe && m_speech_strobe)
m_speech->write(space, 0, m_phoneme);
m_speech_strobe = strobe;
-
+
// d5: VFD driver data enable
m_vfd_data_enable = ~data >> 5 & 1;
if (m_vfd_data_enable)
@@ -299,18 +299,18 @@ WRITE8_MEMBER(k28_state::mcu_p0_w)
READ8_MEMBER(k28_state::mcu_p1_r)
{
UINT8 data = 0;
-
+
// multiplexed inputs (active low)
for (int i = 0; i < 7; i++)
if (m_inp_mux >> i & 1)
{
data |= m_inp_matrix[i]->read();
-
+
// force press on-button at boot
if (i == 5 && m_onbutton_timer->enabled())
data |= 1;
}
-
+
return data ^ 0xff;
}
@@ -326,7 +326,7 @@ WRITE8_MEMBER(k28_state::mcu_p2_w)
m_vfd_data_in = data & 1;
if (m_vfd_data_enable)
m_vfd_shiftreg = (m_vfd_shiftreg & U64(~1)) | m_vfd_data_in;
-
+
// d0-d3: VSM data, input mux and SC-01 phoneme lower nibble
m_tms6100->add_w(space, 0, data);
m_inp_mux = (m_inp_mux & ~0xf) | (~data & 0xf);
@@ -339,19 +339,19 @@ WRITE8_MEMBER(k28_state::mcu_prog_w)
int state = (data) ? 1 : 0;
bool rise = state == 1 && !m_vfd_clock;
m_vfd_clock = state;
-
+
// on rising edge
if (rise)
{
// leading 1 triggers shift start
if (m_vfd_shiftcount == 0 && ~m_vfd_shiftreg & 1)
return;
-
+
// output shiftreg on 35th clock
if (m_vfd_shiftcount == 35)
{
m_vfd_shiftcount = 0;
-
+
// output 0-15: digit segment data
UINT16 seg_data = (UINT16)(m_vfd_shiftreg >> 19);
seg_data = BITSWAP16(seg_data,0,1,13,9,10,12,14,8,3,4,5,2,15,11,6,7);
@@ -360,7 +360,7 @@ WRITE8_MEMBER(k28_state::mcu_prog_w)
UINT16 digit_sel = (UINT16)(m_vfd_shiftreg >> 10) & 0x1ff;
set_display_segmask(0x1ff, 0x3fff);
display_matrix(16, 9, seg_data, digit_sel);
-
+
// output 25: power-off request on falling edge
if (~m_vfd_shiftreg & m_vfd_shiftreg_out & 0x200)
power_off();
diff --git a/src/mame/drivers/konamigv.cpp b/src/mame/drivers/konamigv.cpp
index 24a2a64cbde..a57601ad6d2 100644
--- a/src/mame/drivers/konamigv.cpp
+++ b/src/mame/drivers/konamigv.cpp
@@ -670,6 +670,30 @@ static INPUT_PORTS_START( kdeadeye )
INPUT_PORTS_END
+/* Wedding Rhapsody */
+
+static INPUT_PORTS_START( weddingr )
+ PORT_INCLUDE( konamigv )
+
+ PORT_MODIFY("P1")
+ PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("Answer 3/Zoom In")
+ PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("Answer 4/Zoom Out")
+ PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("Answer 1/Pan Left")
+ PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("Answer 2/Pan Right")
+ PORT_BIT( 0x00000070, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("P2")
+ PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("Answer 3/Zoom In")
+ PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("Answer 4/Zoom Out")
+ PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("Answer 1/Pan Left")
+ PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("Answer 2/Pan Right")
+ PORT_BIT( 0x00000070, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_MODIFY("P3_P4")
+ PORT_BIT( 0x0000ffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+INPUT_PORTS_END
+
#define GV_BIOS \
ROM_REGION32_LE( 0x080000, "maincpu:rom", 0 ) \
ROM_LOAD( "999a01.7e", 0x0000000, 0x080000, CRC(ad498d2d) SHA1(02a82a2fe1fba0404517c3602324bfa64e23e478) )
@@ -829,7 +853,7 @@ GAME( 1996, lacrazyc, konamigv, konamigv, konamigv, driver_device, 0, RO
GAME( 1996, susume, lacrazyc, konamigv, konamigv, driver_device, 0, ROT0, "Konami", "Susume! Taisen Puzzle-Dama (GV027 Japan 1.20)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, btchamp, konamigv, btchamp, btchamp, driver_device, 0, ROT0, "Konami", "Beat the Champ (GV053 UAA01)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, kdeadeye, konamigv, kdeadeye, kdeadeye, driver_device, 0, ROT0, "Konami", "Dead Eye (GV054 UAA01)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1997, weddingr, konamigv, konamigv, konamigv, driver_device, 0, ROT0, "Konami", "Wedding Rhapsody (GX624 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1997, weddingr, konamigv, konamigv, weddingr, driver_device, 0, ROT0, "Konami", "Wedding Rhapsody (GX624 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1997, tmosh, konamigv, tmosh, konamigv, driver_device, 0, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart (GQ673 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1997, tmoshs, konamigv, tmosh, konamigv, driver_device, 0, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart Seal Version (GE755 JAA)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1997, tmoshsp, konamigv, tmosh, konamigv, driver_device, 0, ROT0, "Konami", "Tokimeki Memorial Oshiete Your Heart Seal Version Plus (GE756 JAB)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/kurukuru.cpp b/src/mame/drivers/kurukuru.cpp
index 1bbce2e5bb4..33bbf1c4f2d 100644
--- a/src/mame/drivers/kurukuru.cpp
+++ b/src/mame/drivers/kurukuru.cpp
@@ -121,14 +121,14 @@
1) Pyon Pyon (a marathon game with froggy characters).
2) Kuru Kuru Pyon Pyon (a kind of slots game with the same froggy characters).
- 3) Pyon Pyon Jyanpu (a contents where the same characters try to cross the river jumping on pads).
+ 3) Pyon Pyon Jump (a contents where the same characters try to cross the river jumping on pads).
4) Sui Sui Pyon Pyon (a swimming competition where the same characters swim with different styles, even walking).
Coin 1 (key 5) could be set either as Coin 1 or as Payout button, through
a DIP switch.
If you get a 'medal jam' error, and the game is not responding anymore, press
- RESET (key 0), and the game will reset to default values (even all counters
+ RESET (key 9), and the game will reset to default values (even all counters
will be cleared).
@@ -158,7 +158,7 @@
Bookkeeping...
- Pressing Bookkeeping key (key 9), you enter the Bookkeeping Mode. There are
+ Pressing Bookkeeping key (key 0), you enter the Bookkeeping Mode. There are
2 screens with all the game information like DIP switches and statistics...
1st screen...
@@ -179,10 +179,10 @@
----------------------------------------------------------------------------------
- * Pyon Pyon Jyanpu:
+ * Pyon Pyon Jump:
The game name could be translated as "Hop Hop Jump"
- Pyon is the sound of jumps. Jyanpu means jump.
+ Pyon Pyon is an onomatopoeia for hopping or jumping lightly.
How to play...
@@ -196,7 +196,7 @@
Bookkeeping...
- Pressing Bookkeeping key (key 9), you enter the Bookkeeping Mode. There are
+ Pressing Bookkeeping key (key 0), you enter the Bookkeeping Mode. There are
2 screens with all the game information like DIP switches and statistics...
1st screen...
@@ -214,7 +214,7 @@
- Bet distribution (1, 2, 3, 4, 5~10)
- Omake (bonus) distribution (games total, win games, loss games)
-
+
Pressing the Bookkeeping key once more, you exit the mode and go back to the game.
@@ -437,7 +437,7 @@ ADDRESS_MAP_END
/*
00h W --> bankswitching reg...
-
+
10h W --> 00's \
11h W --> 02 8f 20 91... > V9938 OK
13h W --> /
@@ -543,11 +543,11 @@ static INPUT_PORTS_START( kurukuru )
/* bits d0-d3 are JAMMA top side pins 20,21,22,23, bits d4-d7 are JAMMA bottom side pins 20,21,22,23
so that's player 1 left/right/button1/button2 then player 2 left/right/button1/button2
*/
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_Z) PORT_NAME("1st (Bote/Botechin)")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_X) PORT_NAME("2nd (Oume)")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_C) PORT_NAME("3rd (Pyoko/Pyokorin)")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_V) PORT_NAME("4th (Kunio)")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_B) PORT_NAME("5th (Pyon-Pyon)")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("1st (Bote/Botechin)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("2nd (Oume)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("3rd (Pyoko/Pyokorin)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("4th (Kunio)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("5th (Pyon-Pyon)")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_N) PORT_NAME("Unknown A0h - bit5")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_M) PORT_NAME("Unknown A0h - bit6")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
@@ -556,9 +556,9 @@ static INPUT_PORTS_START( kurukuru )
/* routed to JAMMA top side 15, bottom 15, top 16, bottom 16, top 17, bottom 17, top 24, bottom 24
so that's test, tilt/slam, coin 1, coin 2, p1 start, p2 start, p1 button 3, p2 button 3
*/
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Bookkeeping")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("Medal In")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Reset Button")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Reset Button")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A) PORT_NAME("Unknown B0h - bit4")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE (2)
@@ -620,19 +620,19 @@ INPUT_PORTS_END
static INPUT_PORTS_START( ppj )
PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_Z) PORT_NAME("1st (Boketa)")
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_X) PORT_NAME("2nd (Kunio)")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_C) PORT_NAME("3rd (Pyon-Pyon)")
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_V) PORT_NAME("4th (Pyokorin)")
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_B) PORT_NAME("5th (Botechin)")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("1st (Boketa)")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("2nd (Kunio)")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("3rd (Pyon-Pyon)")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("4th (Pyokorin)")
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("5th (Botechin)")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S) PORT_NAME("Unknown 70h - bit5")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) PORT_NAME("Unknown 70h - bit6")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Bookkeeping")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_NAME("Medal In")
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_0) PORT_NAME("Reset Button")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_9) PORT_NAME("Reset Button")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A) PORT_NAME("Unknown 60h - bit4")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE (2)
@@ -808,9 +808,9 @@ ROM_START( kurukuru )
ROM_LOAD( "7908b-4.ic32", 0x0600, 0x0034, CRC(bddf925e) SHA1(861cf5966444d0c0392241e5cfa08db475fb439a) )
ROM_END
-/* Pyon Pyon Jyanpu.
+/* Pyon Pyon Jump.
Ver 1.40.
- 199?, Success / Taiyo Jidoki.
+ 199?, Success / Taiyo Jidoki.
*/
ROM_START( ppj )
ROM_REGION( 0x08000, "maincpu", 0 )
@@ -839,7 +839,7 @@ ROM_END
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
GAME( 1990, kurukuru, 0, kurukuru, kurukuru, driver_device, 0, ROT0, "Success / Taiyo Jidoki", "Kuru Kuru Pyon Pyon (Japan)", 0 )
-GAME( 199?, ppj, 0, ppj, ppj, driver_device, 0, ROT0, "Success / Taiyo Jidoki", "Pyon Pyon Jyanpu (V1.40, Japan)", 0 )
+GAME( 199?, ppj, 0, ppj, ppj, driver_device, 0, ROT0, "Success / Taiyo Jidoki", "Pyon Pyon Jump (V1.40, Japan)", 0 )
// unemulated....
diff --git a/src/mame/drivers/lisa.cpp b/src/mame/drivers/lisa.cpp
index f92b4bf386f..e7e06b5cb12 100644
--- a/src/mame/drivers/lisa.cpp
+++ b/src/mame/drivers/lisa.cpp
@@ -102,10 +102,10 @@ static MACHINE_CONFIG_START( lisa, lisa_state )
MCFG_CPU_VBLANK_INT_DRIVER("screen", lisa_state, lisa_interrupt)
MCFG_CPU_ADD(COP421_TAG, COP421, 3900000)
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_ENABLED )
+ MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true )
MCFG_CPU_ADD(KB_COP421_TAG, COP421, 3900000) // ?
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_ENABLED )
+ MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true )
MCFG_CPU_ADD("fdccpu", M6504, 2000000) /* 16.000 MHz / 8 in when DIS asserted, 16.000 MHz / 9 otherwise (?) */
MCFG_CPU_PROGRAM_MAP(lisa_fdc_map)
diff --git a/src/mame/drivers/looping.cpp b/src/mame/drivers/looping.cpp
index 09ba6ffeda2..fedf2eb00b5 100644
--- a/src/mame/drivers/looping.cpp
+++ b/src/mame/drivers/looping.cpp
@@ -626,7 +626,7 @@ static MACHINE_CONFIG_START( looping, looping_state )
MCFG_TMS99xx_ADD("audiocpu", TMS9980A, SOUND_CLOCK/4, looping_sound_map, looping_sound_io_map)
MCFG_CPU_ADD("mcu", COP420, COP_CLOCK)
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED )
+ MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false )
MCFG_COP400_WRITE_L_CB(WRITE8(looping_state, cop_l_w))
MCFG_COP400_READ_L_CB(READ8(looping_state, cop_unk_r))
MCFG_COP400_READ_G_CB(READ8(looping_state, cop_unk_r))
diff --git a/src/mame/drivers/m5.cpp b/src/mame/drivers/m5.cpp
index 08ae31888d9..8344b68e9e3 100644
--- a/src/mame/drivers/m5.cpp
+++ b/src/mame/drivers/m5.cpp
@@ -2,18 +2,18 @@
// copyright-holders:Curt Coder, Ales Dlabac
/***************************************************************************
- Sord m.5
-
- http://www.retropc.net/mm/m5/
- http://www.museo8bits.es/wiki/index.php/Sord_M5 not working
- http://k5.web.klfree.net/content/view/10/11/ not working
- http://k5.web.klfree.net/images/stories/sord/m5heap.htm not working
- http://k5.klfree.net/index.php?option=com_content&task=view&id=5&Itemid=3
- http://k5.klfree.net/index.php?option=com_content&task=view&id=10&Itemid=11
- http://k5.klfree.net/index.php?option=com_content&task=view&id=14&Itemid=3
- http://www.dlabi.cz/?s=sord
- https://www.facebook.com/groups/59667560188/
- http://www.oldcomp.cz/viewtopic.php?f=103&t=1164
+ Sord m.5
+
+ http://www.retropc.net/mm/m5/
+ http://www.museo8bits.es/wiki/index.php/Sord_M5 not working
+ http://k5.web.klfree.net/content/view/10/11/ not working
+ http://k5.web.klfree.net/images/stories/sord/m5heap.htm not working
+ http://k5.klfree.net/index.php?option=com_content&task=view&id=5&Itemid=3
+ http://k5.klfree.net/index.php?option=com_content&task=view&id=10&Itemid=11
+ http://k5.klfree.net/index.php?option=com_content&task=view&id=14&Itemid=3
+ http://www.dlabi.cz/?s=sord
+ https://www.facebook.com/groups/59667560188/
+ http://www.oldcomp.cz/viewtopic.php?f=103&t=1164
****************************************************************************/
@@ -21,34 +21,34 @@
TODO:
- - fd5 floppy
- - SI-5 serial interface (8251, ROM)
- - ramdisk for KRX Memory expansion
- - rewrite fd5 floppy as unpluggable device
- - move dipswitch declaration to softwarelist file?
- - 64krx: get windows ROM version with cpm & ramdisk support (Stuchlik S.E.I. version)
+ - fd5 floppy
+ - SI-5 serial interface (8251, ROM)
+ - ramdisk for KRX Memory expansion
+ - rewrite fd5 floppy as unpluggable device
+ - move dipswitch declaration to softwarelist file?
+ - 64krx: get windows ROM version with cpm & ramdisk support (Stuchlik S.E.I. version)
- - brno mod: make the dsk image writeable
- - brno mod: in console version lost data on RAMDISK after soft reset
- - brno mod: add support for lzr floppy disc format
- - brno mod: include basic-i
+ - brno mod: make the dsk image writeable
+ - brno mod: in console version lost data on RAMDISK after soft reset
+ - brno mod: add support for lzr floppy disc format
+ - brno mod: include basic-i
CHANGELOG:
10.02.2016
- - fixed bug: crash if rom card was only cart
- - fixed bug: when em-5 selected monitor rom wasn't paged in
- - brno mod: spin motor on upon restart
- - brno mod: windowed boot as default rom
- - brno mod: fixed bug: tape command in menu now works
+ - fixed bug: crash if rom card was only cart
+ - fixed bug: when em-5 selected monitor rom wasn't paged in
+ - brno mod: spin motor on upon restart
+ - brno mod: windowed boot as default rom
+ - brno mod: fixed bug: tape command in menu now works
05.02.2016
- - added BRNO modification - 1024kB Ramdisk + CP/M support
- - 32/64KB RAM expansions EM-5, 64KBI, 64KBF, 64KRX
- - since now own version of rom and slot handlers
- - 2 slots for carts
+ - added BRNO modification - 1024kB Ramdisk + CP/M support
+ - 32/64KB RAM expansions EM-5, 64KBI, 64KBF, 64KRX
+ - since now own version of rom and slot handlers
+ - 2 slots for carts
******************************************************************************
@@ -58,12 +58,12 @@ Controlling (paging) of homebrew 64KB RAM carts
================================================
Used ports:
-EM-64, 64KBI: OUT 6CH,00H - enables ROM
- OUT 6CH,01H - enables RAM
-64KBF: OUT 30H,00000xxxB - enables RAM or ROM, see bellow
-64KRD, 64KRX: OUT 7FH,00000000B - enables RAM
- OUT 7FH,11111111B - enables ROM
- OUT 7FH,xxxxxxxxB - enables RAM and ROM, see bellow
+EM-64, 64KBI: OUT 6CH,00H - enables ROM
+ OUT 6CH,01H - enables RAM
+64KBF: OUT 30H,00000xxxB - enables RAM or ROM, see bellow
+64KRD, 64KRX: OUT 7FH,00000000B - enables RAM
+ OUT 7FH,11111111B - enables ROM
+ OUT 7FH,xxxxxxxxB - enables RAM and ROM, see bellow
===========================================================================================================================
@@ -78,93 +78,93 @@ RAM/ROM modes of 64KBF version 2C cart
------------------------------------------
Memory paging is done by using "OUT &30,mod".
-MODE READ WRITE
+MODE READ WRITE
----------------------------------------------------------------------
- 00 8 KB MON + 20 KB BF + 36 KB RAM 28 KB DIS + 36 KB RAM
- 01 64 KB RAM 64 KB RAM
- 02 8 KB MON + 56 KB RAM 64 KB RAM
- 03 64 KB RAM 28 KB DIS + 36 KB RAM
- 04 64 KB RAM 16 KB DIS + 48 KB RAM
- 05 8 KB MON + 20 KB BF + 36 KB RAM 64 KB RAM
- 06 8 KB MON + 20 KB DIS + 36 KB RAM 64 KB RAM
- 07 64 KB DIS 64 KB DIS
-
+ 00 8 KB MON + 20 KB BF + 36 KB RAM 28 KB DIS + 36 KB RAM
+ 01 64 KB RAM 64 KB RAM
+ 02 8 KB MON + 56 KB RAM 64 KB RAM
+ 03 64 KB RAM 28 KB DIS + 36 KB RAM
+ 04 64 KB RAM 16 KB DIS + 48 KB RAM
+ 05 8 KB MON + 20 KB BF + 36 KB RAM 64 KB RAM
+ 06 8 KB MON + 20 KB DIS + 36 KB RAM 64 KB RAM
+ 07 64 KB DIS 64 KB DIS
+
Version LZR ( 2C )
================
+------------+
-|////////////| READ ONLY AREA
+|////////////| READ ONLY AREA
+------------+
-|\\\\\\\\\\\\| WRITE ONLY AREA
+|\\\\\\\\\\\\| WRITE ONLY AREA
+------------+
-|XXXXXXXXXXXX| R&W AREA
+|XXXXXXXXXXXX| R&W AREA
+------------+
-| | DISABLED R&W
+| | DISABLED R&W
+------------+
- 0 0 0 1 1 2 2 2 3 3 4 4 4 5 5 6 6
-kB 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6 0 4
- +-------+-------------------+
-ROM |MONITOR| BASIC-F |
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-RAM | | | | | | | | |
- +-------+-------+-------+-------+-------+-------+-------+-------+
+ 0 0 0 1 1 2 2 2 3 3 4 4 4 5 5 6 6
+kB 0 4 8 2 6 0 4 8 2 6 0 4 8 2 6 0 4
+ +-------+-------------------+
+ROM |MONITOR| BASIC-F |
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+RAM | | | | | | | | |
+ +-------+-------+-------+-------+-------+-------+-------+-------+
CART | | | | | | | | |
- +-------+-------+-------+-------+-------+-------+-------+-------+
+ +-------+-------+-------+-------+-------+-------+-------+-------+
Mode
- +-------+-------------------+
- |///////|///////////////////|
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-M0 | | | | |XXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
- +-------+-------+-------+-------+-------+-------+-------+-------+
-
- +-------+-------------------+
- | | |
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-M1 |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
- +-------+-------+-------+-------+-------+-------+-------+-------+
-
- +-------+-------------------+
- |///////| |
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-M2 |\\\\\\\|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
- +-------+-------+-------+-------+-------+-------+-------+-------+
-
- +-------+-------------------+
- | | |
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-M3 |///////|///////|///////|///|XXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
- +-------+-------+-------+-------+-------+-------+-------+-------+
-
- +-------+-------------------+
- | | |
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-M4 |///////|///////|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
- +-------+-------+-------+-------+-------+-------+-------+-------+
-
- +-------+-------------------+
- |///////|///////////////////|
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-M5 |\\\\\\\|\\\\\\\|\\\\\\\|\\\|XXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
- +-------+-------+-------+-------+-------+-------+-------+-------+
-
- +-------+-------------------+
- |///////| |
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-M6 |\\\\\\\|\\\\\\\|\\\\\\\|\\\|XXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
- +-------+-------+-------+---+---+-------+-------+-------+-------+
- |///////|///////|///|
- +-------+-------+---+
-
- +-------+-------------------+
- | | |
- +-------+-------+-------+---+---+-------+-------+-------+-------+
-M7 | | | | | | | | |
- +-------+-------+-------+-------+-------+-------+-------+-------+
- |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
- +---------------------------------------------------------------+
+ +-------+-------------------+
+ |///////|///////////////////|
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+M0 | | | | |XXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ +-------+-------------------+
+ | | |
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+M1 |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ +-------+-------------------+
+ |///////| |
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+M2 |\\\\\\\|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ +-------+-------------------+
+ | | |
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+M3 |///////|///////|///////|///|XXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ +-------+-------------------+
+ | | |
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+M4 |///////|///////|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ +-------+-------------------+
+ |///////|///////////////////|
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+M5 |\\\\\\\|\\\\\\\|\\\\\\\|\\\|XXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ +-------+-------------------+
+ |///////| |
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+M6 |\\\\\\\|\\\\\\\|\\\\\\\|\\\|XXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+ |///////|///////|///|
+ +-------+-------+---+
+
+ +-------+-------------------+
+ | | |
+ +-------+-------+-------+---+---+-------+-------+-------+-------+
+M7 | | | | | | | | |
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+ |XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|XXXXXXX|
+ +---------------------------------------------------------------+
===========================================================================================================
@@ -181,9 +181,9 @@ C000 | DRAM | +----------+ +----------+
| | | EPROM 16K| | EPROM 16K|
| | | 4 | | 6 |
7FFF +----------+ +----------+ +----------+ +----------+
- | SRAM |
-7000 +----------+ +----------+
- | |
+ | SRAM |
+7000 +----------+ +----------+
+ | |
6000 | | +----------+
| | | |
5000 | | | EPROM 8K |
@@ -213,12 +213,12 @@ Switching between 4,5 and 6,7 is provided by hw switch, selecting ROM/RAM mode h
using OUT (7FH),A, where each bit of A means 8KB memory chunk ( state: 0=RAM,
1=ROM, bit: 0=1, 1=2, 2=3, 3=always SRAM, 4=4, 5=5, 6=6, 7=7 ).
-
+
*/
/*
*************************************************************
-* BRNO MOD *
+* BRNO MOD *
*************************************************************
HW and SW was originally created by Pavel Brychta with help of Jiri Kubin and L. Novak
This driver mod was implemented by Ales Dlabac with great help of Pavel Brychta. Without him this would never happen
@@ -230,7 +230,7 @@ Whole Sord's address area (0000-FFFF) is divided to 16 4kB banks. To this 16 ban
you can map any of possible 256 ramdisc blocks what allows user to have 1024kB large ramdisc.
Of course to be able to realise this is necessary page out all roms
-As pagination port MMU(page select) is used.
+As pagination port MMU(page select) is used.
For RAM write protection port CASEN is used. 0=access to ramdisk enabled, 0xff=ramdisk access disabled(data protection), &80=ROM2+48k RAM, &81=ROM2+4k RAM(this is not implemented)
For ROM page out port RAMEN is used. 0=rom enable; 0xff=rom+sord ram disabled (ramdisk visible)
@@ -243,20 +243,20 @@ a. SORD system variables and stack
c. Area where the first sector of 1st track is loaded, simultaneously is reserved for Hook program
d. Reserved for memory tests and ramdisk mapping(pagination). After boot is used as buffer for cursor position,
type of floppy and so on. Area consists of:
-
+
7FFFH .... bootloader version
7FFEH .... identification byte of floppy - is transferred from EPROM, it might be changed by SETUP
7FFDH .... number of last Ramdisk segment of RAM
-7FFBH .... address of cursor in VRAM in 40 columns CRT. For 80 columns CRT both bytes are zero
+7FFBH .... address of cursor in VRAM in 40 columns CRT. For 80 columns CRT both bytes are zero
7FF9H .... X,Y cursor actual position for 40 columns CRTs. In case of 80 columns CRT both bytes are zero
7203H .... Actual memory bank buffer
-
+
System floppy disk header on track 00 of 1st sector
- byte 0-1 ... system disk identification SY
- byte 2 ... # of physical sectors for BIOS or DOS plus # of segments for DIR
- byte 3-4 ... Start address for loading of BIOS or DOS
- byte 5 ... # of bytes for possible HOOK program
- byte 6- ... HOOK program, or either BIOS or DOS
+ byte 0-1 ... system disk identification SY
+ byte 2 ... # of physical sectors for BIOS or DOS plus # of segments for DIR
+ byte 3-4 ... Start address for loading of BIOS or DOS
+ byte 5 ... # of bytes for possible HOOK program
+ byte 6- ... HOOK program, or either BIOS or DOS
In case of HOOK, bytes 8 and 9 contains characters 'H' and 'O' for HOOK testing
@@ -266,9 +266,9 @@ Few other notes:
Floppy formats as follows:
- A: Ramdisk 1024kB, 8 sectors,
- B: Floppy format "Heat Magnolia" SingleSide SingleDensity , 40 tracks, 9 sectors, 512 sec. length, 128 dirs, offset 3, 166kB
- C: Floppy format "Robotron aka PC1715", DS DD, 80 tracks, 5 sectors, 1024 sec. length, 128 dirs, offset 2, 780kB
+ A: Ramdisk 1024kB, 8 sectors,
+ B: Floppy format "Heat Magnolia" SingleSide SingleDensity , 40 tracks, 9 sectors, 512 sec. length, 128 dirs, offset 3, 166kB
+ C: Floppy format "Robotron aka PC1715", DS DD, 80 tracks, 5 sectors, 1024 sec. length, 128 dirs, offset 2, 780kB
**********************************************************************************************************************************/
@@ -498,19 +498,18 @@ READ8_MEMBER( m5_state::mem64KBI_r ) //in 0x6c
WRITE8_MEMBER( m5_state::mem64KBI_w ) //out 0x6c
{
-
if (m_ram_type != MEM64KBI) return;
address_space &program = m_maincpu->space(AS_PROGRAM);
std::string region_tag;
m_cart_rom = memregion(region_tag.assign(m_cart_ram->tag()).append(M5SLOT_ROM_REGION_TAG).c_str());
memory_region *ram_region=memregion(region_tag.assign(m_cart_ram->tag()).append(":ram").c_str());
-
+
if (m_ram_mode == BIT(data, 0))
return;
-
+
m_ram_mode = BIT(data, 0);
-
+
//if 32kb only mode don't map top ram
if (m_ram_mode && (m_DIPS->read() & 4) != 4)
{
@@ -520,7 +519,7 @@ WRITE8_MEMBER( m5_state::mem64KBI_w ) //out 0x6c
{
program.install_rom(0x0000, 0x1fff, memregion(Z80_TAG)->base());
program.unmap_write(0x0000, 0x1fff);
-
+
//if AUTOSTART is on don't load any ROM cart
if (m_cart && (m_DIPS->read() & 2) != 2)
{
@@ -530,7 +529,7 @@ WRITE8_MEMBER( m5_state::mem64KBI_w ) //out 0x6c
else
program.unmap_readwrite(0x2000, 0x3fff);
}
-
+
logerror("64KBI: ROM %s", m_ram_mode == 0 ? "enabled\n" : "disabled\n");
}
@@ -544,49 +543,49 @@ WRITE8_MEMBER( m5_state::mem64KBF_w ) //out 0x30
address_space &program = m_maincpu->space(AS_PROGRAM);
std::string region_tag;
- m_cart_rom = memregion(region_tag.assign(m_cart_ram->tag()).append(M5SLOT_ROM_REGION_TAG).c_str()); //ROM region of the cart
- memory_region *ram_region=memregion(region_tag.assign(m_cart_ram->tag()).append(":ram").c_str()); //RAM region of the cart
+ m_cart_rom = memregion(region_tag.assign(m_cart_ram->tag()).append(M5SLOT_ROM_REGION_TAG).c_str()); //ROM region of the cart
+ memory_region *ram_region=memregion(region_tag.assign(m_cart_ram->tag()).append(":ram").c_str()); //RAM region of the cart
memory_region *rom_region=memregion(region_tag.assign(m_cart->tag()).append(M5SLOT_ROM_REGION_TAG).c_str()); //region where clasic ROM cartridge resides
-
+
if (m_ram_mode == data)
return;
m_ram_mode = data;
-
+
switch(m_ram_mode)
{
- case 0:
+ case 0:
program.unmap_write(0x0000, 0x6fff);
membank("bank1r")->set_base(memregion(Z80_TAG)->base());
membank("bank2r")->set_base(m_cart_rom->base());
membank("bank3r")->set_base(m_cart_rom->base()+0x2000);
membank("bank4r")->set_base(m_cart_rom->base()+0x4000);
- membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
- membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
+ membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
+ membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 1:
program.install_write_bank(0x0000,0x1fff,"bank1w");
program.install_write_bank(0x2000,0x3fff,"bank2w");
program.install_write_bank(0x4000,0x5fff,"bank3w");
program.install_write_bank(0x6000,0x6fff,"bank4w");
- membank("bank1r")->set_base(ram_region->base()+0x0000); membank("bank1w")->set_base(ram_region->base()+0x0000);
- membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank2w")->set_base(ram_region->base()+0x2000);
- membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
- membank("bank4r")->set_base(ram_region->base()+0x6000); membank("bank4w")->set_base(ram_region->base()+0x6000);
- membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
- membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
+ membank("bank1r")->set_base(ram_region->base()+0x0000); membank("bank1w")->set_base(ram_region->base()+0x0000);
+ membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank2w")->set_base(ram_region->base()+0x2000);
+ membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
+ membank("bank4r")->set_base(ram_region->base()+0x6000); membank("bank4w")->set_base(ram_region->base()+0x6000);
+ membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
+ membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 2:
program.install_write_bank(0x0000,0x1fff,"bank1w");
program.install_write_bank(0x2000,0x3fff,"bank2w");
program.install_write_bank(0x4000,0x5fff,"bank3w");
program.install_write_bank(0x6000,0x6fff,"bank4w");
- membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
- membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank2w")->set_base(ram_region->base()+0x2000);
- membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
- membank("bank4r")->set_base(ram_region->base()+0x6000); membank("bank4w")->set_base(ram_region->base()+0x6000);
- membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
- membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
+ membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
+ membank("bank2r")->set_base(ram_region->base()+0x2000); membank("bank2w")->set_base(ram_region->base()+0x2000);
+ membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
+ membank("bank4r")->set_base(ram_region->base()+0x6000); membank("bank4w")->set_base(ram_region->base()+0x6000);
+ membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
+ membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 3:
program.unmap_write(0x0000, 0x6fff);
@@ -594,8 +593,8 @@ WRITE8_MEMBER( m5_state::mem64KBF_w ) //out 0x30
membank("bank2r")->set_base(ram_region->base()+0x2000);
membank("bank3r")->set_base(ram_region->base()+0x4000);
membank("bank4r")->set_base(ram_region->base()+0x6000);
- membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
- membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
+ membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
+ membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 4:
program.unmap_write(0x0000, 0x3fff);
@@ -603,34 +602,34 @@ WRITE8_MEMBER( m5_state::mem64KBF_w ) //out 0x30
program.install_write_bank(0x6000,0x6fff,"bank4w");
membank("bank1r")->set_base(ram_region->base()+0x0000);
membank("bank2r")->set_base(ram_region->base()+0x2000);
- membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
- membank("bank4r")->set_base(ram_region->base()+0x6000); membank("bank4w")->set_base(ram_region->base()+0x6000);
- membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
- membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
+ membank("bank3r")->set_base(ram_region->base()+0x4000); membank("bank3w")->set_base(ram_region->base()+0x4000);
+ membank("bank4r")->set_base(ram_region->base()+0x6000); membank("bank4w")->set_base(ram_region->base()+0x6000);
+ membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
+ membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 5:
program.install_write_bank(0x0000,0x1fff,"bank1w");
program.install_write_bank(0x2000,0x3fff,"bank2w");
program.install_write_bank(0x4000,0x5fff,"bank3w");
program.install_write_bank(0x6000,0x6fff,"bank4w");
- membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
- membank("bank2r")->set_base(m_cart_rom->base()); membank("bank2w")->set_base(ram_region->base()+0x2000);
- membank("bank3r")->set_base(m_cart_rom->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000);
- membank("bank4r")->set_base(m_cart_rom->base()+0x4000); membank("bank4w")->set_base(ram_region->base()+0x6000);
- membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
- membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
+ membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
+ membank("bank2r")->set_base(m_cart_rom->base()); membank("bank2w")->set_base(ram_region->base()+0x2000);
+ membank("bank3r")->set_base(m_cart_rom->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000);
+ membank("bank4r")->set_base(m_cart_rom->base()+0x4000); membank("bank4w")->set_base(ram_region->base()+0x6000);
+ membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
+ membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 6:
program.install_write_bank(0x0000,0x1fff,"bank1w");
program.install_write_bank(0x2000,0x3fff,"bank2w");
program.install_write_bank(0x4000,0x5fff,"bank3w");
program.install_write_bank(0x6000,0x6fff,"bank4w");
- membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
- membank("bank2r")->set_base(rom_region->base()+0x0000); membank("bank2w")->set_base(ram_region->base()+0x2000);
- membank("bank3r")->set_base(rom_region->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000);
- membank("bank4r")->set_base(rom_region->base()+0x4000); membank("bank4w")->set_base(ram_region->base()+0x6000);
- membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
- membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
+ membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base()+0x0000);
+ membank("bank2r")->set_base(rom_region->base()+0x0000); membank("bank2w")->set_base(ram_region->base()+0x2000);
+ membank("bank3r")->set_base(rom_region->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000);
+ membank("bank4r")->set_base(rom_region->base()+0x4000); membank("bank4w")->set_base(ram_region->base()+0x6000);
+ membank("bank5r")->set_base(ram_region->base()+0x8000); membank("bank5w")->set_base(ram_region->base()+0x8000);
+ membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case 7: //probably this won't work - it should redirect rw to another ram module
program.install_write_bank(0x0000,0x1fff,"bank1w");
@@ -638,16 +637,16 @@ WRITE8_MEMBER( m5_state::mem64KBF_w ) //out 0x30
program.install_write_bank(0x4000,0x5fff,"bank3w");
program.install_write_bank(0x6000,0x6fff,"bank4w");
program.install_readwrite_bank(0x7000,0x7fff,"sram");
- membank("bank1r")->set_base(rom_region->base()+0x0000); membank("bank1w")->set_base(rom_region->base()+0x0000);
- membank("bank2r")->set_base(rom_region->base()+0x2000); membank("bank2w")->set_base(rom_region->base()+0x2000);
- membank("bank3r")->set_base(rom_region->base()+0x4000); membank("bank3w")->set_base(rom_region->base()+0x4000);
- membank("bank4r")->set_base(rom_region->base()+0x6000); membank("bank4w")->set_base(rom_region->base()+0x6000);
+ membank("bank1r")->set_base(rom_region->base()+0x0000); membank("bank1w")->set_base(rom_region->base()+0x0000);
+ membank("bank2r")->set_base(rom_region->base()+0x2000); membank("bank2w")->set_base(rom_region->base()+0x2000);
+ membank("bank3r")->set_base(rom_region->base()+0x4000); membank("bank3w")->set_base(rom_region->base()+0x4000);
+ membank("bank4r")->set_base(rom_region->base()+0x6000); membank("bank4w")->set_base(rom_region->base()+0x6000);
membank("sram")->set_base(rom_region->base()+0x7000);
- membank("bank5r")->set_base(rom_region->base()+0x8000); membank("bank5w")->set_base(rom_region->base()+0x8000);
- membank("bank6r")->set_base(rom_region->base()+0xc000); membank("bank6w")->set_base(rom_region->base()+0xc000);
+ membank("bank5r")->set_base(rom_region->base()+0x8000); membank("bank5w")->set_base(rom_region->base()+0x8000);
+ membank("bank6r")->set_base(rom_region->base()+0xc000); membank("bank6w")->set_base(rom_region->base()+0xc000);
break;
}
-
+
logerror("64KBF RAM mode set to %d\n", m_ram_mode);
}
@@ -657,7 +656,6 @@ WRITE8_MEMBER( m5_state::mem64KBF_w ) //out 0x30
WRITE8_MEMBER( m5_state::mem64KRX_w ) //out 0x7f
{
-
if (m_ram_type != MEM64KRX) return;
if (m_ram_mode == data) return;
@@ -665,22 +663,22 @@ WRITE8_MEMBER( m5_state::mem64KRX_w ) //out 0x7f
std::string region_tag;
m_cart_rom = memregion(region_tag.assign(m_cart_ram->tag()).append(M5SLOT_ROM_REGION_TAG).c_str());
memory_region *ram_region=memregion(region_tag.assign(m_cart_ram->tag()).append(":ram").c_str());
-
+
m_ram_mode = data;
- BIT(m_ram_mode, 0) ? membank("bank1r")->set_base(memregion(Z80_TAG)->base()) : membank("bank1r")->set_base(ram_region->base());
- BIT(m_ram_mode, 1) ? membank("bank2r")->set_base(m_cart_rom->base()) : membank("bank2r")->set_base(ram_region->base()+0x2000);
- BIT(m_ram_mode, 2) ? membank("bank3r")->set_base(m_cart_rom->base()+0x2000) : membank("bank3r")->set_base(ram_region->base()+0x4000);
+ BIT(m_ram_mode, 0) ? membank("bank1r")->set_base(memregion(Z80_TAG)->base()) : membank("bank1r")->set_base(ram_region->base());
+ BIT(m_ram_mode, 1) ? membank("bank2r")->set_base(m_cart_rom->base()) : membank("bank2r")->set_base(ram_region->base()+0x2000);
+ BIT(m_ram_mode, 2) ? membank("bank3r")->set_base(m_cart_rom->base()+0x2000) : membank("bank3r")->set_base(ram_region->base()+0x4000);
if ((m_DIPS->read() & 0x01))
{
- BIT(m_ram_mode, 4) ? membank("bank5r")->set_base(m_cart_rom->base()+0x6000) : membank("bank5r")->set_base(ram_region->base()+0x8000);
- BIT(m_ram_mode, 5) ? membank("bank6r")->set_base(m_cart_rom->base()+0xa000) : membank("bank6r")->set_base(ram_region->base()+0xc000);
+ BIT(m_ram_mode, 4) ? membank("bank5r")->set_base(m_cart_rom->base()+0x6000) : membank("bank5r")->set_base(ram_region->base()+0x8000);
+ BIT(m_ram_mode, 5) ? membank("bank6r")->set_base(m_cart_rom->base()+0xa000) : membank("bank6r")->set_base(ram_region->base()+0xc000);
}
else
{
- BIT(m_ram_mode, 6) ? membank("bank5r")->set_base(m_cart_rom->base()+0xe000) : membank("bank5r")->set_base(ram_region->base()+0x8000);
- BIT(m_ram_mode, 7) ? membank("bank6r")->set_base(m_cart_rom->base()+0x12000): membank("bank6r")->set_base(ram_region->base()+0xc000);
+ BIT(m_ram_mode, 6) ? membank("bank5r")->set_base(m_cart_rom->base()+0xe000) : membank("bank5r")->set_base(ram_region->base()+0x8000);
+ BIT(m_ram_mode, 7) ? membank("bank6r")->set_base(m_cart_rom->base()+0x12000): membank("bank6r")->set_base(ram_region->base()+0xc000);
}
//if KRX ROM is paged out page in cart ROM if any
@@ -705,10 +703,10 @@ WRITE8_MEMBER( m5_state::mem64KRX_w ) //out 0x7f
static ADDRESS_MAP_START( m5_mem, AS_PROGRAM, 8, m5_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x1fff) AM_READ_BANK("bank1r") AM_WRITE_BANK("bank1w") //monitor rom(bios)
- AM_RANGE(0x2000, 0x3fff) AM_READ_BANK("bank2r") AM_WRITE_BANK("bank2w")
- AM_RANGE(0x4000, 0x5fff) AM_READ_BANK("bank3r") AM_WRITE_BANK("bank3w")
- AM_RANGE(0x6000, 0x6fff) AM_READ_BANK("bank4r") AM_WRITE_BANK("bank4w")
- AM_RANGE(0x7000, 0x7fff) AM_RAM //4kb internal RAM
+ AM_RANGE(0x2000, 0x3fff) AM_READ_BANK("bank2r") AM_WRITE_BANK("bank2w")
+ AM_RANGE(0x4000, 0x5fff) AM_READ_BANK("bank3r") AM_WRITE_BANK("bank3w")
+ AM_RANGE(0x6000, 0x6fff) AM_READ_BANK("bank4r") AM_WRITE_BANK("bank4w")
+ AM_RANGE(0x7000, 0x7fff) AM_RAM //4kb internal RAM
AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank5r") AM_WRITE_BANK("bank5w")
AM_RANGE(0xc000, 0xffff) AM_READ_BANK("bank6r") AM_WRITE_BANK("bank6w")
ADDRESS_MAP_END
@@ -864,7 +862,7 @@ static INPUT_PORTS_START( m5 )
PORT_DIPNAME(0x01, 0x01, "KRX: BASIC[on]/MSX[off]") //switching between BASIC and MSX ROMs which share same address area
PORT_DIPSETTING( 0x00, DEF_STR( Off ))
PORT_DIPSETTING( 0x01, DEF_STR( On ))
- PORT_DIPNAME(0x02, 0x00, "KBI: AUTOSTART") //pages out cart and starts loading from tape
+ PORT_DIPNAME(0x02, 0x00, "KBI: AUTOSTART") //pages out cart and starts loading from tape
PORT_DIPSETTING( 0x00, DEF_STR( Off ))
PORT_DIPSETTING( 0x02, DEF_STR( On ))
PORT_DIPNAME(0x04, 0x00, "KBI: 32kb only") //compatible with em-5
@@ -1051,25 +1049,24 @@ static ADDRESS_MAP_START( brno_io, AS_IO, 8, brno_state )
AM_RANGE(0x37, 0x37) AM_READ_PORT("JOY")
AM_RANGE(0x40, 0x40) AM_MIRROR(0x0f) AM_DEVWRITE("cent_data_out", output_latch_device, write)
AM_RANGE(0x50, 0x50) AM_MIRROR(0x0f) AM_READWRITE(sts_r, com_w)
-// AM_RANGE(0x60, 0x63) // SIO
- AM_RANGE(0x64, 0x67) AM_READWRITE(mmu_r, mmu_w) // MMU - page select (ramdisk memory paging)
- AM_RANGE(0x68, 0x6b) AM_READWRITE(ramsel_r, ramsel_w) // CASEN 0=access to ramdisk enabled, 0xff=ramdisk access disabled(data protection), &80=ROM2+48k RAM, &81=ROM2+4k RAM
- AM_RANGE(0x6c, 0x6f) AM_READWRITE(romsel_r, romsel_w) // RAMEN 0=rom enable; 0xff=rom+sord ram disabled (ramdisk visible)
-// AM_RANGE(0x70, 0x73) AM_MIRROR(0x04) AM_DEVREADWRITE(I8255A_TAG, i8255_device, read, write) // PIO
- AM_RANGE(0x78, 0x7b) AM_DEVREADWRITE(WD2797_TAG, wd_fdc_t, read, write) // WD2797 registers -> 78 - status/cmd, 79 - track #, 7a - sector #, 7b - data
- AM_RANGE(0x7c, 0x7c) AM_READWRITE(fd_r, fd_w) // drive select
+// AM_RANGE(0x60, 0x63) // SIO
+ AM_RANGE(0x64, 0x67) AM_READWRITE(mmu_r, mmu_w) // MMU - page select (ramdisk memory paging)
+ AM_RANGE(0x68, 0x6b) AM_READWRITE(ramsel_r, ramsel_w) // CASEN 0=access to ramdisk enabled, 0xff=ramdisk access disabled(data protection), &80=ROM2+48k RAM, &81=ROM2+4k RAM
+ AM_RANGE(0x6c, 0x6f) AM_READWRITE(romsel_r, romsel_w) // RAMEN 0=rom enable; 0xff=rom+sord ram disabled (ramdisk visible)
+// AM_RANGE(0x70, 0x73) AM_MIRROR(0x04) AM_DEVREADWRITE(I8255A_TAG, i8255_device, read, write) // PIO
+ AM_RANGE(0x78, 0x7b) AM_DEVREADWRITE(WD2797_TAG, wd_fdc_t, read, write) // WD2797 registers -> 78 - status/cmd, 79 - track #, 7a - sector #, 7b - data
+ AM_RANGE(0x7c, 0x7c) AM_READWRITE(fd_r, fd_w) // drive select
ADDRESS_MAP_END
READ8_MEMBER( brno_state::mmu_r )
{
- return 0;
+ return 0;
}
WRITE8_MEMBER( brno_state::mmu_w )
{
-
m_ramcpu = m_maincpu->state_int(Z80_B);
m_rambank = ~data; //m_maincpu->state_int(Z80_A);
m_rammap[m_ramcpu >> 4]=m_rambank;
@@ -1096,13 +1093,13 @@ WRITE8_MEMBER( brno_state::mmu_w )
}
//logerror("RAMdisk page change(CPURAM<=BANK): &%02X00<=%02X at address &%04X\n",m_ramcpu,m_rambank,m_maincpu->state_int(Z80_PC)-2);
-
+
}
READ8_MEMBER( brno_state::ramsel_r )
{
- return m_ramen;
+ return m_ramen;
}
@@ -1120,7 +1117,7 @@ WRITE8_MEMBER( brno_state::ramsel_w ) //out 6b
READ8_MEMBER( brno_state::romsel_r )
{
- return m_romen;
+ return m_romen;
}
WRITE8_MEMBER( brno_state::romsel_w ) //out 6c
@@ -1129,13 +1126,13 @@ WRITE8_MEMBER( brno_state::romsel_w ) //out 6c
if (!data)
{
- program.install_rom(0x0000, 0x3fff, memregion(Z80_TAG)->base());
+ program.install_rom(0x0000, 0x3fff, memregion(Z80_TAG)->base());
program.unmap_write(0x0000, 0x3fff);
m_romen=true;
}
else
- {
+ {
program.install_readwrite_bank(0x0000, 0x0fff, "bank1");
program.install_readwrite_bank(0x1000, 0x1fff, "bank2");
program.install_readwrite_bank(0x2000, 0x2fff, "bank3");
@@ -1146,7 +1143,7 @@ WRITE8_MEMBER( brno_state::romsel_w ) //out 6c
m_romen=false;
}
-
+
logerror("RAMEN change: out (&6c),%x\n",data);
}
@@ -1166,9 +1163,9 @@ WRITE8_MEMBER( brno_state::fd_w )
floppy_image_device *floppy;
m_floppy = NULL;
int disk = 0;
-
-
- floppy = m_floppy0->get_device();
+
+
+ floppy = m_floppy0->get_device();
if (floppy)
{
if(BIT(data,0))
@@ -1181,7 +1178,7 @@ WRITE8_MEMBER( brno_state::fd_w )
floppy->mon_w(1);
}
}
- floppy = m_floppy1->get_device();
+ floppy = m_floppy1->get_device();
if (floppy)
{
if(BIT(data,1))
@@ -1193,15 +1190,15 @@ WRITE8_MEMBER( brno_state::fd_w )
{
floppy->mon_w(1);
}
- }
+ }
m_fdc->set_floppy(m_floppy);
if (m_floppy)
{
m_floppy->set_rpm(300);
m_floppy->mon_w(0);
- logerror("Select floppy %d\n", disk);
- }
+ logerror("Select floppy %d\n", disk);
+ }
}
@@ -1231,7 +1228,7 @@ void m5_state::machine_start()
save_item(NAME(m_intra));
save_item(NAME(m_ibfa));
save_item(NAME(m_obfa));
-
+
}
void m5_state::machine_reset()
@@ -1240,16 +1237,16 @@ void m5_state::machine_reset()
std::string region_tag;
//is ram/rom cart plugged in?
- if (m_cart1->exists())
+ if (m_cart1->exists())
{
- if (m_cart1->get_type() > 0)
+ if (m_cart1->get_type() > 0)
m_cart_ram=m_cart1;
else
m_cart=m_cart1;
}
- if (m_cart2->exists())
+ if (m_cart2->exists())
{
- if (m_cart2->get_type() > 0)
+ if (m_cart2->get_type() > 0)
m_cart_ram=m_cart2;
else
m_cart=m_cart2;
@@ -1259,7 +1256,7 @@ void m5_state::machine_reset()
{
membank("bank1r")->set_base(memregion(Z80_TAG)->base());
program.unmap_write(0x0000, 0x1fff);
- // program.unmap_readwrite(0x2000, 0x6fff); //if you uncomment this line Sord starts cassette loading but it is not correct on real hw
+ // program.unmap_readwrite(0x2000, 0x6fff); //if you uncomment this line Sord starts cassette loading but it is not correct on real hw
program.unmap_readwrite(0x8000, 0xffff);
return;
}
@@ -1271,12 +1268,12 @@ void m5_state::machine_reset()
m_cart_rom = memregion(region_tag.assign(m_cart_ram->tag()).append(M5SLOT_ROM_REGION_TAG).c_str());
memory_region *ram_region=memregion(region_tag.assign(m_cart_ram->tag()).append(":ram").c_str());
-
+
switch (m_ram_type)
{
case EM_5:
program.install_rom(0x0000, 0x1fff, memregion(Z80_TAG)->base());
- program.unmap_write(0x0000, 0x1fff);
+ program.unmap_write(0x0000, 0x1fff);
program.install_readwrite_handler(0x8000, 0xffff, read8_delegate(FUNC(m5_cart_slot_device::read_ram),(m5_cart_slot_device*)m_cart_ram), write8_delegate(FUNC(m5_cart_slot_device::write_ram),(m5_cart_slot_device*)m_cart_ram));
if (m_cart)
{
@@ -1286,7 +1283,7 @@ void m5_state::machine_reset()
break;
case MEM64KBI:
program.install_rom(0x0000, 0x1fff, memregion(Z80_TAG)->base());
- program.unmap_write(0x0000, 0x1fff);
+ program.unmap_write(0x0000, 0x1fff);
program.install_ram(0x8000, 0xffff, ram_region->base()+0x8000);
//if AUTOSTART is on then page out cart and start tape loading
@@ -1297,7 +1294,7 @@ void m5_state::machine_reset()
}
else
program.unmap_readwrite(0x2000, 0x6fff); //monitor rom is testing this area for 0xFFs otherwise thinks there is some ROM cart plugged in
-
+
break;
case MEM64KBF:
program.unmap_write(0x0000, 0x6fff);
@@ -1309,11 +1306,11 @@ void m5_state::machine_reset()
membank("bank6r")->set_base(ram_region->base()+0xc000); membank("bank6w")->set_base(ram_region->base()+0xc000);
break;
case MEM64KRX:
- membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base());
- membank("bank2r")->set_base(m_cart_rom->base()); membank("bank2w")->set_base(ram_region->base()+0x2000);
- membank("bank3r")->set_base(m_cart_rom->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000);
- membank("bank4r")->set_base(ram_region->base()+0x6000); membank("bank4w")->set_base(ram_region->base()+0x6000);
-
+ membank("bank1r")->set_base(memregion(Z80_TAG)->base()); membank("bank1w")->set_base(ram_region->base());
+ membank("bank2r")->set_base(m_cart_rom->base()); membank("bank2w")->set_base(ram_region->base()+0x2000);
+ membank("bank3r")->set_base(m_cart_rom->base()+0x2000); membank("bank3w")->set_base(ram_region->base()+0x4000);
+ membank("bank4r")->set_base(ram_region->base()+0x6000); membank("bank4w")->set_base(ram_region->base()+0x6000);
+
//page in BASIC or MSX
if ((m_DIPS->read() & 0x01))
{
@@ -1322,7 +1319,7 @@ void m5_state::machine_reset()
}
else
{
- membank("bank5r")->set_base(m_cart_rom->base()+0xe000); membank("bank5w")->set_base(ram_region->base()+0x8000);
+ membank("bank5r")->set_base(m_cart_rom->base()+0xe000); membank("bank5w")->set_base(ram_region->base()+0x8000);
membank("bank6r")->set_base(m_cart_rom->base()+0x12000); membank("bank6w")->set_base(ram_region->base()+0xc000);
}
break;
@@ -1330,7 +1327,7 @@ void m5_state::machine_reset()
program.unmap_readwrite(0x8000, 0xffff);
}
//I don't have idea what to do with savestates, please someone take care of it
- //m_cart_ram->save_ram();
+ //m_cart_ram->save_ram();
}
else
//ram cart wasn't found so if rom cart present install it
@@ -1340,8 +1337,8 @@ void m5_state::machine_reset()
program.unmap_write(0x0000, 0x1fff);
program.install_read_handler(0x2000, 0x6fff, read8_delegate(FUNC(m5_cart_slot_device::read_rom),(m5_cart_slot_device*)m_cart));
program.unmap_write(0x2000, 0x6fff);
- }
- m_ram_mode=0;
+ }
+ m_ram_mode=0;
}
@@ -1352,25 +1349,24 @@ void brno_state::machine_start()
void brno_state::machine_reset()
{
-
/* enable ROM1+ROM2 */
address_space &program = m_maincpu->space(AS_PROGRAM);
-
+
program.install_rom(0x0000, 0x3fff, memregion(Z80_TAG)->base());
program.unmap_write(0x0000, 0x3fff);
//is ram/rom cart plugged in?
- if (m_cart1->exists())
+ if (m_cart1->exists())
{
- if (m_cart1->get_type() > 0)
+ if (m_cart1->get_type() > 0)
m_cart_ram=m_cart1;
else
m_cart=m_cart1;
}
if (m_cart2->exists())
{
- if (m_cart2->get_type() > 0)
+ if (m_cart2->get_type() > 0)
m_cart_ram=m_cart2;
else
m_cart=m_cart2;
@@ -1380,11 +1376,11 @@ void brno_state::machine_reset()
{
program.install_read_handler(0x2000, 0x6fff, read8_delegate(FUNC(m5_cart_slot_device::read_rom),(m5_cart_slot_device*)m_cart));
program.unmap_write(0x2000, 0x6fff);
- }
+ }
m_romen=true;
m_ramen=false;
-
+
floppy_image_device *floppy = NULL;
floppy = m_floppy0->get_device();
m_fdc->set_floppy(floppy);
@@ -1491,14 +1487,14 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED_CLASS( brno, m5, brno_state )
-
+
// basic machine hardware
MCFG_CPU_MODIFY(Z80_TAG)
MCFG_CPU_PROGRAM_MAP(m5_mem_brno)
MCFG_CPU_IO_MAP(brno_io)
-// MCFG_CPU_CONFIG(m5_daisy_chain)
-
-
+// MCFG_CPU_CONFIG(m5_daisy_chain)
+
+
//remove devices used for fd5 floppy
MCFG_DEVICE_REMOVE(Z80_FD5_TAG)
MCFG_DEVICE_REMOVE(I8255A_TAG)
@@ -1520,7 +1516,7 @@ static MACHINE_CONFIG_DERIVED_CLASS( brno, m5, brno_state )
MCFG_FLOPPY_DRIVE_SOUND(true)
// only one floppy drive
//MCFG_DEVICE_REMOVE(WD2797_TAG":1")
-
+
//MCFG_SNAPSHOT_ADD("snapshot", brno_state, brno, "rmd", 0)
// software list
@@ -1601,7 +1597,7 @@ DRIVER_INIT_MEMBER(m5_state,pal)
DRIVER_INIT_MEMBER(brno_state,brno)
{
-// logerror("Driver init entered\n" );
+// logerror("Driver init entered\n" );
}
diff --git a/src/mame/drivers/mbdtower.cpp b/src/mame/drivers/mbdtower.cpp
index d5a1d589604..bd2144742d0 100644
--- a/src/mame/drivers/mbdtower.cpp
+++ b/src/mame/drivers/mbdtower.cpp
@@ -242,7 +242,6 @@ void mbdtower_state::machine_start()
save_item(NAME(m_sensor_blind));
}
-
static MACHINE_CONFIG_START( mbdtower, mbdtower_state )
/* basic machine hardware */
diff --git a/src/mame/drivers/mcr68.cpp b/src/mame/drivers/mcr68.cpp
index 1736a5fb1f5..0377f173246 100644
--- a/src/mame/drivers/mcr68.cpp
+++ b/src/mame/drivers/mcr68.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
+// copyright-holders:Aaron Giles, Bryan McPhail
/***************************************************************************
Midway MCR-68k system
diff --git a/src/mame/drivers/meadwttl.cpp b/src/mame/drivers/meadwttl.cpp
index 8e13a178499..58f51227d44 100644
--- a/src/mame/drivers/meadwttl.cpp
+++ b/src/mame/drivers/meadwttl.cpp
@@ -168,4 +168,4 @@ ROM_END
GAME( 1976, bombaway, 0, meadows, 0, driver_device, 0, ROT0, "Meadows", "Bombs Away [TTL]", MACHINE_IS_SKELETON )
GAME( 1976, ckidzo, 0, meadows, 0, driver_device, 0, ROT0, "Meadows", "Ckidzo [TTL]", MACHINE_IS_SKELETON )
GAME( 1976, cgunship, 0, meadows, 0, driver_device, 0, ROT0, "Meadows", "Cobra Gunship [TTL]", MACHINE_IS_SKELETON )
-GAME( 197?, mead4in1, 0, meadows, 0, driver_device, 0, ROT0, "Meadows", "Meadows 4 in 1 [TTL]", MACHINE_IS_SKELETON )
+GAME( 1976, mead4in1, 0, meadows, 0, driver_device, 0, ROT0, "Meadows", "Meadows 4 in 1 [TTL]", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/megasys1.cpp b/src/mame/drivers/megasys1.cpp
index bed3ec42e7d..707c3628dcb 100644
--- a/src/mame/drivers/megasys1.cpp
+++ b/src/mame/drivers/megasys1.cpp
@@ -134,8 +134,7 @@ RAM RW 0f0000-0f3fff 0e0000-0effff? <
MACHINE_RESET_MEMBER(megasys1_state,megasys1)
{
-
- m_ignore_oki_status = 1; /* ignore oki status due 'protection' */
+ m_ignore_oki_status = 1; /* ignore oki status due 'protection' */
m_ip_latched = 0x0006; /* reset protection - some games expect this initial read without sending anything */
m_mcu_hs = 0;
}
@@ -274,8 +273,8 @@ WRITE16_MEMBER(megasys1_state::ip_select_w) // TO MCU
case 2 : m_ip_latched = m_io_p2->read(); break;
case 3 : m_ip_latched = m_io_dsw1->read(); break;
case 4 : m_ip_latched = m_io_dsw2->read(); break;
- case 5 : m_ip_latched = 0x0d; break; // startup check?
- case 6 : m_ip_latched = 0x06; break; // sent before each other command
+ case 5 : m_ip_latched = 0x0d; break; // startup check?
+ case 6 : m_ip_latched = 0x06; break; // sent before each other command
default: return; // get out if it wasn't a valid request
}
diff --git a/src/mame/drivers/merit.cpp b/src/mame/drivers/merit.cpp
index f438e37dea9..b1d8307f3e8 100644
--- a/src/mame/drivers/merit.cpp
+++ b/src/mame/drivers/merit.cpp
@@ -1503,20 +1503,20 @@ ROM_START( bigappg )
ROM_END
ROM_START( misdraw )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "2131-16_u5-2.u5", 0x0000, 0x8000, CRC(fc756320) SHA1(6b810c57ed1be844a04a6081d727e182509604b4) ) /* 2131-16 U5-2 081889 */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "2131-16_u5-2.u5", 0x0000, 0x8000, CRC(fc756320) SHA1(6b810c57ed1be844a04a6081d727e182509604b4) ) /* 2131-16 U5-2 081889 */
- ROM_REGION( 0x6000, "gfx1", 0 )
- ROM_LOAD( "u39.u39", 0x0000, 0x2000, CRC(0f09d19b) SHA1(1f98559d5bad7c84d92ecea5a6df9429914a47f0) )
- ROM_LOAD( "u38.u38", 0x2000, 0x2000, CRC(8210a48d) SHA1(9af3e8ac8dcf1e548c4ba3ca8096e48dbb3b4700) )
- ROM_LOAD( "u37.u37", 0x4000, 0x2000, CRC(34ca07d5) SHA1(3656b3eb78dd6ea06cf323a08fc3f949a01b76a3) )
+ ROM_REGION( 0x6000, "gfx1", 0 )
+ ROM_LOAD( "u39.u39", 0x0000, 0x2000, CRC(0f09d19b) SHA1(1f98559d5bad7c84d92ecea5a6df9429914a47f0) )
+ ROM_LOAD( "u38.u38", 0x2000, 0x2000, CRC(8210a48d) SHA1(9af3e8ac8dcf1e548c4ba3ca8096e48dbb3b4700) )
+ ROM_LOAD( "u37.u37", 0x4000, 0x2000, CRC(34ca07d5) SHA1(3656b3eb78dd6ea06cf323a08fc3f949a01b76a3) )
- ROM_REGION( 0x2000, "gfx2", 0 )
- ROM_LOAD( "haip_u40.u40", 0x0000, 0x2000, CRC(ac4983b8) SHA1(a552a15f813c331de67eaae2ed42cc037b26c5bd) )
+ ROM_REGION( 0x2000, "gfx2", 0 )
+ ROM_LOAD( "haip_u40.u40", 0x0000, 0x2000, CRC(ac4983b8) SHA1(a552a15f813c331de67eaae2ed42cc037b26c5bd) )
- ROM_REGION( 0x0800, "cpunvram", ROMREGION_ERASEFF )
- // this contains CODE, the game jumps there on startup
- ROM_LOAD( "crt-209_2131-16", 0x0000, 0x0800, CRC(34729437) SHA1(f097a1a97d8078d7d6a6af85be416b1d1d09c7f2) ) /* 2816 EEPROM in Z80 epoxy CPU module */
+ ROM_REGION( 0x0800, "cpunvram", ROMREGION_ERASEFF )
+ // this contains CODE, the game jumps there on startup
+ ROM_LOAD( "crt-209_2131-16", 0x0000, 0x0800, CRC(34729437) SHA1(f097a1a97d8078d7d6a6af85be416b1d1d09c7f2) ) /* 2816 EEPROM in Z80 epoxy CPU module */
ROM_END
ROM_START( dodgectya )
diff --git a/src/mame/drivers/meritm.cpp b/src/mame/drivers/meritm.cpp
index fad7bfa2f7f..07c93d7b8f5 100644
--- a/src/mame/drivers/meritm.cpp
+++ b/src/mame/drivers/meritm.cpp
@@ -29,10 +29,10 @@ Sound: AY8930 (or compatible)
OSC: 21.47727MHz
Other: Z80APIO x 2 (I/O and interrupt controllers)
P8255A (I/O)
- 8-switch DSW (socketted)
+ 8-switch DSW (socketed)
Volume pot
-Memory: Fujitsu MB81464-12 (or compatible) all socketted. The 3rd row of memory
+Memory: Fujitsu MB81464-12 (or compatible) all socketed. The 3rd row of memory
may or may not be populated.
JP6 - 3 pin jumper: ROM size (1-2 = 27256, 2-3 = 27512)
@@ -205,9 +205,22 @@ public:
m_region_extra(*this, "extra")
{ }
- std::unique_ptr<UINT8[]> m_ram;
required_device<z80pio_device> m_z80pio_0;
required_device<z80pio_device> m_z80pio_1;
+ required_device<ds1204_device> m_ds1204;
+ required_device<v9938_device> m_v9938_0;
+ required_device<v9938_device> m_v9938_1;
+ optional_device<microtouch_device> m_microtouch;
+ optional_device<ns16550_device> m_uart;
+ required_device<cpu_device> m_maincpu;
+ required_device<palette_device> m_palette;
+ required_memory_bank m_bank1;
+ optional_memory_bank m_bank2;
+ optional_memory_bank m_bank3;
+ required_memory_region m_region_maincpu;
+ optional_memory_region m_region_extra;
+ std::unique_ptr<UINT8[]> m_ram;
+
int m_vint;
int m_interrupt_vdp0_state;
int m_interrupt_vdp1_state;
@@ -216,11 +229,7 @@ public:
int m_bank;
int m_psd_a15;
UINT16 m_questions_loword_address;
- required_device<ds1204_device> m_ds1204;
- required_device<v9938_device> m_v9938_0;
- required_device<v9938_device> m_v9938_1;
- optional_device<microtouch_device> m_microtouch;
- optional_device<ns16550_device> m_uart;
+
DECLARE_WRITE8_MEMBER(meritm_crt250_bank_w);
DECLARE_WRITE8_MEMBER(meritm_psd_a15_w);
DECLARE_WRITE8_MEMBER(meritm_bank_w);
@@ -254,13 +263,6 @@ public:
UINT8 binary_to_BCD(UINT8 data);
DECLARE_WRITE_LINE_MEMBER(meritm_vdp0_interrupt);
DECLARE_WRITE_LINE_MEMBER(meritm_vdp1_interrupt);
- required_device<cpu_device> m_maincpu;
- required_device<palette_device> m_palette;
- required_memory_bank m_bank1;
- optional_memory_bank m_bank2;
- optional_memory_bank m_bank3;
- required_memory_region m_region_maincpu;
- optional_memory_region m_region_extra;
};
@@ -541,8 +543,8 @@ static ADDRESS_MAP_START( meritm_crt250_io_map, AS_IO, 8, meritm_state )
AM_RANGE(0x30, 0x33) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
AM_RANGE(0x40, 0x43) AM_DEVREADWRITE("z80pio_0", z80pio_device, read, write)
AM_RANGE(0x50, 0x53) AM_DEVREADWRITE("z80pio_1", z80pio_device, read, write)
- AM_RANGE(0x80, 0x80) AM_DEVREAD("aysnd", ay8910_device, data_r)
- AM_RANGE(0x80, 0x81) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
+ AM_RANGE(0x80, 0x80) AM_DEVREAD("aysnd", ay8930_device, data_r)
+ AM_RANGE(0x80, 0x81) AM_DEVWRITE("aysnd", ay8930_device, address_data_w)
AM_RANGE(0xff, 0xff) AM_WRITE(meritm_crt250_bank_w)
ADDRESS_MAP_END
@@ -554,8 +556,8 @@ static ADDRESS_MAP_START( meritm_crt250_crt258_io_map, AS_IO, 8, meritm_state )
AM_RANGE(0x40, 0x43) AM_DEVREADWRITE("z80pio_0", z80pio_device, read, write)
AM_RANGE(0x50, 0x53) AM_DEVREADWRITE("z80pio_1", z80pio_device, read, write)
AM_RANGE(0x60, 0x67) AM_DEVREADWRITE("ns16550", ns16550_device, ins8250_r, ins8250_w)
- AM_RANGE(0x80, 0x80) AM_DEVREAD("aysnd", ay8910_device, data_r)
- AM_RANGE(0x80, 0x81) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
+ AM_RANGE(0x80, 0x80) AM_DEVREAD("aysnd", ay8930_device, data_r)
+ AM_RANGE(0x80, 0x81) AM_DEVWRITE("aysnd", ay8930_device, address_data_w)
AM_RANGE(0xff, 0xff) AM_WRITE(meritm_crt250_bank_w)
ADDRESS_MAP_END
@@ -575,8 +577,8 @@ static ADDRESS_MAP_START( meritm_io_map, AS_IO, 8, meritm_state )
AM_RANGE(0x40, 0x43) AM_DEVREADWRITE("z80pio_0", z80pio_device, read, write)
AM_RANGE(0x50, 0x53) AM_DEVREADWRITE("z80pio_1", z80pio_device, read, write)
AM_RANGE(0x60, 0x67) AM_DEVREADWRITE("ns16550", ns16550_device, ins8250_r, ins8250_w)
- AM_RANGE(0x80, 0x80) AM_DEVREAD("aysnd", ay8910_device, data_r)
- AM_RANGE(0x80, 0x81) AM_DEVWRITE("aysnd", ay8910_device, address_data_w)
+ AM_RANGE(0x80, 0x80) AM_DEVREAD("aysnd", ay8930_device, data_r)
+ AM_RANGE(0x80, 0x81) AM_DEVWRITE("aysnd", ay8930_device, address_data_w)
AM_RANGE(0xff, 0xff) AM_WRITE(meritm_bank_w)
ADDRESS_MAP_END
@@ -1123,7 +1125,7 @@ static MACHINE_CONFIG_START( meritm_crt250, meritm_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("aysnd", AY8910, SYSTEM_CLK/12)
+ MCFG_SOUND_ADD("aysnd", AY8930, SYSTEM_CLK/12)
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW")) /* Port A read */
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(meritm_state, meritm_ay8930_port_b_w)) /* Port B write */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
diff --git a/src/mame/drivers/mexico86.cpp b/src/mame/drivers/mexico86.cpp
index d9e7a43c298..70487d512c4 100644
--- a/src/mame/drivers/mexico86.cpp
+++ b/src/mame/drivers/mexico86.cpp
@@ -39,7 +39,7 @@ Notes:
switch settings. Therefore, it's hardwired to be 1 coin / 1 credit.
- Kick and Run is a rom swap for Kiki KaiKai as the pal chips are all A85-0x
- A85 is the Taito rom code for Kiki KaiKai. Even the MCU is socketted!
+ A85 is the Taito rom code for Kiki KaiKai. Even the MCU is socketed!
Note MCU labeling:
diff --git a/src/mame/drivers/midwunit.cpp b/src/mame/drivers/midwunit.cpp
index f4670937e22..9d7eaeea835 100644
--- a/src/mame/drivers/midwunit.cpp
+++ b/src/mame/drivers/midwunit.cpp
@@ -1263,6 +1263,7 @@ GAME( 1994, mk3p40, mk3, wunit, mk3, midwunit_state, mk3r10, ROT0
GAME( 1994, umk3, 0, wunit, mk3, midwunit_state, umk3, ROT0, "Midway", "Ultimate Mortal Kombat 3 (rev 1.2)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, umk3r11, umk3, wunit, mk3, midwunit_state, umk3r11, ROT0, "Midway", "Ultimate Mortal Kombat 3 (rev 1.1)", MACHINE_SUPPORTS_SAVE )
GAME( 1994, umk3r10, umk3, wunit, mk3, midwunit_state, umk3r11, ROT0, "Midway", "Ultimate Mortal Kombat 3 (rev 1.0)", MACHINE_SUPPORTS_SAVE )
+// Ultimate Mortal Kombat 3 rev 2.0.35 (TE? Hack?) version known to exist
GAME( 1995, wwfmania, 0, wunit, wwfmania, midwunit_state, wwfmania, ROT0, "Midway", "WWF: Wrestlemania (rev 1.30 08/10/95)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, wwfmaniab, wwfmania, wunit, wwfmania, midwunit_state, wwfmania, ROT0, "Midway", "WWF: Wrestlemania (rev 1.20 08/02/95)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp
index 8f640ac1b9f..04abe3cc7dd 100644
--- a/src/mame/drivers/model3.cpp
+++ b/src/mame/drivers/model3.cpp
@@ -1619,7 +1619,7 @@ WRITE64_MEMBER(model3_state::model3_sys_w)
}
else
{
- logerror("Unknown 0x18/8 write %" I64FMT "x mask %" I64FMT"x\n", data, mem_mask);
+ logerror("Unknown 0x18/8 write %x mask %x\n", data, mem_mask);
}
break;
case 0x08/8:
diff --git a/src/mame/drivers/n64.cpp b/src/mame/drivers/n64.cpp
index 757f87e159a..770c42a6a09 100644
--- a/src/mame/drivers/n64.cpp
+++ b/src/mame/drivers/n64.cpp
@@ -266,16 +266,33 @@ void n64_mess_state::mempak_format(UINT8* pak)
0xff,0xff,0xff,0xff, 0x05,0x1a,0x5f,0x13, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0xff,0xff,0x01,0xff, 0x66,0x25,0x99,0xcd,
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,0x71,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03
+ 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00
};
- for (int i = 0; i < 0x8000; i += 2)
+ unsigned char pak_inode_table[] =
{
- pak[i+0] = 0x00;
- pak[i+1] = 0x03;
- }
- memcpy(pak, pak_header, 272);
+ 0x01,0x71,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03,
+ 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03, 0x00,0x03,0x00,0x03
+ };
+
+ memset(pak, 0, 0x8000);
+ memcpy(pak, pak_header, 256);
+ memcpy(pak+256, pak_inode_table, 256); // Main
+ memcpy(pak+512, pak_inode_table, 256); // Mirror
}
DEVICE_IMAGE_LOAD_MEMBER(n64_mess_state,n64_cart)
diff --git a/src/mame/drivers/namcops2.cpp b/src/mame/drivers/namcops2.cpp
index d53c83c3085..e5f527337c9 100644
--- a/src/mame/drivers/namcops2.cpp
+++ b/src/mame/drivers/namcops2.cpp
@@ -1466,10 +1466,10 @@ ROM_START( wanganmr )
SYSTEM246_BIOS
ROM_REGION(0x840000, "key", ROMREGION_ERASE00)
- ROM_LOAD( "wmr1vera.ic002", 0x000000, 0x800000, CRC(b431936b) SHA1(e2c543936cb5689a432662a69d0042c6179a3728) )
- ROM_LOAD( "wmr1vera_spr.ic002", 0x800000, 0x040000, CRC(b8b7539c) SHA1(f415bdc8e3ebf3b0c3d0d7607b894440e89b0fe7) )
+ ROM_LOAD( "wmr1vera.ic002", 0x000000, 0x800000, CRC(b431936b) SHA1(e2c543936cb5689a432662a69d0042c6179a3728) )
+ ROM_LOAD( "wmr1vera_spr.ic002", 0x800000, 0x040000, CRC(b8b7539c) SHA1(f415bdc8e3ebf3b0c3d0d7607b894440e89b0fe7) )
- DISK_REGION("dvd") // actually single-track CD-ROM
+ DISK_REGION("dvd") // actually single-track CD-ROM
DISK_IMAGE_READONLY( "wmr1-a", 0, SHA1(02feab4380dcc2dd95c85b209192f858bafc721e) )
ROM_END
diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp
index 96dc89ca2c4..f7554e290b2 100644
--- a/src/mame/drivers/naomi.cpp
+++ b/src/mame/drivers/naomi.cpp
@@ -1444,7 +1444,7 @@ Notes:
Development ROM board:
There are a few unreleased and many prototype game versions known to exist on this ROM board.
-Currently only Rumble Fish 2 prototype is dumped.
+Currently Rumble Fish 1 and 2 prototypes is dumped.
PC BD SYSTEMX 3MODE FLASH Rev.B
1111-00001402
@@ -1467,7 +1467,7 @@ Notes:
CN1 - This connector plugs into the main board through 'PC RELAY BD SX CRTG V1' adapter.
CN2 - 8 pin connector
CN3 - 6 pin connector for programming the XC9536 CPLD
- XC9536 - Xilinx XC9536XL in-system programmable CPLD (PLCC44), stamped JULIE_DEV
+ XC9536 - Xilinx XC9536XL in-system programmable CPLD (PLCC44), stamped JULIE_DEV on RF2 proto
XC2S30 - Xilinx XC2S30 Spartan-II FPGA (TQFP144), Rumble Fish 2 have printed sticker A08
17S30 - Xilinx 17S30APC OTP Configuration PROM, stamped SXFLS
IC12-IC27 - Fujitsu MBM29DL640E 64M TSOP48 flash ROMs
@@ -2977,7 +2977,7 @@ Probably at some stage of development NAOMI was planned as non-JVS system as wel
22 empty sockets ROM0 - ROM21
315-6187 Altera EPM7064LC68-10
PC16550DV UART
- Fujitsu MB???? SCSI controller
+ Fujitsu MB86604A SCSI controller
IPL BOOT ROM with printed label "Zukin Ver.0930 / 99/5/24 / SUM:DB9C"
*/
@@ -9007,6 +9007,7 @@ ROM_START( demofist )
ROM_LOAD( "ax0601f01.bin", 0, 4, CRC(25c9a3ae) SHA1(060c3fa1f8cd7d41785630db22e107790ade702a) )
ROM_END
+// (C)Dimps Wed Mar 10 19:08:51 2004 TANAKA (build 0028)
ROM_START( rumblef )
AW_BIOS
@@ -9024,11 +9025,38 @@ ROM_START( rumblef )
ROM_LOAD( "ax1801f01.bin", 0, 4, CRC(5b2e82d9) SHA1(de0d9c2511c72b95777897403cb63b690f74dfa1))
ROM_END
+// Prototype, (C)Dimps Fri Feb 20 11:00:43 2004 TANAKA (build 0028)
+ROM_START( rumblefp )
+ AW_BIOS
+
+ ROM_REGION( 0x8000000, "rom_board", ROMREGION_ERASEFF)
+ ROM_LOAD("ic12", 0x00000000, 0x00800000, CRC(79866072) SHA1(aa9decd8878ab5a21fe72afb96ee841e94ee07b5) )
+ ROM_LOAD("ic13", 0x00800000, 0x00800000, CRC(5630bc83) SHA1(46848b58a55c180d9a92df6914a1a8b9af35cc57) )
+ ROM_LOAD("ic14", 0x01000000, 0x00800000, CRC(bcd49846) SHA1(d8ab1253a2904ec4f7126880a55c780986cefd66) )
+ ROM_LOAD("ic15", 0x01800000, 0x00800000, CRC(61257cfb) SHA1(bbb8cdd265a55a9d4c9b133b68aa0434de9e0f5b) )
+ ROM_LOAD("ic16", 0x02000000, 0x00800000, CRC(c2eb7c61) SHA1(6284ff0fb670011ca9b6ade5acb33211b60cbe43) )
+ ROM_LOAD("ic17", 0x02800000, 0x00800000, CRC(dcf673d3) SHA1(0abb2087bd35221cd5ec5f4d6b2f03a2234b5634) )
+ ROM_LOAD("ic18", 0x03000000, 0x00800000, CRC(72c066bb) SHA1(a9d457b17d9dd79f54b71bdab24096ec3fbd00ea) )
+ ROM_LOAD("ic19", 0x03800000, 0x00800000, CRC(b20bf301) SHA1(3f5754b11f4b621703a21ddbf4762d6ada9f3ca3) )
+ ROM_LOAD("ic20", 0x04000000, 0x00800000, CRC(d27e7393) SHA1(62b9a880550067829f26ee120fad330257d349ff) )
+ ROM_LOAD("ic21", 0x04800000, 0x00800000, CRC(c2da1ecf) SHA1(26d14843c256eaf7196e59463adb6581a25e9cca) )
+ ROM_LOAD("ic22", 0x05000000, 0x00800000, CRC(730e0e1c) SHA1(469a2b34c492408aa70b60c1293481d218b76086) )
+ ROM_LOAD("ic23", 0x05800000, 0x00800000, CRC(d93afcac) SHA1(69e2d873e5a384d1e14ef47d6f6a3cbcbe782eec) )
+ ROM_LOAD("ic24", 0x06000000, 0x00800000, CRC(262d97b9) SHA1(1ae41ebea41035d21e174a03532dbaff9fe1ece2) )
+ ROM_LOAD("ic25", 0x06800000, 0x00800000, CRC(e45cf169) SHA1(3b080d6306262db36c6857e11b8ec506fa20f0f5) )
+ ROM_LOAD("ic26", 0x07000000, 0x00800000, CRC(6421720d) SHA1(6eaeb93d462542c3cf3e815d5fb309c337a8673b) )
+ // IC27 populated, empty
+
+ ROM_REGION( 4, "rom_key", 0 )
+ ROM_LOAD( "key.bin", 0, 4, CRC(757054c4) SHA1(7d5556d0940c582adbcf5697c7b81453d0c91153) )
+ROM_END
+
+// Build:Jun 25 2005 17:00:38
ROM_START( ngbc )
AW_BIOS
ROM_REGION( 0x14000000, "rom_board", ROMREGION_ERASEFF)
- ROM_LOAD( "ax3301p01.fmem1", 0x00000000, 0x0800000, CRC(6dd78275) SHA1(72d4cab58dbcebd666db21aeef190378ef447580) )
+ ROM_LOAD( "ax3301en_p01.fmem1", 0x00000000, 0x0800000, CRC(f7e24e67) SHA1(8eef26d44b294faa509304b1b04f4d801337bc99) )
ROM_LOAD( "ax3301m01.mrom1", 0x02000000, 0x2000000, CRC(e6013de9) SHA1(ccbc7c2e76153348646d75938d5c008dc80df17d) )
ROM_LOAD( "ax3302m01.mrom2", 0x04000000, 0x2000000, CRC(f7cfef6c) SHA1(c9e6231499a9c9c8650d9e61f34ff1fcce8d442c) )
ROM_LOAD( "ax3303m01.mrom3", 0x06000000, 0x2000000, CRC(0cdf8647) SHA1(0423f96842bef2c2ff454318dc6960b5052c0551) )
@@ -9041,9 +9069,26 @@ ROM_START( ngbc )
ROM_LOAD( "ax3301f01.bin", 0, 4, CRC(9afe949b) SHA1(4f7b039f3287da61a53a2d012993bfb57e1459bd) )
ROM_END
-// note: it looks there no regional differences in KOF NW EN and JP cartridge dumps, possible JP is just newer revision
+// JP cartridge have only few bytes difference - "CUSTOMER ID" field filled, probably used in online features for machine identification.
+// Build:Jun 25 2005 17:00:38
+ROM_START( ngbcj )
+ AW_BIOS
+
+ ROM_REGION( 0x14000000, "rom_board", ROMREGION_ERASEFF)
+ ROM_LOAD( "ax3301p01.fmem1", 0x00000000, 0x0800000, CRC(6dd78275) SHA1(72d4cab58dbcebd666db21aeef190378ef447580) )
+ ROM_LOAD( "ax3301m01.mrom1", 0x02000000, 0x2000000, CRC(e6013de9) SHA1(ccbc7c2e76153348646d75938d5c008dc80df17d) )
+ ROM_LOAD( "ax3302m01.mrom2", 0x04000000, 0x2000000, CRC(f7cfef6c) SHA1(c9e6231499a9c9c8650d9e61f34ff1fcce8d442c) )
+ ROM_LOAD( "ax3303m01.mrom3", 0x06000000, 0x2000000, CRC(0cdf8647) SHA1(0423f96842bef2c2ff454318dc6960b5052c0551) )
+ ROM_LOAD( "ax3304m01.mrom4", 0x0a000000, 0x2000000, CRC(2f031db0) SHA1(3214735f04fadf160137f0585bfc1a27eeecfac6) )
+ ROM_LOAD( "ax3305m01.mrom5", 0x0c000000, 0x2000000, CRC(f6668aaa) SHA1(6a78f8f0c7d7a71854ff87329290d38970cfb476) )
+ ROM_LOAD( "ax3306m01.mrom6", 0x0e000000, 0x2000000, CRC(5cf32fbd) SHA1(b6ae0abe5791b3d6f8db07b8c8ca22219a153801) )
+ ROM_LOAD( "ax3307m01.mrom7", 0x12000000, 0x2000000, CRC(26d9da53) SHA1(0015b4be670005a451274de68279b4302fc42a97) )
+
+ ROM_REGION( 4, "rom_key", 0 )
+ ROM_LOAD( "ax3301f01.bin", 0, 4, CRC(9afe949b) SHA1(4f7b039f3287da61a53a2d012993bfb57e1459bd) )
+ROM_END
-// Build: Jul 2004
+// Build:Jul 09 2004 15:05:53
ROM_START( kofnw )
AW_BIOS
@@ -9060,7 +9105,7 @@ ROM_START( kofnw )
ROM_LOAD( "ax2201f01.bin", 0, 4, CRC(b1fff0c8) SHA1(d83177e3672378a2bbc08653b4b73704333ca30a) )
ROM_END
-// Build: Sep 2004
+// Build:Sep 10 2004 12:05:34
ROM_START( kofnwj )
AW_BIOS
@@ -9180,6 +9225,7 @@ ROM_START( ftspeed )
ROM_END
// contents of cartridges labeled as JP and EN is the same
+// Build:Aug 07 2005 18:11:25
ROM_START( kofxi )
AW_BIOS
@@ -9214,6 +9260,8 @@ ROM_START( dirtypig )
ROM_LOAD( "315-6248.bin", 0, 4, CRC(553dd361) SHA1(a60a26b5ee786cf0bb3d09bb6f00374598fbd7cc) )
ROM_END
+// Ver 2005/12/16
+// Build:Jan 13 2006 00:49:12
ROM_START( mslug6 )
AW_BIOS
@@ -9228,6 +9276,7 @@ ROM_START( mslug6 )
ROM_LOAD( "ax3001f01.bin", 0, 4, CRC(0b9939e9) SHA1(4ca1225c7c9993542a67035a054ac579ed021de5) )
ROM_END
+// Build:Aug 05 2005 16:43:48
ROM_START( samsptk )
AW_BIOS
@@ -9710,6 +9759,7 @@ GAME( 2003, kov7sprt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "I
GAME( 2003, ggisuka, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Arc System Works / Sammy", "Guilty Gear Isuka", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING )
GAME( 2004, dirtypig, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Dirty Pigskin Football", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING )
GAME( 2004, rumblef, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING )
+GAME( 2004, rumblefp, rumblef, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish (prototype)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING )
GAME( 2004, rangrmsn, awbios, aw2c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Ranger Mission", GAME_FLAGS )
GAME( 2004, salmankt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Salary Man Kintarou", GAME_FLAGS )
GAME( 2004, ftspeed, awbios, aw1c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Faster Than Speed", GAME_FLAGS )
@@ -9717,7 +9767,8 @@ GAME( 2005, vfurlong, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "S
GAME( 2005, rumblef2, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish 2", GAME_FLAGS )
GAME( 2005, rumblf2p, rumblef2, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish 2 (prototype)", GAME_FLAGS )
GAME( 2005, anmlbskt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT270, "MOSS / Sammy", "Animal Basket", GAME_FLAGS )
-GAME( 2005, ngbc, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / SNK Playmore", "Neo-Geo Battle Coliseum", GAME_FLAGS )
+GAME( 2005, ngbc, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / SNK Playmore", "NeoGeo Battle Coliseum", GAME_FLAGS )
+GAME( 2005, ngbcj, ngbc, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / SNK Playmore", "NeoGeo Battle Coliseum (Japan)", GAME_FLAGS )
GAME( 2005, samsptk, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / SNK Playmore", "Samurai Spirits Tenkaichi Kenkakuden", GAME_FLAGS )
GAME( 2005, kofxi, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / SNK Playmore", "The King of Fighters XI", GAME_FLAGS )
GAME( 2005, fotns, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Arc System Works / Sega", "Fist Of The North Star", GAME_FLAGS )
diff --git a/src/mame/drivers/newbrain.cpp b/src/mame/drivers/newbrain.cpp
index df6c71fb59b..ec40490edc3 100644
--- a/src/mame/drivers/newbrain.cpp
+++ b/src/mame/drivers/newbrain.cpp
@@ -1,7 +1,5 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
-#include "includes/newbrain.h"
-#include "formats/mfi_dsk.h"
/*
@@ -33,14 +31,18 @@
TODO:
- - bitmapped graphics mode
- - COP420 microbus access
- - escape key is missing
+ - keyboard
+ - only key 7 is recognized
+ - escape key mapping
+ - VFD
+ - reset/powerup time constants
+ - bitmapped video
+ - accurate video timing
+ - cassette
+ - EIM
+ - floppy
- CP/M 2.2 ROMs
- - floppy disc controller
- - convert FDC into a device
- - convert EIM into a device
-
+ - localized ROM sets
- Micropage ROM/RAM card
- Z80 PIO board
- peripheral (PI) box
@@ -48,1446 +50,871 @@
*/
-void newbrain_state::check_interrupt()
-{
- int level = (!m_clkint || !m_copint) ? ASSERT_LINE : CLEAR_LINE;
- m_maincpu->set_input_line(INPUT_LINE_IRQ0, level);
-}
+#include "includes/newbrain.h"
-/* Bank Switching */
-#define memory_install_unmapped(program, bank, bank_start, bank_end) \
- program.unmap_readwrite(bank_start, bank_end);
-#define memory_install_rom_helper(program, bank, bank_start, bank_end) \
- program.install_read_bank(bank_start, bank_end, bank); \
- program.unmap_write(bank_start, bank_end);
+//**************************************************************************
+// MACROS / CONSTANTS
+//**************************************************************************
-#define memory_install_ram_helper(program, bank, bank_start, bank_end) \
- program.install_readwrite_bank(bank_start, bank_end, bank);
+#define LOG 0
+#define LOG_COP 0
+#define LOG_VFD 0
-void newbrain_eim_state::bankswitch()
-{
- address_space &program = m_maincpu->space(AS_PROGRAM);
- int bank;
- for (bank = 1; bank < 9; bank++)
- {
- int page = (m_a16 << 3) | bank;
- UINT8 data = ~m_pr[page];
- int ch = (data >> 3) & 0x03;
- int eim_bank = data & 0x07;
-
- UINT16 eim_bank_start = eim_bank * 0x2000;
- UINT16 bank_start = (bank - 1) * 0x2000;
- UINT16 bank_end = bank_start + 0x1fff;
- char bank_name[10];
- sprintf(bank_name,"bank%d",bank);
- switch (ch)
- {
- case 0:
- /* ROM */
- memory_install_rom_helper(program, bank_name, bank_start, bank_end);
- membank(bank_name)->configure_entry(0, m_eim_rom->base() + eim_bank_start);
- break;
- case 2:
- /* RAM */
- memory_install_ram_helper(program, bank_name, bank_start, bank_end);
- membank(bank_name)->configure_entry(0, m_eim_ram + eim_bank_start);
- break;
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
- default:
- logerror("Invalid memory channel %u!\n", ch);
- break;
- }
- }
-}
+//-------------------------------------------------
+// check_interrupt -
+//-------------------------------------------------
-void newbrain_state::bankswitch()
+void newbrain_state::check_interrupt()
{
- address_space &program = m_maincpu->space(AS_PROGRAM);
- int bank;
-
- for (bank = 1; bank < 9; bank++)
- {
- UINT16 bank_start = (bank - 1) * 0x2000;
- UINT16 bank_end = bank_start + 0x1fff;
- char bank_name[10];
- sprintf(bank_name,"bank%d",bank);
-
- if (m_pwrup)
- {
- /* all banks point to ROM at 0xe000 */
- memory_install_rom_helper(program, bank_name, bank_start, bank_end);
- membank(bank_name)->configure_entry(0, m_rom->base() + 0xe000);
- }
- else
- {
- membank(bank_name)->configure_entry(0, m_rom->base() + bank_start);
-
- if (bank < 5)
- {
- /* bank is RAM */
- memory_install_ram_helper(program, bank_name, bank_start, bank_end);
- }
- else if (bank == 5)
- {
- /* 0x8000-0x9fff */
- if (m_eim_rom)
- {
- /* expansion interface ROM */
- memory_install_rom_helper(program, bank_name, bank_start, bank_end);
- membank(bank_name)->configure_entry(0, m_eim_rom->base() + 0x4000);
- }
- else
- {
- /* mirror of 0xa000-0xbfff */
- if (m_rom->base()[0xa001] == 0)
- {
- /* unmapped on the M model */
- memory_install_unmapped(program, bank_name, bank_start, bank_end);
- }
- else
- {
- /* bank is ROM on the A model */
- memory_install_rom_helper(program, bank_name, bank_start, bank_end);
- }
-
- membank(bank_name)->configure_entry(0, m_rom->base() + 0xa000);
- }
- }
- else if (bank == 6)
- {
- /* 0xa000-0xbfff */
- if (m_rom->base()[0xa001] == 0)
- {
- /* unmapped on the M model */
- memory_install_unmapped(program, bank_name, bank_start, bank_end);
- }
- else
- {
- /* bank is ROM on the A model */
- memory_install_rom_helper(program, bank_name, bank_start, bank_end);
- }
- }
- else
- {
- /* bank is ROM */
- memory_install_rom_helper(program, bank_name, bank_start, bank_end);
- }
- }
+ int level = (!m_clkint || !m_copint) ? ASSERT_LINE : CLEAR_LINE;
- membank(bank_name)->set_entry(0);
- }
+ m_maincpu->set_input_line(INPUT_LINE_IRQ0, level);
}
-/* Enable/Status */
-WRITE8_MEMBER( newbrain_state::enrg1_w )
-{
- /*
-
- bit signal description
+//-------------------------------------------------
+// mreq_r - memory request read
+//-------------------------------------------------
- 0 _CLK enable frame frequency clock interrupts
- 1 enable user interrupt
- 2 TVP enable video display
- 3 enable V24
- 4 V24 Select Receive Bit 0
- 5 V24 Select Receive Bit 1
- 6 V24 Select Transmit Bit 0
- 7 V24 Select Transmit Bit 1
+READ8_MEMBER( newbrain_state::mreq_r )
+{
+ bool romov = 1, raminh = 0;
+ int exrm = 0;
+ UINT8 data = m_exp->mreq_r(space, offset, 0xff, romov, exrm, raminh);
- */
+ int rom0 = 1, rom1 = 1, rom2 = 1;
+ int a15_14_13 = romov ? (offset >> 13) : exrm;
+ if (!m_pwrup) a15_14_13 = 7;
+ int a15g = BIT(a15_14_13, 2);
- m_enrg1 = data;
-}
+ switch (a15_14_13)
+ {
+ case 5: rom0 = 0; break;
+ case 6: rom1 = 0; break;
+ case 7: rom2 = 0; break;
+ }
-WRITE8_MEMBER( newbrain_state::a_enrg1_w )
-{
- /*
+ if (!a15g && !raminh)
+ {
+ data = m_ram->pointer()[offset];
+ }
- bit signal description
+ if (!rom0)
+ {
+ data = m_rom->base()[0x0000 + (offset & 0x1fff)];
+ }
- 0 _CLK Clock Enable
- 1
- 2 TVP TV Enable
- 3 IOPOWER
- 4 _CTS Clear to Send V24
- 5 DO Transmit Data V24
- 6
- 7 PO Transmit Data Printer
+ if (!rom1)
+ {
+ data = m_rom->base()[0x2000 + (offset & 0x1fff)];
+ }
- */
+ if (!rom2)
+ {
+ data = m_rom->base()[0x4000 + (offset & 0x1fff)];
+ }
- m_enrg1 = data;
+ return data;
}
-READ8_MEMBER( newbrain_state::ust_r )
-{
- /*
- bit signal description
-
- 0 variable
- 1 variable
- 2 MNS mains present
- 3 _USRINT0 user status
- 4 _USRINT user interrupt
- 5 _CLKINT clock interrupt
- 6 _ACINT ACIA interrupt
- 7 _COPINT COP interrupt
+//-------------------------------------------------
+// mreq_w - memory request write
+//-------------------------------------------------
- */
+WRITE8_MEMBER( newbrain_state::mreq_w )
+{
+ bool romov = 1, raminh = 0;
+ int exrm = 0;
+ m_exp->mreq_w(space, offset, data, romov, exrm, raminh);
- UINT8 data = (m_copint << 7) | (m_aciaint << 6) | (m_clkint << 5) | (m_userint << 4) | 0x04;
+ int a15_14_13 = romov ? (offset >> 13) : exrm;
+ if (!m_pwrup) a15_14_13 = 7;
+ int a15g = BIT(a15_14_13, 2);
- switch ((m_enrg1 & NEWBRAIN_ENRG1_UST_BIT_0_MASK) >> 6)
+ if (!a15g && !raminh)
{
- case 0:
- // excess, 1=24, 0=4
- if (m_tvctl & NEWBRAIN_VIDEO_32_40)
- {
- data |= 0x01;
- }
- break;
+ m_ram->pointer()[offset] = data;
+ }
+}
- case 1:
- // characters per line, 1=40, 0=80
- if (m_tvctl & NEWBRAIN_VIDEO_80L)
- {
- data |= 0x01;
- }
- break;
- case 2:
- // tape in
- break;
+//-------------------------------------------------
+// iorq_r - I/O request read
+//-------------------------------------------------
- case 3:
- // calling indicator
- break;
- }
+READ8_MEMBER( newbrain_state::iorq_r )
+{
+ bool prtov = 0;
+ UINT8 data = m_exp->iorq_r(space, offset, 0xff, prtov);
- switch ((m_enrg1 & NEWBRAIN_ENRG1_UST_BIT_1_MASK) >> 4)
+ if (!prtov)
{
- case 0:
- // PWRUP, if set indicates that power is supplied to Z80 and memory
- if (m_pwrup)
+ switch ((offset >> 2) & 0x07)
{
- data |= 0x02;
- }
- break;
+ case 1: // EXP1
+ switch (offset & 0x03)
+ {
+ case 0: // CLCLK
+ clclk();
+ break;
- case 1:
- // TVCNSL, if set then processor has video device as primary console output
- if (m_tvcnsl)
- {
- data |= 0x02;
- }
- break;
+ case 2: // COP
+ data = m_cop->microbus_rd(space, 0);
+ break;
+ }
+ break;
- case 2:
- // _BEE, if set then processor is Model A type
- if (m_bee)
- {
- data |= 0x02;
+ case 5: // UST
+ if (BIT(offset, 1))
+ {
+ data = ust_b_r(space, offset, data);
+ }
+ else
+ {
+ data = ust_a_r(space, offset, data);
+ }
+ break;
}
- break;
-
- case 3:
- // _CALLIND, calling indicator
- data |= 0x02;
- break;
}
return data;
}
-READ8_MEMBER( newbrain_state::a_ust_r )
-{
- /*
-
- bit signal description
- 0 +5V
- 1 PWRUP
- 2
- 3
- 4
- 5 _CLKINT clock interrupt
- 6
- 7 _COPINT COP interrupt
-
- */
-
- return (m_copint << 7) | (m_clkint << 5) | (m_pwrup << 1) | 0x01;
-}
+//-------------------------------------------------
+// iorq_w - I/O request write
+//-------------------------------------------------
-READ8_MEMBER( newbrain_state::user_r )
+WRITE8_MEMBER( newbrain_state::iorq_w )
{
- /*
+ bool prtov = 0;
+ m_exp->iorq_w(space, offset, 0xff, prtov);
- bit signal description
+ if (!prtov)
+ {
+ switch ((offset >> 2) & 0x07)
+ {
+ case 1: // EXP1
+ switch (offset & 0x03)
+ {
+ case 0: // CLCLK
+ clclk();
+ break;
- 0 RDDK Received Data V24
- 1 _CTSD _Clear to Send V24
- 2
- 3
- 4
- 5 TPIN Tape in
- 6
- 7 _CTSP _Clear to Send Printer
+ case 2: // COP
+ m_cop->microbus_wr(space, offset, data);
+ break;
- */
+ case 3: // ENRG1
+ enrg1_w(space, offset, data);
+ break;
+ }
+ break;
- m_user = 0;
+ case 2: // TVL
+ tvl(data, BIT(offset, 6));
+ break;
- return 0xff;
+ case 3: // TVTL
+ tvtl_w(space, offset, data);
+ break;
+ }
+ }
}
-WRITE8_MEMBER( newbrain_state::user_w )
-{
- m_user = data;
-}
-/* Interrupts */
+//-------------------------------------------------
+// clclk - clear clock interrupt
+//-------------------------------------------------
-READ8_MEMBER( newbrain_state::clclk_r )
+void newbrain_state::clclk()
{
- m_clkint = 1;
- check_interrupt();
-
- return 0xff;
-}
+ if (LOG) logerror("%s %s CLCLK\n", machine().time().as_string(), machine().describe_context());
-WRITE8_MEMBER( newbrain_state::clclk_w )
-{
m_clkint = 1;
check_interrupt();
}
-READ8_MEMBER( newbrain_state::clusr_r )
-{
- m_userint = 1;
-
- return 0xff;
-}
-
-WRITE8_MEMBER( newbrain_state::clusr_w )
-{
- m_userint = 1;
-}
-/* COP420 */
-
-READ8_MEMBER( newbrain_state::cop_l_r )
-{
- // connected to the Z80 data bus
- return m_cop_bus;
-}
-
-WRITE8_MEMBER( newbrain_state::cop_l_w )
-{
- // connected to the Z80 data bus
- m_cop_bus = data;
-}
+//-------------------------------------------------
+// enrg1_w -
+//-------------------------------------------------
-WRITE8_MEMBER( newbrain_state::cop_g_w )
+WRITE8_MEMBER( newbrain_state::enrg1_w )
{
/*
- bit description
+ bit signal
- G0 _COPINT
- G1 _TM1
- G2 not connected
- G3 _TM2
+ 0 _CLK
+ 1
+ 2 TVP
+ 3
+ 4 _RTSD
+ 5 DO
+ 6
+ 7 PO
*/
- m_copint = BIT(data, 0);
- check_interrupt();
-
- /* tape motor enable */
+ if (LOG) logerror("%s %s ENRG1 %02x\n", machine().time().as_string(), machine().describe_context(), data);
- m_cassette1->change_state(BIT(data,1) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR);
- m_cassette2->change_state(BIT(data,3) ? CASSETTE_MOTOR_DISABLED : CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR);
-}
+ // clock enable
+ m_clk = BIT(data, 0);
-READ8_MEMBER( newbrain_state::cop_g_r )
-{
- /*
+ // TV enable
+ m_tvp = BIT(data, 2);
- bit description
-
- G0 not connected
- G1 K9
- G2 K7
- G3 K3
-
- */
+ // V24
+ m_rs232_v24->write_rts(BIT(data, 4));
+ m_rs232_v24->write_txd(BIT(data, 5));
- return (BIT(m_keydata, 3) << 3) | (BIT(m_keydata, 0) << 2) | (BIT(m_keydata, 1) << 1);
+ // printer
+ m_rs232_prn->write_txd(BIT(data, 7));
}
-WRITE8_MEMBER( newbrain_state::cop_d_w )
-{
- /*
- bit description
-
- D0 inverted to K4 -> CD4024 pin 2 (reset)
- D1 TDO
- D2 inverted to K6 -> CD4024 pin 1 (clock), CD4076 pin 7 (clock), inverted to DS8881 pin 3 (enable)
- D3 not connected
-
- */
-
- /* keyboard row reset */
-
- if (!BIT(data, 0))
- {
- m_keylatch = 0;
- }
-
- /* tape data output */
-
- m_cop_tdo = BIT(data, 1);
-
- m_cassette1->output(m_cop_tdo ? -1.0 : +1.0);
- m_cassette2->output(m_cop_tdo ? -1.0 : +1.0);
-
- /* keyboard and display clock */
-
- if (!BIT(data, 2))
- {
- m_keylatch++;
-
- if (m_keylatch == 16)
- {
- m_keylatch = 0;
- }
- m_keydata = m_key_row[m_keylatch]->read();
-
- output().set_digit_value(m_keylatch, m_segment_data[m_keylatch]);
- }
-}
+//-------------------------------------------------
+// ust_r -
+//-------------------------------------------------
-READ8_MEMBER( newbrain_state::cop_in_r )
+READ8_MEMBER( newbrain_state::ust_a_r )
{
/*
- bit description
+ bit signal
- IN0 K8
- IN1 _RD
- IN2 _COP
- IN3 _WR
+ 0 +5V
+ 1 PWRUP
+ 2
+ 3
+ 4
+ 5 _CLKINT
+ 6
+ 7 _COPINT
*/
- return (m_cop_wr << 3) | (m_cop_access << 2) | (m_cop_rd << 1) | BIT(m_keydata, 2);
-}
-
-WRITE_LINE_MEMBER( newbrain_state::cop_so_w )
-{
- // connected to K1
- m_cop_so = state;
-}
-
-WRITE_LINE_MEMBER( newbrain_state::cop_sk_w )
-{
- // connected to K2
- m_segment_data[m_keylatch] >>= 1;
- m_segment_data[m_keylatch] = (m_cop_so << 15) | (m_segment_data[m_keylatch] & 0x7fff);
-}
-
-READ_LINE_MEMBER( newbrain_state::cop_si_r )
-{
- // connected to TDI
- m_cop_tdi = (((m_cassette1)->input() > +1.0) || ((m_cassette2)->input() > +1.0)) ^ m_cop_tdo;
-
- return m_cop_tdi;
-}
-
-/* Video */
+ UINT8 data = 0x5d;
-void newbrain_state::tvram_w(UINT8 data, int a6)
-{
- /* latch video address counter bits A5-A0 */
- m_tvram = (m_tvctl & NEWBRAIN_VIDEO_80L) ? 0x04 : 0x02;
-
- /* latch video address counter bit A6 */
- m_tvram |= a6 << 6;
+ // powered up
+ data |= m_pwrup << 1;
- /* latch data to video address counter bits A14-A7 */
- m_tvram = (data << 7);
-}
-
-READ8_MEMBER( newbrain_state::tvl_r )
-{
- UINT8 data = 0xff;
-
- tvram_w(data, !offset);
+ // interrupts
+ data |= m_clkint << 5;
+ data |= m_copint << 7;
return data;
}
-WRITE8_MEMBER( newbrain_state::tvl_w )
-{
- tvram_w(data, !offset);
-}
-WRITE8_MEMBER( newbrain_state::tvctl_w )
-{
- /*
-
- bit signal description
-
- 0 RV 1 reverses video over entire field, ie. black on white
- 1 FS 0 generates 128 characters and 128 reverse field characters from 8 bit character code. 1 generates 256 characters from 8 bit character code
- 2 32/_40 0 generates 320 or 640 horizontal dots in pixel graphics mode. 1 generates 256 or 512 horizontal dots in pixel graphics mode
- 3 UCR 0 selects 256 characters expressed in an 8x10 matrix, and 25 lines (max) displayed. 1 selects 256 characters in an 8x8 matrix, and 31 lines (max) displayed
- 4
- 5
- 6 80L 0 selects 40 character line length. 1 selects 80 character line length
- 7
-
- */
-
- m_tvctl = data;
-}
-
-/* Disc Controller */
+//-------------------------------------------------
+// user_r -
+//-------------------------------------------------
-WRITE8_MEMBER( newbrain_eim_state::fdc_auxiliary_w )
+READ8_MEMBER( newbrain_state::ust_b_r )
{
/*
- bit description
+ bit signal
- 0 MOTON
- 1 765 RESET
- 2 TC
+ 0 RDDK
+ 1 _CTSD
+ 2
3
4
- 5 PA15
+ 5 TPIN
6
- 7
+ 7 _CTSP
*/
- m_floppy->mon_w(!BIT(data, 0));
+ UINT8 data = 0x5c;
- if(BIT(data, 1))
- m_fdc->reset();
-
- m_fdc->tc_w(BIT(data, 2));
-}
+ // V24
+ data |= m_rs232_v24->rxd_r();
+ data |= m_rs232_v24->cts_r() << 1;
-READ8_MEMBER( newbrain_eim_state::fdc_control_r )
-{
- /*
+ // tape
+ data |= tpin() << 5;
- bit description
+ // printer
+ data |= m_rs232_prn->cts_r() << 7;
- 0
- 1
- 2
- 3
- 4
- 5 FDC INT
- 6 PAGING
- 7 FDC ATT
+ return data;
+}
- */
- return (m_fdc_att << 7) | (m_paging << 6) | (m_fdc_int << 5);
-}
+//-------------------------------------------------
+// cop_in_r -
+//-------------------------------------------------
-READ8_MEMBER( newbrain_eim_state::ust2_r )
+READ8_MEMBER( newbrain_state::cop_in_r )
{
/*
bit description
- 0 RDDK (V24 RxD)
- 1 _CTSD (V24 Clear to Send)
- 2
- 3
- 4
- 5 TPIN
- 6
- 7 _CTSP (Printer Clear to Send)
+ IN0 K8 (CD4076 Q2)
+ IN1 _RD
+ IN2 _COP
+ IN3 _WR
*/
- return 0;
-}
-
-#define NEWBRAIN_COPCMD_NULLCOM 0xd0
-#define NEWBRAIN_COPCMD_DISPCOM 0xa0
-//#define NEWBRAIN_COPCMD_TIMCOM 0x
-#define NEWBRAIN_COPCMD_PDNCOM 0xb8
-#define NEWBRAIN_COPCMD_TAPECOM 0x80
-
-#define NEWBRAIN_COP_TAPE_RECORD 0x00
-#define NEWBRAIN_COP_TAPE_PLAYBK 0x04
-#define NEWBRAIN_COP_TAPE_MOTOR1 0x08
-#define NEWBRAIN_COP_TAPE_MOTOR2 0x02
+ UINT8 data = 0xe;
-#define NEWBRAIN_COP_TIMER0 0x01
+ // keyboard
+ data |= BIT(m_keydata, 2);
-#define NEWBRAIN_COP_NO_DATA 0x01
-#define NEWBRAIN_COP_BREAK_PRESSED 0x02
+ if (LOG_COP) logerror("%s %s IN %01x\n", machine().time().as_string(), machine().describe_context(), data);
-#define NEWBRAIN_COP_REGINT 0x00
-/*#define NEWBRAIN_COP_CASSERR 0x
-#define NEWBRAIN_COP_CASSIN 0x
-#define NEWBRAIN_COP_KBD 0x
-#define NEWBRAIN_COP_CASSOUT 0x*/
-
-enum
-{
- NEWBRAIN_COP_STATE_COMMAND = 0,
- NEWBRAIN_COP_STATE_DATA
-};
-
-
-READ8_MEMBER( newbrain_state::cop_r )
-{
- m_copint = 1;
- check_interrupt();
-
- return m_copdata;
+ return data;
}
-WRITE8_MEMBER( newbrain_state::cop_w )
-{
- m_copdata = data;
-
- switch (m_copstate)
- {
- case NEWBRAIN_COP_STATE_COMMAND:
- logerror("COP command %02x\n", data);
-
- switch (data)
- {
- case NEWBRAIN_COPCMD_NULLCOM:
- break;
- case NEWBRAIN_COPCMD_DISPCOM:
- m_copregint = 0;
- m_copbytes = 18;
- m_copstate = NEWBRAIN_COP_STATE_DATA;
+//-------------------------------------------------
+// cop_g_r -
+//-------------------------------------------------
- m_copdata = NEWBRAIN_COP_NO_DATA;
- m_copint = 0;
- check_interrupt();
+READ8_MEMBER( newbrain_state::cop_g_r )
+{
+ /*
- break;
+ bit description
-#if 0
- case NEWBRAIN_COPCMD_TIMCOM:
- m_copregint = 0;
- m_copbytes = 6;
- m_copstate = NEWBRAIN_COP_STATE_DATA;
- break;
-#endif
- case NEWBRAIN_COPCMD_PDNCOM:
- /* power down */
- m_copregint = 0;
- break;
+ G0 +5V
+ G1 K9 (CD4076 Q1)
+ G2 K7 (CD4076 Q0)
+ G3 K3 (CD4076 Q3)
- default:
- if (data & NEWBRAIN_COPCMD_TAPECOM)
- {
- m_copregint = 0;
- }
- }
- break;
+ */
- case NEWBRAIN_COP_STATE_DATA:
- logerror("COP data %02x\n", data);
- m_copbytes--;
+ UINT8 data = 0x1;
- if (m_copbytes == 0)
- {
- m_copstate = NEWBRAIN_COP_STATE_COMMAND;
- m_copregint = 1;
- }
+ // keyboard
+ data |= BIT(m_keydata, 1) << 1;
+ data |= BIT(m_keydata, 0) << 2;
+ data |= BIT(m_keydata, 3) << 3;
- m_copdata = NEWBRAIN_COP_NO_DATA;
- m_copint = 0;
- check_interrupt();
+ if (LOG_COP) logerror("%s %s G %01x\n", machine().time().as_string(), machine().describe_context(), data);
- break;
- }
+ return data;
}
-TIMER_DEVICE_CALLBACK_MEMBER(newbrain_state::cop_regint_tick)
-{
- if (m_copregint)
- {
- logerror("COP REGINT\n");
- m_copint = 0;
- check_interrupt();
- }
-}
-/* Expansion Interface Module */
+//-------------------------------------------------
+// cop_g_w -
+//-------------------------------------------------
-WRITE8_MEMBER( newbrain_eim_state::enrg2_w )
+void newbrain_state::tm()
{
- /*
-
- bit signal description
-
- 0 _USERP 0 enables user data bus interrupt and also parallel latched data output (or centronics printer) interrupt
- 1 ANP 1 enables ADC conversion complete interrupt and also calling indicator interrupt
- 2 MLTMD 1 enables serial receive clock into multiplier input of DAC and signals data terminal not ready
- 3 MSPD 1 enables 50K Baud serial data rate to be obtained ie. CTC input clock of 800 kHz. 0 selects xxx.692 kHz
- 4 ENOR 1 enables serial receive clock to sound output summer, and also selects serial input from the printer port. 0 selects serial input from the comms port
- 5 ANSW 1 enables second bank of 4 analogue inputs (voltage, non-ratiometric), ie. ch4-7, and enabled sound output, 0 selects ch03
- 6 ENOT 1 enables serial transmit clock to sound ouput summer, and also selects serial output to the printer port. 0 selects serial output to the comms port
- 7 9th output bit for centronics printer port
-
- */
+ cassette_state tm1 = (!m_cop_g3 && !m_cop_k6) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED;
+ cassette_state tm2 = (!m_cop_g1 && !m_cop_k6) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED;
- m_enrg2 = data;
+ m_cassette1->change_state(tm1, CASSETTE_MASK_MOTOR);
+ m_cassette2->change_state(tm2, CASSETTE_MASK_MOTOR);
}
-WRITE8_MEMBER( newbrain_eim_state::pr_w )
+WRITE8_MEMBER( newbrain_state::cop_g_w )
{
/*
- bit signal description
-
- 0 HP0
- 1 HP1
- 2 HP2
- 3 HP3
- 4 HP4
- 5 HP5
- 6 HP6
- 7 HP11
+ bit description
- HP0-HP2 are decoded to _ROM0..._ROM7 signals
- HP3-HP4 are decoded to _CH0..._CH3 signals
+ G0 _COPINT
+ G1 _TM1
+ G2
+ G3 _TM2
*/
- int page = (BIT(offset, 12) >> 9) | (BIT(offset, 15) >> 13) | (BIT(offset, 14) >> 13) | (BIT(offset, 13) >> 13);
- int bank = (BIT(offset, 11) >> 3) | (data & 0x7f);
+ if (LOG_COP) logerror("%s %s COPINT %u TM1 %u TM2 %u\n", machine().time().as_string(), machine().describe_context(), BIT(data, 0), BIT(data, 1), BIT(data, 3));
- m_pr[page] = bank;
-
- bankswitch();
-}
-
-READ8_MEMBER( newbrain_eim_state::user_r )
-{
- m_user = 0xff;
-
- return 0xff;
-}
-
-WRITE8_MEMBER( newbrain_eim_state::user_w )
-{
- m_user = data;
-}
+ m_copint = !BIT(data, 0);
+ check_interrupt();
-READ8_MEMBER( newbrain_eim_state::anout_r )
-{
- return 0xff;
+ m_cop_g1 = BIT(data, 1);
+ m_cop_g3 = BIT(data, 3);
+ tm();
}
-WRITE8_MEMBER( newbrain_eim_state::anout_w )
-{
-}
-READ8_MEMBER( newbrain_eim_state::anin_r )
-{
-// int channel = offset & 0x03;
-
- return 0;
-}
-
-WRITE8_MEMBER( newbrain_eim_state::anio_w )
-{
-// int channel = offset & 0x03;
-}
+//-------------------------------------------------
+// cop_d_w -
+//-------------------------------------------------
-READ8_MEMBER( newbrain_eim_state::st0_r )
+WRITE8_MEMBER( newbrain_state::cop_d_w )
{
/*
+ bit description
- bit signal description
-
- 0 fixed at 1 - indicates excess of 24 or 48, obsolete
- 1 PWRUP 1 indicates power up from 'cold' - necessary in battery machines with power switching
- 2 1 indicates analogue or calling indicator interrupts
- 3 _USRINT0 0 indicates centronics printer (latched output data) port interrupt
- 4 _USRINT 0 indicates parallel data bus port interrupt
- 5 _CLKINT 0 indicates frame frequency clock interrupt
- 6 _ACINT 0 indicates ACIA interrupt
- 7 _COPINT 0 indicates interrupt from micro-controller COP420M
+ D0 inverted to K4 -> CD4024 pin 2 (reset)
+ D1 TDO
+ D2 inverted to K6 -> CD4024 pin 1 (clock), CD4076 pin 7 (clock), inverted to DS8881 pin 3 (enable)
+ D3 not connected
*/
- return (m_copint << 7) | (m_aciaint << 6) | (m_clkint << 5) | (m_userint << 4) | (m_userint0 << 3) | (m_pwrup) << 1 | 0x01;
-}
+ int k4 = !BIT(data, 0);
+ int k6 = !BIT(data, 2);
-READ8_MEMBER( newbrain_eim_state::st1_r )
-{
- /*
+ if (LOG_COP) logerror("%s %s K4 %u K6 %u\n", machine().time().as_string(), machine().describe_context(), k4, k6);
- bit signal description
+ m_cop_tdo = BIT(data, 1);
+ m_cassette1->output(m_cop_tdo ? -1.0 : +1.0);
+ m_cassette2->output(m_cop_tdo ? -1.0 : +1.0);
- 0
- 1
- 2 N/_RV 1 selects normal video on power up (white on black), 0 selects reversed video (appears as D0 on the first 200 EI's)
- 3 ANCH 1 indicates power is being taken from the mains supply
- 4 40/_80 1 indicates that 40 column video is selected on power up. 0 selects 80 column video
- 5
- 6 TVCNSL 1 indicates that a video display is required on power up
- 7
+ if (k4) {
+ // CD4024 RST
+ m_keylatch = 0;
- */
+ if (LOG_COP) logerror("%s %s keylatch reset\n", machine().time().as_string(), machine().describe_context());
+ } else if (m_cop_k6 && !k6) {
+ // CD4024 CLK
+ m_keylatch++;
+ m_keylatch &= 0x0f;
- return (m_tvcnsl << 6) | 0x10 | 0x08 | 0x04;
-}
+ if (LOG_COP) logerror("%s %s keylatch %u\n", machine().time().as_string(), machine().describe_context(), m_keylatch);
+ }
-READ8_MEMBER( newbrain_eim_state::st2_r )
-{
- /*
+ if (!m_cop_k6 && k6) {
+ //CD4076 CLK
+ switch (m_keylatch)
+ {
+ case 0: m_keydata = m_y0->read(); break;
+ case 1: m_keydata = m_y1->read(); break;
+ case 2: m_keydata = m_y2->read(); break;
+ case 3: m_keydata = m_y3->read(); break;
+ case 4: m_keydata = m_y4->read(); break;
+ case 5: m_keydata = m_y5->read(); break;
+ case 6: m_keydata = m_y6->read(); break;
+ case 7: m_keydata = m_y7->read(); break;
+ case 8: m_keydata = m_y8->read(); break;
+ case 9: m_keydata = m_y9->read(); break;
+ case 10: m_keydata = m_y10->read(); break;
+ case 11: m_keydata = m_y11->read(); break;
+ case 12: m_keydata = m_y12->read(); break;
+ case 13: m_keydata = m_y13->read(); break;
+ case 14: m_keydata = m_y14->read(); break;
+ case 15: m_keydata = m_y15->read(); break;
+ }
- bit signal description
+ if (LOG_COP) logerror("%s %s keydata %01x\n", machine().time().as_string(), machine().describe_context(), m_keydata);
+ } else if (m_cop_k6 && k6) {
+ m_keydata = 0;
+ } else if (!k6) {
+ m_keydata = 0x0f;
- 0 received serial data from communications port
- 1 0 indicates 'clear-to-send' condition at communications port
- 2
- 3
- 4
- 5 logic level tape input
- 6
- 7 0 indicates 'clear-to-send' condition at printer port
+ if (LOG_COP) logerror("%s %s keydata disabled\n", machine().time().as_string(), machine().describe_context());
- */
+ output().set_digit_value(m_keylatch, m_segment_data);
+ } else {
+ }
- return 0;
+ m_cop_k6 = k6;
+ tm();
}
-READ8_MEMBER( newbrain_eim_state::usbs_r )
-{
- return 0xff;
-}
-WRITE8_MEMBER( newbrain_eim_state::usbs_w )
-{
-}
+//-------------------------------------------------
+// k1_w -
+//-------------------------------------------------
-WRITE8_MEMBER( newbrain_eim_state::paging_w )
+WRITE_LINE_MEMBER( newbrain_state::k1_w )
{
- if (BIT(offset, 8))
- {
- // expansion interface module
+ if (LOG_VFD) logerror("%s %s SO %u\n", machine().time().as_string(), machine().describe_context(), state);
- /*
+ m_cop_so = state;
+}
- bit signal description
- 0 PG 1 enables paging circuits
- 1 WPL unused
- 2 A16 1 sets local A16 to 1 (ie. causes second set of 8 page registers to select addressed memory)
- 3 _MPM 0 selects multi-processing mode. among other effects this extends the page registers from 8 to 12 bits in length
- 4 HISLT 1 isolates the local machine. this is used in multi-processing mode
- 5
- 6
- 7
+//-------------------------------------------------
+// k2_w -
+//-------------------------------------------------
- */
+WRITE_LINE_MEMBER( newbrain_state::k2_w )
+{
+ if (LOG_VFD) logerror("%s %s SK %u\n", machine().time().as_string(), machine().describe_context(), state);
- m_paging = BIT(data, 0);
- m_a16 = BIT(data, 2);
- m_mpm = BIT(data, 3);
- }
- else if (BIT(offset, 9))
+ if (state)
{
- // disc controller
+ m_segment_data >>= 1;
+ m_segment_data = (m_cop_so << 15) | (m_segment_data & 0x7fff);
- /*
-
- bit signal description
-
- 0 PAGING 1 enables paging circuits
- 1
- 2 HA16 1 sets local A16 to 1 (ie. causes second set of 8 page registers to select addressed memory)
- 3 MPM 0 selects multi-processing mode. among other effects this extends the page registers from 8 to 12 bits in length
- 4
- 5 _FDC RESET
- 6
- 7 FDC ATT
-
- */
-
- m_fdccpu->set_input_line(INPUT_LINE_RESET, BIT(data, 5) ? HOLD_LINE : CLEAR_LINE);
-
- m_paging = BIT(data, 0);
- m_a16 = BIT(data, 2);
- m_mpm = BIT(data, 3);
- m_fdc_att = BIT(data, 7);
- }
- else if (BIT(offset, 10))
- {
- // network controller
+ if (LOG_VFD) logerror("%s %s SEGMENT %04x\n", machine().time().as_string(), machine().describe_context(), m_segment_data);
}
}
-/* A/D Converter */
-WRITE_LINE_MEMBER( newbrain_eim_state::adc_eoc_w )
-{
- m_anint = state;
-}
+//-------------------------------------------------
+// tdi_r -
+//-------------------------------------------------
-ADC0808_ANALOG_READ_CB( newbrain_eim_state::adc_vref_pos_r )
+int newbrain_state::tpin()
{
- return 5.0;
+ return (m_cassette1->input() > +1.0) || (m_cassette2->input() > +1.0);
}
-ADC0808_ANALOG_READ_CB( newbrain_eim_state::adc_vref_neg_r )
+READ_LINE_MEMBER( newbrain_state::tdi_r )
{
- return 0.0;
+ return tpin() ^ m_cop_tdo;
}
-ADC0808_ANALOG_READ_CB( newbrain_eim_state::adc_input_r )
-{
- return 0.0;
-}
-/* Memory Maps */
-static ADDRESS_MAP_START( newbrain_map, AS_PROGRAM, 8, newbrain_state )
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x1fff) AM_RAMBANK("bank1")
- AM_RANGE(0x2000, 0x3fff) AM_RAMBANK("bank2")
- AM_RANGE(0x4000, 0x5fff) AM_RAMBANK("bank3")
- AM_RANGE(0x6000, 0x7fff) AM_RAMBANK("bank4")
- AM_RANGE(0x8000, 0x9fff) AM_RAMBANK("bank5")
- AM_RANGE(0xa000, 0xbfff) AM_RAMBANK("bank6")
- AM_RANGE(0xc000, 0xdfff) AM_RAMBANK("bank7")
- AM_RANGE(0xe000, 0xffff) AM_RAMBANK("bank8")
-ADDRESS_MAP_END
+//**************************************************************************
+// ADDRESS MAPS
+//**************************************************************************
-static ADDRESS_MAP_START( newbrain_ei_io_map, AS_IO, 8, newbrain_eim_state )
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE(clusr_r, clusr_w)
- AM_RANGE(0x01, 0x01) AM_MIRROR(0xff00) AM_WRITE(enrg2_w)
- AM_RANGE(0x02, 0x02) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_WRITE(pr_w)
- AM_RANGE(0x03, 0x03) AM_MIRROR(0xff00) AM_READWRITE(user_r, user_w)
- AM_RANGE(0x04, 0x04) AM_MIRROR(0xff00) AM_READWRITE(clclk_r, clclk_w)
- AM_RANGE(0x05, 0x05) AM_MIRROR(0xff00) AM_READWRITE(anout_r, anout_w)
- AM_RANGE(0x06, 0x06) AM_MIRROR(0xff00) AM_READWRITE(cop_r, cop_w)
- AM_RANGE(0x07, 0x07) AM_MIRROR(0xff00) AM_WRITE(enrg1_w)
- AM_RANGE(0x08, 0x09) AM_MIRROR(0xff02) AM_READWRITE(tvl_r, tvl_w)
- AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff03) AM_WRITE(tvctl_w)
- AM_RANGE(0x10, 0x13) AM_MIRROR(0xff00) AM_READWRITE(anin_r, anio_w)
- AM_RANGE(0x14, 0x14) AM_MIRROR(0xff00) AM_READ(st0_r)
- AM_RANGE(0x15, 0x15) AM_MIRROR(0xff00) AM_READ(st1_r)
- AM_RANGE(0x16, 0x16) AM_MIRROR(0xff00) AM_READ(st2_r)
- AM_RANGE(0x17, 0x17) AM_MIRROR(0xff00) AM_READWRITE(usbs_r, usbs_w)
- AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) AM_DEVREADWRITE(MC6850_TAG, acia6850_device, status_r, control_w)
- AM_RANGE(0x19, 0x19) AM_MIRROR(0xff00) AM_DEVREADWRITE(MC6850_TAG, acia6850_device, data_r, data_w)
- AM_RANGE(0x1c, 0x1f) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write)
- AM_RANGE(0xff, 0xff) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_WRITE(paging_w)
-ADDRESS_MAP_END
+//-------------------------------------------------
+// ADDRESS_MAP( newbrain_mreq )
+//-------------------------------------------------
-static ADDRESS_MAP_START( newbrain_a_io_map, AS_IO, 8, newbrain_state )
+static ADDRESS_MAP_START( newbrain_mreq, AS_PROGRAM, 8, newbrain_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00, 0x00) AM_MIRROR(0xffc0) AM_READWRITE(clusr_r, clusr_w)
- AM_RANGE(0x03, 0x03) AM_MIRROR(0xffc0) AM_WRITE(user_w)
- AM_RANGE(0x04, 0x04) AM_MIRROR(0xffc0) AM_READWRITE(clclk_r, clclk_w)
- AM_RANGE(0x06, 0x06) AM_MIRROR(0xffc0) AM_READWRITE(cop_r, cop_w)
- AM_RANGE(0x07, 0x07) AM_MIRROR(0xffc0) AM_WRITE(a_enrg1_w)
- AM_RANGE(0x08, 0x09) AM_MIRROR(0xffc2) AM_READWRITE(tvl_r, tvl_w)
- AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xffc3) AM_WRITE(tvctl_w)
- AM_RANGE(0x14, 0x14) AM_MIRROR(0xffc3) AM_READ(a_ust_r)
- AM_RANGE(0x16, 0x16) AM_MIRROR(0xffc0) AM_READ(user_r)
+ AM_RANGE(0x0000, 0xffff) AM_READWRITE(mreq_r, mreq_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( newbrain_fdc_map, AS_PROGRAM, 8, newbrain_eim_state )
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x1fff) AM_ROM
-ADDRESS_MAP_END
-static ADDRESS_MAP_START( newbrain_fdc_io_map, AS_IO, 8, newbrain_eim_state )
+//-------------------------------------------------
+// ADDRESS_MAP( newbrain_iorq )
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( newbrain_iorq, AS_IO, 8, newbrain_state )
ADDRESS_MAP_UNMAP_HIGH
- ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x01) AM_DEVICE(UPD765_TAG, upd765a_device, map)
- AM_RANGE(0x20, 0x20) AM_WRITE(fdc_auxiliary_w)
- AM_RANGE(0x40, 0x40) AM_READ(fdc_control_r)
+ AM_RANGE(0x0000, 0xffff) AM_READWRITE(iorq_r, iorq_w)
ADDRESS_MAP_END
-/* Input Ports */
+
+
+//**************************************************************************
+// INPUT PORTS
+//**************************************************************************
+
+//-------------------------------------------------
+// INPUT_PORTS( newbrain )
+//-------------------------------------------------
static INPUT_PORTS_START( newbrain )
PORT_START("Y0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("STOP") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END))
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("STOP") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END))
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("Y1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
PORT_START("Y2")
- 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_8) PORT_CHAR('8')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
PORT_START("Y3")
- 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_9) PORT_CHAR('9')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
PORT_START("Y4")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
- 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_M) PORT_CHAR('m') PORT_CHAR('M')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
PORT_START("Y5")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('(') PORT_CHAR('[')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('(') PORT_CHAR('[')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_START("Y6")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(')') PORT_CHAR(']')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR(')') PORT_CHAR(']')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_START("Y7")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("* \xC2\xA3") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('*') PORT_CHAR(0x00A3)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("* \xC2\xA3") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('*') PORT_CHAR(0x00A3)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
PORT_START("Y8")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("VIDEO TEXT") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT)) // Vd
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("VIDEO TEXT") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT)) // Vd
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
PORT_START("Y9")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
PORT_START("Y10")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('@')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('@')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
PORT_START("Y11")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('-') PORT_CHAR('\\')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('-') PORT_CHAR('\\')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
PORT_START("Y12")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('+') PORT_CHAR('^')
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("INSERT") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('+') PORT_CHAR('^')
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("INSERT") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
PORT_START("Y13")
- 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_NAME("NEW LINE") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) // NL
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NEW LINE") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) // NL
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
PORT_START("Y14")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("HOME") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) // CH
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("HOME") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) // CH
PORT_START("Y15")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // SH
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("GRAPHICS") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) // GR
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("REPEAT") // RPT
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CONTROL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) // GL
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // SH
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("GRAPHICS") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT)) // GR
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("REPEAT") // RPT
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CONTROL") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) // GL
INPUT_PORTS_END
-/* Machine Initialization */
-
-WRITE_LINE_MEMBER( newbrain_eim_state::acia_tx )
-{
- m_acia_txd = state;
-}
-
-WRITE_LINE_MEMBER( newbrain_eim_state::acia_interrupt )
-{
- m_aciaint = state;
-}
-WRITE_LINE_MEMBER( newbrain_eim_state::fdc_interrupt )
-{
- m_fdc_int = state;
-}
-WRITE_LINE_MEMBER( newbrain_eim_state::ctc_z2_w )
-{
- /* connected to CTC channel 0/1 clock inputs */
- m_ctc->trg0(state);
- m_ctc->trg1(state);
-}
-
-TIMER_DEVICE_CALLBACK_MEMBER(newbrain_eim_state::ctc_c2_tick)
-{
- m_ctc->trg2(1);
- m_ctc->trg2(0);
-}
+//**************************************************************************
+// MACHINE INITIALIZATION
+//**************************************************************************
-inline int newbrain_state::get_reset_t()
+int newbrain_state::get_reset_t()
{
return RES_K(220) * CAP_U(10) * 1000; // t = R128 * C125 = 2.2s
}
-inline int newbrain_state::get_pwrup_t()
+int newbrain_state::get_pwrup_t()
{
return RES_K(560) * CAP_U(10) * 1000; // t = R129 * C127 = 5.6s
}
-//-------------------------------------------------
-// device_timer - handler timer events
-//-------------------------------------------------
-
-void newbrain_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+INTERRUPT_GEN_MEMBER(newbrain_state::newbrain_interrupt)
{
- switch (id)
+ if (!m_clk)
{
- case TIMER_ID_RESET:
- m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
- m_copcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
- break;
-
- case TIMER_ID_PWRUP:
- m_pwrup = 0;
- bankswitch();
- break;
+ m_clkint = 0;
+ check_interrupt();
}
}
+
+//-------------------------------------------------
+// machine_start -
+//-------------------------------------------------
+
void newbrain_state::machine_start()
{
- m_copregint = 1;
-
- /* set power up timer */
+ // set power up timer
timer_set(attotime::from_usec(get_pwrup_t()), TIMER_ID_PWRUP);
- /* initialize variables */
- m_pwrup = 1;
- m_userint = 1;
- m_userint0 = 1;
- m_clkint = 1;
- m_aciaint = 1;
- m_copint = 1;
- m_bee = 1;
- m_tvcnsl = 1;
-
- /* set up memory banking */
- bankswitch();
-
- // find keyboard rows
- m_key_row[0] = m_y0;
- m_key_row[1] = m_y1;
- m_key_row[2] = m_y2;
- m_key_row[3] = m_y3;
- m_key_row[4] = m_y4;
- m_key_row[5] = m_y5;
- m_key_row[6] = m_y6;
- m_key_row[7] = m_y7;
- m_key_row[8] = m_y8;
- m_key_row[9] = m_y9;
- m_key_row[10] = m_y10;
- m_key_row[11] = m_y11;
- m_key_row[12] = m_y12;
- m_key_row[13] = m_y13;
- m_key_row[14] = m_y14;
- m_key_row[15] = m_y15;
-
- /* register for state saving */
+ // state saving
+ save_item(NAME(m_clk));
+ save_item(NAME(m_tvp));
save_item(NAME(m_pwrup));
- save_item(NAME(m_userint));
- save_item(NAME(m_userint0));
save_item(NAME(m_clkint));
- save_item(NAME(m_aciaint));
save_item(NAME(m_copint));
- save_item(NAME(m_anint));
- save_item(NAME(m_bee));
- save_item(NAME(m_enrg1));
- save_item(NAME(m_enrg2));
- save_item(NAME(m_cop_bus));
save_item(NAME(m_cop_so));
save_item(NAME(m_cop_tdo));
- save_item(NAME(m_cop_tdi));
- save_item(NAME(m_cop_rd));
- save_item(NAME(m_cop_wr));
- save_item(NAME(m_cop_access));
+ save_item(NAME(m_cop_g1));
+ save_item(NAME(m_cop_g3));
+ save_item(NAME(m_cop_k6));
save_item(NAME(m_keylatch));
save_item(NAME(m_keydata));
- save_item(NAME(m_user));
+ save_item(NAME(m_segment_data));
}
-void newbrain_eim_state::machine_start()
-{
- newbrain_state::machine_start();
-
- /* allocate expansion RAM */
- m_eim_ram.allocate(NEWBRAIN_EIM_RAM_SIZE);
-
- /* register for state saving */
- save_item(NAME(m_mpm));
- save_item(NAME(m_a16));
- save_item(NAME(m_pr));
- save_item(NAME(m_fdc_int));
- save_item(NAME(m_fdc_att));
- save_item(NAME(m_paging));
-}
+
+//-------------------------------------------------
+// machine_reset -
+//-------------------------------------------------
void newbrain_state::machine_reset()
{
+ m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+ m_cop->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+
timer_set(attotime::from_usec(get_reset_t()), TIMER_ID_RESET);
}
-INTERRUPT_GEN_MEMBER(newbrain_state::newbrain_interrupt)
+
+//-------------------------------------------------
+// device_timer - handler timer events
+//-------------------------------------------------
+
+void newbrain_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- if (!(m_enrg1 & NEWBRAIN_ENRG1_CLK))
+ switch (id)
{
- m_clkint = 0;
- check_interrupt();
+ case TIMER_ID_RESET:
+ if (LOG) logerror("%s %s RESET 1\n", machine().time().as_string(), machine().describe_context());
+
+ m_maincpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ m_cop->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
+ break;
+
+ case TIMER_ID_PWRUP:
+ if (LOG) logerror("%s %s PWRUP 1\n", machine().time().as_string(), machine().describe_context());
+
+ m_pwrup = 1;
+ break;
}
}
-/* Machine Drivers */
-/* F4 Character Displayer */
-static const gfx_layout newbrain_charlayout =
-{
- 8, 10, /* 8 x 10 characters */
- 256, /* 256 characters */
- 1, /* 1 bits per pixel */
- { 0 }, /* no bitplanes */
- /* x offsets */
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- /* y offsets */
- { 0*256*8, 1*256*8, 2*256*8, 3*256*8, 4*256*8, 5*256*8, 6*256*8, 7*256*8, 8*256*8, 9*256*8, 10*256*8, 11*256*8, 12*256*8, 13*256*8, 14*256*8, 15*256*8 },
- 8 /* every char takes 16 x 1 bytes */
-};
-
-static GFXDECODE_START( newbrain )
- GFXDECODE_ENTRY( "chargen", 0x0000, newbrain_charlayout, 0, 1 )
-GFXDECODE_END
-
-static MACHINE_CONFIG_START( newbrain_a, newbrain_state )
+
+//**************************************************************************
+// MACHINE DRIVERS
+//**************************************************************************
+
+//-------------------------------------------------
+// MACHINE_CONFIG( newbrain )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( newbrain, newbrain_state )
// basic system hardware
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_16MHz/8)
- MCFG_CPU_PROGRAM_MAP(newbrain_map)
- MCFG_CPU_IO_MAP(newbrain_a_io_map)
- MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_TAG, newbrain_state, newbrain_interrupt)
+ MCFG_CPU_PROGRAM_MAP(newbrain_mreq)
+ MCFG_CPU_IO_MAP(newbrain_iorq)
+ MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_TAG, newbrain_state, newbrain_interrupt) // TODO remove me
MCFG_CPU_ADD(COP420_TAG, COP420, XTAL_16MHz/8) // COP420-GUW/N
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_ENABLED )
- MCFG_COP400_READ_L_CB(READ8(newbrain_state, cop_l_r))
- MCFG_COP400_WRITE_L_CB(WRITE8(newbrain_state, cop_l_w))
+ MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true)
MCFG_COP400_READ_G_CB(READ8(newbrain_state, cop_g_r))
MCFG_COP400_WRITE_G_CB(WRITE8(newbrain_state, cop_g_w))
MCFG_COP400_WRITE_D_CB(WRITE8(newbrain_state, cop_d_w))
MCFG_COP400_READ_IN_CB(READ8(newbrain_state, cop_in_r))
- MCFG_COP400_WRITE_SK_CB(WRITELINE(newbrain_state, cop_sk_w))
- MCFG_COP400_READ_SI_CB(READLINE(newbrain_state, cop_si_r))
- MCFG_COP400_WRITE_SO_CB(WRITELINE(newbrain_state, cop_so_w))
-
- MCFG_GFXDECODE_ADD("gfxdecode", "palette", newbrain)
-
- MCFG_TIMER_DRIVER_ADD_PERIODIC("cop_regint", newbrain_state, cop_regint_tick, attotime::from_usec(12500))
+ MCFG_COP400_WRITE_SO_CB(WRITELINE(newbrain_state, k1_w))
+ MCFG_COP400_WRITE_SK_CB(WRITELINE(newbrain_state, k2_w))
+ MCFG_COP400_READ_SI_CB(READLINE(newbrain_state, tdi_r))
// video hardware
MCFG_FRAGMENT_ADD(newbrain_video)
// devices
- MCFG_CASSETTE_ADD("cassette")
+ MCFG_NEWBRAIN_EXPANSION_SLOT_ADD(NEWBRAIN_EXPANSION_SLOT_TAG, XTAL_16MHz/8, newbrain_expansion_cards, "eim")
+
+ MCFG_CASSETTE_ADD(CASSETTE_TAG)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED)
- MCFG_CASSETTE_ADD("cassette2")
+ MCFG_CASSETTE_ADD(CASSETTE2_TAG)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED)
+ MCFG_RS232_PORT_ADD(RS232_V24_TAG, default_rs232_devices, nullptr)
+ MCFG_RS232_PORT_ADD(RS232_PRN_TAG, default_rs232_devices, nullptr)
+
// internal ram
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("32K")
MACHINE_CONFIG_END
-static SLOT_INTERFACE_START( newbrain_floppies )
- SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
-SLOT_INTERFACE_END
-
-static MACHINE_CONFIG_DERIVED_CLASS( newbrain_eim, newbrain_a, newbrain_eim_state )
- // basic system hardware
- MCFG_CPU_MODIFY(Z80_TAG)
- MCFG_CPU_IO_MAP(newbrain_ei_io_map)
-
- MCFG_CPU_ADD(FDC_Z80_TAG, Z80, XTAL_4MHz)
- MCFG_CPU_PROGRAM_MAP(newbrain_fdc_map)
- MCFG_CPU_IO_MAP(newbrain_fdc_io_map)
- // devices
- MCFG_DEVICE_ADD(Z80CTC_TAG, Z80CTC, XTAL_16MHz/8)
- MCFG_Z80CTC_ZC0_CB(DEVWRITELINE(MC6850_TAG, acia6850_device, write_rxc))
- MCFG_Z80CTC_ZC1_CB(DEVWRITELINE(MC6850_TAG, acia6850_device, write_txc))
- MCFG_Z80CTC_ZC2_CB(WRITELINE(newbrain_eim_state, ctc_z2_w))
-
- MCFG_TIMER_DRIVER_ADD_PERIODIC("z80ctc_c2", newbrain_eim_state, ctc_c2_tick, attotime::from_hz(XTAL_16MHz/4/13))
- MCFG_DEVICE_ADD(ADC0809_TAG, ADC0808, 500000)
- MCFG_ADC0808_OUT_EOC_CB(WRITELINE(newbrain_eim_state, adc_eoc_w))
- MCFG_ADC0808_IN_VREF_POS_CB(newbrain_eim_state, adc_vref_pos_r)
- MCFG_ADC0808_IN_VREF_NEG_CB(newbrain_eim_state, adc_vref_neg_r)
- MCFG_ADC0808_IN_IN_0_CB(newbrain_eim_state, adc_input_r)
- MCFG_ADC0808_IN_IN_1_CB(newbrain_eim_state, adc_input_r)
- MCFG_ADC0808_IN_IN_2_CB(newbrain_eim_state, adc_input_r)
- MCFG_ADC0808_IN_IN_3_CB(newbrain_eim_state, adc_input_r)
- MCFG_ADC0808_IN_IN_4_CB(newbrain_eim_state, adc_input_r)
- MCFG_ADC0808_IN_IN_5_CB(newbrain_eim_state, adc_input_r)
- MCFG_ADC0808_IN_IN_6_CB(newbrain_eim_state, adc_input_r)
- MCFG_ADC0808_IN_IN_7_CB(newbrain_eim_state, adc_input_r)
-
- MCFG_DEVICE_ADD(MC6850_TAG, ACIA6850, 0)
- MCFG_ACIA6850_TXD_HANDLER(WRITELINE(newbrain_eim_state, acia_tx))
- MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(newbrain_eim_state, acia_interrupt))
-
- MCFG_UPD765A_ADD(UPD765_TAG, false, true)
- MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", newbrain_floppies, "525dd", floppy_image_device::default_floppy_formats)
- // internal ram
- MCFG_RAM_MODIFY(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("96K")
-MACHINE_CONFIG_END
+//**************************************************************************
+// ROMS
+//**************************************************************************
-/* ROMs */
+//-------------------------------------------------
+// ROM( newbrain )
+//-------------------------------------------------
ROM_START( newbrain )
- ROM_REGION( 0x10000, Z80_TAG, 0 )
+ ROM_REGION( 0x6000, Z80_TAG, 0 )
ROM_DEFAULT_BIOS( "rom20" )
ROM_SYSTEM_BIOS( 0, "issue1", "Issue 1 (v?)" )
- ROMX_LOAD( "aben.ic6", 0xa000, 0x2000, CRC(308f1f72) SHA1(a6fd9945a3dca47636887da2125fde3f9b1d4e25), ROM_BIOS(1) )
- ROMX_LOAD( "cd iss 1.ic7", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(1) )
- ROMX_LOAD( "ef iss 1.ic8", 0xe000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(1) )
+ ROMX_LOAD( "aben.ic6", 0x0000, 0x2000, CRC(308f1f72) SHA1(a6fd9945a3dca47636887da2125fde3f9b1d4e25), ROM_BIOS(1) )
+ ROMX_LOAD( "cd iss 1.ic7", 0x2000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(1) )
+ ROMX_LOAD( "ef iss 1.ic8", 0x4000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(1) )
ROM_SYSTEM_BIOS( 1, "issue2", "Issue 2 (v1.9)" )
- ROMX_LOAD( "aben19.ic6", 0xa000, 0x2000, CRC(d0283eb1) SHA1(351d248e69a77fa552c2584049006911fb381ff0), ROM_BIOS(2) )
- ROMX_LOAD( "cdi2.ic7", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(2) )
- ROMX_LOAD( "ef iss 1.ic8", 0xe000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(2) )
+ ROMX_LOAD( "aben19.ic6", 0x0000, 0x2000, CRC(d0283eb1) SHA1(351d248e69a77fa552c2584049006911fb381ff0), ROM_BIOS(2) )
+ ROMX_LOAD( "cdi2.ic7", 0x2000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(2) )
+ ROMX_LOAD( "ef iss 1.ic8", 0x4000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(2) )
ROM_SYSTEM_BIOS( 2, "issue3", "Issue 3 (v1.91)" )
- ROMX_LOAD( "aben191.ic6", 0xa000, 0x2000, CRC(b7be8d89) SHA1(cce8d0ae7aa40245907ea38b7956c62d039d45b7), ROM_BIOS(3) )
- ROMX_LOAD( "cdi3.ic7", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(3) )
- ROMX_LOAD( "ef iss 1.ic8", 0xe000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(3) )
+ ROMX_LOAD( "aben191.ic6", 0x0000, 0x2000, CRC(b7be8d89) SHA1(cce8d0ae7aa40245907ea38b7956c62d039d45b7), ROM_BIOS(3) )
+ ROMX_LOAD( "cdi3.ic7", 0x2000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(3) )
+ ROMX_LOAD( "ef iss 1.ic8", 0x4000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(3) )
ROM_SYSTEM_BIOS( 3, "series2", "Series 2 (v?)" )
- ROMX_LOAD( "abs2.ic6", 0xa000, 0x2000, CRC(9a042acb) SHA1(80d83a2ea3089504aa68b6cf978d80d296cd9bda), ROM_BIOS(4) )
- ROMX_LOAD( "cds2.ic7", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(4) )
- ROMX_LOAD( "efs2.ic8", 0xe000, 0x2000, CRC(b222d798) SHA1(c0c816b4d4135b762f2c5f1b24209d0096f22e56), ROM_BIOS(4) )
+ ROMX_LOAD( "abs2.ic6", 0x0000, 0x2000, CRC(9a042acb) SHA1(80d83a2ea3089504aa68b6cf978d80d296cd9bda), ROM_BIOS(4) )
+ ROMX_LOAD( "cds2.ic7", 0x2000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(4) )
+ ROMX_LOAD( "efs2.ic8", 0x4000, 0x2000, CRC(b222d798) SHA1(c0c816b4d4135b762f2c5f1b24209d0096f22e56), ROM_BIOS(4) )
ROM_SYSTEM_BIOS( 4, "rom20", "? (v2.0)" )
- ROMX_LOAD( "aben20.rom", 0xa000, 0x2000, CRC(3d76d0c8) SHA1(753b4530a518ad832e4b81c4e5430355ba3f62e0), ROM_BIOS(5) )
- ROMX_LOAD( "cd20tci.rom", 0xc000, 0x4000, CRC(f65b2350) SHA1(1ada7fbf207809537ec1ffb69808524300622ada), ROM_BIOS(5) )
+ ROMX_LOAD( "aben20.rom", 0x0000, 0x2000, CRC(3d76d0c8) SHA1(753b4530a518ad832e4b81c4e5430355ba3f62e0), ROM_BIOS(5) )
+ ROMX_LOAD( "cd20tci.rom", 0x2000, 0x4000, CRC(f65b2350) SHA1(1ada7fbf207809537ec1ffb69808524300622ada), ROM_BIOS(5) )
ROM_REGION( 0x400, COP420_TAG, 0 )
- ROM_LOAD( "cop420.419", 0x000, 0x400, NO_DUMP )
+ ROM_LOAD( "cop420.419", 0x000, 0x400, CRC(a1388ee7) SHA1(5822e16aa794545600bf7a9dbee2ef467ca2a3e0) )
ROM_REGION( 0x1000, "chargen", ROMREGION_ERASE00 )
- ROM_LOAD( "char eprom iss 1.ic453", 0x0000, 0x0a01, BAD_DUMP CRC(46ecbc65) SHA1(3fe064d49a4de5e3b7383752e98ad35a674e26dd) ) // 8248R7
+ ROM_LOAD( "char eprom iss 1.ic453", 0x0000, 0x0a01, CRC(46ecbc65) SHA1(3fe064d49a4de5e3b7383752e98ad35a674e26dd) ) // 8248R7 bad dump!
ROM_END
-#define rom_newbraina rom_newbrain
-ROM_START( newbraineim )
- ROM_REGION( 0x10000, Z80_TAG, 0 )
- ROM_DEFAULT_BIOS( "rom20" )
-
- ROM_SYSTEM_BIOS( 0, "issue1", "Issue 1 (v?)" )
- ROMX_LOAD( "aben.ic6", 0xa000, 0x2000, CRC(308f1f72) SHA1(a6fd9945a3dca47636887da2125fde3f9b1d4e25), ROM_BIOS(1) )
- ROMX_LOAD( "cd iss 1.ic7", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(1) )
- ROMX_LOAD( "ef iss 1.ic8", 0xe000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(1) )
-
- ROM_SYSTEM_BIOS( 1, "issue2", "Issue 2 (v1.9)" )
- ROMX_LOAD( "aben19.ic6", 0xa000, 0x2000, CRC(d0283eb1) SHA1(351d248e69a77fa552c2584049006911fb381ff0), ROM_BIOS(2) )
- ROMX_LOAD( "cdi2.ic7", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(2) )
- ROMX_LOAD( "ef iss 1.ic8", 0xe000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(2) )
-
- ROM_SYSTEM_BIOS( 2, "issue3", "Issue 3 (v1.91)" )
- ROMX_LOAD( "aben191.ic6", 0xa000, 0x2000, CRC(b7be8d89) SHA1(cce8d0ae7aa40245907ea38b7956c62d039d45b7), ROM_BIOS(3) )
- ROMX_LOAD( "cdi3.ic7", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(3) )
- ROMX_LOAD( "ef iss 1.ic8", 0xe000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6), ROM_BIOS(3) )
-
- ROM_SYSTEM_BIOS( 3, "series2", "Series 2 (v?)" )
- ROMX_LOAD( "abs2.ic6", 0xa000, 0x2000, CRC(9a042acb) SHA1(80d83a2ea3089504aa68b6cf978d80d296cd9bda), ROM_BIOS(4) )
- ROMX_LOAD( "cds2.ic7", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a), ROM_BIOS(4) )
- ROMX_LOAD( "efs2.ic8", 0xe000, 0x2000, CRC(b222d798) SHA1(c0c816b4d4135b762f2c5f1b24209d0096f22e56), ROM_BIOS(4) )
-
- ROM_SYSTEM_BIOS( 4, "rom20", "? (v2.0)" )
- ROMX_LOAD( "aben20.rom", 0xa000, 0x2000, CRC(3d76d0c8) SHA1(753b4530a518ad832e4b81c4e5430355ba3f62e0), ROM_BIOS(5) )
- ROMX_LOAD( "cd20tci.rom", 0xc000, 0x4000, CRC(f65b2350) SHA1(1ada7fbf207809537ec1ffb69808524300622ada), ROM_BIOS(5) )
-
- ROM_REGION( 0x400, COP420_TAG, 0 )
- ROM_LOAD( "cop420.419", 0x000, 0x400, NO_DUMP )
+//-------------------------------------------------
+// ROM( newbraina )
+//-------------------------------------------------
- ROM_REGION( 0x1000, "chargen", 0 )
- ROM_LOAD( "char eprom iss 1.ic453", 0x0000, 0x0a01, BAD_DUMP CRC(46ecbc65) SHA1(3fe064d49a4de5e3b7383752e98ad35a674e26dd) ) // 8248R7
+#define rom_newbraina rom_newbrain
- ROM_REGION( 0x10000, "eim", 0 ) // Expansion Interface Module
- ROM_LOAD( "e415-2.rom", 0x4000, 0x2000, CRC(5b0e390c) SHA1(0f99cae57af2e64f3f6b02e5325138d6ba015e72) )
- ROM_LOAD( "e415-3.rom", 0x4000, 0x2000, CRC(2f88bae5) SHA1(04e03f230f4b368027442a7c2084dae877f53713) ) // 18/8/83.aci
- ROM_LOAD( "e416-3.rom", 0x6000, 0x2000, CRC(8b5099d8) SHA1(19b0cfce4c8b220eb1648b467f94113bafcb14e0) ) // 10/8/83.mtv
- ROM_LOAD( "e417-2.rom", 0x8000, 0x2000, CRC(6a7afa20) SHA1(f90db4f8318777313a862b3d5bab83c2fd260010) )
- ROM_REGION( 0x10000, FDC_Z80_TAG, 0 ) // Floppy Disk Controller
- ROM_LOAD( "d413-2.rom", 0x0000, 0x2000, CRC(097591f1) SHA1(c2aa1d27d4f3a24ab0c8135df746a4a44201a7f4) )
- ROM_LOAD( "d417-1.rom", 0x0000, 0x2000, CRC(40fad31c) SHA1(5137be4cc026972c0ffd4fa6990e8583bdfce163) )
- ROM_LOAD( "d417-2.rom", 0x0000, 0x2000, CRC(e8bda8b9) SHA1(c85a76a5ff7054f4ef4a472ce99ebaed1abd269c) )
-ROM_END
+//-------------------------------------------------
+// ROM( newbrainmd )
+//-------------------------------------------------
ROM_START( newbrainmd )
ROM_REGION( 0x10000, Z80_TAG, 0 )
- ROM_LOAD( "cdmd.rom", 0xc000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a) )
- ROM_LOAD( "efmd.rom", 0xe000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6) )
+ ROM_LOAD( "cdmd.rom", 0x2000, 0x2000, CRC(6b4d9429) SHA1(ef688be4e75aced61f487c928258c8932a0ae00a) )
+ ROM_LOAD( "efmd.rom", 0x4000, 0x2000, CRC(20dd0b49) SHA1(74b517ca223cefb588e9f49e72ff2d4f1627efc6) )
ROM_REGION( 0x400, COP420_TAG, 0 )
- ROM_LOAD( "cop420.419", 0x000, 0x400, NO_DUMP )
+ ROM_LOAD( "cop420.419", 0x000, 0x400, CRC(a1388ee7) SHA1(5822e16aa794545600bf7a9dbee2ef467ca2a3e0) )
ROM_REGION( 0x1000, "chargen", 0 )
ROM_LOAD( "char eprom iss 1.ic453", 0x0000, 0x0a01, BAD_DUMP CRC(46ecbc65) SHA1(3fe064d49a4de5e3b7383752e98ad35a674e26dd) ) // 8248R7
ROM_END
-/* System Drivers */
+
+
+//**************************************************************************
+// SYSTEM DRIVERS
+//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
-COMP( 1981, newbrain, 0, 0, newbrain_a, newbrain, driver_device, 0, "Grundy Business Systems Ltd", "NewBrain AD", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
-COMP( 1981, newbraineim,newbrain, 0, newbrain_eim, newbrain, driver_device, 0, "Grundy Business Systems Ltd", "NewBrain AD with Expansion Interface", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
-COMP( 1981, newbraina, newbrain, 0, newbrain_a, newbrain, driver_device, 0, "Grundy Business Systems Ltd", "NewBrain A", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
-COMP( 1981, newbrainmd, newbrain, 0, newbrain_a, newbrain, driver_device, 0, "Grundy Business Systems Ltd", "NewBrain MD", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP( 1981, newbrain, 0, 0, newbrain, newbrain, driver_device, 0, "Grundy Business Systems Ltd", "NewBrain AD", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND )
+COMP( 1981, newbraina, newbrain, 0, newbrain, newbrain, driver_device, 0, "Grundy Business Systems Ltd", "NewBrain A", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND )
+COMP( 1981, newbrainmd, newbrain, 0, newbrain, newbrain, driver_device, 0, "Grundy Business Systems Ltd", "NewBrain MD", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/nibble.cpp b/src/mame/drivers/nibble.cpp
index f89a14f0f38..1cd257859ca 100644
--- a/src/mame/drivers/nibble.cpp
+++ b/src/mame/drivers/nibble.cpp
@@ -11,9 +11,9 @@
**************************************************************************
-
+
Specs:
-
+
1x UM6845 (U67).
1x AY38910A/p (U75).
@@ -148,11 +148,11 @@ void nibble_state::machine_reset()
*************************/
static ADDRESS_MAP_START( nibble_map, AS_PROGRAM, 8, nibble_state )
-// ADDRESS_MAP_GLOBAL_MASK(0x3fff)
+// ADDRESS_MAP_GLOBAL_MASK(0x3fff)
AM_RANGE(0x0000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xc3ff) AM_WRITE(nibble_videoram_w) AM_SHARE("videoram") // placeholder
-// AM_RANGE(0xff00, 0xff01) AM_DEVWRITE("crtc", mc6845_device, address_w)
-// AM_RANGE(0xff02, 0xff03) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
+ AM_RANGE(0xc000, 0xc3ff) AM_WRITE(nibble_videoram_w) AM_SHARE("videoram") // placeholder
+// AM_RANGE(0xff00, 0xff01) AM_DEVWRITE("crtc", mc6845_device, address_w)
+// AM_RANGE(0xff02, 0xff03) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
ADDRESS_MAP_END
diff --git a/src/mame/drivers/nightgal.cpp b/src/mame/drivers/nightgal.cpp
index 38a3a3953f9..8bf1a91f83b 100644
--- a/src/mame/drivers/nightgal.cpp
+++ b/src/mame/drivers/nightgal.cpp
@@ -14,7 +14,7 @@ TODO:
- Fix Sweet Gal/Sexy Gal layer clearances;
- NMI origin for Sexy Gal / Night Gal Summer
- unemulated WAIT pin for Z80, MCU asserts it when accessing communication RAM
-
+
*******************************************************************************************/
#include "emu.h"
@@ -218,7 +218,7 @@ READ8_MEMBER(nightgal_state::royalqn_nsc_blit_r)
{
if(offset == 2)
m_subcpu->set_input_line(0, CLEAR_LINE );
-
+
return m_blit_raw_data[offset];
}
@@ -230,10 +230,10 @@ TIMER_CALLBACK_MEMBER(nightgal_state::z80_wait_ack_cb)
void nightgal_state::z80_wait_assert_cb()
{
m_maincpu->set_input_line(Z80_INPUT_LINE_WAIT, ASSERT_LINE);
-
+
// Note: cycles_to_attotime requires z80 context to work, calling for example m_subcpu as context gives a x4 cycle boost in z80 terms (reads execute_cycles_to_clocks() from NCS?) even if they runs at same speed basically.
// TODO: needs a getter that tells a given CPU how many cycles requires an executing opcode for the r/w operation, which stacks with wait state penalty for accessing this specific area.
- machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(4), timer_expired_delegate(FUNC(nightgal_state::z80_wait_ack_cb),this));
+ machine().scheduler().timer_set(m_maincpu->cycles_to_attotime(4), timer_expired_delegate(FUNC(nightgal_state::z80_wait_ack_cb),this));
}
READ8_MEMBER(nightgal_state::royalqn_comm_r)
@@ -344,7 +344,7 @@ static ADDRESS_MAP_START( sexygal_nsc_map, AS_PROGRAM, 8, nightgal_state )
AM_RANGE(0x0081, 0x0083) AM_READ(royalqn_nsc_blit_r)
AM_RANGE(0x0080, 0x0086) AM_DEVWRITE("blitter", jangou_blitter_device, alt_process_w)
AM_RANGE(0x00a0, 0x00af) AM_DEVWRITE("blitter", jangou_blitter_device, vregs_w)
- AM_RANGE(0x00b0, 0x00b0) AM_DEVWRITE("blitter", jangou_blitter_device, bltflip_w)
+ AM_RANGE(0x00b0, 0x00b0) AM_DEVWRITE("blitter", jangou_blitter_device, bltflip_w)
AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x2c00) AM_READWRITE(royalqn_comm_r, royalqn_comm_w) AM_SHARE("comms_ram")
AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x2000) AM_ROM AM_REGION("subrom", 0)
@@ -382,7 +382,7 @@ static ADDRESS_MAP_START( royalqn_nsc_map, AS_PROGRAM, 8, nightgal_state )
AM_RANGE(0x0081, 0x0083) AM_READ(royalqn_nsc_blit_r)
AM_RANGE(0x0080, 0x0086) AM_DEVWRITE("blitter", jangou_blitter_device, process_w)
AM_RANGE(0x00a0, 0x00af) AM_DEVWRITE("blitter", jangou_blitter_device, vregs_w)
- AM_RANGE(0x00b0, 0x00b0) AM_DEVWRITE("blitter", jangou_blitter_device, bltflip_w)
+ AM_RANGE(0x00b0, 0x00b0) AM_DEVWRITE("blitter", jangou_blitter_device, bltflip_w)
AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x2c00) AM_READWRITE(royalqn_comm_r,royalqn_comm_w)
AM_RANGE(0x4000, 0x4000) AM_NOP
@@ -626,7 +626,7 @@ static INPUT_PORTS_START( sexygal )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
+
PORT_START("BLIT_PORT")
PORT_DIPNAME( 0x01, 0x01, "BLIT_PORT" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp
index fb08ffee84d..562d0ab8957 100644
--- a/src/mame/drivers/nmk16.cpp
+++ b/src/mame/drivers/nmk16.cpp
@@ -231,19 +231,11 @@ WRITE16_MEMBER(nmk16_state::ssmissin_sound_w)
WRITE8_MEMBER(nmk16_state::ssmissin_soundbank_w)
{
- UINT8 *rom = memregion("oki1")->base();
- int bank;
-
- bank = data & 0x3;
-
- memcpy(rom + 0x20000,rom + 0x80000 + bank * 0x20000,0x20000);
+ membank("okibank1")->set_entry(data & 0x3);
}
-
-
-
WRITE16_MEMBER(nmk16_state::tharrier_mcu_control_w)
{
// logerror("%04x: mcu_control_w %02x\n",space.device().safe_pc(),data);
@@ -285,7 +277,7 @@ READ16_MEMBER(nmk16_state::tharrier_mcu_r)
WRITE16_MEMBER(nmk16_state::macross2_sound_reset_w)
{
/* PCB behaviour verified by Corrado Tomaselli at MAME Italia Forum:
- every time music changes Z80 is resetted */
+ every time music changes Z80 is reset */
m_audiocpu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
}
@@ -297,27 +289,21 @@ WRITE16_MEMBER(nmk16_state::macross2_sound_command_w)
WRITE8_MEMBER(nmk16_state::macross2_sound_bank_w)
{
- UINT8 *rom = memregion("audiocpu")->base() + 0x10000;
-
- membank("bank1")->set_base(rom + (data & 0x07) * 0x4000);
+ membank("bank1")->set_entry(data & 0x07);
}
WRITE8_MEMBER(nmk16_state::tharrier_oki6295_bankswitch_0_w)
{
- UINT8 *rom = memregion("oki1")->base();
-
data &= 3;
if (data != 3)
- memcpy(rom + 0x20000,rom + 0x40000 + data * 0x20000,0x20000);
+ membank("okibank1")->set_entry(data);
}
WRITE8_MEMBER(nmk16_state::tharrier_oki6295_bankswitch_1_w)
{
- UINT8 *rom = memregion("oki2")->base();
-
data &= 3;
if (data != 3)
- memcpy(rom + 0x20000,rom + 0x40000 + data * 0x20000,0x20000);
+ membank("okibank2")->set_entry(data);
}
WRITE16_MEMBER(nmk16_state::afega_soundlatch_w)
@@ -970,6 +956,16 @@ static ADDRESS_MAP_START( ssmissin_sound_map, AS_PROGRAM, 8, nmk16_state )
AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_byte_r)
ADDRESS_MAP_END
+static ADDRESS_MAP_START( oki1_map, AS_0, 8, nmk16_state )
+ AM_RANGE(0x00000, 0x1ffff) AM_ROM
+ AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank1")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( oki2_map, AS_0, 8, nmk16_state )
+ AM_RANGE(0x00000, 0x1ffff) AM_ROM
+ AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank2")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( strahl_map, AS_PROGRAM, 16, nmk16_state )
AM_RANGE(0x00000, 0x3ffff) AM_ROM
AM_RANGE(0x80000, 0x80001) AM_READ_PORT("IN0")
@@ -1080,13 +1076,6 @@ static ADDRESS_MAP_START( raphero_map, AS_PROGRAM, 16, nmk16_state )
AM_RANGE(0x1f0000, 0x1fffff) AM_RAM AM_SHARE("mainram")
ADDRESS_MAP_END
-WRITE8_MEMBER(nmk16_state::raphero_sound_rombank_w)
-{
- int bank = data & 7;
-
- membank("bank1")->set_base(memregion("audiocpu")->base() + 0x10000 + (bank * 0x4000));
-}
-
static ADDRESS_MAP_START( raphero_sound_mem_map, AS_PROGRAM, 8, nmk16_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
@@ -1094,7 +1083,7 @@ static ADDRESS_MAP_START( raphero_sound_mem_map, AS_PROGRAM, 8, nmk16_state )
AM_RANGE(0xc800, 0xc800) AM_DEVREADWRITE("oki1", okim6295_device, read, write)
AM_RANGE(0xc808, 0xc808) AM_DEVREADWRITE("oki2", okim6295_device, read, write)
AM_RANGE(0xc810, 0xc817) AM_DEVWRITE("nmk112", nmk112_device, okibank_w)
- AM_RANGE(0xd000, 0xd000) AM_WRITE(raphero_sound_rombank_w)
+ AM_RANGE(0xd000, 0xd000) AM_WRITE(macross2_sound_bank_w)
AM_RANGE(0xd800, 0xd800) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) // main cpu
AM_RANGE(0xe000, 0xffff) AM_RAM
ADDRESS_MAP_END
@@ -3905,9 +3894,11 @@ static MACHINE_CONFIG_START( tharrier, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -3942,9 +3933,11 @@ static MACHINE_CONFIG_START( mustang, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4007,9 +4000,11 @@ static MACHINE_CONFIG_START( bioship, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", BIOSHIP_CRYSTAL2 / 3 , OKIM6295_PIN7_LOW) /* 4.0 Mhz, Pin 7 High (verified) */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", BIOSHIP_CRYSTAL2 / 3 , OKIM6295_PIN7_LOW) /* 4.0 Mhz, Pin 7 High (verified) */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4044,9 +4039,11 @@ static MACHINE_CONFIG_START( vandyke, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", XTAL_12MHz/3, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", XTAL_12MHz/3, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4109,9 +4106,11 @@ static MACHINE_CONFIG_START( acrobatm, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", 16000000/4, OKIM6295_PIN7_LOW) /* (verified on pcb) on the pcb pin7 is not connected to gnd or +5v! */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", 16000000/4, OKIM6295_PIN7_LOW) /* (verified on pcb) on the pcb pin7 is not connected to gnd or +5v! */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4171,9 +4170,11 @@ static MACHINE_CONFIG_START( tdragon, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", XTAL_8MHz/2, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", XTAL_8MHz/2, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tdragon_prot, tdragon )
@@ -4205,6 +4206,7 @@ static MACHINE_CONFIG_START( ssmissin, nmk16_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki1", 8000000/8, OKIM6295_PIN7_HIGH) /* 1 Mhz, pin 7 high */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -4239,9 +4241,11 @@ static MACHINE_CONFIG_START( strahl, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4276,9 +4280,11 @@ static MACHINE_CONFIG_START( hachamf, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( hachamf_prot, hachamf )
@@ -4317,9 +4323,11 @@ static MACHINE_CONFIG_START( macross, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4354,9 +4362,11 @@ static MACHINE_CONFIG_START( blkheart, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", XTAL_8MHz/2, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", XTAL_8MHz/2, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4390,9 +4400,11 @@ static MACHINE_CONFIG_START( gunnail, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", XTAL_16MHz/4, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", XTAL_16MHz/4, OKIM6295_PIN7_LOW) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4644,9 +4656,11 @@ static MACHINE_CONFIG_START( manybloc, nmk16_state )
MCFG_SOUND_ROUTE(3, "mono", 1.20)
MCFG_OKIM6295_ADD("oki1", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MCFG_OKIM6295_ADD("oki2", 16000000/4, OKIM6295_PIN7_LOW)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki2_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
MACHINE_CONFIG_END
@@ -4815,6 +4829,17 @@ DRIVER_INIT_MEMBER(nmk16_state,nmk)
decode_gfx();
}
+DRIVER_INIT_MEMBER(nmk16_state,banked_audiocpu)
+{
+ membank("bank1")->configure_entries(0, 8, memregion("audiocpu")->base(), 0x4000);
+}
+
+DRIVER_INIT_MEMBER(nmk16_state,tharrier)
+{
+ membank("okibank1")->configure_entries(0, 4, memregion("oki1")->base() + 0x20000, 0x20000);
+ membank("okibank2")->configure_entries(0, 4, memregion("oki2")->base() + 0x20000, 0x20000);
+}
+
DRIVER_INIT_MEMBER(nmk16_state,hachamf_prot)
{
UINT16 *rom = (UINT16 *)memregion("maincpu")->base();
@@ -4850,6 +4875,8 @@ DRIVER_INIT_MEMBER(nmk16_state,tdragon_prot)
DRIVER_INIT_MEMBER(nmk16_state,ssmissin)
{
decode_ssmissin();
+
+ membank("okibank1")->configure_entries(0, 4, memregion("oki1")->base() + 0x80000, 0x20000);
}
DRIVER_INIT_MEMBER(nmk16_state,bjtwin)
@@ -5301,13 +5328,11 @@ ROM_START( vandyke )
ROM_LOAD16_BYTE( "vdk-04.2-1", 0x100000, 0x080000, CRC(0a730547) SHA1(afac0549eb86d1fab5ca8ae2a0dad14144f55c02) ) /* Sprites */
ROM_LOAD16_BYTE( "vdk-05.3-1", 0x100001, 0x080000, CRC(ba456d27) SHA1(5485a560ae2c2c8b6fdec314393c02a3de758ef3) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "vdk-02.126", 0x000000, 0x020000, CRC(b2103274) SHA1(6bbdc912393607cd5306be946327c5ea0178c7a6) )
- ROM_CONTINUE( 0x040000, 0x060000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "vdk-02.126", 0x000000, 0x080000, CRC(b2103274) SHA1(6bbdc912393607cd5306be946327c5ea0178c7a6) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "vdk-03.165", 0x000000, 0x020000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) )
- ROM_CONTINUE( 0x040000, 0x060000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "vdk-03.165", 0x000000, 0x080000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) /* V-sync hw (unused) */
@@ -5334,13 +5359,11 @@ ROM_START( vandykejal )
ROM_LOAD16_BYTE( "vdk-04.2-1", 0x100000, 0x080000, CRC(0a730547) SHA1(afac0549eb86d1fab5ca8ae2a0dad14144f55c02) ) /* Sprites */
ROM_LOAD16_BYTE( "vdk-05.3-1", 0x100001, 0x080000, CRC(ba456d27) SHA1(5485a560ae2c2c8b6fdec314393c02a3de758ef3) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "vdk-02.126", 0x000000, 0x020000, CRC(b2103274) SHA1(6bbdc912393607cd5306be946327c5ea0178c7a6) )
- ROM_CONTINUE( 0x040000, 0x060000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "vdk-02.126", 0x000000, 0x080000, CRC(b2103274) SHA1(6bbdc912393607cd5306be946327c5ea0178c7a6) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "vdk-03.165", 0x000000, 0x020000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) )
- ROM_CONTINUE( 0x040000, 0x060000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "vdk-03.165", 0x000000, 0x080000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) /* V-sync hw (unused) */
@@ -5367,13 +5390,11 @@ ROM_START( vandykejal2 )
ROM_LOAD16_BYTE( "vdk-04.2-1", 0x100000, 0x080000, CRC(0a730547) SHA1(afac0549eb86d1fab5ca8ae2a0dad14144f55c02) ) /* Sprites */
ROM_LOAD16_BYTE( "vdk-05.3-1", 0x100001, 0x080000, CRC(ba456d27) SHA1(5485a560ae2c2c8b6fdec314393c02a3de758ef3) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "vdk-02.126", 0x000000, 0x020000, CRC(b2103274) SHA1(6bbdc912393607cd5306be946327c5ea0178c7a6) )
- ROM_CONTINUE( 0x040000, 0x060000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "vdk-02.126", 0x000000, 0x080000, CRC(b2103274) SHA1(6bbdc912393607cd5306be946327c5ea0178c7a6) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "vdk-03.165", 0x000000, 0x020000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) )
- ROM_CONTINUE( 0x040000, 0x060000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "vdk-03.165", 0x000000, 0x080000, CRC(631776d3) SHA1(ffd76e5b03130252c55eaa6ae7edfee5632dae73) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "ic100.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) /* V-sync hw (unused) */
@@ -5430,13 +5451,11 @@ ROM_START( tharrier )
ROM_LOAD16_BYTE( "89050-13", 0x000000, 0x80000, CRC(24db3fa4) SHA1(e0d76c479dfcacf03c04ec4760caecf3fd1e2ff7) ) /* Sprites */
ROM_LOAD16_BYTE( "89050-17", 0x000001, 0x80000, CRC(7f715421) SHA1(bde5e0e1e22519e51ca0fd806909e90cc5b1c5b8) )
- ROM_REGION(0xa0000, "oki1", 0 ) /* Oki sample data */
- ROM_LOAD( "89050-8", 0x00000, 0x20000, CRC(11ee4c39) SHA1(163295c385cff963a5bf87dc3e7bef6019e10ba8) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION(0x80000, "oki1", 0 ) /* Oki sample data */
+ ROM_LOAD( "89050-8", 0x00000, 0x80000, CRC(11ee4c39) SHA1(163295c385cff963a5bf87dc3e7bef6019e10ba8) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION(0xa0000, "oki2", 0 ) /* Oki sample data */
- ROM_LOAD( "89050-10", 0x00000, 0x20000, CRC(893552ab) SHA1(b0a34291f4e482858ed295203ae031b17c2dbabc) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION(0x80000, "oki2", 0 ) /* Oki sample data */
+ ROM_LOAD( "89050-10", 0x00000, 0x80000, CRC(893552ab) SHA1(b0a34291f4e482858ed295203ae031b17c2dbabc) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x140, "proms", 0 )
ROM_LOAD( "21.bpr", 0x00000, 0x100, CRC(fcd5efea) SHA1(cbda6b14127dabd1788cc256743cf62efaa5e8c4) )
@@ -5465,13 +5484,11 @@ ROM_START( tharrieru )
ROM_LOAD16_BYTE( "89050-13", 0x000000, 0x80000, CRC(24db3fa4) SHA1(e0d76c479dfcacf03c04ec4760caecf3fd1e2ff7) ) /* Sprites */
ROM_LOAD16_BYTE( "89050-17", 0x000001, 0x80000, CRC(7f715421) SHA1(bde5e0e1e22519e51ca0fd806909e90cc5b1c5b8) )
- ROM_REGION(0xa0000, "oki1", 0 ) /* Oki sample data */
- ROM_LOAD( "89050-8", 0x00000, 0x20000, CRC(11ee4c39) SHA1(163295c385cff963a5bf87dc3e7bef6019e10ba8) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION(0x80000, "oki1", 0 ) /* Oki sample data */
+ ROM_LOAD( "89050-8", 0x00000, 0x80000, CRC(11ee4c39) SHA1(163295c385cff963a5bf87dc3e7bef6019e10ba8) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION(0xa0000, "oki2", 0 ) /* Oki sample data */
- ROM_LOAD( "89050-10", 0x00000, 0x20000, CRC(893552ab) SHA1(b0a34291f4e482858ed295203ae031b17c2dbabc) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION(0x80000, "oki2", 0 ) /* Oki sample data */
+ ROM_LOAD( "89050-10", 0x00000, 0x80000, CRC(893552ab) SHA1(b0a34291f4e482858ed295203ae031b17c2dbabc) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x140, "proms", 0 )
ROM_LOAD( "21.bpr", 0x00000, 0x100, CRC(fcd5efea) SHA1(cbda6b14127dabd1788cc256743cf62efaa5e8c4) )
@@ -5500,13 +5517,11 @@ ROM_START( mustang )
ROM_LOAD16_BYTE( "90058-8", 0x00000, 0x80000, CRC(560bff04) SHA1(b005642adc81d878971ecbdead8ef5e604c90ae2) )
ROM_LOAD16_BYTE( "90058-9", 0x00001, 0x80000, CRC(b9d72a03) SHA1(43ee9def1b6c491c6832562d66c1af54d81d9b3c) )
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "90058-5", 0x00000, 0x20000, CRC(c60c883e) SHA1(8a01950cad820b2e781ec81cd12737829edc4f19) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "90058-5", 0x00000, 0x80000, CRC(c60c883e) SHA1(8a01950cad820b2e781ec81cd12737829edc4f19) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "90058-6", 0x00000, 0x20000, CRC(233c1776) SHA1(7010a2f914611698a65bf4f22bc1753a9ed26277) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "90058-6", 0x00000, 0x80000, CRC(233c1776) SHA1(7010a2f914611698a65bf4f22bc1753a9ed26277) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "10.bpr", 0x00000, 0x100, CRC(633ab1c9) SHA1(acd99fcca41eaab7948ca84988352f1d7d519c61) ) /* unknown */
@@ -5531,13 +5546,11 @@ ROM_START( mustangs )
ROM_LOAD16_BYTE( "90058-8", 0x00000, 0x80000, CRC(560bff04) SHA1(b005642adc81d878971ecbdead8ef5e604c90ae2) )
ROM_LOAD16_BYTE( "90058-9", 0x00001, 0x80000, CRC(b9d72a03) SHA1(43ee9def1b6c491c6832562d66c1af54d81d9b3c) )
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "90058-5", 0x00000, 0x20000, CRC(c60c883e) SHA1(8a01950cad820b2e781ec81cd12737829edc4f19) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "90058-5", 0x00000, 0x80000, CRC(c60c883e) SHA1(8a01950cad820b2e781ec81cd12737829edc4f19) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "90058-6", 0x00000, 0x20000, CRC(233c1776) SHA1(7010a2f914611698a65bf4f22bc1753a9ed26277) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "90058-6", 0x00000, 0x80000, CRC(233c1776) SHA1(7010a2f914611698a65bf4f22bc1753a9ed26277) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "90058-10", 0x00000, 0x100, CRC(de156d99) SHA1(07b70deca74e23bab7c13e5e9aee32d0dbb06509) ) /* unknown */
@@ -5619,13 +5632,11 @@ ROM_START( acrobatm )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "04_ic74.bin", 0x00000, 0x10000, CRC(176905fb) SHA1(135a184f44bedd93b293b9124fa0bd725e0ee93b) )
- ROM_REGION( 0xa0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "05_ic54.bin", 0x00000, 0x20000, CRC(3b8c2b0e) SHA1(72491da32512823540b67dc5027f21c74af08c7d) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x80000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "05_ic54.bin", 0x00000, 0x80000, CRC(3b8c2b0e) SHA1(72491da32512823540b67dc5027f21c74af08c7d) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0xa0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "06_ic53.bin", 0x00000, 0x20000, CRC(c1517cd4) SHA1(5a91ddc608c7a6fbdd9f93e503d39eac02ef04a4) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x80000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "06_ic53.bin", 0x00000, 0x80000, CRC(c1517cd4) SHA1(5a91ddc608c7a6fbdd9f93e503d39eac02ef04a4) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "10_ic81.bin", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) /* unknown */
@@ -5703,13 +5714,11 @@ ROM_START( bioship )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "6.ic120", 0x00000, 0x10000, CRC(5f39a980) SHA1(2a440f86685249f9c317634cad8cdedc8a8f1491) )
- ROM_REGION(0xa0000, "oki1", 0 ) /* Oki sample data */
- ROM_LOAD( "sbs-g_04.ic139", 0x00000, 0x20000, CRC(7c74cc4e) SHA1(92097b372eacabdb9e8e261b0bc4223821ff9273) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION(0x80000, "oki1", 0 ) /* Oki sample data */
+ ROM_LOAD( "sbs-g_04.ic139", 0x00000, 0x80000, CRC(7c74cc4e) SHA1(92097b372eacabdb9e8e261b0bc4223821ff9273) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION(0xa0000, "oki2", 0 ) /* Oki sample data */
- ROM_LOAD( "sbs-g_05.ic160", 0x00000, 0x20000, CRC(f0a782e3) SHA1(d572226b8e597f1c34d246cb284e047a6e2d9290) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION(0x80000, "oki2", 0 ) /* Oki sample data */
+ ROM_LOAD( "sbs-g_05.ic160", 0x00000, 0x80000, CRC(f0a782e3) SHA1(d572226b8e597f1c34d246cb284e047a6e2d9290) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0220, "proms", 0 )
ROM_LOAD( "82s135.ic94", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) /* V-sync hw (unused) */
@@ -5741,13 +5750,11 @@ ROM_START( sbsgomo )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "6.ic120", 0x00000, 0x10000, CRC(5f39a980) SHA1(2a440f86685249f9c317634cad8cdedc8a8f1491) )
- ROM_REGION(0xa0000, "oki1", 0 ) /* Oki sample data */
- ROM_LOAD( "sbs-g_04.ic139", 0x00000, 0x20000, CRC(7c74cc4e) SHA1(92097b372eacabdb9e8e261b0bc4223821ff9273) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION(0x80000, "oki1", 0 ) /* Oki sample data */
+ ROM_LOAD( "sbs-g_04.ic139", 0x00000, 0x80000, CRC(7c74cc4e) SHA1(92097b372eacabdb9e8e261b0bc4223821ff9273) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION(0xa0000, "oki2", 0 ) /* Oki sample data */
- ROM_LOAD( "sbs-g_05.ic160", 0x00000, 0x20000, CRC(f0a782e3) SHA1(d572226b8e597f1c34d246cb284e047a6e2d9290) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION(0x80000, "oki2", 0 ) /* Oki sample data */
+ ROM_LOAD( "sbs-g_05.ic160", 0x00000, 0x80000, CRC(f0a782e3) SHA1(d572226b8e597f1c34d246cb284e047a6e2d9290) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0220, "proms", 0 )
ROM_LOAD( "82s135.ic94", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) /* V-sync hw (unused) */
@@ -5772,13 +5779,11 @@ ROM_START( blkheart )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "90068-8.bin", 0x000000, 0x100000, CRC(9d3204b2) SHA1(b37a246ad37f9ce092b371f01122ddf2bc8b2db6) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "90068-2.bin", 0x00000, 0x20000, CRC(3a583184) SHA1(9226f1ea7725e4b48bb055d1c17389cf960d75f8) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "90068-2.bin", 0x00000, 0x80000, CRC(3a583184) SHA1(9226f1ea7725e4b48bb055d1c17389cf960d75f8) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "90068-1.bin", 0x00000, 0x20000, CRC(e7af69d2) SHA1(da050880e186954bcf0e0adf00750dd5a371551b) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "90068-1.bin", 0x00000, 0x80000, CRC(e7af69d2) SHA1(da050880e186954bcf0e0adf00750dd5a371551b) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) /* unknown */
@@ -5802,13 +5807,11 @@ ROM_START( blkheartj )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "90068-8.bin", 0x000000, 0x100000, CRC(9d3204b2) SHA1(b37a246ad37f9ce092b371f01122ddf2bc8b2db6) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "90068-2.bin", 0x00000, 0x20000, CRC(3a583184) SHA1(9226f1ea7725e4b48bb055d1c17389cf960d75f8) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "90068-2.bin", 0x00000, 0x80000, CRC(3a583184) SHA1(9226f1ea7725e4b48bb055d1c17389cf960d75f8) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "90068-1.bin", 0x00000, 0x20000, CRC(e7af69d2) SHA1(da050880e186954bcf0e0adf00750dd5a371551b) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "90068-1.bin", 0x00000, 0x80000, CRC(e7af69d2) SHA1(da050880e186954bcf0e0adf00750dd5a371551b) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "9.bpr", 0x0000, 0x0100, CRC(98ed1c97) SHA1(f125ad05c3cbd1b1ab356161f9b1d814781d4c3b) ) /* unknown */
@@ -5832,13 +5835,11 @@ ROM_START( tdragon )
ROM_REGION( 0x010000, "audiocpu", 0 ) /* Code for (unknown?) CPU */
ROM_LOAD( "91070.1", 0x00000, 0x10000, CRC(bf493d74) SHA1(6f8f5eff4b71fb6cabda10075cfa88a3f607859e) )
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "91070.3", 0x00000, 0x20000, CRC(ae6875a8) SHA1(bfdb350b3d3fce2bead1ac60875beafe427765ed) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "91070.3", 0x00000, 0x80000, CRC(ae6875a8) SHA1(bfdb350b3d3fce2bead1ac60875beafe427765ed) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "91070.2", 0x00000, 0x20000, CRC(ecfea43e) SHA1(d664dfa6698fec8e602523bdae16068f1ff6547b) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "91070.2", 0x00000, 0x80000, CRC(ecfea43e) SHA1(d664dfa6698fec8e602523bdae16068f1ff6547b) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "91070.9", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) /* unknown */
@@ -5862,13 +5863,11 @@ ROM_START( tdragon1 )
ROM_REGION( 0x010000, "audiocpu", 0 ) /* Code for (unknown?) CPU */
ROM_LOAD( "91070.1", 0x00000, 0x10000, CRC(bf493d74) SHA1(6f8f5eff4b71fb6cabda10075cfa88a3f607859e) )
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "91070.3", 0x00000, 0x20000, CRC(ae6875a8) SHA1(bfdb350b3d3fce2bead1ac60875beafe427765ed) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "91070.3", 0x00000, 0x80000, CRC(ae6875a8) SHA1(bfdb350b3d3fce2bead1ac60875beafe427765ed) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "91070.2", 0x00000, 0x20000, CRC(ecfea43e) SHA1(d664dfa6698fec8e602523bdae16068f1ff6547b) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "91070.2", 0x00000, 0x80000, CRC(ecfea43e) SHA1(d664dfa6698fec8e602523bdae16068f1ff6547b) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "91070.9", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) /* unknown */
@@ -6031,16 +6030,16 @@ ROM_START( strahl )
ROM_REGION( 0xa0000, "oki1", 0 ) /* Oki sample data */
ROM_LOAD( "str8pmw1.540", 0x00000, 0x20000, CRC(01d6bb6a) SHA1(b157f6f921483ed8067a7e13e370f73fdb60d136) )
/* this is a mess */
- ROM_CONTINUE( 0x80000, 0x20000 ) /* banked */
ROM_CONTINUE( 0x60000, 0x20000 ) /* banked */
ROM_CONTINUE( 0x40000, 0x20000 ) /* banked */
+ ROM_CONTINUE( 0x20000, 0x20000 ) /* banked */
ROM_REGION( 0xa0000, "oki2", 0 ) /* Oki sample data */
ROM_LOAD( "str9pew1.639", 0x00000, 0x20000, CRC(6bb3eb9f) SHA1(9c1394df4f8a08f9098c85eb3d38fb862d6eabbb) )
/* this is a mess */
- ROM_CONTINUE( 0x80000, 0x20000 ) /* banked */
ROM_CONTINUE( 0x60000, 0x20000 ) /* banked */
ROM_CONTINUE( 0x40000, 0x20000 ) /* banked */
+ ROM_CONTINUE( 0x20000, 0x20000 ) /* banked */
ROM_END
ROM_START( strahla )
@@ -6068,16 +6067,16 @@ ROM_START( strahla )
ROM_REGION( 0xa0000, "oki1", 0 ) /* Oki sample data */
ROM_LOAD( "str8pmw1.540", 0x00000, 0x20000, CRC(01d6bb6a) SHA1(b157f6f921483ed8067a7e13e370f73fdb60d136) )
/* this is a mess */
- ROM_CONTINUE( 0x80000, 0x20000 ) /* banked */
ROM_CONTINUE( 0x60000, 0x20000 ) /* banked */
ROM_CONTINUE( 0x40000, 0x20000 ) /* banked */
+ ROM_CONTINUE( 0x20000, 0x20000 ) /* banked */
ROM_REGION( 0xa0000, "oki2", 0 ) /* Oki sample data */
ROM_LOAD( "str9pew1.639", 0x00000, 0x20000, CRC(6bb3eb9f) SHA1(9c1394df4f8a08f9098c85eb3d38fb862d6eabbb) )
/* this is a mess */
- ROM_CONTINUE( 0x80000, 0x20000 ) /* banked */
ROM_CONTINUE( 0x60000, 0x20000 ) /* banked */
ROM_CONTINUE( 0x40000, 0x20000 ) /* banked */
+ ROM_CONTINUE( 0x20000, 0x20000 ) /* banked */
ROM_END
ROM_START( hachamfb )
@@ -6097,13 +6096,13 @@ ROM_START( hachamfb )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "91076-8.57", 0x000000, 0x100000, CRC(7fd0f556) SHA1(d1b4bec0946869d3d7bcb870d9ae3bd17395a231) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "91076-2.46", 0x00000, 0x20000, CRC(3f1e67f2) SHA1(413e78587d8a043a0eb94447313ba1b3c5b35be5) ) /* 1st & 2nd half identical, needs verifying */
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "91076-2.46", 0x00000, 0x80000, CRC(3f1e67f2) SHA1(413e78587d8a043a0eb94447313ba1b3c5b35be5) ) /* 1st & 2nd half identical, needs verifying */
+ /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "91076-3.45", 0x00000, 0x20000, CRC(b25ed93b) SHA1(d7bc686bbccf982f40420a11158aa8e5dd4207c5) ) /* 1st & 2nd half identical, needs verifying */
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "91076-3.45", 0x00000, 0x80000, CRC(b25ed93b) SHA1(d7bc686bbccf982f40420a11158aa8e5dd4207c5) ) /* 1st & 2nd half identical, needs verifying */
+ /* 0x20000 - 0x80000 banked */
ROM_END
ROM_START( hachamf )
@@ -6123,13 +6122,13 @@ ROM_START( hachamf )
ROM_REGION( 0x100000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "91076-8.57", 0x000000, 0x100000, CRC(7fd0f556) SHA1(d1b4bec0946869d3d7bcb870d9ae3bd17395a231) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "91076-2.46", 0x00000, 0x20000, CRC(3f1e67f2) SHA1(413e78587d8a043a0eb94447313ba1b3c5b35be5) ) /* 1st & 2nd half identical, needs verifying */
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "91076-2.46", 0x00000, 0x80000, CRC(3f1e67f2) SHA1(413e78587d8a043a0eb94447313ba1b3c5b35be5) ) /* 1st & 2nd half identical, needs verifying */
+ /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "91076-3.45", 0x00000, 0x20000, CRC(b25ed93b) SHA1(d7bc686bbccf982f40420a11158aa8e5dd4207c5) ) /* 1st & 2nd half identical, needs verifying */
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "91076-3.45", 0x00000, 0x80000, CRC(b25ed93b) SHA1(d7bc686bbccf982f40420a11158aa8e5dd4207c5) ) /* 1st & 2nd half identical, needs verifying */
+ /* 0x20000 - 0x80000 banked */
ROM_END
ROM_START( macross )
@@ -6148,13 +6147,11 @@ ROM_START( macross )
ROM_REGION( 0x200000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "921a07", 0x000000, 0x200000, CRC(7d2bf112) SHA1(1997c99c2d3998096842abd1cee89e0e6ab43a47) ) /* Sprites */
- ROM_REGION( 0xa0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "921a05", 0x00000, 0x20000, CRC(d5a1eddd) SHA1(42b5b255f02b9c6d856b1578af9a5dfc51ea6ebb) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x80000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "921a05", 0x00000, 0x80000, CRC(d5a1eddd) SHA1(42b5b255f02b9c6d856b1578af9a5dfc51ea6ebb) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0xa0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "921a06", 0x00000, 0x20000, CRC(89461d0f) SHA1(b7d27d0ee0b7ab44c20ab710b567f64fc3afb90c) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x80000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "921a06", 0x00000, 0x80000, CRC(89461d0f) SHA1(b7d27d0ee0b7ab44c20ab710b567f64fc3afb90c) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0220, "proms", 0 )
ROM_LOAD( "921a08", 0x0000, 0x0100, CRC(cfdbb86c) SHA1(588822f6308a860937349c9106c2b4b1a75823ec) ) /* unknown */
@@ -6247,13 +6244,11 @@ ROM_START( gunnail )
ROM_REGION( 0x200000, "sprites", 0 )
ROM_LOAD16_WORD_SWAP( "92077-7.u134", 0x000000, 0x200000, CRC(d49169b3) SHA1(565ff7725dd6ace79b55706114132d8d867e81a9) ) /* Sprites */
- ROM_REGION( 0x0a0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "92077-5.u56", 0x00000, 0x20000, CRC(feb83c73) SHA1(b44e9d20b4af02e218c4bc875d66a7d6b8551cae) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "92077-5.u56", 0x00000, 0x80000, CRC(feb83c73) SHA1(b44e9d20b4af02e218c4bc875d66a7d6b8551cae) ) /* 0x20000 - 0x80000 banked */
- ROM_REGION( 0x0a0000, "oki2", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "92077-6.u57", 0x00000, 0x20000, CRC(6d133f0d) SHA1(8a5e6e27a297196f20e4de0d060f1188115809bb) )
- ROM_CONTINUE( 0x40000, 0x60000 ) /* banked */
+ ROM_REGION( 0x080000, "oki2", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "92077-6.u57", 0x00000, 0x80000, CRC(6d133f0d) SHA1(8a5e6e27a297196f20e4de0d060f1188115809bb) ) /* 0x20000 - 0x80000 banked */
ROM_REGION( 0x0220, "proms", 0 )
ROM_LOAD( "8_82s129.u35", 0x0000, 0x0100, CRC(4299776e) SHA1(683d14d2ace14965f0fcfe0f0540c1b77d2cece5) ) /* unknown */
@@ -6265,9 +6260,8 @@ ROM_START( macross2 )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "mcrs2j.3", 0x00000, 0x80000, CRC(36a618fe) SHA1(56fdb2bcb4a39888cfbaf9692d66335524a6ac0c) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* Z80 code */
- ROM_LOAD( "mcrs2j.2", 0x00000, 0x20000, CRC(b4aa8ac7) SHA1(73a6de56cbfb468450d9b39fcbae0362f242f37b) )
- ROM_RELOAD( 0x10000, 0x20000 ) /* banked */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */
+ ROM_LOAD( "mcrs2j.2", 0x00000, 0x20000, CRC(b4aa8ac7) SHA1(73a6de56cbfb468450d9b39fcbae0362f242f37b) ) /* banked */
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "mcrs2j.1", 0x000000, 0x020000, CRC(c7417410) SHA1(41431d8f1ff4d66baf1a8518a0b0c0125d1d71d4) ) /* 8x8 tiles */
@@ -6294,9 +6288,8 @@ ROM_START( macross2g )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "3.u11", 0x00000, 0x80000, CRC(151f9d39) SHA1(d0454627f019c60615cc8bd11e6cbec1f885cf13) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* Z80 code */
- ROM_LOAD( "mcrs2j.2", 0x00000, 0x20000, CRC(b4aa8ac7) SHA1(73a6de56cbfb468450d9b39fcbae0362f242f37b) )
- ROM_RELOAD( 0x10000, 0x20000 ) /* banked */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */
+ ROM_LOAD( "mcrs2j.2", 0x00000, 0x20000, CRC(b4aa8ac7) SHA1(73a6de56cbfb468450d9b39fcbae0362f242f37b) ) /* banked */
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "mcrs2j.1", 0x000000, 0x020000, CRC(c7417410) SHA1(41431d8f1ff4d66baf1a8518a0b0c0125d1d71d4) ) /* 8x8 tiles */
@@ -6323,9 +6316,8 @@ ROM_START( tdragon2 )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "6.rom", 0x00000, 0x80000, CRC(ca348caf) SHA1(7c5b0b92560baf413591230e061d2d57b25deafe) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* Z80 code */
- ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) )
- ROM_RELOAD( 0x10000, 0x20000 ) /* banked */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */
+ ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) ) /* banked */
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "1.bin", 0x000000, 0x020000, CRC(d488aafa) SHA1(4d05e7ca075b638dd90ae4c9f224817a8a3ae9f3) ) /* 8x8 tiles */
@@ -6352,9 +6344,8 @@ ROM_START( tdragon2a )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "6.bin", 0x00000, 0x80000, CRC(310d6bca) SHA1(f46ad1d13cf5014aef1f0e8862b369ab31c22866) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* Z80 code */
- ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) )
- ROM_RELOAD( 0x10000, 0x20000 ) /* banked */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */
+ ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) ) /* banked */
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "1.bin", 0x000000, 0x020000, CRC(d488aafa) SHA1(4d05e7ca075b638dd90ae4c9f224817a8a3ae9f3) ) /* 8x8 tiles */
@@ -6381,9 +6372,8 @@ ROM_START( bigbang )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "eprom.3", 0x00000, 0x80000, CRC(28e5957a) SHA1(fe4f870a9c2235cc02b4e036a2a4116f071d59ad) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* Z80 code */
- ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) )
- ROM_RELOAD( 0x10000, 0x20000 ) /* banked */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 code */
+ ROM_LOAD( "5.bin", 0x00000, 0x20000, CRC(b870be61) SHA1(ea5d45c3a3ab805e55806967f00167cf6366212e) ) /* banked */
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "1.bin", 0x000000, 0x020000, CRC(d488aafa) SHA1(4d05e7ca075b638dd90ae4c9f224817a8a3ae9f3) ) /* 8x8 tiles */
@@ -6472,9 +6462,8 @@ ROM_START( arcadian )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "arcadia.3", 0x00000, 0x80000, CRC(8b46d609) SHA1(793870d74c9d7d04c53d898610c682b2dc90d0af) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* tmp90c841 */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* tmp90c841 */
ROM_LOAD( "rhp94099.2", 0x00000, 0x20000, CRC(fe01ece1) SHA1(c469fb79f2774089848c814f92ddd3c9e384050f) )
- ROM_RELOAD( 0x10000, 0x20000 )
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "arcadia.1", 0x000000, 0x020000, CRC(1c2c4008) SHA1(583d74a0a44519a7050b1d8490011ff60222f466) ) /* 8x8 tiles */
@@ -6505,9 +6494,8 @@ ROM_START( raphero )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
ROM_LOAD16_WORD_SWAP( "rhp94099.3", 0x00000, 0x80000, CRC(ec9b4f05) SHA1(e5bd797620dc449fd78b41d87e9ba5a764eb8b44) )
- ROM_REGION( 0x30000, "audiocpu", 0 ) /* tmp90c841 */
+ ROM_REGION( 0x20000, "audiocpu", 0 ) /* tmp90c841 */
ROM_LOAD( "rhp94099.2", 0x00000, 0x20000, CRC(fe01ece1) SHA1(c469fb79f2774089848c814f92ddd3c9e384050f) )
- ROM_RELOAD( 0x10000, 0x20000 )
ROM_REGION( 0x020000, "fgtile", 0 )
ROM_LOAD( "rhp94099.1", 0x000000, 0x020000, CRC(55a7a011) SHA1(87ded56bfdd38cbf8d3bd8b3789831f768550a12) ) /* 8x8 tiles */
@@ -6776,12 +6764,11 @@ ROM_START( manybloc )
ROM_LOAD16_BYTE( "9-u53b.bin", 0x040000, 0x20000, CRC(dfcfa040) SHA1(f1561defe9746afdb1a5327d0a4435a6f3e87a77) )
ROM_LOAD16_BYTE( "11-u85b.bin", 0x040001, 0x20000, CRC(fe747dd5) SHA1(6ba57a45f4d77e2574de95d4a2f0718c601e7214) )
- ROM_REGION( 0xa0000, "oki1", 0 ) /* OKIM6295 samples */
- ROM_LOAD( "6-u131.bin", 0x00000, 0x20000, CRC(79a4ae75) SHA1(f7609d0ca18b4af8c5f37daa1795a7a6c6d768ae) )
- ROM_CONTINUE( 0x40000, 0x20000 ) /* banked */
- ROM_LOAD( "7-u132.bin", 0x60000, 0x40000, CRC(21db875e) SHA1(e1d96155b6d8825f7c449f276d02f9769258345d) ) /* banked */
+ ROM_REGION( 0x80000, "oki1", 0 ) /* OKIM6295 samples */
+ ROM_LOAD( "6-u131.bin", 0x00000, 0x40000, CRC(79a4ae75) SHA1(f7609d0ca18b4af8c5f37daa1795a7a6c6d768ae) )
+ ROM_LOAD( "7-u132.bin", 0x40000, 0x40000, CRC(21db875e) SHA1(e1d96155b6d8825f7c449f276d02f9769258345d) ) /* banked */
- ROM_REGION( 0xa0000, "oki2", ROMREGION_ERASE00 ) /* OKIM6295 samples */
+ ROM_REGION( 0x80000, "oki2", ROMREGION_ERASE00 ) /* OKIM6295 samples */
/* empty */
ROM_REGION( 0x0420, "proms", 0 )
@@ -7801,8 +7788,8 @@ ROM_END
***************************************************************************/
-GAME( 1989, tharrier, 0, tharrier, tharrier, driver_device, 0, ROT270, "UPL", "Task Force Harrier", 0 )
-GAME( 1989, tharrieru, tharrier,tharrier, tharrier, driver_device, 0, ROT270, "UPL (American Sammy license)", "Task Force Harrier (US?)", 0 )
+GAME( 1989, tharrier, 0, tharrier, tharrier, nmk16_state, tharrier, ROT270, "UPL", "Task Force Harrier", 0 )
+GAME( 1989, tharrieru, tharrier,tharrier, tharrier, nmk16_state, tharrier, ROT270, "UPL (American Sammy license)", "Task Force Harrier (US?)", 0 )
GAME( 1990, mustang, 0, mustang, mustang, driver_device, 0, ROT0, "UPL", "US AAF Mustang (25th May. 1990)", 0 )
GAME( 1990, mustangs, mustang, mustang, mustang, driver_device, 0, ROT0, "UPL (Seoul Trading license)", "US AAF Mustang (25th May. 1990 / Seoul Trading)", 0 )
@@ -7834,16 +7821,16 @@ GAME( 1992, macross, 0, macross, macross, nmk16_state, nmk, ROT
GAME( 1993, gunnail, 0, gunnail, gunnail, nmk16_state, nmk, ROT270, "NMK / Tecmo", "GunNail (28th May. 1992)", 0 ) // Tecmo is displayed only when set to Japan
// a 1992 version of Gunnail exists, see https://www.youtube.com/watch?v=tf15Wz0zUiA 3:10
-GAME( 1993, macross2, 0, macross2, macross2, driver_device, 0, ROT0, "Banpresto", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II", MACHINE_NO_COCKTAIL )
-GAME( 1993, macross2g, macross2,macross2, macross2, driver_device, 0, ROT0, "Banpresto", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II (GAMEST review build)", MACHINE_NO_COCKTAIL ) // Service switch pauses game
+GAME( 1993, macross2, 0, macross2, macross2, nmk16_state, banked_audiocpu, ROT0, "Banpresto", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II", MACHINE_NO_COCKTAIL )
+GAME( 1993, macross2g, macross2,macross2, macross2, nmk16_state, banked_audiocpu, ROT0, "Banpresto", "Super Spacefortress Macross II / Chou-Jikuu Yousai Macross II (GAMEST review build)", MACHINE_NO_COCKTAIL ) // Service switch pauses game
-GAME( 1993, tdragon2, 0, tdragon2, tdragon2, driver_device, 0, ROT270, "NMK", "Thunder Dragon 2 (9th Nov. 1993)", MACHINE_NO_COCKTAIL )
-GAME( 1993, tdragon2a,tdragon2, tdragon2, tdragon2, driver_device, 0, ROT270, "NMK", "Thunder Dragon 2 (1st Oct. 1993)", MACHINE_NO_COCKTAIL )
-GAME( 1993, bigbang, tdragon2, tdragon2, tdragon2, driver_device, 0, ROT270, "NMK", "Big Bang (9th Nov. 1993)", MACHINE_NO_COCKTAIL )
+GAME( 1993, tdragon2, 0, tdragon2, tdragon2, nmk16_state, banked_audiocpu, ROT270, "NMK", "Thunder Dragon 2 (9th Nov. 1993)", MACHINE_NO_COCKTAIL )
+GAME( 1993, tdragon2a,tdragon2, tdragon2, tdragon2, nmk16_state, banked_audiocpu, ROT270, "NMK", "Thunder Dragon 2 (1st Oct. 1993)", MACHINE_NO_COCKTAIL )
+GAME( 1993, bigbang, tdragon2, tdragon2, tdragon2, nmk16_state, banked_audiocpu, ROT270, "NMK", "Big Bang (9th Nov. 1993)", MACHINE_NO_COCKTAIL )
/* arcadia was a name conflict to the Emerson Arcadia 2001 in mess */
-GAME( 1994, arcadian, 0, raphero, raphero, driver_device, 0, ROT270, "NMK", "Arcadia (NMK)", 0 ) // 23rd July 1993 in test mode, (c)1994 on title screen
-GAME( 1994, raphero, arcadian, raphero, raphero, driver_device, 0, ROT270, "NMK (Media Trading license)", "Rapid Hero", 0 ) // ^^
+GAME( 1994, arcadian, 0, raphero, raphero, nmk16_state, banked_audiocpu, ROT270, "NMK", "Arcadia (NMK)", 0 ) // 23rd July 1993 in test mode, (c)1994 on title screen
+GAME( 1994, raphero, arcadian, raphero, raphero, nmk16_state, banked_audiocpu, ROT270, "NMK (Media Trading license)", "Rapid Hero", 0 ) // ^^
/* both sets of both these games show a date of 9th Mar 1992 in the test mode, they look like different revisions so I doubt this is accurate */
GAME( 1992, sabotenb, 0, bjtwin, sabotenb, nmk16_state, nmk, ROT0, "NMK / Tecmo", "Saboten Bombers (set 1)", MACHINE_NO_COCKTAIL )
@@ -7908,4 +7895,4 @@ GAME( 2001, firehawk, spec2k, firehawk, firehawk, driver_device, 0, ORIE
GAME( 2001, firehawkv,spec2k, firehawk, firehawkv,driver_device, 0, ORIENTATION_FLIP_Y, "ESD", "Fire Hawk (switchable orientation)", MACHINE_NOT_WORKING ) // incomplete dump, vertical mode gfx not dumped
// bee-oh board - different display / interrupt timing to others?
-GAME( 1991, manybloc, 0, manybloc, manybloc, driver_device, 0, ROT270, "Bee-Oh", "Many Block", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
+GAME( 1991, manybloc, 0, manybloc, manybloc, nmk16_state, tharrier, ROT270, "Bee-Oh", "Many Block", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/notetaker.cpp b/src/mame/drivers/notetaker.cpp
index ca36c069361..7fd3f9128bd 100644
--- a/src/mame/drivers/notetaker.cpp
+++ b/src/mame/drivers/notetaker.cpp
@@ -14,6 +14,15 @@
<there are probably others I've missed>
* History of the machine can be found at http://freudenbergs.de/bert/publications/Ingalls-2014-Smalltalk78.pdf
+
+ * The notetaker has an 8-slot backplane, with the following cards in it:
+ * I/O Processor card (8086@8Mhz, 8259pic, 4k ROM, Keyboard UART, DAC1200 (multiplexed to 2 channels))
+ * Emulation Processor card (8086@5Mhz, 8259pic, 4k of local RAM with Parity check logic)
+ * Disk/Display card (WD1791 FDC, CRT5027 CRTC, EIA UART, AD571 ADC, 8->1 Analog Multiplexer)
+ * Memory Control Module \_ (bus control, buffering, refresh, Parity/ECC/Syndrome logic lives on these boards)
+ * Memory Data Module /
+ * Memory Storage Module x2 (the 4116 DRAMs live on these boards)
+ * Battery Module *OR* debugger module type A or B (debugger module has an i8255 on it for alto<->notetaker comms, and allows alto to halt the cpus [type A and B can debug either the emulator cpu or the iocpu respectively] and dump registers to alto screen, etc)
* Prototypes only, 10 units[2] manufactured 1978-1980
Known surviving units:
@@ -23,6 +32,8 @@
* The NoteTaker used the BitBlt graphical operation (from SmallTalk-76) to do most graphical functions, in order to fit the SmallTalk code and programs within 256K of RAM[2]. The actual BitBlt code lives in ROM[3].
* As far as I am aware, no media (world disks/boot disks) for the NoteTaker have survived (except maybe the two disks at Xerox Museum at PARC), but an incomplete dump of the Smalltalk-76 'world' which was used to bootstrap Smalltalk-78 originally did survive on the Alto disks at CHM
+
+ * We are missing the dump for the i8748 Keyboard MCU which does row-column scanning and mouse quadrature reading, and talks to the main system via serial
* see http://bitsavers.informatik.uni-stuttgart.de/pdf/xerox/notetaker for additional information
* see http://xeroxalto.computerhistory.org/Filene/Smalltalk-76/ for the smalltalk-76 dump
@@ -34,76 +45,204 @@
* [3] http://bitsavers.trailing-edge.com/pdf/xerox/notetaker/memos/19790620_Z-IOP_1.5_ls.pdf
* [4] http://xeroxalto.computerhistory.org/Filene/Smalltalk-76/
* [5] http://bitsavers.trailing-edge.com/pdf/xerox/notetaker/memos/19790118_NoteTaker_System_Manual.pdf
- * MISSING DUMP for 8741? Keyboard MCU which does row-column scanning and mouse-related stuff
-
+
TODO: everything below.
* figure out the correct memory maps for the 256kB of shared ram, and what part of ram constitutes the framebuffer
* figure out how the emulation-cpu boots and where its 4k of local ram maps to
* Get smalltalk-78 loaded as a rom and forced into ram on startup, since no boot disks have survived (or if any survived, they are not dumped)
-* floppy controller wd1791
- According to [3] and [5] the format is double density/MFM, 128 bytes per sector, 16 sectors per track, 1 or 2 sided, for 170K or 340K per disk.
- According to the schematics, we're missing an 82s147 DISKSEP.PROM used as a data separator
-* crt5027 video controller; we're missing a PROM used to handle memory arbitration between the crtc and the rest of the system, but the equations are on the schematic
-* Harris 6402 serial/EIA UART
-* Harris 6402 keyboard UART
+
+* Harris 6402 keyboard UART (within keyboard, next to MCU)
+* The harris 6402 UART is pin compatible with WD TR1865 and TR1602 UARTs, as well as the AY-3-1015A/D
* HLE for the missing i8748[5] MCU in the keyboard which reads the mouse quadratures and buttons and talks serially to the Keyboard UART
+* floppy controller wd1791
+ According to [3] and [5] the format is double density/MFM, 128 bytes per sector, 16 sectors per track, 1 or 2 sided, for 170K or 340K per disk. Drive spins at 300RPM.
+* According to the schematics, we're missing an 82s147 DISKSEP.PROM used as a data separator
WIP:
+* crt5027 video controller - the iocpu side is hooked up, but crashes due to a bug in the crt5027/tms9927 code. the actual drawing to screen part is not connected anywhere yet.
* pic8259 interrupt controller - this is attached as a device, but the interrupts are not hooked to it yet.
-* i/o cpu i/o area needs the memory map worked out per the schematics - mostly done
+* Harris 6402 serial/EIA UART - connected to iocpu, other end isn't connected anywhere
+* Harris 6402 keyboard UART (within notetaker) - connected to iocpu, other end isn't connected anywhere
+* we're missing a dump of the 82s126 SETMEMRQ PROM used to handle memory arbitration between the crtc and the rest of the system, but the equations are on the schematic and I'm planning to regenerate the prom contents from that, see ROM_LOAD section
+
+DONE:
+* i/o cpu i/o area needs the memory map worked out per the schematics - done
*/
#include "cpu/i86/i86.h"
#include "machine/pic8259.h"
-//#include "video/tms9927.h"
+#include "machine/ay31015.h"
+#include "video/tms9927.h"
class notetaker_state : public driver_device
{
public:
notetaker_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag) ,
- m_maincpu(*this, "maincpu"),
- m_pic(*this, "pic8259")//,
- //m_vtac(*this, "crt5027")
+ m_iocpu(*this, "iocpu"),
+ m_iopic(*this, "iopic8259"),
+ m_kbduart(*this, "kbduart"),
+ m_eiauart(*this, "eiauart"),
+ m_crtc(*this, "crt5027")
{
}
// devices
- required_device<cpu_device> m_maincpu;
- required_device<pic8259_device> m_pic;
- //required_device<crt5027_device> m_vtac;
+ required_device<cpu_device> m_iocpu;
+ required_device<pic8259_device> m_iopic;
+ required_device<ay31015_device> m_kbduart;
+ required_device<ay31015_device> m_eiauart;
+ required_device<crt5027_device> m_crtc;
//declarations
+ // screen
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ // basic io
DECLARE_WRITE16_MEMBER(IPConReg_w);
- DECLARE_READ16_MEMBER(maincpu_r);
- DECLARE_WRITE16_MEMBER(maincpu_w);
- DECLARE_DRIVER_INIT(notetakr);
+ // uarts
+ DECLARE_READ16_MEMBER(ReadKeyData_r);
+ DECLARE_READ16_MEMBER(ReadOPStatus_r);
+ DECLARE_WRITE16_MEMBER(LoadKeyData_w);
+ DECLARE_WRITE16_MEMBER(LoadKeyCtlReg_w);
+ DECLARE_WRITE16_MEMBER(KeyDataReset_w);
+ DECLARE_WRITE16_MEMBER(KeyChipReset_w);
+ DECLARE_READ16_MEMBER(ReadEIAData_r);
+ DECLARE_READ16_MEMBER(ReadEIAStatus_r);
+ DECLARE_WRITE16_MEMBER(LoadEIAData_w);
+ DECLARE_WRITE16_MEMBER(LoadEIACtlReg_w);
+ DECLARE_WRITE16_MEMBER(EIADataReset_w);
+ DECLARE_WRITE16_MEMBER(EIAChipReset_w);
+ // mem map stuff
+ DECLARE_READ16_MEMBER(iocpu_r);
+ DECLARE_WRITE16_MEMBER(iocpu_w);
+ DECLARE_DRIVER_INIT(notetakr);
//variables
UINT8 m_BootSeqDone;
UINT8 m_DisableROM;
-
+
// overrides
virtual void machine_reset() override;
};
+UINT32 notetaker_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ // have to figure out what resolution we're drawing to here and draw appropriately to screen
+ return 0;
+}
+
WRITE16_MEMBER(notetaker_state::IPConReg_w)
{
m_BootSeqDone = (data&0x80)?1:0;
- //m_ProcLock = (data&0x40)?1:0; // processor lock
+ //m_ProcLock = (data&0x40)?1:0; // bus lock for this processor (hold other processor in wait state)
//m_CharCtr = (data&0x20)?1:0; // battery charge control
m_DisableROM = (data&0x10)?1:0; // disable rom at 0000-0fff
- //m_CorrOn = (data&0x08)?1:0; // also LedInd5
+ //m_CorrOn = (data&0x08)?1:0; // corron (?) also LedInd5
//m_LedInd6 = (data&0x04)?1:0;
//m_LedInd7 = (data&0x02)?1:0;
//m_LedInd8 = (data&0x01)?1:0;
popmessage("LEDS: CR1: %d, CR2: %d, CR3: %d, CR4: %d", (data&0x04)>>2, (data&0x08)>>3, (data&0x02)>>1, (data&0x01)); // cr1 and 2 are in the reverse order as expected, according to the schematic
}
-READ16_MEMBER(notetaker_state::maincpu_r)
+/* handlers for the two system hd6402s (ay-5-1013 equivalent) */
+/* * Keyboard hd6402 */
+READ16_MEMBER( notetaker_state::ReadKeyData_r )
+{
+ return 0xFF00||m_kbduart->get_received_data();
+}
+
+READ16_MEMBER( notetaker_state::ReadOPStatus_r )
{
- UINT16 *rom = (UINT16 *)(memregion("maincpu")->base());
+ UINT16 data = 0xFFF0;
+ // TODO: FIX HACK: set FIFOInRDY and FIFOOutRdy both to 1
+ data |= 0x0C;
+ /*
+ data |= (m_FIFOOutRdy) ? 0x08 : 0;
+ data |= (m_FIFOInRdy) ? 0x04 : 0;
+ */
+ // note /SWE is permanently enabled, so we don't enable it here for HD6402 reading
+ data |= m_kbduart->get_output_pin(AY31015_DAV ) ? 0x02 : 0; // DR - pin 19
+ data |= m_kbduart->get_output_pin(AY31015_TBMT) ? 0x01 : 0; // TBRE - pin 22
+ return data;
+}
+
+WRITE16_MEMBER( notetaker_state::LoadKeyData_w )
+{
+ m_kbduart->set_transmit_data(data&0xFF);
+}
+
+WRITE16_MEMBER( notetaker_state::LoadKeyCtlReg_w )
+{
+ m_kbduart->set_input_pin(AY31015_CS, 0);
+ m_kbduart->set_input_pin(AY31015_NP, BIT(data, 4)); // PI - pin 35
+ m_kbduart->set_input_pin(AY31015_TSB, BIT(data, 3)); // SBS - pin 36
+ m_kbduart->set_input_pin(AY31015_NB2, BIT(data, 2)); // CLS2 - pin 37
+ m_kbduart->set_input_pin(AY31015_NB1, BIT(data, 1)); // CLS1 - pin 38
+ m_kbduart->set_input_pin(AY31015_EPS, BIT(data, 0)); // EPE - pin 39
+ m_kbduart->set_input_pin(AY31015_CS, 1);
+}
+
+WRITE16_MEMBER( notetaker_state::KeyDataReset_w )
+{
+ m_kbduart->set_input_pin(AY31015_RDAV, 0); // DDR - pin 18
+ m_kbduart->set_input_pin(AY31015_RDAV, 1); // ''
+}
+
+WRITE16_MEMBER( notetaker_state::KeyChipReset_w )
+{
+ m_kbduart->set_input_pin(AY31015_XR, 0); // MR - pin 21
+ m_kbduart->set_input_pin(AY31015_XR, 1); // ''
+}
+
+/* EIA hd6402 */
+READ16_MEMBER( notetaker_state::ReadEIAData_r )
+{
+ return 0xFF00||m_eiauart->get_received_data();
+}
+
+READ16_MEMBER( notetaker_state::ReadEIAStatus_r )
+{
+ UINT16 data = 0xFFFC;
+ // note /SWE is permanently enabled, so we don't enable it here for HD6402 reading
+ data |= m_eiauart->get_output_pin(AY31015_DAV ) ? 0x02 : 0; // DR - pin 19
+ data |= m_eiauart->get_output_pin(AY31015_TBMT) ? 0x01 : 0; // TBRE - pin 22
+ return data;
+}
+
+WRITE16_MEMBER( notetaker_state::LoadEIAData_w )
+{
+ m_eiauart->set_transmit_data(data&0xFF);
+}
+
+WRITE16_MEMBER( notetaker_state::LoadEIACtlReg_w )
+{
+ m_eiauart->set_input_pin(AY31015_CS, 0);
+ m_eiauart->set_input_pin(AY31015_NP, BIT(data, 4)); // PI - pin 35
+ m_eiauart->set_input_pin(AY31015_TSB, BIT(data, 3)); // SBS - pin 36
+ m_eiauart->set_input_pin(AY31015_NB2, BIT(data, 2)); // CLS2 - pin 37
+ m_eiauart->set_input_pin(AY31015_NB1, BIT(data, 1)); // CLS1 - pin 38
+ m_eiauart->set_input_pin(AY31015_EPS, BIT(data, 0)); // EPE - pin 39
+ m_eiauart->set_input_pin(AY31015_CS, 1);
+}
+
+WRITE16_MEMBER( notetaker_state::EIADataReset_w )
+{
+ m_eiauart->set_input_pin(AY31015_RDAV, 0); // DDR - pin 18
+ m_eiauart->set_input_pin(AY31015_RDAV, 1); // ''
+}
+
+WRITE16_MEMBER( notetaker_state::EIAChipReset_w )
+{
+ m_eiauart->set_input_pin(AY31015_XR, 0); // MR - pin 21
+ m_eiauart->set_input_pin(AY31015_XR, 1); // ''
+}
+
+
+/* These next two members are memory map related for the iocpu */
+READ16_MEMBER(notetaker_state::iocpu_r)
+{
+ UINT16 *rom = (UINT16 *)(memregion("iocpu")->base());
rom += 0x7f800;
- UINT16 *ram = (UINT16 *)(memregion("ram")->base());
+ UINT16 *ram = (UINT16 *)(memregion("mainram")->base());
if ( (m_BootSeqDone == 0) || ((m_DisableROM == 0) && ((offset&0x7F800) == 0)) )
{
rom += (offset&0x7FF);
@@ -116,35 +255,45 @@ READ16_MEMBER(notetaker_state::maincpu_r)
}
}
-WRITE16_MEMBER(notetaker_state::maincpu_w)
+WRITE16_MEMBER(notetaker_state::iocpu_w)
{
- UINT16 *ram = (UINT16 *)(memregion("ram")->base());
+ UINT16 *ram = (UINT16 *)(memregion("mainram")->base());
+ if ( (m_BootSeqDone == 0) || ((m_DisableROM == 0) && ((offset&0x7F800) == 0)) )
+ {
+ logerror("attempt to write %04X to ROM-mapped area at %06X ignored\n", data, offset);
+ return;
+ }
ram += offset;
*ram = data;
}
/* Address map comes from http://bitsavers.informatik.uni-stuttgart.de/pdf/xerox/notetaker/schematics/19790423_Notetaker_IO_Processor.pdf
a19 a18 a17 a16 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 BootSeqDone DisableROM
-x x x x x x x x * * * * * * * * * * * * 0 x R ROM
-0 0 0 0 0 0 0 0 * * * * * * * * * * * * 1 0 R ROM
-< anything not all zeroes > * * * * * * * * * * * * 1 0 RW RAM
-x x x x ? ? * * * * * * * * * * * * * * x x W RAM
-x x x x ? ? * * * * * * * * * * * * * * 1 1 RW RAM
+mode 0: (to get the boot vector and for maybe 1 or 2 instructions afterward)
+x x x x x x x x * * * * * * * * * * * * 0 x R ROM (writes are open bus)
+mode 1: (during most of boot)
+0 0 0 0 0 0 0 0 * * * * * * * * * * * * 1 0 R ROM (writes are open bus)
+0 0 0 0 0 0 0 1 * * * * * * * * * * * * 1 0 RW RAM
+0 0 0 0 0 0 1 * * * * * * * * * * * * * 1 0 RW RAM
+<anything not all zeroes>x x x x x x x x x x x x x x 1 0 . Open Bus
+mode 2: (during load of the emulatorcpu's firmware to the first 4k of shared ram which is on the emulatorcpu board)
+0 0 0 0 0 0 * * * * * * * * * * * * * * 1 1 RW RAM
+<anything not all zeroes>x x x x x x x x x x x x x x 1 1 . Open Bus
More or less:
-BootSeqDone is 0, DisableROM is ignored, mem map is 0x00000-0xfffff reading is the 0x1000-long ROM, repeated every 0x1000 bytes. writing goes to RAM.
-BootSeqDone is 1, DisableROM is 0, mem map is 0x00000-0x00fff reading is the 0x1000-long ROM, remainder of memory map goes to RAM or open bus. writing goes to RAM.
+BootSeqDone is 0, DisableROM is ignored, mem map is 0x00000-0xfffff reading is the 0x1000-long ROM, repeated every 0x1000 bytes. writing goes nowhere.
+BootSeqDone is 1, DisableROM is 0, mem map is 0x00000-0x00fff reading is the 0x1000-long ROM, remainder of memory map goes to RAM or open bus. writing the ROM area goes nowhere, writing RAM goes to RAM.
BootSeqDone is 1, DisableROM is 1, mem map is entirely RAM or open bus for both reading and writing.
*/
-static ADDRESS_MAP_START(notetaker_mem, AS_PROGRAM, 16, notetaker_state)
+static ADDRESS_MAP_START(notetaker_iocpu_mem, AS_PROGRAM, 16, notetaker_state)
/*
- AM_RANGE(0x00000, 0x00fff) AM_ROM AM_REGION("maincpu", 0xFF000) // rom is here if either BootSeqDone OR DisableROM are zero. the 1.5 source code implies writes here are ignored
+ AM_RANGE(0x00000, 0x00fff) AM_ROM AM_REGION("iocpu", 0xFF000) // rom is here if either BootSeqDone OR DisableROM are zero. the 1.5 source code implies writes here are ignored
AM_RANGE(0x01000, 0x01fff) AM_RAM // 4k of ram, local to the io processor
- AM_RANGE(0x02000, 0x3ffff) AM_RAM AM_BASE("sharedram") // 256k of ram (less 8k), shared between both processors
+ AM_RANGE(0x02000, 0x3ffff) AM_RAM AM_BASE("mainram") // 256k of ram (less 8k), shared between both processors
// note 4000-8fff? is the framebuffer for the screen?
AM_RANGE(0xff000, 0xfffff) AM_ROM // rom is only banked in here if bootseqdone is 0, so the reset vector is in the proper place
*/
- AM_RANGE(0x00000, 0xfffff) AM_READWRITE(maincpu_r, maincpu_w) // bypass MAME's memory map system as we need finer grained control
+ AM_RANGE(0x00000, 0xfffff) AM_READWRITE(iocpu_r, iocpu_w) // bypass MAME's memory map system as we need finer grained control
ADDRESS_MAP_END
/* io memory map comes from http://bitsavers.informatik.uni-stuttgart.de/pdf/xerox/notetaker/memos/19790605_Definition_of_8086_Ports.pdf
@@ -161,45 +310,68 @@ x x x x 0 x x x x x x 0 0 1 0 x 1 0 1
x x x x 0 x x x x x x 0 0 1 0 x 1 1 0 . W KbdInt:KeyDataReset
x x x x 0 x x x x x x 0 0 1 0 x 1 1 1 . W KbdInt:KeyChipReset
x x x x 0 x x x x x x 0 0 1 1 x x x x . W FIFOReg
-x x x x 0 x x x x x x 0 1 0 0 x x x x . . Open Bus
-x x x x 0 x x x x x x 0 1 0 1 x x x x . . Open Bus
+x x x x 0 x x x x x x 0 1 0 0 x x x x . . Open Bus(originally ReadOpStatus)
+x x x x 0 x x x x x x 0 1 0 1 x x * * . RW SelPIA (debugger board 8255 PIA)[Open Bus on normal units]
x x x x 0 x x x x x x 0 1 1 0 x x x x . W FIFOBus
x x x x 0 x x x x x x 0 1 1 1 x x x x . . Open Bus
-x x x x 0 x x x x x x 1 0 0 0 x x x x . RW SelDiskReg
+x x x x 0 x x x x x x 1 0 0 0 x x x x . RW SelDiskReg
x x x x 0 x x x x x x 1 0 0 1 x x * * . RW SelDiskInt
-x x x x 0 x x x x x x 1 0 1 0 * * * * . W SelCrtInt
+x x x x 0 x x x x x x 1 0 1 0 * * * * . W SelCrtInt
x x x x 0 x x x x x x 1 0 1 1 x x x x . W LoadDispAddr
-x x x x 0 x x x x x x 1 1 0 0 x x x x . . Open Bus
-x x x x 0 x x x x x x 0 1 0 1 x 0 0 0 . R SelEIA:ReadEIAStatus
-x x x x 0 x x x x x x 0 1 0 1 x 0 0 1 . R SelEIA:ReadEIAData
-x x x x 0 x x x x x x 0 1 0 1 x 0 1 0 . . SelEIA:Open Bus
-x x x x 0 x x x x x x 0 1 0 1 x 0 1 1 . . SelEIA:Open Bus
-x x x x 0 x x x x x x 0 1 0 1 x 1 0 0 . W SelEIA:LoadEIACtlReg
-x x x x 0 x x x x x x 0 1 0 1 x 1 0 1 . W SelEIA:LoadEIAData
-x x x x 0 x x x x x x 0 1 0 1 x 1 1 0 . W SelEIA:EIADataReset
-x x x x 0 x x x x x x 0 1 0 1 x 1 1 1 . W SelEIA:EIAChipReset
+x x x x 0 x x x x x x 1 1 0 0 x x x x . . Open Bus(originally ReadEIAStatus)
+x x x x 0 x x x x x x 1 1 0 1 x 0 0 0 . R SelEIA:ReadEIAStatus
+x x x x 0 x x x x x x 1 1 0 1 x 0 0 1 . R SelEIA:ReadEIAData
+x x x x 0 x x x x x x 1 1 0 1 x 0 1 0 . . SelEIA:Open Bus
+x x x x 0 x x x x x x 1 1 0 1 x 0 1 1 . . SelEIA:Open Bus
+x x x x 0 x x x x x x 1 1 0 1 x 1 0 0 . W SelEIA:LoadEIACtlReg
+x x x x 0 x x x x x x 1 1 0 1 x 1 0 1 . W SelEIA:LoadEIAData
+x x x x 0 x x x x x x 1 1 0 1 x 1 1 0 . W SelEIA:EIADataReset
+x x x x 0 x x x x x x 1 1 0 1 x 1 1 1 . W SelEIA:EIAChipReset
x x x x 0 x x x x x x 1 1 1 0 x x x x . R SelADCHi
x x x x 0 x x x x x x 1 1 1 1 x x x x . W CRTSwitch
*/
-static ADDRESS_MAP_START(notetaker_io, AS_IO, 16, notetaker_state)
+static ADDRESS_MAP_START(notetaker_iocpu_io, AS_IO, 16, notetaker_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00, 0x03) AM_MIRROR(0x7E1C) AM_DEVREADWRITE8("pic8259", pic8259_device, read, write, 0x00ff)
- AM_RANGE(0x20, 0x21) AM_MIRROR(0x7E1E) AM_WRITE(IPConReg_w) // processor (rom mapping, etc) control register
- //AM_RANGE(0x42, 0x43) AM_MIRROR(0x7E10) AM_READ(ReadKeyData_r) // read keyboard data (high byte only) [from mcu?]
- //AM_RANGE(0x44, 0x45) AM_MIRROR(0x7E10) AM_READ(ReadOPStatus_r) // read keyboard fifo state (high byte only) [from mcu?]
- //AM_RANGE(0x48, 0x49) AM_MIRROR(0x7E10) AM_WRITE(LoadKeyCtlReg_w) // kbd uart control register
- //AM_RANGE(0x4a, 0x4b) AM_MIRROR(0x7E10) AM_WRITE(LoadKeyData_w) // kbd uart data register
- //AM_RANGE(0x4c, 0x4d) AM_MIRROR(0x7E10) AM_WRITE(KeyDataReset_w) // kbd uart ddr switch (data reset)
- //AM_RANGE(0x4e, 0x4f) AM_MIRROR(0x7E10) AM_WRITE(KeyChipReset_w) // kbd uart reset
+ AM_RANGE(0x00, 0x03) AM_MIRROR(0x7E1C) AM_DEVREADWRITE8("iopic8259", pic8259_device, read, write, 0x00ff)
+ AM_RANGE(0x20, 0x21) AM_MIRROR(0x7E1E) AM_WRITE(IPConReg_w) // I/O processor (rom mapping, etc) control register
+ AM_RANGE(0x42, 0x43) AM_MIRROR(0x7E10) AM_READ(ReadKeyData_r) // read keyboard data
+ AM_RANGE(0x44, 0x45) AM_MIRROR(0x7E10) AM_READ(ReadOPStatus_r) // read keyboard fifo state
+ AM_RANGE(0x48, 0x49) AM_MIRROR(0x7E10) AM_WRITE(LoadKeyCtlReg_w) // kbd uart control register
+ AM_RANGE(0x4a, 0x4b) AM_MIRROR(0x7E10) AM_WRITE(LoadKeyData_w) // kbd uart data register
+ AM_RANGE(0x4c, 0x4d) AM_MIRROR(0x7E10) AM_WRITE(KeyDataReset_w) // kbd uart ddr switch (data reset)
+ AM_RANGE(0x4e, 0x4f) AM_MIRROR(0x7E10) AM_WRITE(KeyChipReset_w) // kbd uart reset
//AM_RANGE(0x60, 0x61) AM_MIRROR(0x7E1E) AM_WRITE(FIFOReg_w) // DAC sample and hold and frequency setup
- //AM_RANGE(0x100, 0x101) AM_WRITE I/O register (adc speed, crtc pixel clock enable, etc)
- //AM_RANGE(0x140, 0x15f) AM_DEVREADWRITE("crt5027", crt5027_device, read, write)
+ //AM_RANGE(0xa0, 0xa1) AM_MIRROR(0x7E18) AM_DEVREADWRITE("debug8255", 8255_device, read, write) // debugger board 8255
+ //AM_RANGE(0xc0, 0xc1) AM_MIRROR(0x7E1E) AM_WRITE(FIFOBus_w) // DAC data write to FIFO
+ //AM_RANGE(0x100, 0x101) AM_MIRROR(0x7E1E) AM_WRITE(SelDiskReg_w) I/O register (adc speed, crtc pixel clock enable, +5 and +12v relays for floppy, etc)
+ //AM_RANGE(0x120, 0x121) AM_MIRROR(0x7E18) AM_DEVREADWRITE("wd1791", fd1971_device) // floppy controller
+ AM_RANGE(0x140, 0x15f) AM_MIRROR(0x7E00) AM_DEVREADWRITE8("crt5027", crt5027_device, read, write, 0x00FF) // crt controller
+ //AM_RANGE(0x160, 0x161) AM_MIRROR(0x7E1E) AM_WRITE(LoadDispAddr_w) // loads the start address for the display framebuffer
+ AM_RANGE(0x1a0, 0x1a1) AM_MIRROR(0x7E10) AM_READ(ReadEIAStatus_r) // read keyboard fifo state
+ AM_RANGE(0x1a2, 0x1a3) AM_MIRROR(0x7E10) AM_READ(ReadEIAData_r) // read keyboard data
+ AM_RANGE(0x1a8, 0x1a9) AM_MIRROR(0x7E10) AM_WRITE(LoadEIACtlReg_w) // kbd uart control register
+ AM_RANGE(0x1aa, 0x1ab) AM_MIRROR(0x7E10) AM_WRITE(LoadEIAData_w) // kbd uart data register
+ AM_RANGE(0x1ac, 0x1ad) AM_MIRROR(0x7E10) AM_WRITE(EIADataReset_w) // kbd uart ddr switch (data reset)
+ AM_RANGE(0x1ae, 0x1af) AM_MIRROR(0x7E10) AM_WRITE(EIAChipReset_w) // kbd uart reset
+ //AM_RANGE(0x1c0, 0x1c1) AM_MIRROR(0x7E1E) AM_READ(SelADCHi_r) // ADC read
+ //AM_RANGE(0x1e0, 0x1e1) AM_MIRROR(0x7E1E) AM_READ(CRTSwitch_w) // CRT power enable?
ADDRESS_MAP_END
-/* writes during boot:
-0x88 to port 0x020 (PCR; boot sequence done(1), processor not locked(0), battery charger off(0), rom not disabled(0) correction off&cr4 off(1), cr3 on(0), cr2 on(0), cr1 on (0);)
-0x02 to port 0x100 (IOR write: enable 5v only relay control for powering up 4116 dram enabled)
-0x03 to port 0x100 (IOR write: in addition to above, enable 12v relay control for powering up 4116 dram enabled)
+/* iopic8259 interrupts:
+irq0 parity error (parity error syndrome data will be in fffdx/fffex) - currently ignored
+irq1 IPSysInt (interrupt triggered by the emulator cpu)
+irq2 DiskInt (interrupt triggered by the IRQ or DRQ pins from the WD1791)
+irq3 EIAInt (interrupt triggered by the datareceived pin from the eiauart)
+irq4 OddInt (interrupt triggered by the O/E Odd/Even pin from the crt5027)
+irq5 ADCInt (interrupt triggered at the ADCSpd rate interrupt from 74c161 counter on the disk/display module to indicate adc conversion finished)
+irq6 KbdInt (interrupt triggered by the datareceived pin from the kbduart)
+irq7 VSync (interrupt from the VSYN VSync pin from the crt5027)
+*/
+
+/* writes during boot of io roms v2.0:
+0x88 to port 0x020 (PCR; BootSeqDone(1), processor not locked(0), battery charger off(0), rom not disabled(0) correction off&cr4 off(1), cr3 on(0), cr2 on(0), cr1 on (0);)
+0x02 to port 0x100 (IOR write: enable 5v only relay control)
+0x03 to port 0x100 (IOR write: in addition to above, enable 12v relay control)
<dram memory 0x00000-0x3ffff is zeroed here>
0x13 to port 0x000 PIC (?????)
0x08 to port 0x002 PIC (UART int enabled)
@@ -231,6 +403,7 @@ void notetaker_state::machine_reset()
{
m_BootSeqDone = 0;
m_DisableROM = 0;
+ m_kbduart->set_input_pin(AY31015_SWE, 0); // status word outputs are permanently enabled (pin 16 SFD(SWE) tied low, active)
}
/* Input ports */
@@ -239,28 +412,46 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( notetakr, notetaker_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I8086, XTAL_24MHz/3) /* iD8086-2 @ E4A; 24Mhz crystal divided down to 8Mhz by i8284 clock generator */
- MCFG_CPU_PROGRAM_MAP(notetaker_mem)
- MCFG_CPU_IO_MAP(notetaker_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
- MCFG_PIC8259_ADD("pic8259", INPUTLINE("maincpu", 0), VCC, NULL) // iP8259A-2 @ E6
+ /* IO CPU: 8086@8MHz */
+ MCFG_CPU_ADD("iocpu", I8086, XTAL_24MHz/3) /* iD8086-2 @ E4A; 24Mhz crystal divided down to 8Mhz by i8284 clock generator */
+ MCFG_CPU_PROGRAM_MAP(notetaker_iocpu_mem)
+ MCFG_CPU_IO_MAP(notetaker_iocpu_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("iopic8259", pic8259_device, inta_cb)
+ MCFG_PIC8259_ADD("iopic8259", INPUTLINE("iocpu", 0), VCC, NULL) // iP8259A-2 @ E6
- //Note there is a second i8086 cpu on the 'emulator board', which is probably loaded with code once smalltalk-78 loads
+ /* Emulator CPU: 8086@5MHz */
+ /*MCFG_CPU_ADD("emulatorcpu", I8086, XTAL_15MHz/3)
+ MCFG_CPU_PROGRAM_MAP(notetaker_emulatorcpu_mem)
+ MCFG_CPU_IO_MAP(notetaker_emulatorcpu_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("emulatorpic8259", pic8259_device, inta_cb)
+ MCFG_PIC8259_ADD("emulatorpic8259", INPUTLINE("emulatorcpu", 0), VCC, NULL) // iP8259A-2 @ E6
+ */
/* video hardware */
- /*MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60.975)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(250))
MCFG_SCREEN_UPDATE_DRIVER(notetaker_state, screen_update)
MCFG_SCREEN_SIZE(64*6, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0, 64*6-1, 0, 32*8-1)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+
+ MCFG_DEVICE_ADD( "crt5027", CRT5027, (XTAL_36MHz/4)/8) // the clock for the crt5027 is configurable rate; 36MHz xtal divided by 1*,2,4,6,8,10,12, or 14 (* because this is a 74s163 this setting probably means divide by 1) and secondarily divided by 8 (again by two to load the 16 bit output shifters after this)
+ // on reset, bitclk is 000 so divider is (36mhz/14)/8; during boot it is written with 101, changing the divider to (36mhz/4)/8
+ // for now, we just hack it to the latter setting from start
+ // TODO: actually do this correctly.
+ MCFG_TMS9927_CHAR_WIDTH(8) //(8 pixels per column/halfword, 16 pixels per fullword)
+ MCFG_VIDEO_SET_SCREEN("screen")
- MCFG_PALETTE_ADD_3BIT_RGB("palette")
+ MCFG_DEVICE_ADD( "kbduart", AY31015, 0 )
+ MCFG_AY31015_RX_CLOCK(XTAL_960kHz) // hard-wired to 960KHz xtal #f11 (60000 baud, 16 clocks per baud)
+ MCFG_AY31015_TX_CLOCK(XTAL_960kHz) // hard-wired to 960KHz xtal #f11 (60000 baud, 16 clocks per baud)
- MCFG_DEVICE_ADD("crt5027", CRT5027, XTAL_17_9712MHz/2)
- //MCFG_TMS9927_CHAR_WIDTH(6)
- //MCFG_TMS9927_VSYN_CALLBACK(DEVWRITELINE(TMS5501_TAG, tms5501_device, sens_w))
- MCFG_VIDEO_SET_SCREEN("screen")*/
+ MCFG_DEVICE_ADD( "eiauart", AY31015, 0 )
+ MCFG_AY31015_RX_CLOCK((96000/4)/5) // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
+ MCFG_AY31015_TX_CLOCK((96000/4)/5) // hard-wired through an mc14568b divider set to divide by 4, the result set to divide by 5; this resulting 4800hz signal being 300 baud (16 clocks per baud)
/* Devices */
MACHINE_CONFIG_END
@@ -271,8 +462,8 @@ DRIVER_INIT_MEMBER(notetaker_state,notetakr)
// interfacing with older xerox technologies which used A0 and D0 as the MSB bits
// or maybe because someone screwed up somewhere along the line. we may never know.
// see http://bitsavers.informatik.uni-stuttgart.de/pdf/xerox/notetaker/schematics/19790423_Notetaker_IO_Processor.pdf pages 12 and onward
- UINT16 *romsrc = (UINT16 *)(memregion("maincpuload")->base());
- UINT16 *romdst = (UINT16 *)(memregion("maincpu")->base());
+ UINT16 *romsrc = (UINT16 *)(memregion("iocpuload")->base());
+ UINT16 *romdst = (UINT16 *)(memregion("iocpu")->base());
UINT16 *temppointer;
UINT16 wordtemp;
UINT16 addrtemp;
@@ -290,22 +481,49 @@ DRIVER_INIT_MEMBER(notetaker_state,notetakr)
/* ROM definition */
ROM_START( notetakr )
- ROM_REGION( 0x1000, "maincpuload", ROMREGION_ERASEFF ) // load roms here before descrambling
+ ROM_REGION( 0x1000, "iocpuload", ROMREGION_ERASEFF ) // load roms here before descrambling
ROM_SYSTEM_BIOS( 0, "v2.00", "IO Monitor v2.00" ) // dumped from Notetaker
ROMX_LOAD( "biop__2.00_hi.b2716.h1", 0x0000, 0x0800, CRC(1119691d) SHA1(4c20b595b554e6f5489ab2c3fb364b4a052f05e3), ROM_SKIP(1) | ROM_BIOS(1))
ROMX_LOAD( "biop__2.00_lo.b2716.g1", 0x0001, 0x0800, CRC(b72aa4c7) SHA1(85dab2399f906c7695dc92e7c18f32e2303c5892), ROM_SKIP(1) | ROM_BIOS(1))
ROM_SYSTEM_BIOS( 1, "v1.50", "IO Monitor v1.50" ) // typed from the source listing at http://bitsavers.trailing-edge.com/pdf/xerox/notetaker/memos/19790620_Z-IOP_1.5_ls.pdf and scrambled
ROMX_LOAD( "z-iop_1.50_hi.h1", 0x0000, 0x0800, CRC(2994656e) SHA1(ca2bb38eb9075c5c2f3cc5439b209e7e216084da), ROM_SKIP(1) | ROM_BIOS(2))
ROMX_LOAD( "z-iop_1.50_lo.g1", 0x0001, 0x0800, CRC(2cb79a67) SHA1(692aafd2aeea27533f6288dbb1cb8678ea08fade), ROM_SKIP(1) | ROM_BIOS(2))
- ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF ) // area for descrambled roms
- ROM_REGION( 0x100000, "ram", ROMREGION_ERASEFF ) // ram cards
+ ROM_REGION( 0x100000, "iocpu", ROMREGION_ERASEFF ) // area for descrambled roms
+ ROM_REGION( 0x100000, "mainram", ROMREGION_ERASEFF ) // main ram, on 2 cards with parity/ecc/syndrome/timing/bus arbitration on another 2 cards
ROM_REGION( 0x1000, "proms", ROMREGION_ERASEFF )
ROM_LOAD( "disksep.prom.82s147.a4", 0x000, 0x200, NO_DUMP ) // disk data separator prom from the disk/display module board
- ROM_LOAD( "setmemrq.prom.82s126.d9", 0x200, 0x100, NO_DUMP ) // SETMEMRQ memory timing prom from the disk/display module board; The equations for this one are actually listed on the schematic, so it should be pretty easy to recreate.
+ ROM_LOAD( "memcasraswrite.prom.82s147.b1", 0x200, 0x200, NO_DUMP ) // memory cas/ras/write prom from the memory address logic board
+ ROM_LOAD( "setmemrq.prom.82s126.d9", 0x400, 0x100, NO_DUMP ) // SETMEMRQ memory timing prom from the disk/display module board; The equations for this one are actually listed on the schematic and the prom dump can be generated from these:
+ /*
+ SetMemRq:
+ Address:
+ 01234567
+ |||||||\- RCtr.3 (LSB)
+ ||||||\-- RCtr.2
+ |||||\--- RCtr.1
+ ||||\---- RCtr.0 (MSB)
+ |||\----- WCtr.3 (LSB)
+ ||\------ WCtr.2
+ |\------- WCtr.1
+ \-------- WCtr.0 (MSB)
+
+ Data:
+ 0123
+ |\\\- N/C (zero?)
+ \---- SetMemRq
+
+ Equation: SETMEMRQ == (
+ ((Rctr == 0) && ((Wctr == 0)||(Wctr == 4)||(Wctr == 8)))
+ ||((Rctr == 4) && ((Wctr == 4)||(Wctr == 8)||(Wctr == 12)))
+ ||((Rctr == 8) && ((Wctr == 8)||(Wctr == 12)||(Wctr == 0)))
+ ||((Rctr == 12) && ((Wctr == 12)||(Wctr == 0)||(Wctr == 4)))
+ )
+ (the setmemrq output might be inverted, as well)
+ */
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
COMP( 1978, notetakr, 0, 0, notetakr, notetakr, notetaker_state, notetakr, "Xerox", "Notetaker", MACHINE_IS_SKELETON)
-//COMP( 1978, notetakr, 0, 0, notetakr, notetakr, driver_device, notetakr, "Xerox", "Notetaker", MACHINE_IS_SKELETON)
+//COMP( 1978, notetakr, 0, 0, notetakr, notetakr, driver_device, notetakr, "Xerox", "Notetaker", MACHINE_IS_SKELETON) \ No newline at end of file
diff --git a/src/mame/drivers/opwolf.cpp b/src/mame/drivers/opwolf.cpp
index bfac0ecb625..55dbdec1fe2 100644
--- a/src/mame/drivers/opwolf.cpp
+++ b/src/mame/drivers/opwolf.cpp
@@ -23,7 +23,7 @@ The screen layout and registers and sprites appear to be identical.
Taito TC0030CMD chip labeled B20-18 (at least for the US boards)
Taito PC060HA looks like it might be a DIP28 Fujitsu MB884x chip
-There are 4 socketted PALs (DIP20 type PAL16L8ACN) labeled B20-09
+There are 4 socketed PALs (DIP20 type PAL16L8ACN) labeled B20-09
through B20-12 (not read)
OSC: Main board: 16MHz, 12MHz & 26.686MHz
diff --git a/src/mame/drivers/overdriv.cpp b/src/mame/drivers/overdriv.cpp
index 233da503224..5dd5191318b 100644
--- a/src/mame/drivers/overdriv.cpp
+++ b/src/mame/drivers/overdriv.cpp
@@ -72,12 +72,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(overdriv_state::overdriv_cpuA_scanline)
{
const int timer_threshold = 168; // fwiw matches 0 on mask ROM check, so IF it's a timer irq then should be close ...
int scanline = param;
-
+
m_fake_timer ++;
-
+
// TODO: irqs routines are TOO slow right now, it ends up firing spurious irqs for whatever reason (shared ram fighting?)
// this is a temporary solution to get rid of deprecat lib and the crashes, but also makes the game timer to be too slow.
- // Update: gameplay is actually too fast compared to timer, first attract mode shouldn't even surpass first blue car on right.
+ // Update: gameplay is actually too fast compared to timer, first attract mode shouldn't even surpass first blue car on right.
if(scanline == 256) // vblank-out irq
{
// m_screen->frame_number() & 1
@@ -245,7 +245,7 @@ WRITE8_MEMBER(overdriv_state::sound_ack_w)
static ADDRESS_MAP_START( overdriv_sound_map, AS_PROGRAM, 8, overdriv_state )
AM_RANGE(0x0000, 0x0000) AM_WRITE(sound_ack_w)
// 0x012 read during explosions
- // 0x180
+ // 0x180
AM_RANGE(0x0200, 0x0201) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
AM_RANGE(0x0400, 0x042f) AM_DEVREADWRITE("k053260_1", k053260_device, read, write)
AM_RANGE(0x0600, 0x062f) AM_DEVREADWRITE("k053260_2", k053260_device, read, write)
@@ -320,7 +320,7 @@ static MACHINE_CONFIG_START( overdriv, overdriv_state )
MCFG_CPU_ADD("sub", M68000, XTAL_24MHz/2) /* 12 MHz */
MCFG_CPU_PROGRAM_MAP(overdriv_slave_map)
- //MCFG_CPU_VBLANK_INT_DRIVER("screen", overdriv_state, cpuB_interrupt)
+ //MCFG_CPU_VBLANK_INT_DRIVER("screen", overdriv_state, cpuB_interrupt)
/* IRQ 5 and 6 are generated by the main CPU. */
/* IRQ 5 is used only in test mode, to request the checksums of the gfx ROMs. */
diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp
index 053604c4e22..f206e19fa90 100644
--- a/src/mame/drivers/pacman.cpp
+++ b/src/mame/drivers/pacman.cpp
@@ -7021,7 +7021,7 @@ GAME( 1986, bigbucks, 0, bigbucks, bigbucks, driver_device, 0, ROT
GAME( 1983, numcrash, 0, woodpek, numcrash, driver_device, 0, ROT90, "Hanshin Goraku", "Number Crash", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-GAME( 198?, cannonbp, 0, pacman, cannonbp, pacman_state, cannonbp, ROT90, "Novomatic", "Cannon Ball (Pac-Man Hardware)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
+GAME( 1985, cannonbp, 0, pacman, cannonbp, pacman_state, cannonbp, ROT90, "Novomatic", "Cannon Ball (Pac-Man Hardware)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
GAME( 1999, superabc, 0, superabc, superabc, pacman_state, superabc, ROT90, "hack (Two-Bit Score)", "Super ABC (Pac-Man multigame kit, Sep. 03 1999)", MACHINE_SUPPORTS_SAVE )
GAME( 1999, superabco,superabc, superabc, superabc, pacman_state, superabc, ROT90, "hack (Two-Bit Score)", "Super ABC (Pac-Man multigame kit, Mar. 08 1999)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pegasus.cpp b/src/mame/drivers/pegasus.cpp
index 858c4b8249f..bb7d157b3b7 100644
--- a/src/mame/drivers/pegasus.cpp
+++ b/src/mame/drivers/pegasus.cpp
@@ -433,8 +433,9 @@ int pegasus_state::load_cart(device_image_interface &image, generic_slot_device
if (size == 0)
{
- std::string errmsg;
- strprintf(errmsg,"Attempted to load a file that does not work in this socket.\nPlease check \"Usage\" field in the software list for the correct socket(s) to use.");
+ std::string errmsg = string_format(
+ "Attempted to load a file that does not work in this socket.\n"
+ "Please check \"Usage\" field in the software list for the correct socket(s) to use.");
image.seterror(IMAGE_ERROR_UNSPECIFIED, errmsg.c_str());
return IMAGE_INIT_FAIL;
}
diff --git a/src/mame/drivers/peplus.cpp b/src/mame/drivers/peplus.cpp
index 216996c1464..fa19b702e7b 100644
--- a/src/mame/drivers/peplus.cpp
+++ b/src/mame/drivers/peplus.cpp
@@ -1589,7 +1589,7 @@ PayTable Js+ 2PR 3K STR FL FH 4K SF RF (Bonus)
Programs Available: PK0756
*/
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "pk0756-pc041.u58", 0x00000, 0x8000, CRC(1b935199) SHA1(c98650ca002a23f06fedcdf524cabd160b95fff7) ) /* Game Version: PC041 */
+ ROM_LOAD( "pk0756-pc084.u58", 0x00000, 0x8000, CRC(23677ab0) SHA1(530848d9b370fe75632686536b841697560eb163) ) /* Game Version: PC084 */
ROM_RELOAD( 0x08000, 0x8000) /* 32K version build for the original PE boards (non-plus) */
ROM_REGION( 0x020000, "gfx1", 0 )
@@ -1611,7 +1611,7 @@ PayTable Js+ 2PR 3K STR FL FH 4K SF RF (Bonus)
Programs Available: PK0756
*/
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "pk0756-pc011.u58", 0x00000, 0x8000, CRC(41486bfc) SHA1(0f389a95fca20c274aff8aaeeeb531f1d4fdaa60) ) /* Game Version: PC011 */
+ ROM_LOAD( "pk0756-pc041.u58", 0x00000, 0x8000, CRC(1b935199) SHA1(c98650ca002a23f06fedcdf524cabd160b95fff7) ) /* Game Version: PC041 */
ROM_RELOAD( 0x08000, 0x8000) /* 32K version build for the original PE boards (non-plus) */
ROM_REGION( 0x020000, "gfx1", 0 )
@@ -1633,6 +1633,28 @@ PayTable Js+ 2PR 3K STR FL FH 4K SF RF (Bonus)
Programs Available: PK0756
*/
ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "pk0756-pc011.u58", 0x00000, 0x8000, CRC(41486bfc) SHA1(0f389a95fca20c274aff8aaeeeb531f1d4fdaa60) ) /* Game Version: PC011 */
+ ROM_RELOAD( 0x08000, 0x8000) /* 32K version build for the original PE boards (non-plus) */
+
+ ROM_REGION( 0x020000, "gfx1", 0 )
+ ROM_LOAD( "mr0-cg534.u52", 0x00000, 0x4000, CRC(57180734) SHA1(39ed464e6dbe6d17af1528aa5031349b6c4eb029) )
+ ROM_LOAD( "mg0-cg534.u53", 0x08000, 0x4000, CRC(4ef5ef35) SHA1(94b9f37c4a3a8dea1eaeeafa31e19819dcad7290) )
+ ROM_LOAD( "mb0-cg534.u54", 0x10000, 0x4000, CRC(dd0d224c) SHA1(39d1d62e12a7f8edc76cb498b006006b52ba007f) )
+ ROM_LOAD( "mx0-cg534.u55", 0x18000, 0x4000, CRC(079dfe4b) SHA1(a767eba04c11b67c61654b513cf077869a216295) )
+
+ ROM_REGION( 0x100, "proms", 0 )
+ ROM_LOAD( "cap435.u37", 0x0000, 0x0100, CRC(038cabc6) SHA1(c6514b4f9dbed6ab2631f563f7e00648661ebdbb) ) /* BPROM type DM74LS471 (compatible with N82S135N) verified */
+ROM_END
+
+ROM_START( pepk0756c ) /* Normal board (non-plus) : Jacks or Better (PK0756) */
+/*
+PayTable Js+ 2PR 3K STR FL FH 4K SF RF (Bonus)
+----------------------------------------------------------
+ BA 1 2 3 4 5 8 25 50 250 800
+ % Range: 93.8-95.8% Optimum: 97.8% Hit Frequency: 45.3%
+ Programs Available: PK0756
+*/
+ ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "pk0756-pc001.u58", 0x00000, 0x8000, CRC(a5abbb62) SHA1(3a51da13757f252d0acab810e0d61b0da207c39a) ) /* Game Version: PC001 */
ROM_RELOAD( 0x08000, 0x8000) /* 32K version build for the original PE boards (non-plus) */
@@ -4626,7 +4648,7 @@ PayTable 3K STR FL FH 4K SF 5K RF 4D RF (Bonus)
Programs Available: PP0290, X000224P & PP0224 - Non Double-up Only
*/
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "pp0290_a47-a76.u68", 0x00000, 0x10000, CRC(907f9e80) SHA1(295953427c621c961e2f7241b074ecf87669351e) ) /* Game Version: A47, Library Version: A76 */
+ ROM_LOAD( "pp0290_a47-a76.u68", 0x00000, 0x10000, CRC(907f9e80) SHA1(295953427c621c961e2f7241b074ecf87669351e) ) /* Game Version: A47, Library Version: A76 - 11/14/95 IGT L96-0108 */
ROM_REGION( 0x020000, "gfx1", 0 )
ROM_LOAD( "mro-cg2133.u72", 0x00000, 0x8000, CRC(b21a789f) SHA1(c49f9b5f51c29bbc0e1392e86d6602bd44e46380) ) /* 02/02/95 @ IGT L95-0276 */
@@ -5536,7 +5558,7 @@ PayTable Js+ 2PR 3K STR FL FH 4K 4K 4A SF RF (Bonus)
Programs Available: PP0515, X000515P & PP0539 - Non Double-up Only
*/
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "pp0515_a46-a75.u68", 0x00000, 0x10000, CRC(ad76895d) SHA1(cb82ad7b05e8962076ceed9e3aa6ead867e95539) ) /* Game Version: A46, Library Version: A75, Video Lib ver: A0Y */
+ ROM_LOAD( "pp0515_a46-a75.u68", 0x00000, 0x10000, CRC(ad76895d) SHA1(cb82ad7b05e8962076ceed9e3aa6ead867e95539) ) /* Game Version: A46, Library Version: A75, Video Lib ver: A0Y - 11/13/95 IGT L95-2474 */
ROM_REGION( 0x020000, "gfx1", 0 )
ROM_LOAD( "mro-cg2003.u72", 0x00000, 0x8000, CRC(0d425f48) SHA1(b60aaf3f4bd76f75f72f6e8dda724bdf795cb521) ) /* 08/30/94 @ IGT L95-0145 */
@@ -5624,7 +5646,7 @@ PayTable Js+ 2PR 3K STR FL FH 4K 4K 4A SF RF (Bonus)
Programs Available: PP0516, X000516P & PP0540 - Non Double-up Only
*/
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "pp0516_a46-a75.u68", 0x00000, 0x10000, CRC(6e226711) SHA1(71930ec43c4b75ca50971242be79459976882546) ) /* Game Version: A46, Library Version: A75, Video Lib ver: A0Y */
+ ROM_LOAD( "pp0516_a46-a75.u68", 0x00000, 0x10000, CRC(6e226711) SHA1(71930ec43c4b75ca50971242be79459976882546) ) /* Game Version: A46, Library Version: A75, Video Lib ver: A0Y - 11/13/95 IGT L95-2475 */
ROM_REGION( 0x020000, "gfx1", 0 )
ROM_LOAD( "mro-cg2003.u72", 0x00000, 0x8000, CRC(0d425f48) SHA1(b60aaf3f4bd76f75f72f6e8dda724bdf795cb521) ) /* 08/30/94 @ IGT L95-0145 */
@@ -8547,7 +8569,7 @@ PayTable Js+ 2PR 3K STR FL FH 4K 4K 4A SF RF (Bonus)
ROM_LOAD( "xp000038.u67", 0x00000, 0x10000, CRC(8707ab9e) SHA1(3e00a2ad8017e1495c6d6fe900d0efa68a1772b8) ) /* 09/05/95 @ IGT L95-2452 */
ROM_REGION( 0x10000, "user1", 0 )
- ROM_LOAD( "x000158p.u66", 0x00000, 0x10000, CRC(51a8a294) SHA1(f76992729ceaca18af82ab2fb3403dc5a48b7e8a) ) /* 4 of a Kind Bonus Poker */
+ ROM_LOAD( "x000158p.u66", 0x00000, 0x10000, CRC(51a8a294) SHA1(f76992729ceaca18af82ab2fb3403dc5a48b7e8a) ) /* 4 of a Kind Bonus Poker - 10/13/94 @ IGT L94-2067 */
ROM_REGION( 0x020000, "gfx1", 0 )
ROM_LOAD( "mro-cg2242.u77", 0x00000, 0x8000, CRC(963a7e7d) SHA1(ebb159f6c731a3f912382745ef9a9c6d4fa2fc99) ) /* 03/19/96 @ IGT L96-0703 */
@@ -10920,13 +10942,13 @@ Also compatible with:
*/
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "xp000050.u67", 0x00000, 0x10000, CRC(cf9e72d6) SHA1(fc5c679aae43df0bd563fbcc3e00a3274af1ed11) )
+ ROM_LOAD( "xp000050.u67", 0x00000, 0x10000, CRC(cf9e72d6) SHA1(fc5c679aae43df0bd563fbcc3e00a3274af1ed11) ) /* 11/06/96 @ IGT L96-2687 */
ROM_REGION( 0x10000, "user1", 0 )
- ROM_LOAD( "x002250p.u66", 0x00000, 0x10000, CRC(8d8810f9) SHA1(14262d83cf5f2511c3de7777336ac9df7270dab2) ) /* Shockwave Poker */
+ ROM_LOAD( "x002250p.u66", 0x00000, 0x10000, CRC(8d8810f9) SHA1(14262d83cf5f2511c3de7777336ac9df7270dab2) ) /* Shockwave Poker - 11/05/96 @ IGT L96-2688 */
ROM_REGION( 0x020000, "gfx1", 0 )
- ROM_LOAD( "mro-cg2309.u77", 0x00000, 0x8000, CRC(fdef322c) SHA1(8024cb6fcba18b56168e853173b9856c4d011831) )
+ ROM_LOAD( "mro-cg2309.u77", 0x00000, 0x8000, CRC(fdef322c) SHA1(8024cb6fcba18b56168e853173b9856c4d011831) ) /* 10/24/96 @ IGT L96-2693 */
ROM_LOAD( "mgo-cg2309.u78", 0x08000, 0x8000, CRC(f70b30c0) SHA1(e4acd0060b3d68b9f385cb60ed43a0988fca66a8) )
ROM_LOAD( "mbo-cg2309.u79", 0x10000, 0x8000, CRC(1843eec7) SHA1(0d0b80cd4d458081394c2943023b2440c2c2e42c) )
ROM_LOAD( "mxo-cg2309.u80", 0x18000, 0x8000, CRC(5c73d095) SHA1(078c6c815e8c48988f631d9d37018ea0b4bbfa19) )
@@ -10953,13 +10975,46 @@ Also compatible with:
*/
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "xp000050.u67", 0x00000, 0x10000, CRC(cf9e72d6) SHA1(fc5c679aae43df0bd563fbcc3e00a3274af1ed11) )
+ ROM_LOAD( "xp000050.u67", 0x00000, 0x10000, CRC(cf9e72d6) SHA1(fc5c679aae43df0bd563fbcc3e00a3274af1ed11) ) /* 11/06/96 @ IGT L96-2687 */
ROM_REGION( 0x10000, "user1", 0 )
- ROM_LOAD( "x002251p.u66", 0x00000, 0x10000, CRC(9069aa23) SHA1(299d5befce817e8334d4ac53470ff678775546ff) ) /* Shockwave Poker */
+ ROM_LOAD( "x002251p.u66", 0x00000, 0x10000, CRC(9069aa23) SHA1(299d5befce817e8334d4ac53470ff678775546ff) ) /* Shockwave Poker - 11/05/96 @ IGT L96-2689 */
ROM_REGION( 0x020000, "gfx1", 0 )
- ROM_LOAD( "mro-cg2309.u77", 0x00000, 0x8000, CRC(fdef322c) SHA1(8024cb6fcba18b56168e853173b9856c4d011831) )
+ ROM_LOAD( "mro-cg2309.u77", 0x00000, 0x8000, CRC(fdef322c) SHA1(8024cb6fcba18b56168e853173b9856c4d011831) ) /* 10/24/96 @ IGT L96-2693 */
+ ROM_LOAD( "mgo-cg2309.u78", 0x08000, 0x8000, CRC(f70b30c0) SHA1(e4acd0060b3d68b9f385cb60ed43a0988fca66a8) )
+ ROM_LOAD( "mbo-cg2309.u79", 0x10000, 0x8000, CRC(1843eec7) SHA1(0d0b80cd4d458081394c2943023b2440c2c2e42c) )
+ ROM_LOAD( "mxo-cg2309.u80", 0x18000, 0x8000, CRC(5c73d095) SHA1(078c6c815e8c48988f631d9d37018ea0b4bbfa19) )
+
+ ROM_REGION( 0x200, "proms", 0 )
+ ROM_LOAD( "capx2309.u43", 0x0000, 0x0200, CRC(5da912cc) SHA1(6294f8be682e70e9052c9ae5f6865467e9dba2e3) )
+ROM_END
+
+ROM_START( pex2252p ) /* Superboard : Shockwave Poker (X002252P+XP000050) - PSR Verified */
+/*
+PayTable Js+ 2PR 3K STR FL FH 4K* SF RF (Bonus)
+---------------------------------------------------------
+ P720A 1 1 3 5 8 10 25 100 250 800
+ % Range: 93.3-95.3% Optimum: 97.3% Hit Frequency: 42.6%
+ Programs Available: X002252P
+
+4K* - Getting a 4K hand sets the game in "Shockwave" mode for the next 10 dealt hands.
+ While in shockwave mode, 4K pays the same as RF
+
+Also compatible with:
+ XP000111 + CG2427 + CAPX2309
+ XP000117 + CG2309 + CAPX2309
+ XP000122 + CG2309 + CAPX2309
+
+*/
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "xp000050.u67", 0x00000, 0x10000, CRC(cf9e72d6) SHA1(fc5c679aae43df0bd563fbcc3e00a3274af1ed11) ) /* 11/06/96 @ IGT L96-2687 */
+
+ ROM_REGION( 0x10000, "user1", 0 )
+ ROM_LOAD( "x002252p.u66", 0x00000, 0x10000, CRC(a343904e) SHA1(23631e55c2d1d559c1dbd90aaf763e19e65b80b4) ) /* Shockwave Poker - 11/05/96 @ IGT L96-2690 */
+
+ ROM_REGION( 0x020000, "gfx1", 0 )
+ ROM_LOAD( "mro-cg2309.u77", 0x00000, 0x8000, CRC(fdef322c) SHA1(8024cb6fcba18b56168e853173b9856c4d011831) ) /* 10/24/96 @ IGT L96-2693 */
ROM_LOAD( "mgo-cg2309.u78", 0x08000, 0x8000, CRC(f70b30c0) SHA1(e4acd0060b3d68b9f385cb60ed43a0988fca66a8) )
ROM_LOAD( "mbo-cg2309.u79", 0x10000, 0x8000, CRC(1843eec7) SHA1(0d0b80cd4d458081394c2943023b2440c2c2e42c) )
ROM_LOAD( "mxo-cg2309.u80", 0x18000, 0x8000, CRC(5c73d095) SHA1(078c6c815e8c48988f631d9d37018ea0b4bbfa19) )
@@ -11426,6 +11481,33 @@ PayTable Js+ 2PR 3K STR FL FH 4K 4K 4A A,2-4 2-4 SF RF (Bonus)
ROM_LOAD( "capx1321.u43", 0x0000, 0x0200, CRC(4b57569f) SHA1(fa29c0f627e7ce79951ec6dadec114864144f37d) )
ROM_END
+ROM_START( pex2309p ) /* Superboard : Triple Double Bonus Poker (X002309P+XP000038) - PSR Verified */
+/*
+ 2-4
+ 4K 4A
+ 5-K 2-4 with with
+PayTable Js+ 2PR 3K STR FL FH 4K 4K 4A A,2-4 2-4 SF RF (Bonus)
+-----------------------------------------------------------------------------
+ P910BM 1 1 2 4 5 8 50 80 160 400 400 50 400 800
+ % Range: 92.0-94.0% Optimum: 96.0% Hit Frequency: 44.6%
+ Programs Available: X002309P
+*/
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "xp000038.u67", 0x00000, 0x10000, CRC(8707ab9e) SHA1(3e00a2ad8017e1495c6d6fe900d0efa68a1772b8) ) /* 09/05/95 @ IGT L95-2452 */
+
+ ROM_REGION( 0x10000, "user1", 0 )
+ ROM_LOAD( "x002309p.u66", 0x00000, 0x10000, CRC(8fe4b47b) SHA1(a8175fd4236f4769795c992fd2584a74d85236b3) ) /* Triple Double Bonus Poker - 03/05/97 @ IGT L97-0615 */
+
+ ROM_REGION( 0x020000, "gfx1", 0 )
+ ROM_LOAD( "mro-cg2242.u77", 0x00000, 0x8000, CRC(963a7e7d) SHA1(ebb159f6c731a3f912382745ef9a9c6d4fa2fc99) ) /* 03/19/96 @ IGT L96-0703 */
+ ROM_LOAD( "mgo-cg2242.u78", 0x08000, 0x8000, CRC(53eed56f) SHA1(e79f31c5c817b8b96b4970c1a702d1892961d441) )
+ ROM_LOAD( "mbo-cg2242.u79", 0x10000, 0x8000, CRC(af092f50) SHA1(53a3536593bb14c4072e8a5ee9e05af332feceb1) )
+ ROM_LOAD( "mxo-cg2242.u80", 0x18000, 0x8000, CRC(ecacb6b2) SHA1(32660adcc266fbbb3702a0cd30e25d11b953d23d) )
+
+ ROM_REGION( 0x200, "proms", 0 )
+ ROM_LOAD( "capx1321.u43", 0x0000, 0x0200, CRC(4b57569f) SHA1(fa29c0f627e7ce79951ec6dadec114864144f37d) )
+ROM_END
+
ROM_START( pex2310p ) /* Superboard : Triple Double Bonus Poker (X002310P+XP000038) - PSR Verified */
/*
2-4
@@ -12967,9 +13049,10 @@ GAMEL(1987, peivc006, 0, peplus, peplus_schip, peplus_state, peplus,
GAMEL(1987, pepk0719, 0, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0719-PC092) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
GAMEL(1987, pepk0719a, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0719-PC041) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
GAMEL(1987, pepk0719b, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0719-PC011) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
-GAMEL(1987, pepk0756, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0756-PC041) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
-GAMEL(1987, pepk0756a, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0756-PC011) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
-GAMEL(1987, pepk0756b, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0756-PC001) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
+GAMEL(1987, pepk0756, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0756-PC084) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
+GAMEL(1987, pepk0756a, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0756-PC041) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
+GAMEL(1987, pepk0756b, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0756-PC011) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
+GAMEL(1987, pepk0756c, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0756-PC001) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
GAMEL(1987, pepk0757, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0757-PC074) Two Pair or Better", MACHINE_NOT_WORKING, layout_pe_poker )
GAMEL(1987, pepk0758, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0758-PC041) Jacks or Better", MACHINE_NOT_WORKING, layout_pe_poker )
GAMEL(1987, pepk0769, pepk0719, peplus, nonplus_poker, peplus_state, nonplus, ROT0, "IGT - International Game Technology", "Player's Edge (PK0769-PC092) Standard Draw Poker", MACHINE_NOT_WORKING, layout_pe_poker )
@@ -13393,6 +13476,7 @@ GAMEL(1995, pex2245pa, pex2245p, peplus, peplus_poker, peplus_state, peplussb,
GAMEL(1995, pex2247p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002247P+XP000038) 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, pex2252p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002252P+XP000050) Shockwave Poker", 0, layout_pe_poker )
GAMEL(1995, pex2270p, 0, peplus, peplus_poker, peplus_state, pepluss64,ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002270P+XP000053) Jackpot 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 )
@@ -13408,6 +13492,7 @@ GAMEL(1995, pex2303p, 0, peplus, peplus_poker, peplus_state, peplussb,
GAMEL(1995, pex2306p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002306P+XP000038) 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+XP000038) Triple Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2308p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002308P+XP000038) Triple Double Bonus Poker", 0, layout_pe_poker )
+GAMEL(1995, pex2309p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002309P+XP000038) Triple Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2310p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002310P+XP000038) Triple Double Bonus Poker", 0, layout_pe_poker )
GAMEL(1995, pex2312p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002312P+XP000038) Triple Bonus Poker Plus", 0, layout_pe_poker )
GAMEL(1995, pex2314p, 0, peplus, peplus_poker, peplus_state, peplussb, ROT0, "IGT - International Game Technology", "Player's Edge Plus (X002314P+XP000038) Triple Bonus Poker Plus", 0, layout_pe_poker )
diff --git a/src/mame/drivers/phoenix.cpp b/src/mame/drivers/phoenix.cpp
index f552d9b90b5..6ad0b73c433 100644
--- a/src/mame/drivers/phoenix.cpp
+++ b/src/mame/drivers/phoenix.cpp
@@ -1266,6 +1266,30 @@ ROM_START( pleiadsi )
ROM_LOAD( "7611-5.33", 0x0100, 0x0100, CRC(e38eeb83) SHA1(252880d80425b2e697146e76efdc6cb9f3ba0378) ) /* palette high bits */
ROM_END
+ROM_START( pleiadsn )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1.bin", 0x0000, 0x0800, CRC(c013515f) SHA1(c44db1c615c11ace997c0065762020827bf9ef7e) )
+ ROM_LOAD( "2.bin", 0x0800, 0x0800, CRC(b254217c) SHA1(312a33cca09d5d2d18992f28eb051230a90db6e3) )
+ ROM_LOAD( "3.bin", 0x1000, 0x0800, CRC(3b29aec5) SHA1(b90b55fdc799db672558e2f7c6b05a958bf33a2c) )
+ ROM_LOAD( "4.bin", 0x1800, 0x0800, CRC(1fbde4d7) SHA1(b358649288108159a426dba3940c627c2d2aeb01) )
+ ROM_LOAD( "5.bin", 0x2000, 0x0800, BAD_DUMP CRC(9dc73e63) SHA1(8a2de6666fecead7071285125b16641b50249adc) ) // the best of 50 different dumps. the device is clearly damaged.
+ ROM_LOAD( "6.bin", 0x2800, 0x0800, CRC(f1a8a00d) SHA1(5c183e3a73fa882ffec3cb9219fb5619e625591a) )
+ ROM_LOAD( "7.bin", 0x3000, 0x0800, CRC(b5f07fbc) SHA1(2ae687c84732942e69ad4dfb7a4ac1b97b77487a) )
+ ROM_LOAD( "8.bin", 0x3800, 0x0800, CRC(b3db08c2) SHA1(d5b1b77dcf2d76498f30d5f880635f5acfac7dfd) )
+
+ ROM_REGION( 0x1000, "bgtiles", 0 ) // these are straight (colors match the real machine)
+ ROM_LOAD( "11.bin", 0x0000, 0x0800, CRC(4e30f9e7) SHA1(da023a94725dc40107cd97e4decfd4dc0f9f00ee) )
+ ROM_LOAD( "12.bin", 0x0800, 0x0800, CRC(72d511fc) SHA1(a12485698ad35ba3a8c72bb9401c0cf522ffc73c) )
+
+ ROM_REGION( 0x1000, "fgtiles", 0 )
+ ROM_LOAD( "9.bin", 0x0000, 0x0800, CRC(85866607) SHA1(cd240bd056f761b2f9e2142049434f02cae3e315) )
+ ROM_LOAD( "10.bin", 0x0800, 0x0800, CRC(a841d511) SHA1(8349008ab1d8ef08775b54170c37deb1d391fffc) )
+
+ ROM_REGION( 0x0200, "proms", 0 ) // proms borrowed from phoenix, reverse order.
+ ROM_LOAD( "hm3-7611.bin", 0x0000, 0x0100, BAD_DUMP CRC(e38eeb83) SHA1(252880d80425b2e697146e76efdc6cb9f3ba0378) ) /* palette low bits */
+ ROM_LOAD( "mb7052.ic41", 0x0100, 0x0100, BAD_DUMP CRC(7a1bcb1e) SHA1(bdfab316ea26e2063879e7aa78b6ae2b55eb95c8) ) /* palette high bits */
+ROM_END
+
ROM_START( pleiadss )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "pl45.bin", 0x0000, 0x0800, CRC(e2528599) SHA1(4647c62a2c6047238ad2855cf71b9e079ac4b4c7) )
@@ -1396,6 +1420,7 @@ GAME( 1981, pleiadsb2,pleiads, pleiads, pleiads, driver_device, 0, ROT
GAME( 1981, pleiadbl, pleiads, pleiads, pleiadbl, driver_device, 0, ROT90, "bootleg", "Pleiads (bootleg set 1)", MACHINE_IMPERFECT_COLORS )
GAME( 1981, pleiadce, pleiads, pleiads, pleiadce, driver_device, 0, ROT90, "Tehkan (Centuri license)", "Pleiads (Centuri)", MACHINE_IMPERFECT_COLORS )
GAME( 1981, pleiadsi, pleiads, pleiads, pleiadce, driver_device, 0, ROT90, "bootleg? (Irecsa)", "Pleiads (Irecsa)", MACHINE_IMPERFECT_COLORS ) // possibly licensed, but some of the roms match the bootlegs
+GAME( 1981, pleiadsn, pleiads, phoenix, pleiadce, driver_device, 0, ROT90, "Niemer S.A.", "Pleiads (Niemer S.A.)", MACHINE_IMPERFECT_COLORS ) // possibly licensed, but some of the roms match the bootlegs
GAME( 1981, pleiadss, pleiads, phoenix, pleiadce, driver_device, 0, ROT90, "bootleg", "Pleiads (Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // colours match PCB (but are ugly)
GAME( 1981, capitol, pleiads, phoenix, capitol, driver_device, 0, ROT90, "bootleg? (Universal Video Spiel)", "Capitol", MACHINE_IMPERFECT_COLORS )
diff --git a/src/mame/drivers/ps2.cpp b/src/mame/drivers/ps2.cpp
new file mode 100644
index 00000000000..9f37fba46da
--- /dev/null
+++ b/src/mame/drivers/ps2.cpp
@@ -0,0 +1,255 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol, Miodrag Milanovic, Carl
+
+#include "emu.h"
+#include "cpu/i86/i286.h"
+#include "cpu/i386/i386.h"
+#include "machine/at.h"
+#include "machine/ram.h"
+#include "bus/isa/isa_cards.h"
+#include "bus/pc_kbd/keyboards.h"
+
+class ps2_state : public driver_device
+{
+public:
+ ps2_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_mb(*this, "mb"),
+ m_ram(*this, RAM_TAG)
+ { }
+ required_device<cpu_device> m_maincpu;
+ required_device<at_mb_device> m_mb;
+ required_device<ram_device> m_ram;
+
+protected:
+ void machine_start() override;
+};
+
+static ADDRESS_MAP_START( ps2_16_map, AS_PROGRAM, 16, ps2_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x000000, 0x09ffff) AM_RAMBANK("bank10")
+ AM_RANGE(0x0e0000, 0x0fffff) AM_ROM AM_REGION("bios", 0)
+ AM_RANGE(0xfe0000, 0xffffff) AM_ROM AM_REGION("bios", 0)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ps2_32_map, AS_PROGRAM, 32, ps2_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x00000000, 0x0009ffff) AM_RAMBANK("bank10")
+ AM_RANGE(0x000e0000, 0x000fffff) AM_ROM AM_REGION("bios", 0)
+ AM_RANGE(0xfffe0000, 0xffffffff) AM_ROM AM_REGION("bios", 0)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(ps2_16_io, AS_IO, 16, ps2_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", at_mb_device, map)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( ps2_32_io, AS_IO, 32, ps2_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0x00ff) AM_DEVICE16("mb", at_mb_device, map, 0xffffffff)
+ADDRESS_MAP_END
+
+void ps2_state::machine_start()
+{
+ address_space& space = m_maincpu->space(AS_PROGRAM);
+
+ /* MESS managed RAM */
+ membank("bank10")->set_base(m_ram->pointer());
+
+ if (m_ram->size() > 0xa0000)
+ {
+ offs_t ram_limit = 0x100000 + m_ram->size() - 0xa0000;
+ space.install_read_bank(0x100000, ram_limit - 1, "bank1");
+ space.install_write_bank(0x100000, ram_limit - 1, "bank1");
+ membank("bank1")->set_base(m_ram->pointer() + 0xa0000);
+ }
+}
+
+static MACHINE_CONFIG_START( ps2m30286, ps2_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", I80286, 10000000)
+ MCFG_CPU_PROGRAM_MAP(ps2_16_map)
+ MCFG_CPU_IO_MAP(ps2_16_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
+ MCFG_80286_SHUTDOWN(DEVWRITELINE("mb", at_mb_device, shutdown))
+
+ MCFG_DEVICE_ADD("mb", AT_MB, 0)
+ MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ MCFG_FRAGMENT_ADD( at_softlists )
+
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "vga", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa2", pc_isa16_cards, "fdc", false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa3", pc_isa16_cards, "ide", false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa4", pc_isa16_cards, "comat", false)
+ MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)
+
+ /* internal ram */
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("1664K")
+ MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M")
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( ps2386, ps2_state )
+ MCFG_CPU_ADD("maincpu", I386, 12000000)
+ MCFG_CPU_PROGRAM_MAP(ps2_32_map)
+ MCFG_CPU_IO_MAP(ps2_32_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("mb:pic8259_master", pic8259_device, inta_cb)
+
+ MCFG_DEVICE_ADD("mb", AT_MB, 0)
+ MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ MCFG_FRAGMENT_ADD( at_softlists )
+
+ // on board devices
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board1", pc_isa16_cards, "fdcsmc", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board2", pc_isa16_cards, "comat", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board3", pc_isa16_cards, "ide", true)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","board4", pc_isa16_cards, "lpt", true)
+ // ISA cards
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa1", pc_isa16_cards, "svga_et4k", false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa2", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa3", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa4", pc_isa16_cards, nullptr, false)
+ MCFG_ISA16_SLOT_ADD("mb:isabus","isa5", pc_isa16_cards, nullptr, false)
+ MCFG_PC_KBDC_SLOT_ADD("mb:pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
+
+ /* internal ram */
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("1664K")
+ MCFG_RAM_EXTRA_OPTIONS("2M,4M,8M,15M,16M,32M,64M,128M,256M")
+MACHINE_CONFIG_END
+
+ROM_START( i8530286 )
+ ROM_REGION(0x20000,"bios", 0)
+ // saved from running machine
+ ROM_LOAD16_BYTE("ps2m30.0", 0x00000, 0x10000, CRC(9965a634) SHA1(c237b1760f8a4561ec47dc70fe2e9df664e56596))
+ ROM_LOAD16_BYTE("ps2m30.1", 0x00001, 0x10000, CRC(1448d3cb) SHA1(13fa26d895ce084278cd5ab1208fc16c80115ebe))
+ROM_END
+
+/*
+
+8530-H31 (Model 30/286)
+======================
+ P/N Date
+33F5381A EC C01446 1990
+
+*/
+ROM_START( i8530h31 )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD( "33f5381a.bin", 0x00000, 0x20000, CRC(ff57057d) SHA1(d7f1777077a8df43c3c14d175b9709bd3969c4b1))
+ROM_END
+
+/*
+8535-043 (Model 35)
+===================
+ P/N Checksum Date
+04G2021 C26C 1991 ODD
+04G2022 9B94 1991 EVEN
+*/
+ROM_START( i8535043 )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "04g2021.bin", 0x00001, 0x10000, CRC(4069b2eb) SHA1(9855c84c81d1f07e1da66b1ca45c1c10c0717a90))
+ ROM_LOAD16_BYTE( "04g2022.bin", 0x00000, 0x10000, CRC(35c1af65) SHA1(7d2445cc463969c808fdd78e0a27a03db5dfc698))
+ROM_END
+
+/*
+8550-021 (Model 50)
+===================
+ Code Date Internal
+90X7420 4/12/87 --> 90X6815
+90X7423 8/12/87 --> 90X6816
+90X7426 8/12/87 --> 90X6817
+90X7429 18/12/87 --> 90X6818
+
+Same ROMs used by : (According to http://www.ibmmuseum.com/ohlandl/8565/8560.html)
+
+IBM Personal System/2 Model 60 (8560-041 and 8560-071)
+IBM Personal System/2 Model 65 SX (8565-061 and 8565-121)
+
+*/
+ROM_START( i8550021 )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "90x7423.zm14", 0x00000, 0x8000, CRC(2c1633e0) SHA1(1af7faa526585a7cfb69e71d90a75e1f1c541586))
+ ROM_LOAD16_BYTE( "90x7426.zm16", 0x00001, 0x8000, CRC(e7c762ce) SHA1(228f67dc915d84519da7fc1a59b7f9254278f3a0))
+ ROM_LOAD16_BYTE( "90x7420.zm13", 0x10000, 0x8000, CRC(19a57cc1) SHA1(5b31ba66cd3690e651a450619a32b7210769945d))
+ ROM_LOAD16_BYTE( "90x7429.zm18", 0x10001, 0x8000, CRC(6f0120f6) SHA1(e112c291ac3d9f6507c93ac49ad26f9fd2245fd2))
+
+ ROM_REGION( 0x800, "keyboard", 0 )
+ ROM_LOAD( "72x8455.zm82", 0x000, 0x800, CRC(7da223d3) SHA1(54c52ff6c6a2310f79b2c7e6d1259be9de868f0e) )
+ROM_END
+
+/*
+8550-061 (Model 50Z)
+===================
+ P/N Date
+AMI 8935MKN 15F8365 S63512 1988
+AMI 8948MML 15F8366 S63512 1988
+
+http://ps-2.kev009.com:8081/ohlandl/8550/8550z_Planar.html
+
+
+*/
+ROM_START( i8550061 )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "15f8365.zm5", 0x00001, 0x10000, CRC(35aa3ecf) SHA1(a122531092a9cb08600b276da9c9c3ce385aab7b))
+ ROM_LOAD16_BYTE( "15f8366.zm6", 0x00000, 0x10000, CRC(11bf564d) SHA1(0dda6a7ca9294cfaab5bdf4c05973be13b2766fc))
+ROM_END
+
+/*
+8555-X61 (Model 55SX)
+===================
+ Code Date Internal
+ODD 33F8145 13/03/90 --> 33F8153
+EVEN 33F8146 31/01/90 --> 33F8152
+
+8555-081 (Model 55SX)
+===================
+ Code Date Internal
+ODD AMI 9205MEN 92F0627 EC32680 88 --> 33F8153
+EVEN AMI 9203MGS 92F0626 EC32680 88 --> 33F8152
+
+*/
+ROM_START( i8555081 )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE("33f8145.zm40", 0x00001, 0x10000, CRC(0895894c) SHA1(7cee77828867ad1bdbe0ac223bc25d23c65b28a0))
+ ROM_LOAD16_BYTE("33f8146.zm41", 0x00000, 0x10000, CRC(c6020680) SHA1(b25a64e4b2dca07c567648401100e04e89bbcddb))
+ROM_END
+
+/*
+8580-071 (Model 80)
+===================
+ Code Date Internal
+AMI 8924MBW 90X8548 1987 --> 72X7551
+AMI 8924MBL 90X8549 1987 --> 72X7554
+AMI 8924MBG 90X8550 1987 --> 72X7557
+AMI 8921MBK 90X8551 1987 --> 72X7560
+*/
+ROM_START( i8580071 )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD32_BYTE( "90x8548.bin", 0x00000, 0x8000, CRC(1f13eea5) SHA1(0bf53ad86f47db3825a713ea2e4ef23715cc4f79))
+ ROM_LOAD32_BYTE( "90x8549.bin", 0x00001, 0x8000, CRC(9e0f4a99) SHA1(b8600f04159ed281a57416274390ba9302be541b))
+ ROM_LOAD32_BYTE( "90x8550.bin", 0x00002, 0x8000, CRC(cb21df96) SHA1(0c2765f6becfa3f9171c4f13f7b74d19c4c9acc2))
+ ROM_LOAD32_BYTE( "90x8551.bin", 0x00003, 0x8000, CRC(3d7e9868) SHA1(2928fe0e48a573cc2c0c41bd7f7188a54a908229))
+ROM_END
+
+/*
+8580-111 (Model 80)
+===================
+ Code Date Internal
+AMI 8934MDL 15F6637 1987 --> 15F6597
+AMI 8944MDI 15F6639 1987 --> 15F6600
+*/
+ROM_START( i8580111 )
+ ROM_REGION(0x20000,"bios", 0)
+ ROM_LOAD16_BYTE( "15f6637.bin", 0x00000, 0x10000, CRC(76c36d1a) SHA1(c68d52a2e5fbd303225ebb006f91869b29ef700a))
+ ROM_LOAD16_BYTE( "15f6639.bin", 0x00001, 0x10000, CRC(82cf0f7d) SHA1(13bb39225757b89749af70e881af0228673dbe0c))
+ROM_END
+
+COMP ( 1990, i8530h31, ibm5170, 0, ps2m30286, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8530-H31 (Model 30/286)", MACHINE_NOT_WORKING )
+COMP ( 1988, i8530286, ibm5170, 0, ps2m30286, 0, driver_device, 0, "International Business Machines", "IBM PS/2 Model 30-286", MACHINE_NOT_WORKING )
+COMP ( 198?, i8535043, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8535-043 (Model 35)", MACHINE_NOT_WORKING )
+COMP ( 198?, i8550021, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8550-021 (Model 50)", MACHINE_NOT_WORKING )
+COMP ( 198?, i8550061, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8550-061 (Model 50Z)", MACHINE_NOT_WORKING )
+COMP ( 1989, i8555081, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8550-081 (Model 55SX)", MACHINE_NOT_WORKING )
+COMP ( 198?, i8580071, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8580-071 (Model 80)", MACHINE_NOT_WORKING )
+COMP ( 198?, i8580111, ibm5170, 0, ps2386, 0, driver_device, 0, "International Business Machines", "IBM PS/2 8580-111 (Model 80)", MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/psikyosh.cpp b/src/mame/drivers/psikyosh.cpp
index 94893d71975..a0c29f3bec8 100644
--- a/src/mame/drivers/psikyosh.cpp
+++ b/src/mame/drivers/psikyosh.cpp
@@ -494,7 +494,7 @@ static ADDRESS_MAP_START( ps3v1_map, AS_PROGRAM, 32, psikyosh_state )
AM_RANGE(0x03004000, 0x0300ffff) AM_RAM AM_SHARE("bgram") // video banks 7-0x1f (backgrounds and other effects)
AM_RANGE(0x03040000, 0x03044fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // palette..
AM_RANGE(0x03050000, 0x030501ff) AM_RAM AM_SHARE("zoomram") // sprite zoom lookup table
- AM_RANGE(0x0305ffdc, 0x0305ffdf) AM_READNOP AM_WRITE(psikyosh_irqctrl_w) // also writes to this address - might be vblank reads?
+ AM_RANGE(0x0305ffdc, 0x0305ffdf) AM_READ(watchdog_reset32_r) AM_WRITE(psikyosh_irqctrl_w) // also writes to this address - might be vblank reads?
AM_RANGE(0x0305ffe0, 0x0305ffff) AM_RAM_WRITE(psikyosh_vidregs_w) AM_SHARE("vidregs") // video registers
AM_RANGE(0x03060000, 0x0307ffff) AM_ROMBANK("gfxbank") // data for rom tests (gfx), data is controlled by vidreg
// rom mapping
diff --git a/src/mame/drivers/psychic5.cpp b/src/mame/drivers/psychic5.cpp
index abc4229a283..3f079ba10b9 100644
--- a/src/mame/drivers/psychic5.cpp
+++ b/src/mame/drivers/psychic5.cpp
@@ -939,9 +939,9 @@ Notes:
ROM_START( bombsa )
ROM_REGION( 0x30000, "maincpu", ROMREGION_ERASEFF ) /* Main CPU */
ROM_LOAD( "4.7a", 0x00000, 0x08000, CRC(0191f6a7) SHA1(10a0434abbf4be068751e65c81b1a211729e3742) )
- /* these fail their self-test... should be checked on real hw (hold start1+start2 on boot) */
- ROM_LOAD( "5.7c", 0x10000, 0x08000, BAD_DUMP CRC(095c451a) SHA1(892ca84376f89640ad4d28f1e548c26bc8f72c0e) ) // contains palettes etc. but fails rom check??
- ROM_LOAD( "6.7d", 0x20000, 0x10000, BAD_DUMP CRC(89f9dc0f) SHA1(5cf6a7aade3d56bc229d3771bc4141ad0c0e8da2) )
+ /* these two fail their self-test, happens on real HW as well. */
+ ROM_LOAD( "5.7c", 0x10000, 0x08000, CRC(095c451a) SHA1(892ca84376f89640ad4d28f1e548c26bc8f72c0e) )
+ ROM_LOAD( "6.7d", 0x20000, 0x10000, CRC(89f9dc0f) SHA1(5cf6a7aade3d56bc229d3771bc4141ad0c0e8da2) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
ROM_LOAD( "1.3a", 0x00000, 0x08000, CRC(92801404) SHA1(c4ff47989d355b18a909eaa88f138e2f68178ecc) )
@@ -951,9 +951,9 @@ ROM_START( bombsa )
ROM_LOAD( "3.4s", 0x10000, 0x10000, CRC(9a8a8a97) SHA1(13328631202c196c9d8791cc6063048eb6be0472) )
ROM_REGION( 0x20000, "gfx2", 0 ) /* background tiles */
- /* some corrupt 'blank' characters, should also be checked with a redump */
- ROM_LOAD( "8.2l", 0x00000, 0x10000, BAD_DUMP CRC(3391c769) SHA1(7ae7575ac81d6e0d915c279c1f57a9bc6d096bd6) )
- ROM_LOAD( "9.2m", 0x10000, 0x10000, BAD_DUMP CRC(5b315976) SHA1(d17cc1926f926bdd88b66ea6af88dac30880e7d4) )
+ /* some corrupt 'blank' characters in these */
+ ROM_LOAD( "8.2l", 0x00000, 0x10000, CRC(3391c769) SHA1(7ae7575ac81d6e0d915c279c1f57a9bc6d096bd6) )
+ ROM_LOAD( "9.2m", 0x10000, 0x10000, CRC(5b315976) SHA1(d17cc1926f926bdd88b66ea6af88dac30880e7d4) )
ROM_REGION( 0x08000, "gfx3", 0 ) /* foreground tiles */
ROM_LOAD( "7.4f", 0x00000, 0x08000, CRC(400114b9) SHA1(db2f3ba05a2005ae0e0e7d19c8739353032cbeab) )
diff --git a/src/mame/drivers/rex6000.cpp b/src/mame/drivers/rex6000.cpp
index 711571ea3c8..a643564bcd8 100644
--- a/src/mame/drivers/rex6000.cpp
+++ b/src/mame/drivers/rex6000.cpp
@@ -27,7 +27,9 @@
#include "emu.h"
+#include "bus/rs232/rs232.h"
#include "cpu/z80/z80.h"
+#include "machine/ins8250.h"
#include "machine/rp5c01.h"
#include "machine/bankdev.h"
#include "machine/ram.h"
@@ -57,19 +59,27 @@ public:
m_maincpu(*this, "maincpu"),
m_ram(*this, RAM_TAG),
m_beep(*this, "beeper"),
+ m_uart(*this, "ns16550"),
m_bankdev0(*this, "bank0"),
m_bankdev1(*this, "bank1"),
m_flash0b(*this, "flash0b"),
- m_nvram(*this, "nvram")
+ m_nvram(*this, "nvram"),
+ m_battery(*this, "BATTERY"),
+ m_pen_x(*this, "PENX"),
+ m_pen_y(*this, "PENY")
{ }
required_device<cpu_device> m_maincpu;
required_device<ram_device> m_ram;
required_device<beep_device> m_beep;
+ required_device<ns16550_device> m_uart;
required_device<address_map_bank_device> m_bankdev0;
required_device<address_map_bank_device> m_bankdev1;
optional_device<intelfsh8_device> m_flash0b;
required_shared_ptr<UINT8> m_nvram;
+ required_ioport m_battery;
+ optional_ioport m_pen_x;
+ optional_ioport m_pen_y;
UINT8 m_bank[4];
UINT8 m_beep_io[5];
@@ -82,6 +92,7 @@ public:
UINT8 m_irq_flag;
UINT8 m_port6;
UINT8 m_beep_mode;
+ UINT8 m_power_on;
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -100,6 +111,7 @@ public:
DECLARE_READ8_MEMBER( touchscreen_r );
DECLARE_WRITE8_MEMBER( touchscreen_w );
DECLARE_WRITE_LINE_MEMBER( alarm_irq );
+ DECLARE_WRITE_LINE_MEMBER( serial_irq );
DECLARE_PALETTE_INIT(rex6000);
DECLARE_INPUT_CHANGED_MEMBER(trigger_irq);
@@ -110,6 +122,31 @@ public:
};
+class oz750_state : public rex6000_state
+{
+public:
+ oz750_state(const machine_config &mconfig, device_type type, const char *tag)
+ : rex6000_state(mconfig, type, tag),
+ m_keyboard(*this, "COL")
+ { }
+
+ optional_ioport_array<10> m_keyboard;
+
+ DECLARE_READ8_MEMBER( kb_status_r );
+ DECLARE_READ8_MEMBER( kb_data_r );
+ DECLARE_WRITE8_MEMBER( kb_mask_w );
+ DECLARE_INPUT_CHANGED_MEMBER(trigger_on_irq);
+ DECLARE_QUICKLOAD_LOAD_MEMBER(oz750);
+
+ virtual void machine_reset() override;
+ UINT32 screen_update_oz(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+private:
+ int oz_wzd_extract_tag(const dynamic_buffer &data, const char *tag, char *dest_buf);
+
+ UINT16 m_kb_mask;
+};
+
READ8_MEMBER( rex6000_state::bankswitch_r )
{
@@ -254,14 +291,17 @@ WRITE8_MEMBER( rex6000_state::irq_w )
case 2: //irq mask
m_irq_mask = data;
break;
+ case 3: //power control
+ m_power_on = data & 1;
+ break;
}
}
READ8_MEMBER( rex6000_state::touchscreen_r )
{
- UINT16 x = ioport("PENX")->read();
- UINT16 y = ioport("PENY")->read();
- UINT16 battery = ioport("BATTERY")->read();
+ UINT16 x = m_pen_x->read();
+ UINT16 y = m_pen_y->read();
+ UINT16 battery = m_battery->read();
switch (offset)
{
@@ -291,6 +331,32 @@ WRITE8_MEMBER( rex6000_state::touchscreen_w )
m_touchscreen[offset&0x0f] = data;
}
+READ8_MEMBER( oz750_state::kb_status_r )
+{
+ UINT8 data = 0x6b;
+ if (m_battery->read() & 0x01) data |= 0x80;
+
+ return data;
+}
+
+READ8_MEMBER( oz750_state::kb_data_r )
+{
+ UINT8 data = 0;
+ for(int i=0; i<10; i++)
+ {
+ if (m_kb_mask & (1<<i))
+ data |= m_keyboard[i]->read();
+ }
+
+ return data;
+}
+WRITE8_MEMBER( oz750_state::kb_mask_w )
+{
+ if (offset)
+ m_kb_mask = (m_kb_mask & 0x00ff) | (data << 8);
+ else
+ m_kb_mask = (m_kb_mask & 0xff00) | data;
+}
static ADDRESS_MAP_START(rex6000_banked_map, AS_PROGRAM, 8, rex6000_state)
AM_RANGE( 0x0000000, 0x00fffff ) AM_DEVREADWRITE("flash0a", intelfsh8_device, read, write)
@@ -302,6 +368,13 @@ static ADDRESS_MAP_START(rex6000_banked_map, AS_PROGRAM, 8, rex6000_state)
AM_RANGE( 0x2000000, 0x2007fff ) AM_RAM AM_SHARE("nvram")
ADDRESS_MAP_END
+static ADDRESS_MAP_START(oz750_banked_map, AS_PROGRAM, 8, oz750_state)
+ AM_RANGE( 0x0000000, 0x01fffff ) AM_DEVREADWRITE("flash0a", intelfsh8_device, read, write)
+ AM_RANGE( 0x0200000, 0x02fffff ) AM_MIRROR(0x100000) AM_DEVREADWRITE("flash1a", intelfsh8_device, read, write)
+ AM_RANGE( 0x0600000, 0x07fffff ) AM_READWRITE(lcd_io_r, lcd_io_w)
+ AM_RANGE( 0x0800000, 0x083ffff ) AM_MIRROR(0x1c0000) AM_RAM AM_SHARE("nvram")
+ AM_RANGE( 0x0a00000, 0x0a3ffff ) AM_MIRROR(0x1c0000) AM_RAM
+ADDRESS_MAP_END
static ADDRESS_MAP_START(rex6000_mem, AS_PROGRAM, 8, rex6000_state)
@@ -321,10 +394,22 @@ static ADDRESS_MAP_START( rex6000_io, AS_IO, 8, rex6000_state)
AM_RANGE( 0x15, 0x19 ) AM_READWRITE(beep_r, beep_w)
AM_RANGE( 0x22, 0x23 ) AM_READWRITE(lcd_base_r, lcd_base_w)
AM_RANGE( 0x30, 0x3f ) AM_DEVREADWRITE(TC8521_TAG, rp5c01_device, read, write)
- AM_RANGE( 0x40, 0x47 ) AM_MIRROR(0x08) AM_NOP //SIO
+ AM_RANGE( 0x40, 0x47 ) AM_MIRROR(0x08) AM_DEVREADWRITE("ns16550", ns16550_device, ins8250_r, ins8250_w )
AM_RANGE( 0x50, 0x51 ) AM_READWRITE(lcd_io_r, lcd_io_w)
AM_RANGE( 0x60, 0x6f ) AM_READWRITE(touchscreen_r, touchscreen_w)
- //AM_RANGE( 0x00, 0xff ) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( oz750_io, AS_IO, 8, oz750_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE( 0x01, 0x04 ) AM_READWRITE(bankswitch_r, bankswitch_w)
+ AM_RANGE( 0x05, 0x08 ) AM_READWRITE(irq_r, irq_w)
+ AM_RANGE( 0x10, 0x10 ) AM_READ(kb_data_r)
+ AM_RANGE( 0x11, 0x12 ) AM_READWRITE(kb_status_r, kb_mask_w)
+ AM_RANGE( 0x15, 0x19 ) AM_READWRITE(beep_r, beep_w)
+ AM_RANGE( 0x22, 0x23 ) AM_READWRITE(lcd_base_r, lcd_base_w)
+ AM_RANGE( 0x30, 0x3f ) AM_DEVREADWRITE(TC8521_TAG, rp5c01_device, read, write)
+ AM_RANGE( 0x40, 0x47 ) AM_MIRROR(0x08) AM_DEVREADWRITE("ns16550", ns16550_device, ins8250_r, ins8250_w )
ADDRESS_MAP_END
INPUT_CHANGED_MEMBER(rex6000_state::trigger_irq)
@@ -337,6 +422,18 @@ INPUT_CHANGED_MEMBER(rex6000_state::trigger_irq)
}
}
+INPUT_CHANGED_MEMBER(oz750_state::trigger_on_irq)
+{
+ m_uart->cts_w(!newval);
+
+ if (!(m_irq_mask & IRQ_FLAG_EVENT))
+ {
+ m_irq_flag |= IRQ_FLAG_EVENT;
+
+ m_maincpu->set_input_line(0, HOLD_LINE);
+ }
+}
+
/* Input ports */
INPUT_PORTS_START( rex6000 )
PORT_START("BATTERY")
@@ -359,6 +456,116 @@ INPUT_PORTS_START( rex6000 )
PORT_BIT(0x3ff, 0x00, IPT_LIGHTGUN_Y) PORT_NAME("Pen Y") PORT_CROSSHAIR(Y, 1, 0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_INVERT
INPUT_PORTS_END
+INPUT_PORTS_START( oz750 )
+ PORT_START("BATTERY")
+ PORT_CONFNAME( 0x01, 0x01, "Battery Status" )
+ PORT_CONFSETTING( 0x01, "Normal operating mode" )
+ PORT_CONFSETTING( 0x00, "Replace battery mode" )
+
+ PORT_START("ON")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("ON") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_on_irq, 0)
+
+ PORT_START("COL.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_MAMEKEY(LSHIFT)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_NAME("MENU") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_NAME("NEW") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.4")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.5")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("RETURN") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.6")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('5') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('8') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_MAMEKEY(RSHIFT)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.7")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.8")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F4) PORT_NAME("MENU Screen") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F5) PORT_NAME("ESC Screen") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F6) PORT_NAME("ENTER Screen") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN)) PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+
+ PORT_START("COL.9")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F7) PORT_NAME("MAIN") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_NAME("TEL") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F9) PORT_NAME("SCHEDULE") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F10) PORT_NAME("MEMO") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F11) PORT_NAME("My Programs") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F12) PORT_NAME("Backlight") PORT_CHANGED_MEMBER(DEVICE_SELF, oz750_state, trigger_irq, 0)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
+INPUT_PORTS_END
+
void rex6000_state::machine_start()
{
membank("ram")->set_base((UINT8*)m_nvram + 0x4000);
@@ -376,6 +583,13 @@ void rex6000_state::machine_reset()
m_irq_flag = 0;
m_port6 = 0;
m_beep_mode = 0;
+ m_power_on = 0;
+}
+
+void oz750_state::machine_reset()
+{
+ rex6000_state::machine_reset();
+ m_kb_mask = 0;
}
UINT32 rex6000_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -404,6 +618,32 @@ UINT32 rex6000_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
return 0;
}
+UINT32 oz750_state::screen_update_oz(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ UINT16 lcd_bank = MAKE_BANK(m_lcd_base[0], m_lcd_base[1]);
+
+ if (m_lcd_enabled && m_power_on)
+ {
+ for (int y=0; y<=cliprect.max_y; y++)
+ for (int x=0; x<30; x++)
+ {
+ UINT8 data = m_bankdev0->space(AS_PROGRAM).read_byte((lcd_bank << 13) + y*30 + x);
+
+ for (int b=0; b<8; b++)
+ {
+ bitmap.pix16(y, (x * 8) + b) = BIT(data, 0);
+ data >>= 1;
+ }
+ }
+ }
+ else
+ {
+ bitmap.fill(0, cliprect);
+ }
+
+ return 0;
+}
+
TIMER_DEVICE_CALLBACK_MEMBER(rex6000_state::irq_timer1)
{
if (!(m_irq_mask & IRQ_FLAG_IRQ2))
@@ -444,6 +684,14 @@ WRITE_LINE_MEMBER( rex6000_state::alarm_irq )
}
}
+WRITE_LINE_MEMBER( rex6000_state::serial_irq )
+{
+ if (!(m_irq_mask & IRQ_FLAG_SERIAL))
+ {
+ m_irq_flag |= IRQ_FLAG_SERIAL;
+ m_maincpu->set_input_line(0, HOLD_LINE);
+ }
+}
PALETTE_INIT_MEMBER(rex6000_state, rex6000)
{
@@ -472,6 +720,104 @@ QUICKLOAD_LOAD_MEMBER( rex6000_state,rex6000)
return IMAGE_INIT_PASS;
}
+int oz750_state::oz_wzd_extract_tag(const dynamic_buffer &data, const char *tag, char *dest_buf)
+{
+ int tag_len = strlen(tag);
+ UINT32 img_start = 0;
+ for (img_start=0; img_start < data.size() - tag_len; img_start++)
+ if (data[img_start] && !memcmp(&data[img_start], tag, tag_len))
+ break;
+
+ if (img_start >= data.size() - tag_len)
+ {
+ if (dest_buf)
+ strcpy(dest_buf, "NONE");
+ return 0;
+ }
+
+ img_start += tag_len;
+
+ while(data[img_start] == '\r' || data[img_start] == '\n')
+ img_start++;
+
+ if (dest_buf)
+ {
+ UINT32 i;
+ for (i=0; data[img_start + i] != 0 && data[img_start + i] != '\n' && data[img_start + i] != '\r'; i++)
+ dest_buf[i] = data[img_start + i];
+
+ dest_buf[i] = '\0';
+ }
+
+ return img_start;
+}
+
+QUICKLOAD_LOAD_MEMBER(oz750_state,oz750)
+{
+ address_space* flash = &machine().device("flash0a")->memory().space(0);
+ dynamic_buffer data(image.length());
+ image.fread(&data[0], image.length());
+
+ const char *fs_type = "BSIC";
+ char data_type[0x100];
+ char app_name[0x100];
+ char file_name[0x100];
+
+ oz_wzd_extract_tag(data, "<DATA TYPE>", data_type);
+ if (strcmp(data_type, "MY PROGRAMS"))
+ return IMAGE_INIT_FAIL;
+
+ oz_wzd_extract_tag(data, "<TITLE>", app_name);
+ oz_wzd_extract_tag(data, "<DATA>", file_name);
+ if (!strncmp(file_name, "PFILE:", 6))
+ strcpy(file_name, file_name + 6);
+
+ UINT32 img_start = oz_wzd_extract_tag(data, "<BIN>", NULL);
+
+ if (img_start == 0)
+ return IMAGE_INIT_FAIL;
+
+ UINT16 icon_size = data[img_start++];
+
+ UINT32 pos = 0xc0000;
+ flash->write_byte(pos++, 0x4f);
+
+ for (int i=0; fs_type[i]; i++)
+ flash->write_byte(pos++, fs_type[i]); // file type
+
+ flash->write_byte(pos++, 0xff);
+ flash->write_byte(pos++, 0xff);
+ flash->write_byte(pos++, 0xff);
+ flash->write_byte(pos++, 0x10 + icon_size); // filename offset LSB
+ flash->write_byte(pos++, 0x00); // filename offset MSB
+ flash->write_byte(pos++, 0x11 + icon_size + strlen(file_name)); // title offset LSB
+ flash->write_byte(pos++, 0x00); // title offset MSB
+ flash->write_byte(pos++, 0x12 + icon_size + strlen(file_name) + strlen(app_name)); // data offset LSB
+ flash->write_byte(pos++, 0x00); // data offset MSB
+ flash->write_byte(pos++, 1);
+ flash->write_byte(pos++, 1);
+
+ flash->write_byte(pos++, icon_size); // icon size
+
+ for (int i=0; i<icon_size; i++)
+ flash->write_byte(pos++, data[img_start++]); // icon data
+
+ for (int i=0, slen = strlen(file_name); i <= slen; i++)
+ flash->write_byte(pos++, file_name[i]); // filename
+
+ for (int i=0, slen = strlen(app_name); i <= slen; i++)
+ flash->write_byte(pos++, app_name[i]); // title
+
+ UINT16 size = (UINT16)image.length() - img_start;
+ flash->write_byte(pos++, size); // data size LSB
+ flash->write_byte(pos++, size >> 8); // data size MSB
+
+ for (int i=img_start; i<image.length(); i++)
+ flash->write_byte(pos++, data[i]); // data
+
+ return IMAGE_INIT_PASS;
+}
+
/* F4 Character Displayer */
static const gfx_layout rex6000_bold_charlayout =
@@ -557,6 +903,19 @@ static MACHINE_CONFIG_START( rex6000, rex6000_state )
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000)
+ MCFG_DEVICE_ADD( "ns16550", NS16550, XTAL_1_8432MHz )
+ MCFG_INS8250_OUT_TX_CB(DEVWRITELINE("serport", rs232_port_device, write_txd))
+ MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE("serport", rs232_port_device, write_dtr))
+ MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE("serport", rs232_port_device, write_rts))
+ MCFG_INS8250_OUT_INT_CB(WRITELINE(rex6000_state, serial_irq))
+
+ MCFG_RS232_PORT_ADD( "serport", default_rs232_devices, nullptr )
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, rx_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, dcd_w))
+ MCFG_RS232_DSR_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, dsr_w))
+ MCFG_RS232_RI_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, ri_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, cts_w))
+
/* quickload */
MCFG_QUICKLOAD_ADD("quickload", rex6000_state, rex6000, "rex,ds2", 0)
@@ -585,6 +944,73 @@ static MACHINE_CONFIG_START( rex6000, rex6000_state )
MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
MACHINE_CONFIG_END
+static MACHINE_CONFIG_START( oz750, oz750_state )
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu",Z80, XTAL_9_8304MHz) //Toshiba microprocessor Z80 compatible at 9.8MHz
+ MCFG_CPU_PROGRAM_MAP(rex6000_mem)
+ MCFG_CPU_IO_MAP(oz750_io)
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("sec_timer", rex6000_state, sec_timer, attotime::from_hz(1))
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer1", rex6000_state, irq_timer1, attotime::from_hz(64))
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer2", rex6000_state, irq_timer2, attotime::from_hz(8192))
+
+ MCFG_DEVICE_ADD( "ns16550", NS16550, XTAL_9_8304MHz / 4 )
+ MCFG_INS8250_OUT_TX_CB(DEVWRITELINE("serport", rs232_port_device, write_txd))
+ MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE("serport", rs232_port_device, write_dtr))
+ MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE("serport", rs232_port_device, write_rts))
+ MCFG_INS8250_OUT_INT_CB(WRITELINE(rex6000_state, serial_irq))
+
+ MCFG_RS232_PORT_ADD( "serport", default_rs232_devices, NULL )
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, rx_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, dcd_w))
+ MCFG_RS232_DSR_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, dsr_w))
+ MCFG_RS232_RI_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, ri_w))
+ //MCFG_RS232_CTS_HANDLER(DEVWRITELINE("ns16550", ins8250_uart_device, cts_w))
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", LCD)
+ MCFG_SCREEN_REFRESH_RATE(50)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
+ MCFG_SCREEN_UPDATE_DRIVER(oz750_state, screen_update_oz)
+ MCFG_SCREEN_SIZE(240, 80)
+ MCFG_SCREEN_VISIBLE_AREA(0, 240-1, 0, 80-1)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_DEFAULT_LAYOUT(layout_lcd)
+ MCFG_PALETTE_ADD("palette", 2)
+ MCFG_PALETTE_INIT_OWNER(rex6000_state, rex6000)
+
+ MCFG_DEVICE_ADD("bank0", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(oz750_banked_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000)
+
+ MCFG_DEVICE_ADD("bank1", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(oz750_banked_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x2000)
+
+ /* quickload */
+ MCFG_QUICKLOAD_ADD("quickload", oz750_state, oz750, "wzd", 0)
+
+ MCFG_DEVICE_ADD(TC8521_TAG, RP5C01, XTAL_32_768kHz)
+ MCFG_RP5C01_OUT_ALARM_CB(WRITELINE(rex6000_state, alarm_irq))
+
+ MCFG_SHARP_LH28F016S_ADD("flash0a")
+ MCFG_SHARP_LH28F016S_ADD("flash1a")
+
+ /* internal ram */
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("512K")
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO( "mono" )
+ MCFG_SOUND_ADD( "beeper", BEEP, 0 )
+ MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 )
+MACHINE_CONFIG_END
+
/* ROM definition */
ROM_START( rex6000 )
ROM_REGION( 0x200000, "flash0a", ROMREGION_ERASE )
@@ -614,8 +1040,17 @@ ROM_START( ds2 )
ROM_LOAD( "ds2_3.dat", 0x0000, 0x100000, BAD_DUMP CRC(64f7c189) SHA1(a47d3413ddb879083c3aec03a42fe357d3a3c10a))
ROM_END
+ROM_START( oz750 )
+ ROM_REGION( 0x200000, "flash0a", ROMREGION_ERASEFF )
+ ROM_LOAD( "oz750_0.bin", 0x0000, 0x200000, CRC(bf321bab) SHA1(2fb44a870b26aebf4b949b5de84fb39cd9205191))
+
+ ROM_REGION( 0x200000, "flash1a", ROMREGION_ERASEFF )
+ ROM_LOAD( "oz750_1.bin", 0x0000, 0x100000, CRC(d74e97d7) SHA1(19d17393a9af85e07773feaf1aed5e2cfa80f7cc))
+ROM_END
+
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
+COMP( 199?, oz750, 0, 0, oz750 , oz750, driver_device, 0, "Sharp", "Wizard OZ-750", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
COMP( 2000, rex6000, 0, 0, rex6000, rex6000, driver_device, 0, "Xircom / Intel", "REX 6000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
COMP( 2000, ds2, rex6000, 0, rex6000, rex6000, driver_device, 0, "Citizen", "DataSlim 2", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
diff --git a/src/mame/drivers/scramble.cpp b/src/mame/drivers/scramble.cpp
index aed3f75fba1..03b2d1c89df 100644
--- a/src/mame/drivers/scramble.cpp
+++ b/src/mame/drivers/scramble.cpp
@@ -1796,6 +1796,23 @@ ROM_START( knockoutb )
ROM_LOAD( "ta.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) )
ROM_END
+ROM_START( knockoutc )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "1.bin", 0x0000, 0x1000, CRC(7c386d1e) SHA1(e846a70bebd41b240758ffb2c7801fa7260b314e) )
+ ROM_LOAD( "2.bin", 0x1000, 0x1000, CRC(85dc1d78) SHA1(61e82cfb5b0f0da6413713293c382ea57074e801) )
+ ROM_LOAD( "3.bin", 0x2000, 0x1000, CRC(9f734d29) SHA1(430c53b9c3fa888fe45f9feeb4ad8f92011adc05) )
+ ROM_LOAD( "4.bin", 0x3000, 0x1000, CRC(48e2d6cd) SHA1(7eea464b8cfef84dbad66e33dffaba9515605da6) )
+ ROM_LOAD( "5.bin", 0x6000, 0x0800, CRC(26ac55ba) SHA1(876b8bf2ddb0ffb6256d1447408c8b7f7d048d9f) )
+ ROM_CONTINUE( 0x5800, 0x0800 )
+
+ ROM_REGION( 0x1000, "gfx1", 0 )
+ ROM_LOAD( "6.bin", 0x0000, 0x0800, CRC(d51cbd6f) SHA1(c3766a69a4599e54b8d7fb893e45802ec8bf6713) )
+ ROM_LOAD( "7.bin", 0x0800, 0x0800, CRC(f21c0059) SHA1(b1ba87f13908e3e662de8bf444f59bd5c2009720) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "ta.6e", 0x0000, 0x0020, CRC(624f75df) SHA1(0e9a7c48dd976af1dca1d5351236d4d5bf7a9dc8) )
+ROM_END
+
ROM_START( mariner )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -2315,6 +2332,7 @@ GAME( 1982, triplep, 0, triplep, triplep, scramble_state, scramble_ppi
GAME( 1982, triplepa, triplep, triplep, triplep, scramble_state, scramble_ppi, ROT90, "K.K. International", "Triple Punch (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, knockout, triplep, triplep, triplep, scramble_state, scramble_ppi, ROT90, "bootleg? (KKK)", "Knock Out!! (bootleg, set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, knockoutb,triplep, triplep, knockoutb,scramble_state, scramble_ppi, ROT90, "bootleg", "Knock Out!! (bootleg, set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1982, knockoutc,triplep, triplep, knockoutb,scramble_state, scramble_ppi, ROT90, "bootleg (ESG)", "Knock Out!! (bootleg, set 3)", MACHINE_SUPPORTS_SAVE ) // ESG = Elektronik Spiel Gerate
GAME( 1981, mariner, 0, mariner, scramble, scramble_state, mariner, ROT90, "Amenip", "Mariner", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
GAME( 1981, 800fath, mariner, mariner, 800fath, scramble_state, mariner, ROT90, "Amenip (US Billiards Inc. license)", "800 Fathoms", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp
index dfb04f270a3..d208c46848a 100644
--- a/src/mame/drivers/segas16b.cpp
+++ b/src/mame/drivers/segas16b.cpp
@@ -873,7 +873,7 @@ S11 S13 S15 S17 |EPR12194 - - - EPR12195 - -
#include "machine/segaic16.h"
#include "machine/mc8123.h"
#include "includes/segaipt.h"
-
+#include "sound/okim6295.h"
//**************************************************************************
// CONSTANTS
@@ -1756,6 +1756,65 @@ static ADDRESS_MAP_START( decrypted_opcodes_map_x, AS_DECRYPTED_OPCODES, 16, seg
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_SHARE("decrypted_opcodes")
ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( lockonph_map, AS_PROGRAM, 16, segas16b_state )
+ // this still appears to have a mapper device, does the hardware use it? should we move this to all be configured by it?
+ AM_RANGE(0x000000, 0x0bffff) AM_ROM
+ AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE(rom_5704_bank_w)
+ AM_RANGE(0x400000, 0x40ffff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, tileram_r, tileram_w) AM_SHARE("tileram")
+ AM_RANGE(0x410000, 0x410fff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, textram_r, textram_w) AM_SHARE("textram")
+ AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_SHARE("sprites")
+ AM_RANGE(0x840000, 0x841fff) AM_RAM_WRITE(philko_paletteram_w) AM_SHARE("paletteram")
+
+ AM_RANGE(0xC40000, 0xC40001) AM_WRITENOP // coin counters etc.?
+
+ AM_RANGE(0xC41000, 0xC41001) AM_READ_PORT("P1")
+ AM_RANGE(0xC41002, 0xC41003) AM_READ_PORT("P2")
+ AM_RANGE(0xC41004, 0xC41005) AM_READ_PORT("SERVICE")
+
+ AM_RANGE(0xC42000, 0xC42001) AM_READ_PORT("DSW1")
+ AM_RANGE(0xC42002, 0xC42003) AM_READ_PORT("DSW2")
+
+ AM_RANGE(0x777706, 0x777707) AM_WRITE(sound_w16) // AM_WRITE8(soundlatch_byte_w, 0xff00)
+
+ AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("workram")
+ADDRESS_MAP_END
+
+
+
+static ADDRESS_MAP_START( fpointbl_map, AS_PROGRAM, 16, segas16b_state )
+ AM_RANGE(0x000000, 0x0bffff) AM_ROM
+
+ AM_RANGE(0x400000, 0x40ffff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, tileram_r, tileram_w) AM_SHARE("tileram")
+ AM_RANGE(0x410000, 0x410fff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, textram_r, textram_w) AM_SHARE("textram")
+ AM_RANGE(0x440000, 0x440fff) AM_RAM AM_SHARE("sprites")
+
+ AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_w16)
+ AM_RANGE(0x601000, 0x601001) AM_READ_PORT("SERVICE")
+ AM_RANGE(0x601002, 0x601003) AM_READ_PORT("P1")
+ AM_RANGE(0x601004, 0x601005) AM_READ_PORT("P2")
+ AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW2")
+ AM_RANGE(0x600002, 0x600003) AM_READ_PORT("DSW1")
+
+ AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram")
+ AM_RANGE(0x843000, 0x843001) AM_WRITENOP
+
+ AM_RANGE(0xC46000, 0xC4601f) AM_RAM AM_SHARE("bootleg_scroll")
+ AM_RANGE(0xC46020, 0xC46027) AM_RAM AM_SHARE("bootleg_page")
+
+ AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram")
+ADDRESS_MAP_END
+/*
+ Flash Point (Datsu bootlegs = fpointbl, fpointbj)
+ Has sound latch at $E000 instead of I/O ports $C0-FF
+*/
+static ADDRESS_MAP_START( fpointbl_sound_map, AS_PROGRAM, 8, segas16b_state )
+ AM_RANGE(0x0000, 0x7fff) AM_ROM
+ AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r)
+ AM_RANGE(0xf800, 0xffff) AM_RAM
+ADDRESS_MAP_END
+
+
READ16_MEMBER(segas16b_state::bootleg_custom_io_r)
{
return m_custom_io_r(space, offset, mem_mask);
@@ -1794,6 +1853,20 @@ static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, segas16b_state )
AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x3f) AM_READ(soundlatch_byte_r)
ADDRESS_MAP_END
+// similar to whizz / other philko games in sidearms.cpp, but with the m6295
+static ADDRESS_MAP_START( lockonph_sound_map, AS_PROGRAM, 8, segas16b_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0x0000, 0xf7ff) AM_ROM
+ AM_RANGE(0xf800, 0xffff) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( lockonph_sound_iomap, AS_IO, 8, segas16b_state )
+ ADDRESS_MAP_GLOBAL_MASK(0xff)
+ AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
+ AM_RANGE(0x40, 0x40) AM_WRITENOP // ??
+ AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki", okim6295_device, read, write)
+ AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r)
+ADDRESS_MAP_END
//**************************************************************************
@@ -2396,6 +2469,96 @@ static INPUT_PORTS_START( fpoint )
INPUT_PORTS_END
+
+static INPUT_PORTS_START( fpointbl )
+ PORT_START("SERVICE")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("P1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+
+ PORT_START("P2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+
+ PORT_START("DSW2")
+ PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) /* Listed as "Unused" */
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */
+ PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6")
+ PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x40, 0x40, "Clear Round Allowed" ) PORT_DIPLOCATION("SW2:7") /* Use button 3 */
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x40, "2" )
+ /* SW2:8 The mode in which a block falls at twice [ usual ] speed as this when playing 25 minutes or more on one coin. */
+ PORT_DIPNAME( 0x80, 0x80, "2 Cell Move" ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
+
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4")
+ PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x05, "2 Coins/1 Credit 5/3 6/4" )
+ PORT_DIPSETTING( 0x04, "2 Coins/1 Credit 4/3" )
+ PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x01, "1 Coin/1 Credit 2/3" )
+ PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 4/5" )
+ PORT_DIPSETTING( 0x03, "1 Coin/1 Credit 5/6" )
+ PORT_DIPSETTING( 0x06, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x00, "Free Play (if Coin B too) or 1/1" )
+ PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7,8")
+ PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x90, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x50, "2 Coins/1 Credit 5/3 6/4" )
+ PORT_DIPSETTING( 0x40, "2 Coins/1 Credit 4/3" )
+ PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x10, "1 Coin/1 Credit 2/3" )
+ PORT_DIPSETTING( 0x20, "1 Coin/1 Credit 4/5" )
+ PORT_DIPSETTING( 0x30, "1 Coin/1 Credit 5/6" )
+ PORT_DIPSETTING( 0x60, DEF_STR( 2C_3C ) )
+ PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
+ PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
+ PORT_DIPSETTING( 0x00, "Free Play (if Coin A too) or 1/1" )
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( goldnaxe )
PORT_INCLUDE( system16b_generic )
@@ -3308,7 +3471,93 @@ static INPUT_PORTS_START( snapper )
PORT_START("DSW1") // DUMMY
INPUT_PORTS_END
+static INPUT_PORTS_START( lockonph )
+ PORT_START("P1")
+ 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_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_START("P2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+
+ PORT_START("SERVICE")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+
+ PORT_START("DSW1") // DSW1
+ PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW0:1,2,3")
+ PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 1C_5C ) )
+ PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW0:4,5,6")
+ PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x18, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x28, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( 1C_5C ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW0:7")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW0:8")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("DSW2") // DSW2
+ // these 3 dips seem to control a combination of the number of bullets / bullet speed. Not sure how they translate to actual difficulty
+ // the comments relate to the bullets fire by the first 'large' ship.
+ PORT_DIPNAME( 0x0007, 0x0004, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:1,2,3")
+ PORT_DIPSETTING( 0x0000, "0" ) // very slow bullets
+ PORT_DIPSETTING( 0x0001, "1" ) // ^
+ PORT_DIPSETTING( 0x0002, "2" ) // very slow bullets but less?
+ PORT_DIPSETTING( 0x0003, "3" ) // ^
+ PORT_DIPSETTING( 0x0004, "4" ) // faster bullets
+ PORT_DIPSETTING( 0x0005, "5" ) // ^
+ PORT_DIPSETTING( 0x0006, "6" ) // very fast, but less of them?
+ PORT_DIPSETTING( 0x0007, "7" ) // almost no bullets?
+
+ PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW1:4")
+ PORT_DIPSETTING( 0x0008, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Region ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x0010, DEF_STR( Korea ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Europe ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
//**************************************************************************
// GRAPHICS DECODING
@@ -3318,7 +3567,9 @@ static GFXDECODE_START( segas16b )
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x3_planar, 0, 1024 )
GFXDECODE_END
-
+static GFXDECODE_START( lockonph )
+ GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_planar, 0, 1024 )
+GFXDECODE_END
//**************************************************************************
// GENERIC MACHINE DRIVERS
@@ -3425,6 +3676,97 @@ static MACHINE_CONFIG_DERIVED( system16b_split, system16b )
MCFG_DEVICE_REMOVE("mapper")
MACHINE_CONFIG_END
+void segas16b_state::tilemap_16b_fpointbl_fill_latch(int i, UINT16* latched_pageselect, UINT16* latched_yscroll, UINT16* latched_xscroll, UINT16* textram)
+{
+ // grab the page regsisters from where the bootleg stores them instead, then convert them to the format the original video emulation code expects
+ if (i == 0)
+ {
+ latched_pageselect[i] = m_bootleg_page[1];
+ latched_yscroll[i] = m_bootleg_scroll[0x00/2];
+ latched_xscroll[i] = -m_bootleg_scroll[0x08/2]-1;
+
+ }
+ else if (i == 1)
+ {
+ // 6661 vs 1666
+ latched_pageselect[i] = BITSWAP16(m_bootleg_page[3] ,3, 2, 1, 0 , 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 ) ;
+ latched_yscroll[i] = m_bootleg_scroll[0x10/2]+2;
+ latched_xscroll[i] = -m_bootleg_scroll[0x18/2]-1;
+ }
+ else
+ {
+ latched_pageselect[i] = 0x0000;
+ latched_yscroll[i] = 0;
+ latched_xscroll[i] = 0;
+ }
+// printf("%02x returning latched page select %04x scrollx %04x scrolly %04x\n", i, latched_pageselect[i], latched_xscroll[i], latched_yscroll[i]);
+}
+
+static MACHINE_CONFIG_DERIVED( fpointbl, system16b )
+
+ MCFG_DEVICE_REMOVE("mapper")
+ MCFG_DEVICE_REMOVE("sprites")
+
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(fpointbl_map)
+
+ MCFG_CPU_MODIFY("soundcpu")
+ MCFG_CPU_PROGRAM_MAP(fpointbl_sound_map)
+
+ MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites")
+ MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(75) // these align the pieces with the playfield
+ MCFG_BOOTLEG_SYS16B_SPRITES_YORIGIN(-2) // some other gfx don't have identical alignment to original tho (flickey character over 'good luck')
+
+ MCFG_DEVICE_MODIFY("segaic16vid")
+ MCFG_SEGAIC16_VIDEO_SET_PAGELATCH_CB(segas16b_state, tilemap_16b_fpointbl_fill_latch)
+
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_START( lockonph, segas16b_state )
+
+ // basic machine hardware
+ MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz/2) // ?
+ MCFG_CPU_PROGRAM_MAP(lockonph_map)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", segas16b_state, irq4_line_hold)
+
+ MCFG_CPU_ADD("soundcpu", Z80, XTAL_16MHz/4) // ?
+ MCFG_CPU_PROGRAM_MAP(lockonph_sound_map)
+ MCFG_CPU_IO_MAP(lockonph_sound_iomap)
+
+
+ MCFG_NVRAM_ADD_0FILL("nvram")
+
+// MCFG_SEGA_315_5195_MAPPER_ADD("mapper", "maincpu", segas16b_state, memory_mapper, mapper_sound_r, mapper_sound_w)
+
+ // video hardware
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", lockonph)
+ MCFG_PALETTE_ADD("palette", 0x2000*4)
+
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_25MHz/4, 400, 0, 320, 262, 0, 224) // wrong, other XTAL seems to be 17Mhz?
+ MCFG_SCREEN_UPDATE_DRIVER(segas16b_state, screen_update)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_SEGA_SYS16B_SPRITES_ADD("sprites")
+ MCFG_SEGAIC16VID_ADD("segaic16vid")
+ MCFG_SEGAIC16VID_GFXDECODE("gfxdecode")
+
+ // sound hardware
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+
+ MCFG_YM2151_ADD("ymsnd", XTAL_16MHz/4) // ??
+// MCFG_YM2151_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) // does set up the timer, but end up with no sound?
+ MCFG_SOUND_ROUTE(0, "mono", 0.5)
+ MCFG_SOUND_ROUTE(1, "mono", 0.5)
+
+ MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_LOW) // clock / pin not verified
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.2)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.2)
+
+
+MACHINE_CONFIG_END
+
//**************************************************************************
// GAME-SPECIFIC MACHINE DRIVERS
@@ -4111,6 +4453,41 @@ ROM_START( snapper )
ROM_LOAD( "snap5.r05", 0x10000, 0x8000, CRC(378e08eb) SHA1(f2c10bd9e885c185ac2d0d51d907ceca1f21dd7a) )
ROM_END
+//*************************************************************************************************************************
+//*************************************************************************************************************************
+//*************************************************************************************************************************
+// Lock On
+// CPU: 68000
+// Custom Korean Board (Phiko System 4) - NOT Sega
+//
+ROM_START( lockonph )
+ ROM_REGION( 0xc0000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "B2", 0x000001, 0x40000, CRC(fc1c9f81) SHA1(09c51fbf4cc440ad3166407d1b96b4a4dcc9e412) )
+ ROM_LOAD16_BYTE( "B4", 0x000000, 0x40000, CRC(fbb896f4) SHA1(36fe1199d27c6b106164ed359ddd735a75bcb85b) )
+ ROM_LOAD16_BYTE( "B1", 0x080001, 0x20000, CRC(f11a72ac) SHA1(e3010114abc79e4787f9e68fac40fdc231a22a5f) )
+ ROM_LOAD16_BYTE( "B3", 0x080000, 0x20000, CRC(3f8c0215) SHA1(3d8081c2e2a8dea398b390d5bcde5b1684c136ad) )
+
+ ROM_REGION( 0x10000, "soundcpu", 0 ) // z80
+ ROM_LOAD( "B6", 0x00000, 0x10000, CRC(aa7b1880) SHA1(866c057e076178da2395ce0351f7060cccd7bd81) )
+
+ ROM_REGION( 0x40000, "oki", 0 ) // m6295
+ ROM_LOAD( "B5", 0x00000, 0x20000, CRC(d6369a39) SHA1(354075ec6eb7861567917f61d2dda23652dbec60) )
+
+ ROM_REGION( 0x80000, "gfx1", 0 ) // tiles
+ ROM_LOAD( "B10", 0x00000, 0x20000, CRC(d3a8bd15) SHA1(06fc030d4325aaf181578ae8b7da671190ca9548) )
+ ROM_LOAD( "B7", 0x20000, 0x20000, CRC(787c382e) SHA1(4e1912c891d69a9fbeecfa16ff0fc1377ae5ad8e) )
+ ROM_LOAD( "B9", 0x40000, 0x20000, CRC(aae2cef1) SHA1(3f83cf8b605822561bd0f745f7568cae86d3a3b8) )
+ ROM_LOAD( "B8", 0x60000, 0x20000, CRC(cd30abe0) SHA1(9fb19b9d2bee033fc81a47fb00ab4a59ea77ecb1) )
+
+
+ ROM_REGION16_BE( 0x100000, "sprites", ROMREGION_ERASEFF ) // sprites
+ ROM_LOAD16_BYTE( "B12", 0x000000, 0x40000, CRC(9088d980) SHA1(bc6c24d4b56472a4bd2f2b0999b850fc99b6c556) )
+ ROM_LOAD16_BYTE( "B14", 0x000001, 0x40000, CRC(af943525) SHA1(fe1accca30602c8b5db799c7cb038230b0113810) )
+ ROM_LOAD16_BYTE( "B11", 0x080000, 0x20000, CRC(5da3dfcd) SHA1(02d409c2fff4fdc405f7d5b4e0ca0c43dc6f6899) )
+ ROM_LOAD16_BYTE( "B13", 0x080001, 0x20000, CRC(62f4b64f) SHA1(719f9d4faf2bd04bb47131fe4082def3d809c56b) )
+ROM_END
+
+
//*************************************************************************************************************************
//*************************************************************************************************************************
@@ -5648,6 +6025,53 @@ ROM_START( fpointd )
ROM_LOAD( "epr-12592.a10", 0x0000, 0x8000, CRC(9a8c11bb) SHA1(399f8e9bdd7aaa4d25817fa9cd4bbf413e5baebe) )
ROM_END
+// Datsu bootlegs
+ROM_START( fpointbl )
+ ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "flpoint.003", 0x000000, 0x10000, CRC(4d6df514) SHA1(168aa1629ab7152ba1984605155406b236954a2c) )
+ ROM_LOAD16_BYTE( "flpoint.002", 0x000001, 0x10000, CRC(4dff2ee8) SHA1(bd157d8c168d45e7490a05d5e1e901d9bdda9599) )
+
+ ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) )
+ ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) )
+ ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) )
+
+ ROM_REGION16_BE( 0x20000, "sprites", 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) )
+ ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) )
+
+ ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */
+ ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) )
+ROM_END
+
+ROM_START( fpointbj )
+ ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "boot2.003", 0x000000, 0x10000, CRC(6c00d1b0) SHA1(fd0c47b8ca010a64d3ef91980f93854ebc98fbda) )
+ ROM_LOAD16_BYTE( "boot2.002", 0x000001, 0x10000, CRC(c1fcd704) SHA1(697bef464e53fb9891ed15ee2d6210107b693b20) )
+
+ ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) )
+ ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) )
+ ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) )
+
+ ROM_REGION16_BE( 0x20000, "sprites", 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) )
+ ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) )
+
+ ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */
+ ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) )
+
+ /* stuff below isn't used but loaded because it was on the board .. */
+ ROM_REGION( 0x0120, "proms", 0 )
+ ROM_LOAD( "82s129.1", 0x0000, 0x0100, CRC(a7c22d96) SHA1(160deae8053b09c09328325246598b3518c7e20b) )
+ ROM_LOAD( "82s123.2", 0x0100, 0x0020, CRC(58bcf8bd) SHA1(e4d3d179b08c0f3424a6bec0f15058fb1b56f8d8) )
+
+ ROM_REGION( 0x0600, "plds", 0 )
+ ROM_LOAD( "fpointbj_gal16v8_1.bin", 0x0000, 0x0117, CRC(ba7f292c) SHA1(c383700d05663c9c5f29d5d04d16b05cd6adceb8) )
+ ROM_LOAD( "fpointbj_gal16v8_3.bin", 0x0200, 0x0117, CRC(ce1ab1e1) SHA1(dcfc0015d8595ee6cb6bb02c95655161a7f3b017) )
+ ROM_LOAD( "fpointbj_gal20v8.bin", 0x0400, 0x019d, NO_DUMP ) /* Protected */
+ROM_END
+
//*************************************************************************************************************************
// Flash Point, Sega System 16B
// CPU: FD1094 (317-0127A)
@@ -8138,6 +8562,23 @@ DRIVER_INIT_MEMBER(segas16b_state,generic_korean)
emu_timer *timer = timer_alloc(TID_ATOMICP_SOUND_IRQ);
timer->adjust(attotime::from_hz(10000), 0, attotime::from_hz(10000));
}
+DRIVER_INIT_MEMBER(segas16b_state, lockonph)
+{
+ init_generic(ROM_BOARD_KOREAN);
+
+ // configure special behaviors for the Korean boards
+ m_disable_screen_blanking = true;
+ m_atomicp_sound_divisor = 1;
+ m_segaic16vid->m_display_enable = 1;
+
+ m_spritepalbase = 0x800; // tiles are 4bpp so sprite base is 0x800 instead of 0x400
+}
+DRIVER_INIT_MEMBER(segas16b_state, generic_bootleg)
+{
+ init_generic(ROM_BOARD_KOREAN);
+ m_disable_screen_blanking = true;
+ m_segaic16vid->m_display_enable = 1;
+}
//-------------------------------------------------
@@ -8425,6 +8866,8 @@ GAME( 2008, fantzoneta, fantzone, system16b, fantzoneta,segas16b_state
// Custom Korean Board - these probably belong with the bootlegs...
GAME( 1990, atomicp, 0, atomicp, atomicp, segas16b_state,generic_korean, ROT0, "Philko", "Atomic Point (Korea)", 0) // korean clone board..
GAME( 1990, snapper, 0, atomicp, snapper, segas16b_state,snapper, ROT0, "Philko", "Snapper (Korea)", 0) // korean clone board..
+// board marked 'System 4' and has Philko custom chip - various hw changes (4bpp tiles for example)
+GAME( 1991, lockonph, 0, lockonph, lockonph, segas16b_state,lockonph, ROT0, "Philko", "Lock On (Philko)", MACHINE_IMPERFECT_SOUND ) // Copyright not shown in game, but has 'PHILKO' in the startup warning and tiles / PCB. 1991 is the name entry for the lowest high score. Clipping issues on left edge in attract look like original game bugs.
// decrypted bootleg / 'suicide repair' sets
@@ -8497,6 +8940,11 @@ GAME( 1987, sdibl4, sdi, system16b_split, sdi, segas16b
GAME( 1987, sdibl5, sdi, system16b_split, sdi, segas16b_state,sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 4)", 0 )
GAME( 1987, sdibl6, sdi, system16b_split, sdi, segas16b_state,sdi_5358_small, ROT0, "bootleg", "SDI - Strategic Defense Initiative (bootleg, set 5)", 0 )
+// bootlegs with modified hardware
+GAME( 1989, fpointbl, fpoint, fpointbl, fpointbl, segas16b_state, generic_bootleg, ROT0, "bootleg (Datsu)", "Flash Point (World, bootleg)", 0 )
+GAME( 1989, fpointbj, fpoint, fpointbl, fpointbl, segas16b_state, generic_bootleg, ROT0, "bootleg (Datsu)", "Flash Point (Japan, bootleg)", 0 )
+
+
// ISG 'Selection Master' Type 2006 hardware
@@ -9014,3 +9462,9 @@ GAME( 2006, isgsm, 0, isgsm, isgsm, isgsm_state,isgsm, ROT0,
/* 01 */ // ?? unknown
/* 02 */ GAME( 2006, tetrbx, isgsm, isgsm, tetrbx, isgsm_state,tetrbx, ROT0, "bootleg (ISG)", "Tetris / Bloxeed (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 )
/* 03 */ GAME( 2008, shinfz, isgsm, isgsm, shinfz, isgsm_state,shinfz, ROT0, "bootleg (ISG)", "Shinobi / FZ-2006 (Korean System 16 bootleg) (ISG Selection Master Type 2006)", 0 ) // claims it's released in 2006, but set includes the PS2/S16 remake of Fantasy Zone II which is clearly from 2008
+
+
+
+
+
+
diff --git a/src/mame/drivers/sfbonus.cpp b/src/mame/drivers/sfbonus.cpp
index 3fcf0368c39..4a99a798f97 100644
--- a/src/mame/drivers/sfbonus.cpp
+++ b/src/mame/drivers/sfbonus.cpp
@@ -143,7 +143,7 @@ Model No. S2000-B
Graphics: HM86171
OSC: 25.000MHz, 12.000MHz & 4.9152MHz
Sound: OKI M6295
- Other: XILINX XC9536XL (socketted)
+ Other: XILINX XC9536XL (socketed)
HM86171-120 - HMC 28 pin DIP Color Palette RAMDAC
ULN2003A - 16 pin DIP Seven Darlington Arrays
@@ -195,7 +195,7 @@ Model No. S2000C SALTIRE
+----------+-------+-------------------------------+
Basically the same as the VCG-1 SALTIRE below, but the
-XILINX chip is socketted and no H1 or H2 connector.
+XILINX chip is socketed and no H1 or H2 connector.
------------------------------------------------------------
diff --git a/src/mame/drivers/simpl156.cpp b/src/mame/drivers/simpl156.cpp
index 652952885c3..8bda58693b0 100644
--- a/src/mame/drivers/simpl156.cpp
+++ b/src/mame/drivers/simpl156.cpp
@@ -485,7 +485,7 @@ This is a higher quality bootleg made with genuine DECO chips/parts.
| 93C45 05.u29 |
+-------------------------------+
-All roms are socketted eproms, no labels, just a number in pencel.
+All roms are socketed eproms, no labels, just a number in pencel.
05.u29 27c4096
01.u8l 27c4096
diff --git a/src/mame/drivers/slapfght.cpp b/src/mame/drivers/slapfght.cpp
index 413cf8651b2..d9ae018a63a 100644
--- a/src/mame/drivers/slapfght.cpp
+++ b/src/mame/drivers/slapfght.cpp
@@ -1832,7 +1832,7 @@ ROM_START( slapfighb3 )
ROM_LOAD( "sf_col19.bin", 0x0200, 0x0100, CRC(5cbf9fbf) SHA1(abfa58fa4e44ebc56f2e0fac9bcc36164c845fa3) )
ROM_END
-/*
+/*
Guardian
1986 Taito Corporation
@@ -1924,7 +1924,7 @@ A68_02 & 06 to 09 - 27256 EPROM
A68_14 - Motorola MC68705P5 Micro-Controller (protected). Clock 3.000MHz [36/12]
X - Unpopulated socket
-*/
+*/
ROM_START( grdian )
ROM_REGION( 0x18000, "maincpu", 0 ) /* Region 0 - main cpu code */
diff --git a/src/mame/drivers/snk.cpp b/src/mame/drivers/snk.cpp
index 0e35f023e59..dfea2270900 100644
--- a/src/mame/drivers/snk.cpp
+++ b/src/mame/drivers/snk.cpp
@@ -4648,7 +4648,7 @@ ROM_START( fitegolfu ) /* Later US version containing enhancements to make the
ROM_LOAD( "pal20l8a.6r", 0x0400, 0x0144, CRC(0f011673) SHA1(383e6f6e78daec9c874d5b48378111ca60f5ed64) )
ROM_END
-
+
ROM_START( fitegolf2 )
diff --git a/src/mame/drivers/snk68.cpp b/src/mame/drivers/snk68.cpp
index 42c43676a5c..72ef817e615 100644
--- a/src/mame/drivers/snk68.cpp
+++ b/src/mame/drivers/snk68.cpp
@@ -117,7 +117,7 @@ static ADDRESS_MAP_START( pow_map, AS_PROGRAM, 16, snk68_state )
AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW2")
// AM_RANGE(0x0f0008, 0x0f0009) AM_WRITENOP /* ?? */
AM_RANGE(0x100000, 0x100fff) AM_READWRITE(pow_fg_videoram_r, pow_fg_videoram_w) AM_MIRROR(0x1000) AM_SHARE("pow_fg_videoram") // 8-bit
- AM_RANGE(0x200000, 0x207fff) AM_READWRITE(spriteram_r, spriteram_w) AM_SHARE("spriteram") // only partially populated
+ AM_RANGE(0x200000, 0x207fff) AM_DEVREADWRITE("sprites", snk68_spr_device, spriteram_r, spriteram_w) AM_SHARE("spriteram") // only partially populated
AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
ADDRESS_MAP_END
@@ -137,7 +137,7 @@ static ADDRESS_MAP_START( searchar_map, AS_PROGRAM, 16, snk68_state )
AM_RANGE(0x0f0000, 0x0f0001) AM_READ_PORT("DSW1")
AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW2")
AM_RANGE(0x0f8000, 0x0f8001) AM_READ8(soundlatch2_byte_r, 0xff00)
- AM_RANGE(0x100000, 0x107fff) AM_READWRITE(spriteram_r, spriteram_w) AM_SHARE("spriteram") // only partially populated
+ AM_RANGE(0x100000, 0x107fff) AM_DEVREADWRITE("sprites", snk68_spr_device, spriteram_r, spriteram_w) AM_SHARE("spriteram") // only partially populated
AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(searchar_fg_videoram_w) AM_MIRROR(0x1000) AM_SHARE("pow_fg_videoram") /* Mirror is used by Ikari 3 */
AM_RANGE(0x300000, 0x33ffff) AM_ROM AM_REGION("user1", 0) /* Extra code bank */
AM_RANGE(0x400000, 0x400fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
@@ -561,6 +561,33 @@ GFXDECODE_END
/******************************************************************************/
+// pow has 0x4000 tiles and independent x/y flipping
+// the other games have > 0x4000 tiles and flipping in only one direction
+// (globally selected)
+void snk68_state::tile_callback_pow(int &tile, int& fx, int& fy, int& region)
+{
+ fx = tile & 0x4000;
+ fy = tile & 0x8000;
+ tile &= 0x3fff;
+ region = 1;
+}
+
+void snk68_state::tile_callback_notpow(int &tile, int& fx, int& fy, int& region)
+{
+ if (m_sprite_flip_axis)
+ {
+ fx = 0;
+ fy = tile & 0x8000;
+ }
+ else
+ {
+ fx = tile & 0x8000;
+ fy = 0;
+ }
+ tile &= 0x7fff;
+ region = 1;
+}
+
static MACHINE_CONFIG_START( pow, snk68_state )
/* basic machine hardware */
@@ -588,6 +615,11 @@ static MACHINE_CONFIG_START( pow, snk68_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_DEVICE_ADD("sprites", SNK68_SPR, 0)
+ MCFG_SNK68_SPR_GFXDECODE("gfxdecode")
+ MCFG_SNK68_SPR_PALETTE("palette")
+ MCFG_SNK68_SPR_SET_TILE_INDIRECT( snk68_state, tile_callback_pow )
+
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2) /* verified on pcb */
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", 0))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
@@ -603,6 +635,9 @@ static MACHINE_CONFIG_DERIVED( searchar, pow )
MCFG_CPU_PROGRAM_MAP(searchar_map)
MCFG_VIDEO_START_OVERRIDE(snk68_state,searchar)
+
+ MCFG_DEVICE_MODIFY("sprites")
+ MCFG_SNK68_SPR_SET_TILE_INDIRECT( snk68_state, tile_callback_notpow )
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/statriv2.cpp b/src/mame/drivers/statriv2.cpp
index 6546425f10c..932acd49106 100644
--- a/src/mame/drivers/statriv2.cpp
+++ b/src/mame/drivers/statriv2.cpp
@@ -55,7 +55,7 @@
CTR5037 is also labelled as a TMS9937NL
DSW is a 4 position dipswitch
-U17 is a socketted 74s288 (compatible with 82s123)
+U17 is a socketed 74s288 (compatible with 82s123)
U21 is a soldered in 74s288 (compatible with 82s123)
U22 is a soldered in 74s287 (compatible with 82s129)
@@ -659,7 +659,7 @@ ROM_START( statusbj )
ROM_LOAD( "statusbj.vid", 0x0000, 0x0800, CRC(99ade7a2) SHA1(98704ca3a9fcfc4590f850c8ae24445baaed6dfa) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "prom.u17", 0x0000, 0x0020, NO_DUMP ) /* Socketted */
+ ROM_LOAD( "prom.u17", 0x0000, 0x0020, NO_DUMP ) /* Socketed */
ROM_LOAD( "prom.u21", 0x0020, 0x0020, NO_DUMP ) /* Soldered in (Color?) */
ROM_LOAD( "prom.u22", 0x0040, 0x0100, NO_DUMP ) /* Soldered in */
ROM_END
@@ -673,7 +673,7 @@ ROM_START( tripdraw )
ROM_LOAD( "u36_td0.bin", 0x0000, 0x0800, CRC(2faa1942) SHA1(0205bf9eb86ef1c32f1ae959d0e02001393db3af) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "prom.u17", 0x0000, 0x0020, NO_DUMP ) /* Socketted */
+ ROM_LOAD( "prom.u17", 0x0000, 0x0020, NO_DUMP ) /* Socketed */
ROM_LOAD( "prom.u21", 0x0020, 0x0020, NO_DUMP ) /* Soldered in (Color?) */
ROM_LOAD( "prom.u22", 0x0040, 0x0100, NO_DUMP ) /* Soldered in */
ROM_END
@@ -706,7 +706,7 @@ ROM_START( funcsino )
ROM_LOAD( "u36", 0x0000, 0x1000, CRC(79eaf78b) SHA1(9df5f90344bbb9f1d196f35d910bb09fe6f74aa1) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "prom.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted */
+ ROM_LOAD( "prom.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed */
ROM_LOAD( "prom.u21", 0x0020, 0x0020, CRC(e8f60d23) SHA1(2070b8201b75a13e416f597d6b2473d0027f420c) ) /* Soldered in (Color?) */
ROM_LOAD( "prom.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -734,7 +734,7 @@ ROM_START( hangman )
ROM_LOAD( "hangman.nv", 0x0000, 0x0100, CRC(4cecee6f) SHA1(bd9fe7bea081c87033993f809ed0b2c727ab5e88) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -762,7 +762,7 @@ ROM_START( trivquiz )
ROM_LOAD( "trivquiz.nv", 0x0000, 0x0100, CRC(bd07a964) SHA1(a1fe68d95c79ac99cfca8a468073b5c838e1cd49) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed, not verified the same! */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -790,7 +790,7 @@ ROM_START( statriv2 )
ROM_LOAD( "statriv2.nv", 0x0000, 0x0100, CRC(3edb2bd1) SHA1(fdda1310f519054eb5e6ea498d27555f96b370eb) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed, not verified the same! */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -822,7 +822,7 @@ ROM_START( statriv2v )
ROM_LOAD( "statriv2v.nv", 0x0000, 0x0100, CRC(3a9c7db7) SHA1(3d5a78beed26a73320f1f0748944b7fd87794bc7) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed, not verified the same! */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -850,7 +850,7 @@ ROM_START( statriv4 )
ROM_LOAD( "statriv4.nv", 0x0000, 0x0100, CRC(ab449099) SHA1(80fe9e07068a1034f8c0b233a7d37f6b40644be5) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, verified */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed, verified */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -878,7 +878,7 @@ ROM_START( sextriv )
ROM_LOAD( "sextriv.nv", 0x0000, 0x0100, CRC(33fae98c) SHA1(11aaca7706460dbad750c11c794bbe20084a8ff6) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -907,7 +907,7 @@ ROM_START( quaquiz2 )
ROM_LOAD( "quaquiz2.nv", 0x0000, 0x0100, CRC(dad239cf) SHA1(c46380d7b673a1367f14364ae47cd46ebe080e1b) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed, not verified the same! */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -933,7 +933,7 @@ ROM_START( supertr2 )
ROM_LOAD( "astq2-8.rom", 0x38000, 0x08000, CRC(cd2674d5) SHA1(7fb6513172ffe8e3b9e0f4dc9ecdb42d954b1ff0) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, not verified the same! */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, BAD_DUMP CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed, not verified the same! */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -959,7 +959,7 @@ ROM_START( supertr3 )
ROM_LOAD( "triv3.u48", 0x38000, 0x08000, CRC(1a99b268) SHA1(6369c79f645962b4a2f85b18e9d93c3cc65defc1) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketted, verified */
+ ROM_LOAD( "dm74s288.u17", 0x0000, 0x0020, CRC(63b8a63e) SHA1(d59ad84edd583f7befce73b79e12dfb58a204c4f) ) /* Socketed, verified */
ROM_LOAD( "dm74s288.u21", 0x0020, 0x0020, CRC(853d6172) SHA1(4aaab0faeaa1a07ee883fbed021f8dcd7e0ba549) ) /* Soldered in (Color?) */
ROM_LOAD( "dm74s282.u22", 0x0040, 0x0100, CRC(0421b8e0) SHA1(8b786eed86397a1463ad37b9b011edf83d76dd63) ) /* Soldered in */
ROM_END
@@ -974,7 +974,7 @@ ROM_START( cstripxi )
ROM_LOAD( "csxirom0.bin", 0x0000, 0x1000, CRC(4c9d995e) SHA1(a262d2124f65aa86b0fecee6976b6591fd370d55) )
ROM_REGION( 0x0140, "proms", 0 )
- ROM_LOAD( "prom.u17", 0x0000, 0x0020, NO_DUMP ) /* Socketted */
+ ROM_LOAD( "prom.u17", 0x0000, 0x0020, NO_DUMP ) /* Socketed */
ROM_LOAD( "prom.u21", 0x0020, 0x0020, NO_DUMP ) /* Soldered in (Color?) */
ROM_LOAD( "prom.u22", 0x0040, 0x0100, NO_DUMP ) /* Soldered in */
diff --git a/src/mame/drivers/stv.cpp b/src/mame/drivers/stv.cpp
index 1a823eabcc1..0c72d2e9814 100644
--- a/src/mame/drivers/stv.cpp
+++ b/src/mame/drivers/stv.cpp
@@ -3259,7 +3259,7 @@ ROM_START( nclubv2 )
ROM_LOAD16_WORD_SWAP( "nclubv2.ic24", 0x0600000, 0x0200000, CRC(1b7637de) SHA1(43c3094f60a6582298a45bad923fef57e98c5b2b) ) // OK
ROM_LOAD16_WORD_SWAP( "nclubv2.ic26", 0x0a00000, 0x0200000, CRC(630be99d) SHA1(ac7fbaae98b126fad5228b0ebffa91a0f0a94516) ) // OK
ROM_LOAD16_WORD_SWAP( "nclubv2.ic28", 0x0e00000, 0x0200000, CRC(1a3ca5e2) SHA1(4d3aed51d29c54e71175d828f648c9feb813ac04) ) // OK
-
+
ROM_REGION16_BE( 0x80, "eeprom", 0 ) // preconfigured to 1 player
ROM_LOAD( "nclubv2.nv", 0x0000, 0x0080, CRC(96d55fa9) SHA1(b3c821d6cd4ed52d0e20565e12a06d8f81a08dbc) )
ROM_END
diff --git a/src/mame/drivers/system16.cpp b/src/mame/drivers/system16.cpp
index 2c36cdd09af..5bef0b40fc8 100644
--- a/src/mame/drivers/system16.cpp
+++ b/src/mame/drivers/system16.cpp
@@ -531,17 +531,7 @@ static ADDRESS_MAP_START( bayroute_map, AS_PROGRAM, 16, segas1x_bootleg_state )
ADDRESS_MAP_END
#endif
-/***************************************************************************/
-/*
- Flash Point (Datsu bootlegs = fpointbl, fpointbj)
- Has sound latch at $E000 instead of I/O ports $C0-FF
-*/
-static ADDRESS_MAP_START( fpointbl_sound_map, AS_PROGRAM, 8, segas1x_bootleg_state )
- AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_byte_r)
- AM_RANGE(0xf800, 0xffff) AM_RAM
-ADDRESS_MAP_END
/***************************************************************************/
@@ -840,37 +830,6 @@ ADDRESS_MAP_END
/***************************************************************************/
-static ADDRESS_MAP_START( fpointbl_map, AS_PROGRAM, 16, segas1x_bootleg_state )
- AM_RANGE(0x000000, 0x0bffff) AM_ROM
-
- AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE(sys16_tileram_w) AM_SHARE("tileram")
- AM_RANGE(0x410000, 0x410fff) AM_RAM_WRITE(sys16_textram_w) AM_SHARE("textram")
- AM_RANGE(0x440000, 0x440fff) AM_RAM AM_SHARE("sprites")
-
- AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_command_irq_w)
- AM_RANGE(0x601000, 0x601001) AM_READ_PORT("SERVICE")
- AM_RANGE(0x601002, 0x601003) AM_READ_PORT("P1")
- AM_RANGE(0x601004, 0x601005) AM_READ_PORT("P2")
- AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW2")
- AM_RANGE(0x600002, 0x600003) AM_READ_PORT("DSW1")
-
- AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram")
- AM_RANGE(0x843000, 0x843001) AM_WRITENOP
-
- AM_RANGE(0xC46000, 0xC46001) AM_WRITE(s16bl_fgscrolly_w)
- AM_RANGE(0xC46008, 0xC46009) AM_WRITE(s16bl_fgscrollx_w)
- AM_RANGE(0xC46010, 0xC46011) AM_WRITE(s16bl_bgscrolly_w)
- AM_RANGE(0xC46018, 0xC46019) AM_WRITE(s16bl_bgscrollx_w)
-
- AM_RANGE(0xC46020, 0xC46021) AM_WRITE(datsu_page0_w)
- AM_RANGE(0xc46022, 0xc46023) AM_WRITE(datsu_page1_w)
- AM_RANGE(0xC46024, 0xC46025) AM_WRITE(datsu_page2_w)
- AM_RANGE(0xC46026, 0xC46027) AM_WRITE(datsu_page3_w)
-
- AM_RANGE(0xffc000, 0xffffff) AM_RAM // work ram
-ADDRESS_MAP_END
-
-
WRITE16_MEMBER(segas1x_bootleg_state::eswat_tilebank0_w)
{
if (ACCESSING_BITS_0_7)
@@ -1349,6 +1308,74 @@ static ADDRESS_MAP_START( astormbl_map, AS_PROGRAM, 16, segas1x_bootleg_state )
AM_RANGE(0xffc000, 0xffffff) AM_RAM
ADDRESS_MAP_END
+READ16_MEMBER(segas1x_bootleg_state::ddcrew_c41006_r)
+{
+ return 0xffff;//rand();
+}
+
+WRITE16_MEMBER(segas1x_bootleg_state::ddcrewbl_spritebank_w)
+{
+// printf("banking write %08x: %04x (%04x %04x)\n", space.device().safe_pc(), offset*2, data&mem_mask, mem_mask);
+
+ data &= mem_mask;
+// offset &= 0x7;
+ offset += 4;
+
+ int maxbanks = memregion("sprites")->bytes() / 0x40000;
+ if (data >= maxbanks)
+ data = 255;
+ m_sprites->set_bank((offset) * 2 + 0, data * 2 + 0);
+ m_sprites->set_bank((offset) * 2 + 1, data * 2 + 1);
+}
+
+
+// todo: this
+static ADDRESS_MAP_START(ddcrewbl_map, AS_PROGRAM, 16, segas1x_bootleg_state)
+ AM_RANGE(0x000000, 0x07ffff) AM_ROM // ok
+ AM_RANGE(0x200000, 0x27ffff) AM_ROM // ok
+
+ AM_RANGE(0x400000, 0x40ffff) AM_RAM_WRITE(sys16_tileram_w) AM_SHARE("tileram")
+ AM_RANGE(0x410000, 0x410fff) AM_RAM_WRITE(sys16_textram_w) AM_SHARE("textram")
+ AM_RANGE(0x440000, 0x440fff) AM_RAM AM_SHARE("sprites") // ok
+
+ AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") // ok
+
+ AM_RANGE(0xC00000, 0xC00001) AM_WRITENOP // vdp leftovers maybe?
+ AM_RANGE(0xC00004, 0xC00005) AM_WRITENOP
+ AM_RANGE(0xC00006, 0xC00007) AM_WRITENOP
+
+
+ AM_RANGE(0xC40000, 0xC40001) AM_READ(ddcrew_c41006_r)
+ AM_RANGE(0xC40002, 0xC40003) AM_READ(ddcrew_c41006_r)
+ AM_RANGE(0xC41000, 0xC41001) AM_READ(ddcrew_c41006_r)
+ AM_RANGE(0xC41002, 0xC41003) AM_READ(ddcrew_c41006_r)
+ AM_RANGE(0xC41004, 0xC41005) AM_READ(ddcrew_c41006_r)
+ AM_RANGE(0xC41006, 0xC41007) AM_READ(ddcrew_c41006_r)
+
+
+
+ AM_RANGE(0xC44000, 0xC44001) AM_WRITENOP
+
+ AM_RANGE(0xc46600, 0xc46601) AM_WRITE(sys18_refreshenable_w)
+
+ AM_RANGE(0xC46038, 0xC4603f) AM_WRITE(ddcrewbl_spritebank_w) // ok
+
+ AM_RANGE(0xC46000, 0xC46001) AM_WRITENOP
+ AM_RANGE(0xC46010, 0xC46011) AM_WRITENOP
+ AM_RANGE(0xC46020, 0xC46021) AM_WRITENOP
+
+ AM_RANGE(0xC46040, 0xC46041) AM_WRITENOP
+ AM_RANGE(0xC46050, 0xC46051) AM_WRITENOP
+
+ AM_RANGE(0xC46060, 0xC46061) AM_WRITENOP
+ AM_RANGE(0xC46062, 0xC46063) AM_WRITENOP
+ AM_RANGE(0xC46064, 0xC46065) AM_WRITENOP
+
+ AM_RANGE(0xC46070, 0xC46071) AM_WRITENOP
+
+ AM_RANGE(0xffc000, 0xffffff) AM_RAM // ok
+ADDRESS_MAP_END
+
/*************************************
*
* Input ports
@@ -1702,93 +1729,6 @@ static INPUT_PORTS_START( eswat )
PORT_DIPSETTING( 0x80, "4" )
INPUT_PORTS_END
-static INPUT_PORTS_START( fpointbl )
- PORT_START("SERVICE")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
-
- PORT_START("P1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
-
- PORT_START("P2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
-
- PORT_START("DSW2")
- PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) /* Listed as "Unused" */
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:2")
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */
- PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */
- PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6")
- PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x40, 0x40, "Clear Round Allowed" ) PORT_DIPLOCATION("SW2:7") /* Use button 3 */
- PORT_DIPSETTING( 0x00, "1" )
- PORT_DIPSETTING( 0x40, "2" )
- /* SW2:8 The mode in which a block falls at twice [ usual ] speed as this when playing 25 minutes or more on one coin. */
- PORT_DIPNAME( 0x80, 0x80, "2 Cell Move" ) PORT_DIPLOCATION("SW2:8")
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Yes ) )
-
- PORT_START("DSW1")
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3,4")
- PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x09, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x05, "2 Coins/1 Credit 5/3 6/4" )
- PORT_DIPSETTING( 0x04, "2 Coins/1 Credit 4/3" )
- PORT_DIPSETTING( 0x0f, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, "1 Coin/1 Credit 2/3" )
- PORT_DIPSETTING( 0x02, "1 Coin/1 Credit 4/5" )
- PORT_DIPSETTING( 0x03, "1 Coin/1 Credit 5/6" )
- PORT_DIPSETTING( 0x06, DEF_STR( 2C_3C ) )
- PORT_DIPSETTING( 0x0e, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x0d, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x0b, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x00, "Free Play (if Coin B too) or 1/1" )
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7,8")
- PORT_DIPSETTING( 0x70, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x80, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x90, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x50, "2 Coins/1 Credit 5/3 6/4" )
- PORT_DIPSETTING( 0x40, "2 Coins/1 Credit 4/3" )
- PORT_DIPSETTING( 0xf0, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x10, "1 Coin/1 Credit 2/3" )
- PORT_DIPSETTING( 0x20, "1 Coin/1 Credit 4/5" )
- PORT_DIPSETTING( 0x30, "1 Coin/1 Credit 5/6" )
- PORT_DIPSETTING( 0x60, DEF_STR( 2C_3C ) )
- PORT_DIPSETTING( 0xe0, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0xd0, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0xb0, DEF_STR( 1C_5C ) )
- PORT_DIPSETTING( 0xa0, DEF_STR( 1C_6C ) )
- PORT_DIPSETTING( 0x00, "Free Play (if Coin A too) or 1/1" )
-INPUT_PORTS_END
static INPUT_PORTS_START( tetris )
PORT_INCLUDE( sys16_common ) /* unconfirmed coinage dip */
@@ -2298,18 +2238,7 @@ static MACHINE_CONFIG_DERIVED( eswatbl, system16_7759 )
MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-124)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( fpointbl, system16 )
-
- /* basic machine hardware */
- MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_PROGRAM_MAP(fpointbl_map)
-
- MCFG_CPU_MODIFY("soundcpu")
- MCFG_CPU_PROGRAM_MAP(fpointbl_sound_map)
- MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites")
- MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-107)
-MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tetrisbl, system16 )
@@ -2434,6 +2363,48 @@ static MACHINE_CONFIG_DERIVED( shdancbla, system18 )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80)
MACHINE_CONFIG_END
+
+MACHINE_RESET_MEMBER(segas1x_bootleg_state,ddcrewbl)
+{
+ // set up the initial banks for this game
+ // because it doesn't appear to actually program banks 0-3.
+ for (int i = 0; i < 4; i++)
+ {
+ m_sprites->set_bank((i)* 2 + 0, i * 2 + 0);
+ m_sprites->set_bank((i)* 2 + 1, i * 2 + 1);
+ }
+}
+
+
+static MACHINE_CONFIG_START( ddcrewbl, segas1x_bootleg_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", M68000, 10000000)
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", segas1x_bootleg_state, irq4_line_hold)
+ MCFG_CPU_PROGRAM_MAP(ddcrewbl_map)
+
+ /* video hardware */
+ MCFG_SCREEN_ADD("screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
+ MCFG_SCREEN_SIZE(40*8, 28*8)
+ MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
+ MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_system18old)
+ MCFG_SCREEN_PALETTE("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", sys16)
+ MCFG_PALETTE_ADD("palette", (2048+2048)*SHADOW_COLORS_MULTIPLIER)
+
+ MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state,system18old)
+
+ MCFG_BOOTLEG_SYS16B_SPRITES_ADD("sprites")
+ MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(189-124)
+
+ MCFG_MACHINE_RESET_OVERRIDE(segas1x_bootleg_state,ddcrewbl)
+
+MACHINE_CONFIG_END
+
+
/*************************************
*
* ROM definition(s)
@@ -3037,51 +3008,6 @@ ROM_START( eswatbl )
ROM_LOAD( "ic6", 0x10000, 0x40000, CRC(254347c2) SHA1(bf2d83a69a5be375c7e42e9f7d6e65c1095a354c) )
ROM_END
-ROM_START( fpointbl )
- ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */
- ROM_LOAD16_BYTE( "flpoint.003", 0x000000, 0x10000, CRC(4d6df514) SHA1(168aa1629ab7152ba1984605155406b236954a2c) )
- ROM_LOAD16_BYTE( "flpoint.002", 0x000001, 0x10000, CRC(4dff2ee8) SHA1(bd157d8c168d45e7490a05d5e1e901d9bdda9599) )
-
- ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */
- ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) )
- ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) )
- ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) )
-
- ROM_REGION16_BE( 0x20000, "sprites", 0 ) /* sprites */
- ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) )
- ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) )
-
- ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */
- ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) ) // bootleg rom doesn't work, but should be correct!
-ROM_END
-
-ROM_START( fpointbj )
- ROM_REGION( 0x0c0000, "maincpu", 0 ) /* 68000 code */
- ROM_LOAD16_BYTE( "boot2.003", 0x000000, 0x10000, CRC(6c00d1b0) SHA1(fd0c47b8ca010a64d3ef91980f93854ebc98fbda) )
- ROM_LOAD16_BYTE( "boot2.002", 0x000001, 0x10000, CRC(c1fcd704) SHA1(697bef464e53fb9891ed15ee2d6210107b693b20) )
-
- ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */
- ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) )
- ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) )
- ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) )
-
- ROM_REGION16_BE( 0x20000, "sprites", 0 ) /* sprites */
- ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) )
- ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) )
-
- ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU */
- ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) ) // bootleg rom doesn't work, but should be correct!
-
- /* stuff below isn't used but loaded because it was on the board .. */
- ROM_REGION( 0x0120, "proms", 0 )
- ROM_LOAD( "82s129.1", 0x0000, 0x0100, CRC(a7c22d96) SHA1(160deae8053b09c09328325246598b3518c7e20b) )
- ROM_LOAD( "82s123.2", 0x0100, 0x0020, CRC(58bcf8bd) SHA1(e4d3d179b08c0f3424a6bec0f15058fb1b56f8d8) )
-
- ROM_REGION( 0x0600, "plds", 0 )
- ROM_LOAD( "fpointbj_gal16v8_1.bin", 0x0000, 0x0117, CRC(ba7f292c) SHA1(c383700d05663c9c5f29d5d04d16b05cd6adceb8) )
- ROM_LOAD( "fpointbj_gal16v8_3.bin", 0x0200, 0x0117, CRC(ce1ab1e1) SHA1(dcfc0015d8595ee6cb6bb02c95655161a7f3b017) )
- ROM_LOAD( "fpointbj_gal20v8.bin", 0x0400, 0x019d, NO_DUMP ) /* Protected */
-ROM_END
ROM_START( tetrisbl )
ROM_REGION( 0x040000, "maincpu", ROMREGION_ERASEFF ) /* 68000 code */
@@ -3477,6 +3403,48 @@ ROM_START( shdancbla )
ROM_LOAD( "10.bin", 0x10000, 0x10000, CRC(d47a1610) SHA1(96d22068321de3c285a41d28342ab97d1dfa09da) )
ROM_LOAD( "9.bin", 0x20000, 0x10000, CRC(430faf5e) SHA1(dfe34a757937d7a971911fcefd14dfd7f5942b02) )
ROM_END
+
+// seems derived from the D. D. Crew (World, 4 Players) / FD1094 317-0187 version, old bootleg from the period the game was released
+ROM_START( ddcrewbl )
+ ROM_REGION( 0x400000, "maincpu", 0 ) // 68000 code
+ ROM_LOAD16_BYTE( "11.bin", 0x000000, 0x20000, CRC(c670c8a6) SHA1(eeda32aa9f75b8917e39484f579441a6020c29f4) )
+ ROM_LOAD16_BYTE( "15.bin", 0x000001, 0x20000, CRC(7f3baab1) SHA1(390310765137cffc2a1119f1839195134439e929) )
+ ROM_LOAD16_BYTE( "12.bin", 0x040000, 0x20000, CRC(f8d3fedc) SHA1(3a3151c9a05db3f8c736f57d90f2dd3e5ea708dd) )
+ ROM_LOAD16_BYTE( "16.bin", 0x040001, 0x20000, CRC(9662afd7) SHA1(688a0b1b5a83b1cfb2ea2f08f4ca15d8a8be08d4) )
+ ROM_LOAD16_BYTE( "13.bin", 0x200000, 0x20000, CRC(0033fe50) SHA1(3f29db7ddcfb5b6d6dfdd500d6541ac6018974ca) )
+ ROM_LOAD16_BYTE( "17.bin", 0x200001, 0x20000, CRC(bbb43241) SHA1(7a2955c59c39e9e214f15a842d3bc94d7a1095f3) )
+ ROM_LOAD16_BYTE( "14.bin", 0x240000, 0x20000, CRC(8780712e) SHA1(05ab2f7b108e0ae139237665da14f33132fb555e) )
+ ROM_LOAD16_BYTE( "18.bin", 0x240001, 0x20000, CRC(94b69d68) SHA1(e49ac664f4a5576737db9b9a7eee34b8c5fcd333))
+
+ ROM_REGION( 0xc0000, "gfx1", 0 ) // tiles (same as original)
+ ROM_LOAD( "fac-03.bin", 0x00000, 0x40000, CRC(2228cd88) SHA1(5774bb6a401c3da05c5f3c9d3996b20bb3713cb2) )
+ ROM_LOAD( "fac-02.bin", 0x40000, 0x40000, CRC(edba8e10) SHA1(25a2833ead4ca363802ddc2eb97c40976502921a) )
+ ROM_LOAD( "fac-01.bin", 0x80000, 0x40000, CRC(e8ecc305) SHA1(a26d0c5c7826cd315f8b2c27e5a503a2a7b535c4) )
+
+ ROM_REGION16_BE( 0x800000, "sprites", 0 ) // sprites (same as original)
+ ROM_LOAD16_BYTE( "fac-10.bin", 0x000001, 0x80000, CRC(4fda6a4b) SHA1(a9e582e494ab967e8f3ccf4d5844bb8ef889928c) )
+ ROM_LOAD16_BYTE( "fac-11.bin", 0x000000, 0x80000, CRC(3cbf1f2a) SHA1(80b6b006936740087786acd538e28aca85fa6894) )
+ ROM_LOAD16_BYTE( "fac-08.bin", 0x200001, 0x80000, CRC(e9c74876) SHA1(aff9d071e77f01c6937188bf67be38fa898343e6) )
+ ROM_LOAD16_BYTE( "fac-09.bin", 0x200000, 0x80000, CRC(59022c31) SHA1(5e1409fe0f29284dc6a3ffacf69b761aae09f132) )
+ ROM_LOAD16_BYTE( "fac-06.bin", 0x400001, 0x80000, CRC(720d9858) SHA1(8ebcb8b3e9555ca48b28908d47dcbbd654398b6f) )
+ ROM_LOAD16_BYTE( "fac-07.bin", 0x400000, 0x80000, CRC(7775fdd4) SHA1(a03cac039b400b651a4bf2167a8f2338f488ce26) )
+ ROM_LOAD16_BYTE( "fac-04.bin", 0x600001, 0x80000, CRC(846c4265) SHA1(58d0c213d085fb4dee18b7aefb05087d9d522950) )
+ ROM_LOAD16_BYTE( "fac-05.bin", 0x600000, 0x80000, CRC(0e76c797) SHA1(9a44dc948e84e5acac36e80105c2349ee78e6cfa) )
+
+ ROM_REGION( 0x80000, "oki", ROMREGION_ERASEFF )
+ ROM_LOAD( "fac-12.bin", 0x00000, 0x80000, CRC(2e7dade2) SHA1(4133138990ed10f56e299399f034f86ffd9cbd47) )
+
+ ROM_REGION( 0x100000, "proms", 0 )
+ ROM_LOAD( "82s123.bin", 0x000, 0x020, CRC(58bcf8bd) SHA1(e4d3d179b08c0f3424a6bec0f15058fb1b56f8d8) )
+ ROM_LOAD( "82s129.bin", 0x000, 0x100, CRC(00b5c4c4) SHA1(acab51ad861b25edf310b9b903a7fc486daaee4b) )
+
+ ROM_REGION( 0x100000, "gals", 0 )
+ ROM_LOAD( "gal16v8-1.bin", 0x000, 0x117, CRC(64892ee8) SHA1(c7ea077aead5934d95d61f82bdf705dc0cb0e8e4) )
+ ROM_LOAD( "gal16v8-2.bin", 0x000, 0x117, CRC(22133a8f) SHA1(0b5bc074cfe88c0631df63e0c0a733c660d73af0) )
+ROM_END
+
+
+
/*************************************
*
* Driver initialization
@@ -3621,15 +3589,14 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,eswatbl)
m_spritebank_type = 1;
}
-DRIVER_INIT_MEMBER(segas1x_bootleg_state,fpointbl)
+
+
+DRIVER_INIT_MEMBER(segas1x_bootleg_state,ddcrewbl)
{
DRIVER_INIT_CALL(common);
- //sys16_video_config(fpoint_update_proc, -0xb8, NULL);
-
- m_back_yscroll = 2;
- m_fore_yscroll = 2;
}
+
WRITE16_MEMBER(segas1x_bootleg_state::altbeastbl_gfx_w)
{
switch (offset) {
@@ -3787,8 +3754,6 @@ GAME( 1989, tturfbl, tturf, tturfbl, tturf, segas1x_bootleg_state,
GAME( 1989, dduxbl, ddux, dduxbl, ddux, segas1x_bootleg_state, dduxbl, ROT0, "bootleg (Datsu)", "Dynamite Dux (Datsu bootleg)", MACHINE_NOT_WORKING )
GAME( 1988, altbeastbl, altbeast, tetrisbl, tetris, segas1x_bootleg_state, altbeastbl, ROT0, "bootleg (Datsu)", "Altered Beast (Datsu bootleg)", MACHINE_NOT_WORKING )
GAME( 1989, eswatbl, eswat, eswatbl, eswat, segas1x_bootleg_state, eswatbl, ROT0, "bootleg", "E-Swat - Cyber Police (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
-GAME( 1989, fpointbl, fpoint, fpointbl, fpointbl, segas1x_bootleg_state, fpointbl, ROT0, "bootleg (Datsu)", "Flash Point (World, bootleg)", MACHINE_NOT_WORKING )
-GAME( 1989, fpointbj, fpoint, fpointbl, fpointbl, segas1x_bootleg_state, fpointbl, ROT0, "bootleg (Datsu)", "Flash Point (Japan, bootleg)", MACHINE_NOT_WORKING )
GAME( 1988, tetrisbl, tetris, tetrisbl, tetris, segas1x_bootleg_state, dduxbl, ROT0, "bootleg", "Tetris (bootleg)", 0 )
/* Tetris-based hardware */
@@ -3801,3 +3766,5 @@ GAME( 1990, astormb2, astorm, astormbl, astormbl, segas1x_bootleg_state
GAME( 1990, mwalkbl, mwalk, mwalkbl, mwalkbl, segas1x_bootleg_state, mwalkbl, ROT0, "bootleg", "Michael Jackson's Moonwalker (bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1989, shdancbl, shdancer, shdancbl, shdancbl, segas1x_bootleg_state, shdancbl, ROT0, "bootleg", "Shadow Dancer (bootleg, set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1989, shdancbla, shdancer, shdancbla, shdancbl, segas1x_bootleg_state, shdancbl, ROT0, "bootleg", "Shadow Dancer (bootleg, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
+
+GAME( 1990, ddcrewbl, ddcrew, ddcrewbl, astormbl, segas1x_bootleg_state, ddcrewbl, ROT0, "bootleg", "D. D. Crew (bootleg)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND )
diff --git a/src/mame/drivers/targeth.cpp b/src/mame/drivers/targeth.cpp
index 89c800b1581..81d810a1211 100644
--- a/src/mame/drivers/targeth.cpp
+++ b/src/mame/drivers/targeth.cpp
@@ -31,7 +31,7 @@ static GFXDECODE_START( 0x080000 )
GFXDECODE_END
-TIMER_DEVICE_CALLBACK_MEMBER(targeth_state::targeth_interrupt)
+TIMER_DEVICE_CALLBACK_MEMBER(targeth_state::interrupt)
{
int scanline = param;
@@ -52,21 +52,19 @@ TIMER_DEVICE_CALLBACK_MEMBER(targeth_state::targeth_interrupt)
WRITE16_MEMBER(targeth_state::OKIM6295_bankswitch_w)
{
- UINT8 *RAM = memregion("oki")->base();
-
if (ACCESSING_BITS_0_7){
- memcpy(&RAM[0x30000], &RAM[0x40000 + (data & 0x0f)*0x10000], 0x10000);
+ membank("okibank")->set_entry(data & 0x0f);
}
}
-WRITE16_MEMBER(targeth_state::targeth_coin_counter_w)
+WRITE16_MEMBER(targeth_state::coin_counter_w)
{
machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, targeth_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
- AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(targeth_vram_w) AM_SHARE("videoram") /* Video RAM */
+ AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(vram_w) AM_SHARE("videoram") /* Video RAM */
AM_RANGE(0x108000, 0x108007) AM_WRITEONLY AM_SHARE("vregs") /* Video Registers */
AM_RANGE(0x108000, 0x108001) AM_READ_PORT("GUNX1")
AM_RANGE(0x108002, 0x108003) AM_READ_PORT("GUNY1")
@@ -83,10 +81,17 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, targeth_state )
AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) /* OKI6295 bankswitch */
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status register */
AM_RANGE(0x700010, 0x70001b) AM_WRITENOP /* ??? Guns reload related? */
- AM_RANGE(0x70002a, 0x70003b) AM_WRITE(targeth_coin_counter_w) /* Coin counters */
+ AM_RANGE(0x70002a, 0x70003b) AM_WRITE(coin_counter_w) /* Coin counters */
AM_RANGE(0xfe0000, 0xfeffff) AM_RAM /* Work RAM (partially shared with DS5002FP) */
ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( oki_map, AS_0, 8, targeth_state )
+ AM_RANGE(0x00000, 0x2ffff) AM_ROM
+ AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("okibank")
+ADDRESS_MAP_END
+
+
static INPUT_PORTS_START( targeth )
PORT_START("GUNX1")
PORT_BIT( 0x01ff, 200, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.05, -0.028, 0) PORT_MINMAX( 0, 400 + 4) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_PLAYER(1)
@@ -177,7 +182,7 @@ static MACHINE_CONFIG_START( targeth, targeth_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000,24000000/2) /* 12 MHz */
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", targeth_state, targeth_interrupt, "screen", 0, 1)
+ MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", targeth_state, interrupt, "screen", 0, 1)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -185,7 +190,7 @@ static MACHINE_CONFIG_START( targeth, targeth_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(64*16, 32*16) /* 1024x512 */
MCFG_SCREEN_VISIBLE_AREA(0, 24*16-1, 16, 16*16-1) /* 400x240 */
- MCFG_SCREEN_UPDATE_DRIVER(targeth_state, screen_update_targeth)
+ MCFG_SCREEN_UPDATE_DRIVER(targeth_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", 0x080000)
@@ -196,6 +201,7 @@ static MACHINE_CONFIG_START( targeth, targeth_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -213,11 +219,10 @@ ROM_START( targeth )
ROM_LOAD( "targeth.i9", 0x100000, 0x080000, CRC(0e922c1c) SHA1(6920e345c82e76f7e0af6101f39eb65ac1f112b9) )
ROM_LOAD( "targeth.i7", 0x180000, 0x080000, CRC(d8b41000) SHA1(cbe91eb91bdc7a60b2333c6bea37d08a57902669) )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "targeth.c1", 0x000000, 0x080000, CRC(d6c9dfbc) SHA1(3ec70dea94fc89df933074012a52de6034571e87) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x080000 )
- ROM_LOAD( "targeth.c3", 0x0c0000, 0x080000, CRC(d4c771df) SHA1(7cc0a86ef6aa3d26ab8f19d198f62112bf012870) )
+ ROM_LOAD( "targeth.c3", 0x080000, 0x080000, CRC(d4c771df) SHA1(7cc0a86ef6aa3d26ab8f19d198f62112bf012870) )
ROM_END
ROM_START( targetha )
@@ -234,11 +239,10 @@ ROM_START( targetha )
ROM_LOAD( "targeth.i9", 0x100000, 0x080000, CRC(0e922c1c) SHA1(6920e345c82e76f7e0af6101f39eb65ac1f112b9) )
ROM_LOAD( "targeth.i7", 0x180000, 0x080000, CRC(d8b41000) SHA1(cbe91eb91bdc7a60b2333c6bea37d08a57902669) )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "targeth.c1", 0x000000, 0x080000, CRC(d6c9dfbc) SHA1(3ec70dea94fc89df933074012a52de6034571e87) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x080000 )
- ROM_LOAD( "targeth.c3", 0x0c0000, 0x080000, CRC(d4c771df) SHA1(7cc0a86ef6aa3d26ab8f19d198f62112bf012870) )
+ ROM_LOAD( "targeth.c3", 0x080000, 0x080000, CRC(d4c771df) SHA1(7cc0a86ef6aa3d26ab8f19d198f62112bf012870) )
ROM_END
GAME( 1994, targeth, 0, targeth, targeth, driver_device, 0, ROT0, "Gaelco", "Target Hits (ver 1.1)", MACHINE_UNEMULATED_PROTECTION )
diff --git a/src/mame/drivers/tcl.cpp b/src/mame/drivers/tcl.cpp
index cf5fe80f93a..46f6f537572 100644
--- a/src/mame/drivers/tcl.cpp
+++ b/src/mame/drivers/tcl.cpp
@@ -9,7 +9,6 @@ Preliminary driver by Tomasz Slanina
PCB Layout
----------
-
|-----------------------------------------------|
| AY8930 DSW5 TCL.1E |
| DSW4 TCL.3E TCL.3F TCL.3H |
@@ -36,8 +35,7 @@ Notes:
VSync: 60Hz
HSync: 15.15kHz
- This appears to be based off a Blue
- Dyna Cherry Master board -- emualted goldstar.c
+ This appears to be based off a Blue Dyna Cherry Master board -- emulated in goldstar.cpp
but with extra protection (the sub-board with CPU)
*/
diff --git a/src/mame/drivers/test_t400.cpp b/src/mame/drivers/test_t400.cpp
index b577d3c77a4..4f1a755ae16 100644
--- a/src/mame/drivers/test_t400.cpp
+++ b/src/mame/drivers/test_t400.cpp
@@ -29,13 +29,13 @@ WRITE8_MEMBER( t400_test_suite_state::port_l_w )
static MACHINE_CONFIG_START( test_t410, t400_test_suite_state )
MCFG_CPU_ADD("maincpu", COP410, 1000000)
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_ENABLED )
+ MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false )
MCFG_COP400_WRITE_L_CB(WRITE8(t400_test_suite_state, port_l_w))
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( test_t420, t400_test_suite_state )
MCFG_CPU_ADD("maincpu", COP420, 1000000)
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_ENABLED )
+ MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true )
MCFG_COP400_WRITE_L_CB(WRITE8(t400_test_suite_state, port_l_w))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/tetrisp2.cpp b/src/mame/drivers/tetrisp2.cpp
index 843c7381bdd..4656b3c1f98 100644
--- a/src/mame/drivers/tetrisp2.cpp
+++ b/src/mame/drivers/tetrisp2.cpp
@@ -1841,7 +1841,7 @@ Custom: SS91022-03
SS91022-05
Other: Sigma XILINX XCS30
- Sigma XILINX XC9536 (socketted and stamped SL4)
+ Sigma XILINX XC9536 (socketed and stamped SL4)
PCB Layout for sound rom board (from Rock'n 3):
diff --git a/src/mame/drivers/thayers.cpp b/src/mame/drivers/thayers.cpp
index 88db79b9569..eb0bee157e7 100644
--- a/src/mame/drivers/thayers.cpp
+++ b/src/mame/drivers/thayers.cpp
@@ -780,7 +780,7 @@ static MACHINE_CONFIG_START( thayers, thayers_state )
MCFG_CPU_IO_MAP(thayers_io_map)
MCFG_CPU_ADD("mcu", COP421, XTAL_4MHz/2) // COP421L-PCA/N
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, COP400_MICROBUS_DISABLED )
+ MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_4, COP400_CKO_OSCILLATOR_OUTPUT, false )
MCFG_COP400_READ_L_CB(READ8(thayers_state, cop_l_r))
MCFG_COP400_WRITE_L_CB(WRITE8(thayers_state, cop_l_w))
MCFG_COP400_READ_G_CB(READ8(thayers_state, cop_g_r))
diff --git a/src/mame/drivers/thoop2.cpp b/src/mame/drivers/thoop2.cpp
index 756d5a87bb5..54f2181ece1 100644
--- a/src/mame/drivers/thoop2.cpp
+++ b/src/mame/drivers/thoop2.cpp
@@ -20,47 +20,20 @@ pf: but some gameplay bugs - sprite positioning is incorrect, no enemies, jump a
#include "sound/okim6295.h"
#include "includes/thoop2.h"
-static const gfx_layout thoop2_tilelayout =
-{
- 8,8, /* 8x8 tiles */
- 0x400000/16, /* number of tiles */
- 4, /* 4 bpp */
- { 0*0x400000*8+8, 0*0x400000*8, 1*0x400000*8+8, 1*0x400000*8 },
- { 0, 1, 2, 3, 4, 5, 6, 7 },
- { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
- 16*8
-};
-static const gfx_layout thoop2_tilelayout_16 =
+void thoop2_state::machine_start()
{
- 16,16, /* 16x16 tiles */
- 0x400000/64, /* number of tiles */
- 4, /* 4 bpp */
- { 0*0x400000*8+8, 0*0x400000*8, 1*0x400000*8+8, 1*0x400000*8 },
- { 0, 1, 2, 3, 4, 5, 6, 7,
- 16*16+0, 16*16+1, 16*16+2, 16*16+3, 16*16+4, 16*16+5, 16*16+6, 16*16+7 },
- { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
- 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
- 64*8
-};
-
-
-static GFXDECODE_START( thoop2 )
- GFXDECODE_ENTRY( "gfx1", 0x000000, thoop2_tilelayout, 0, 64 )
- GFXDECODE_ENTRY( "gfx1", 0x000000, thoop2_tilelayout_16, 0, 64 )
-GFXDECODE_END
-
+ membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
+}
WRITE16_MEMBER(thoop2_state::OKIM6295_bankswitch_w)
{
- UINT8 *RAM = memregion("oki")->base();
-
if (ACCESSING_BITS_0_7){
- memcpy(&RAM[0x30000], &RAM[0x40000 + (data & 0x0f)*0x10000], 0x10000);
- }
+ membank("okibank")->set_entry(data & 0x0f);
+ }
}
-WRITE16_MEMBER(thoop2_state::thoop2_coin_w)
+WRITE16_MEMBER(thoop2_state::coin_w)
{
if (ACCESSING_BITS_0_7){
switch ((offset >> 3)){
@@ -88,7 +61,7 @@ READ16_MEMBER(thoop2_state::DS5002FP_R)
static ADDRESS_MAP_START( thoop2_map, AS_PROGRAM, 16, thoop2_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM /* ROM */
- AM_RANGE(0x100000, 0x101fff) AM_RAM_WRITE(thoop2_vram_w) AM_SHARE("videoram") /* Video RAM */
+ AM_RANGE(0x100000, 0x101fff) AM_RAM_WRITE(vram_w) AM_SHARE("videoram") /* Video RAM */
AM_RANGE(0x108000, 0x108007) AM_WRITEONLY AM_SHARE("vregs") /* Video Registers */
AM_RANGE(0x10800c, 0x10800d) AM_WRITE(watchdog_reset16_w) /* INT 6 ACK/Watchdog timer */
AM_RANGE(0x200000, 0x2007ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")/* Palette */
@@ -100,13 +73,19 @@ static ADDRESS_MAP_START( thoop2_map, AS_PROGRAM, 16, thoop2_state )
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SYSTEM")
AM_RANGE(0x70000c, 0x70000d) AM_WRITE(OKIM6295_bankswitch_w) /* OKI6295 bankswitch */
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 data register */
- AM_RANGE(0x70000a, 0x70005b) AM_WRITE(thoop2_coin_w) /* Coin Counters + Coin Lockout */
+ AM_RANGE(0x70000a, 0x70005b) AM_WRITE(coin_w) /* Coin Counters + Coin Lockout */
AM_RANGE(0xfeff00, 0xfeff01) AM_READ(DS5002FP_R)
AM_RANGE(0xfeff02, 0xfeff03) AM_WRITENOP /* pf: 0xfeff02 and 0xfeff03 need to remain zero always */
AM_RANGE(0xfe0000, 0xfeffff) AM_RAM /* Work RAM (partially shared with DS5002FP) */
ADDRESS_MAP_END
+static ADDRESS_MAP_START( oki_map, AS_0, 8, thoop2_state )
+ AM_RANGE(0x00000, 0x2ffff) AM_ROM
+ AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("okibank")
+ADDRESS_MAP_END
+
+
static INPUT_PORTS_START( thoop2 )
PORT_START("DSW1")
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_B ) )
@@ -188,6 +167,37 @@ static INPUT_PORTS_START( thoop2 )
INPUT_PORTS_END
+static const gfx_layout thoop2_tilelayout =
+{
+ 8,8, /* 8x8 tiles */
+ 0x400000/16, /* number of tiles */
+ 4, /* 4 bpp */
+ { 0*0x400000*8+8, 0*0x400000*8, 1*0x400000*8+8, 1*0x400000*8 },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
+ 16*8
+};
+
+static const gfx_layout thoop2_tilelayout_16 =
+{
+ 16,16, /* 16x16 tiles */
+ 0x400000/64, /* number of tiles */
+ 4, /* 4 bpp */
+ { 0*0x400000*8+8, 0*0x400000*8, 1*0x400000*8+8, 1*0x400000*8 },
+ { 0, 1, 2, 3, 4, 5, 6, 7,
+ 16*16+0, 16*16+1, 16*16+2, 16*16+3, 16*16+4, 16*16+5, 16*16+6, 16*16+7 },
+ { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
+ 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
+ 64*8
+};
+
+
+static GFXDECODE_START( thoop2 )
+ GFXDECODE_ENTRY( "gfx1", 0x000000, thoop2_tilelayout, 0, 64 )
+ GFXDECODE_ENTRY( "gfx1", 0x000000, thoop2_tilelayout_16, 0, 64 )
+GFXDECODE_END
+
+
static MACHINE_CONFIG_START( thoop2, thoop2_state )
/* basic machine hardware */
@@ -201,7 +211,7 @@ static MACHINE_CONFIG_START( thoop2, thoop2_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(32*16, 32*16)
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-1)
- MCFG_SCREEN_UPDATE_DRIVER(thoop2_state, screen_update_thoop2)
+ MCFG_SCREEN_UPDATE_DRIVER(thoop2_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", thoop2)
@@ -212,6 +222,7 @@ static MACHINE_CONFIG_START( thoop2, thoop2_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -228,10 +239,9 @@ ROM_START( thoop2 )
ROM_LOAD( "th2-h8.32m", 0x000000, 0x400000, CRC(60328a11) SHA1(fcdb374d2fc7ef5351a4181c471d192199dc2081) )
ROM_LOAD( "th2-h12.32m", 0x400000, 0x400000, CRC(b25c2d3e) SHA1(d70f3e4e2432d80c2ac87cd81208ada303bac04a) )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "th2-c1.080", 0x000000, 0x100000, CRC(8fac8c30) SHA1(8e49bb596144761eae95f3e1266e57fb386664f2) )
- ROM_RELOAD( 0x040000, 0x100000 )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched */
ROM_END
-GAME( 1994, thoop2, 0, thoop2, thoop2, driver_device, 0, ROT0, "Gaelco", "TH Strikes Back", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING )
+GAME( 1994, thoop2, 0, thoop2, thoop2, driver_device, 0, ROT0, "Gaelco", "TH Strikes Back", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/ticalc1x.cpp b/src/mame/drivers/ticalc1x.cpp
index 74d97ffeffb..c8bbdfd0171 100644
--- a/src/mame/drivers/ticalc1x.cpp
+++ b/src/mame/drivers/ticalc1x.cpp
@@ -716,7 +716,7 @@ WRITE16_MEMBER(lilprof78_state::write_r)
UINT16 r = (data & 7) | (data << 1 & 0x1f0);
set_display_segmask(0x1ff, 0x7f);
display_matrix(7, 9, seg, r, false);
-
+
// 3rd digit A/G(equals sign) is from O7
m_display_state[3] = (r != 0 && m_o & 0x80) ? 0x41 : 0;
diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp
index cafc46a7cbc..68cae4eb3ce 100644
--- a/src/mame/drivers/tispeak.cpp
+++ b/src/mame/drivers/tispeak.cpp
@@ -377,7 +377,7 @@ K28 modules:
- Expansion Module 4: VSM: 16KB CM62217
- Expansion Module 5: VSM: 16KB CM62218*
- Expansion Module 6: VSM: 16KB CM62219
-
+
note: these won't work on the 1981 version(s)
----------------------------------------------------------------------------
@@ -431,6 +431,7 @@ public:
virtual DECLARE_INPUT_CHANGED_MEMBER(power_button) override;
void power_off();
void prepare_display();
+ bool vfd_filament_on() { return m_display_decay[15][16] != 0; }
DECLARE_READ8_MEMBER(snspell_read_k);
DECLARE_WRITE16_MEMBER(snmath_write_o);
@@ -540,7 +541,7 @@ DRIVER_INIT_MEMBER(tispeak_state, lantutor)
void tispeak_state::prepare_display()
{
- UINT16 gridmask = (m_display_decay[15][16] != 0) ? 0xffff : 0x8000; // vfd filament on/off
+ UINT16 gridmask = vfd_filament_on() ? 0xffff : 0x8000;
set_display_segmask(0x21ff, 0x3fff);
display_matrix(16+1, 16, m_plate | 1<<16, m_grid & gridmask);
}
@@ -548,7 +549,7 @@ void tispeak_state::prepare_display()
WRITE16_MEMBER(tispeak_state::snspell_write_r)
{
// R13: power-off request, on falling edge
- if ((m_r >> 13 & 1) && !(data >> 13 & 1))
+ if (~data & m_r & 0x2000)
power_off();
// R0-R7: input mux and select digit (+R8 if the device has 9 digits)
@@ -614,7 +615,7 @@ WRITE16_MEMBER(tispeak_state::snspellc_write_r)
m_tms5100->pdc_w(data >> 10);
// R9: power-off request, on falling edge
- if ((m_r >> 9 & 1) && !(data >> 9 & 1))
+ if (~data & m_r & 0x200)
power_off();
// R0-R8: input mux
@@ -681,12 +682,12 @@ WRITE16_MEMBER(tispeak_state::k28_write_r)
// R0: TMS5100 PDC pin
m_tms5100->pdc_w(data & 1);
-
+
// R5: input mux high bit
m_inp_mux = (m_inp_mux & 0xff) | (data << 3 & 0x100);
// R6: power-off request, on falling edge
- if ((m_r >> 6 & 1) && !(data >> 6 & 1))
+ if (~data & m_r & 0x40)
power_off();
// R7-R10: LCD data
diff --git a/src/mame/drivers/tispellb.cpp b/src/mame/drivers/tispellb.cpp
index fcb7b072260..00f581759ef 100644
--- a/src/mame/drivers/tispellb.cpp
+++ b/src/mame/drivers/tispellb.cpp
@@ -83,6 +83,7 @@ public:
virtual DECLARE_INPUT_CHANGED_MEMBER(power_button) override;
void power_off();
void prepare_display();
+ bool vfd_filament_on() { return m_display_decay[15][16] != 0; }
DECLARE_READ8_MEMBER(main_read_k);
DECLARE_WRITE16_MEMBER(main_write_o);
@@ -139,7 +140,7 @@ void tispellb_state::power_off()
void tispellb_state::prepare_display()
{
// almost same as snspell
- UINT16 gridmask = (m_display_decay[15][16] != 0) ? 0xffff : 0x8000; // vfd filament on/off
+ UINT16 gridmask = vfd_filament_on() ? 0xffff : 0x8000;
set_display_segmask(0xff, 0x3fff);
display_matrix(16+1, 16, m_plate | 1<<16, m_grid & gridmask);
}
@@ -154,7 +155,7 @@ WRITE16_MEMBER(tispellb_state::main_write_o)
WRITE16_MEMBER(tispellb_state::main_write_r)
{
// R13: power-off request, on falling edge
- if ((m_r >> 13 & 1) && !(data >> 13 & 1))
+ if (~data & m_r & 0x2000)
power_off();
// R0-R6: input mux
diff --git a/src/mame/drivers/toaplan2.cpp b/src/mame/drivers/toaplan2.cpp
index f0d6ff28817..96b31f8ff24 100644
--- a/src/mame/drivers/toaplan2.cpp
+++ b/src/mame/drivers/toaplan2.cpp
@@ -4545,7 +4545,6 @@ ROM_START( batsugun )
// ROM_LOAD( "tp030_u19_gal16v8b-15.jed", 0x0000, 0x991, CRC(31be54a2) SHA1(06278942a9a2ea858c0352b2ef5a65bf329b7b82) )
ROM_END
-
ROM_START( batsuguna )
ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
ROM_LOAD16_WORD_SWAP( "tp030_01.bin", 0x000000, 0x080000, CRC(3873d7dd) SHA1(baf6187d7d554cfcf4a86b63f07fc30df7ef84c9) )
@@ -4570,6 +4569,38 @@ ROM_START( batsuguna )
ROM_LOAD( "tp030_u19_gal16v8b-15.bin", 0x0000, 0x117, CRC(f71669e8) SHA1(ec1fbe04605fee864af4b01f001af227938c9f21) )
ROM_END
+ROM_START( batsugunb )
+ ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
+ ROM_LOAD16_WORD_SWAP( "large_rom1.bin", 0x000000, 0x080000, CRC(c9de8ed8) SHA1(8de9acd26e83c8ea3388137da528704116aa7bdb) )
+
+ /* Secondary CPU is a Toaplan marked chip, (TS-007-Spy TOA PLAN) */
+ /* It's a NEC V25 (PLCC94) (program uploaded by main CPU) */
+
+ ROM_REGION( 0x400000, "gp9001", 0 )
+ ROM_LOAD16_BYTE( "rom12.bin", 0x000000, 0x080000, CRC(d25affc6) SHA1(00803ae5a2bc06edbfb9ea6e3df51f195bbee8cb) )
+ ROM_LOAD16_BYTE( "rom6.bin", 0x000001, 0x080000, CRC(ddd6df60) SHA1(3b46945c51e7b10b473d98916f075e8def336ce7) )
+ ROM_LOAD16_BYTE( "rom11.bin", 0x100000, 0x080000, CRC(ed72fe3e) SHA1(5c0f4d5cc84b45e1924dacfa4c0b602cc1600b2f) )
+ ROM_LOAD16_BYTE( "rom5.bin", 0x100001, 0x080000, CRC(fd44b33b) SHA1(791cf6056a2dbafa5f41f1dcf686947ee990647d) )
+ ROM_LOAD16_BYTE( "rom10.bin", 0x200000, 0x080000, CRC(86b2c6a9) SHA1(b3f39246012c6cd9df69a6797d56479523b33bcb) )
+ ROM_LOAD16_BYTE( "rom4.bin", 0x200001, 0x080000, CRC(e7c1c623) SHA1(0d8922ce901b5f74f1bd397d5d9c6ab4e918b1d1) )
+ ROM_LOAD16_BYTE( "rom9.bin", 0x300000, 0x080000, CRC(fda8ee00) SHA1(d5ea617a72b2721386eb2dfc15b76de2e30f069c) )
+ ROM_LOAD16_BYTE( "rom3.bin", 0x300001, 0x080000, CRC(a7c4dee8) SHA1(94e2dda067612fac810157f8cf392b685b38798b) )
+
+ ROM_REGION( 0x200000, "gp9001_1", 0 )
+ ROM_LOAD16_BYTE( "rom8.bin", 0x000000, 0x080000, CRC(a2c6a170) SHA1(154048ddc8ca2b4e9617e142d904ad2698b0ad02) )
+ ROM_LOAD16_BYTE( "rom2.bin", 0x000001, 0x080000, CRC(a457e202) SHA1(4a9f2f95c866fc9d40af1c57ce1940f0a6dc1b82) )
+ ROM_LOAD16_BYTE( "rom7.bin", 0x100000, 0x080000, CRC(8644518f) SHA1(570141deeb796cfae57600d5a518d34bb6dc14d0) )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x100001, 0x080000, CRC(8e339897) SHA1(80e84c291f287c0783bddfcb1b7ebf78c154cadc) )
+
+ ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM Samples */
+ ROM_LOAD( "rom13.bin", 0x00000, 0x40000, CRC(276146f5) SHA1(bf11d1f6782cefcad77d52af4f7e6054a8f93440) )
+
+ ROM_REGION( 0x1000, "plds", 0 ) /* Logic for mixing output of both GP9001 GFX controllers */
+ ROM_LOAD( "tp030_u19_gal16v8b-15.bin", 0x0000, 0x117, CRC(f71669e8) SHA1(ec1fbe04605fee864af4b01f001af227938c9f21) )
+// ROM_LOAD( "tp030_u19_gal16v8b-15.jed", 0x0000, 0x991, CRC(31be54a2) SHA1(06278942a9a2ea858c0352b2ef5a65bf329b7b82) )
+ROM_END
+
+
ROM_START( batsugunsp )
ROM_REGION( 0x080000, "maincpu", 0 ) /* Main 68K code */
@@ -5137,7 +5168,7 @@ ROM_START( batriderk )
ROM_LOAD( "rom-6.bin", 0x040000, 0x100000, CRC(2a1c2426) SHA1(8abc3688ffc5ebb94b8d5118d4fa0908f07fe791) )
ROM_END
-/* older version, might have only been released in Japan and Taiwan? */
+/* older version, might have only been released in Japan, Hong Kong and Taiwan? */
ROM_START( batriderja )
ROM_REGION( 0x200000, "maincpu", 0 ) /* Main 68k code */
ROM_LOAD16_BYTE( "prg0.bin", 0x000000, 0x080000, CRC(f93ea27c) SHA1(41023c2ee1efd70b5aa9c70e1ddd9e5c3d51d68a) )
@@ -5162,6 +5193,30 @@ ROM_START( batriderja )
ROM_END
+ROM_START( batriderhk )
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* Main 68k code */
+ ROM_LOAD16_BYTE( "prg0.u22", 0x000000, 0x080000, CRC(00afbb7c) SHA1(a4b6331e0fcab7d0c43fc43adb701f1248247b41) )
+ ROM_LOAD16_BYTE( "prg1.u23", 0x000001, 0x080000, CRC(8ae7f592) SHA1(8a20ebf85eca621f578d2302c3a3988647b077a7) )
+ ROM_LOAD16_BYTE( "prg2.u21", 0x100000, 0x080000, CRC(bdaa5fbf) SHA1(abd72ac633c0c8e7b4b1d7902c0d6e014ba995fe) )
+ ROM_LOAD16_BYTE( "prg3.u24", 0x100001, 0x080000, CRC(7aa9f941) SHA1(99bdbad7a96d461073b06a53c50fc57c2fd6fc6d) )
+
+ ROM_REGION( 0x40000, "audiocpu", 0 ) /* Sound Z80 code + bank */
+ ROM_LOAD( "snd.u77", 0x00000, 0x40000, CRC(56682696) SHA1(a372450d9a6d535123dfc31d8116074b168ab646) )
+
+ ROM_REGION( 0x1000000, "gp9001", 0 )
+ ROM_LOAD( "rom-1.bin", 0x000000, 0x400000, CRC(0df69ca2) SHA1(49670347ebd7e1067ff988cf842b275b7ee7b5f7) )
+ ROM_LOAD( "rom-3.bin", 0x400000, 0x400000, CRC(60167d38) SHA1(fd2429808c59ef51fd5f5db84ea89a8dc504186e) )
+ ROM_LOAD( "rom-2.bin", 0x800000, 0x400000, CRC(1bfea593) SHA1(ce06dc3097ae56b0df56d104bbf7efc9b5d968d4) )
+ ROM_LOAD( "rom-4.bin", 0xc00000, 0x400000, CRC(bee03c94) SHA1(5bc1e6769c42857c03456426b502fcb86a114f19) )
+
+ ROM_REGION( 0x140000, "oki1", 0 ) /* ADPCM Samples 1 */
+ ROM_LOAD( "rom-5.bin", 0x040000, 0x100000, CRC(4274daf6) SHA1(85557b4707d529e5914f03c7a856864f5c24950e) )
+
+ ROM_REGION( 0x140000, "oki2", 0 ) /* ADPCM Samples 2 */
+ ROM_LOAD( "rom-6.bin", 0x040000, 0x100000, CRC(2a1c2426) SHA1(8abc3688ffc5ebb94b8d5118d4fa0908f07fe791) )
+ROM_END
+
+
ROM_START( batridert )
ROM_REGION( 0x200000, "maincpu", 0 ) /* Main 68k code */
ROM_LOAD16_BYTE( "u22.bin", 0x000000, 0x080000, CRC(b135820e) SHA1(c222887d18a0a3ea0fcc973b95b29d69c86f7ec3) )
@@ -5392,6 +5447,7 @@ GAME( 1993, vfive, grindstm, vfive, vfive, toaplan2_state, vfive,
GAME( 1993, batsugun, 0, batsugun, batsugun, toaplan2_state, dogyuun, ROT270, "Toaplan", "Batsugun", MACHINE_SUPPORTS_SAVE )
GAME( 1993, batsuguna, batsugun, batsugun, batsugun, toaplan2_state, dogyuun, ROT270, "Toaplan", "Batsugun (older set)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, batsugunb, batsugun, batsugun, batsugun, toaplan2_state, dogyuun, ROT270, "Toaplan", "Batsugun (Korean PCB)", MACHINE_SUPPORTS_SAVE ) // cheap looking PCB (same 'TP-030' numbering as original) but without Mask ROMs. Still has original customs etc. Jumpers were set to the Korea Unite Trading license, so likely made in Korea, not a bootleg tho.
GAME( 1993, batsugunsp, batsugun, batsugun, batsugun, toaplan2_state, dogyuun, ROT270, "Toaplan", "Batsugun - Special Version", MACHINE_SUPPORTS_SAVE )
GAME( 1994, pwrkick, 0, pwrkick, pwrkick, driver_device, 0, ROT0, "Sunwise", "Power Kick (Japan)", 0 )
@@ -5424,6 +5480,7 @@ GAME( 1998, batriderj, batrider, batrider, batriderj, toaplan2_state, batrider,
GAME( 1998, batriderk, batrider, batrider, batrider, toaplan2_state, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Korea) (Fri Feb 13 1998)", MACHINE_SUPPORTS_SAVE )
// older revision of the code
GAME( 1998, batriderja, batrider, batrider, batriderj, toaplan2_state, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Japan, older version) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, batriderhk, batrider, batrider, batrider, toaplan2_state, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Hong Kong) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
GAME( 1998, batridert, batrider, batrider, batrider, toaplan2_state, batrider, ROT270, "Raizing / Eighting", "Armed Police Batrider (Taiwan) (Mon Dec 22 1997)", MACHINE_SUPPORTS_SAVE )
// Battle Bakraid
diff --git a/src/mame/drivers/vastar.cpp b/src/mame/drivers/vastar.cpp
index f2f5b40fd54..fb8a8cb8b8e 100644
--- a/src/mame/drivers/vastar.cpp
+++ b/src/mame/drivers/vastar.cpp
@@ -65,16 +65,18 @@ write:
/*
-Planet Probe - unknown manufacture - Copyright 1985
-Game probably programmed by same people behind some Kyugo/Orca/Komax games (see hiscore table, Gyrodine pinout, clocks etc.)
+Planet Probe - TRY Corporation? - Copyright 1985
+Game probably programmed by same people behind some Kyugo/Orca/Komax/Crux games (see hiscore table, Gyrodine pinout, clocks etc.)
Upper board marked DVL/A-V
Bottom Bord DVL/B-V
-The pcb seems a bootleg/prototype:
+The PCB seems to be a bootleg/prototype:
On the upper board there are some pads for jumpers , some empty spaces left unpopulated for additional TTLs and an XTAL.
All 5 sockets for 2732 eproms were modified to accept 2764 eproms.
The AY8910 pin 26 (TEST 2) is grounded with a flying wire
+Lack of manufacturer on title/copyright screen (there is room in the ROM - 15 characters - after the year string for a copyright message,
+ however it is filled with the 'string termination' character rather than a string.)
Upper board chips:
5x 2764 eproms
diff --git a/src/mame/drivers/viper.cpp b/src/mame/drivers/viper.cpp
index a0ab486f11e..d4a3210a1a4 100644
--- a/src/mame/drivers/viper.cpp
+++ b/src/mame/drivers/viper.cpp
@@ -2023,11 +2023,11 @@ WRITE64_MEMBER(viper_state::unk_serial_w)
if (m_unk_serial_bit_w == 8)
{
- if ((m_unk_serial_cmd & 0x80) == 0) // register read
+ if ((m_unk_serial_cmd & 0x80) == 0) // register read
{
int reg = m_unk_serial_cmd & 0x7f;
UINT8 data = m_unk_serial_regs[reg];
-
+
m_unk_serial_data_r = ((data & 0x1) << 7) | ((data & 0x2) << 5) | ((data & 0x4) << 3) | ((data & 0x8) << 1) | ((data & 0x10) >> 1) | ((data & 0x20) >> 3) | ((data & 0x40) >> 5) | ((data & 0x80) >> 7);
printf("unk_serial read reg %02X: %04X\n", reg, data);
@@ -2035,7 +2035,7 @@ WRITE64_MEMBER(viper_state::unk_serial_w)
}
if (m_unk_serial_bit_w == 16)
{
- if (m_unk_serial_cmd & 0x80) // register write
+ if (m_unk_serial_cmd & 0x80) // register write
{
int reg = m_unk_serial_cmd & 0x7f;
m_unk_serial_regs[reg] = m_unk_serial_data;
@@ -2334,6 +2334,7 @@ ROM_START(gticlub2ea) //*
DISK_IMAGE( "941a02", 0, NO_DUMP )
ROM_END
+/* This CF card has sticker B41C02 */
ROM_START(jpark3) //*
VIPER_BIOS
@@ -2347,6 +2348,20 @@ ROM_START(jpark3) //*
DISK_IMAGE( "b41c02", 0, SHA1(fb6b0b43a6f818041d644bcd711f6a727348d3aa) )
ROM_END
+/* This CF card has sticker B41C02 */
+ROM_START(jpark3u) //*
+ VIPER_BIOS
+
+ ROM_REGION(0x28, "ds2430", ROMREGION_ERASE00) /* DS2430 */
+ ROM_LOAD("ds2430.u3", 0x00, 0x28, CRC(f1511505) SHA1(ed7cd9b2763b3e377df9663943160f9871f65105))
+
+ ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
+ ROM_LOAD("b41 ua rtc.u39", 0x00000, 0x1ff8, CRC(75fdda39) SHA1(6292ce0d32afdf6bde33ac7f1f07655fa17282f6))
+
+ DISK_REGION( "ata:0:hdd:image" )
+ DISK_IMAGE( "b41c02", 0, SHA1(fb6b0b43a6f818041d644bcd711f6a727348d3aa) )
+ROM_END
+
/* This CF card has sticker B33A02 */
ROM_START(mocapglf) //*
VIPER_BIOS
@@ -2523,7 +2538,7 @@ ROM_START(sscopefh)
VIPER_BIOS
ROM_REGION(0x28, "ds2430", ROMREGION_ERASE00) /* DS2430 */
-
+
ROM_REGION(0x2000, "m48t58", ROMREGION_ERASE00) /* M48T58 Timekeeper NVRAM */
DISK_REGION( "ata:0:hdd:image" )
@@ -2557,7 +2572,7 @@ ROM_START(thrild2a) //*
DISK_IMAGE( "a41a02", 0, SHA1(bbb71e23bddfa07dfa30b6565a35befd82b055b8) )
ROM_END
-ROM_START(thrild2ab)
+ROM_START(thrild2ab)
VIPER_BIOS
ROM_REGION(0x28, "ds2430", ROMREGION_ERASE00) /* DS2430 */
@@ -2570,7 +2585,7 @@ ROM_START(thrild2ab)
DISK_IMAGE( "a41a02_alt", 0, SHA1(7a9cfdab7000765ffdd9198b209f7a74741248f2) )
ROM_END
-ROM_START(thrild2ac)
+ROM_START(thrild2ac)
VIPER_BIOS
ROM_REGION(0x28, "ds2430", ROMREGION_ERASE00) /* DS2430 */
@@ -2803,6 +2818,7 @@ GAME(2000, code1db, code1d, viper, viper, viper_state, vipercf, ROT0, "Ko
GAME(2001, gticlub2, kviper, viper, viper, viper_state, vipercf, ROT0, "Konami", "GTI Club 2 (ver JAB)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
GAME(2001, gticlub2ea,gticlub2, viper, viper, viper_state, vipercf, ROT0, "Konami", "GTI Club 2 (ver EAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
GAME(2001, jpark3, kviper, viper, viper, viper_state, vipercf, ROT0, "Konami", "Jurassic Park 3 (ver EBC)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
+GAME(2001, jpark3u, jpark3, viper, viper, viper_state, vipercf, ROT0, "Konami", "Jurassic Park 3 (ver UA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
GAME(2001, mocapglf, kviper, viper, viper, viper_state, vipercf, ROT0, "Konami", "Mocap Golf (ver UAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
GAME(2001, mocapb, kviper, viper, viper, viper_state, vipercf, ROT90, "Konami", "Mocap Boxing (ver AAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
GAME(2001, mocapbj, mocapb, viper, viper, viper_state, vipercf, ROT90, "Konami", "Mocap Boxing (ver JAA)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND)
diff --git a/src/mame/drivers/vt100.cpp b/src/mame/drivers/vt100.cpp
index 810587b7c46..3561394bfbe 100644
--- a/src/mame/drivers/vt100.cpp
+++ b/src/mame/drivers/vt100.cpp
@@ -424,7 +424,7 @@ static MACHINE_CONFIG_START( vt100, vt100_state )
MCFG_VT_VIDEO_RAM_CALLBACK(READ8(vt100_state, vt100_read_video_ram_r))
MCFG_VT_VIDEO_CLEAR_VIDEO_INTERRUPT_CALLBACK(WRITELINE(vt100_state, vt100_clear_video_interrupt))
- MCFG_DEVICE_ADD("i8251", I8251, 0)
+ MCFG_DEVICE_ADD("i8251", I8251, 0) // 2.7648Mhz phi-clock (not used for tx clock or rx clock?)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd))
MCFG_I8251_DTR_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr))
MCFG_I8251_RTS_HANDLER(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts))
@@ -433,7 +433,7 @@ static MACHINE_CONFIG_START( vt100, vt100_state )
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("i8251", i8251_device, write_rxd))
MCFG_RS232_DSR_HANDLER(DEVWRITELINE("i8251", i8251_device, write_dsr))
- MCFG_DEVICE_ADD(COM5016T_TAG, COM8116, XTAL_5_0688MHz)
+ MCFG_DEVICE_ADD(COM5016T_TAG, COM8116, XTAL_5_0688MHz/*XTAL_24_8832MHz / 9*/) // COM5016T-013, 2.7648Mhz Clock, currently hacked wrongly
MCFG_COM8116_FR_HANDLER(DEVWRITELINE("i8251", i8251_device, write_rxc))
MCFG_COM8116_FT_HANDLER(DEVWRITELINE("i8251", i8251_device, write_txc))
diff --git a/src/mame/drivers/wildpkr.cpp b/src/mame/drivers/wildpkr.cpp
index 546df6a94b5..126b331d52a 100644
--- a/src/mame/drivers/wildpkr.cpp
+++ b/src/mame/drivers/wildpkr.cpp
@@ -26,7 +26,7 @@
- 1x D8751H ; 8751 MCU (3.6864 MHz?)
Sound device:
- - 1x AY8930 ; Sound IC, from Yamaha.
+ - 1x AY8930 ; Sound IC, from Microchip Technology.
Video:
- 1x HD63484CP8 @ 8MHz ; Advanced CRT Controller (ACRTC), from Hitachi Semiconductor.
@@ -158,6 +158,7 @@
#define MAIN_CLOCK XTAL_12MHz
+#define AY_CLOCK MAIN_CLOCK / 8
#define SEC_CLOCK XTAL_3.6864MHz
#define AUX1_CLOCK XTAL_26MHz
#define AUX2_CLOCK XTAL_24MHz
@@ -166,6 +167,7 @@
#include "cpu/m68000/m68000.h"
//#include "video/hd63484.h"
#include "video/ramdac.h"
+#include "sound/ay8910.h"
class wildpkr_state : public driver_device
@@ -173,14 +175,16 @@ class wildpkr_state : public driver_device
public:
wildpkr_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu") { }
+ m_maincpu(*this, "maincpu")
+ { }
+
+ required_device<cpu_device> m_maincpu;
DECLARE_DRIVER_INIT(wildpkr);
virtual void machine_start() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(wildpkr);
UINT32 screen_update_wildpkr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- required_device<cpu_device> m_maincpu;
};
@@ -220,7 +224,8 @@ static ADDRESS_MAP_START( wildpkr_map, AS_PROGRAM, 16, wildpkr_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
// AM_RANGE(0x800000, 0x800003) ACRTC?
- AM_RANGE(0x800180, 0x800181) AM_READNOP // protection, puts m68k code snippets to RAM
+ AM_RANGE(0x800180, 0x800181) AM_DEVWRITE8("aysnd", ay8930_device, address_w, 0xff00)
+ AM_RANGE(0x800180, 0x800181) AM_DEVREADWRITE8("aysnd", ay8930_device, data_r, data_w, 0x00ff)
AM_RANGE(0x800200, 0x800201) AM_DEVWRITE8("ramdac", ramdac_device, index_w, 0xff00)
AM_RANGE(0x800202, 0x800203) AM_DEVWRITE8("ramdac", ramdac_device, pal_w, 0xff00)
AM_RANGE(0x800204, 0x800205) AM_DEVWRITE8("ramdac", ramdac_device, mask_w, 0xff00)
@@ -283,8 +288,7 @@ static MACHINE_CONFIG_START( wildpkr, wildpkr_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, MAIN_CLOCK)
MCFG_CPU_PROGRAM_MAP(wildpkr_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", wildpkr_state, irq1_line_hold) //guess
-
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", wildpkr_state, irq2_line_hold) // guess
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -300,6 +304,10 @@ static MACHINE_CONFIG_START( wildpkr, wildpkr_state )
MCFG_PALETTE_ADD("palette", 256)
MCFG_PALETTE_INIT_OWNER(wildpkr_state, wildpkr)
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("aysnd", AY8930, AY_CLOCK)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_CONFIG_END
@@ -308,8 +316,7 @@ static MACHINE_CONFIG_START( tabpkr, wildpkr_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, XTAL_24MHz / 2)
MCFG_CPU_PROGRAM_MAP(tabpkr_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", wildpkr_state, irq2_line_hold) // 2 / 5 are valid
-
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", wildpkr_state, irq2_line_hold) // 2 / 5 are valid
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/wrally.cpp b/src/mame/drivers/wrally.cpp
index c6af288a8eb..09f236cded1 100644
--- a/src/mame/drivers/wrally.cpp
+++ b/src/mame/drivers/wrally.cpp
@@ -123,8 +123,8 @@ static ADDRESS_MAP_START( wrally_map, AS_PROGRAM, 16, wrally_state )
AM_RANGE(0x700008, 0x700009) AM_READ_PORT("SYSTEM")
AM_RANGE(0x70000c, 0x70000d) AM_WRITE(okim6295_bankswitch_w) /* OKI6295 bankswitch */
AM_RANGE(0x70000e, 0x70000f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) /* OKI6295 status/data register */
- AM_RANGE(0x70000a, 0x70001b) AM_WRITE(wrally_coin_lockout_w) /* Coin lockouts */
- AM_RANGE(0x70002a, 0x70003b) AM_WRITE(wrally_coin_counter_w) /* Coin counters */
+ AM_RANGE(0x70000a, 0x70001b) AM_WRITE(coin_lockout_w) /* Coin lockouts */
+ AM_RANGE(0x70002a, 0x70003b) AM_WRITE(coin_counter_w) /* Coin counters */
AM_RANGE(0x70004a, 0x70004b) AM_WRITENOP /* Sound muting */
AM_RANGE(0x70005a, 0x70005b) AM_WRITE(flipscreen_w) /* Flip screen */
AM_RANGE(0x70006a, 0x70007b) AM_WRITENOP /* ??? */
@@ -153,6 +153,11 @@ static ADDRESS_MAP_START( dallas_ram, AS_IO, 8, wrally_state )
AM_RANGE(0x0000, 0xffff) AM_READWRITE(dallas_share_r, dallas_share_w) AM_MASK(0x3fff) /* Shared RAM with the main CPU */
ADDRESS_MAP_END
+static ADDRESS_MAP_START( oki_map, AS_0, 8, wrally_state )
+ AM_RANGE(0x00000, 0x2ffff) AM_ROM
+ AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("okibank")
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( wrally )
PORT_START("DSW")
PORT_DIPNAME( 0x0003, 0x0003, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:8,7")
@@ -276,6 +281,7 @@ static MACHINE_CONFIG_START( wrally, wrally_state )
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_OKIM6295_ADD("oki", XTAL_1MHz, OKIM6295_PIN7_HIGH) /* verified on pcb */
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -294,11 +300,10 @@ ROM_START( wrally )
ROM_LOAD16_BYTE( "worldr19.i09", 0x100000, 0x080000, CRC(018b35bb) SHA1(ca789e23d18cc7d7e48b6858e6b61e03bf88b475) )
ROM_LOAD16_BYTE( "worldr18.i07", 0x100001, 0x080000, CRC(b37c807e) SHA1(9e6155a2b5206c0d4dca669d24d9fe9830027651) )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "worldr14.c01", 0x000000, 0x080000, CRC(e931c2ee) SHA1(ea1cf8ad52713e5136a370e289567eea9e6403d6) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x080000 )
- ROM_LOAD( "worldr15.c03", 0x0c0000, 0x080000, CRC(11f0fe2c) SHA1(96c2a04874fa036576b7cfc5559bb0e33582ffd2) )
+ ROM_LOAD( "worldr15.c03", 0x080000, 0x080000, CRC(11f0fe2c) SHA1(96c2a04874fa036576b7cfc5559bb0e33582ffd2) )
ROM_REGION( 0x0514, "plds", 0 ) /* PAL's and GAL's */
ROM_LOAD( "tibpal20l8-25cnt.b23", 0x0000, 0x0104, NO_DUMP )
@@ -322,11 +327,10 @@ ROM_START( wrallya )
ROM_LOAD16_BYTE( "worldr19.i09", 0x100000, 0x080000, CRC(018b35bb) SHA1(ca789e23d18cc7d7e48b6858e6b61e03bf88b475) )
ROM_LOAD16_BYTE( "worldr18.i07", 0x100001, 0x080000, CRC(b37c807e) SHA1(9e6155a2b5206c0d4dca669d24d9fe9830027651) )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "worldr14.c01", 0x000000, 0x080000, CRC(e931c2ee) SHA1(ea1cf8ad52713e5136a370e289567eea9e6403d6) )
/* 0x00000-0x2ffff is fixed, 0x30000-0x3ffff is bank switched from all the ROMs */
- ROM_RELOAD( 0x040000, 0x080000 )
- ROM_LOAD( "worldr15.c03", 0x0c0000, 0x080000, CRC(11f0fe2c) SHA1(96c2a04874fa036576b7cfc5559bb0e33582ffd2) )
+ ROM_LOAD( "worldr15.c03", 0x080000, 0x080000, CRC(11f0fe2c) SHA1(96c2a04874fa036576b7cfc5559bb0e33582ffd2) )
ROM_REGION( 0x0514, "plds", 0 ) /* PAL's and GAL's */
ROM_LOAD( "tibpal20l8-25cnt.b23", 0x0000, 0x0104, NO_DUMP )
@@ -348,9 +352,8 @@ ROM_START( wrallyb )
ROM_LOAD( "rally h-12.h12", 0x000000, 0x100000, CRC(3353dc00) SHA1(db3b1686751dcaa231d66c08b5be81fcfe299ad9) ) /* Same data, different layout */
ROM_LOAD( "rally h-8.h8", 0x100000, 0x100000, CRC(58dcd024) SHA1(384ff296d3c7c8e0c4469231d1940de3cea89fc2) )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "sound c-1.c1", 0x000000, 0x100000, CRC(2d69c9b8) SHA1(328cb3c928dc6921c0c3f0277f59bca6c747c504) ) /* Same data in a single rom */
- ROM_RELOAD( 0x040000, 0x100000 )
ROM_REGION( 0x0514, "plds", 0 ) /* PAL's and GAL's */
ROM_LOAD( "tibpal20l8-25cnt.b23", 0x0000, 0x0104, NO_DUMP )
@@ -372,9 +375,8 @@ ROM_START( wrallyat ) /* Board Marked 930217, Atari License */
ROM_LOAD( "rally h-12.h12", 0x000000, 0x100000, CRC(3353dc00) SHA1(db3b1686751dcaa231d66c08b5be81fcfe299ad9) ) /* Same data, different layout */
ROM_LOAD( "rally h-8.h8", 0x100000, 0x100000, CRC(58dcd024) SHA1(384ff296d3c7c8e0c4469231d1940de3cea89fc2) )
- ROM_REGION( 0x140000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
+ ROM_REGION( 0x100000, "oki", 0 ) /* ADPCM samples - sound chip is OKIM6295 */
ROM_LOAD( "sound c-1.c1", 0x000000, 0x100000, CRC(2d69c9b8) SHA1(328cb3c928dc6921c0c3f0277f59bca6c747c504) ) /* Same data in a single rom */
- ROM_RELOAD( 0x040000, 0x100000 )
ROM_REGION( 0x0514, "plds", 0 ) /* PAL's and GAL's */
ROM_LOAD( "tibpal20l8-25cnt.b23", 0x0000, 0x0104, NO_DUMP )
diff --git a/src/mame/includes/at.h b/src/mame/includes/at.h
deleted file mode 100644
index 7d1d8e84d4b..00000000000
--- a/src/mame/includes/at.h
+++ /dev/null
@@ -1,198 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Wilbert Pol, Miodrag Milanovic
-/*****************************************************************************
- *
- * includes/at.h
- *
- * IBM AT Compatibles
- *
- ****************************************************************************/
-
-#ifndef AT_H_
-#define AT_H_
-
-#include "emu.h"
-#include "cpu/i86/i86.h"
-#include "cpu/i86/i286.h"
-#include "cpu/i386/i386.h"
-
-#include "machine/ins8250.h"
-#include "machine/mc146818.h"
-#include "machine/ds128x.h"
-#include "machine/pic8259.h"
-#include "bus/lpci/i82371ab.h"
-#include "bus/lpci/i82371sb.h"
-#include "bus/lpci/i82439tx.h"
-#include "bus/lpci/vt82c505.h"
-#include "machine/vt82c496.h"
-#include "machine/cs8221.h"
-#include "machine/pit8253.h"
-#include "machine/wd7600.h"
-
-#include "machine/idectrl.h"
-#include "machine/at_keybc.h"
-
-#include "imagedev/harddriv.h"
-#include "machine/am9517a.h"
-#include "bus/lpci/pci.h"
-
-#include "sound/dac.h"
-#include "sound/speaker.h"
-#include "machine/ram.h"
-#include "machine/nvram.h"
-#include "bus/isa/isa.h"
-#include "bus/isa/isa_cards.h"
-
-#include "machine/pc_lpt.h"
-#include "bus/pc_kbd/pc_kbdc.h"
-
-
-class at586_state : public driver_device
-{
-public:
- at586_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu") { }
- required_device<cpu_device> m_maincpu;
-
- DECLARE_DRIVER_INIT(at586);
-};
-
-class at_state : public driver_device
-{
-public:
- at_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_pic8259_master(*this, "pic8259_master"),
- m_pic8259_slave(*this, "pic8259_slave"),
- m_dma8237_1(*this, "dma8237_1"),
- m_dma8237_2(*this, "dma8237_2"),
- m_pit8254(*this, "pit8254"),
- m_cs8221(*this, "cs8221"),
- m_ide(*this, "ide"),
- m_keybc(*this, "keybc"),
- m_isabus(*this, "isabus"),
- m_speaker(*this, "speaker"),
- m_ram(*this, RAM_TAG),
- m_mc146818(*this, "rtc"),
- m_pc_kbdc(*this, "pc_kbdc")
- { }
-
- required_device<cpu_device> m_maincpu;
- optional_device<pic8259_device> m_pic8259_master;
- optional_device<pic8259_device> m_pic8259_slave;
- optional_device<am9517a_device> m_dma8237_1;
- optional_device<am9517a_device> m_dma8237_2;
- optional_device<pit8254_device> m_pit8254;
- optional_device<cs8221_device> m_cs8221;
- optional_device<ide_controller_device> m_ide;
- optional_device<at_keyboard_controller_device> m_keybc;
- optional_device<isa16_device> m_isabus;
- required_device<speaker_sound_device> m_speaker;
- optional_device<ram_device> m_ram;
- optional_device<mc146818_device> m_mc146818;
- optional_device<pc_kbdc_device> m_pc_kbdc;
- DECLARE_READ8_MEMBER(at_page8_r);
- DECLARE_WRITE8_MEMBER(at_page8_w);
- DECLARE_READ8_MEMBER(at_portb_r);
- DECLARE_WRITE8_MEMBER(at_portb_w);
- DECLARE_READ8_MEMBER(ps2_portb_r);
- DECLARE_READ8_MEMBER(get_slave_ack);
- DECLARE_WRITE_LINE_MEMBER(at_pit8254_out0_changed);
- DECLARE_WRITE_LINE_MEMBER(at_pit8254_out2_changed);
- DECLARE_WRITE_LINE_MEMBER(pc_dma_hrq_changed);
- DECLARE_READ8_MEMBER(pc_dma8237_0_dack_r);
- DECLARE_READ8_MEMBER(pc_dma8237_1_dack_r);
- DECLARE_READ8_MEMBER(pc_dma8237_2_dack_r);
- DECLARE_READ8_MEMBER(pc_dma8237_3_dack_r);
- DECLARE_READ8_MEMBER(pc_dma8237_5_dack_r);
- DECLARE_READ8_MEMBER(pc_dma8237_6_dack_r);
- DECLARE_READ8_MEMBER(pc_dma8237_7_dack_r);
- DECLARE_WRITE8_MEMBER(pc_dma8237_0_dack_w);
- DECLARE_WRITE8_MEMBER(pc_dma8237_1_dack_w);
- DECLARE_WRITE8_MEMBER(pc_dma8237_2_dack_w);
- DECLARE_WRITE8_MEMBER(pc_dma8237_3_dack_w);
- DECLARE_WRITE8_MEMBER(pc_dma8237_5_dack_w);
- DECLARE_WRITE8_MEMBER(pc_dma8237_6_dack_w);
- DECLARE_WRITE8_MEMBER(pc_dma8237_7_dack_w);
- DECLARE_WRITE_LINE_MEMBER(at_dma8237_out_eop);
- DECLARE_WRITE_LINE_MEMBER(pc_dack0_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack1_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack2_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack3_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack4_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack5_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack6_w);
- DECLARE_WRITE_LINE_MEMBER(pc_dack7_w);
- DECLARE_READ8_MEMBER(at_dma8237_2_r);
- DECLARE_WRITE8_MEMBER(at_dma8237_2_w);
- DECLARE_READ8_MEMBER(at_keybc_r);
- DECLARE_WRITE8_MEMBER(at_keybc_w);
- DECLARE_READ16_MEMBER(neat_chipset_r);
- DECLARE_WRITE16_MEMBER(neat_chipset_w);
- DECLARE_WRITE_LINE_MEMBER(at_mc146818_irq);
- DECLARE_WRITE8_MEMBER(write_rtc);
- UINT8 m_at_spkrdata;
- UINT8 m_pit_out2;
- int m_dma_channel;
- bool m_cur_eop;
- UINT8 m_dma_offset[2][4];
- UINT8 m_at_pages[0x10];
- UINT16 m_dma_high_byte;
- UINT8 m_at_speaker;
- UINT16 m_ps1_reg[2];
- DECLARE_READ16_MEMBER(ps1_unk_r);
- DECLARE_WRITE16_MEMBER(ps1_unk_w);
- DECLARE_READ8_MEMBER(ps1_kbdc_r);
-
- void at_speaker_set_spkrdata(UINT8 data);
- DECLARE_WRITE_LINE_MEMBER(at_shutdown);
-
- UINT8 m_channel_check;
- UINT8 m_nmi_enabled;
- DECLARE_READ8_MEMBER(pc_dma_read_byte);
- DECLARE_WRITE8_MEMBER(pc_dma_write_byte);
- DECLARE_READ8_MEMBER(pc_dma_read_word);
- DECLARE_WRITE8_MEMBER(pc_dma_write_word);
-
- DECLARE_DRIVER_INIT(atcga);
- DECLARE_DRIVER_INIT(atvga);
- DECLARE_DRIVER_INIT(megapcpla);
- DECLARE_DRIVER_INIT(atpci);
- DECLARE_MACHINE_START(at);
- DECLARE_MACHINE_RESET(at);
- void pc_set_dma_channel(int channel, int state);
- void init_at_common(int xmsbase);
- UINT32 at_286_a20(bool state);
-};
-
-class megapc_state : public driver_device
-{
-public:
- megapc_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_wd7600(*this, "wd7600"),
- m_isabus(*this, "isabus"),
- m_speaker(*this, "speaker")
- { }
-
-public:
- required_device<cpu_device> m_maincpu;
- required_device<wd7600_device> m_wd7600;
- required_device<isa16_device> m_isabus;
- required_device<speaker_sound_device> m_speaker;
-
- DECLARE_DRIVER_INIT(megapc);
- DECLARE_DRIVER_INIT(megapcpl);
-
- DECLARE_READ16_MEMBER( wd7600_ior );
- DECLARE_WRITE16_MEMBER( wd7600_iow );
- DECLARE_WRITE_LINE_MEMBER( wd7600_hold );
- DECLARE_WRITE8_MEMBER( wd7600_tc ) { m_isabus->eop_w(offset, data); }
- DECLARE_WRITE_LINE_MEMBER( wd7600_spkr ) { m_speaker->level_w(state); }
-};
-
-
-#endif /* AT_H_ */
diff --git a/src/mame/includes/blmbycar.h b/src/mame/includes/blmbycar.h
index af7b6f120f4..4abc3c4f64c 100644
--- a/src/mame/includes/blmbycar.h
+++ b/src/mame/includes/blmbycar.h
@@ -64,7 +64,7 @@ public:
DECLARE_MACHINE_RESET(blmbycar);
DECLARE_MACHINE_START(watrball);
DECLARE_MACHINE_RESET(watrball);
-
+
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
};
diff --git a/src/mame/includes/finalizr.h b/src/mame/includes/finalizr.h
index b308af73ad5..08d765c428e 100644
--- a/src/mame/includes/finalizr.h
+++ b/src/mame/includes/finalizr.h
@@ -57,7 +57,6 @@ public:
DECLARE_READ8_MEMBER(i8039_T1_r);
DECLARE_WRITE8_MEMBER(i8039_T0_w);
DECLARE_WRITE8_MEMBER(finalizr_videoctrl_w);
- DECLARE_DRIVER_INIT(finalizr);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
virtual void machine_start() override;
diff --git a/src/mame/includes/gaelco.h b/src/mame/includes/gaelco.h
index ea275b50248..57c1478304b 100644
--- a/src/mame/includes/gaelco.h
+++ b/src/mame/includes/gaelco.h
@@ -11,14 +11,20 @@ class gaelco_state : public driver_device
public:
gaelco_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette"),
+ m_audiocpu(*this, "audiocpu"),
m_videoram(*this, "videoram"),
m_vregs(*this, "vregs"),
m_spriteram(*this, "spriteram"),
- m_screenram(*this, "screenram"),
- m_audiocpu(*this, "audiocpu"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_screenram(*this, "screenram") { }
+
+ /* devices */
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+ optional_device<cpu_device> m_audiocpu;
/* memory pointers */
required_shared_ptr<UINT16> m_videoram;
@@ -29,8 +35,6 @@ public:
/* video-related */
tilemap_t *m_tilemap[2];
- /* devices */
- optional_device<cpu_device> m_audiocpu;
DECLARE_WRITE16_MEMBER(bigkarnk_sound_command_w);
DECLARE_WRITE16_MEMBER(bigkarnk_coin_w);
DECLARE_WRITE16_MEMBER(OKIM6295_bankswitch_w);
@@ -39,15 +43,15 @@ public:
DECLARE_WRITE16_MEMBER(thoop_vram_encrypted_w);
DECLARE_WRITE16_MEMBER(thoop_encrypted_w);
DECLARE_WRITE16_MEMBER(gaelco_vram_w);
+
TILE_GET_INFO_MEMBER(get_tile_info_gaelco_screen0);
TILE_GET_INFO_MEMBER(get_tile_info_gaelco_screen1);
+
virtual void machine_start() override;
DECLARE_VIDEO_START(bigkarnk);
DECLARE_VIDEO_START(maniacsq);
+
UINT32 screen_update_bigkarnk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_maniacsq(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
};
diff --git a/src/mame/includes/glass.h b/src/mame/includes/glass.h
index a3ae64203f5..f00434e7201 100644
--- a/src/mame/includes/glass.h
+++ b/src/mame/includes/glass.h
@@ -18,7 +18,7 @@ public:
m_vregs(*this, "vregs"),
m_spriteram(*this, "spriteram"),
m_mainram(*this, "mainram") { }
-
+
/* devices */
required_device<cpu_device> m_maincpu;
@@ -54,7 +54,7 @@ public:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
-
+
TILE_GET_INFO_MEMBER(get_tile_info_screen0);
TILE_GET_INFO_MEMBER(get_tile_info_screen1);
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/includes/m5.h b/src/mame/includes/m5.h
index 9b5d82b0c00..16e346889e3 100644
--- a/src/mame/includes/m5.h
+++ b/src/mame/includes/m5.h
@@ -20,7 +20,7 @@
#define SCREEN_TAG "screen"
//brno mod
#define WD2797_TAG "5f"
-#define RAMDISK "ramdisk"
+#define RAMDISK "ramdisk"
class m5_state : public driver_device
@@ -96,7 +96,7 @@ public:
UINT8 m_ram_mode;
UINT8 m_ram_type;
memory_region *m_cart_rom;
- m5_cart_slot_device *m_cart_ram, *m_cart;
+ m5_cart_slot_device *m_cart_ram, *m_cart;
// floppy state for fd5
UINT8 m_fd5_data;
@@ -110,17 +110,17 @@ public:
class brno_state : public m5_state
{
-public:
+public:
brno_state(const machine_config &mconfig, device_type type, const char *tag)
: m5_state(mconfig, type, tag),
-
+
m_fdc(*this, WD2797_TAG),
m_floppy0(*this, WD2797_TAG":0"),
m_floppy1(*this, WD2797_TAG":1")
- // m_ramdisk(*this, RAMDISK)
+ // m_ramdisk(*this, RAMDISK)
{ }
-
+
required_device<wd2797_t> m_fdc;
required_device<floppy_connector> m_floppy0;
optional_device<floppy_connector> m_floppy1;
@@ -140,14 +140,14 @@ public:
DECLARE_FLOPPY_FORMATS( floppy_formats );
-// DECLARE_WRITE_LINE_MEMBER( wd2797_intrq_w );
-// DECLARE_WRITE_LINE_MEMBER( wd2797_drq_w );
-// DECLARE_WRITE_LINE_MEMBER( wd2797_index_callback);
+// DECLARE_WRITE_LINE_MEMBER( wd2797_intrq_w );
+// DECLARE_WRITE_LINE_MEMBER( wd2797_drq_w );
+// DECLARE_WRITE_LINE_MEMBER( wd2797_index_callback);
//required_device<ram_device> m_ramdisk;
DECLARE_DRIVER_INIT(brno);
DECLARE_SNAPSHOT_LOAD_MEMBER( brno );
-// DECLARE_DEVICE_IMAGE_LOAD_MEMBER(m5_cart);
+// DECLARE_DEVICE_IMAGE_LOAD_MEMBER(m5_cart);
virtual void machine_start() override;
@@ -157,9 +157,9 @@ public:
UINT8 m_ramcpu; //where Ramdisk bank is mapped
bool m_romen;
bool m_ramen;
-
- UINT8 m_rammap[16]; // memory map
+
+ UINT8 m_rammap[16]; // memory map
};
#endif
diff --git a/src/mame/includes/mcr.h b/src/mame/includes/mcr.h
index ff7937f669c..e789c198a8e 100644
--- a/src/mame/includes/mcr.h
+++ b/src/mame/includes/mcr.h
@@ -2,7 +2,7 @@
// copyright-holders:Aaron Giles
/*************************************************************************
- Driver for Midway MCR games
+ Midway MCR system
**************************************************************************/
@@ -38,9 +38,8 @@ public:
m_dpoker_hopper_timer(*this, "dp_hopper"),
m_samples(*this, "samples"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette"),
- m_sio_txda(0),
- m_sio_txdb(0) { }
+ m_palette(*this, "palette")
+ { }
// these should be required but can't because mcr68 shares with us
// once the sound boards are properly device-ified, fix this
@@ -62,6 +61,9 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ int m_sio_txda;
+ int m_sio_txdb;
+
DECLARE_WRITE8_MEMBER(mcr_control_port_w);
DECLARE_WRITE8_MEMBER(mcr_ipu_laserdisk_w);
DECLARE_READ8_MEMBER(mcr_ipu_watchdog_r);
@@ -129,9 +131,6 @@ public:
void render_sprites_91399(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void render_sprites_91464(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int sprmask, int colormask);
void mcr_init(int cpuboard, int vidboard, int ssioboard);
-
- int m_sio_txda;
- int m_sio_txdb;
};
/*----------- defined in machine/mcr.c -----------*/
diff --git a/src/mame/includes/mcr3.h b/src/mame/includes/mcr3.h
index 8f4bf006bc7..dbfcb3529e9 100644
--- a/src/mame/includes/mcr3.h
+++ b/src/mame/includes/mcr3.h
@@ -1,12 +1,22 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
+/*************************************************************************
+
+ Midway MCR-3 system
+
+**************************************************************************/
+
class mcr3_state : public mcr_state
{
public:
mcr3_state(const machine_config &mconfig, device_type type, const char *tag)
: mcr_state(mconfig, type, tag),
- m_spyhunt_alpharam(*this, "spyhunt_alpha"),
- m_screen(*this, "screen") { }
+ m_spyhunt_alpharam(*this, "spyhunt_alpha"),
+ m_screen(*this, "screen")
+ { }
+
+ optional_shared_ptr<UINT8> m_spyhunt_alpharam;
+ required_device<screen_device> m_screen;
UINT8 m_input_mux;
UINT8 m_latched_input;
@@ -18,11 +28,11 @@ public:
INT8 m_maxrpm_p2_shift;
UINT8 m_spyhunt_sprite_color_mask;
INT16 m_spyhunt_scroll_offset;
- optional_shared_ptr<UINT8> m_spyhunt_alpharam;
INT16 m_spyhunt_scrollx;
INT16 m_spyhunt_scrolly;
tilemap_t *m_bg_tilemap;
tilemap_t *m_alpha_tilemap;
+
DECLARE_WRITE8_MEMBER(spyhuntpr_paletteram_w);
DECLARE_WRITE8_MEMBER(mcr3_videoram_w);
DECLARE_WRITE8_MEMBER(spyhunt_videoram_w);
@@ -75,5 +85,4 @@ public:
DECLARE_WRITE8_MEMBER(spyhuntpr_port04_w);
DECLARE_WRITE8_MEMBER(spyhuntpr_fd00_w);
- required_device<screen_device> m_screen;
};
diff --git a/src/mame/includes/mcr68.h b/src/mame/includes/mcr68.h
index 56f4f10a94e..bc92e7fc83e 100644
--- a/src/mame/includes/mcr68.h
+++ b/src/mame/includes/mcr68.h
@@ -1,5 +1,11 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
+// copyright-holders:Aaron Giles, Bryan McPhail
+/***************************************************************************
+
+ Midway MCR-68k system
+
+***************************************************************************/
+
#include "machine/6821pia.h"
#include "audio/midway.h"
#include "audio/williams.h"
@@ -23,12 +29,13 @@ public:
m_sounds_good(*this, "sg"),
m_turbo_chip_squeak(*this, "tcs"),
m_cvsd_sound(*this, "cvsd"),
- m_videoram(*this, "videoram"),
- m_spriteram(*this, "spriteram") ,
+ m_videoram(*this, "videoram"),
+ m_spriteram(*this, "spriteram") ,
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette")
+ { }
optional_device<midway_chip_squeak_deluxe_device> m_chip_squeak_deluxe;
optional_device<midway_sounds_good_device> m_sounds_good;
diff --git a/src/mame/includes/newbrain.h b/src/mame/includes/newbrain.h
index 72edaf3b451..be920d57c1b 100644
--- a/src/mame/includes/newbrain.h
+++ b/src/mame/includes/newbrain.h
@@ -7,51 +7,22 @@
#include "emu.h"
+#include "bus/newbrain/exp.h"
+#include "bus/rs232/rs232.h"
#include "cpu/z80/z80.h"
#include "cpu/z80/z80daisy.h"
#include "cpu/cop400/cop400.h"
#include "imagedev/cassette.h"
-#include "machine/6850acia.h"
-#include "machine/adc0808.h"
-#include "machine/z80ctc.h"
#include "machine/rescap.h"
#include "machine/ram.h"
-#include "machine/upd765.h"
#define SCREEN_TAG "screen"
#define Z80_TAG "409"
#define COP420_TAG "419"
-#define MC6850_TAG "459"
-#define ADC0809_TAG "427"
-#define DAC0808_TAG "461"
-#define Z80CTC_TAG "458"
-#define FDC_Z80_TAG "416"
-#define UPD765_TAG "418"
-
-#define NEWBRAIN_EIM_RAM_SIZE 0x10000
-
-#define NEWBRAIN_ENRG1_CLK 0x01
-#define NEWBRAIN_ENRG1_TVP 0x04
-#define NEWBRAIN_ENRG1_CTS 0x10
-#define NEWBRAIN_ENRG1_DO 0x20
-#define NEWBRAIN_ENRG1_PO 0x80
-#define NEWBRAIN_ENRG1_UST_BIT_1_MASK 0x30
-#define NEWBRAIN_ENRG1_UST_BIT_0_MASK 0xc0
-
-#define NEWBRAIN_ENRG2_USERP 0x01
-#define NEWBRAIN_ENRG2_ANP 0x02
-#define NEWBRAIN_ENRG2_MLTMD 0x04
-#define NEWBRAIN_ENRG2_MSPD 0x08
-#define NEWBRAIN_ENRG2_ENOR 0x10
-#define NEWBRAIN_ENRG2_ANSW 0x20
-#define NEWBRAIN_ENRG2_ENOT 0x40
-#define NEWBRAIN_ENRG2_CENTRONICS_OUT 0x80
-
-#define NEWBRAIN_VIDEO_RV 0x01
-#define NEWBRAIN_VIDEO_FS 0x02
-#define NEWBRAIN_VIDEO_32_40 0x04
-#define NEWBRAIN_VIDEO_UCR 0x08
-#define NEWBRAIN_VIDEO_80L 0x40
+#define CASSETTE_TAG "cassette"
+#define CASSETTE2_TAG "cassette2"
+#define RS232_V24_TAG "to"
+#define RS232_PRN_TAG "po"
class newbrain_state : public driver_device
{
@@ -59,12 +30,15 @@ public:
newbrain_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, Z80_TAG),
- m_copcpu(*this, COP420_TAG),
+ m_cop(*this, COP420_TAG),
m_palette(*this, "palette"),
- m_cassette1(*this, "cassette"),
- m_cassette2(*this, "cassette2"),
+ m_exp(*this, NEWBRAIN_EXPANSION_SLOT_TAG),
+ m_cassette1(*this, CASSETTE_TAG),
+ m_cassette2(*this, CASSETTE2_TAG),
+ m_rs232_v24(*this, RS232_V24_TAG),
+ m_rs232_prn(*this, RS232_PRN_TAG),
+ m_ram(*this, RAM_TAG),
m_rom(*this, Z80_TAG),
- m_eim_rom(*this, "eim"),
m_char_rom(*this, "chargen"),
m_y0(*this, "Y0"),
m_y1(*this, "Y1"),
@@ -81,39 +55,37 @@ public:
m_y12(*this, "Y12"),
m_y13(*this, "Y13"),
m_y14(*this, "Y14"),
- m_y15(*this, "Y15")
+ m_y15(*this, "Y15"),
+ m_pwrup(0),
+ m_userint(1),
+ m_clkint(1),
+ m_copint(1),
+ m_keylatch(0),
+ m_keydata(0xf)
{
}
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ DECLARE_READ8_MEMBER( mreq_r );
+ DECLARE_WRITE8_MEMBER( mreq_w );
+ DECLARE_READ8_MEMBER( iorq_r );
+ DECLARE_WRITE8_MEMBER( iorq_w );
+
DECLARE_WRITE8_MEMBER( enrg1_w );
- DECLARE_WRITE8_MEMBER( a_enrg1_w );
- DECLARE_READ8_MEMBER( ust_r );
- DECLARE_READ8_MEMBER( a_ust_r );
- DECLARE_READ8_MEMBER( user_r );
- DECLARE_WRITE8_MEMBER( user_w );
- DECLARE_READ8_MEMBER( clclk_r );
- DECLARE_WRITE8_MEMBER( clclk_w );
- DECLARE_READ8_MEMBER( clusr_r );
- DECLARE_WRITE8_MEMBER( clusr_w );
- DECLARE_READ8_MEMBER( cop_l_r );
- DECLARE_WRITE8_MEMBER( cop_l_w );
+ DECLARE_WRITE8_MEMBER( tvtl_w );
+ DECLARE_READ8_MEMBER( ust_a_r );
+ DECLARE_READ8_MEMBER( ust_b_r );
+
DECLARE_WRITE8_MEMBER( cop_g_w );
DECLARE_READ8_MEMBER( cop_g_r );
DECLARE_WRITE8_MEMBER( cop_d_w );
DECLARE_READ8_MEMBER( cop_in_r );
- DECLARE_WRITE_LINE_MEMBER( cop_sk_w );
- DECLARE_READ_LINE_MEMBER( cop_si_r );
- DECLARE_WRITE_LINE_MEMBER( cop_so_w );
- DECLARE_READ8_MEMBER( tvl_r );
- DECLARE_WRITE8_MEMBER( tvl_w );
- DECLARE_WRITE8_MEMBER( tvctl_w );
- DECLARE_READ8_MEMBER( cop_r );
- DECLARE_WRITE8_MEMBER( cop_w );
+ DECLARE_WRITE_LINE_MEMBER( k2_w );
+ DECLARE_READ_LINE_MEMBER( tdi_r );
+ DECLARE_WRITE_LINE_MEMBER( k1_w );
INTERRUPT_GEN_MEMBER(newbrain_interrupt);
- TIMER_DEVICE_CALLBACK_MEMBER(cop_regint_tick);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
@@ -129,19 +101,26 @@ protected:
};
void check_interrupt();
- void bankswitch();
- void tvram_w(UINT8 data, int a6);
- inline int get_reset_t();
- inline int get_pwrup_t();
+ void clclk();
+ int tpin();
+ void tm();
+
+ int get_reset_t();
+ int get_pwrup_t();
+
void screen_update(bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void tvl(UINT8 data, int a6);
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_copcpu;
+ required_device<z80_device> m_maincpu;
+ required_device<cop400_cpu_device> m_cop;
required_device<palette_device> m_palette;
+ required_device<newbrain_expansion_slot_t> m_exp;
required_device<cassette_image_device> m_cassette1;
required_device<cassette_image_device> m_cassette2;
+ required_device<rs232_port_device> m_rs232_v24;
+ required_device<rs232_port_device> m_rs232_prn;
+ required_device<ram_device> m_ram;
required_memory_region m_rom;
- optional_memory_region m_eim_rom;
required_memory_region m_char_rom;
required_ioport m_y0;
required_ioport m_y1;
@@ -160,112 +139,31 @@ protected:
required_ioport m_y14;
required_ioport m_y15;
- // processor state
- int m_pwrup; // power up
- int m_userint; // user interrupt
- int m_userint0; // parallel port interrupt
- int m_clkint; // clock interrupt
- int m_aciaint; // ACIA interrupt
- int m_copint; // COP interrupt
- int m_anint; // A/DC interrupt
- int m_bee; // identity
- UINT8 m_enrg1; // enable register 1
- UINT8 m_enrg2; // enable register 2
- int m_acia_txd; // ACIA transmit
-
- // COP420 state
- UINT8 m_cop_bus; // data bus
- int m_cop_so; // serial out
- int m_cop_tdo; // tape data output
- int m_cop_tdi; // tape data input
- int m_cop_rd; // memory read
- int m_cop_wr; // memory write
- int m_cop_access; // COP access
-
- // keyboard state
- ioport_port* m_key_row[16];
- int m_keylatch; // keyboard row
- int m_keydata; // keyboard column
-
- // video state
- int m_segment_data[16]; // VF segment data
- int m_tvcnsl; // TV console required
- int m_tvctl; // TV control register
- UINT16 m_tvram; // TV start address
-
- // user bus state
- UINT8 m_user;
-
- // devices
- UINT8 m_copdata;
- int m_copstate;
- int m_copbytes;
- int m_copregint;
+ int m_clk;
+ int m_tvp;
+ int m_pwrup;
+ int m_userint;
+ int m_clkint;
+ int m_copint;
+
+ int m_cop_so;
+ int m_cop_tdo;
+ int m_cop_g1;
+ int m_cop_g3;
+ int m_cop_k6;
+
+ int m_keylatch;
+ int m_keydata;
+ UINT16 m_segment_data;
+
+ int m_rv;
+ int m_fs;
+ int m_32_40;
+ int m_ucr;
+ int m_80l;
+ UINT16 m_tvl;
};
-class newbrain_eim_state : public newbrain_state
-{
-public:
- newbrain_eim_state(const machine_config &mconfig, device_type type, const char *tag)
- : newbrain_state(mconfig, type, tag),
- m_fdccpu(*this, FDC_Z80_TAG),
- m_ctc(*this, Z80CTC_TAG),
- m_acia(*this, MC6850_TAG),
- m_fdc(*this, UPD765_TAG),
- m_floppy(*this, UPD765_TAG ":0:525dd"),
- m_eim_ram(*this, "eim_ram")
- { }
-
- required_device<cpu_device> m_fdccpu;
- required_device<z80ctc_device> m_ctc;
- required_device<acia6850_device> m_acia;
- required_device<upd765a_device> m_fdc;
- required_device<floppy_image_device> m_floppy;
- optional_shared_ptr<UINT8> m_eim_ram;
-
- virtual void machine_start() override;
-
- DECLARE_WRITE8_MEMBER( fdc_auxiliary_w );
- DECLARE_READ8_MEMBER( fdc_control_r );
- DECLARE_READ8_MEMBER( ust2_r );
- DECLARE_WRITE8_MEMBER( enrg2_w );
- DECLARE_WRITE8_MEMBER( pr_w );
- DECLARE_READ8_MEMBER( user_r );
- DECLARE_WRITE8_MEMBER( user_w );
- DECLARE_READ8_MEMBER( anout_r );
- DECLARE_WRITE8_MEMBER( anout_w );
- DECLARE_READ8_MEMBER( anin_r );
- DECLARE_WRITE8_MEMBER( anio_w );
- DECLARE_READ8_MEMBER( st0_r );
- DECLARE_READ8_MEMBER( st1_r );
- DECLARE_READ8_MEMBER( st2_r );
- DECLARE_READ8_MEMBER( usbs_r );
- DECLARE_WRITE8_MEMBER( usbs_w );
- DECLARE_WRITE8_MEMBER( paging_w );
- DECLARE_WRITE_LINE_MEMBER( acia_tx );
- DECLARE_WRITE_LINE_MEMBER( acia_interrupt );
- DECLARE_WRITE_LINE_MEMBER( fdc_interrupt );
- DECLARE_WRITE_LINE_MEMBER( ctc_z2_w );
- DECLARE_WRITE_LINE_MEMBER( adc_eoc_w );
-
- ADC0808_ANALOG_READ_CB(adc_vref_pos_r);
- ADC0808_ANALOG_READ_CB(adc_vref_neg_r);
- ADC0808_ANALOG_READ_CB(adc_input_r);
-
- TIMER_DEVICE_CALLBACK_MEMBER(ctc_c2_tick);
-
- void bankswitch();
-
- // paging state
- int m_paging; // paging enabled
- int m_mpm; // multi paging mode ?
- int m_a16; // address line 16
- UINT8 m_pr[16]; // expansion interface paging register
-
- // floppy state
- int m_fdc_int; // interrupt
- int m_fdc_att; // attention
-};
// ---------- defined in video/newbrain.c ----------
diff --git a/src/mame/includes/nmk16.h b/src/mame/includes/nmk16.h
index 269db67fc82..c2e20116e50 100644
--- a/src/mame/includes/nmk16.h
+++ b/src/mame/includes/nmk16.h
@@ -90,7 +90,6 @@ public:
DECLARE_WRITE16_MEMBER(afega_soundlatch_w);
DECLARE_WRITE16_MEMBER(hachamf_mainram_w);
DECLARE_WRITE16_MEMBER(tdragon_mainram_w);
- DECLARE_WRITE8_MEMBER(raphero_sound_rombank_w);
DECLARE_READ16_MEMBER(vandykeb_r);
DECLARE_READ16_MEMBER(tdragonb_prot_r);
DECLARE_READ16_MEMBER(afega_unknown_r);
@@ -119,6 +118,7 @@ public:
DECLARE_WRITE16_MEMBER(nmk16_x0016_w);
DECLARE_WRITE16_MEMBER(nmk16_bioship_x0016_w);
DECLARE_DRIVER_INIT(nmk);
+ DECLARE_DRIVER_INIT(tharrier);
DECLARE_DRIVER_INIT(vandykeb);
DECLARE_DRIVER_INIT(tdragonb);
DECLARE_DRIVER_INIT(ssmissin);
@@ -126,6 +126,7 @@ public:
DECLARE_DRIVER_INIT(redhawk);
DECLARE_DRIVER_INIT(tdragon_prot);
DECLARE_DRIVER_INIT(bubl2000);
+ DECLARE_DRIVER_INIT(banked_audiocpu);
DECLARE_DRIVER_INIT(grdnstrm);
DECLARE_DRIVER_INIT(spec2k);
DECLARE_DRIVER_INIT(redfoxwp2a);
diff --git a/src/mame/includes/overdriv.h b/src/mame/includes/overdriv.h
index 9b5cc1b2cd2..dcace237863 100644
--- a/src/mame/includes/overdriv.h
+++ b/src/mame/includes/overdriv.h
@@ -62,7 +62,7 @@ public:
//INTERRUPT_GEN_MEMBER(cpuB_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(overdriv_cpuA_scanline);
int m_fake_timer;
-
+
K051316_CB_MEMBER(zoom_callback_1);
K051316_CB_MEMBER(zoom_callback_2);
K053246_CB_MEMBER(sprite_callback);
diff --git a/src/mame/includes/segas16b.h b/src/mame/includes/segas16b.h
index 28f783dbd15..ab840a0edcb 100644
--- a/src/mame/includes/segas16b.h
+++ b/src/mame/includes/segas16b.h
@@ -49,9 +49,12 @@ public:
m_hwc_input_value(0),
m_mj_input_num(0),
m_mj_last_val(0),
+ m_spritepalbase(0x400),
m_gfxdecode(*this, "gfxdecode"),
m_sound_decrypted_opcodes(*this, "sound_decrypted_opcodes"),
- m_decrypted_opcodes(*this, "decrypted_opcodes")
+ m_decrypted_opcodes(*this, "decrypted_opcodes"),
+ m_bootleg_scroll(*this, "bootleg_scroll"),
+ m_bootleg_page(*this, "bootleg_page")
{ }
// memory mapping
@@ -88,7 +91,8 @@ public:
DECLARE_DRIVER_INIT(generic_5358_small);
DECLARE_DRIVER_INIT(generic_5797);
DECLARE_DRIVER_INIT(generic_korean);
-
+ DECLARE_DRIVER_INIT(generic_bootleg);
+ DECLARE_DRIVER_INIT(lockonph);
// game-specific driver init
DECLARE_DRIVER_INIT(isgsm);
DECLARE_DRIVER_INIT(tturf_5704);
@@ -123,6 +127,9 @@ public:
DECLARE_WRITE16_MEMBER( tileram_w ) { m_segaic16vid->tileram_w(space,offset,data,mem_mask); };
DECLARE_WRITE16_MEMBER( textram_w ) { m_segaic16vid->textram_w(space,offset,data,mem_mask); };
+ // bootleg stuff
+ void tilemap_16b_fpointbl_fill_latch(int i, UINT16* latched_pageselect, UINT16* latched_yscroll, UINT16* latched_xscroll, UINT16* textram);
+
protected:
// internal types
typedef delegate<void ()> i8751_sim_delegate;
@@ -208,10 +215,15 @@ protected:
UINT8 m_hwc_input_value;
UINT8 m_mj_input_num;
UINT8 m_mj_last_val;
+ int m_spritepalbase;
required_device<gfxdecode_device> m_gfxdecode;
optional_shared_ptr<UINT8> m_sound_decrypted_opcodes;
optional_shared_ptr<UINT16> m_decrypted_opcodes;
+ optional_shared_ptr<UINT16> m_bootleg_scroll;
+ optional_shared_ptr<UINT16> m_bootleg_page;
+
+
};
diff --git a/src/mame/includes/snk68.h b/src/mame/includes/snk68.h
index f9c8d59e71f..d2743e85683 100644
--- a/src/mame/includes/snk68.h
+++ b/src/mame/includes/snk68.h
@@ -1,7 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Bryan McPhail, Acho A. Tang, Nicola Salmoria
#include "sound/upd7759.h"
-
+#include "video/snk68_spr.h"
class snk68_state : public driver_device
{
public:
@@ -13,7 +13,9 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_pow_fg_videoram(*this, "pow_fg_videoram"),
- m_spriteram(*this, "spriteram") { }
+ m_spriteram(*this, "spriteram"),
+ m_sprites(*this, "sprites")
+ { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
@@ -24,6 +26,8 @@ public:
required_shared_ptr<UINT16> m_pow_fg_videoram;
required_shared_ptr<UINT16> m_spriteram;
+ required_device<snk68_spr_device> m_sprites;
+
UINT8 m_invert_controls;
bool m_sprite_flip_axis;
tilemap_t *m_fg_tilemap;
@@ -31,8 +35,6 @@ public:
// common
DECLARE_WRITE16_MEMBER(sound_w);
- DECLARE_READ16_MEMBER(spriteram_r);
- DECLARE_WRITE16_MEMBER(spriteram_w);
DECLARE_WRITE8_MEMBER(D7759_write_port_0_w);
DECLARE_WRITE8_MEMBER(D7759_upd_reset_w);
@@ -60,5 +62,8 @@ public:
void common_video_start();
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int group);
+
+ void tile_callback_pow(int &tile, int& fx, int& fy, int& region);
+ void tile_callback_notpow(int &tile, int& fx, int& fy, int& region);
+
};
diff --git a/src/mame/includes/system16.h b/src/mame/includes/system16.h
index 5173524b89e..65b28f457b1 100644
--- a/src/mame/includes/system16.h
+++ b/src/mame/includes/system16.h
@@ -1,8 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria, Phil Stroffolino, Mirko Buffoni
-// later, this might be merged with segas1x_state in segas16.h
-
#include "video/sega16sp.h"
#include "machine/segaic16.h"
#include "sound/msm5205.h"
@@ -131,7 +129,9 @@ public:
DECLARE_READ16_MEMBER(passht4b_io1_r);
DECLARE_READ16_MEMBER(passht4b_io2_r);
DECLARE_READ16_MEMBER(passht4b_io3_r);
+ DECLARE_READ16_MEMBER(ddcrew_c41006_r);
DECLARE_WRITE16_MEMBER(sys16_tilebank_w);
+ DECLARE_WRITE16_MEMBER(ddcrewbl_spritebank_w);
DECLARE_WRITE8_MEMBER(tturfbl_msm5205_data_w);
DECLARE_READ8_MEMBER(tturfbl_soundbank_r);
DECLARE_WRITE8_MEMBER(tturfbl_soundbank_w);
@@ -186,7 +186,9 @@ public:
DECLARE_DRIVER_INIT(shinobl);
DECLARE_DRIVER_INIT(tturfbl);
DECLARE_DRIVER_INIT(goldnaxeb1);
+ DECLARE_DRIVER_INIT(ddcrewbl);
DECLARE_DRIVER_INIT(common);
+ DECLARE_MACHINE_RESET(ddcrewbl);
TILEMAP_MAPPER_MEMBER(sys16_bg_map);
TILEMAP_MAPPER_MEMBER(sys16_text_map);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
diff --git a/src/mame/includes/targeth.h b/src/mame/includes/targeth.h
index 946f95325c6..9bdeebbadf5 100644
--- a/src/mame/includes/targeth.h
+++ b/src/mame/includes/targeth.h
@@ -6,27 +6,33 @@ public:
targeth_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this,"maincpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette"),
m_videoram(*this, "videoram"),
m_vregs(*this, "vregs"),
- m_spriteram(*this, "spriteram"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_spriteram(*this, "spriteram") { }
required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
+
required_shared_ptr<UINT16> m_videoram;
required_shared_ptr<UINT16> m_vregs;
required_shared_ptr<UINT16> m_spriteram;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
+
tilemap_t *m_pant[2];
DECLARE_WRITE16_MEMBER(OKIM6295_bankswitch_w);
- DECLARE_WRITE16_MEMBER(targeth_coin_counter_w);
- DECLARE_WRITE16_MEMBER(targeth_vram_w);
- TILE_GET_INFO_MEMBER(get_tile_info_targeth_screen0);
- TILE_GET_INFO_MEMBER(get_tile_info_targeth_screen1);
+ DECLARE_WRITE16_MEMBER(coin_counter_w);
+ DECLARE_WRITE16_MEMBER(vram_w);
+
+ TILE_GET_INFO_MEMBER(get_tile_info_screen0);
+ TILE_GET_INFO_MEMBER(get_tile_info_screen1);
+
virtual void video_start() override;
- UINT32 screen_update_targeth(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- TIMER_DEVICE_CALLBACK_MEMBER(targeth_interrupt);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
};
diff --git a/src/mame/includes/thoop2.h b/src/mame/includes/thoop2.h
index 066f4ffbde2..5ff44c9c3b6 100644
--- a/src/mame/includes/thoop2.h
+++ b/src/mame/includes/thoop2.h
@@ -5,30 +5,36 @@ class thoop2_state : public driver_device
public:
thoop2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram"),
- m_vregs(*this, "vregs"),
- m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_videoram(*this, "videoram"),
+ m_vregs(*this, "vregs"),
+ m_spriteram(*this, "spriteram") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
required_shared_ptr<UINT16> m_videoram;
required_shared_ptr<UINT16> m_vregs;
required_shared_ptr<UINT16> m_spriteram;
+
int m_sprite_count[5];
std::unique_ptr<int[]> m_sprite_table[5];
tilemap_t *m_pant[2];
+
DECLARE_WRITE16_MEMBER(OKIM6295_bankswitch_w);
- DECLARE_WRITE16_MEMBER(thoop2_coin_w);
+ DECLARE_WRITE16_MEMBER(coin_w);
DECLARE_READ16_MEMBER(DS5002FP_R);
- DECLARE_WRITE16_MEMBER(thoop2_vram_w);
- TILE_GET_INFO_MEMBER(get_tile_info_thoop2_screen0);
- TILE_GET_INFO_MEMBER(get_tile_info_thoop2_screen1);
+ DECLARE_WRITE16_MEMBER(vram_w);
+
+ virtual void machine_start() override;
virtual void video_start() override;
- UINT32 screen_update_thoop2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void thoop2_sort_sprites();
+
+ TILE_GET_INFO_MEMBER(get_tile_info_screen0);
+ TILE_GET_INFO_MEMBER(get_tile_info_screen1);
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void sort_sprites();
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
};
diff --git a/src/mame/includes/wrally.h b/src/mame/includes/wrally.h
index 641ec7c4b11..8af45e6d46f 100644
--- a/src/mame/includes/wrally.h
+++ b/src/mame/includes/wrally.h
@@ -29,12 +29,13 @@ public:
DECLARE_WRITE16_MEMBER(vram_w);
DECLARE_WRITE16_MEMBER(flipscreen_w);
DECLARE_WRITE16_MEMBER(okim6295_bankswitch_w);
- DECLARE_WRITE16_MEMBER(wrally_coin_counter_w);
- DECLARE_WRITE16_MEMBER(wrally_coin_lockout_w);
+ DECLARE_WRITE16_MEMBER(coin_counter_w);
+ DECLARE_WRITE16_MEMBER(coin_lockout_w);
TILE_GET_INFO_MEMBER(get_tile_info_screen0);
TILE_GET_INFO_MEMBER(get_tile_info_screen1);
+ virtual void machine_start() override;
virtual void video_start() override;
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
diff --git a/src/mame/layout/crazybon.lay b/src/mame/layout/crazybon.lay
index daad324d85b..487307bd5e7 100644
--- a/src/mame/layout/crazybon.lay
+++ b/src/mame/layout/crazybon.lay
@@ -15,36 +15,75 @@
<rect state="0">
<color red="0.15" green="0.0" blue="0.0" />
</rect>
- <text string="STOP">
+ <text string="STOP ALL">
<color red="0.0" green="0.0" blue="0.0" />
- <bounds x="0" y="0.1" width="1" height="0.4" />
+ <bounds x="0" y="0.3" width="1" height="0.4" />
</text>
- <text string="TAKE">
+ </element>
+
+ <element name="stop1" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.15" green="0.0" blue="0.0" />
+ </rect>
+ <text string="STOP 1">
<color red="0.0" green="0.0" blue="0.0" />
- <bounds x="0" y="0.5" width="1" height="0.4" />
+ <bounds x="0" y="0.3" width="1" height="0.4" />
</text>
</element>
- <element name="big" defstate="0">
+ <element name="stop2" defstate="0">
<rect state="1">
<color red="1.0" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.15" green="0.0" blue="0.0" />
</rect>
- <text string="BIG">
+ <text string="STOP 2">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.3" width="1" height="0.4" />
</text>
</element>
- <element name="small" defstate="0">
+ <element name="stop3" defstate="0">
<rect state="1">
<color red="1.0" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.15" green="0.0" blue="0.0" />
</rect>
+ <text string="STOP 3">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.3" width="1" height="0.4" />
+ </text>
+ </element>
+
+ <element name="big" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.5" green="0.0" blue="0.0" />
+ </rect>
+ <text string="BIG">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.1" width="1" height="0.4" />
+ </text>
+ <text string="HOLD">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.5" width="1" height="0.4" />
+ </text>
+ </element>
+
+ <element name="small" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.5" green="0.0" blue="0.0" />
+ </rect>
<text string="SMALL">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.4" />
@@ -68,6 +107,19 @@
</text>
</element>
+ <element name="take" defstate="0">
+ <rect state="1">
+ <color red="1.0" green="0.5" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.15" green="0.075" blue="0.0" />
+ </rect>
+ <text string="TAKE">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0" y="0.3" width="1" height="0.4" />
+ </text>
+ </element>
+
<element name="start" defstate="0">
<rect state="1">
<color red="0.0" green="1.0" blue="0.0" />
@@ -112,6 +164,15 @@
</rect>
</element>
+ <element name="big_b" defstate="0">
+ <rect state="1">
+ <color red="0.7" green="0.0" blue="0.0" />
+ </rect>
+ <rect state="0">
+ <color red="0.4" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+
<element name="bet_b" defstate="0">
<rect state="1">
<color red="0.7" green="0.0" blue="0.7" />
@@ -204,50 +265,77 @@
<!-- define lamps -->
<bezel name="lamp3" element="bet_b" inputtag="IN0" inputmask="0x20">
- <bounds x="0.05" y="3.08" width="0.40" height="0.24" />
+ <bounds x="0.05" y="3.08" width="0.25" height="0.24" />
</bezel>
<bezel name="lamp3" element="bet" inputtag="IN0" inputmask="0x20">
- <bounds x="0.07" y="3.10" width="0.36" height="0.20" />
+ <bounds x="0.07" y="3.10" width="0.21" height="0.20" />
</bezel>
- <bezel name="lamp4" element="stop_b" inputtag="IN0" inputmask="0x10">
- <bounds x="1.4" y="3.08" width="0.50" height="0.24" />
+ <bezel name="lamp5" element="dup_b" inputtag="IN0" inputmask="0x08">
+ <bounds x="0.40" y="3.08" width="0.35" height="0.24" />
+ </bezel>
+ <bezel name="lamp5" element="dup" inputtag="IN0" inputmask="0x08">
+ <bounds x="0.42" y="3.10" width="0.31" height="0.20" />
+ </bezel>
+
+ <bezel name="lamp4" element="dup_b" inputtag="IN0" inputmask="0x10">
+ <bounds x="0.80" y="3.08" width="0.35" height="0.24" />
</bezel>
- <bezel name="lamp4" element="stop" inputtag="IN0" inputmask="0x10">
- <bounds x="1.42" y="3.10" width="0.46" height="0.20" />
+ <bezel name="lamp4" element="take" inputtag="IN0" inputmask="0x10">
+ <bounds x="0.82" y="3.10" width="0.31" height="0.20" />
</bezel>
- <bezel name="lamp5" element="dup_b" inputtag="IN0" inputmask="0x08">
- <bounds x="0.65" y="3.08" width="0.50" height="0.24" />
+ <bezel name="lamp4" element="stop_b" inputtag="IN1" inputmask="0x04">
+ <bounds x="1.25" y="3.08" width="0.35" height="0.24" />
</bezel>
- <bezel name="lamp5" element="dup" inputtag="IN0" inputmask="0x08">
- <bounds x="0.67" y="3.10" width="0.46" height="0.20" />
+ <bezel name="lamp4" element="stop" inputtag="IN1" inputmask="0x04">
+ <bounds x="1.27" y="3.10" width="0.31" height="0.20" />
</bezel>
+ <bezel name="lamp4" element="stop_b" inputtag="IN1" inputmask="0x01">
+ <bounds x="1.65" y="3.08" width="0.35" height="0.24" />
+ </bezel>
+ <bezel name="lamp4" element="stop1" inputtag="IN1" inputmask="0x01">
+ <bounds x="1.67" y="3.10" width="0.31" height="0.20" />
+ </bezel>
- <bezel name="lamp7" element="stop_b" inputtag="IN0" inputmask="0x04">
- <bounds x="2.05" y="3.08" width="0.50" height="0.24" />
+ <bezel name="lamp4" element="stop_b" inputtag="IN1" inputmask="0x02">
+ <bounds x="2.05" y="3.08" width="0.35" height="0.24" />
</bezel>
- <bezel name="lamp7" element="big" inputtag="IN0" inputmask="0x04">
- <bounds x="2.07" y="3.10" width="0.46" height="0.20" />
+ <bezel name="lamp4" element="stop2" inputtag="IN1" inputmask="0x02">
+ <bounds x="2.07" y="3.10" width="0.31" height="0.20" />
+ </bezel>
+
+ <bezel name="lamp4" element="stop_b" inputtag="IN1" inputmask="0x08">
+ <bounds x="2.45" y="3.08" width="0.35" height="0.24" />
+ </bezel>
+ <bezel name="lamp4" element="stop3" inputtag="IN1" inputmask="0x08">
+ <bounds x="2.47" y="3.10" width="0.31" height="0.20" />
</bezel>
- <bezel name="lamp6" element="stop_b" inputtag="IN0" inputmask="0x40">
- <bounds x="2.7" y="3.08" width="0.50" height="0.24" />
+ <bezel name="lamp7" element="big_b" inputtag="IN0" inputmask="0x04">
+ <bounds x="2.90" y="3.08" width="0.30" height="0.24" />
+ </bezel>
+ <bezel name="lamp7" element="big" inputtag="IN0" inputmask="0x04">
+ <bounds x="2.92" y="3.10" width="0.26" height="0.20" />
+ </bezel>
+
+ <bezel name="lamp6" element="big_b" inputtag="IN0" inputmask="0x40">
+ <bounds x="3.25" y="3.08" width="0.30" height="0.24" />
</bezel>
<bezel name="lamp6" element="small" inputtag="IN0" inputmask="0x40">
- <bounds x="2.72" y="3.10" width="0.46" height="0.20" />
+ <bounds x="3.27" y="3.10" width="0.26" height="0.20" />
</bezel>
<bezel name="lamp1" element="start_b" inputtag="IN0" inputmask="0x80">
- <bounds x="3.45" y="3.08" width="0.50" height="0.24" />
+ <bounds x="3.65" y="3.08" width="0.30" height="0.24" />
</bezel>
<bezel name="lamp1" element="start" inputtag="IN0" inputmask="0x80">
- <bounds x="3.47" y="3.10" width="0.46" height="0.20" />
+ <bounds x="3.67" y="3.10" width="0.26" height="0.20" />
</bezel>
</view>
diff --git a/src/mame/layout/esq2by16.lay b/src/mame/layout/esq2by16.lay
index 1861b335476..7e0564e0a5b 100644
--- a/src/mame/layout/esq2by16.lay
+++ b/src/mame/layout/esq2by16.lay
@@ -60,921 +60,921 @@
<backdrop element="background">
<bounds left="0" top="0" right="300" bottom="120" />
</backdrop>
- <bezel name="rLed_0" element="rLeds"> <bounds x="200" y="0" width="5" height="3" /> </bezel>
- <bezel name="rLed_8" element="rLeds"> <bounds x="200" y="20" width="5" height="3" /> </bezel>
- <bezel name="rLed_9" element="rLeds"> <bounds x="240" y="0" width="5" height="3" /> </bezel>
- <bezel name="rLed_1" element="rLeds"> <bounds x="240" y="20" width="5" height="3" /> </bezel>
- <bezel name="rLed_2" element="rLeds"> <bounds x="260" y="00" width="5" height="3" /> </bezel>
- <bezel name="rLed_3" element="rLeds"> <bounds x="270" y="00" width="5" height="3" /> </bezel>
- <bezel name="rLed_4" element="rLeds"> <bounds x="280" y="00" width="5" height="3" /> </bezel>
- <bezel name="rLed_5" element="rLeds"> <bounds x="290" y="00" width="5" height="3" /> </bezel>
- <bezel name="rLed_10" element="rLeds"> <bounds x="260" y="10" width="5" height="3" /> </bezel>
- <bezel name="rLed_11" element="rLeds"> <bounds x="270" y="10" width="5" height="3" /> </bezel>
- <bezel name="rLed_12" element="rLeds"> <bounds x="280" y="10" width="5" height="3" /> </bezel>
- <bezel name="rLed_13" element="rLeds"> <bounds x="290" y="10" width="5" height="3" /> </bezel>
+ <bezel name="rLed_0" element="rLeds"> <bounds x="200" y="0" width="5" height="3" /> </bezel>
+ <bezel name="rLed_8" element="rLeds"> <bounds x="200" y="20" width="5" height="3" /> </bezel>
+ <bezel name="rLed_9" element="rLeds"> <bounds x="240" y="0" width="5" height="3" /> </bezel>
+ <bezel name="rLed_1" element="rLeds"> <bounds x="240" y="20" width="5" height="3" /> </bezel>
+ <bezel name="rLed_2" element="rLeds"> <bounds x="260" y="00" width="5" height="3" /> </bezel>
+ <bezel name="rLed_3" element="rLeds"> <bounds x="270" y="00" width="5" height="3" /> </bezel>
+ <bezel name="rLed_4" element="rLeds"> <bounds x="280" y="00" width="5" height="3" /> </bezel>
+ <bezel name="rLed_5" element="rLeds"> <bounds x="290" y="00" width="5" height="3" /> </bezel>
+ <bezel name="rLed_10" element="rLeds"> <bounds x="260" y="10" width="5" height="3" /> </bezel>
+ <bezel name="rLed_11" element="rLeds"> <bounds x="270" y="10" width="5" height="3" /> </bezel>
+ <bezel name="rLed_12" element="rLeds"> <bounds x="280" y="10" width="5" height="3" /> </bezel>
+ <bezel name="rLed_13" element="rLeds"> <bounds x="290" y="10" width="5" height="3" /> </bezel>
- <bezel name="rLed_6" element="rLeds"> <bounds x="260" y="20" width="5" height="3" /> </bezel>
- <bezel name="rLed_7" element="rLeds"> <bounds x="270" y="20" width="5" height="3" /> </bezel>
- <bezel name="rLed_14" element="rLeds"> <bounds x="280" y="20" width="5" height="3" /> </bezel>
- <bezel name="rLed_15" element="rLeds"> <bounds x="290" y="20" width="5" height="3" /> </bezel>
- <bezel name="pg_3000" element="Page3" state="0"> <bounds x=" 0" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3001" element="Page3" state="0"> <bounds x=" 0" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3002" element="Page3" state="0"> <bounds x=" 0" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3003" element="Page3" state="0"> <bounds x=" 0" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3004" element="Page3" state="0"> <bounds x=" 0" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3005" element="Page3" state="0"> <bounds x=" 0" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3006" element="Page3" state="0"> <bounds x=" 0" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3007" element="Page3" state="0"> <bounds x=" 6" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3008" element="Page3" state="0"> <bounds x=" 6" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3009" element="Page3" state="0"> <bounds x=" 6" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3010" element="Page3" state="0"> <bounds x=" 6" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3011" element="Page3" state="0"> <bounds x=" 6" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3012" element="Page3" state="0"> <bounds x=" 6" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3013" element="Page3" state="0"> <bounds x=" 6" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3014" element="Page3" state="0"> <bounds x=" 12" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3015" element="Page3" state="0"> <bounds x=" 12" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3016" element="Page3" state="0"> <bounds x=" 12" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3017" element="Page3" state="0"> <bounds x=" 12" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3018" element="Page3" state="0"> <bounds x=" 12" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3019" element="Page3" state="0"> <bounds x=" 12" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3020" element="Page3" state="0"> <bounds x=" 12" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3021" element="Page3" state="0"> <bounds x=" 18" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3022" element="Page3" state="0"> <bounds x=" 18" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3023" element="Page3" state="0"> <bounds x=" 18" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3024" element="Page3" state="0"> <bounds x=" 18" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3025" element="Page3" state="0"> <bounds x=" 18" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3026" element="Page3" state="0"> <bounds x=" 18" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3027" element="Page3" state="0"> <bounds x=" 18" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3028" element="Page3" state="0"> <bounds x=" 24" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3029" element="Page3" state="0"> <bounds x=" 24" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3030" element="Page3" state="0"> <bounds x=" 24" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3031" element="Page3" state="0"> <bounds x=" 24" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3032" element="Page3" state="0"> <bounds x=" 24" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3033" element="Page3" state="0"> <bounds x=" 24" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3034" element="Page3" state="0"> <bounds x=" 24" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3035" element="Page3" state="0"> <bounds x=" 30" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3036" element="Page3" state="0"> <bounds x=" 30" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3037" element="Page3" state="0"> <bounds x=" 30" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3038" element="Page3" state="0"> <bounds x=" 30" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3039" element="Page3" state="0"> <bounds x=" 30" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3040" element="Page3" state="0"> <bounds x=" 30" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3041" element="Page3" state="0"> <bounds x=" 30" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3042" element="Page3" state="0"> <bounds x=" 36" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3043" element="Page3" state="0"> <bounds x=" 36" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3044" element="Page3" state="0"> <bounds x=" 36" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3045" element="Page3" state="0"> <bounds x=" 36" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3046" element="Page3" state="0"> <bounds x=" 36" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3047" element="Page3" state="0"> <bounds x=" 36" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3048" element="Page3" state="0"> <bounds x=" 36" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3049" element="Page3" state="0"> <bounds x=" 42" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3050" element="Page3" state="0"> <bounds x=" 42" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3051" element="Page3" state="0"> <bounds x=" 42" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3052" element="Page3" state="0"> <bounds x=" 42" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3053" element="Page3" state="0"> <bounds x=" 42" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3054" element="Page3" state="0"> <bounds x=" 42" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3055" element="Page3" state="0"> <bounds x=" 42" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3056" element="Page3" state="0"> <bounds x=" 48" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3057" element="Page3" state="0"> <bounds x=" 48" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3058" element="Page3" state="0"> <bounds x=" 48" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3059" element="Page3" state="0"> <bounds x=" 48" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3060" element="Page3" state="0"> <bounds x=" 48" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3061" element="Page3" state="0"> <bounds x=" 48" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3062" element="Page3" state="0"> <bounds x=" 48" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3063" element="Page3" state="0"> <bounds x=" 54" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3064" element="Page3" state="0"> <bounds x=" 54" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3065" element="Page3" state="0"> <bounds x=" 54" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3066" element="Page3" state="0"> <bounds x=" 54" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3067" element="Page3" state="0"> <bounds x=" 54" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3068" element="Page3" state="0"> <bounds x=" 54" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3069" element="Page3" state="0"> <bounds x=" 54" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3070" element="Page3" state="0"> <bounds x=" 60" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3071" element="Page3" state="0"> <bounds x=" 60" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3072" element="Page3" state="0"> <bounds x=" 60" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3073" element="Page3" state="0"> <bounds x=" 60" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3074" element="Page3" state="0"> <bounds x=" 60" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3075" element="Page3" state="0"> <bounds x=" 60" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3076" element="Page3" state="0"> <bounds x=" 60" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3077" element="Page3" state="0"> <bounds x=" 66" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3078" element="Page3" state="0"> <bounds x=" 66" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3079" element="Page3" state="0"> <bounds x=" 66" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3080" element="Page3" state="0"> <bounds x=" 66" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3081" element="Page3" state="0"> <bounds x=" 66" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3082" element="Page3" state="0"> <bounds x=" 66" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3083" element="Page3" state="0"> <bounds x=" 66" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3084" element="Page3" state="0"> <bounds x=" 72" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3085" element="Page3" state="0"> <bounds x=" 72" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3086" element="Page3" state="0"> <bounds x=" 72" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3087" element="Page3" state="0"> <bounds x=" 72" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3088" element="Page3" state="0"> <bounds x=" 72" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3089" element="Page3" state="0"> <bounds x=" 72" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3090" element="Page3" state="0"> <bounds x=" 72" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3091" element="Page3" state="0"> <bounds x=" 78" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3092" element="Page3" state="0"> <bounds x=" 78" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3093" element="Page3" state="0"> <bounds x=" 78" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3094" element="Page3" state="0"> <bounds x=" 78" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3095" element="Page3" state="0"> <bounds x=" 78" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3096" element="Page3" state="0"> <bounds x=" 78" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3097" element="Page3" state="0"> <bounds x=" 78" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3098" element="Page3" state="0"> <bounds x=" 84" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3099" element="Page3" state="0"> <bounds x=" 84" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3100" element="Page3" state="0"> <bounds x=" 84" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3101" element="Page3" state="0"> <bounds x=" 84" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3102" element="Page3" state="0"> <bounds x=" 84" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3103" element="Page3" state="0"> <bounds x=" 84" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3104" element="Page3" state="0"> <bounds x=" 84" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3105" element="Page3" state="0"> <bounds x=" 90" y=" 0" width="5" height="1" /> </bezel>
- <bezel name="pg_3106" element="Page3" state="0"> <bounds x=" 90" y=" 1" width="5" height="1" /> </bezel>
- <bezel name="pg_3107" element="Page3" state="0"> <bounds x=" 90" y=" 2" width="5" height="1" /> </bezel>
- <bezel name="pg_3108" element="Page3" state="0"> <bounds x=" 90" y=" 3" width="5" height="1" /> </bezel>
- <bezel name="pg_3109" element="Page3" state="0"> <bounds x=" 90" y=" 4" width="5" height="1" /> </bezel>
- <bezel name="pg_3110" element="Page3" state="0"> <bounds x=" 90" y=" 5" width="5" height="1" /> </bezel>
- <bezel name="pg_3111" element="Page3" state="0"> <bounds x=" 90" y=" 6" width="5" height="1" /> </bezel>
- <bezel name="pg_3112" element="Page3" state="0"> <bounds x=" 0" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3113" element="Page3" state="0"> <bounds x=" 0" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3114" element="Page3" state="0"> <bounds x=" 0" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3115" element="Page3" state="0"> <bounds x=" 0" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3116" element="Page3" state="0"> <bounds x=" 0" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3117" element="Page3" state="0"> <bounds x=" 0" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3118" element="Page3" state="0"> <bounds x=" 0" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3119" element="Page3" state="0"> <bounds x=" 6" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3120" element="Page3" state="0"> <bounds x=" 6" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3121" element="Page3" state="0"> <bounds x=" 6" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3122" element="Page3" state="0"> <bounds x=" 6" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3123" element="Page3" state="0"> <bounds x=" 6" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3124" element="Page3" state="0"> <bounds x=" 6" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3125" element="Page3" state="0"> <bounds x=" 6" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3126" element="Page3" state="0"> <bounds x=" 12" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3127" element="Page3" state="0"> <bounds x=" 12" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3128" element="Page3" state="0"> <bounds x=" 12" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3129" element="Page3" state="0"> <bounds x=" 12" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3130" element="Page3" state="0"> <bounds x=" 12" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3131" element="Page3" state="0"> <bounds x=" 12" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3132" element="Page3" state="0"> <bounds x=" 12" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3133" element="Page3" state="0"> <bounds x=" 18" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3134" element="Page3" state="0"> <bounds x=" 18" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3135" element="Page3" state="0"> <bounds x=" 18" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3136" element="Page3" state="0"> <bounds x=" 18" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3137" element="Page3" state="0"> <bounds x=" 18" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3138" element="Page3" state="0"> <bounds x=" 18" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3139" element="Page3" state="0"> <bounds x=" 18" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3140" element="Page3" state="0"> <bounds x=" 24" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3141" element="Page3" state="0"> <bounds x=" 24" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3142" element="Page3" state="0"> <bounds x=" 24" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3143" element="Page3" state="0"> <bounds x=" 24" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3144" element="Page3" state="0"> <bounds x=" 24" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3145" element="Page3" state="0"> <bounds x=" 24" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3146" element="Page3" state="0"> <bounds x=" 24" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3147" element="Page3" state="0"> <bounds x=" 30" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3148" element="Page3" state="0"> <bounds x=" 30" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3149" element="Page3" state="0"> <bounds x=" 30" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3150" element="Page3" state="0"> <bounds x=" 30" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3151" element="Page3" state="0"> <bounds x=" 30" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3152" element="Page3" state="0"> <bounds x=" 30" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3153" element="Page3" state="0"> <bounds x=" 30" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3154" element="Page3" state="0"> <bounds x=" 36" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3155" element="Page3" state="0"> <bounds x=" 36" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3156" element="Page3" state="0"> <bounds x=" 36" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3157" element="Page3" state="0"> <bounds x=" 36" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3158" element="Page3" state="0"> <bounds x=" 36" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3159" element="Page3" state="0"> <bounds x=" 36" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3160" element="Page3" state="0"> <bounds x=" 36" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3161" element="Page3" state="0"> <bounds x=" 42" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3162" element="Page3" state="0"> <bounds x=" 42" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3163" element="Page3" state="0"> <bounds x=" 42" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3164" element="Page3" state="0"> <bounds x=" 42" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3165" element="Page3" state="0"> <bounds x=" 42" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3166" element="Page3" state="0"> <bounds x=" 42" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3167" element="Page3" state="0"> <bounds x=" 42" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3168" element="Page3" state="0"> <bounds x=" 48" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3169" element="Page3" state="0"> <bounds x=" 48" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3170" element="Page3" state="0"> <bounds x=" 48" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3171" element="Page3" state="0"> <bounds x=" 48" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3172" element="Page3" state="0"> <bounds x=" 48" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3173" element="Page3" state="0"> <bounds x=" 48" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3174" element="Page3" state="0"> <bounds x=" 48" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3175" element="Page3" state="0"> <bounds x=" 54" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3176" element="Page3" state="0"> <bounds x=" 54" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3177" element="Page3" state="0"> <bounds x=" 54" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3178" element="Page3" state="0"> <bounds x=" 54" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3179" element="Page3" state="0"> <bounds x=" 54" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3180" element="Page3" state="0"> <bounds x=" 54" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3181" element="Page3" state="0"> <bounds x=" 54" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3182" element="Page3" state="0"> <bounds x=" 60" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3183" element="Page3" state="0"> <bounds x=" 60" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3184" element="Page3" state="0"> <bounds x=" 60" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3185" element="Page3" state="0"> <bounds x=" 60" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3186" element="Page3" state="0"> <bounds x=" 60" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3187" element="Page3" state="0"> <bounds x=" 60" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3188" element="Page3" state="0"> <bounds x=" 60" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3189" element="Page3" state="0"> <bounds x=" 66" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3190" element="Page3" state="0"> <bounds x=" 66" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3191" element="Page3" state="0"> <bounds x=" 66" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3192" element="Page3" state="0"> <bounds x=" 66" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3193" element="Page3" state="0"> <bounds x=" 66" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3194" element="Page3" state="0"> <bounds x=" 66" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3195" element="Page3" state="0"> <bounds x=" 66" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3196" element="Page3" state="0"> <bounds x=" 72" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3197" element="Page3" state="0"> <bounds x=" 72" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3198" element="Page3" state="0"> <bounds x=" 72" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3199" element="Page3" state="0"> <bounds x=" 72" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3200" element="Page3" state="0"> <bounds x=" 72" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3201" element="Page3" state="0"> <bounds x=" 72" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3202" element="Page3" state="0"> <bounds x=" 72" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3203" element="Page3" state="0"> <bounds x=" 78" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3204" element="Page3" state="0"> <bounds x=" 78" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3205" element="Page3" state="0"> <bounds x=" 78" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3206" element="Page3" state="0"> <bounds x=" 78" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3207" element="Page3" state="0"> <bounds x=" 78" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3208" element="Page3" state="0"> <bounds x=" 78" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3209" element="Page3" state="0"> <bounds x=" 78" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3210" element="Page3" state="0"> <bounds x=" 84" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3211" element="Page3" state="0"> <bounds x=" 84" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3212" element="Page3" state="0"> <bounds x=" 84" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3213" element="Page3" state="0"> <bounds x=" 84" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3214" element="Page3" state="0"> <bounds x=" 84" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3215" element="Page3" state="0"> <bounds x=" 84" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3216" element="Page3" state="0"> <bounds x=" 84" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_3217" element="Page3" state="0"> <bounds x=" 90" y=" 10" width="5" height="1" /> </bezel>
- <bezel name="pg_3218" element="Page3" state="0"> <bounds x=" 90" y=" 11" width="5" height="1" /> </bezel>
- <bezel name="pg_3219" element="Page3" state="0"> <bounds x=" 90" y=" 12" width="5" height="1" /> </bezel>
- <bezel name="pg_3220" element="Page3" state="0"> <bounds x=" 90" y=" 13" width="5" height="1" /> </bezel>
- <bezel name="pg_3221" element="Page3" state="0"> <bounds x=" 90" y=" 14" width="5" height="1" /> </bezel>
- <bezel name="pg_3222" element="Page3" state="0"> <bounds x=" 90" y=" 15" width="5" height="1" /> </bezel>
- <bezel name="pg_3223" element="Page3" state="0"> <bounds x=" 90" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="rLed_6" element="rLeds"> <bounds x="260" y="20" width="5" height="3" /> </bezel>
+ <bezel name="rLed_7" element="rLeds"> <bounds x="270" y="20" width="5" height="3" /> </bezel>
+ <bezel name="rLed_14" element="rLeds"> <bounds x="280" y="20" width="5" height="3" /> </bezel>
+ <bezel name="rLed_15" element="rLeds"> <bounds x="290" y="20" width="5" height="3" /> </bezel>
+ <bezel name="pg_3000" element="Page3" state="0"> <bounds x=" 0" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3001" element="Page3" state="0"> <bounds x=" 0" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3002" element="Page3" state="0"> <bounds x=" 0" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3003" element="Page3" state="0"> <bounds x=" 0" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3004" element="Page3" state="0"> <bounds x=" 0" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3005" element="Page3" state="0"> <bounds x=" 0" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3006" element="Page3" state="0"> <bounds x=" 0" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3007" element="Page3" state="0"> <bounds x=" 6" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3008" element="Page3" state="0"> <bounds x=" 6" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3009" element="Page3" state="0"> <bounds x=" 6" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3010" element="Page3" state="0"> <bounds x=" 6" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3011" element="Page3" state="0"> <bounds x=" 6" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3012" element="Page3" state="0"> <bounds x=" 6" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3013" element="Page3" state="0"> <bounds x=" 6" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3014" element="Page3" state="0"> <bounds x=" 12" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3015" element="Page3" state="0"> <bounds x=" 12" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3016" element="Page3" state="0"> <bounds x=" 12" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3017" element="Page3" state="0"> <bounds x=" 12" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3018" element="Page3" state="0"> <bounds x=" 12" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3019" element="Page3" state="0"> <bounds x=" 12" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3020" element="Page3" state="0"> <bounds x=" 12" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3021" element="Page3" state="0"> <bounds x=" 18" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3022" element="Page3" state="0"> <bounds x=" 18" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3023" element="Page3" state="0"> <bounds x=" 18" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3024" element="Page3" state="0"> <bounds x=" 18" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3025" element="Page3" state="0"> <bounds x=" 18" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3026" element="Page3" state="0"> <bounds x=" 18" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3027" element="Page3" state="0"> <bounds x=" 18" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3028" element="Page3" state="0"> <bounds x=" 24" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3029" element="Page3" state="0"> <bounds x=" 24" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3030" element="Page3" state="0"> <bounds x=" 24" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3031" element="Page3" state="0"> <bounds x=" 24" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3032" element="Page3" state="0"> <bounds x=" 24" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3033" element="Page3" state="0"> <bounds x=" 24" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3034" element="Page3" state="0"> <bounds x=" 24" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3035" element="Page3" state="0"> <bounds x=" 30" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3036" element="Page3" state="0"> <bounds x=" 30" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3037" element="Page3" state="0"> <bounds x=" 30" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3038" element="Page3" state="0"> <bounds x=" 30" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3039" element="Page3" state="0"> <bounds x=" 30" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3040" element="Page3" state="0"> <bounds x=" 30" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3041" element="Page3" state="0"> <bounds x=" 30" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3042" element="Page3" state="0"> <bounds x=" 36" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3043" element="Page3" state="0"> <bounds x=" 36" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3044" element="Page3" state="0"> <bounds x=" 36" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3045" element="Page3" state="0"> <bounds x=" 36" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3046" element="Page3" state="0"> <bounds x=" 36" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3047" element="Page3" state="0"> <bounds x=" 36" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3048" element="Page3" state="0"> <bounds x=" 36" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3049" element="Page3" state="0"> <bounds x=" 42" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3050" element="Page3" state="0"> <bounds x=" 42" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3051" element="Page3" state="0"> <bounds x=" 42" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3052" element="Page3" state="0"> <bounds x=" 42" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3053" element="Page3" state="0"> <bounds x=" 42" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3054" element="Page3" state="0"> <bounds x=" 42" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3055" element="Page3" state="0"> <bounds x=" 42" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3056" element="Page3" state="0"> <bounds x=" 48" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3057" element="Page3" state="0"> <bounds x=" 48" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3058" element="Page3" state="0"> <bounds x=" 48" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3059" element="Page3" state="0"> <bounds x=" 48" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3060" element="Page3" state="0"> <bounds x=" 48" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3061" element="Page3" state="0"> <bounds x=" 48" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3062" element="Page3" state="0"> <bounds x=" 48" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3063" element="Page3" state="0"> <bounds x=" 54" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3064" element="Page3" state="0"> <bounds x=" 54" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3065" element="Page3" state="0"> <bounds x=" 54" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3066" element="Page3" state="0"> <bounds x=" 54" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3067" element="Page3" state="0"> <bounds x=" 54" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3068" element="Page3" state="0"> <bounds x=" 54" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3069" element="Page3" state="0"> <bounds x=" 54" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3070" element="Page3" state="0"> <bounds x=" 60" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3071" element="Page3" state="0"> <bounds x=" 60" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3072" element="Page3" state="0"> <bounds x=" 60" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3073" element="Page3" state="0"> <bounds x=" 60" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3074" element="Page3" state="0"> <bounds x=" 60" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3075" element="Page3" state="0"> <bounds x=" 60" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3076" element="Page3" state="0"> <bounds x=" 60" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3077" element="Page3" state="0"> <bounds x=" 66" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3078" element="Page3" state="0"> <bounds x=" 66" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3079" element="Page3" state="0"> <bounds x=" 66" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3080" element="Page3" state="0"> <bounds x=" 66" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3081" element="Page3" state="0"> <bounds x=" 66" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3082" element="Page3" state="0"> <bounds x=" 66" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3083" element="Page3" state="0"> <bounds x=" 66" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3084" element="Page3" state="0"> <bounds x=" 72" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3085" element="Page3" state="0"> <bounds x=" 72" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3086" element="Page3" state="0"> <bounds x=" 72" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3087" element="Page3" state="0"> <bounds x=" 72" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3088" element="Page3" state="0"> <bounds x=" 72" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3089" element="Page3" state="0"> <bounds x=" 72" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3090" element="Page3" state="0"> <bounds x=" 72" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3091" element="Page3" state="0"> <bounds x=" 78" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3092" element="Page3" state="0"> <bounds x=" 78" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3093" element="Page3" state="0"> <bounds x=" 78" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3094" element="Page3" state="0"> <bounds x=" 78" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3095" element="Page3" state="0"> <bounds x=" 78" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3096" element="Page3" state="0"> <bounds x=" 78" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3097" element="Page3" state="0"> <bounds x=" 78" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3098" element="Page3" state="0"> <bounds x=" 84" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3099" element="Page3" state="0"> <bounds x=" 84" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3100" element="Page3" state="0"> <bounds x=" 84" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3101" element="Page3" state="0"> <bounds x=" 84" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3102" element="Page3" state="0"> <bounds x=" 84" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3103" element="Page3" state="0"> <bounds x=" 84" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3104" element="Page3" state="0"> <bounds x=" 84" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3105" element="Page3" state="0"> <bounds x=" 90" y=" 0" width="5" height="1" /> </bezel>
+ <bezel name="pg_3106" element="Page3" state="0"> <bounds x=" 90" y=" 1" width="5" height="1" /> </bezel>
+ <bezel name="pg_3107" element="Page3" state="0"> <bounds x=" 90" y=" 2" width="5" height="1" /> </bezel>
+ <bezel name="pg_3108" element="Page3" state="0"> <bounds x=" 90" y=" 3" width="5" height="1" /> </bezel>
+ <bezel name="pg_3109" element="Page3" state="0"> <bounds x=" 90" y=" 4" width="5" height="1" /> </bezel>
+ <bezel name="pg_3110" element="Page3" state="0"> <bounds x=" 90" y=" 5" width="5" height="1" /> </bezel>
+ <bezel name="pg_3111" element="Page3" state="0"> <bounds x=" 90" y=" 6" width="5" height="1" /> </bezel>
+ <bezel name="pg_3112" element="Page3" state="0"> <bounds x=" 0" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3113" element="Page3" state="0"> <bounds x=" 0" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3114" element="Page3" state="0"> <bounds x=" 0" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3115" element="Page3" state="0"> <bounds x=" 0" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3116" element="Page3" state="0"> <bounds x=" 0" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3117" element="Page3" state="0"> <bounds x=" 0" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3118" element="Page3" state="0"> <bounds x=" 0" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3119" element="Page3" state="0"> <bounds x=" 6" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3120" element="Page3" state="0"> <bounds x=" 6" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3121" element="Page3" state="0"> <bounds x=" 6" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3122" element="Page3" state="0"> <bounds x=" 6" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3123" element="Page3" state="0"> <bounds x=" 6" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3124" element="Page3" state="0"> <bounds x=" 6" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3125" element="Page3" state="0"> <bounds x=" 6" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3126" element="Page3" state="0"> <bounds x=" 12" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3127" element="Page3" state="0"> <bounds x=" 12" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3128" element="Page3" state="0"> <bounds x=" 12" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3129" element="Page3" state="0"> <bounds x=" 12" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3130" element="Page3" state="0"> <bounds x=" 12" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3131" element="Page3" state="0"> <bounds x=" 12" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3132" element="Page3" state="0"> <bounds x=" 12" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3133" element="Page3" state="0"> <bounds x=" 18" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3134" element="Page3" state="0"> <bounds x=" 18" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3135" element="Page3" state="0"> <bounds x=" 18" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3136" element="Page3" state="0"> <bounds x=" 18" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3137" element="Page3" state="0"> <bounds x=" 18" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3138" element="Page3" state="0"> <bounds x=" 18" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3139" element="Page3" state="0"> <bounds x=" 18" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3140" element="Page3" state="0"> <bounds x=" 24" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3141" element="Page3" state="0"> <bounds x=" 24" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3142" element="Page3" state="0"> <bounds x=" 24" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3143" element="Page3" state="0"> <bounds x=" 24" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3144" element="Page3" state="0"> <bounds x=" 24" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3145" element="Page3" state="0"> <bounds x=" 24" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3146" element="Page3" state="0"> <bounds x=" 24" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3147" element="Page3" state="0"> <bounds x=" 30" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3148" element="Page3" state="0"> <bounds x=" 30" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3149" element="Page3" state="0"> <bounds x=" 30" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3150" element="Page3" state="0"> <bounds x=" 30" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3151" element="Page3" state="0"> <bounds x=" 30" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3152" element="Page3" state="0"> <bounds x=" 30" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3153" element="Page3" state="0"> <bounds x=" 30" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3154" element="Page3" state="0"> <bounds x=" 36" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3155" element="Page3" state="0"> <bounds x=" 36" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3156" element="Page3" state="0"> <bounds x=" 36" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3157" element="Page3" state="0"> <bounds x=" 36" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3158" element="Page3" state="0"> <bounds x=" 36" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3159" element="Page3" state="0"> <bounds x=" 36" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3160" element="Page3" state="0"> <bounds x=" 36" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3161" element="Page3" state="0"> <bounds x=" 42" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3162" element="Page3" state="0"> <bounds x=" 42" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3163" element="Page3" state="0"> <bounds x=" 42" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3164" element="Page3" state="0"> <bounds x=" 42" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3165" element="Page3" state="0"> <bounds x=" 42" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3166" element="Page3" state="0"> <bounds x=" 42" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3167" element="Page3" state="0"> <bounds x=" 42" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3168" element="Page3" state="0"> <bounds x=" 48" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3169" element="Page3" state="0"> <bounds x=" 48" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3170" element="Page3" state="0"> <bounds x=" 48" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3171" element="Page3" state="0"> <bounds x=" 48" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3172" element="Page3" state="0"> <bounds x=" 48" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3173" element="Page3" state="0"> <bounds x=" 48" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3174" element="Page3" state="0"> <bounds x=" 48" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3175" element="Page3" state="0"> <bounds x=" 54" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3176" element="Page3" state="0"> <bounds x=" 54" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3177" element="Page3" state="0"> <bounds x=" 54" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3178" element="Page3" state="0"> <bounds x=" 54" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3179" element="Page3" state="0"> <bounds x=" 54" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3180" element="Page3" state="0"> <bounds x=" 54" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3181" element="Page3" state="0"> <bounds x=" 54" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3182" element="Page3" state="0"> <bounds x=" 60" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3183" element="Page3" state="0"> <bounds x=" 60" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3184" element="Page3" state="0"> <bounds x=" 60" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3185" element="Page3" state="0"> <bounds x=" 60" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3186" element="Page3" state="0"> <bounds x=" 60" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3187" element="Page3" state="0"> <bounds x=" 60" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3188" element="Page3" state="0"> <bounds x=" 60" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3189" element="Page3" state="0"> <bounds x=" 66" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3190" element="Page3" state="0"> <bounds x=" 66" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3191" element="Page3" state="0"> <bounds x=" 66" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3192" element="Page3" state="0"> <bounds x=" 66" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3193" element="Page3" state="0"> <bounds x=" 66" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3194" element="Page3" state="0"> <bounds x=" 66" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3195" element="Page3" state="0"> <bounds x=" 66" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3196" element="Page3" state="0"> <bounds x=" 72" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3197" element="Page3" state="0"> <bounds x=" 72" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3198" element="Page3" state="0"> <bounds x=" 72" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3199" element="Page3" state="0"> <bounds x=" 72" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3200" element="Page3" state="0"> <bounds x=" 72" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3201" element="Page3" state="0"> <bounds x=" 72" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3202" element="Page3" state="0"> <bounds x=" 72" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3203" element="Page3" state="0"> <bounds x=" 78" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3204" element="Page3" state="0"> <bounds x=" 78" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3205" element="Page3" state="0"> <bounds x=" 78" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3206" element="Page3" state="0"> <bounds x=" 78" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3207" element="Page3" state="0"> <bounds x=" 78" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3208" element="Page3" state="0"> <bounds x=" 78" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3209" element="Page3" state="0"> <bounds x=" 78" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3210" element="Page3" state="0"> <bounds x=" 84" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3211" element="Page3" state="0"> <bounds x=" 84" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3212" element="Page3" state="0"> <bounds x=" 84" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3213" element="Page3" state="0"> <bounds x=" 84" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3214" element="Page3" state="0"> <bounds x=" 84" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3215" element="Page3" state="0"> <bounds x=" 84" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3216" element="Page3" state="0"> <bounds x=" 84" y=" 16" width="5" height="1" /> </bezel>
+ <bezel name="pg_3217" element="Page3" state="0"> <bounds x=" 90" y=" 10" width="5" height="1" /> </bezel>
+ <bezel name="pg_3218" element="Page3" state="0"> <bounds x=" 90" y=" 11" width="5" height="1" /> </bezel>
+ <bezel name="pg_3219" element="Page3" state="0"> <bounds x=" 90" y=" 12" width="5" height="1" /> </bezel>
+ <bezel name="pg_3220" element="Page3" state="0"> <bounds x=" 90" y=" 13" width="5" height="1" /> </bezel>
+ <bezel name="pg_3221" element="Page3" state="0"> <bounds x=" 90" y=" 14" width="5" height="1" /> </bezel>
+ <bezel name="pg_3222" element="Page3" state="0"> <bounds x=" 90" y=" 15" width="5" height="1" /> </bezel>
+ <bezel name="pg_3223" element="Page3" state="0"> <bounds x=" 90" y=" 16" width="5" height="1" /> </bezel>
- <bezel name="pg_2000" element="Page2" state="0"> <bounds x=" 0" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2001" element="Page2" state="0"> <bounds x=" 0" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2002" element="Page2" state="0"> <bounds x=" 0" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2003" element="Page2" state="0"> <bounds x=" 0" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2004" element="Page2" state="0"> <bounds x=" 0" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2005" element="Page2" state="0"> <bounds x=" 0" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2006" element="Page2" state="0"> <bounds x=" 0" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2007" element="Page2" state="0"> <bounds x=" 6" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2008" element="Page2" state="0"> <bounds x=" 6" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2009" element="Page2" state="0"> <bounds x=" 6" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2010" element="Page2" state="0"> <bounds x=" 6" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2011" element="Page2" state="0"> <bounds x=" 6" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2012" element="Page2" state="0"> <bounds x=" 6" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2013" element="Page2" state="0"> <bounds x=" 6" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2014" element="Page2" state="0"> <bounds x=" 12" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2015" element="Page2" state="0"> <bounds x=" 12" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2016" element="Page2" state="0"> <bounds x=" 12" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2017" element="Page2" state="0"> <bounds x=" 12" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2018" element="Page2" state="0"> <bounds x=" 12" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2019" element="Page2" state="0"> <bounds x=" 12" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2020" element="Page2" state="0"> <bounds x=" 12" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2021" element="Page2" state="0"> <bounds x=" 18" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2022" element="Page2" state="0"> <bounds x=" 18" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2023" element="Page2" state="0"> <bounds x=" 18" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2024" element="Page2" state="0"> <bounds x=" 18" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2025" element="Page2" state="0"> <bounds x=" 18" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2026" element="Page2" state="0"> <bounds x=" 18" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2027" element="Page2" state="0"> <bounds x=" 18" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2028" element="Page2" state="0"> <bounds x=" 24" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2029" element="Page2" state="0"> <bounds x=" 24" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2030" element="Page2" state="0"> <bounds x=" 24" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2031" element="Page2" state="0"> <bounds x=" 24" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2032" element="Page2" state="0"> <bounds x=" 24" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2033" element="Page2" state="0"> <bounds x=" 24" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2034" element="Page2" state="0"> <bounds x=" 24" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2035" element="Page2" state="0"> <bounds x=" 30" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2036" element="Page2" state="0"> <bounds x=" 30" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2037" element="Page2" state="0"> <bounds x=" 30" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2038" element="Page2" state="0"> <bounds x=" 30" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2039" element="Page2" state="0"> <bounds x=" 30" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2040" element="Page2" state="0"> <bounds x=" 30" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2041" element="Page2" state="0"> <bounds x=" 30" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2042" element="Page2" state="0"> <bounds x=" 36" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2043" element="Page2" state="0"> <bounds x=" 36" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2044" element="Page2" state="0"> <bounds x=" 36" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2045" element="Page2" state="0"> <bounds x=" 36" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2046" element="Page2" state="0"> <bounds x=" 36" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2047" element="Page2" state="0"> <bounds x=" 36" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2048" element="Page2" state="0"> <bounds x=" 36" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2049" element="Page2" state="0"> <bounds x=" 42" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2050" element="Page2" state="0"> <bounds x=" 42" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2051" element="Page2" state="0"> <bounds x=" 42" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2052" element="Page2" state="0"> <bounds x=" 42" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2053" element="Page2" state="0"> <bounds x=" 42" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2054" element="Page2" state="0"> <bounds x=" 42" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2055" element="Page2" state="0"> <bounds x=" 42" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2056" element="Page2" state="0"> <bounds x=" 48" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2057" element="Page2" state="0"> <bounds x=" 48" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2058" element="Page2" state="0"> <bounds x=" 48" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2059" element="Page2" state="0"> <bounds x=" 48" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2060" element="Page2" state="0"> <bounds x=" 48" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2061" element="Page2" state="0"> <bounds x=" 48" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2062" element="Page2" state="0"> <bounds x=" 48" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2063" element="Page2" state="0"> <bounds x=" 54" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2064" element="Page2" state="0"> <bounds x=" 54" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2065" element="Page2" state="0"> <bounds x=" 54" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2066" element="Page2" state="0"> <bounds x=" 54" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2067" element="Page2" state="0"> <bounds x=" 54" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2068" element="Page2" state="0"> <bounds x=" 54" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2069" element="Page2" state="0"> <bounds x=" 54" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2070" element="Page2" state="0"> <bounds x=" 60" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2071" element="Page2" state="0"> <bounds x=" 60" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2072" element="Page2" state="0"> <bounds x=" 60" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2073" element="Page2" state="0"> <bounds x=" 60" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2074" element="Page2" state="0"> <bounds x=" 60" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2075" element="Page2" state="0"> <bounds x=" 60" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2076" element="Page2" state="0"> <bounds x=" 60" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2077" element="Page2" state="0"> <bounds x=" 66" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2078" element="Page2" state="0"> <bounds x=" 66" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2079" element="Page2" state="0"> <bounds x=" 66" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2080" element="Page2" state="0"> <bounds x=" 66" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2081" element="Page2" state="0"> <bounds x=" 66" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2082" element="Page2" state="0"> <bounds x=" 66" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2083" element="Page2" state="0"> <bounds x=" 66" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2084" element="Page2" state="0"> <bounds x=" 72" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2085" element="Page2" state="0"> <bounds x=" 72" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2086" element="Page2" state="0"> <bounds x=" 72" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2087" element="Page2" state="0"> <bounds x=" 72" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2088" element="Page2" state="0"> <bounds x=" 72" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2089" element="Page2" state="0"> <bounds x=" 72" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2090" element="Page2" state="0"> <bounds x=" 72" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2091" element="Page2" state="0"> <bounds x=" 78" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2092" element="Page2" state="0"> <bounds x=" 78" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2093" element="Page2" state="0"> <bounds x=" 78" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2094" element="Page2" state="0"> <bounds x=" 78" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2095" element="Page2" state="0"> <bounds x=" 78" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2096" element="Page2" state="0"> <bounds x=" 78" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2097" element="Page2" state="0"> <bounds x=" 78" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2098" element="Page2" state="0"> <bounds x=" 84" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2099" element="Page2" state="0"> <bounds x=" 84" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2100" element="Page2" state="0"> <bounds x=" 84" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2101" element="Page2" state="0"> <bounds x=" 84" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2102" element="Page2" state="0"> <bounds x=" 84" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2103" element="Page2" state="0"> <bounds x=" 84" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2104" element="Page2" state="0"> <bounds x=" 84" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2105" element="Page2" state="0"> <bounds x=" 90" y=" 20" width="5" height="1" /> </bezel>
- <bezel name="pg_2106" element="Page2" state="0"> <bounds x=" 90" y=" 21" width="5" height="1" /> </bezel>
- <bezel name="pg_2107" element="Page2" state="0"> <bounds x=" 90" y=" 22" width="5" height="1" /> </bezel>
- <bezel name="pg_2108" element="Page2" state="0"> <bounds x=" 90" y=" 23" width="5" height="1" /> </bezel>
- <bezel name="pg_2109" element="Page2" state="0"> <bounds x=" 90" y=" 24" width="5" height="1" /> </bezel>
- <bezel name="pg_2110" element="Page2" state="0"> <bounds x=" 90" y=" 25" width="5" height="1" /> </bezel>
- <bezel name="pg_2111" element="Page2" state="0"> <bounds x=" 90" y=" 26" width="5" height="1" /> </bezel>
- <bezel name="pg_2112" element="Page2" state="0"> <bounds x=" 0" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2113" element="Page2" state="0"> <bounds x=" 0" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2114" element="Page2" state="0"> <bounds x=" 0" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2115" element="Page2" state="0"> <bounds x=" 0" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2116" element="Page2" state="0"> <bounds x=" 0" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2117" element="Page2" state="0"> <bounds x=" 0" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2118" element="Page2" state="0"> <bounds x=" 0" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2119" element="Page2" state="0"> <bounds x=" 6" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2120" element="Page2" state="0"> <bounds x=" 6" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2121" element="Page2" state="0"> <bounds x=" 6" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2122" element="Page2" state="0"> <bounds x=" 6" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2123" element="Page2" state="0"> <bounds x=" 6" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2124" element="Page2" state="0"> <bounds x=" 6" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2125" element="Page2" state="0"> <bounds x=" 6" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2126" element="Page2" state="0"> <bounds x=" 12" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2127" element="Page2" state="0"> <bounds x=" 12" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2128" element="Page2" state="0"> <bounds x=" 12" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2129" element="Page2" state="0"> <bounds x=" 12" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2130" element="Page2" state="0"> <bounds x=" 12" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2131" element="Page2" state="0"> <bounds x=" 12" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2132" element="Page2" state="0"> <bounds x=" 12" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2133" element="Page2" state="0"> <bounds x=" 18" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2134" element="Page2" state="0"> <bounds x=" 18" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2135" element="Page2" state="0"> <bounds x=" 18" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2136" element="Page2" state="0"> <bounds x=" 18" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2137" element="Page2" state="0"> <bounds x=" 18" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2138" element="Page2" state="0"> <bounds x=" 18" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2139" element="Page2" state="0"> <bounds x=" 18" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2140" element="Page2" state="0"> <bounds x=" 24" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2141" element="Page2" state="0"> <bounds x=" 24" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2142" element="Page2" state="0"> <bounds x=" 24" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2143" element="Page2" state="0"> <bounds x=" 24" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2144" element="Page2" state="0"> <bounds x=" 24" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2145" element="Page2" state="0"> <bounds x=" 24" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2146" element="Page2" state="0"> <bounds x=" 24" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2147" element="Page2" state="0"> <bounds x=" 30" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2148" element="Page2" state="0"> <bounds x=" 30" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2149" element="Page2" state="0"> <bounds x=" 30" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2150" element="Page2" state="0"> <bounds x=" 30" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2151" element="Page2" state="0"> <bounds x=" 30" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2152" element="Page2" state="0"> <bounds x=" 30" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2153" element="Page2" state="0"> <bounds x=" 30" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2154" element="Page2" state="0"> <bounds x=" 36" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2155" element="Page2" state="0"> <bounds x=" 36" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2156" element="Page2" state="0"> <bounds x=" 36" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2157" element="Page2" state="0"> <bounds x=" 36" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2158" element="Page2" state="0"> <bounds x=" 36" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2159" element="Page2" state="0"> <bounds x=" 36" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2160" element="Page2" state="0"> <bounds x=" 36" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2161" element="Page2" state="0"> <bounds x=" 42" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2162" element="Page2" state="0"> <bounds x=" 42" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2163" element="Page2" state="0"> <bounds x=" 42" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2164" element="Page2" state="0"> <bounds x=" 42" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2165" element="Page2" state="0"> <bounds x=" 42" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2166" element="Page2" state="0"> <bounds x=" 42" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2167" element="Page2" state="0"> <bounds x=" 42" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2168" element="Page2" state="0"> <bounds x=" 48" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2169" element="Page2" state="0"> <bounds x=" 48" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2170" element="Page2" state="0"> <bounds x=" 48" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2171" element="Page2" state="0"> <bounds x=" 48" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2172" element="Page2" state="0"> <bounds x=" 48" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2173" element="Page2" state="0"> <bounds x=" 48" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2174" element="Page2" state="0"> <bounds x=" 48" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2175" element="Page2" state="0"> <bounds x=" 54" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2176" element="Page2" state="0"> <bounds x=" 54" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2177" element="Page2" state="0"> <bounds x=" 54" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2178" element="Page2" state="0"> <bounds x=" 54" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2179" element="Page2" state="0"> <bounds x=" 54" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2180" element="Page2" state="0"> <bounds x=" 54" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2181" element="Page2" state="0"> <bounds x=" 54" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2182" element="Page2" state="0"> <bounds x=" 60" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2183" element="Page2" state="0"> <bounds x=" 60" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2184" element="Page2" state="0"> <bounds x=" 60" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2185" element="Page2" state="0"> <bounds x=" 60" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2186" element="Page2" state="0"> <bounds x=" 60" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2187" element="Page2" state="0"> <bounds x=" 60" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2188" element="Page2" state="0"> <bounds x=" 60" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2189" element="Page2" state="0"> <bounds x=" 66" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2190" element="Page2" state="0"> <bounds x=" 66" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2191" element="Page2" state="0"> <bounds x=" 66" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2192" element="Page2" state="0"> <bounds x=" 66" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2193" element="Page2" state="0"> <bounds x=" 66" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2194" element="Page2" state="0"> <bounds x=" 66" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2195" element="Page2" state="0"> <bounds x=" 66" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2196" element="Page2" state="0"> <bounds x=" 72" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2197" element="Page2" state="0"> <bounds x=" 72" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2198" element="Page2" state="0"> <bounds x=" 72" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2199" element="Page2" state="0"> <bounds x=" 72" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2200" element="Page2" state="0"> <bounds x=" 72" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2201" element="Page2" state="0"> <bounds x=" 72" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2202" element="Page2" state="0"> <bounds x=" 72" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2203" element="Page2" state="0"> <bounds x=" 78" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2204" element="Page2" state="0"> <bounds x=" 78" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2205" element="Page2" state="0"> <bounds x=" 78" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2206" element="Page2" state="0"> <bounds x=" 78" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2207" element="Page2" state="0"> <bounds x=" 78" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2208" element="Page2" state="0"> <bounds x=" 78" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2209" element="Page2" state="0"> <bounds x=" 78" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2210" element="Page2" state="0"> <bounds x=" 84" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2211" element="Page2" state="0"> <bounds x=" 84" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2212" element="Page2" state="0"> <bounds x=" 84" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2213" element="Page2" state="0"> <bounds x=" 84" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2214" element="Page2" state="0"> <bounds x=" 84" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2215" element="Page2" state="0"> <bounds x=" 84" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2216" element="Page2" state="0"> <bounds x=" 84" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_2217" element="Page2" state="0"> <bounds x=" 90" y=" 30" width="5" height="1" /> </bezel>
- <bezel name="pg_2218" element="Page2" state="0"> <bounds x=" 90" y=" 31" width="5" height="1" /> </bezel>
- <bezel name="pg_2219" element="Page2" state="0"> <bounds x=" 90" y=" 32" width="5" height="1" /> </bezel>
- <bezel name="pg_2220" element="Page2" state="0"> <bounds x=" 90" y=" 33" width="5" height="1" /> </bezel>
- <bezel name="pg_2221" element="Page2" state="0"> <bounds x=" 90" y=" 34" width="5" height="1" /> </bezel>
- <bezel name="pg_2222" element="Page2" state="0"> <bounds x=" 90" y=" 35" width="5" height="1" /> </bezel>
- <bezel name="pg_2223" element="Page2" state="0"> <bounds x=" 90" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2000" element="Page2" state="0"> <bounds x=" 0" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2001" element="Page2" state="0"> <bounds x=" 0" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2002" element="Page2" state="0"> <bounds x=" 0" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2003" element="Page2" state="0"> <bounds x=" 0" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2004" element="Page2" state="0"> <bounds x=" 0" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2005" element="Page2" state="0"> <bounds x=" 0" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2006" element="Page2" state="0"> <bounds x=" 0" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2007" element="Page2" state="0"> <bounds x=" 6" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2008" element="Page2" state="0"> <bounds x=" 6" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2009" element="Page2" state="0"> <bounds x=" 6" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2010" element="Page2" state="0"> <bounds x=" 6" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2011" element="Page2" state="0"> <bounds x=" 6" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2012" element="Page2" state="0"> <bounds x=" 6" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2013" element="Page2" state="0"> <bounds x=" 6" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2014" element="Page2" state="0"> <bounds x=" 12" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2015" element="Page2" state="0"> <bounds x=" 12" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2016" element="Page2" state="0"> <bounds x=" 12" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2017" element="Page2" state="0"> <bounds x=" 12" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2018" element="Page2" state="0"> <bounds x=" 12" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2019" element="Page2" state="0"> <bounds x=" 12" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2020" element="Page2" state="0"> <bounds x=" 12" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2021" element="Page2" state="0"> <bounds x=" 18" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2022" element="Page2" state="0"> <bounds x=" 18" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2023" element="Page2" state="0"> <bounds x=" 18" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2024" element="Page2" state="0"> <bounds x=" 18" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2025" element="Page2" state="0"> <bounds x=" 18" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2026" element="Page2" state="0"> <bounds x=" 18" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2027" element="Page2" state="0"> <bounds x=" 18" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2028" element="Page2" state="0"> <bounds x=" 24" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2029" element="Page2" state="0"> <bounds x=" 24" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2030" element="Page2" state="0"> <bounds x=" 24" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2031" element="Page2" state="0"> <bounds x=" 24" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2032" element="Page2" state="0"> <bounds x=" 24" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2033" element="Page2" state="0"> <bounds x=" 24" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2034" element="Page2" state="0"> <bounds x=" 24" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2035" element="Page2" state="0"> <bounds x=" 30" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2036" element="Page2" state="0"> <bounds x=" 30" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2037" element="Page2" state="0"> <bounds x=" 30" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2038" element="Page2" state="0"> <bounds x=" 30" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2039" element="Page2" state="0"> <bounds x=" 30" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2040" element="Page2" state="0"> <bounds x=" 30" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2041" element="Page2" state="0"> <bounds x=" 30" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2042" element="Page2" state="0"> <bounds x=" 36" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2043" element="Page2" state="0"> <bounds x=" 36" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2044" element="Page2" state="0"> <bounds x=" 36" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2045" element="Page2" state="0"> <bounds x=" 36" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2046" element="Page2" state="0"> <bounds x=" 36" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2047" element="Page2" state="0"> <bounds x=" 36" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2048" element="Page2" state="0"> <bounds x=" 36" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2049" element="Page2" state="0"> <bounds x=" 42" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2050" element="Page2" state="0"> <bounds x=" 42" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2051" element="Page2" state="0"> <bounds x=" 42" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2052" element="Page2" state="0"> <bounds x=" 42" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2053" element="Page2" state="0"> <bounds x=" 42" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2054" element="Page2" state="0"> <bounds x=" 42" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2055" element="Page2" state="0"> <bounds x=" 42" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2056" element="Page2" state="0"> <bounds x=" 48" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2057" element="Page2" state="0"> <bounds x=" 48" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2058" element="Page2" state="0"> <bounds x=" 48" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2059" element="Page2" state="0"> <bounds x=" 48" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2060" element="Page2" state="0"> <bounds x=" 48" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2061" element="Page2" state="0"> <bounds x=" 48" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2062" element="Page2" state="0"> <bounds x=" 48" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2063" element="Page2" state="0"> <bounds x=" 54" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2064" element="Page2" state="0"> <bounds x=" 54" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2065" element="Page2" state="0"> <bounds x=" 54" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2066" element="Page2" state="0"> <bounds x=" 54" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2067" element="Page2" state="0"> <bounds x=" 54" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2068" element="Page2" state="0"> <bounds x=" 54" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2069" element="Page2" state="0"> <bounds x=" 54" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2070" element="Page2" state="0"> <bounds x=" 60" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2071" element="Page2" state="0"> <bounds x=" 60" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2072" element="Page2" state="0"> <bounds x=" 60" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2073" element="Page2" state="0"> <bounds x=" 60" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2074" element="Page2" state="0"> <bounds x=" 60" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2075" element="Page2" state="0"> <bounds x=" 60" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2076" element="Page2" state="0"> <bounds x=" 60" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2077" element="Page2" state="0"> <bounds x=" 66" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2078" element="Page2" state="0"> <bounds x=" 66" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2079" element="Page2" state="0"> <bounds x=" 66" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2080" element="Page2" state="0"> <bounds x=" 66" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2081" element="Page2" state="0"> <bounds x=" 66" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2082" element="Page2" state="0"> <bounds x=" 66" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2083" element="Page2" state="0"> <bounds x=" 66" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2084" element="Page2" state="0"> <bounds x=" 72" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2085" element="Page2" state="0"> <bounds x=" 72" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2086" element="Page2" state="0"> <bounds x=" 72" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2087" element="Page2" state="0"> <bounds x=" 72" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2088" element="Page2" state="0"> <bounds x=" 72" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2089" element="Page2" state="0"> <bounds x=" 72" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2090" element="Page2" state="0"> <bounds x=" 72" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2091" element="Page2" state="0"> <bounds x=" 78" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2092" element="Page2" state="0"> <bounds x=" 78" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2093" element="Page2" state="0"> <bounds x=" 78" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2094" element="Page2" state="0"> <bounds x=" 78" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2095" element="Page2" state="0"> <bounds x=" 78" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2096" element="Page2" state="0"> <bounds x=" 78" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2097" element="Page2" state="0"> <bounds x=" 78" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2098" element="Page2" state="0"> <bounds x=" 84" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2099" element="Page2" state="0"> <bounds x=" 84" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2100" element="Page2" state="0"> <bounds x=" 84" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2101" element="Page2" state="0"> <bounds x=" 84" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2102" element="Page2" state="0"> <bounds x=" 84" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2103" element="Page2" state="0"> <bounds x=" 84" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2104" element="Page2" state="0"> <bounds x=" 84" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2105" element="Page2" state="0"> <bounds x=" 90" y=" 20" width="5" height="1" /> </bezel>
+ <bezel name="pg_2106" element="Page2" state="0"> <bounds x=" 90" y=" 21" width="5" height="1" /> </bezel>
+ <bezel name="pg_2107" element="Page2" state="0"> <bounds x=" 90" y=" 22" width="5" height="1" /> </bezel>
+ <bezel name="pg_2108" element="Page2" state="0"> <bounds x=" 90" y=" 23" width="5" height="1" /> </bezel>
+ <bezel name="pg_2109" element="Page2" state="0"> <bounds x=" 90" y=" 24" width="5" height="1" /> </bezel>
+ <bezel name="pg_2110" element="Page2" state="0"> <bounds x=" 90" y=" 25" width="5" height="1" /> </bezel>
+ <bezel name="pg_2111" element="Page2" state="0"> <bounds x=" 90" y=" 26" width="5" height="1" /> </bezel>
+ <bezel name="pg_2112" element="Page2" state="0"> <bounds x=" 0" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2113" element="Page2" state="0"> <bounds x=" 0" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2114" element="Page2" state="0"> <bounds x=" 0" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2115" element="Page2" state="0"> <bounds x=" 0" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2116" element="Page2" state="0"> <bounds x=" 0" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2117" element="Page2" state="0"> <bounds x=" 0" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2118" element="Page2" state="0"> <bounds x=" 0" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2119" element="Page2" state="0"> <bounds x=" 6" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2120" element="Page2" state="0"> <bounds x=" 6" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2121" element="Page2" state="0"> <bounds x=" 6" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2122" element="Page2" state="0"> <bounds x=" 6" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2123" element="Page2" state="0"> <bounds x=" 6" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2124" element="Page2" state="0"> <bounds x=" 6" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2125" element="Page2" state="0"> <bounds x=" 6" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2126" element="Page2" state="0"> <bounds x=" 12" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2127" element="Page2" state="0"> <bounds x=" 12" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2128" element="Page2" state="0"> <bounds x=" 12" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2129" element="Page2" state="0"> <bounds x=" 12" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2130" element="Page2" state="0"> <bounds x=" 12" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2131" element="Page2" state="0"> <bounds x=" 12" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2132" element="Page2" state="0"> <bounds x=" 12" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2133" element="Page2" state="0"> <bounds x=" 18" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2134" element="Page2" state="0"> <bounds x=" 18" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2135" element="Page2" state="0"> <bounds x=" 18" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2136" element="Page2" state="0"> <bounds x=" 18" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2137" element="Page2" state="0"> <bounds x=" 18" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2138" element="Page2" state="0"> <bounds x=" 18" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2139" element="Page2" state="0"> <bounds x=" 18" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2140" element="Page2" state="0"> <bounds x=" 24" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2141" element="Page2" state="0"> <bounds x=" 24" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2142" element="Page2" state="0"> <bounds x=" 24" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2143" element="Page2" state="0"> <bounds x=" 24" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2144" element="Page2" state="0"> <bounds x=" 24" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2145" element="Page2" state="0"> <bounds x=" 24" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2146" element="Page2" state="0"> <bounds x=" 24" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2147" element="Page2" state="0"> <bounds x=" 30" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2148" element="Page2" state="0"> <bounds x=" 30" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2149" element="Page2" state="0"> <bounds x=" 30" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2150" element="Page2" state="0"> <bounds x=" 30" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2151" element="Page2" state="0"> <bounds x=" 30" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2152" element="Page2" state="0"> <bounds x=" 30" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2153" element="Page2" state="0"> <bounds x=" 30" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2154" element="Page2" state="0"> <bounds x=" 36" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2155" element="Page2" state="0"> <bounds x=" 36" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2156" element="Page2" state="0"> <bounds x=" 36" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2157" element="Page2" state="0"> <bounds x=" 36" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2158" element="Page2" state="0"> <bounds x=" 36" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2159" element="Page2" state="0"> <bounds x=" 36" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2160" element="Page2" state="0"> <bounds x=" 36" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2161" element="Page2" state="0"> <bounds x=" 42" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2162" element="Page2" state="0"> <bounds x=" 42" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2163" element="Page2" state="0"> <bounds x=" 42" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2164" element="Page2" state="0"> <bounds x=" 42" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2165" element="Page2" state="0"> <bounds x=" 42" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2166" element="Page2" state="0"> <bounds x=" 42" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2167" element="Page2" state="0"> <bounds x=" 42" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2168" element="Page2" state="0"> <bounds x=" 48" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2169" element="Page2" state="0"> <bounds x=" 48" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2170" element="Page2" state="0"> <bounds x=" 48" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2171" element="Page2" state="0"> <bounds x=" 48" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2172" element="Page2" state="0"> <bounds x=" 48" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2173" element="Page2" state="0"> <bounds x=" 48" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2174" element="Page2" state="0"> <bounds x=" 48" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2175" element="Page2" state="0"> <bounds x=" 54" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2176" element="Page2" state="0"> <bounds x=" 54" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2177" element="Page2" state="0"> <bounds x=" 54" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2178" element="Page2" state="0"> <bounds x=" 54" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2179" element="Page2" state="0"> <bounds x=" 54" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2180" element="Page2" state="0"> <bounds x=" 54" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2181" element="Page2" state="0"> <bounds x=" 54" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2182" element="Page2" state="0"> <bounds x=" 60" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2183" element="Page2" state="0"> <bounds x=" 60" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2184" element="Page2" state="0"> <bounds x=" 60" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2185" element="Page2" state="0"> <bounds x=" 60" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2186" element="Page2" state="0"> <bounds x=" 60" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2187" element="Page2" state="0"> <bounds x=" 60" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2188" element="Page2" state="0"> <bounds x=" 60" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2189" element="Page2" state="0"> <bounds x=" 66" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2190" element="Page2" state="0"> <bounds x=" 66" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2191" element="Page2" state="0"> <bounds x=" 66" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2192" element="Page2" state="0"> <bounds x=" 66" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2193" element="Page2" state="0"> <bounds x=" 66" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2194" element="Page2" state="0"> <bounds x=" 66" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2195" element="Page2" state="0"> <bounds x=" 66" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2196" element="Page2" state="0"> <bounds x=" 72" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2197" element="Page2" state="0"> <bounds x=" 72" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2198" element="Page2" state="0"> <bounds x=" 72" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2199" element="Page2" state="0"> <bounds x=" 72" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2200" element="Page2" state="0"> <bounds x=" 72" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2201" element="Page2" state="0"> <bounds x=" 72" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2202" element="Page2" state="0"> <bounds x=" 72" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2203" element="Page2" state="0"> <bounds x=" 78" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2204" element="Page2" state="0"> <bounds x=" 78" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2205" element="Page2" state="0"> <bounds x=" 78" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2206" element="Page2" state="0"> <bounds x=" 78" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2207" element="Page2" state="0"> <bounds x=" 78" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2208" element="Page2" state="0"> <bounds x=" 78" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2209" element="Page2" state="0"> <bounds x=" 78" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2210" element="Page2" state="0"> <bounds x=" 84" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2211" element="Page2" state="0"> <bounds x=" 84" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2212" element="Page2" state="0"> <bounds x=" 84" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2213" element="Page2" state="0"> <bounds x=" 84" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2214" element="Page2" state="0"> <bounds x=" 84" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2215" element="Page2" state="0"> <bounds x=" 84" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2216" element="Page2" state="0"> <bounds x=" 84" y=" 36" width="5" height="1" /> </bezel>
+ <bezel name="pg_2217" element="Page2" state="0"> <bounds x=" 90" y=" 30" width="5" height="1" /> </bezel>
+ <bezel name="pg_2218" element="Page2" state="0"> <bounds x=" 90" y=" 31" width="5" height="1" /> </bezel>
+ <bezel name="pg_2219" element="Page2" state="0"> <bounds x=" 90" y=" 32" width="5" height="1" /> </bezel>
+ <bezel name="pg_2220" element="Page2" state="0"> <bounds x=" 90" y=" 33" width="5" height="1" /> </bezel>
+ <bezel name="pg_2221" element="Page2" state="0"> <bounds x=" 90" y=" 34" width="5" height="1" /> </bezel>
+ <bezel name="pg_2222" element="Page2" state="0"> <bounds x=" 90" y=" 35" width="5" height="1" /> </bezel>
+ <bezel name="pg_2223" element="Page2" state="0"> <bounds x=" 90" y=" 36" width="5" height="1" /> </bezel>
- <bezel name="pg_1000" element="Page1" state="0"> <bounds x=" 0" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1001" element="Page1" state="0"> <bounds x=" 0" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1002" element="Page1" state="0"> <bounds x=" 0" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1003" element="Page1" state="0"> <bounds x=" 0" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1004" element="Page1" state="0"> <bounds x=" 0" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1005" element="Page1" state="0"> <bounds x=" 0" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1006" element="Page1" state="0"> <bounds x=" 0" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1007" element="Page1" state="0"> <bounds x=" 6" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1008" element="Page1" state="0"> <bounds x=" 6" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1009" element="Page1" state="0"> <bounds x=" 6" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1010" element="Page1" state="0"> <bounds x=" 6" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1011" element="Page1" state="0"> <bounds x=" 6" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1012" element="Page1" state="0"> <bounds x=" 6" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1013" element="Page1" state="0"> <bounds x=" 6" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1014" element="Page1" state="0"> <bounds x=" 12" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1015" element="Page1" state="0"> <bounds x=" 12" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1016" element="Page1" state="0"> <bounds x=" 12" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1017" element="Page1" state="0"> <bounds x=" 12" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1018" element="Page1" state="0"> <bounds x=" 12" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1019" element="Page1" state="0"> <bounds x=" 12" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1020" element="Page1" state="0"> <bounds x=" 12" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1021" element="Page1" state="0"> <bounds x=" 18" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1022" element="Page1" state="0"> <bounds x=" 18" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1023" element="Page1" state="0"> <bounds x=" 18" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1024" element="Page1" state="0"> <bounds x=" 18" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1025" element="Page1" state="0"> <bounds x=" 18" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1026" element="Page1" state="0"> <bounds x=" 18" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1027" element="Page1" state="0"> <bounds x=" 18" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1028" element="Page1" state="0"> <bounds x=" 24" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1029" element="Page1" state="0"> <bounds x=" 24" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1030" element="Page1" state="0"> <bounds x=" 24" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1031" element="Page1" state="0"> <bounds x=" 24" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1032" element="Page1" state="0"> <bounds x=" 24" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1033" element="Page1" state="0"> <bounds x=" 24" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1034" element="Page1" state="0"> <bounds x=" 24" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1035" element="Page1" state="0"> <bounds x=" 30" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1036" element="Page1" state="0"> <bounds x=" 30" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1037" element="Page1" state="0"> <bounds x=" 30" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1038" element="Page1" state="0"> <bounds x=" 30" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1039" element="Page1" state="0"> <bounds x=" 30" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1040" element="Page1" state="0"> <bounds x=" 30" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1041" element="Page1" state="0"> <bounds x=" 30" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1042" element="Page1" state="0"> <bounds x=" 36" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1043" element="Page1" state="0"> <bounds x=" 36" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1044" element="Page1" state="0"> <bounds x=" 36" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1045" element="Page1" state="0"> <bounds x=" 36" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1046" element="Page1" state="0"> <bounds x=" 36" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1047" element="Page1" state="0"> <bounds x=" 36" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1048" element="Page1" state="0"> <bounds x=" 36" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1049" element="Page1" state="0"> <bounds x=" 42" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1050" element="Page1" state="0"> <bounds x=" 42" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1051" element="Page1" state="0"> <bounds x=" 42" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1052" element="Page1" state="0"> <bounds x=" 42" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1053" element="Page1" state="0"> <bounds x=" 42" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1054" element="Page1" state="0"> <bounds x=" 42" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1055" element="Page1" state="0"> <bounds x=" 42" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1056" element="Page1" state="0"> <bounds x=" 48" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1057" element="Page1" state="0"> <bounds x=" 48" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1058" element="Page1" state="0"> <bounds x=" 48" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1059" element="Page1" state="0"> <bounds x=" 48" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1060" element="Page1" state="0"> <bounds x=" 48" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1061" element="Page1" state="0"> <bounds x=" 48" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1062" element="Page1" state="0"> <bounds x=" 48" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1063" element="Page1" state="0"> <bounds x=" 54" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1064" element="Page1" state="0"> <bounds x=" 54" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1065" element="Page1" state="0"> <bounds x=" 54" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1066" element="Page1" state="0"> <bounds x=" 54" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1067" element="Page1" state="0"> <bounds x=" 54" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1068" element="Page1" state="0"> <bounds x=" 54" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1069" element="Page1" state="0"> <bounds x=" 54" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1070" element="Page1" state="0"> <bounds x=" 60" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1071" element="Page1" state="0"> <bounds x=" 60" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1072" element="Page1" state="0"> <bounds x=" 60" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1073" element="Page1" state="0"> <bounds x=" 60" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1074" element="Page1" state="0"> <bounds x=" 60" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1075" element="Page1" state="0"> <bounds x=" 60" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1076" element="Page1" state="0"> <bounds x=" 60" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1077" element="Page1" state="0"> <bounds x=" 66" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1078" element="Page1" state="0"> <bounds x=" 66" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1079" element="Page1" state="0"> <bounds x=" 66" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1080" element="Page1" state="0"> <bounds x=" 66" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1081" element="Page1" state="0"> <bounds x=" 66" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1082" element="Page1" state="0"> <bounds x=" 66" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1083" element="Page1" state="0"> <bounds x=" 66" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1084" element="Page1" state="0"> <bounds x=" 72" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1085" element="Page1" state="0"> <bounds x=" 72" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1086" element="Page1" state="0"> <bounds x=" 72" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1087" element="Page1" state="0"> <bounds x=" 72" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1088" element="Page1" state="0"> <bounds x=" 72" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1089" element="Page1" state="0"> <bounds x=" 72" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1090" element="Page1" state="0"> <bounds x=" 72" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1091" element="Page1" state="0"> <bounds x=" 78" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1092" element="Page1" state="0"> <bounds x=" 78" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1093" element="Page1" state="0"> <bounds x=" 78" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1094" element="Page1" state="0"> <bounds x=" 78" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1095" element="Page1" state="0"> <bounds x=" 78" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1096" element="Page1" state="0"> <bounds x=" 78" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1097" element="Page1" state="0"> <bounds x=" 78" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1098" element="Page1" state="0"> <bounds x=" 84" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1099" element="Page1" state="0"> <bounds x=" 84" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1100" element="Page1" state="0"> <bounds x=" 84" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1101" element="Page1" state="0"> <bounds x=" 84" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1102" element="Page1" state="0"> <bounds x=" 84" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1103" element="Page1" state="0"> <bounds x=" 84" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1104" element="Page1" state="0"> <bounds x=" 84" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1105" element="Page1" state="0"> <bounds x=" 90" y=" 40" width="5" height="1" /> </bezel>
- <bezel name="pg_1106" element="Page1" state="0"> <bounds x=" 90" y=" 41" width="5" height="1" /> </bezel>
- <bezel name="pg_1107" element="Page1" state="0"> <bounds x=" 90" y=" 42" width="5" height="1" /> </bezel>
- <bezel name="pg_1108" element="Page1" state="0"> <bounds x=" 90" y=" 43" width="5" height="1" /> </bezel>
- <bezel name="pg_1109" element="Page1" state="0"> <bounds x=" 90" y=" 44" width="5" height="1" /> </bezel>
- <bezel name="pg_1110" element="Page1" state="0"> <bounds x=" 90" y=" 45" width="5" height="1" /> </bezel>
- <bezel name="pg_1111" element="Page1" state="0"> <bounds x=" 90" y=" 46" width="5" height="1" /> </bezel>
- <bezel name="pg_1112" element="Page1" state="0"> <bounds x=" 0" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1113" element="Page1" state="0"> <bounds x=" 0" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1114" element="Page1" state="0"> <bounds x=" 0" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1115" element="Page1" state="0"> <bounds x=" 0" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1116" element="Page1" state="0"> <bounds x=" 0" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1117" element="Page1" state="0"> <bounds x=" 0" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1118" element="Page1" state="0"> <bounds x=" 0" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1119" element="Page1" state="0"> <bounds x=" 6" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1120" element="Page1" state="0"> <bounds x=" 6" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1121" element="Page1" state="0"> <bounds x=" 6" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1122" element="Page1" state="0"> <bounds x=" 6" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1123" element="Page1" state="0"> <bounds x=" 6" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1124" element="Page1" state="0"> <bounds x=" 6" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1125" element="Page1" state="0"> <bounds x=" 6" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1126" element="Page1" state="0"> <bounds x=" 12" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1127" element="Page1" state="0"> <bounds x=" 12" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1128" element="Page1" state="0"> <bounds x=" 12" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1129" element="Page1" state="0"> <bounds x=" 12" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1130" element="Page1" state="0"> <bounds x=" 12" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1131" element="Page1" state="0"> <bounds x=" 12" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1132" element="Page1" state="0"> <bounds x=" 12" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1133" element="Page1" state="0"> <bounds x=" 18" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1134" element="Page1" state="0"> <bounds x=" 18" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1135" element="Page1" state="0"> <bounds x=" 18" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1136" element="Page1" state="0"> <bounds x=" 18" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1137" element="Page1" state="0"> <bounds x=" 18" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1138" element="Page1" state="0"> <bounds x=" 18" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1139" element="Page1" state="0"> <bounds x=" 18" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1140" element="Page1" state="0"> <bounds x=" 24" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1141" element="Page1" state="0"> <bounds x=" 24" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1142" element="Page1" state="0"> <bounds x=" 24" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1143" element="Page1" state="0"> <bounds x=" 24" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1144" element="Page1" state="0"> <bounds x=" 24" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1145" element="Page1" state="0"> <bounds x=" 24" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1146" element="Page1" state="0"> <bounds x=" 24" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1147" element="Page1" state="0"> <bounds x=" 30" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1148" element="Page1" state="0"> <bounds x=" 30" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1149" element="Page1" state="0"> <bounds x=" 30" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1150" element="Page1" state="0"> <bounds x=" 30" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1151" element="Page1" state="0"> <bounds x=" 30" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1152" element="Page1" state="0"> <bounds x=" 30" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1153" element="Page1" state="0"> <bounds x=" 30" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1154" element="Page1" state="0"> <bounds x=" 36" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1155" element="Page1" state="0"> <bounds x=" 36" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1156" element="Page1" state="0"> <bounds x=" 36" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1157" element="Page1" state="0"> <bounds x=" 36" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1158" element="Page1" state="0"> <bounds x=" 36" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1159" element="Page1" state="0"> <bounds x=" 36" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1160" element="Page1" state="0"> <bounds x=" 36" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1161" element="Page1" state="0"> <bounds x=" 42" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1162" element="Page1" state="0"> <bounds x=" 42" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1163" element="Page1" state="0"> <bounds x=" 42" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1164" element="Page1" state="0"> <bounds x=" 42" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1165" element="Page1" state="0"> <bounds x=" 42" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1166" element="Page1" state="0"> <bounds x=" 42" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1167" element="Page1" state="0"> <bounds x=" 42" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1168" element="Page1" state="0"> <bounds x=" 48" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1169" element="Page1" state="0"> <bounds x=" 48" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1170" element="Page1" state="0"> <bounds x=" 48" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1171" element="Page1" state="0"> <bounds x=" 48" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1172" element="Page1" state="0"> <bounds x=" 48" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1173" element="Page1" state="0"> <bounds x=" 48" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1174" element="Page1" state="0"> <bounds x=" 48" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1175" element="Page1" state="0"> <bounds x=" 54" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1176" element="Page1" state="0"> <bounds x=" 54" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1177" element="Page1" state="0"> <bounds x=" 54" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1178" element="Page1" state="0"> <bounds x=" 54" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1179" element="Page1" state="0"> <bounds x=" 54" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1180" element="Page1" state="0"> <bounds x=" 54" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1181" element="Page1" state="0"> <bounds x=" 54" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1182" element="Page1" state="0"> <bounds x=" 60" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1183" element="Page1" state="0"> <bounds x=" 60" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1184" element="Page1" state="0"> <bounds x=" 60" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1185" element="Page1" state="0"> <bounds x=" 60" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1186" element="Page1" state="0"> <bounds x=" 60" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1187" element="Page1" state="0"> <bounds x=" 60" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1188" element="Page1" state="0"> <bounds x=" 60" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1189" element="Page1" state="0"> <bounds x=" 66" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1190" element="Page1" state="0"> <bounds x=" 66" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1191" element="Page1" state="0"> <bounds x=" 66" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1192" element="Page1" state="0"> <bounds x=" 66" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1193" element="Page1" state="0"> <bounds x=" 66" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1194" element="Page1" state="0"> <bounds x=" 66" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1195" element="Page1" state="0"> <bounds x=" 66" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1196" element="Page1" state="0"> <bounds x=" 72" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1197" element="Page1" state="0"> <bounds x=" 72" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1198" element="Page1" state="0"> <bounds x=" 72" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1199" element="Page1" state="0"> <bounds x=" 72" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1200" element="Page1" state="0"> <bounds x=" 72" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1201" element="Page1" state="0"> <bounds x=" 72" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1202" element="Page1" state="0"> <bounds x=" 72" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1203" element="Page1" state="0"> <bounds x=" 78" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1204" element="Page1" state="0"> <bounds x=" 78" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1205" element="Page1" state="0"> <bounds x=" 78" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1206" element="Page1" state="0"> <bounds x=" 78" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1207" element="Page1" state="0"> <bounds x=" 78" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1208" element="Page1" state="0"> <bounds x=" 78" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1209" element="Page1" state="0"> <bounds x=" 78" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1210" element="Page1" state="0"> <bounds x=" 84" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1211" element="Page1" state="0"> <bounds x=" 84" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1212" element="Page1" state="0"> <bounds x=" 84" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1213" element="Page1" state="0"> <bounds x=" 84" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1214" element="Page1" state="0"> <bounds x=" 84" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1215" element="Page1" state="0"> <bounds x=" 84" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1216" element="Page1" state="0"> <bounds x=" 84" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_1217" element="Page1" state="0"> <bounds x=" 90" y=" 50" width="5" height="1" /> </bezel>
- <bezel name="pg_1218" element="Page1" state="0"> <bounds x=" 90" y=" 51" width="5" height="1" /> </bezel>
- <bezel name="pg_1219" element="Page1" state="0"> <bounds x=" 90" y=" 52" width="5" height="1" /> </bezel>
- <bezel name="pg_1220" element="Page1" state="0"> <bounds x=" 90" y=" 53" width="5" height="1" /> </bezel>
- <bezel name="pg_1221" element="Page1" state="0"> <bounds x=" 90" y=" 54" width="5" height="1" /> </bezel>
- <bezel name="pg_1222" element="Page1" state="0"> <bounds x=" 90" y=" 55" width="5" height="1" /> </bezel>
- <bezel name="pg_1223" element="Page1" state="0"> <bounds x=" 90" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1000" element="Page1" state="0"> <bounds x=" 0" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1001" element="Page1" state="0"> <bounds x=" 0" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1002" element="Page1" state="0"> <bounds x=" 0" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1003" element="Page1" state="0"> <bounds x=" 0" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1004" element="Page1" state="0"> <bounds x=" 0" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1005" element="Page1" state="0"> <bounds x=" 0" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1006" element="Page1" state="0"> <bounds x=" 0" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1007" element="Page1" state="0"> <bounds x=" 6" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1008" element="Page1" state="0"> <bounds x=" 6" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1009" element="Page1" state="0"> <bounds x=" 6" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1010" element="Page1" state="0"> <bounds x=" 6" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1011" element="Page1" state="0"> <bounds x=" 6" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1012" element="Page1" state="0"> <bounds x=" 6" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1013" element="Page1" state="0"> <bounds x=" 6" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1014" element="Page1" state="0"> <bounds x=" 12" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1015" element="Page1" state="0"> <bounds x=" 12" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1016" element="Page1" state="0"> <bounds x=" 12" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1017" element="Page1" state="0"> <bounds x=" 12" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1018" element="Page1" state="0"> <bounds x=" 12" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1019" element="Page1" state="0"> <bounds x=" 12" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1020" element="Page1" state="0"> <bounds x=" 12" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1021" element="Page1" state="0"> <bounds x=" 18" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1022" element="Page1" state="0"> <bounds x=" 18" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1023" element="Page1" state="0"> <bounds x=" 18" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1024" element="Page1" state="0"> <bounds x=" 18" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1025" element="Page1" state="0"> <bounds x=" 18" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1026" element="Page1" state="0"> <bounds x=" 18" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1027" element="Page1" state="0"> <bounds x=" 18" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1028" element="Page1" state="0"> <bounds x=" 24" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1029" element="Page1" state="0"> <bounds x=" 24" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1030" element="Page1" state="0"> <bounds x=" 24" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1031" element="Page1" state="0"> <bounds x=" 24" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1032" element="Page1" state="0"> <bounds x=" 24" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1033" element="Page1" state="0"> <bounds x=" 24" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1034" element="Page1" state="0"> <bounds x=" 24" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1035" element="Page1" state="0"> <bounds x=" 30" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1036" element="Page1" state="0"> <bounds x=" 30" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1037" element="Page1" state="0"> <bounds x=" 30" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1038" element="Page1" state="0"> <bounds x=" 30" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1039" element="Page1" state="0"> <bounds x=" 30" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1040" element="Page1" state="0"> <bounds x=" 30" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1041" element="Page1" state="0"> <bounds x=" 30" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1042" element="Page1" state="0"> <bounds x=" 36" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1043" element="Page1" state="0"> <bounds x=" 36" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1044" element="Page1" state="0"> <bounds x=" 36" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1045" element="Page1" state="0"> <bounds x=" 36" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1046" element="Page1" state="0"> <bounds x=" 36" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1047" element="Page1" state="0"> <bounds x=" 36" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1048" element="Page1" state="0"> <bounds x=" 36" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1049" element="Page1" state="0"> <bounds x=" 42" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1050" element="Page1" state="0"> <bounds x=" 42" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1051" element="Page1" state="0"> <bounds x=" 42" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1052" element="Page1" state="0"> <bounds x=" 42" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1053" element="Page1" state="0"> <bounds x=" 42" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1054" element="Page1" state="0"> <bounds x=" 42" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1055" element="Page1" state="0"> <bounds x=" 42" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1056" element="Page1" state="0"> <bounds x=" 48" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1057" element="Page1" state="0"> <bounds x=" 48" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1058" element="Page1" state="0"> <bounds x=" 48" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1059" element="Page1" state="0"> <bounds x=" 48" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1060" element="Page1" state="0"> <bounds x=" 48" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1061" element="Page1" state="0"> <bounds x=" 48" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1062" element="Page1" state="0"> <bounds x=" 48" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1063" element="Page1" state="0"> <bounds x=" 54" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1064" element="Page1" state="0"> <bounds x=" 54" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1065" element="Page1" state="0"> <bounds x=" 54" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1066" element="Page1" state="0"> <bounds x=" 54" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1067" element="Page1" state="0"> <bounds x=" 54" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1068" element="Page1" state="0"> <bounds x=" 54" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1069" element="Page1" state="0"> <bounds x=" 54" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1070" element="Page1" state="0"> <bounds x=" 60" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1071" element="Page1" state="0"> <bounds x=" 60" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1072" element="Page1" state="0"> <bounds x=" 60" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1073" element="Page1" state="0"> <bounds x=" 60" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1074" element="Page1" state="0"> <bounds x=" 60" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1075" element="Page1" state="0"> <bounds x=" 60" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1076" element="Page1" state="0"> <bounds x=" 60" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1077" element="Page1" state="0"> <bounds x=" 66" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1078" element="Page1" state="0"> <bounds x=" 66" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1079" element="Page1" state="0"> <bounds x=" 66" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1080" element="Page1" state="0"> <bounds x=" 66" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1081" element="Page1" state="0"> <bounds x=" 66" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1082" element="Page1" state="0"> <bounds x=" 66" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1083" element="Page1" state="0"> <bounds x=" 66" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1084" element="Page1" state="0"> <bounds x=" 72" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1085" element="Page1" state="0"> <bounds x=" 72" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1086" element="Page1" state="0"> <bounds x=" 72" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1087" element="Page1" state="0"> <bounds x=" 72" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1088" element="Page1" state="0"> <bounds x=" 72" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1089" element="Page1" state="0"> <bounds x=" 72" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1090" element="Page1" state="0"> <bounds x=" 72" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1091" element="Page1" state="0"> <bounds x=" 78" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1092" element="Page1" state="0"> <bounds x=" 78" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1093" element="Page1" state="0"> <bounds x=" 78" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1094" element="Page1" state="0"> <bounds x=" 78" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1095" element="Page1" state="0"> <bounds x=" 78" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1096" element="Page1" state="0"> <bounds x=" 78" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1097" element="Page1" state="0"> <bounds x=" 78" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1098" element="Page1" state="0"> <bounds x=" 84" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1099" element="Page1" state="0"> <bounds x=" 84" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1100" element="Page1" state="0"> <bounds x=" 84" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1101" element="Page1" state="0"> <bounds x=" 84" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1102" element="Page1" state="0"> <bounds x=" 84" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1103" element="Page1" state="0"> <bounds x=" 84" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1104" element="Page1" state="0"> <bounds x=" 84" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1105" element="Page1" state="0"> <bounds x=" 90" y=" 40" width="5" height="1" /> </bezel>
+ <bezel name="pg_1106" element="Page1" state="0"> <bounds x=" 90" y=" 41" width="5" height="1" /> </bezel>
+ <bezel name="pg_1107" element="Page1" state="0"> <bounds x=" 90" y=" 42" width="5" height="1" /> </bezel>
+ <bezel name="pg_1108" element="Page1" state="0"> <bounds x=" 90" y=" 43" width="5" height="1" /> </bezel>
+ <bezel name="pg_1109" element="Page1" state="0"> <bounds x=" 90" y=" 44" width="5" height="1" /> </bezel>
+ <bezel name="pg_1110" element="Page1" state="0"> <bounds x=" 90" y=" 45" width="5" height="1" /> </bezel>
+ <bezel name="pg_1111" element="Page1" state="0"> <bounds x=" 90" y=" 46" width="5" height="1" /> </bezel>
+ <bezel name="pg_1112" element="Page1" state="0"> <bounds x=" 0" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1113" element="Page1" state="0"> <bounds x=" 0" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1114" element="Page1" state="0"> <bounds x=" 0" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1115" element="Page1" state="0"> <bounds x=" 0" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1116" element="Page1" state="0"> <bounds x=" 0" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1117" element="Page1" state="0"> <bounds x=" 0" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1118" element="Page1" state="0"> <bounds x=" 0" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1119" element="Page1" state="0"> <bounds x=" 6" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1120" element="Page1" state="0"> <bounds x=" 6" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1121" element="Page1" state="0"> <bounds x=" 6" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1122" element="Page1" state="0"> <bounds x=" 6" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1123" element="Page1" state="0"> <bounds x=" 6" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1124" element="Page1" state="0"> <bounds x=" 6" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1125" element="Page1" state="0"> <bounds x=" 6" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1126" element="Page1" state="0"> <bounds x=" 12" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1127" element="Page1" state="0"> <bounds x=" 12" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1128" element="Page1" state="0"> <bounds x=" 12" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1129" element="Page1" state="0"> <bounds x=" 12" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1130" element="Page1" state="0"> <bounds x=" 12" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1131" element="Page1" state="0"> <bounds x=" 12" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1132" element="Page1" state="0"> <bounds x=" 12" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1133" element="Page1" state="0"> <bounds x=" 18" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1134" element="Page1" state="0"> <bounds x=" 18" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1135" element="Page1" state="0"> <bounds x=" 18" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1136" element="Page1" state="0"> <bounds x=" 18" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1137" element="Page1" state="0"> <bounds x=" 18" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1138" element="Page1" state="0"> <bounds x=" 18" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1139" element="Page1" state="0"> <bounds x=" 18" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1140" element="Page1" state="0"> <bounds x=" 24" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1141" element="Page1" state="0"> <bounds x=" 24" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1142" element="Page1" state="0"> <bounds x=" 24" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1143" element="Page1" state="0"> <bounds x=" 24" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1144" element="Page1" state="0"> <bounds x=" 24" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1145" element="Page1" state="0"> <bounds x=" 24" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1146" element="Page1" state="0"> <bounds x=" 24" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1147" element="Page1" state="0"> <bounds x=" 30" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1148" element="Page1" state="0"> <bounds x=" 30" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1149" element="Page1" state="0"> <bounds x=" 30" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1150" element="Page1" state="0"> <bounds x=" 30" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1151" element="Page1" state="0"> <bounds x=" 30" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1152" element="Page1" state="0"> <bounds x=" 30" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1153" element="Page1" state="0"> <bounds x=" 30" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1154" element="Page1" state="0"> <bounds x=" 36" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1155" element="Page1" state="0"> <bounds x=" 36" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1156" element="Page1" state="0"> <bounds x=" 36" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1157" element="Page1" state="0"> <bounds x=" 36" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1158" element="Page1" state="0"> <bounds x=" 36" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1159" element="Page1" state="0"> <bounds x=" 36" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1160" element="Page1" state="0"> <bounds x=" 36" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1161" element="Page1" state="0"> <bounds x=" 42" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1162" element="Page1" state="0"> <bounds x=" 42" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1163" element="Page1" state="0"> <bounds x=" 42" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1164" element="Page1" state="0"> <bounds x=" 42" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1165" element="Page1" state="0"> <bounds x=" 42" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1166" element="Page1" state="0"> <bounds x=" 42" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1167" element="Page1" state="0"> <bounds x=" 42" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1168" element="Page1" state="0"> <bounds x=" 48" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1169" element="Page1" state="0"> <bounds x=" 48" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1170" element="Page1" state="0"> <bounds x=" 48" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1171" element="Page1" state="0"> <bounds x=" 48" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1172" element="Page1" state="0"> <bounds x=" 48" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1173" element="Page1" state="0"> <bounds x=" 48" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1174" element="Page1" state="0"> <bounds x=" 48" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1175" element="Page1" state="0"> <bounds x=" 54" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1176" element="Page1" state="0"> <bounds x=" 54" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1177" element="Page1" state="0"> <bounds x=" 54" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1178" element="Page1" state="0"> <bounds x=" 54" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1179" element="Page1" state="0"> <bounds x=" 54" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1180" element="Page1" state="0"> <bounds x=" 54" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1181" element="Page1" state="0"> <bounds x=" 54" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1182" element="Page1" state="0"> <bounds x=" 60" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1183" element="Page1" state="0"> <bounds x=" 60" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1184" element="Page1" state="0"> <bounds x=" 60" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1185" element="Page1" state="0"> <bounds x=" 60" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1186" element="Page1" state="0"> <bounds x=" 60" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1187" element="Page1" state="0"> <bounds x=" 60" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1188" element="Page1" state="0"> <bounds x=" 60" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1189" element="Page1" state="0"> <bounds x=" 66" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1190" element="Page1" state="0"> <bounds x=" 66" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1191" element="Page1" state="0"> <bounds x=" 66" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1192" element="Page1" state="0"> <bounds x=" 66" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1193" element="Page1" state="0"> <bounds x=" 66" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1194" element="Page1" state="0"> <bounds x=" 66" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1195" element="Page1" state="0"> <bounds x=" 66" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1196" element="Page1" state="0"> <bounds x=" 72" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1197" element="Page1" state="0"> <bounds x=" 72" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1198" element="Page1" state="0"> <bounds x=" 72" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1199" element="Page1" state="0"> <bounds x=" 72" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1200" element="Page1" state="0"> <bounds x=" 72" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1201" element="Page1" state="0"> <bounds x=" 72" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1202" element="Page1" state="0"> <bounds x=" 72" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1203" element="Page1" state="0"> <bounds x=" 78" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1204" element="Page1" state="0"> <bounds x=" 78" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1205" element="Page1" state="0"> <bounds x=" 78" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1206" element="Page1" state="0"> <bounds x=" 78" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1207" element="Page1" state="0"> <bounds x=" 78" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1208" element="Page1" state="0"> <bounds x=" 78" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1209" element="Page1" state="0"> <bounds x=" 78" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1210" element="Page1" state="0"> <bounds x=" 84" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1211" element="Page1" state="0"> <bounds x=" 84" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1212" element="Page1" state="0"> <bounds x=" 84" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1213" element="Page1" state="0"> <bounds x=" 84" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1214" element="Page1" state="0"> <bounds x=" 84" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1215" element="Page1" state="0"> <bounds x=" 84" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1216" element="Page1" state="0"> <bounds x=" 84" y=" 56" width="5" height="1" /> </bezel>
+ <bezel name="pg_1217" element="Page1" state="0"> <bounds x=" 90" y=" 50" width="5" height="1" /> </bezel>
+ <bezel name="pg_1218" element="Page1" state="0"> <bounds x=" 90" y=" 51" width="5" height="1" /> </bezel>
+ <bezel name="pg_1219" element="Page1" state="0"> <bounds x=" 90" y=" 52" width="5" height="1" /> </bezel>
+ <bezel name="pg_1220" element="Page1" state="0"> <bounds x=" 90" y=" 53" width="5" height="1" /> </bezel>
+ <bezel name="pg_1221" element="Page1" state="0"> <bounds x=" 90" y=" 54" width="5" height="1" /> </bezel>
+ <bezel name="pg_1222" element="Page1" state="0"> <bounds x=" 90" y=" 55" width="5" height="1" /> </bezel>
+ <bezel name="pg_1223" element="Page1" state="0"> <bounds x=" 90" y=" 56" width="5" height="1" /> </bezel>
- <bezel name="pg_4000" element="Page4" state="0"> <bounds x=" 0" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4001" element="Page4" state="0"> <bounds x=" 0" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4002" element="Page4" state="0"> <bounds x=" 0" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4003" element="Page4" state="0"> <bounds x=" 0" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4004" element="Page4" state="0"> <bounds x=" 0" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4005" element="Page4" state="0"> <bounds x=" 0" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4006" element="Page4" state="0"> <bounds x=" 0" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4007" element="Page4" state="0"> <bounds x=" 6" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4008" element="Page4" state="0"> <bounds x=" 6" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4009" element="Page4" state="0"> <bounds x=" 6" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4010" element="Page4" state="0"> <bounds x=" 6" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4011" element="Page4" state="0"> <bounds x=" 6" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4012" element="Page4" state="0"> <bounds x=" 6" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4013" element="Page4" state="0"> <bounds x=" 6" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4014" element="Page4" state="0"> <bounds x=" 12" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4015" element="Page4" state="0"> <bounds x=" 12" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4016" element="Page4" state="0"> <bounds x=" 12" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4017" element="Page4" state="0"> <bounds x=" 12" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4018" element="Page4" state="0"> <bounds x=" 12" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4019" element="Page4" state="0"> <bounds x=" 12" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4020" element="Page4" state="0"> <bounds x=" 12" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4021" element="Page4" state="0"> <bounds x=" 18" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4022" element="Page4" state="0"> <bounds x=" 18" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4023" element="Page4" state="0"> <bounds x=" 18" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4024" element="Page4" state="0"> <bounds x=" 18" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4025" element="Page4" state="0"> <bounds x=" 18" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4026" element="Page4" state="0"> <bounds x=" 18" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4027" element="Page4" state="0"> <bounds x=" 18" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4028" element="Page4" state="0"> <bounds x=" 24" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4029" element="Page4" state="0"> <bounds x=" 24" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4030" element="Page4" state="0"> <bounds x=" 24" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4031" element="Page4" state="0"> <bounds x=" 24" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4032" element="Page4" state="0"> <bounds x=" 24" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4033" element="Page4" state="0"> <bounds x=" 24" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4034" element="Page4" state="0"> <bounds x=" 24" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4035" element="Page4" state="0"> <bounds x=" 30" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4036" element="Page4" state="0"> <bounds x=" 30" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4037" element="Page4" state="0"> <bounds x=" 30" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4038" element="Page4" state="0"> <bounds x=" 30" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4039" element="Page4" state="0"> <bounds x=" 30" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4040" element="Page4" state="0"> <bounds x=" 30" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4041" element="Page4" state="0"> <bounds x=" 30" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4042" element="Page4" state="0"> <bounds x=" 36" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4043" element="Page4" state="0"> <bounds x=" 36" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4044" element="Page4" state="0"> <bounds x=" 36" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4045" element="Page4" state="0"> <bounds x=" 36" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4046" element="Page4" state="0"> <bounds x=" 36" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4047" element="Page4" state="0"> <bounds x=" 36" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4048" element="Page4" state="0"> <bounds x=" 36" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4049" element="Page4" state="0"> <bounds x=" 42" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4050" element="Page4" state="0"> <bounds x=" 42" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4051" element="Page4" state="0"> <bounds x=" 42" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4052" element="Page4" state="0"> <bounds x=" 42" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4053" element="Page4" state="0"> <bounds x=" 42" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4054" element="Page4" state="0"> <bounds x=" 42" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4055" element="Page4" state="0"> <bounds x=" 42" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4056" element="Page4" state="0"> <bounds x=" 48" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4057" element="Page4" state="0"> <bounds x=" 48" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4058" element="Page4" state="0"> <bounds x=" 48" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4059" element="Page4" state="0"> <bounds x=" 48" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4060" element="Page4" state="0"> <bounds x=" 48" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4061" element="Page4" state="0"> <bounds x=" 48" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4062" element="Page4" state="0"> <bounds x=" 48" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4063" element="Page4" state="0"> <bounds x=" 54" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4064" element="Page4" state="0"> <bounds x=" 54" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4065" element="Page4" state="0"> <bounds x=" 54" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4066" element="Page4" state="0"> <bounds x=" 54" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4067" element="Page4" state="0"> <bounds x=" 54" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4068" element="Page4" state="0"> <bounds x=" 54" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4069" element="Page4" state="0"> <bounds x=" 54" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4070" element="Page4" state="0"> <bounds x=" 60" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4071" element="Page4" state="0"> <bounds x=" 60" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4072" element="Page4" state="0"> <bounds x=" 60" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4073" element="Page4" state="0"> <bounds x=" 60" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4074" element="Page4" state="0"> <bounds x=" 60" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4075" element="Page4" state="0"> <bounds x=" 60" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4076" element="Page4" state="0"> <bounds x=" 60" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4077" element="Page4" state="0"> <bounds x=" 66" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4078" element="Page4" state="0"> <bounds x=" 66" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4079" element="Page4" state="0"> <bounds x=" 66" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4080" element="Page4" state="0"> <bounds x=" 66" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4081" element="Page4" state="0"> <bounds x=" 66" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4082" element="Page4" state="0"> <bounds x=" 66" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4083" element="Page4" state="0"> <bounds x=" 66" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4084" element="Page4" state="0"> <bounds x=" 72" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4085" element="Page4" state="0"> <bounds x=" 72" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4086" element="Page4" state="0"> <bounds x=" 72" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4087" element="Page4" state="0"> <bounds x=" 72" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4088" element="Page4" state="0"> <bounds x=" 72" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4089" element="Page4" state="0"> <bounds x=" 72" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4090" element="Page4" state="0"> <bounds x=" 72" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4091" element="Page4" state="0"> <bounds x=" 78" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4092" element="Page4" state="0"> <bounds x=" 78" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4093" element="Page4" state="0"> <bounds x=" 78" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4094" element="Page4" state="0"> <bounds x=" 78" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4095" element="Page4" state="0"> <bounds x=" 78" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4096" element="Page4" state="0"> <bounds x=" 78" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4097" element="Page4" state="0"> <bounds x=" 78" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4098" element="Page4" state="0"> <bounds x=" 84" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4099" element="Page4" state="0"> <bounds x=" 84" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4100" element="Page4" state="0"> <bounds x=" 84" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4101" element="Page4" state="0"> <bounds x=" 84" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4102" element="Page4" state="0"> <bounds x=" 84" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4103" element="Page4" state="0"> <bounds x=" 84" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4104" element="Page4" state="0"> <bounds x=" 84" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4105" element="Page4" state="0"> <bounds x=" 90" y=" 80" width="5" height="1" /> </bezel>
- <bezel name="pg_4106" element="Page4" state="0"> <bounds x=" 90" y=" 81" width="5" height="1" /> </bezel>
- <bezel name="pg_4107" element="Page4" state="0"> <bounds x=" 90" y=" 82" width="5" height="1" /> </bezel>
- <bezel name="pg_4108" element="Page4" state="0"> <bounds x=" 90" y=" 83" width="5" height="1" /> </bezel>
- <bezel name="pg_4109" element="Page4" state="0"> <bounds x=" 90" y=" 84" width="5" height="1" /> </bezel>
- <bezel name="pg_4110" element="Page4" state="0"> <bounds x=" 90" y=" 85" width="5" height="1" /> </bezel>
- <bezel name="pg_4111" element="Page4" state="0"> <bounds x=" 90" y=" 86" width="5" height="1" /> </bezel>
- <bezel name="pg_4112" element="Page4" state="0"> <bounds x=" 0" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4113" element="Page4" state="0"> <bounds x=" 0" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4114" element="Page4" state="0"> <bounds x=" 0" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4115" element="Page4" state="0"> <bounds x=" 0" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4116" element="Page4" state="0"> <bounds x=" 0" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4117" element="Page4" state="0"> <bounds x=" 0" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4118" element="Page4" state="0"> <bounds x=" 0" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4119" element="Page4" state="0"> <bounds x=" 6" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4120" element="Page4" state="0"> <bounds x=" 6" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4121" element="Page4" state="0"> <bounds x=" 6" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4122" element="Page4" state="0"> <bounds x=" 6" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4123" element="Page4" state="0"> <bounds x=" 6" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4124" element="Page4" state="0"> <bounds x=" 6" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4125" element="Page4" state="0"> <bounds x=" 6" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4126" element="Page4" state="0"> <bounds x=" 12" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4127" element="Page4" state="0"> <bounds x=" 12" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4128" element="Page4" state="0"> <bounds x=" 12" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4129" element="Page4" state="0"> <bounds x=" 12" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4130" element="Page4" state="0"> <bounds x=" 12" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4131" element="Page4" state="0"> <bounds x=" 12" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4132" element="Page4" state="0"> <bounds x=" 12" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4133" element="Page4" state="0"> <bounds x=" 18" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4134" element="Page4" state="0"> <bounds x=" 18" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4135" element="Page4" state="0"> <bounds x=" 18" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4136" element="Page4" state="0"> <bounds x=" 18" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4137" element="Page4" state="0"> <bounds x=" 18" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4138" element="Page4" state="0"> <bounds x=" 18" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4139" element="Page4" state="0"> <bounds x=" 18" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4140" element="Page4" state="0"> <bounds x=" 24" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4141" element="Page4" state="0"> <bounds x=" 24" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4142" element="Page4" state="0"> <bounds x=" 24" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4143" element="Page4" state="0"> <bounds x=" 24" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4144" element="Page4" state="0"> <bounds x=" 24" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4145" element="Page4" state="0"> <bounds x=" 24" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4146" element="Page4" state="0"> <bounds x=" 24" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4147" element="Page4" state="0"> <bounds x=" 30" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4148" element="Page4" state="0"> <bounds x=" 30" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4149" element="Page4" state="0"> <bounds x=" 30" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4150" element="Page4" state="0"> <bounds x=" 30" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4151" element="Page4" state="0"> <bounds x=" 30" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4152" element="Page4" state="0"> <bounds x=" 30" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4153" element="Page4" state="0"> <bounds x=" 30" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4154" element="Page4" state="0"> <bounds x=" 36" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4155" element="Page4" state="0"> <bounds x=" 36" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4156" element="Page4" state="0"> <bounds x=" 36" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4157" element="Page4" state="0"> <bounds x=" 36" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4158" element="Page4" state="0"> <bounds x=" 36" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4159" element="Page4" state="0"> <bounds x=" 36" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4160" element="Page4" state="0"> <bounds x=" 36" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4161" element="Page4" state="0"> <bounds x=" 42" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4162" element="Page4" state="0"> <bounds x=" 42" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4163" element="Page4" state="0"> <bounds x=" 42" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4164" element="Page4" state="0"> <bounds x=" 42" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4165" element="Page4" state="0"> <bounds x=" 42" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4166" element="Page4" state="0"> <bounds x=" 42" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4167" element="Page4" state="0"> <bounds x=" 42" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4168" element="Page4" state="0"> <bounds x=" 48" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4169" element="Page4" state="0"> <bounds x=" 48" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4170" element="Page4" state="0"> <bounds x=" 48" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4171" element="Page4" state="0"> <bounds x=" 48" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4172" element="Page4" state="0"> <bounds x=" 48" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4173" element="Page4" state="0"> <bounds x=" 48" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4174" element="Page4" state="0"> <bounds x=" 48" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4175" element="Page4" state="0"> <bounds x=" 54" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4176" element="Page4" state="0"> <bounds x=" 54" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4177" element="Page4" state="0"> <bounds x=" 54" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4178" element="Page4" state="0"> <bounds x=" 54" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4179" element="Page4" state="0"> <bounds x=" 54" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4180" element="Page4" state="0"> <bounds x=" 54" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4181" element="Page4" state="0"> <bounds x=" 54" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4182" element="Page4" state="0"> <bounds x=" 60" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4183" element="Page4" state="0"> <bounds x=" 60" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4184" element="Page4" state="0"> <bounds x=" 60" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4185" element="Page4" state="0"> <bounds x=" 60" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4186" element="Page4" state="0"> <bounds x=" 60" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4187" element="Page4" state="0"> <bounds x=" 60" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4188" element="Page4" state="0"> <bounds x=" 60" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4189" element="Page4" state="0"> <bounds x=" 66" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4190" element="Page4" state="0"> <bounds x=" 66" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4191" element="Page4" state="0"> <bounds x=" 66" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4192" element="Page4" state="0"> <bounds x=" 66" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4193" element="Page4" state="0"> <bounds x=" 66" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4194" element="Page4" state="0"> <bounds x=" 66" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4195" element="Page4" state="0"> <bounds x=" 66" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4196" element="Page4" state="0"> <bounds x=" 72" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4197" element="Page4" state="0"> <bounds x=" 72" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4198" element="Page4" state="0"> <bounds x=" 72" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4199" element="Page4" state="0"> <bounds x=" 72" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4200" element="Page4" state="0"> <bounds x=" 72" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4201" element="Page4" state="0"> <bounds x=" 72" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4202" element="Page4" state="0"> <bounds x=" 72" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4203" element="Page4" state="0"> <bounds x=" 78" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4204" element="Page4" state="0"> <bounds x=" 78" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4205" element="Page4" state="0"> <bounds x=" 78" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4206" element="Page4" state="0"> <bounds x=" 78" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4207" element="Page4" state="0"> <bounds x=" 78" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4208" element="Page4" state="0"> <bounds x=" 78" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4209" element="Page4" state="0"> <bounds x=" 78" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4210" element="Page4" state="0"> <bounds x=" 84" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4211" element="Page4" state="0"> <bounds x=" 84" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4212" element="Page4" state="0"> <bounds x=" 84" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4213" element="Page4" state="0"> <bounds x=" 84" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4214" element="Page4" state="0"> <bounds x=" 84" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4215" element="Page4" state="0"> <bounds x=" 84" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4216" element="Page4" state="0"> <bounds x=" 84" y=" 96" width="5" height="1" /> </bezel>
- <bezel name="pg_4217" element="Page4" state="0"> <bounds x=" 90" y=" 90" width="5" height="1" /> </bezel>
- <bezel name="pg_4218" element="Page4" state="0"> <bounds x=" 90" y=" 91" width="5" height="1" /> </bezel>
- <bezel name="pg_4219" element="Page4" state="0"> <bounds x=" 90" y=" 92" width="5" height="1" /> </bezel>
- <bezel name="pg_4220" element="Page4" state="0"> <bounds x=" 90" y=" 93" width="5" height="1" /> </bezel>
- <bezel name="pg_4221" element="Page4" state="0"> <bounds x=" 90" y=" 94" width="5" height="1" /> </bezel>
- <bezel name="pg_4222" element="Page4" state="0"> <bounds x=" 90" y=" 95" width="5" height="1" /> </bezel>
- <bezel name="pg_4223" element="Page4" state="0"> <bounds x=" 90" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4000" element="Page4" state="0"> <bounds x=" 0" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4001" element="Page4" state="0"> <bounds x=" 0" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4002" element="Page4" state="0"> <bounds x=" 0" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4003" element="Page4" state="0"> <bounds x=" 0" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4004" element="Page4" state="0"> <bounds x=" 0" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4005" element="Page4" state="0"> <bounds x=" 0" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4006" element="Page4" state="0"> <bounds x=" 0" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4007" element="Page4" state="0"> <bounds x=" 6" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4008" element="Page4" state="0"> <bounds x=" 6" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4009" element="Page4" state="0"> <bounds x=" 6" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4010" element="Page4" state="0"> <bounds x=" 6" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4011" element="Page4" state="0"> <bounds x=" 6" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4012" element="Page4" state="0"> <bounds x=" 6" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4013" element="Page4" state="0"> <bounds x=" 6" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4014" element="Page4" state="0"> <bounds x=" 12" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4015" element="Page4" state="0"> <bounds x=" 12" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4016" element="Page4" state="0"> <bounds x=" 12" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4017" element="Page4" state="0"> <bounds x=" 12" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4018" element="Page4" state="0"> <bounds x=" 12" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4019" element="Page4" state="0"> <bounds x=" 12" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4020" element="Page4" state="0"> <bounds x=" 12" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4021" element="Page4" state="0"> <bounds x=" 18" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4022" element="Page4" state="0"> <bounds x=" 18" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4023" element="Page4" state="0"> <bounds x=" 18" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4024" element="Page4" state="0"> <bounds x=" 18" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4025" element="Page4" state="0"> <bounds x=" 18" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4026" element="Page4" state="0"> <bounds x=" 18" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4027" element="Page4" state="0"> <bounds x=" 18" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4028" element="Page4" state="0"> <bounds x=" 24" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4029" element="Page4" state="0"> <bounds x=" 24" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4030" element="Page4" state="0"> <bounds x=" 24" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4031" element="Page4" state="0"> <bounds x=" 24" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4032" element="Page4" state="0"> <bounds x=" 24" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4033" element="Page4" state="0"> <bounds x=" 24" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4034" element="Page4" state="0"> <bounds x=" 24" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4035" element="Page4" state="0"> <bounds x=" 30" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4036" element="Page4" state="0"> <bounds x=" 30" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4037" element="Page4" state="0"> <bounds x=" 30" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4038" element="Page4" state="0"> <bounds x=" 30" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4039" element="Page4" state="0"> <bounds x=" 30" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4040" element="Page4" state="0"> <bounds x=" 30" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4041" element="Page4" state="0"> <bounds x=" 30" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4042" element="Page4" state="0"> <bounds x=" 36" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4043" element="Page4" state="0"> <bounds x=" 36" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4044" element="Page4" state="0"> <bounds x=" 36" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4045" element="Page4" state="0"> <bounds x=" 36" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4046" element="Page4" state="0"> <bounds x=" 36" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4047" element="Page4" state="0"> <bounds x=" 36" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4048" element="Page4" state="0"> <bounds x=" 36" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4049" element="Page4" state="0"> <bounds x=" 42" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4050" element="Page4" state="0"> <bounds x=" 42" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4051" element="Page4" state="0"> <bounds x=" 42" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4052" element="Page4" state="0"> <bounds x=" 42" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4053" element="Page4" state="0"> <bounds x=" 42" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4054" element="Page4" state="0"> <bounds x=" 42" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4055" element="Page4" state="0"> <bounds x=" 42" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4056" element="Page4" state="0"> <bounds x=" 48" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4057" element="Page4" state="0"> <bounds x=" 48" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4058" element="Page4" state="0"> <bounds x=" 48" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4059" element="Page4" state="0"> <bounds x=" 48" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4060" element="Page4" state="0"> <bounds x=" 48" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4061" element="Page4" state="0"> <bounds x=" 48" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4062" element="Page4" state="0"> <bounds x=" 48" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4063" element="Page4" state="0"> <bounds x=" 54" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4064" element="Page4" state="0"> <bounds x=" 54" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4065" element="Page4" state="0"> <bounds x=" 54" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4066" element="Page4" state="0"> <bounds x=" 54" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4067" element="Page4" state="0"> <bounds x=" 54" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4068" element="Page4" state="0"> <bounds x=" 54" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4069" element="Page4" state="0"> <bounds x=" 54" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4070" element="Page4" state="0"> <bounds x=" 60" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4071" element="Page4" state="0"> <bounds x=" 60" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4072" element="Page4" state="0"> <bounds x=" 60" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4073" element="Page4" state="0"> <bounds x=" 60" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4074" element="Page4" state="0"> <bounds x=" 60" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4075" element="Page4" state="0"> <bounds x=" 60" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4076" element="Page4" state="0"> <bounds x=" 60" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4077" element="Page4" state="0"> <bounds x=" 66" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4078" element="Page4" state="0"> <bounds x=" 66" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4079" element="Page4" state="0"> <bounds x=" 66" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4080" element="Page4" state="0"> <bounds x=" 66" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4081" element="Page4" state="0"> <bounds x=" 66" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4082" element="Page4" state="0"> <bounds x=" 66" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4083" element="Page4" state="0"> <bounds x=" 66" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4084" element="Page4" state="0"> <bounds x=" 72" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4085" element="Page4" state="0"> <bounds x=" 72" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4086" element="Page4" state="0"> <bounds x=" 72" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4087" element="Page4" state="0"> <bounds x=" 72" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4088" element="Page4" state="0"> <bounds x=" 72" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4089" element="Page4" state="0"> <bounds x=" 72" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4090" element="Page4" state="0"> <bounds x=" 72" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4091" element="Page4" state="0"> <bounds x=" 78" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4092" element="Page4" state="0"> <bounds x=" 78" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4093" element="Page4" state="0"> <bounds x=" 78" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4094" element="Page4" state="0"> <bounds x=" 78" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4095" element="Page4" state="0"> <bounds x=" 78" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4096" element="Page4" state="0"> <bounds x=" 78" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4097" element="Page4" state="0"> <bounds x=" 78" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4098" element="Page4" state="0"> <bounds x=" 84" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4099" element="Page4" state="0"> <bounds x=" 84" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4100" element="Page4" state="0"> <bounds x=" 84" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4101" element="Page4" state="0"> <bounds x=" 84" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4102" element="Page4" state="0"> <bounds x=" 84" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4103" element="Page4" state="0"> <bounds x=" 84" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4104" element="Page4" state="0"> <bounds x=" 84" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4105" element="Page4" state="0"> <bounds x=" 90" y=" 80" width="5" height="1" /> </bezel>
+ <bezel name="pg_4106" element="Page4" state="0"> <bounds x=" 90" y=" 81" width="5" height="1" /> </bezel>
+ <bezel name="pg_4107" element="Page4" state="0"> <bounds x=" 90" y=" 82" width="5" height="1" /> </bezel>
+ <bezel name="pg_4108" element="Page4" state="0"> <bounds x=" 90" y=" 83" width="5" height="1" /> </bezel>
+ <bezel name="pg_4109" element="Page4" state="0"> <bounds x=" 90" y=" 84" width="5" height="1" /> </bezel>
+ <bezel name="pg_4110" element="Page4" state="0"> <bounds x=" 90" y=" 85" width="5" height="1" /> </bezel>
+ <bezel name="pg_4111" element="Page4" state="0"> <bounds x=" 90" y=" 86" width="5" height="1" /> </bezel>
+ <bezel name="pg_4112" element="Page4" state="0"> <bounds x=" 0" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4113" element="Page4" state="0"> <bounds x=" 0" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4114" element="Page4" state="0"> <bounds x=" 0" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4115" element="Page4" state="0"> <bounds x=" 0" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4116" element="Page4" state="0"> <bounds x=" 0" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4117" element="Page4" state="0"> <bounds x=" 0" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4118" element="Page4" state="0"> <bounds x=" 0" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4119" element="Page4" state="0"> <bounds x=" 6" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4120" element="Page4" state="0"> <bounds x=" 6" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4121" element="Page4" state="0"> <bounds x=" 6" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4122" element="Page4" state="0"> <bounds x=" 6" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4123" element="Page4" state="0"> <bounds x=" 6" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4124" element="Page4" state="0"> <bounds x=" 6" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4125" element="Page4" state="0"> <bounds x=" 6" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4126" element="Page4" state="0"> <bounds x=" 12" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4127" element="Page4" state="0"> <bounds x=" 12" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4128" element="Page4" state="0"> <bounds x=" 12" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4129" element="Page4" state="0"> <bounds x=" 12" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4130" element="Page4" state="0"> <bounds x=" 12" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4131" element="Page4" state="0"> <bounds x=" 12" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4132" element="Page4" state="0"> <bounds x=" 12" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4133" element="Page4" state="0"> <bounds x=" 18" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4134" element="Page4" state="0"> <bounds x=" 18" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4135" element="Page4" state="0"> <bounds x=" 18" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4136" element="Page4" state="0"> <bounds x=" 18" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4137" element="Page4" state="0"> <bounds x=" 18" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4138" element="Page4" state="0"> <bounds x=" 18" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4139" element="Page4" state="0"> <bounds x=" 18" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4140" element="Page4" state="0"> <bounds x=" 24" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4141" element="Page4" state="0"> <bounds x=" 24" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4142" element="Page4" state="0"> <bounds x=" 24" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4143" element="Page4" state="0"> <bounds x=" 24" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4144" element="Page4" state="0"> <bounds x=" 24" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4145" element="Page4" state="0"> <bounds x=" 24" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4146" element="Page4" state="0"> <bounds x=" 24" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4147" element="Page4" state="0"> <bounds x=" 30" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4148" element="Page4" state="0"> <bounds x=" 30" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4149" element="Page4" state="0"> <bounds x=" 30" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4150" element="Page4" state="0"> <bounds x=" 30" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4151" element="Page4" state="0"> <bounds x=" 30" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4152" element="Page4" state="0"> <bounds x=" 30" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4153" element="Page4" state="0"> <bounds x=" 30" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4154" element="Page4" state="0"> <bounds x=" 36" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4155" element="Page4" state="0"> <bounds x=" 36" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4156" element="Page4" state="0"> <bounds x=" 36" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4157" element="Page4" state="0"> <bounds x=" 36" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4158" element="Page4" state="0"> <bounds x=" 36" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4159" element="Page4" state="0"> <bounds x=" 36" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4160" element="Page4" state="0"> <bounds x=" 36" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4161" element="Page4" state="0"> <bounds x=" 42" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4162" element="Page4" state="0"> <bounds x=" 42" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4163" element="Page4" state="0"> <bounds x=" 42" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4164" element="Page4" state="0"> <bounds x=" 42" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4165" element="Page4" state="0"> <bounds x=" 42" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4166" element="Page4" state="0"> <bounds x=" 42" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4167" element="Page4" state="0"> <bounds x=" 42" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4168" element="Page4" state="0"> <bounds x=" 48" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4169" element="Page4" state="0"> <bounds x=" 48" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4170" element="Page4" state="0"> <bounds x=" 48" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4171" element="Page4" state="0"> <bounds x=" 48" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4172" element="Page4" state="0"> <bounds x=" 48" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4173" element="Page4" state="0"> <bounds x=" 48" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4174" element="Page4" state="0"> <bounds x=" 48" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4175" element="Page4" state="0"> <bounds x=" 54" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4176" element="Page4" state="0"> <bounds x=" 54" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4177" element="Page4" state="0"> <bounds x=" 54" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4178" element="Page4" state="0"> <bounds x=" 54" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4179" element="Page4" state="0"> <bounds x=" 54" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4180" element="Page4" state="0"> <bounds x=" 54" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4181" element="Page4" state="0"> <bounds x=" 54" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4182" element="Page4" state="0"> <bounds x=" 60" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4183" element="Page4" state="0"> <bounds x=" 60" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4184" element="Page4" state="0"> <bounds x=" 60" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4185" element="Page4" state="0"> <bounds x=" 60" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4186" element="Page4" state="0"> <bounds x=" 60" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4187" element="Page4" state="0"> <bounds x=" 60" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4188" element="Page4" state="0"> <bounds x=" 60" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4189" element="Page4" state="0"> <bounds x=" 66" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4190" element="Page4" state="0"> <bounds x=" 66" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4191" element="Page4" state="0"> <bounds x=" 66" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4192" element="Page4" state="0"> <bounds x=" 66" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4193" element="Page4" state="0"> <bounds x=" 66" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4194" element="Page4" state="0"> <bounds x=" 66" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4195" element="Page4" state="0"> <bounds x=" 66" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4196" element="Page4" state="0"> <bounds x=" 72" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4197" element="Page4" state="0"> <bounds x=" 72" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4198" element="Page4" state="0"> <bounds x=" 72" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4199" element="Page4" state="0"> <bounds x=" 72" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4200" element="Page4" state="0"> <bounds x=" 72" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4201" element="Page4" state="0"> <bounds x=" 72" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4202" element="Page4" state="0"> <bounds x=" 72" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4203" element="Page4" state="0"> <bounds x=" 78" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4204" element="Page4" state="0"> <bounds x=" 78" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4205" element="Page4" state="0"> <bounds x=" 78" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4206" element="Page4" state="0"> <bounds x=" 78" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4207" element="Page4" state="0"> <bounds x=" 78" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4208" element="Page4" state="0"> <bounds x=" 78" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4209" element="Page4" state="0"> <bounds x=" 78" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4210" element="Page4" state="0"> <bounds x=" 84" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4211" element="Page4" state="0"> <bounds x=" 84" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4212" element="Page4" state="0"> <bounds x=" 84" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4213" element="Page4" state="0"> <bounds x=" 84" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4214" element="Page4" state="0"> <bounds x=" 84" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4215" element="Page4" state="0"> <bounds x=" 84" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4216" element="Page4" state="0"> <bounds x=" 84" y=" 96" width="5" height="1" /> </bezel>
+ <bezel name="pg_4217" element="Page4" state="0"> <bounds x=" 90" y=" 90" width="5" height="1" /> </bezel>
+ <bezel name="pg_4218" element="Page4" state="0"> <bounds x=" 90" y=" 91" width="5" height="1" /> </bezel>
+ <bezel name="pg_4219" element="Page4" state="0"> <bounds x=" 90" y=" 92" width="5" height="1" /> </bezel>
+ <bezel name="pg_4220" element="Page4" state="0"> <bounds x=" 90" y=" 93" width="5" height="1" /> </bezel>
+ <bezel name="pg_4221" element="Page4" state="0"> <bounds x=" 90" y=" 94" width="5" height="1" /> </bezel>
+ <bezel name="pg_4222" element="Page4" state="0"> <bounds x=" 90" y=" 95" width="5" height="1" /> </bezel>
+ <bezel name="pg_4223" element="Page4" state="0"> <bounds x=" 90" y=" 96" width="5" height="1" /> </bezel>
</view>
</mamelayout>
diff --git a/src/mame/layout/newbrain.lay b/src/mame/layout/newbrain.lay
index 09df5730d76..9fb6f688033 100644
--- a/src/mame/layout/newbrain.lay
+++ b/src/mame/layout/newbrain.lay
@@ -1,11 +1,17 @@
<?xml version="1.0"?>
<mamelayout version="2">
<element name="digit" defstate="0">
- <led16seg>
- <color red="0.0" green="1.0" blue="1.0" />
- </led16seg>
+ <led16seg>
+ <color red="0.0" green="1.0" blue="1.0" />
+ </led16seg>
</element>
+ <view name="Standard">
+ <screen index="0">
+ <bounds left="0" top="0" right="4" bottom="3" />
+ </screen>
+ </view>
+
<view name="VF Display">
<bezel name="digit0" element="digit">
<bounds x="0" y="0" width="20" height="30" />
@@ -13,53 +19,47 @@
<bezel name="digit1" element="digit">
<bounds x="20" y="0" width="20" height="30" />
</bezel>
- <bezel name="digit2" element="digit">
- <bounds x="40" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit3" element="digit">
- <bounds x="60" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit4" element="digit">
- <bounds x="80" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit5" element="digit">
- <bounds x="100" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit6" element="digit">
- <bounds x="120" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit7" element="digit">
- <bounds x="140" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit8" element="digit">
- <bounds x="160" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit9" element="digit">
- <bounds x="180" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit10" element="digit">
- <bounds x="200" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit11" element="digit">
- <bounds x="220" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit12" element="digit">
- <bounds x="240" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit13" element="digit">
- <bounds x="260" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit14" element="digit">
- <bounds x="280" y="0" width="20" height="30" />
- </bezel>
- <bezel name="digit15" element="digit">
- <bounds x="300" y="0" width="20" height="30" />
- </bezel>
- </view>
-
- <view name="Standard">
- <screen index="0">
- <bounds left="0" top="0" right="4" bottom="3" />
- </screen>
+ <bezel name="digit2" element="digit">
+ <bounds x="40" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit3" element="digit">
+ <bounds x="60" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit4" element="digit">
+ <bounds x="80" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit5" element="digit">
+ <bounds x="100" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit6" element="digit">
+ <bounds x="120" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit7" element="digit">
+ <bounds x="140" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit8" element="digit">
+ <bounds x="160" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit9" element="digit">
+ <bounds x="180" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit10" element="digit">
+ <bounds x="200" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit11" element="digit">
+ <bounds x="220" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit12" element="digit">
+ <bounds x="240" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit13" element="digit">
+ <bounds x="260" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit14" element="digit">
+ <bounds x="280" y="0" width="20" height="30" />
+ </bezel>
+ <bezel name="digit15" element="digit">
+ <bounds x="300" y="0" width="20" height="30" />
+ </bezel>
</view>
</mamelayout>
diff --git a/src/mame/machine/315-5838_317-0229_comp.cpp b/src/mame/machine/315-5838_317-0229_comp.cpp
index f4c0b69129b..6e703df17ff 100644
--- a/src/mame/machine/315-5838_317-0229_comp.cpp
+++ b/src/mame/machine/315-5838_317-0229_comp.cpp
@@ -4,31 +4,31 @@
315-5838 - Decathlete (ST-V)
317-0229 - Dead or Alive (Model 2A)
- 317-0229 - Name Club / Name Club Ver 2 (ST-V) (tested as RCDD2 in the service menu!)
- 317-0231 - Print Club Love Love / Print Club Love Love Ver 2 (ST-V)
+ 317-0229 - Name Club / Name Club Ver 2 (ST-V) (tested as RCDD2 in the service menu!)
+ 317-0231 - Print Club Love Love / Print Club Love Love Ver 2 (ST-V)
- Several Print Club (ST-V) carts have
- an unpopulated space marked '317-0229' on the PCB
+ Several Print Club (ST-V) carts have
+ an unpopulated space marked '317-0229' on the PCB
Package Type: TQFP100
Decathlete accesses the chip at 2 different addresses, however, I don't think there
- are 2 channels / sets of registers, instead the 2nd set of addresses are just a
- mirror that allows access to a different set of source roms; the tables etc. are
- re-uploaded before every transfer.
+ are 2 channels / sets of registers, instead the 2nd set of addresses are just a
+ mirror that allows access to a different set of source roms; the tables etc. are
+ re-uploaded before every transfer.
Dead of Alive has the source data in RAM, not ROM.
This is similar to how some 5881 games were set up, with the ST-V versions decrypting
data directly from ROM and the Model 2 ones using a RAM source buffer.
- Decathlete decompresses all graphic data with the chip.
+ Decathlete decompresses all graphic data with the chip.
- The Name Club games use the chip for decompressing data for the printer (full size
- versions of the graphics?)
+ The Name Club games use the chip for decompressing data for the printer (full size
+ versions of the graphics?)
- Print Club Love Love decrypts some start up code/data required for booting.
+ Print Club Love Love decrypts some start up code/data required for booting.
- Dead or Alive decrypts a string that is checked on startup, nothing else.
+ Dead or Alive decrypts a string that is checked on startup, nothing else.
Looking at the values read I don't think there is any address based encryption, for
example many blocks where you'd expect a zero fill start with repeating patterns
diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp
index 68e6e53b75c..1268e581b29 100644
--- a/src/mame/machine/apollo.cpp
+++ b/src/mame/machine/apollo.cpp
@@ -974,7 +974,7 @@ bool apollo_ni::call_load()
UINT64 size = length();
if (size != 32)
{
- CLOG(("apollo_ni::call_load: %s has unexpected file size %" I64FMT "d", filename(), size));
+ CLOG(("apollo_ni::call_load: %s has unexpected file size %d", filename(), size));
}
else
{
diff --git a/src/mame/machine/at.cpp b/src/mame/machine/at.cpp
index ffc817fbaba..908e8390869 100644
--- a/src/mame/machine/at.cpp
+++ b/src/mame/machine/at.cpp
@@ -1,21 +1,165 @@
// license:BSD-3-Clause
-// copyright-holders:Wilbert Pol, Miodrag Milanovic
+// copyright-holders:Wilbert Pol, Miodrag Milanovic, Carl
/***************************************************************************
IBM AT Compatibles
***************************************************************************/
-#include "includes/at.h"
+#include "machine/at.h"
+#include "cpu/i86/i286.h"
+#include "cpu/i386/i386.h"
+#include "machine/at_keybc.h"
+#include "bus/pc_kbd/pc_kbdc.h"
+#include "sound/dac.h"
#define LOG_PORT80 0
+const device_type AT_MB = &device_creator<at_mb_device>;
+
+at_mb_device::at_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, AT_MB, "PC/AT Motherboard", tag, owner, clock, "at_mb", __FILE__),
+ m_maincpu(*this, ":maincpu"),
+ m_isabus(*this, "isabus"),
+ m_pic8259_slave(*this, "pic8259_slave"),
+ m_dma8237_1(*this, "dma8237_1"),
+ m_dma8237_2(*this, "dma8237_2"),
+ m_pit8254(*this, "pit8254"),
+ m_speaker(*this, "speaker"),
+ m_mc146818(*this, "rtc")
+{
+}
+
+void at_mb_device::device_reset()
+{
+ m_at_spkrdata = 0;
+ m_pit_out2 = 1;
+ m_dma_channel = -1;
+ m_cur_eop = false;
+}
+
+void at_mb_device::device_start()
+{
+ if(!strncmp(m_maincpu->shortname(), "i80286", 6))
+ i80286_cpu_device::static_set_a20_callback(m_maincpu, i80286_cpu_device::a20_cb(FUNC(at_mb_device::a20_286), this));
+}
+
+MACHINE_CONFIG_FRAGMENT( at_softlists )
+ /* software lists */
+ MCFG_SOFTWARE_LIST_ADD("pc_disk_list","ibm5150")
+ MCFG_SOFTWARE_LIST_ADD("xt_disk_list","ibm5160_flop")
+ MCFG_SOFTWARE_LIST_ADD("at_disk_list","ibm5170")
+ MCFG_SOFTWARE_LIST_ADD("at_cdrom_list","ibm5170_cdrom")
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( at_mb )
+ MCFG_DEVICE_ADD("pit8254", PIT8254, 0)
+ MCFG_PIT8253_CLK0(4772720/4) /* heartbeat IRQ */
+ MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259_master", pic8259_device, ir0_w))
+ MCFG_PIT8253_CLK1(4772720/4) /* dram refresh */
+ MCFG_PIT8253_CLK2(4772720/4) /* pio port c pin 4, and speaker polling enough */
+ MCFG_PIT8253_OUT2_HANDLER(WRITELINE(at_mb_device, pit8254_out2_changed))
+
+ MCFG_DEVICE_ADD( "dma8237_1", AM9517A, XTAL_14_31818MHz/3 )
+ MCFG_I8237_OUT_HREQ_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq0_w))
+ MCFG_I8237_OUT_EOP_CB(WRITELINE(at_mb_device, dma8237_out_eop))
+ MCFG_I8237_IN_MEMR_CB(READ8(at_mb_device, dma_read_byte))
+ MCFG_I8237_OUT_MEMW_CB(WRITE8(at_mb_device, dma_write_byte))
+ MCFG_I8237_IN_IOR_0_CB(READ8(at_mb_device, dma8237_0_dack_r))
+ MCFG_I8237_IN_IOR_1_CB(READ8(at_mb_device, dma8237_1_dack_r))
+ MCFG_I8237_IN_IOR_2_CB(READ8(at_mb_device, dma8237_2_dack_r))
+ MCFG_I8237_IN_IOR_3_CB(READ8(at_mb_device, dma8237_3_dack_r))
+ MCFG_I8237_OUT_IOW_0_CB(WRITE8(at_mb_device, dma8237_0_dack_w))
+ MCFG_I8237_OUT_IOW_1_CB(WRITE8(at_mb_device, dma8237_1_dack_w))
+ MCFG_I8237_OUT_IOW_2_CB(WRITE8(at_mb_device, dma8237_2_dack_w))
+ MCFG_I8237_OUT_IOW_3_CB(WRITE8(at_mb_device, dma8237_3_dack_w))
+ MCFG_I8237_OUT_DACK_0_CB(WRITELINE(at_mb_device, dack0_w))
+ MCFG_I8237_OUT_DACK_1_CB(WRITELINE(at_mb_device, dack1_w))
+ MCFG_I8237_OUT_DACK_2_CB(WRITELINE(at_mb_device, dack2_w))
+ MCFG_I8237_OUT_DACK_3_CB(WRITELINE(at_mb_device, dack3_w))
+ MCFG_DEVICE_ADD( "dma8237_2", AM9517A, XTAL_14_31818MHz/3 )
+ MCFG_I8237_OUT_HREQ_CB(WRITELINE(at_mb_device, dma_hrq_changed))
+ MCFG_I8237_IN_MEMR_CB(READ8(at_mb_device, dma_read_word))
+ MCFG_I8237_OUT_MEMW_CB(WRITE8(at_mb_device, dma_write_word))
+ MCFG_I8237_IN_IOR_1_CB(READ8(at_mb_device, dma8237_5_dack_r))
+ MCFG_I8237_IN_IOR_2_CB(READ8(at_mb_device, dma8237_6_dack_r))
+ MCFG_I8237_IN_IOR_3_CB(READ8(at_mb_device, dma8237_7_dack_r))
+ MCFG_I8237_OUT_IOW_1_CB(WRITE8(at_mb_device, dma8237_5_dack_w))
+ MCFG_I8237_OUT_IOW_2_CB(WRITE8(at_mb_device, dma8237_6_dack_w))
+ MCFG_I8237_OUT_IOW_3_CB(WRITE8(at_mb_device, dma8237_7_dack_w))
+ MCFG_I8237_OUT_DACK_0_CB(WRITELINE(at_mb_device, dack4_w))
+ MCFG_I8237_OUT_DACK_1_CB(WRITELINE(at_mb_device, dack5_w))
+ MCFG_I8237_OUT_DACK_2_CB(WRITELINE(at_mb_device, dack6_w))
+ MCFG_I8237_OUT_DACK_3_CB(WRITELINE(at_mb_device, dack7_w))
+
+ MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE(":maincpu", 0), VCC, READ8(at_mb_device, get_slave_ack) )
+ MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir2_w), GND, NULL )
+
+ MCFG_DEVICE_ADD("isabus", ISA16, 0)
+ MCFG_ISA16_CPU(":maincpu")
+ MCFG_ISA_OUT_IRQ2_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir2_w)) // in place of irq 2 on at irq 9 is used
+ MCFG_ISA_OUT_IRQ3_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir3_w))
+ MCFG_ISA_OUT_IRQ4_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir4_w))
+ MCFG_ISA_OUT_IRQ5_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir5_w))
+ MCFG_ISA_OUT_IRQ6_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir6_w))
+ MCFG_ISA_OUT_IRQ7_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir7_w))
+ MCFG_ISA_OUT_IRQ10_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir3_w))
+ MCFG_ISA_OUT_IRQ11_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir4_w))
+ MCFG_ISA_OUT_IRQ12_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir5_w))
+ MCFG_ISA_OUT_IRQ14_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir6_w))
+ MCFG_ISA_OUT_IRQ15_CB(DEVWRITELINE("pic8259_slave", pic8259_device, ir7_w))
+ MCFG_ISA_OUT_DRQ0_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq0_w))
+ MCFG_ISA_OUT_DRQ1_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq1_w))
+ MCFG_ISA_OUT_DRQ2_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq2_w))
+ MCFG_ISA_OUT_DRQ3_CB(DEVWRITELINE("dma8237_1", am9517a_device, dreq3_w))
+ MCFG_ISA_OUT_DRQ5_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq1_w))
+ MCFG_ISA_OUT_DRQ6_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq2_w))
+ MCFG_ISA_OUT_DRQ7_CB(DEVWRITELINE("dma8237_2", am9517a_device, dreq3_w))
+
+ MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
+ MCFG_MC146818_IRQ_HANDLER(DEVWRITELINE("pic8259_slave", pic8259_device, ir0_w))
+ MCFG_MC146818_CENTURY_INDEX(0x32)
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+
+ MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
+ MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(INPUTLINE(":maincpu", INPUT_LINE_RESET))
+ MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(INPUTLINE(":maincpu", INPUT_LINE_A20))
+ MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir1_w))
+ MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
+ MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
+ MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
+ MCFG_PC_KBDC_OUT_CLOCK_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_clock_w))
+ MCFG_PC_KBDC_OUT_DATA_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_data_w))
+MACHINE_CONFIG_END
+
+machine_config_constructor at_mb_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME(at_mb);
+}
+
+DEVICE_ADDRESS_MAP_START( map, 16, at_mb_device )
+ AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", am9517a_device, read, write, 0xffff)
+ AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_master", pic8259_device, read, write, 0xffff)
+ AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffff)
+ AM_RANGE(0x0060, 0x0061) AM_READWRITE8(portb_r, portb_w, 0xff00)
+ AM_RANGE(0x0060, 0x0061) AM_DEVREADWRITE8("keybc", at_keyboard_controller_device, data_r, data_w, 0x00ff)
+ AM_RANGE(0x0064, 0x0065) AM_DEVREADWRITE8("keybc", at_keyboard_controller_device, status_r, command_w, 0x00ff)
+ AM_RANGE(0x0070, 0x007f) AM_DEVREAD8("rtc", mc146818_device, read, 0xffff) AM_WRITE8(write_rtc , 0xffff)
+ AM_RANGE(0x0080, 0x009f) AM_READWRITE8(page8_r, page8_w, 0xffff)
+ AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_slave", pic8259_device, read, write, 0xffff)
+ AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("dma8237_2", am9517a_device, read, write, 0x00ff)
+ADDRESS_MAP_END
+
/*************************************************************
*
* pic8259 configuration
*
*************************************************************/
-READ8_MEMBER( at_state::get_slave_ack )
+READ8_MEMBER( at_mb_device::get_slave_ack )
{
if (offset==2) // IRQ = 2
return m_pic8259_slave->acknowledge();
@@ -29,7 +173,7 @@ READ8_MEMBER( at_state::get_slave_ack )
*
*************************************************************************/
-void at_state::at_speaker_set_spkrdata(UINT8 data)
+void at_mb_device::speaker_set_spkrdata(UINT8 data)
{
m_at_spkrdata = data ? 1 : 0;
m_speaker->level_w(m_at_spkrdata & m_pit_out2);
@@ -43,13 +187,7 @@ void at_state::at_speaker_set_spkrdata(UINT8 data)
*
*************************************************************/
-WRITE_LINE_MEMBER( at_state::at_pit8254_out0_changed )
-{
- m_pic8259_master->ir0_w(state);
-}
-
-
-WRITE_LINE_MEMBER( at_state::at_pit8254_out2_changed )
+WRITE_LINE_MEMBER( at_mb_device::pit8254_out2_changed )
{
m_pit_out2 = state ? 1 : 0;
m_speaker->level_w(m_at_spkrdata & m_pit_out2);
@@ -62,7 +200,7 @@ WRITE_LINE_MEMBER( at_state::at_pit8254_out2_changed )
*
*************************************************************************/
-READ8_MEMBER( at_state::at_page8_r )
+READ8_MEMBER( at_mb_device::page8_r )
{
UINT8 data = m_at_pages[offset % 0x10];
@@ -85,7 +223,7 @@ READ8_MEMBER( at_state::at_page8_r )
}
-WRITE8_MEMBER( at_state::at_page8_w )
+WRITE8_MEMBER( at_mb_device::page8_w )
{
m_at_pages[offset % 0x10] = data;
@@ -113,7 +251,7 @@ WRITE8_MEMBER( at_state::at_page8_w )
}
-WRITE_LINE_MEMBER( at_state::pc_dma_hrq_changed )
+WRITE_LINE_MEMBER( at_mb_device::dma_hrq_changed )
{
m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
@@ -121,7 +259,7 @@ WRITE_LINE_MEMBER( at_state::pc_dma_hrq_changed )
m_dma8237_2->hack_w(state);
}
-READ8_MEMBER(at_state::pc_dma_read_byte)
+READ8_MEMBER(at_mb_device::dma_read_byte)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
@@ -134,7 +272,7 @@ READ8_MEMBER(at_state::pc_dma_read_byte)
}
-WRITE8_MEMBER(at_state::pc_dma_write_byte)
+WRITE8_MEMBER(at_mb_device::dma_write_byte)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
@@ -145,7 +283,7 @@ WRITE8_MEMBER(at_state::pc_dma_write_byte)
}
-READ8_MEMBER(at_state::pc_dma_read_word)
+READ8_MEMBER(at_mb_device::dma_read_word)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
@@ -160,7 +298,7 @@ READ8_MEMBER(at_state::pc_dma_read_word)
}
-WRITE8_MEMBER(at_state::pc_dma_write_word)
+WRITE8_MEMBER(at_mb_device::dma_write_word)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
@@ -170,31 +308,31 @@ WRITE8_MEMBER(at_state::pc_dma_write_word)
prog_space.write_word(page_offset + ( offset << 1 ), m_dma_high_byte | data);
}
-READ8_MEMBER( at_state::pc_dma8237_0_dack_r ) { return m_isabus->dack_r(0); }
-READ8_MEMBER( at_state::pc_dma8237_1_dack_r ) { return m_isabus->dack_r(1); }
-READ8_MEMBER( at_state::pc_dma8237_2_dack_r ) { return m_isabus->dack_r(2); }
-READ8_MEMBER( at_state::pc_dma8237_3_dack_r ) { return m_isabus->dack_r(3); }
-READ8_MEMBER( at_state::pc_dma8237_5_dack_r ) { UINT16 ret = m_isabus->dack16_r(5); m_dma_high_byte = ret & 0xff00; return ret; }
-READ8_MEMBER( at_state::pc_dma8237_6_dack_r ) { UINT16 ret = m_isabus->dack16_r(6); m_dma_high_byte = ret & 0xff00; return ret; }
-READ8_MEMBER( at_state::pc_dma8237_7_dack_r ) { UINT16 ret = m_isabus->dack16_r(7); m_dma_high_byte = ret & 0xff00; return ret; }
+READ8_MEMBER( at_mb_device::dma8237_0_dack_r ) { return m_isabus->dack_r(0); }
+READ8_MEMBER( at_mb_device::dma8237_1_dack_r ) { return m_isabus->dack_r(1); }
+READ8_MEMBER( at_mb_device::dma8237_2_dack_r ) { return m_isabus->dack_r(2); }
+READ8_MEMBER( at_mb_device::dma8237_3_dack_r ) { return m_isabus->dack_r(3); }
+READ8_MEMBER( at_mb_device::dma8237_5_dack_r ) { UINT16 ret = m_isabus->dack16_r(5); m_dma_high_byte = ret & 0xff00; return ret; }
+READ8_MEMBER( at_mb_device::dma8237_6_dack_r ) { UINT16 ret = m_isabus->dack16_r(6); m_dma_high_byte = ret & 0xff00; return ret; }
+READ8_MEMBER( at_mb_device::dma8237_7_dack_r ) { UINT16 ret = m_isabus->dack16_r(7); m_dma_high_byte = ret & 0xff00; return ret; }
-WRITE8_MEMBER( at_state::pc_dma8237_0_dack_w ){ m_isabus->dack_w(0, data); }
-WRITE8_MEMBER( at_state::pc_dma8237_1_dack_w ){ m_isabus->dack_w(1, data); }
-WRITE8_MEMBER( at_state::pc_dma8237_2_dack_w ){ m_isabus->dack_w(2, data); }
-WRITE8_MEMBER( at_state::pc_dma8237_3_dack_w ){ m_isabus->dack_w(3, data); }
-WRITE8_MEMBER( at_state::pc_dma8237_5_dack_w ){ m_isabus->dack16_w(5, m_dma_high_byte | data); }
-WRITE8_MEMBER( at_state::pc_dma8237_6_dack_w ){ m_isabus->dack16_w(6, m_dma_high_byte | data); }
-WRITE8_MEMBER( at_state::pc_dma8237_7_dack_w ){ m_isabus->dack16_w(7, m_dma_high_byte | data); }
+WRITE8_MEMBER( at_mb_device::dma8237_0_dack_w ){ m_isabus->dack_w(0, data); }
+WRITE8_MEMBER( at_mb_device::dma8237_1_dack_w ){ m_isabus->dack_w(1, data); }
+WRITE8_MEMBER( at_mb_device::dma8237_2_dack_w ){ m_isabus->dack_w(2, data); }
+WRITE8_MEMBER( at_mb_device::dma8237_3_dack_w ){ m_isabus->dack_w(3, data); }
+WRITE8_MEMBER( at_mb_device::dma8237_5_dack_w ){ m_isabus->dack16_w(5, m_dma_high_byte | data); }
+WRITE8_MEMBER( at_mb_device::dma8237_6_dack_w ){ m_isabus->dack16_w(6, m_dma_high_byte | data); }
+WRITE8_MEMBER( at_mb_device::dma8237_7_dack_w ){ m_isabus->dack16_w(7, m_dma_high_byte | data); }
-WRITE_LINE_MEMBER( at_state::at_dma8237_out_eop )
+WRITE_LINE_MEMBER( at_mb_device::dma8237_out_eop )
{
m_cur_eop = state == ASSERT_LINE;
if(m_dma_channel != -1)
m_isabus->eop_w(m_dma_channel, m_cur_eop ? ASSERT_LINE : CLEAR_LINE );
}
-void at_state::pc_set_dma_channel(int channel, int state)
+void at_mb_device::set_dma_channel(int channel, int state)
{
if(!state) {
m_dma_channel = channel;
@@ -208,47 +346,44 @@ void at_state::pc_set_dma_channel(int channel, int state)
}
}
-WRITE_LINE_MEMBER( at_state::pc_dack0_w ) { pc_set_dma_channel(0, state); }
-WRITE_LINE_MEMBER( at_state::pc_dack1_w ) { pc_set_dma_channel(1, state); }
-WRITE_LINE_MEMBER( at_state::pc_dack2_w ) { pc_set_dma_channel(2, state); }
-WRITE_LINE_MEMBER( at_state::pc_dack3_w ) { pc_set_dma_channel(3, state); }
-WRITE_LINE_MEMBER( at_state::pc_dack4_w ) { m_dma8237_1->hack_w(state ? 0 : 1); } // it's inverted
-WRITE_LINE_MEMBER( at_state::pc_dack5_w ) { pc_set_dma_channel(5, state); }
-WRITE_LINE_MEMBER( at_state::pc_dack6_w ) { pc_set_dma_channel(6, state); }
-WRITE_LINE_MEMBER( at_state::pc_dack7_w ) { pc_set_dma_channel(7, state); }
-
-READ8_MEMBER( at_state::at_portb_r )
+WRITE8_MEMBER( at_mb_device::write_rtc )
{
- UINT8 data = m_at_speaker;
- data &= ~0xd0; /* AT BIOS don't likes this being set */
-
- /* 0x10 is the dram refresh line bit, 15.085us. */
- data |= (machine().time().as_ticks(110000) & 1) ? 0x10 : 0;
-
- if (m_pit_out2)
- data |= 0x20;
- else
- data &= ~0x20; /* ps2m30 wants this */
-
- return data;
+ if (offset==0) {
+ m_nmi_enabled = BIT(data,7);
+ m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
+ m_mc146818->write(space,0,data);
+ }
+ else {
+ m_mc146818->write(space,offset,data);
+ }
}
-WRITE8_MEMBER( at_state::at_portb_w )
+UINT32 at_mb_device::a20_286(bool state)
{
- m_at_speaker = data;
- m_pit8254->write_gate2(BIT(data, 0));
- at_speaker_set_spkrdata( BIT(data, 1));
- m_channel_check = BIT(data, 3);
- m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
+ return (state ? 0xffffff : 0xefffff);
}
-READ8_MEMBER( at_state::ps2_portb_r )
+WRITE_LINE_MEMBER( at_mb_device::shutdown )
+{
+ if(state)
+ m_maincpu->reset();
+}
+WRITE_LINE_MEMBER( at_mb_device::dack0_w ) { set_dma_channel(0, state); }
+WRITE_LINE_MEMBER( at_mb_device::dack1_w ) { set_dma_channel(1, state); }
+WRITE_LINE_MEMBER( at_mb_device::dack2_w ) { set_dma_channel(2, state); }
+WRITE_LINE_MEMBER( at_mb_device::dack3_w ) { set_dma_channel(3, state); }
+WRITE_LINE_MEMBER( at_mb_device::dack4_w ) { m_dma8237_1->hack_w(state ? 0 : 1); } // it's inverted
+WRITE_LINE_MEMBER( at_mb_device::dack5_w ) { set_dma_channel(5, state); }
+WRITE_LINE_MEMBER( at_mb_device::dack6_w ) { set_dma_channel(6, state); }
+WRITE_LINE_MEMBER( at_mb_device::dack7_w ) { set_dma_channel(7, state); }
+
+READ8_MEMBER( at_mb_device::portb_r )
{
UINT8 data = m_at_speaker;
data &= ~0xd0; /* AT BIOS don't likes this being set */
/* 0x10 is the dram refresh line bit, 15.085us. */
- data |= (machine().time().as_ticks(66291) & 1) ? 0x10 : 0;
+ data |= (machine().time().as_ticks(110000) & 1) ? 0x10 : 0;
if (m_pit_out2)
data |= 0x20;
@@ -258,56 +393,12 @@ READ8_MEMBER( at_state::ps2_portb_r )
return data;
}
-
-/**********************************************************
- *
- * Init functions
- *
- **********************************************************/
-
-void at_state::init_at_common(int xmsbase)
-{
- address_space& space = m_maincpu->space(AS_PROGRAM);
-
- /* MESS managed RAM */
- membank("bank10")->set_base(m_ram->pointer());
-
- if (m_ram->size() > xmsbase)
- {
- offs_t ram_limit = 0x100000 + m_ram->size() - xmsbase;
- space.install_read_bank(0x100000, ram_limit - 1, "bank1");
- space.install_write_bank(0x100000, ram_limit - 1, "bank1");
- membank("bank1")->set_base(m_ram->pointer() + xmsbase);
- }
-}
-
-DRIVER_INIT_MEMBER(at_state,atcga)
-{
- init_at_common(0xa0000);
-}
-
-DRIVER_INIT_MEMBER(at_state,atvga)
-{
- init_at_common(0xa0000);
-}
-
-DRIVER_INIT_MEMBER(at_state,atpci)
-{
- init_at_common(0x100000);
-}
-
-DRIVER_INIT_MEMBER(at586_state,at586)
-{
-}
-
-MACHINE_START_MEMBER(at_state,at)
+WRITE8_MEMBER( at_mb_device::portb_w )
{
+ m_at_speaker = data;
+ m_pit8254->write_gate2(BIT(data, 0));
+ speaker_set_spkrdata( BIT(data, 1));
+ m_channel_check = BIT(data, 3);
+ m_isabus->set_nmi_state((m_nmi_enabled==0) && (m_channel_check==0));
}
-MACHINE_RESET_MEMBER(at_state,at)
-{
- m_at_spkrdata = 0;
- m_pit_out2 = 1;
- m_dma_channel = -1;
- m_cur_eop = false;
-}
diff --git a/src/mame/machine/at.h b/src/mame/machine/at.h
new file mode 100644
index 00000000000..98f22c0ce2d
--- /dev/null
+++ b/src/mame/machine/at.h
@@ -0,0 +1,95 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol, Miodrag Milanovic, Carl
+#ifndef _AT_H_
+#define _AT_H_
+
+#include "emu.h"
+#include "machine/mc146818.h"
+#include "machine/pic8259.h"
+#include "machine/pit8253.h"
+#include "machine/am9517a.h"
+#include "bus/pc_kbd/pc_kbdc.h"
+#include "bus/isa/isa.h"
+#include "sound/speaker.h"
+#include "softlist.h"
+
+class at_mb_device : public device_t
+{
+public:
+ at_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ DECLARE_ADDRESS_MAP(map, 16);
+
+ DECLARE_READ8_MEMBER(page8_r);
+ DECLARE_WRITE8_MEMBER(page8_w);
+ DECLARE_READ8_MEMBER(portb_r);
+ DECLARE_WRITE8_MEMBER(portb_w);
+ DECLARE_READ8_MEMBER(get_slave_ack);
+ DECLARE_WRITE_LINE_MEMBER(pit8254_out2_changed);
+ DECLARE_WRITE_LINE_MEMBER(dma_hrq_changed);
+ DECLARE_READ8_MEMBER(dma8237_0_dack_r);
+ DECLARE_READ8_MEMBER(dma8237_1_dack_r);
+ DECLARE_READ8_MEMBER(dma8237_2_dack_r);
+ DECLARE_READ8_MEMBER(dma8237_3_dack_r);
+ DECLARE_READ8_MEMBER(dma8237_5_dack_r);
+ DECLARE_READ8_MEMBER(dma8237_6_dack_r);
+ DECLARE_READ8_MEMBER(dma8237_7_dack_r);
+ DECLARE_WRITE8_MEMBER(dma8237_0_dack_w);
+ DECLARE_WRITE8_MEMBER(dma8237_1_dack_w);
+ DECLARE_WRITE8_MEMBER(dma8237_2_dack_w);
+ DECLARE_WRITE8_MEMBER(dma8237_3_dack_w);
+ DECLARE_WRITE8_MEMBER(dma8237_5_dack_w);
+ DECLARE_WRITE8_MEMBER(dma8237_6_dack_w);
+ DECLARE_WRITE8_MEMBER(dma8237_7_dack_w);
+ DECLARE_WRITE_LINE_MEMBER(dma8237_out_eop);
+ DECLARE_WRITE_LINE_MEMBER(dack0_w);
+ DECLARE_WRITE_LINE_MEMBER(dack1_w);
+ DECLARE_WRITE_LINE_MEMBER(dack2_w);
+ DECLARE_WRITE_LINE_MEMBER(dack3_w);
+ DECLARE_WRITE_LINE_MEMBER(dack4_w);
+ DECLARE_WRITE_LINE_MEMBER(dack5_w);
+ DECLARE_WRITE_LINE_MEMBER(dack6_w);
+ DECLARE_WRITE_LINE_MEMBER(dack7_w);
+ DECLARE_WRITE8_MEMBER(write_rtc);
+
+ DECLARE_WRITE_LINE_MEMBER(shutdown);
+
+ DECLARE_READ8_MEMBER(dma_read_byte);
+ DECLARE_WRITE8_MEMBER(dma_write_byte);
+ DECLARE_READ8_MEMBER(dma_read_word);
+ DECLARE_WRITE8_MEMBER(dma_write_word);
+
+ UINT32 a20_286(bool state);
+protected:
+ void device_start() override;
+ void device_reset() override;
+ virtual machine_config_constructor device_mconfig_additions() const override;
+private:
+ void set_dma_channel(int channel, int state);
+ void speaker_set_spkrdata(UINT8 data);
+
+ required_device<cpu_device> m_maincpu;
+ required_device<isa16_device> m_isabus;
+ required_device<pic8259_device> m_pic8259_slave;
+ required_device<am9517a_device> m_dma8237_1;
+ required_device<am9517a_device> m_dma8237_2;
+ required_device<pit8254_device> m_pit8254;
+ required_device<speaker_sound_device> m_speaker;
+ required_device<mc146818_device> m_mc146818;
+ UINT8 m_at_spkrdata;
+ UINT8 m_pit_out2;
+ int m_dma_channel;
+ bool m_cur_eop;
+ UINT8 m_dma_offset[2][4];
+ UINT8 m_at_pages[0x10];
+ UINT16 m_dma_high_byte;
+ UINT8 m_at_speaker;
+ UINT8 m_channel_check;
+ UINT8 m_nmi_enabled;
+};
+
+extern const device_type AT_MB;
+
+MACHINE_CONFIG_EXTERN(at_softlists);
+
+#endif
diff --git a/src/mame/machine/esqlcd.cpp b/src/mame/machine/esqlcd.cpp
index e9b23fa2685..f98d70f9b12 100644
--- a/src/mame/machine/esqlcd.cpp
+++ b/src/mame/machine/esqlcd.cpp
@@ -9,7 +9,7 @@
//#define VERBOSE
-const device_type ESQ2x16_SQ1 = &device_creator<esq2x16_sq1_t>;
+const device_type ESQ2x16_SQ1 = &device_creator<esq2x16_sq1_t>;
// --- SQ1 - Parduz --------------------------------------------------------------------------------------------------------------------------
static MACHINE_CONFIG_FRAGMENT(esq2x16)
@@ -19,147 +19,147 @@ MACHINE_CONFIG_END
/*! \file font5x7.h \brief Graphic LCD Font (Ascii Characters). */
//*****************************************************************************
//
-// File Name : 'font5x7.h'
-// Title : Graphic LCD Font (Ascii Charaters)
-// Author : Pascal Stang
-// Date : 10/19/2001
-// Revised : 10/19/2001
-// Version : 0.1
-// Target MCU : Atmel AVR
-// Editor Tabs : 4
+// File Name : 'font5x7.h'
+// Title : Graphic LCD Font (Ascii Charaters)
+// Author : Pascal Stang
+// Date : 10/19/2001
+// Revised : 10/19/2001
+// Version : 0.1
+// Target MCU : Atmel AVR
+// Editor Tabs : 4
//
//*****************************************************************************
// standard ascii 5x7 font
// defines ascii characters 0x20-0x7F (32-127)
static unsigned char Font5x7[][5] = {
- {0x00, 0x00, 0x08, 0x00, 0x00}, // _Undef_ 0x00 - dots for debug purposes
- {0x01, 0x00, 0x00, 0x00, 0x40}, // _Undef_ 0x01 - dots for debug purposes
- {0x02, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x02
- {0x03, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x03
- {0x04, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x04
- {0x05, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x05
- {0x06, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x06
- {0x07, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x07
- {0x20, 0x70, 0x3F, 0x00, 0x00}, // Croma 0x08
- {0x20, 0x70, 0x3F, 0x02, 0x0C}, // Croma 0x09
- {0x20, 0x70, 0x3F, 0x05, 0x0A}, // Croma 0x0A
- {0x20, 0x70, 0x3F, 0x15, 0x2A}, // Croma 0x0B
- {0x20, 0x50, 0x50, 0x3F, 0x00}, // Croma 0x0C
- {0x0D, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x0D
- {0x0E, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x0E
- {0x0F, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x0F
- {0x10, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x10
- {0x11, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x11
- {0x12, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x12
- {0x13, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x13
- {0x14, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x14
- {0x15, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x15
- {0x16, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x16
- {0x17, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x17
- {0x18, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x18
- {0x19, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x19
- {0x1A, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1A
- {0x1B, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1B
- {0x1C, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1C
- {0x1D, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1D
- {0x1E, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1E
- {0x1F, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1F
- {0x00, 0x00, 0x00, 0x00, 0x00}, // (space) 0x20
- {0x00, 0x00, 0x5F, 0x00, 0x00}, // ! 0x21
- {0x00, 0x07, 0x00, 0x07, 0x00}, // " 0x22
- {0x14, 0x7F, 0x14, 0x7F, 0x14}, // # 0x23
- {0x24, 0x2A, 0x7F, 0x2A, 0x12}, // $ 0x24
- {0x23, 0x13, 0x08, 0x64, 0x62}, // % 0x25
- {0x36, 0x49, 0x55, 0x22, 0x50}, // & 0x26
- {0x00, 0x05, 0x03, 0x00, 0x00}, // ' 0x27
- {0x00, 0x1C, 0x22, 0x41, 0x00}, // ( 0x28
- {0x00, 0x41, 0x22, 0x1C, 0x00}, // ) 0x29
- {0x08, 0x2A, 0x1C, 0x2A, 0x08}, // * 0x2A
- {0x08, 0x08, 0x3E, 0x08, 0x08}, // + 0x2B
- {0x00, 0x50, 0x30, 0x00, 0x00}, // , 0x2C
- {0x08, 0x08, 0x08, 0x08, 0x08}, // - 0x2D
- {0x00, 0x60, 0x60, 0x00, 0x00}, // . 0x2E
- {0x20, 0x10, 0x08, 0x04, 0x02}, // / 0x2F
- {0x3E, 0x51, 0x49, 0x45, 0x3E}, // 0 0x30
- {0x00, 0x42, 0x7F, 0x40, 0x00}, // 1 0x31
- {0x42, 0x61, 0x51, 0x49, 0x46}, // 2 0x32
- {0x21, 0x41, 0x45, 0x4B, 0x31}, // 3 0x33
- {0x18, 0x14, 0x12, 0x7F, 0x10}, // 4 0x34
- {0x27, 0x45, 0x45, 0x45, 0x39}, // 5 0x35
- {0x3C, 0x4A, 0x49, 0x49, 0x30}, // 6 0x36
- {0x01, 0x71, 0x09, 0x05, 0x03}, // 7 0x37
- {0x36, 0x49, 0x49, 0x49, 0x36}, // 8 0x38
- {0x06, 0x49, 0x49, 0x29, 0x1E}, // 9 0x39
- {0x00, 0x36, 0x36, 0x00, 0x00}, // : 0x3A
- {0x00, 0x56, 0x36, 0x00, 0x00}, // ; 0x3B
- {0x00, 0x08, 0x14, 0x22, 0x41}, // < 0x3C
- {0x14, 0x14, 0x14, 0x14, 0x14}, // = 0x3D
- {0x41, 0x22, 0x14, 0x08, 0x00}, // > 0x3E
- {0x02, 0x01, 0x51, 0x09, 0x06}, // ? 0x3F
- {0x32, 0x49, 0x79, 0x41, 0x3E}, // @ 0x40
- {0x7E, 0x11, 0x11, 0x11, 0x7E}, // A 0x41
- {0x7F, 0x49, 0x49, 0x49, 0x36}, // B 0x42
- {0x3E, 0x41, 0x41, 0x41, 0x22}, // C 0x43
- {0x7F, 0x41, 0x41, 0x22, 0x1C}, // D 0x44
- {0x7F, 0x49, 0x49, 0x49, 0x41}, // E 0x45
- {0x7F, 0x09, 0x09, 0x01, 0x01}, // F 0x46
- {0x3E, 0x41, 0x41, 0x51, 0x32}, // G 0x47
- {0x7F, 0x08, 0x08, 0x08, 0x7F}, // H 0x48
- {0x00, 0x41, 0x7F, 0x41, 0x00}, // I 0x49
- {0x20, 0x40, 0x41, 0x3F, 0x01}, // J 0x4A
- {0x7F, 0x08, 0x14, 0x22, 0x41}, // K 0x4B
- {0x7F, 0x40, 0x40, 0x40, 0x40}, // L 0x4C
- {0x7F, 0x02, 0x04, 0x02, 0x7F}, // M 0x4D
- {0x7F, 0x04, 0x08, 0x10, 0x7F}, // N 0x4E
- {0x3E, 0x41, 0x41, 0x41, 0x3E}, // O 0x4F
- {0x7F, 0x09, 0x09, 0x09, 0x06}, // P 0x50
- {0x3E, 0x41, 0x51, 0x21, 0x5E}, // Q 0x51
- {0x7F, 0x09, 0x19, 0x29, 0x46}, // R 0x52
- {0x46, 0x49, 0x49, 0x49, 0x31}, // S 0x53
- {0x01, 0x01, 0x7F, 0x01, 0x01}, // T 0x54
- {0x3F, 0x40, 0x40, 0x40, 0x3F}, // U 0x55
- {0x1F, 0x20, 0x40, 0x20, 0x1F}, // V 0x56
- {0x7F, 0x20, 0x18, 0x20, 0x7F}, // W 0x57
- {0x63, 0x14, 0x08, 0x14, 0x63}, // X 0x58
- {0x03, 0x04, 0x78, 0x04, 0x03}, // Y 0x59
- {0x61, 0x51, 0x49, 0x45, 0x43}, // Z 0x5A
- {0x00, 0x00, 0x7F, 0x41, 0x41}, // [ 0x5B
- {0x02, 0x04, 0x08, 0x10, 0x20}, // \ 0x5C
- {0x41, 0x41, 0x7F, 0x00, 0x00}, // ] 0x5D
- {0x04, 0x02, 0x01, 0x02, 0x04}, // ^ 0x5E
- {0x40, 0x40, 0x40, 0x40, 0x40}, // _ 0x5F
- {0x00, 0x01, 0x02, 0x04, 0x00}, // ` 0x60
- {0x20, 0x54, 0x54, 0x54, 0x78}, // a 0x61
- {0x7F, 0x48, 0x44, 0x44, 0x38}, // b 0x62
- {0x38, 0x44, 0x44, 0x44, 0x20}, // c 0x63
- {0x38, 0x44, 0x44, 0x48, 0x7F}, // d 0x64
- {0x38, 0x54, 0x54, 0x54, 0x18}, // e 0x65
- {0x08, 0x7E, 0x09, 0x01, 0x02}, // f 0x66
- {0x08, 0x14, 0x54, 0x54, 0x3C}, // g 0x67
- {0x7F, 0x08, 0x04, 0x04, 0x78}, // h 0x68
- {0x00, 0x44, 0x7D, 0x40, 0x00}, // i 0x69
- {0x20, 0x40, 0x44, 0x3D, 0x00}, // j 0x6A
- {0x00, 0x7F, 0x10, 0x28, 0x44}, // k 0x6B
- {0x00, 0x41, 0x7F, 0x40, 0x00}, // l 0x6C
- {0x7C, 0x04, 0x18, 0x04, 0x78}, // m 0x6D
- {0x7C, 0x08, 0x04, 0x04, 0x78}, // n 0x6E
- {0x38, 0x44, 0x44, 0x44, 0x38}, // o 0x6F
- {0x7C, 0x14, 0x14, 0x14, 0x08}, // p 0x70
- {0x08, 0x14, 0x14, 0x18, 0x7C}, // q 0x71
- {0x7C, 0x08, 0x04, 0x04, 0x08}, // r 0x72
- {0x48, 0x54, 0x54, 0x54, 0x20}, // s 0x73
- {0x04, 0x3F, 0x44, 0x40, 0x20}, // t 0x74
- {0x3C, 0x40, 0x40, 0x20, 0x7C}, // u 0x75
- {0x1C, 0x20, 0x40, 0x20, 0x1C}, // v 0x76
- {0x3C, 0x40, 0x30, 0x40, 0x3C}, // w 0x77
- {0x44, 0x28, 0x10, 0x28, 0x44}, // x 0x78
- {0x0C, 0x50, 0x50, 0x50, 0x3C}, // y 0x79
- {0x44, 0x64, 0x54, 0x4C, 0x44}, // z 0x7A
- {0x00, 0x08, 0x36, 0x41, 0x00}, // { 0x7B
- {0x00, 0x00, 0x7F, 0x00, 0x00}, // | 0x7C
- {0x00, 0x41, 0x36, 0x08, 0x00}, // } 0x7D
- {0x08, 0x08, 0x2A, 0x1C, 0x08}, // -> 0x7E
- {0x08, 0x1C, 0x2A, 0x08, 0x08} // <- 0x7F
+ {0x00, 0x00, 0x08, 0x00, 0x00}, // _Undef_ 0x00 - dots for debug purposes
+ {0x01, 0x00, 0x00, 0x00, 0x40}, // _Undef_ 0x01 - dots for debug purposes
+ {0x02, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x02
+ {0x03, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x03
+ {0x04, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x04
+ {0x05, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x05
+ {0x06, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x06
+ {0x07, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x07
+ {0x20, 0x70, 0x3F, 0x00, 0x00}, // Croma 0x08
+ {0x20, 0x70, 0x3F, 0x02, 0x0C}, // Croma 0x09
+ {0x20, 0x70, 0x3F, 0x05, 0x0A}, // Croma 0x0A
+ {0x20, 0x70, 0x3F, 0x15, 0x2A}, // Croma 0x0B
+ {0x20, 0x50, 0x50, 0x3F, 0x00}, // Croma 0x0C
+ {0x0D, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x0D
+ {0x0E, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x0E
+ {0x0F, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x0F
+ {0x10, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x10
+ {0x11, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x11
+ {0x12, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x12
+ {0x13, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x13
+ {0x14, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x14
+ {0x15, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x15
+ {0x16, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x16
+ {0x17, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x17
+ {0x18, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x18
+ {0x19, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x19
+ {0x1A, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1A
+ {0x1B, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1B
+ {0x1C, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1C
+ {0x1D, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1D
+ {0x1E, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1E
+ {0x1F, 0x00, 0x00, 0x00, 0x00}, // _Undef_ 0x1F
+ {0x00, 0x00, 0x00, 0x00, 0x00}, // (space) 0x20
+ {0x00, 0x00, 0x5F, 0x00, 0x00}, // ! 0x21
+ {0x00, 0x07, 0x00, 0x07, 0x00}, // " 0x22
+ {0x14, 0x7F, 0x14, 0x7F, 0x14}, // # 0x23
+ {0x24, 0x2A, 0x7F, 0x2A, 0x12}, // $ 0x24
+ {0x23, 0x13, 0x08, 0x64, 0x62}, // % 0x25
+ {0x36, 0x49, 0x55, 0x22, 0x50}, // & 0x26
+ {0x00, 0x05, 0x03, 0x00, 0x00}, // ' 0x27
+ {0x00, 0x1C, 0x22, 0x41, 0x00}, // ( 0x28
+ {0x00, 0x41, 0x22, 0x1C, 0x00}, // ) 0x29
+ {0x08, 0x2A, 0x1C, 0x2A, 0x08}, // * 0x2A
+ {0x08, 0x08, 0x3E, 0x08, 0x08}, // + 0x2B
+ {0x00, 0x50, 0x30, 0x00, 0x00}, // , 0x2C
+ {0x08, 0x08, 0x08, 0x08, 0x08}, // - 0x2D
+ {0x00, 0x60, 0x60, 0x00, 0x00}, // . 0x2E
+ {0x20, 0x10, 0x08, 0x04, 0x02}, // / 0x2F
+ {0x3E, 0x51, 0x49, 0x45, 0x3E}, // 0 0x30
+ {0x00, 0x42, 0x7F, 0x40, 0x00}, // 1 0x31
+ {0x42, 0x61, 0x51, 0x49, 0x46}, // 2 0x32
+ {0x21, 0x41, 0x45, 0x4B, 0x31}, // 3 0x33
+ {0x18, 0x14, 0x12, 0x7F, 0x10}, // 4 0x34
+ {0x27, 0x45, 0x45, 0x45, 0x39}, // 5 0x35
+ {0x3C, 0x4A, 0x49, 0x49, 0x30}, // 6 0x36
+ {0x01, 0x71, 0x09, 0x05, 0x03}, // 7 0x37
+ {0x36, 0x49, 0x49, 0x49, 0x36}, // 8 0x38
+ {0x06, 0x49, 0x49, 0x29, 0x1E}, // 9 0x39
+ {0x00, 0x36, 0x36, 0x00, 0x00}, // : 0x3A
+ {0x00, 0x56, 0x36, 0x00, 0x00}, // ; 0x3B
+ {0x00, 0x08, 0x14, 0x22, 0x41}, // < 0x3C
+ {0x14, 0x14, 0x14, 0x14, 0x14}, // = 0x3D
+ {0x41, 0x22, 0x14, 0x08, 0x00}, // > 0x3E
+ {0x02, 0x01, 0x51, 0x09, 0x06}, // ? 0x3F
+ {0x32, 0x49, 0x79, 0x41, 0x3E}, // @ 0x40
+ {0x7E, 0x11, 0x11, 0x11, 0x7E}, // A 0x41
+ {0x7F, 0x49, 0x49, 0x49, 0x36}, // B 0x42
+ {0x3E, 0x41, 0x41, 0x41, 0x22}, // C 0x43
+ {0x7F, 0x41, 0x41, 0x22, 0x1C}, // D 0x44
+ {0x7F, 0x49, 0x49, 0x49, 0x41}, // E 0x45
+ {0x7F, 0x09, 0x09, 0x01, 0x01}, // F 0x46
+ {0x3E, 0x41, 0x41, 0x51, 0x32}, // G 0x47
+ {0x7F, 0x08, 0x08, 0x08, 0x7F}, // H 0x48
+ {0x00, 0x41, 0x7F, 0x41, 0x00}, // I 0x49
+ {0x20, 0x40, 0x41, 0x3F, 0x01}, // J 0x4A
+ {0x7F, 0x08, 0x14, 0x22, 0x41}, // K 0x4B
+ {0x7F, 0x40, 0x40, 0x40, 0x40}, // L 0x4C
+ {0x7F, 0x02, 0x04, 0x02, 0x7F}, // M 0x4D
+ {0x7F, 0x04, 0x08, 0x10, 0x7F}, // N 0x4E
+ {0x3E, 0x41, 0x41, 0x41, 0x3E}, // O 0x4F
+ {0x7F, 0x09, 0x09, 0x09, 0x06}, // P 0x50
+ {0x3E, 0x41, 0x51, 0x21, 0x5E}, // Q 0x51
+ {0x7F, 0x09, 0x19, 0x29, 0x46}, // R 0x52
+ {0x46, 0x49, 0x49, 0x49, 0x31}, // S 0x53
+ {0x01, 0x01, 0x7F, 0x01, 0x01}, // T 0x54
+ {0x3F, 0x40, 0x40, 0x40, 0x3F}, // U 0x55
+ {0x1F, 0x20, 0x40, 0x20, 0x1F}, // V 0x56
+ {0x7F, 0x20, 0x18, 0x20, 0x7F}, // W 0x57
+ {0x63, 0x14, 0x08, 0x14, 0x63}, // X 0x58
+ {0x03, 0x04, 0x78, 0x04, 0x03}, // Y 0x59
+ {0x61, 0x51, 0x49, 0x45, 0x43}, // Z 0x5A
+ {0x00, 0x00, 0x7F, 0x41, 0x41}, // [ 0x5B
+ {0x02, 0x04, 0x08, 0x10, 0x20}, // \ 0x5C
+ {0x41, 0x41, 0x7F, 0x00, 0x00}, // ] 0x5D
+ {0x04, 0x02, 0x01, 0x02, 0x04}, // ^ 0x5E
+ {0x40, 0x40, 0x40, 0x40, 0x40}, // _ 0x5F
+ {0x00, 0x01, 0x02, 0x04, 0x00}, // ` 0x60
+ {0x20, 0x54, 0x54, 0x54, 0x78}, // a 0x61
+ {0x7F, 0x48, 0x44, 0x44, 0x38}, // b 0x62
+ {0x38, 0x44, 0x44, 0x44, 0x20}, // c 0x63
+ {0x38, 0x44, 0x44, 0x48, 0x7F}, // d 0x64
+ {0x38, 0x54, 0x54, 0x54, 0x18}, // e 0x65
+ {0x08, 0x7E, 0x09, 0x01, 0x02}, // f 0x66
+ {0x08, 0x14, 0x54, 0x54, 0x3C}, // g 0x67
+ {0x7F, 0x08, 0x04, 0x04, 0x78}, // h 0x68
+ {0x00, 0x44, 0x7D, 0x40, 0x00}, // i 0x69
+ {0x20, 0x40, 0x44, 0x3D, 0x00}, // j 0x6A
+ {0x00, 0x7F, 0x10, 0x28, 0x44}, // k 0x6B
+ {0x00, 0x41, 0x7F, 0x40, 0x00}, // l 0x6C
+ {0x7C, 0x04, 0x18, 0x04, 0x78}, // m 0x6D
+ {0x7C, 0x08, 0x04, 0x04, 0x78}, // n 0x6E
+ {0x38, 0x44, 0x44, 0x44, 0x38}, // o 0x6F
+ {0x7C, 0x14, 0x14, 0x14, 0x08}, // p 0x70
+ {0x08, 0x14, 0x14, 0x18, 0x7C}, // q 0x71
+ {0x7C, 0x08, 0x04, 0x04, 0x08}, // r 0x72
+ {0x48, 0x54, 0x54, 0x54, 0x20}, // s 0x73
+ {0x04, 0x3F, 0x44, 0x40, 0x20}, // t 0x74
+ {0x3C, 0x40, 0x40, 0x20, 0x7C}, // u 0x75
+ {0x1C, 0x20, 0x40, 0x20, 0x1C}, // v 0x76
+ {0x3C, 0x40, 0x30, 0x40, 0x3C}, // w 0x77
+ {0x44, 0x28, 0x10, 0x28, 0x44}, // x 0x78
+ {0x0C, 0x50, 0x50, 0x50, 0x3C}, // y 0x79
+ {0x44, 0x64, 0x54, 0x4C, 0x44}, // z 0x7A
+ {0x00, 0x08, 0x36, 0x41, 0x00}, // { 0x7B
+ {0x00, 0x00, 0x7F, 0x00, 0x00}, // | 0x7C
+ {0x00, 0x41, 0x36, 0x08, 0x00}, // } 0x7D
+ {0x08, 0x08, 0x2A, 0x1C, 0x08}, // -> 0x7E
+ {0x08, 0x1C, 0x2A, 0x08, 0x08} // <- 0x7F
};
//--------------------------------------------------------------------------------------------------------------------------------------------
machine_config_constructor esq2x16_sq1_t::device_mconfig_additions() const
@@ -174,11 +174,11 @@ void esq2x16_sq1_t::write_char(int data)
// Non-ASCII codes that needs to be treated as ASCII characters
if (
- data == 0x08 ||
- data == 0x09 ||
- data == 0x0A ||
- data == 0x0B ||
- data == 0x0C
+ data == 0x08 ||
+ data == 0x09 ||
+ data == 0x0A ||
+ data == 0x0B ||
+ data == 0x0C
) data = '^'; // musical notes
// Resolve here 2-Bytes commands: the command was saved previously
@@ -221,14 +221,14 @@ void esq2x16_sq1_t::write_char(int data)
case 0x8E:
case 0x8F:
// LED OFF, ON, BLINK
- LedState = m_LcdCommand & 0x03;
+ LedState = m_LcdCommand & 0x03;
if (
- DisplayCode >= 16 || // Out of bounds
- DisplayCode == 6 || // non-existent
- DisplayCode == 7 || // non-existent
- DisplayCode == 14 || // non-existent
- DisplayCode == 15 // non-existent
- )
+ DisplayCode >= 16 || // Out of bounds
+ DisplayCode == 6 || // non-existent
+ DisplayCode == 7 || // non-existent
+ DisplayCode == 14 || // non-existent
+ DisplayCode == 15 // non-existent
+ )
{
#ifdef VERBOSE
printf("LCD %02X: Led %02d does'nt exist - pos=%02X (%d)\n", m_LcdCommand, DisplayCode, m_lcdPos, m_lcdPage);
@@ -236,11 +236,11 @@ void esq2x16_sq1_t::write_char(int data)
}
else
{
- if (m_leds[DisplayCode] != LedState)
+ if (m_leds[DisplayCode] != LedState)
{
m_leds[DisplayCode] = LedState;
- m_ledsDirty[DisplayCode] = 1;
- }
+ m_ledsDirty[DisplayCode] = 1;
+ }
update_display();
}
m_LcdCommand = 0;
@@ -255,26 +255,26 @@ void esq2x16_sq1_t::write_char(int data)
return;
break;
}
-
+
if ((data >= 0x20) && (data <= 0x7f))
{
#ifdef VERBOSE
printf("LCD %02X: \"%c\" - pos=%02X (%d)\n", DisplayCode, data, m_lcdPos, m_lcdPage);
#endif
m_lcdpg[m_lcdPage][m_lcdPos++] = DisplayCode;
- if (m_lcdPos > 31) m_lcdPos = 31;
+ if (m_lcdPos > 31) m_lcdPos = 31;
update_display();
return;
}
-
+
if (DisplayCode >= 0x80)
{
switch (DisplayCode) {
// Known 2-bytes command
- case 0x87: // Go To
- case 0x88: // Save Cursor Position
- case 0x89: // Restore Cursor Position
+ case 0x87: // Go To
+ case 0x88: // Save Cursor Position
+ case 0x89: // Restore Cursor Position
// Save the command for the next byte
m_LcdCommand = DisplayCode;
return;
@@ -354,19 +354,19 @@ void esq2x16_sq1_t::update_display()
for (int led = 0; led < 16; led++)
{
if (m_ledsDirty[led]) {
- machine().output().set_indexed_value("rLed_", led, m_leds[led]);
- m_ledsDirty[led] = 0;
- }
+ machine().output().set_indexed_value("rLed_", led, m_leds[led]);
+ m_ledsDirty[led] = 0;
+ }
}
for (int page = 0; page < 4; page++)
{
for (int pos = 0; pos < 32; pos++)
{
- // stealed from tecnbras.cpp and modified
+ // stealed from tecnbras.cpp and modified
for (int rr=0; rr<7; rr++) {
lcdCharRow = RotateLcdChar(m_lcdpg[page][pos],rr);
- machine().output().set_indexed_value("pg_", (page+1)*1000 + pos*7 + rr, 0x1F & lcdCharRow);
+ machine().output().set_indexed_value("pg_", (page+1)*1000 + pos*7 + rr, 0x1F & lcdCharRow);
}
}
}
@@ -377,7 +377,7 @@ void esq2x16_sq1_t::device_reset()
//lcd_reset();
m_lcdPage = m_lcdSavedPos = m_lcdPos = m_LcdCommand = 0;
memset(m_leds, 0, sizeof(m_leds));
- memset(m_lcdpg, 1, sizeof(m_lcdpg)); // Set to 1 for debug: to see what "pages" are set to 0 from the firmware
+ memset(m_lcdpg, 1, sizeof(m_lcdpg)); // Set to 1 for debug: to see what "pages" are set to 0 from the firmware
}
//--------------------------------------------------------------------------------------------------------------------------------------------
void esq2x16_sq1_t::lcd_reset()
diff --git a/src/mame/machine/gaelco2.cpp b/src/mame/machine/gaelco2.cpp
index 0ac284242d7..099520b2813 100644
--- a/src/mame/machine/gaelco2.cpp
+++ b/src/mame/machine/gaelco2.cpp
@@ -291,7 +291,7 @@ static UINT32 rol(UINT32 x, unsigned int c)
{
return (x << c) | (x >> (32 - c));
}
-
+
static UINT16 get_lo(UINT32 x)
{
return ((x & 0x00000010) << 1) |
@@ -308,7 +308,7 @@ static UINT16 get_lo(UINT32 x)
((x & 0x00044000) >> 5) |
((x & 0x00000020) >> 1);
}
-
+
static UINT16 get_hi(UINT32 x)
{
return ((x & 0x00001400) >> 0) |
@@ -327,7 +327,7 @@ static UINT16 get_hi(UINT32 x)
((x & 0x00000080) >> 4) |
((x & 0x00000100) >> 1);
}
-
+
static UINT16 get_out(UINT16 x)
{
return ((x & 0xc840) << 0) |
@@ -343,7 +343,7 @@ static UINT16 get_out(UINT16 x)
((x & 0x2000) >> 6) |
((x & 0x0020) >> 2);
}
-
+
UINT16 mangle(UINT32 x)
{
UINT16 a = get_lo(x);
diff --git a/src/mame/machine/gaelco3d.cpp b/src/mame/machine/gaelco3d.cpp
index d4f9c58383a..138a7c818c6 100644
--- a/src/mame/machine/gaelco3d.cpp
+++ b/src/mame/machine/gaelco3d.cpp
@@ -155,22 +155,6 @@ static void *osd_sharedmem_ptr(osd_shared_mem *os_shmem)
#endif
/***************************************************************************
- INLINE FUNCTIONS
-***************************************************************************/
-
-static inline void shmem_lock(shmem_t *shmem)
-{
- while (atomic_exchange32(&shmem->lock,1) == 0)
- ;
-}
-
-static inline void shmem_unlock(shmem_t *shmem)
-{
- atomic_exchange32(&shmem->lock,0);
-}
-
-
-/***************************************************************************
DEVICE INTERFACE
***************************************************************************/
@@ -248,10 +232,9 @@ void gaelco_serial_device::device_reset()
m_last_in_msg_cnt = -1;
m_slack_cnt = LINK_SLACK_B;
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
buf_reset(m_out_ptr);
buf_reset(m_in_ptr);
- shmem_unlock(m_shmem);
}
//-------------------------------------------------
@@ -260,11 +243,11 @@ void gaelco_serial_device::device_reset()
void gaelco_serial_device::device_stop()
{
- shmem_lock(m_shmem);
- buf_reset(m_out_ptr);
- buf_reset(m_in_ptr);
- shmem_unlock(m_shmem);
-
+ {
+ std::lock_guard<std::mutex> guard(m_mutex);
+ buf_reset(m_out_ptr);
+ buf_reset(m_in_ptr);
+ }
osd_sharedmem_free(m_os_shmem);
}
@@ -313,7 +296,8 @@ void gaelco_serial_device::sync_link()
int breakme = 1;
do
{
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
+
process_in();
/* HACK: put some timing noise on the line */
if (buf->cnt + m_slack_cnt > m_out_ptr->cnt)
@@ -321,23 +305,23 @@ void gaelco_serial_device::sync_link()
/* stop if not connected .. */
if ((m_out_ptr->stat & GAELCOSER_STATUS_RESET) != 0)
breakme = 0;
- shmem_unlock(m_shmem);
+
} while (breakme);
m_slack_cnt++;
m_slack_cnt = (m_slack_cnt % LINK_SLACK) + LINK_SLACK_B;
- shmem_lock(m_shmem);
- m_out_ptr->stat &= ~GAELCOSER_STATUS_RESET;
- shmem_unlock(m_shmem);
+ {
+ std::lock_guard<std::mutex> guard(m_mutex);
+ m_out_ptr->stat &= ~GAELCOSER_STATUS_RESET;
+ }
}
TIMER_CALLBACK_MEMBER( gaelco_serial_device::link_cb )
{
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
m_out_ptr->cnt++;
sync_link();
- shmem_unlock(m_shmem);
}
@@ -356,19 +340,20 @@ READ8_MEMBER( gaelco_serial_device::status_r)
{
UINT8 ret = 0;
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
+
process_in();
if ((m_status & GAELCOSER_STATUS_READY) != 0)
ret |= 0x01;
if ((m_in_ptr->stat & GAELCOSER_STATUS_RTS) != 0)
ret |= 0x02;
- shmem_unlock(m_shmem);
+
return ret;
}
WRITE8_MEMBER( gaelco_serial_device::data_w)
{
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
m_out_ptr->data = data;
m_status &= ~GAELCOSER_STATUS_READY;
@@ -376,7 +361,6 @@ WRITE8_MEMBER( gaelco_serial_device::data_w)
set_status( ~GAELCOSER_STATUS_READY, GAELCOSER_STATUS_READY, LINK_FREQ );
- shmem_unlock(m_shmem);
LOGMSG(("command send %02x at %d\n", data, m_out_ptr->cnt));
}
@@ -384,7 +368,7 @@ READ8_MEMBER( gaelco_serial_device::data_r)
{
UINT8 ret;
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
process_in();
ret = (m_in_ptr->data & 0xff);
@@ -395,21 +379,19 @@ READ8_MEMBER( gaelco_serial_device::data_r)
if ((m_status & GAELCOSER_STATUS_SEND) == 0)
m_status |= GAELCOSER_STATUS_READY;
- shmem_unlock(m_shmem);
return ret;
}
WRITE8_MEMBER( gaelco_serial_device::unknown_w)
{
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
LOGMSG(("???? unknown serial access %d\n", data));
- shmem_unlock(m_shmem);
}
WRITE8_MEMBER( gaelco_serial_device::rts_w )
{
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
if (data == 0)
m_out_ptr->stat |= GAELCOSER_STATUS_RTS;
@@ -419,18 +401,14 @@ WRITE8_MEMBER( gaelco_serial_device::rts_w )
//m_status |= GAELCOSER_STATUS_READY;
m_out_ptr->stat &= ~GAELCOSER_STATUS_RTS;
}
-
- shmem_unlock(m_shmem);
}
WRITE8_MEMBER( gaelco_serial_device::tr_w)
{
LOGMSG(("set transmit %d\n", data));
- shmem_lock(m_shmem);
+ std::lock_guard<std::mutex> guard(m_mutex);
if ((data & 0x01) != 0)
m_status |= GAELCOSER_STATUS_SEND;
else
m_status &= ~GAELCOSER_STATUS_SEND;
-
- shmem_unlock(m_shmem);
}
diff --git a/src/mame/machine/gaelco3d.h b/src/mame/machine/gaelco3d.h
index 36ab65082f1..1c1eec722d3 100644
--- a/src/mame/machine/gaelco3d.h
+++ b/src/mame/machine/gaelco3d.h
@@ -7,7 +7,6 @@
***************************************************************************/
-
/***************************************************************************
DEVICE CONFIGURATION MACROS
***************************************************************************/
@@ -47,7 +46,6 @@ struct buf_t
struct shmem_t
{
- volatile INT32 lock;
buf_t buf[2];
};
@@ -106,6 +104,7 @@ private:
buf_t *m_out_ptr;
osd_shared_mem *m_os_shmem;
shmem_t *m_shmem;
+ std::mutex m_mutex;
TIMER_CALLBACK_MEMBER( set_status_cb );
TIMER_CALLBACK_MEMBER( link_cb );
diff --git a/src/mame/machine/mcr68.cpp b/src/mame/machine/mcr68.cpp
index 823e2a2d721..8290c6d3141 100644
--- a/src/mame/machine/mcr68.cpp
+++ b/src/mame/machine/mcr68.cpp
@@ -1,8 +1,8 @@
// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
+// copyright-holders:Aaron Giles, Bryan McPhail
/***************************************************************************
- Midway MCR system
+ Midway MCR-68k system
***************************************************************************/
@@ -49,9 +49,7 @@ READ8_MEMBER(mcr68_state::zwackery_port_3_r)
MACHINE_START_MEMBER(mcr68_state,mcr68)
{
- int i;
-
- for (i = 0; i < 3; i++)
+ for (int i = 0; i < 3; i++)
{
struct counter_state *m6840 = &m_m6840_state[i];
@@ -75,17 +73,15 @@ MACHINE_START_MEMBER(mcr68_state,mcr68)
void mcr68_state::mcr68_common_init()
{
- int i;
-
/* reset the 6840's */
- m_m6840_counter_periods[0] = attotime::from_hz(30); /* clocked by /VBLANK */
- m_m6840_counter_periods[1] = attotime::never; /* grounded */
- m_m6840_counter_periods[2] = attotime::from_hz(512 * 30); /* clocked by /HSYNC */
+ m_m6840_counter_periods[0] = attotime::from_hz(30); /* clocked by /VBLANK */
+ m_m6840_counter_periods[1] = attotime::never; /* grounded */
+ m_m6840_counter_periods[2] = attotime::from_hz(512 * 30); /* clocked by /HSYNC */
m_m6840_status = 0x00;
m_m6840_status_read_since_int = 0x00;
m_m6840_msb_buffer = m_m6840_lsb_buffer = 0;
- for (i = 0; i < 3; i++)
+ for (int i = 0; i < 3; i++)
{
struct counter_state *m6840 = &m_m6840_state[i];
diff --git a/src/mame/machine/n64.cpp b/src/mame/machine/n64.cpp
index 5f0d8a6b4d2..32ba2ee627e 100644
--- a/src/mame/machine/n64.cpp
+++ b/src/mame/machine/n64.cpp
@@ -651,7 +651,7 @@ READ32_MEMBER(n64_periphs::sp_reg_r)
return 0;
case 0x1c/4: // SP_SEMAPHORE_REG
- m_vr4300->yield();
+ //m_vr4300->yield();
if( sp_semaphore )
{
return 1;
@@ -996,7 +996,7 @@ void n64_periphs::vi_recalculate_resolution()
// DACRATE is the quarter pixel clock and period will be for a field, not a frame
attoseconds_t period = (vi_hsync & 0xfff) * (vi_vsync & 0xfff) * HZ_TO_ATTOSECONDS(DACRATE_NTSC) / 2;
- if (width == 0 || height == 0)
+ if (width == 0 || height == 0 || (vi_control & 3) == 0)
{
vi_blank = 1;
/*
@@ -1373,7 +1373,7 @@ WRITE32_MEMBER( n64_periphs::ai_reg_w )
TIMER_CALLBACK_MEMBER(n64_periphs::pi_dma_callback)
{
pi_dma_tick();
- m_rsp->yield();
+ //m_rsp->yield();
}
void n64_periphs::pi_dma_tick()
@@ -2060,7 +2060,7 @@ void n64_periphs::handle_pif()
}
}
- ram[0x3f ^ BYTE4_XOR_BE(0)] = 0;
+ ram[0x3f ^ BYTE4_XOR_BE(0)] &= ~0x80;
}
/*printf("After:\n"); fflush(stdout);
@@ -2278,7 +2278,7 @@ void n64_periphs::dd_update_bm()
}
else // dd read, BM Mode 1
{
- if(((dd_track_reg & 0xFFF) == 6) && (dd_start_block == 0) && ((machine().root_device().ioport("input")->read() & 0x0100) == 0x0000))
+ if(((dd_track_reg & 0x1FFF) == 6) && (dd_start_block == 0) && ((machine().root_device().ioport("input")->read() & 0x0100) == 0x0000))
{
//only fail read LBA 12 if retail disk drive
dd_status_reg &= ~DD_ASIC_STATUS_DREQ;
diff --git a/src/mame/machine/nmk004.cpp b/src/mame/machine/nmk004.cpp
index abf9f9d2ec6..18526bd6723 100644
--- a/src/mame/machine/nmk004.cpp
+++ b/src/mame/machine/nmk004.cpp
@@ -11,13 +11,13 @@
WRITE8_MEMBER( nmk004_device::write )
{
- space.machine().scheduler().synchronize();
+ machine().scheduler().synchronize();
to_nmk004 = data;
}
READ8_MEMBER( nmk004_device::read )
{
- space.machine().scheduler().synchronize();
+ machine().scheduler().synchronize();
return to_main;
}
@@ -31,31 +31,25 @@ WRITE8_MEMBER(nmk004_device::nmk004_port4_w)
WRITE8_MEMBER(nmk004_device::nmk004_oki0_bankswitch_w)
{
- UINT8 *rom = memregion(":oki1")->base();
-
- data++; // so that 3 wraps around
data &= 3;
- memcpy(rom + 0x20000,rom + 0x20000 + data * 0x20000,0x20000);
+ membank(":okibank1")->set_entry(data);
}
WRITE8_MEMBER(nmk004_device::nmk004_oki1_bankswitch_w)
{
- UINT8 *rom = memregion(":oki2")->base();
-
- data++; // so that 3 wraps around
data &= 3;
- memcpy(rom + 0x20000,rom + 0x20000 + data * 0x20000,0x20000);
+ membank(":okibank2")->set_entry(data);
}
READ8_MEMBER(nmk004_device::nmk004_tonmk004_r)
{
- space.machine().scheduler().synchronize();
+ machine().scheduler().synchronize();
return to_nmk004;
}
WRITE8_MEMBER(nmk004_device::nmk004_tomain_w)
{
- space.machine().scheduler().synchronize();
+ machine().scheduler().synchronize();
to_main = data;
}
@@ -113,6 +107,8 @@ nmk004_device::nmk004_device(const machine_config &mconfig, const char *tag, dev
//-------------------------------------------------
void nmk004_device::device_start()
{
+ membank(":okibank1")->configure_entries(0, 4, memregion(":oki1")->base() + 0x20000, 0x20000);
+ membank(":okibank2")->configure_entries(0, 4, memregion(":oki2")->base() + 0x20000, 0x20000);
}
//-------------------------------------------------
diff --git a/src/mame/machine/pc9801_kbd.h b/src/mame/machine/pc9801_kbd.h
index e776e2b238e..6de22f9fe94 100644
--- a/src/mame/machine/pc9801_kbd.h
+++ b/src/mame/machine/pc9801_kbd.h
@@ -55,7 +55,7 @@ protected:
UINT8 m_rx_buf[0x80];
UINT8 m_keyb_tx;
UINT8 m_keyb_rx;
- bool m_key_avail;
+ bool m_key_avail;
};
diff --git a/src/mame/machine/segaic16.cpp b/src/mame/machine/segaic16.cpp
index 3d807412a56..3cb068c70e6 100644
--- a/src/mame/machine/segaic16.cpp
+++ b/src/mame/machine/segaic16.cpp
@@ -164,6 +164,30 @@ WRITE16_MEMBER( sega_16bit_common_base::paletteram_w )
m_palette->set_pen_color(offset + 2 * m_palette_entries, m_palette_hilight[r], m_palette_hilight[g], m_palette_hilight[b]);
}
+WRITE16_MEMBER( sega_16bit_common_base::philko_paletteram_w )
+{
+ // compute the number of entries
+ if (m_palette_entries == 0)
+ m_palette_entries = memshare("paletteram")->bytes() / 2;
+
+ // get the new value
+ UINT16 newval = m_paletteram[offset];
+ COMBINE_DATA(&newval);
+ m_paletteram[offset] = newval;
+
+ // byte 0 byte 1
+ // sRRR RRGG GGGB BBBB
+ // x432 1043 2104 3210
+ int b = (newval >> 0) & 0x1f;
+ int g = (newval >> 5) & 0x1f;
+ int r = (newval >> 10) & 0x1f;
+
+ // normal colors
+ m_palette->set_pen_color(offset + 0 * m_palette_entries, m_palette_normal[r], m_palette_normal[g], m_palette_normal[b]);
+ m_palette->set_pen_color(offset + 1 * m_palette_entries, m_palette_shadow[r], m_palette_shadow[g], m_palette_shadow[b]);
+ m_palette->set_pen_color(offset + 2 * m_palette_entries, m_palette_hilight[r], m_palette_hilight[g], m_palette_hilight[b]);
+}
+
//**************************************************************************
diff --git a/src/mame/machine/segaic16.h b/src/mame/machine/segaic16.h
index bf24241f2cd..5b4b4812bd4 100644
--- a/src/mame/machine/segaic16.h
+++ b/src/mame/machine/segaic16.h
@@ -58,6 +58,7 @@ public:
// palette helpers
DECLARE_WRITE16_MEMBER( paletteram_w );
+ DECLARE_WRITE16_MEMBER( philko_paletteram_w );
protected:
// internal helpers
diff --git a/src/mame/machine/spec_snqk.cpp b/src/mame/machine/spec_snqk.cpp
index 5af12945676..543619099d6 100644
--- a/src/mame/machine/spec_snqk.cpp
+++ b/src/mame/machine/spec_snqk.cpp
@@ -48,26 +48,26 @@
static void log_quickload(running_machine &machine, const char *type, UINT32 start, UINT32 length, UINT32 exec, const char *exec_format)
{
- std::string tempstring;
+ std::ostringstream tempstring;
spectrum_state *state = machine.driver_data<spectrum_state>();
state->logerror("Loading %04X bytes of RAM at %04X\n", length, start);
- strcatprintf(tempstring,"Quickload type: %s Length: %d bytes\n", type, length);
- strcatprintf(tempstring,"Start: 0x%04X End: 0x%04X Exec: ", start, start + length - 1);
+ util::stream_format(tempstring, "Quickload type: %s Length: %d bytes\n", type, length);
+ util::stream_format(tempstring, "Start: 0x%04X End: 0x%04X Exec: ", start, start + length - 1);
state->logerror("Quickload loaded.\n");
if (!core_stricmp(exec_format, EXEC_NA))
- tempstring.append("N/A");
+ tempstring << "N/A";
else
{
state->logerror("Execution can resume with ");
state->logerror(exec_format, exec);
state->logerror("\n");
- strcatprintf(tempstring,exec_format, exec);
+ util::stream_format(tempstring, exec_format, exec);
}
- machine.ui().popup_time(10, "%s", tempstring.c_str());
+ machine.ui().popup_time(10, "%s", tempstring.str());
}
/*******************************************************************
diff --git a/src/mame/machine/super80.cpp b/src/mame/machine/super80.cpp
index 27b6d614e7d..e6916d683d2 100644
--- a/src/mame/machine/super80.cpp
+++ b/src/mame/machine/super80.cpp
@@ -94,7 +94,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( super80_state::timer_h )
{
UINT8 go_fast = 0;
if ( (!BIT(m_portf0, 2)) | (!BIT(m_io_config->read(), 1)) ) /* bit 2 of port F0 is low, OR user turned on config switch */
- go_fast++;
+ go_fast++; // must be 1 at boot so banking works correctly
/* code to slow down computer to 1 MHz by halting cpu on every second frame */
if (!go_fast)
@@ -203,7 +203,7 @@ WRITE8_MEMBER( super80_state::super80r_f0_w )
void super80_state::machine_reset()
{
- m_portf0 = 0xff;
+ m_portf0 = 0; // must be 0 like real machine, or banking breaks on 32-col systems
m_keylatch = 0xff;
m_key_pressed = 0;
m_palette_index = 0;
diff --git a/src/mame/machine/thomson.cpp b/src/mame/machine/thomson.cpp
index bda8cf14c80..2ff5d6b134e 100644
--- a/src/mame/machine/thomson.cpp
+++ b/src/mame/machine/thomson.cpp
@@ -377,9 +377,7 @@ DEVICE_IMAGE_LOAD_MEMBER( thomson_state, to7_cartridge )
m_thom_cart_nb_banks = 4;
else
{
- std::string errmsg;
- strprintf(errmsg,"Invalid cartridge size %u", size);
- image.seterror(IMAGE_ERROR_UNSUPPORTED, errmsg.c_str());
+ image.seterror(IMAGE_ERROR_UNSUPPORTED, string_format("Invalid cartridge size %u", size).c_str());
return IMAGE_INIT_FAIL;
}
@@ -1508,9 +1506,7 @@ DEVICE_IMAGE_LOAD_MEMBER( thomson_state, mo5_cartridge )
m_thom_cart_nb_banks = 4;
else
{
- std::string errmsg;
- strprintf(errmsg,"Invalid cartridge size %d", (int)size);
- image.seterror(IMAGE_ERROR_UNSUPPORTED, errmsg.c_str());
+ image.seterror(IMAGE_ERROR_UNSUPPORTED, string_format("Invalid cartridge size %d", size).c_str());
return IMAGE_INIT_FAIL;
}
diff --git a/src/mame/machine/trs80.cpp b/src/mame/machine/trs80.cpp
index b2f706028e5..999a086d466 100644
--- a/src/mame/machine/trs80.cpp
+++ b/src/mame/machine/trs80.cpp
@@ -420,7 +420,9 @@ WRITE8_MEMBER( trs80_state::trs80m4_e9_w )
CCh 4800
DDh 7200
EEh 9600
- FFh 19200 */
+ FFh 19200
+Note: this may be a COM5016 dual baud rate generator, or may be an equivalent circuit embedded in the gate array ASIC on the trs80 model 4
+ */
static const int baud_clock[]={ 800, 1200, 1760, 2152, 2400, 4800, 9600, 19200, 28800, 32000, 38400, 57600, 76800, 115200, 153600, 307200 };
m_ay31015->set_receiver_clock(baud_clock[data & 0x0f]);
diff --git a/src/mame/machine/wrally.cpp b/src/mame/machine/wrally.cpp
index 9ffe913e965..fd2a536e063 100644
--- a/src/mame/machine/wrally.cpp
+++ b/src/mame/machine/wrally.cpp
@@ -14,6 +14,12 @@
#include "includes/gaelcrpt.h"
#include "includes/wrally.h"
+
+void wrally_state::machine_start()
+{
+ membank("okibank")->configure_entries(0, 16, memregion("oki")->base(), 0x10000);
+}
+
/***************************************************************************
World Rally memory handlers
@@ -35,19 +41,17 @@ WRITE16_MEMBER(wrally_state::flipscreen_w)
WRITE16_MEMBER(wrally_state::okim6295_bankswitch_w)
{
- UINT8 *RAM = memregion("oki")->base();
-
if (ACCESSING_BITS_0_7){
- memcpy(&RAM[0x30000], &RAM[0x40000 + (data & 0x0f)*0x10000], 0x10000);
+ membank("okibank")->set_entry(data & 0x0f);
}
}
-WRITE16_MEMBER(wrally_state::wrally_coin_counter_w)
+WRITE16_MEMBER(wrally_state::coin_counter_w)
{
machine().bookkeeping().coin_counter_w((offset >> 3) & 0x01, data & 0x01);
}
-WRITE16_MEMBER(wrally_state::wrally_coin_lockout_w)
+WRITE16_MEMBER(wrally_state::coin_lockout_w)
{
machine().bookkeeping().coin_lockout_w((offset >> 3) & 0x01, ~data & 0x01);
}
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index edf48cd75d1..92d4cb3884f 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -4,10 +4,37044 @@
mame.lst
- List of all enabled drivers in the system. This file is parsed by
- makelist.exe, sorted, and output as C code describing the drivers.
+ This is automaticaly generated file, that should be manually updated when
+ new driver is added. From time to time we will auto update comments
+ according to meta-data from source files.
******************************************************************************/
-#../../../../../src/mame/arcade.lst
-#../../../../../src/mame/mess.lst
+//@source:1942.cpp
+1942 // 12/1984 (c) 1984
+1942a // 12/1984 (c) 1984
+1942abl // bootleg
+1942b // 12/1984 (c) 1984
+1942h // hack (Two Bit Score?)
+1942p // prototype
+1942w // 12/1984 (c) 1984 + Williams Electronics license (c) 1985
+
+//@source:1943.cpp
+1943 // 6/1987 (c) 1987 (Euro)
+1943b // bootleg
+1943bj // bootleg
+1943j // 6/1987 (c) 1987 (Japan) Rev B
+1943ja // 6/1987 (c) 1987 (Japan)
+1943kai // 6/1988 (c) 1987 (Japan)
+1943u // 6/1987 (c) 1987 (US) Rev C
+1943ua // 6/1987 (c) 1987 (US)
+
+//@source:1945kiii.cpp
+1945kiii // (c) 2000 Oriental
+flagrall // ?
+
+//@source:20pacgal.cpp
+20pacgal // (c) 2000 Ver 1.08
+20pacgalr0 // (c) 2000 Ver 1.00
+20pacgalr1 // (c) 2000 Ver 1.01
+20pacgalr2 // (c) 2000 Ver 1.02
+20pacgalr3 // (c) 2000 Ver 1.03
+20pacgalr4 // (c) 2000 Ver 1.04
+25pacman // (c) 2006 Ver 3.0
+25pacmano // (c) 2005 Ver 2.0 - Same hardware as 20pacgal
+
+//@source:24cdjuke.cpp
+24cdjuke // (c) 1988 Midcoin
+
+//@source:2mindril.cpp
+2mindril // (c) 1993 Taito
+
+//@source:30test.cpp
+30test // (c) 1997
+
+//@source:39in1.cpp
+19in1 // MAME based bootleg
+39in1 // MAME based bootleg
+48in1 // MAME based bootleg
+48in1a // MAME based bootleg
+48in1b // MAME based bootleg
+4in1a // MAME based bootleg
+4in1b // MAME based bootleg
+60in1 // MAME based bootleg
+
+//@source:3do.cpp
+3do // 3DO consoles
+3do_pal //
+3dobios //
+orbatak //
+
+//@source:3x3puzzl.cpp
+3x3puzzl // (c) 199? Ace
+3x3puzzla // (c) 199? Ace
+casanova //
+
+//@source:4004clk.cpp
+4004clk //
+
+//@source:40love.cpp
+40love // A30 (c) 1984 Taito
+fieldday // A23 (c) 1984 Taito
+undoukai // A17 (c) 1984 Taito
+
+//@source:4dpi.cpp
+sgi_ip6 // IP6: 4D/PI, R2000, 20MHz
+
+//@source:4enlinea.cpp
+4enlinea // (c) 1991 System Compumatic
+
+//@source:4enraya.cpp
+4enraya // (c) 1990 IDSA
+4enrayaa //
+unkpacg // (c) 19?? ???
+
+//@source:4roses.cpp
+4roses // (c) 1999 Unknown
+4rosesa // (c) 1999 Unknown
+rugby // (c) 1999 C.M.C.
+
+//@source:5clown.cpp
+5clown // (c) IGS 1993
+5clowna // (c) IGS 1993
+5clownsp // (c) IGS 1993
+
+//@source:68ksbc.cpp
+68ksbc //
+
+//@source:8080bw.cpp
+alieninv // Margamatics
+alieninvp2 // bootleg
+astropal // (c) 19?? Sidam
+attackfc // (c) 1979? E.G.S.
+ballbomb // TN (c) 1980 Taito
+claybust // (c) 1978 Model Racing
+cosmicm2 // Universal
+cosmicmo // Universal
+cosmo // TDS & Mints
+darthvdr // bootleg
+desterth // bootleg
+galactic // (c) 19?? Taito
+galmonst // (c) Laguna S.A.
+galxwars // (c) 1979 Universal
+galxwars2 // (c) 1979 Universal
+galxwarst // (c) 1979 Taito?
+grescue // bootleg?
+gunchamp // (c) 1980 Model Racing
+indianbt // (c) 1980 Taito
+indianbtbr // (c) 1983 Taito do Brasil
+intruder // (c) 1980 GamePlan (Taito)
+invaddlx // 852 [1980] Midway
+invader4 // bootleg
+invaderl // bootleg
+invadersem // Electromar
+invadpt2 // 852 [1980] Taito
+invadpt2br // Taito do Brasil
+invadrmr // (c) 1978 Model Racing
+invasion // Sidam
+invasiona // bootleg
+invasionb // bootleg
+invasionrz // bootleg
+invasionrza // bootleg
+invmulti // hack
+invmultim1a // hack
+invmultim2a // hack
+invmultim2c // hack
+invmultim3a // hack
+invmultip // hack
+invmultis1a // hack
+invmultis2a // hack
+invmultis3a // hack
+invmultit3d // hack
+invrvnge // Zenitone-Microsec Ltd.
+invrvngea // Zenitone-Microsec Ltd.
+invrvngeb // Zenitone-Microsec Ltd.
+invrvngedu // Zenitone-Microsec Ltd. (Dutchford license)
+invrvngegw // Zenitone-Microsec Ltd. (Game World license)
+jspecter // (c) 1979 Jatre
+jspecter2 // (c) 1979 Jatre
+laser // (c) 1980 Leisure Time Electronics Inc.
+lrescue // LR (c) 1979 Taito
+lrescuem // Model Racing bootleg set 1
+lrescuem2 // Model Racing bootleg set 2
+lupin3 // LP (c) 1980 Taito
+lupin3a // LP (c) 1980 Taito
+mlander // (c) 1980 Leisure Time Electronics
+moonbase // Taito
+moonbasea // Zeta - Nichibutsu
+ozmawars // Shin Nihon Kikaku (SNK)
+ozmawars2 // Shin Nihon Kikaku (SNK)
+polaris // PS (c) 1980 Taito
+polarisa // PS (c) 1980 Taito
+polarisbr // PS (c) 1981 Taito do Brasil
+polariso // PS (c) 1980 Taito
+rollingc // Nichibutsu
+schaser // RT Taito
+schasera // RT Taito
+schaserb // RT Taito
+schaserc // RT Taito
+schasercv // RT Taito
+schaserm // Model Racing
+searthie // bootleg
+searthin // bootleg
+searthina // bootleg
+sflush // (c)1979 Taito
+shuttlei // (c) 1979 Omori (Arcade Tv Game List - P.79, Left, 6 from bottom)
+sicv // (c) 1979 Taito
+sinvemag // Zenitone-Microsec Ltd.
+sinvzen // Zenitone-Microsec Ltd
+sisv // (c) 1978 Taito
+sisv1 // (c) 1978 Taito
+sisv2 // (c) 1978 Taito
+sisv3 // (c) 1978 Taito
+sitv // (c) 1978 Taito
+sitv1 // (c) 1978 Taito
+skylove // (c) 1979 Omori
+solfight // bootleg
+spaceat2 // (c) 1980 Zenitone-Microsec Ltd
+spaceatt // (c) 1978 Video Games GmbH
+spaceatt2k // (c) 1978 Video Games GmbH
+spaceattbp // (c) 1978 Video Games GmbH
+spacecom // bootleg
+spaceph // Zilec Games
+spacerng // bootleg
+spacewr3 // bootleg
+spacmiss // bootleg?
+spceking // (c) 1978 Leijac Corporation (Konami)
+spcewarl // (c) 1979 Leijac Corporation (Konami)
+spcewars // (c) 1978 Sanritsu
+spclaser // (c) 1980 GamePlan (Taito)
+starw // bootleg
+starw1 // bootleg
+steelwkr // (c) 1980 Taito
+superinv // bootleg
+tst_invd // Test ROM
+ultrainv //
+vortex // 852 [1980] Zilec Electronics Ltd.
+yosakdon // (c) 1979 Yosaku To Donbei
+yosakdona // (c) 1979 Yosaku To Donbei
+
+//@source:88games.cpp
+88games // GX861 (c) 1988
+hypsptsp // GX861 (c) 1988 (Japan)
+konami88 // GX861 (c) 1988
+
+//@source:a1supply.cpp
+tv21 // (c) 197? A-1 Supply
+tv21_3 // (c) 197? A-1 Supply
+tvpoker // (c) 197? A-1 Supply
+
+//@source:a2600.cpp
+a2600 // Atari 2600
+a2600p // Atari 2600 PAL
+
+//@source:a310.cpp
+a3010 // 1988 Acorn Archimedes 3010
+a3020 // 1988 Acorn Archimedes 3020
+a310 // 1988 Acorn Archimedes 310
+
+//@source:a5105.cpp
+a5105 //
+
+//@source:a51xx.cpp
+a5120 //
+a5130 //
+
+//@source:a6809.cpp
+a6809 //
+
+//@source:a7150.cpp
+a7150 //
+
+//@source:a7800.cpp
+a7800 // Atari 7800 NTSC
+a7800p // Atari 7800 PAL
+
+//@source:abc1600.cpp
+abc1600 //
+
+//@source:abc80.cpp
+abc80 //
+
+//@source:abc80x.cpp
+abc800c //
+abc800m //
+abc802 //
+abc806 //
+
+//@source:ac1.cpp
+ac1 // 1984 Amateurcomputer AC1
+ac1_32 // 1984 Amateurcomputer AC1 (32 lines)
+ac1scch // 1984 Amateurcomputer AC1 SCCH
+
+//@source:ace.cpp
+ace // [1976 Allied Leisure]
+
+//@source:acefruit.cpp
+acefruit // (c) 1982? ACE
+sidewndr // (c) 1981? ACE
+spellbnd // (c) 1981? ACE
+starspnr // (c) 1982? ACE
+
+//@source:aces1.cpp
+ac1bbclb // Big Break Club (Ace)
+ac1bbclba //
+ac1bluec // Blue Chip (Pcp)
+ac1blueca //
+ac1bluecb //
+ac1bluecc //
+ac1bluecd //
+ac1clbmn // Club Money (Ace)
+ac1clbsv // Club Sovereign (Ace)
+ac1clbxt // Club Xtra (Ace)
+ac1clbxta //
+ac1cshtw // Cash Towers (Ace)
+ac1dbldx // Double Deluxe (Pcp)
+ac1gogld // Go For Gold (Ace)
+ac1hideh // Hi De Hi Deluxe
+ac1hideha //
+ac1hotpf // Hot Profit (Ace)
+ac1nudbk // Nudge Break (Pcp)
+ac1nudbka //
+ac1nudbkb //
+ac1nudbkc //
+ac1nudbkd //
+ac1piaca // Play It Again Casino (Ace)
+ac1piacl // Play It Again Club (Ace)
+ac1piacla //
+ac1piaclb //
+ac1piaclc //
+ac1primt // Primetime (Ace)
+ac1prmcl // Premier Club (Ace)
+ac1prmcla //
+ac1prmclb //
+ac1prmclc //
+ac1pster // Pound Sterling (Ace)
+ac1pstrt // Pound Stretcher (Pcp)
+ac1roll // Roll Up (Pcp)
+ac1rolla //
+ac1rollb //
+ac1rundx // Runner Deluxe Club (Ace)
+ac1rundxa //
+ac1shid // Super Hi De Hi (Ace)
+ac1shida //
+ac1sstrk // Starstruck (Pcp)
+ac1sstrka //
+ac1sstrkb //
+ac1taklv // Take It Or Leave It (Ace)
+ac1totb // Top Of The Bill (Ace)
+ac1xpres // Xpress (Pcp)
+
+//@source:acesp.cpp
+sp_atw // Around the World (Crystal)
+sp_beau // Beau Peep (Ace)
+sp_beau2 // Further Adventures Of Beau Peep (Ace)
+sp_beau2a //
+sp_beau2b //
+sp_beau2c //
+sp_beau2d //
+sp_beau2e //
+sp_beau2f //
+sp_beaua //
+sp_beaub //
+sp_beauc //
+sp_beaud //
+sp_beaue //
+sp_beauf //
+sp_beaug //
+sp_beauh //
+sp_bigbd // Big Break Deluxe Club (Ace)
+sp_bigbda //
+sp_brkbk // Break The Bank (Ace)
+sp_brkbka //
+sp_brkbkb //
+sp_brkbkc //
+sp_brkbkd //
+sp_camel // Camelot (Ace)
+sp_camela //
+sp_camelb //
+sp_camelc //
+sp_cameld //
+sp_camele //
+sp_camelf //
+sp_camelg //
+sp_camelh //
+sp_cameli //
+sp_camelj //
+sp_camelk //
+sp_camell //
+sp_camelm //
+sp_cameln //
+sp_camelo //
+sp_carry // Carry On (PCP)
+sp_carrya //
+sp_cbowl // Cash Bowl (Ace)
+sp_cbowla //
+sp_cbowlb //
+sp_cbowlc //
+sp_cbowld //
+sp_cbowle //
+sp_cbowlf //
+sp_cbowlg //
+sp_cbowlh //
+sp_cbowli //
+sp_cbowlj //
+sp_cbowlk //
+sp_cbowll //
+sp_cbowlm //
+sp_cbowln //
+sp_cbowlo //
+sp_cbowlp //
+sp_cbowlq //
+sp_cbowlr //
+sp_cbowls //
+sp_cbowlt //
+sp_cbowlu //
+sp_clbna // Club National (Ace)
+sp_clbnaa //
+sp_coder // Code Red (Ace)
+sp_codera //
+sp_coderb //
+sp_coderc //
+sp_coderd //
+sp_codere //
+sp_coderf //
+sp_coderg //
+sp_cpal // Caesars Palace (Ace)
+sp_crime // Crime Watch (Ace)
+sp_crimea //
+sp_crimeb //
+sp_crimec //
+sp_crimed //
+sp_crimee //
+sp_crimef //
+sp_crimeg //
+sp_crimeh //
+sp_criss // Criss Cross Cash (Ace)
+sp_crissa //
+sp_crissb //
+sp_crissc //
+sp_crissd //
+sp_crisse //
+sp_crissf //
+sp_crissg //
+sp_crun // Cash Run (Crystal)
+sp_cruna //
+sp_crunb //
+sp_daytr // Daytripper (Ace)
+sp_daytra //
+sp_daytrb //
+sp_daytrc //
+sp_donky // Donkey Derby (Ace)
+sp_donkya //
+sp_donkyb //
+sp_donkyc //
+sp_donkyd //
+sp_donkye //
+sp_donkyf //
+sp_donkyg //
+sp_dyour // Double Your Money (Ace)
+sp_emmrd // Emmerdale (Ace)
+sp_emmrda //
+sp_emmrdb //
+sp_emmrdc //
+sp_emmrdd //
+sp_emmrde //
+sp_emmrdf //
+sp_emmrdg //
+sp_emmrdh //
+sp_emmrdi //
+sp_emmrdj //
+sp_emmrdk //
+sp_emmrdn //
+sp_emmrdo //
+sp_festi // Festival (Ace)
+sp_five // Fiver Fever (Crystal)
+sp_fivea //
+sp_front // Final Frontier (Bwb)
+sp_ghost // Ghost Trapper (Ace)
+sp_ghosta //
+sp_ghostb //
+sp_ghostc //
+sp_ghostd //
+sp_ghoste //
+sp_ghostf //
+sp_ghostg //
+sp_ghosth //
+sp_ghosti //
+sp_ghostj //
+sp_ghostk //
+sp_ghostl //
+sp_ghostm //
+sp_ghostn //
+sp_ghosto //
+sp_ghostp //
+sp_ghostq //
+sp_ghostr //
+sp_ghosts //
+sp_globe // Globe Trotter (Ace)
+sp_globea //
+sp_globeb //
+sp_globec //
+sp_globed //
+sp_globee //
+sp_globef //
+sp_globeg //
+sp_gnat // Grand National (Ace)
+sp_gnata //
+sp_gnatb //
+sp_gnatc //
+sp_gnatd //
+sp_gnate //
+sp_gnatf //
+sp_gnatg //
+sp_gnath //
+sp_gnati //
+sp_gnatj //
+sp_gnatk //
+sp_gnatl //
+sp_gnatm //
+sp_gnatn //
+sp_gnato //
+sp_gol // Gol (Ace)
+sp_golda // Golden Arrow Club (Ace)
+sp_goldaa //
+sp_goldm // Golden Mile (Ace)
+sp_goldm0 //
+sp_goldm1 //
+sp_goldm2 //
+sp_goldm3 //
+sp_goldma //
+sp_goldmb //
+sp_goldmc //
+sp_goldmd //
+sp_goldme //
+sp_goldmf //
+sp_goldmg //
+sp_goldmh //
+sp_goldmi //
+sp_goldmj //
+sp_goldmk //
+sp_goldml //
+sp_goldmm //
+sp_goldmn //
+sp_goldmo //
+sp_goldmp //
+sp_goldmq //
+sp_goldmr //
+sp_goldms //
+sp_goldmt //
+sp_goldmu //
+sp_goldmv //
+sp_goldmw //
+sp_goldmx //
+sp_goldmy //
+sp_goldmz //
+sp_golds // Golden Streak (Ace)
+sp_goldsa //
+sp_goldsb //
+sp_goldsc //
+sp_goldsd //
+sp_goldse //
+sp_goldsf //
+sp_goldsg //
+sp_goldsh //
+sp_goldt // Golden Touch (Golden Streak) (Ace)
+sp_gprix // Grand Prix (Ace)
+sp_gprixa //
+sp_gprixb //
+sp_gprixc //
+sp_gprixd //
+sp_gprixe //
+sp_gprixf //
+sp_gprixg //
+sp_gprixh //
+sp_here // Here We Go (Ace)
+sp_herea //
+sp_hereb //
+sp_herec //
+sp_hered //
+sp_heree //
+sp_heref //
+sp_hereg //
+sp_hideh // Hi De Hi (Ace)
+sp_hideha //
+sp_hidehb //
+sp_hidehc //
+sp_hidehd //
+sp_hidehe //
+sp_hidehf //
+sp_hidehg //
+sp_hidehh //
+sp_hidehi //
+sp_hidehj //
+sp_hidehk //
+sp_hidehl //
+sp_hidehm //
+sp_hidehn //
+sp_hideho //
+sp_hidehp //
+sp_hifly // Hi Flyer (Ace) [Mps]
+sp_hiflya //
+sp_hiflyb //
+sp_hiflyc //
+sp_hiflyd //
+sp_hiflye //
+sp_hiflyf //
+sp_hiflyg //
+sp_hiflyh //
+sp_hiflyi //
+sp_hiflyj //
+sp_hiflyk //
+sp_hiflyl //
+sp_hiflym //
+sp_hiflyn //
+sp_hiflyo //
+sp_hiflyp //
+sp_holid // Holiday Club (Ace)
+sp_holida //
+sp_juras // Jurassic Trial (Ace)
+sp_lotto // Lotto (Ace)
+sp_magmo // Magic Money (Ace)
+sp_magmoa //
+sp_magmob //
+sp_magmoc //
+sp_magmod //
+sp_megmo // Mega Money (Ace)
+sp_megmoa //
+sp_megmob //
+sp_megmoc //
+sp_megmod //
+sp_megmoe //
+sp_megmof //
+sp_megmog //
+sp_monma // Money Magic (Ace)
+sp_monmaa //
+sp_monmab //
+sp_monmac //
+sp_monmad //
+sp_monmo // Money Mountain (Ace)
+sp_monmoa //
+sp_monmob //
+sp_monmoc //
+sp_monmod //
+sp_monmoe //
+sp_monmof //
+sp_monmog //
+sp_nudex // Nudge Explosion (Ace)
+sp_nudexa //
+sp_onbox // On The Box (Ace)
+sp_onboxa //
+sp_onboxb //
+sp_onboxc //
+sp_onboxd //
+sp_onboxe //
+sp_onboxf //
+sp_onboxg //
+sp_onboxh //
+sp_onboxi //
+sp_onboxj //
+sp_onboxk //
+sp_onboxl //
+sp_onboxm //
+sp_onboxn //
+sp_openb // Open The Box (Ace)
+sp_openba //
+sp_openbb //
+sp_openbc //
+sp_openbd //
+sp_openbe //
+sp_openbf //
+sp_openbg //
+sp_openbh //
+sp_openbi //
+sp_payrs // Payrise (Ace)
+sp_payrsa //
+sp_payrsb //
+sp_payrsc //
+sp_payrsd //
+sp_payrse //
+sp_payrsf //
+sp_payrsg //
+sp_payrsh //
+sp_piste // On The Piste (Ace)
+sp_pistea //
+sp_pisteb //
+sp_pistec //
+sp_pisted //
+sp_pistee //
+sp_pistef //
+sp_pisteg //
+sp_pisteh //
+sp_pistei //
+sp_pistej //
+sp_pistek //
+sp_pistel //
+sp_pistem //
+sp_pisten //
+sp_pisteo //
+sp_pistep //
+sp_playa // Play It Again (Ace)
+sp_playaa //
+sp_playab //
+sp_playac //
+sp_playad //
+sp_playae //
+sp_playaf //
+sp_playag //
+sp_playah //
+sp_playai //
+sp_pound // Pound For Pound (Ace)
+sp_pounda //
+sp_poundb //
+sp_poundbwb //
+sp_poundbwba //
+sp_poundbwbb //
+sp_poundbwbc //
+sp_poundbwbd //
+sp_poundbwbe //
+sp_poundbwbf //
+sp_poundbwbg //
+sp_poundc //
+sp_poundd //
+sp_pounde //
+sp_poundf //
+sp_poundg //
+sp_poundh //
+sp_poundi //
+sp_poundj //
+sp_poundk //
+sp_poundl //
+sp_poundm //
+sp_poundn //
+sp_poundo //
+sp_poundp //
+sp_przna // Prize National (Ace)
+sp_prznaa //
+sp_prznab //
+sp_prznac //
+sp_prznad //
+sp_prznae //
+sp_prznaf //
+sp_prznag //
+sp_road // Road To Hell (Ace)
+sp_roof // Thru The Roof (Ace)
+sp_roofa //
+sp_skylm // Sky's The Limit Club, The (Ace)
+sp_skylma //
+sp_spell // Spellbound (Ace)
+sp_spella //
+sp_spellb //
+sp_spellc //
+sp_spelld //
+sp_spelle //
+sp_spellf //
+sp_spellg //
+sp_spelli //
+sp_spellj //
+sp_swop // Swop Shop (Ace)
+sp_swopa //
+sp_swopb //
+sp_swopc //
+sp_swopd //
+sp_swope //
+sp_swopf //
+sp_swopg //
+sp_timem // Time Machine (Ace)
+sp_timema //
+sp_timemb //
+sp_timemc //
+sp_timemd //
+sp_timeme //
+sp_timemf //
+sp_timemg //
+sp_timemh //
+sp_timemi //
+sp_timemj //
+sp_timemk //
+sp_tkpik // Take Your Pick (Ace)
+sp_tkpika //
+sp_tkpikb //
+sp_tkpikc //
+sp_tkpikd //
+sp_tkpike //
+sp_tkpikf //
+sp_tz // Twilight Zone (Ace)
+sp_tza //
+sp_tzb //
+sp_tzbwb //
+sp_tzc //
+sp_tzd //
+sp_tze //
+sp_tzf //
+sp_tzfe // Twilight Zone - Further Encounters (Ace)
+sp_tzfea //
+sp_tzfeb //
+sp_tzfec //
+sp_tzfed //
+sp_tzfee //
+sp_tzfef //
+sp_tzfeg //
+sp_tzfeh //
+sp_tzfei //
+sp_tzfej //
+sp_tzfek //
+sp_tzfel //
+sp_tzfem //
+sp_tzfen //
+sp_tzfeo //
+sp_tzfep //
+sp_tzfeq //
+sp_tzfer //
+sp_tzfes //
+sp_tzfet //
+sp_tzfeu //
+sp_tzg //
+sp_tzh //
+sp_woolp // Woolpack (Ace)
+sp_woolpa //
+sp_woolpb //
+sp_woolpc //
+sp_woolpd //
+sp_woolpe //
+sp_woolpf //
+sp_woolpg //
+sp_woolph //
+sp_woolpi //
+sp_woolpj //
+sp_woolpk //
+sp_woolpl //
+sp_woolpm //
+sp_woolpn //
+sp_woolpo //
+sp_zigzg // Zig Zag (Ace)
+sp_zigzga //
+sp_zigzgb //
+sp_zigzgc //
+sp_zigzgd //
+sp_zigzge //
+sp_zigzgf //
+sp_zigzgg //
+sp_zigzgh //
+sp_zigzgi //
+sp_zigzgj //
+sp_zigzgk //
+sp_zigzgl //
+sp_zigzgm //
+
+//@source:acommand.cpp
+acommand // (c) 1990
+
+//@source:acrnsys1.cpp
+acrnsys1 // 1979 Acorn System 1 (Microcomputer Kit)
+
+//@source:actfancr.cpp
+actfancr // (c) 1989 Data East Corporation (World)
+actfancr1 // (c) 1989 Data East Corporation (World)
+actfancrj // (c) 1989 Data East Corporation (Japan)
+triothep // (c) 1989 Data East Corporation (World)
+triothepj // (c) 1989 Data East Corporation (Japan)
+
+//@source:adam.cpp
+adam // Coleco Adam
+
+//@source:adp.cpp
+backgamn // (c) 1990
+fashiong // (c) 1997
+fashiong2 // (c) 1997
+fstation // (c) 2000
+funlddlx // (c) 1999
+quickjac // (c) 1993
+skattv // (c) 1994
+skattva // (c) 1995
+
+//@source:advision.cpp
+advision // Entex
+
+//@source:aeroboto.cpp
+aeroboto // (c) 1984 Williams
+formatz // (c) 1984 Jaleco
+
+//@source:aerofgt.cpp
+aerfboo2 // bootleg
+aerfboot // bootleg
+aerofgt // (c) 1992 Video System Co.
+aerofgtb // (c) 1992 Video System Co.
+aerofgtc // (c) 1992 Video System Co.
+karatblz // (c) 1991 Video System Co.
+karatblza // (c) 1991 Video System Co.
+karatblzbl // bootleg
+karatblzj // (c) 1991 Video System / Tecmo (Japan)
+karatblzu // (c) 1991 Video System Co. (US)
+pspikes // (c) 1991 Video System Co. (World)
+pspikesb // bootleg
+pspikesba // bootleg
+pspikesc // bootleg
+pspikesk // (c) 1991 Video System Co. (Korea)
+pspikesu // (c) 1991 Video System Co. (US)
+sonicwi // (c) 1992 Video System Co. (Japan)
+spikes91 // bootleg
+spikes91b // bootleg
+spinlbrk // (c) 1990 V-System Co. (World)
+spinlbrkj // (c) 1990 V-System Co. (Japan)
+spinlbrku // (c) 1990 V-System Co. (US)
+svolly91 // (c) 1991 Video System Co. (Japan)
+turbofrc // (c) 1991 Video System Co.
+wbbc97 // (c) 1997 Comad
+
+//@source:age_candy.cpp
+age_cand // AGE Candy Crane
+
+//@source:aim65.cpp
+aim65 // Rockwell AIM65
+
+//@source:aim65_40.cpp
+aim65_40 // Rockwell AIM65/40
+
+//@source:airbustr.cpp
+airbustr // (c) 1990 Kaneko + Namco
+airbustrb // bootleg
+airbustrj // (c) 1990 Kaneko + Namco (Japan)
+
+//@source:ajax.cpp
+ajax // GX770 (c) 1987
+ajaxj // GX770 (c) 1987 (Japan)
+typhoon // GX770 (c) 1987
+
+//@source:albazc.cpp
+hanaroku // (c) 1988 Alba
+
+//@source:albazg.cpp
+yumefuda // (c) 198? Alba
+
+//@source:aleck64.cpp
+11beat // (c) 1998 Hudson
+aleck64 // (c) 1998 Nintendo/Seta
+doncdoon // (c) 2003 Aruze (Arcade TV Game List - P.90, Right, 8 from bottom)
+hipai // (c) 2003 Seta/Aruze (Arcade TV Game List - P.92, Right, 16 from top)
+kurufev // (c) 2003 Aruze (Arcade TV Game List - P.75, Right, 1st entry on top)
+mayjin3 // (c) 2000 Seta (Arcade TV Game List - P.101, Right, 9 from top)
+mtetrisc // (c) 1998 Capcom
+srmvs // (c) 1999 Seta
+starsldr // (c) 1998 Hudson/Seta
+twrshaft // (c) 2003 Aruze
+vivdolls // (c) 1998 Visco
+
+//@source:aleisttl.cpp
+sburners // (c) 1975 Allied Leisure
+
+//@source:alesis.cpp
+hr16 //
+hr16b //
+mmt8 //
+sr16 //
+
+//@source:alg.cpp
+alg_bios //
+aplatoon // (c) 199? Nova?
+crimep2 // (c) 1993
+crimep2_11 // (c) 1993
+crimepat // (c) 1993
+crimepat_12 // (c) 1993
+crimepat_14 // (c) 1993
+fastdraw // (c) 1995
+fastdraw_130 // (c) 1995
+gallgall // (c) 1992
+gallgall_21 // (c) 1992
+lastbh // (c) 1994
+lastbh_006 // (c) 1994
+maddog // (c) 1990
+maddog_202 // (c) 1990
+maddog2 // (c) 1992
+maddog2_100 // (c) 1992
+maddog2_110 // (c) 1992
+maddog2_202 // (c) 1992
+maddoga // (c) 1990
+spacepir // (c) 1992
+spacepir_14 // (c) 1992
+wsjr // (c) 1991
+wsjr_15 // (c) 1991
+zortonbr // (c) 1993 Web Picmatic
+
+//@source:alien.cpp
+alien // (c) 2005
+
+//@source:aliens.cpp
+aliens // GX875 (c) 1990 (World)
+aliens2 // GX875 (c) 1990 (World)
+aliens3 // GX875 (c) 1990 (World)
+aliensa // GX875 (c) 1990 (Asia)
+aliensj // GX875 (c) 1990 (Japan)
+aliensj2 // GX875 (c) 1990 (Japan)
+aliensu // GX875 (c) 1990 (US)
+
+//@source:alinvade.cpp
+alinvade //
+
+//@source:allied.cpp
+allied //
+circa33 //
+disco79 //
+erosone //
+foathens //
+heartspd //
+hoedown //
+royclark //
+starshot //
+suprpick //
+takefive //
+thndbolt //
+
+//@source:alpha68k.cpp
+btlfield // Alpha-68K96II 'BT' (c) 1987
+btlfieldb // bootleg
+gangwars // Alpha-68K96V (c) 1989 Alpha Denshi Co.
+gangwarsb // bootleg
+gangwarsj // Alpha-68K96V (c) 1989 Alpha Denshi Co.
+gangwarsu // Alpha-68K96V (c) 1989 Alpha Denshi Co.
+goldmedl // Alpha-68K96II 'GM' (c) 1988 SNK
+goldmedla // Alpha-68K96II 'GM' (c) 1988 SNK
+goldmedlb // Alpha-68K96II bootleg
+jongbou // (c) 1987 SNK
+kyros // (c) 1987 World Games
+kyrosj // (c) 1986 Alpha Denshi Co.
+paddlema // Alpha-68K96I 'PM' (c) 1988 SNK
+sbasebal // Alpha-68K96V (c) 1989 SNK of America licensed from Alpha
+sbasebalj // Alpha-68K96V
+skyadvnt // Alpha-68K96V 'SA' (c) 1989 Alpha Denshi Co.
+skyadvntj // Alpha-68K96V 'SA' (c) 1989 Alpha Denshi Co.
+skyadvntu // Alpha-68K96V 'SA' (c) 1989 SNK of America licensed from Alpha
+skysoldr // Alpha-68K96II 'SS' (c) 1988 SNK (Romstar with dip switch)
+skysoldrbl // bootleg
+sstingry // (c) 1986 Alpha Denshi Co.
+timesold // Alpha-68K96II 'BT' (c) 1987 SNK / Romstar
+timesold1 // Alpha-68K96II 'BT' (c) 1987
+tnextspc // A8003 'NS' (c) 1989 - MASKROM
+tnextspc2 // A8003 'NS' (c) 1989 - EPROMs
+tnextspcj // A8003 'NS' (c) 1989 - Japan
+
+//@source:alphasma.cpp
+asma2k //
+asmapro //
+
+//@source:alphatro.cpp
+alphatro //
+
+//@source:altair.cpp
+al8800bt //
+
+//@source:alto2.cpp
+alto2 //
+
+//@source:altos5.cpp
+altos5 //
+
+//@source:alvg.cpp
+agsoccer //
+dinoeggs //
+mystcast //
+mystcasta //
+pstlpkr //
+punchy //
+usafootb //
+wrldtour //
+wrldtour2 //
+
+//@source:amaticmg.cpp
+am_mg24 // (c) 2000 Amatic
+am_mg3 // (c) 2000 Amatic
+am_mg31i // (c) Amatic
+am_mg33i // (c) Amatic
+am_mg34i // (c) Amatic
+am_mg35i // (c) Amatic
+am_mg3a // (c) 2000 Amatic
+suprstar // (c) 1996 Amatic
+
+//@source:amazonlf.cpp
+crospuzl //
+
+//@source:ambush.cpp
+ambush // (c) 1983
+ambushh // (c) 1983
+ambushj // (c) 1983 Nippon Amuse license
+ambushv // (c) 1983 Volt Electronics license
+
+//@source:amerihok.cpp
+amerihok //
+
+//@source:amico2k.cpp
+amico2k //
+
+//@source:amiga.cpp
+a1000 // Commodore Amiga 1000
+a1000n //
+a1200 // Commodore Amiga 1200
+a1200n //
+a2000 // Commodore Amiga 2000
+a2000n //
+a3000 // Commodore Amiga 3000
+a3000n //
+a4000 // Commodore Amiga 4000/040
+a400030 // Commodore Amiga 4000/030
+a400030n //
+a4000n //
+a4000t // Commodore Amiga 4000T
+a4000tn //
+a500 // Commodore Amiga 500
+a500n //
+a500p // Commodore Amiga 500 Plus
+a500pn //
+a600 // Commodore Amiga 600
+a600n //
+cd32 // Commodore Amiga CD32
+cd32n //
+cdtv // Commodore CDTV
+cdtvn //
+
+//@source:ampoker2.cpp
+ampkr228 // 1990 bootleg
+ampkr2b1 // 1990 bootleg
+ampkr2b2 // 1990 bootleg
+ampkr2b3 // 1994 bootleg
+ampkr2b4 // 1994 bootleg
+ampkr95 // 1995 bootleg
+ampoker2 // (c) 1990 Novomatic
+piccolop // (c) 1990 Admiral - Novomatic
+pkrdewin // 1990 bootleg
+rabbitpk // 1990 bootleg
+sigma2k // (c) 2000 Sigma
+sigmapkr // (c) 1995 Sigma
+videomat // 1990 bootleg
+
+//@source:ampro.cpp
+ampro //
+
+//@source:amspdwy.cpp
+amspdwy // no copyright notice, but (c) 1987 Enerdyne Technologies, Inc.
+amspdwya // no copyright notice, but (c) 1987 Enerdyne Technologies, Inc.
+
+//@source:amstr_pc.cpp
+pc20 // 1988 Amstrad PC20
+pc200 // 1988 Sinclair PC200
+pc2086 //
+pc3086 //
+ppc512 // 1987 Amstrad PPC512
+ppc640 // 1987 Amstrad PPC640
+
+//@source:amstrad.cpp
+al520ex // Patisonic Aleste 520EX (1993)
+cpc464 // Amstrad (Schneider in Germany) 1984
+cpc464p // Amstrad CPC464 Plus - 1990
+cpc6128 // Amstrad (Schneider in Germany) 1985
+cpc6128f // Amstrad (Schneider in Germany) 1985 (AZERTY)
+cpc6128p // Amstrad CPC6128 Plus - 1990
+cpc6128s // Amstrad (Schneider in Germany) 1985
+cpc664 // Amstrad (Schneider in Germany) 1985
+gx4000 // Amstrad GX4000 - 1990
+kccomp // VEB KC compact
+
+//@source:amusco.cpp
+amusco // 1987, Amusco.
+
+//@source:amust.cpp
+amust //
+
+//@source:angelkds.cpp
+angelkds // 833-6599 (c) 1988 Sega / Nasco?
+spcpostn // (c) 1986 Sega / Nasco"
+
+//@source:apc.cpp
+apc //
+
+//@source:apexc.cpp
+apexc // 1955(?) APEXC: All-Purpose Electronic X-ray Computer
+
+//@source:apf.cpp
+apfimag //
+apfm1000 //
+
+//@source:apogee.cpp
+apogee //
+
+//@source:apollo.cpp
+dn3000 // Apollo Workstation DN3000 15" Color (1988)
+dn3000_19i // Apollo Workstation DN3000 19" Monochrome (1987)
+dn3500 // Apollo Workstation DN3500 15" Color (1989)
+dn3500_19i // Apollo Workstation DN3500 19" Monochrome (1989)
+dn5500 // Apollo Workstation DN5500 15" Color (1991)
+dn5500_19i // Apollo Workstation DN5500 19" Monochrome (1991)
+dsp3000 // Apollo Server DSP3000 (1987)
+dsp3500 // Apollo Server DSP3500 (1989)
+dsp5500 // Apollo Server DSP5500 (1991)
+
+//@source:apple1.cpp
+apple1 // Jul 1976 Apple 1
+
+//@source:apple2.cpp
+ace100 // ??? 1982 Franklin Ace 100
+agat7 // Agat-7
+agat9 // Agat-9
+am64 // 1985 ASEM AM 64 (motherboard is marked AM-100 but it boots as "AM 64")
+apple2 // Apr 1977 Apple ][
+apple2jp // ??? ???? Apple ][j+
+apple2p // Jun 1979 Apple ][+
+elppa // 198? Victor do Brasil Elppa II+
+ivelultr // Ivasim Ivel Ultra
+maxxi // 1982 Polymax Maxxi
+microeng // 1982 Micro Engenho (Brazilian Apple2 clone) - Spectrum/SCOPUS
+prav82 // Pravetz 82
+prav8m // Pravetz 8M
+space84 // 1985 IBS/ComputerTechnik Space 84
+uniap2en // 1982 Unitron AP II (in English)
+uniap2pt // 1982 Unitron AP II (in Brazilian Portuguese)
+uniap2ti // 1982 Unitron AP II+ (Teclado Inteligente)
+
+//@source:apple2e.cpp
+apple2c // Apr 1984 Apple //c
+apple2c0 // ??? 1985 Apple //c (3.5 ROM)
+apple2c3 // Sep 1986 Apple //c (Original Mem. Exp.)
+apple2c4 // ??? 198? Apple //c (rev 4)
+apple2cp // Sep 1988 Apple //c+
+apple2e // Jan 1983 Apple //e
+apple2ee // Mar 1985 Apple //e Enhanced
+apple2eeuk // Mar 1985 Apple //e Enhanced (UK)
+apple2ep // Jan 1987 Apple //e Platinum
+apple2euk // Jan 1983 Apple //e (UK)
+las128e2 // ??? Laser 128 EX2
+las128ex // ??? 1988 Laser 128 EX
+laser128 // ??? 1987 Laser 128
+mprof3 // Microprofessor III
+prav8c // Pravetz 8C
+tk3000 // Microdigital TK3000
+
+//@source:apple2gs.cpp
+apple2gs // Aug 1989 Apple IIgs ROM03
+apple2gsr0 // Sep 1986 Apple IIgs ROM00
+apple2gsr0p // June 19, 1986 Apple IIgs ROM00 prototype
+apple2gsr0p2 // March 10, 1986 Apple IIgs ROM00 prototype
+apple2gsr1 // Sep 1987 Apple IIgs ROM01
+apple2gsr3lp // ??? 1989 Apple IIgs ROM03 late? prototype
+apple2gsr3p // ??? 198? Apple IIgs ROM03 prototype
+
+//@source:apple3.cpp
+apple3 // May 1980 Apple ///
+
+//@source:applix.cpp
+applix //
+
+//@source:appoooh.cpp
+appoooh // (c) 1984 Sega, made by Sanritsu
+robowres // (c) 1986 Sega
+robowresb // bootleg
+
+//@source:apricot.cpp
+apricot // 1983 ACT
+apricotxi // 1984 ACT
+
+//@source:apricotf.cpp
+f1 //
+f10 //
+f1e //
+f2 //
+
+//@source:apricotp.cpp
+fp //
+
+//@source:aquarium.cpp
+aquarium // (c) 1996 Excellent System
+aquariumj // (c) 1996 Excellent System
+
+//@source:aquarius.cpp
+aquarius // 1983 Aquarius
+
+//@source:arabian.cpp
+arabian // TVG13 (c) 1983 Sun Electronics
+arabiana // 136019 (c) 1983 Atari
+
+//@source:arachnid.cpp
+arac6000 //
+
+//@source:arcadecl.cpp
+arcadecl // (proto) (c) 1992
+sparkz // (proto) (c) 1992
+
+//@source:arcadia.cpp
+advsnha // Advision Home Arcade
+arcadia // Emerson Arcadia 2001
+bndarc // Bandai Arcadia
+dynavisn // Dynavision
+ekusera // Ekusera
+hanihac // Hanimex Home Arcade Centre
+hmg2650 // Hanimex HMG-2650
+intervsn // Intervision 2001
+intmpt03 // Intelligent Game MPT-03
+itmcmtp3 // ITMC MPT-03
+ixl2000 // Intercord XL 2000 System
+leonardo // Leonardo
+lvision // Leisure-Vision
+mratlus // Mr. Altus Tele Brain
+orbituvi // UVI Compu-Game
+ormatu // Ormatu 2001
+plldium // Palladium Video-Computer-Game
+polyvcg // Polybrain Video Computer Game
+poppympt // Poppy MPT-03 Tele Computer Spiel
+prestmpt // Prestige Video Computer Game MPT-03
+rowtrn2k // Rowtron 2000
+sheenhvc // Sheen Home Video Centre 2001
+soundic // Soundic MPT-03
+tbbympt3 // Tobby MPT-03
+tccosmos // Tele-Computer Cosmos
+telefevr // Tchibo Tele-Fever
+tempestm // Tempest MPT-03
+trakcvg // Trakton Computer Video Game
+tryomvgc // Tryom Video Game Center
+tunixha // Tunix Home Arcade
+tvg2000 // Schmid TVG 2000
+vdmaster // Video Master
+
+//@source:argo.cpp
+argo //
+
+//@source:argox.cpp
+os214 //
+
+//@source:argus.cpp
+argus // (c) 1986 Jaleco
+butasan // (c) 1987 Jaleco - english subtitled
+butasanj // (c) 1987 Jaleco
+valtric // (c) 1986 Jaleco
+
+//@source:aristmk4.cpp
+3bagflnz // (c) 1994
+3bagflvt // (c) 1994
+86lions // (c) 1985?
+arcwins // (c) 1996
+autmoon // (c) 1999
+blkrhino // (c) 1996
+cgold // (c) 1986 Ainsworth Nominees P.L.
+cgold2 // (c) 1995
+clkwise // (c) 1986 Ainsworth Nominees P.L.
+coralr2 // (c) 2002
+eforest // (c) 1994
+eforesta // (c) 1995
+eforestb // (c) 1996
+ffortune // (c) 1998
+fhunter // (c) 1996
+fhuntera // (c) 1996
+fvrpitch // (c) 1986 Ainsworth Nominees P.L.
+gldnpkr // (c) 1986 Ainsworth Nominees P.L.
+goldenc // (c) 1996
+gtroppo // (c) 1986 Ainsworth Nominees P.L.
+gunnrose // (c) 1993
+kgbird // (c) 1996
+kgbirda // (c) 1996
+phantomp // (c) 1998
+swtht2nz // (c) 1998
+topgear // (c) 1996
+wildone // (c) 1997
+wtigernz // (c) 1996
+
+//@source:aristmk5.cpp
+adonis // (c) 1998
+adonisa // (c) 1998
+adonise // (c) 2001
+aristmk5 // (c) 1995, USA platform set chips
+bootsctn // (c) 1999
+bumblbug // (c) 1997
+cashcham // (c) 1996
+chariotc // (c) 1998
+chickena // (c) 1998
+cuckoo // (c) 2000
+dmdtouch // (c) 1997
+dolphntr // (c) 1996
+dolphtra // (c) 1996
+dolphtre // (c) 1996
+enchfore // (c) 1997
+enchfrst // (c) 1995
+geishanz // (c) 2001
+goldprmd // (c) 1997
+goldpyra // (c) 1997
+indiandr // (c) 1998
+koalamnt // (c) 2001
+magicmsk // (c) 2000
+magicmska // (c) 2000
+margmgc // (c) 2000
+marmagic // (c) 2000
+mgarden // (c) 1997
+minemine // (c) 1996
+partygrs // (c) 2001
+pengpays // (c) 1997
+prtygras // (c) 2001
+qotn // (c) 1997
+qotna // (c) 1997
+reelrock // (c) 1998
+swheart2 // (c) 1998
+swthrt2v // (c) 1995
+thgamblr // (c) 1998
+trpdlght // (c) 1997
+wldcougr // (c) 1997
+wtiger // (c) 1999
+
+//@source:aristmk6.cpp
+50lions // (c) 2002
+50lionsa // (c) 2003
+antcleo // (c) 2004
+aristmk6 //
+choysun // (c) 2003
+crystals // (c) 2003
+indianmm // (c) 2003
+thaiprin // (c) 2003
+whalecsh // (c) 2002
+wheregld // (c) 2004
+wildways // (c) 2003
+
+//@source:arkanoid.cpp
+ark1ball // bootleg
+arkangc // bootleg
+arkangc2 // bootleg
+arkanoid // A75 (c) 1986 Taito Corporation Japan (World)
+arkanoidj // A75 (c) 1986 Taito Corporation (Japan)
+arkanoidja // A75 (c) 1986 Taito Corporation (Japan)
+arkanoidjb // A75 (c) 1986 Taito Corporation (Japan)
+arkanoidjbl // bootleg
+arkanoidjbl2 // bootleg (Beta)
+arkanoidu // A75 (c) 1986 Taito America Corporation + Romstar license (US)
+arkanoiduo // A75 (c) 1986 Taito America Corporation + Romstar license (US)
+arkatayt // bootleg
+arkatour // ??? (c) 1987 Taito America Corporation + Romstar license (US)
+arkbloc2 // bootleg
+arkbloc3 // bootleg
+arkblock // bootleg
+arkgcbl // bootleg
+arkgcbla // bootleg
+arktayt2 // bootleg
+block2 // bootleg
+brixian // (c) 1993 Cheil Computer System
+hexa // D. R. Korea
+hexaa //
+paddle2 // bootleg
+tetrsark // ??? (c) D.R.Korea
+
+//@source:armedf.cpp
+armedf // (c) 1988
+armedff // (c) 1988 Fillmore license
+bigfghtr // (c) 1989
+cclimbr2 // (c) 1988 (Japan)
+cclimbr2a // (c) 1988 (Japan)
+kozure // (c) 1987 (Japan)
+legion // (c) 1986
+legionj // (c) 1986
+legionjb // (c) 1986
+skyrobo // (c) 1989
+terraf // (c) 1987
+terrafb // (c) 1987
+terrafj // (c) 1987 Nichibutsu Japan
+terrafjb // (c) 1987
+terrafu // (c) 1987 Nichibutsu USA
+
+//@source:arsystems.cpp
+ar_airh // (c) 1988
+ar_airh2 // (c) 1988
+ar_argh //
+ar_bios //
+ar_blast // (c) 1988
+ar_bowl // (c) 1988
+ar_dart // (c) 1987
+ar_dart2 // (c) 1987
+ar_dlta // (c) 198?
+ar_fast // (c) 1988 v2.8
+ar_fasta // (c) 1988 v2.7
+ar_ldrb // (c) 1988 v2.5
+ar_ldrba // (c) 1988 v2.4
+ar_ldrbb // (c) 1988
+ar_ninj // (c) 1987
+ar_ninj2 // (c) 1987
+ar_pm // (c) 198?
+ar_rdwr // (c) 1988
+ar_sdwr // (c) 1988
+ar_sdwr2 // (c) 1988
+ar_socc // (c) 1989
+ar_spot // (c) 1990
+ar_sprg // (c) 1987
+ar_xeon // (c) 1988
+
+//@source:artmagic.cpp
+cheesech // (c) 1994
+shtstar // (c) 1994 Nova
+stonebal // (c) 1994
+stonebal2 // (c) 1994
+ultennis // (c) 1993
+ultennisj // (c) 1993
+
+//@source:ashnojoe.cpp
+ashnojoe // ??? (c) 1990 Wave / Taito
+scessjoe // ??? (c) 1990 Wave / Taito
+
+//@source:asst128.cpp
+asst128 //
+
+//@source:asterix.cpp
+asterix // GX068 (c) 1992 (World)
+asterixaad // GX068 (c) 1992 (Asia)
+asterixeaa // GX068 (c) 1992 (World)
+asterixeac // GX068 (c) 1992 (World)
+asterixj // GX068 (c) 1992 (Japan)
+
+//@source:asteroid.cpp
+aerolitos // Rodmar Elec. bootleg
+astdelux // 0351xx (c) 1980
+astdelux1 // 0351xx (c) 1980
+astdelux2 // 0351xx (c) 1980
+asterock // Sidam bootleg (c) 1979
+asterockv // Videotron bootleg(c) 1979
+asteroid // 035127-035145 (c) 1979
+asteroid1 // 035127-035145 no copyright notice
+asteroid2 // 035127-035145 (c) 1979
+asteroidb // (bootleg)
+hyperspc // Rumiano bootleg (c) 1979
+llander // 0345xx no copyright notice
+llander1 // 0345xx no copyright notice
+llandert // (test) no copyright notice
+meteorho // Hoei? bootleg (c) 1980
+meteorts // VCC bootleg (c) 1979
+spcrocks // J.Estevez (c) 1981
+
+//@source:astinvad.cpp
+astinvad // (c) 1980 Stern
+kamikaze // (c) 1979 Leijac Corporation
+kosmokil // bootleg
+spaceint // [1980] Shoei
+spaceintj // [1980] Shoei
+spcking2 // (c) 1979 Konami
+
+//@source:astrafr.cpp
+as_acp // unknown ACP (Astra)
+as_bbr // Bullion Bars (Astra)
+as_bbra //
+as_bbrb //
+as_bbrc //
+as_bbrd //
+as_bbre //
+as_bbrf //
+as_big10 // Big 10 (Astra)
+as_big10a //
+as_big10b //
+as_big10c //
+as_big10d //
+as_big15 // Big 16 (Astra)
+as_bigcs // Big Cash (Astra)
+as_bigcsa //
+as_bigtm // Big Time (Astra)
+as_celeb // Celebration (Astra)
+as_celeba //
+as_celebb //
+as_colmn // Colour of Money (Astra)
+as_colmna //
+as_colmnb //
+as_colmnc //
+as_colmnd //
+as_cshah // Cash Ahoi (Lowen)
+as_cshcs // Cash Castle (Lowen)
+as_csv //
+as_dblcs // Double Cash (Astra)
+as_dblcsa //
+as_dblcsb //
+as_dblcsc //
+as_dblcsd //
+as_dblcse //
+as_dblcsf //
+as_dblcsg //
+as_dblcsh //
+as_djp // Double Jackpot (Astra)
+as_djpa //
+as_djpb //
+as_fortn // Fortune Teller (Astra)
+as_gof // Game Of Fortune (Lowen)
+as_hc // Hokey Cokey (Astra)
+as_hca //
+as_hcb //
+as_hcc //
+as_hcd //
+as_hog // Hearts Of Gold (Astra)
+as_hr // Hot Reel (Astra)
+as_hxr // Hot Cross Run (Astra)
+as_jackb // Jackpot Bell
+as_jjive // Jungle Jive
+as_jjivea //
+as_jjiveb //
+as_jjivec //
+as_jjived //
+as_jjivee //
+as_jjivef //
+as_jjiveg //
+as_jmpj // Jumping Jackpots
+as_jmpja //
+as_jolly // Jolly Roger
+as_jpx // Jackpot X
+as_jpxa //
+as_jpxb //
+as_kingc // King Cash
+as_kingca //
+as_koc // King Of Clubs
+as_koca //
+as_lbt // Little Big 10
+as_lbta //
+as_ldl //
+as_ldla //
+as_ldlb //
+as_ldlc //
+as_ldld //
+as_ldle //
+as_letsp // Let's Party (Astra)
+as_mp //
+as_mp2 //
+as_otr //
+as_otra //
+as_party // Party Time (Astra)
+as_partya //
+as_partyb //
+as_partyc //
+as_partyd //
+as_partye //
+as_partyf //
+as_pb //
+as_pharg //
+as_pharga //
+as_phargb //
+as_phargc //
+as_phargd //
+as_pharge //
+as_pia //
+as_piaa //
+as_piab //
+as_ptf //
+as_ptfa //
+as_ptfb //
+as_ptfc //
+as_rab //
+as_raba //
+as_rabb //
+as_rabc //
+as_rbg //
+as_rbga //
+as_rbgb //
+as_rbgc //
+as_rbgd //
+as_rbge //
+as_rbglo //
+as_rox //
+as_rtr //
+as_rtra //
+as_rtrb //
+as_rtrc //
+as_rtrd //
+as_rtre //
+as_rtrf //
+as_rtrg //
+as_rtrh //
+as_siu //
+as_siua //
+as_sld //
+as_slda //
+as_sldb //
+as_sldc //
+as_sldd //
+as_slde //
+as_sltcl //
+as_srb // Super Ring a Bell (Astra)
+as_srba //
+as_srbb //
+as_srbc //
+as_srbd //
+as_srbe //
+as_stp //
+as_stpa //
+as_stpb //
+as_tbl //
+as_tbla //
+as_tblb //
+as_tblc //
+as_tbld //
+as_tble //
+as_tblf //
+as_td //
+as_tem //
+as_tema //
+as_topsl // Top Slot (Astra)
+as_topsla //
+as_topslb //
+as_topslc //
+as_topsld //
+as_twp //
+as_twpa //
+as_vcv //
+as_vcva //
+as_vcvb //
+as_vcvc //
+as_vcvd //
+as_vcve //
+as_vn //
+as_ws //
+as_ww //
+as_wwa //
+as_wwb //
+as_wwc //
+as_wwd //
+as_wwe //
+
+//@source:astrcorp.cpp
+astoneag // (c) 2004? Astro Corp.
+dinodino // (c) 2003? Astro Corp.
+hacher // (c) 2005? bootleg (Gametron)
+showhanc // (c) 2000 Astro Corp.
+showhand // (c) 2000 Astro Corp.
+skilldrp // (c) 2002 Astro Corp.
+speeddrp // (c) 2003 Astro Corp.
+westvent // (c) 2007? Astro Corp.
+winbingo // (c) 2005? Astro Corp.
+winbingoa // (c) 2005? Astro Corp.
+zoo // (c) 2005? Astro Corp.
+
+//@source:astrocde.cpp
+demndrgn // (c) 1982 Bally Midway
+ebases // (c) 1980
+gorf // (c) 1981
+gorfpgm1 // (c) 1981
+gorfpgm1g // (c) 1981
+profpac // (c) 1983 Bally Midway
+robby // (c) 1981 Bally Midway
+seawolf2 // (c) 1978
+spacezap // (c) 1980
+tenpindx // (c) 1983 Bally Midway
+wow // (c) 1980
+wowg // (c) 1980
+
+//@source:astrof.cpp
+abattle // Sidam
+abattle2 // Sidam
+acombat // bootleg
+acombat3 // bootleg
+acombato // bootleg
+afire // Rene Pierre
+astrof // (c) [1980?]
+astrof2 // (c) [1980?]
+astrof3 // (c) [1980?]
+spfghmk2 // (c) [1979] Data East Corporation
+spfghmk22 // (c) [1979] Data East Corporation
+sstarbtl // bootleg
+tomahawk // (c) 1980 Data East, Inc.
+tomahawk1 // (c) 1980 Data East, Inc.
+
+//@source:astrohome.cpp
+astrocde // Bally Professional Arcade / Astrocade
+astrocdl // Bally Home Library Computer
+astrocdw // Bally Computer System (white case)
+
+//@source:astropc.cpp
+blackbd //
+blackbda //
+blackbdb //
+dslayrr //
+dslayrra //
+hawaii //
+oligam //
+rasce //
+
+//@source:asuka.cpp
+asuka // B68 (c) 1988 Taito Corporation (World)
+asukaj // B68 (c) 1988 Taito Corporation (Japan)
+bonzeadv // B41 (c) 1988 Taito Corporation Japan (World)
+bonzeadvo // B41 (c) 1988 Taito Corporation Japan (World)
+bonzeadvp //
+bonzeadvu // B41 (c) 1988 Taito America Corporation (US)
+cadash // C21 (c) 1989 Taito Corporation Japan
+cadashf // C21 (c) 1989 Taito Corporation Japan
+cadashg // C21 (c) 1989 Taito Corporation Japan
+cadashi // C21 (c) 1989 Taito Corporation Japan
+cadashj // C21 (c) 1989 Taito Corporation
+cadashj1 // C21 (c) 1989 Taito Corporation
+cadashjo // C21 (c) 1989 Taito Corporation
+cadashp // prototype
+cadashu // C21 (c) 1989 Taito America Corporation
+earthjkr // (c) 1993 Visco (Japan)
+earthjkrp //
+eto // (c) 1994 Visco (Japan)
+galmedes // (c) 1992 Visco (Japan)
+jigkmgri // B41 (c) 1988 Taito Corporation (Japan)
+mofflott // C17 (c) 1989 Taito Corporation (Japan)
+
+//@source:at.cpp
+aplannb // 1990 Apricot LANstation (Novell Remote Boot)
+aplanst // 1990 Apricot LANstation (Krypton Motherboard)
+aplsbon // 1992 Apricot LS Pro (Bonsai Motherboard)
+aplscar // 1992 Apricot LS Pro (Caracal Motherboard)
+aprfte //
+aprpand //
+apvxft // 1989 Apricot VX FT server
+apxena1 // 1993 Apricot XEN PC (A1 Motherboard)
+apxeni // 1987 Apricot XEN-i 386 (Leopard Motherboard)
+apxenls3 // 1991 Apricot XEN-LS (Venus IV Motherboard)
+apxenp2 // 1993 Apricot XEN PC (P2 Motherboard)
+apxlsam // 1993 Apricot XEN-LS II (Samurai Motherboard)
+at // 1987 AMI Bios and Diagnostics
+at386 // 19?? IBM AT 386
+at486 // 19?? IBM AT 486
+atvga // 19?? AT VGA
+c386sx16 // 1990 Commodore 386SX-16
+cmdpc30 //
+ct386sx //
+ec1842 //
+ec1849 //
+ficpio2 // 1995 FIC 486-PIO-2
+ftsserv // 1991 Apricot FTs (Scorpion)
+ibm5162 // 1986 IBM XT 5162 (XT w/80286)
+ibm5170 // 1984 IBM PC/AT 5170, original 6 MHz model
+ibm5170a // 1985 IBM PC/AT 5170, enhanced 8 MHz model
+ibmps1es // IBM PS/1 (Spanish)
+k286i // 1985 Kaypro 286i
+megapc // 1992 Amstrad plc
+megapcpl //
+megapcpla // AMI BIOS version with Winbond WINBUS chipset
+neat // 1989 New Enhanced AT chipset, AMI BIOS
+pc2386 //
+qi600 // 1988 Apricot Qi 600 (Neptune Motherboard
+qi900 // 1990 Apricot Qi 900 (Scorpion Motherboard)
+t2000sx //
+xb42639 // 1989 Apricot XEN-S (Venus I Motherboard 286) (Bios:3.10.17i)
+xb42639a // 1990 Apricot XEN-S (Venus II Motherboard 286) (Bios:1.02.17)
+xb42663 // 1988 Apricot Qi 300 (Rev D,E & F Motherboard)
+xb42664 // 1989 Apricot XEN-S (Venus I Motherboard 386) (Bios:3.10.17i)
+xb42664a // 1990 Apricot XEN-S (Venus II Motherboard 386) (Bios:1.02.17)
+
+//@source:atari_s1.cpp
+aavenger //
+atarians //
+midearth //
+spcrider //
+time2000 //
+
+//@source:atari_s2.cpp
+fourx4 //
+hercules //
+roadrunr //
+supermap //
+
+//@source:atari400.cpp
+a1200xl // 1982 Atari 1200 XL
+a130xe // 1986 Atari 130 XE
+a400 // 1979 Atari 400
+a400pal // 1979 Atari 400 PAL
+a5200 // Atari 5200
+a600xl // 1983 Atari 600 XL
+a65xe // 1986 Atari 65 XE (XL Extended)
+a65xea // 1986? Atari 65 XE Arabic
+a800 // 1979 Atari 800
+a800pal // 1979 Atari 800 PAL
+a800xe // 1986 Atari 800 XE
+a800xl // 1983 Atari 800 XL
+a800xlp // 1983 Atari 800 XL (PAL)
+xegs // 1987 Atari XE Game System
+
+//@source:atarifb.cpp
+abaseb // 034711-034738 1979/06 [6502]
+abaseb2 // 034711-034738 1979/06 [6502]
+atarifb // 033xxx 1978/10 [6502]
+atarifb1 // 033xxx 1978/10 [6502]
+atarifb2 // 035330-035350 ??? [6502]
+atarifb4 // 034754 1979/04 [6502]
+soccer // 035222-035260 1980/04 [6502]
+
+//@source:atarig1.cpp
+hydra // 136079 (c) 1990
+hydrap // (proto) (c) 1990
+hydrap2 // (proto) (c) 1990
+pitfight // 136081 (c) 1990
+pitfight3 // 136081 (c) 1990
+pitfight4 // 136081 (c) 1990
+pitfight5 // 136081 (c) 1990
+pitfight6 // 136081 (c) 1990
+pitfight7 // 136081 (c) 1990
+pitfightb // bootleg
+pitfightj // Japan
+
+//@source:atarig42.cpp
+guardian // 136092 (c) 1992
+roadriot // 136089 (c) 1991
+roadrioto // 136089 (c) 1991
+
+//@source:atarigt.cpp
+primrage // 136102 (c) 1994
+primrage20 // 136102 (c) 1994
+tmek // 136100 (c) 1994
+tmek20 // 136100 (c) 1994
+tmek44 // 136100 (c) 1994
+tmek45 // 136100 (c) 1994
+tmek51p // 136100 (c) 1994
+
+//@source:atarigx2.cpp
+motofren // 136094 (c) 1992
+motofrenft // 136094 (c) 1992
+motofrenmd // 136094 (c) 1992
+motofrenmf // 136094 (c) 1992
+rrreveng // ?? (c) 1993
+rrrevenga // ?? (c) 1993
+rrrevengb // ?? (c) 1993
+spclords // 136095 (c) 1992
+spclordsa // 136095 (c) 1992
+spclordsb // 136095 (c) 1992
+spclordsg // 136095 (c) 1992
+
+//@source:atarist.cpp
+falcon30 // Atari Falcon030
+falcon40 // Atari Falcon040 (prototype)
+megast // Atari Mega ST
+megast_de //
+megast_fr //
+megast_se //
+megast_sg //
+megast_uk //
+megaste // Atari Mega STe
+megaste_de //
+megaste_es //
+megaste_fr //
+megaste_it //
+megaste_se //
+megaste_uk //
+st // Atari ST
+st_de //
+st_es //
+st_fr //
+st_nl //
+st_se //
+st_sg //
+st_uk //
+ste // Atari STe
+ste_de //
+ste_es //
+ste_fr //
+ste_it //
+ste_se //
+ste_sg //
+ste_uk //
+tt030 // Atari TT030
+tt030_de //
+tt030_fr //
+tt030_pl //
+tt030_uk //
+
+//@source:atarisy1.cpp
+atarisy1 // 136033 (c) 1984
+indytemp // 136036 (c) 1985
+indytemp2 // 136036 (c) 1985
+indytemp3 // 136036 (c) 1985
+indytemp4 // 136036 (c) 1985
+indytempc // 136036 (c) 1985
+indytempd // 136036 (c) 1985
+marble // 136033 (c) 1984
+marble2 // 136033 (c) 1984
+marble3 // 136033 (c) 1984
+marble4 // 136033 (c) 1984
+marble5 // 136033 (c) 1984 (LSI Cartridge)
+peterpak // 136028 (c) 1984
+roadblst // 136048 (c) 1986, 1987
+roadblst1 // 136048 (c) 1986, 1987
+roadblst2 // 136048 (c) 1986, 1987
+roadblst3 // 136048 (c) 1986, 1987
+roadblstc // 136048 (c) 1986, 1987
+roadblstc1 // 136048 (c) 1986, 1987
+roadblstcg // 136048 (c) 1986, 1987
+roadblstg // 136048 (c) 1986, 1987
+roadblstg1 // 136048 (c) 1986, 1987
+roadblstg2 // 136048 (c) 1986, 1987
+roadblstgu // 136048 (c) 1986, 1987
+roadrunn // 136040 (c) 1985
+roadrunn1 // 136040 (c) 1985
+roadrunn2 // 136040 (c) 1985
+
+//@source:atarisy2.cpp
+720 // 136047 (c) 1986
+720g // 136047 (c) 1986
+720gr1 // 136047 (c) 1986
+720r1 // 136047 (c) 1986
+720r2 // 136047 (c) 1986
+720r3 // 136047 (c) 1986
+apb // 136051 (c) 1987
+apb1 // 136051 (c) 1987
+apb2 // 136051 (c) 1987
+apb3 // 136051 (c) 1987
+apb4 // 136051 (c) 1987
+apb5 // 136051 (c) 1987
+apb6 // 136051 (c) 1987
+apbf // 136051 (c) 1987
+apbg // 136051 (c) 1987
+csprint // 136045 (c) 1986
+csprint1 // 136045 (c) 1986
+csprint2 // 136045 (c) 1986
+csprintf // 136045 (c) 1986
+csprintg // 136045 (c) 1986
+csprintg1 // 136045 (c) 1986
+csprints // 136045 (c) 1986
+csprints1 // 136045 (c) 1986
+paperboy // 136034 (c) 1984
+paperboyr1 // 136034 (c) 1984
+paperboyr2 // 136034 (c) 1984
+ssprint // 136042 (c) 1986
+ssprint1 // 136042 (c) 1986
+ssprint3 // 136042 (c) 1986
+ssprintf // 136042 (c) 1986
+ssprintg // 136042 (c) 1986
+ssprintg1 // 136042 (c) 1986
+ssprints // 136042 (c) 1986
+
+//@source:atarisy4.cpp
+airrace // (proto) (c) 1985
+laststar // (proto) (c) 1984
+
+//@source:atarittl.cpp
+antiairc // (c) 1975 Atari
+crashnsc // (c) 1975 Atari
+indy4 // (c) 1976 Atari / Kee
+indy800 // (c) 1975 Atari / Kee
+jetfight // (c) 1975 Atari
+jetfighta // (c) 1975 Atari
+outlaw // (c) 1976 Atari
+sharkjaw // (c) 1975 Atari / Horror Games
+steeplec // (c) 1975 Atari
+stuntcyc // (c) 1976 Atari
+tank // (c) 1974 Atari / Kee
+tankii // (c) 1975 Atari / Kee
+
+//@source:ataxx.cpp
+asylum // (c) 1991 Leland
+ataxx // (c) 1990 Leland
+ataxxa // (c) 1990 Leland
+ataxxe // (c) 1990 Leland
+ataxxj // (c) 1990 Leland
+brutforc // (c) 1991 Leland
+indyheat // (c) 1991 Leland
+wsf // (c) 1990 Leland
+
+//@source:atetris.cpp
+atetris // 136066 (c) 1988
+atetrisa // 136066 (c) 1988
+atetrisb // (bootleg)
+atetrisb2 // (bootleg)
+atetrisb3 // (bootleg)
+atetrisc // 136066 (c) 1989
+atetrisc2 // 136066 (c) 1989
+
+//@source:atlantis.cpp
+mwskins // (c) 2000 Midway
+mwskinsa // (c) 2000 Midway
+mwskinso // (c) 2000 Midway
+
+//@source:atm.cpp
+atm //
+atmtb2 //
+
+//@source:atom.cpp
+atom // 1979 Acorn Atom
+atombb // 1979 Acorn Atom
+atomeb // 1979 Acorn Atom
+
+//@source:atpci.cpp
+at586 // 19?? AT 586
+at586x3 // 19?? AT 586
+ficvt503 // 1997 FIC VT-503
+
+//@source:atronic.cpp
+3wishrd // Three Wishes Red
+abigchs // Big Cheese
+aclown // Clown
+atlantca // Atlantica
+atlantcaa //
+atronic //
+atronica //
+baboshka // Baboshka
+beachpt // Beach Patrol
+bearnec // Bear Necessities
+beetleup // Beetles Unplugged
+bigblue // Big Blue
+castaway // Castaway
+castawaya //
+cfblue // Crazy Fruits Blue
+cfbluea //
+cfgreen // Crazy Fruits Green
+chicken // Chicken
+dncsprt // Dancing Spirit
+drmmake // Dream Maker
+goldcity // Gold City
+goldglen // Golden Glenn
+iccash // I C Cash
+jumpjkpt // Jumping Jackpots
+mushmagi // Mushroom Magic
+santam // Santa Maria
+shpinxii // Sphinx II
+splmastr // Spell Master
+tajmah // Tajmahal
+
+//@source:attache.cpp
+attache //
+
+//@source:attckufo.cpp
+attckufo // (c) 1980 Ryoto Electric Co.
+
+//@source:atvtrack.cpp
+atvtrack // (c) 2002 - Ref 020419
+atvtracka // (c) 2002 - Ref 020419
+smashdrv // (c) 2000
+
+//@source:aussiebyte.cpp
+aussieby //
+
+//@source:avalnche.cpp
+avalnche // 030574 1978/04 [6502]
+cascade // bootleg
+catchp // 008837 prototype 1977/?? [6502]
+
+//@source:avigo.cpp
+avigo // 1997 Avigo
+avigo_de // 1997 Avigo (German)
+avigo_es // 1997 Avigo (Spanish)
+avigo_fr // 1997 Avigo (French)
+avigo_it // 1997 Avigo (Italian)
+
+//@source:avt.cpp
+avtbingo // (c) 1985 AVT
+avtnfl // (c) 1989 AVT
+avtsym14 // (c) 1985 AVT
+avtsym25 // (c) 1985 AVT
+
+//@source:ax20.cpp
+ax20 //
+
+//@source:aztarac.cpp
+aztarac // (c) 1983 Centuri (vector game)
+
+//@source:b16.cpp
+b16 //
+
+//@source:b2m.cpp
+b2m //
+b2mrom //
+
+//@source:babbage.cpp
+babbage //
+
+//@source:backfire.cpp
+backfire // MBZ (c) 1995
+backfirea // MBZ (c) 1995
+
+//@source:badlands.cpp
+badlands // 136074 (c) 1989
+badlandsb // bootleg
+badlandsb2 // bootleg set 2
+
+//@source:bagman.cpp
+bagman // (c) 1982
+bagmans // (c) 1982 + Stern license
+bagmans2 // (c) 1982 + Stern license
+bagnard // (c) 1982
+bagnarda // (c) 1982
+bagnardi // (c) 1982 + Itisa license
+botanic // (c) 1983
+botanicf // (c) 1984
+pickin // (c) 1983
+sbagman // (c) 1984
+sbagmans // (c) 1984 + Stern license
+squaitsa // (c) 1985
+
+//@source:bailey.cpp
+fun4 // (c) 1976 Bailey
+fun4a // (c) 1976 Bailey
+
+//@source:balsente.cpp
+cshift // (c) 1984
+gghost // (c) 1984
+gimeabrk // (c) 1985
+grudge // prototype - Bally/Midway
+hattrick // (c) 1984
+minigolf // (c) 1985
+minigolf2 // (c) 1985
+nametune // (c) 1986
+nametune2 // (c) 1986
+nstocker // (c) 1986
+nstocker2 // (c) 1986
+otwalls // (c) 1984
+rescraid // (c) 1987
+rescraida // (c) 1987
+sentetst //
+sfootbal // (c) 1986
+shrike // (c) 1987
+snakepit // (c) 1984
+snakepit2 // (c) 1983
+snakjack // (c) 1984
+spiker // (c) 1986
+spiker2 // (c) 1986
+spiker3 // (c) 1986
+stocker // (c) 1984
+stompin // (c) 1986
+toggle // (c) 1985
+trivia12 // (c) 1984
+triviabb // (c) 1984
+triviaes // (c) 1984
+triviag1 // (c) 1984
+triviag2 // (c) 1984
+triviasp // (c) 1984
+triviayp // (c) 1984
+
+//@source:banctec.cpp
+banctec // BancTec ESeries panel
+
+//@source:bankp.cpp
+bankp // (c) 1984 Sega, made by Sanritsu
+combh // (c) 1987 Sega, made by Sanritsu
+
+//@source:baraduke.cpp
+aliensec // (c) 1985
+baraduke // (c) 1985
+metrocrs // (c) 1985
+metrocrsa // (c) 1985
+
+//@source:barata.cpp
+barata //
+
+//@source:bartop52.cpp
+barbball // (proto) (c) 1983
+
+//@source:basic52.cpp
+basic31 //
+basic52 //
+
+//@source:batman.cpp
+batman // 136085 (c) 1991
+
+//@source:battlane.cpp
+battlane // -0215, -0216 (Data East part number) (c) 1986 + Taito license
+battlane2 // -0215, -0216 (Data East part number) (c) 1986 + Taito license
+battlane3 // -0215, -0216 (Data East part number) (c) 1986 + Taito license
+
+//@source:battlera.cpp
+battlera // (c) 1988 Data East Corporation (World)
+bldwolf // (c) 1988 Data East USA (US)
+bldwolfj // (c) 1988 Data East Corporation (Japan)
+
+//@source:battlex.cpp
+battlex // (c) 1982 Omori E. Co., Ltd.
+
+//@source:battlnts.cpp
+battlnts // GX777 (c) 1987
+battlntsa // GX777 (c) 1987
+battlntsj // GX777 (c) 1987 (Japan)
+rackemup // GX765 (c) 1987
+thehustl // GX765 (c) 1987 (Japan)
+thehustlj // GX765 (c) 1987 (Japan)
+
+//@source:bbc.cpp
+abc110 // 1985 ABC 110
+abc310 // 1985 ABC 310
+acw443 // 1985 ABC 210/Cambridge Workstation
+bbca // 1981 BBC Micro Model A
+bbcb // 1981 BBC Micro Model B w/8271 FDC
+bbcb_de // 1982 BBC Micro Model B (German)
+bbcb_us // 1983 BBC Micro Model B (US)
+bbcb1770 // 1984 BBC Micro Model B w/1770 FDC
+bbcbp // 1985 BBC Micro Model B+ 64K
+bbcbp128 // 1985 BBC Micro Model B+ 128K
+bbcm // 1986 BBC Master 128
+bbcm512 // 1986 BBC Master 512
+bbcmaiv // 1986 BBC Master AIV
+bbcmarm // 1986 ARM Evaluation System
+bbcmc // 1986 BBC Master Compact
+bbcmc_ar // 1986 BBC Master Compact (Arabic)
+bbcmet // 1986 BBC Master ET
+bbcmt // 1986 BBC Master Turbo
+pro128s // 1987 Olivetti Prodest PC 128S
+reutapm // 1985 Reuters APM Board
+torchf // 1982 Torch CF240
+torchh10 // 1982 Torch CH240/10
+torchh21 // 1982 Torch CH240/21
+
+//@source:bbcbc.cpp
+bbcbc // 1985 BBC Bridge Companion
+
+//@source:bbusters.cpp
+bbusters // A9003 'BB' (c) 1989
+bbustersu // A9003 'BB' (c) 1989
+bbustersua // A9003 'BB' (c) 1989
+mechatt // A8002 'MA' (c) 1989
+mechattj // A8002 'MA' (c) 1989
+mechattu // A8002 'MA' (c) 1989
+mechattu1 // A8002 'MA' (c) 1989
+
+//@source:bcs3.cpp
+bcs3 //
+bcs3a //
+bcs3b //
+bcs3c //
+bcs3d //
+
+//@source:beaminv.cpp
+beaminv // (c) 1979 Tekunon Kougyou (Arcade TV Game List - P.95, Left, 9 from top)
+pacominv // (c) 1979 Pacom Corporation
+
+//@source:beathead.cpp
+beathead // (proto) (c) 1993
+
+//@source:bebox.cpp
+bebox // BeBox Dual603-66
+bebox2 // BeBox Dual603-133
+
+//@source:beehive.cpp
+beehive //
+
+//@source:beezer.cpp
+beezer // (c) 1982
+beezer1 // (c) 1982
+
+//@source:belatra.cpp
+fairyl2 //
+fairyl2a //
+fairyl2b //
+fairyl2bl //
+ldrink //
+ldrinka //
+merryjn //
+
+//@source:berzerk.cpp
+berzerk // (c) 1980
+berzerk1 // (c) 1980
+berzerkf // (c) 1980 (French speech)
+berzerkg // (c) 1980 (German speech)
+berzerks // (c) 1980 Sonic license(Spanish speech)
+frenzy // (c) 1982
+moonwarp // (c) 1982 - prototype
+
+//@source:besta.cpp
+besta88 //
+
+//@source:bestleag.cpp
+bestleag // bootleg, by Playmark?
+bestleaw // bootleg
+
+//@source:beta.cpp
+beta //
+
+//@source:bfcobra.cpp
+beeline // 1991 BFM
+escounts // 1990 BFM
+inquiztr // 1989 BFM
+qos // 1992 BFM
+qosa // 1992 BFM
+qosb // 1992 BFM
+quizvadr // 1991 BFM
+trebltop // 1991 BFM
+
+//@source:bfm_ad5sw.cpp
+ad5bpfpm // Bullseye Pounds For Points (Mazooma)
+ad5bpfpma //
+ad5bpfpmb //
+ad5bpfpmc //
+ad5bpfpmd //
+ad5btc // Bullseye Triple Club (Bellfruit)
+ad5btca //
+ad5btcb //
+ad5cmons // Crazy Money (Bellfruit)
+ad5cmonsa //
+ad5copsr // Cops 'n' Robbers (Bellfruit)
+ad5copsr0 //
+ad5copsr1 //
+ad5copsr2 //
+ad5copsr3 //
+ad5copsr4 //
+ad5copsr5 //
+ad5copsr6 //
+ad5copsr7 //
+ad5copsra //
+ad5copsrb //
+ad5copsrc //
+ad5copsrd //
+ad5copsre //
+ad5copsrf //
+ad5copsrg //
+ad5copsrh //
+ad5copsri //
+ad5copsrj //
+ad5copsrk //
+ad5copsrl //
+ad5copsrm //
+ad5copsrn //
+ad5copsro //
+ad5copsrp //
+ad5copsrq //
+ad5copsrr //
+ad5copsrs //
+ad5copsrt //
+ad5copsru //
+ad5copsrv //
+ad5copsrw //
+ad5copsrx //
+ad5copsry //
+ad5copsrz //
+ad5crcpt // Cops 'n' Robbers Community Party (Bellfruit)
+ad5crcpta //
+ad5crsc // Cops 'n' Robbers Safe Cracker (Bellfruit)
+ad5crsca //
+ad5crscb //
+ad5crscc //
+ad5crscd //
+ad5crsce //
+ad5crscf //
+ad5crscg //
+ad5crsch //
+ad5dnd // Deal Or No Deal (Bellfruit) (AD5)
+ad5dnda //
+ad5dndb //
+ad5dndc //
+ad5dndcl // Deal Or No Deal Club (Bellfruit) (AD5)
+ad5dndcla //
+ad5dndclb //
+ad5dndclc //
+ad5dndcld //
+ad5dndcle //
+ad5dndclf //
+ad5dndclg //
+ad5dndd //
+ad5dnddd // Deal Or No Deal Double Deal Or No Deal (Bellfruit) (AD5)
+ad5dnddda //
+ad5dnde //
+ad5dndf //
+ad5dndg //
+ad5dndh //
+ad5dndi //
+ad5dndj //
+ad5dndk //
+ad5dndl //
+ad5dndm //
+ad5dndn //
+ad5dndo //
+ad5dndp //
+ad5dndpg // Deal Or No Deal The Perfect Game (Bellfruit)
+ad5dndpga //
+ad5dndpgb //
+ad5dndpgc //
+ad5dndpl // Deal Or No Deal Platinum (Bellfruit)
+ad5dndpla //
+ad5dndplb //
+ad5dndplc //
+ad5dndq //
+ad5dndr //
+ad5dndu //
+ad5dndv //
+ad5eyes // Eyes Down (Mazooma)
+ad5eyesa //
+ad5eyesb //
+ad5eyesc //
+ad5eyesd //
+ad5eyese //
+ad5eyesf //
+ad5eyesg //
+ad5gldmn // Gold Mine (Bellfruit)
+ad5gldmna //
+ad5gldmnb //
+ad5gldmnc //
+ad5gldmnd //
+ad5gldmne //
+ad5gldmnf //
+ad5gldmng //
+ad5gldmnh //
+ad5gldmni //
+ad5gldmnj //
+ad5gldmnk //
+ad5gldwn // Golden Winner (Mazooma)
+ad5gldwna //
+ad5hir // Hi Roller (Bellfruit)
+ad5hira //
+ad5hirb //
+ad5hirc //
+ad5hircl // Hi Roller Club (Bellfruit)
+ad5hircla //
+ad5hirclb //
+ad5jckmo // Jackpot Monopoly (Mazooma)
+ad5jckmoa //
+ad5jckmob //
+ad5jckmoc //
+ad5jckmod //
+ad5jckmoe //
+ad5mcob // Monte Carlo Or Bust (Qps)
+ad5mcoba //
+ad5mcobb //
+ad5mcobc //
+ad5monop // Monopoly (Mazooma)
+ad5monopa //
+ad5monopb //
+ad5monopc //
+ad5monopd //
+ad5monope //
+ad5monopf //
+ad5monopg //
+ad5monoph //
+ad5monopi //
+ad5monopj //
+ad5monopk //
+ad5mowow // Monopoly Wheel Of Wealth (Mazooma)
+ad5mowowa //
+ad5mowowb //
+ad5mowowc //
+ad5mowowd //
+ad5mowowe //
+ad5mowowf //
+ad5mowowg //
+ad5mowowh //
+ad5mowowi //
+ad5mowowj //
+ad5mowowk //
+ad5mowowl //
+ad5mowowm //
+ad5mr2r // Monopoly Road To Riches (Mazooma)
+ad5mr2ra //
+ad5mr2rb //
+ad5mr2rc //
+ad5mr2rd //
+ad5mr2re //
+ad5mr2rf //
+ad5mr2rg //
+ad5mr2rh //
+ad5mww // Monopoly Wonders Of The World (Mazooma)
+ad5mwwa //
+ad5pking // Poker King (Bellfruit)
+ad5pkinga //
+ad5pp // Pink Panther (Mazooma)
+ad5ppa //
+ad5ppb //
+ad5ppbtb // Pink Panther Break The Bank (Mazooma)
+ad5ppbtba //
+ad5ppbtbb //
+ad5ppbtbc //
+ad5ppc //
+ad5ppd //
+ad5ppe //
+ad5ppf //
+ad5ppg //
+ad5pph //
+ad5ppi //
+ad5ppj //
+ad5rapid // Rapid Pay (Bellfruit)
+ad5rapida //
+ad5rcash // Reel Cash (Mazooma)
+ad5rcasha //
+ad5rroul // Reel Roulette (Mazooma)
+ad5rroula //
+ad5rroulb //
+ad5rroulc //
+ad5rsclb // Random Spinner Club (Bellfruit)
+ad5rsclba //
+ad5rsclbb //
+ad5rsclbc //
+ad5rsclbd //
+ad5rsclbe //
+ad5rsclbf //
+ad5rsclbg //
+ad5rsclbh //
+ad5rsclbi //
+ad5rsclbj //
+ad5rsnw // Random Spin 'n' Win (Mazooma)
+ad5rsnwa //
+ad5rsnwb //
+ad5rsnwc //
+ad5rspin // Random Spinner (Bellfruit)
+ad5rspinb //
+ad5rspinc //
+ad5rsrm // Ronnie O'Sullivan's Rocket Money (Bellfruit)
+ad5rsrma //
+ad5rsrr // Ronnie O'Sullivan's Rocket Ronnie (Bellfruit)
+ad5rsrra //
+ad5rwclb // Random Winner Club (Bellfruit)
+ad5rwclba //
+ad5rwclbb //
+ad5rwclbc //
+ad5rwclbd //
+ad5rwclbe //
+ad5sslam // Super Slam (Bellfruit)
+ad5sslama //
+ad5sslamb //
+ad5sslamc //
+ad5sslamd //
+ad5sslame //
+ad5sslamf //
+ad5tornc // Tornado Club (Bellfruit)
+ad5tornca //
+ad5torncb //
+ad5torncc //
+ad5torncd //
+ad5tornce //
+ad5vlv // Viva Las Vegas (Bellfruit)
+ad5vlvb //
+ad5vlvc //
+ad5vlvd //
+ad5vlve //
+ad5vlvf //
+ad5vpa // Video Poker Ace (Bellfruit)
+ad5vpaa //
+ad5vpab //
+ad5vpac //
+
+//@source:bfm_sc1.cpp
+m_tppokr // (c) 1996 BFM/ELAM,Game Card 95-750-899, uses Adder board for feature gfx
+sc1actv8 //
+sc1armad //
+sc1barcd //
+sc1barcda //
+sc1bartk //
+sc1bigmt //
+sc1boncl // Bonanza Club (Bellfruit)
+sc1btbc // Beat The Bank Club (Bellfruit)
+sc1btclk // Beat The Clock (Mdm)
+sc1btclka //
+sc1btclkb //
+sc1calyp //
+sc1carro //
+sc1ccoin //
+sc1ccroc // Crazy Crocs (Mdm)
+sc1ccroca //
+sc1ccrocb //
+sc1ccrocc //
+sc1cdm // Club Diamond (Crystal)
+sc1cdmp //
+sc1cexpd // Cash Explosion (Bellfruit) (Dutch)
+sc1cexpl // Cash Explosion (Bellfruit)
+sc1cexpla //
+sc1cexplb //
+sc1chain // Chain Reaction (Bellfruit)
+sc1chainp //
+sc1china // China Town Club (Bellfruit)
+sc1chinaa //
+sc1chinaap //
+sc1chinab //
+sc1chinabp //
+sc1chinap //
+sc1chqfl // Chequered Flag (Global)
+sc1cl2k // Club 2000 (Bellfruit)
+sc1cl2k1 // Club 2001 (Bellfruit)
+sc1cl65 // Club 65 Special (Bellfruit)
+sc1cl65a //
+sc1cl65ap //
+sc1cl65b //
+sc1cl65bp //
+sc1cl65c //
+sc1cl65cp //
+sc1cl65d //
+sc1cl65dp //
+sc1class // Classic (Bellfruit)
+sc1clatt // (c) 1990 BFM, Game Card 39-370-196
+sc1clatta //
+sc1clb3 // Club 3000 (Bellfruit)
+sc1clbdm // Club Diamond (Bellfruit)
+sc1clbdy // Club Dynamite (Global)
+sc1clbdya //
+sc1clbrn // Club Runner (Bellfruit)
+sc1clbsp // Club Spinner (Bellfruit)
+sc1clbtm // Club Temptation (Bellfruit)
+sc1clbtma //
+sc1clbw // Club Wise (Bellfruit)
+sc1clbwa //
+sc1clbxp // Club Explosion (Bellfruit)
+sc1clbxpa //
+sc1clins // Cash Lines (Bellfruit)
+sc1clinsa //
+sc1clinsb //
+sc1clinsc //
+sc1clinsd //
+sc1clinse //
+sc1clown // Clown Around (Bellfruit)
+sc1copdd // Cops 'n' Robbers Deluxe (Bellfruit) [Dutch]
+sc1copdx // Cops 'n' Robbers Deluxe (Bellfruit)
+sc1cops // Cops 'n' Robbers (Bellfruit)
+sc1copsa //
+sc1count // Count Cash Club (Bellfruit)
+sc1counta //
+sc1countap //
+sc1countp //
+sc1crocr // Croc And Roll (Mdm)
+sc1crzyc // Crazy Cash (Global)
+sc1crzyca //
+sc1cscl // Cash Classic (Global)
+sc1cscla //
+sc1cshat // Cash Attraction
+sc1cshata //
+sc1cshatb //
+sc1cshatc //
+sc1cshatf //
+sc1cshatg //
+sc1cshath //
+sc1cshati //
+sc1cshcd //
+sc1cshcda //
+sc1cshcdb //
+sc1cshin // Cashino (Bellfruit) (Dutch)
+sc1cshwz // Cash Wise (Bellfruit)
+sc1cshwza //
+sc1cshwzb //
+sc1cshwzc //
+sc1cshwzd //
+sc1cshwze //
+sc1cshwzf //
+sc1cshwzg //
+sc1cwcl // Clockwise Club (Bellfruit)
+sc1czbrk // Crazy Break (Bellfruit)
+sc1dago // Dagobert's Vault (Bellfruit)
+sc1days // All In A Days Work (Global)
+sc1daysa //
+sc1dblch // Double Chance (Bellfruit)
+sc1dblcha //
+sc1dblchb //
+sc1dip // Diplomat (Eurocoin)
+sc1disc // Discovey (Bellfruit)
+sc1dream // Dream Machine (Bellfruit)
+sc1driv // Driving School (Global)
+sc1driva //
+sc1drivb //
+sc1drivc //
+sc1druby //
+sc1drubya //
+sc1energ // Energy (Bellfruit)
+sc1final // Final Touch (Bellfruit)
+sc1flash // Flash (Bellfruit)
+sc1frpus // Fruit Pursuit (Bellfruit)
+sc1frpusa //
+sc1frtln // Fruitlines (Bellfruit)
+sc1fruit // Fruit Lines (Bellfruit)
+sc1funh // Fun House Club (Bellfruit)
+sc1funha //
+sc1funhp //
+sc1goldw //
+sc1gprix // Grand Prix (Bellfruit)
+sc1gslam // Grand Slam (Bellfruit) (Dutch)
+sc1gtime // Good Times (Bellfruit)
+sc1happy // Happy Hour (Bellfruit - Elam)
+sc1hfcc // Hi-Flyer Club (Crystal)
+sc1hfccp //
+sc1hipt // High Point (Bellfruit)
+sc1hipta //
+sc1impc // Impact (Bellfruit)
+sc1kings // Kings Club (Bellfruit)
+sc1lamb // Lambada (Eurocoin)
+sc1linx // Linx (Bellfruit)
+sc1linxa //
+sc1linxp //
+sc1lotus // (c) 198? BFM Dutch ROMS
+sc1lotusa //
+sc1ltdv // Little Devil (Pcp)
+sc1magc // Magic Circle (Bellfruit)
+sc1manha // Manhattan (Bellfruit)
+sc1mast // Master Club (Bellfruit)
+sc1mist // Mistral (Bellfruit)
+sc1moonl // Moon Lite (Bwb)
+sc1ofs56 // zzz_unk ofs56cp (Bellfruit)
+sc1olym // Olympia (Bellfruit)
+sc1orac // Oracle (Bellfruit)
+sc1pwrl // Power Lines (Bellfruit)
+sc1quat // Quatro (Bellfruit)
+sc1rain // Rainbow (Bellfruit)
+sc1re // Reel Cash (Bellfruit)
+sc1reply // Replay (Eurocoin)
+sc1rese // Reel Cash SE (Bellfruit)
+sc1revo // Revolution (Bellfruit) (Dutch)
+sc1rose // Rose 'n' Crown (Bellfruit)
+sc1roul // (c) 198? BFM Dutch ROMS, prelim
+sc1s1000 // Super 1000 (Deltasoft)
+sc1sant // Santana (Bellfruit)
+sc1sat // Satellite (Bellfruit)
+sc1satse // Satellite SE (Bellfruit)
+sc1scunk //
+sc1shan // Shanghai (Bellfruit)
+sc1sir // Strike It Rich (Bellfruit)
+sc1sira //
+sc1sirb //
+sc1sirc //
+sc1smoke // Smokey Vs The Bandit (Mdm)
+sc1smokea //
+sc1spct // Spectre (Bellfruit)
+sc1spcta //
+sc1spit // Spitfire (Elam)
+sc1ster // Sterling (Bellfruit)
+sc1str4 // Strike 4 (Bellfruit)
+sc1str4a //
+sc1strk // Strike (Bellfruit)
+sc1supfl // Super Flush (Bellfruit)
+sc1sups // Superstar (Bellfruit) (Dutch)
+sc1t1k // Top 1000 (Eurocoin)
+sc1tiara // Tiara (Elam)
+sc1torn // Tornado (Bellfruit)
+sc1torna //
+sc1tri // Tri Star (Bellfruit)
+sc1tria //
+sc1triap //
+sc1trib //
+sc1tribp //
+sc1twice // Twice As Nice (Associated Leisure)
+sc1typ // Typhoon Club (Bellfruit)
+sc1typp //
+sc1ult // Ultimate (Bellfruit)
+sc1vent // Ventura (Bellfruit)
+sc1vict // Victory (Bellfruit)
+sc1voy // Voyager (Bellfruit)
+sc1voya //
+sc1vsd // Vegas Super Deal (Global)
+sc1winfl // Winfalls (Bellfruit)
+sc1winst // Winning Streak (Bellfruit)
+sc1winsta //
+sc1winstp //
+sc1wof // Wheel Of Fortune (Global)
+sc1wofa //
+sc1wofb //
+sc1wthn // Wild Thing (Eurocoin)
+sc1wud // What's Up Dr
+sc1zep // Zeppelin (Bellfruit)
+
+//@source:bfm_sc2.cpp
+gldncrwn // 1997
+paradice // 1995
+pokio // 1994
+pyramid // 1996
+qntoond // 1993
+qntoondo // 1993
+quintond // 1993
+quintono // 1993
+quintoon // 1993
+sc2bar7 // Bar 7 (Concept)
+sc2bar7a //
+sc2bar7b //
+sc2bar7c //
+sc2bar7d //
+sc2bar7e //
+sc2bar7f //
+sc2bar7g //
+sc2bar7h //
+sc2bar7i //
+sc2bar7j //
+sc2bar7k //
+sc2bbar7 // Big Bar 7 (Concept)
+sc2bbar7a //
+sc2bbar7b //
+sc2bbar7c //
+sc2bbar7d //
+sc2bbar7e //
+sc2bbar7f //
+sc2bbar7g //
+sc2bbar7h //
+sc2bbar7i //
+sc2bbar7j //
+sc2bbar7k //
+sc2bbar7l //
+sc2bbar7m //
+sc2bbar7n //
+sc2bbar7o //
+sc2bbar7p //
+sc2brkfs // The Big Breakfast
+sc2brkfs1 //
+sc2brkfs1p //
+sc2brkfs2 //
+sc2brkfs3 //
+sc2brkfs3p //
+sc2brkfs4 //
+sc2brkfs4p //
+sc2brkfs5 //
+sc2brkfs5p //
+sc2brkfs6 //
+sc2brkfsm //
+sc2brkfsm1 //
+sc2brkfsm2 //
+sc2brkfsp //
+sc2call // It's Your Call (Global)
+sc2callc //
+sc2callcp //
+sc2callp //
+sc2casr // Casino Royale (Bellfruit)
+sc2casr1 //
+sc2casr1p //
+sc2casr2 //
+sc2casr2p //
+sc2casr3 //
+sc2casr3p //
+sc2casr4 //
+sc2casr4p //
+sc2casrp //
+sc2catms // Cat & Mouse (Bellfruit)
+sc2catms1 //
+sc2catms1p //
+sc2catms2 //
+sc2catms2p //
+sc2catms3 //
+sc2cb7 // Casino Bar 7 (Bellfruit)
+sc2cb71 //
+sc2cb72 //
+sc2cb72p //
+sc2cb7p //
+sc2cexpl // Cash Explosion
+sc2cexpla //
+sc2cexplb //
+sc2cexplc //
+sc2cexpld //
+sc2cexple //
+sc2cgc // Carrot Gold Club (Bellfruit)
+sc2cgcas // Club Grand Casino
+sc2cgcas1 //
+sc2cgcas1p //
+sc2cgcasp //
+sc2cmbt // Cat & Mouse & Bonzo Too (Bellfruit)
+sc2cmbtp //
+sc2cnile // Cash On The Nile Club (Bellfruit)
+sc2cnile1 //
+sc2cnile2 //
+sc2cnile2p //
+sc2cnilep //
+sc2copcl //
+sc2copcl1 //
+sc2copcl10 //
+sc2copcl11 //
+sc2copcl11p //
+sc2copcl12 //
+sc2copcl1p //
+sc2copcl2 //
+sc2copcl3 //
+sc2copcl3p //
+sc2copcl4 //
+sc2copcl5 //
+sc2copcl6 //
+sc2copcl6p //
+sc2copcl7 //
+sc2copcl8 //
+sc2copcl8p //
+sc2copcl9 //
+sc2copcl9p //
+sc2copclp //
+sc2copdc // Cops 'n' Robbers Club Deluxe (Bellfruit)
+sc2copdc1 //
+sc2copdc1p //
+sc2copdc2 //
+sc2copdc2p //
+sc2copdc3 //
+sc2copdc3p //
+sc2copdc4 //
+sc2copdc4p //
+sc2copdc5 //
+sc2copdc5p //
+sc2copdc6 //
+sc2copdcp //
+sc2cops // Cops 'n' Robbers (Bellfruit)
+sc2cops1p //
+sc2cops2 //
+sc2cops3 //
+sc2cops3p //
+sc2cops4 //
+sc2cops5 //
+sc2copsc // Casino Cops 'n' Robbers (Bellfruit)
+sc2copsc1 //
+sc2copsc1p //
+sc2copsc1pa //
+sc2copscp //
+sc2copsp //
+sc2cpe // Club Public Enemy No.1 (UK, Game Card 95-750-846)
+sc2cpe1 //
+sc2cpe1p //
+sc2cpe2 //
+sc2cpe2p //
+sc2cpe3 //
+sc2cpe3p //
+sc2cpe4 //
+sc2cpe4p //
+sc2cpep //
+sc2cpg // Pharaoh's Gold Club (Bellfruit)
+sc2cpg1 //
+sc2cpg1p //
+sc2cpg2 //
+sc2cpg2p //
+sc2cpgp //
+sc2cshcl // Cashino Club (Bellfruit)
+sc2cshcl1 //
+sc2cshcl1p //
+sc2cshclp //
+sc2ctms2 // Cat & Mouse (Mark 2 - Bellfruit)
+sc2ctms21 //
+sc2ctms21p //
+sc2ctms22 //
+sc2ctms22p //
+sc2ctms23 //
+sc2ctms23p //
+sc2ctms24p //
+sc2ctms25 //
+sc2cvega // Cash Vegas
+sc2cvega1 //
+sc2cvega1p //
+sc2cvega2 //
+sc2cvega2p //
+sc2cvega3 //
+sc2cvega3p //
+sc2cvega4p //
+sc2dbl // Double Diamond (Bellfruit
+sc2dbl1 //
+sc2dbl1p //
+sc2dblp //
+sc2dels // Del's Millions (Bellfruit)
+sc2dels1 //
+sc2dels1p //
+sc2dels2 //
+sc2dels2p //
+sc2dels3 //
+sc2dels3p //
+sc2dels4 //
+sc2dels4p //
+sc2dels5 //
+sc2dels6 //
+sc2dels7 //
+sc2dels8 //
+sc2dels9 //
+sc2delsd //
+sc2delsm // (Mazooma set)
+sc2delsm1 //
+sc2delsm1p //
+sc2delsm2 //
+sc2delsm2p //
+sc2delsm3 //
+sc2delsm3p //
+sc2delsmp //
+sc2delsp //
+sc2dick // Spotted Dick (Global)
+sc2dick1 //
+sc2dick2 //
+sc2dick2e //
+sc2dick2eu //
+sc2dick2p //
+sc2dickp //
+sc2downt // Down Town (Bellfruit)
+sc2downt1 //
+sc2downt1p //
+sc2downt2 //
+sc2downt2p //
+sc2downt3 //
+sc2downt3a //
+sc2downt3ap //
+sc2downt3p //
+sc2downt4 //
+sc2downt4a //
+sc2downt4ap //
+sc2downt4p //
+sc2downt5 //
+sc2downt6 //
+sc2downt7 //
+sc2downt8a //
+sc2downt8ap //
+sc2downtp //
+sc2drwho // Dr.Who The Timelord
+sc2drwho1 //
+sc2drwho1p //
+sc2drwho2 //
+sc2drwho2p //
+sc2drwho3 //
+sc2drwho3p //
+sc2drwho4 //
+sc2drwho4p //
+sc2drwho5 //
+sc2drwho5p //
+sc2drwho6 //
+sc2drwho6p //
+sc2drwho7 //
+sc2drwho7p //
+sc2drwhodx //
+sc2drwhodx1 // (Deluxe)
+sc2drwhomz // (Mazooma set)
+sc2drwhomzp // (Mazooma set)
+sc2drwhop //
+sc2drwhou //
+sc2easy // Easy Money (Bellfruit)
+sc2easy1 //
+sc2easy1p //
+sc2easy2 //
+sc2easy2p //
+sc2easyp //
+sc2eggs // Eggs On Legs Tour (Bellfruit)
+sc2eggs1 //
+sc2eggs1p //
+sc2eggsp //
+sc2flaca // Flash Cash (Bellfruit)
+sc2flaca1 //
+sc2flaca1p //
+sc2flaca2 //
+sc2flaca2p //
+sc2flacap //
+sc2flutr // Flutter (Concept)
+sc2focus // Focus (Dutch, Game Card 95-750-347)
+sc2foot // Football Club (Bellfruit)
+sc2foot1 //
+sc2foot1p //
+sc2foot2 //
+sc2foot2p //
+sc2footp //
+sc2gcclb // Golden Casino Club (Bellfruit)
+sc2gcclb1 //
+sc2gcclb1p //
+sc2gcclb2 //
+sc2gcclb2p //
+sc2gcclbp //
+sc2goldr // Gold Reserve (Mdm)
+sc2goldr1 //
+sc2goldrp //
+sc2groul // Golden Roulette (Bellfruit)
+sc2groulp //
+sc2gsclb // The Game Show Club (Bellfruit)
+sc2gsclb1 //
+sc2gsclb1p //
+sc2gsclb2 //
+sc2gsclb2p //
+sc2gsclb3 //
+sc2gsclb3p //
+sc2gsclb4 //
+sc2gsclb4p //
+sc2gsclb5 //
+sc2gsclb6 //
+sc2gsclb6p //
+sc2gsclb7 //
+sc2gsclbp //
+sc2gslam // Club Grandslam (UK, Game Card 95-750-843)
+sc2gslam1 //
+sc2gslam1p //
+sc2gslamp //
+sc2gtr // Great Train Robbery (Bellfruit)
+sc2heypr // Hey Presto (Bellfruit)
+sc2heyprp //
+sc2hifly // High Flyer (Mdm)
+sc2hifly2 //
+sc2hifly3 //
+sc2hifly4 //
+sc2hypr // Hyperactive (Bellfruit)
+sc2hypr1 //
+sc2hypr1p //
+sc2hyprp //
+sc2inst // Instant Jackpot (Bellfruit)
+sc2inst1 //
+sc2inst1p //
+sc2inst2 //
+sc2inst2p //
+sc2inst3 //
+sc2inst3p //
+sc2inst4 //
+sc2inst4p //
+sc2inst5 //
+sc2inst6 //
+sc2instp //
+sc2kcclb // King Cash Club (Bellfruit)
+sc2kcclb1 //
+sc2kcclb1p //
+sc2kcclbp //
+sc2luvv // Luvvly Jubbly (UK Multisite 10/25p, Game Card 95-750-808)
+sc2luvv1 //
+sc2luvv1p //
+sc2luvv2 //
+sc2luvv2p //
+sc2luvv4 //
+sc2luvv4p //
+sc2luvv6p //
+sc2luvvp //
+sc2maina // Main Attraction (Bellfruit)
+sc2majes // Majestic Bells (Bellfruit)
+sc2majesp //
+sc2mam // Make A Million (Bellfruit)
+sc2mam1 //
+sc2mam1p //
+sc2mam2 //
+sc2mam2p //
+sc2mam3 //
+sc2mam3a //
+sc2mam3p //
+sc2mam4 //
+sc2mam4p //
+sc2mamcl // Make A Million Club (Bellfruit)
+sc2mamcl1 //
+sc2mamcl1p //
+sc2mamcl2 //
+sc2mamcl2p //
+sc2mamcl3 //
+sc2mamclp //
+sc2mamp //
+sc2motd // Match Of The Day (Bellfruit)
+sc2motd1 //
+sc2motd1p //
+sc2motd2 //
+sc2motd2p //
+sc2motd3 //
+sc2motd3p //
+sc2motd4 //
+sc2motd4p //
+sc2motd5 //
+sc2motd5p //
+sc2motd6 //
+sc2motd6p //
+sc2motd7 //
+sc2motd8p //
+sc2motd9 //
+sc2motdp //
+sc2ofool // Only Fools & Horses (Bellfruit)
+sc2ofool1 //
+sc2ofool2 //
+sc2ofool3 //
+sc2ofool4 //
+sc2olgld // Olympic Gold (Bellfruit)
+sc2olgld1 //
+sc2olgld1p //
+sc2olgldp //
+sc2payr // Pay Roll (Mazooma)
+sc2pe1g // Public Enemy No1 (Bellfruit) [German]
+sc2pick // Pick Of The Bunch (Global)
+sc2pickc //
+sc2pickcp //
+sc2pickp //
+sc2prem // Premier Club Manager (Bellfruit)
+sc2prem1 //
+sc2prem1p //
+sc2prem2 //
+sc2prom // Along The Prom
+sc2ptytm // Party Time (Bellfruit)
+sc2ptytm1 //
+sc2ptytmp //
+sc2relgm // Reel Gems (Bellfruit)
+sc2relgm1p //
+sc2relgmp //
+sc2rock // How Big's Your Rock? (Global)
+sc2rock1 //
+sc2rock1p //
+sc2rocke //
+sc2rockp //
+sc2scc // Safe Cracker Club (Mdm)
+sc2scshx // Super Cash X (Concept)
+sc2scshxcas // Super Casino Cash X (Concept)
+sc2scshxgman // Gamesman hardware
+sc2scshxstar // Starpoint hardware
+sc2sghst // Super Ghost (Concept)
+sc2showt // Showtime Spectacular (Bellfruit)
+sc2showt1 //
+sc2showt1p //
+sc2showt2 //
+sc2showt2p //
+sc2showt3 //
+sc2showt3p //
+sc2showt4 //
+sc2showt4p //
+sc2showtp //
+sc2smnud // Super Multi Nudge (Concept)
+sc2sstar // Superstar (Bellfruit)
+sc2sstar1 //
+sc2sstar1p //
+sc2sstar2 //
+sc2sstar2p //
+sc2sstar3 //
+sc2sstar3p //
+sc2sstarp //
+sc2suprz // Surprise Surprize (Bellfruit)
+sc2suprz1 //
+sc2suprz1p //
+sc2suprz2 //
+sc2suprz2p //
+sc2suprz3 //
+sc2suprzp //
+sc2topwk // Top Wack (Bellfruit)
+sc2topwkp //
+sc2town // Round The Town (Bellfruit)
+sc2town1 //
+sc2town1a //
+sc2town1p //
+sc2town2 //
+sc2town3 //
+sc2town3p //
+sc2town4 //
+sc2town5 //
+sc2townp //
+sc2wembl // Road To Wembley (Bellfruit)
+sc2wembl1 //
+sc2wembl10 //
+sc2wembl1p //
+sc2wembl2 //
+sc2wembl2p //
+sc2wembl4p //
+sc2wembl5a //
+sc2wembl5ap //
+sc2wembl6ap //
+sc2wembl7a //
+sc2wembl7ap //
+sc2wembl8 //
+sc2wembl9 //
+sc2wemblm // (Mazooma set)
+sc2wemblp //
+sc2winst //
+sc2winstb // Winning Streak
+sc2winstbp //
+sc2winstd //
+sc2winstdp //
+sc2winste //
+sc2winstep //
+sc2winstf //
+sc2winstfp //
+sc2winstg //
+sc2winstp //
+sc2wwcl // Wild West Club (Bellfruit)
+sc2wwcl1 //
+sc2wwcl1p //
+sc2wwclp //
+slotsnl // 1995
+sltblgp1 // 1996
+sltblgpo // 1996
+sltblgtk // 1996
+
+//@source:bfm_sc4.cpp
+ad4ctl //
+ad4ctla //
+ad4film //
+ad4filma //
+ad4skill // Skill Dice (BFM)
+sc4a40 // Around The Board In 40 Days (Mazooma)
+sc4a40a //
+sc4a40b //
+sc4a40c //
+sc4a40cl // Around The Board In 40 Days Club (Mazooma)
+sc4a40cla //
+sc4a40clb //
+sc4a40clc //
+sc4abra // Abracadabra (Qps)
+sc4abraa //
+sc4abrab //
+sc4abrac //
+sc4abrad //
+sc4abrae //
+sc4acesh // Aces High (Mazooma)
+sc4acesha //
+sc4aceshb //
+sc4aceshc //
+sc4adjb // Ant & Dec's Jiggy Bank (Bellfruit)
+sc4adjba //
+sc4adjbb //
+sc4adjbc //
+sc4adjbd //
+sc4adjbe //
+sc4adjbf //
+sc4adjbg //
+sc4adjbh //
+sc4adjbi //
+sc4adren // Adrenalin (Mazooma)
+sc4adrena //
+sc4adrenb //
+sc4adrenc //
+sc4adsnt // Ant & Dec's Saturday Night Takeaway (Bellfruit)
+sc4adsnta //
+sc4adwta // Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit)
+sc4adwtaa //
+sc4alad // Aladdin's Cave (Mazooma)
+sc4alada //
+sc4aztec // Aztec (Bellfruit)
+sc4azteca //
+sc4bankb // Bankety Bank (Qps)
+sc4bankba //
+sc4bantm // Bantam Of The Opera (Mazooma)
+sc4bantma //
+sc4bantmb //
+sc4bantmc //
+sc4bar7 // Bar 7's (Bellfruit)
+sc4bar7a //
+sc4bar7b //
+sc4bar7c //
+sc4bar7d //
+sc4bar7e //
+sc4batl // Battleships & Cruisers (Bellfruit)
+sc4batla //
+sc4bb // Blankety Bank (Qps)
+sc4bba //
+sc4bbclb // Blankety Bank Club (Qps)
+sc4bbclba //
+sc4bbclbb //
+sc4bbclbc //
+sc4bblas // Big Blaster (Mazooma)
+sc4bblasa //
+sc4bblasb //
+sc4bblasc //
+sc4bblasd //
+sc4bblase //
+sc4bblasf //
+sc4bbust // Blockbuster (Mazooma)
+sc4bed // Bedazzled (Mazooma)
+sc4beda //
+sc4bedb //
+sc4bedc //
+sc4bedcl // Bedazzled Club (Mazooma)
+sc4bedcla //
+sc4bedclb //
+sc4bedclc //
+sc4bedcld //
+sc4bedd //
+sc4bede //
+sc4bgold // Black Gold (Nova)
+sc4bgolda //
+sc4bigdl // Big Deal (Qps)
+sc4bigdla //
+sc4bingb // Bingo Belle (Mazooma)
+sc4bingba //
+sc4blast // Blast Off (Qps)
+sc4blasta //
+sc4blastb //
+sc4blastc //
+sc4blastd //
+sc4blaste //
+sc4blokq // Blockbuster (Qps)
+sc4blokqa //
+sc4blokqb //
+sc4blokqc //
+sc4blokqd //
+sc4blokqe //
+sc4blue // Blue Rinse (Mazooma)
+sc4bluea //
+sc4blueb //
+sc4bluec //
+sc4blued //
+sc4bluee //
+sc4bob // Bobby Dazzler (Mazooma)
+sc4boba //
+sc4bobb //
+sc4bobc //
+sc4bobcl // Bobby Dazzler Club (Mazooma)
+sc4bobcla //
+sc4bobd //
+sc4bobe //
+sc4bobf //
+sc4bobg //
+sc4bobh //
+sc4bobi //
+sc4bonbx // Bonus Bar X (Mazooma)
+sc4bonbxa //
+sc4bonbxb //
+sc4bonbxc //
+sc4bonbxd //
+sc4bonbxe //
+sc4bonbxf //
+sc4bonbxg //
+sc4bonbxh //
+sc4bonbxi //
+sc4bonbxj //
+sc4bonbxk //
+sc4bonbxl //
+sc4boomb //
+sc4boomba //
+sc4botn // Back Of The Net (Qps)
+sc4botna //
+sc4bpb // Bully's Prize Board (Bellfruit)
+sc4bpba //
+sc4bpbb //
+sc4bpbc //
+sc4bpbd //
+sc4bpbe //
+sc4brix // Brix (Nova)
+sc4brixa //
+sc4brixb //
+sc4brkfs // The Big Breakfast (BFM)
+sc4brkfsa //
+sc4brkfsb //
+sc4brkfsc //
+sc4brksp // Break The Spell (Mazooma)
+sc4brkspa //
+sc4broll // Bank Roll (Mazooma)
+sc4brolla //
+sc4brollb //
+sc4brollc //
+sc4bsp // Bully's Star Prize (Bellfruit)
+sc4bspa //
+sc4bspb //
+sc4bspc //
+sc4bspd //
+sc4bspe //
+sc4bspf //
+sc4bspg //
+sc4bugs // Bugs Money (Bellfruit)
+sc4bugsa //
+sc4bugsb //
+sc4bugsc //
+sc4bulcl // Bullseye Club (Bellfruit)
+sc4bulcla //
+sc4bulclb //
+sc4bulclc //
+sc4bulcld //
+sc4bulcle //
+sc4bulclf //
+sc4bulclg //
+sc4bulclh //
+sc4bulcli //
+sc4bulcs //
+sc4bulcsa //
+sc4bulcsb //
+sc4bulcsc //
+sc4bull // Bullseye (Bellfruit)
+sc4bulla //
+sc4bullb //
+sc4bullc //
+sc4butch // Butch Cashidy & The Sundance Quid (Bellfruit)
+sc4butcha //
+sc4butchb //
+sc4butchc //
+sc4butchd //
+sc4butche //
+sc4butchf //
+sc4butchg //
+sc4bwow // Wheel of Wealth (Bellfruit)
+sc4bwowa //
+sc4cabin // Cabin Fever (Mazooma)
+sc4cabina //
+sc4cabinb //
+sc4cabinc //
+sc4cabind //
+sc4cabine //
+sc4cabinf //
+sc4cabing //
+sc4cabinh //
+sc4cabini //
+sc4cabinj //
+sc4cabink //
+sc4cabinl //
+sc4cabinm //
+sc4cad // Cash Adder (Qps)
+sc4cada //
+sc4cadb //
+sc4cadc //
+sc4cadcl // Cash Adder Club (Qps)
+sc4cadcla //
+sc4cadd //
+sc4cade //
+sc4cadf //
+sc4cadg //
+sc4cadh //
+sc4cadi //
+sc4cadj //
+sc4cadk //
+sc4cadl //
+sc4cadm //
+sc4cadn //
+sc4cado //
+sc4cadp //
+sc4cadq //
+sc4canca // Can Can Cash (Mazooma)
+sc4cancaa //
+sc4cancab //
+sc4cancac //
+sc4captn // Captain Cash (Qps)
+sc4captna //
+sc4captnb //
+sc4captnc //
+sc4captnd //
+sc4captne //
+sc4captnf //
+sc4cari // Caribbean Cash (Qps)
+sc4caria //
+sc4carib //
+sc4caric //
+sc4carid //
+sc4carie //
+sc4cariq //
+sc4cariqa //
+sc4cariqb //
+sc4cariqc //
+sc4cariqd //
+sc4cariqe //
+sc4cariqf //
+sc4cariqg //
+sc4carry // Carry On Winning (Bellfruit)
+sc4carrya //
+sc4cashg //
+sc4cashm // Cashanova (Mazooma)
+sc4cashma //
+sc4cashmb //
+sc4cashmc //
+sc4cashmd //
+sc4cashme //
+sc4cashn // Cashanova (Bellfruit)
+sc4casry // Casino Royale (Mazooma)
+sc4casrya //
+sc4casryb //
+sc4casryc //
+sc4casryd //
+sc4casrye //
+sc4casxt // Casino Xtravaganza (Mazooma)
+sc4casxta //
+sc4casxtb //
+sc4casxtc //
+sc4casxtd //
+sc4casxte //
+sc4cbaz // Cash Bazaar Club (Bellfruit)
+sc4cbaza //
+sc4cbazb //
+sc4cbazc //
+sc4cbazd //
+sc4cbaze //
+sc4cbazf //
+sc4cbazg //
+sc4cbazh //
+sc4cbazi //
+sc4cbazj //
+sc4cbazk //
+sc4cblas // Cash Blast (Bellfruit)
+sc4cblasa //
+sc4cburn // Cash 'n' Burn (Qps)
+sc4cburna //
+sc4ccc // Criss Cross Crazy (Bellfruit)
+sc4cccsh // Criss Cross Cash (Mazooma)
+sc4cccsha //
+sc4cccshb //
+sc4cccshc //
+sc4cccshd //
+sc4cccshe //
+sc4cckey // Casino Crazy Keys (Bellfruit)
+sc4cckeya //
+sc4cckeyb //
+sc4cckeyc //
+sc4cckeyd //
+sc4cckeye //
+sc4cckeyf //
+sc4cckeyg //
+sc4cckeyh //
+sc4cckeyi //
+sc4cckeyj //
+sc4cckeyk //
+sc4cckeyl //
+sc4cckeym //
+sc4cckeyn //
+sc4cckeyo //
+sc4cclas // Club Class (Bellfruit)
+sc4cclas0 //
+sc4cclas1 //
+sc4cclas2 //
+sc4cclas3 //
+sc4cclas4 //
+sc4cclasa //
+sc4cclasb //
+sc4cclasc //
+sc4cclasd //
+sc4cclase //
+sc4cclasf //
+sc4cclasg //
+sc4cclash //
+sc4cclasi //
+sc4cclasj //
+sc4cclask //
+sc4cclasl //
+sc4cclasm //
+sc4cclasn //
+sc4cclaso //
+sc4cclasp //
+sc4cclasq //
+sc4cclasr //
+sc4cclass //
+sc4cclast //
+sc4cclasu //
+sc4cclasv //
+sc4cclasw //
+sc4cclasx //
+sc4cclasy //
+sc4cclasz //
+sc4cclim // Crazy Climber (Bellfruit)
+sc4cclima //
+sc4cclimb //
+sc4cclimc //
+sc4cclimd //
+sc4cclime //
+sc4cclimf //
+sc4cclimg //
+sc4cclimh //
+sc4cclimi //
+sc4cclimj //
+sc4cclimk //
+sc4ccliml //
+sc4cclimm //
+sc4cclimn //
+sc4cclimo //
+sc4cclimp //
+sc4cclimq //
+sc4cclimr //
+sc4cclims //
+sc4cclimt //
+sc4cclimu //
+sc4ccogs // Clever Cogs (Qps)
+sc4cconx // Cash Connexion (Mazooma)
+sc4cconxa //
+sc4cconxb //
+sc4cconxc //
+sc4cconxd //
+sc4ccrus // Cash Crusaders (Mazooma)
+sc4ccrusa //
+sc4ccrusb //
+sc4celeb // I'm A Celebrity (Bellfruit)
+sc4celeba //
+sc4celebb //
+sc4celebc //
+sc4celebd //
+sc4cerup // Cash Eruption (Mazooma)
+sc4cexpl // Cash Explosion (Mazooma)
+sc4cexpla //
+sc4cexplb //
+sc4cexplc //
+sc4cexpld //
+sc4cexple //
+sc4cexplf //
+sc4cexplg //
+sc4cfcas // Crazy Fruits Casino (Bellfruit)
+sc4cfcas0 //
+sc4cfcas1 //
+sc4cfcas2 //
+sc4cfcas3 //
+sc4cfcas4 //
+sc4cfcas5 //
+sc4cfcas6 //
+sc4cfcas7 //
+sc4cfcas8 //
+sc4cfcas9 //
+sc4cfcasa //
+sc4cfcasaa //
+sc4cfcasab //
+sc4cfcasac //
+sc4cfcasad //
+sc4cfcasae //
+sc4cfcasaf //
+sc4cfcasag //
+sc4cfcasah //
+sc4cfcasai //
+sc4cfcasaj //
+sc4cfcasak //
+sc4cfcasal //
+sc4cfcasam //
+sc4cfcasb //
+sc4cfcasc //
+sc4cfcasd //
+sc4cfcase //
+sc4cfcasf //
+sc4cfcasg //
+sc4cfcash //
+sc4cfcasi //
+sc4cfcasj //
+sc4cfcask //
+sc4cfcasl //
+sc4cfcasm //
+sc4cfcasn //
+sc4cfcaso //
+sc4cfcasp //
+sc4cfcasq //
+sc4cfcasr //
+sc4cfcass //
+sc4cfcast //
+sc4cfcasu //
+sc4cfcasv //
+sc4cfcasw //
+sc4cfcasx //
+sc4cfcasy //
+sc4cfcasz //
+sc4cfcla // Crazy Fruits Classic (Bellfruit)
+sc4cfclab //
+sc4cfclac //
+sc4cfclad //
+sc4cfclae //
+sc4cfclaf //
+sc4cfclb // Crazy Fruits Club (Bellfruit)
+sc4cfclba //
+sc4cfclbb //
+sc4cfdu // Crazy Fruits Down Under (Bellfruit)
+sc4cfdua //
+sc4cfdub //
+sc4cfduc //
+sc4cfgcl // Crazy Fruits Gold Club (Bellfruit)
+sc4cfgcla //
+sc4cfgclb //
+sc4cfgclc //
+sc4cfqps // Crazy Fruits (Qps)
+sc4cfqpsa //
+sc4cfqpsb //
+sc4cfqpsc //
+sc4cfqpsd //
+sc4cfqpse //
+sc4cfqpsf //
+sc4cfqpsg //
+sc4cfqpsh //
+sc4cfqpsi //
+sc4cfqpsj //
+sc4cfqpsk //
+sc4cfqpsl //
+sc4cfqpsm //
+sc4cfqpsn //
+sc4cfqpso //
+sc4cfqpsp //
+sc4chain // Chain Reaction (Bellfruit)
+sc4chaina //
+sc4chainb //
+sc4chainc //
+sc4chand // Cash In Hand (Bellfruit)
+sc4chanda //
+sc4chandb //
+sc4chandc //
+sc4chavi // Chav It (Bellfruit)
+sc4chavia //
+sc4chavib //
+sc4chavic //
+sc4chavid //
+sc4chavie //
+sc4chavif //
+sc4chavig //
+sc4chavy // Chavy Chase (Mazooma)
+sc4chavya //
+sc4chavyb //
+sc4chavyc //
+sc4chavyd //
+sc4chavye //
+sc4chavyf //
+sc4chavyg //
+sc4chick // Chickendales (Mazooma)
+sc4chub // Chubby Does Vegas (Mazooma)
+sc4chuba //
+sc4chubb //
+sc4cinv // Cash Invaders (Bellfruit)
+sc4cinva //
+sc4cinvb //
+sc4cinvc //
+sc4cinvd //
+sc4cinve //
+sc4cinvf //
+sc4cinvg //
+sc4cinvh //
+sc4cinvi //
+sc4cj // Cool Jewels (Bellfruit)
+sc4cja //
+sc4cjb //
+sc4cjc //
+sc4cjcl // Cool Jewels Club (Bellfruit)
+sc4cjcla //
+sc4cjclb //
+sc4cjclc //
+sc4cjcld //
+sc4cjcle //
+sc4cjclf //
+sc4cjd //
+sc4ckx // Casino King X (Mazooma)
+sc4ckxa //
+sc4ckxb //
+sc4ckxc //
+sc4ckxd //
+sc4ckxe //
+sc4ckxf //
+sc4ckxg //
+sc4cla7 // Classic 7s (Mazooma)
+sc4cla7a //
+sc4cla7b //
+sc4cla7c //
+sc4clash // Cash On The Lash (Mazooma)
+sc4clasha //
+sc4clashb //
+sc4clashc //
+sc4clashd //
+sc4clashe //
+sc4clashf //
+sc4clashg //
+sc4clbmn //
+sc4clbmna //
+sc4clbmnb //
+sc4clbmnc //
+sc4clbtm // Club Temptation (Bellfruit)
+sc4clbtma //
+sc4clbtmb //
+sc4clbtmc //
+sc4clbtmd //
+sc4clbtme //
+sc4clclo // Club Clouseau (Mazooma)
+sc4clown // Clown Around (Bellfruit)
+sc4clowna //
+sc4clownb //
+sc4clownc //
+sc4clownd //
+sc4clowne //
+sc4clownf //
+sc4clowng //
+sc4clucl // Cluedo Club (Mazooma)
+sc4clucla //
+sc4clue // Cluedo (Mazooma)
+sc4cluea //
+sc4clueb //
+sc4cluec //
+sc4clued //
+sc4cluee //
+sc4cluef //
+sc4clueg //
+sc4cmani // Colour Mania (Bellfruit)
+sc4cmania //
+sc4cmon //
+sc4cmona //
+sc4cmonb //
+sc4cmonc //
+sc4cmond //
+sc4cmone //
+sc4cmonf //
+sc4cmong //
+sc4cmonh //
+sc4cmoni //
+sc4cmous // Cash & Mouse (Qps)
+sc4cmousa //
+sc4cmousb //
+sc4cmousc //
+sc4cnfr // Cash 'n' Fruit (Bellfruit)
+sc4cnfra //
+sc4cnfrb //
+sc4cnfrc //
+sc4cnfrd //
+sc4cnfre //
+sc4cnfrf //
+sc4cnfrg //
+sc4cnfrh //
+sc4cnfri //
+sc4colos // Colossus (Bellfruit)
+sc4copsr // Cops 'n' Robbers (Bellfruit)
+sc4copsra //
+sc4copsrb //
+sc4copsrc //
+sc4copsrd //
+sc4copsre //
+sc4copsrf //
+sc4copsrg //
+sc4copsrh //
+sc4copsri //
+sc4corcl // Coronation Street Club (Mazooma)
+sc4corcla //
+sc4coro // Coronation Street (Mazooma)
+sc4coroa //
+sc4coroc //
+sc4corod //
+sc4corof //
+sc4corog //
+sc4coroh //
+sc4coroi //
+sc4coroj //
+sc4corok //
+sc4corol //
+sc4corom //
+sc4coron //
+sc4corotb //
+sc4corotba //
+sc4count // Countdown (Bellfruit)
+sc4counta //
+sc4cr // Cash Raker (Qps)
+sc4cra //
+sc4crb //
+sc4crc //
+sc4crcc // Cops 'n' Robbers Club Classic (Bellfruit)
+sc4crcca //
+sc4crccb //
+sc4crccc //
+sc4crcl // Cash Raker Club (Qps)
+sc4crcla //
+sc4crclb //
+sc4crclc //
+sc4crcld //
+sc4crcle //
+sc4crclf //
+sc4crcp // Cops 'n' Robbers Club Platinum (Bellfruit)
+sc4crcpa //
+sc4crcpc //
+sc4crcpd //
+sc4crcpe //
+sc4crcpf //
+sc4crcpg //
+sc4crcph //
+sc4crcpi //
+sc4crcpj //
+sc4crd //
+sc4cre //
+sc4crf //
+sc4crgc // Cops 'n' Robbers Gold Club (Bellfruit)
+sc4crgca //
+sc4crgcb //
+sc4crgcc //
+sc4crgcd //
+sc4crgce //
+sc4crgcf //
+sc4crgcg //
+sc4crgch //
+sc4crgci //
+sc4crgcj //
+sc4crgck //
+sc4crgcl //
+sc4crgcm //
+sc4crgcn //
+sc4crgco //
+sc4crgcp //
+sc4crgcq //
+sc4crgcr //
+sc4crgcs //
+sc4crgct //
+sc4crgcu //
+sc4crgcv //
+sc4crgcw //
+sc4crnjw // Crown Jewels (Bellfruit)
+sc4crnjwa //
+sc4crsc // Cops 'n' Robbers Safe Cracker (Bellfruit)
+sc4crsca //
+sc4crscb //
+sc4crscc //
+sc4crscd //
+sc4crsce //
+sc4crscf //
+sc4crscg //
+sc4crzcs // Crazy Casino (Bellfruit)
+sc4crzcsa //
+sc4crzcsb //
+sc4crzcsc //
+sc4crzgn // Crazy Gang (Bellfruit)
+sc4crzgn0 //
+sc4crzgn1 //
+sc4crzgn2 //
+sc4crzgn3 //
+sc4crzgn4 //
+sc4crzgn5 //
+sc4crzgn6 //
+sc4crzgn7 //
+sc4crzgn8 //
+sc4crzgna //
+sc4crzgnb //
+sc4crzgnc //
+sc4crzgnd //
+sc4crzgne //
+sc4crzgnf //
+sc4crzgng //
+sc4crzgnh //
+sc4crzgni //
+sc4crzgnj //
+sc4crzgnk //
+sc4crzgnl //
+sc4crzgnm //
+sc4crzgnn //
+sc4crzgno //
+sc4crzgnp //
+sc4crzgnq //
+sc4crzgnr //
+sc4crzgns //
+sc4crzgnt //
+sc4crzgnu //
+sc4crzgnv //
+sc4crzgnw //
+sc4crzgnx //
+sc4crzgny //
+sc4crzgnz //
+sc4crzky // Crazy Keys (Bellfruit)
+sc4crzkya //
+sc4crzkyb //
+sc4crzkyc //
+sc4crzkyd //
+sc4crzkye //
+sc4crzkyf //
+sc4crzkyg //
+sc4crzkyh //
+sc4crzkyi //
+sc4crzkyj //
+sc4crzkyk //
+sc4crzkyl //
+sc4crzkym //
+sc4crzkyn //
+sc4crzkyo //
+sc4crzkyp //
+sc4crzkyq //
+sc4crzkyr //
+sc4crzkys //
+sc4crzkyt //
+sc4crzkyu //
+sc4crzkyv //
+sc4crzkyw //
+sc4crzwl // Crazy World (Mazooma)
+sc4crzwla //
+sc4crzwlb //
+sc4crzwlc //
+sc4crzwld //
+sc4crzwle //
+sc4crzwlf //
+sc4crzwlg //
+sc4ctl // Cop The Lot (Bellfruit)
+sc4ctla //
+sc4ctlb //
+sc4ctlc //
+sc4ctlcl // Cop The Lot Club (Bellfruit)
+sc4ctlcla //
+sc4ctlclb //
+sc4ctlclc //
+sc4ctld //
+sc4ctle //
+sc4cvani // Cashvania (Qps)
+sc4cvania //
+sc4cvanib //
+sc4cvanic //
+sc4cvanid //
+sc4cvanie //
+sc4cvanif //
+sc4cvanig //
+sc4cvanih //
+sc4cvanii //
+sc4cvclb // Cashvania Club (Qps)
+sc4cvclba //
+sc4cvclbb //
+sc4cvclbc //
+sc4cvclbd //
+sc4cvclbe //
+sc4cvclbf //
+sc4cvclbg //
+sc4cyc // Count Yer Cash (Mazooma)
+sc4cyca //
+sc4cycb //
+sc4cycc //
+sc4cyccl // Count Yer Cash Club (Mazooma)
+sc4cyccla //
+sc4cycclb //
+sc4cycclc //
+sc4cycd //
+sc4czfr // Crazy Fruits (Bellfruit)
+sc4czfra //
+sc4czfrb //
+sc4czfrc //
+sc4czfrd //
+sc4czfre //
+sc4czfrf //
+sc4czfrg //
+sc4czfrh //
+sc4czfri //
+sc4czfrj //
+sc4czfrk //
+sc4darw // Dough & Arrow (Qps)
+sc4darwa //
+sc4darwb //
+sc4darwc //
+sc4daylt // Daylight Robbery (Bellfruit)
+sc4daylta //
+sc4dayltb //
+sc4dayltc //
+sc4dayltd //
+sc4daylte //
+sc4dayltf //
+sc4dayltg //
+sc4daylth //
+sc4daylti //
+sc4dayltj //
+sc4dayltk //
+sc4dayltl //
+sc4dayltm //
+sc4db // D & B (Mazooma)
+sc4dbldm // Double Diamond (Qps)
+sc4dblfr // Double Frenzy (Qps)
+sc4dblfra //
+sc4dblfrb //
+sc4dblfrc //
+sc4dblfrd //
+sc4dblfre //
+sc4dcrls // Double Crazy Reels (Mazooma)
+sc4dcrlsa //
+sc4dcrlsb //
+sc4dcrlsc //
+sc4dcrlsd //
+sc4dcrlse //
+sc4dcrlsf //
+sc4dcrlsg //
+sc4dcrlsh //
+sc4dcrlsi //
+sc4dcrlsj //
+sc4dcrlsk //
+sc4ddosh // Doctor Dosh (Bellfruit)
+sc4ddosha //
+sc4ddoshb //
+sc4ddoshc //
+sc4ddoshd //
+sc4ddoshe //
+sc4ddoshf //
+sc4ddoshg //
+sc4ddoshh //
+sc4ddoshi //
+sc4ddoshj //
+sc4ddoshk //
+sc4ddoshl //
+sc4ddoshm //
+sc4ddoshn //
+sc4ddosho //
+sc4deepi // Deep Impact (Mazooma)
+sc4deepia //
+sc4deepib //
+sc4deepid //
+sc4derby // Demolition Derby (Bellfruit)
+sc4derbya //
+sc4derbyb //
+sc4derbyc //
+sc4derbyd //
+sc4derbye //
+sc4dhh // Dough Ho Ho (Bellfruit)
+sc4dhha //
+sc4dhhb //
+sc4dhhc //
+sc4dhhd //
+sc4dhhe //
+sc4disco // Disco Inferno (Mazooma)
+sc4discoa //
+sc4discob //
+sc4discoc //
+sc4discod //
+sc4dmine // Diamond Mine (Bellfruit)
+sc4dminea //
+sc4dmineb //
+sc4dminec //
+sc4dmined //
+sc4dminee //
+sc4dnd // Deal Or No Deal (Bellfruit)
+sc4dnda //
+sc4dndb //
+sc4dndbb // Deal Or No Deal Break The Bank (Bellfruit)
+sc4dndbba //
+sc4dndbbb //
+sc4dndbbc //
+sc4dndbbd //
+sc4dndbbe //
+sc4dndbbf //
+sc4dndbbg //
+sc4dndbbh //
+sc4dndbbi //
+sc4dndbc // Deal Or No Deal Box Clever (Bellfruit)
+sc4dndbca //
+sc4dndbd // Deal Or No Deal The Big Deal (Bellfruit)
+sc4dndbda //
+sc4dndbdb //
+sc4dndbdc //
+sc4dndbdd //
+sc4dndbde //
+sc4dndbe // Deal Or No Deal Beat The Banker (Bellfruit)
+sc4dndbeb //
+sc4dndbec //
+sc4dndbed //
+sc4dndbee //
+sc4dndbef //
+sc4dndbeg //
+sc4dndbeh //
+sc4dndbei //
+sc4dndbej //
+sc4dndbek //
+sc4dndbel //
+sc4dndbem //
+sc4dndben //
+sc4dndbr // Deal Or No Deal The Big Reds (Bellfruit)
+sc4dndbra //
+sc4dndbrb //
+sc4dndbrc //
+sc4dndbrd //
+sc4dndbre //
+sc4dndbrf //
+sc4dndbrg //
+sc4dndc //
+sc4dndcc // Deal Or No Deal The Crazy Chair (Bellfruit)
+sc4dndcca //
+sc4dndccb //
+sc4dndccc //
+sc4dndccd //
+sc4dndcce //
+sc4dndccf //
+sc4dndcl // Deal Or No Deal Club (Bellfruit)
+sc4dndcla //
+sc4dndclb //
+sc4dndclc //
+sc4dndcld //
+sc4dndcle //
+sc4dndclf //
+sc4dndclg //
+sc4dndcs // Deal Or No Deal Classic (Bellfruit)
+sc4dndcsa //
+sc4dndcsb //
+sc4dndcsc //
+sc4dndcsd //
+sc4dndcse //
+sc4dndcw // Deal Or No Deal The Walk Of Wealth Classic (Bellfruit)
+sc4dndcwa //
+sc4dndcwb //
+sc4dndcwc //
+sc4dndd //
+sc4dnddd // Deal Or No Deal Double Deal Or No Deal (Bellfruit)
+sc4dnddda //
+sc4dndddb //
+sc4dndddc //
+sc4dndddd //
+sc4dnddde //
+sc4dndddf //
+sc4dndddg //
+sc4dnddf // Deal Or No Deal The Dream Factory (Bellfruit)
+sc4dnddfa //
+sc4dnddfb //
+sc4dnddfc //
+sc4dnddfd //
+sc4dnddfe //
+sc4dnddw // Deal Or No Deal The Deal Wheel (Bellfruit)
+sc4dnddwa //
+sc4dnddwb //
+sc4dnddwc //
+sc4dnddwd //
+sc4dnddwe //
+sc4dnddwf //
+sc4dnddwg //
+sc4dnde //
+sc4dndf //
+sc4dndg //
+sc4dndh //
+sc4dndhf // Deal Or No Deal Hall Of Fame (Bellfruit)
+sc4dndhfa //
+sc4dndhfb //
+sc4dndhfc //
+sc4dndhfd //
+sc4dndhfe //
+sc4dndhff //
+sc4dndhfg //
+sc4dndhfh //
+sc4dndhfi //
+sc4dndhfj //
+sc4dndhfk //
+sc4dndhfl //
+sc4dndi //
+sc4dndj //
+sc4dndk //
+sc4dndl //
+sc4dndlp // Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit)
+sc4dndlpa //
+sc4dndlpb //
+sc4dndlpc //
+sc4dndlpd //
+sc4dndlpe //
+sc4dndm //
+sc4dndn //
+sc4dndo //
+sc4dndpg // Deal Or No Deal The Perfect Game (Bellfruit)
+sc4dndpga //
+sc4dndpgb //
+sc4dndpgc //
+sc4dndpgd //
+sc4dndpge //
+sc4dndra // Deal Or No Deal Red Alert (Bellfruit)
+sc4dndraa //
+sc4dndrab //
+sc4dndrac //
+sc4dndrad //
+sc4dndrae //
+sc4dndtp // Deal Or No Deal The Power (Bellfruit)
+sc4dndtpa //
+sc4dndtpb //
+sc4dndtpc //
+sc4dndtpd //
+sc4dndtpe //
+sc4dndtpf //
+sc4dndtpg //
+sc4dndtph //
+sc4dndtpi //
+sc4dndtpj //
+sc4dndtpk //
+sc4dndtpl //
+sc4dndtpm //
+sc4dndtr // Deal Or No Deal Think Red (Bellfruit)
+sc4dndtra //
+sc4dndwb // Deal Or No Deal What's In Your Box (Bellfruit)
+sc4dndwba //
+sc4dndwbb //
+sc4dndwbc //
+sc4dndwbd //
+sc4dndwbe //
+sc4dndwbf //
+sc4dndwbg //
+sc4dndww // Deal Or No Deal The Walk Of Wealth (Bellfruit)
+sc4dndwwa //
+sc4dndwwb //
+sc4dndwwc //
+sc4dndwwd //
+sc4dndwwe //
+sc4dndys // Deal Or No Deal It's Your Show (Bellfruit)
+sc4dndysa //
+sc4dndysb //
+sc4dndysc //
+sc4dough // Dough Selecta (Bellfruit)
+sc4dougha //
+sc4druby // Diamonds & Rubys (Bellfruit)
+sc4drubya //
+sc4drubyb //
+sc4drubyc //
+sc4drubyd //
+sc4duckq // Ducks Of Hazzard (Qps)
+sc4duckqa //
+sc4ducks // Ducks Of Hazzard (Mazooma)
+sc4ducksa //
+sc4ducksb //
+sc4ducksc //
+sc4dyna // Dynamite (Bellfruit)
+sc4dynaa //
+sc4eascs //
+sc4eascsa //
+sc4eascsb //
+sc4eascsc //
+sc4eascsd //
+sc4eascse //
+sc4eascsf //
+sc4eascsg //
+sc4eascsh //
+sc4eascsi //
+sc4eascsj //
+sc4eascsk //
+sc4easy // Easy Streak (Bellfruit)
+sc4easya //
+sc4easyb //
+sc4easyc //
+sc4easyd //
+sc4easye //
+sc4easyf //
+sc4emmer // Emmerdale (Mazooma)
+sc4emmera //
+sc4emmerb //
+sc4emmerc //
+sc4evol // Evolution (Qps)
+sc4evola //
+sc4evolb //
+sc4evolc //
+sc4evold //
+sc4evole //
+sc4evolf //
+sc4evolg //
+sc4fastf // Fast 'n' Furious (Mazooma)
+sc4fastfa //
+sc4fastfb //
+sc4fastfc //
+sc4fbcrz // Football Crazy (Bellfruit)
+sc4fbcrza //
+sc4fbcrzb //
+sc4fbcrzc //
+sc4fbcrzd //
+sc4fbcrze //
+sc4fbcrzf //
+sc4fbcrzg //
+sc4fbcrzh //
+sc4fbcrzi //
+sc4fbspn // Fat Boy Spin (Bellfruit)
+sc4fbspna //
+sc4fbspnb //
+sc4fbspnc //
+sc4fcc // Firecracker Club (Bellfruit)
+sc4fcca //
+sc4fccb //
+sc4fccc //
+sc4fd7th // Frankie Dettori's 7th Heaven (Bellfruit)
+sc4fd7tha //
+sc4fd7thb //
+sc4fd7thc //
+sc4fd7thd //
+sc4fd7the //
+sc4fd7thf //
+sc4fd7thg //
+sc4fd7thh //
+sc4fd7thi //
+sc4fevdt // Fever (Dutch)
+sc4fevdta //
+sc4fevdtb //
+sc4fever // Fever (Bellfruit)
+sc4fevera //
+sc4feverb //
+sc4feverc //
+sc4feverd //
+sc4fevere //
+sc4feverf //
+sc4feverg //
+sc4feverh //
+sc4feverk //
+sc4fevnx // Fever The Next (Bellfruit)
+sc4fevnxa //
+sc4ffru // Fast Fruit (Qps)
+sc4ffrua //
+sc4ffrub //
+sc4ffruc //
+sc4ffrud //
+sc4ffrue //
+sc4fguy // Family Guy (Bellfruit)
+sc4fguya //
+sc4fguyb //
+sc4fguyc //
+sc4fguyd //
+sc4fguye //
+sc4fire // Firepower (Mazooma)
+sc4firea //
+sc4fmj // Full Metal Jackpot (Mazooma)
+sc4fmja //
+sc4fmjb //
+sc4fmjc //
+sc4fpitc // Fever Pitch (Bellfruit)
+sc4fpitca //
+sc4fpitcb //
+sc4fpitcc //
+sc4fpitcd //
+sc4fpitce //
+sc4fpitcf //
+sc4fpitcg //
+sc4fpitch //
+sc4fpitci //
+sc4fpitcj //
+sc4fpitck //
+sc4frboo // Frooty Booty (Bellfruit)
+sc4frbooa //
+sc4frboob //
+sc4frbooc //
+sc4frenz // Fruit Frenzy (Bellfruit)
+sc4frenza //
+sc4frenzb //
+sc4frenzc //
+sc4frenzd //
+sc4frenze //
+sc4frsu // Fruits 'n' Suits (Bellfruit)
+sc4frsua //
+sc4frsub //
+sc4frsuc //
+sc4frsud //
+sc4frsue //
+sc4frsuf //
+sc4frsug //
+sc4ftopi // Fruitopia (Qps)
+sc4ftopia //
+sc4ftopib //
+sc4ftopic //
+sc4ftopid //
+sc4ftopie //
+sc4ftopif //
+sc4ftopig //
+sc4ftopih //
+sc4ftopii //
+sc4fullt // Full Throttle (Qps)
+sc4fullta //
+sc4fulltb //
+sc4fulltc //
+sc4fulltd //
+sc4fullte //
+sc4fulltf //
+sc4fulltg //
+sc4fullth //
+sc4fullti //
+sc4fwp // Five Ways Pays (Mazooma)
+sc4fwpa //
+sc4fwpb //
+sc4fwpc //
+sc4fwpcs // Five Ways Pays Casino (Mazooma)
+sc4fwpcsa //
+sc4fwpcsb //
+sc4gag // Grab A Granny (Mazooma)
+sc4gaga //
+sc4gagb //
+sc4gagc //
+sc4gamcs // Game Casino, The (Bellfruit)
+sc4game // Game, The (Bellfruit)
+sc4gball //
+sc4gballa //
+sc4gballb //
+sc4gballc //
+sc4gbcas // Golden Balls (Bellfruit)
+sc4gbcasa //
+sc4gbcasb //
+sc4gbcasc //
+sc4gcb // Grand Blaster Cash (Mazooma)
+sc4gcba //
+sc4gcbb //
+sc4gcbc //
+sc4gcbd //
+sc4gcbe //
+sc4gcbf //
+sc4gcbg //
+sc4gcbh //
+sc4gcbi //
+sc4gcbj //
+sc4gcclb // Grand Casino Club (Bellfruit)
+sc4gcclba //
+sc4gcclbb //
+sc4gcclbc //
+sc4gcclbd //
+sc4gcclbe //
+sc4gcclbf //
+sc4gcclbg //
+sc4gcclbh //
+sc4gcclbi //
+sc4gcclbj //
+sc4gcclbk //
+sc4gcclbl //
+sc4gcclbm //
+sc4gcclbn //
+sc4gcclbo //
+sc4gcclbp //
+sc4gcclbq //
+sc4gd // Gold Digger (Bellfruit)
+sc4gda //
+sc4gdb //
+sc4gdc //
+sc4gdclb // Gold Digger Club (Bellfruit)
+sc4gdclba //
+sc4gdclbb //
+sc4gdclbc //
+sc4gdclbd //
+sc4gdclbe //
+sc4gdclbf //
+sc4gdclbg //
+sc4gdclbh //
+sc4gdclbi //
+sc4gdclbj //
+sc4gdclbk //
+sc4gdd //
+sc4gde //
+sc4gdf //
+sc4gdg //
+sc4gdmz // Gold Digger (Mazooma)
+sc4gdmza //
+sc4gfev // Gold Fever (Mazooma)
+sc4gfeva //
+sc4gfevb //
+sc4ggame // Golden Game
+sc4ggame0 //
+sc4ggame1 //
+sc4ggame2 //
+sc4ggame3 //
+sc4ggame4 //
+sc4ggame5 //
+sc4ggame6 //
+sc4ggame7 //
+sc4ggame8 //
+sc4ggame9 //
+sc4ggamea //
+sc4ggameaa //
+sc4ggameab //
+sc4ggameac //
+sc4ggamead //
+sc4ggameae //
+sc4ggameb //
+sc4ggamec //
+sc4ggamed //
+sc4ggamef //
+sc4ggameg //
+sc4ggamei //
+sc4ggamej //
+sc4ggamek //
+sc4ggamel //
+sc4ggamem //
+sc4ggamen //
+sc4ggamep //
+sc4ggameq //
+sc4ggamer //
+sc4ggames //
+sc4ggamet //
+sc4ggameu //
+sc4ggamev //
+sc4ggamew //
+sc4ggamex //
+sc4ggamey //
+sc4ggamez //
+sc4ggcas // Golden Game Casino (Mazooma)
+sc4ggcasa //
+sc4ggcasb //
+sc4ggcasc //
+sc4ggcl // Golden Grid Club (Qps)
+sc4ggcla //
+sc4ggclb //
+sc4ggclc //
+sc4ggcld //
+sc4ggdlx // Golden Game Deluxe (Mazooma)
+sc4ggdlxa //
+sc4ggdlxb //
+sc4ggdlxc //
+sc4ggdlxd //
+sc4ggdlxe //
+sc4ggdlxf //
+sc4ggdlxg //
+sc4ggg //
+sc4gggb //
+sc4gggc //
+sc4gggd //
+sc4ggge //
+sc4gggf //
+sc4gggg //
+sc4gggh //
+sc4gggi //
+sc4gggk //
+sc4gggl //
+sc4gggm //
+sc4gggn //
+sc4gggo //
+sc4gggp //
+sc4gggq //
+sc4gggr //
+sc4gggs //
+sc4gggtb // Grand Golden Game (Mazooma)
+sc4gggtba //
+sc4ggrid // Golden Grid (Qps)
+sc4ggrida //
+sc4ggridb //
+sc4ggridc //
+sc4ggridd //
+sc4ggride //
+sc4ggridf //
+sc4ggridg //
+sc4ggridh //
+sc4ggridi //
+sc4ggridj //
+sc4ggridk //
+sc4ggridl //
+sc4ggridm //
+sc4ggridn //
+sc4ggtb // Golden Game (Mazooma) Top Box
+sc4ggtba //
+sc4ggtbb //
+sc4ghost // Golden Ghost (Mazooma)
+sc4ghosta //
+sc4ghostb //
+sc4ghostc //
+sc4ghostd //
+sc4ghoste //
+sc4ghostf //
+sc4ghostg //
+sc4ghosth //
+sc4glad // Gladiator (Mazooma)
+sc4glada //
+sc4gladb //
+sc4gladc //
+sc4gladd //
+sc4glade //
+sc4gladf //
+sc4gladg //
+sc4gldcl // Gladiator Club (Mazooma)
+sc4gldcla //
+sc4gnc // Golden Game Club (Mazooma)
+sc4gnca //
+sc4gncb //
+sc4gncc //
+sc4gncd //
+sc4gnce //
+sc4gocas // Golden Oldie Casino (Mazooma)
+sc4gocasa //
+sc4goldo // Golden Oldie (Mazooma)
+sc4goldoa //
+sc4goldob //
+sc4goldoc //
+sc4goldw // Golden Winner (Bellfruit)
+sc4goldwa //
+sc4goldwb //
+sc4goldwc //
+sc4goldwd //
+sc4goldwe //
+sc4goldwf //
+sc4goldwg //
+sc4goud // Goudkoorts (Bellfruit)
+sc4greed // Greedy Gonzalez (Bellfruit)
+sc4greeda //
+sc4gshot // Golden Shot (Qps)
+sc4gshota //
+sc4gshotb //
+sc4gshotc //
+sc4gslam // Grandslam Club (BFM)
+sc4gslama //
+sc4gslamb //
+sc4gslamc //
+sc4gslamd //
+sc4gslame //
+sc4gslamf //
+sc4gunp // Gunpowder Slot (Bellfruit)
+sc4gunpa //
+sc4gunpb //
+sc4gunpc //
+sc4gunpd //
+sc4gunpe //
+sc4gunpf //
+sc4gunpg //
+sc4gx // Golden X (Mazooma)
+sc4gx3 // Golden X Triple (Mazooma)
+sc4gx3a //
+sc4gx3b //
+sc4gx3c //
+sc4gx3d //
+sc4gx3e //
+sc4gx3f //
+sc4gx3g //
+sc4gxa //
+sc4gxb //
+sc4gxcasa // Golden X Casino (Mazooma)
+sc4gxcasb //
+sc4gxcasc //
+sc4gxcasd //
+sc4gxcase //
+sc4gxcasf //
+sc4h6cl // Hot Six Club (Bellfruit)
+sc4h6cla //
+sc4h6clb //
+sc4h6clc //
+sc4hapnt // Happy Notes (Bellfruit)
+sc4hapnta //
+sc4hapntb //
+sc4hapntc //
+sc4hapntd //
+sc4hapnte //
+sc4hdd // Hickory Dickory Dosh (Mazooma)
+sc4hdda //
+sc4hddb //
+sc4hddc //
+sc4hddd //
+sc4hdde //
+sc4hddf //
+sc4heatw // Heatwave (Bellfruit)
+sc4hellb // Hells Bells (Bellfruit)
+sc4hellbb //
+sc4hellbc //
+sc4hellbd //
+sc4hellbe //
+sc4hellbf //
+sc4hellbg //
+sc4hellbh //
+sc4hellbi //
+sc4hellbj //
+sc4helld // Hells Bells (BFG / Eurocoin) (Dutch)
+sc4helrd // Hellraiser (Bellfruit) [Dutch]
+sc4helrs // Hellraiser (Bellfruit)
+sc4hf // Happy Fruits (Bellfruit)
+sc4hfa //
+sc4hfb //
+sc4hfc //
+sc4hfcl // Happy Fruits Club (Bellfruit)
+sc4hfcla //
+sc4hfd //
+sc4hfe //
+sc4hff //
+sc4hfg //
+sc4hi5 // High 5 (Bellfruit)
+sc4hi5a //
+sc4hi5b //
+sc4hi5c //
+sc4hi5d //
+sc4hi5e //
+sc4hi5f //
+sc4hi5g //
+sc4hill // Hill Billionaire (Bellfruit)
+sc4hilla //
+sc4hilo // Hilowatha (Bellfruit)
+sc4hiloa //
+sc4hilob //
+sc4hiloc //
+sc4hilod //
+sc4hiloe //
+sc4hilof //
+sc4hilog //
+sc4hiloh //
+sc4hiloi //
+sc4hiloj //
+sc4hilok //
+sc4himi // High 'n' Mighty (Mazooma)
+sc4himia //
+sc4himib //
+sc4himic //
+sc4himid //
+sc4himie //
+sc4himif //
+sc4himig //
+sc4himih //
+sc4himii //
+sc4hiss // Hissing Quid (Qps)
+sc4hissa //
+sc4hissb //
+sc4hissc //
+sc4hissd //
+sc4hisse //
+sc4hissf //
+sc4hissg //
+sc4hitsh // Hit Shot (Bellfruit)
+sc4hitsha //
+sc4hitshb //
+sc4hitshc //
+sc4hitshd //
+sc4hitshe //
+sc4hntcs //
+sc4hntcsa //
+sc4hntcsb //
+sc4hntcsc //
+sc4hntcsd //
+sc4hntcse //
+sc4hntcsf //
+sc4hntcsg //
+sc4hntcsh //
+sc4hntcsi //
+sc4hntcsj //
+sc4hntcsk //
+sc4hntcsl //
+sc4hntcsm //
+sc4hntcsn //
+sc4hntcso //
+sc4hntcsp //
+sc4hntcsq //
+sc4hntcsr //
+sc4hntcss //
+sc4holyw // Hollywood (Bellfruit)
+sc4holywa //
+sc4holywb //
+sc4holywc //
+sc4hotdg // Hot Dog (Bellfruit)
+sc4hotdga //
+sc4hotdgb //
+sc4hotdgc //
+sc4hotpr // Hot Property (Bellfruit)
+sc4hotpra //
+sc4hotprb //
+sc4hotprc //
+sc4hotprd //
+sc4hotpre //
+sc4hotrd // Hot Rod (Bellfruit)
+sc4hotrda //
+sc4hotsh // Hot Shots (Bellfruit)
+sc4hotsha //
+sc4hotwd // Hot Wad (Bellfruit)
+sc4hotwda //
+sc4hotwdb //
+sc4hotwdc //
+sc4hotwdd //
+sc4hotwde //
+sc4hyde // Hyde & Streak (Mazooma)
+sc4hydea //
+sc4hydeb //
+sc4hydec //
+sc4hyper // Hyperactive (Mazooma)
+sc4hypera //
+sc4ibiza // Red Hot Ibiza (Bellfruit)
+sc4ibizaa //
+sc4ibizab //
+sc4ibizac //
+sc4ibizad //
+sc4ibizae //
+sc4ibizaf //
+sc4ibizag //
+sc4ibizah //
+sc4ibizai //
+sc4ijclb // Italian Job Club (Mazooma)
+sc4ijob // Italian Job (Mazooma)
+sc4ijoba //
+sc4ijobb //
+sc4ijobc //
+sc4ijobd //
+sc4ijobe //
+sc4ijobf //
+sc4ijobg //
+sc4ijobh //
+sc4ijobi //
+sc4ijobj //
+sc4ijobk //
+sc4ijobl //
+sc4ijobm //
+sc4inspn // Inner Spin (Mazooma)
+sc4inspna //
+sc4ivply // 4 Play (Bellfruit)
+sc4jack // Jack The Kipper (Mazooma)
+sc4jacka //
+sc4jackb //
+sc4jackc //
+sc4jackd //
+sc4jacke //
+sc4jackf //
+sc4jackg //
+sc4jbuck // Jungle Bucks (Bellfruit)
+sc4jbucka //
+sc4jbuckb //
+sc4jbuckc //
+sc4jbuckd //
+sc4jiggn // Jiggery Pockery (Nova)
+sc4jiggr // Jiggery Pokery (Mazooma)
+sc4jiggra //
+sc4jiggrb //
+sc4jiggrc //
+sc4jive // Jive Money (Mazooma)
+sc4jivea //
+sc4jiveb //
+sc4jivec //
+sc4jived //
+sc4jjc // Jumping Jack Cash (Mazooma)
+sc4jjca //
+sc4jjcb //
+sc4jjcc //
+sc4jjcd //
+sc4jjce //
+sc4jjcf //
+sc4jjcg //
+sc4jjch //
+sc4jjci //
+sc4jjf // Jumping Jack Flash (Bellfruit)
+sc4jjfa //
+sc4jjfb //
+sc4jjfc //
+sc4jjfd //
+sc4jjfe //
+sc4jjff //
+sc4jjfg //
+sc4jjfh //
+sc4jjfi //
+sc4jjfj //
+sc4jjfk //
+sc4jjfl //
+sc4jjfm //
+sc4jjok // Jackpot Jokers (Bellfruit)
+sc4jjoka //
+sc4jjucl // Jackpot Junction Club (Bellfruit)
+sc4jjucla //
+sc4jjuclb //
+sc4jjuclc //
+sc4jjucld //
+sc4jjucle //
+sc4jjunc // Jackpot Junction (Bellfruit)
+sc4jjunca //
+sc4jjuncb //
+sc4jjuncc //
+sc4jjuncd //
+sc4jjunce //
+sc4jjuncf //
+sc4jjuncg //
+sc4jjunch //
+sc4jjunci //
+sc4jolly // Jolly Jousting (Qps)
+sc4jollya //
+sc4juicy // Juicy Jackpots Club (Bellfruit)
+sc4juicya //
+sc4juicyb //
+sc4juicyc //
+sc4juicyd //
+sc4juicye //
+sc4juicyf //
+sc4juicyg //
+sc4juicyi //
+sc4juicyj //
+sc4kalei // Kaleidoscope (Qps)
+sc4kaleia //
+sc4kaleib //
+sc4kaleic //
+sc4kaleid //
+sc4kaleie //
+sc4kkong // King Kong Cash (Mazooma)
+sc4kkonga //
+sc4kkongb //
+sc4kkongc //
+sc4kkongd //
+sc4kkonge //
+sc4kkongf //
+sc4kkongg //
+sc4kkongh //
+sc4kkongi //
+sc4kkongj //
+sc4knok // Knockout (Mazooma)
+sc4knoka //
+sc4knokb //
+sc4knokc //
+sc4lasv // Las Vegas (Bellfruit)
+sc4lasva //
+sc4ldcas // Line Dancer Casino (Mazooma)
+sc4ldcasa //
+sc4ldcasb //
+sc4ldcasc //
+sc4ldcasd //
+sc4ldcase //
+sc4ldvcl // Little Devil Club (Mazooma)
+sc4ldvl // Little Devil (Mazooma)
+sc4ldvla //
+sc4ldvlb //
+sc4ldvlc //
+sc4leg // Who Wants To Be A Legionnaire (Bellfruit)
+sc4lega //
+sc4legb //
+sc4legc //
+sc4legcb // Who Wants To Be A Legionnaire Club (Bellfruit)
+sc4legcba //
+sc4legcbb //
+sc4legcbc //
+sc4legcbd //
+sc4legcbe //
+sc4legd //
+sc4lege //
+sc4legf //
+sc4legg //
+sc4legh //
+sc4lined // Line Dancer (Mazooma)
+sc4lineda //
+sc4linedb //
+sc4linedc //
+sc4linedd //
+sc4linede //
+sc4linedf //
+sc4linedg //
+sc4linedh //
+sc4linedi //
+sc4lions // Three Lions (Mazooma)
+sc4lionsa //
+sc4lionsb //
+sc4lionsc //
+sc4lionsd //
+sc4lionse //
+sc4lionsf //
+sc4lir // Let It Roll (Bellfruit)
+sc4lira //
+sc4lirb //
+sc4lirc //
+sc4lird //
+sc4lire //
+sc4lirf //
+sc4lirg //
+sc4lirh //
+sc4liri //
+sc4lkbcl // Lock Buster Club (Bellfruit)
+sc4lkbcla //
+sc4lkbclb //
+sc4lkbclc //
+sc4lkbcld //
+sc4lkbcle //
+sc4lkbclf //
+sc4lkbclg //
+sc4lkbclh //
+sc4lkbcli //
+sc4lockb // Lock Buster (Bellfruit)
+sc4lockba //
+sc4lockbb //
+sc4lockbc //
+sc4lockbd //
+sc4lockbe //
+sc4lockbf //
+sc4lockbg //
+sc4lotr2 // Lord Of The Rings - The Two Towers (Bellfruit)
+sc4lotr2a //
+sc4lotr2b //
+sc4lotr2c //
+sc4lotr2d //
+sc4lotr2e //
+sc4lotr2f //
+sc4lotr2g //
+sc4lotr2h //
+sc4lotr2i //
+sc4lotr2j //
+sc4lotr2k //
+sc4lotr2l //
+sc4lotr2m //
+sc4lotrf // Lord Of The Rings - The Fellowship Of The Ring (Bellfruit)
+sc4lotrfa //
+sc4lotrfb //
+sc4lotrfc //
+sc4lotrfd //
+sc4lotrfe //
+sc4lotrff //
+sc4lotrfg //
+sc4lotrr // Lord Of The Rings - Return Of The King (Bellfruit)
+sc4lotrra //
+sc4lotrrb //
+sc4lotrrc //
+sc4lotrrd //
+sc4lotrre //
+sc4lotrt // Lord Of The Rings Triology (Bellfruit)
+sc4lotrta //
+sc4ltr2c // Lord Of The Rings - The Two Towers Club (Bellfruit)
+sc4ltr2ca //
+sc4ltr2cb //
+sc4ltr2cc //
+sc4ltr2cd //
+sc4ltr2ce //
+sc4ltr2cf //
+sc4ltr2cg //
+sc4ltr2ch //
+sc4ltr2ci //
+sc4ltr2cj //
+sc4ltr2ck //
+sc4luck7 // Lucky 7s (Mazooma)
+sc4luck7a //
+sc4luck7b //
+sc4luck7c //
+sc4luck7d //
+sc4luckb // Lucky Balls (Bellfruit)
+sc4luckb0 //
+sc4luckb1 //
+sc4luckb2 //
+sc4luckb3 //
+sc4luckb4 //
+sc4luckba //
+sc4luckbb //
+sc4luckbc //
+sc4luckbd //
+sc4luckbe //
+sc4luckbf //
+sc4luckbg //
+sc4luckbh //
+sc4luckbi //
+sc4luckbj //
+sc4luckbk //
+sc4luckbl //
+sc4luckbm //
+sc4luckbn //
+sc4luckbo //
+sc4luckbp //
+sc4luckbq //
+sc4luckbr //
+sc4luckbs //
+sc4luckbt //
+sc4luckbu //
+sc4luckbv //
+sc4luckbw //
+sc4luckbx //
+sc4luckby //
+sc4luckbz //
+sc4m2m // Money To Money (Mazooma)
+sc4m2ma //
+sc4magci // Magic Circle (Qps)
+sc4magcia //
+sc4magcib //
+sc4magcic //
+sc4magcid //
+sc4magcie //
+sc4magcif //
+sc4magcig //
+sc4magcih //
+sc4magcii //
+sc4magcij //
+sc4magcik //
+sc4magcil //
+sc4magcim //
+sc4magcin //
+sc4magcio //
+sc4magcip //
+sc4magciq //
+sc4magcir //
+sc4magcis //
+sc4magcit //
+sc4magciu //
+sc4magic // Magic Poundabout (Qps)
+sc4magica //
+sc4magicb //
+sc4magicc //
+sc4manic // Manic Miner (Bellfruit)
+sc4manica //
+sc4manicb //
+sc4manicc //
+sc4manicd //
+sc4manice //
+sc4manicf //
+sc4manicg //
+sc4maxcc // Maximus Cash Club (Mazooma)
+sc4maxcca //
+sc4maxccb //
+sc4maxccc //
+sc4maxim // Maximus Cash (Mazooma)
+sc4maxima //
+sc4maximb //
+sc4maximc //
+sc4maximd //
+sc4maxime //
+sc4maximf //
+sc4maximg //
+sc4mbags // Money Bags (Bellfruit)
+sc4mbagsa //
+sc4mbagsb //
+sc4mbagsc //
+sc4mcas // Monopoly Casino (Mazooma)
+sc4mcas0 //
+sc4mcas1 //
+sc4mcas2 //
+sc4mcas3 //
+sc4mcas4 //
+sc4mcask //
+sc4mcasm //
+sc4mcasn //
+sc4mcaso //
+sc4mcasp //
+sc4mcasq //
+sc4mcasr //
+sc4mcass //
+sc4mcast //
+sc4mcasu //
+sc4mcasv //
+sc4mcasw //
+sc4mcasx //
+sc4mcasy //
+sc4mcasz //
+sc4mclb // Monopoly Club (Mazooma)
+sc4mclba //
+sc4mclbb //
+sc4mclbc //
+sc4mclbd //
+sc4mclbe //
+sc4mdm // Monopoly Double Money (Bellfruit)
+sc4mdma //
+sc4mgr // Money Go Round (Bellfruit)
+sc4mgra //
+sc4mgrb //
+sc4mgrc //
+sc4mgrd //
+sc4mgre //
+sc4mgrf //
+sc4mgrg //
+sc4mgrh //
+sc4mgri //
+sc4mgrj //
+sc4mgrk //
+sc4mgrl //
+sc4mgrm //
+sc4mhn // Monopoly Here & Now (Mazooma)
+sc4mhna //
+sc4mhp // Monopoly Hot Property (Bellfruit)
+sc4mhpa //
+sc4mhpb //
+sc4mhpc //
+sc4mhpd //
+sc4mhpe //
+sc4mhpf //
+sc4mhpg //
+sc4mhph //
+sc4mhpi //
+sc4mhpj //
+sc4mhpk //
+sc4mhpl //
+sc4mhpm //
+sc4mhpn //
+sc4mhpo //
+sc4milja // Miljonairs Arcade (Bellfruit)
+sc4miljo // Miljonairs (Bellfruit)
+sc4milro //
+sc4mmad // Money Madness (Mazooma)
+sc4mmada //
+sc4mmadb //
+sc4mmadc //
+sc4mmadd //
+sc4mmade //
+sc4mmadf //
+sc4mmadg //
+sc4mmb // Monopoly Money Bags (Bellfruit)
+sc4mmba //
+sc4mmm // Mental Money Monsters (Mazooma)
+sc4mmma //
+sc4mmmb //
+sc4mmmc //
+sc4mmmd //
+sc4mmme //
+sc4mmmf //
+sc4mmmg //
+sc4mondx //
+sc4mondxa //
+sc4mondxb //
+sc4mondxc //
+sc4mondxd //
+sc4mondxe //
+sc4mondxf //
+sc4mondxg //
+sc4mono5 //
+sc4mono5a //
+sc4monoa //
+sc4monoaa //
+sc4monoab //
+sc4monoac //
+sc4monoad //
+sc4monoae //
+sc4monoaf //
+sc4monoag //
+sc4monoah //
+sc4monoai //
+sc4monoaj //
+sc4monoak //
+sc4monoal //
+sc4monoam //
+sc4monoan //
+sc4monoao //
+sc4monoap //
+sc4monoaq //
+sc4monob // Monopoly (Bellfruit)
+sc4monoba //
+sc4monobb //
+sc4monobc //
+sc4monobd //
+sc4monobe //
+sc4monobf //
+sc4monobg //
+sc4monobh //
+sc4monobi //
+sc4monobj //
+sc4monobk //
+sc4monobl //
+sc4monobm //
+sc4monod // Monopoly (Mazooma) [German]
+sc4monoda //
+sc4monodb //
+sc4monog //
+sc4monoga //
+sc4monop // Monopoly (Mazooma)
+sc4monopa //
+sc4monot //
+sc4monota //
+sc4monotb //
+sc4monotc //
+sc4monsp // Money Spinner (Bellfruit)
+sc4mont // Montego Pay (Qps)
+sc4monta //
+sc4montb //
+sc4montc //
+sc4montd //
+sc4monte //
+sc4montf //
+sc4montg //
+sc4month //
+sc4monti //
+sc4motor // Motorway Mania (Bellfruit)
+sc4motora //
+sc4motorb //
+sc4motorc //
+sc4motord //
+sc4motore //
+sc4motorf //
+sc4motorg //
+sc4motorh //
+sc4mou // Move On Up (Qps)
+sc4moua //
+sc4moub //
+sc4mowow // Monopoly Wheel Of Wealth (Mazooma)
+sc4mowowa //
+sc4mowowb //
+sc4mowowc //
+sc4mr2r // Monopoly Road To Riches (Mazooma)
+sc4mr2ra //
+sc4mr2rb //
+sc4mr2rc //
+sc4mr2rd //
+sc4mr2re //
+sc4mrh // Monopoly Red Hot (Mazooma)
+sc4mrha //
+sc4mrhb //
+sc4mrhc //
+sc4mrhd //
+sc4mrhe //
+sc4msclb // Money Spinner Club (Bellfruit)
+sc4msclba //
+sc4msclbb //
+sc4msclbc //
+sc4msclbd //
+sc4msclbe //
+sc4msclbf //
+sc4msclbg //
+sc4mspid // Money Spider (Bellfruit)
+sc4mspida //
+sc4mspidb //
+sc4mspidc //
+sc4mspidd //
+sc4mspide //
+sc4mspidf //
+sc4mspidg //
+sc4mspidh //
+sc4mspidi //
+sc4mspidj //
+sc4mspidk //
+sc4mspidl //
+sc4mspidm //
+sc4mtb // Money To Burn (Bellfruit)
+sc4mtba //
+sc4mtbb //
+sc4mtbc //
+sc4mtbcl // Money To Burn Club (Bellfruit)
+sc4mtbcla //
+sc4mtbclb //
+sc4mtbclc //
+sc4mtbcld //
+sc4mtbcle //
+sc4mtbclf //
+sc4mtbclg //
+sc4mtbclh //
+sc4mtbcli //
+sc4mtbclj //
+sc4mtbclk //
+sc4mtbcll //
+sc4mtbclm //
+sc4mtbcln //
+sc4mtbclo //
+sc4mtbd //
+sc4mtbe //
+sc4mtbf //
+sc4mtbg //
+sc4mtbh //
+sc4mtbi //
+sc4mtbj //
+sc4mwwtb //
+sc4mwwtba //
+sc4mwwtbb //
+sc4mwwtbc //
+sc4mwwtbd //
+sc4nmare // A Nightmare On Elm Street (Bellfruit)
+sc4nmarea //
+sc4nmareb //
+sc4nmarec //
+sc4nmtj // Never Mind The Jackpots (Mazooma)
+sc4nmtja //
+sc4nmtjb //
+sc4nmtjc //
+sc4nmtjd //
+sc4nudit // Nudge It (Mazooma)
+sc4nudita //
+sc4nuditb //
+sc4nunsm // Nuns 'n' Roses (Mazooma)
+sc4nunsmb //
+sc4nunsmc //
+sc4nunsmd //
+sc4nunsme //
+sc4nunsmf //
+sc4nunsmg //
+sc4nunsmh //
+sc4nunsmi //
+sc4nunsmj //
+sc4onup // On The Up (Mazooma)
+sc4onupa //
+sc4opses // Open Sesame (Bellfruit)
+sc4opsesa //
+sc4outlw // Outlaw (Bellfruit)
+sc4outlwa //
+sc4outlwb //
+sc4outlwc //
+sc4oyf // Off Your Face (Bellfruit)
+sc4oyfa //
+sc4paccl // Pac Man Club (Mazooma)
+sc4paccla //
+sc4pacclb //
+sc4pacclc //
+sc4paccs // Pac Man Casino (Mazooma)
+sc4paccsa //
+sc4paccsb //
+sc4paccsc //
+sc4paccsd //
+sc4paccse //
+sc4paccsf //
+sc4paccsg //
+sc4paccsh //
+sc4paccsi //
+sc4paccsj //
+sc4paccsk //
+sc4paccsl //
+sc4pacmn // Pac Man (Mazooma)
+sc4pacmna //
+sc4pacmnb //
+sc4pacpl // Pac Man Plus (Mazooma)
+sc4pacpla //
+sc4pacplb //
+sc4pacplc //
+sc4pacpld //
+sc4pacple //
+sc4pacplf //
+sc4pacplg //
+sc4pacplh //
+sc4pacqp //
+sc4pacqpa //
+sc4pacqpb //
+sc4party // Party Time (Nova)
+sc4paytm // Pay Time (Bellfruit)
+sc4pen1 // Public Enemy No1 (Bellfruit)
+sc4pen1a //
+sc4pen1b //
+sc4pen1c //
+sc4pen1d //
+sc4pglcl // Pharaoh's Gold Club (Bellfruit)
+sc4pglcla //
+sc4pglclb //
+sc4pglclc //
+sc4pglcld //
+sc4pglcle //
+sc4pglclf //
+sc4pglclg //
+sc4pglclh //
+sc4pglcs //
+sc4pglcsa //
+sc4pglcsb //
+sc4pgold // Pharaoh's Gold (Bellfruit)
+sc4pgolda //
+sc4pgoldb //
+sc4pgoldc //
+sc4pgoldd //
+sc4pgoldf //
+sc4pipe // Piping Hot (Mazooma)
+sc4pipea //
+sc4pir // The Prize Is Right (Bellfruit)
+sc4pira //
+sc4pirb //
+sc4pirc //
+sc4pird //
+sc4pire //
+sc4pirf //
+sc4pirg //
+sc4plumb // Plumb Crazy Club (Qps)
+sc4plumba //
+sc4plumbb //
+sc4plumbc //
+sc4plumbd //
+sc4plumbe //
+sc4pmani // Pac Mania (Mazooma)
+sc4pmania //
+sc4po8 // Pieces Of Eight (Qps)
+sc4po8a //
+sc4po8b //
+sc4po8c //
+sc4po8d //
+sc4po8e //
+sc4po8f //
+sc4po8g //
+sc4po8h //
+sc4po8i //
+sc4po8j //
+sc4po8k //
+sc4po8l //
+sc4po8m //
+sc4po8n //
+sc4pog // Pots Of Gold (Bellfruit)
+sc4poga //
+sc4pogb //
+sc4pogbl // Pots Of Gold Club (Bellfruit)
+sc4pogbla //
+sc4pogblb //
+sc4pogblc //
+sc4pogbld //
+sc4pogble //
+sc4pogc //
+sc4pogd //
+sc4poge //
+sc4pogf //
+sc4pogg //
+sc4pogh //
+sc4pogi //
+sc4polem // Pole Position (Mazooma)
+sc4polema //
+sc4polemb //
+sc4polemc //
+sc4polemd //
+sc4polen // Pole Position (Nova)
+sc4polic // Police Squid (Qps)
+sc4polica //
+sc4policb //
+sc4policc //
+sc4pony // Pony Express (Bellfruit)
+sc4ponya //
+sc4ponyb //
+sc4ponyc //
+sc4ponyd //
+sc4ponye //
+sc4popey // Popeye (Mazooma)
+sc4popeya //
+sc4popeyb //
+sc4popeyc //
+sc4popeyd //
+sc4popeye //
+sc4potp // Pick Of The Pack (Bellfruit)
+sc4potpa //
+sc4potsh // Pot Shot (Qps)
+sc4potsha //
+sc4pp // Pink Panther (Mazooma)
+sc4ppa //
+sc4ppb //
+sc4ppc //
+sc4ppclb // Pink Panther Club (Qps)
+sc4ppclba //
+sc4ppclbb //
+sc4ppclbc //
+sc4ppcr // Pink Panther Clouseau's Revenge (Mazooma)
+sc4ppcra //
+sc4ppcrb //
+sc4ppcrd //
+sc4ppcre //
+sc4ppcrf //
+sc4ppcrg //
+sc4ppcrh //
+sc4ppcri //
+sc4ppcrj //
+sc4ppcrtb //
+sc4ppctc // Pink Panther Crack The Code (Bellfruit)
+sc4ppctca //
+sc4ppctcb //
+sc4ppctcc //
+sc4ppctcd //
+sc4ppctce //
+sc4ppctcf //
+sc4ppctcg //
+sc4ppd //
+sc4ppdym // Pink Panther Double Your Money (Mazooma)
+sc4ppdymb //
+sc4ppdymc //
+sc4ppdymd //
+sc4ppdymf //
+sc4ppdymg //
+sc4ppdymh //
+sc4ppdymi //
+sc4ppdymtb //
+sc4ppdymtba //
+sc4ppsag // Pink Panther Strikes Again (Mazooma)
+sc4ppsaga //
+sc4ppsagb //
+sc4ppsagc //
+sc4ppsagd //
+sc4ppsage //
+sc4ppsagf //
+sc4ppsagg //
+sc4ppsagh //
+sc4ppsagi //
+sc4pstat // Paystation (Qps)
+sc4pstata //
+sc4pstatb //
+sc4pstatc //
+sc4pstatd //
+sc4pstate //
+sc4pstatf //
+sc4pstatg //
+sc4pstath //
+sc4pstati //
+sc4pstatj //
+sc4pstatm //
+sc4pstatn //
+sc4pstato //
+sc4pstatp //
+sc4pstatq //
+sc4pwcrz // Power Crazy (Bellfruit)
+sc4pwcrza //
+sc4pwcrzb //
+sc4pwcrzc //
+sc4pwcrzd //
+sc4pwcrze //
+sc4pwcrzf //
+sc4pwcrzg //
+sc4pwcrzh //
+sc4pwcrzi //
+sc4pwrbl // Powerball (Bellfruit)
+sc4pwrbla //
+sc4pwrbq // Powerball (Qps)
+sc4pwrbqa //
+sc4pwrpl // Power Play (Mazooma)
+sc4pwrpla //
+sc4pwrplb //
+sc4pwrplc //
+sc4pwrsg // Power Surge (Qps)
+sc4pwrsga //
+sc4pwrsgb //
+sc4pwrsgc //
+sc4qmodo // Quazzi Mo' Dough (Qps)
+sc4qmodoa //
+sc4qmodob //
+sc4qmodoc //
+sc4qmodod //
+sc4quart // Quaterback (Mazooma)
+sc4quarta //
+sc4quartb //
+sc4quartc //
+sc4quartd //
+sc4quarte //
+sc4quartf //
+sc4quartg //
+sc4quarth //
+sc4quarti //
+sc4quartj //
+sc4quartk //
+sc4quartl //
+sc4quartm //
+sc4quidr // Quid Rock (Qps)
+sc4quidra //
+sc4quidrb //
+sc4quidrc //
+sc4quidv // Quid Vicious (Mazooma)
+sc4quidva //
+sc4quidvb //
+sc4quidvc //
+sc4r2r // Reel To Reel (Mazooma)
+sc4r2ra //
+sc4r2rb //
+sc4r2rc //
+sc4r66 // Route 66 (Mazooma)
+sc4rbank // Royle Banker (Bellfruit)
+sc4rbanka //
+sc4rbankb //
+sc4rbankc //
+sc4rdrag // Red Dragon (Qps)
+sc4rdraga //
+sc4rdragc //
+sc4rdragf //
+sc4rdrcl // Red Dragon Club (Qps)
+sc4rdrcla //
+sc4rdrclb //
+sc4redad // Red Alert (Bellfruit) [Dutch]
+sc4redada //
+sc4redsq // Red Square (Mazooma)
+sc4redsqa //
+sc4redsqb //
+sc4redsqc //
+sc4relcz // Reely Crazy (Bellfruit)
+sc4relcza //
+sc4relczb //
+sc4relczc //
+sc4revo // Revolver (Mazooma)
+sc4revoa //
+sc4revob //
+sc4revoc //
+sc4revod //
+sc4revoe //
+sc4rhx // Red Hot X (Mazooma)
+sc4rhxa //
+sc4rhxb //
+sc4rhxc //
+sc4rhxcl // Red Hot X Club (Mazooma)
+sc4rhxcla //
+sc4rhxclb //
+sc4rhxclc //
+sc4rhxcs // Red Hot X Casino (Mazooma)
+sc4rhxcsa //
+sc4rhxcsb //
+sc4rhxcsc //
+sc4rhxcsd //
+sc4rhxcse //
+sc4rhxd //
+sc4rhxe //
+sc4rhxf //
+sc4rhxg //
+sc4rhxh //
+sc4rhxi //
+sc4rhxj //
+sc4rhxk //
+sc4rhxl //
+sc4rhxm //
+sc4rhxn //
+sc4rhxo //
+sc4rhxp //
+sc4rhxq //
+sc4rhxr //
+sc4rhxs //
+sc4rhxt //
+sc4rhxu //
+sc4rhxv //
+sc4rhxw //
+sc4rich // Rich Geezer (Bellfruit)
+sc4richa //
+sc4richb //
+sc4richc //
+sc4richd //
+sc4riche //
+sc4richf //
+sc4richg //
+sc4richh //
+sc4richi //
+sc4richj //
+sc4richk //
+sc4richl //
+sc4rio // Rio Grande (Bellfruit)
+sc4rmo // Roll Me Over (Bellfruit)
+sc4rmoa //
+sc4rogds // Rogan Dosh (Qps)
+sc4rogdsa //
+sc4rogdsb //
+sc4rogdsc //
+sc4rogdsd //
+sc4rogdse //
+sc4rogdsf //
+sc4rogdsg //
+sc4roksc // Rocket Science (Qps)
+sc4roksca //
+sc4rokscb //
+sc4rokscc //
+sc4rollo // Rollover Jackpot (Mazooma)
+sc4rolloa //
+sc4rollob //
+sc4rolloc //
+sc4rollod //
+sc4rolloe //
+sc4rollof //
+sc4rosts // Ronnie O'Sullivan's Tournament Snooker (Bellfruit)
+sc4rostsa //
+sc4rostsb //
+sc4rostsc //
+sc4rostsd //
+sc4rostse //
+sc4rostsf //
+sc4rostsg //
+sc4rotc // Return Of The Count (Mazooma)
+sc4rotca //
+sc4rotcb //
+sc4rotcc //
+sc4rotcd //
+sc4rovrt // Rovers Return (Mazooma)
+sc4rovrta //
+sc4rovrtb //
+sc4rovrtc //
+sc4rovrtd //
+sc4rovrte //
+sc4royle // Royle Family (Bellfruit)
+sc4roylea //
+sc4royleb //
+sc4roylec //
+sc4royled //
+sc4roylee //
+sc4roylef //
+sc4royleg //
+sc4royleh //
+sc4roylei //
+sc4roylej //
+sc4roylek //
+sc4roylel //
+sc4roylem //
+sc4rt // Rolling Thunder (Mazooma)
+sc4rta //
+sc4rtb //
+sc4rtc //
+sc4rtclb // Rolling Thunder Club (Mazooma)
+sc4rtclba //
+sc4rtd //
+sc4rttt // Rise To The Top (Mazooma)
+sc4rttta //
+sc4rtttb //
+sc4rtttc //
+sc4rtttd //
+sc4rttte //
+sc4rvl // Revolution (Bellfruit)
+sc4rvlnx // Revoluion The Next (Bellfruit)
+sc4s16 // Section 16 (Mazooma)
+sc4s16a //
+sc4s2k // Sinbad 2000 (Nova)
+sc4s6c // Super 6 Club (Bellfruit)
+sc4s6ca //
+sc4s6cb //
+sc4s6cc //
+sc4s6cd //
+sc4s6ce //
+sc4s6cf //
+sc4sace // Space Ace (Qps)
+sc4sacea //
+sc4sahed // Streaks Ahead (Qps)
+sc4saheda //
+sc4sahedb //
+sc4sbust // Space Buster (Qps)
+sc4sbusta //
+sc4sdr // Super Diamonds & Rubies (Bellfruit)
+sc4sdra //
+sc4sdrb //
+sc4sdrc //
+sc4sf // Street Fighter (Mazooma)
+sc4sfa //
+sc4sfb //
+sc4sfc //
+sc4sfd //
+sc4showt // Showtime (Bellfruit)
+sc4showta //
+sc4showtb //
+sc4showtc //
+sc4showtd //
+sc4showte //
+sc4showtf //
+sc4sidsp // Side Splitter (Mazooma)
+sc4sidspa //
+sc4sidspb //
+sc4sidspc //
+sc4sirpz // Sir Prize (Mazooma)
+sc4sirpza //
+sc4sirpzb //
+sc4slad // Snakes & Ladders (Bellfruit)
+sc4slada //
+sc4sladb //
+sc4sladc //
+sc4sladd //
+sc4slade //
+sc4sladf //
+sc4sladg //
+sc4sladh //
+sc4slc // Snakes & Ladders Club (Bellfruit)
+sc4slca //
+sc4slcb //
+sc4slcc //
+sc4slcd //
+sc4slce //
+sc4slcf //
+sc4slcg //
+sc4slch //
+sc4slci //
+sc4slcj //
+sc4slck //
+sc4slcl //
+sc4slcm //
+sc4slcn //
+sc4slih // Some Like It Hot (Mazooma)
+sc4sliha //
+sc4slihb //
+sc4slihc //
+sc4slihd //
+sc4slihe //
+sc4smk7 // Smoking 7's (Bellfruit)
+sc4solgl // Solid Gold (Bellfruit)
+sc4solgla //
+sc4solglb //
+sc4solglc //
+sc4spark // South Park (BFM)
+sc4sparka //
+sc4sparkb //
+sc4sparkc //
+sc4sparkd //
+sc4sparke //
+sc4spice // Spice It Up (Bellfruit)
+sc4spicea //
+sc4spiceb //
+sc4spicec //
+sc4splgb // Splash & Grab (Mazooma)
+sc4splgba //
+sc4spred // Spread Your Bet (Mazooma)
+sc4sprng // Highly Sprung (Mazooma)
+sc4srr // Snake Rattle 'n' Roll (Bellfruit)
+sc4srra //
+sc4srrb //
+sc4srrc //
+sc4srrca // Shake Rattle Roll Casino (Mazooma)
+sc4srrcaa //
+sc4srrcab //
+sc4srrcac //
+sc4srrcad //
+sc4srrcae //
+sc4srrmz // Shake Rattle Roll (Mazooma)
+sc4srrmza //
+sc4srrmzb //
+sc4srrmzc //
+sc4srrmzd //
+sc4srrmze //
+sc4srrmzf //
+sc4srrmzg //
+sc4srrmzh //
+sc4srrmzi //
+sc4srrmzj //
+sc4srrmzk //
+sc4srrmzl //
+sc4srrmzm //
+sc4sslam // Super Slam (Bellfruit)
+sc4sslama //
+sc4sstep // Super Step (Qps)
+sc4sstepa //
+sc4sstepb //
+sc4stag // Stag Night (Bellfruit)
+sc4staga //
+sc4starp // Starprize (Bellfruit)
+sc4starpa //
+sc4starpb //
+sc4starpc //
+sc4starpd //
+sc4starpe //
+sc4starpf //
+sc4starpg //
+sc4starph //
+sc4starpi //
+sc4starpj //
+sc4starpk //
+sc4stirc // Stir Crazy (Mazooma)
+sc4stirca //
+sc4stircb //
+sc4stircc //
+sc4stircd //
+sc4stirce //
+sc4stircf //
+sc4stircg //
+sc4stirch //
+sc4stirci //
+sc4stircj //
+sc4stl // Sky's The Limit, The (Bellfruit)
+sc4stla //
+sc4stlb //
+sc4stlc //
+sc4stld //
+sc4stle //
+sc4stlf //
+sc4stlg //
+sc4strbr // Stars 'n' Bars (Bellfruit)
+sc4strbra //
+sc4strbrb //
+sc4strbrc //
+sc4strbrd //
+sc4strk // Streak, The (Mazooma)
+sc4strka //
+sc4strkb //
+sc4strkc //
+sc4strkd //
+sc4strke //
+sc4strkf //
+sc4strkg //
+sc4strkh //
+sc4strki //
+sc4strkj //
+sc4strkk //
+sc4strx // Strike X (Bellfruit)
+sc4strxa //
+sc4strxb //
+sc4strxc //
+sc4sumit // Summit Up (Mazooma)
+sc4sumita //
+sc4sumitb //
+sc4sumitc //
+sc4supst // Super Streax (Mazooma)
+sc4supsta //
+sc4sus // Suits U Sir (Qps)
+sc4susc //
+sc4suscl // Suits U Sir Club (Qps)
+sc4suscla //
+sc4susclb //
+sc4susclc //
+sc4susf //
+sc4susg //
+sc4sush //
+sc4susi //
+sc4susj //
+sc4susk //
+sc4swbak // Switch Back (Mazooma)
+sc4swbaka //
+sc4swbakb //
+sc4swbakc //
+sc4swywm // Spin When Your Winning (Mazooma)
+sc4swywma //
+sc4swywmb //
+sc4swywmc //
+sc4swywmd //
+sc4swywme //
+sc4swywmf //
+sc4swywmg //
+sc4taekw // Tae Kwon Dough (Qps)
+sc4taekwa //
+sc4taekwb //
+sc4taekwc //
+sc4taekwd //
+sc4taekwe //
+sc4taekwf //
+sc4taekwg //
+sc4taekwh //
+sc4taekwi //
+sc4taekwj //
+sc4takcl // Take Note Club (Bellfruit)
+sc4takcla //
+sc4takclb //
+sc4takclc //
+sc4takcld //
+sc4takcle //
+sc4takclf //
+sc4takclg //
+sc4takclh //
+sc4takcli //
+sc4takclj //
+sc4taknt // Take Note (Bellfruit)
+sc4taknta //
+sc4tbana // Top Banana (Bellfruit)
+sc4tbanaa //
+sc4tbox // Top Box (Mazooma)
+sc4tempt // Temptation (Bellfruit)
+sc4tempta //
+sc4temptb //
+sc4temptc //
+sc4temptd //
+sc4tempte //
+sc4temptf //
+sc4temptg //
+sc4tetri // Tetris (Mazooma)
+sc4tetria //
+sc4tetrib //
+sc4tetric //
+sc4tetrid //
+sc4tetrie //
+sc4tetrif //
+sc4tetrig //
+sc4tetrih //
+sc4tetrii //
+sc4tetrij //
+sc4tetrik //
+sc4tfclb // Tutti Frutti Club (Bellfruit)
+sc4tfclba //
+sc4tgear // Top Gear (Mazooma)
+sc4tgeara //
+sc4tgearb //
+sc4tgearc //
+sc4tgeard //
+sc4tgeare //
+sc4tgearf //
+sc4tgearg //
+sc4tic2 // Tic Tac Two (Mazooma)
+sc4tic2a //
+sc4tic2b //
+sc4tic2c //
+sc4tic2d //
+sc4tic2e //
+sc4tic2f //
+sc4tic2g //
+sc4tic2h //
+sc4tic2i //
+sc4tic2j //
+sc4tic2k //
+sc4tic2l //
+sc4tic2m //
+sc4tic2n //
+sc4tic2o //
+sc4ticlb // Treasure Island Club (Bellfruit)
+sc4ticlba //
+sc4ticlbb //
+sc4ticlbc //
+sc4ticlbd //
+sc4tload // Top Loader (Mazooma)
+sc4tpsht // Top Of The Shots (Mazooma)
+sc4tpshta //
+sc4tpshtb //
+sc4tpshtc //
+sc4tpshtd //
+sc4tpshte //
+sc4tpshtf //
+sc4tpshtg //
+sc4trail // Trailblazer (Mazooma)
+sc4traila //
+sc4trailb //
+sc4trailc //
+sc4tri7 // Triple 7's (Bellfruit)
+sc4tri7a //
+sc4tri7b //
+sc4tri7c //
+sc4tri7d //
+sc4tri7e //
+sc4tri7f //
+sc4tri7g //
+sc4tri7h //
+sc4tri7i //
+sc4tri7j //
+sc4tri7k //
+sc4tri7l //
+sc4tri7m //
+sc4tri7n //
+sc4tri7o //
+sc4tri7p //
+sc4tri7q //
+sc4tri7r //
+sc4tri7s //
+sc4tri7t //
+sc4tri7u //
+sc4tri7v //
+sc4tri7w //
+sc4tridn // Trident, The (Mazooma)
+sc4tridna //
+sc4trist // Triple Streak (Mazooma)
+sc4trista //
+sc4tristb //
+sc4tristc //
+sc4tristd //
+sc4triste //
+sc4tristf //
+sc4tristg //
+sc4tristh //
+sc4tristi //
+sc4tristj //
+sc4tristk //
+sc4tristl //
+sc4tristm //
+sc4tristn //
+sc4tristo //
+sc4tristp //
+sc4tristq //
+sc4tristr //
+sc4trists //
+sc4tristt //
+sc4tristu //
+sc4tristv //
+sc4tristw //
+sc4tristx //
+sc4tristy //
+sc4tst // Scorpion 4 Test Rig (Bellfruit)
+sc4ttomb // Treasure Tomb (Bellfruit)
+sc4ttomba //
+sc4ttombb //
+sc4ttombc //
+sc4ttp // Take The Piste (Mazooma)
+sc4ttpa //
+sc4ttpb //
+sc4ttpc //
+sc4ttpd //
+sc4ttpe //
+sc4ttpf //
+sc4ttpie // Take The Piece (Bellfruit)
+sc4ttpiea //
+sc4ttpieb //
+sc4ttpiec //
+sc4ttpied //
+sc4ttpiee //
+sc4ttpief //
+sc4ttpieg //
+sc4tub // Tubular Bells (Bellfruit)
+sc4tuba //
+sc4tubb //
+sc4tubc //
+sc4twilt // Twilight (Bellfruit)
+sc4typ // Take Your Pick (Bellfruit)
+sc4typa //
+sc4typb //
+sc4typc //
+sc4ufg // Up For Grabs (Mazooma)
+sc4ufga //
+sc4ufi // Up For It (Bellfruit)
+sc4ufia //
+sc4ufib //
+sc4ufic //
+sc4ufid //
+sc4ufie //
+sc4valnv // Valhalla (Nova)
+sc4valqp // Valhalla (Qps)
+sc4vivam // Viva Mexico (Bellfruit)
+sc4vivama //
+sc4vivamb //
+sc4vivamc //
+sc4vivcs //
+sc4vivcsa //
+sc4vivcsb //
+sc4vivcsc //
+sc4vivcsd //
+sc4vivcse //
+sc4vivcsf //
+sc4vivcsg //
+sc4vmclb // Viva Mexico Club (Bellfruit)
+sc4vmclba //
+sc4vmclbb //
+sc4vmnv // Viva Mexico (Nova)
+sc4vmnva //
+sc4vrgcl // Very Rich Geezer Club (Bellfruit)
+sc4vrgcla //
+sc4vrgclb //
+sc4vrgclc //
+sc4vrgcld //
+sc4vrgcle //
+sc4vrgclf //
+sc4vrgclg //
+sc4vrgclh //
+sc4vrgcli //
+sc4wadzl // Wadzilla (Mazooma)
+sc4wadzla //
+sc4wag // Win-A-Gain (Nova)
+sc4waw // Wet & Wild (Mazooma)
+sc4wawa //
+sc4wawb //
+sc4wawc //
+sc4wawd //
+sc4wawe //
+sc4wawf //
+sc4wdw // Who Dares Wins (Bellfruit)
+sc4wdwa //
+sc4wdwb //
+sc4wdwc //
+sc4wdwd //
+sc4wdwe //
+sc4wdwf //
+sc4wdwg //
+sc4wdwh //
+sc4wdwi //
+sc4wdwj //
+sc4wernr // Werner (Nova)
+sc4winsp // Winning Spin (Qps)
+sc4winsp0 //
+sc4winspa //
+sc4winspb //
+sc4winspc //
+sc4winspd //
+sc4winspe //
+sc4winspf //
+sc4winspg //
+sc4winsph //
+sc4winspi //
+sc4winspj //
+sc4winspk //
+sc4winspl //
+sc4winspm //
+sc4winspn //
+sc4winspo //
+sc4winspp //
+sc4winspq //
+sc4winspr //
+sc4winsps //
+sc4winspt //
+sc4winspu //
+sc4winspv //
+sc4winspw //
+sc4winspx //
+sc4winspy //
+sc4winspz //
+sc4winxp // Win X-plosion (Bellfruit)
+sc4wldbn // Wild Bunch (Bellfruit)
+sc4wldbna //
+sc4wldbnb //
+sc4wldbnc //
+sc4wldbnd //
+sc4wldbne //
+sc4wldbnf //
+sc4wldbng //
+sc4wldbnh //
+sc4wldbni //
+sc4wldbnj //
+sc4wldbnk //
+sc4wldbnl //
+sc4wldbnm //
+sc4wldbnn //
+sc4wldbno //
+sc4wldbnp //
+sc4wldbnq //
+sc4wldjk // Wild Jackpots (Mazooma)
+sc4wldjka //
+sc4wldjkb //
+sc4wldjkc //
+sc4wldjkd //
+sc4wldjke //
+sc4wldjkf //
+sc4wldjkg //
+sc4wondw // Wonder Wheel (Bellfruit)
+sc4wondwa //
+sc4wrnlt // Werner Light (Nova)
+sc4wspin // Win Spinner (Qps)
+sc4wspinb //
+sc4wspinc //
+sc4wspind //
+sc4wtc // Wild Thing Casino (Mazooma)
+sc4wtca //
+sc4wtcb //
+sc4wtcc //
+sc4wtcd //
+sc4wtce //
+sc4wtcf //
+sc4wthng // Wild Thing (Bellfruit)
+sc4wthnga //
+sc4wthngb //
+sc4wthngc //
+sc4wthnm // Wild Thing (Mazooma)
+sc4wthnma //
+sc4wthnmb //
+sc4wthnmc //
+sc4wthnmd //
+sc4wthnme //
+sc4wthnmf //
+sc4wwys // Win When Your Spinning (Bellfruit)
+sc4wwysa //
+sc4xcash // Xtra Cash (Bellfruit)
+sc4xmark // X Marks The Spot (Bellfruit)
+sc4xmarka //
+sc4ziggy // Gettin Ziggy With It (Mazooma)
+sc4ziggya //
+sc4ziggyb //
+sc4ziggyc //
+sc4ziggyd //
+sc4ziggye //
+sc4ziggyf //
+sc4ziggyg //
+
+//@source:bfm_sc5sw.cpp
+sc5_3414 //
+sc5_3434 //
+sc5_3435 //
+sc5_3437 //
+sc5_3438 //
+sc5_3450 //
+sc5_3451 //
+sc5_3508 //
+sc5_3510 //
+sc5_3511 //
+sc5_3512 //
+sc5_3513 //
+sc5_3514 //
+sc5_3515 //
+sc5_3516 //
+sc5_3517 //
+sc5_3518 //
+sc5_3519 //
+sc5_3520 //
+sc5_3524 //
+sc5_3525 //
+sc5_3530 //
+sc5_3551 //
+sc5_3552 //
+sc5_3553 //
+sc5_3555 //
+sc5_3557 //
+sc5_z057 //
+sc5_z058 //
+sc5_z059 //
+sc5_z060 //
+sc5a40 // Around The Board In 40 Days (Mazooma)
+sc5a40a //
+sc5adga // Ant & Dec's Grab The Ads (Bellfruit)
+sc5adgaa //
+sc5adgab //
+sc5adgac //
+sc5adgad //
+sc5adgae //
+sc5adgtc // Ant & Dec's Grab The Cash (Bellfruit)
+sc5adgtca //
+sc5adjb // Ant & Dec's Jiggy Bank (Bellfruit)
+sc5adjba //
+sc5adjbb //
+sc5adjbc //
+sc5adjbd //
+sc5adjbe //
+sc5adjbf //
+sc5adjbg //
+sc5adjbh //
+sc5adjbi //
+sc5adjbj //
+sc5adjbk //
+sc5adjbl //
+sc5adjbm //
+sc5adjbn //
+sc5adjbo //
+sc5adjbp //
+sc5adjbq //
+sc5adjbr //
+sc5adjbs //
+sc5adjbt //
+sc5adsnt // Ant & Dec's Saturday Night Takeaway (Bellfruit)
+sc5adsnta //
+sc5adwta // Ant & Dec's Saturday Night Takeaway Win The Ads (Bellfruit)
+sc5adwtaa //
+sc5bantm // Bantam Of The Opera (Mazooma)
+sc5bantma //
+sc5bar7 // Bar 7's (Bellfruit)
+sc5bar7a //
+sc5bar7b //
+sc5bar7c //
+sc5bar7d //
+sc5bar7e //
+sc5bar7f //
+sc5bar7g //
+sc5batl // Battleships & Cruisers (Bellfruit)
+sc5batla //
+sc5bjob // Bank Job (Bellfruit)
+sc5bjoba //
+sc5bjobb //
+sc5bjobc //
+sc5bjobd //
+sc5bjobe //
+sc5bjobf //
+sc5bjobg //
+sc5bjobh //
+sc5bjobi //
+sc5bkngx // Bar King X (Mazooma)
+sc5bkngxa //
+sc5bob // Bobby Dazzler (Mazooma)
+sc5boba //
+sc5bobb //
+sc5bobc //
+sc5bpb // Bully's Prize Board (Bellfruit)
+sc5bpba //
+sc5bpbb //
+sc5bpbc //
+sc5bpbd //
+sc5bpbe //
+sc5bpbf //
+sc5bpbg //
+sc5bpfpb // Bullseye Pounds For Points (Bellfruit)
+sc5bpfpba //
+sc5bsp // Bully's Star Prize (Bellfruit)
+sc5bspa //
+sc5bspb //
+sc5bspc //
+sc5bspd //
+sc5bspe //
+sc5bspf //
+sc5bspg //
+sc5bsph //
+sc5bspi //
+sc5bspj //
+sc5bspk //
+sc5bspl //
+sc5bspm //
+sc5bspn //
+sc5bspo //
+sc5bspp //
+sc5bspq //
+sc5btiab // Bullseye Three In A Bed (Bellfruit)
+sc5btrip // Bullseye Triple (Bellfruit)
+sc5btripa //
+sc5btripb //
+sc5btripc //
+sc5bucc // Buccaneers (Bellfruit)
+sc5bucca //
+sc5buccb //
+sc5buccc //
+sc5buccd //
+sc5bucce //
+sc5bull // Bullseye (Bellfruit)
+sc5bull5 //
+sc5bull5a //
+sc5bull5b //
+sc5bull5c //
+sc5bulla //
+sc5bullb //
+sc5bullc //
+sc5bunny // Bunny Money (Mazooma)
+sc5bunnya //
+sc5butch // Butch Cashidy & The Sundance Quid (Bellfruit)
+sc5butcha //
+sc5butchb //
+sc5butchc //
+sc5butchd //
+sc5butche //
+sc5cabin // Cabin Fever (Mazooma)
+sc5cabina //
+sc5cabinb //
+sc5cabinc //
+sc5cari // Caribbean Cash (Qps)
+sc5caria //
+sc5carib //
+sc5caric //
+sc5carid //
+sc5carie //
+sc5carif //
+sc5carig //
+sc5casxt // Casino Xtravaganza (Mazooma)
+sc5casxta //
+sc5cbar7 // Classic Bar 7 (Mazooma)
+sc5cbar7a //
+sc5cblas // Cash Blast (Bellfruit)
+sc5cblasa //
+sc5cbrun // Cannonball Run (Bellfruit)
+sc5cbruna //
+sc5celeb // I'm A Celebrity (Bellfruit)
+sc5celeba //
+sc5celebb //
+sc5celebc //
+sc5celebd //
+sc5cfact // Cash Factor (Bellfruit)
+sc5cfacta //
+sc5cfcp // Crazy Fruits Community Party (Bellfruit)
+sc5cfcpa //
+sc5cfcpb //
+sc5cfcpc //
+sc5cfcpd //
+sc5cfcpe //
+sc5cfcpf //
+sc5cfcpg //
+sc5cfcph //
+sc5cfcpi //
+sc5cfcpj //
+sc5cfcpk //
+sc5cfcpl //
+sc5cfcpm //
+sc5cfcpn //
+sc5cfcpo //
+sc5cfcpp //
+sc5cfcpq //
+sc5cfcpr //
+sc5cfcps //
+sc5cfcpt //
+sc5cfcpu //
+sc5cfcpv //
+sc5cfcpw //
+sc5cfnc // Crazy Fruit & Nutcase (Bellfruit)
+sc5cfnca //
+sc5cfpt // Crazy Fruits Party Time (Bellfruit)
+sc5cfpta //
+sc5cfptb //
+sc5cfptc //
+sc5cfptd //
+sc5cfpte //
+sc5cfptf //
+sc5cfptg //
+sc5cfpth //
+sc5cfpti //
+sc5cfptj //
+sc5cfptk //
+sc5cfptl //
+sc5cfptm //
+sc5cfptn //
+sc5cfpto //
+sc5cfptp //
+sc5cfptq //
+sc5cfptr //
+sc5cfpts //
+sc5chain // Chain Reaction (Bellfruit)
+sc5chaina //
+sc5chainb //
+sc5chainc //
+sc5chaind //
+sc5chaine //
+sc5chavi // Chav It (Bellfruit)
+sc5chavia //
+sc5chavib //
+sc5chavic //
+sc5chavid //
+sc5chavie //
+sc5chavy // Chavy Chase (Mazooma)
+sc5chavya //
+sc5chavyb //
+sc5chavyc //
+sc5chopc // Chop 'n' Change (Mazooma)
+sc5chopca //
+sc5cj // Cool Jewels (Bellfruit)
+sc5cja //
+sc5cjb //
+sc5cjc //
+sc5cjd //
+sc5cje //
+sc5cjqps //
+sc5cjqpsa //
+sc5cjqpsb //
+sc5cjqpsc //
+sc5cknig // Crazy Knights (Bellfruit)
+sc5ckniga //
+sc5cknigb //
+sc5cknigc //
+sc5clcas // Cluedo Casino (Mazooma)
+sc5clcasa //
+sc5clnot // Cluedo Notorious (Bellfruit)
+sc5clnota //
+sc5clnotb //
+sc5clnotc //
+sc5clnotd //
+sc5clnote //
+sc5clnotf //
+sc5clnotg //
+sc5clown // Clown Around (Bellfruit)
+sc5clowna //
+sc5clownb //
+sc5clownc //
+sc5clownd //
+sc5clowne //
+sc5clu70 // Cluedo 70 (Qps)
+sc5clu70a //
+sc5clue // Cluedo (Mazooma)
+sc5cluea //
+sc5clueb //
+sc5cluec //
+sc5clus // Cluedo The Usual Suspects (Mazooma)
+sc5clusa //
+sc5clusb //
+sc5clusc //
+sc5clusd //
+sc5cluse //
+sc5clusf //
+sc5clusg //
+sc5clush //
+sc5clusi //
+sc5clusj //
+sc5clusk //
+sc5cmani // Colour Mania (Bellfruit)
+sc5cmania //
+sc5cmanib //
+sc5cmanic //
+sc5cmcob // Monte Carlo Or Bust Club (Qps)
+sc5cmcoba //
+sc5cmcobb //
+sc5cmcobc //
+sc5colmo // Colour Of Money (Bellfruit)
+sc5colmoa //
+sc5colmob //
+sc5colmoc //
+sc5copsr // Cops 'n' Robbers (Bellfruit)
+sc5copsra //
+sc5copsrb //
+sc5copsrc //
+sc5copsrd //
+sc5copsre //
+sc5copsrf //
+sc5copsrg //
+sc5copsrh //
+sc5copsri //
+sc5coro // Coronation Street (Mazooma)
+sc5coro0 //
+sc5coro1 //
+sc5coroa //
+sc5corob //
+sc5coroc //
+sc5corod //
+sc5coroe //
+sc5corof //
+sc5corog //
+sc5coroh //
+sc5coroi //
+sc5coroj //
+sc5corok //
+sc5corol //
+sc5corom //
+sc5coron //
+sc5coroo //
+sc5corop //
+sc5coroq //
+sc5coror //
+sc5coros //
+sc5corot //
+sc5corou //
+sc5corov //
+sc5corow //
+sc5corox //
+sc5coroy //
+sc5coroz //
+sc5corst // Coronation Street (Bellfruit)
+sc5corsta //
+sc5corstb //
+sc5corstc //
+sc5count // Countdown (Bellfruit)
+sc5counta //
+sc5cpays // Crazy Pays (Bellfruit)
+sc5cpaysa //
+sc5cpen1 // Public Enemy No1 Club (Bellfruit)
+sc5cpen1a //
+sc5cpen1b //
+sc5cpen1c //
+sc5craid // Cash Raider (Mazooma)
+sc5craida //
+sc5crcpt // Cops 'n' Robbers Community Party (Bellfruit)
+sc5crcpta //
+sc5crcptb //
+sc5crnjw // Crown Jewels (Bellfruit)
+sc5crnjwa //
+sc5crnjwb //
+sc5crotr // Cops 'n' Robbers On The Run (Bellfruit)
+sc5crotra //
+sc5crsc // Cops 'n' Robbers Safe Cracker (Bellfruit)
+sc5crsca //
+sc5crscb //
+sc5crscc //
+sc5crscd //
+sc5crsce //
+sc5crscf //
+sc5crscg //
+sc5crsch //
+sc5crsci //
+sc5crscj //
+sc5crsck //
+sc5crscl //
+sc5crscm //
+sc5crscn //
+sc5crsco //
+sc5crscp //
+sc5crscq //
+sc5crscr //
+sc5crscs //
+sc5crsct //
+sc5crscu //
+sc5crsgc // Cops 'n' Robbers Smash 'n' Grab Club (Bellfruit)
+sc5crsgca //
+sc5crsgcb //
+sc5crsgcc //
+sc5crsgr // Cops 'n' Robbers Smash 'n' Grab (Bellfruit)
+sc5crsgra //
+sc5crsgrb //
+sc5crsgrc //
+sc5crsgrd //
+sc5crsgre //
+sc5crsgrf //
+sc5crsgrg //
+sc5ctit // Cash Of The Titans (Bellfruit)
+sc5ctita //
+sc5ctl // Cop The Lot (Bellfruit)
+sc5ctla //
+sc5ctlb //
+sc5ctlc //
+sc5cvega // Cash Vegas (Bellfruit)
+sc5cvegaa //
+sc5czfr // Crazy Fruits (Bellfruit)
+sc5ddbbc //
+sc5ddbbca //
+sc5ddbbcb //
+sc5ddbbcc //
+sc5ddbbcd //
+sc5ddbbce //
+sc5ddbbcf //
+sc5ddbbcg //
+sc5ddosh // Doctor Dosh (Bellfruit)
+sc5ddosha //
+sc5ddply // Deal Or No Deal Player's Choice (Bellfruit)
+sc5ddplya //
+sc5ddptg // Deal Or No Deal Play The Game (Bellfruit)
+sc5ddptga //
+sc5ddptgb //
+sc5ddptgc //
+sc5devil // Devil Of A Deal (Mazooma)
+sc5devila //
+sc5devilb //
+sc5devilc //
+sc5dhh // Dough Ho Ho (Bellfruit)
+sc5dhha //
+sc5dhhb //
+sc5dhhc //
+sc5dhhd //
+sc5dhhe //
+sc5dhhf //
+sc5dhhg //
+sc5dmine // Diamond Mine (Bellfruit)
+sc5dminea //
+sc5dmineb //
+sc5dminec //
+sc5dmined //
+sc5dminee //
+sc5dminef //
+sc5dmineg //
+sc5dmineh //
+sc5dminei //
+sc5dminej //
+sc5dminek //
+sc5dminel //
+sc5dnd // Deal Or No Deal (Bellfruit)
+sc5dnda //
+sc5dndb //
+sc5dndbb // Deal Or No Deal Break The Bank (Bellfruit)
+sc5dndbba //
+sc5dndbbb //
+sc5dndbbc //
+sc5dndbbd //
+sc5dndbbe //
+sc5dndbbf //
+sc5dndbbg //
+sc5dndbc // Deal Or No Deal Box Clever (Bellfruit)
+sc5dndbca //
+sc5dndbcb //
+sc5dndbcc //
+sc5dndbcd //
+sc5dndbce //
+sc5dndbcf //
+sc5dndbcg //
+sc5dndbch //
+sc5dndbci //
+sc5dndbcj //
+sc5dndbck //
+sc5dndbd // Deal Or No Deal The Big Deal (Bellfruit)
+sc5dndbda //
+sc5dndbdb //
+sc5dndbdc //
+sc5dndbdd //
+sc5dndbde //
+sc5dndbdf //
+sc5dndbdg //
+sc5dndbdh //
+sc5dndbdi //
+sc5dndbe // Deal Or No Deal Beat The Banker (Bellfruit)
+sc5dndbea //
+sc5dndbeb //
+sc5dndbec //
+sc5dndbed //
+sc5dndbee //
+sc5dndbef //
+sc5dndbeg //
+sc5dndbeh //
+sc5dndbei //
+sc5dndbej //
+sc5dndbek //
+sc5dndbel //
+sc5dndbem //
+sc5dndben //
+sc5dndbl // Deal Or No Deal Beat The Banker Club (Bellfruit)
+sc5dndbla //
+sc5dndblb //
+sc5dndblc //
+sc5dndbld //
+sc5dndble //
+sc5dndblf //
+sc5dndblg //
+sc5dndblh //
+sc5dndbli //
+sc5dndblj //
+sc5dndblk //
+sc5dndbll //
+sc5dndblm //
+sc5dndbln //
+sc5dndblo //
+sc5dndblp //
+sc5dndblq //
+sc5dndblr //
+sc5dndbls //
+sc5dndbo // Deal Or No Deal Banker's Bonus (Bellfruit)
+sc5dndboa //
+sc5dndbob //
+sc5dndboc //
+sc5dndbod //
+sc5dndboe //
+sc5dndbof //
+sc5dndbog //
+sc5dndboh //
+sc5dndboi //
+sc5dndboj //
+sc5dndbok //
+sc5dndbol //
+sc5dndbom //
+sc5dndbq // Deal Or No Deal Beat The Banker (Qps)
+sc5dndbqa //
+sc5dndbqb //
+sc5dndbqc //
+sc5dndbqd //
+sc5dndbqe //
+sc5dndbr // Deal Or No Deal The Big Reds (Bellfruit)
+sc5dndbra //
+sc5dndbrb //
+sc5dndbrc //
+sc5dndbrd //
+sc5dndbre //
+sc5dndbrf //
+sc5dndbrg //
+sc5dndbrh //
+sc5dndbri //
+sc5dndbrj //
+sc5dndbrk //
+sc5dndbrl //
+sc5dndbrm //
+sc5dndbrn //
+sc5dndbro //
+sc5dndbrp //
+sc5dndbrq //
+sc5dndbrr //
+sc5dndbrs //
+sc5dndbrt //
+sc5dndbru //
+sc5dndbrv //
+sc5dndbrw //
+sc5dndc //
+sc5dndc2 //
+sc5dndc2a //
+sc5dndc2b //
+sc5dndc2c //
+sc5dndc2d //
+sc5dndc2e //
+sc5dndc2f //
+sc5dndc2g //
+sc5dndc2h //
+sc5dndc2i //
+sc5dndc2j //
+sc5dndc2k //
+sc5dndc2l //
+sc5dndc2m //
+sc5dndc2n //
+sc5dndc2o //
+sc5dndc2p //
+sc5dndc2q //
+sc5dndc2r //
+sc5dndc2s //
+sc5dndc2t //
+sc5dndc2u //
+sc5dndc2v //
+sc5dndc2w //
+sc5dndc3 //
+sc5dndc3a //
+sc5dndc3b //
+sc5dndc3c //
+sc5dndca //
+sc5dndcaa //
+sc5dndcab //
+sc5dndcac //
+sc5dndcad //
+sc5dndcae //
+sc5dndcb //
+sc5dndcba //
+sc5dndcc // Deal Or No Deal The Crazy Chair (Bellfruit)
+sc5dndcca //
+sc5dndccb //
+sc5dndccc //
+sc5dndccd //
+sc5dndcce //
+sc5dndccf //
+sc5dndccg //
+sc5dndcch //
+sc5dndcci //
+sc5dndccj //
+sc5dndcck //
+sc5dndccl //
+sc5dndccm //
+sc5dndccn //
+sc5dndcco //
+sc5dndccp //
+sc5dndccq //
+sc5dndccr //
+sc5dndcl // Deal Or No Deal Club (Bellfruit)
+sc5dndcla //
+sc5dndcr // Deal Or No Deal Cops 'n' Robbers (Bellfruit)
+sc5dndcra //
+sc5dndcrb //
+sc5dndcrc //
+sc5dndcrd //
+sc5dndcre //
+sc5dndcs //
+sc5dndcsa //
+sc5dndcsb //
+sc5dndcsc //
+sc5dndcsd //
+sc5dndcse //
+sc5dndcsf //
+sc5dndcsg //
+sc5dndcsh //
+sc5dndcsi //
+sc5dndcsj //
+sc5dndcsk //
+sc5dndcsl //
+sc5dndcsm //
+sc5dndd //
+sc5dnddd // Deal Or No Deal Double Deal Or No Deal (Bellfruit)
+sc5dnddda //
+sc5dndddb //
+sc5dndddc //
+sc5dndddd //
+sc5dnddde //
+sc5dndddf //
+sc5dndddg //
+sc5dndddh //
+sc5dndddi //
+sc5dndde // Deal Or No Deal Desert Island Deal (Bellfruit)
+sc5dnddea //
+sc5dnddeb //
+sc5dnddec //
+sc5dndded //
+sc5dnddee //
+sc5dnddef //
+sc5dnddeg //
+sc5dnddf // Deal Or No Deal The Dream Factory (Bellfruit)
+sc5dnddfa //
+sc5dnddfb //
+sc5dnddfc //
+sc5dnddfd //
+sc5dnddfe //
+sc5dnddff //
+sc5dnddfg //
+sc5dnddfh //
+sc5dnddfi //
+sc5dnddfj //
+sc5dnddfk //
+sc5dnddfl //
+sc5dnddfm //
+sc5dnddfn //
+sc5dnddi // Deal Or No Deal Diamond (Bellfruit)
+sc5dnddia //
+sc5dnddib //
+sc5dnddic //
+sc5dnddo // Deal Or No Deal Dream Offer (Bellfruit)
+sc5dnddoa //
+sc5dnddob //
+sc5dnddoc //
+sc5dnddt // Deal Or No Deal Double Take (Bellfruit)
+sc5dnddta //
+sc5dnddtb //
+sc5dnddtc //
+sc5dnddtd //
+sc5dnddte //
+sc5dnddtf //
+sc5dnddw // Deal Or No Deal The Deal Wheel (Bellfruit)
+sc5dnddwa //
+sc5dnddwb //
+sc5dnddwc //
+sc5dnddwd //
+sc5dnddwe //
+sc5dnddwf //
+sc5dnddwg //
+sc5dnddwh //
+sc5dnddwi //
+sc5dnddwj //
+sc5dnde //
+sc5dndf //
+sc5dndfl // Deal Or No Deal Feeling Lucky (Bellfruit)
+sc5dndfla //
+sc5dndflb //
+sc5dndflc //
+sc5dndfld //
+sc5dndfle //
+sc5dndg //
+sc5dndgl // Deal Or No Deal Gold (Bellfruit)
+sc5dndgla //
+sc5dndglb //
+sc5dndglc //
+sc5dndgld //
+sc5dndgle //
+sc5dndglf //
+sc5dndglg //
+sc5dndglh //
+sc5dndgli //
+sc5dndglj //
+sc5dndglk //
+sc5dndgo // Deal Or No Deal Game On (Bellfruit)
+sc5dndgoa //
+sc5dndh //
+sc5dndhf // Deal Or No Deal Hall Of Fame (Bellfruit)
+sc5dndhfa //
+sc5dndhfb //
+sc5dndhfc //
+sc5dndhfd //
+sc5dndhfe //
+sc5dndhff //
+sc5dndhfg //
+sc5dndhfh //
+sc5dndhfi //
+sc5dndhfj //
+sc5dndhfk //
+sc5dndhfl //
+sc5dndhfm //
+sc5dndhfn //
+sc5dndhfo //
+sc5dndhfp //
+sc5dndhfq //
+sc5dndhfr //
+sc5dndhfs //
+sc5dndhft //
+sc5dndhfu //
+sc5dndi //
+sc5dndj //
+sc5dndk //
+sc5dndl //
+sc5dndld // Deal Or No Deal Live The Dream (Bellfruit)
+sc5dndlda //
+sc5dndldb //
+sc5dndldc //
+sc5dndlp // Deal Or No Deal Let's Play Deal Or No Deal (Bellfruit)
+sc5dndlpa //
+sc5dndlpb //
+sc5dndlpc //
+sc5dndlpd //
+sc5dndlpe //
+sc5dndlpf //
+sc5dndlpg //
+sc5dndlph //
+sc5dndlpi //
+sc5dndlpj //
+sc5dndlpk //
+sc5dndlpl //
+sc5dndlpm //
+sc5dndlpn //
+sc5dndlpo //
+sc5dndlpp //
+sc5dndlpq //
+sc5dndlpr //
+sc5dndlps //
+sc5dndlpt //
+sc5dndlpu //
+sc5dndm //
+sc5dndmb // Deal Or No Deal Make Or Break (Bellfruit)
+sc5dndmba //
+sc5dndmbb //
+sc5dndmbc //
+sc5dndmbd //
+sc5dndmbe //
+sc5dndmbf //
+sc5dndmbg //
+sc5dndmbh //
+sc5dndmbi //
+sc5dndmbj //
+sc5dndmbk //
+sc5dndmd // Deal Or No Deal Mega Deal Or No Deal (Bellfruit)
+sc5dndmda //
+sc5dndmdb //
+sc5dndmdc //
+sc5dndmdd //
+sc5dndmde //
+sc5dndmdf //
+sc5dndmdg //
+sc5dndmdh //
+sc5dndmdi //
+sc5dndmdj //
+sc5dndmdk //
+sc5dndn //
+sc5dndo //
+sc5dndp //
+sc5dndpa // Deal Or No Deal Play It Again (Bellfruit)
+sc5dndpaa //
+sc5dndpab //
+sc5dndpac //
+sc5dndpc // Deal Or No Deal The Players Choice (Bellfruit)
+sc5dndpca //
+sc5dndpd // Deal Or No Deal The Perfect Deal (Bellfruit)
+sc5dndpda //
+sc5dndpdb //
+sc5dndpdc //
+sc5dndpdd //
+sc5dndpde //
+sc5dndpg // Deal Or No Deal The Perfect Game (Bellfruit)
+sc5dndpga //
+sc5dndpgb //
+sc5dndpgc //
+sc5dndpgd //
+sc5dndpge //
+sc5dndpgf //
+sc5dndpgg //
+sc5dndpgh //
+sc5dndpgi //
+sc5dndpgj //
+sc5dndpgk //
+sc5dndpgl //
+sc5dndpgm //
+sc5dndpgn //
+sc5dndpgo //
+sc5dndpgp //
+sc5dndpgq //
+sc5dndpgr //
+sc5dndpgs //
+sc5dndpgt //
+sc5dndpgu //
+sc5dndpgv //
+sc5dndpgw //
+sc5dndpl // Deal Or No Deal The Perfect Game Classic (Bellfruit)
+sc5dndpla //
+sc5dndplb //
+sc5dndplc //
+sc5dndq //
+sc5dndr //
+sc5dndra // Deal Or No Deal Red Alert (Bellfruit)
+sc5dndraa //
+sc5dndrab //
+sc5dndrac //
+sc5dndrad //
+sc5dndrae //
+sc5dndraf //
+sc5dndrag //
+sc5dndrah //
+sc5dndrai //
+sc5dndraj //
+sc5dndrak //
+sc5dndrr // Deal Or No Deal Road To Riches (Bellfruit)
+sc5dndrra //
+sc5dndrrb //
+sc5dndrrc //
+sc5dndrrd //
+sc5dndrre //
+sc5dndrt // Deal Or No Deal The Banker Rings Twice (Bellfruit)
+sc5dndrta //
+sc5dndrtb //
+sc5dndrtc //
+sc5dndrtd //
+sc5dndrte //
+sc5dnds //
+sc5dndsi // Deal Or No Deal Simply Deal Or No Deal (Bellfruit)
+sc5dndsia //
+sc5dndsib //
+sc5dndsic //
+sc5dndsid //
+sc5dndt //
+sc5dndtb // Deal Or No Deal Think Big (Bellfruit)
+sc5dndtba //
+sc5dndtp // Deal Or No Deal The Power (Bellfruit)
+sc5dndtpa //
+sc5dndtpb //
+sc5dndtpc //
+sc5dndtpd //
+sc5dndtpe //
+sc5dndtpf //
+sc5dndtpg //
+sc5dndtph //
+sc5dndtpi //
+sc5dndtpj //
+sc5dndtpk //
+sc5dndtpl //
+sc5dndtpm //
+sc5dndtpn //
+sc5dndtpo //
+sc5dndtpp //
+sc5dndtpq //
+sc5dndtpr //
+sc5dndtps //
+sc5dndtpt //
+sc5dndtpu //
+sc5dndtpv //
+sc5dndtr // Deal Or No Deal Think Red (Bellfruit)
+sc5dndtra //
+sc5dndtrb //
+sc5dndtrc //
+sc5dndtrd //
+sc5dndtre //
+sc5dndtrf //
+sc5dndtrg //
+sc5dndtrh //
+sc5dndtri //
+sc5dndtrj //
+sc5dndtrk //
+sc5dndwb // Deal Or No Deal What's In Your Box (Bellfruit)
+sc5dndwba //
+sc5dndwbb //
+sc5dndwbc //
+sc5dndwbd //
+sc5dndwbe //
+sc5dndwbf //
+sc5dndwbg //
+sc5dndwbh //
+sc5dndwbi //
+sc5dndwbj //
+sc5dndwbk //
+sc5dndwbl //
+sc5dndwbm //
+sc5dndwbn //
+sc5dndwbo //
+sc5dndwbp //
+sc5dndwbq //
+sc5dndwbr //
+sc5dndwbs //
+sc5dndwc //
+sc5dndwca //
+sc5dndwcb //
+sc5dndwcc //
+sc5dndwcd //
+sc5dndwce //
+sc5dndwcf //
+sc5dndwcg //
+sc5dndwi // Deal Or No Deal What's In Your Box Casino (Bellfruit)
+sc5dndwia //
+sc5dndwib //
+sc5dndwic //
+sc5dndwid //
+sc5dndwie //
+sc5dndwif //
+sc5dndwig //
+sc5dndww // Deal Or No Deal The Walk Of Wealth (Bellfruit)
+sc5dndwwa //
+sc5dndwwb //
+sc5dndwwc //
+sc5dndwwd //
+sc5dndwwe //
+sc5dndwwf //
+sc5dndwwg //
+sc5dndwwh //
+sc5dndwwi //
+sc5dndwwj //
+sc5dndwwk //
+sc5dndwwl //
+sc5dndwwm //
+sc5dndwwn //
+sc5dndwwo //
+sc5dndwwp //
+sc5dndwwq //
+sc5dndwwr //
+sc5dndwws //
+sc5dndys // Deal Or No Deal It's Your Show (Bellfruit)
+sc5dndysa //
+sc5dndysb //
+sc5dndysc //
+sc5dndysd //
+sc5dndyse //
+sc5dndysf //
+sc5dndysg //
+sc5dndysh //
+sc5dough // Dough Selecta (Bellfruit)
+sc5dougha //
+sc5dracp // Drac Pack (Bellfruit)
+sc5dracpa //
+sc5ducks // Ducks Of Hazzard (Mazooma)
+sc5emmer // Emmerdale (Mazooma)
+sc5emmera //
+sc5fast // Fast Cash (Qps)
+sc5fbspn // Fat Boy Spin (Bellfruit)
+sc5fbspna //
+sc5fdice // Fire 'n' Dice (Bellfruit)
+sc5fdicea //
+sc5fgbh // Family Guy Booze Hound (Bellfruit)
+sc5fgbha //
+sc5fgbhb //
+sc5fgbhc //
+sc5fggp // Family Guy Griffin Plumbing (Bellfruit)
+sc5fggpa //
+sc5fggpb //
+sc5fggpc //
+sc5fggpd //
+sc5fggpe //
+sc5fggpf //
+sc5fggpg //
+sc5fguy // Family Guy (Bellfruit)
+sc5fguya //
+sc5fguyb //
+sc5fguyc //
+sc5fguyd //
+sc5fguye //
+sc5fguyf //
+sc5fguyg //
+sc5fires // Firestarter (Bellfruit)
+sc5firesa //
+sc5firesb //
+sc5firesc //
+sc5floop // Fruit Loops (Mazooma)
+sc5floopa //
+sc5fmj // Full Metal Jackpot (Mazooma)
+sc5fmja //
+sc5fnclb // Fight Night Club (Bellfruit)
+sc5fnclba //
+sc5fnclbb //
+sc5fnclbc //
+sc5fnclbd //
+sc5fnclbe //
+sc5frcrz //
+sc5frcrza //
+sc5ftcas // Flash The Cash (Mazooma)
+sc5ftcasa //
+sc5gball // Golden Balls (Bellfruit)
+sc5gballa //
+sc5gballb //
+sc5gballc //
+sc5gd // Gold Digger (Bellfruit)
+sc5gda //
+sc5gdclb // Gold Digger Club (Bellfruit)
+sc5gdclba //
+sc5gdclbb //
+sc5gdclbc //
+sc5gdclbd //
+sc5gdclbe //
+sc5gdclbf //
+sc5gdclbg //
+sc5gdclbh //
+sc5gdclbi //
+sc5gdclbj //
+sc5gdclbk //
+sc5gdmz // Gold Digger (Mazooma)
+sc5gdmza //
+sc5ggame // Golden Game (Mazooma)
+sc5ggamea //
+sc5ggameb //
+sc5ggamec //
+sc5ggamed //
+sc5ggg // Grand Golden Game (Mazooma)
+sc5ggga //
+sc5gggb //
+sc5gggc //
+sc5glad // Gladiator (Mazooma)
+sc5glada //
+sc5gladb //
+sc5gladc //
+sc5gldfv // Gold Fever (Bellfruit)
+sc5gldfva //
+sc5gldfvb //
+sc5gldfvc //
+sc5gldfvd //
+sc5gldfve //
+sc5gldfvf //
+sc5gldfvg //
+sc5gldgo // Golden Goals (Bellfruit)
+sc5gldgoa //
+sc5gldsp // Golden Spinner (Mazooma)
+sc5gldspa //
+sc5gldspb //
+sc5gldspc //
+sc5gldspd //
+sc5gldspe //
+sc5gldspf //
+sc5gldspg //
+sc5gldsph //
+sc5gldspi //
+sc5gldspj //
+sc5gldspk //
+sc5gldspl //
+sc5gldspm //
+sc5gldspn //
+sc5gldspo //
+sc5gldspp //
+sc5gmclb // Grand Master Cash (Bellfruit)
+sc5gmclba //
+sc5gmclbb //
+sc5gmclbc //
+sc5grq // Get Rich Quick (Bellfruit)
+sc5grqa //
+sc5grqb //
+sc5grqc //
+sc5gunp // Gunpowder Slot (Bellfruit)
+sc5gunpa //
+sc5gunpb //
+sc5gunpc //
+sc5gunpd //
+sc5gunpe //
+sc5gunpf //
+sc5gunpg //
+sc5gunph //
+sc5gunpi //
+sc5gunpj //
+sc5gunpk //
+sc5gunpl //
+sc5hapnt // Happy Notes (Bellfruit)
+sc5hapnta //
+sc5hapntb //
+sc5hapntc //
+sc5hapntd //
+sc5hapnte //
+sc5hapntf //
+sc5hapntg //
+sc5hellb // Hells Bells (Bellfruit)
+sc5hellba //
+sc5hill // Hill Billionaire (Bellfruit)
+sc5hilla //
+sc5hillb //
+sc5hirol // High Roller (Mazooma)
+sc5hirola //
+sc5hirolb //
+sc5hirolc //
+sc5hirold //
+sc5hirole //
+sc5hiss // Hissing Quid (Qps)
+sc5hissa //
+sc5hissb //
+sc5hissc //
+sc5hog // Road Hog (Bellfruit)
+sc5hoga //
+sc5hotdg // Hot Dog (Bellfruit)
+sc5hotdga //
+sc5hotdgb //
+sc5hotdgc //
+sc5hotdgd //
+sc5hotdge //
+sc5hotrd // Hot Rod (Bellfruit)
+sc5hotrda //
+sc5hotsh // Hot Shots (Bellfruit)
+sc5hotsha //
+sc5hotshb //
+sc5hotshc //
+sc5hotshd //
+sc5hotshe //
+sc5hotshf //
+sc5hotshg //
+sc5hotshh //
+sc5hotshi //
+sc5hotshj //
+sc5hotshk //
+sc5hotshl //
+sc5hotshm //
+sc5hotshn //
+sc5hotsho //
+sc5hotshp //
+sc5hotshq //
+sc5hotwd // Hot Wad (Bellfruit)
+sc5hotwda //
+sc5hotwdb //
+sc5hotwdc //
+sc5hotwdd //
+sc5hotwde //
+sc5hotwdf //
+sc5hotwdg //
+sc5hulk // Hulk, The (Bellfruit)
+sc5hulka //
+sc5hulkb //
+sc5hulkc //
+sc5hulkd //
+sc5hulke //
+sc5hulkf //
+sc5hulkg //
+sc5hulkh //
+sc5hulki //
+sc5iab // It's A Bullseye (Mazooma)
+sc5iaba //
+sc5ijbdo // Italian Job - Blow The Doors Off (Qps)
+sc5ijbdoa //
+sc5ijbdob //
+sc5ijbdoc //
+sc5ijob // Italian Job (Mazooma)
+sc5ijoba //
+sc5ijobb //
+sc5ijobc //
+sc5ijobd //
+sc5ijobe //
+sc5ijobf //
+sc5ijobg //
+sc5ijobh //
+sc5ijobi //
+sc5inspn // Inner Spin (Mazooma)
+sc5inspna //
+sc5jjok // Jackpot Jokers (Bellfruit)
+sc5jjoka //
+sc5kingx // King X (Mazooma)
+sc5kingxa //
+sc5kingxb //
+sc5kingxc //
+sc5kingxd //
+sc5kingxe //
+sc5ldvl // Little Devil (Mazooma)
+sc5ldvla //
+sc5ldvlb //
+sc5ldvlc //
+sc5ldvld //
+sc5ldvle //
+sc5lotrr // Lord Of The Rings - Return Of The King (Bellfruit)
+sc5lotrra //
+sc5lotrrb //
+sc5lotrrc //
+sc5lotrrd //
+sc5lotrre //
+sc5lotrrf //
+sc5lotrrg //
+sc5lotrrh //
+sc5lotrri //
+sc5manic // Manic Miner (Bellfruit)
+sc5manica //
+sc5manicb //
+sc5manicc //
+sc5manicd //
+sc5manice //
+sc5manicf //
+sc5manicg //
+sc5manich //
+sc5manici //
+sc5manicj //
+sc5manick //
+sc5manicl //
+sc5manicm //
+sc5manicn //
+sc5manico //
+sc5manicp //
+sc5manicq //
+sc5manicr //
+sc5manics //
+sc5manict //
+sc5manicu //
+sc5manicv //
+sc5manicw //
+sc5manicx //
+sc5manicy //
+sc5mcas // Monopoly Casino (Mazooma)
+sc5mcasa //
+sc5mcasb //
+sc5mcasc //
+sc5mdm // Monopoly Double Money (Bellfruit)
+sc5mdma //
+sc5mdmb //
+sc5mdmc //
+sc5mhn // Monopoly Here & Now (Mazooma)
+sc5mhna //
+sc5mhnb //
+sc5mhnc //
+sc5mhnd //
+sc5mhne //
+sc5mhp // Monopoly Hot Property (Bellfruit)
+sc5mhpa //
+sc5mhpb //
+sc5mhpc //
+sc5mhpd //
+sc5mhpe //
+sc5mhpf //
+sc5mhpg //
+sc5mhph //
+sc5mhpi //
+sc5mhpj //
+sc5mhpk //
+sc5mhpl //
+sc5mmad // Money Madness (Mazooma)
+sc5mmada //
+sc5mmadb //
+sc5mmadc //
+sc5mmb // Monopoly Money Bags (Bellfruit)
+sc5mmba //
+sc5mmbb //
+sc5mmbc //
+sc5mmbd //
+sc5mmbe //
+sc5mmm // Mental Money Monsters (Mazooma)
+sc5mmma //
+sc5mmmb //
+sc5mmmc //
+sc5mobob // Monopoly Boom Or Bust (Bellfruit)
+sc5moboba //
+sc5mobobb //
+sc5mobobc //
+sc5mobobd //
+sc5mobobe //
+sc5mobobf //
+sc5mobobg //
+sc5mobobh //
+sc5mobobi //
+sc5mogta // Monopoly Go To Auction (Bellfruit)
+sc5mogtaa //
+sc5mogtab //
+sc5mogtac //
+sc5mogtad //
+sc5mogtae //
+sc5mombc // Monopoly Money Bags Club (Mazooma)
+sc5mombca //
+sc5mombcb //
+sc5mombcc //
+sc5momil // Monopoly Millionaire (Bellfruit)
+sc5momila //
+sc5momilb //
+sc5momilc //
+sc5momild //
+sc5momile //
+sc5moms // Monopoly Money Spinner (Qps)
+sc5momsa //
+sc5momsb //
+sc5momsc //
+sc5momsd //
+sc5momse //
+sc5monky // Monkey Business (Mazooma)
+sc5monkya //
+sc5monop // Monopoly (Mazooma)
+sc5monsp // Money Spinner (Bellfruit)
+sc5monspa //
+sc5monwa // Monopoly Win Again (Qps)
+sc5monwaa //
+sc5mopl // Monopoly Property Ladder (Bellfruit)
+sc5mopla //
+sc5moplb //
+sc5moplc //
+sc5mopld //
+sc5mople //
+sc5moplf //
+sc5moplg //
+sc5mor2r // Monopoly Road To Riches (Qps)
+sc5mor2ra //
+sc5mowow // Monopoly Wheel Of Wealth (Mazooma)
+sc5mowowb //
+sc5mr2r // Monopoly Road To Riches (Mazooma)
+sc5mr2ra //
+sc5mr2rb //
+sc5mrh // Monopoly Red Hot (Mazooma)
+sc5mrha //
+sc5mrrcl // Monopoly Road To Riches Club (Mazooma)
+sc5mrrcla //
+sc5mrrclb //
+sc5mrrclc //
+sc5mww // Monopoly Wonders Of The World (Mazooma)
+sc5mwwa //
+sc5mwwb //
+sc5mwwc //
+sc5newcm // Colour Of Money New, The (Bellfruit)
+sc5newcma //
+sc5newcmb //
+sc5newcmc //
+sc5newcmd //
+sc5newcme //
+sc5nmare // A Nightmare On Elm Street (Bellfruit)
+sc5nmarea //
+sc5nmareb //
+sc5nmarec //
+sc5nunsb // Nuns 'n' Roses (Bellfruit)
+sc5nunsm // Nuns 'n' Roses (Mazooma)
+sc5nunsma //
+sc5nunsmb //
+sc5nunsmc //
+sc5nunsmd //
+sc5nunsme //
+sc5parot // Parrots Of The Caribbean (Bellfruit)
+sc5parota //
+sc5parotb //
+sc5parotc //
+sc5parotd //
+sc5parote //
+sc5parotf //
+sc5parotg //
+sc5pilep // Pile On The Pounds (Qps)
+sc5pilepa //
+sc5pilepb //
+sc5pilepc //
+sc5pircl // The Prize Is Right Club (Bellfruit)
+sc5pircla //
+sc5pirclb //
+sc5pirclc //
+sc5pircld //
+sc5pircle //
+sc5pirclf //
+sc5pirclg //
+sc5plays // 28 Plays Later (Qps)
+sc5playsa //
+sc5pog // Pots Of Gold (Bellfruit)
+sc5poga //
+sc5pogb //
+sc5pogc //
+sc5pogd //
+sc5poge //
+sc5pogf //
+sc5pogg //
+sc5pompa // Up Pompay (Bellfruit)
+sc5pompaa //
+sc5pompab //
+sc5pony // Pony Express (Bellfruit)
+sc5ponya //
+sc5ponyb //
+sc5ponyc //
+sc5ponyd //
+sc5ponye //
+sc5popey // Popeye (Mazooma)
+sc5popeya //
+sc5popeyb //
+sc5popeyc //
+sc5popeyd //
+sc5popeye //
+sc5popeyf //
+sc5popeyg //
+sc5potog //
+sc5potoga //
+sc5potogb //
+sc5potogc //
+sc5potogd //
+sc5potoge //
+sc5potogf //
+sc5potogg //
+sc5potogh //
+sc5potogi //
+sc5potp // Pick Of The Pack (Bellfruit)
+sc5potpa //
+sc5potsm // Pots Of Luck (Mazooma)
+sc5potsma //
+sc5pp // Pink Panther (Mazooma)
+sc5ppa //
+sc5ppb //
+sc5ppc //
+sc5ppcr // Pink Panther Clouseau's Revenge (Mazooma)
+sc5ppcra //
+sc5ppcrb //
+sc5ppcrc //
+sc5ppcrd //
+sc5ppctc // Pink Panther Crack The Code (Bellfruit)
+sc5ppctca //
+sc5ppctcb //
+sc5ppctcc //
+sc5ppctcd //
+sc5ppctce //
+sc5ppctcf //
+sc5ppctcg //
+sc5ppctch //
+sc5ppctci //
+sc5ppd //
+sc5ppdym // Pink Panther Double Your Money (Mazooma)
+sc5ppdyma //
+sc5ppe //
+sc5ppf //
+sc5ppg //
+sc5ppsag // Pink Panther Strikes Again (Mazooma)
+sc5ppsaga //
+sc5ppsagb //
+sc5ppsagc //
+sc5ppsagd //
+sc5ppsage //
+sc5pwrbl // Powerball (Bellfruit)
+sc5pwrbla //
+sc5pwrpl // Power Play (Mazooma)
+sc5pwrpla //
+sc5qual // Quality Streak (Bellfruit)
+sc5quala //
+sc5qualb //
+sc5qualc //
+sc5quald //
+sc5quale //
+sc5qualf //
+sc5qualg //
+sc5qualh //
+sc5quali //
+sc5qualj //
+sc5qualk //
+sc5quall //
+sc5qualm //
+sc5quidv // Quid Vicious (Mazooma)
+sc5quidva //
+sc5quidvb //
+sc5quidvc //
+sc5quidvd //
+sc5quidve //
+sc5quidvf //
+sc5quidvg //
+sc5rainb // Over The Rainbow (Bellfruit)
+sc5rainba //
+sc5rainbb //
+sc5rainbc //
+sc5rainbd //
+sc5rainbe //
+sc5redsq // Red Square (Mazooma)
+sc5redsqa //
+sc5rhclb // Road Hog Club (Bellfruit)
+sc5rhclba //
+sc5rhclbb //
+sc5rhclbc //
+sc5rhclbd //
+sc5rhclbe //
+sc5rhclbf //
+sc5rhclbg //
+sc5rhr // Red Hot Reels (Qps)
+sc5rhra //
+sc5rhrb //
+sc5rhrc //
+sc5rhrd //
+sc5rhre //
+sc5rhx // Red Hot X (Mazooma)
+sc5rhxa //
+sc5rhxb //
+sc5rhxc //
+sc5rhxcs // Red Hot X Casino (Mazooma)
+sc5rhxcsa //
+sc5rhxd //
+sc5rhxe //
+sc5rhxf //
+sc5rosts // Ronnie O'Sullivan's Tournament Snooker (Bellfruit)
+sc5rostsa //
+sc5rostsb //
+sc5rostsc //
+sc5rostsd //
+sc5rostse //
+sc5rovrt // Rovers Return (Mazooma)
+sc5rovrta //
+sc5rovrtb //
+sc5rovrtc //
+sc5rssh // Reel Spin Shady (Mazooma)
+sc5rssha //
+sc5sbull //
+sc5sbulla //
+sc5sfts // Shoot For The Stars (Bellfruit)
+sc5sftsa //
+sc5sftsb //
+sc5sftsc //
+sc5sharp // Sharp Shooter (Voodoo)
+sc5sharpa //
+sc5showt // Showtime (Bellfruit)
+sc5showta //
+sc5showtb //
+sc5showtc //
+sc5showtd //
+sc5showte //
+sc5showtf //
+sc5showtg //
+sc5showth //
+sc5showti //
+sc5showtj //
+sc5showtk //
+sc5showtl //
+sc5showtm //
+sc5showtn //
+sc5showto //
+sc5showtp //
+sc5showtq //
+sc5showtr //
+sc5showts //
+sc5sitwi // Spin It To Win It (Bellfruit)
+sc5sitwia //
+sc5slad // Snakes & Ladders (Bellfruit)
+sc5slada //
+sc5sladb //
+sc5sladc //
+sc5sladd //
+sc5slade //
+sc5sladf //
+sc5sladg //
+sc5sleut // Super Sleuth (Mazooma)
+sc5sleuta //
+sc5smtm // Show Me The Money (Mazooma)
+sc5smtma //
+sc5spice // Spice It Up (Bellfruit)
+sc5spicea //
+sc5spiceb //
+sc5spicec //
+sc5spiced //
+sc5spicee //
+sc5spnrn // Spinning Around (Mazooma)
+sc5spnrna //
+sc5srace // Streak Racer (Bellfruit)
+sc5sracea //
+sc5srrcl // Snake Rattle 'n' Roll Club (Bellfruit)
+sc5srrcla //
+sc5srrclb //
+sc5srrclc //
+sc5srrqp // Snake Rattle & Roll (Qps)
+sc5srrqpa //
+sc5sumit // Summit Up (Qps)
+sc5sumita //
+sc5sus // Suits U Sir (Qps)
+sc5susa //
+sc5susb //
+sc5susc //
+sc5swbak // Switch Back (Mazooma)
+sc5swbaka //
+sc5swywm // Spin When Your Winning (Mazooma)
+sc5swywma //
+sc5swywmb //
+sc5swywmc //
+sc5tbox // Top Box (Mazooma)
+sc5tboxa //
+sc5tboxb //
+sc5tboxc //
+sc5tboxd //
+sc5tboxe //
+sc5tboxf //
+sc5tboxg //
+sc5tboxh //
+sc5tboxi //
+sc5tboxj //
+sc5tboxk //
+sc5tboxl //
+sc5tboxm //
+sc5tboxn //
+sc5tboxo //
+sc5tboxp //
+sc5tboxq //
+sc5tpsht // Top Of The Shots (Mazooma)
+sc5tpshta //
+sc5tpshtb //
+sc5tpshtc //
+sc5tpshtd //
+sc5trail // Trailblazer (Mazooma)
+sc5traila //
+sc5tsmp // Trick Shot Multi Player (Bellfruit)
+sc5tsmpa //
+sc5ttpie // Take The Piece (Bellfruit)
+sc5ttpiea //
+sc5ttpieb //
+sc5ttpiec //
+sc5ttpied //
+sc5ttpiee //
+sc5ttpief //
+sc5ttpieg //
+sc5ttpieh //
+sc5ttpiei //
+sc5typ // Take Your Pick (Bellfruit)
+sc5typa //
+sc5typb //
+sc5typc //
+sc5vamp // Vampire Payer (Qps)
+sc5vampa //
+sc5viper // Viper Active (Bellfruit)
+sc5vipera //
+sc5vivam // Viva Mexico (Bellfruit)
+sc5vivama //
+sc5viz // Viz (Qps)
+sc5viza //
+sc5vizb //
+sc5vizc //
+sc5wacky // Wacky Racers (Bellfruit)
+sc5wackya //
+sc5wackyb //
+sc5wackyc //
+sc5wca // Win Can Alley (Qps)
+sc5wcaa //
+sc5wcab //
+sc5wcac //
+sc5wcad //
+sc5wcae //
+sc5wcaf //
+sc5wcag //
+sc5wcah //
+sc5wcai //
+sc5wcaj //
+sc5wcak //
+sc5wcal //
+sc5wcam //
+sc5wcan //
+sc5wcao //
+sc5wild // Wild Reels (Mazooma)
+sc5wilda //
+sc5wldjk // Wild Jackpots (Mazooma)
+sc5wldjka //
+sc5wok // Wok n' Roll (Bellfruit)
+sc5woka //
+sc5wotw // War Of The Wads (Mazooma)
+sc5wotwa //
+
+//@source:bfm_swp.cpp
+c3_ppays // The Phrase That Pays
+c3_rtime // Radio Times
+c3_telly // Telly Addicts
+c3_totp // Top of the Pops
+
+//@source:bfmsys83.cpp
+b83catms //
+b83cops //
+
+//@source:bfmsys85.cpp
+b85bdclb //
+b85bdclba //
+b85bdclbb //
+b85cb7p //
+b85cblit //
+b85cblita //
+b85cblitb //
+b85cexpl //
+b85clbpm //
+b85cops // Cops 'n' Robbers (Bellfruit) [Dutch]
+b85dbldl //
+b85dbldla //
+b85dbldlb // Double Dealer (Bellfruit)?
+b85disc //
+b85hilo //
+b85hiloa //
+b85jkwld //
+b85jpclb //
+b85jpclba //
+b85jpclbb //
+b85jpclbc //
+b85koc //
+b85koca //
+b85luckd //
+b85lucky //
+b85potp // Pick Of The Pack (Bellfruit)
+b85ritz //
+b85ritza //
+b85ritzb //
+b85ritzc //
+b85ritzd //
+b85royal //
+b85scard // (c) 198? BFM
+b85sngam //
+
+//@source:bgt.cpp
+bg_barmy //
+bg_ddb //
+bg_max //
+bg_maxa //
+
+//@source:big10.cpp
+big10 // (c) 198? Unknown
+
+//@source:bigbord2.cpp
+bigbord2 //
+
+//@source:bigevglf.cpp
+bigevglf // A67 (c) 1986 Taito America Corporation (US)
+bigevglfj // A67 (c) 1986 Taito Corporation (Japan)
+
+//@source:bigstrkb.cpp
+bigstrkb // bootleg on different hardware
+bigstrkba // alt set of 'bigstrkb' with Italian teams
+
+//@source:binbug.cpp
+binbug //
+dg680 //
+
+//@source:bingo.cpp
+brooklyn //
+brooklyna //
+cntine31 //
+cntinntl //
+domino2 //
+ggate //
+ggatea //
+goldgame //
+goldgkit1 //
+goldgkitb //
+goldgnew //
+goldgstake //
+michigan //
+michkit1 //
+michkitb //
+michnew //
+michstake //
+montana //
+newdixie //
+penalty //
+superdix //
+topgame //
+topgamet //
+tripjok //
+
+//@source:bingoc.cpp
+bingoc // (c) 1989 Sega
+
+//@source:bingoman.cpp
+bingoman //
+bingomana //
+
+//@source:bingor.cpp
+bingor1 // (c) 2002 Unknown
+bingor2 // (c) 2002 Unknown
+bingor3 // (c) 2002 Unknown
+bingor4 // (c) 2002 Unknown
+bingor5 // (c) 2002 Unknown
+
+//@source:bionicc.cpp
+bionicc // 3/1987 (c) 1987 (Euro)
+bionicc1 // 3/1987 (c) 1987 (US)
+bionicc2 // 3/1987 (c) 1987 (US)
+bioniccbl // bootleg
+topsecrt // 3/1987 (c) 1987 (Japan)
+
+//@source:bishi.cpp
+bishi // GX575 (c) 1996 (Japan)
+sbishi // GX675 (c) 1998 (Japan)
+sbishik // GX675 (c) 1998 (Korea)
+
+//@source:bitgraph.cpp
+bitgrpha //
+bitgrphb //
+
+//@source:bk.cpp
+bk0010 //
+bk001001 //
+bk0010fd //
+bk0011m //
+
+//@source:bking.cpp
+bking // DM (c) 1982 Taito Corporation
+bking2 // AD6 (c) 1983 Taito Corporation
+bking3 // A24 (c) 1984 Taito Corporation
+
+//@source:blackt96.cpp
+blackt96 // (c) 1996 D.G.R.M. of Korea
+
+//@source:bladestl.cpp
+bladestl // GX797 (c) 1987
+bladestle // GX797 (c) 1987
+bladestll // GX797 (c) 1987
+
+//@source:blitz.cpp
+megadpkr // (c) 1990 Blitz System Inc
+megadpkrb // (c) 1990 Blitz System Inc
+
+//@source:blitz68k.cpp
+bankrob // (c) 1993 Entertainment Technology Corp.
+bankroba // (c) 1993 Entertainment Technology Corp.
+cj3play // (c) 1998 Cadillac Jack
+cjffruit // (c) 1998 Cadillac Jack
+deucesw2 // (c) 1997
+dualgame // (c) 1995 Labtronix Technologies
+hermit // (c) 1995 Dugamex
+ilpag // (c) 199? unknown
+maxidbl // (c) 1992 Blitz Systems Inc.
+megadble // (c) 1990 Blitz Systems Inc.
+megadblj // (c) 1990 Blitz Systems Inc.
+poker52 // (c) 1993 Blitz Systems Inc. ?
+steaser // (c) 1993 unknown
+
+//@source:blktiger.cpp
+blkdrgon // 8/1987 (c) 1987 (Japan)
+blkdrgonb // bootleg, hacked to say Black Tiger
+blktiger // 8/1987 (c) 1987 (US)
+blktigera // 8/1987 (c) 1987 (US)
+blktigerb1 // bootleg
+blktigerb2 // bootleg
+blktigerb3 // bootleg?
+
+//@source:blmbycar.cpp
+blmbycar // (c) 1994 ABM & Gecas - uses same gfx chip as powerins?
+blmbycaru // (c) 1994 ABM & Gecas - uses same gfx chip as powerins?
+watrball // (c) 1996 ABM
+
+//@source:blockade.cpp
+blasto // [1978 Gremlin]
+blockade // 1-4 [1977 Gremlin]
+comotion // 5-7 [1977 Gremlin]
+hustle // 16-21 [1977 Gremlin]
+mineswpr // [1977 Amutech]
+mineswpr4 // [1977 Amutech]
+
+//@source:blockhl.cpp
+blockhl // GX973 (c) 1989
+quarth // GX973 (c) 1989 (Japan)
+
+//@source:blockout.cpp
+agress // TA-0029 (c) 1991 Palco
+agressb // TA-0029 (c) 1991 Palco
+blockout // TA-0029 (c) 1989 + California Dreams
+blockout2 // TA-0029 (c) 1989 + California Dreams
+blockoutj // TA-0029 (c) 1989 + California Dreams (Japan)
+
+//@source:bloodbro.cpp
+bloodbro // (c) 1990 Tad
+bloodbroa // (c) 1990 Tad
+bloodbrob // (c) 1990 Tad
+skysmash // (c) 1990 Nihon System Inc.
+weststry // bootleg
+
+//@source:blstroid.cpp
+blstroid // 136057 (c) 1987
+blstroid2 // 136057 (c) 1987
+blstroid3 // 136057 (c) 1987
+blstroidg // 136057 (c) 1987
+blstroidh // (proto) (c) 1987
+
+//@source:blueprnt.cpp
+blueprnt // (c) 1982 Bally Midway (Zilec in ROM 3U, and the programmer names)
+blueprntj // (c) 1982 Jaleco (Zilec in ROM 3U, and the programmer names)
+grasspin // (c) 1983 Jaleco (Zilec / Ashby programmer names in sound rom)
+saturnzi // (c) 1983 Jaleco (Zilec in ROM R6, and the programmer names)
+
+//@source:bmcbowl.cpp
+bmcbowl // (c) 1994 BMC
+
+//@source:bmcpokr.cpp
+bmcpokr // (c) 1999 BMC
+mjmaglmp // (c) 2000 BMC
+
+//@source:bmjr.cpp
+bmjr //
+
+//@source:bml3.cpp
+bml3 //
+bml3mk2 //
+bml3mk5 //
+
+//@source:bnstars.cpp
+bnstars1 // (c) 1997
+
+//@source:bntyhunt.cpp
+bntyhunt // (c) 200? GCTech Co., LTD
+
+//@source:bob85.cpp
+bob85 //
+
+//@source:bogeyman.cpp
+bogeyman // -0204-0 (Data East part number) (c) 1985 (Arcade TV Game List - P.96, Right, 8 from top)
+
+//@source:bombjack.cpp
+bombjack // (c) 1984 Tehkan
+bombjack2 // (c) 1984 Tehkan
+bombjackt // (c) 1984 Tehkan + Tecfri license
+
+//@source:boogwing.cpp
+boogwing // MBD (c) 1992 (Euro, v1.5)
+boogwinga // MBD (c) 1992 (Asia, v1.5)
+boogwingu // MBD (c) 1992 (USA, v1.7)
+ragtime // MBD (c) 1992 (Japan, v1.5)
+ragtimea // MBD (c) 1992 (Japan, v1.3)
+
+//@source:bottom9.cpp
+bottom9 // GX891 (c) 1989
+bottom9n // GX891 (c) 1989
+mstadium // GX891 (c) 1989 (Japan)
+
+//@source:bowltry.cpp
+bowltry // (c) 200? Atlus
+
+//@source:boxer.cpp
+boxer // ?????? prototype 1978 [6502]
+
+//@source:br8641.cpp
+br8641 //
+
+//@source:brkthru.cpp
+brkthru // (c) 1986 Data East USA (US)
+brkthruj // (c) 1986 Data East Corporation (Japan)
+darwin // (c) 1986 Data East Corporation (Japan)
+forcebrk // (c) 1986 Data East Corporation (Japan)
+
+//@source:bsktball.cpp
+bsktball // 034756-034766 1979/05 [6502]
+
+//@source:btime.cpp
+bnj // (c) 1982
+bnjm // (c) 1982 + Midway
+brubber // (c) 1982
+btime // (c) 1982
+btime2 // (c) 1982
+btime3 // (c) 1982
+btimem // (c) 1982 + Midway
+caractn // bootleg
+caractn2 // bootleg
+cookrace // bootleg
+disco // (c) 1982
+discof // (c) 1982
+lnc // (c) 1981
+mmonkey // (c) 1982 Technos Japan + Roller Tron
+protennb // bootleg
+sdtennis // (c) 1983
+tisland // (c) 1982
+wtennis // bootleg 1982
+zoar // (c) 1982
+
+//@source:btoads.cpp
+btoads // (c) 1994 Rare
+
+//@source:bublbobl.cpp
+bbredux // bootleg / hack
+boblbobl // bootleg
+boblcave // hack
+bub68705 // bootleg
+bublbobl // A78 (c) 1986 Taito Corporation
+bublbobl1 // A78 (c) 1986 Taito Corporation
+bublboblb // bootleg
+bublboblr // A78 (c) 1986 Taito America Corporation + Romstar license
+bublboblr1 // A78 (c) 1986 Taito America Corporation + Romstar license
+bublcave // hack
+bublcave10 // hack
+bublcave11 // hack
+dland // bootleg
+sboblbobl // bootleg
+sboblbobla // bootleg
+sboblboblb // bootleg
+sboblboblc // bootleg
+sboblbobld // bootleg
+tokio // A71 1986
+tokiob // bootleg
+tokioo // A71 1986
+tokiou // A71 1986
+
+//@source:buggychl.cpp
+buggychl // A22 (c) 1984 Taito Corporation
+buggychlt // A22 (c) 1984 Taito Corporation + Tefri license
+
+//@source:bullet.cpp
+wmbullet //
+wmbulletf //
+
+//@source:busicom.cpp
+busicom //
+
+//@source:buster.cpp
+buster // (c) 1987 Marian Electronics Ltd.
+
+//@source:bw12.cpp
+bw12 //
+bw14 //
+
+//@source:bw2.cpp
+bw2 //
+
+//@source:bwidow.cpp
+bwidow // 136017 (c) 1982
+bwidowp // (proto) (c) 1982
+gravitar // 136010 (c) 1982
+gravitar1 // 136010 (c) 1982
+gravitar2 // 136010 (c) 1982
+lunarba1 // (proto) (c) 1982
+lunarbat // (proto) (c) 1982
+spacduel // 136006 (c) 1980
+spacduel0 // 136006 (c) 1980
+spacduel1 // 136006 (c) 1980
+
+//@source:bwing.cpp
+bwings // (c) 1984
+bwingsa // (c) 1984
+bwingso // (c) 1984
+zaviga // (c)
+zavigaj // (c)
+
+//@source:by17.cpp
+blackjck //
+bowarrow //
+eightbll //
+evelknie //
+freedom //
+matahari //
+nightr20 //
+nightrdr //
+pwerplay //
+stk_sprs //
+
+//@source:by35.cpp
+bbbowlin //
+blakpyra //
+blbeauty //
+bmx //
+bullseye //
+centaur //
+cobrap //
+cosflash //
+cybrnaut //
+darkshad //
+dollyptn //
+eballd14 //
+eballdlx //
+elektra //
+embryon //
+f1gpp //
+fathom //
+fball_ii //
+fbclass //
+flashgdn //
+flashgdnf //
+flashgdnv //
+frontier //
+futrquen //
+futurspa //
+goldball //
+goldballn //
+granslam //
+granslam4 //
+hglbtrtr //
+hotdoggn //
+kiss //
+kosteel //
+lostwrlp //
+m_mpac //
+mdntmrdr //
+medusa //
+monrobwl //
+mystic //
+myststar //
+newwave //
+ngndshkr //
+paragon //
+playboy //
+rapidfip //
+rollston //
+saturn2 //
+skatebll //
+skflight //
+slbmania //
+smman //
+spacehaw //
+spaceinv //
+speakesy //
+speakesy4p //
+spectrm //
+spectrm4 //
+spyhuntr //
+sst //
+startrep //
+suprbowl //
+tigerrag //
+toppin //
+uboat65 //
+vector //
+viking //
+voltan //
+worlddef //
+xenon //
+xenonf //
+xsandos //
+
+//@source:by6803.cpp
+atlantip //
+beatclck //
+black100 //
+black100s //
+blackblt //
+blackblt2 //
+cityslck //
+dungdrag //
+eballchp //
+esclwrld //
+esclwrldg //
+hardbody //
+hardbodyg //
+hvymetap //
+ladyluck //
+motrdome //
+prtyanim //
+prtyanimg //
+specforc //
+strngscg //
+strngsci //
+trucksp2 //
+trucksp3 //
+
+//@source:by68701.cpp
+eballdlxp1 //
+eballdlxp2 //
+eballdlxp3 //
+eballdlxp4 //
+flashgdnp1 //
+flashgdnp2 //
+
+//@source:byvid.cpp
+babypac //
+babypac2 //
+granny //
+
+//@source:bzone.cpp
+bradley // ?? (c) 1980
+bzone // 0364xx (c) 1980
+bzonea // 0364xx (c) 1980
+bzonec // 0364xx (c) 1980
+redbaron // 036995-037007 (c) 1980
+redbarona // 036995-037007 (c) 1980
+
+//@source:c10.cpp
+c10 //
+
+//@source:c128.cpp
+c128 //
+c128_de //
+c128_se //
+c128cr //
+c128d //
+c128d81 //
+c128dcr //
+c128dcr_de //
+c128dcr_se //
+c128dcrp //
+c128dp //
+c128p //
+
+//@source:c64.cpp
+c64 //
+c64_jp // Commodore 64 (Japan)
+c64_se // Commodore 64 (Sweden)
+c64c //
+c64c_es //
+c64c_se //
+c64cp // Commodore 64C (PAL)
+c64g // Commodore 64G (PAL)
+c64gs // Commodore 64 Games System
+c64p // Commodore 64 (PAL)
+dx64 // Commodore DX-64 - Prototype
+edu64 // Commodore Educator 64
+pet64 // Commodore PET 64
+sx64 //
+sx64p //
+tesa6240 //
+vip64 // Commodore VIP64 (SX64, PAL, Swedish)
+
+//@source:c64dtv.cpp
+c64dtv // Commodore 64 Direct-to-TV
+
+//@source:c65.cpp
+c64dx // 1991 C65 / C64DX (Prototype, German PAL)
+c65 // 1991 C65 / C64DX (Prototype, NTSC)
+
+//@source:c80.cpp
+c80 //
+
+//@source:c900.cpp
+c900 //
+
+//@source:cabal.cpp
+cabal // (c) 1988 Tad + Fabtek license
+cabala // (c) 1988 Tad + Fabtek license
+cabalbl // bootleg
+cabalbl2 // bootleg
+cabalus // (c) 1988 Tad + Fabtek license
+cabalus2 // (c) 1988 Tad + Fabtek license
+cabaluk //
+
+//@source:cabaret.cpp
+cabaret // (c) 1992 AMT
+
+//@source:calchase.cpp
+calchase // (c) 1999 The Game Room
+eggsplc // (c) 2002 The Game Room
+hostinv // (c) 1998 The Game Room
+
+//@source:calomega.cpp
+comg074 // (c) 1981 Cal Omega Inc.
+comg076 // (c) 1981 Cal Omega Inc.
+comg079 // (c) 1981 Cal Omega Inc.
+comg080 // (c) 1981 Cal Omega Inc.
+comg094 // (c) 1981 Cal Omega Inc.
+comg107 // (c) 1982 Cal Omega Inc.
+comg123 // (c) 1982 Cal Omega Inc.
+comg125 // (c) 1982 Cal Omega Inc.
+comg127 // (c) 1982 Cal Omega Inc.
+comg128 // (c) 1982 Cal Omega Inc.
+comg134 // (c) 1982 Cal Omega Inc.
+comg145 // (c) 1982 Cal Omega Inc.
+comg157 // (c) 1983 Cal Omega Inc.
+comg159 // (c) 1983 Cal Omega Inc.
+comg164 // (c) 1983 Cal Omega Inc.
+comg168 // (c) 1983 Cal Omega Inc.
+comg172 // (c) 1983 Cal Omega Inc.
+comg175 // (c) 1984 Cal Omega / Casino Electronics Inc.
+comg176 // (c) 1982 Cal Omega Inc.
+comg181 // (c) 1983 Cal Omega Inc.
+comg183 // (c) 1983 Cal Omega Inc.
+comg185 // (c) 1983 Cal Omega Inc.
+comg186 // (c) 1983 Cal Omega Inc.
+comg187 // (c) 1983 Cal Omega Inc.
+comg204 // (c) 1984 Cal Omega Inc.
+comg208 // (c) 1984 Cal Omega Inc.
+comg227 // (c) 1984 Cal Omega Inc.
+comg230 // (c) 1984 Cal Omega Inc.
+comg236 // (c) 1984 Cal Omega Inc.
+comg239 // (c) 1985 Cal Omega / Casino Electronics Inc.
+comg240 // (c) 1985 Cal Omega / Casino Electronics Inc.
+comg246 // (c) 1985 Cal Omega Inc.
+comg272a // (c) 1985 Cal Omega Inc.
+comg272b // (c) 1985 Cal Omega Inc.
+comg5108 // (c) 1985 Cal Omega Inc.
+comg903d // (c) 198? Cal Omega Inc.
+comg905d // (c) 198? Cal Omega Inc.
+elgrande // (c) 1982 Tuni Electro Service / E.T. Marketing
+jjpoker // (c) 1983 Enter-Tech
+jjpokerb // (c) 1983 Enter-Tech
+ssipkr24 // (c) 1988 SSI
+ssipkr30 // (c) 1988 SSI
+ssipkr40 // (c) 1990 SSI
+
+//@source:calorie.cpp
+calorie // (c) 1986 Sega
+calorieb // (c) 1986 Sega (but bootleg)
+
+//@source:camplynx.cpp
+lynx128k //
+lynx48k //
+lynx96k //
+
+//@source:canon_s80.cpp
+canons80 //
+
+//@source:canyon.cpp
+canyon // 009493-009504 1977/10 [6502]
+canyonp // 009493-009504 1977/10 [6502]
+
+//@source:capbowl.cpp
+bowlrama // (c) 1991 P & P Marketing
+capbowl // (c) 1988 Incredible Technologies
+capbowl2 // (c) 1988 Incredible Technologies
+capbowl3 // (c) 1988 Incredible Technologies
+capbowl4 // (c) 1989 Incredible Technologies
+clbowl // (c) 1989 Incredible Technologies
+
+//@source:capcom.cpp
+abv106 //
+abv106r //
+bbb108 //
+bbb109 //
+bsb105 //
+bsv100r //
+bsv102r //
+bsv103 //
+ffv101 //
+ffv104 //
+ghv101 //
+kpv106 //
+pmv112 //
+pmv112r //
+
+//@source:capr1.cpp
+cspin2 //
+
+//@source:caprcyc.cpp
+caprcyc //
+
+//@source:cardline.cpp
+cardline // (c) 199? Veltmeijer
+
+//@source:carjmbre.cpp
+carjmbre // (c) 1983 Omori Electric Co., Ltd.
+
+//@source:carpolo.cpp
+carpolo // (c) 1977
+
+//@source:carrera.cpp
+carrera // (c) 19?? BS Electronics
+
+//@source:casloopy.cpp
+casloopy //
+
+//@source:castle.cpp
+castfpt // Fortune Pot
+castrev // Revolution
+
+//@source:caswin.cpp
+caswin // (c) 1985
+rcasino // (c) 1984 Dyna Electronics (D-2608208A1-2)
+rcasino1 // (c) 1984 Dyna Electronics (D-2608208A1-1, Larger Board)
+rcasinoo // (c) 1984 Dyna Electronics (D-2608208A1-1, Smaller Board)
+
+//@source:cat.cpp
+cat //
+
+//@source:cave.cpp
+agallet // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
+agalleth // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
+agalletj // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
+agalletk // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
+agallett // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
+agalletu // (c) 1996 Banpresto / Gazelle (country is in EEPROM)
+crusherm // (c) 1999 Takumi
+ddonpach // (c) 1997 Atlus/Cave
+ddonpacha // hack
+ddonpachj // (c) 1997 Atlus/Cave
+dfeveron // (c) 1998 Cave + Nihon System license
+donpachi // (c) 1995 Atlus/Cave
+donpachihk // (c) 1995 Atlus/Cave
+donpachij // (c) 1995 Atlus/Cave
+donpachikr // (c) 1995 Atlus/Cave
+esprade // (c) 1998 Atlus/Cave
+espradej // (c) 1998 Atlus/Cave (Japan)
+espradejo // (c) 1998 Atlus/Cave (Japan)
+feversos // (c) 1998 Cave + Nihon System license
+gaia // (c) 1999 Noise Factory
+guwange // (c) 1999 Atlus/Cave
+guwanges // (c) 1999 Atlus/Cave
+hotdogst // (c) 1996 Marble
+korokoro // (c) 1999 Takumi
+mazinger // (c) 1994 Banpresto (country is in EEPROM)
+mazingerj // (c) 1994 Banpresto (country is in EEPROM)
+metmqstr // (c) 1995 Banpresto / Pandorabox
+nmaster // (c) 1995 Banpresto / Pandorabox
+pacslot // (c) 1996 Namco
+plegends // (c) 1994 Atlus
+plegendsj // (c) 1994 Atlus
+ppsatan // (c) 1996 <unknown>
+pwrinst2 // (c) 1994 Atlus
+pwrinst2j // (c) 1994 Atlus
+sailormn // (c) 1995 Banpresto (country is in EEPROM)
+sailormnh // (c) 1995 Banpresto (country is in EEPROM)
+sailormnj // (c) 1995 Banpresto (country is in EEPROM)
+sailormnk // (c) 1995 Banpresto (country is in EEPROM)
+sailormno // (c) 1995 Banpresto (country is in EEPROM)
+sailormnoh // (c) 1995 Banpresto (country is in EEPROM)
+sailormnoj // (c) 1995 Banpresto (country is in EEPROM)
+sailormnok // (c) 1995 Banpresto (country is in EEPROM)
+sailormnot // (c) 1995 Banpresto (country is in EEPROM)
+sailormnou // (c) 1995 Banpresto (country is in EEPROM)
+sailormnt // (c) 1995 Banpresto (country is in EEPROM)
+sailormnu // (c) 1995 Banpresto (country is in EEPROM)
+theroes // (c) 2001 Primetek Investments
+tjumpman // (c) 1999 Namco
+uopoko // (c) 1998 Cave + Jaleco license
+uopokoj // (c) 1998 Cave + Jaleco license
+
+//@source:cavepc.cpp
+deathsm2 //
+
+//@source:cb2001.cpp
+cb2001 // (c) 2001 Dyna Electronics
+scherrym // (c) 2001? Dyna Electronics
+
+//@source:cball.cpp
+cball // ?????? prototype 1976/?? [6800]
+
+//@source:cbasebal.cpp
+cbasebal // 10/1989 (c) 1989 Capcom (Japan) (different hardware)
+
+//@source:cbm2.cpp
+b128 // Commodore B128
+b128hp // Commodore B128HP
+b256 // Commodore B256
+b256hp // Commodore B256HP
+b500 // Commodore B500
+bx256hp // Commodore BX256HP
+cbm610 // Commodore CBM 610
+cbm620 // Commodore CBM 620
+cbm620_hu // Commodore CBM 620 (Hungary)
+cbm710 // Commodore CBM 710
+cbm720 // Commodore CBM 720
+cbm720_de //
+cbm720_se // Commodore CBM 720 (Sweden / Finland)
+cbm730 //
+p500 // Commodore P500 (proto, a.k.a. C128-40, PET-II)
+p500p //
+
+//@source:cbuster.cpp
+cbuster // MAB (c) 1990 Data East Corporation (World)
+cbusterj // MAB (c) 1990 Data East Corporation (Japan)
+cbusterw // MAB (c) 1990 Data East Corporation (World)
+twocrude // MAB (c) 1990 Data East USA (US)
+twocrudea // MAB (c) 1990 Data East USA (US)
+
+//@source:cc40.cpp
+cc40 // 1983 TI CC-40
+
+//@source:ccastles.cpp
+ccastles // 136022 (c) 1983
+ccastles1 // 136022 (c) 1983
+ccastles2 // 136022 (c) 1983
+ccastles3 // 136022 (c) 1983
+ccastlesf // 136022 (c) 1983
+ccastlesg // 136022 (c) 1983
+ccastlesj // 136022 (c) 1983
+ccastlesp // 136022 (c) 1983
+
+//@source:cchance.cpp
+cchance // (c)1987 Taito?
+
+//@source:cchasm.cpp
+cchasm //
+cchasm1 // (c) 1983 Cinematronics / GCE
+
+//@source:cclimber.cpp
+bagmanf // bootleg on Falcon FCK-00 (Falcon Crazy Kong) PCB
+bigkong // bootleg
+cannonb // (c) 1985 Soft
+cannonb2 // (c) 1985 TV Game Gruenberg
+cannonb3 // (c) 1985 Soft
+ccboot // bootleg
+ccboot2 // bootleg
+ccbootmr // Model Racing bootleg
+cclimber // (c) 1980 Nichibutsu
+cclimberj // (c) 1980 Nichibutsu
+cclimbroper // Operamatic bootleg
+ckong // (c) 1981 (Kyoei)
+ckongalc // bootleg (Alca)
+ckongdks // Spanish Crazy Kong bootleg
+ckongo // bootleg (Orca)
+ckongpt2 // (c) 1981 Falcon
+ckongpt2a // (c) 1981 Falcon
+ckongpt2b // bootleg
+ckongpt2j // (c) 1981 Falcon
+ckongpt2jeu // bootleg (Jeutel)
+dking // Crazy Kong Bootleg
+guzzler // (c) 1983 Tehkan
+guzzlers // (c) 1983 Tehkan (Swimmer Conversion)
+monkeyd // bootleg
+rpatrol // Orca, from a suspicious set
+rpatrolb // bootleg
+silvland // Falcon
+swimmer // (c) 1982 Tehkan
+swimmera // (c) 1982 Tehkan
+swimmerb // (c) 1982 Tehkan
+toprollr // (c) 1983 Jaleco
+yamato // (c) 1983 Sega
+yamato2 // (c) 1983 Sega
+
+//@source:ccs2810.cpp
+ccs2422 //
+ccs2810 //
+
+//@source:ccs300.cpp
+ccs300 //
+
+//@source:cd2650.cpp
+cd2650 //
+
+//@source:cdc721.cpp
+cdc721 //
+
+//@source:cdi.cpp
+cdi490a //
+cdi910 //
+cdibios // Base unit
+cdimono1 // Philips CD-i model 200 (Mono-I board, PAL)
+cdimono2 // Philips CD-i model 220 (Mono-II board, NTSC)
+quizard // (c) TAB Austria 199?
+quizard_10 // (c) TAB Austria 1996
+quizard_12 // (c) TAB Austria 1996
+quizard_17 // (c) TAB Austria 1996
+quizard2 // (c) TAB Austria 1995
+quizard2_22 // (c) TAB Austria 199?
+quizard3 // (c) TAB Austria 1996
+quizard3_32 // (c) TAB Austria 1996
+quizard4 // (c) TAB Austria 1998
+quizard4_40 // (c) TAB Austria 1997
+quizard4_41 // (c) TAB Austria 1998
+
+//@source:centiped.cpp
+bullsdrt // (c) 1985 Shinkai
+caterplr // (bootleg)
+centipdb // (bootleg)
+centipdd // hack by Two Bit Score
+centiped // 136001 (c) 1980
+centiped1 // 136001 (c) 1980
+centiped2 // 136001 (c) 1980
+centiped3 // 136001 (c) 1980
+magworm // (bootleg)
+magworma // (bootleg)
+mazeinv // (proto) (c) 1982
+millipdd // hack by Two Bit Score
+milliped // 136013 (c) 1982
+millpac // Valadon
+multiped // hack
+warlords // 037153-037159 (c) 1980
+
+//@source:cesclass.cpp
+ccclass //
+hrclass //
+tsclass //
+
+//@source:cfx9850.cpp
+cfx9850 // Casio CFX-9850
+
+//@source:cgc7900.cpp
+cgc7900 //
+
+//@source:cgenie.cpp
+cgenie // Colour Genie EG2000
+cgenienz // Colour Genie EG2000 (New Zealand)
+
+//@source:chaknpop.cpp
+chaknpop // AO4 (c) 1983 Taito Corporation
+
+//@source:cham24.cpp
+cham24 // 2002
+
+//@source:champbas.cpp
+champbas // (c) 1983 Sega
+champbasj // (c) 1983 Alpha Denshi Co.
+champbasja // (c) 1983 Alpha Denshi Co.
+champbb2 // (c) 1983 Sega
+champbb2a // (c) 1983 ?
+champbb2j // (c) 1983 ?
+exctscc2 // (c) 1984 Alpha Denshi Co.
+exctsccr // (c) 1983 Alpha Denshi Co.
+exctsccra // (c) 1983 Alpha Denshi Co.
+exctsccrb // bootleg
+exctsccrj // (c) 1983 Alpha Denshi Co.
+exctsccrjo // (c) 1983 Alpha Denshi Co.
+exctsccru // (c) 1983 Alpha Denshi Co.
+talbot // Volt Electronics
+
+//@source:champbwl.cpp
+champbwl // (c)1989 Romstar. not Taito, but the same Seta video chips
+doraemon // Sunsoft / Epoch / Fujiko - Shogakukan - TV Asahi (prototype)
+
+//@source:chanbara.cpp
+chanbara // (c) 1985 Data East
+
+//@source:chance32.cpp
+chance32 // (c) 19?? PAL Company
+
+//@source:changela.cpp
+changela // ??? (c) 1983 Taito Corporation
+
+//@source:channelf.cpp
+channelf // Fairchild Channel F VES - 1976
+channlf2 // Fairchild Channel F II - 1978
+ingtelma // Ingelen Tele-Match Processor (PAL)
+itttelma // ITT Tele-Match Processor (PAL)
+luxorvec // Luxor Video Entertainment Computer (PAL)
+luxorves // Luxor Video Entertainment System (PAL)
+sabavdpl // SABA Videoplay - 1977 (PAL)
+sabavpl2 // SABA Videoplay 2 (PAL)
+
+//@source:chaos.cpp
+chaos //
+
+//@source:cheekyms.cpp
+cheekyms // 8004 (c) [1980?]
+
+//@source:chessmst.cpp
+chessmst //
+
+//@source:chesstrv.cpp
+borisdpl //
+chesstrv //
+
+//@source:chexx.cpp
+chexx83 // 1983 ICE
+faceoffh // 1983 SoftLogic / Entertainment Enterprises
+
+//@source:chicago.cpp
+dmodrbcc // (c) 1976 Chicago Coin
+
+//@source:chihiro.cpp
+ccfboxa // 2009.03.31 Firmware Update For Compact Flash Box (Rev A)
+chihiro // 2002.?? Chihiro BIOS
+crtaxihr // 2003.02.24 Crazy Taxi High Roller (Rev B)
+ghostsqo // 2004.12 Ghost Squad
+ghostsqu // 2004.12.09 Ghost Squad (Rev A)
+gundamos // 2005.03 Gundam Battle Operating Simulator
+hotd3 // 2002.10.29 The House of the Dead III
+mj2 // 2005.02.02 Sega Network Taisen Mahjong MJ 2 (Rev G)
+mj2c // 2004.12 Sega Network Taisen Mahjong MJ 2 (Rev C)
+mj2f // 2005.02 Sega Network Taisen Mahjong MJ 2 (Rev F)
+mj3 // 2005.12 Sega Network Taisen Mahjong MJ 3 (Rev F)
+mj3d // 2005.12 Sega Network Taisen Mahjong MJ 3 (Rev D)
+mj3evo // 2007.06 Sega Network Taisen Mahjong MJ 3 Evolution (Rev B)
+ollie // 2004.03 Ollie King
+outr2 // 2003.12 Outrun 2 (Rev A)
+outr2st // 2004.12 Outrun 2 Special Tours (Rev A)
+scg06nt // 2005.12 Sega Golf Club 2006: Next Tours (Rev A)
+vcop3 // 2003.02.26 Virtua Cop 3 (Rev A)
+wangmd2b // 2005.10 Wangan Midnight Maximum Tune 2 (Export) (Rev A)
+wangmid // 2004.07 Wangan Midnight Maximum Tune (export) (Rev B)
+wangmid2 // 2005.04 Wangan Midnight Maximum Tune 2 (Japan)
+
+//@source:chinagat.cpp
+chinagat // TA-0023 (c) 1988 Taito + Romstar license (US)
+saiyugou // TA-0023 (c) 1988 (Japan)
+saiyugoub1 // bootleg
+saiyugoub2 // bootleg
+
+//@source:chinsan.cpp
+chinsan // (c) 1987 Sanritsu
+
+//@source:chqflag.cpp
+chqflag // GX717 (c) 1988
+chqflagj // GX717 (c) 1988 (Japan)
+
+//@source:chsuper.cpp
+chmpnum // unknown
+chsuper2 // unknown
+chsuper3 // unknown
+
+//@source:cidelsa.cpp
+altair // (c) 1981 Cidelsa
+destryer // (c) 1981 Cidelsa
+destryera // (c) 1981 Cidelsa
+draco // (c) 1981 Cidelsa
+
+//@source:cinemat.cpp
+armora // (c) 1980
+armorap // (c) 1980
+armorar // (c) 1980 Cinematronics (Rock-ola license)
+barrier // (c) 1979 Vectorbeam
+boxingb // (c) 1981
+demon // (c) 1982 Rock-ola
+qb3 // (c) 1982 Rock-ola - prototype
+ripoff // (c) 1980
+solarq // (c) 1981
+spaceftr // (c) 1981 Zaccaria
+spaceshp // (c) 1978 Cinematronics (Sega licence)
+spacewar // (c) 1977
+speedfrk // (c) 1979 Vectorbeam
+starcas // (c) 1980
+starcas1 // (c) 1980
+starcase // (c) 1980 Cinematronics (Mottoeis license)
+starcasp // (c) 1980 prototype
+starhawk // (c) 1979
+stellcas // bootleg
+sundance // (c) 1979
+tailg // (c) 1979
+warrior // (c) 1979 Vectorbeam
+wotw // (c) 1981
+wotwc // (c) 1981
+
+//@source:circus.cpp
+circus // no copyright notice [1977?]
+crash // Exidy [1979?]
+ripcord // Exidy [1977?]
+robotbwl // no copyright notice
+smash // bootleg
+springbd // Sub-Electro bootleg of Circus
+
+//@source:circusc.cpp
+circusc // GX380 (c) 1984
+circusc2 // GX380 (c) 1984
+circusc3 // GX380 (c) 1984
+circusc4 // GX380 (c) 1984
+circuscc // GX380 (c) 1984 + Centuri license
+circusce // GX380 (c) 1984 + Centuri license
+
+//@source:cischeat.cpp
+armchmp2 // (c) 1992 Jaleco
+armchmp2o // (c) 1992 Jaleco
+bigrun // (c) 1989 Jaleco
+captflag // (c) 1993 Jaleco
+cischeat // (c) 1990 Jaleco
+f1gpstar // (c) 1991 Jaleco
+f1gpstr2 // (c) 1993 Jaleco
+scudhamm // (c) 1994 Jaleco
+wildplt // (c) 1992 Jaleco
+
+//@source:citycon.cpp
+citycon // (c) 1985 Jaleco
+citycona // (c) 1985 Jaleco
+cruisin // (c) 1985 Jaleco/Kitkorp
+
+//@source:clayshoo.cpp
+clayshoo // [1979 Allied Leisure]
+
+//@source:clcd.cpp
+clcd // Commodore LCD
+
+//@source:cliffhgr.cpp
+cliffhgr // (c) 1983
+cliffhgra // (c) 1983
+cliffhgra2 // (c) 1983
+goaltogo // (c) 1983
+
+//@source:cloak.cpp
+agentx1 // 136023 (c) 1983
+agentx2 // 136023 (c) 1983
+agentx3 // 136023 (c) 1983
+agentx4 // 136023 (c) 1983
+cloak // 136023 (c) 1983
+cloakfr // 136023 (c) 1983
+cloakgr // 136023 (c) 1983
+cloaksp // 136023 (c) 1983
+
+//@source:cloud9.cpp
+cloud9 // (proto) (c) 1983
+firebeas // (proto) (c) 1983
+
+//@source:clowndwn.cpp
+clowndwn // Elwood Clown Roll Down
+
+//@source:clshroad.cpp
+clshroad // (c) 1986 Wood Place Inc.
+clshroadd // (c) 1986 Wood Place Inc. (Data East license)
+clshroads // (c) 1986 Wood Place Inc. (Status Games license)
+firebatl // (c) 1984 Taito
+
+//@source:cm1800.cpp
+cm1800 //
+
+//@source:cmmb.cpp
+cmmb162 //
+
+//@source:cninja.cpp
+cninja // MAG (c) 1991 Data East Corporation (World)
+cninja1 // MAG (c) 1991 Data East Corporation (World)
+cninjabl // bootleg
+cninjabl2 // bootleg
+cninjau // MAG (c) 1991 Data East Corporation (US)
+deathbrd // MAF (c) 1992 Data East Corporation (Japan)
+edrandy // MAD (c) 1990 Data East Corporation (World)
+edrandy1 // MAD (c) 1990 Data East Corporation (World)
+edrandy2 // MAD (c) 1990 Data East Corporation (World)
+edrandyj // MAD (c) 1990 Data East Corporation (Japan)
+joemac // MAG (c) 1991 Data East Corporation (Japan)
+mutantf // MAF (c) 1992 Data East Corporation (World)
+mutantf2 // MAF (c) 1992 Data East Corporation (World)
+mutantf3 // MAF (c) 1992 Data East Corporation (World)
+mutantf4 // MAF (c) 1992 Data East Corporation (World)
+robocop2 // MAH (c) 1991 Data East Corporation (World)
+robocop2j // MAH (c) 1991 Data East Corporation (Japan)
+robocop2u // MAH (c) 1991 Data East Corporation (US)
+robocop2ua // MAH (c) 1991 Data East Corporation (US)
+stoneage // bootleg
+
+//@source:cntsteer.cpp
+cntsteer // (c) 1985 Data East Corporation
+gekitsui // (c) 1985 Data East Corporation (Japan)
+zerotrgt // (c) 1985 Data East Corporation
+zerotrgta // (c) 1985 Data East Corporation
+
+//@source:cobra.cpp
+bujutsu // G?645 (c)1997
+racjamdx // G?676 (c)1997 Japan JAA
+
+//@source:coco12.cpp
+coco // Color Computer
+coco2 // Color Computer 2
+coco2b // Color Computer 2B (uses M6847T1 video chip)
+cocoe // Color Computer (Extended BASIC 1.0)
+cp400 // Prologica CP400
+lzcolor64 // Digiponto LZ Color64
+mx1600 // Dynacom MX-1600
+
+//@source:coco3.cpp
+coco3 // Color Computer 3 (NTSC)
+coco3dw1 // Coco 3 with HDB-DOS
+coco3h // Hacked Color Computer 3 (6309)
+coco3p // Color Computer 3 (PAL)
+
+//@source:cocoloco.cpp
+cocoloco // 198?, Petaco S.A.
+
+//@source:codata.cpp
+codata //
+
+//@source:coinmstr.cpp
+jpcoin // (c) 19?? Coinmaster
+jpcoin2 // (c) 19?? Coinmaster
+pokeroul // (c) 1990 Coinmaster
+quizmstr // (c) 1985 Coinmaster
+supnudg2 // (c) 1989 Coinmaster
+trailblz // (c) 1987 Coinmaster
+
+//@source:coinmvga.cpp
+cmkenosp // (c) 2000 Coinmaster-Gaming, Ltd.
+cmkenospa // (c) 2000 Coinmaster-Gaming, Ltd.
+cmrltv75 // (c) 2001 Coinmaster-Gaming, Ltd.
+colorama // (c) 2000 Coinmaster-Gaming, Ltd.
+coloramas // (c) 2000 Coinmaster-Gaming, Ltd.
+
+//@source:coleco.cpp
+coleco // ColecoVision (Original BIOS)
+colecop // Colecovision PAL (Italy)
+czz50 // Bit Corporation Chuang Zao Zhe 50
+dina // Telegames Dina
+onyx // Microdigital ONYX (Brazilian Coleco clone / unreleased prototype)
+prsarcde // Telegames Personal Arcade
+svi603 // Spectravideo SVI-603 Coleco Game Adapter
+
+//@source:combatsc.cpp
+bootcamp // GX611 (c) 1987
+bootcampa // GX611 (c) 1987
+combatsc // GX611 (c) 1988
+combatscb // bootleg
+combatscj // GX611 (c) 1987 (Japan)
+combatsct // GX611 (c) 1987
+
+//@source:comebaby.cpp
+comebaby // (c) 2000 ExPotato
+
+//@source:commando.cpp
+commando // 5/1985 (c) 1985 (World)
+commandob // bootleg
+commandob2 // bootleg 2
+commandoj // 5/1985 (c) 1985 (Japan)
+commandou // 5/1985 (c) 1985 + Data East license (US)
+commandou2 // 5/1985 (c) 1985 + Data East license (US)
+sinvasn // Europe original?
+sinvasnb // bootleg
+
+//@source:compgolf.cpp
+compgolf // (c) 1985 Data East Corporation (Japan)
+compgolfo // (c) 1985 Data East Corporation (Japan)
+
+//@source:compis.cpp
+compis // 1985 Telenova Compis
+compis2 // 1985 Telenova Compis
+
+//@source:compucolor.cpp
+compclr2 //
+
+//@source:comquest.cpp
+comquest // Comquest Plus German
+
+//@source:comx35.cpp
+comx35n //
+comx35p //
+
+//@source:concept.cpp
+concept // 1982 Corvus Concept
+
+//@source:contra.cpp
+contra // GX633 (c) 1987
+contra1 // GX633 (c) 1987
+contrab // bootleg
+contrabj // bootleg
+contrabj1 // bootleg
+contrae // GX633 (c) 1987
+contraj // GX633 (c) 1987 (Japan)
+contraj1 // GX633 (c) 1987 (Japan)
+gryzor // GX633 (c) 1987
+gryzor1 // GX633 (c) 1987
+
+//@source:coolpool.cpp
+9ballsht // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
+9ballsht2 // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
+9ballsht3 // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
+9ballshtc // (c) 1993 E-Scape EnterMedia + "marketed by Bundra Games"
+amerdart // (c) 1989 Ameri Corporation
+amerdart2 // (c) 1989 Ameri Corporation
+amerdart3 // (c) 1989 Ameri Corporation
+coolpool // (c) 1992 Catalina Games
+
+//@source:coolridr.cpp
+aquastge //
+coolridr // 1995.04 Cool Riders
+
+//@source:cop01.cpp
+cop01 // (c) 1985
+cop01a // (c) 1985
+mightguy // (c) 1986
+
+//@source:cops.cpp
+cops // (c) 1994
+copsuk // (c) 1994 (Nova/Deith Leisure)
+revlatns // (c) 199?
+
+//@source:copsnrob.cpp
+copsnrob // 005625 1976/07 [6502]
+
+//@source:corona.cpp
+luckyrlt // (c) 1990 unknown
+rcirulet // (c) 199? Entretenimientos GEMINIS
+re800ea // (c) 1991 Entretenimientos GEMINIS
+re800v1 // (c) 1991 Entretenimientos GEMINIS
+re800v3 // (c) 1992 Entretenimientos GEMINIS
+winner81 // (c) 1981 Corona Co, Ltd.
+winner81b // (c) 1981 Corona Co, Ltd.
+winner82 // (c) 1982 Corona Co, Ltd.
+
+//@source:cortex.cpp
+cortex //
+
+//@source:cosmic.cpp
+cosmica // 7910-AII (c) [1979]
+cosmica1 // 7910-A (c) [1979]
+cosmica2 // 7910 (c) 1979
+cosmicg // 7907 (c) 1979
+cosmicgi // bootleg (Inder)
+devzone // 8022 (c) [1980]
+devzone2 // 8022 (c) [1980]
+magspot // ???? (c) [1980]
+magspot2 // 8013 (c) [1980]
+nomnlnd // 8003 (c) [1980?]
+nomnlndg // 8003 (c) [1980?] + Gottlieb
+panic // 8015 (c) 1980
+panic2 // 8015 (c) 1980
+panic3 // 8015 (c) 1980
+panicger // 8015 (c) 1980
+panich // 8015 (c) 1980
+
+//@source:cosmicos.cpp
+cosmicos //
+
+//@source:cp1.cpp
+cp1 //
+
+//@source:cps1.cpp
+1941 // 27/02/1990 (c) 1990 (World)
+1941j // 2/1990 (c) 1990 (Japan)
+1941r1 // 2/1990 (c) 1990 (World)
+1941u // 27/02/1990 (c) 1990 (USA)
+3wonders // 20/05/1991 (c) 1991 (World)
+3wondersb // bootleg
+3wondersh // hack
+3wondersr1 // 13/05/1991 (c) 1991 (World)
+3wondersu // 20/05/1991 (c) 1991 (USA)
+area88 // 8/1989 (c) 1989 (Japan)
+area88r // 8/1989 (c) 1989 (Japan)
+captcomm // 02/12/1991 (c) 1991 (World)
+captcommb // bootleg
+captcommj // 02/12/1991 (c) 1991 (Japan)
+captcommjr1 // 28/09/1991 (c) 1991 (Japan)
+captcommr1 // 14/10/1991 (c) 1991 (World)
+captcommu // 28/09/1991 (c) 1991 (USA)
+cawing // 12/10/1990 (c) 1990 (World)
+cawingj // 12/10/1990 (c) 1990 (Japan)
+cawingr1 // 09/10/1990 (c) 1990 (World)
+cawingu // 12/10/1990 (c) 1990 (USA)
+chikij // 19/06/1990 (c) 1990 (Japan)
+cworld2j // 11/06/1992 (c) 1992 (Japan)
+cworld2ja // 11/06/1992 (c) 1992 (Japan)
+cworld2jb // 11/06/1992 (c) 1992 (Japan)
+daimakai // 12/1988 (c) 1988 (Japan)
+daimakair // 12/1988 (c) 1988 (Japan)
+dino // 01/02/1993 (c) 1993 (World) (CPS1 + QSound)
+dinohunt // bootleg
+dinoj // 01/02/1993 (c) 1993 (Japan) (CPS1 + QSound)
+dinou // 01/02/1993 (c) 1993 (USA) (CPS1 + QSound)
+dynwar // 4/1989 (c) 1989 (USA)
+dynwara // 4/1989 (c) 1989 (USA)
+dynwarj // 4/1989 (c) 1989 (Japan)
+dynwarjr // 4/1989 (c) 1989 (Japan)
+ffight // 12/1989 (c) 1989 (World)
+ffighta // 12/1989 (c) 1989 (World)
+ffightj // 12/1989 (c) 1989 (Japan)
+ffightj1 // 12/01/1990 (c) 1989 (Japan)
+ffightj2 // 05/03/1990 (c) 1989 (Japan)
+ffightj3 // 13/06/1990 (c) 1989 (Japan)
+ffightjh // hack
+ffightu // 12/1989 (c) 1989 (USA)
+ffightu1 // 12/1989 (c) 1989 (USA)
+ffightua // 12/01/1990 (c) 1989 (USA)
+ffightub // 24/04/1990 (c) 1989 (USA)
+ffightuc // 12/06/1990 (c) 1989 (USA)
+forgottn // 7/1988 (c) 1988 (World)
+forgottna // 7/1988 (c) 1988 (World)
+forgottnu // 7/1988 (c) 1988 (USA)
+forgottnu1 // 7/1988 (c) 1988 (USA)
+forgottnua // 7/1988 (c) 1988 (USA)
+forgottnuaa // 7/1988 (c) 1988 (USA)
+ganbare // 11/04/2000 (c) 2000 (Japan)
+ghouls // 12/1988 (c) 1988 (World)
+ghoulsu // 12/1988 (c) 1988 (USA)
+knights // 27/11/1991 (c) 1991 (World)
+knightsj // 27/11/1991 (c) 1991 (Japan)
+knightsja // 27/11/1991 (c) 1991 (Japan)
+knightsu // 27/11/1991 (c) 1991 (USA)
+kod // 05/08/1991 (c) 1991 (World)
+kodj // 05/08/1991 (c) 1991 (Japan)
+kodja // 05/08/1991 (c) 1991 (Japan)
+kodr1 // 11/07/1991 (c) 1991 (World)
+kodu // 10/09/1991 (c) 1991 (USA)
+lostwrld // 7/1988 (c) 1988 (Japan)
+lostwrldo // 7/1988 (c) 1988 (Japan)
+mbomberj // 13/07/1993 (c) 1993 (Japan) (CPS1 + QSound)
+mbombrd // 06/12/1993 (c) 1993 (World) (CPS1 + QSound)
+mbombrdj // 06/12/1993 (c) 1993 (Japan) (CPS1 + QSound)
+megaman // 06/10/1995 (c) 1995 (USA)
+megamana // 06/10/1995 (c) 1995 (Asia)
+mercs // 02/03/1990 (c) 1990 (World)
+mercsj // 02/03/1990 (c) 1990 (Japan)
+mercsu // 08/06/1990 (c) 1990 (USA)
+mercsur1 // 02/03/1990 (c) 1990 (USA)
+msword // 25/07/1990 (c) 1990 (World)
+mswordj // 23/06/1990 (c) 1990 (Japan)
+mswordr1 // 23/06/1990 (c) 1990 (World)
+mswordu // 25/07/1990 (c) 1990 (USA)
+mtwins // 19/06/1990 (c) 1990 (World)
+nemo // 30/11/1990 (c) 1990 (World)
+nemoj // 20/11/1990 (c) 1990 (Japan)
+nemor1 // 09/11/1990 (c) 1990 (World)
+pang3 // 01/06/1995 (c) 1995 Mitchell (Euro) not listed on Capcom's site
+pang3b // bootleg
+pang3j // 11/05/1995 (c) 1995 Mitchell (Japan) not listed on Capcom's site
+pang3r1 // 11/05/1995 (c) 1995 Mitchell (Euro) not listed on Capcom's site
+pnickj // 08/06/1994 (c) 1994 Compile + Capcom license (Japan) not listed on Capcom's site
+punisher // 22/04/1993 (c) 1993 (World) (CPS1 + QSound)
+punisherbz // bootleg
+punisherh // 22/04/1993 (c) 1993 (Hispanic) (CPS1 + QSound)
+punisherj // 22/04/1993 (c) 1993 (Japan) (CPS1 + QSound)
+punisheru // 22/04/1993 (c) 1993 (USA) (CPS1 + QSound)
+qad // 01/07/1992 (c) 1992 (USA)
+qadjr // 21/09/1994 (c) 1994 (Japan)
+qtono2j // 23/01/1995 (c) 1995 (Japan)
+rockmanj // 22/09/1995 (c) 1995 (Japan)
+sf2 // 22/05/1991 (c) 1991 (World)
+sf2acc // hack
+sf2acca // hack
+sf2accp2 // hack
+sf2amf // bootleg
+sf2amf2 // bootleg
+sf2bhh // hack
+sf2ce // 13/05/1992 (c) 1992 (World)
+sf2ceblp // hack
+sf2cebltw // hack
+sf2ceea // 13/03/1992 (c) 1992 (World)
+sf2ceja // 22/03/1992 (c) 1992 (Japan)
+sf2cejb // 13/05/1992 (c) 1992 (Japan)
+sf2cejc // 03/08/1992 (c) 1992 (Japan)
+sf2ceua // 13/03/1992 (c) 1992 (USA)
+sf2ceub // 13/05/1992 (c) 1992 (USA)
+sf2ceuc // 03/08/1992 (c) 1992 (USA)
+sf2dkot2 // hack
+sf2dongb // hack
+sf2eb // 14/02/1991 (c) 1991 (World)
+sf2ebbl // 14/02/1991 (c) 1991 (World, bootleg)
+sf2ebbl2 // 14/02/1991 (c) 1991 (World, bootleg)
+sf2ebbl3 // 14/02/1991 (c) 1991 (World, bootleg)
+sf2ed // 18/03/1991 (c) 1991 (World)
+sf2ee // 28/02/1991 (c) 1991 (World)
+sf2hf // 09/12/1992 (c) 1992 (World)
+sf2hfj // 09/12/1992 (c) 1992 (Japan)
+sf2hfu // 09/12/1992 (c) 1992 (USA)
+sf2j // 10/12/1991 (c) 1991 (Japan)
+sf2ja // 14/02/1991 (c) 1991 (Japan)
+sf2jc // 06/03/1991 (c) 1991 (Japan)
+sf2jf // 11/04/1991 (c) 1991 (Japan)
+sf2jh // 22/05/1991 (c) 1991 (Japan)
+sf2jl // 12/03/1992 (c) 1991 (Japan)
+sf2koryu // hack
+sf2m10 // bootleg
+sf2m2 // hack
+sf2m3 // hack
+sf2m4 // hack
+sf2m5 // hack
+sf2m6 // hack
+sf2m7 // hack
+sf2m8 // bootleg
+sf2qp1 // hack
+sf2rb // hack
+sf2rb2 // hack
+sf2rb3 // hack
+sf2red // hack
+sf2rk // bootleg
+sf2stt // bootleg
+sf2thndr // hack
+sf2ua // 06/02/1991 (c) 1991 (USA)
+sf2ub // 14/02/1991 (c) 1991 (USA)
+sf2uc // 06/03/1991 (c) 1991 (USA)
+sf2ud // 18/03/1991 (c) 1991 (USA)
+sf2ue // 28/02/1991 (c) 1991 (USA)
+sf2uf // 11/04/1991 (c) 1991 (USA)
+sf2ug // 22/05/1991 (c) 1991 (USA, Rev. G)
+sf2ui // 22/05/1991 (c) 1991 (USA, Rev. I)
+sf2uk // 01/11/1991 (c) 1991 (USA)
+sf2v004 // hack
+sf2yyc // hack
+sfach // CPS Changer (Street Fighter Alpha)
+sfzbch // CPS Changer (Street Fighter ZERO Brazil)
+sfzch // CPS Changer (Street Fighter ZERO)
+slammast // 13/07/1993 (c) 1993 (World) (CPS1 + QSound)
+slammastu // 13/07/1993 (c) 1993 (USA) (CPS1 + QSound)
+strider // 3/1989 (c) 1989 (not explicitly stated but should be USA)
+striderj // 3/1989 (c) 1989 (Japan)
+striderjr // 3/1989 (c) 1989 (Japan)
+striderua // 3/1989 (c) 1989 (not explicitly stated but should be USA)
+strideruc // conversion
+unsquad // 8/1989 (c) 1989 (USA)
+varth // 14/07/1992 (c) 1992 (World)
+varthj // 14/07/1992 (c) 1992 (Japan)
+varthjr // 14/07/1992 (c) 1992 (Japan)
+varthr1 // 12/06/1992 (c) 1992 (World)
+varthu // 12/06/1992 (c) 1992 (USA)
+willow // 6/1989 (c) 1989 (World)
+willowj // 6/1989 (c) 1989 (Japan)
+willowu // 6/1989 (c) 1989 (USA)
+willowuo // 6/1989 (c) 1989 (USA)
+wof // 31/10/1992 (c) 1992 (World) (CPS1 + QSound)
+wofa // 05/10/1992 (c) 1992 (Asia) (CPS1 + QSound)
+wofch // CPS Changer (Tenchi Wo Kurau II)
+wofhfh // bootleg
+wofj // 31/10/1992 (c) 1992 (Japan) (CPS1 + QSound)
+wofr1 // 02/10/1992 (c) 1992 (World) (CPS1 + QSound)
+wofu // 31/10/1992 (c) 1992 (USA) (CPS1 + QSound)
+wonder3 // 20/05/1991 (c) 1991 (Japan)
+
+//@source:cps2.cpp
+1944 // 20/06/2000 (c) 2000 Eighting/Raizing (USA)
+1944d //
+1944j // 20/06/2000 (c) 2000 Eighting/Raizing (Japan)
+19xx // 07/12/1995 (c) 1996 (USA)
+19xxa // 04/01/1996 (c) 1996 (Asia)
+19xxar1 // 07/12/1995 (c) 1996 (Asia)
+19xxb // 18/12/1995 (c) 1996 (Brazil)
+19xxd //
+19xxh // 18/12/1995 (c) 1996 (Hispanic)
+19xxj // 04/01/1996 (c) 1996 (Japan)
+19xxjr1 // 25/12/1995 (c) 1996 (Japan)
+19xxjr2 // 07/12/1995 (c) 1996 (Japan)
+armwar // 24/10/1994 (c) 1994 (Euro)
+armwar1d //
+armwara // 24/10/1994 (c) 1994 (Asia)
+armwarar1 // 20/09/1994 (c) 1994 (Asia)
+armwarr1 // 11/10/1994 (c) 1994 (Euro)
+armwaru // 24/10/1994 (c) 1994 (USA)
+armwaru1 // 20/09/1994 (c) 1994 (USA)
+avsp // 20/05/1994 (c) 1994 (Euro)
+avspa // 20/05/1994 (c) 1994 (Asia)
+avspd //
+avsph // 20/05/1994 (c) 1994 (Hispanic)
+avspj // 20/05/1994 (c) 1994 (Japan)
+avspu // 20/05/1994 (c) 1994 (USA)
+batcir // 19/03/1997 (c) 1997 (Euro)
+batcira // 19/03/1997 (c) 1997 (Asia)
+batcird //
+batcirj // 19/03/1997 (c) 1997 (Japan)
+choko // 20/08/2001 (c) 2001 Mitchell (Japan)
+csclub // 17/10/1997 (c) 1997 (Euro)
+csclub1 // 22/07/1997 (c) 1997 (Euro)
+csclub1d //
+cscluba // 22/07/1997 (c) 1997 (Asia)
+csclubh // 22/07/1997 (c) 1997 (Hispanic)
+csclubj // 22/07/1997 (c) 1997 (Japan)
+csclubjy // 22/07/1997 (c) 1997 (Japan)
+cybots // 24/04/1995 (c) 1995 (Euro)
+cybotsj // 20/04/1995 (c) 1995 (Japan)
+cybotsjd //
+cybotsu // 24/04/1995 (c) 1995 (USA)
+cybotsud //
+ddsom // 19/06/1996 (c) 1996 (Euro)
+ddsoma // 19/06/1996 (c) 1996 (Asia)
+ddsomar1 // 08/02/1996 (c) 1996 (Asia)
+ddsomb // 23/02/1996 (c) 1996 (Brazil)
+ddsomh // 23/02/1996 (c) 1996 (Hispanic)
+ddsomj // 19/06/1996 (c) 1996 (Japan)
+ddsomjr1 // 06/02/1996 (c) 1996 (Japan)
+ddsomr1 // 23/02/1996 (c) 1996 (Euro)
+ddsomr2 // 09/02/1996 (c) 1996 (Euro)
+ddsomr3 // 08/02/1996 (c) 1996 (Euro)
+ddsomu // 19/06/1996 (c) 1996 (USA)
+ddsomud //
+ddsomur1 // 09/02/1996 (c) 1996 (USA)
+ddtod // 12/04/1994 (c) 1993 (Euro)
+ddtoda // 12/04/1994 (c) 1993 (Asia)
+ddtodar1 // 13/01/1994 (c) 1993 (Asia)
+ddtodd //
+ddtodh // 12/04/1994 (c) 1993 (Hispanic)
+ddtodhr1 // 25/01/1994 (c) 1993 (Hispanic)
+ddtodhr2 // 13/01/1994 (c) 1993 (Hispanic)
+ddtodj // 12/04/1994 (c) 1993 (Japan)
+ddtodjr1 // 25/01/1994 (c) 1993 (Japan)
+ddtodjr2 // 13/01/1994 (c) 1993 (Japan)
+ddtodr1 // 13/01/1994 (c) 1993 (Euro)
+ddtodu // 25/01/1994 (c) 1993 (USA)
+ddtodur1 // 13/01/1994 (c) 1993 (USA)
+dimahoo // 21/01/2000 (c) 2000 Eighting/Raizing (USA)
+dimahoou // 21/01/2000 (c) 2000 Eighting/Raizing (USA)
+dimahoud //
+dstlk // 05/07/1994 (c) 1994 (Euro)
+dstlka // 05/07/1994 (c) 1994 (Asia)
+dstlkh // 18/08/1994 (c) 1994 (Hispanic)
+dstlku // 18/08/1994 (c) 1994 (USA)
+dstlku1d //
+dstlkur1 // 05/07/1994 (c) 1994 (USA)
+ecofghtr // 03/12/1993 (c) 1994 (World)
+ecofghtra // 03/12/1993 (c) 1994 (Asia)
+ecofghtrd //
+ecofghtrh // 03/12/1993 (c) 1994 (Hispanic)
+ecofghtru // 15/02/1994 (c) 1994 (USA)
+ecofghtru1 // 03/12/1993 (c) 1994 (USA)
+gigaman2 // bootleg
+gigawing // 22/02/1999 (c) 1999 Takumi (USA)
+gigawinga // 22/02/1999 (c) 1999 Takumi (Asia)
+gigawingb // 22/02/1999 (c) 1999 Takumi (Brazil)
+gigawingd //
+gigawingh // 22/02/1999 (c) 1999 Takumi (Hispanic)
+gigawingj // 23/02/1999 (c) 1999 Takumi (Japan)
+gigawingjd //
+gmahou // 21/01/2000 (c) 2000 Eighting/Raizing (Japan)
+hsf2 // 02/02/2004 (c) 2003, 2004 (USA)
+hsf2a // 02/02/2004 (c) 2003, 2004 (Asia)
+hsf2d //
+hsf2j // 22/12/2003 (c) 2003, 2004 (Japan)
+jyangoku // 27/05/1999 (c) 1999 (Japan)
+megaman2 // 08/07/1996 (c) 1996 (USA)
+megaman2a // 08/07/1996 (c) 1996 (Asia)
+megaman2h // 12/07/1996 (c) 1996 (Hispanic)
+megamn2d //
+mmancp2u // 06/10/1995 (c) 1995 (USA)
+mmancp2ur1 // 26/09/1995 (c) 1995 (USA)
+mmatrix // 12/04/2000 (c) 2000 Takumi (USA)
+mmatrixd //
+mmatrixj // 12/04/2000 (c) 2000 Takumi (Japan)
+mpang // 10/10/2000 (c) 2000 Mitchell (Euro)
+mpangj // 11/10/2000 (c) 2000 Mitchell (Japan)
+mpangr1 // 25/09/2000 (c) 2000 Mitchell (Euro)
+mpangu // 10/10/2000 (c) 2000 Mitchell (USA)
+msh // 24/10/1995 (c) 1995 (Euro)
+msha // 24/10/1995 (c) 1995 (Asia)
+mshb // 17/11/1995 (c) 1995 (Brazil)
+mshh // 17/11/1995 (c) 1995 (Hispanic)
+mshj // 17/11/1995 (c) 1995 (Japan)
+mshjr1 // 24/10/1995 (c) 1995 (Japan)
+mshu // 24/10/1995 (c) 1995 (USA)
+mshud //
+mshvsf // 25/06/1997 (c) 1997 (Euro)
+mshvsfa // 25/06/1997 (c) 1997 (Asia)
+mshvsfa1 // 20/06/1997 (c) 1997 (Asia)
+mshvsfb // 27/08/1997 (c) 1997 (Brazil)
+mshvsfb1 // 25/06/1997 (c) 1997 (Brazil)
+mshvsfh // 25/06/1997 (c) 1997 (Hispanic)
+mshvsfj // 07/07/1997 (c) 1997 (Japan)
+mshvsfj1 // 02/07/1997 (c) 1997 (Japan)
+mshvsfj2 // 25/06/1997 (c) 1997 (Japan)
+mshvsfu // 27/08/1997 (c) 1997 (USA)
+mshvsfu1 // 25/06/1997 (c) 1997 (USA)
+mshvsfu1d //
+mvsc // 23/01/1998 (c) 1998 (Euro)
+mvsca // 23/01/1998 (c) 1998 (Asia)
+mvscar1 // 12/01/1998 (c) 1998 (Asia)
+mvscb // 23/01/1998 (c) 1998 (Brazil)
+mvsch // 23/01/1998 (c) 1998 (Hispanic)
+mvscj // 23/01/1998 (c) 1998 (Japan)
+mvscjr1 // 12/01/1998 (c) 1998 (Japan)
+mvscjsing // 23/01/1998 (c) 1998 (Japan) - Single PCB
+mvscr1 // 12/01/1998 (c) 1998 (Euro)
+mvscu // 23/01/1998 (c) 1998 (USA)
+mvscud //
+mvscur1 // 23/01/1998 (c) 1998 (USA)
+nwarr // 16/03/1995 (c) 1995 (Euro)
+nwarra // 02/03/1995 (c) 1995 (Asia)
+nwarrb // 03/04/1995 (c) 1995 (Brazil)
+nwarrh // 03/04/1995 (c) 1995 (Hispanic)
+nwarru // 06/04/1995 (c) 1995 (USA)
+nwarrud //
+pfghtj // 04/09/1997 (c) 1997 (Japan)
+pgear // 24/10/1994 (c) 1994 (Japan)
+pgearr1 // 16/09/1994 (c) 1994 (Japan)
+progear // 17/01/2001 (c) 2001 Cave (USA)
+progeara // 17/01/2001 (c) 2001 Cave (Asia)
+progearj // 17/01/2001 (c) 2001 Cave (Japan)
+progearjbl //
+progearjd //
+progearud //
+pzloop2 // 02/03/2001 (c) 2001 Mitchell (Euro)
+pzloop2j // 26/02/2001 (c) 2001 Mitchell (Japan)
+pzloop2jr1 // 05/02/2001 (c) 2001 Mitchell (Japan)
+qndream // 26/08/1996 (c) 1996 (Japan)
+ringdest // 02/09/1994 (c) 1994 (Euro)
+ringdesta // 31/08/1994 (c) 1994 (Asia)
+ringdesth // 02/09/1994 (c) 1994 (Hispanic)
+ringdstd //
+rmancp2j // 22/09/1995 (c) 1995 (Japan)
+rockman2j // 08/07/1996 (c) 1996 (Japan)
+sfa // 27/07/1995 (c) 1995 (Euro)
+sfa2 // 06/03/1996 (c) 1996 (Euro)
+sfa2u // 30/04/1996 (c) 1996 (USA)
+sfa2ur1 // 06/03/1996 (c) 1996 (USA)
+sfa3 // 04/09/1998 (c) 1998 (USA)
+sfa3b // 29/06/1998 (c) 1998 (Brazil)
+sfa3h // 04/09/1998 (c) 1998 (Hispanic)
+sfa3hr1 // 29/06/1998 (c) 1998 (Hispanic)
+sfa3u // 04/09/1998 (c) 1998 (USA)
+sfa3ud //
+sfa3ur1 // 29/06/1998 (c) 1998 (USA)
+sfa3us // 16/06/1998 (c) 1998 (USA)
+sfad //
+sfar1 // 18/07/1995 (c) 1995 (Euro)
+sfar2 // 27/06/1995 (c) 1995 (Euro)
+sfar3 // 05/06/1995 (c) 1995 (Euro)
+sfau // 27/06/1995 (c) 1995 (USA)
+sfz2a // 27/02/1996 (c) 1996 (Asia)
+sfz2ad //
+sfz2al // 26/08/1996 (c) 1996 (Asia)
+sfz2alb // 13/08/1996 (c) 1996 (Brazil)
+sfz2ald //
+sfz2alh // 13/08/1996 (c) 1996 (Hispanic)
+sfz2alj // 05/08/1996 (c) 1996 (Japan)
+sfz2b // 31/05/1996 (c) 1996 (Brazil)
+sfz2br1 // 04/03/1996 (c) 1996 (Brazil)
+sfz2h // 04/03/1996 (c) 1996 (Hispanic)
+sfz2j // 30/04/1996 (c) 1996 (Japan)
+sfz2jd //
+sfz2jr1 // 27/02/1996 (c) 1996 (Japan)
+sfz2n // 29/02/1996 (c) 1996 (Oceania)
+sfz3a // 04/09/1998 (c) 1998 (Asia)
+sfz3ar1 // 01/07/1998 (c) 1998 (Asia)
+sfz3j // 04/09/1998 (c) 1998 (Japan)
+sfz3jr1 // 27/07/1998 (c) 1998 (Japan)
+sfz3jr2 // 29/06/1998 (c) 1998 (Japan)
+sfz3jr2d //
+sfza // 27/06/1995 (c) 1995 (Asia)
+sfzar1 // 05/06/1995 (c) 1995 (Asia)
+sfzb // 09/11/1995 (c) 1995 (Brazil)
+sfzbr1 // 27/07/1995 (c) 1995 (Brazil)
+sfzh // 18/07/1995 (c) 1995 (Hispanic)
+sfzhr1 // 27/06/1995 (c) 1995 (Hispanic)
+sfzj // 27/07/1995 (c) 1995 (Japan)
+sfzjr1 // 27/06/1995 (c) 1995 (Japan)
+sfzjr2 // 05/06/1995 (c) 1995 (Japan)
+sgemf // 04/09/1997 (c) 1997 (USA)
+sgemfa // 04/09/1997 (c) 1997 (Asia)
+sgemfd //
+sgemfh // 04/09/1997 (c) 1997 (Hispanic)
+smbomb // 31/08/1994 (c) 1994 (Japan)
+smbombr1 // 08/08/1994 (c) 1994 (Japan)
+spf2t // 29/05/1996 (c) 1996 (Europe)
+spf2ta // 29/05/1996 (c) 1996 (Asia)
+spf2td //
+spf2th // 31/05/1996 (c) 1996 (Hispanic)
+spf2tu // 20/06/1996 (c) 1996 (USA)
+spf2xj // 31/05/1996 (c) 1996 (Japan)
+spf2xjd //
+ssf2 // 05/10/1993 (c) 1993 (World)
+ssf2a // 05/10/1993 (c) 1993 (Asia)
+ssf2ar1 // 14/09/1993 (c) 1993 (Asia)
+ssf2h // 11/09/1993 (c) 1993 (Hispanic)
+ssf2j // 05/10/1993 (c) 1993 (Japan)
+ssf2jr1 // 11/09/1993 (c) 1993 (Japan)
+ssf2jr2 // 10/09/1993 (c) 1993 (Japan)
+ssf2r1 // 11/09/1993 (c) 1993 (World)
+ssf2t // 23/02/1994 (c) 1994 (World)
+ssf2ta // 23/02/1994 (c) 1994 (Asia)
+ssf2tad //
+ssf2tb // 19/11/1993 (c) 1993 (World)
+ssf2tbd //
+ssf2tbh // 05/10/1993 (c) 1993 (Hispanic)
+ssf2tbj // 11/09/1993 (c) 1993 (Japan)
+ssf2tbr1 // 11/09/1993 (c) 1993 (World)
+ssf2th // 23/02/1994 (c) 1994 (Hispanic)
+ssf2tu // 23/03/1994 (c) 1994 (USA)
+ssf2tur1 // 23/02/1994 (c) 1994 (USA)
+ssf2u // 11/09/1993 (c) 1993 (USA)
+ssf2ud //
+ssf2xj // 23/02/1994 (c) 1994 (Japan)
+ssf2xjd //
+ssf2xjr // 23/02/1994 (c) 1994 (Japan)
+uecology // 03/12/1993 (c) 1994 (Japan)
+vampj // 05/07/1994 (c) 1994 (Japan)
+vampja // 05/07/1994 (c) 1994 (Japan)
+vampjr1 // 30/06/1994 (c) 1994 (Japan)
+vhunt2 // 29/09/1997 (c) 1997 (Japan)
+vhunt2d //
+vhunt2r1 // 13/09/1997 (c) 1997 (Japan)
+vhuntj // 02/03/1995 (c) 1995 (Japan)
+vhuntjr1 // 07/03/1995 (c) 1995 (Japan)
+vhuntjr1s // 07/03/1995 (c) 1995 (Japan)
+vhuntjr2 // 02/03/1995 (c) 1995 (Japan)
+vsav // 19/05/1997 (c) 1997 (Euro)
+vsav2 // 13/09/1997 (c) 1997 (Japan)
+vsav2d //
+vsava // 19/05/1997 (c) 1997 (Asia)
+vsavd //
+vsavh // 19/05/1997 (c) 1997 (Hispanic)
+vsavj // 19/05/1997 (c) 1997 (Japan)
+vsavu // 19/05/1997 (c) 1997 (USA)
+xmcota // 31/03/1995 (c) 1994 (Euro)
+xmcotaa // 05/01/1995 (c) 1994 (Asia)
+xmcotaar1 // 17/12/1994 (c) 1994 (Asia)
+xmcotah // 31/03/1995 (c) 1994 (Hispanic)
+xmcotahr1 // 05/01/1995 (c) 1994 (Hispanic)
+xmcotaj // 05/01/1995 (c) 1994 (Japan)
+xmcotaj1 // 22/12/1994 (c) 1994 (Japan)
+xmcotaj2 // 19/12/1994 (c) 1994 (Japan)
+xmcotaj3 // 17/12/1994 (c) 1994 (Japan)
+xmcotajr // 08/12/1994 (c) 1994 (Japan Rent)
+xmcotar1 // 05/01/1995 (c) 1994 (Euro)
+xmcotar1d //
+xmcotau // 05/01/1995 (c) 1994 (USA)
+xmvsf // 04/10/1996 (c) 1996 (Euro)
+xmvsfa // 23/10/1996 (c) 1996 (Asia)
+xmvsfar1 // 04/10/1996 (c) 1996 (Asia)
+xmvsfar2 // 19/09/1996 (c) 1996 (Asia)
+xmvsfar3 // 10/09/1996 (c) 1996 (Asia)
+xmvsfb // 23/10/1996 (c) 1996 (Brazil)
+xmvsfh // 04/10/1996 (c) 1996 (Hispanic)
+xmvsfj // 04/10/1996 (c) 1996 (Japan)
+xmvsfjr1 // 10/09/1996 (c) 1996 (Japan)
+xmvsfjr2 // 09/09/1996 (c) 1996 (Japan)
+xmvsfr1 // 10/09/1996 (c) 1996 (Euro)
+xmvsfu // 23/10/1996 (c) 1996 (USA)
+xmvsfu1d //
+xmvsfur1 // 04/10/1996 (c) 1996 (USA)
+xmvsfur2 // 10/09/1996 (c) 1996 (USA)
+
+//@source:cps3.cpp
+cps3boot // bootleg
+cps3boota // bootleg
+cps3bootao // bootleg
+cps3bootao2 // bootleg
+cps3booto // bootleg
+cps3booto2 // bootleg
+cps3bs32 //
+cps3bs32a //
+jojo // 28/01/1999 (c) 1998 (USA)
+jojoba // 27/09/1999 (c) 1999 (Japan)
+jojoban // 27/09/1999 (c) 1999 (Japan)
+jojobane // 27/09/1999 (c) 1999 (Euro)
+jojobaner1 // 13/09/1999 (c) 1999 (Euro)
+jojobanr1 // 13/09/1999 (c) 1999 (Japan)
+jojobar1 // 13/09/1999 (c) 1999 (Japan)
+jojoj // 28/01/1999 (c) 1998 (Japan)
+jojojr1 // 08/01/1999 (c) 1998 (Japan)
+jojojr2 // 02/12/1998 (c) 1998 (Japan)
+jojon // 28/01/1999 (c) 1998 (Asia)
+jojonr1 // 08/01/1999 (c) 1998 (Asia)
+jojonr2 // 02/12/1998 (c) 1998 (Asia)
+jojor1 // 08/01/1999 (c) 1998 (USA)
+jojor2 // 02/12/1998 (c) 1998 (USA)
+redearth // 21/11/1996 (c) 1996 (Euro)
+redearthr1 // 23/10/1996 (c) 1996 (Euro)
+sfiii // 04/02/1997 (c) 1997 (Euro)
+sfiii2 // 30/09/1997 (c) 1997 (USA)
+sfiii2j // 30/09/1997 (c) 1997 (Japan)
+sfiii2n // 30/09/1997 (c) 1997 (Asia)
+sfiii3 // 08/06/1999 (c) 1999 (Euro)
+sfiii3n // 08/06/1999 (c) 1999 (Japan)
+sfiii3nr1 // 12/05/1999 (c) 1999 (Japan)
+sfiii3r1 // 12/05/1999 (c) 1999 (Euro)
+sfiii3u // 08/06/1999 (c) 1999 (USA)
+sfiii3ur1 // 12/05/1999 (c) 1999 (USA)
+sfiiia // 04/02/1997 (c) 1997 (Asia)
+sfiiih // 04/02/1997 (c) 1997 (Hispanic)
+sfiiij // 04/02/1997 (c) 1997 (Japan)
+sfiiin // 04/02/1997 (c) 1997 (Asia)
+sfiiina // 04/02/1997 (c) 1997 (Asia)
+sfiiiu // 04/02/1997 (c) 1997 (USA)
+warzard // 21/11/1996 (c) 1996 (Japan)
+warzardr1 // 23/10/1996 (c) 1996 (Japan)
+
+//@source:craft.cpp
+craft // Craft, by [lft]
+
+//@source:crbaloon.cpp
+crbaloon // CL (c) 1980 Taito Corporation
+crbaloon2 // CL (c) 1980 Taito Corporation
+
+//@source:crgolf.cpp
+crgolf // (c) 1984 Nasco Japan
+crgolfa // (c) 1984 Nasco Japan
+crgolfb // (c) 1984 Nasco Japan
+crgolfbt // bootleg
+crgolfc // (c) 1984 Nasco Japan
+crgolfhi // (c) 1984 Nasco Japan
+
+//@source:crimfght.cpp
+crimfght // GX821 (c) 1989 (US)
+crimfght2 // GX821 (c) 1989 (World)
+crimfghtj // GX821 (c) 1989 (Japan)
+
+//@source:crospang.cpp
+bestri // (c) F2 System
+crospang // (c) 1998 F2 System
+heuksun // (c) 1998 Oksan / F2 System
+
+//@source:crshrace.cpp
+crshrace // (c) 1993 Video System Co.
+crshrace2 // (c) 1993 Video System Co.
+
+//@source:crvision.cpp
+crvisio2 //
+crvisioj //
+crvision // 1981 creatiVision
+fnvision // 1983 FunVision
+manager //
+rameses //
+vz2000 //
+wizzard //
+
+//@source:crystal.cpp
+crysbios //
+crysking // 2001 Brezzasoft. Crystal of the kings
+ddz // (c) 200?
+donghaer //
+evosocc // 2001 Evoga. Evolution Soccer
+officeye //
+psattack // 2004 Uniana
+topbladv // 2002 Sonokong. Top Blade V
+trivrus // 2009 AGT. Trivia R Us
+
+//@source:cshooter.cpp
+airraid // (c) 1987 Seibu Kaihatsu
+cshootere // (c) 1987 JKH (bootleg)
+
+//@source:csplayh5.cpp
+bikiniko // (c) 1999
+csplayh1 // (c) 1995
+csplayh5 // (c) 1998
+csplayh7 // (c) 1999
+fuudol // (c) 2000
+junai // (c) 1998
+junai2 // (c) 1998
+mjmania // (c) 1999
+thenanpa // (c) 1999
+
+//@source:cswat.cpp
+cswat // (c) 1984
+
+//@source:ct486.cpp
+ct486 // 1993? 486 with CS4031
+
+//@source:cubeqst.cpp
+cubeqst // (c) 1983 Simutrek Inc.
+cubeqsta // (c) 1983 Simutrek Inc.
+
+//@source:cubo.cpp
+cndypuzl // (c) 1995
+cubo // Base unit
+haremchl // (c) 1995
+lasstixx // (c) 1995
+lsrquiz // (c) 1995
+lsrquiz2 // (c) 1995
+mgnumber // (c) 1995
+mgprem11 // (c) 1995
+odeontw2 // (c) 1999
+
+//@source:cultures.cpp
+cultures // (c) 1994 Face
+
+//@source:cupidon.cpp
+cashtrn //
+funnyfm //
+funnyfma //
+funnyfmb //
+gangrose //
+tsarevna //
+tsarevnaa //
+
+//@source:cv1k.cpp
+ddpdfk // (c) 2008 Cave (AMI license) - 2008/06/23 MASTER VER 1.5
+ddpdfk10 // (c) 2008 Cave (AMI license) - 2008/05/16 MASTER VER
+deathsml // (c) 2007 Cave (AMI license) - 2007/10/09 MASTER VER
+dfkbl // (c) 2010 Cave (AMI license) - 2010/1/18 BLACK LABEL
+dsmbl // (c) 2008 Cave (AMI license) - 2008/10/06 MEGABLACK LABEL VER
+espgal2 // (c) 2005 Cave (AMI license) - 2005/11/14 MASTER VER
+futari10 // (c) 2006 Cave (AMI license) - 2006/10/23 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
+futaribl // (c) 2007 Cave (AMI license) - 2009/11/27 INTERNATIONAL BL
+futariblj // (c) 2007 Cave (AMI license) - 2007/12/11 BLACK LABEL 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.
+mmmbanc // (c) 2007 Cave (AMI license) - 2007/06/05 MASTER VER.
+mmpork // (c) 2007 Cave (AMI license) - 2007/ 4/17 MASTER VER.
+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
+mushitam // (c) 2005 Cave (AMI license) - 2005/09/09.MASTER VER
+mushitama // (c) 2005 Cave (AMI license) - 2005/09/09 MASTER 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.
+
+//@source:cvicny.cpp
+cvicny //
+
+//@source:cvs.cpp
+8ball // (c) 1982 Century
+8ball1 // (c) 1982 Century
+cosmos // (c) 1981 Century
+darkwar // (c) 1981 Century
+dazzler // (c) 1982 Century
+diggerc // (c) 1982 Century
+goldbug // (c) 1982 Century
+heartatk // (c) 1983 Century Electronics
+hero // (c) 1983 Seatongrove (c) 1984 CVS
+hunchbak // (c) 1983 Century
+hunchbaka // (c) 1983 Century
+huncholy // (c) 1984 Seatongrove (c) CVS
+logger // (c) 1982 Century
+outline // (c) 1982 Century
+radarzon // (c) 1982 Century
+radarzon1 // (c) 1982 Century
+radarzont // (c) 1982 Tuni Electro Service
+raiders // (c) 1983 Century Electronics UK
+raidersr3 // (c) 1983 Century Electronics UK
+spacefrt // (c) 1981 Century
+superbik // (c) 1983 Century
+wallst // (c) 1982 Century
+
+//@source:cxhumax.cpp
+hxhdci2k //
+
+//@source:cyberbal.cpp
+cyberbal // 136064 (c) 1989
+cyberbal2 // 136064 (c) 1989
+cyberbal2p // 136071 (c) 1989
+cyberbal2p1 // 136071 (c) 1989
+cyberbal2p2 // 136071 (c) 1989
+cyberbal2p3 // 136071 (c) 1989
+cyberbalp // 136064 (c) 1989
+cyberbalt // 136073 (c) 1989
+cyberbalt1 // 136073 (c) 1989
+
+//@source:cybertnk.cpp
+cybertnk // (c) 1990 Coreland
+
+//@source:cybiko.cpp
+cybikov1 // Cybiko Wireless Intertainment System - Classic V1
+cybikov2 // Cybiko Wireless Intertainment System - Classic V2
+cybikoxt // Cybiko Wireless Intertainment System - Xtreme
+
+//@source:cyclemb.cpp
+cyclemb // P0 (c) 1984 Taito Corporation [+ Seta]
+skydest // PD0 (c) 1985 Taito Corporation
+
+//@source:czk80.cpp
+czk80 //
+
+//@source:d6800.cpp
+d6800 // Dream 6800
+
+//@source:d6809.cpp
+d6809 //
+
+//@source:d9final.cpp
+d9final // (c) 1992 Excellent System
+
+//@source:dacholer.cpp
+dacholer // (c) 1983
+itaten // (c) 1984 + Alice
+kickboy // (c) 1983
+
+//@source:dai.cpp
+dai // DAI
+
+//@source:dai3wksi.cpp
+dai3wksi // 1979.09 Dai San Wakusei (The Third Planet)
+
+//@source:dambustr.cpp
+dambustr // (c) 1981 South West Research
+dambustra // (c) 1981 South West Research
+dambustruk // (c) 1981 South West Research
+
+//@source:darius.cpp
+darius // A96 (c) 1986 Taito Corporation Japan (World)
+dariuse // A96 (c) 1986 Taito Corporation (Japan)
+dariusj // A96 (c) 1986 Taito Corporation (Japan)
+dariuso // A96 (c) 1986 Taito Corporation (Japan)
+dariusu // A96 (c) 1986 Taito America Corporation (US)
+
+//@source:darkmist.cpp
+darkmist // (c) 1986 Taito
+
+//@source:darkseal.cpp
+darkseal // MAC (c) 1990 Data East Corporation (World)
+darkseal1 // MAC (c) 1990 Data East Corporation (World)
+darksealj // MAC (c) 1990 Data East Corporation (Japan)
+gatedoom // MAC (c) 1990 Data East Corporation (US)
+gatedoom1 // MAC (c) 1990 Data East Corporation (US)
+
+//@source:daruma.cpp
+ds348 // Sigtron Daruma
+
+//@source:dassault.cpp
+dassault // MAJ (c) 1991 Data East Corporation (US)
+dassault4 // MAJ (c) 1991 Data East Corporation (US) - 4 Player only
+thndzone // MAJ (c) 1991 Data East Corporation (World) - Rev 1
+thndzone4 // MAJ (c) 1991 Data East Corporation (World) - 4 Player only
+thndzonea // MAJ (c) 1991 Data East Corporation (World)
+thndzonej // MAJ (c) 1991 Data East Corporation (Japan) - Some MASK ROMS stamped MAL
+
+//@source:dblcrown.cpp
+dblcrown // (c) 1994 Excellent System
+
+//@source:dblewing.cpp
+dblewing // MBE (c) 1993 Mitchell
+
+//@source:dbz.cpp
+dbz // (c) 1993 Banpresto
+dbz2 // (c) 1994 Banpresto
+dbza // (c) 1993 Banpresto
+
+//@source:dccons.cpp
+dc // 1999 Sega Dreamcast (USA)
+dcdev // 1998 Sega HKT-0120 Sega Dreamcast Development Box
+dceu // 1999 Sega Dreamcast (Europe)
+dcjp // 1998 Sega Dreamcast (Japan)
+
+//@source:dcheese.cpp
+cecmatch // (c) 1993 Coastal Amusements
+dcheese // (c) 1993 HAR
+fredmem // (c) 1994 Coastal Amusements
+fredmemc // (c) 1994 Coastal Amusements
+fredmemj // (c) 1994 Coastal Amusements
+fredmemuk // (c) 1994 Coastal Amusements
+fredmemus // (c) 1994 Coastal Amusements
+fredmesp // (c) 1994 Coastal Amusements
+lottof2 // (c) 1993 HAR
+
+//@source:dcon.cpp
+dcon // (c) 1992 Success.
+sdgndmps // (c) Banpresto / Bandai (Japan)
+
+//@source:dct11em.cpp
+dct11em //
+
+//@source:dday.cpp
+dday // (c) 1982 Olympia
+ddayc // (c) 1982 Olympia + Centuri license
+
+//@source:ddayjlc.cpp
+ddayjlc // (c) 1984 Jaleco
+ddayjlca // (c) 1984 Jaleco
+
+//@source:ddealer.cpp
+ddealer // (c) 1991 NMK
+
+//@source:ddenlovr.cpp
+akamaru // "501" (c) 1996 Dynax
+animaljr // "75" (c) 1993 Nakanihon/Taito (USA)
+animaljrj // "75" (c) 1993 Nakanihon/Taito (Japan)
+animaljrs // "75" (c) 1993 Nakanihon/Taito (Spanish version)
+daimyojn // "017" 2002 Dynax / Techno-Top
+ddenlovj // "112" (c) 1995 Dynax (Japan)
+ddenlovr // "113" (c) 1996 Dynax (Hong Kong)
+ddenlovrb // bootleg
+ddenlovrk // "113" (c) 1995 Dynax (Korea)
+dtoyoken // "700d" 1996 Dynax / Sigma
+funkyfig // "74" (c) 1993 Nakanihon + East Technology
+funkyfiga // "74" (c) 1993 Nakanihon + East Technology
+hanakanz // "507" (c) 1996 Dynax
+hginga // "81" (c) 1994 Dynax
+hgokbang // "116" (c) 1995 Dynax
+hgokou // "108" (c) 1995 Dynax (Alba license)
+hkagerou // "510" Hana Kagerou 1996 Nakanihon
+hparadis // "101" (c) 1994 Nakanihon
+htengoku // "65" (c) 1992 Dynax
+janshinp // "700j" 1996 Dynax / Sigma
+jongtei // "532" Mahjong Jong-Tei (C) 1999 Dynax
+kotbinsp // "909" 1997 Dynax / Shinwhajin
+kotbinyo // 1997 Dynax / Shinwhajin
+mjchuuka // "121" (c) 1998 Dynax
+mjdchuka // "111" (c) 1995 Nakanihon
+mjflove // "500" (c) 1996 Dynax
+mjgnight // "003" 2000 Techno-Top
+mjmyorn2 // "71?" (c) 1993 Dynax
+mjmyornt // "71" (c) 1992 Dynax
+mjmyster // "77" (c) 1994 Dynax
+mjmyuniv // "85" (c) 1994 Dynax
+mjmywrld // "77" (c) 1994 Dynax
+mjreach1 // "526" Mahjong Reach Ippatsu 1998 Nihon System/Dynax
+mjschuka // "115" (c) 1995 Dynax
+mmpanic // "70" (c) 1992 Nakanihon/Taito
+momotaro // "027" 2004 Techno-Top
+nettoqc // "103" (c) 1995 Nakanihon
+quiz365 // "78" (c) 1994 Nakanihon
+quiz365t // "78" (c) 1994 Nakanihon (Taiwan)
+quizchq // "73" (c) 1993 Nakanihon
+quizchql // "73" (c) 1993 Laxan
+rongrong // "80" (c) 1994 Nakanihon
+rongrongg // "80" (c) 1994 Nakanihon
+rongrongj // "80" (c) 1994 Nakanihon
+seljan2 // "557" 1996 Dynax / Face
+sryudens // "502" (c) 1996 Dynax / Face
+ultrchmp // "104" (c) 1995 Nakanihon
+ultrchmph // "114" (c) 1995 Nakanihon
+
+//@source:ddragon.cpp
+darktowr // Game Room
+ddragon // TA-0021 (c) 1987
+ddragon2 // TA-0026 (c) 1988 (World)
+ddragon2b // bootleg
+ddragon2j // TA-0026 (c) 1988 (Japan)
+ddragon2u // TA-0026 (c) 1988 (US)
+ddragon6809 // bootleg
+ddragon6809a // bootleg
+ddragonb // bootleg
+ddragonb2 // bootleg
+ddragonba // bootleg
+ddragonu // TA-0021 (c) 1987 Taito America
+ddragonua // TA-0021 (c) 1987 Taito America
+ddragonub // TA-0021 (c) 1987 Taito America
+ddragonw // TA-0021 (c) 1987 Taito
+ddragonw1 // TA-0021 (c) 1987 Taito
+ddungeon // Game Room
+ddungeone // East Coast Coin Company (Melbourne)
+stoffy // (c) 1994 Midas
+stoffyu // (c) 1994 Midas + Unico
+toffy // (c) 1993 Midas
+tstrike // East Coast Coin Company (Melbourne)
+tstrikea // Game Room
+
+//@source:ddragon3.cpp
+ctribe // TA-0028 (c) 1990 (US)
+ctribe1 // TA-0028 (c) 1990 (US)
+ctribeb // bootleg
+ctribeb2 // bootleg
+ctribej // TA-0028 (c) 1990 (Japan)
+ctribeo // TA-0028 (c) 1990 (US)
+ddragon3 // TA-0030 (c) 1990
+ddragon3b // bootleg
+ddragon3j // TA-0030 (c) 1990 (Japan)
+ddragon3p // TA-0030 (c) 1990
+wwfwfest // TA-0031 (c) 1991 (US)
+wwfwfesta // TA-0031 (c) 1991 + Tecmo license (US)
+wwfwfestb // bootleg
+wwfwfestj // TA-0031 (c) 1991 (Japan)
+wwfwfestk // TA-0031 (c) 1991 (Korea)
+
+//@source:ddribble.cpp
+ddribble // GX690 (c) 1986
+ddribblep // GX690 (c) 1986
+
+//@source:de_2.cpp
+bttf_a20 //
+bttf_a21 //
+bttf_a27 //
+bttf_g27 //
+lwar_a83 //
+lwar_e90 //
+mnfb_c27 //
+play_a24 //
+poto_a32 //
+robo_a34 //
+simp_a20 //
+simp_a27 //
+ssvc_a26 //
+ssvc_b26 //
+tmac_a18 //
+tmac_a24 //
+torp_e21 //
+
+//@source:de_3.cpp
+aar_101 //
+btmn_101 //
+btmn_103 //
+btmn_106 //
+btmn_g13 //
+ckpt_a17 //
+gnr_300 //
+hook_401 //
+hook_404 //
+hook_408 //
+jupk_501 //
+jupk_513 //
+jupk_g51 //
+lah_110 //
+lah_112 //
+lah_l104 //
+lah_l108 //
+lw3_200 //
+lw3_205 //
+lw3_207 //
+lw3_208 //
+rab_103 //
+rab_130 //
+rab_320 //
+stwr_102 //
+stwr_103 //
+stwr_104 //
+stwr_a14 //
+stwr_e12 //
+stwr_g11 //
+tftc_104 //
+tftc_200 //
+tftc_300 //
+tftc_302 //
+tftc_303 //
+tmnt_103 //
+tmnt_104 //
+tomy_400 //
+tomy_h30 //
+trek_110 //
+trek_11a //
+trek_120 //
+trek_200 //
+trek_201 //
+wwfr_103 //
+wwfr_106 //
+
+//@source:de_3b.cpp
+batmanf //
+batmanf3 //
+bay_e400 //
+baywatch //
+bmf_at //
+bmf_be //
+bmf_ch //
+bmf_cn //
+bmf_de //
+bmf_fr //
+bmf_it //
+bmf_jp //
+bmf_nl //
+bmf_no //
+bmf_sp //
+bmf_sv //
+bmf_time //
+bmf_uk //
+ctcheese //
+detest //
+frankst //
+frankstg //
+mav_100 //
+mav_400 //
+mav_401 //
+mav_402 //
+
+//@source:deadang.cpp
+deadang // (c) 1988 Seibu Kaihatsu
+ghunter // (c) 1988 Seibu Kaihatsu
+ghunters // (c) 1988 Seibu Kaihatsu + Segasa/Sonic license
+leadang // (c) 1988 Seibu Kaihatsu
+
+//@source:dec0.cpp
+automat // bootleg
+baddudes // EI (c) 1988 Data East USA (US)
+birdtry // (c) 1988 Data East Corporation (Japan)
+bouldash // (c) 1990 Data East Corporation (World)
+bouldashj // (c) 1990 Data East Corporation (Japan)
+drgninja // EG (c) 1988 Data East Corporation (Japan)
+drgninjab // bootleg
+drgninjab2 // bootleg
+ffantasy // EV (c) 1989 Data East Corporation (Japan)
+ffantasya // EV (c) 1989 Data East Corporation (Japan)
+ffantasybl // bootleg
+hbarrel // (c) 1987 Data East USA (US)
+hbarrelw // (c) 1987 Data East Corporation (World)
+hippodrm // EW (c) 1989 Data East USA (US)
+midres // (c) 1989 Data East Corporation (World)
+midresb // bootleg
+midresbj // bootleg
+midresj // (c) 1989 Data East Corporation (Japan)
+midresu // (c) 1989 Data East USA (US)
+robocop // EP? (c) 1988 Data East Corporation (World)
+robocopb // bootleg
+robocopj // EM (c) 1988 Data East Corporation (Japan)
+robocopu // (c) 1988 Data East USA (US)
+robocopu0 // (c) 1988 Data East USA (US)
+robocopw // EP? (c) 1988 Data East Corporation (World)
+secretab // bootleg
+secretag // (c) 1989 Data East Corporation (World)
+secretagj // (c) 1989 Data East Corporation (Japan)
+slyspy // (c) 1989 Data East USA (US)
+slyspy2 // (c) 1989 Data East USA (US)
+slyspy3 // (c) 1989 Data East USA (US)
+
+//@source:dec8.cpp
+breywood // (c) 1986 Data East Corporation (Japan)
+cobracom // (c) 1988 Data East Corporation (World)
+cobracomj // (c) 1988 Data East Corporation (Japan)
+csilver // (c) 1987 Data East Corporation (Japan)
+csilverj // (c) 1987 Data East Corporation (Japan)
+garyoret // (c) 1987 Data East Corporation (Japan)
+ghostb // (c) 1987 Data East USA (US)
+ghostb2a // (c) 1987 Data East USA (US)
+ghostb3 // (c) 1987 Data East USA (US)
+gondo // (c) 1987 Data East USA (US)
+lastmisn // (c) 1986 Data East USA (US)
+lastmisnj // (c) 1986 Data East Corporation (Japan)
+lastmisno // (c) 1986 Data East USA (US)
+makyosen // (c) 1987 Data East Corporation (Japan)
+meikyuh // (c) 1987 Data East Corporation (Japan)
+meikyuha // (c) 1987 Data East Corporation (Japan)
+oscar // (c) 1988 Data East Corporation (World)
+oscarj1 // (c) 1987 Data East Corporation (Japan)
+oscarj2 // (c) 1987 Data East Corporation (Japan)
+oscaru // (c) 1987 Data East USA (US)
+shackled // (c) 1986 Data East USA (US)
+srdarwin // (c) 1987 Data East Corporation (World)
+srdarwinj // (c) 1987 Data East Corporation (Japan)
+
+//@source:deco_ld.cpp
+begas // (c) 1983
+begas1 // (c) 1983
+cobra // (c) 1984
+cobraa //
+rblaster // (c) 1985
+
+//@source:deco_mlc.cpp
+avengrgs // MCG (c) 1995 Data East Corporation (World)
+avengrgsj // MCG (c) 1995 Data East Corporation (Japan)
+ddream95 // MCE (c) 1996 Data East Corporation
+hoops95 // MCE (c) 1996 Data East Corporation
+hoops96 // MCE (c) 1996 Data East Corporation
+skullfng // MCH (c) 1996 Data East Corporation (World)
+skullfngj // MCH (c) 1996 Data East Corporation (Japan)
+stadhr96 // MCM (c) 1996 Data East Corporation (World)
+stadhr96j // MCM (c) 1996 Data East Corporation (Japan)
+stadhr96u // MCM (c) 1996 Data East Corporation (USA)
+
+//@source:deco156.cpp
+hvysmsh // MBG (c) 1993 Data East Corporation (World)
+hvysmsha // MBG (c) 1993 Data East Corporation (Asia)
+hvysmshj // MBG (c) 1993 Data East Corporation (Japan)
+wcvol95 // MBX (c) 1993 Data East
+wcvol95x // ?
+
+//@source:deco32.cpp
+captaven // MAN (c) 1991 Data East Corporation (Asia)
+captavena // MAN (c) 1991 Data East Corporation (Asia)
+captavene // MAN (c) 1991 Data East Corporation (UK)
+captavenj // MAN (c) 1991 Data East Corporation (Japan)
+captavenu // MAN (c) 1991 Data East Corporation (US)
+captavenua // MAN (c) 1991 Data East Corporation (US)
+captavenuu // MAN (c) 1991 Data East Corporation (US)
+dragngun // MAR (c) 1992 Data East Corporation (US)
+dragngunj // MAR (c) 1992 Data East Corporation (Japan)
+fghthist // MBF (c) 1993 Data East Corporation (World) DE-0395-1 PCB
+fghthista // MBF (c) 1993 Data East Corporation (World) DE-0380-2 PCB
+fghthistb // MBF (c) 1993 Data East Corporation (World) DE-0380-2 PCB
+fghthistj // MBF (c) 1993 Data East Corporation (Japan) DE-0395-1 PCB
+fghthistja // MBF (c) 1993 Data East Corporation (Japan) DE-0380-2 PCB
+fghthistjb // MBF (c) 1993 Data East Corporation (Japan) DE-0380-1 PCB
+fghthistu // MBF (c) 1993 Data East Corporation (US) DE-0396-0 PCB
+fghthistua // MBF (c) 1993 Data East Corporation (US) DE-0395-1 PCB
+fghthistub // MBF (c) 1993 Data East Corporation (US) DE-0395-1 PCB
+fghthistuc // MBF (c) 1993 Data East Corporation (US) DE-0380-2 PCB
+gunhard // MBM (c) 1994 Data East Corporation (Japan)
+lockload // MBM (c) 1994 Data East Corporation (World)
+lockloadu // MBM (c) 1994 Data East Corporation (US)
+nslasher // MBH (c) 1993 Data East Corporation
+nslasherj // MBH (c) 1993 Data East Corporation (Japan)
+nslashers // MBH (c) 1993 Data East Corporation
+nslasheru // MBH (c) 1993 Data East Corporation (US)
+tattass // prototype (c) 1994 Data East Pinball (US)
+tattassa // prototype (c) 1994 Data East Pinball (Asia)
+
+//@source:decocass.cpp
+cadanglr // 25 1982.10 Angler Dangler
+castfant // 07 1981.02 Astro Fantasia
+cbdash // 44 1985.08 Boulder Dash
+cbnj // 27 Bump 'n' Jump
+cbtime // 26 1982.08 Hamburger/Burger Time
+cburnrub // 27 1982.11 Burnin' Rubber
+cburnrub2 // 27
+cdiscon1 // 19 1982.04 Disco No.1
+cdsteljn // 14 1981.06 DS Telejan
+cexplore // 18 1982.02 Explorer
+cfghtice // 40 1984.04 Fighting Ice Hockey
+cfishing // 25 1982.10 Fishing
+cflyball // 35 1983.?? Flying Ball/Bampoline
+cgraplop // 28 1982.11 Cluster Buster / Graplop
+cgraplop2 // 28
+chamburger // 26 1982.08 Hamburger (Japan)
+chwy // 01 1980.12 Highway Chase
+clapapa // 29 1982.11 La-Pa-Pa
+clapapa2 // 29 Rootin' Tootin' // this one doesn't display lapapa anywhere
+clocknch // 11 1981.04 Lock'n'Chase
+cluckypo // 15 1981.?? Lucky Poker
+cmanhat // 03 1981.01 Manhattan
+cmissnx // 21 1982.04 Mission-X/Zoar
+cnightst // 32 1983.04 Night Star
+cnightst2 // 32
+coozumou // 41 1984.05 Oozumou/The Grand Sumo
+cppicf // 39 1984.02 Peter Pepper's Ice Cream Factory
+cppicf2 // 39
+cprobowl // 31 1983.03 Pro Bowling
+cprogolf // 13 1981.08 Tournament Pro Golf
+cprogolf18 // 23 1982.?? 18 Hole Pro Golf
+cprogolfj // 13 1981.08 Tournament Pro Golf (Japan)
+cpsoccer // 33 1982.08 Pro Soccer
+cpsoccerj // 33 1982.08 Pro Soccer (Japan)
+cptennis // 22 1982.06 Pro Tennis
+cscrtry // 38 1984.03 Scrum Try
+cscrtry2 // 38
+csdtenis // 34 1983.09 Super Doubles Tennis
+cskater // 30 1983.03 Skater
+csuperas // 09 1981.05 Super Astro Fighter
+csweetht // 19 Sweet Heart
+cterrani // 04 1981.02 Terranean
+ctisland // 16 1982.02 Treasure Island
+ctisland2 // 16
+ctisland3 // 16
+ctornado // 20 1982.05 Tornado
+ctsttape // ?
+czeroize // 37 1983.10 Zeroize
+decocass //
+
+//@source:dectalk.cpp
+dectalk // 1983 Digital Equipment Corporation
+
+//@source:decwritr.cpp
+la120 // 1978 Digital Equipment Corporation
+
+//@source:deniam.cpp
+croquis // (c) 1996 Deniam (Germany)
+karianx // (c) 1996 Deniam
+logicpr2 // (c) 1997 Deniam (Japan)
+logicpro // (c) 1996 Deniam
+
+//@source:deshoros.cpp
+destiny // (c) 1983
+
+//@source:destroyr.cpp
+destroyr // 030131-030136 1977/10 [6800]
+destroyr1 // 030131-030136 1977/10 [6800]
+
+//@source:dfruit.cpp
+dfruit //
+
+//@source:dgn_beta.cpp
+dgnbeta // Dragon Beta
+
+//@source:dgpix.cpp
+elfin // (c) 1999 dgPIX Entertainment Inc
+fmaniac3 // (c) 2002 Saero Entertainment
+jumpjump // (c) 1999 dgPIX Entertainment Inc
+kdynastg // (c) 1999 EZ Graphics
+xfiles // (c) 1999 dgPIX Entertainment Inc
+xfilesk // (c) 1999 dgPIX Entertainment Inc (censored for the Korean market)
+
+//@source:didact.cpp
+md6802 //
+mp68a //
+
+//@source:dietgo.cpp
+dietgo // MAY (c) 1993
+dietgoe // MAY (c) 1993
+dietgoj // MAY (c) 1993
+dietgou // MAY (c) 1993
+
+//@source:digel804.cpp
+digel804 //
+ep804 //
+
+//@source:dim68k.cpp
+dim68k //
+
+//@source:discoboy.cpp
+discoboy // (c) 1993 Soft Art Co.
+discoboyp // (c) 1993 Soft Art Co. (Promat license?)
+
+//@source:diverboy.cpp
+diverboy // (c) 1992 Electronic Devices
+
+//@source:djboy.cpp
+djboy // (c) 1989 Kaneko
+djboya // (c) 1989 Kaneko
+djboyj // (c) 1989 Kaneko
+
+//@source:djmain.cpp
+bm1stmix // GQ753 (c) 1997 (Japan)
+bm2ndmix // GX853 (c) 1998 (Japan)
+bm2ndmxa // GX853 (c) 1998 (Japan)
+bm3rdmix // GX853 (c) 1998 (Japan)
+bm4thmix // GX847 (c) 1999 (Japan)
+bm5thmix // GX981 (c) 1999 (Japan)
+bm6thmix // GXA21 (c) 2001 (Japan)
+bm7thmix // GXB07 (c) 2001 (Japan)
+bmclubmx // GX993 (c) 2000 (Japan)
+bmcompm2 // GX988 (c) 2000 (Japan)
+bmcompmx // GX858 (c) 1999 (Japan)
+bmcorerm // GXA05 (c) 1999 (Japan)
+bmdct // GX995 (c) 2000 (Japan)
+bmfinal // GXC01 (c) 2002 (Japan)
+hmcompm2 // GX988 (c) 2000
+hmcompmx // GX858 (c) 1999
+popn1 // GX803 (c) 1998 (Asia)
+popn2 // GX831 (c) 1998 (Japan)
+popn3 // GX980 (c) 1999 (Japan)
+
+//@source:dkong.cpp
+8ballact // (c) 1984 Seatongrove Ltd (Magic Eletronics USA license)
+8ballact2 // (c) 1984 Seatongrove Ltd (Magic Eletronics USA license)
+dkingjr // bootleg
+dkong // (c) 1981 Nintendo of America
+dkong3 // (c) 1983 Nintendo of America
+dkong3b // bootleg
+dkong3j // (c) 1983 Nintendo
+dkongf // hack from Jeff's Romhack
+dkonghrd //
+dkongj // (c) 1981 Nintendo
+dkongjnrj // (c) 1982 Nintendo
+dkongjo // (c) 1981 Nintendo
+dkongjo1 // (c) 1981 Nintendo
+dkongjr // (c) 1982 Nintendo of America
+dkongjrb // bootleg
+dkongjre // (c) 1982 Nintendo of America
+dkongjrj // (c) 1982 Nintendo
+dkongjrpb // bootleg
+dkongo // (c) 1981 Nintendo
+dkongpe // hack Pauline Edition
+dkongx // hack
+dkongx11 // hack
+drakton // (c) 1984 Epos Corporation
+drktnjr // (c) 1984 Epos Corporation
+herbiedk // (c) 1984 CVS
+herodk // (c) 1984 Seatongrove + Crown license
+herodku // (c) 1984 Seatongrove + Crown license
+hunchbkd // (c) 1983 Century
+jrking // bootleg
+pestplce // bootleg on donkey kong hw
+radarscp // (c) 1980 Nintendo
+radarscp1 // (c) 1980 Nintendo
+sbdk // (c) 1984 Century
+shootgal // (c) 1984 Seatongrove Ltd (Zaccaria license)
+spcfrcii // (c) 1985 Senko Industries (Magic Eletronics Inc. license)
+spclforc // (c) 1985 Senko Industries (Magic Eletronics Inc. license)
+strtheat // (c) 1985 Epos Corporation
+
+//@source:dlair.cpp
+dlair // (c) 1983 Cinematronics
+dlair_1 // (c) 1983 Cinematronics
+dlair_2 // (c) 1983 Cinematronics
+dlaira // (c) 1983 Cinematronics
+dlairb // (c) 1983 Cinematronics
+dlairc // (c) 1983 Cinematronics
+dlaird // (c) 1983 Cinematronics
+dlaire // (c) 1983 Cinematronics
+dlairf // (c) 1983 Cinematronics
+dleuro // (c) 1983 Atari
+dleuroalt // (c) 1983 Atari
+dlital // (c) 1983 Sidam
+spaceace // (c) 1983 Cinematronics
+spaceacea // (c) 1983 Cinematronics
+spaceacea2 // (c) 1983 Cinematronics
+spaceaceeuro // (c) 1983 Atari
+
+//@source:dlair2.cpp
+dlair2 // (c) 1991 Leland
+dlair2_200 // (c) 1991 Leland
+dlair2_211 // (c) 1991 Leland
+dlair2_300 // (c) 1991 Leland
+dlair2_312 // (c) 1991 Leland
+dlair2_314 // (c) 1991 Leland
+dlair2_315 // (c) 1991 Leland
+dlair2_315s // (c) 1991 Leland
+dlair2_316e // (c) 1991 Leland
+dlair2_317e // (c) 1991 Leland
+dlair2_318 // (c) 1991 Leland
+dlair2_319e // (c) 1991 Leland
+dlair2_319s // (c) 1991 Leland
+spacea91 // (c) 1991 Leland
+spacea91_13e // (c) 1991 Leland
+
+//@source:dm7000.cpp
+dm500 //
+dm5620 //
+dm7000 //
+
+//@source:dmndrby.cpp
+dmndrby // G4001 'DD' (c) 1986
+dmndrbya // G4001 'DD' (c) 1986
+
+//@source:dms5000.cpp
+dms5000 //
+
+//@source:dms86.cpp
+dms86 //
+
+//@source:dmv.cpp
+dmv //
+
+//@source:docastle.cpp
+asoccer // 8461 (c) 1987
+docastle // 8302 (c) 1983
+docastle2 // 8302 (c) 1983
+docastleo // 8302 (c) 1983
+dorunrun // ???? (c) 1984
+dorunrun2 // ???? (c) 1984
+dorunrunc // ???? (c) 1984
+dorunrunca // ???? (c) 1984
+douni // 8302 (c) 1983
+dowild // ???? (c) 1984
+idsoccer // ???? (c) 1985
+idsoccera // ???? (c) 1985
+jjack // ???? (c) 1984
+kickridr // ???? (c) 1984
+spiero // ???? (c) 1987
+
+//@source:dogfgt.cpp
+dogfgt // TA-0011 (c) 1984
+dogfgtj // TA-0011 (c) 1984
+dogfgtu // TA-0011 (c) 1985 Data East USA, Inc.
+
+//@source:dolphunk.cpp
+dauphin //
+
+//@source:dominob.cpp
+dominob // (c) 1996 Wonwoo Systems
+dominobv2 // (c) 1996 Wonwoo Systems
+
+//@source:dooyong.cpp
+bluehawk // (c) 1993 Dooyong
+bluehawkn // (c) 1993 NTC
+ddaydoo // (c) 1990 Dooyong
+flytiger // (c) 1992 Dooyong
+flytigera // (c) 1992 Dooyong
+gulfstrm // (c) 1991 Dooyong
+gulfstrma // (c) 1991 Dooyong
+gulfstrmb // (c) 1991 Dooyong
+gulfstrmm // (c) 1991 Dooyong + distributed by Media Shoji
+gundl94 // (c) 1994 Dooyong
+lastday // (c) 1990 Dooyong
+lastdaya // (c) 1990 Dooyong
+pollux // (c) 1991 Dooyong
+polluxa // (c) 1991 Dooyong
+polluxa2 // (c) 1991 Dooyong
+polluxn // (c) 1991 NTC
+popbingo // (c) 1996 Dooyong
+primella // (c) 1994 NTC
+rshark // (c) 1995 Dooyong
+sadari // (c) 1993 NTC
+superx // (c) 1994 NTC
+superxm // (c) 1994 Mitchell
+
+//@source:dorachan.cpp
+dorachan // (c) 1980 Craul Denshi
+
+//@source:dotrikun.cpp
+dotrikun // cabinet test board
+dotrikun2 // cabinet test board
+
+//@source:dps1.cpp
+dps1 //
+
+//@source:dragon.cpp
+d64plus // Dragon 64 + Compusense Plus addon
+dgnalpha // Dragon Alpha
+dragon200 // Dragon 200
+dragon200e // Dragon 200E
+dragon32 // Dragon 32
+dragon64 // Dragon 64
+tanodr64 // Tano Dragon 64 (NTSC)
+
+//@source:dragrace.cpp
+dragrace // 008505-008521 1977/06 [6800]
+
+//@source:dreambal.cpp
+dreambal // MM
+
+//@source:dreamwld.cpp
+baryon // (c) 1997 SemiCom
+baryona // (c) 1997 SemiCom
+cutefght // (c) 1998 SemiCom
+dreamwld // (c) 2000 SemiCom
+gaialast // (c) 1999 SemiCom
+rolcrush // (c) 1999 Trust
+
+//@source:drgnmst.cpp
+drgnmst // (c) 1994
+
+//@source:dribling.cpp
+dribling // (c) 1983 Model Racing
+driblingbr // bootleg
+driblingo // (c) 1983 Olympia
+
+//@source:drmicro.cpp
+drmicro // (c) 1983 Sanritsu
+
+//@source:drtomy.cpp
+drtomy // (c) 1993 no copyright message (1993 on pcb), some code taken from 'Big Karnak'
+
+//@source:drw80pkr.cpp
+drw80pk2 // (c) 1983 IGT
+drw80pkr // (c) 1982 IGT
+
+//@source:dsb46.cpp
+dsb46 //
+
+//@source:dual68.cpp
+dual68 //
+
+//@source:dunhuang.cpp
+dunhuang // (c) 1995
+
+//@source:dvk_kcgd.cpp
+dvk_kcgd //
+
+//@source:dvk_ksm.cpp
+dvk_ksm //
+dvk_ksm01 //
+
+//@source:dwarfd.cpp
+dwarfd // (c) 198? Electro-Sports
+dwarfda // (c) 198? Electro-Sports
+qc // (c) 1995 ArJay Exports/Prestige Games
+quarterh // (c) 1983 Electro-Sports
+quarterha // (c) 1983 Electro-Sports
+quarterhb // (c) 1983 Electro-Sports
+
+//@source:dynadice.cpp
+dynadice // ?
+
+//@source:dynax.cpp
+7jigen // "37" 7jigen no Youseitachi 1990 Dynax
+blktouch // (c) Yang Gi Co Ltd.
+cdracula // (c) 1994 Y.S.E.
+drgpunch // "24" (c) 1989 Dynax
+gekisha // "28" (c) 1989 Dynax
+hanamai // "16" (c) 1988 Dynax
+hanayara // "55" (c) 1991 Dynax
+hjingi // ?? (c) 1990 Dynax
+hjingia // ?? (c) 1990 Dynax
+hnkochou // "20" (c) 1989 Dynax
+hnoridur // "23" (c) 1989 Dynax
+inca // (c) 199? ????
+jantouki // "27" Jantouki 1989 Dynax
+janyuki // ?? (c) 1988 Dynax
+majrjhdx // "105" (c) 1996 Dynax
+majxtal7 // "40" (c) 1990 Dynax
+maya // (c) 1994 Promat
+mayaa // (c) 1994 Promat
+mayab // (c) 1994 Promat
+mayac // (c) 1994 Promat
+mcnpshnt // "33" Mahjong Campus Hunting 1990 Dynax
+mjangels // "612" Mahjong Angels 1991 Dynax
+mjcomv1 // "61" (c) 1991 Dynax
+mjdialq2 // "52" (c) 1991 Dynax
+mjdialq2a // "52" (c) 1991 Dynax
+mjelct3 // ?? Mahjong Electron Base parts 2 & 3
+mjelct3a // ?? Mahjong Electron Base parts 2 & 3
+mjelctrb // ?? (c) 1993 bootleg Mahjong Electron Base parts 2 & 4
+mjelctrn // ?? Mahjong Electron Base parts 2 & 4
+mjembase // "38" Mahjong Electromagnetic Base 1989 Dynax
+mjfriday // "26" (c) 1989 Dynax
+mjreach // (c) 1994 bootleg
+neruton // "45" Mahjong Neruton Haikujiradan 1990 Dynax
+nerutona // "45" Mahjong Neruton Haikujiradan 1990 Dynax
+ougonpai // "62" (c) 1991 Dynax
+ougonpaib // "62" (c) 1991 bootleg
+quiztvqq // "64" Quiz TV Gassyuukoku Q&Q 1992 Dynax
+shpeng // (c) 1995 WSAC Systems
+sprtmtch // "31" (c) 1989 Dynax + Fabtek license
+tenkai // (c) 1991 Dynax
+tenkai2b // (c) 1991 bootleg
+tenkaibb // (c) 1991 bootleg
+tenkaicb // (c) 1991 bootleg
+tenkaie // (c) 1991 Dynax
+yarunara // "55" Mahjong Yarunara 1991 Dynax
+
+//@source:dynduke.cpp
+dbldynj // (c) 1989 Seibu Kaihatsu
+dbldynu // (c) 1989 Seibu Kaihatsu + Fabtek license
+dynduke // (c) 1989 Seibu Kaihatsu
+dyndukea // (c) 1989 Seibu Kaihatsu
+dyndukej // (c) 1989 Seibu Kaihatsu
+dyndukeu // (c) 1989 Seibu Kaihatsu + Fabtek license
+
+//@source:eacc.cpp
+eacc //
+
+//@source:ec184x.cpp
+ec1840 //
+ec1841 //
+ec1845 //
+ec1847 //
+
+//@source:ec65.cpp
+ec65 //
+ec65k //
+
+//@source:ecoinf1.cpp
+ec_bar5 // Bar 5 (older PCB) (Electrocoin)
+ec_barxo // Bar X (older PCB) (Electrocoin)
+ec_barxoa //
+ec_barxob //
+ec_barxoc //
+ec_barxod //
+ec_barxoe //
+ec_casbxo // Casino Bar X (older PCB) (Electrocoin)
+ec_casbxoa //
+
+//@source:ecoinf2.cpp
+ec_oxocg // Oxo Classic Gold (Electrocoin)
+ec_oxocl // Oxo Club (Electrocoin)
+ec_oxogb // Oxo Golden Bars (Electrocoin)
+ec_oxorl // Oxo Reels (Electrocoin)
+ec_oxorv // Oxo Revolution (Electrocoin)
+ec_rcc // Royal Casino Club (Electrocoin)
+ec_sumnc // Casino Super Multi Nudger (Concept/Electrocoin)
+ec_sumnd // Super Multi Nudger (Concept/Electrocoin)
+ec_suprl // Super Reels (Electrocoin)
+
+//@source:ecoinf3.cpp
+ec_laby // Labyrinth (Electrocoin)
+ec_labya //
+ec_penni // Pennies From Heaven (Electrocoin)
+ec_pennia //
+ec_pyram // Pyramid (Electrocoin)
+ec_pyrama //
+ec_secrt // Secret Castle (Electrocoin)
+ec_sphin // Sphinx (Electrocoin)
+ec_sphina //
+ec_sphinb //
+ec_stair // Stairway to Heaven
+ec_staira //
+
+//@source:ecoinfr.cpp
+ec_bar7 // Bar 7 (Concept)
+ec_barx // Bar X (Electrocoin)
+ec_barx__0 //
+ec_barx__1 //
+ec_barx__2 //
+ec_barx__3 //
+ec_barx__4 //
+ec_barx__5 //
+ec_barx__6 //
+ec_barx__7 //
+ec_barx__8 //
+ec_barx__9 //
+ec_barx__a //
+ec_barx__a0 //
+ec_barx__a1 //
+ec_barx__a2 //
+ec_barx__a3 //
+ec_barx__a4 //
+ec_barx__a5 //
+ec_barx__a6 //
+ec_barx__a7 //
+ec_barx__a8 //
+ec_barx__a9 //
+ec_barx__aa //
+ec_barx__ab //
+ec_barx__ac //
+ec_barx__ad //
+ec_barx__ae //
+ec_barx__af //
+ec_barx__ag //
+ec_barx__ah //
+ec_barx__ai //
+ec_barx__aj //
+ec_barx__ak //
+ec_barx__al //
+ec_barx__am //
+ec_barx__an //
+ec_barx__ao //
+ec_barx__ap //
+ec_barx__aq //
+ec_barx__ar //
+ec_barx__as //
+ec_barx__at //
+ec_barx__au //
+ec_barx__av //
+ec_barx__aw //
+ec_barx__ax //
+ec_barx__ay //
+ec_barx__az //
+ec_barx__b //
+ec_barx__ba //
+ec_barx__bb //
+ec_barx__bc //
+ec_barx__bd //
+ec_barx__be //
+ec_barx__bf //
+ec_barx__bg //
+ec_barx__bh //
+ec_barx__bi //
+ec_barx__bj //
+ec_barx__bk //
+ec_barx__bl //
+ec_barx__bm //
+ec_barx__bn //
+ec_barx__bo //
+ec_barx__bp //
+ec_barx__bq //
+ec_barx__br //
+ec_barx__bs //
+ec_barx__bt //
+ec_barx__bu //
+ec_barx__c //
+ec_barx__d //
+ec_barx__e //
+ec_barx__f //
+ec_barx__g //
+ec_barx__h //
+ec_barx__i //
+ec_barx__j //
+ec_barx__k //
+ec_barx__l //
+ec_barx__m //
+ec_barx__n //
+ec_barx__o //
+ec_barx__p //
+ec_barx__q //
+ec_barx__r //
+ec_barx__s //
+ec_barx__t //
+ec_barx__u //
+ec_barx__v //
+ec_barx__w //
+ec_barx__x //
+ec_barx__y //
+ec_barx__z //
+ec_barxmab // Bar X (MAB PCB) (Electrocoin)
+ec_big7 // Big 7 / Super Big 7 (Electrocoin)
+ec_big7__0 //
+ec_big7__1 //
+ec_big7__2 //
+ec_big7__3 //
+ec_big7__4 //
+ec_big7__5 //
+ec_big7__6 //
+ec_big7__7 //
+ec_big7__8 //
+ec_big7__9 //
+ec_big7__a //
+ec_big7__a0 //
+ec_big7__a1 //
+ec_big7__a2 //
+ec_big7__aa //
+ec_big7__ab //
+ec_big7__ac //
+ec_big7__ad //
+ec_big7__ae //
+ec_big7__af //
+ec_big7__ag //
+ec_big7__ah //
+ec_big7__ai //
+ec_big7__aj //
+ec_big7__ak //
+ec_big7__al //
+ec_big7__am //
+ec_big7__an //
+ec_big7__ao //
+ec_big7__ap //
+ec_big7__aq //
+ec_big7__ar //
+ec_big7__as //
+ec_big7__at //
+ec_big7__au //
+ec_big7__av //
+ec_big7__aw //
+ec_big7__ax //
+ec_big7__ay //
+ec_big7__az //
+ec_big7__b //
+ec_big7__c //
+ec_big7__d //
+ec_big7__e //
+ec_big7__f //
+ec_big7__g //
+ec_big7__h //
+ec_big7__i //
+ec_big7__j //
+ec_big7__k //
+ec_big7__l //
+ec_big7__m //
+ec_big7__n //
+ec_big7__o //
+ec_big7__p //
+ec_big7__q //
+ec_big7__r //
+ec_big7__s //
+ec_big7__t //
+ec_big7__u //
+ec_big7__v //
+ec_big7__w //
+ec_big7__x //
+ec_big7__y //
+ec_big7__z //
+ec_bx125 //
+ec_bx125a //
+ec_bx180 // Bar X (Z180 hardware)
+ec_bx180a //
+ec_bxd7s // Bar X Diamond 7s (2006 COOL7) (Electrocoin)
+ec_bxd7s__a //
+ec_bxd7s__b //
+ec_bxd7s__c //
+ec_bxd7s__d //
+ec_casbx // Casino Bar X (Electrocoin)
+ec_casbx__a //
+ec_casbx__b //
+ec_casbxcon // Casino Bar X (Concept - Electrocoin)
+ec_casmb // Casino Multi Bar (Concept - Electrocoin)
+ec_fltr // Flutter (Concept)
+ec_gold7 // Golden 7 (Concept)
+ec_jackb // Jackpot Bars (MAB PCB) (Concept - Electrocoin)
+ec_mag7s // Magic 7s / Cool 7 / Bar X 7 (2001 COOL7) (Electrocoin)
+ec_mag7s__0 //
+ec_mag7s__1 //
+ec_mag7s__2 //
+ec_mag7s__3 //
+ec_mag7s__4 //
+ec_mag7s__5 //
+ec_mag7s__6 //
+ec_mag7s__7 //
+ec_mag7s__8 //
+ec_mag7s__9 //
+ec_mag7s__a //
+ec_mag7s__a0 //
+ec_mag7s__aa //
+ec_mag7s__ab //
+ec_mag7s__ac //
+ec_mag7s__ad //
+ec_mag7s__ae //
+ec_mag7s__af //
+ec_mag7s__ag //
+ec_mag7s__ah //
+ec_mag7s__ai //
+ec_mag7s__aj //
+ec_mag7s__ak //
+ec_mag7s__al //
+ec_mag7s__am //
+ec_mag7s__an //
+ec_mag7s__ao //
+ec_mag7s__ap //
+ec_mag7s__aq //
+ec_mag7s__ar //
+ec_mag7s__as //
+ec_mag7s__at //
+ec_mag7s__au //
+ec_mag7s__av //
+ec_mag7s__aw //
+ec_mag7s__ax //
+ec_mag7s__ay //
+ec_mag7s__az //
+ec_mag7s__b //
+ec_mag7s__c //
+ec_mag7s__d //
+ec_mag7s__e //
+ec_mag7s__f //
+ec_mag7s__g //
+ec_mag7s__h //
+ec_mag7s__i //
+ec_mag7s__j //
+ec_mag7s__k //
+ec_mag7s__l //
+ec_mag7s__m //
+ec_mag7s__n //
+ec_mag7s__o //
+ec_mag7s__p //
+ec_mag7s__q //
+ec_mag7s__r //
+ec_mag7s__s //
+ec_mag7s__t //
+ec_mag7s__u //
+ec_mag7s__v //
+ec_mag7s__w //
+ec_mag7s__x //
+ec_mag7s__y //
+ec_mag7s__z //
+ec_mgbel // Megabell (Concept)
+ec_multb // Multi Bar (Concept - Electrocoin)
+ec_ndgxs // Nudge Excess (MAB PCB) (Concept - Electrocoin)
+ec_rdht7 // Red Hot 7 (MAB PCB) (Concept - Electrocoin)
+ec_redbr // Red Bar (Electrocoin)
+ec_redbr__0 //
+ec_redbr__1 //
+ec_redbr__2 //
+ec_redbr__3 //
+ec_redbr__4 //
+ec_redbr__5 //
+ec_redbr__6 //
+ec_redbr__7 //
+ec_redbr__8 //
+ec_redbr__9 //
+ec_redbr__a //
+ec_redbr__a0 //
+ec_redbr__a1 //
+ec_redbr__a2 //
+ec_redbr__a3 //
+ec_redbr__a4 //
+ec_redbr__a5 //
+ec_redbr__a6 //
+ec_redbr__a7 //
+ec_redbr__a8 //
+ec_redbr__a9 //
+ec_redbr__aa //
+ec_redbr__ab //
+ec_redbr__ac //
+ec_redbr__ad //
+ec_redbr__ae //
+ec_redbr__af //
+ec_redbr__ag //
+ec_redbr__ah //
+ec_redbr__ai //
+ec_redbr__aj //
+ec_redbr__ak //
+ec_redbr__al //
+ec_redbr__am //
+ec_redbr__an //
+ec_redbr__ao //
+ec_redbr__ap //
+ec_redbr__aq //
+ec_redbr__ar //
+ec_redbr__as //
+ec_redbr__at //
+ec_redbr__au //
+ec_redbr__av //
+ec_redbr__aw //
+ec_redbr__ax //
+ec_redbr__ay //
+ec_redbr__az //
+ec_redbr__b //
+ec_redbr__b0 //
+ec_redbr__b1 //
+ec_redbr__ba //
+ec_redbr__bb //
+ec_redbr__bc //
+ec_redbr__bd //
+ec_redbr__be //
+ec_redbr__bf //
+ec_redbr__bg //
+ec_redbr__bh //
+ec_redbr__bi //
+ec_redbr__bj //
+ec_redbr__bk //
+ec_redbr__bl //
+ec_redbr__bm //
+ec_redbr__bn //
+ec_redbr__bo //
+ec_redbr__bp //
+ec_redbr__bq //
+ec_redbr__br //
+ec_redbr__bs //
+ec_redbr__bt //
+ec_redbr__bu //
+ec_redbr__bv //
+ec_redbr__bw //
+ec_redbr__bx //
+ec_redbr__by //
+ec_redbr__c //
+ec_redbr__d //
+ec_redbr__e //
+ec_redbr__f //
+ec_redbr__g //
+ec_redbr__h //
+ec_redbr__i //
+ec_redbr__j //
+ec_redbr__k //
+ec_redbr__l //
+ec_redbr__m //
+ec_redbr__n //
+ec_redbr__o //
+ec_redbr__p //
+ec_redbr__q //
+ec_redbr__r //
+ec_redbr__s //
+ec_redbr__t //
+ec_redbr__u //
+ec_redbr__v //
+ec_redbr__w //
+ec_redbr__x //
+ec_redbr__y //
+ec_redbr__z //
+ec_sbarx // Super Bar X (Electrocoin)
+ec_sbarx__0 //
+ec_sbarx__1 //
+ec_sbarx__2 //
+ec_sbarx__3 //
+ec_sbarx__4 //
+ec_sbarx__5 //
+ec_sbarx__6 //
+ec_sbarx__7 //
+ec_sbarx__8 //
+ec_sbarx__9 //
+ec_sbarx__a //
+ec_sbarx__a0 //
+ec_sbarx__a1 //
+ec_sbarx__a2 //
+ec_sbarx__a3 //
+ec_sbarx__a4 //
+ec_sbarx__aa //
+ec_sbarx__ab //
+ec_sbarx__ac //
+ec_sbarx__ad //
+ec_sbarx__ae //
+ec_sbarx__af //
+ec_sbarx__ag //
+ec_sbarx__ah //
+ec_sbarx__ai //
+ec_sbarx__aj //
+ec_sbarx__ak //
+ec_sbarx__al //
+ec_sbarx__am //
+ec_sbarx__an //
+ec_sbarx__ao //
+ec_sbarx__ap //
+ec_sbarx__aq //
+ec_sbarx__ar //
+ec_sbarx__as //
+ec_sbarx__at //
+ec_sbarx__au //
+ec_sbarx__av //
+ec_sbarx__aw //
+ec_sbarx__ax //
+ec_sbarx__ay //
+ec_sbarx__az //
+ec_sbarx__b //
+ec_sbarx__c //
+ec_sbarx__d //
+ec_sbarx__e //
+ec_sbarx__f //
+ec_sbarx__g //
+ec_sbarx__h //
+ec_sbarx__i //
+ec_sbarx__j //
+ec_sbarx__k //
+ec_sbarx__l //
+ec_sbarx__m //
+ec_sbarx__n //
+ec_sbarx__o //
+ec_sbarx__p //
+ec_sbarx__q //
+ec_sbarx__r //
+ec_sbarx__s //
+ec_sbarx__t //
+ec_sbarx__u //
+ec_sbarx__v //
+ec_sbarx__w //
+ec_sbarx__x //
+ec_sbarx__y //
+ec_sbarx__z //
+ec_sbxbr //
+ec_sbxbra //
+ec_sbxbrb //
+ec_sbxbrc //
+ec_sbxbrd //
+ec_sbxbre //
+ec_sbxbrf //
+ec_sbxbrg //
+ec_sbxbrh //
+ec_spbdx // Super Bar X Deluxe (Electrocoin)
+ec_spbdx__a //
+ec_spbdx__b //
+ec_spbdx__c //
+ec_spbdx__d //
+ec_spbg7mab // Super Big 7 (MAB PCB) (Electrocoin)
+ec_stkex // Stake X (Concept - Electrocoin)
+ec_supbxcon // Super Bar X (MAB PCB) (Concept - Electrocoin)
+ec_supbxmab // Super Bar X (MAB PCB) (Electrocoin)
+ec_supmb // Super Multi Bar (Concept - Electrocoin)
+ec_unk5 // Unknown 'Electrocoin' Fruit Machine(s) (Electrocoin)
+ec_unk5__a //
+ec_unk5__b //
+ec_unk5__c //
+ec_unkt // Unknown 'T' (MAB PCB) (Concept - Electrocoin)
+
+//@source:egghunt.cpp
+egghunt // (c) 1995 Invi Image
+
+//@source:einstein.cpp
+einst256 //
+einstei2 //
+einstein //
+
+//@source:elecbowl.cpp
+elecbowl // Marx
+
+//@source:electra.cpp
+avenger // (c) 1975 Electra
+
+//@source:electron.cpp
+electron // 1983 Acorn Electron
+
+//@source:elekscmp.cpp
+elekscmp //
+
+//@source:elf.cpp
+elf2 //
+
+//@source:elwro800.cpp
+elwro800 //
+
+//@source:embargo.cpp
+embargo //
+
+//@source:enigma2.cpp
+enigma2 // (c) 1981 Game Plan (Zilec Electronics license)
+enigma2a // (c) 1984 Zilec Electronics (bootleg?)
+enigma2b // (c) 1981 Zilec Electronics
+
+//@source:enmirage.cpp
+enmirage // 1985 Mirage Digital Multi-Sampler
+
+//@source:eolith.cpp
+candy // (c) 1999 Eolith
+fort2b // (c) 2001 Eolith
+fort2ba // (c) 2001 Eolith
+hidctch2 // (c) 1999 Eolith
+hidctch2a // (c) 1999 Eolith
+hidctch3 // (c) 2000 Eolith
+hidnc2k // (c) 2000 Eolith
+hidnctch // (c) 1998 Eolith
+ironfort // (c) 1998 Eolith
+ironfortj // (c) 1998 Eolith
+landbrk // (c) 1999 Eolith
+landbrka // (c) 1999 Eolith
+linkypip // (c) 1998 Eolith
+nhidctch // (c) 1999 Eolith
+penfan // (c) 1999 Eolith
+penfana // (c) 1999 Eolith
+puzzlekg // (c) 1998 Eolith
+raccoon // (c) 1999 Eolith
+stealsee // (c) 2000 Moov Generation / Eolith
+
+//@source:eolith16.cpp
+klondkp // (c) 1999 Eolith
+
+//@source:ep64.cpp
+ep128 // Enterprise 128
+ep64 // Enterprise 64
+phc64 // Hegener & Glaser Mephisto PHC 64
+
+//@source:epos.cpp
+catapult // (c) 1982
+dealer // (c) 198?
+igmo // (c) 1984
+megadon // (c) 1982
+revenger // (c) 1984
+suprglob // (c) 1983
+theglob // (c) 1983
+theglob2 // (c) 1983
+theglob3 // (c) 1983
+
+//@source:eprom.cpp
+eprom // 136069 (c) 1989
+eprom2 // 136069 (c) 1989
+guts // prototype
+klaxp1 // prototype
+klaxp2 // prototype
+
+//@source:equites.cpp
+bullfgtr // (c) 1984 Alpha Denshi Co.
+bullfgtrs // (c) 1984 Alpha Denshi Co./Sega
+equites // (c) 1984 Alpha Denshi Co.
+equitess // (c) 1984 Alpha Denshi Co./Sega
+gekisou // (c) 1985 Eastern
+hvoltage // (c) 1985 Alpha Denshi Co.
+kouyakyu // (c) 1985 Alpha Denshi Co.
+splndrbt // (c) 1985 Alpha Denshi Co.
+
+//@source:ertictac.cpp
+ertictac // (c) 1992 Sisteme
+ertictaca // (c) 1992 Sisteme
+ertictacb // (c) 1992 Sisteme
+poizone // (c) 1990 Sisteme
+
+//@source:esd16.cpp
+deluxe5 // (c) 2000 ESD
+deluxe5a // (c) 2000 ESD
+deluxe5b // (c) 2000 ESD
+hedpanic // (c) 2000 ESD
+hedpanicf // (c) 2000 ESD + Fuuki, Co. Ltd.
+hedpanico // (c) 1999 ESD
+jumppop // (c) 2001 ESD
+jumppope // (c) 2001 Emag Soft (on original ESD 11-09-98 hardware)
+mchampdx // (c) 1999 ESD
+mchampdxa // (c) 1999 ESD
+mchampdxb // (c) 1999 ESD
+multchmp // (c) 1999 (World)
+multchmpa // (c) 1998 (World)
+multchmpk // (c) 1998 (Korea)
+swatpolc // (c) 2001 ESD
+tangtang // (c) 2000 ESD
+
+//@source:esh.cpp
+esh // (c) 1984 Funai / Gakken
+esha // (c) 1984 Funai / Gakken
+eshb // (c) 1984 Funai / Gakken
+
+//@source:espial.cpp
+espial // (c) 1983 Thunderbolt, Orca logo is hidden in title screen
+espialu // (c) 1983 Thunderbolt, Orca logo is hidden in title screen
+netwars // (c) 1983 Orca + Esco Trading Co license
+
+//@source:esq1.cpp
+esq1 // 1986 ESQ-1 Digital Wave Synthesizer
+esqm // 1986 ESQ-M rack-mount ESQ-1
+sq80 // 1988 SQ-80 Digital Wave Synthesizer
+
+//@source:esq5505.cpp
+eps // 1988 EPS
+eps16p // 1990 EPS 16 Plus
+sd1 // 1990 SD-1
+sd132 // 1991 SD-1 32
+sq1 // 1990 SQ-1
+sqrack // 1990 SQ-Rack
+vfx // 1989 VFX
+vfxsd // 1989 VFX-SD
+
+//@source:esqasr.cpp
+asr10 // 1992 ASR-10
+asrx // 1997 ASR-X
+
+//@source:esqkt.cpp
+kt76 // 1996 KT-76
+
+//@source:esqmr.cpp
+mr61 // 1996 MR-61
+mrrack // 1996 MR-Rack
+
+//@source:esripsys.cpp
+turbosub // (c) 1985 Entertainment Sciences
+turbosub6 // (c) 1985 Entertainment Sciences
+turbosub7 // (c) 1985 Entertainment Sciences
+
+//@source:et3400.cpp
+et3400 //
+
+//@source:eti660.cpp
+eti660 //
+
+//@source:ettrivia.cpp
+promutrv // (c) 1985 Enerdyne Technologies Inc
+promutrva // (c) 1985 Enerdyne Technologies Inc
+promutrvb // (c) 1985 Enerdyne Technologies Inc
+promutrvc // (c) 1985 Enerdyne Technologies Inc
+strvmstr // (c) 1986 Enerdyne Technologies Inc
+
+//@source:europc.cpp
+europc // 1988 Schneider Euro PC (CGA or Hercules)
+
+//@source:evmbug.cpp
+evmbug //
+
+//@source:excali64.cpp
+excali64 //
+
+//@source:exedexes.cpp
+exedexes // 2/1985 (c) 1985
+savgbees // 2/1985 (c) 1985 + Memetron license
+
+//@source:exelv.cpp
+exeltel //
+exl100 //
+
+//@source:exerion.cpp
+exerion // (c) 1983 Jaleco
+exerionb // bootleg
+exeriont // (c) 1983 Jaleco + Taito America license
+
+//@source:exidy.cpp
+fax // (c) 1983
+fax2 // (c) 1983
+hardhat // (c) 1982
+mtrap // (c) 1981
+mtrap3 // (c) 1981
+mtrap4 // (c) 1981
+mtrapb // bootleg
+panzer // (c) 1980 Proel (bootleg)
+pepper2 // (c) 1982
+pepper27 // (c) 1982
+phantom // (c) 1980 Proel (bootleg)
+phantoma // (c) 1980 Jeutel (bootleg)
+rallys // (c) 1980 Novar (bootleg)
+rallysa // (c) 1980 Musik Box Brescia (bootleg)
+sidetrac // (c) 1979
+spectar // (c) 1980
+spectar1 // (c) 1980
+targ // (c) 1980
+targc // (c) 1980
+teetert // (c) 1981
+venture // (c) 1981
+venture2 // (c) 1981
+venture4 // (c) 1981
+
+//@source:exidy440.cpp
+catch22 // (c) 1985
+cheyenne // (c) 1984
+chiller // (c) 1986
+claypign // (c) 1986
+combat // (c) 1985
+cracksht // (c) 1985
+crossbow // (c) 1983
+hitnmiss // (c) 1987
+hitnmiss2 // (c) 1987
+showdown // (c) 1988
+topsecex // (c) 1986
+whodunit // (c) 1988
+whodunit8 // (c) 1988
+yukon // (c) 1989
+yukon1 // (c) 1989
+
+//@source:exidyttl.cpp
+attckexd // (c) 1977 Exidy
+attckexd2 // (c) 1977 Exidy
+deathrac // (c) 1976 Exidy
+
+//@source:exp85.cpp
+exp85 //
+
+//@source:expro02.cpp
+fantasia // (c) 1994 Comad & New Japan System
+fantasiaa // (c) 1994 Comad & New Japan System
+fantasiab // (c) 1994 Comad & New Japan System
+fantasian //
+fantsia2 // (c) 1997 Comad
+fantsia2a // (c) 1997 Comad
+fantsia2n // (c) 1998 Comad
+fantsy95 // (c) 1995 Hi-max Technology Inc.
+galhustl // (c) 1997 ACE International
+galsnew // (c) 1990 Kaneko
+galsnewa // (c) 1990 Kaneko
+galsnewj // (c) 1990 Kaneko
+galsnewk // (c) 1990 Kaneko
+missmw96 // (c) 1996 Comad
+missw96 // (c) 1996 Comad
+missw96a // (c) 1996 Comad
+missw96b // (c) 1996 Comad
+missw96c // (c) 1996 Comad
+newfant // (c) 1994 Comad & New Japan System
+newfanta // (c) 1995 Comad & New Japan System
+pgalvip // (c) 1996 ACE International (Afega stickers on ROMs)
+pgalvipa //
+smissw //
+supmodel // (c) 1994 Comad & New Japan System
+wownfant // (c) 2002 Comad
+zipzap // (c) 1995 Barko Corp
+
+//@source:exprraid.cpp
+exprraid // (c) 1986 Data East Corporation
+exprraidi // (c) 1986 Data East Corporation PCB manufactured by Gecas under license
+exprraidu // (c) 1986 Data East USA (US)
+wexpress // (c) 1986 Data East Corporation
+wexpressb1 // bootleg
+wexpressb2 // bootleg
+wexpressb3 // bootleg
+
+//@source:exterm.cpp
+exterm // (c) 1989 Premier Technology - a Gottlieb game
+
+//@source:extrema.cpp
+adults // Adults Only (Russia)
+bloto // Blits Loto (Russia)
+blpearl // Black Pearl (Russia)
+exsafar // Safari (Russia)
+extrmth // Treasure Hunt (Russia)
+extrmti // Treasure Island (Russia)
+grancan // Grand Canyon (Russia)
+luckshel // Lucky Shell (Russia)
+maski // Maski Show (Russia)
+strlink // Strong Link (Russia)
+
+//@source:exzisus.cpp
+exzisus // B12 (c) 1987 Taito Corporation (Japan)
+exzisusa // B23 (c) 1987 Taito Corporation (Japan)
+exzisust // B23 (c) 1987 TAD Corp (based on Japan Conversion)
+
+//@source:f1gp.cpp
+f1gp // (c) 1991 Video System Co.
+f1gp2 // (c) 1992 Video System Co.
+f1gpb // bootleg
+
+//@source:f-32.cpp
+mosaicf2 // (c) 1999 F2 System
+royalpk2 //
+
+//@source:famibox.cpp
+famibox // 1986
+
+//@source:fantland.cpp
+borntofi // (c) International Games?
+fantland // (c) 198? Electronic Devices Italy
+fantlanda // (c) 198? Electronic Devices Italy
+galaxygn // (c) 1989 Electronic Devices Italy
+wheelrun // (c) 1988? International Games
+
+//@source:fanucs15.cpp
+fanucs15 // 1990
+
+//@source:fanucspmg.cpp
+fanucspg // 1983
+fanucspgm // 1983
+
+//@source:fastfred.cpp
+boggy84 // (c) 1984 Kaneko
+boggy84b // bootleg
+fastfred // 136009 (c) 1982 Atari
+flyboy // (c) 1982 Kaneko
+flyboyb // bootleg
+imago // (c) 1984 Acom
+imagoa // (c) 1983 Acom
+jumpcoas // (c) 1983 Kaneko
+jumpcoast // (c) 1983 Taito
+redrobin // (c) 1986 Elettronolo
+
+//@source:fastinvaders.cpp
+fi6845 //
+fi8275 //
+
+//@source:fastlane.cpp
+fastlane // GX752 (c) 1987
+
+//@source:fb01.cpp
+fb01 // 1986 FB-01
+
+//@source:fc100.cpp
+fc100 //
+
+//@source:fcombat.cpp
+fcombat // (c) 1985 Jaleco
+
+//@source:fcrash.cpp
+cawingb2 // bootleg
+cawingbl // bootleg
+dinopic // bootleg
+dinopic2 // bootleg
+fcrash // bootleg of Final Fight
+ffightbl // bootleg
+ffightbla // bootleg
+knightsb // bootleg
+kodb // bootleg
+punipic // bootleg
+punipic2 // bootleg
+punipic3 // bootleg
+sf2b // bootleg
+sf2m1 // hack
+sf2m9 // bootleg
+sf2mdt // bootleg
+sf2mdta // bootleg
+sf2mdtb // bootleg
+sgyxz // bootleg (All-In Electronics)
+slampic // bootleg
+
+//@source:feversoc.cpp
+feversoc // (c) 2004
+
+//@source:fgoal.cpp
+fgoal // TF (c) 1979 Taito Corporation
+fgoala // MF (c) 1979 Taito Corporation
+
+//@source:fidel6502.cpp
+csc // CSC: Champion Sensory Chess Challenger (English)
+cscfr // * French
+cscg // * German
+cscsp // * Spanish
+fexcel //
+fexcelv //
+fscc12 //
+
+//@source:fidel68k.cpp
+feagv10 //
+feagv11 //
+feagv2 //
+feagv7 //
+
+//@source:fidelz80.cpp
+bridgec3 //
+cc10 //
+cc7 //
+uvc // UVC: Advanced Voice Chess Challenger (English)
+uvcfr // * French
+uvcg // * German
+uvcsp // * Spanish
+vbrc //
+vcc // VCC: Voice Chess Challenger (English)
+vccfr // * German
+vccg // * Spanish
+vccsp // * French
+vsc // VSC: Voice Sensory Chess Challenger (English)
+vscfr // * French
+vscg // * German
+vscsp // * Spanish
+
+//@source:finalizr.cpp
+finalizr // GX523 (c) 1985
+finalizrb // bootleg
+
+//@source:fireball.cpp
+fireball //
+
+//@source:firebeat.cpp
+bm36th // GCA21 (c) 2001 (Japan)
+bm37th // GCB07 (c) 2002 (Japan JCA)
+bm3core // GCA05 (c) 2000 (Japan)
+bm3final // GCC01 (c) 2003 (Japan JCA)
+kbm // GQ974 (c) 2000 (Japan)
+kbm2nd // GCA01 (c) 2000 (Japan)
+kbm3rd // GCA12 (c) 2001 (Japan)
+popn4 // GQ986 (c) 2000 (Japan)
+popn5 // GCA04 (c) 2000 (Japan)
+popn6 // GQA16 (c) 2001 (Japan)
+popn7 // GCB00 (c) 2001 (Japan)
+popn8 // GQB30 (c) 2002 (Japan)
+popnanm2 // GEA02 (c) 2001 (Japan)
+ppd // GQ977 (c) 2000 (Korea)
+ppp // GQ977 (c) 2000 (Japan)
+ppp11 // GQ977 (c) 2000 (Japan)
+ppp1mp // GQA11 (c) 2000 (Japan)
+
+//@source:firefox.cpp
+firefox // 136026 (c) 1984
+firefoxa // 136026 (c) 1984
+
+//@source:firetrap.cpp
+firetrap // (c) 1986 Data East USA (US)
+firetrapa // (c) 1986 Data East USA (US)
+firetrapbl // bootleg
+firetrapj // (c) 1986 Wood Place Inc. (Japan)
+
+//@source:firetrk.cpp
+firetrk // 030926 1978/06 [6808]
+montecar // 035763-035780 1980/04 [6502]
+superbug // 009115-009467 1977/09 [6800]
+
+//@source:fitfight.cpp
+bbprot // unfinished prototype
+fitfight // bootleg of Art of Fighting
+histryma // bootleg of Fighter's History
+hotmindff // (c) Playmark
+
+//@source:fk1.cpp
+fk1 //
+
+//@source:flicker.cpp
+flicker //
+
+//@source:flipjack.cpp
+flipjack // 1983? Jackson Co., Ltd.
+
+//@source:flkatck.cpp
+flkatck // GX669 (c) 1987 (Japan)
+flkatcka // GX669 (c) 1987 (Japan)
+mx5000 // GX669 (c) 1987
+
+//@source:flower.cpp
+flower // (c) 1986 Komax license
+flowerj // 834-5998 (c) 1986 Sega / Alpha license?
+
+//@source:flstory.cpp
+flstory // A45 (c) 1985 Taito Corporation
+flstoryj // A45 (c) 1985 Taito Corporation (Japan)
+onna34ro // A52 (c) 1985 Taito Corporation (Japan)
+onna34roa // A52 (c) 1985 Taito Corporation (Japan)
+rumba // A23 (c) 1985 Taito Corporation (Japan)
+victnine // A16 (c) 1985 Taito Corporation (Japan)
+
+//@source:flyball.cpp
+flyball // 005629 1976/07 [6502]
+flyball1 // 005629 1976/07 [6502]
+
+//@source:fm7.cpp
+fm11 // 1982 FM-11 EX
+fm16beta // 1983 FM-16 Beta
+fm7 //
+fm7740sx //
+fm77av //
+fm8 // 1981
+fmnew7 //
+
+//@source:fmtowns.cpp
+carmarty // Fujitsu FM-Towns Car Marty
+fmtmarty // 1993 Fujitsu FM-Towns Marty
+fmtmarty2 // 1993 Fujitsu FM-Towns Marty 2
+fmtowns // 1989 Fujitsu FM-Towns
+fmtownsa //
+fmtownsftv // 1994 FM-Towns II FreshTV
+fmtownshr // 1992 FM-Towns II HR
+fmtownsmx // FM-Towns II MX
+fmtownssj // FM-Towns II SJ
+fmtownsux // 1991.11 FM-Towns II UX
+
+//@source:foodf.cpp
+foodf // 136020 (c) 1982 // made by Gencomp
+foodf1 // 136020 (c) 1982 // made by Gencomp
+foodf2 // 136020 (c) 1982 // made by Gencomp
+foodfc // 136020 (c) 1982 // made by Gencomp
+
+//@source:force68k.cpp
+fccpu1 //
+
+//@source:forte2.cpp
+pesadelo // (c) 1989 Forte II Games
+
+//@source:fortecar.cpp
+fortecar //
+fortecrd //
+
+//@source:fp1100.cpp
+fp1100 //
+
+//@source:fp200.cpp
+fp200 //
+
+//@source:fp6000.cpp
+fp6000 //
+
+//@source:freekick.cpp
+countrun // (c) 1988 Nihon System (+ optional Sega) NS6201-A 1988.3
+countrunb // (c) 1988 bootleg
+countrunb2 // (c) 1988 bootleg
+freekick // (c) 1988 Nihon System licensed to Merit (+ optional Sega) NS6201-A 1987.10
+freekicka // (c) 1988 Nihon System (+ optional Sega) NS6201-A 1987.9
+freekickb1 // (c) 1987 bootleg
+freekickb2 // (c) 1987 bootleg
+freekickb3 // (c) 1987 bootleg
+gigas // (c) 1986 Sega
+gigasb // (c) 1986 bootleg
+gigasm2b // (c) 1986 bootleg
+oigas // (c) 1986 bootleg
+pbillrd // (c) 1987 Nihon System
+pbillrds // (c) 1987 Nihon System (Sega license?)
+pbillrdsa // (c) 1987 Nihon System (Sega license?)
+
+//@source:fresh.cpp
+fresh // (c) Chain Leisure
+
+//@source:fromanc2.cpp
+fromanc2 // (c) 1995 Video System Co. (Japan)
+fromanc4 // (c) 1998 Video System Co. (Japan)
+fromancr // (c) 1995 Video System Co. (Japan)
+
+//@source:fromance.cpp
+daiyogen // [1990] Video System Co. (Japan)
+fromance // (c) 1991 Video System Co. (Japan)
+idolmj // [1988] (c) System Service (Japan)
+mfunclub // [1989] V-System (Japan)
+mjnatsu // [1989] Video System presents (Japan)
+natsuiro // [1989] Video System presents (Japan)
+nekkyoku // [1988] Video System Co. (Japan)
+nmsengen // (c) 1991 Video System (Japan)
+
+//@source:fruitpc.cpp
+fruitpc // ???
+gogostrk //
+
+//@source:ft68m.cpp
+ft68m //
+
+//@source:fungames.cpp
+biplane4 // (c) 1976 Fun Games
+take5 // (c) 1975 Fun Games
+
+//@source:funkball.cpp
+funkball // (c) 1998 dgPIX Entertainment Inc
+
+//@source:funkybee.cpp
+funkybee // (c) 1982 Orca
+funkybeeb // (c) 1982 Orca
+skylancr // (c) 1983 Orca
+skylancre // (c) 1983 Orca + Esco Trading Co license
+
+//@source:funkyjet.cpp
+funkyjet // MAT (c) 1992 Data East (Mitchell license) (World, Rev 1)
+funkyjeta // MAT (c) 1992 Data East (Mitchell license) (World) - Rev unverified
+funkyjetj // MAT (c) 1992 Data East (Mitchell license) (Japan, Rev 2)
+sotsugyo // (c) 1995 Mitchell (Atlus license)
+
+//@source:funworld.cpp
+bigdeal // (c) 1986 Fun World
+bigdealb // (c) 1986 Fun World
+bonuscrd // (c) 1986 Fun World
+bonuscrda // (c) 1986 Fun World
+bottl10b // (c) 1996 C.M.C.
+bottle10 // (c) 1996 C.M.C.
+chinatow // 1998 unknown
+crystal // (c) 1998 J.C.D. srl
+cuoreuno // (c) 1996 C.M.C.
+elephfam // (c) 1997 C.M.C.
+elephfmb // (c) 1996 C.M.C.
+funquiz // (c) 198? Fun World
+jokercrd // (c) 1993 Vesely Svet
+jollycrd // (c) 1985 TAB-Austria
+jolyc3x3 // (c) 1985 TAB-Austria
+jolyc980 // (c) 2000 Spale-Soft
+jolyccra // (c) 1985 TAB-Austria
+jolyccrb // (c) 1993 Soft Design
+jolycdab // (c) 1986 Inter Games
+jolycdev // (c) 1998 TAB/Evona
+jolycdib // 1990 bootleg
+jolycdic // 1993 bootleg
+jolycdid // 1990 bootleg
+jolycdie // 1990 bootleg
+jolycdit // 199? bootleg
+jolycdsp // (c) 1992 TAB-Austria
+jolycmzs // (c) 1993 MZS Tech
+jolyjokr // (c) 198? Impera
+jolyjokra // (c) 198? Impera
+jolyjokrb // (c) 198? Impera
+lluck3x3 // (c) 1991 TAB-Austria
+lluck4x1 // (c) 1991 TAB-Austria
+lunapark // 1998 unknown.
+lunaparkb // 1998 unknown.
+lunaparkc // 1998 unknown.
+magicrd2 // (c) 1996 Impera
+magicrd2a // (c) 1996 Impera
+magicrd2b // (c) 1996 Impera
+magicrd2c // (c) 1996 Impera
+mongolnw // 199? bootleg
+multiwin // (c) 1992 Fun World
+novoplay // (c) 1986 Novomatic
+pool10 // (c) 1996 C.M.C.
+pool10b // (c) 1996 C.M.C.
+pool10c // (c) 1996 C.M.C.
+pool10d // (c) 1997 C.M.C.
+pool10e // (c) 1997 C.M.C.
+pool10f // (c) 1997 C.M.C.
+pool10g // (c) 1996 C.M.C.
+pool10h // (c) 1996 C.M.C.
+pool10i // (c) 1997 C.M.C.
+potgame // (c) 1996 C.M.C.
+powercrd // (c) 1993 Fun World
+rcdino4 // 1998 unknown
+royal // 2001, hack.
+royalcdfr // (c) 1991 TAB-Austria
+royalcrd // (c) 1991 TAB-Austria
+royalcrd_msx //
+royalcrd_nes //
+royalcrda // (c) 1991 TAB-Austria
+royalcrdb // (c) 1991 TAB-Austria
+royalcrdc // (c) 1991 TAB-Austria
+royalcrdd // (c) 1991 TAB-Austria
+royalcrde // (c) 1991 TAB-Austria
+royalcrdf // (c) 1991 Evona Electronic
+royalcrdg // (c) 1991 TAB-Austria
+royalcrdp // (c) 1993 Digital Dreams
+royalcrdt // (c) 1991 TAB-Austria orig
+saloon // 199? unknown
+sjcd2kx3 // (c) 1985 M.P.
+soccernw // 199? bootleg
+tortufam // (c) 1997 C.M.C.
+vegasfst // (c) 1993 Soft Design
+vegasfte // (c) 1993 Soft Design
+vegasmil // (c) 1993 Mile
+vegasslw // (c) 1993 Fun World
+witchryl // (c) 199? Video Klein
+
+//@source:funybubl.cpp
+funybubl // (c) 1999 In Chang Electronic Co
+funybublc // (c) 1999 Comad Industries
+
+//@source:fuukifg2.cpp
+gogomile // (c) 1995
+gogomileo // (c) 1995 (Japan)
+pbancho // (c) 1996 (Japan)
+
+//@source:fuukifg3.cpp
+asurabld // (c) 1998 (Japan)
+asurabus // (c) 2000 (Japan)
+asurabusa // review build
+
+//@source:g627.cpp
+rota_101 //
+rota_115 //
+rotation //
+
+//@source:gaelco.cpp
+bigkarnk // (c) 1991 - Ref 901112-1
+biomtoy // (c) 1995 - Ref 922804/2 - (unprotected)
+biomtoya // (c) 1995 - Ref 922804/2 - (unprotected)
+maniacsp // (c) 1996 - Ref 922804/2 - (prototype)
+squash // (c) 1992 - Ref 922804/2
+thoop // (c) 1992 - Ref 922804/1
+
+//@source:gaelco2.cpp
+aligator // (c) 1994 - Ref 940411
+aligatorun // (c) 1994 - Ref 940411 (unprotected)
+bang // (c) 1998 - Ref ???
+bangj // (c) 1999 - Ref ???
+grtesoro // (c) 1999 - Ref ???
+grtesoro4 // (c) 1999 - Ref ???
+maniacsq // (c) 1996 - Ref 940411 - (unprotected)
+maniacsqa // (c) 1996 - Ref 940411
+snowboar // (c) 1996 - Ref 960419/1
+snowboara // (c) 1996 - Ref 960419/1
+touchgo // (c) 1995 - Ref 950906
+touchgoe // (c) 1995 - Ref 950510-1
+touchgon // (c) 1995 - Ref 950906
+wrally2 // (c) 1995 - Ref 950510
+
+//@source:gaelco3d.cpp
+radikalb // (c) 1998 - Ref ???
+radikalba // (c) 1998 - Ref ???
+speedup // (c) 1996 - Ref ???
+speedup10 // (c) 1996 - Ref ???
+surfplnt // (c) 1997 - Ref 971223
+surfplnt40 // (c) 1997 - Ref 970514
+
+//@source:gaiden.cpp
+drgnbowl // (c) 1992 Nics
+drgnbowla // (c) 1992 Nics
+gaiden // 6215 - (c) 1988 Tecmo (US)
+mastninj // bootleg
+raiga // (c) 1991 Tecmo
+ryukendn // 6215 - (c) 1989 Tecmo (Japan)
+ryukendna // 6215 - (c) 1989 Tecmo (Japan)
+shadoww // 6215 - (c) 1988 Tecmo (World)
+shadowwa // 6215 - (c) 1988 Tecmo (World)
+stratof // (c) 1991 Tecmo
+tknight // (c) 1989 Tecmo
+wildfang // (c) 1989 Tecmo
+wildfangs // (c) 1989 Tecmo
+
+//@source:gal3.cpp
+gal3 // (c) 1992 (Arcade TV Game List - P.73, Right, 6 from top)
+
+//@source:galaga.cpp
+battles // bootleg
+bosco // (c) 1981
+boscomd // (c) 1981 Midway
+boscomdo // (c) 1981 Midway
+boscoo // (c) 1981
+boscoo2 // (c) 1981
+digdug // (c) 1982
+digdug1 // (c) 1982
+digdugat // 136007 (c) 1982 Atari
+digdugat1 // 136007 (c) 1982 Atari
+digsid // bootleg
+dzigzag // bootleg
+galaga // (c) 1981
+galagamf // (c) 1981 Midway / hack
+galagamk // (c) 1981 Midway
+galagamw // (c) 1981 Midway
+galagao // (c) 1981
+gallag // bootleg
+gatsbee // (c) 1984 Uchida / hack
+sxevious // (c) 1984
+sxeviousj // (c) 1984
+xevios // bootleg
+xevious // (c) 1982
+xeviousa // 136018 (c) 1982 + Atari license
+xeviousb // 136018 (c) 1982 + Atari license
+xeviousc // 136018 (c) 1982 + Atari license
+
+//@source:galastrm.cpp
+galastrm // C99 (c) 1992 Taito Corporation
+
+//@source:galaxi.cpp
+galaxi // (c) 2000 BRL S.R.L. Bologna
+lastfour // (c) 2001 BRL S.R.L. Bologna
+magjoker // (c) 2000 BRL S.R.L. Bologna
+
+//@source:galaxia.cpp
+astrowar // (c) 1980
+galaxia // (c) 1979
+galaxiaa // (c) 1979
+galaxiab // (c) 1979
+galaxiac // (c) 1979
+
+//@source:galaxian.cpp
+600 // GX353 (c) 1981 Konami
+amidar // GX337 (c) 1982 Konami
+amidar1 // GX337 (c) 1981 Konami
+amidarb // bootleg
+amidaro // GX337 (c) 1982 Konami + Olympia license
+amidars // GX337 (c) 1982 Konami
+amidaru // GX337 (c) 1982 Konami + Stern license
+amigo // bootleg
+anteater // (c) 1982 Tago
+anteaterg // (c) 1983 TV-Tuning (F.E.G. license)
+anteatergg // bootleg
+anteateruk // (c) 1983 Free Enterprise Games
+aracnis // bootleg
+armorcar // (c) 1981 Stern
+armorcar2 // (c) 1981 Stern
+asideral // bootleg
+astrians //
+atlantis // (c) 1981 Comsoft
+atlantis2 // (c) 1981 Comsoft
+atlantisb // bootleg
+azurian // (c) 1982 Rait Electronics Ltd
+batman2 // bootleg
+blkhole // TDS (Tokyo Denshi Sekkei) & MINTS
+bomber //
+calipso // (c) 1982 Tago
+catacomb // 1982 MTM Games
+checkman // (c) 1982 Zilec-Zenitone
+checkmanj // (c) 1982 Jaleco (Zenitone/Zilec in ROM CM4, and the programmer names)
+chewing // ?? unknown
+devilfsg // (c) 1984 Vision / Artic (bootleg?)
+dingo // (c) 1983 Ashby Computers and Graphics LTD. + Jaleco license
+dingoe // (c) 1983 Ashby Computers and Graphics LTD. + Jaleco license
+eagle // [1980] Centuri
+eagle2 // [1980] Centuri
+eagle3 // [1980] Centuri
+exodus // Subelectro - bootleg?
+explorer // bootleg
+fantastc // (c) Taito (Brazil) - rewrite of Galaga
+fantazia // bootleg
+frogf // bootleg
+frogg // bootleg
+frogger // GX392 (c) 1981 Konami
+froggeram // bootleg
+froggermc // 800-3110 (c) 1981 Sega
+froggers // bootleg
+froggers1 // (c) 1981 Sega
+froggers2 // 834-0068 (c) 1981 Sega
+froggers3 //
+froggrs //
+galap1 // hack
+galap4 // hack
+galapx // hack
+galaxbsf // hack
+galaxbsf2 // bootleg
+galaxian // (c) Namco
+galaxiana // (c) Namco
+galaxianbl // bootleg
+galaxiani // (c) Irem
+galaxianm // (c) Midway
+galaxianmo // (c) Midway
+galaxiant // (c) Taito
+galaxrf // bootleg (Recreativos Franco)
+galaxrfgg // bootleg (Recreativos Franco)
+galemp // (c) Taito do Brasil
+galturbo // hack
+ghostmun //
+gmgalax // bootleg
+gteikob2 // bootleg
+gteikokb // bootleg
+gteikoku // (c) Irem
+jumpbug // (c) 1981 Rock-ola
+jumpbugb // (c) 1981 Sega
+kamakazi3 // Video Games (UK) Ltd., hack or bootleg?
+kingball // (c) 1980 Namco
+kingballj // (c) 1980 Namco
+kong // (c) Taito (Brazil) - rewrite of Donkey Kong
+levers // (c) 1983 Rock-ola
+losttomb // (c) 1982 Stern
+losttombh // (c) 1982 Stern
+luctoday // 1980 Sigma
+monsterz // (c) 1982 Nihon (Arcade TV Game List - P.102, Left, 20 from top)
+moonal2 // [1980] Nichibutsu
+moonal2b // [1980] Nichibutsu
+moonaln // [Nichibutsu] (Karateco license) or hack
+mooncmw // bootleg
+mooncptc // bootleg (Petaco S.A.)
+mooncreg // bootleg
+mooncrgx // bootleg
+mooncrs2 // bootleg
+mooncrs3 // bootleg
+mooncrs4 // bootleg
+mooncrsb // bootleg
+mooncrsl // bootleg (Laguna S.A.)
+mooncrst // (c) 1980 Nichibutsu
+mooncrstg // (c) 1980 Gremlin
+mooncrsto // (c) 1980 Nichibutsu
+mooncrstu // (c) 1980 Nichibutsu USA
+mooncrstuk // (c) 1980 Nichibutsu UK
+mooncrstuku // (c) 1980 Nichibutsu UK
+moonqsr // (c) 1980 Nichibutsu
+moonwar // (c) 1981 Stern
+moonwara // (c) 1981 Stern
+mshuttle // (c) 1981 Nichibutsu
+mshuttle2 // (c) 1981 Nichibutsu
+mshuttlej // (c) 1981 Nichibutsu
+mshuttlej2 // (c) 1981 Nichibutsu
+omega // bootleg
+omni // bootleg
+orbitron // (c) 1982 Signatron USA (Arcade Tv Game List - P.160, Left, 22 from top)
+pacmanbl // bootleg
+pacmanbla // bootleg
+pajaroes // bootleg
+phoenxp2 // bootleg
+pisces // Subelectro
+piscesb // bootleg
+quaak // bootleg
+redufo // (c) Artic
+redufob // bootleg
+scobra // GX316 (c) 1981 Konami
+scobrab // GX316 (c) 1981 Karateco (bootleg?)
+scobrae // GX316 (c) 1981 Stern
+scobras // GX316 (c) 1981 Stern
+scobrase // GX316 (c) 1981 Sega
+scorpion // (c) 1982 Zaccaria
+scorpiona // (c) 1982 Zaccaria
+scorpionb // (c) 1982 Zaccaria
+scorpionmc // bootleg
+scramble // GX387 (c) 1981 Konami
+scramblebb // bootleg?
+scramblebf // bootleg
+scrambles // GX387 (c) 1981 Stern
+scrambles2 // GX387 (c) 1981 Stern
+scrambp // bootleg (Billport S.A.)
+scramce // bootleg (Centromatic S.A.)
+scrampt // bootleg (Petaco S.A.)
+scramrf // bootleg (Recreativos Franco)
+sfx // (c) 1983 Nichibutsu
+skelagon // (c) 1983 Nichibutsu USA
+skybase // (c) 1982 Omori Electric Co., Ltd.
+skyraidr // bootleg
+smooncrs // Gremlin
+spacbat2 // bootleg
+spacbatt // bootleg
+spacempr // bootleg
+spactrai //
+spcdrag // bootleg
+spcdraga // bootleg
+spctbird // (c) Fortrek
+spdcoin // (c) 1984 Stern
+sstarcrs // Taito (Brazil)
+starfght // hack
+starfgmc // bootleg
+stera // bootleg
+streakng // [1980] Shoei
+streaknga // [1980] Shoei
+strfbomb // bootleg
+superbon // bootleg
+superg // hack
+supergs // Silver Systems hack
+supergx // [1980] Nichibutsu
+suprheli // bootleg
+swarm // hack
+tazmania // (c) 1982 Stern
+tdpgal // 1983 Design Labs / Thomas Automatics
+tenspot // (c) 1982 Thomas Automatics
+theend // (c) 1980 Konami
+theendb // (c) 1980 Bootleg
+theends // (c) 1980 Stern
+thepitm // bootleg
+timefgtr // (c) Taito (Brazil) - rewrite of Time Pilot
+tst_galx // Galaxian Test ROM
+turpin // (c) 1981 Sega
+turtles // (c) 1981 Stern
+uniwars // (c) Irem
+warofbug // (c) 1981 Armenia
+warofbugg // German Version
+warofbugu // (c) 1981 Armenia
+zerotime // hack
+zerotimed // hack
+zigzagb // (c) 1982 LAX (bootleg)
+zigzagb2 // (c) 1982 LAX (bootleg)
+
+//@source:galaxold.cpp
+4in1 // (c) 1981 Armenia / Food and Fun
+bagmanm2 // (c) 1984 Valadon Automation / GIB
+bagmanmc // bootleg
+bongo // (c) 1983 Jetsoft
+bullsdrtg // 1985 Senko
+ckongcv // 19?? Competitive Video?
+ckongg // 1981 bootleg
+ckonggx //
+ckongis //
+ckongmc // 1981 bootleg
+dkongjrm // bootleg
+drivfrcb // bootleg
+drivfrcg // [1984] Shinkai (Magic Electronics USA license)
+drivfrct // bootleg
+froggerv // bootleg
+guttangt //
+hexpool // (c) 1986 Shinkia (Senko Kit)
+hexpoola // (c) 1986 Shinkia (Senko Kit)
+hunchbkg // (c) 1983 Century
+hustlerb3 // bootleg
+ladybugg // bootleg
+ozon1 // (c) 1983 Proma
+porter // 1982 bootleg (Arcade TV Game List - P.98, Left, 15 from bottom)
+racknrol // (c) 1986 Status (Shinkia license) (Senko Kit)
+rockclim // (c)1981 Taito
+scramb2 // bootleg
+scramblb // bootleg
+scrambler // bootleg
+spcwarp // 1983 Century Electronics UK LTD
+tazzmang // bootleg
+tazzmang2 // bootleg
+trvchlng // [1985] Joyland (Senko license)
+vpool // bootleg
+
+//@source:galaxy.cpp
+galaxy //
+galaxyp //
+
+//@source:galeb.cpp
+galeb //
+
+//@source:galgame.cpp
+galgame // (c) 1971 Computer Recreations, Inc
+
+//@source:galivan.cpp
+dangar // (c) 1986
+dangar2 // (c) 1986
+dangarb // bootleg
+galivan // (c) 1985
+galivan2 // (c) 1985
+galivan3 // (c) 1985
+ninjemak // (c) 1986 (US?)
+youma // (c) 1986 (Japan)
+youma2 // (c) 1986 (Japan)
+youmab // bootleg
+youmab2 // bootleg
+
+//@source:galpani2.cpp
+galpani2 // (c) 1993 Kaneko
+galpani2e // (c) 1993 Kaneko
+galpani2e2 // (c) 1993 Kaneko
+galpani2g // (c) 1993 Kaneko
+galpani2gs // (c) 1993 Kaneko
+galpani2i // (c) 1993 Kaneko
+galpani2j // (c) 1993 Kaneko
+galpani2t // (c) 1993 Kaneko
+gp2quiz // (c) 1993 Kaneko
+gp2se // (c) 1994 Kaneko
+
+//@source:galpani3.cpp
+galpani3 // (c) 1995 Kaneko (World)
+galpani3hk // (c) 1995 Kaneko (Hong Kong)
+galpani3j // (c) 1995 Kaneko (Japan)
+galpani3k // (c) 1995 Kaneko (Korea)
+
+//@source:galpanic.cpp
+galpanic // (c) 1990 Kaneko
+galpanica // (c) 1990 Kaneko
+
+//@source:galspnbl.cpp
+galspnbl // (c) 1996 Comad
+hotpinbl // (c) 1995 Comad & New Japan System
+
+//@source:gamate.cpp
+gamate // Bit Corp Gamate
+
+//@source:gambl186.cpp
+gambl186 // unknown
+gambl186a // unknown
+gambl186b // unknown
+
+//@source:gamecom.cpp
+gamecom // Tiger Game.com
+
+//@source:gamecstl.cpp
+gamecst2 // MAME based bootleg, version 2.613
+gamecstl // MAME based bootleg
+
+//@source:gameking.cpp
+gamekin3 //
+gameking //
+
+//@source:gameplan.cpp
+challeng // (c) 1981 Centuri
+kaos // (c) 1981
+killcom // (c) 1980 Centuri
+leprechn // (c) 1982
+leprechp // (c) 1982
+megatack // (c) 1980 Centuri
+piratetr // (c) 1982
+potogold // (c) 1982
+
+//@source:gamepock.cpp
+gamepock // Epoch Game Pocket Computer
+
+//@source:gammagic.cpp
+99bottles // (c) 1999 Bally Gaming Co.
+gammagic // (c) 1999 Bally Gaming Co.
+
+//@source:gamtor.cpp
+ancienta //
+ancientaa //
+ancientab //
+ancientac //
+ancientad //
+bananas //
+bananasa //
+beebop //
+beebopa //
+beebopb //
+beebopc //
+beebopd //
+beebope //
+beetlem //
+beetlema //
+beetlemb //
+beetlemc //
+beetlemd //
+bookra //
+bsplash //
+bungeem //
+bungeema //
+chillicc //
+columbus //
+columbusa //
+columbusb //
+columbusc //
+columbusd //
+columbuse //
+columbusf //
+ditrio //
+dolphinp //
+eurogame //
+eurogamea //
+firstcl //
+g4u2 // Games 4 U
+g4u3 //
+g4u3a //
+g4u4 //
+g4u5 //
+g4u6 //
+g4u7 //
+gamt1 // Gaminator 1
+gamt10 //
+gamt10a //
+gamt10b //
+gamt10bag //
+gamt10c //
+gamt10d //
+gamt10e //
+gamt10ent //
+gamt10f //
+gamt10g //
+gamt10gmult //
+gamt10h //
+gamt10i //
+gamt10j //
+gamt10k //
+gamt10l //
+gamt10lotc //
+gamt10lotm //
+gamt10m //
+gamt10n //
+gamt10o //
+gamt11 //
+gamt11a //
+gamt11b //
+gamt11bmult //
+gamt11c //
+gamt12 //
+gamt12a //
+gamt12b //
+gamt16 //
+gamt16a //
+gamt16b //
+gamt16c //
+gamt16d //
+gamt16e //
+gamt16f //
+gamt16fmult //
+gamt16g //
+gamt16h //
+gamt16i //
+gamt16j //
+gamt16k //
+gamt16lotc //
+gamt17 //
+gamt17a //
+gamt17b //
+gamt18 //
+gamt18a //
+gamt18b //
+gamt18bmult //
+gamt18c //
+gamt18d //
+gamt18ent //
+gamt18lotc //
+gamt19 //
+gamt19a //
+gamt19ent //
+gamt19lotc //
+gamt19mult //
+gamt1a //
+gamt1b //
+gamt1ent //
+gamt1lotc //
+gamt20 //
+gamt20a //
+gamt20b //
+gamt20ent //
+gamt20lotc //
+gamt20lotm //
+gamt21 //
+gamt21a //
+gamt21amult //
+gamt22 //
+gamt22a //
+gamt22amult //
+gamt22b //
+gamt23 //
+gamt23a //
+gamt23b //
+gamt29 //
+gamt29a //
+gamt30 //
+gamt31 //
+gamt31mult //
+gamt4 // Gaminator 4
+gamt4a //
+gamt4b //
+gamt4c //
+gamt4d //
+gamt4dbag //
+gamt4e //
+gamt4ent //
+gamt4f //
+gamt4fbag //
+gamt4g //
+gamt4h //
+gamt4hbag //
+gamt4hmult //
+gamt4i //
+gamt4ibag //
+gamt4j //
+gamt4lotc //
+gamt4lotca //
+gamt4lotm //
+gamt5 // Gaminator 5
+gamt6 // Gaminator 6
+gamt6a //
+gamt6b //
+gamt6c //
+gamt6d //
+gamt6e //
+gamt6ent //
+gamt6f //
+gamt6lotc //
+gamt7 // Gaminator 7
+gamt7a //
+gamt7b //
+gamt7c //
+gamt7d //
+gamt7e //
+gamt7f //
+gamt7g //
+gamt7h //
+gamt8 // Gaminator 8
+gamt8a //
+gamt8b //
+gamt8c //
+gamt8d //
+gamt8lotc //
+gamt9 // Gaminator 9
+gamt9a //
+gamt9lotc //
+hspot2 //
+hspot3 //
+llcharm //
+llcharma //
+megakat //
+
+//@source:gaplus.cpp
+galaga3 // (c) 1984
+galaga3a // (c) 1984
+galaga3b // (c) 1984
+galaga3c // (c) 1984
+galaga3m // (c) 1984
+gaplus // (c) 1984
+gaplusa // (c) 1984
+gaplusd // (c) 1984
+gaplust // (c) 1984
+
+//@source:gatron.cpp
+bingo // Game-A-Tron?
+poker41 // (c) 1983 Game-A-Tron
+pulltabs // (c) 1983 Game-A-Tron
+
+//@source:gauntlet.cpp
+gaunt2 // 136043 (c) 1986
+gaunt22p // 136043 (c) 1986
+gaunt22p1 // 136043 (c) 1986
+gaunt22pg // 136043 (c) 1986
+gaunt2g // 136043 (c) 1986
+gauntlet // 136037 (c) 1985
+gauntlet2p // 136037 (c) 1985
+gauntlet2pg // 136037 (c) 1985
+gauntlet2pg1 // 136037 (c) 1985
+gauntlet2pj // 136037 (c) 1985
+gauntlet2pj2 // 136037 (c) 1985
+gauntlet2pr3 // 136037 (c) 1985
+gauntletg // 136037 (c) 1985
+gauntletgr3 // 136037 (c) 1985
+gauntletgr6 // 136037 (c) 1985
+gauntletgr8 // 136037 (c) 1985
+gauntletj // 136037 (c) 1985
+gauntletj12 // 136037 (c) 1985
+gauntletr1 // 136037 (c) 1985
+gauntletr2 // 136037 (c) 1985
+gauntletr4 // 136037 (c) 1985
+gauntletr5 // 136037 (c) 1985
+gauntletr7 // 136037 (c) 1985
+gauntletr9 // 136037 (c) 1985
+gauntlets // 136037 (c) 1985
+vindctr2 // 136059 (c) 1988
+vindctr2r1 // 136059 (c) 1988
+vindctr2r2 // 136059 (c) 1988
+
+//@source:gb.cpp
+gameboy // Nintendo Game Boy Handheld
+gbcolor // Nintendo Game Boy Color Handheld
+gbpocket // Nintendo Game Boy Pocket Handheld
+megaduck // Megaduck
+supergb // Nintendo Super Game Boy SNES Cartridge
+supergb2 //
+
+//@source:gba.cpp
+gba // Nintendo Game Boy Advance Handheld
+
+//@source:gberet.cpp
+gberet // GX577 (c) 1985
+gberetb // bootleg on different hardware
+mrgoemon // GX621 (c) 1986 (Japan)
+rushatck // GX577 (c) 1985
+
+//@source:gcpinbal.cpp
+gcpinbal // (c) 1994 Excellent System
+
+//@source:gei.cpp
+amuse // (c) 1982 Greyhound Electronics
+amuse1 // (c) 1982 Greyhound Electronics
+amuse1a // (c) 1983 Greyhound Electronics
+findout // (c) 1987 [Elettronolo]
+geimulti // (c) 1992 Grayhound Electronics
+gepoker // (c) 1984 Greyhound Electronics
+gepoker1 // (c) 1984 Greyhound Electronics
+gepoker2 // (c) 1984 Greyhound Electronics
+gs4002 // (c) 1982 G.E.I.
+gs4002a // (c) 1982 G.E.I.
+gt103a1 // (c) 1984 Greyhound Electronics
+gt103aa // (c) 1984 Greyhound Electronics
+gt103ab // (c) 1984 Greyhound Electronics
+gt103asx // (c) 1984 Greyhound Electronics
+gt507uk // (c) 1986 Grayhound Electronics
+gtsers1 // (c) 1984 Greyhound Electronics
+gtsers10 // (c) 1984 Greyhound Electronics
+gtsers11 // (c) 1984 Greyhound Electronics
+gtsers11a // (c) 1984 Greyhound Electronics
+gtsers12 // (c) 1984 Greyhound Electronics
+gtsers14 // (c) 1986 Greyhound Electronics
+gtsers15 // (c) 1986 Greyhound Electronics
+gtsers2 // (c) 1984 Greyhound Electronics
+gtsers3 // (c) 1984 Greyhound Electronics
+gtsers4 // (c) 1984 Greyhound Electronics
+gtsers5 // (c) 1985 Greyhound Electronics
+gtsers7 // (c) 1985 Greyhound Electronics
+gtsers8 // (c) 1984 Greyhound Electronics
+gtsers8a // (c) 1984 Greyhound Electronics
+gtsers9 // (c) 1984 Greyhound Electronics
+gtsersa // (c) 1985 Greyhound Electronics
+gtsersb // (c) 1985 Greyhound Electronics
+jokpoker // (c) 1982 Greyhound Electronics
+jokpokera // (c) 1983 Greyhound Electronics
+jokpokerb // (c) 1983 Greyhound Electronics
+jokpokerc // (c) 1983 Greyhound Electronics
+quiz // (c) 1986 Elettronolo
+quiz211 // (c) 1986 Elettronolo
+quizvid // (c) 1986 Italian bootleg
+reelfun // (c) 1986 Grayhound Electronics
+reelfun1 // (c) 1986 Grayhound Electronics
+sexappl // (c) 1992 Grayhound Electronics
+sextriv1 // (c) 1985 Kinky Kit and Game Co.
+sextriv2 // (c) 1985 Kinky Kit and Game Co.
+sprtauth // (c) 1992 Classic Games
+superbwl // (c) 1982 Greyhound Electronics
+suprpokr // (c) 1986 Grayhound Electronics
+suprpokra // (c) 1986 Grayhound Electronics
+suprpokrb // (c) 1986 Grayhound Electronics
+
+//@source:geneve.cpp
+geneve // 1987? Myarc Geneve 9640
+
+//@source:geniusiq.cpp
+bs9009cx // 1999 BrainStation 9009 CXL (Germany)
+gl8008cx // 1999 Genius Leader 8008 CX (Germany)
+glmmc // 199? Genius Master Mega Color
+iq128 // 1997 Genius IQ 128 (Germany)
+iq128_fr // 1997 Genius PC (France)
+iqtv512 // IQ TV512 (Germany)
+iqunlim // 199? IQ Unlimited (680x0)
+itunlim // 199? IT Unlimited
+
+//@source:genpc.cpp
+pc // 1987 PC with CGA
+pcega // 1987 PC with EGA
+pcherc // 1987 PC with Hercules (for testing hercules)
+pcmda // 1987 PC with MDA
+xtvga // 198? PC-XT (VGA, MF2 Keyboard)
+
+//@source:ggconnie.cpp
+ggconnie // (c) ???? Capcom
+
+//@source:ghosteo.cpp
+bballoon // (c) 2003 Eolith
+hapytour // (c) 2005 GAV Company (on Eolith's Ghost hardware)
+touryuu // (c) 200? Yuki Enterprise
+
+//@source:gijoe.cpp
+gijoe // GX069 (c) 1991 (World)
+gijoea // GX069 (c) 1991 (World)
+gijoej // GX069 (c) 1991 (Japan)
+gijoeu // GX069 (c) 1991 (US)
+
+//@source:gimix.cpp
+gimix //
+
+//@source:ginganin.cpp
+ginganin // (c) 1987 Jaleco
+ginganina // (c) 1987 Jaleco
+
+//@source:gizmondo.cpp
+gizmondo //
+
+//@source:gkigt.cpp
+gkigt4 //
+gkigt43 //
+gkigt43n //
+gkigt4ms //
+gkigt5p //
+gkigtez //
+gkkey //
+igtsc //
+ms72c //
+
+//@source:gladiatr.cpp
+gcastle // QB (c) 1986 Taito Corporation (prototype?)
+gladiatr // QB (c) 1986 Taito America Corporation (US)
+greatgur // QB (c) 1986 Taito Corporation (Japan?)
+ogonsiro // QB (c) 1986 Taito Corporation (Japan)
+ppking // QO (c) 1985 Taito America Corporation (US)
+
+//@source:glasgow.cpp
+amsterd // Amsterdam
+dallas // Dallas
+dallas16 // Dallas
+dallas32 // Dallas
+glasgow // Glasgow
+roma // Roma
+roma32 // Roma
+
+//@source:glass.cpp
+glass // (c) 1993 - Ref 931021
+glass10 // (c) 1993 - Ref 931021
+glass10a // (c) 1993 - Ref 931021 shows "Break Edition" on a real PCB
+glasskr // (c) 1994 - Ref 931021 shows 1994 version, Anime girls, unprotected
+
+//@source:globalfr.cpp
+gl_coc // Carry On Clubbin' (Global)
+gl_coc29 //
+gl_coc29p //
+gl_cocp //
+gl_dow // Deals On Wheels (Global)
+gl_dowcl // Deals On Wheels Club (Global)
+gl_dowclp //
+gl_dowp //
+gl_grncl //
+gl_grncla //
+gl_hbh // Heartbreak Hotel (Global)
+gl_hbhcl // Heartbreak Hotel Club (Global)
+gl_hbhcla //
+gl_hbhclp //
+gl_snbev //
+gl_snbeva //
+gl_uyr // Up Yer Riggin Club (Global)
+gl_uyrp //
+gl_wywh // Wish You Were Here Club (Global)
+gl_wywh24 //
+gl_wywh24p //
+gl_wywhp //
+
+//@source:globalvr.cpp
+bhead2k // Beach Head 2000 Install - 05/27/03
+bhead2k2 // Beach Head 2002 Install - 05/27/03
+bhead2k3 // Beach Head 2003 Desert War Install - 05/27/03
+bhead2ka // Beach Head 2000 Install - 09/16/01
+gvrxpsup // Global VR XP OS Update/Install - 06/11/02
+gvrxpsys // Global VR XP OS Install - 09/30/01
+hyperv2 // Hyper V2 (Global VR) Install - 06/12/02
+hyperv2a // Hyper V2 (Global VR) Install - 09/30/01
+nfsug // Need For Speed: Underground Install (2 Discs) (v1.1)
+
+//@source:gluck2.cpp
+gluck2 // 1992 Yung Yu / CYE
+
+//@source:gmaster.cpp
+gmaster // Hartung Gamemaster
+
+//@source:gng.cpp
+diamond // (c) 1989 KH Video (NOT A CAPCOM GAME but runs on GnG hardware)
+gng // 9/1985 (c) 1985
+gnga // 9/1985 (c) 1985
+gngbl // bootleg
+gngblita // bootleg
+gngc // 9/1985 (c) 1985
+gngprot // Capcom/Romstar Proto
+gngt // 9/1985 (c) 1985
+makaimur // 9/1985 (c) 1985
+makaimurc // 9/1985 (c) 1985
+makaimurg // 9/1985 (c) 1985
+
+//@source:go2000.cpp
+go2000 // (c) 2000 SA
+
+//@source:goal92.cpp
+goal92 // bootleg
+
+//@source:goindol.cpp
+goindol // (c) 1987 Sun a Electronics
+goindolk // (c) 1987 Sun a Electronics
+goindolu // (c) 1987 Sun a Electronics
+homo // bootleg
+
+//@source:goldngam.cpp
+moviecrd // (c) 1998 Golden Games
+swisspkr // (c) 1990 Golden Games
+
+//@source:goldnpkr.cpp
+animpkr // 198?, Unknown
+animpkra // 198?, Unknown
+bchancep // 198?, Unknown
+bchanceq // 198?, Unknown
+brasil86 // 1986, Unknown
+brasil87 // 1987, Unknown
+brasil89 // 1989, Unknown
+brasil89a // 1989, Unknown
+brasil93 // 1993, Unknown
+bsuerte // 1990, Unknown
+bsuertea // 1991, Unknown
+bsuerteb // 1991, Unknown
+bsuertec // 1991, Unknown
+bsuerted // 1991, Unknown
+bsuertee // 1991, Unknown
+bsuertef // 1991, Unknown
+bsuerteg // 1991, Unknown
+bsuerteh // 1991, Unknown
+bsuertei // 1991, Unknown
+bsuertej // 1991, Unknown
+bsuertek // 1991, Unknown
+bsuertel // 1991, Unknown
+bsuertem // 1991, Unknown
+bsuerten // 1991, Unknown
+bsuerteo // 1991, Unknown
+bsuertep // 1991, Unknown
+bsuerteq // 1991, Unknown
+bsuerter // 1991, Unknown
+bsuertes // 1991, Unknown
+bsuertet // 1991, Unknown
+bsuerteu // 1991, Unknown
+caspoker // 1987, PM / Beck Elektronik.
+falcnwld // 1991, TVG
+falcnwlda // (c) 1990, Video Klein
+falcnwldb // (c) 1990, Video Klein
+falcnwldc // (c) 1983, Falcon
+genie // (c) 198? Video Fun Games Ltd.
+geniea // 198?, Unknown
+goldnpkb // (c) 1981 Bonanza
+goldnpkr // (c) 1981 Bonanza
+goodluck // Unknown
+maverik // 198?, Unknown
+ngold // 198? Unknown
+ngolda // 198? Unknown
+ngoldb // 198? Unknown
+pmpoker // (c) 1981 PlayMan
+poker91 // 1991, Unknown
+pokerdub // 198?, Unknown
+pokerduc // 198?, Unknown
+pokermon // 1987, Unknown
+pokersis // 198?, Sisteme France.
+potnpkra // Bootleg in Coinmaster H/W
+potnpkrb // Bootleg
+potnpkrc // Bootleg
+potnpkrd // Bootleg
+potnpkre // Bootleg
+potnpkrf // Bootleg
+potnpkrg // Bootleg
+potnpkrh // Bootleg
+pottnpkr // Bootleg
+royale // Unknown
+royalea // Unknown
+silverga // 1983, Unknown
+sloco93 // 1993, Unknown
+sloco93a // 1993, Unknown
+super98 // 199?, Unknown
+superdbl // 198? Karateco
+videtrna // Unknown
+videtron // Unknown
+videtron2 // Unknown
+witchcda // 1991, Unknown
+witchcdb // 1991, Unknown
+witchcdc // 1991, Unknown
+witchcdd // (c) 1994, TV Game Elektronik - Proma
+witchcde // (c) 1991, Video Klein
+witchcdf // (c) 1991, PlayMan
+witchcdg // (c) 199?, Falcon
+witchcdh // (c) 1994, TV Game Elektronik - Proma
+witchcdi // (c) 1994, TV Game Elektronik - Proma
+witchcdk // (c) 1991, Video Klein
+witchcrd // (c) 1991, Video Klein
+witchgme // (c) 1991 Video Klein
+witchjol // 1994, Unknown
+wldwitch // (c) 1992-2001, Video Klein
+wldwitcha // (c) 1992-2001, Video Klein
+wldwitchb // (c) 1992-2001, Video Klein
+wldwitchc // (c) 1992-2001, Video Klein
+wldwitchd // (c) 1992-2001, Video Klein
+wldwitche // (c) 1992-2001, Video Klein
+wldwitchf // (c) 1992-2001, Video Klein
+wldwitchg // (c) 1992-2001, Video Klein
+wldwitchh // (c) 1992-2001, Video Klein
+wldwitchi // (c) 1992-2001, Video Klein
+wldwitchj // (c) 1992-2001, Video Klein
+wldwitchk // (c) 1992-2001, Video Klein
+wldwitchl // (c) 1992-2001, Video Klein
+wldwitchm // (c) 1992-2001, Video Klein
+wldwitchn // (c) 1992-2001, Video Klein
+wldwitcho // (c) 1992-2001, Video Klein
+wldwitchp // (c) 1992-2001, Video Klein
+wldwitchq // (c) 1992-2001, Video Klein
+wldwitchr // (c) 1992-2001, Video Klein
+wldwitchs // (c) 1992-2001, Video Klein
+wldwitcht // (c) 1992-2001, Video Klein
+wldwitchu // (c) 1992-2001, Video Klein
+wldwitchv // (c) 1992-2001, Video Klein
+wstrike // (c) 1992, Video Klein
+wstrikea // (c) 1992, Video Klein
+wtchjack // (c) 1996, Video Klein
+wtchjacka // (c) 1996, Video Klein
+wtchjackb // (c) 1996, Video Klein
+wtchjackc // (c) 1996, Video Klein
+wtchjackd // (c) 1996, Video Klein
+wtchjacke // (c) 1995, Video Klein
+wtchjackf // (c) 1995, Video Klein
+wtchjackg // (c) 1995, Video Klein
+wtchjackh // (c) 1995, Video Klein
+wtchjacki // (c) 1995, Video Klein
+wtchjackj // (c) 1994, Video Klein
+wupndown // (c) 1998, Video Klein
+wupndowna // (c) 1998, Video Klein
+wupndownb // (c) 1998, Video Klein
+wupndownc // (c) 1998, Video Klein
+wupndownd // (c) 1998, Video Klein
+
+//@source:goldstar.cpp
+bingowng // (c) 1993 Wing Co. Ltd
+bingownga // (c) 1993 Wing Co. Ltd
+bonusch // (c) 1990 Wing Co. Ltd
+carb2002 // bootleg
+carb2003 // bootleg
+cb3 // (c) 199? Dyna Electronics
+cb3a // (c) 199? Dyna Electronics
+cb3b // (c) 199? Dyna Electronics
+cb3c // (c) 199? Dyna Electronics
+cb3d // (c) 199? Dyna Electronics
+cb3e // 199? bootleg
+cherry96 // bootleg
+chry10 // bootleg
+chryangl // (c) 199? Dyna Electronics
+chryangla // unknown, W-4 hardware
+chrygld // bootleg
+chryglda // bootleg
+cmast91 // (c) 1991 Dyna Electronics
+cmast92 // (c) 1992 Dyna Electronics
+cmast97 // (c) 1996 Dyna Electronics
+cmast99 // 1999?
+cmaster // (c) 1991 Dyna Electronics
+cmasterb // (c) 1991 Dyna Electronics
+cmasterbv // (c) 1991 Dyna Electronics / Gerald Duhamel?
+cmasterc // (c) 1991 Dyna Electronics
+cmasterd // (c) 1991 Dyna Electronics
+cmastere // (c) 1991 Dyna Electronics
+cmasterf // (c) 1991 Dyna Electronics
+cmasterg // (c) 1991 Dyna Electronics
+cmasterh // (c) 1991 Dyna Electronics
+cmezspin // (c) 1991 Dyna Electronics
+cmfun // (c) 1995 Dyna Electronics
+cmpacman //
+cmtetris //
+cmtetrsa //
+cmtetrsb //
+cmv4 // (c) 1992 Dyna Electronics
+cmv4a // (c) 1992 Dyna Electronics
+cmv801 // (c) 198? Corsica
+cmwm // (c) 199? Dyna Electronics
+crazybon // (c) 199? Sang Ho
+fb2010 // (c) 2009 Amcoe
+goldfrui // bootleg
+goldstar // (c) 198? IGS
+goldstbl // (c) 198? IGS
+jkrmast // (c) 199? unknown
+kkotnoli // 198? south korean hack
+ladylinr // (c) 198? TAB Austria
+lucky8 // (c) 1989 Wing Co. Ltd
+lucky8a // (c) 1989 Wing Co. Ltd
+lucky8b // (c) 1989 Wing Co. Ltd
+lucky8c // (c) 1989 Wing Co. Ltd
+lucky8d // (c) 1989 Wing Co. Ltd
+lucky8e // (c) 1989 Wing Co. Ltd
+luckybar // unknown
+luckylad // (c) 1985 Wing Co. Ltd
+magodds // 198? (c) Micro Manufacturing Ltd.
+magoddsa // 198? (c) Micro Manufacturing Ltd.
+magoddsb // 198? (c) Micro Manufacturing Ltd.
+magoddsc // 198? (c) Micro Manufacturing Ltd.
+magoddsd // 198? (c) Micro Manufacturing Ltd.
+match98 // (c) 1998 Amcoe
+megaline // (c) 1991 Fun World.
+moonlght // bootleg
+moonlghta // bootleg
+moonlghtb // bootleg
+moonlghtc // bootleg
+nc96 // (c) 1996 Amcoe
+nc96a // (c) 1996 Amcoe
+nc96b // (c) 1996 Amcoe
+nc96c // (c) 1996 Amcoe
+nc96d // (c) 1996 Amcoe
+nc96e // (c) 1996 Amcoe
+nc96f // (c) 1996 Amcoe
+nc96txt // (c) 2000 Amcoe
+ncb3 // (c) 199? Dyna Electronics
+nfb96 // (c) 1996 Amcoe
+nfb96a // (c) 1996 Amcoe
+nfb96b // (c) 1996 Amcoe
+nfb96c // (c) 1996 Amcoe
+nfb96se // bootleg
+nfb96sea // bootleg
+nfb96seb // bootleg
+nfb96txt // (c) 2000 Amcoe
+nfm // bootleg
+ns8lines // unknown
+ns8linew // unknown
+pkrmast // (c) 199? unknown
+pkrmasta // (c) 199? unknown
+pokonl97 // (c) 1997 Amcoe
+roypok96 // (c) 1996 Amcoe
+roypok96a // (c) 1996 Amcoe
+roypok96b // (c) 1996 Amcoe
+roypok96c // (c) 1996 Amcoe
+schery97 // (c) 1998 Amcoe
+schery97a // (c) 1998 Amcoe
+scmaster // 1994, unknown
+skill98 // (c) 1998 Amcoe
+star100 // (c) 199? Sang Ho
+super9 // (c) 2001 Playmark
+tonypok // (c) 1991 Corsica
+unkch1 // bootleg
+unkch2 // bootleg
+unkch3 // bootleg
+unkch4 // bootleg
+wcat3 //
+wcherry // bootleg
+
+//@source:gomoku.cpp
+gomoku // (c) 1981
+
+//@source:good.cpp
+good // (c) 1998
+
+//@source:goodejan.cpp
+goodejan // (c) 1991 Seibu/Tecmo
+goodejana // (c) 1991 Seibu/Tecmo
+totmejan // (c) 1991 Seibu/Tecmo
+
+//@source:gotcha.cpp
+gotcha // (c) 1997 Dongsung + "presented by Para"
+ppchamp // (c) 1997 Dongsung + "presented by Para"
+
+//@source:gottlieb.cpp
+3stooges // GV-113 (c) 1984 Mylstar
+3stoogesa // GV-113 (c) 1984 Mylstar
+argusg // GV-??? (c) 1982 Gottlieb - never released
+cobram3 // ...... (c) 1984 Data East
+curvebal // GV-134 (c) 1984 Mylstar
+insector // GV-??? (c) 1982 Gottlieb - never released
+kngtmare // GV-??? (c) 1983 Gottlieb - never released
+krull // GV-105 (c) 1983 Gottlieb
+mach3 // GV-109 (c) 1983 Mylstar
+mplanets // GV-102 (c) 1983 Gottlieb
+mplanetsuk // GV-102 (c) 1983 Gottlieb
+myqbert // GV-103?(c) 1982 Gottlieb
+qbert // GV-103 (c) 1982 Gottlieb
+qberta // GV-103 (c) 1982 Gottlieb
+qbertj // GV-103 (c) 1982 Gottlieb + Konami license
+qbertqub // GV-119 (c) 1983 Mylstar
+qberttst // GV-103 (c) 1982 Gottlieb
+qbtrktst // GV-103 (c) 1982 Gottlieb
+reactor // GV-100 (c) 1982 Gottlieb
+screwloo // GV-123 (c) 1983 Mylstar - never released
+sqbert // GV-??? (c) 1983 Mylstar - never released
+tylz // GV-??? (c) 1982 Gottlieb - never released
+usvsthem // GV-??? (c) 198? Mylstar
+vidvince // GV-??? (c) 1984 Mylstar - never released
+wizwarz // GV-??? (c) 1984 Mylstar - never released
+
+//@source:gotya.cpp
+gotya // (c) 1981 Game-A-Tron
+thehand // (c) 1981 T.I.C.
+
+//@source:goupil.cpp
+goupilg1 //
+
+//@source:gp_1.cpp
+blvelvet //
+camlight //
+chucklck //
+famlyfun //
+foxylady //
+gp_110 //
+real //
+rio //
+startrip //
+vegasgp //
+
+//@source:gp_2.cpp
+agent777 //
+andromep //
+andromepa //
+attila //
+coneyis //
+cpthook //
+cyclopes //
+gwarfare //
+ladyshot //
+ladyshota //
+lizard //
+mbossy //
+sshootep //
+sshootr2 //
+suprnova //
+
+//@source:gp2x.cpp
+gp2x // GP2X 2005
+
+//@source:gp32.cpp
+gp32 // GP32 2001
+
+//@source:gpworld.cpp
+gpworld // (c) 1984
+
+//@source:gradius3.cpp
+gradius3 // GX945 (c) 1989 (World)
+gradius3a // GX945 (c) 1989 (Asia)
+gradius3j // GX945 (c) 1989 (Japan)
+gradius3js // GX945 (c) 1989 (Japan, split)
+
+//@source:grchamp.cpp
+grchamp // GM (c) 1981 Taito Corporation
+
+//@source:grfd2301.cpp
+grfd2301 //
+
+//@source:gridlee.cpp
+gridlee // [1983 Videa] prototype - no copyright notice
+
+//@source:groundfx.cpp
+groundfx // D51 (c) 1992 Taito Corporation
+
+//@source:gstream.cpp
+gstream // (c) 2002, Oriental Soft Japan
+x2222 // (c) 2000, Oriental Soft
+x2222o // (c) 2000, Oriental Soft
+
+//@source:gstriker.cpp
+gstriker // (c) [1993] Human
+gstrikera // (c) [1993] Human
+gstrikerj // (c) [1993] Human
+twrldc94 // (c) 1994 Tecmo
+twrldc94a // (c) 1994 Tecmo
+vgoalsca // (c) 199? Temco
+vgoalsoc // (c) 199? Temco
+
+//@source:gsword.cpp
+gsword // AC (c) 1984 Taito Corporation
+gsword2 // AC (c) 1984 Taito Corporation
+josvolly // AA (c) 1983 Taito Corporation
+
+//@source:gticlub.cpp
+gticlub // GX688 (c)1996 Euro EAA
+gticluba // GX688 (c)1996 Asia AAA
+gticlubj // GX688 (c)1996 Japan JAA
+gticlubu // GX688 (c)1996 USA UAA
+hangplt // GX685 (c)1997 Japan JAB
+hangpltu // GX685 (c)1997 USA UAA
+slrasslt // GX792 (c)1996 USA UAA
+thunderh // GX680 (c)1996 Euro EAA
+thunderhu // GX680 (c)1996 USA UAA
+
+//@source:gts1.cpp
+astannie //
+buckrgrs //
+charlies //
+cleoptra //
+closeenc //
+countdwn //
+dragon //
+geniep //
+gts1 //
+gts1s //
+hexagone //
+hulk //
+jokrpokr //
+pinpool //
+roldisco //
+sinbad //
+sinbadn //
+solaride //
+sys1test //
+torch //
+totem //
+
+//@source:gts3.cpp
+bellring //
+cactjack //
+carhop //
+ccruise //
+clas1812 //
+deadweap //
+hoops //
+lca //
+lca2 //
+nudgeit //
+opthund //
+silvslug //
+surfnsaf //
+tfight //
+tt_game //
+vegas //
+
+//@source:gts3a.cpp
+andretti //
+andretti4 //
+barbwire //
+bighurt //
+brooks //
+cueball //
+freddy //
+freddy4 //
+gladiatp //
+rescu911 //
+sfight2 //
+sfight2a //
+sfight2b //
+shaqattq //
+shaqattq2 //
+smb //
+smb1 //
+smb2 //
+smb3 //
+smbmush //
+snspares //
+snspares1 //
+stargatp //
+stargatp1 //
+stargatp2 //
+stargatp3 //
+stargatp4 //
+teedoffp //
+teedoffp1 //
+teedoffp3 //
+waterwld //
+waterwld2 //
+wcsoccer //
+wcsoccerd2 //
+wipeout //
+
+//@source:gts80.cpp
+blckhole //
+blckhole2 //
+blckhols //
+circusp //
+cntforce //
+eclipse //
+forceii //
+hh //
+hh_1 //
+jamesb //
+jamesb2 //
+marsp //
+panthera //
+pnkpnthr //
+s80tst //
+spidermn //
+starrace //
+timeline //
+vlcno_1a //
+vlcno_1b //
+vlcno_ax //
+
+//@source:gts80a.cpp
+alienstr //
+amazonh //
+caveman //
+cavemana //
+dvlsdre //
+dvlsdre2 //
+eldorado //
+goinnuts //
+icefever //
+jack2opn //
+krullp //
+punk //
+qbquest //
+rackempp //
+raimfire //
+rflshdlx //
+rocky //
+sorbit //
+spirit //
+striker //
+thegames //
+touchdn //
+
+//@source:gts80b.cpp
+arena //
+badgirls //
+bighouse //
+bonebstr //
+bonebstrf //
+bountyh //
+diamondp //
+excalibr //
+genesisp //
+goldwing //
+hlywoodh //
+hotshots //
+mntecrlo //
+nmoves //
+raven //
+robowars //
+rock //
+rock_enc //
+sprbreak //
+sprbreaks //
+tagteamp //
+tagteamp2 //
+triplay //
+txsector //
+victoryp //
+
+//@source:guab.cpp
+crisscrs // (c) 1986
+guab // (c) 1986
+tenup // (c) 1988
+
+//@source:gumbo.cpp
+dblpoint // (c) 1995 Min Corp.
+dblpointd // (c) 1995 Dong Bang Electron
+gumbo // (c) 1994 Min Corp.
+msbingo // (C) 1994 Min Corp.
+mspuzzle // (c) 1994 Min Corp.
+mspuzzleg // (c) 1994 Min Corp.
+mspuzzlen // (c) 1994 Min Corp.
+
+//@source:gunbustr.cpp
+gunbustr // D27 (c) 1992 Taito Corporation Japan (World)
+gunbustrj // D27 (c) 1992 Taito Corporation (Japan)
+gunbustru // D27 (c) 1992 Taito America Corporation (US)
+
+//@source:gundealr.cpp
+gundealr // (c) 1990 Dooyong
+gundealra // (c) 1990 Dooyong
+gundealrbl // bootleg
+gundealrt // (c) 1990 Tecmo
+wiseguy // (c) 1990 Dooyong
+yamyam // (c) 1990 Dooyong
+yamyamk // (c) 1990 Dooyong
+
+//@source:gunpey.cpp
+gunpey // (c) 2000 Banpresto
+
+//@source:gunsmoke.cpp
+gunsmoke // 11/1985 (c) 1985 (World)
+gunsmokeb //
+gunsmokej // 11/1985 (c) 1985 (Japan)
+gunsmokeu // 11/1985 (c) 1985 + Romstar (US)
+gunsmokeua // 11/1985 (c) 1985 (US)
+gunsmokeub // 11/1985 (c) 1985 (US)
+
+//@source:gyruss.cpp
+gyruss // GX347 (c) 1983
+gyrussb // bootleg or actual Taito NZ license?
+gyrussce // GX347 (c) 1983 + Centuri license
+venus // bootleg
+
+//@source:h19.cpp
+h19 //
+
+//@source:h8.cpp
+h8 //
+
+//@source:h89.cpp
+h89 //
+
+//@source:halleys.cpp
+benberob // A26
+halley87 // A62 (c) 1986 Taito Corporation (Japan)
+halleycj // A62 (c) 1986 Taito Corporation (Japan)
+halleys // A62 (c) 1986 Taito America Corporation + Coin It (US)
+halleysc // A62 (c) 1986 Taito Corporation (Japan)
+
+//@source:hanaawas.cpp
+hanaawas // (c) SetaKikaku
+
+//@source:hankin.cpp
+empsback //
+fjholden //
+howzat //
+orbit1 //
+shark //
+
+//@source:harddriv.cpp
+harddriv // 136052 (c) 1988
+harddriv1 // 136052 (c) 1988
+harddriv2 // 136052 (c) 1988
+harddriv3 // 136052 (c) 1988
+harddrivb // 136052 (c) 1988
+harddrivb5 // 136052 (c) 1988
+harddrivb6 // 136052 (c) 1988
+harddrivc // 136068 (c) 1990
+harddrivc1 // 136068 (c) 1990
+harddrivcb // 136068 (c) 1990
+harddrivcg // 136068 (c) 1990
+harddrivg // 136052 (c) 1988
+harddrivg4 // 136052 (c) 1988
+harddrivj // 136052 (c) 1988
+harddrivj6 // 136052 (c) 1988
+hdrivair // 136098 (proto)
+hdrivairp // 136098 (proto)
+racedriv // 136077 (c) 1990
+racedriv1 // 136077 (c) 1990
+racedriv2 // 136077 (c) 1990
+racedriv3 // 136077 (c) 1990
+racedriv4 // 136077 (c) 1990
+racedrivb // 136077 (c) 1990
+racedrivb1 // 136077 (c) 1990
+racedrivb4 // 136077 (c) 1990
+racedrivc // 136077 (c) 1990
+racedrivc1 // 136077 (c) 1990
+racedrivc2 // 136077 (c) 1990
+racedrivc4 // 136077 (c) 1990
+racedrivcb // 136077 (c) 1990
+racedrivcb4 // 136077 (c) 1990
+racedrivcg // 136077 (c) 1990
+racedrivcg4 // 136077 (c) 1990
+racedrivg // 136077 (c) 1990
+racedrivg1 // 136077 (c) 1990
+racedrivg4 // 136077 (c) 1990
+racedrivpan // 136077 (c) 1990
+steeltal // 136087 (c) 1990
+steeltal1 // 136087 (c) 1990
+steeltalg // 136087 (c) 1990
+steeltalp // 136087 (c) 1990
+strtdriv // 136091 (proto)
+stunrun // 136070 (c) 1989
+stunrun0 // 136070 (c) 1989
+stunrun2 // 136070 (c) 1989
+stunrun2e // 136070 (c) 1989
+stunrun3 // 136070 (c) 1989
+stunrun3e // 136070 (c) 1989
+stunrun4 // 136070 (c) 1989
+stunrun5 // 136070 (c) 1989
+stunrune // 136070 (c) 1989
+stunrunj // 136070 (c) 1989
+stunrunp // (proto) (c) 1989
+
+//@source:harriet.cpp
+harriet // 1990
+
+//@source:hazelgr.cpp
+hg_frd // Fruit Deuce
+
+//@source:hcastle.cpp
+akumajou // GX768 (c) 1988 (Japan)
+akumajoun // GX768 (c) 1988 (Japan)
+hcastle // GX768 (c) 1988
+hcastlee // GX768 (c) 1988
+hcastlek // GX768 (c) 1988
+
+//@source:headonb.cpp
+headonb // bootleg, headonb.cpp
+
+//@source:hec2hrp.cpp
+hec2hr //
+hec2hrp //
+hec2hrx //
+hec2mdhrx //
+hec2mx40 //
+hec2mx80 //
+victor //
+
+//@source:hexion.cpp
+hexion // GX122 (c) 1992
+hexionb // bootleg
+
+//@source:hh_cop400.cpp
+ctstein // Castle Toy
+einvaderc // Entex
+funjacks // Mattel
+funrlgl // Mattel
+h2hbaskb // Coleco
+lightfgt // Milton Bradley
+plus1 // Milton Bradley
+
+//@source:hh_hmcs40.cpp
+alnattck // Coleco
+bambball // Bambino
+bbtime // Bandai
+bdoramon // Bandai
+bfriskyt // Bandai
+bmboxing // Bambino
+bpengo // Bandai
+bultrman // Bandai
+bzaxxon // Bandai
+cdkong // Coleco
+cgalaxn // Coleco
+cmspacmn // Coleco
+cpacman // Coleco
+cpacmanr1 // Coleco (rev 1)
+egalaxn2 // Entex
+epacman2 // Entex
+estargte // Entex
+eturtles // Entex
+gckong // Gakken
+gdigdug // Gakken
+ghalien // Gakken
+kingman // Tomy
+machiman // Bandai
+msthawk // Bandai/Mattel
+mwcbaseb // Mattel
+packmon // Bandai
+pairmtch // Bandai
+pbqbert // Parker Brothers
+tmtron // Tomy
+vinvader // VTech
+zackman // Bandai
+
+//@source:hh_melps4.cpp
+cfrogger // Coleco
+gjungler // Gakken
+
+//@source:hh_pic16.cpp
+maniac // Ideal
+
+//@source:hh_sm510.cpp
+gnwmndon // Nintendo
+ktmnt // Konami
+ktopgun // Konami
+
+//@source:hh_tms1k.cpp
+amaztron // Coleco
+astro // Kosmos
+bankshot // Parker Bros
+bigtrak // Milton Bradley
+cnfball2 // Conic
+cnsector // Parker Bros
+comp4 // Milton Bradley
+cqback // Coleco
+ebaskb2 // Entex
+ebball // Entex
+ebball2 // Entex
+ebball3 // Entex
+efootb4 // Entex
+einvader // Entex
+elecdet // Ideal
+gjackpot // Gakken
+gpoker // Gakken
+h2hbaseb // Coleco
+h2hfootb // Coleco
+lostreas // Parker Bros
+mathmagi // APF
+mdndclab // Mattel
+merlin // Parker Bros
+mmerlin // Parker Bros
+phpball // Tomy
+raisedvl // Entex
+simon // Milton Bradley
+splitsec // Parker Bros
+ssimon // Milton Bradley
+starwbc // Kenner
+starwbcp // Kenner (patent)
+stopthie // Parker Bros
+stopthiep // Parker Bros (patent)
+tandy12 // Tandy Radio Shack
+tbreakup // Tomy
+tc4 // Coleco
+zodiac // Coleco
+
+//@source:hh_ucom4.cpp
+alnchase // Tomy
+astrocmd // Epoch
+bcclimbr // Bandai
+bmsafari // Bambino
+bmsoccer // Bambino
+edracula // Epoch
+efball // Epoch
+galaxy2 // Epoch
+invspace // Epoch
+mcompgin // Mattel
+mvbfree // Mego
+splasfgt // Bambino
+ssfball // Bambino
+tactix // Castle Toy
+tcaveman // Tomy
+tccombat // Tomy
+tmpacman // Tomy
+tmscramb // Tomy
+tmtennis // Tomy
+ufombs // Bambino
+
+//@source:hideseek.cpp
+hideseek //
+
+//@source:higemaru.cpp
+higemaru // 9/1984 (c) 1984
+
+//@source:highvdeo.cpp
+brasil // (c) 2000 unknown
+cfever1k // (c) 2000 High Video
+cfever40 // (c) 2000 High Video
+cfever50 // (c) 2000 High Video
+cfever51 // (c) 2000 High Video
+cfever61 // (c) 2000 High Video
+ciclone // (c) 2000 unknown
+fashion // (c) 2000 unknown
+galeone //
+girotutt // (c) 2000 High Video
+grancapi // (c) 2000 High Video
+magicbom // (c) 2000 High Video
+newmcard // (c) 19?? unknown
+nyjoker //
+record // (c) 2000 High Video
+tour4000 // (c) 2000 High Video
+tour4010 // (c) 2000 High Video
+
+//@source:hikaru.cpp
+airtrix // 2001.02 Air Trix
+braveff // 1999.06 Syouboushi Brave Fire Fighters
+hikaru // 2000.?? Hikaru BIOS
+pharrier // 2000.12 Planet Harriers
+podrace // 2000.06 Star Wars: Racer Arcade
+sgnascar // 2000.09 Nascar Arcade
+
+//@source:himesiki.cpp
+himesiki // (c) 1989 Hi-Soft
+
+//@source:hitme.cpp
+barricad // (c) 1976 Ramtek
+brickyrd // (c) 1976 Ramtek
+hitme // (c) 05/1976 Ramtek
+hitme1 // (c) 05/1976 Ramtek
+m21 // (c) 08/1976 Mirco
+super21 // (c) 1978 Mirco
+
+//@source:hitpoker.cpp
+hitpoker // (c) 1997
+
+//@source:hk68v10.cpp
+hk68v10 //
+
+//@source:hnayayoi.cpp
+hnayayoi // "02" (c) 1987 Dyna Electronics
+hnfubuki // "06" (c) 1987 Dynax
+untoucha // "08" (c) 1987 Dynax
+
+//@source:hng64.cpp
+bbust2 // 004 1998/09/11 Beast Busters: Second Nightmare
+buriki // 007 1999/05/21 Buriki One
+fatfurwa // 006 1999/01/28 Fatal Fury: Wild Ambition / Garou Densetsu: Wild Ambition
+hng64 //
+roadedge // 001 1997/09/10 Roads Edge / Round Trip RV
+sams64 // 002 1997/12/19 Samurai Shodown 64 / Samurai Spirits 64
+sams64_2 // 005 1998/10/16 Samurai Shodown: Warrior's Rage / Samurai Spirits: Asura Zanmaden
+xrally // 003 1998/05/13 Xtreme Rally / Off Beat Racer!
+
+//@source:holeland.cpp
+crzrally // (c) 1985
+crzrallya // (c) 1985
+crzrallyg // (c) 1985
+holeland // (c) 1984
+
+//@source:homedata.cpp
+battlcry // (c) 1991 Home Data
+hourouki // (c) 1987 Home Data
+jogakuen // (c) 1992 Windom corporation
+lemnangl // (c) 1990 Home Data
+mhgaiden // (c) 1987 Home Data
+mirderby // (c) 1988 Home Data?
+mjclinic // (c) 1988 Home Data
+mjhokite // (c) 1988 Home Data
+mjikaga // (c) 1991 Mitchell
+mjkinjas // (c) 1991 Home Data
+mjkojink // (c) 1989 Home Data
+mjprivat // (c) 1991 Matoba
+mjyougo // (c) 1989 Home Data
+mrokumei // (c) 1988 Home Data
+reikaids // (c) 1988 Home Data
+vitaminc // (c) 1989 Home Data
+
+//@source:homelab.cpp
+brailab4 //
+braiplus //
+homelab2 //
+homelab3 //
+homelab4 //
+
+//@source:homerun.cpp
+dynashot // (c) 1988 Jaleco
+ganjaja // (c) 1990 Jaleco
+homerun // (c) 1988 Jaleco
+
+//@source:homez80.cpp
+homez80 //
+
+//@source:horizon.cpp
+nshrz //
+vector1 //
+
+//@source:hornet.cpp
+gradius4 // GX837 (c)1999
+nbapbp // GX778 (c)1998
+sscope // GX830 (c)1999
+sscope2 // GX931 (c)2000
+sscopea // GX830 (c)1999
+sscopeb // GX830 (c)1999
+sscopec // GX830 (c)1999
+terabrst // GX715 (c)1998 USA UEL 1998/07/17
+terabrsta // GX715 (c)1998 Asia AAA 1998/02/25
+
+//@source:hotblock.cpp
+hotblock // (c) 1993 Nics? / Nix?
+
+//@source:hotstuff.cpp
+hotstuff //
+
+//@source:hp_ipc.cpp
+hp_ipc //
+
+//@source:hp16500.cpp
+hp16500b //
+hp1650b //
+hp1651b //
+hp165ka0 //
+
+//@source:hp48.cpp
+hp38g //
+hp39g //
+hp48g // HP 48G
+hp48gp // HP 48G+
+hp48gx // HP 48GX
+hp48s // HP 48S
+hp48sx // HP 48SX
+hp49g //
+
+//@source:hp49gp.cpp
+hp49gp // HP 49G+
+
+//@source:hp64k.cpp
+hp64k //
+
+//@source:hp9845.cpp
+hp9835a //
+hp9835b //
+hp9845a //
+hp9845b //
+hp9845c //
+hp9845s //
+hp9845t //
+
+//@source:hp9k.cpp
+hp9816 //
+
+//@source:hp9k_3xx.cpp
+hp9k310 //
+hp9k320 //
+hp9k330 //
+hp9k340 //
+hp9k370 //
+hp9k380 //
+hp9k382 //
+
+//@source:hprot1.cpp
+hprot1 //
+hprot2r6 //
+hprotr8a //
+
+//@source:hpz80unk.cpp
+hpz80unk //
+
+//@source:hshavoc.cpp
+hshavoc // (c) 1993 Data East
+
+//@source:ht68k.cpp
+ht68k //
+
+//@source:huebler.cpp
+amu880 //
+
+//@source:hunter2.cpp
+hunter2 //
+
+//@source:hvyunit.cpp
+hvyunit // (c) 1988 Kaneko
+hvyunitj // (c) 1988 Kaneko
+hvyunitjo // (c) 1988 Kaneko
+hvyunitu // (c) 1988 Kaneko
+
+//@source:hx20.cpp
+ehx20 //
+ehx20e //
+
+//@source:hyhoo.cpp
+hyhoo // (c) 1987
+hyhoo2 // (c) 1987
+
+//@source:hyperscan.cpp
+hs //
+
+//@source:hyperspt.cpp
+hpolym84 // GX330 (c) 1984
+hyperspt // GX330 (c) 1984 + Centuri
+hypersptb // bootleg
+roadf // GX461 (c) 1984
+roadf2 // GX461 (c) 1984
+
+//@source:hyprduel.cpp
+hyprduel // (c) 1993 Technosoft (Japan)
+hyprduel2 // (c) 1993 Technosoft (Japan)
+magerror // (c) 1994 Technosoft (Japan) (Arcade TV Game List - P.100, Left, 13 from Bottom)
+
+//@source:i7000.cpp
+i7000 //
+
+//@source:ibm6580.cpp
+ibm6580 //
+
+//@source:ibmpc.cpp
+ibm5140 // 1985 IBM 5140
+ibm5150 // 1981 IBM 5150
+ibm5155 // 1982 IBM 5155
+ibm5160 // 1982 IBM XT 5160
+
+//@source:ibmpcjr.cpp
+ibmpcjr // 1984 IBM PC Jr
+ibmpcjx // 1985 IBM PC JX
+
+//@source:icatel.cpp
+icatel //
+
+//@source:ice_bozopail.cpp
+ice_bozo // ICE - Bozo Pail Toss
+
+//@source:ice_tbd.cpp
+ice_tbd // ICE - Turbo Drive
+
+//@source:icecold.cpp
+icecold //
+zekepeak //
+
+//@source:ichiban.cpp
+ichiban // (c) 199? Excel
+
+//@source:ie15.cpp
+ie15 //
+
+//@source:if800.cpp
+if800 //
+
+//@source:igs_fear.cpp
+fearless // (c) 2006
+
+//@source:igs_m027.cpp
+amazoni2 // (c) 2002
+amazonia // (c) 1999
+chessc2 // (c) 200?
+fruitpar // (c) 200?
+gonefsh2 // (c) 200?
+haunthig // (c) 200?
+klxyj // (c) 200?
+lhzb3 // (c) 200?
+lhzb4 // (c) 200?
+mgfx // (c) 200?
+sddz // (c) 200?
+sdwx // (c) 2002
+slqz3 // (c) 1999
+zhongguo // (c) 2000
+
+//@source:igs_m036.cpp
+cjddzsp // (c) 200?
+cjdh2 // (c) 200?
+cjdh2a // (c) 200?
+cjdh2b // (c) 200?
+cjdh2c // (c) 200?
+igsm312 // (c) 200?
+
+//@source:igs009.cpp
+gp98 // (c) 1998
+jingbell // (c) 1997
+jingbella // (c) 1997
+jingbellb // (c) 1997
+jingbellc // (c) 1995
+jingbelli // (c) 1995?
+
+//@source:igs011.cpp
+dbc // (c) 199?
+drgnwrld // (c) 1997
+drgnwrldv10c // (c) 1995
+drgnwrldv11h // (c) 1995
+drgnwrldv20j // (c) 1995
+drgnwrldv21 // (c) 1995
+drgnwrldv21j // (c) 1995
+drgnwrldv30 // (c) 1995
+drgnwrldv40k //
+lhb // (c) 1995
+lhb2 // (c) 1996
+lhbv33c // (c) 1995
+nkishusp // (c) 1998
+ryukobou // (c) 1995
+vbowl // (c) 1996
+vbowlj // (c) 1996
+wlcc // (c) 1996
+xymg // (c) 1996
+
+//@source:igs017.cpp
+iqblocka // (c) 1996
+iqblockf // (c) 1996
+lhzb2 // (c) 1998
+lhzb2a // (c) 1998
+mgcs // (c) 1998
+mgdh // (c) 1997
+mgdha // (c) 1997
+sdmg2 // (c) 1997
+slqz2 // (c) 1998
+spkrform // (c) ????
+starzan // (c) 2000?
+tarzan // (c) 1999?
+tarzana // (c) 1999?
+tjsb // (c) 1997
+
+//@source:igspc.cpp
+eztouch // (c) 200?
+speeddrv // (c) 2004
+
+//@source:igspoker.cpp
+chleague // (c) 199? IGS
+chleagul // (c) 199? IGS
+citalcup // (c) SGS (bootleg of IGS v220it)
+cpoker // (c) 1993? IGS
+cpokerpk // (c) SGS (bootleg blue board)
+cpokerpkg // (c) SGS (bootleg green board)
+cpokert // (c) 1993? Tuning
+cpokerx // (c) 1993 IGS
+csk227it // (c) 198? IGS
+csk234it // (c) 198? IGS
+igs_ncs // (c) 198? IGS
+igs_ncs2 // (c) 2000 IGS
+kungfu // (c) 1992 IGS
+number10 // (c) IGS (Board labeled Playmark Srl)
+numbr10l // (c) IGS (Board labeled Playmark Srl)
+pktet346 // (c) 199? IGS
+stellecu // (c) 1998
+
+//@source:ikki.cpp
+farmer // TVG17 (c) 1985 Sun Electronics
+ikki // TVG17 (c) 1985 Sun Electronics (Japan)
+
+//@source:imds.cpp
+imds // intel
+
+//@source:imds2.cpp
+imds2 // Intellec MDS series-II
+
+//@source:imolagp.cpp
+imolagp // (c) 198? RB Bologna
+imolagpo // (c) 198? RB Bologna
+
+//@source:imsai.cpp
+imsai //
+
+//@source:inder.cpp
+atleta //
+brvteam //
+canasta //
+corsario //
+ind250cc //
+lapbylap //
+metalman //
+mundial //
+pinclown //
+pinmoonl //
+
+//@source:indiana.cpp
+indiana //
+
+//@source:indigo.cpp
+indigo3k // IP12: Indigo 1, R3000, 33MHz
+indigo4k // IP20: Indigo 1, R4400, 150MHz
+
+//@source:indy_indigo2.cpp
+ip224613 // IP22: Indy, R4600, 133MHz
+ip225015 // IP22: Indy, R5000, 150MHz
+ip244415 // IP24: Indigo 2, R4400, 150MHz
+
+//@source:instruct.cpp
+instruct //
+
+//@source:interact.cpp
+hector1 //
+interact //
+
+//@source:intrscti.cpp
+intrscti // ????
+
+//@source:intv.cpp
+intv // Mattel Intellivision - 1979 AKA INTV
+intv2 // Mattel Intellivision II- 1982?
+intvecs // 1983 - Mattel Intellivision w/ECS and IntelliVoice expansions
+intvkbd // 1981 - Mattel Intellivision Keyboard Component
+intvoice // Mattel Intellivision + IntelliVoice expansion - 1982
+intvsrs // Intellivision (Sears License) - 19??
+
+//@source:inufuku.cpp
+3on3dunk // (c) 1996 Video System Co. (Japan)
+inufuku // (c) 1998 Video System Co. (Japan)
+
+//@source:invqix.cpp
+invqix // F34 (c) 2003 Taito Corporation
+
+//@source:ipc.cpp
+ipb // intel
+ipc // intel
+
+//@source:ipds.cpp
+ipds // intel
+
+//@source:iq151.cpp
+iq151 //
+
+//@source:iqblock.cpp
+grndtour // (c) 1993
+iqblock // (c) 1993
+
+//@source:iris3130.cpp
+sgi_ip2 // IP2: IRIS 3xx0, 68020, 16MHz
+
+//@source:irisha.cpp
+irisha //
+
+//@source:irobot.cpp
+irobot // 136029 (c) 1983
+
+//@source:ironhors.cpp
+dairesya // GX560 (c) 1986 (Japan)
+farwest // bootleg
+ironhors // GX560 (c) 1986
+
+//@source:isbc.cpp
+isbc286 //
+isbc2861 //
+isbc86 //
+rpc86 //
+
+//@source:iskr103x.cpp
+iskr1030m //
+iskr1031 //
+
+//@source:istellar.cpp
+istellar // (c) 1983 Funai / Gakken
+
+//@source:iteagle.cpp
+bbhcotw //
+bbhsc //
+carnking //
+gtfore01 //
+gtfore02 //
+gtfore03 //
+gtfore03a //
+gtfore04 //
+gtfore04a //
+gtfore05 //
+gtfore05a //
+gtfore05b //
+gtfore05c //
+gtfore06 //
+iteagle // (c) 2000 Incredible Technologies
+virtpool //
+
+//@source:itech32.cpp
+bloodstm // (c) 1994 Strata/Incredible Technologies
+bloodstm10 // (c) 1994 Strata/Incredible Technologies
+bloodstm11 // (c) 1994 Strata/Incredible Technologies
+bloodstm21 // (c) 1994 Strata/Incredible Technologies
+bloodstm22 // (c) 1994 Strata/Incredible Technologies
+drivedge // (c) 1994 Strata/Incredible Technologies
+gt2k // (c) 2000 Incredible Technologies
+gt2kp100 // (c) 2000 Incredible Technologies
+gt2ks100 // (c) 2000 Incredible Technologies
+gt2kt500 // (c) 2000 Incredible Technologies
+gt3d // (c) 1995 Incredible Technologies
+gt3dl19 // (c) 1995 Incredible Technologies
+gt3dl191 // (c) 1995 Incredible Technologies
+gt3dl192 // (c) 1995 Incredible Technologies
+gt3ds192 // (c) 1995 Incredible Technologies
+gt3dt211 // (c) 1995 Incredible Technologies
+gt3dt231 // (c) 1995 Incredible Technologies
+gt3dv14 // (c) 1995 Incredible Technologies
+gt3dv15 // (c) 1995 Incredible Technologies
+gt3dv16 // (c) 1995 Incredible Technologies
+gt3dv17 // (c) 1995 Incredible Technologies
+gt3dv18 // (c) 1995 Incredible Technologies
+gt97 // (c) 1997 Incredible Technologies
+gt97s121 // (c) 1997 Incredible Technologies
+gt97t240 // (c) 1997 Incredible Technologies
+gt97t243 // (c) 1997 Incredible Technologies
+gt97v120 // (c) 1997 Incredible Technologies
+gt97v121 // (c) 1997 Incredible Technologies
+gt97v122 // (c) 1997 Incredible Technologies
+gt98 // (c) 1998 Incredible Technologies
+gt98s100 // (c) 1998 Incredible Technologies
+gt98t303 // (c) 1998 Incredible Technologies
+gt98v100 // (c) 1998 Incredible Technologies
+gt99 // (c) 1999 Incredible Technologies
+gt99s100 // (c) 1999 Incredible Technologies
+gt99t400 // (c) 1999 Incredible Technologies
+gtclassc // (c) 2001 Incredible Technologies
+gtclasscp // (c) 2001 Incredible Technologies
+gtclasscs // (c) 2001 Incredible Technologies
+gtdiamond // (c) 1998 Incredible Technologies
+gtroyal // (c) 1999 Incredible Technologies
+gtsupreme // (c) 2000 Incredible Technologies
+hardyard // (c) 1993 Strata/Incredible Technologies
+hardyard10 // (c) 1993 Strata/Incredible Technologies
+hotmemry // (c) 1994 Tuning/Incredible Technologies
+hotmemry11 // (c) 1994 Tuning/Incredible Technologies
+pairs // (c) 1994 Strata/Incredible Technologies
+pairsa // (c) 1994 Strata/Incredible Technologies
+pairsred // (c) 1994 Strata/Incredible Technologies
+sftm // (c) 1995 Capcom/Incredible Technologies
+sftm110 // (c) 1995 Capcom/Incredible Technologies
+sftm111 // (c) 1995 Capcom/Incredible Technologies
+sftmj // (c) 1995 Capcom/Incredible Technologies
+shufshot // (c) Strata/Incredible Technologies
+shufshot137 // (c) Strata/Incredible Technologies
+shufshot139 // (c) Strata/Incredible Technologies
+timekill // (c) 1992 Strata/Incredible Technologies
+timekill121 // (c) 1992 Strata/Incredible Technologies
+timekill131 // (c) 1992 Strata/Incredible Technologies
+wcbowl // (c) 1995 Incredible Technologies
+wcbowl11 // (c) 1995 Incredible Technologies
+wcbowl12 // (c) 1995 Incredible Technologies
+wcbowl13 // (c) 1995 Incredible Technologies
+wcbowl13j // (c) 1995 IT Inc, Licensed to Excellent System Ltd. for Japan
+wcbowl14 // (c) 1995 Incredible Technologies
+wcbowl140 // (c) 1995 Incredible Technologies
+wcbowl15 // (c) 1995 Incredible Technologies
+wcbowl16 // (c) 1995 Incredible Technologies
+wcbowl161 // (c) 1995 Incredible Technologies
+wcbowl165 // (c) 1995 Incredible Technologies
+wcbowldx // (c) 1999 Incredible Technologies
+
+//@source:itech8.cpp
+arlingtn // (c) 1991 Strata/Incredible Technologies
+dynobop // (c) 1990 Grand Products/Incredible Technologies
+gpgolf // (c) 1992 Strata/Incredible Technologies
+grmatch // (c) 1989 Yankee Game Technology
+gtg // (c) 1990 Strata/Incredible Technologies
+gtg2 // (c) 1992 Strata/Incredible Technologies
+gtg2j // (c) 1991 Strata/Incredible Technologies
+gtg2t // (c) 1989 Strata/Incredible Technologies
+gtgt // (c) 1990 Strata/Incredible Technologies
+gtgt1 // (c) 1990 Strata/Incredible Technologies
+hstennis // (c) 1990 Strata/Incredible Technologies
+hstennis10 // (c) 1990 Strata/Incredible Technologies
+neckneck // (c) 1992 Bundra Games/Incredible Technologies
+ninclown // (c) 1991 Strata/Incredible Technologies
+peggle // (c) 1991 Strata/Incredible Technologies
+pegglet // (c) 1991 Strata/Incredible Technologies
+pokrdice // (c) 1991 Strata/Incredible Technologies
+rimrockn // (c) 1991 Strata/Incredible Technologies
+rimrockn12 // (c) 1991 Strata/Incredible Technologies
+rimrockn16 // (c) 1991 Strata/Incredible Technologies
+rimrockn20 // (c) 1991 Strata/Incredible Technologies
+slikshot // (c) 1990 Grand Products/Incredible Technologies
+slikshot16 // (c) 1990 Grand Products/Incredible Technologies
+slikshot17 // (c) 1990 Grand Products/Incredible Technologies
+sstrike // (c) 1990 Strata/Incredible Technologies
+stratab // (c) 1990 Strata/Incredible Technologies
+stratab1 // (c) 1990 Strata/Incredible Technologies
+stratabs // (c) 1990 Strata/Incredible Technologies
+wfortune // (c) 1989 GameTek
+wfortunea // (c) 1989 GameTek
+
+//@source:itgambl2.cpp
+cmagica // (c) 200? unknown
+elvis // (c) 200? unknown
+europass // (c) 200? unknown
+laser2k1 // (c) 2001 unknown
+mclass // (c) 200? unknown
+mdrink // (c) 2001 unknown
+millsun // (c) 200? unknown
+mnumitg // (c) 200? unknown
+ntcash // (c) 1999 unknown
+pirati // (c) 2001 Cin
+sspac2k1 // (c) 200? unknown
+sstar // (c) 200? unknown
+te0144 // (c) 2001 unknown
+thedrink // (c) 200? unknown
+trstar2k // (c) 1999 A.M.
+unkh8gam // (c) 200? unknown
+wizard // (c) 1999 A.A.
+
+//@source:itgambl3.cpp
+ejollyx5 // (c) 200? Solar Games
+ejollyx9 //
+grandprx // (c) 200? 4fun
+queenotg //
+supjolly // (c) 200? unknown
+x5jokers // (c) 200? Electronic Projects
+
+//@source:itgamble.cpp
+abacus // (c) 200? unknown
+bookthr // (c) 200? unknown
+capcor // (c) 2001 Nazionale Elettronica
+capunc // (c) 2000 Nazionale Elettronica
+euro2k2 // (c) 2001 Nazionale Elettronica
+euro2k2a // (c) 2001 Nazionale Elettronica
+euro2k2s // (c) 2002 Nazionale Elettronica
+laperla // (c) 2002 Nazionale Elettronica
+laperlag // (c) 2001 Nazionale Elettronica
+mnumber // (c) 200? M.M. - B.R.L.
+
+//@source:itt3030.cpp
+itt3030 //
+
+//@source:jack.cpp
+brix // (c) 1982 Cinematronics + Advanced Microcomputer Systems
+freeze // Cinematronics
+jack // (c) 1982 Cinematronics
+jack2 // (c) 1982 Cinematronics
+jack3 // (c) 1982 Cinematronics
+joinem // (c) 1983 Global
+loverboy // (c) 1983 G.T
+striv // (c) 1985 Nova du Canada
+sucasino // (c) 1982 Data Amusement
+treahunt // (c) 1982 Hara Industries
+tripool // (c) 1981 Noma (Casino Tech license)
+tripoola // (c) 1981 Noma (Costal Games license)
+unclepoo // (c) 1983 Diatec
+zzyzzyxx // (c) 1982 Cinematronics + Advanced Microcomputer Systems
+zzyzzyxx2 // (c) 1982 Cinematronics + Advanced Microcomputer Systems
+
+//@source:jackal.cpp
+jackal // GX631 (c) 1986 (World)
+jackalj // GX631 (c) 1986 (Japan)
+jackalr // GX631 (c) 1986 (World)
+topgunbl // bootleg
+topgunr // GX631 (c) 1986 (US)
+
+//@source:jackie.cpp
+jackie // (c) 1993 IGS
+
+//@source:jackpool.cpp
+jackpool // (c) 1997 Electronic Projects
+
+//@source:jade.cpp
+jade //
+
+//@source:jaguar.cpp
+a51mxr3k // ?? (c) 1998
+area51 // 136105 (c) 1995
+area51a // 136105 (c) 1995
+area51mx // 136105 (c) 1998
+area51t // 136105 (c) 1995
+area51ta // 136105 (c) 1995
+fishfren // (proto) (c) 1995
+freezeat // (proto) (c) 1996
+freezeat2 // (proto) (c) 1996
+freezeat3 // (proto) (c) 1996
+freezeat4 // (proto) (c) 1996
+freezeat5 // (proto) (c) 1996
+freezeat6 // (proto) (c) 1996
+freezeatjp // (proto) (c) 1996
+jaguar // Atari Jaguar
+jaguarcd // Atari Jaguar CD
+maxf_102 // ?? (c) 1996
+maxf_ng // ?? (c) 1996
+maxforce // ?? (c) 1996
+vcircle // (proto) (c) 1996
+
+//@source:jailbrek.cpp
+jailbrek // GX507 (c) 1986
+jailbrekb // bootleg
+manhatan // GX507 (c) 1986 (Japan)
+
+//@source:jalmah.cpp
+daireika // (c) 1989 Jaleco/NMK
+kakumei // (c) 1990
+kakumei2 // (c) 1992
+mjzoomin // (c) 1990
+suchipi // (c) 1993
+urashima // UPL-89052
+
+//@source:jangou.cpp
+cntrygrl // (c) 1984 Royal Denshi
+cntrygrla // (c) 1984
+fruitbun // (c) 1984
+jangou // (c) 1983
+jngolady // (c) 1984
+luckygrl // (c) 1984 Wing?
+macha // (c) 1983 Logitec
+roylcrdn // (c) 1985
+
+//@source:jankenmn.cpp
+jankenmn // (c) 1985 Sunwise
+
+//@source:jantotsu.cpp
+jantotsu // (c) 1983 Sanritsu
+
+//@source:jchan.cpp
+jchan // (c) 1995 Kaneko
+jchan2 // (c) 1995 Kaneko
+
+//@source:jclub2.cpp
+darkhors // bootleg of Jockey Club II
+jclub2 // (c) 199? Seta
+jclub2o // (c) 199? Seta
+jclub2ob // (c) 199? Seta
+
+//@source:jedi.cpp
+jedi // 136030 (c) 1984
+
+//@source:jeutel.cpp
+leking //
+olympic //
+
+//@source:jokrwild.cpp
+jokrwild // (c) 1988 Sigma
+
+//@source:jollyjgr.cpp
+fspiderb // bootleg
+jollyjgr // KD (c) 1982 Taito Corporation
+
+//@source:jongkyo.cpp
+jongkyo // (c) 1985 Kiwako
+
+//@source:jonos.cpp
+jonos //
+
+//@source:joystand.cpp
+joystand // 1997 Yuvo
+
+//@source:jp.cpp
+america //
+aqualand //
+faeton //
+halley //
+halleya //
+lortium //
+olympus //
+petaco //
+petaco2 //
+pimbal //
+
+//@source:jpmimpct.cpp
+buzzundr // Buzzundrum (Ace)
+cluedo // (c) 1995
+cluedo2 // (c) 1995
+cluedo2c // (c) 1995
+cluedod // (c) 1995
+coronatn // (c) 1999
+coronatnd // (c) 1999
+hngmnjpm // (c) 1998
+hngmnjpmd // (c) 1998
+monspdr // Money Spider (Ace)
+scrabble // (c) 1997
+scrabbled // (c) 1997
+snlad // (c) 199?
+tqst // (c) ACE?
+trivialp // (c) 1996
+trivialpd // (c) 1996
+trivialpo // (c) 1996
+
+//@source:jpmimpctsw.cpp
+j6aceclb // Ace Of Clubs (Crystal)
+j6aceclba //
+j6acehi // Aces High (Ace)
+j6amdrm // American Dream (Mdm)
+j6arcade // Arcadia (JPM)
+j6arcadea //
+j6arcadeb //
+j6arcadec //
+j6arcaded //
+j6arcadee //
+j6arcadef //
+j6arcadeg //
+j6arcadeh //
+j6arcadei //
+j6arcadej //
+j6arcadek //
+j6bags // Three Bags Full (JPM)
+j6bbankr // Big Banker (Crystal)
+j6big50 // Big 50 (JPM)
+j6big50a //
+j6big50b //
+j6big50c //
+j6big50d //
+j6bigbnk // Big Banker (JPM)
+j6bigbnka //
+j6bigbnkb //
+j6bigbnkc //
+j6bigbnkd //
+j6bigbnke //
+j6bigbnkf //
+j6bigbnkg //
+j6bigbnkh //
+j6bigbnki //
+j6bigbnkj //
+j6bigbnkk //
+j6bigbnkl //
+j6bigbnkm //
+j6bigbnkn //
+j6bigbnko //
+j6bigbnkp //
+j6bigbuk // Big Bucks (JPM)
+j6bigbuka //
+j6bigbukb //
+j6bigbukc //
+j6bigbukd //
+j6bigbuke //
+j6bigbukf //
+j6bigbukg //
+j6bigbukh //
+j6bigbuki //
+j6bigbukj //
+j6bigcsh // Big Cash Machine (Empire)
+j6bigpct // Big Picture (Ace)
+j6bigpcta //
+j6bigpctb //
+j6bigtop // Big Top Club (JPM)
+j6bigtopa //
+j6bigtopb //
+j6bigtopc //
+j6bigwhl // Big Wheel (JPM)
+j6bigwhla //
+j6bigwhlb //
+j6bigwhlc //
+j6bigwhld //
+j6bigwhle //
+j6bmc // Big Money Club (Crystal)
+j6bmca //
+j6bnkrcl // Banker Club (JPM)
+j6bnkrcla //
+j6bnkrclb //
+j6bnkrclc //
+j6bno // Big Nite Out (Crystal)
+j6bnoa //
+j6bnob //
+j6bnoc //
+j6bnza // Bonanza (JPM)
+j6bnzaa //
+j6bnzab //
+j6bnzac //
+j6bnzad //
+j6bnzae //
+j6bnzaf //
+j6bnzag //
+j6bnzah //
+j6bnzai //
+j6bnzaj //
+j6bnzak //
+j6brkout // Breakout (JPM)
+j6brkouta //
+j6btbw // Born To Be Wild Club (Crystal)
+j6btbwa //
+j6btbwb //
+j6btbwc //
+j6btbwd //
+j6bucks // Bucks Fizz (Ace)
+j6camelt // Camelot (JPM)
+j6camelta //
+j6cameltb //
+j6cameltc //
+j6cameltd //
+j6cas5 // Casino 5ive Liner (JPM) (IMPACT)
+j6cas5a //
+j6cas5b //
+j6cas5c //
+j6cas5d //
+j6cas5e //
+j6cas5f //
+j6cas5g //
+j6cas5h //
+j6cas5i //
+j6cas5j //
+j6cas5k //
+j6cas5l //
+j6cascla // Casino Crazy Classic Club (JPM)
+j6casclaa //
+j6casclab //
+j6casclac //
+j6casclad //
+j6casclae //
+j6casclaf //
+j6casclag //
+j6casclah //
+j6casclai //
+j6casclaj //
+j6casclak //
+j6casclal //
+j6casclam //
+j6casclan //
+j6casclao //
+j6casclap //
+j6casclaq //
+j6casclar //
+j6casclas //
+j6casclat //
+j6casclb // Casino Crazy Club (JPM)
+j6casclba //
+j6cascz // Casino Crazy (JPM)
+j6cascza //
+j6casczb //
+j6casczc //
+j6casczd //
+j6cascze //
+j6casczf //
+j6casczg //
+j6casczh //
+j6casczi //
+j6casczj //
+j6casczk //
+j6casczl //
+j6casczm //
+j6caslas // Casino Las Vegas (JPM)
+j6caslasa //
+j6caslasb //
+j6caslasc //
+j6ccc // Casino Crazy Club (Crystal)
+j6ccca //
+j6cccb //
+j6cccc //
+j6cccla // Casino Crazy Classic (JPM)
+j6ccclaa //
+j6ccclab //
+j6ccclac //
+j6ccclad //
+j6ccclae //
+j6ccclaf //
+j6ccclag //
+j6ccclah //
+j6ccclai //
+j6ccclaj //
+j6ccclak //
+j6cdivr // Cash Diver (Crystal)
+j6cheque // Cheque Mate (JPM)
+j6cluclb // Cluedo Club (JPM)
+j6cluclba //
+j6cluclbb //
+j6cluclbc //
+j6cluclbd //
+j6cluclbe //
+j6cluclbf //
+j6cluclbg //
+j6cluclbh //
+j6cluclbi //
+j6cluclbj //
+j6cluclbk //
+j6cluclbl //
+j6col // Coliseum (Mdm)
+j6cola //
+j6colb //
+j6colc //
+j6colcsh // Coliseum Cash (JPM)
+j6colcsha //
+j6colcshb //
+j6colcshc //
+j6colcshd //
+j6cold //
+j6cole //
+j6colf //
+j6colic // Coliseum (Crystal)
+j6colica //
+j6colicb //
+j6colicc //
+j6colicd //
+j6colmon // Colour Of Money (JPM)
+j6colmona //
+j6colmonb //
+j6colmonc //
+j6colmond //
+j6colmone //
+j6colmonf //
+j6colmong //
+j6colmonh //
+j6colmoni //
+j6colmonj //
+j6coprob // Cops 'n' Robbers (Qps)
+j6coproba //
+j6coprobb //
+j6coprobc //
+j6coprobd //
+j6coprobe //
+j6cpal // Caesars Palace (Crystal)
+j6cpala //
+j6cpalb //
+j6cpalc //
+j6cpald //
+j6cpale //
+j6cpalf //
+j6cpalg //
+j6cpclb // Caesar's Palace Club (JPM)
+j6cpclba //
+j6cpclbb //
+j6crack // Cracker (JPM)
+j6cracka //
+j6crackb //
+j6crackc //
+j6crackd //
+j6cracke //
+j6crackf //
+j6crackg //
+j6crackh //
+j6cracki //
+j6crackj //
+j6crakr // Cracker (Crystal)
+j6crakra //
+j6crakrb //
+j6crsfir // Cross Fire (JPM)
+j6crsfira //
+j6crzclb // Crazy Club (JPM)
+j6crzclba //
+j6crzclbb //
+j6crzclbc //
+j6cshbeu // Cash Box Club (Empire) [Euro]
+j6cshbox // Cash Box Club (Empire)
+j6cshboxa //
+j6cshboxb //
+j6cshbst // Cash Buster (JPM)
+j6cshbsta //
+j6cshbstb //
+j6cshbstc //
+j6cshbstd //
+j6cshcnt // Cash Countdown (JPM)
+j6cshcnta //
+j6cshrd // Cash Raider (Ace)
+j6cshrda //
+j6cshrdb //
+j6cshrdc //
+j6cshrdd //
+j6cshtwr // Cash Towers (JPM)
+j6cshvgs // Cash Vegas Strip (JPM)
+j6cshvgsa //
+j6cshvgsb //
+j6cshvgsc //
+j6cshvgsd //
+j6cshvgse //
+j6cshvgsf //
+j6cshvgsg //
+j6cshvgsh //
+j6cshvgsi //
+j6cshvgsj //
+j6cshvgsk //
+j6cshvgsl //
+j6cshvgsm //
+j6cshvgsn //
+j6cshvgso //
+j6cshvgsp //
+j6cshvgsq //
+j6cshvgsr //
+j6daygld // Daytona Gold (JPM)
+j6dayglda //
+j6daygldb //
+j6daygldc //
+j6daygldd //
+j6dayglde //
+j6dayml // Daytona Millennium (JPM)
+j6daymla //
+j6daymlb //
+j6dmngz // Diamond Geezer (JPM)
+j6dmnjkr // Demon Jokers (JPM)
+j6dmnjkra //
+j6dmnjkrb //
+j6dmnjkrc //
+j6drdogh // Dr Dough (Qps)
+j6dyfl // Do You Feel Lucky (JPM)
+j6dyfla //
+j6dyflb //
+j6dyflc //
+j6dyfld //
+j6dyfle //
+j6dyflf //
+j6dyflg //
+j6dyflh //
+j6dyfli //
+j6dyflj //
+j6easy // Easy Money (Crystal)
+j6easya //
+j6easyb //
+j6easyc //
+j6euphor // Euphoria (Ace)
+j6euphora //
+j6euphorb //
+j6euphorc //
+j6euphord //
+j6euphore //
+j6euphorf //
+j6ewn // Each Way Nudger (JPM)
+j6ewndg // Each Way Nudger (Crystal)
+j6ewndga //
+j6ewndgb //
+j6fastfr // Fast Fruits Club (Qps)
+j6fastfra //
+j6fasttk // Fast Trak (JPM)
+j6fasttka //
+j6fasttkb //
+j6fasttkc //
+j6fbcrz // Football Crazy (JPM)
+j6ffc // Frame & Fortune Club (Crystal)
+j6ffca //
+j6ffcb //
+j6ffcc //
+j6ffcd //
+j6ffce //
+j6fifth // 5th Dimension (Ace)
+j6filth // Filthy Rich Club (JPM)
+j6filtha //
+j6filthb //
+j6filthc //
+j6firbl // Fireball (JPM)
+j6firbla //
+j6firblb //
+j6firblc //
+j6firbld //
+j6firclb // Firecracker Club (JPM)
+j6firclba //
+j6firclbb //
+j6firclbc //
+j6fireck // Firecracker (JPM)
+j6firecka //
+j6fireckb //
+j6fireckc //
+j6fireckd //
+j6firecke //
+j6fivalv // Five Alive Club (JPM)
+j6fivalva //
+j6fivalvb //
+j6fiveln // Five Liner (JPM)
+j6fivelna //
+j6fivelnb //
+j6fivelnc //
+j6footy // Football Fever (Empire)
+j6footya //
+j6footyb //
+j6framft // Frame & Fortune Club (JPM)
+j6frc10 // Force 10 (JPM)
+j6frc10a //
+j6frc10b //
+j6frc10c //
+j6frc10d //
+j6frtmch // Fruit Machine, The (JPM)
+j6frtpot // Fruitpots (Qps)
+j6frtpota //
+j6frtpotb //
+j6frtpotc //
+j6gforce // G Force (JPM)
+j6gforcea //
+j6gforceb //
+j6gforcec //
+j6gforced // G Force (JPM) 15GBP
+j6gidogh // G.I. Dough (Ace)
+j6gldclb // Gladiator Club (JPM)
+j6gldclba //
+j6gldclbb //
+j6gldday // Gold Day (JPM)
+j6gldmin // Gold Mine (Empire)
+j6gldpl // Golden Palace (QPS / Mazooma)
+j6gogold // Go For Gold (JPM)
+j6gogolda //
+j6gogoldb //
+j6gogoldc //
+j6golddm // Golden Demons (JPM)
+j6golddma //
+j6goldgl // Golden Goal (JPM)
+j6goldgla //
+j6goldglb //
+j6goldglc //
+j6goldgld //
+j6goldgle //
+j6goldglf //
+j6goldglg //
+j6goldglh //
+j6goldgli //
+j6goldglj //
+j6goldglk //
+j6goldgll //
+j6grc // Gold Rush Club (Crystal)
+j6grca //
+j6guab // Give Us A Break (JPM)
+j6guaba //
+j6guabb //
+j6guabc //
+j6guabcl // Give Us A Break Club (JPM)
+j6guabcla //
+j6guabd //
+j6guabe //
+j6guabf //
+j6h5clb // High Five Club (JPM)
+j6h5clba //
+j6hapyhr // Happy Hour (JPM)
+j6hapyhra //
+j6hapyhrb //
+j6hdc // Hot Dogs Club (Crystal)
+j6hdca //
+j6hdcb //
+j6hdcc //
+j6hdcd //
+j6hdce //
+j6hdcf //
+j6hdcg //
+j6hifly // Hi Flyer (Ace)
+j6hikar // Hi Karate (Crystal)
+j6hikara //
+j6hikarb //
+j6hilosv // Hi Lo Silver (JPM)
+j6hilosva //
+j6hilosvb //
+j6hilosvc //
+j6hilosvd //
+j6hilosve //
+j6hiphop // Hip Hopper (Ace)
+j6hiphopa //
+j6hiphopb //
+j6hiphopc //
+j6hiphopd //
+j6hirlcl // Hi Roller Club (JPM)
+j6hirlcla //
+j6hirlclb //
+j6hirlclc //
+j6hirol // Hi Roller (JPM)
+j6hirola //
+j6hirolb //
+j6hirolc //
+j6hirold //
+j6hisprt // High Spirits (Empire)
+j6histk // Hi Stakes (Qps)
+j6histka //
+j6hotsht // Hot Shot (Ace)
+j6hotshta //
+j6hotshtb //
+j6hotshtc //
+j6hotshtd //
+j6hotshte //
+j6hotshtf //
+j6hotshtg //
+j6hotshth //
+j6hotshti //
+j6hotshtj //
+j6hotshtk //
+j6hotshtl //
+j6impact // Hi Impact (JPM)
+j6impacta //
+j6impactb //
+j6impactc // Hi Impact (JPM) 15GBP
+j6impls // Impulse (Crystal)
+j6impuls // Impulse (JPM)
+j6impulsa //
+j6impulsb //
+j6impulsc //
+j6impulsd //
+j6impulse //
+j6impulsf //
+j6indy // Indiana Jones (JPM)
+j6indya //
+j6indyb //
+j6indyc //
+j6indyd //
+j6indye //
+j6indyf //
+j6indyg //
+j6indyge //
+j6indyge2 //
+j6indyh //
+j6indyi //
+j6indyj //
+j6indyk //
+j6jackjs // Jackpot Justice (Qps)
+j6jackjsa //
+j6jackjsb //
+j6jackjsc //
+j6jkpldx // Jokers Plus Deluxe (JPM)
+j6jkpldxa //
+j6jkrgld // Jokers Gold (JPM)
+j6jkrpls // Jokers Plus (JPM)
+j6jkrplsa //
+j6jkrplsb //
+j6jkrplsc //
+j6jkrplsd //
+j6jkrplse //
+j6jkwld // Jokers Wild (JPM)
+j6jungfv // Jungle Fever (Ace)
+j6kamel // Kameleon (JPM)
+j6kapang // Kapang! (Crystal)
+j6kapanga //
+j6kfc // Kung Fu Club (Crystal)
+j6kfca //
+j6kfcb //
+j6knight // Your Lucky Knight (JPM)
+j6knighta //
+j6knightb //
+j6knightc //
+j6knightd //
+j6knighte //
+j6kungfu // Kung Fu (Ace)
+j6kungfua //
+j6kungfub //
+j6kungfuc //
+j6kungfud //
+j6luckla // Lucky Las Vegas (JPM)
+j6lucklaa //
+j6lucklab //
+j6lucklo // Lucky Lottery Club (Crystal)
+j6luckloa //
+j6magcir // Magic Circle Club (JPM)
+j6magcira //
+j6magcirb //
+j6magcirc //
+j6magcird //
+j6mavrk // Maverick (JPM)
+j6mavrka //
+j6mavrkb //
+j6mavrkc //
+j6mavrkd //
+j6maxcsh // Maximus Cash (JPM)
+j6maxod // Maximum Overdrive (JPM)
+j6maxoda //
+j6maxodb //
+j6maxodc //
+j6medal // Medallion Job (Qps)
+j6medala //
+j6medalb //
+j6medalc //
+j6medald //
+j6megbck // Mega Bucks (JPM)
+j6megbcka //
+j6megbckb //
+j6megbckc //
+j6megbckd //
+j6milln // Millionaire / Who Wants To Be A Millionaire (JPM)?
+j6millna //
+j6monmad // Money Madness (Ace)
+j6mono60 // Monopoly 60th Anniversary Edition (JPM)
+j6mono60a //
+j6mono60b //
+j6mono60c //
+j6mono60d //
+j6mono60e //
+j6mono60f //
+j6mono60g //
+j6mono60h //
+j6mono60i //
+j6mono60j //
+j6mono60k //
+j6mono60l //
+j6monobn // Monopoly Bingo (JPM)
+j6monobna //
+j6monobnb //
+j6monst // Monster Cash Club (Crystal)
+j6monsta //
+j6monstb //
+j6monstc //
+j6monstd //
+j6montlk // Money Talks (JPM)
+j6montlka //
+j6montlkb //
+j6montlkc //
+j6montlkd //
+j6montlke //
+j6montlkf //
+j6montlkg //
+j6montlkh //
+j6outlaw // Outlaw (JPM)
+j6outlawc // Outlaw (JPM) Club?
+j6outlawd // Outlaw (JPM) Protocol
+j6oxo // Oxo (JPM)
+j6oxoa //
+j6oxob //
+j6oxobin // Oxo Bingo (JPM)
+j6oxobina //
+j6oxobinb //
+j6oxobinc //
+j6oxobind //
+j6oxobine //
+j6oxobinf //
+j6oxoc //
+j6oxod //
+j6oxoe //
+j6pacman // Pac Man Plus (Qps)
+j6papa // Paparazzi (Empire)
+j6papaa //
+j6papab //
+j6papac //
+j6papad //
+j6papae //
+j6papaf //
+j6phxgld // Phoenix Gold (JPM)
+j6phxglda //
+j6phxgldb //
+j6phxgldc //
+j6phxgldd //
+j6phxglde //
+j6phxgldf //
+j6phxgldg //
+j6pinfvr // Pinball Fever (Crystal)
+j6pinwzc // Pinball Wizard (Crystal)
+j6pinwzca //
+j6pinwzcb //
+j6pinwzd // Pinball Wizard (JPM)
+j6pinwzda //
+j6pinwzdb //
+j6pinwzdc //
+j6pinwzdd //
+j6pinwzde //
+j6pirgld // Pirates Gold (JPM)
+j6pirglda //
+j6pnxgd // Phoenix Gold De Luxe (JPM)
+j6pnxmil // Phoenix Millennium (JPM)
+j6pnxmila //
+j6pnxmilb //
+j6pnxmilc //
+j6pog // Pot Of Gold (Ace)
+j6poga //
+j6pogb //
+j6pogc //
+j6pogcls // Pot Of Gold Classic (JPM)
+j6pogclsa //
+j6pogclsb //
+j6pogd //
+j6pompay // Up Pompay (Ace)
+j6pompaya //
+j6pompayb //
+j6pompayc //
+j6popoli // Popeye & Olive (JPM)
+j6popolia //
+j6potg // Pot Of Gold (Crystal)
+j6potga //
+j6potgb //
+j6pwrlin // Power Lines (JPM)
+j6pwrlina //
+j6pwrspn // Powerspin (JPM)
+j6pwrspna //
+j6pwrspnb //
+j6pwrspnc //
+j6pwrspnd //
+j6pwrspne //
+j6quantm // Quantum Leap (JPM)
+j6quantma //
+j6quantmb //
+j6quantmc //
+j6quick // Quicksilver (RAL)
+j6r2rum // Ready To Rumble (Crystal)
+j6r2ruma //
+j6r2rumb //
+j6r2rumc //
+j6r2rumd //
+j6r2rume //
+j6ra // Red Alert (JPM)
+j6raa //
+j6rab //
+j6rac //
+j6raclb // Red Alert Club (JPM)
+j6raclba //
+j6raclbb //
+j6raclbc //
+j6raclbd //
+j6rad //
+j6rager // Red Alert (JPM) [German]
+j6ramese // Rameses' Riches Club (Crystal)
+j6ramesea //
+j6rameseb //
+j6ramesec //
+j6ramesed //
+j6ramesee //
+j6ramesef //
+j6rccls // Roller Coaster Classic (JPM)
+j6rcclsa //
+j6rcclsb //
+j6rcclub // Roller Coaster Club (JPM)
+j6rccluba //
+j6rcclubb //
+j6redal // Red Alert (Crystal)
+j6redala //
+j6redarw // Red Arrow (JPM)
+j6redarwa //
+j6redarwb //
+j6redarwc //
+j6redarwd //
+j6redarwe //
+j6redarwf //
+j6redarwg //
+j6redarwh //
+j6redarwi //
+j6redarwj //
+j6redarww // Red Arrow (Whitbread / JPM)
+j6reddmn // Red Demon (JPM)
+j6reelb // Reel Bingo Classic Club (Crystal)
+j6reelba //
+j6reelmn // Reel Money (JPM)
+j6reelmna //
+j6reelmnb //
+j6reelmnc //
+j6reelmnd //
+j6reelth // Reel Thing (Ace)
+j6reeltha //
+j6reelthb //
+j6rh6 // Red Hot 6 (JPM)
+j6rh6a //
+j6rh6b //
+j6rh6c //
+j6rh6cl // Red Hot Six Club (JPM)
+j6rh6cla //
+j6rh6clb //
+j6rh6clc //
+j6rh6cld //
+j6rh6d //
+j6rh6e //
+j6rhchil // Red Hot Chili Stepper (Ace)
+j6rhchila //
+j6rhchilb //
+j6rhchilc //
+j6rhchild //
+j6richpk // Rich Pickings (Ace)
+j6rico // Ricochet (JPM)
+j6ricoa //
+j6ricob //
+j6ricoc //
+j6ricod //
+j6ricoe //
+j6robin // Robin Hood (Ace)
+j6robina //
+j6robinb //
+j6robinc //
+j6roller // Roller Coaster (JPM)
+j6rollera //
+j6rollerb //
+j6rollerc //
+j6rollerd //
+j6rollere //
+j6rollerf //
+j6rollerg //
+j6rollerh //
+j6rolleri //
+j6rollerj //
+j6rollerk //
+j6rollerl //
+j6rollerm //
+j6rollern //
+j6rollero //
+j6rollerp //
+j6roof // Thru' The Roof (Ace)
+j6roofa //
+j6royfls // Royal Flush Club (JPM)
+j6royflsa //
+j6royflsb //
+j6royflsc //
+j6royflsd //
+j6royflse //
+j6samur // Samurai Club (JPM)
+j6samura //
+j6samurb //
+j6samurc //
+j6samurd //
+j6scarlt // Captain Scarlet (Ace)
+j6shoot // ShootOut
+j6showtm // It's Showtime (JPM)
+j6showtma //
+j6showtmb //
+j6showtmc //
+j6showtmd //
+j6showtme //
+j6showtmf //
+j6showtmg //
+j6showtmh //
+j6showtmi //
+j6showtmj //
+j6showtmk //
+j6showtml //
+j6sidewd // Sidewinder (JPM)
+j6sidewda //
+j6sidewdb //
+j6sidewdc //
+j6sidewdd //
+j6sidewde //
+j6slagn // Snakes & Ladders Slides Again (Crystal)
+j6slagna //
+j6slagnb //
+j6slagnc //
+j6slagnd //
+j6slagne //
+j6slagnf //
+j6slagng //
+j6slagnh //
+j6slvgst // Silver Ghost (JPM)
+j6slvgsta //
+j6slvgstb //
+j6slvgstc //
+j6slvgstd //
+j6slvgste //
+j6slvgstf //
+j6slvgstg //
+j6snakes // Snakes & Ladders (JPM)
+j6snakesa //
+j6snakesb //
+j6snakesc //
+j6snakesd //
+j6snakese //
+j6snakesf //
+j6snakesg //
+j6sonic // Sonic The Hedgehog (JPM)
+j6sonica //
+j6sonicb //
+j6sonicc //
+j6sonicd //
+j6sonice //
+j6sonicf //
+j6sonicg //
+j6sonich //
+j6spcinv // Space Invaders (Crystal)
+j6stards // Stardust (JPM)
+j6stardsa //
+j6stardsb //
+j6stardsc //
+j6start // Starturn (JPM)
+j6starta //
+j6strk10 // Strike 10 (Ace)
+j6strk10a //
+j6strk10b //
+j6strk10c //
+j6strk10d //
+j6strk10e //
+j6strk10f //
+j6strk10g //
+j6strk10h //
+j6strk10i //
+j6strk10j //
+j6strk10k //
+j6supbrk // Super Breakout (JPM)
+j6supbrka //
+j6supbrkb //
+j6supbrkc //
+j6supbrkd //
+j6supbrke //
+j6supbrkf //
+j6supbrkg //
+j6supbrkh //
+j6supbrki //
+j6supbrkj //
+j6svndb // 7 Deadly Bins (Ace)
+j6swpdrp // Swop Till Ya Drop (JPM)
+j6tbirds // Thunderbirds
+j6tbirdsa //
+j6tbirdsb //
+j6tbirdsc //
+j6tbirdsd //
+j6tbirdse //
+j6tbirdsf //
+j6tbirdsg //
+j6tbirdsh //
+j6tbirdsi //
+j6tbirdsj //
+j6tbirdsk //
+j6tbirdsl //
+j6tbirdsm //
+j6tbirdsn //
+j6tbirdso //
+j6tbirdsp //
+j6tbirdsq //
+j6tbirdsr //
+j6tbrdcl // Thunderbirds Club (JPM)
+j6tbrdcla //
+j6tbrdclb //
+j6tbrdclc //
+j6tbrdcld //
+j6tbrdcle //
+j6tbrdclf //
+j6tbrdclg //
+j6tbrdclh //
+j6tbrdcli //
+j6tbrdclj //
+j6tbrdclk //
+j6tbrdcll //
+j6thril // Thriller (Crystal)
+j6thrila //
+j6tomb // Tomb Raider (JPM)
+j6tomba //
+j6tombb //
+j6tombc //
+j6tombd //
+j6tombe //
+j6tombf //
+j6tombg //
+j6topflg // Top Flight (Ace)
+j6tqust // Treasure Quest (Crystal)
+j6tqusta //
+j6tqustb //
+j6tqustc //
+j6tutti // Tutti Frutti (Qps)
+j6twst // Twister (Ace)
+j6twsta //
+j6twstb //
+j6twstc //
+j6twstd //
+j6twstdt // Twister (JPM) [Dutch]
+j6twste //
+j6twstf //
+j6twstg //
+j6twsth //
+j6twsti //
+j6twstj //
+j6untch // Untouchables (JPM)
+j6untcha //
+j6vindal // Vindaloot (JPM)
+j6vivark // Viva Rock Vegas (JPM)
+j6vivarka //
+j6vivarkb //
+j6vivarkc //
+j6vivarkd //
+j6vivarke //
+j6vivarkf //
+j6vivarkg //
+j6vivarkh //
+j6vivarki //
+j6vivarkj //
+j6vivarkk //
+j6vivrkc // Viva Rock Vegas Club (JPM)
+j6vivrkca //
+j6vivrkcb //
+j6wildw // Wild West (Ace)
+j6wildwa //
+j6wildwb //
+j6wildwc //
+j6wildwd //
+j6wildwe //
+j6wildwf //
+j6wildwg //
+j6wizard // Wizard Of Odds (JPM)
+j6wizarda //
+j6wizardb //
+j6wizardc //
+j6wizardd //
+j6wizarde //
+j6wldkng // Wild King Club (JPM)
+j6wldknga //
+j6wthing // Wild Thing (Empire)
+j6wthinga //
+j6wthingb //
+
+//@source:jpmmps.cpp
+j2008 // zzz_unk 008 (Unk)
+j2adnote // Add A Note (JPM)
+j2adnotea //
+j2adnoteb //
+j2adnotec //
+j2adnoted //
+j2adnotee //
+j2adnotef //
+j2adnoteg //
+j2adnoteh //
+j2adnotei //
+j2always // Always Eight (Bwb)
+j2b7 // Bar 7? (JPM)
+j2bankch // Bank Chase (JPM)
+j2bankrd // Bank Raid (JPM)
+j2bigbnk // Big Banker (JPM)
+j2bigbox // Big Box (JPM)
+j2bigbuk // Big Buck$ (JPM)
+j2bigdl // Big Deal (JPM)
+j2bkroll // Bank Roll (JPM)
+j2blkchy // Black Cherry (JPM)
+j2blustr // Blue Streak (Pcp)
+j2bodym // Body Match (JPM)
+j2bonanz // Bonanza (Eurocoin)
+j2cashab // Cashablanca (JPM)
+j2cashbn // Cash Bonus Club (JPM)
+j2cashfl // Cash Falls (JPM)
+j2cashrl // Cash Reels (JPM)
+j2cashro // Cash Rolls (JPM)
+j2cashrv // Cash Reserve (JPM)
+j2cashry // Cashino Royale (Pcp)
+j2cashtd // Cash Track Deluxe (JPM)
+j2cashtk // Cash Track (JPM)
+j2casino // Casino Classic (Pcp)
+j2chsn // zzz_unk chsnsn05 (Unk)
+j2clbbin // Club Bingo (Crystal)
+j2club77 // Club 77 (Unk)
+j2coinct // Coin Count (JPM)
+j2coinsh // Coin Shoot (Bwb)
+j2contnd // Continuous Nudger (Mdm)
+j2coppot // Copper Pot (JPM)
+j2coprun // Copper Run (JPM)
+j2cprndx // Copper Run Deluxe (JPM)
+j2criscr // Criss Cross Jackpot (Pcp)
+j2crkbnk // Crack The Bank (JPM)
+j2crown // Crown Dealer (Unk)
+j2cshalm // Cash Alarm (Pcp)
+j2cshcrd // Cash Cards (Pcp)
+j2cshfil // Cash-Filla (Pcp)
+j2cshnud // Cash Nudger (Mdm)
+j2cshsmh // Cash Smash (Pcp)
+j2cvault // Cash Vault (JPM)
+j2dropld // Drop The Lot Deluxe (JPM)
+j2droplt // Drop The Lot (JPM)
+j2ewn // Each Way Nudger (JPM)
+j2ews // Each Way Shuffle (JPM)
+j2exec // Executive Club (JPM)
+j2fasttk // Fast Trak (JPM)
+j2fiveal // Five Alive (JPM)
+j2fiveln // Five Liner (JPM) [Mps]
+j2fivepn // Fivepenny Nudger (Mdm)
+j2fqueen // Find The Queen (JPM)
+j2frmtch // Fruit Match (JPM)
+j2frucnx // Fruit Connexion (Pcp)
+j2fullhs // Full House Club (JPM)
+j2fws // Five Way Shuffle (JPM)
+j2fwsa //
+j2ghostb // Ghostbuster (JPM)
+j2gldchy // Golden Cherry (JPM)
+j2gldwin // Golden Win (JPM)
+j2goldbr // Golden Bars (JPM)
+j2goldrn // Gold Run (JPM)
+j2hcash // Hot Cash
+j2hilocl // Hi Lo Climber Club (Crystal)
+j2hinote // Hi Note (JPM)
+j2hirola // Hi Roll (Unk)
+j2hiroll // Hi Roller (JPM) [Mps]
+j2hitmon // Hit Money (Pcp)
+j2hotpot // Hot Pot (JPM)
+j2hotptd // Hot Pot Deluxe (JPM)
+j2hotsht // Hot Shot Club (JPM)
+j2hypnot // Hypernote (JPM)
+j2jackbr // Jackpot Bars (JPM)
+j2jackdc // Jackpot Dice (JPM)
+j2jokers // Jokers (JPM)
+j2kingcl // King Of Clubs (JPM)
+j2lhs // zzz_unk lhs (Unk)
+j2litean // Lite A Nudge (JPM)
+j2litnot // Lite A Note Club (Crystal)
+j2loots // Loot Shoot (Pcp)
+j2lovshd // Loot Shoot Deluxe (JPM)
+j2lovsht // Loot Shoot (JPM)
+j2luckar // Lucky Arrows (JPM)
+j2lucky2 // Lucky 2s (JPM)
+j2match // Match It (JPM)
+j2maxima // Maxima (Pcp)
+j2missis // Mississippi Gambler Club (Crystal)
+j2monblt // Money Belt (JPM)
+j2monbnd // Money Bands (JPM)
+j2mongam // Money Game (JPM)
+j2mongmd // Money Game Deluxe (JPM)
+j2monmin // Money Mine (Unk)
+j2monmtx // Money Matrix (Bwb)
+j2montrp // Money Trapper (Pcp)
+j2multwn // Multi Win (JPM)
+j2nbz // Nudge Bonanza (JPM)
+j2ncsp // zzz_unk ncsp0pp (Bwb)
+j2nn2 // zzz_unk nn_2 (Unk)
+j2nolimt // No Limit Nudge (Mdm)
+j2notesh // Note Shoot (JPM)
+j2notexc // Note Exchange (JPM)
+j2notexca //
+j2notexcb //
+j2notspn // Note Spinner (Unk)
+j2nrrp // zzz_unk nprpopp (Bwb)
+j2nsc15 // zzz_unk nsc15 (Pcp)
+j2nsw12 // zzz_unk nsw12 (Pcp)
+j2nud5p // 5p Nudger (JPM)
+j2nudbnz // Nudge Bonanza Deluxe (JPM)
+j2nudbnza //
+j2nuddud // Nudge Double Up Deluxe (JPM)
+j2nuddup // Nudge Double Up (JPM)
+j2nudfev // Nudge Fever (Bwb)
+j2nudmon // Nudge Money (Pcp)
+j2nudnud // Nudge Nudge (JPM)
+j2nudshf // Nudge Shuffler (JPM)
+j2nudup3 // Nudge Double Up MkIII (JPM)
+j2paypkt // Pay Packet (Pcp)
+j2penny // In For A Penny In For A Pound (Pcp)
+j2pharo // Pharoah (Unk)
+j2pinac // Pinnacle (JPM)
+j2pinclb // Pinnacle Club (JPM)
+j2plsmnd // Plus Money Deluxe (JPM)
+j2plsmon // Plus Money (JPM)
+j2plsnud // Plus Nudge (JPM)
+j2pndrsh // Pound Rush (JPM)
+j2potlck // Pot Luck (JPM)
+j2pyramd // Pyramid (JPM)
+j2rdclb // Royal Deal Club (JPM)
+j2reelbn // Reel Bingo Club (JPM)
+j2reelbna //
+j2reelbo // Reel Bonus (JPM)
+j2reelcz // Reel Crazy (JPM)
+j2reeldc // Reel Deal Club (JPM)
+j2reelmc // Reel Magic Club (JPM)
+j2reelmg // Reel Magic (JPM)
+j2reelmgd // Reel Magic (JPM) [Dutch]
+j2reelmo // Reel Money (JPM) [Mps]
+j2rm941 // zzz_unk rm941 (Unk)
+j2rotnot // Rota Note (JPM)
+j2roulcl // Roulette Club (JPM)
+j2sex // Super Exchanger (Unk)
+j2silvcl // Silver Classic (Pcp)
+j2silvsh // Silver Shot (Pcp)
+j2sirich // Strike It Rich? (Maygay?)
+j2siricha //
+j2sldgld // Solid Gold (JPM)
+j2slvrgh // Silver Ghost (JPM)
+j2sng // Super Nudge Gambler (Cotswold Microsystems)
+j2spcrsv // Special Reserve (JPM)
+j2ss // Supa Stepper (JPM)
+j2sset //
+j2sstrea // Supa Streak (Pcp)
+j2stahed // Streets Ahead (JPM)
+j2strk10 // Strike Ten (Ace)
+j2supchy // Super Cherry (Eurocoin)
+j2super7 // Super 7's (Unk)
+j2supfrc // Supa Fruit Club (JPM)
+j2supfrt // Supa Fruit (JPM)
+j2supln // Super Line (JPM)
+j2suppot // Super Pots (JPM)
+j2suprft // Super Fruit (JPM)
+j2suprl // Super Reel (JPM)
+j2suprsh // Supershot (JPM)
+j2supsft // Supashifta (JPM)
+j2supstp // Supa Steppa (JPM)
+j2supstr // Superstars (JPM)
+j2suptrk // Supa Track (JPM)
+j2swbank // Switch Back (JPM)
+j2take2 // Take 2 (JPM)
+j2topcd // Top Card (Bwb)
+j2topsht // Top Shot (JPM)
+j2trail // Trailblazer (Bwb)
+j2tst // MPS 1 Test Rom (JPM)
+j2tstplt // Test Pilot (Pcp)
+j2tstplta //
+j2tupnd // Tuppenny Nudger (Mdm)
+j2tupnud // Tuppenny Nudger (JPM)
+j2wag // Win-A-Gain (Bwb)
+j2westrn // Western (JPM)
+j2wrb // Wild Reel Bingo (JPM)
+j2xxx // Triple X (Bwb)
+
+//@source:jpms80.cpp
+j80alad // Aladdin's Cave (PCP)
+j80bac // Bank A Coin (JPM)
+j80blbnk // Blankity Bank (PCP)
+j80bounc // Bouncer (JPM)
+j80fortr // Fortune Trail (JPM)
+j80frogh // Frog Hop (JPM)
+j80fruit // Fruit Snappa (JPM)
+j80golds // Golden Steppa (JPM)
+j80hotln // Hot Lines (JPM)
+j80mster // Masterspy (Pcp)
+j80myspn // Mystery Spin (JPM)
+j80nudg2 // Nudge Double Up MkII (JPM)
+j80plsnd // Plus Nudge (JPM)
+j80rr // Road Runner (JPM)
+j80rra //
+j80supbk // Superbank (JPM)
+j80supst // Supa Steppa (JPM)
+j80topsp // Top Sprint (JPM)
+j80topup // Top Up (JPM)
+j80tumbl // Tumble (JPM)
+j80wsprt // Winsprint (JPM)
+j80wsprt2 // Winsprint (JPM)
+j80wsprt3 // Winsprint (JPM)
+
+//@source:jpmsru.cpp
+j_ewnd20 //
+j_ewnda //
+j_ewnud // Each Way Nudger
+j_ews // Each Way Shifter
+j_ews8a //
+j_luck2 // Lucky Twos
+j_luckac // Lucky Aces
+j_nuddup // Nudge Double Up
+j_nuddup2 //
+j_plus2 // Plus 2
+j_super2 // Super 2
+j_unk //
+
+//@source:jpmsys5.cpp
+cashcade // Cashcade (JPM)
+monoplcl // Monopoly Classic (JPM)
+monopldx // Monopoly Deluxe (JPM)
+monopoly // Monopoly (JPM)
+monopolya // Monopoly (JPM)
+
+//@source:jpmsys5sw.cpp
+j5ar80 // Around The World In Eighty Days (JPM)
+j5ar80a //
+j5ar80b //
+j5ar80c //
+j5ar80cl // Around The World Club (JPM)
+j5ar80cla //
+j5ar80clb //
+j5ar80clc //
+j5ar80d //
+j5buc // Buccaneer (JPM)
+j5cir // Circus (JPM)
+j5cira //
+j5cirb //
+j5circ //
+j5cird //
+j5cire //
+j5clbnud // Club Nudger (JPM)
+j5clbnuda //
+j5daycls // Daytona Classic (JPM)
+j5dayclsa //
+j5daytn // Daytona (JPM)
+j5daytna //
+j5dirty // Dirty Dozen (JPM)
+j5dirtya //
+j5dirtyb //
+j5dirtyc //
+j5fair // Fairground
+j5faira //
+j5fairb //
+j5fairc //
+j5faird //
+j5faire //
+j5fairf //
+j5fairg //
+j5fairgd // Fairground Attraction Club (JPM)
+j5fairgda //
+j5fairgdb //
+j5fairgdc //
+j5fairgdd //
+j5fairgde //
+j5fairh //
+j5fairi //
+j5fairj //
+j5fairk //
+j5fairl //
+j5fairm //
+j5fairn //
+j5fairo //
+j5fairp //
+j5fairq //
+j5fifth // 5th Avenue (JPM)
+j5filth // Filthy Rich (JPM)
+j5filtha //
+j5filthb //
+j5filthc //
+j5filthd //
+j5filthe //
+j5filthf //
+j5filthg //
+j5filthh //
+j5filthi //
+j5filthj //
+j5firebl // Fireball (JPM)
+j5firebla //
+j5fireblb //
+j5frmag // Fruit Magic (JPM)
+j5goldbr // Golden Bars (JPM)
+j5hagar // Hagar (JPM)
+j5hagara //
+j5hagarb //
+j5hagarc //
+j5hagard //
+j5hagare //
+j5hagarf //
+j5hagarg //
+j5hagarh //
+j5hagari //
+j5hagarj //
+j5hagsho // Hagar Showcase (JPM)
+j5hagshoa //
+j5hagshob //
+j5hagshoc //
+j5hilos // Hi Lo Silver (JPM)
+j5holly // Hollywood Nights (JPM)
+j5hollya //
+j5hollyb //
+j5hollyc //
+j5hollyd //
+j5hollye //
+j5hotdog // Hot Dogs (JPM),
+j5hotdoga //
+j5indsum // Indian Summer (JPM)
+j5intr // Intrigue (JPM)
+j5intra //
+j5intrb //
+j5intrc //
+j5jokgld // Jokers Gold (JPM)
+j5jokglda //
+j5jokgldb //
+j5jokgldc //
+j5jokgldd //
+j5jokglde //
+j5jokgldf //
+j5jokgldg //
+j5jokgldh //
+j5movie // Movie Magic Club (Crystal?)
+j5nite // Nite Club (JPM)
+j5nitea //
+j5nudfic // Nudge Fiction (JPM)
+j5palm // Palm Springs (JPM)
+j5palma //
+j5phnx // Phoenix (JPM)
+j5phnxa //
+j5popeye // Popeye (JPM)
+j5popeyea //
+j5popeyeb //
+j5popeyec //
+j5popeyed //
+j5popeyee //
+j5popeyef //
+j5popeyeg //
+j5popeyeh //
+j5popeyei //
+j5popprz // Prize Popeye Vending (JPM)
+j5popprza //
+j5popth // Popeye's Treasure Hunt (JPM)
+j5poptha //
+j5popthb //
+j5reelgh // Reel Ghost (JPM)
+j5revo // Revolver (JPM)
+j5revoa //
+j5roul // Roulette (JPM)
+j5roulcl // Roulette Club (JPM)
+j5roulcla //
+j5roulclb //
+j5roulclc //
+j5sizl // Sizzling (JPM)
+j5slvree // Silver Reels (JPM)
+j5slvreea //
+j5slvstr // Silver Streak (JPM), set 1
+j5slvstra //
+j5slvstrb //
+j5street // Streetwise (JPM)
+j5sup4 // Super 4 (JPM)
+j5supbar // Super Bars (JPM)
+j5supbara //
+j5suphi // Super Hi-Lo (JPM)
+j5swop // Swop A Fruit Club (JPM)
+j5td // Tumbling Dice (JPM)
+j5term // Terminator (JPM)
+j5topshp // Top Of The Shop Club (JPM)
+j5trail // Trailblazer Club (JPM)
+j5traila //
+j5trailb //
+j5tst1 // JPM System 5 Test Set (JPM)
+j5tst2 //
+j5tstal // JPM System 5 Alpha Display Test Utility (JPM)
+j5uj // Union Jackpot (JPM)
+j5uja //
+j5ujb //
+j5wsc // Wall Street Club (JPM)
+j5wsca //
+
+//@source:jpmsys7.cpp
+j7bmagic // Black Magic (JPM)
+j7bullio // Bullionaire (Ace)
+j7cexprs // Cash Xpress (JPM)
+j7clbmag // Club Magic (Qps)
+j7crztrl // Crazy Trails (JPM)
+j7fantaz // Fantaztec (JPM)
+j7kerchn // Ker - Chinq (JPM)
+j7r2roll // Ready To Roll (JPM)
+j7razzma // Razzamataz (JPM)
+j7razzmaa //
+j7tubgld // Turbo Gold (JPM)
+j7wldwkd // Wild 'N' Wicked (JPM)
+
+//@source:jr100.cpp
+jr100 //
+jr100u //
+
+//@source:jr200.cpp
+jr200 //
+jr200u //
+
+//@source:jrpacman.cpp
+jrpacman // (c) 1983 Midway
+jrpacmanf // speedup hack
+
+//@source:jtc.cpp
+jtc //
+jtces23 //
+jtces40 //
+jtces88 //
+
+//@source:jubilee.cpp
+jubileep //
+
+//@source:juicebox.cpp
+juicebox //
+
+//@source:junior.cpp
+junior //
+
+//@source:junofrst.cpp
+junofrst // GX310 (c) 1983 Konami
+junofrstg // GX310 (c) 1983 Konami + Gottlieb license
+
+//@source:jupace.cpp
+jupace // Jupiter Ace
+
+//@source:jupiter.cpp
+jupiter2 //
+jupiter3 //
+
+//@source:jvh.cpp
+escape //
+movmastr //
+
+//@source:k1003.cpp
+k1003 //
+
+//@source:k28.cpp
+k28 // Tiger Electronics
+
+//@source:k8915.cpp
+k8915 //
+
+//@source:kaneko16.cpp
+bakubrkr // (c) 1992 Kaneko
+berlwall // (c) 1991 Kaneko
+berlwallk // (c) 1991 Kaneko (Korea, Inter license)
+berlwallt // (c) 1991 Kaneko
+blazeon // (c) 1992 Atlus
+bloodwar // (c) 1994 Kaneko
+bonkadv // (c) 1994 Kaneko
+brapboys // (c) 1992 Kaneko
+brapboysj // (c) 1992 Kaneko
+brapboysu // (c) 1992 Kaneko
+explbrkr // (c) 1992 Kaneko
+fjbuster // (c) 1992 Kaneko
+gtmr // (c) 1994 Kaneko
+gtmr2 // (c) 1995 Kaneko
+gtmr2a // (c) 1995 Kaneko
+gtmr2u // (c) 1995 Kaneko
+gtmra // (c) 1994 Kaneko
+gtmrb // (c) 1994 Kaneko
+gtmre // (c) 1994 Kaneko
+gtmro // (c) 1994 Kaneko
+gtmrusa // (c) 1994 Kaneko (US)
+mgcrystl // (c) 1991 Kaneko (World)
+mgcrystlj // (c) 1991 Kaneko + distributed by Atlus (Japan)
+mgcrystlo // (c) 1991 Kaneko (World)
+oedfight // (c) 1994 Kaneko
+packbang // (c) 1994 Kaneko (prototype)
+shogwarr // (c) 1992 Kaneko
+shogwarru // (c) 1992 Kaneko
+wingforc // (c) 1993 Atlus (Japan, prototype)
+
+//@source:kangaroo.cpp
+fnkyfish // (c) 1981 Sun Electronics
+kangaroo // (c) 1982 Sun Electronics
+kangarooa // 136008 (c) 1982 Atari
+kangaroob // (bootleg)
+
+//@source:karnov.cpp
+chelnov // (c) 1988 Data East USA (World)
+chelnovj // (c) 1988 Data East Corporation (Japan)
+chelnovjbl // bootleg
+chelnovjbla // bootleg
+chelnovu // (c) 1988 Data East USA (US)
+karnov // (c) 1987 Data East USA (US)
+karnova // (c) 1987 Data East USA (US)
+karnovj // (c) 1987 Data East Corporation (Japan)
+wndrplnt // (c) 1987 Data East Corporation (Japan)
+
+//@source:kas89.cpp
+kas89 // 1989, SFC S.R.L.
+
+//@source:kaypro.cpp
+kaypro10 // Kaypro 10
+kaypro2x // Kaypro 2 - 2/84
+kaypro4 // Kaypro 4 - 4/83
+kaypro4a // Kaypro 4 - 4/84
+kaypro4p88 // Kaypro 4 - 4/83 w/plus88 board installed
+kayproii // Kaypro II - 2/83
+omni2 // Omni II
+robie // Kaypro Robie
+
+//@source:kc.cpp
+kc85_2 // VEB KC 85/2
+kc85_3 // VEB KC 85/3
+kc85_4 // VEB KC 85/4
+kc85_5 // VEB KC 85/5
+
+//@source:kchamp.cpp
+karatedo // (c) 1984 Data East Corporation (Japan)
+karatevs // (c) 1984 Data East Corporation (Japan)
+kchamp // (c) 1984 Data East USA (US)
+kchampvs // (c) 1984 Data East USA (US)
+kchampvs2 // (c) 1984 Data East USA (US)
+
+//@source:kenseim.cpp
+kenseim // 18/04/1994 (c) 1994 Togo/Sigma (Japan) not listed on Capcom's site
+
+//@source:kickgoal.cpp
+actionhw // (c) 1995
+kickgoal // (c) 1995
+
+//@source:kim1.cpp
+kim1 // Commodore (MOS) KIM-1 1975
+
+//@source:kingdrby.cpp
+cowrace // (c) 20?? hack
+kingdrbb // (c) 1986 hack
+kingdrbb2 // (c) 198? hack
+kingdrby // (c) 1981 Tatsumi
+
+//@source:kingobox.cpp
+kingofb // (c) 1985 Wood Place Inc.
+ringking // (c) 1985 Data East USA
+ringking2 // (c) 1985 Data East USA
+ringking3 // (c) 1985 Data East USA
+ringkingw // (c) 1985 Wood Place Inc.
+
+//@source:kingpin.cpp
+kingpin // (c) 1983 American Communications Laboratories Inc.
+maxideal // (c) 1983 American Communications Laboratories Inc.
+
+//@source:kinst.cpp
+kinst // (c) 1994 Rare
+kinst13 // (c) 1994 Rare
+kinst14 // (c) 1994 Rare
+kinst2 // (c) 1995 Rare
+kinst210 // (c) 1995 Rare
+kinst211 // (c) 1995 Rare
+kinst213 // (c) 1995 Rare
+kinst2k3 // (c) 1995 Rare
+kinst2k4 // (c) 1995 Rare
+kinstp // (c) 1994 Rare
+
+//@source:kissproto.cpp
+kissp //
+
+//@source:klax.cpp
+klax // 136075 (c) 1989
+klax2 // 136075 (c) 1989
+klax2bl // bootleg
+klax3 // 136075 (c) 1989
+klaxd // 136075 (c) 1989 (Germany)
+klaxj // 136075 (c) 1989 (Japan)
+
+//@source:kncljoe.cpp
+bcrusher // bootleg
+kncljoe // (c) 1985 Taito Corporation
+kncljoea // (c) 1985 Taito Corporation
+
+//@source:koftball.cpp
+koftball // (c) 1995 BMC
+
+//@source:koikoi.cpp
+koikoi // (c) 1983 Kiwako
+
+//@source:konamigq.cpp
+cryptklr // Crypt Killer (GQ420 UAA)
+
+//@source:konamigv.cpp
+btchamp // GV053, UAA01
+hyperath // GV021, Japan 1.00
+kdeadeye // GV054, UA01
+konamigv //
+lacrazyc // GV027, Asia 1.10
+nagano98 // GX720, EAA
+naganoj // GX720, JAA
+powyak96 // GV017, Japan 1.03
+simpbowl // GQ829, UAA
+susume // GV027, Japan 1.20
+tmosh // GQ673, JAA
+tmoshs // GE755, JAA
+tmoshsp // GE756, JAB
+tmoshspa // GE756, JAA
+weddingr // GX624, JAA
+
+//@source:konamigx.cpp
+crzcross // 1994.?? GX315 (Europe)
+daiskiss // 1996.03 GX535 (Japan)
+dragoona // 1995.?? GX417 (Asia)
+dragoonj // 1995.08 GX417 (Japan)
+fantjour // 1994.?? GX321 (Euro)
+fantjoura // 1994.?? GX321 (Asia)
+ggreats2 // 1994.03 GX218 (Japan)
+gokuparo // 1994.04 GX321 (Japan)
+konamigx //
+le2 // 1994.?? GX312 (Europe)
+le2j // 1994.06 GX312 (Japan)
+le2u // 1994.04 GX312 (US)
+opengolf // 1994.?? GX218 (Europe)
+opengolf2 // 1994.?? GX218 (Europe)
+puzldama // 1994.07 GX315 (Japan)
+racinfrc // 1994.?? GX250 (Europe)
+racinfrcu // 1994.03 GX250 (US)
+rungun2 // 1996.03 GX505 (US)
+rushhero // 1997.10 GX605 (US)
+salmndr2 // 1996.01 GX521 (Japan)
+salmndr2a // 1996.?? GX521 (Asia)
+sexyparo // 1996.02 GX533 (Japan)
+sexyparoa // 1996.02 GX533 (Asia)
+slamdnk2 // 1996.03 GX505 (Japan)
+soccerss // 1994.?? GX427 (Europe)
+soccerssa // 1994.?? GX427 (Asia)
+soccerssj // 1994.12 GX427 (Japan)
+soccerssja // 1994.12 GX427 (Japan)
+soccerssu // 1995.04 GX427 (US)
+tbyahhoo // 1995.04 GX424 (Japan)
+tkmmpzdm // 1995.12 GX515 (Japan)
+tokkae // 1996.10 GX615 (Japan)
+vsnetscr // 1996.?? GX627 (Europe)
+vsnetscra // 1996.?? GX627 (Asia)
+vsnetscreb // 1996.?? GX627 (Europe)
+vsnetscrj // 1996.12 GX627 (Japan)
+vsnetscru // 1996.?? GX627 (US)
+winspike // 1997.?? GX705 (Europe)
+winspikej // 1997.07 GX705 (Japan)
+
+//@source:konamim2.cpp
+3do_m2 //
+btltryst // GX636 (c)1998
+evilngt // GX810 (c)1998
+evilngte // GX810 (c)1998
+heatof11 // GX703 (c)1998
+hellngt // GX810 (c)1998
+polystar // GX623 (c)1997
+totlvica // GX639 (c)1997
+totlvice // GX639 (c)1997
+totlvicj // GX639 (c)1997
+totlvicu // GX639 (c)1997
+
+//@source:konendev.cpp
+aadvent // African Adventure
+dragnfly // Dragonfly
+enchlamp // Enchanted Lamp
+gypmagic // Gypsy Magic
+incanp // Incan P
+jestmagi // Jester Magic
+konzero // Zero
+luckfoun // Lucky Fountain
+mohicans // Mohican Sun
+monshow // Mon Show
+romanl // Roman L
+safemon // Safe Money
+showqn // Show Queen
+spiceup // Spice It Up
+sultanw // Sultan W
+whiterus // White Russia
+
+//@source:konin.cpp
+konin //
+
+//@source:kontest.cpp
+kontest // GX800 (c) 198? (Japan)
+
+//@source:kopunch.cpp
+kopunch // 834-0103 (c) 1981 Sega
+
+//@source:kramermc.cpp
+kramermc // 1987 Kramer MC
+
+//@source:ksayakyu.cpp
+ksayakyu // ??? (c) 1985 Taito Corporation
+
+//@source:ksys573.cpp
+bassang2 // 1998 - Bass Angler 2 (GE865 VER. JAA)
+bassangl // 1998 - Bass Angler (GE765 VER. JAA)
+cr589fw // 1999 - CR-589 Firmware (700B04)
+cr589fwa // 1999 - CR-589 Firmware (700A04)
+darkhleg // 1998 - Dark Horse Legend (GX706 VER. JAA)
+ddr2m // 1999 - Dance Dance Revolution 2nd Mix (GN895 VER. JAA)
+ddr2mc // 1999 - Dance Dance Revolution 2nd Mix with beatmaniaIIDX CLUB VERSiON (GE896 VER. JAA)
+ddr2mc2 // 1999 - Dance Dance Revolution 2nd Mix with beatmaniaIIDX substream CLUB VERSiON 2 (GE984 VER. JAA)
+ddr2ml // 1999 - Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAB)
+ddr2mla // 1999 - Dance Dance Revolution 2nd Mix - Link Ver (GE885 VER. JAA)
+ddr3ma // 1999 - Dance Dance Revolution 3rd Mix (GN887 VER. AAA)
+ddr3mj // 1999 - Dance Dance Revolution 3rd Mix (GN887 VER. JAA)
+ddr3mk // 2000 - Dance Dance Revolution 3rd Mix - Ver.Korea2 (GN887 VER. KBA)
+ddr3mka // 2000 - Dance Dance Revolution 3rd Mix - Ver.Korea (GN887 VER. KAA)
+ddr3mp // 2000 - Dance Dance Revolution 3rd Mix Plus (G*A22 VER. JAA)
+ddr4m // 2000 - Dance Dance Revolution 4th Mix (G*A33 VER. AAA)
+ddr4mj // 2000 - Dance Dance Revolution 4th Mix (G*A33 VER. JAA)
+ddr4mp // 2000 - Dance Dance Revolution 4th Mix Plus (G*A34 VER. JAA)
+ddr4mps // 2000 - Dance Dance Revolution 4th Mix Plus Solo (G*A34 VER. JBA)
+ddr4ms // 2000 - Dance Dance Revolution Solo 4th Mix (G*A33 VER. ABA)
+ddr4msj // 2000 - Dance Dance Revolution Solo 4th Mix (G*A33 VER. JBA)
+ddr5m // 2001 - Dance Dance Revolution 5th Mix (G*A27 VER. JAA)
+ddra // 1999 - Dance Dance Revolution (GN845 VER. AAA)
+ddrbocd // 1999 - Dance Dance Revolution Best of Cool Dancers (GE892 VER. JAA)
+ddrextrm // 2002 - Dance Dance Revolution Extreme (G*C36 VER. JAA)
+ddrj // 1998 - Dance Dance Revolution - Internet Ranking Ver (GC845 VER. JBA)
+ddrja // 1998 - Dance Dance Revolution (GC845 VER. JAA)
+ddrjb // 1998 - Dance Dance Revolution (GC845 VER. JAB)
+ddrmax // 2001 - DDR Max - Dance Dance Revolution 6th Mix (G*B19 VER. JAA)
+ddrmax2 // 2002 - DDR Max 2 - Dance Dance Revolution 7th Mix (G*B20 VER. JAA)
+ddrs2k // 1999 - Dance Dance Revolution Solo 2000 (GC905 VER. AAA)
+ddrs2kj // 1999 - Dance Dance Revolution Solo 2000 (GC905 VER. JAA)
+ddrsbm // 1999 - Dance Dance Revolution Solo Bass Mix (GQ894 VER. JAA)
+ddru // 1999 - Dance Dance Revolution (GN845 VER. UAA)
+ddrusa // 2000 - Dance Dance Revolution USA (G*A44 VER. UAA)
+dmx // 2000 - Dance Maniax (G*874 VER. JAA)
+dmx2m // 2000 - Dance Maniax 2nd Mix (G*A39 VER. JAA)
+dmx2majp // 2001 - Dance Maniax 2nd Mix Append J-Paradise (G*A38 VER. JAA
+dncfrks // 2000 - Dance Freaks (G*874 VER. KAA)
+drmn // 1999 - DrumMania (GQ881 VER. JAD)
+drmn10m // 2004 - DrumMania 10th Mix (G*D40 VER. JAA)
+drmn2m // 1999 - DrumMania 2nd Mix (GE912 VER. JAB)
+drmn2mpu // 1999 - DrumMania 2nd Mix Session Power Up Kit (GE912 VER. JAB)
+drmn3m // 2000 - DrumMania 3rd Mix (G*A23 VER. JAA)
+drmn4m // 2000 - DrumMania 4th Mix (G*A25 VER. JAA)
+drmn5m // 2001 - DrumMania 5th Mix (G*B05 VER. JAA)
+drmn6m // 2001 - DrumMania 6th Mix (G*B16 VER. JAA)
+drmn7m // 2002 - DrumMania 7th Mix power-up ver. (G*C07 VER. JBA)
+drmn7ma // 2002 - DrumMania 7th Mix (G*C07 VER. JAA)
+drmn8m // 2003 - DrumMania 8th Mix (G*C38 VER. JAA)
+drmn9m // 2003 - DrumMania 9th Mix (G*D09 VER. JAA)
+dsem // 2000 - Dancing Stage Euro Mix (G*936 VER. EAA)
+dsem2 // 2002 - Dancing Stage Euro Mix 2 (G*C23 VER. EAA)
+dsfdct // 1999 - Dancing Stage featuring Dreams Come True (GC910 VER. JCA)
+dsfdcta // 1999 - Dancing Stage featuring Dreams Come True (GC910 VER. JAA)
+dsfdr // 2000 - Dancing Stage Featuring Disney's Rave (GCA37JAA)
+dsftkd // 1999 - Dancing Stage featuring TRUE KiSS DESTiNATiON (G*884 VER. JAA)
+dstage // 1999 - Dancing Stage - Internet Ranking Ver (GC845 VER. EBA)
+dstagea // 1999 - Dancing Stage (GN845 VER. EAA)
+fbait2bc // 1998 - Fisherman's Bait 2 - A Bass Challenge (GE865 VER. UAB)
+fbaitbc // 1998 - Fisherman's Bait - A Bass Challenge (GE765 VER. UAB)
+fbaitmc // 1999 - Fisherman's Bait - Marlin Challenge (GX889 VER. EA)
+fbaitmca // 1999 - Fisherman's Bait - Marlin Challenge (GX889 VER. AA)
+fbaitmcj // 1999 - Fisherman's Bait - Marlin Challenge (GX889 VER. JA)
+fbaitmcu // 1999 - Fisherman's Bait - Marlin Challenge (GX889 VER. UA)
+fghtmn // 2000 - Fighting Mania (QG918 VER. EAA)
+fghtmna // 2000 - Fighting Mania (QG918 VER. AAA)
+fghtmnk // 2000 - Fighting Mania (QG918 VER. KAA)
+fghtmnu // 2000 - Fighting Mania (QG918 VER. IAA)
+gchgchmp // 1999 - Gachaga Champ (GE877 VER. JAB)
+gtfrk10m // 2003 - Guitar Freaks 10th Mix (G*D10 VER. JAB)
+gtfrk10ma // 2003 - Guitar Freaks 10th Mix (G*D10 VER. JAA)
+gtfrk10mb // 2003 - Guitar Freaks 10th Mix eAmusement (G*D10 VER. JBA)
+gtfrk11m // 2004 - Guitar Freaks 11th Mix (G*D39 VER. JAA)
+gtfrk3ma // 2000 - Guitar Freaks 3rd Mix (GE949 VER. JAB)
+gtfrk3mb // 2000 - Guitar Freaks 3rd Mix - security cassette versionup (949JAZ02)
+gtrfrk2m // 1999 - Guitar Freaks 2nd Mix Ver 1.01 (GQ883 VER. JAD)
+gtrfrk3m // 2000 - Guitar Freaks 3rd Mix (GE949 VER. JAC)
+gtrfrk4m // 2000 - Guitar Freaks 4th Mix (G*A24 VER. JAA)
+gtrfrk5m // 2001 - Guitar Freaks 5th Mix (G*A26 VER. JAA)
+gtrfrk6m // 2001 - Guitar Freaks 6th Mix (G*B06 VER. JAA)
+gtrfrk7m // 2001 - Guitar Freaks 7th Mix (G*B17 VER. JAA)
+gtrfrk8m // 2002 - Guitar Freaks 8th Mix power-up ver. (G*C08 VER. JBA)
+gtrfrk8ma // 2002 - Guitar Freaks 8th Mix (G*C08 VER. JAA)
+gtrfrk9m // 2003 - Guitar Freaks 9th Mix (G*C39 VER. JAA)
+gtrfrks // 1999 - Guitar Freaks (GQ886 VER. EAC)
+gtrfrksa // 1999 - Guitar Freaks (GQ886 VER. AAC)
+gtrfrksj // 1999 - Guitar Freaks (GQ886 VER. JAC)
+gtrfrksu // 1999 - Guitar Freaks (GQ886 VER. UAC)
+gunmania // 2000 - GunMania (GL906 VER. JAA)
+hndlchmp // 1997 - Handle Champ (GQ710 VER. JAA)
+hypbbc2p // 1999 - Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. JAA)
+hypbbc2pk // 1999 - Hyper Bishi Bashi Champ - 2 Player (GX908 1999/08/24 VER. KAA)
+hyperbbc // 1998 - Hyper Bishi Bashi (GQ876 VER. EAA)
+hyperbbca // 1998 - Hyper Bishi Bashi (GQ876 VER. AAA)
+konam80a // 1998 - Konami 80's AC Special (GC826 VER. AAA)
+konam80j // 1998 - Konami 80's Gallery (GC826 VER. JAA)
+konam80k // 1998 - Konami 80's AC Special (GC826 VER. KAA)
+konam80s // 1998 - Konami 80's AC Special (GC826 VER. EAA)
+konam80u // 1998 - Konami 80's AC Special (GC826 VER. UAA)
+mamboagg // 2001 - Mambo A Go-Go (GQA40 VER. JAB)
+mamboagga // 2001 - Mambo A Go-Go e-Amusement (GQA40 VER. JRB)
+mrtlbeat // 2002 - Martial Beat (Martial Beat (G*B47 VER. JBA)
+pcnfrk3m // 2000 - Percussion Freaks 3rd Mix (G*A23 VER. KAA)
+pnchmn // 2000 - Punch Mania: Hokuto No Ken (GQ918 VER. JAB)
+pnchmn2 // 2000 - Punch Mania 2: Hokuto No Ken (GQA09 JAA)
+pnchmna // 2000 - Punch Mania: Hokuto No Ken (GQ918 VER. JAB, ALT CD)
+powyakex // 1998 - Jikkyou Powerful Pro Yakyuu EX (GX802 VER. JAB)
+salarymc // 2000 - Salary Man Champ (G*A18 VER. JAA)
+stepchmp // 1999 - Step Champ (GE930 VER. JA)
+sys573 //
+
+//@source:kungfur.cpp
+kungfur // (c) 1987
+
+//@source:kurukuru.cpp
+kurukuru // (c) 1990 Success / Taiyo Jidoki.
+ppj // (c) 199? Success / Taiyo Jidoki.
+
+//@source:kyocera.cpp
+kc85 //
+m10 //
+npc8300 //
+pc8201 //
+pc8201a //
+tandy102 //
+tandy200 //
+trsm100 //
+
+//@source:kyugo.cpp
+99lstwar // (c) 1985 Proma
+99lstwara // (c) 1985 Proma
+99lstwark // (c) 1985 Kyugo
+airwolf // (c) 1987 Kyugo
+airwolfa // (c) 1987 Kyugo
+buzzard // (c) 1984 Crux
+flashgal // (c) 1985 Sega
+flashgala // (c) 1985 Sega
+fx // bootleg
+gyrodine // (c) 1984 Crux
+gyrodinet // (c) 1984 Crux (Taito Corporation license)
+legend // no copyright notice [1986 Sega/Coreland] (Arcade TV Game List - P.104, Left, 14 from top)
+legendb // no copyright notice [1986 Sega/Coreland] (Arcade TV Game List - P.104, Left, 14 from top)
+repulse // (c) 1985 Sega
+skywolf // bootleg
+skywolf2 // bootleg
+skywolf3 // bootleg
+sonofphx // bootleg
+srdmissn // (c) 1986 Taito Corporation
+
+//@source:labyrunr.cpp
+labyrunr // GX771 (c) 1987 (Japan)
+labyrunrk // GX771 (c) 1987 (Japan)
+tricktrp // GX771 (c) 1987
+
+//@source:ladybug.cpp
+cavenger // 8106 (c) 1981
+dorodon // Falcon
+dorodon2 // Falcon
+ladybgb2 // bootleg
+ladybug // 8110 (c) 1981
+ladybugb // bootleg
+snapjack // ???? (c)
+sraider // ???? (c) 1982 Universal
+
+//@source:ladyfrog.cpp
+ladyfrog // (c) 1990 Mondial Games
+toucheme //
+touchemea //
+
+//@source:laser3k.cpp
+las3000 // 1983 Laser 3000
+
+//@source:laserbas.cpp
+futflash // (c) 1981 HOEI (Arcade TV Game List - P.96, Right, 18 from top)
+laserbas // (c) 1981 Amstar/HOEI
+laserbasa // (c) 1981 Amstar/HOEI
+
+//@source:laserbat.cpp
+catnmous // (c) 1982
+catnmousa // (c) 1982
+laserbat // (c) 1981
+lazarian // (c) 1981
+
+//@source:lasso.cpp
+chameleo // (c) 1983 Jaleco
+lasso // 'WM' (c) 1982
+photof // (c) 1984 Jaleco / Casio
+pinbo // (c) 1984 Jaleco
+pinboa // (c) 1984 Jaleco
+pinbos // (c) 1985 Strike
+wwjgtin // (c) 1984 Jaleco / Casio
+
+//@source:lastbank.cpp
+lastbank // (c) 1994 Excellent System
+
+//@source:lastduel.cpp
+lastduel // 7/1988 (c) 1988 (US)
+lastduelb // bootleg
+lastduelj // 7/1988 (c) 1988 (Japan)
+lastduelo // 7/1988 (c) 1988 (US)
+leds2011 // 1988 (c) 1988 (World)
+leds2011u // 1988 (c) 1988 (US)
+ledstorm // 1988 (c) 1988 (US)
+madgear // 2/1989 (c) 1989 (US)
+madgearj // 2/1989 (c) 1989 (Japan)
+
+//@source:lastfght.cpp
+lastfght // (c) 2000 Subsino
+
+//@source:laz_aftrshok.cpp
+aftrshok // Lazer-tron After Shock
+aftrshoka //
+
+//@source:laz_awetoss.cpp
+awetoss // Lazer-tron Awesome Toss'em
+
+//@source:laz_ribrac.cpp
+ribrac // Lazer-tron Ribbit Racing
+
+//@source:lazercmd.cpp
+bbonk // [1976?]
+lazercmd // [1976?]
+medlanes // [1977?]
+
+//@source:lbeach.cpp
+lbeach // (c) 1979 Olympia / Seletron
+
+//@source:lc80.cpp
+lc80 //
+lc80_2 //
+sc80 //
+
+//@source:lcmate2.cpp
+lcmate2 //
+
+//@source:leapster.cpp
+leapster //
+leapstertv //
+
+//@source:legionna.cpp
+cupsoc // (c) 1992 Seibu
+cupsoca // (c) 1992 Seibu
+cupsocb // (c) 1992 Seibu
+cupsocs // (c) 1992 Seibu
+cupsocs2 // (c) 1992 Seibu
+cupsocsb // bootleg
+cupsocsb2 // bootleg
+cupsocsb3 // bootleg
+denjinmk // (c) 199? Banpresto
+godzilla // (c) 1993 Banpresto
+grainbow // (c) 1993 Banpresto
+heatbrl // (c) 1992 Tad (World version 3)
+heatbrl2 // (c) 1992 Tad (World version 2)
+heatbrle // (c) 1992 Tad (Electronic Devices license)
+heatbrlo // (c) 1992 Tad (World)
+heatbrlu // (c) 1992 Tad (US)
+legionna // (c) 1992 Tad (World)
+legionnaj // (c) 1992 Tad (Japan)
+legionnau // (c) 1992 Tad + Fabtek license (US)
+olysoc92 // (c) 1992 Seibu
+olysoc92a // (c) 1992 Seibu
+olysoc92b // (c) 1992 Seibu
+
+//@source:leland.cpp
+aafb // (c) 1989 Leland
+aafbb // (c) 1989 Leland
+aafbc // (c) 1989 Leland
+aafbd2p // (c) 1989 Leland
+alleymas // (c) 1986 Cinematronics
+basebal2 // (c) 1987 Cinematronics
+cerberus // (c) 1985 Cinematronics
+dangerz // (c) 1986 Cinematronics USA
+dblplay // (c) 1987 Tradewest / Leland
+mayhem // (c) 1985 Cinematronics
+offroad // (c) 1989 Leland
+offroadt // (c) 1989 Leland
+offroadt2p // (c) 1989 Leland
+pigout // (c) 1990 Leland
+pigouta // (c) 1990 Leland
+powrplay // (c) 1985 Cinematronics
+quarterb // (c) 1987 Leland
+quarterba // (c) 1987 Leland
+redlin2p // (c) 1987 Cinematronics + Tradewest license
+strkzone // (c) 1988 Leland
+teamqb // (c) 1988 Leland
+teamqb2 // (c) 1988 Leland
+upyoural // (c) 1987 Cinematronics
+viper // (c) 1988 Leland
+wseries // (c) 1985 Cinematronics
+
+//@source:lemmings.cpp
+lemmings // prototype (c) 1991 Data East USA (US)
+
+//@source:lethal.cpp
+lethalen // GX191 (c) 1992
+lethaleneaa // GX191 (c) 1992
+lethaleneab // GX191 (c) 1992
+lethaleneae // GX191 (c) 1992
+lethalenj // GX191 (c) 1992
+lethalenua // GX191 (c) 1992
+lethalenub // GX191 (c) 1992
+lethalenux // GX191 (c) 1992
+
+//@source:lethalj.cpp
+cclownz // (c) 1999 LAI Games
+cfarm // (c) 1999 LAI Games
+eggventr // (c) 1997 The Game Room
+eggventr2 // (c) 1997 The Game Room
+eggventr7 // (c) 1997 The Game Room
+eggventr8 // (c) 1997 The Game Room
+eggventra // (c) 1997 The Game Room (Allied Leisure license)
+eggventrd // (c) 1997 The Game Room
+franticf // (c) 1996 The Game Room
+lethalj // (c) 1996 The Game Room
+ripribit // (c) 1997 LAI Games
+ripribita // (c) 1997 LAI Games
+
+//@source:lft.cpp
+lft1230 //
+lft1510 //
+
+//@source:lg-dvd.cpp
+lggp40 //
+
+//@source:lgp.cpp
+lgp // (c) 1983 Taito
+lgpalt // (c) 1983 Taito
+
+//@source:liberate.cpp
+boomrang // (c) 1983
+boomranga // (c) 1983
+dualaslt // (c) 1984 Data East USA (US)
+kamikcab // (c) 1984
+liberate // (c) 1984 Data East Corporation
+liberateb // bootleg
+prosoccr // (c) 1983
+prosport // (c) 1983
+prosporta // (c) 1983
+yellowcbb // bootleg
+yellowcbj // (c) 1984
+
+//@source:liberatr.cpp
+liberatr // 136012 (c) 1982
+liberatr2 // 136012 (c) 1982
+
+//@source:limenko.cpp
+dynabomb // (c) 2000 Limenko
+legendoh // (c) 2000 Limenko
+sb2003 // (c) 2003 Limenko
+sb2003a // (c) 2003 Limenko
+spotty // (c) 2001 Prince Co.
+
+//@source:lindbergh.cpp
+2spicy //
+abclimax //
+ghostsev //
+hotd4 //
+hotdex //
+hummerxt //
+initiad4 //
+initiad4c //
+lbvbiosu //
+letsgoju //
+lindbios //
+outr2sdx //
+primevah //
+psmash3 //
+rambo //
+segartv //
+vf5 //
+vtennis3 //
+
+//@source:lisa.cpp
+lisa // 1983 Apple Lisa
+lisa2 // 1984 Apple Lisa 2
+lisa210 // 1984 Apple Lisa 2/10
+macxl // 1985 Apple Macintosh XL
+
+//@source:littlerb.cpp
+littlerb // (c) 1993 TCH
+
+//@source:lkage.cpp
+bygone // A53 (c) 1985 Taito Corporation - prototype ?
+lkage // A54 (c) 1984 Taito Corporation
+lkageb // bootleg
+lkageb2 // bootleg
+lkageb3 // bootleg
+lkageo // A54 (c) 1984 Taito Corporation
+lkageoo // A54 (c) 1984 Taito Corporation
+
+//@source:llc.cpp
+llc1 //
+llc2 //
+
+//@source:lockon.cpp
+lockon // (c) 1986 Tatsumi
+lockonc // (c) 1986 Tatsumi
+
+//@source:lola8a.cpp
+lola8a //
+
+//@source:looping.cpp
+looping // (c) 1982 Video Games GmbH
+loopingv // (c) 1982 Video Games GmbH (Venture Line license)
+loopingva // (c) 1982 Video Games GmbH (Venture Line license)
+skybump // (c) 1982 Venture Line
+
+//@source:lordgun.cpp
+aliencha // (c) 1994
+alienchac // (c) 1994
+lordgun // (c) 1994
+
+//@source:lsasquad.cpp
+daikaiju // A74 (c) 1986 Taito
+lsasquad // A64 (c) 1986 Taito Corporation / Taito America (dip switch)
+storming // A64 (c) 1986 Taito Corporation
+
+//@source:ltcasino.cpp
+ltcasinn // (c) 1984 Digital Controls Inc
+ltcasino // (c) 1982 Digital Controls Inc
+mv4in1 // (c) 1983 Entertainment Enterprises
+
+//@source:ltd.cpp
+alcapone //
+atla_ltd //
+bhol_ltd //
+columbia //
+cowboy //
+pecmen //
+zephy //
+
+//@source:luckgrln.cpp
+7smash // (c) 1993 Sovic
+luckgrln // (c) 1991 Wing Co. Ltd
+
+//@source:lucky74.cpp
+excitbj // (c) 1992 Wing Co. Ltd
+lucky74 // (c) 1988 Wing Co. Ltd
+lucky74a // (c) 1988 Wing Co. Ltd
+lucky74b // (c) 1988 Wing Co. Ltd
+
+//@source:lvcards.cpp
+lvcards // (c) 1985 Tehkan
+lvpoker // ???? - (c) 1985 Tehkan
+ponttehk // 6011 - (c) 1985 Tehkan
+
+//@source:lviv.cpp
+lviv // Lviv/L'vov
+
+//@source:lwings.cpp
+avengers // 2/1987 (c) 1987 (US)
+avengers2 // 2/1987 (c) 1987 (US)
+buraiken // 2/1987 (c) 1987 (Japan)
+buraikenb // 2/1987 (c) 1987 (Japan)
+lwings // 11/1986 (c) 1986
+lwings2 // 11/1986 (c) 1986
+lwingsb // 11/1986 (c) 1986 (bootleg)
+lwingsj // 11/1986 (c) 1986
+sectionz // 12/1985 (c) 1985
+sectionza // 12/1985 (c) 1985
+trojan // 4/1986 (c) 1986 (US)
+trojana // 4/1986 (c) 1986 (US)
+trojanb // bootleg
+trojanj // 4/1986 (c) 1986 (Japan)
+trojanr // 4/1986 (c) 1986 + Romstar
+
+//@source:lynx.cpp
+lynx // Atari Lynx Handheld
+
+//@source:m10.cpp
+andromed // (c) 1979
+greenber // Irem
+headoni // Irem no copyright notice (1979 - Arcade TV Game List - P.98, Left, 7 from top)
+ipminvad // M10 no copyright notice (Arcade TV Game List - P.67, Left, 26 from top)
+ipminvad1 // M10 incomplete dump
+skychut // Irem [1980]
+spacbeam // M15 no copyright notice
+
+//@source:m107.cpp
+airass // (c) 1993 Irem (World)
+dsoccr94 // (c) 1994 Irem (Data East Corporation license)
+dsoccr94k //
+firebarr // (c) 1993 Irem (Japan)
+kftgoal // (c) 1994 Jaleco
+wpksoc // (c) 1995 Jaleco
+
+//@source:m14.cpp
+ptrmj // M14 (c) 1979
+
+//@source:m20.cpp
+m20 //
+m40 //
+
+//@source:m24.cpp
+m24 //
+m240 //
+
+//@source:m5.cpp
+m5 //
+m5p //
+m5p_brno //
+
+//@source:m52.cpp
+alpha1v // Vision Electronics
+mpatrol // M52 (c) 1982
+mpatrolw // M52 (c) 1982 + Williams license
+mranger // bootleg
+
+//@source:m57.cpp
+newtangl // (c) 1983
+troangel // (c) 1983
+
+//@source:m58.cpp
+10yard // (c) 1983
+10yard85 // (c) 1985
+10yardj // (c) 1983
+vs10yard // (c) 1983/1984
+vs10yardj // (c) 1983/1984
+vs10yardu // (c) 1983/1984
+
+//@source:m62.cpp
+battroad // (c) 1984
+horizon // (c) 1985
+kidniki // (c) 1986 + Data East USA license
+kidnikiu // (c) 1986 + Data East USA license
+kungfub // bootleg
+kungfub2 // bootleg
+kungfum // (c) 1984
+kungfumd // (c) 1984 + Data East license
+ldrun // (c) 1984 licensed from Broderbund
+ldrun2 // (c) 1984 licensed from Broderbund
+ldrun3 // (c) 1985 licensed from Broderbund
+ldrun3j // (c) 1985 licensed from Broderbund
+ldrun4 // (c) 1986 licensed from Broderbund
+ldruna // (c) 1984 licensed from Broderbund
+lithero // bootleg
+lotlot // (c) 1985 licensed from Tokuma Shoten
+spartanx // (c) 1984 (Japan)
+spelunk2 // (c) 1986 licensed from Broderbund
+spelunkr // (c) 1985 licensed from Broderbund
+spelunkrj // (c) 1985 licensed from Broderbund
+yanchamr // (c) 1986 (Japan)
+youjyudn // (c) 1986 (Japan)
+
+//@source:m63.cpp
+atomboy // M63 (c) 1985 Irem + Memetron license
+atomboya // M63 (c) 1985 Irem + Memetron license
+fghtbskt // (c) 1984 Paradise Co. Ltd.
+wilytowr // M63 (c) 1984
+
+//@source:m6805evs.cpp
+m6805evs //
+
+//@source:m72.cpp
+airduel // (c) 1990 (World)
+airduelm72 // (c) 1990 (Japan)
+bchopper // (c) 1987
+cosmccop // (c) 1991 (World)
+dbreed // (c) 1989
+dbreedm72 // (c) 1989
+dkgensan // (c) 1990 (Japan)
+dkgensanm72 // (c) 1990 (Japan)
+gallop // (c) 1991 (Japan)
+hharry // (c) 1990 (World)
+hharryu // (c) 1990 Irem America (US)
+imgfight // (c) 1988 (World)
+imgfightj // (c) 1988 (Japan)
+kengo // (c) 1991 (Japan)
+kengoa // (c) 1991 (Japan)
+loht // (c) 1989
+lohtb // (c) 1989 (bootleg)
+lohtb2 // (c) 1989 (bootleg)
+lohtj // (c) 1989 (Japan)
+ltswords // (c) 1991 (World)
+majtitle // (c) 1990 (World)
+majtitlej // (c) 1990 (Japan)
+mrheli // (c) 1987 (Japan)
+nspirit // (c) 1988
+nspiritj // (c) 1988 (Japan)
+poundfor // (c) 1990 (World)
+poundforj // (c) 1990 (Japan)
+poundforu // (c) 1990 Irem America (US)
+rtype // (c) 1987 (Japan)
+rtype2 // (c) 1989
+rtype2j // (c) 1989 (Japan)
+rtype2jc // (c) 1989 (Japan)
+rtype2m82b // bootleg
+rtypeb // bootleg
+rtypej // (c) 1987 (Japan)
+rtypejp // (c) 1987 (Japan)
+rtypem82b // bootleg
+rtypeu // (c) 1987 + Nintendo USA license (US)
+xmultipl // (c) 1989 (Japan)
+xmultiplm72 // (c) 1989 (Japan)
+
+//@source:m79152pc.cpp
+m79152pc //
+
+//@source:m79amb.cpp
+m79amb // (c) 1977 RamTek
+
+//@source:m90.cpp
+atompunk // (c) 1991 Irem America (licensed from Hudson Soft)
+bbmanw // (c) 1992 Irem (World)
+bbmanwj // (c) 1992 Irem (Japan)
+bbmanwja // (c) 1992 Irem (Japan) - revised sound hardware
+bomblord // bootleg
+bombrman // (c) 1991 Irem (Japan)
+dynablst // (c) 1991 Irem (World)
+dynablstb // bootleg
+dynablstb2 // bootleg (alt)
+gussun // (c) 1993 Irem (Japan)
+hasamu // (c) 1991 Irem (Japan)
+matchit2 // (c) 1993 Tamtex
+newapunk // (c) 1992 Irem America (US)
+quizf1 // (c) 1992 Irem (Japan)
+riskchal // (c) 1993 Irem
+shisen2 // (c) 1993 Tamtex
+
+//@source:m92.cpp
+bmaster // (c) 1991 Irem
+crossbld // (c) 1991 Irem (Japan)
+dsoccr94j // (c) 1994 Irem (Japan)
+geostorm // (c) 1994 Irem (Japan)
+gunforc2 // (c) 1994 Irem
+gunforce // (c) 1991 Irem (World)
+gunforcej // (c) 1991 Irem (Japan)
+gunforceu // (c) 1991 Irem America (US)
+gunhohki // (c) 1992 Irem (Japan)
+hook // (c) 1992 Irem (World)
+hookj // (c) 1992 Irem (Japan)
+hooku // (c) 1992 Irem America (US)
+inthunt // (c) 1993 Irem (World)
+inthuntu // (c) 1993 Irem (US)
+kaiteids // (c) 1993 Irem (Japan)
+leaguemn // (c) 1993 Irem (Japan)
+lethalth // (c) 1991 Irem (World)
+majtitl2 // (c) 1992 Irem (World)
+majtitl2j // (c) 1992 Irem (Japan)
+mysticri // (c) 1992 Irem (World)
+mysticrib // bootleg?
+nbbatman // (c) 1993 Irem (World)
+nbbatman2bl // bootleg
+nbbatmanu // (c) 1993 Irem America (US)
+ppan // bootleg
+psoldier // (c) 1993 Irem (Japan)
+rtypeleo // (c) 1992 Irem (World)
+rtypeleoj // (c) 1992 Irem (Japan)
+skingame // (c) 1992 Irem America (US)
+skingame2 // (c) 1992 Irem America (US)
+ssoldier // (c) 1993 Irem America (US)
+thndblst // (c) 1991 Irem (Japan)
+uccops // (c) 1992 Irem (World)
+uccopsar // (c) 1992 Irem (World)
+uccopsj // (c) 1992 Irem (Japan)
+uccopsu // (c) 1992 Irem (US)
+
+//@source:mac.cpp
+mac128k // 1984 Apple Macintosh
+mac2fdhd // 1988 Apple Macintosh II (FDHD)
+mac512k // 1985 Apple Macintosh 512k
+mac512ke // 1986 Apple Macintosh 512ke
+maccclas // 1993 Apple Macintosh Color Classic
+macclas2 // 1991 Apple Macintosh Classic II
+macclasc // 1990 Apple Macintosh Classic
+macii // 1987 Apple Macintosh II
+maciici // 1989 Apple Macintosh IIci
+maciicx // 1989 Apple Macintosh IIcx
+maciifx // 1990 Apple Macintosh IIfx
+maciihmu // 1987 Apple Macintosh II (w/o 68851 MMU)
+maciisi // 1990 Apple Macintosh IIsi
+maciivi // 1993 Apple Macintosh IIvi
+maciivx // 1993 Apple Macintosh IIvx
+maciix // 1988 Apple Macintosh IIx
+maclc // 1990 Apple Macintosh LC
+maclc2 // 1991 Apple Macintosh LC II
+maclc3 // 1993 Apple Macintosh LC III
+maclc520 // 1993 Apple Macintosh LC 520
+macpb100 // 1991 Apple Macintosh PowerBook 100
+macpb140 // 1991 Apple Macintosh PowerBook 140
+macpb145 // 1992 Apple Macintosh PowerBook 145
+macpb145b // 1993 Apple Macintosh PowerBook 145B
+macpb160 // 1992 Apple Macintosh PowerBook 160
+macpb170 // 1991 Apple Macintosh PowerBook 170
+macpb180 // 1992 Apple Macintosh PowerBook 180
+macpb180c // 1992 Apple Macintosh PowerBook 180c
+macpd210 // 1992 Apple Macintosh PowerBook Duo 210
+macplus // 1986 Apple Macintosh Plus
+macprtb // 1989 Apple Macintosh Portable
+macqd700 // 1991 Apple Macintosh Quadra 700
+macse // 1987 Apple Macintosh SE
+macse30 // 1989 Apple Macintosh SE/30
+macsefd // 1988 Apple Macintosh SE (FDHD)
+pmac6100 // 1993 Apple Power Macintosh 6100
+unitron // 1985 Unitron
+
+//@source:macpci.cpp
+pippin //
+
+//@source:macrossp.cpp
+macrossp // (c) 1996 Banpresto
+quizmoon // (c) 1997 Banpresto
+
+//@source:macs.cpp
+cultname // (c) 1995 I'Max
+kisekaeh // (c) 1995 I'Max
+kisekaem // (c) 1995 I'Max
+mac2bios //
+macsbios //
+yujan // (C) 1999 Yubis
+yuka // (c) 1999 Yubis
+
+//@source:madalien.cpp
+madalien // (c) 1980
+madaliena // (c) 1980
+madalienb // (c) 1980
+
+//@source:madmotor.cpp
+madmotor // (c) [1989] Mitchell
+
+//@source:magic10.cpp
+hotslot // (c) 1996 ABM Electronics
+magic10 // (c) 1995 A.W.P. Games
+magic102 // (c) 1997 ABM Games
+magic10a // (c) 1995 A.W.P. Games
+magic10b // (c) 1995 A.W.P. Games
+magic10c // (c) 1995 A.W.P. Games
+mcolors // 1999 unknown
+musicsrt // (c) 1995 ABM Games
+sgsafari // (c) 1996 New Impeuropex Corp.
+suprpool // (c) 1997 ABM Games
+
+//@source:magicard.cpp
+hotslots // (c) 2002 Impera
+magicard // (c) 199? Impera
+magicarda // (c) 199? Impera
+magicardb // (c) 199? Impera
+magicarde // (c) 1994 Impera
+magicardj // (c) 1998 Impera
+magicle // (c) 1998 Impera
+
+//@source:magicfly.cpp
+7mezzo // 198? Unknown
+bchance // 198? Unknown
+magicfly // (c) 198? P&A GAMES
+
+//@source:magictg.cpp
+magictg // (c) 199? Acclaim
+magictga // (c) 199? Acclaim
+
+//@source:magmax.cpp
+magmax // (c) 1985
+
+//@source:magtouch.cpp
+magtouch // (c) 1995
+
+//@source:mainevt.cpp
+devstors // GX890 (c) 1988
+devstors2 // GX890 (c) 1988
+devstors3 // GX890 (c) 1988
+garuka // GX890 (c) 1988 (Japan)
+mainevt // GX799 (c) 1988
+mainevt2p // GX799 (c) 1988
+mainevto // GX799 (c) 1988
+ringohja // GX799 (c) 1988 (Japan)
+
+//@source:mainsnk.cpp
+canvas // A3008 (c) 1985
+mainsnk // (c) 1984
+
+//@source:majorpkr.cpp
+majorpkr // (c) 1994 PAL System.
+
+//@source:malzak.cpp
+malzak // (c) 1980? Kitronix
+malzak2 // (c) 1980? Kitronix
+
+//@source:manohman.cpp
+manohman // 199?, Merkur.
+
+//@source:mappy.cpp
+digdug2 // (c) 1985
+digdug2o // (c) 1985
+grobda // (c) 1984
+grobda2 // (c) 1984
+grobda3 // (c) 1984
+mappy // (c) 1983
+mappyj // (c) 1983
+motos // (c) 1985
+pacnchmp // (c) 1983
+pacnpal // (c) 1983
+pacnpal2 // (c) 1983
+phozon // (c) 1983
+phozons // (c) 1983 pcb manufactured by Sidam
+superpac // (c) 1982
+superpacm // (c) 1982 Midway
+todruaga // (c) 1984
+todruagao // (c) 1984
+todruagas // (c) 1984 pcb manufactured by Sidam
+
+//@source:marineb.cpp
+bcruzm12 // (c) 1983 Sigma Ent. Inc.
+changes // (c) 1982 Orca
+changesa // (c) 1982 Orca + Eastern Micro Electronics license
+hoccer // (c) 1983 Eastern Micro Electronics, Inc.
+hoccer2 // (c) 1983 Eastern Micro Electronics, Inc.
+hopprobo // (c) 1983 Sega
+looper // (c) 1982 Orca
+marineb // (c) 1982 Orca
+springer // (c) 1982 Orca
+wanted // (c) 1984 Sigma Ent. Inc.
+
+//@source:marinedt.cpp
+marinedt // MG (c) 1981 Taito Corporation
+
+//@source:mario.cpp
+dkong3abl //
+mario // (c) 1983 Nintendo of America
+mariobl // bootleg
+marioe // (c) 1983 Nintendo of America
+marioj // (c) 1983 Nintendo
+marioo // (c) 1983 Nintendo of America
+masao // bootleg
+
+//@source:markham.cpp
+markham // TVG14 (c) 1983 Sun Electronics
+
+//@source:marywu.cpp
+marywu //
+
+//@source:mastboy.cpp
+mastboy // (c) 1987 - No Ref on the PCB
+mastboyi // (c) 1987 - No Ref on the PCB
+mastboyia // (c) 1987 - No Ref on the PCB
+
+//@source:matmania.cpp
+excthour // TA-0015 (c) 1985 + Taito license
+maniach // TA-0017 (c) 1986 + Taito America license
+maniach2 // TA-0017 (c) 1986 + Taito America license
+matmania // TA-0015 (c) 1985 + Taito America license
+
+//@source:maxaflex.cpp
+maxaflex //
+mf_achas // (c) 1982 Exidy / First Star Software
+mf_bdash // (c) 1984 Exidy / First Star Software
+mf_brist // (c) 1983 Exidy / First Star Software
+mf_flip // (c) 1983 Exidy / First Star Software
+
+//@source:maygay1bsw.cpp
+m1albsq // Albert Square (Maygay)
+m1albsq1 //
+m1albsq1p //
+m1albsq2 //
+m1albsq3 //
+m1albsqp //
+m1alley // Alley Cat (Maygay)
+m1apollo // Apollo 9 (Maygay)
+m1apollo11 //
+m1apollo11b //
+m1apollo11p //
+m1apollo2 //
+m1apollo2p //
+m1apollo3 //
+m1apollo3p //
+m1apollo4 //
+m1apollo4o //
+m1apollo4p //
+m1apollo5 //
+m1apollo5p //
+m1apollo7 //
+m1apollo7p //
+m1apollo8 //
+m1apollo8p //
+m1apollo9 //
+m1apollo9p //
+m1apolloa //
+m1apolloao //
+m1apolloap //
+m1apolloh //
+m1apollop //
+m1atunk //
+m1bankbs // Bank Buster Club (Maygay)
+m1bankbso // Bank Buster Club (Maygay)
+m1bankbsp // Bank Buster Club (Maygay)
+m1bankrl // Bank Roll (Maygay)
+m1bankrl2p //
+m1bankrlp //
+m1bargn // Bar-gain (Maygay)
+m1bargnc // Casino Bar-gain (Maygay)
+m1bargncp //
+m1bargnp //
+m1bghou // Big Ghoulies (Gemini)
+m1bghoua //
+m1bghoub //
+m1bghouc //
+m1bghoud //
+m1bghoue //
+m1bghouf //
+m1bghoug //
+m1bigdel // Big Deal (Maygay)
+m1bignit // Mike Reid's Big Night Out (Maygay)
+m1bignita //
+m1bignitb //
+m1bignitc //
+m1blkhol // Black Hole (Maygay)
+m1bluemx // Blue Max (Maygay)
+m1bluemxp //
+m1bondi // Bondi Beach (Maygay)
+m1bondi1 //
+m1bondi1p //
+m1bondi2 //
+m1bondi2p //
+m1bondi2po //
+m1bondi3 //
+m1bondi4 //
+m1bondi4p //
+m1bondip //
+m1bountc // Bounty Hunter Club (Maygay)
+m1bountcp //
+m1calyps // Calypso (Maygay)
+m1calypsa //
+m1calypsb //
+m1casclb // Casino Club (Maygay)
+m1casclb1 //
+m1casclbp //
+m1casgcl // Casino Gambler Club (Maygay)
+m1casgclp //
+m1cashc // Cash Classic
+m1cashca //
+m1cashln // Cash Lines (Maygay)
+m1casroy // Casino Royale Club (Maygay)
+m1casroy1 //
+m1casroyp //
+m1chain // Chain Reaction (Maygay)
+m1cik // Cash Is King (Maygay)
+m1cik11 //
+m1cik11n //
+m1cik11np //
+m1cik11p //
+m1cik12 //
+m1cik21 //
+m1cik21p //
+m1cik31 //
+m1cik31p //
+m1cik41 //
+m1cik41p //
+m1cik51 //
+m1cik51o //
+m1cik51p //
+m1cikh //
+m1cikp //
+m1clbfvr // Club Fever (Maygay)
+m1clbfvrp //
+m1cluecb // Cluedo Club (Maygay)
+m1cluecb1 //
+m1cluecb1p //
+m1cluecb2 //
+m1cluecb2p //
+m1cluecbp //
+m1cluedo // Cluedo (Maygay)
+m1cluedo1 //
+m1cluedo1h //
+m1cluedo1p //
+m1cluedo3 //
+m1cluedo3h //
+m1cluedo3p //
+m1cluedo4 //
+m1cluedo4p //
+m1cluedo5 //
+m1cluedo5p //
+m1cluedob1 //
+m1cluedob1h //
+m1cluedob1p //
+m1cluedob2 // These are BwB builds
+m1cluedob2h //
+m1cluedob2p //
+m1cluedobi2 //
+m1cluedobi2p //
+m1cluedoi //
+m1cluedoip //
+m1cluedon //
+m1cluedonp //
+m1cluedop //
+m1cluesh // Super Cluedo Showcase (Maygay)
+m1cluesho //
+m1clueshop //
+m1clueshp //
+m1cluess // Cluedo Super Sleuth (Maygay)
+m1cluessa //
+m1cluessap //
+m1cluessb //
+m1cluessbp //
+m1cluessc //
+m1cluesscp //
+m1cluessd //
+m1cluessdp //
+m1cluesse //
+m1cluessep //
+m1cluessf //
+m1cluessfp //
+m1cluessg //
+m1cluessh //
+m1cluessi //
+m1cluessj //
+m1cluessk //
+m1cluessl //
+m1cluesslp //
+m1cluessm //
+m1cluessmp //
+m1cluessn //
+m1cluesso //
+m1cluessop //
+m1cluessp //
+m1cluessq //
+m1cluessqp //
+m1cluessr //
+m1cluessrp //
+m1cluesss //
+m1cluesssp //
+m1coderd //
+m1coderdp //
+m1coro // Coronation Street (Maygay)
+m1coro10h1 //
+m1coro10h2 //
+m1coro10h3 //
+m1coro11n //
+m1coro11np //
+m1coro12a //
+m1coro12g //
+m1coro12gp //
+m1coro12n //
+m1coro12np //
+m1coro21n //
+m1coro21np //
+m1coro21v //
+m1coro21vp //
+m1coro22n //
+m1coro30h //
+m1coro31 //
+m1coro31p //
+m1coro32g //
+m1coro32gh //
+m1coro32n //
+m1coro32np //
+m1coro81 //
+m1coro81p //
+m1corocb // Coronation Street Club (Maygay)
+m1corocb1 //
+m1corocb1p //
+m1corocbp //
+m1corop //
+m1cororr // Coronation Street - Rovers Return (Maygay)
+m1cororra //
+m1cororrb //
+m1cororrb1 //
+m1cororrbh //
+m1cororrbp //
+m1cororrc //
+m1cororrc1 //
+m1cororrc2 //
+m1cororrd //
+m1cororrdp //
+m1cororre //
+m1cororrf //
+m1cororrfp //
+m1cororrg //
+m1cororrgp //
+m1cororrh //
+m1cororri //
+m1cororrip //
+m1cororrj //
+m1cororrjp //
+m1cororrk //
+m1cororrl //
+m1cororrlp //
+m1cororrp //
+m1corosh // Coronation Street Showcase (Maygay)
+m1coroshp //
+m1criss // Criss Cross Club (Maygay) (Dutch)
+m1crzco // Crazy Cobra (Gemini)
+m1crzcoa //
+m1crzcob //
+m1crzcoc //
+m1crzcod //
+m1crzcoe //
+m1digdel // Diggers Delight (Global)
+m1digdela //
+m1dkong // Donkey Kong (Maygay)
+m1dkong11 //
+m1dkong11p //
+m1dkong21 //
+m1dkong21n //
+m1dkong21p //
+m1dkong31 //
+m1dkong31p //
+m1dkong41 //
+m1dkong41p //
+m1dkong51 //
+m1dkong51p //
+m1dkong81 //
+m1dkong81n //
+m1dkong81na //
+m1dkong81np //
+m1dkong81p //
+m1dkong91 //
+m1dkong91a //
+m1dkong91h1 //
+m1dkong91h2 //
+m1dkong91n //
+m1dkong91na //
+m1dkong91np //
+m1dkong91p //
+m1dkonga //
+m1dkongp //
+m1dm4ev // Diamonds Are Forever Club (Maygay)
+m1dm4ev11 //
+m1dm4evp //
+m1dmnhrt // Diamond Hearts (Maygay)
+m1dxmono // Deluxe Monopoly (Maygay)
+m1dxmono11 //
+m1dxmono11m //
+m1dxmono11mb //
+m1dxmono11o //
+m1dxmono11p //
+m1dxmono12 //
+m1dxmono12a //
+m1dxmono12n //
+m1dxmono12p //
+m1dxmono21p //
+m1dxmono30h //
+m1dxmono31b //
+m1dxmono31h //
+m1dxmono31h2 //
+m1dxmono31p //
+m1dxmono51 //
+m1dxmono51o //
+m1dxmono51p //
+m1dxmonop //
+m1eastnd // Eastenders (Bwb)
+m1eastnd0 //
+m1eastnd1 //
+m1eastnd2 //
+m1eastnd3 //
+m1eastnd4 //
+m1eastnd5 //
+m1eastnd6 //
+m1eastnd7 //
+m1eastnd8 //
+m1eastnd9 //
+m1eastnda //
+m1eastndaa //
+m1eastndab //
+m1eastndac //
+m1eastndad //
+m1eastndae //
+m1eastndaf //
+m1eastndb //
+m1eastndc //
+m1eastndd //
+m1eastnde //
+m1eastndf //
+m1eastndg //
+m1eastndh //
+m1eastndi //
+m1eastndj //
+m1eastndk //
+m1eastndl //
+m1eastndn //
+m1eastndp //
+m1eastndq //
+m1eastndr //
+m1eastnds //
+m1eastndt //
+m1eastndu //
+m1eastndv //
+m1eastndw //
+m1eastndx //
+m1eastndy //
+m1eastndz //
+m1eastqv // Eastenders - Queen Vic (Maygay - Whitbread)
+m1eastqv0 //
+m1eastqv1 //
+m1eastqv2 //
+m1eastqv3 //
+m1eastqv5 //
+m1eastqv6 //
+m1eastqv7 //
+m1eastqv8 //
+m1eastqva //
+m1eastqvaa //
+m1eastqvb //
+m1eastqvc //
+m1eastqvd //
+m1eastqvf //
+m1eastqvg //
+m1eastqvh //
+m1eastqvi //
+m1eastqvj //
+m1eastqvk //
+m1eastqvl //
+m1eastqvm //
+m1eastqvn //
+m1eastqvo //
+m1eastqvp //
+m1eastqvq //
+m1eastqvr //
+m1eastqvs //
+m1eastqvt //
+m1eastqvu //
+m1eastqvv //
+m1eastqvw //
+m1eastqvx //
+m1eastqvy //
+m1eastqvz //
+m1expclb // Explorer Club (Maygay)
+m1expclba //
+m1fantfb // Fantasy Football (Maygay)
+m1fantfba //
+m1fantfbb //
+m1fantfbc //
+m1fantfbd //
+m1fantfbf //
+m1fantfbg //
+m1fantfbh //
+m1fantfbj //
+m1fantfbk //
+m1fantfbl //
+m1fight // Fight Night (Maygay)
+m1fighta //
+m1fightb //
+m1fightc //
+m1fightd //
+m1fighte //
+m1fightg //
+m1fighth //
+m1fighti //
+m1fightj //
+m1fightk //
+m1fightl //
+m1fightm //
+m1fightn //
+m1fighto //
+m1fightp //
+m1fightq //
+m1fightr //
+m1fights //
+m1fightt //
+m1fightu //
+m1fightv //
+m1fightw //
+m1fightx //
+m1fivest // Five Star (Maygay)
+m1frexpl // Fruit Explosion (Maygay)
+m1frexpla //
+m1frexplc //
+m1frexpld //
+m1frexple //
+m1frexplg //
+m1frexplh //
+m1frexpli //
+m1frexplj //
+m1frexplk //
+m1frexpll //
+m1frexplm //
+m1frexpln //
+m1frexplo //
+m1frexplp //
+m1frexplq //
+m1frexplr //
+m1frexpls //
+m1frexplt //
+m1frexplu //
+m1frexplv //
+m1glad // Gladiators (Maygay)
+m1glad0 //
+m1glad1 //
+m1glada //
+m1gladb //
+m1gladc //
+m1gladd //
+m1glade //
+m1gladf //
+m1gladg //
+m1gladh //
+m1gladj //
+m1gladk //
+m1gladl //
+m1gladm //
+m1gladn //
+m1glado //
+m1gladp //
+m1gladq //
+m1gladr //
+m1glads //
+m1gladt //
+m1gladu //
+m1gladv //
+m1gladw //
+m1gladx //
+m1glady //
+m1gladz //
+m1gold10 // Golden 10 (Maygay)
+m1goldng // Golden Nugget Club (Maygay)
+m1goldnga //
+m1goldngb //
+m1goldngc //
+m1goldngd //
+m1goldnge //
+m1goldsv // Gold & Silver (Maygay)
+m1goldsva //
+m1gresc // Great Escape, The (Maygay)
+m1gresca //
+m1grescb //
+m1grescc //
+m1grescd //
+m1gresce //
+m1grescf //
+m1grescg //
+m1gresch //
+m1gresci //
+m1grescj //
+m1gresck //
+m1grescl //
+m1grescm //
+m1grescn //
+m1gresco //
+m1grescp //
+m1grescq //
+m1gskill // Greek Skill
+m1guvnor // The Guvnor (Maygay)
+m1guvnora //
+m1guvnorb //
+m1guvnorc //
+m1guvnord //
+m1guvnore //
+m1guvnorf //
+m1guvnorg //
+m1guvnorh //
+m1guvnori //
+m1guvnorj //
+m1guvnork //
+m1guvnorl //
+m1guvnorm //
+m1guvnorn //
+m1guvnoro //
+m1guvnorp //
+m1guvnorq //
+m1guvnorr //
+m1guvnors //
+m1guvnort //
+m1hiloc // Hi Lo Casino (Global)
+m1hiloca //
+m1hotpot // Hot Pots (Maygay)
+m1hotpot0 //
+m1hotpotd //
+m1hotpote //
+m1hotpoth //
+m1hotpoti //
+m1hotpotj //
+m1hotpotk //
+m1hotpotl //
+m1hotpotm //
+m1hotpotn //
+m1hotpoto //
+m1hotpotp //
+m1hotpotq //
+m1hotpotr //
+m1hotpots //
+m1hotpott //
+m1hotpotu //
+m1hotpotv //
+m1hotpotw //
+m1hotpotx //
+m1hotpoty //
+m1hotpotz //
+m1htclb // Hi Tension Club (Maygay)
+m1htclba //
+m1imclb // Instant Millionaire Club (Maygay)
+m1imclba //
+m1imclbb //
+m1infern // Inferno (Maygay)
+m1inferna //
+m1infernb //
+m1infernc //
+m1infernd //
+m1inferne //
+m1infernf //
+m1inferng //
+m1infernh //
+m1inferni //
+m1infernj //
+m1infernk //
+m1infernl //
+m1inwin // Instant Win (Maygay)
+m1inwina //
+m1inwinb //
+m1inwinc //
+m1inwinf //
+m1inwinh //
+m1inwini //
+m1inwinj //
+m1inwink //
+m1inwinl //
+m1inwinm //
+m1inwinn //
+m1inwino //
+m1inwinp //
+m1inwinq //
+m1inwinr //
+m1inwins //
+m1inwint //
+m1inwinu //
+m1inwinv //
+m1inwinw //
+m1inwinx //
+m1itjob // Italian Job (Maygay)
+m1itjobc //
+m1itjobd //
+m1itjobe //
+m1itjobf //
+m1itjobg //
+m1itjobh //
+m1itjobi //
+m1itjobj //
+m1itjobk //
+m1itjobl //
+m1itjobm //
+m1itjobn //
+m1itjobo //
+m1itjobp //
+m1itjobq //
+m1itjobr //
+m1itsko // It's A Knockout (Maygay)
+m1itsko0 //
+m1itsko1 //
+m1itsko2 //
+m1itsko3 //
+m1itsko4 //
+m1itsko5 //
+m1itsko6 //
+m1itsko7 //
+m1itsko8 //
+m1itskoa //
+m1itskob //
+m1itskoc //
+m1itskod //
+m1itskoe //
+m1itskof //
+m1itskog //
+m1itskoh //
+m1itskoi //
+m1itskoj //
+m1itskok //
+m1itskol //
+m1itskom //
+m1itskon //
+m1itskoo //
+m1itskop //
+m1itskoq //
+m1itskor //
+m1itskos //
+m1itskot //
+m1itskou //
+m1itskov //
+m1itskow //
+m1itskox //
+m1itskoy //
+m1itskoz //
+m1jbond // James Bond (Maygay)
+m1jbonda //
+m1jbondb //
+m1jbondc //
+m1jbondd //
+m1jbonde //
+m1jbondf //
+m1jbondg //
+m1jbondh //
+m1jbondi //
+m1jbondj //
+m1jbondk //
+m1jbondl //
+m1jbondm //
+m1jbondn //
+m1jbondo //
+m1jbondp //
+m1jbondq //
+m1jdwins // Jim Davison's Winning Streak (Maygay)
+m1jdwinsa //
+m1jdwinsb //
+m1jdwinsc //
+m1jdwinsd //
+m1jdwinse //
+m1jdwinsf //
+m1jdwinsg //
+m1jdwinsh //
+m1jdwinsi //
+m1jdwinsj //
+m1jdwinsk //
+m1jdwinsl //
+m1jdwinsm //
+m1jdwinsn //
+m1jpmult // Jackpot Multiplier (Maygay)
+m1jpmulta //
+m1jtjob // Just The Job (Global)
+m1jtjoba //
+m1jtjobb //
+m1jtjobc //
+m1jtjobd //
+m1jtjobe //
+m1kingsw // King Of The Swingers (Global)
+m1kingswa //
+m1kingswb //
+m1kingswc //
+m1lca // Lights Camera Action (Global)
+m1lcaa //
+m1lcab //
+m1lcac //
+m1liveam // Living In America (Maygay)
+m1liveama //
+m1liveamb //
+m1lotmil // Lottery Millionaire Club (Maygay)
+m1lotmila //
+m1lotmilb //
+m1lotmilc //
+m1luckno // Lucky Numbers (Maygay)
+m1lucknoa //
+m1lucknob //
+m1lucknoc //
+m1lucknod //
+m1lucknoe //
+m1lucknof //
+m1lucknog //
+m1lucknoh //
+m1lucknoi //
+m1lucknoj //
+m1lucknok //
+m1lucknol //
+m1lucknom //
+m1lucknon //
+m1lucknoo //
+m1lucknop //
+m1lucknoq //
+m1lucknor //
+m1lucknos //
+m1luxor // Luxor Casino
+m1luxora //
+m1luxorb //
+m1luxorc //
+m1magic // Magic Squares (Maygay)
+m1magica //
+m1magicb //
+m1magicc //
+m1manhat // Manhattan Skylines (Maygay)
+m1mb // Monkey Business (Global)
+m1mba //
+m1mbb //
+m1mbc //
+m1mbclb // Monkey Business Club (Global)
+m1monclb // Monopoly Club (Maygay)
+m1monclba //
+m1monclbb //
+m1monclbc //
+m1monclbd //
+m1monclbe //
+m1monclbf //
+m1monclbg //
+m1monclbh //
+m1monclbi //
+m1monclbj //
+m1monclbk //
+m1monclbl //
+m1monclbm //
+m1moncls // Monopoly Classic (Maygay)
+m1monclsa //
+m1monclsb //
+m1monclsc //
+m1monclsd //
+m1mongam // Money Game Club (Maygay)
+m1mongama //
+m1mongamb //
+m1monmon // Money Money Money (Maygay)
+m1monmona //
+m1monmonb //
+m1monmonc //
+m1monmond //
+m1monmone //
+m1monmonf //
+m1monmong //
+m1monmonh //
+m1monmoni //
+m1monmonj //
+m1monmonk //
+m1monmonl //
+m1monmonm //
+m1monmonn //
+m1monmono //
+m1monmonp //
+m1monmonq //
+m1monmonr //
+m1monmons //
+m1monmont //
+m1monmonu //
+m1monmonv //
+m1monmonw //
+m1mono // Monopoly (Maygay)
+m1mono0 //
+m1mono1 //
+m1mono2 //
+m1mono3 //
+m1mono4 //
+m1mono5 //
+m1mono6 //
+m1mono7 //
+m1mono8 //
+m1mono9 //
+m1monoa //
+m1monoaa //
+m1monoc //
+m1monod //
+m1monodt // Monopoly (Maygay) [Dutch]
+m1monoe //
+m1monof //
+m1monog //
+m1monoh //
+m1monoi //
+m1monok //
+m1monol //
+m1monom //
+m1monon //
+m1monoo //
+m1monop //
+m1monoq //
+m1monor //
+m1monos //
+m1monot //
+m1monou //
+m1monov //
+m1monow //
+m1monox //
+m1monoy //
+m1monoz //
+m1monstr // Monster Cash (Maygay)
+m1monstra //
+m1monstrb //
+m1monstrc //
+m1nhp // Noel's House Party (Maygay)
+m1nhpa //
+m1nhpb //
+m1nhpc //
+m1nhpd //
+m1nhpe //
+m1nhpf //
+m1nhpg //
+m1nhph //
+m1nhpi //
+m1nhpj //
+m1nhpk //
+m1nhpl //
+m1nhpm //
+m1nudbnk // Nudge Banker (Maygay)
+m1nudbnka //
+m1nudbnkb //
+m1nudbnkc //
+m1nudbnkd //
+m1nudbnke //
+m1nudbnkf //
+m1nudbnkg //
+m1nudbnkh //
+m1nudbnki //
+m1nudbnkj //
+m1nudbnkk //
+m1nudbnkl //
+m1nudbnkm //
+m1nudbnkn //
+m1nudbnko //
+m1nudbnkp //
+m1nudbnkq //
+m1nudbnkr //
+m1nudbnks //
+m1nudbnkt //
+m1nudbnku //
+m1nudbnkv //
+m1nudunl // Nudges Unlimited (Maygay)
+m1nudunla //
+m1nudunlb //
+m1nudunlc //
+m1nudunld //
+m1nudunle //
+m1omega // Omega (Maygay)
+m1omegaa //
+m1onbus // On The Buses (Maygay)
+m1onbusa //
+m1onbusb //
+m1onbusc //
+m1onbusd //
+m1onbuse //
+m1onbusf //
+m1onbusg //
+m1onbush //
+m1onbusi //
+m1onbusj //
+m1onbusk //
+m1onbusl //
+m1onbusm //
+m1onbusn //
+m1onbuso //
+m1onbusp //
+m1ott // Over The Top (Maygay)
+m1otta //
+m1piggy // Piggy Bank (Maygay)
+m1piggya //
+m1piggyb //
+m1piggyc //
+m1pinkp // Pink Panther (Maygay)
+m1pinkpa //
+m1pinkpb //
+m1pinkpc //
+m1pinkpd //
+m1pinkpe //
+m1pinkpf //
+m1pinkpg //
+m1pinkph //
+m1pinkpi //
+m1pinkpj //
+m1pinkpk //
+m1pinkpl //
+m1pinkpm //
+m1pinkpn //
+m1pinkpo //
+m1pinkpp //
+m1pinkpq //
+m1pinkpr //
+m1ppc // Pink Panther Club (Maygay)
+m1ppca //
+m1ppcb //
+m1ppdt // Pink Panther (Maygay) [Dutch]
+m1przclu // Prize Cluedo (Maygay)
+m1przclua //
+m1przclub //
+m1przee // Prize Eastenders (Maygay)
+m1przeea //
+m1przeeb //
+m1przeec //
+m1races // A Day At The Races (Maygay)
+m1racesa //
+m1racesb //
+m1racesc //
+m1reeldm // Reel Diamonds (Maygay)
+m1reeldma //
+m1reeldmb //
+m1reeldmc //
+m1reeldmd //
+m1reeldme //
+m1reeldmf //
+m1reeldmg //
+m1reeldmh //
+m1reeldmi //
+m1reeldmj //
+m1reeldmk //
+m1reeldml //
+m1reeldmm //
+m1reeldmn //
+m1reeldmo //
+m1retpp // Return Of The Pink Panther (Maygay)
+m1retppa //
+m1retppb //
+m1retppc //
+m1retppd //
+m1search // Search Light (Maygay)
+m1searcha //
+m1searchb //
+m1simps // The Simpsons (Maygay - Bwb)
+m1simpsa //
+m1simpsb //
+m1simpsc //
+m1simpsd //
+m1simpse //
+m1simpsf //
+m1simpsg //
+m1sirich // Strike It Rich
+m1siricha //
+m1sirichb //
+m1sirichc //
+m1sixspn // Six Spinner (Maygay)
+m1spid // Spiderman (Maygay)
+m1spida //
+m1spidb //
+m1sprnov // Super Nova (Maygay)
+m1sptlgt // Spotlight (Maygay)
+m1sptlgta //
+m1sptlgtb //
+m1sptlgtc //
+m1sptlgtd //
+m1sptlgte //
+m1startr // Star Trekking (Mdm)
+m1startra //
+m1startrb //
+m1startrc //
+m1startrd //
+m1startre //
+m1startrf //
+m1startrg //
+m1startrh //
+m1startri //
+m1startrj //
+m1startrk //
+m1startrm //
+m1startrn //
+m1startro //
+m1startrp //
+m1startrq //
+m1startrr //
+m1sudnim // Sudden Impact (Maygay)
+m1sudnima //
+m1sudnimb //
+m1sudnimc //
+m1suppot // Super Pots (Maygay)
+m1suppot0 //
+m1suppota //
+m1suppotb //
+m1suppotc //
+m1suppotd //
+m1suppote //
+m1suppotf //
+m1suppotg //
+m1suppoti //
+m1suppotj //
+m1suppotk //
+m1suppotl //
+m1suppotm //
+m1suppotn //
+m1suppoto //
+m1suppotp //
+m1suppotq //
+m1suppotr //
+m1suppots //
+m1suppott //
+m1suppotu //
+m1suppotv //
+m1suppotw //
+m1suppotx //
+m1suppoty //
+m1suppotz //
+m1sycc // Stake Yer Claim Club (Global)
+m1sycca //
+m1syccb //
+m1taknot // Take Note (Maygay)
+m1thatlf // That's Life (Maygay)
+m1thatlfa //
+m1thatlfb //
+m1thatlfc //
+m1thatlfd //
+m1thrill // Thrills 'n' Spills (Global)
+m1thrilla //
+m1thrillb //
+m1thrillc //
+m1topstr // Top Strike (Maygay - Bwb)
+m1topten // Top Tenner (Maygay)
+m1toptena //
+m1tpclb // Trivial Pursuit Club (Maygay)
+m1tpclba //
+m1tpclbb //
+m1tpclbc //
+m1trivia // Trivial Pursuit (Maygay)
+m1triviaa //
+m1triviab //
+m1triviac //
+m1triviad //
+m1triviae //
+m1triviaf //
+m1triviag //
+m1triviah //
+m1triviai //
+m1triviaj //
+m1triviak //
+m1trivial //
+m1trivian //
+m1triviap //
+m1triviaq //
+m1triviar //
+m1trivias //
+m1triviat //
+m1triviau //
+m1triviav //
+m1triviaw //
+m1triviax //
+m1triviay //
+m1triviaz //
+m1trtr // Trick Or Treat (Global)
+m1trtra //
+m1trtrcl // Trick Or Treat Club (Global)
+m1tstunt // Test Unit (Maygay)
+m1ttcash // Tick Tock Cash (Empire)
+m1ultchl // Ultimate Challenge (Maygay)
+m1ultchla //
+m1ultchlb //
+m1ultchlc //
+m1undsie // Under Siege (Maygay)
+m1undsiea //
+m1undsieb //
+m1undsiec //
+m1vegas // Vegas Gambler Club (Maygay)
+m1vegasa //
+m1vegasb //
+m1vegcrw // Vegetable Crew (Global)
+m1wagon // Wagon Trail (Maygay)
+m1wagona //
+m1wagonb //
+m1wagonc //
+m1winenc // Winners Enclosure (Maygay)
+m1winenca //
+m1winencb //
+m1winencc //
+m1wldzne // Wild Zone (Maygay)
+m1wldznea //
+m1wldzneb //
+m1wldznec //
+m1wldzned //
+m1wldznee //
+m1wldznef //
+m1wldzneg //
+m1wldzneh //
+m1wldznei //
+m1wldznej //
+m1wldznek //
+m1wldznel //
+m1wldznem //
+m1wldznen //
+m1wldzneo //
+m1wldznep //
+m1wldzneq //
+m1wldzner //
+m1wldznes //
+m1wotw // War Of The Worlds (Maygay)
+m1wotwa //
+m1wotwb //
+
+//@source:maygayep.cpp
+ep_21clb // Twenty One Club (Maygay)
+ep_21clba //
+ep_25crt // 25 Carrot Gold (Maygay)
+ep_25crta //
+ep_25crtb //
+ep_25crtc //
+ep_25crtd //
+ep_bartk // Bar Trekkin (Maygay)
+ep_bartka //
+ep_bartkb //
+ep_bartkc //
+ep_bartkd //
+ep_bartke //
+ep_bartkf //
+ep_baskr // Pounds Of The Baskervilles (Maygay)
+ep_baskra //
+ep_baskrb //
+ep_baskrc //
+ep_baskrd //
+ep_baskre //
+ep_bathl // Bat Outa Hell (Global)
+ep_bathla //
+ep_bathlb //
+ep_bathlc //
+ep_bathld //
+ep_bathle //
+ep_bathlf //
+ep_bathlg //
+ep_bathlh //
+ep_batls // Battleships (Maygay)
+ep_batlsa //
+ep_batlsb //
+ep_batlsc //
+ep_bbars // Balloon Bars (Maygay)
+ep_bbarsa //
+ep_bbarsb //
+ep_bbarsc //
+ep_bbonz // Bingo Bonanza (Maygay - Union)
+ep_bbonza //
+ep_beav3 //
+ep_beav3a //
+ep_beav3b //
+ep_beav3c //
+ep_beavr // Casino Beaver Las Vegas (Global)
+ep_beavra //
+ep_beavrb //
+ep_beavrc //
+ep_beavrd //
+ep_beavre //
+ep_beavrf //
+ep_beavrg //
+ep_beavrh //
+ep_beavri //
+ep_beavrj //
+ep_beavrk //
+ep_beavrl //
+ep_beavrm //
+ep_beavrn //
+ep_beavro //
+ep_bingb // Bingo Belle (Maygay)
+ep_bingba //
+ep_bjclb // Blackjack Club, The (Global)
+ep_braid // Bank Raid (Unk)
+ep_braida //
+ep_braidb //
+ep_braidc //
+ep_braidd //
+ep_braide //
+ep_bubsq // Bubble & Squeak (Extreme)
+ep_bubsqa //
+ep_bubsqb //
+ep_bubsqc //
+ep_bubsqd //
+ep_bvrcl // Beaver Las Vegas Club (Global)
+ep_bvrcla //
+ep_bvrclb //
+ep_bvrclc //
+ep_bvrcld //
+ep_bvrcle //
+ep_bvrclf //
+ep_bvrclg //
+ep_bvrclh //
+ep_bvrcli //
+ep_bvrclj //
+ep_bvrclk //
+ep_bvruc // Beaver Uncovered (Global)
+ep_bvruca //
+ep_bvrucb //
+ep_bvrucc //
+ep_cahoy // Cash Ahoy (Maygay)
+ep_cahoya //
+ep_cahoyb //
+ep_calyp // Calypso (Maygay)
+ep_calypa //
+ep_cascz // Casino Crazy (Global)
+ep_cascza //
+ep_casgc // Casino Grand Club (Maygay)
+ep_casgca //
+ep_casgcb //
+ep_casgcc //
+ep_cashn // Cashino (Maygay - Extreme)
+ep_cashna //
+ep_casrd // Casino Royale Deluxe Club (Maygay)
+ep_casrda //
+ep_cbrcl // Cannonball Run Club (Global)
+ep_cbrcla //
+ep_cbrclb //
+ep_cbrclc //
+ep_cbrcld //
+ep_cbrcle //
+ep_cbrclf //
+ep_cbrclg //
+ep_cbrclh //
+ep_cbrcli //
+ep_cbrclj //
+ep_cbrclk //
+ep_cbrun // Cannonball Run (Global)
+ep_cbruna //
+ep_cbrunb //
+ep_cbrunc //
+ep_cbrund //
+ep_cbrune //
+ep_cclas // Casino Classic (Global)
+ep_cclasa //
+ep_ccock // Cash Cocktail (Maygay)
+ep_ccocka //
+ep_ccockb //
+ep_ccockc //
+ep_cdspn // Cardinal Spin (Maygay)
+ep_cdspna //
+ep_cfall // Cash Falls (Maygay)
+ep_cfalla //
+ep_cfallb //
+ep_cfallc //
+ep_cfalld //
+ep_cfalle //
+ep_cfallf //
+ep_cflow // Cash Flow (Maygay)
+ep_cflowa //
+ep_cflowc //
+ep_cflowd //
+ep_cgord // Cash Gordon (Maygay)
+ep_cgorda //
+ep_cgordb //
+ep_cgordc //
+ep_cgrc // Casino Grand Classic (Unk)
+ep_cgrca //
+ep_cgred // Club Greed (Global)
+ep_cgreda //
+ep_chock // Chocks Away (Maygay)
+ep_chocka //
+ep_chockb //
+ep_cock // Cock A Doodle Dosh (Maygay - Union)
+ep_cocka //
+ep_cockb //
+ep_cockc //
+ep_cockd //
+ep_cocke //
+ep_commd // Complete Madness (Maygay)
+ep_commda //
+ep_commdb //
+ep_commdc //
+ep_commdd //
+ep_cor2 // Coronation Street 2 (Maygay)
+ep_cor2a //
+ep_cor2b //
+ep_cor2c //
+ep_cormn // Coronation Street Monopoly Club (Maygay)
+ep_cormna //
+ep_cosc // Carry On Screaming (Maygay)
+ep_cosca //
+ep_cow // Carry On Winning (Maygay)
+ep_cowa //
+ep_crazy // Reel Crazy (Maygay)
+ep_crazya //
+ep_crazyb //
+ep_crazyc //
+ep_crazyd //
+ep_crazye //
+ep_crzbn // Crazy Bingo (Maygay)
+ep_crzbna //
+ep_crzbnb //
+ep_crzbnc //
+ep_cshpn // Cash In The Pan (Maygay)
+ep_cshpna //
+ep_cslay // Cash Slayer (Global)
+ep_cslaya //
+ep_cstrk // Crazy Streak Club (Global)
+ep_cstrka //
+ep_cstrkb //
+ep_cstrkc //
+ep_cstrkd //
+ep_cstrke //
+ep_cstrkf //
+ep_cstrkg //
+ep_ctc // Cut Throat Cash (Global)
+ep_ctca //
+ep_ctit // Cash Of The Titans (Maygay)
+ep_ctita //
+ep_cyc // Cyclone (Unk)
+ep_cyca //
+ep_cycb //
+ep_cycc //
+ep_cycd //
+ep_cyce //
+ep_cycl // Cyclone Club (Maygay)
+ep_cycla //
+ep_cyclb //
+ep_dblim // Double Impact (Maygay - Impulse)
+ep_dblima //
+ep_dblimb //
+ep_dblimc //
+ep_dblimd //
+ep_ddq // Dungeons & Drag Queens (Global)
+ep_ddqa //
+ep_ddqb //
+ep_ddqc //
+ep_ddqcl // Dungeons & Drag Queens Club (Global)
+ep_ddqcla //
+ep_ddqclb //
+ep_ddqclc //
+ep_ddqcld //
+ep_ddqcle //
+ep_ddqclf //
+ep_ddqclg //
+ep_ddqd //
+ep_ddqe //
+ep_ddqf //
+ep_ddqg //
+ep_ddqh //
+ep_ddqi //
+ep_dmbus // Dambusters (Impulse)
+ep_dmbusa //
+ep_dmbusb //
+ep_dmbusc //
+ep_dmbusd //
+ep_dmbuse //
+ep_dmbusf //
+ep_doubl // Double Top (Maygay)
+ep_doubla //
+ep_doublb //
+ep_doublc //
+ep_doubld //
+ep_duff // Duff Beer Guide (Maygay)
+ep_duffa //
+ep_duffb //
+ep_duffc //
+ep_evil // Evil Streak (Maygay)
+ep_evila //
+ep_evilb //
+ep_fgods // Fruit Of The Gods (Maygay)
+ep_fgodsa //
+ep_fgodsb //
+ep_fgodsc //
+ep_fgodsd //
+ep_fgodse //
+ep_fgodsf //
+ep_fgodsg //
+ep_flash // Flashback (Maygay - Impulse)
+ep_flasha //
+ep_flashb //
+ep_flashc //
+ep_flashd //
+ep_flashe //
+ep_flashf //
+ep_fmf // Full Moon Fever (Global)
+ep_fmfa //
+ep_fnclb // Fruit & Nudge Club (Maygay)
+ep_fnclba //
+ep_fog // Fields of Gold (Global)
+ep_foga //
+ep_fortg // Fortune & Glory (Maygay - Impulse)
+ep_fortga //
+ep_fortgb //
+ep_fran // Frantic (Maygay)
+ep_frana //
+ep_fullm // Full Moon Fever (Maygay - Impulse)
+ep_fullma //
+ep_fullmb //
+ep_fullmc //
+ep_fullmd //
+ep_fullme //
+ep_fullmf //
+ep_funny // Funny Money (Maygay)
+ep_funnya //
+ep_funnyb //
+ep_funnyc //
+ep_funnyd //
+ep_funnye //
+ep_funnyf //
+ep_funnyg //
+ep_geclb // Great Escape Club (Maygay)
+ep_geclba //
+ep_geclbb //
+ep_geron // Geronimo (Maygay - Impulse)
+ep_gerona //
+ep_geronb //
+ep_geronc //
+ep_gerond //
+ep_gerone //
+ep_gesc2 // Great Escape 2 (Maygay)
+ep_gesc2a //
+ep_gldtp // Gold Top (Maygay)
+ep_gldtpa //
+ep_goldf // Gold Fever (Impulse)
+ep_greed // Greed (Global)
+ep_greeda //
+ep_gresc // Great Escape (Maygay)
+ep_gresca //
+ep_gridr // Gridrunner (Maygay - Impulse)
+ep_gridra //
+ep_gridrb //
+ep_gridrc //
+ep_gridrd //
+ep_grncl // Grid Runner Club (Global)
+ep_grncla //
+ep_grnclb //
+ep_grnclc //
+ep_grun // Grid Runner (Global)
+ep_gruna //
+ep_gtrot // Globe Trotter (Unk)
+ep_gtrota //
+ep_heybc // Hey Big Spender Club (Global)
+ep_heybca //
+ep_heybg // Hey Big Spender (Global)
+ep_heybga //
+ep_heybgb //
+ep_heybgc //
+ep_hhclb // Haunted House Club (Maygay)
+ep_hhclba //
+ep_hhclbb //
+ep_hhclbc //
+ep_highv // High Voltage (Maygay - Impulse)
+ep_highva //
+ep_highvb //
+ep_highvc //
+ep_highvd //
+ep_highve //
+ep_highvf //
+ep_hiscl // Hi Spirits Club (Global)
+ep_hiscla //
+ep_hispr // Hi Spirits (Global)
+ep_hispra //
+ep_hisprb //
+ep_hisprc //
+ep_hisprd //
+ep_hispre //
+ep_hogmn // Hog Money (Maygay - Impulse)
+ep_hogmna //
+ep_hogmnb //
+ep_homer // Homer's Meltdown (Maygay)
+ep_homera //
+ep_homerb //
+ep_homerc //
+ep_homerd //
+ep_homere //
+ep_homerf //
+ep_homerg //
+ep_homerh //
+ep_homeri //
+ep_htdgs // Hot Dogs (Maygay)
+ep_htdgsa //
+ep_hubbl // Hubble Bubble (Maygay)
+ep_hubbla //
+ep_hur // Hurricane (Global)
+ep_hura //
+ep_hurb //
+ep_huric // Hurricane (Maygay - Impulse)
+ep_hurica //
+ep_huricb //
+ep_huricc //
+ep_huricd //
+ep_hurice //
+ep_hvns // Heavens Above (Maygay)
+ep_hvnsa //
+ep_hyst // Hysteria (Maygay - Impulse)
+ep_hysta //
+ep_icebg // Ice Burger (Maygay)
+ep_icebga //
+ep_icebgb //
+ep_icebgc //
+ep_icebgd //
+ep_icebge //
+ep_icebgf //
+ep_icebgg //
+ep_icebgh //
+ep_icebgi //
+ep_ifern // Inferno (Impulse)
+ep_iferna //
+ep_ijcl // Italian Job Club (Maygay)
+ep_ijcla //
+ep_ijob // Italian Job (Maygay)
+ep_ijoba //
+ep_imj // I'm A Jackpot (Global)
+ep_inca // Inca Dinka Do (Maygay - Extreme)
+ep_incaa //
+ep_incab //
+ep_itjb2 // Italian Job 2 (Maygay)
+ep_itjb2a //
+ep_itjb2b //
+ep_itjb2c //
+ep_itjb3 // Italian Job 3 (Maygay)
+ep_itjb3a //
+ep_jakbn // Jackpot & The Beanstreak (Extreme)
+ep_jakbna //
+ep_jakbnb //
+ep_jakbnc //
+ep_jsttt // Just The Ticket (Maygay)
+ep_jsttta //
+ep_jstttb //
+ep_jstttc //
+ep_jstttd //
+ep_jsttte //
+ep_jstttf //
+ep_jstttg //
+ep_kopcl // Knockout Punch Club (Global)
+ep_kopcla //
+ep_kopclb //
+ep_ll // Lucky Ladders (Unk)
+ep_lla //
+ep_loadd // Loaded (Maygay)
+ep_loadda //
+ep_ltt // Licence To Thrill (Global)
+ep_ltta //
+ep_lug // London Underground (Maygay)
+ep_luga //
+ep_lugb //
+ep_lugc //
+ep_lukld // Lucky Ladders (Maygay)
+ep_luklda //
+ep_makmv // Make Your Move (Global)
+ep_makmva //
+ep_manic // Manic Miner (Maygay - Impulse)
+ep_manica //
+ep_manicb //
+ep_manicc //
+ep_manicd //
+ep_manice //
+ep_manicf //
+ep_mario // Super Mario (Maygay)
+ep_marioa //
+ep_mariob //
+ep_marioc //
+ep_mariod //
+ep_marioe //
+ep_mariof //
+ep_mariog //
+ep_marioh //
+ep_matrx // Matrix (Maygay - Impulse)
+ep_merln // Merlin's Magic (Maygay)
+ep_midas // Midas Touch Club (Maygay)
+ep_midasa //
+ep_milhr // Who Wants To Be A Millionhare? (Global)
+ep_milhra //
+ep_milhrb //
+ep_milhrc //
+ep_milhrd //
+ep_milhre //
+ep_milhrf //
+ep_milhrg //
+ep_mkart // Mario Kart (Maygay)
+ep_mkarta //
+ep_mkartb //
+ep_mkartc //
+ep_mkartd //
+ep_mkarte //
+ep_mlhrc // Who Whats To Be A Millionhare Club (Global)
+ep_mlhrca //
+ep_mlhrcb //
+ep_mlhrcc //
+ep_mlhrcd //
+ep_mlhrce //
+ep_monbs // Monte Carlo Or Bust (Maygay)
+ep_monbsa //
+ep_monky // Monkey Business (Global)
+ep_monkya //
+ep_monrt // Money Returns Club, The (Global)
+ep_monrta //
+ep_monrtb //
+ep_monrtc //
+ep_monrtd //
+ep_monrte //
+ep_monrtf //
+ep_monsh // Moonshine Club, The (Unk)
+ep_monsha //
+ep_monshb //
+ep_monshc //
+ep_monshd //
+ep_monshe //
+ep_monshf //
+ep_mrmus // Mr Muscle (Maygay)
+ep_mrmusa //
+ep_mummy // Mummy Talks (Impulse)
+ep_mummya //
+ep_mummyb //
+ep_mummyc //
+ep_mummyd //
+ep_mummye //
+ep_mummyf //
+ep_mwom // Mortal Wombat (Maygay)
+ep_mwoma //
+ep_mwomb //
+ep_mwomc //
+ep_mwomd //
+ep_noter // Note Runner (Maygay)
+ep_notera //
+ep_noterb //
+ep_noterc //
+ep_noterd //
+ep_notere //
+ep_nuns // Nuns Of Navarone (Maygay)
+ep_nunsa //
+ep_nyny // New York New York (Maygay)
+ep_nynya //
+ep_nynyb //
+ep_nynyc //
+ep_nynyd //
+ep_nynye //
+ep_nynyf //
+ep_otm // Over The Moon (Maygay)
+ep_otma //
+ep_otmcl // Over The Moon Club (Maygay)
+ep_otmcla //
+ep_ozzie // Ozzie Ozzie Ozzie (Maygay)
+ep_ozziea //
+ep_ozzieb //
+ep_ozziec //
+ep_ozzied //
+ep_ozziee //
+ep_ozzief //
+ep_ozzieg //
+ep_ozzieh //
+ep_party //
+ep_pascl // Passport To Riches Classic Club (Maygay)
+ep_pascla //
+ep_passp // Passport To Riches Club (Maygay)
+ep_passpa //
+ep_passpb //
+ep_passpc //
+ep_pesos // Pick Yer Pesos (Maygay - Impulse)
+ep_pesosa //
+ep_pesosb //
+ep_pesosc //
+ep_pharo // Pharaoh's Treasure (Maygay)
+ep_pharoa //
+ep_pizza // Pizza The Action (Maygay)
+ep_pizzaa //
+ep_pizzab //
+ep_pizzac //
+ep_pkni // The Phoenix Knights (Global)
+ep_pknia //
+ep_pknib //
+ep_pknic //
+ep_pknid //
+ep_pknie //
+ep_pknif //
+ep_pwrpl // Power Play (Maygay)
+ep_pwrpla //
+ep_rags // Rags To Riches Club (Maygay)
+ep_ragsa //
+ep_rchik // Rich Chics Club (Unk)
+ep_rchika //
+ep_react // Reactor (Maygay - Impulse)
+ep_reacta //
+ep_reactb //
+ep_reactc //
+ep_reactd //
+ep_reacte //
+ep_redl // Red Line (Unk)
+ep_redla //
+ep_rlgdt // Reel Good Time Rebuild (Global)
+ep_roost // Roosters Millions (Maygay)
+ep_roosta //
+ep_royrc // Royal Roulette Club (Unk)
+ep_royrca //
+ep_royrl // Royal Roulette (Maygay)
+ep_royrla //
+ep_royrlb //
+ep_royrlc //
+ep_royrld //
+ep_royrle //
+ep_rtt // Round The Twist (Maygay)
+ep_rtta //
+ep_scrm // Screamin Demon (Maygay)
+ep_scrma //
+ep_scrmb //
+ep_scrmc //
+ep_sdcla // Spotted Dick Classic (Global)
+ep_sdclaa //
+ep_sdclab //
+ep_sdclac //
+ep_sdclad //
+ep_sdclae //
+ep_sdclaf //
+ep_sdclag //
+ep_sdclb // Spotted Dick Club (Global)
+ep_sdclba //
+ep_secag // Secret Agent (Maygay)
+ep_secaga //
+ep_secagb //
+ep_simfr // Simply Fruits (Maygay)
+ep_simfra //
+ep_simp // The Simpsons (Maygay)
+ep_simpa //
+ep_simpb //
+ep_simpc //
+ep_simpd //
+ep_simpe //
+ep_simpf //
+ep_simpg //
+ep_simph //
+ep_simpj //
+ep_simpk //
+ep_simpl //
+ep_simpm //
+ep_smoke // Holy Smoke! (Impulse)
+ep_smokea //
+ep_smokeb //
+ep_smokec //
+ep_smoked //
+ep_smokee //
+ep_smokef //
+ep_smokeg //
+ep_smokeh //
+ep_smokei //
+ep_smokej //
+ep_snbev // Saturday Night Beaver (Global)
+ep_snbeva //
+ep_snbevb //
+ep_snbevc //
+ep_snbevd //
+ep_snbeve //
+ep_snset // Sunset Strip (Unk)
+ep_snseta //
+ep_snw // Super Nudge Wink (Maygay - Union)
+ep_snwa //
+ep_snwb //
+ep_snwc //
+ep_snwd //
+ep_spart // Spartacash (Maygay - Impulse)
+ep_sparta //
+ep_spartb //
+ep_spcbw // Special Brew (Maygay)
+ep_spcbwa //
+ep_spcbwb //
+ep_spcbwc //
+ep_spcbwd //
+ep_spcbwe //
+ep_spcbwf //
+ep_spcbwg //
+ep_spcbwh //
+ep_spcbwi //
+ep_spcbwj //
+ep_spcbwk //
+ep_spcbwl //
+ep_spcbwm //
+ep_spec // Spectre (Maygay)
+ep_speca //
+ep_specb //
+ep_spin // Spin On It (Maygay - Impulse)
+ep_spina //
+ep_spinb //
+ep_spinc //
+ep_spind //
+ep_spine //
+ep_spirt // High Spirits (Global)
+ep_spirta //
+ep_spirtb //
+ep_spntn // Spin & Tonic (Maygay - Impulse)
+ep_spntna //
+ep_spntnb //
+ep_spntnc //
+ep_spook // Spooky Hollow (Global)
+ep_spooka //
+ep_spookb //
+ep_srwin // Sir Winalot (Maygay)
+ep_srwina //
+ep_srwinb //
+ep_srwinc //
+ep_srwind //
+ep_step // Stepping Stones (Maygay)
+ep_stepa //
+ep_stm // Storm Force (Global)
+ep_stma //
+ep_stmb //
+ep_stmc //
+ep_stmcl // Storm Force Club (Global)
+ep_stmcla //
+ep_strat // Stratagem (Maygay)
+ep_strata //
+ep_subb // Subbuteo (Maygay)
+ep_subba //
+ep_subbb //
+ep_subbc //
+ep_subbd //
+ep_subbe //
+ep_subbf //
+ep_subbg //
+ep_survi // Survival (Maygay)
+ep_survia //
+ep_tak5 // Take Five (Maygay - Union)
+ep_tak5a //
+ep_tcrwn // Triple Crown (Maygay)
+ep_tcrwna //
+ep_tcrwnb //
+ep_tcrwnc //
+ep_tcrwnd //
+ep_tcrwne //
+ep_tincn // Tin Can Alley (Maygay)
+ep_tincna //
+ep_tits // Title Shot Club (Maygay)
+ep_titsa //
+ep_titsb //
+ep_tod // Truth Or Dare (Global)
+ep_toda //
+ep_tonfn // Tons Of Fun (Maygay)
+ep_tonfna //
+ep_tortr // Torture TV (Maygay)
+ep_tortra //
+ep_tp // Trivial Pursuit (Maygay)
+ep_tp2 // Trivial Pursuit 2 (Maygay)
+ep_tp2a //
+ep_tpa //
+ep_tpb //
+ep_trail // Trailblazer (Maygay - Impulse)
+ep_traila //
+ep_trailb //
+ep_treas // Treasure Hunt (Global)
+ep_tree // Tree Amigos (Maygay)
+ep_treea //
+ep_trics // Triple Cash (Maygay - Union)
+ep_tricsa //
+ep_tutcl // Tutankhamun Club (Maygay)
+ep_tutcla //
+ep_tutclb //
+ep_twarp // Time Warp (Unk)
+ep_twarpa //
+ep_twarpb //
+ep_twarpc //
+ep_utncl // Utter Nutter Club (Global)
+ep_utncla //
+ep_utnut // Utter Nutter (Global)
+ep_utnuta //
+ep_utnutb //
+ep_utnutc //
+ep_vipjv // Viper Jive (Maygay - Extreme)
+ep_vipjva //
+ep_vipjvb //
+ep_vipjvc //
+ep_vipjvd //
+ep_wf // Wildfire (Global)
+ep_wfa //
+ep_wfb //
+ep_wfc //
+ep_wfd //
+ep_wfe //
+ep_wff //
+ep_wfg //
+ep_wildf // Wildfire (Maygay - Impulse)
+ep_wildfa //
+ep_wipeo // Wipeout (Maygay)
+ep_wipeoa //
+ep_wipeob //
+ep_wipeoc //
+ep_wipeoe //
+ep_wleek // Weakest Leek Club (Global)
+ep_wleeka //
+ep_word // Word Up (Maygay)
+ep_worda //
+ep_wordb //
+ep_wordc //
+ep_wordd //
+ep_worde //
+ep_wordf //
+ep_wordg //
+ep_wside // Wildside (Global)
+ep_wsidea //
+ep_wud // What's Up Doc (Global)
+ep_wuda //
+ep_wudb //
+ep_wudc //
+ep_wudd //
+ep_wude //
+ep_xspot // X Marks The Spot (Maygay)
+ep_xspota //
+ep_xspotb //
+ep_xtra // X-tra X-tra (Maygay)
+ep_xtraa //
+
+//@source:maygaysw.cpp
+mg_alad // Aladdin's Cave
+mg_bb // Big Break
+mg_ewg // Each Way Gambler
+mg_gbr // Guinness Book Of Records
+mg_jv // Jack & Vera
+mg_kf // Krypton Factor
+mg_lug // London Underground
+mg_pbw // Pinball Wizard
+mg_risk // Risk
+mg_scl // Super Clue
+
+//@source:maygayv1.cpp
+mv1bon // Believe It Or Not
+mv1cpc // Caesar's Palace Club
+mv1cpca //
+mv1cpcb //
+mv1cwq // Crossword Quiz
+mv1cwqa //
+mv1guac // Give Us A Clue
+mv1guaca //
+mv1sfx // Special Effects
+mv1sfx2 //
+mv1sfxa //
+mv1wc // World Cup
+screenp1 //
+screenp1a //
+screenp2 //
+screenp2a //
+screenp3 //
+screenp3a //
+screenp4 //
+screenpl // Screenplay
+
+//@source:mayumi.cpp
+mayumi // (c) 1988 Victory L.L.C., made by Sanritsu
+
+//@source:mazerbla.cpp
+greatgun // (c) 1983
+mazerbla // (c) 1983
+mazerblaa // (c) 1983
+
+//@source:mbc200.cpp
+mbc200 //
+
+//@source:mbc55x.cpp
+mbc55x // Sanyo MBC-550, MBC-555
+
+//@source:mbdtower.cpp
+mbdtower // Milton Bradley
+
+//@source:mbee.cpp
+mbee // Microbee 16 Standard or Plus
+mbee128 // Microbee 128K standard (CP/M)
+mbee128p // Microbee 128K premium (CP/M)
+mbee256 // Microbee 256TC (CP/M)
+mbee56 // Microbee 56K (CP/M)
+mbeeic // Microbee 32 IC
+mbeepc // Microbee 32 PC
+mbeepc85 // Microbee 32 PC85
+mbeepc85b // Microbee 32 PC85 (Business version)
+mbeepc85s // Microbee 32 PC85 (Swedish)
+mbeeppc // Microbee 32 PPC85
+mbeett // Microbee Teleterm
+
+//@source:mc10.cpp
+alice // Matra & Hachette Ordinateur Alice
+alice32 // Matra & Hachette Alice 32
+alice90 // Matra & Hachette Alice 90
+mc10 // MC-10
+
+//@source:mc1000.cpp
+mc1000 //
+
+//@source:mc1502.cpp
+mc1502 //
+pk88 //
+
+//@source:mc80.cpp
+mc8020 // MC 80.2x
+mc8030 // MC 80.3x
+
+//@source:mcatadv.cpp
+catt // (c) 1993 Wintechno
+mcatadv // (c) 1993 Wintechno
+mcatadvj // (c) 1993 Wintechno
+nost // (c) 1993 Face
+nostj // (c) 1993 Face
+nostk // (c) 1993 Face
+
+//@source:mcb216.cpp
+cb308 //
+mcb216 //
+
+//@source:mccpm.cpp
+mccpm //
+
+//@source:mcr.cpp
+demoderb // (c) 1984
+demoderbc // (c) 1984
+domino // (c) 1982
+dotron // (c) 1983
+dotrona // (c) 1983
+dotrone // (c) 1983
+dpoker // (c) 1985
+journey // (c) 1983
+kick // (c) 1981
+kickc // (c) 1981
+kickman // (c) 1981
+kroozr // (c) 1982
+nflfoot // (c) 1983 + laserdisk
+rbtapper // (c) 1984
+shollow // (c) 1981
+shollow2 // (c) 1981
+solarfox // (c) 1981
+sutapper // (c) 1983
+tapper // (c) 1983
+tappera // (c) 1983
+timber // (c) 1984
+tron // (c) 1982
+tron2 // (c) 1982
+tron3 // (c) 1982
+tron4 // (c) 1982
+tronger // (c) 1982
+twotiger // (c) 1984
+twotigerc // (c) 1984
+wacko // (c) 1982
+
+//@source:mcr3.cpp
+crater // (c) 1984
+demoderm // (c) 1984
+maxrpm // (c) 1986
+powerdrv // (c) 1986
+rampage // (c) 1986
+rampage2 // (c) 1986
+sarge // (c) 1985
+spyhunt // (c) 1983
+spyhuntp // (c) 1983
+spyhuntpr //
+stargrds // (c) 1987
+turbotag // (c) 1985
+
+//@source:mcr68.cpp
+archrivl // (c) 1989
+archrivla // (c) 1989
+archrivlb // bootleg
+blasted // (c) 1988
+intlaser // (c) 1987
+pigskin // (c) 1990
+pigskina // (c) 1990
+pigskinb // (c) 1990
+spyhunt2 // (c) 1987
+spyhunt2a // (c) 1987
+trisport // (c) 1989
+xenophob // (c) 1987
+zwackery // (c) 1984
+
+//@source:meadows.cpp
+bowl3d // [1978?]
+deadeye // [1978?]
+gypsyjug // [1978?]
+minferno // [1978?]
+
+//@source:meadwttl.cpp
+bombaway // (c) 1976 Meadows
+cgunship // (c) 1976 Meadows
+ckidzo // (c) 1976 Meadows
+mead4in1 // (c) 197? Meadows
+
+//@source:mediagx.cpp
+a51site4 // ?? (c) 1998
+a51site4a // Sept.11,1998 (c) 1998
+
+//@source:megadriv.cpp
+32x // 1994 Sega 32X (USA)
+32x_mcd // 1995 Sega Mega-CD (Europe w/32X addon)
+32x_mcdj // 1994 Sega Mega-CD (Japan w/32X addon)
+32x_scd // 1994 Sega Sega CD (USA w/32X addon)
+32xe //
+32xj //
+aiwamcd // 1994 AIWA Mega-CD CSD-G1M (Japan)
+cdx // 1994 Sega CDX (USA)
+genesis // 1989 Sega Genesis (USA)
+genesis_tmss //
+laseract // 1993 Pioneer LaserActive (USA)
+laseractj // 1993 Pioneer LaserActive (Japan)
+megacd // 1993 Sega Mega-CD (Europe)
+megacd2 // 1993 Sega Mega-CD 2 (Europe)
+megacd2j // 1993 Sega Mega-CD 2 (Japan)
+megacda // 1993 Sega Mega-CD (Asia)
+megacdj // 1991 Sega Mega-CD (Japan)
+megadrij // 1988 Sega Mega Drive (Japan)
+megadriv // 1990 Sega Mega Drive (Europe)
+multmega // 1994 Sega Multi-Mega (Europe)
+segacd // 1992 Sega Sega CD (USA)
+segacd2 // 1993 Sega Sega CD 2 (USA)
+wmega // 1992 Sega Wondermega (Japan)
+wmegam2 // 1993 Victor Wondermega M2 (Japan)
+xeye // 1993 JVC X'eye (USA)
+
+//@source:megadrvb.cpp
+aladmdb // MegaDrive-based hack
+mk3mdb // MegaDrive-based hack
+sonic2mb // MegaDrive-based hack
+srmdb // MegaDrive-based hack
+ssf2mdb // MegaDrive-based hack
+topshoot // (c) 1995 Sun Mixing
+
+//@source:megaphx.cpp
+megaphx // (c) 1991 Dinamic / Inder
+
+//@source:megaplay.cpp
+megaplay //
+mp_bio // 06
+mp_col3 // ??
+mp_gaxe2 // 02
+mp_gaxe2a // 02
+mp_gslam // 03
+mp_mazin // 11
+mp_shnb3 // 09
+mp_soni2 // 07
+mp_sonic // 01
+mp_sor2 // 05
+mp_twc // 04
+
+//@source:megasys1.cpp
+64street // (c) 1991
+64streetj // (c) 1991 (Japan)
+64streetja // (c) 1991 (Japan)
+astyanax // (c) 1989
+avspirit // (c) 1991
+bigstrik // (c) 1992
+chimerab // (c) 1993
+cybattlr // (c) 1993
+edf // (c) 1991
+edfa // (c) 1991
+edfbl // (c) 1991
+edfu // (c) 1991 (North America)
+hachoo // (c) 1989
+hayaosi1 // (c) 1993
+iganinju // (c) 1988 (Japan)
+jitsupro // (c) 1989 (Japan)
+kazan // (c) 1988 (World)
+kickoff // (c) 1988 (Japan)
+lomakai // (c) 1988 (World)
+lordofk // (c) 1989 (Japan)
+makaiden // (c) 1988 (Japan)
+monkelf // bootleg
+p47 // (c) 1988
+p47j // (c) 1988 (Japan)
+p47je // (c) 1988 (Japan, Export)
+peekaboo // (c) 1993
+peekaboou // (c) 1993
+phantasm // (c) 1991 (Japan)
+plusalph // (c) 1989
+rittam // Prototype or hack of Rod-Land
+rodland // (c) 1990
+rodlandj // (c) 1990 (Japan)
+rodlandjb // bootleg
+soldam // (c) 1992
+soldamj // (c) 1992 (Japan)
+stdragon // (c) 1989
+stdragona // (c) 1989
+stdragonb // bootleg
+tshingen // (c) 1988 (Japan)
+tshingena // (c) 1988 (Japan)
+
+//@source:megatech.cpp
+megatech //
+mt_aftrb // 10
+mt_arrow // 44
+mt_astrm // 47
+mt_astro // 13
+mt_asyn // 07
+mt_bbros // 49
+mt_beast // 01
+mt_calga // 55
+mt_cols // 36
+mt_crack // 41
+mt_eswat // 38
+mt_fshrk // 53
+mt_fwrld // 26
+mt_fz // 09
+mt_gaxe // 25
+mt_gaxe2 // 57
+mt_gfoot // 19
+mt_ggolf // 04
+mt_gng // 23
+mt_gsocr // 05
+mt_kcham // 60
+mt_lastb // 20
+mt_mlh // 59
+mt_mwalk // 40
+mt_mystd // 27
+mt_orun // 06
+mt_parlg // 29
+mt_revsh // 28
+mt_shado // 43
+mt_shang // 24
+mt_shar2 // 02
+mt_shnbi // 08
+mt_smgp // 39
+mt_soni2 // 62
+mt_sonia // ^^
+mt_sonic // 52
+mt_spman // 54
+mt_srage // 51
+mt_srbb // 32
+mt_stbld // 03
+mt_stf // 58
+mt_tetri // 22
+mt_tfor2 // 11
+mt_tgolf // 31
+mt_tlbba // 35
+mt_tout // 61
+mt_wcsoc // 21
+mt_wwar // 48
+
+//@source:megazone.cpp
+megazone // GX319 (c) 1983
+megazonea // GX319 (c) 1983
+megazoneb // GX319 (c) 1983 + Kosuka
+megazonec // GX319 (c) 1983 + Kosuka
+megazonei // GX319 (c) 1983 + Interlogic / Kosuka
+
+//@source:meijinsn.cpp
+meijinsn // (c) 1986 SNK
+
+//@source:mekd2.cpp
+mekd2 // 1977 Motorola Evaluation Kit
+
+//@source:mephisto.cpp
+mm2 // Mephisto 2
+mm4 // Mephisto 4
+mm4tk // Mephisto 4 Turbo Kit
+mm5 // Mephisto 5.1 ROM
+mm50 // Mephisto 5.0 ROM
+mm5tk // Mephisto 5.1 ROM Turbo Kit Speed
+rebel5 // Mephisto 5
+
+//@source:mephistp.cpp
+mephistp //
+mephistp1 //
+
+//@source:merit.cpp
+bigappg // (c) 1986 Merit / Big Apple Games
+casino5 // (c) 1984 Merit
+couple // (c) 1988 Merit
+couplei // (c) 1988 Merit
+couplep // (c) 1988 Merit
+dodgectya // (c) 1986 Merit
+dodgectyb // (c) 1986 Merit
+dodgectyc // (c) 1986 Merit
+dtrvwz5 // (c) 1987 Merit
+misdraw // (c) 1986 Merit / Big Apple Games
+mroundup // (c) 1984 Merit
+phrcraze // (c) 1986 Merit
+phrcrazea // (c) 1986 Merit
+phrcrazeb // (c) 1986 Merit
+phrcrazec // (c) 1986 Merit
+phrcrazev // (c) 1986 Merit
+pitboss // (c) 1983 Merit
+pitbossa // (c) 1983 Merit
+pitbossa1 // (c) 1983 Merit
+pitbossb // (c) 1983 Merit
+pitbossc // (c) 1983 Merit
+riviera // (c) 1987 Merit
+rivieraa // (c) 1986 Merit
+rivierab // (c) 1986 Merit
+tictac // (c) 1985 Merit
+tictacv // (c) 1985 Merit
+trvwz2 // (c) 1985 Merit
+trvwz2a // (c) 1985 Merit
+trvwz3h // (c) 1985 Merit
+trvwz3ha // (c) 1985 Merit
+trvwz3v // (c) 1985 Merit
+trvwz4 // (c) 1985 Merit
+trvwz4a // (c) 1985 Merit
+trvwzh // (c) 1985 Merit
+trvwzha // (c) 1985 Merit
+trvwzhb // (c) 1985 Merit
+trvwzv // (c) 1985 Merit
+
+//@source:meritm.cpp
+americna // (c) 1987 Merit
+americnaa // (c) 1987 Merit
+dodgecty // (c) 1988 Merit
+megat // (c) 1994 Merit
+megat2 // (c) 1994 Merit
+megat2a // (c) 1994 Merit
+megat2b // (c) 1994 Merit
+megat2ca // (c) 1994 Merit
+megat2caa // (c) 1994 Merit
+megat2mn // (c) 1994 Merit
+megat3 // (c) 1996 Merit
+megat3a // (c) 1996 Merit
+megat3b // (c) 1996 Merit
+megat3c // (c) 1996 Merit
+megat3ca // (c) 1996 Merit
+megat3caa // (c) 1995 Merit
+megat3d // (c) 1996 Merit
+megat3nj // (c) 1995 Merit
+megat3te // (c) 1996 Merit
+megat4 // (c) 1996 Merit
+megat4a // (c) 1996 Merit
+megat4b // (c) 1996 Merit
+megat4c // (c) 1996 Merit
+megat4d // (c) 1996 Merit
+megat4s // (c) 1996 Merit
+megat4sa // (c) 1996 Merit
+megat4sb // (c) 1996 Merit
+megat4smn // (c) 1996 Merit
+megat4snj // (c) 1996 Merit
+megat4st // (c) 1996 Merit
+megat4stg // (c) 1996 Merit
+megat4te // (c) 1996 Merit
+megat4tea // (c) 1996 Merit
+megat5 // (c) 1997 Merit
+megat5a // (c) 1997 Merit
+megat5nj // (c) 1997 Merit
+megat5t // (c) 1997 Merit
+megat5tg // (c) 1997 Merit
+megat6 // (c) 1998 Merit
+meritjp // (c) 1987 Merit
+mtjpoker // (c) 1994 Merit
+pbss330 // (c) 1994 Merit
+pbst30 // (c) 1994 Merit
+pbst30a // (c) 1993 Merit
+pitboss2 // (c) 1988 Merit
+pitbossm // (c) 1994 Merit
+pitbossma // (c) 1994 Merit
+pitbosss // (c) 1990 Merit
+pitbosssa // (c) 1990 Merit
+pitbosssc // (c) 1992 Merit
+realbrod // (c) 1995 Merit
+spitboss // (c) 1988 Merit
+
+//@source:mermaid.cpp
+mermaid // (c) 1982 Rock-ola, made by Sanritsu
+rougien // (c) 1982 Sanritsu
+yachtmn // (c) 1982 [Sanritsu] Esco
+
+//@source:mes.cpp
+mes //
+
+//@source:metalmx.cpp
+metalmx // 136103? (c) 1994
+
+//@source:metlclsh.cpp
+metlclsh // (c) 1985 Data East
+
+//@source:metro.cpp
+3kokushi // (c) 1996 Mitchell
+balcube // (c) 1996
+bangball // (c) 1996 Banpresto / Kunihiko Tashiro+Goodhouse
+batlbubl // (c) 1996 Banpresto / Kunihiko Tashiro+Goodhouse
+blzntrnd // (c) 1994 Human Amusement
+daitorid // (c) 1995
+daitorida // (c) 1996
+dharma // (c) 1994
+dharmaj // (c) 1994
+dharmak // (c) 1994
+dokyusei // (c) 1995 Make Software / Elf / Media Trading
+dokyusp // (c) 1995 Make Software / Elf / Media Trading
+gakusai // (c) 1997 MakeSoft
+gakusai2 // (c) 1998 MakeSoft
+gstrik2 // (c) 1996 Human Amusement
+gstrik2j // (c) 1996 Human Amusement
+gunmast // (c) 1994
+karatour // (c) 1992 Mitchell
+karatourj // (c) 1992 Mitchell
+ladykill // (c) 1993 Yanyaka + Mitchell license - (Arcade TV Game List - P.101, Right, 2 from Bottom)
+lastfort // (c) 1994
+lastforte // (c) 1994
+lastfortea // (c) 1994
+lastfortg // (c) 1994
+lastfortk // (c) 1994
+moegonta // (c) 1993 Yanyaka (Japan) (Arcade TV Game List - P.101, Right, 2 from Bottom)
+mouja // (c) 1996 Etona (Japan)
+msgogo // (c) 1995 Metro
+pangpoms // (c) 1992
+pangpomsm // (c) 1992 Mitchell / Metro
+poitto // (c) 1993 Metro / Able Corp.
+pururun // (c) 1995 Metro / Banpresto
+puzzlet // (c) 2000 Yunizu Corporation (Japan)
+puzzli // (c) 1995 Metro / Banpresto
+skyalert // (c) 1992
+toride2g // (c) 1994
+toride2gg // (c) 1994
+toride2gk // (c) 1994
+toride2j // (c) 1994
+vmetal // (c) 1995 Excellent System?
+vmetaln // (c) 1995 Excellent System?
+
+//@source:mexico86.cpp
+kicknrun // A87 (c) 1986 Taito Corporation
+kicknrunu // A87 (c) 1986 Taito Corporation
+kikikai // A85 (c) 1986 Taito Corporation
+knightb // bootleg
+mexico86 // bootleg (Micro Research)
+mexico86a // bootleg
+
+//@source:meyc8080.cpp
+casbjack // (c) 1983 Meyco Games
+mdrawpkr // (c) 1984 Meyco Games
+mdrawpkra // (c) 1984 Meyco Games
+wldarrow // (c) 1982 Meyco Games
+
+//@source:meyc8088.cpp
+gldarrow // (c) 1984 Meyco Games
+
+//@source:mgames.cpp
+mgames // (c) 1981 Merit
+
+//@source:mgavegas.cpp
+mgavegas //
+mgavegas133 //
+mgavegas21 //
+
+//@source:mgolf.cpp
+mgolf // ?????? prototype 1978 [6502]
+
+//@source:mhavoc.cpp
+alphaone // (proto) (c) 1983
+alphaonea // (proto) (c) 1983
+mhavoc // 136025 (c) 1983
+mhavoc2 // 136025 (c) 1983
+mhavocp // 136025 (c) 1983
+mhavocrv // (hack)
+
+//@source:mice.cpp
+mice //
+
+//@source:micral.cpp
+micral //
+
+//@source:micro3d.cpp
+botss // (c) 1992 Microprose Games Inc.
+botss11 // (c) 1992 Microprose Games Inc.
+f15se // (c) 1991 Microprose Games Inc.
+f15se21 // (c) 1991 Microprose Games Inc.
+tankbatl // (c) 1992 Microprose Games Inc.
+
+//@source:microdec.cpp
+md2 //
+md3 //
+
+//@source:microkit.cpp
+microkit //
+
+//@source:micronic.cpp
+micronic //
+
+//@source:micropin.cpp
+pentacup //
+pentacup2 //
+
+//@source:microtan.cpp
+microtan // 1979 Microtan 65
+
+//@source:microvsn.cpp
+microvsn // Milton Bradley
+
+//@source:midas.cpp
+hammer // (c) 2000 Andamiro
+livequiz // (c) 1999 Andamiro
+
+//@source:midqslvr.cpp
+arctthnd // (c) 2001 Midway Games
+hydrthnd // (c) 1999 Midway Games
+offrthnd // (c) 2000 Midway Games
+ultarctc // (c) 2001 Midway Games
+ultarctcup // (c) 2001 Midway Games
+
+//@source:midtunit.cpp
+jdreddp // (c) 1993 Midway
+mk // (c) 1992 Midway
+mk2 // (c) 1993 Midway
+mk2chal // hack
+mk2r11 // (c) 1993 Midway
+mk2r14 // (c) 1993 Midway
+mk2r20 // (c) 1993 Midway
+mk2r21 // (c) 1993 Midway
+mk2r30 // (c) 1993 Midway
+mk2r31e // (c) 1993 Midway
+mk2r32e // (c) 1993 Midway
+mk2r42 // hack
+mk2r91 // hack
+mkr4 // (c) 1992 Midway
+mktturbo // hack
+nbajam // (c) 1993 Midway
+nbajamr1 // (c) 1993 Midway
+nbajamr2 // (c) 1993 Midway
+nbajamte // (c) 1994 Midway
+nbajamte1 // (c) 1994 Midway
+nbajamte2 // (c) 1994 Midway
+nbajamte3 // (c) 1994 Midway
+nbajamten // (c) 1995 Midway
+
+//@source:midvunit.cpp
+crusnusa // (c) 1994 Midway
+crusnusa21 // (c) 1994 Midway
+crusnusa40 // (c) 1994 Midway
+crusnwld // (c) 1996 Midway
+crusnwld13 // (c) 1996 Midway
+crusnwld17 // (c) 1996 Midway
+crusnwld19 // (c) 1996 Midway
+crusnwld20 // (c) 1996 Midway
+crusnwld23 // (c) 1996 Midway
+crusnwld24 // (c) 1996 Midway
+offroadc // (c) 1997 Midway (v1.63)
+offroadc1 // (c) 1997 Midway (v1.10)
+offroadc3 // (c) 1997 Midway (v1.30)
+offroadc4 // (c) 1997 Midway (v1.40)
+offroadc5 // (c) 1997 Midway (v1.50)
+wargods // (c) 1996 Midway (HD 10/09/1996 - Dual Resolution)
+wargodsa // (c) 1996 Midway (HD 08/15/1996)
+wargodsb // (c) 1996 Midway (HD 12/11/1995)
+
+//@source:midwunit.cpp
+mk3 // (c) 1994 Midway
+mk3p40 // (c) 1994 Midway
+mk3r10 // (c) 1994 Midway
+mk3r20 // (c) 1994 Midway
+nbahangt // (c) 1996 Midway
+nbamht // (c) 1996 Midway
+nbamht1 // (c) 1996 Midway
+openice // (c) 1995 Midway
+rmpgwt // (c) 1997 Midway
+rmpgwt11 // (c) 1997 Midway
+umk3 // (c) 1994 Midway
+umk3r10 // (c) 1994 Midway
+umk3r11 // (c) 1994 Midway
+wwfmania // (c) 1995 Midway
+wwfmaniab // (c) 1995 Midway
+wwfmaniac // (c) 1995 Midway
+
+//@source:midxunit.cpp
+revx // (c) 1994 Midway
+revxp5 // (c) 1994 Midway
+
+//@source:midyunit.cpp
+hiimpact // (c) 1990 Williams
+hiimpact1 // (c) 1990 Williams
+hiimpact2 // (c) 1990 Williams
+hiimpact3 // (c) 1990 Williams
+hiimpact4 // (c) 1990 Williams
+hiimpactp // (c) 1990 Williams
+mkla1 // (c) 1992 Midway
+mkla2 // (c) 1992 Midway
+mkla3 // (c) 1992 Midway
+mkla4 // (c) 1992 Midway
+mknifty // hack
+mknifty666 // hack
+mkprot4 // (c) 1992 Midway
+mkprot8 // (c) 1992 Midway
+mkprot9 // (c) 1992 Midway
+mkyawdim // bootleg
+mkyawdim2 // bootleg
+mkyawdim3 // bootleg
+mkyawdim4 // bootleg
+mkyturbo // hack
+mkyturboe // hack
+narc // (c) 1988 Williams
+narc2 // (c) 1988 Williams
+narc3 // (c) 1988 Williams
+shimpact // (c) 1991 Midway
+shimpactp4 // (c) 1991 Midway
+shimpactp5 // (c) 1991 Midway
+shimpactp6 // (c) 1991 Midway
+smashtv // (c) 1990 Williams
+smashtv3 // (c) 1990 Williams
+smashtv4 // (c) 1990 Williams
+smashtv5 // (c) 1990 Williams
+smashtv6 // (c) 1990 Williams
+strkforc // (c) 1991 Midway
+term2 // (c) 1992 Midway
+term2la1 // (c) 1992 Midway
+term2la2 // (c) 1992 Midway
+term2la3 // (c) 1992 Midway
+totcarn // (c) 1992 Midway
+totcarnp // (c) 1992 Midway
+trog // (c) 1990 Midway
+trog3 // (c) 1990 Midway
+trog4 // (c) 1990 Midway
+trogpa4 // (c) 1990 Midway
+trogpa6 // (c) 1990 Midway
+
+//@source:midzeus.cpp
+crusnexo // (c) 1999 Midway (v2.4) Latest offical release
+crusnexoa // (c) 1999 Midway (v2.0)
+crusnexob // (c) 1999 Midway (v1.6)
+crusnexoc // (c) 1999 Midway (v1.3)
+crusnexod // (c) 1999 Midway (v1.0)
+invasnab // (c) 1999 Midway (v5.0) Latest offical release
+invasnab3 // (c) 1999 Midway (v3.0)
+invasnab4 // (c) 1999 Midway (v4.0)
+mk4 // (c) 1997 Midway (v3.0) Latest offical release
+mk4a // (c) 1997 Midway (v2.1)
+mk4b // (c) 1997 Midway (v1.0)
+thegrid // (c) 2001 Midway (v1.2) Latest offical release
+thegrida // (c) 2001 Midway (v1.1)
+
+//@source:mikie.cpp
+mikie // GX469 (c) 1984
+mikiehs // GX469 (c) 1984
+mikiej // GX469 (c) 1984
+
+//@source:mikro80.cpp
+kristall2 //
+mikro80 //
+radio99 //
+
+//@source:mikromik.cpp
+mm1m6 //
+mm1m7 //
+
+//@source:mikrosha.cpp
+m86rk //
+mikrosha //
+
+//@source:mil4000.cpp
+chewheel // (c) 200? Assogiochi Assago (Mi)
+mil4000 // (c) 2000 Sure Milano
+mil4000a // (c) 2000 Sure Milano
+mil4000b // (c) 2000 Sure Milano
+mil4000c // (c) 2000 Sure Milano
+top21 // (c) 200? Assogiochi Assago (Mi)
+
+//@source:mini2440.cpp
+mini2440 //
+
+//@source:miniboy7.cpp
+miniboy7 // (c) 1983, Bonanza Enterprises
+miniboy7a // (c) 1983, Bonanza Enterprises
+
+//@source:minicom.cpp
+mcom4_02 //
+minicom //
+
+//@source:minivadr.cpp
+minivadr // D26 cabinet test board
+
+//@source:mirage.cpp
+mirage // (c) 1994 Mitchell
+
+//@source:mirax.cpp
+mirax // (c) 1985 Current Technologies
+miraxa // (c) 1985 Current Technologies
+
+//@source:missb2.cpp
+bublpong // bootleg on enhanced hardware
+missb2 // bootleg on enhanced hardware
+
+//@source:missile.cpp
+mcombat // bootleg
+mcombata // bootleg
+mcombats // bootleg
+missile // 035820-035825 (c) 1980, 1 ROM update to rev 2 board
+missile1 // 035820-035825 (c) 1980
+missile2 // 035820-035825 (c) 1980
+missilem // hack
+suprmatk // (c) 1980 + (c) 1981 Gencomp
+suprmatkd // (c) 1980 + (c) 1981 Gencomp
+
+//@source:mitchell.cpp
+7toitsu // (c) 1988 Yuga
+bbros // (c) 1989 Capcom (US) not listed on Capcom's site
+block // 19/12/1991 (c) 1991 Capcom (World) (Joystick version)
+blockbl // bootleg
+blockj // 10/09/1991 (c) 1991 Capcom (Japan)
+blockr1 // 06/11/1991 (c) 1991 Capcom (World) (Joystick version)
+blockr2 // 10/09/1991 (c) 1991 Capcom (World)
+cworld // 11/1989 (QUIZ 1) (c) 1989 Capcom
+dokaben // 3/1989 (c) 1989 Capcom (Japan)
+hatena // 28/02/1990 (QUIZ 2) (c) 1990 Capcom (Japan)
+marukin // 17/10/1990 (c) 1990 Yuga (Japan)
+mgakuen // (c) 1988 Yuga
+mgakuen2 // (c) 1989 Face
+mstworld // (c) 1994
+pang // (c) 1989 Mitchell (World)
+pangb // bootleg
+pangb2 // bootleg
+pangba // bootleg
+pangbold // bootleg
+pkladies // (c) 1989 Mitchell
+pkladiesbl // bootleg
+pkladiesl // (c) 1989 Leprechaun
+pkladiesla // (c) 1989 Leprechaun
+pompingw // (c) 1989 Mitchell (Japan)
+qsangoku // 07/06/1991 (QUIZ 4) (c) 1991 Capcom (Japan)
+qtono1 // 25/12/1990 (QUIZ 3) (c) 1991 Capcom (Japan)
+sbbros // 01/10/1990 (c) 1990 Mitchell + Capcom (US) not listed on Capcom's site
+spang // 14/09/1990 (c) 1990 Mitchell (World)
+spangbl // bootleg
+spangj // --/--/1990 (c) 1990 Mitchell (Japan)
+
+//@source:mits680b.cpp
+mits680b //
+
+//@source:mjkjidai.cpp
+mjkjidai // (c) 1986 Sanritsu
+
+//@source:mjsister.cpp
+mjsister // (c) 1986 Toaplan
+
+//@source:mk1.cpp
+ccmk1 // Chess Champion MK I
+
+//@source:mk14.cpp
+mk14 //
+
+//@source:mk2.cpp
+ccmk2 // Chess Champion MK II
+
+//@source:mk85.cpp
+mk85 //
+
+//@source:mk90.cpp
+mk90 //
+
+//@source:mkit09.cpp
+mkit09 //
+mkit09a //
+
+//@source:mlanding.cpp
+mlanding // ??? (c) 1987 Taito America Corporation (US)
+
+//@source:mmagic.cpp
+mmagic // (c) 1979 Nintendo
+
+//@source:mmd1.cpp
+mmd1 //
+mmd2 //
+
+//@source:mmm.cpp
+mmm_ldip // Lucky Dip
+
+//@source:mmodular.cpp
+academy // 1989 Mephisto Academy Schachcomputer
+alm16 // 1988 Mephisto Almeria 68000
+alm32 // 1988 Mephisto Alimera 68020
+berlinp // 1994 Mephisto Berlin Pro 68020
+bpl32 // 1996 Mephisto Berlin Pro London Upgrade V5.00
+diablo68 // 1991 Novag Diablo 68000 Chess Computer
+gen32 // 1993 Mephisto Genius030 V4.00
+gen32_41 // 1993 Mephisto Genius030 V4.01
+lond020 // 1996 Mephisto London 68020 32 Bit
+lond030 // 1996 Mephisto Genius030 London Upgrade V5.00
+lyon16 // 1990 Mephisto Lyon 68000
+lyon32 // 1990 Mephisto Lyon 68020
+megaiv // 1989 Mephisto Mega IV Schachcomputer
+milano // 1989 Mephisto Milano Schachcomputer
+monteciv // 1990 Mephisto Monte Carlo IV LE Schachcomputer
+polgar // 1986 Mephisto Polgar Schachcomputer
+risc // Saitek 2500 14MHZ (skeleton)
+sexpertb // 1988 Novag Expert B Chess Computer
+sexpertc // 1989 Novag Super Expert C Chess Computer
+sfortea // 1987 Novag Super Forte A Chess Computer
+sforteb // 1988 Novag Super Forte B Chess Computer
+sforteba // 1988 Novag Super Forte B Chess Computer (ALT)
+sfortec // 1989 Novag Super Forte C Chess Computer
+van16 // 1991 Mephisto Vancouver 68000
+van32 // 1991 Mephisto Vancouver 68020
+
+//@source:mod8.cpp
+mod8 //
+
+//@source:model1.cpp
+netmerc // ?? Info available in time ??
+swa // 1994.04 Star Wars Arcade
+vf // 1993.12 Virtua Fighter
+vformula // 1993.?? Virtua Formula
+vr // 1992.08 Virtua Racing
+wingwar // 1994.06 Wing War
+wingwarj // 1994.06 Wing War (Japan)
+wingwaru // 1994.09 Wing War (US)
+
+//@source:model2.cpp
+bel // 1998.12 Behind Enemy Lines
+daytona // 1994.03 Daytona USA (Japan, Revision A)
+daytona93 //
+daytonam // 1993, hack
+daytonas //
+daytonase // 1994 Daytona USA Special Edition (Japan, Revision A)
+daytonat // 1993, hack
+daytonata // 1993, hack
+desert // 1994.07 Desert Tank
+doa // 1996.11 Dead or Alive (Revision B)
+doaa // 1996.11 Dead or Alive (Revision A)
+dynabb // 1996.08 Dynamite Baseball
+dynabb97 // 1997.04 Dynamite Baseball 97 (Revision A)
+dynamcop // 1998.09 Dynamic Cop (Export)
+dynamcopb // 1998.09 Dynamite Cop (Export)
+dynamcopc // 1998.09 Dynamite Cop (USA)
+dyndeka2 // 1998.05 Dynamite Deka 2 (Japan)
+dyndeka2b // 1998.05 Dynamite Deka 2 (Japan)
+fvipers // 1995.11 Fighting Vipers (Revision D)
+gunblade // 1996.04 Gunblade N.Y. (Revision A)
+hotd // 1997.03 The House of the Dead
+indy500 // 1995.07 Indy 500 (Revision A, Newer)
+indy500d // 1995.07 Indy 500 Deluxe (Revision A)
+indy500to // 1995.07 Indy 500 Twin (Revision A)
+lastbrnx // 1996.06 Last Bronx (Export, Revision A)
+lastbrnxj // 1996.06 Last Bronx (Japan, Revision A)
+lastbrnxu // 1996.06 Last Bronx (USA, Revision A)
+manxtt // 1995.11 Manx T.T. DX (Revision D)
+manxttc // 1995.11 Manx T.T. (Revision C)
+motoraid // 1997.10 Motor Raid
+overrev // 1997.09 Over Rev (Revision A)
+overrevb // 1997.09 Over Rev (Revision B)
+pltkids // 1999.03 Pilot Kids (Revision A)
+pltkidsa // 1999.03 Pilot Kids
+rchase2 // 1995.06 Rail Chase 2 (Revision A)
+schamp // 1996.05 Sonic Championship (USA)
+segawski // 1997.09 Sega Water Ski (Japan, Revision A)
+sfight // 1996.05 Sonic the Fighters (Japan)
+sgt24h // 1996.07 Super GT 24h
+skisuprg // 1996.12 Sega Ski Super G
+skytargt // 1995.10 Sky Target
+srallyc // 1995.02 Sega Rally Championship TWIN (Revision C)
+srallyca // 1995.02 Sega Rally Championship DX (Revision A)
+srallycb // 1995.02 Sega Rally Championship TWIN (Revision B)
+stcc // 1996.09 Sega Touring Car Championship
+stcca // 1996.09 Sega Touring Car Championship (Revision A)
+stccb // 1996.09 Sega Touring Car Championship
+topskatr // 1997.05 Top Skater (Export, Revision A)
+topskatrj // 1997.05 Top Skater (Japan)
+topskatru // 1997.05 Top Skater (USA, Revision A)
+vcop // 1994.09 Virtua Cop (Revision B)
+vcop2 // 1995.09 Virtua Cop 2
+vcopa // 1994.09 Virtua Cop (Revision A)
+vf2 // 1995.09 Virtua Fighter (Version 2.1)
+vf2a // 1995.?? Virtua Fighter 2 (Revision A)
+vf2b // 1995.?? Virtua Fighter 2 (Revision B)
+vf2o // 1994.11 Virtua Fighter 2
+von // 1996.01 Cyber Troopers Virtual-On (USA, Revision B)
+vonj // 1996.01 Cyber Troopers Virtual-On (Japan, Revision B)
+vstriker // 1995.05 Virtua Striker (Revision A)
+vstrikero // 1995.05 Virtua Striker
+waverunr // 1996.10 Wave Runner (Japan, Revision A)
+zerogun // 1997.12 Zero Gunner (Export)
+zeroguna // 1997.12 Zero Gunner (Export)
+zerogunaj // 1997.12 Zero Gunner (Japan)
+zerogunj // 1997.12 Zero Gunner (Japan)
+
+//@source:model3.cpp
+bass // 1997.12 Get Bass
+bassdx //
+dayto2pe // 1998.12 Daytone USA 2 Power Edition
+daytona2 // 1998.06 Daytona USA 2
+dirtdvls // 1998.10 Dirt Devils
+dirtdvlsa //
+eca // 1999.10 Kyukyuusya Emergency Call Ambulance
+ecap // 1999.12 Emergency Call Ambulance - US proto or location test
+ecau //
+fvipers2 // 1998.04 Fighting Vipers 2
+getbass //
+harley // 199?.?? Harley Davidson & L.A.Riders (rev B)
+harleya // 1997.12 Harley Davidson & L.A.Riders (rev A)
+lamachin // 1998.12 L.A. Machine Guns
+lemans24 // 1997.09 Le Mans 24
+lostwsga // 1997.07 Lost World Jurassic Park
+magtruck // 1999.03 Magical Truck Adventure (US)
+oceanhun // 1998.09 Ocean Hunter
+scud // 1996.12 Scud Race
+scuda //
+scudj //
+scudplus // 1997.09 Scud Race Plus (rev A)
+scudplusa // 1997.09 Scud Race Plus
+skichamp // 1998.01 Ski Champ
+spikeofe // 1999.01 Spikeout Final Edition
+spikeout // 1998.09 Spikeout
+srally2 // 1998.02 Sega Rally 2 Championship
+srally2x //
+swtrilgy // 1998.11 Star Wars Trilogy Arcade
+swtrilgya //
+vf3 // 1996.09 Virtua Fighter 3
+vf3a //
+vf3tb // 1997.10 Virtua Fighter 3tb
+von2 // 1998.03 Dennou Senki Virtual-On Oratorio Tangram
+von254g // 1999.05 Dennou Senki Virtual-On Oratorio Tangram ver.5.4
+vs2 // 1997.06 Virtua Striker 2
+vs215 // 1997.06 Virtua Striker 2
+vs215o // 1997.06 Virtua Striker 2
+vs298 // 1998.05 Virtua Striker 2 ver.98
+vs29815 // 1998.05 Virtua Striker 2 ver.98
+vs299 // 1998.12 Virtual Striker 2 ver.99
+vs299a // 1999.?? Virtual Striker 2 ver.99 (rev A)
+vs299b // 1999.?? Virtual Striker 2 ver.99 (rev B)
+vs2v991 // 1999.?? Virtual Striker 2 ver.99.1
+
+//@source:modellot.cpp
+modellot //
+
+//@source:mogura.cpp
+mogura // GX141 (c) 1991
+
+//@source:mole.cpp
+mole // (c) 1982 Yachiyo Electronics, Ltd.
+
+//@source:molecular.cpp
+molecula //
+
+//@source:momoko.cpp
+momoko // (c) 1986 Jaleco
+
+//@source:monacogp.cpp
+monacogp // (c) 1980 Sega
+monacogpa // (c) 1980 Sega
+
+//@source:monty.cpp
+mmonty // Ritam
+monty // Ritam
+
+//@source:monzagp.cpp
+monzagp // (c) 1981 Olympia
+monzagpb // bootleg
+
+//@source:moo.cpp
+bucky // GX173 (c) 1992 (World)
+buckyaab // GX173 (c) 1992 (Asia)
+buckyea // GX173 (c) 1992 (World)
+buckyuab // GX173 (c) 1992 (US)
+moomesa // GX151 (c) 1992 (World)
+moomesaaab // GX151 (c) 1992 (Asia)
+moomesabl // bootleg
+moomesauab // GX151 (c) 1992 (US)
+moomesauac // GX151 (c) 1992 (US)
+
+//@source:mosaic.cpp
+gfire2 // (c) 1992 Topis Corp
+mosaic // (c) 1990 Space
+mosaica // (c) 1990 Space + Fuuki license
+
+//@source:mouser.cpp
+mouser // UPL-83001 (c) 1983
+mouserc // UPL-83001 (c) 1983
+
+//@source:mpf1.cpp
+mpf1 // 1979 Multitech Micro Professor 1
+mpf1b // 1979 Multitech Micro Professor 1B
+mpf1p //
+
+//@source:mps1230.cpp
+mps1000 // 1986 Commodore MPS-1000 (dot matrix printer)
+mps1230 // 1988 Commodore MPS-1230 near-letter-quality dot matrix printer
+
+//@source:mpu12wbk.cpp
+fruitstb //
+
+//@source:mpu2.cpp
+m2hilite // Hi-Lights (Barcrest) (MPU2)
+m2svlite // Silver Lights (Barcrest) (MPU2)
+
+//@source:mpu3.cpp
+m3acech // Ace Chase (Bwb)
+m3autort // Autoroute (Barcrest)
+m3bankr // Banker (Bwb)
+m3big20j // Big 20 Joker (Barcrest)
+m3biggam // The Big Game (Barcrest)
+m3bigsht // Big Shot (Barcrest)
+m3blkhle // Black Hole (Barcrest)
+m3cabret // Cabaret (Barcrest)
+m3cabreta //
+m3cdash // Cash Dash (Pcp)
+m3chase // Chase It (Bwb)
+m3circle // Special Circle Club (Barcrest)
+m3circlea //
+m3circleb //
+m3cjoker // Crazy Joker (Barcrest)
+m3cskill // Circle Skill (Barcrest)
+m3cunlim // Chances Unlimited (Barcrest)
+m3fortun // Fortune Numbers (Barcrest)
+m3fortuna //
+m3fortund //
+m3gaward // Golden Award (Barcrest)
+m3gcrown // Golden Crowns (Mdm)
+m3gmine // Gold Mine (Bwb)
+m3hprvpr // Hyper Viper (Barcrest)
+m3lineup // Line Up (Barcrest)
+m3llotto // Lucky Lotto (Barcrest)
+m3loony // Loonybin (Pcp)
+m3lstrik // Lucky Strike Club (Barcrest)
+m3lstrika //
+m3magrp // Magic Replay (Barcrest)
+m3minmax // Mini Max (Associated Leisure)
+m3mremon // More Money (VFS)
+m3nnice // Naughty But Nice (Barcrest)
+m3nudge // Nudges Unlimited (Barcrest)
+m3oddson // Odds On (Barcrest)
+m3online // On Line (Pcp)
+m3optunl // Options Unlimited (Barcrest)
+m3oxo // Noughts 'n' Crosses (VFS)
+m3ratrce // Rat Race (Bwb)
+m3razdaz // Razzle Dazzle (Barcrest)
+m3razdaza //
+m3razdazd //
+m3replay // Instant Replay (Barcrest)
+m3rockpl // Rock Pile (Pcp)
+m3rollem // Roll 'Em (Pcp)
+m3rxchng // Royal Exchange Club (Barcrest)
+m3scoop // Scoop (Peter Simper, prototype?)
+m3sdeal // Super Deal (Barcrest)
+m3sexcu // Super Exchanges Unlimited (Barcrest)
+m3slight // Strike A Light (Barcrest)
+m3snaphp // Snap Happy (Pcp)
+m3snappy // Snappy Viper (Barcrest)
+m3spoof // Spoof (Pcp)
+m3spoofa //
+m3supadr // Super Adders & Ladders (Barcrest)
+m3supasw // Supaswop (Bwb)
+m3suplin // Super Line Up (Barcrest)
+m3suplina //
+m3supnud // Super Nudges Unlimited (Barcrest)
+m3supser // Super Series (Barcrest)
+m3supspo // Super Spoof (Pcp)
+m3supspoa //
+m3supwin // Super Win (Bwb)
+m3supwina //
+m3sweep // Sweep Stake Club (Barcrest)
+m3sweepa //
+m3tfair // Tuppenny Fair (Mdm)
+m3tlktwn // Talk of The Town (Unknown)
+m3toplin // Top Line (Pcp)
+m3topsht // Top Shot (Barcrest)
+m3tst // MPU3 Unit Test (Program 5) (Barcrest)
+m3wacky // Wacky Racer (Mdm)
+m3wigwam // Wig Wam (Pcp)
+m3winagn // Win-A-Gain (Bwb)
+m3winagna //
+m3winagnb //
+m3winstr // Winstrike (Bwb)
+m3winstra // Winstrike (Barcrest)
+m3xchngg // Exchanges Galore (Barcrest)
+m3xchngu // Exchanges Unlimited (Barcrest)
+m3xchngua //
+
+//@source:mpu4.cpp
+m4aao // Against All Odds (Eurotek)
+m4addrd //
+m4aliz // AlizBaz (Qps)
+m4amhiwy // American Highway (Barcrest)
+m4bandgd // Bands Of Gold (Eurogames)
+m4barcrz // Bar Crazy (unknown)
+m4bclimb // Bear Climber
+m4bigban // Big Bandit (Nova)
+m4bigben // Big Ben (Coinworld)
+m4bigbena //
+m4bigbenb //
+m4bigbend //
+m4bigbene //
+m4blkbul // Black Bull (Barcrest)
+m4blkbuld //
+m4blkcat // Black Cat (Barcrest)
+m4blkgd // Black Gold (Gemini)
+m4blkgda //
+m4blkwhd // Black & White (Barcrest) [Dutch]
+m4bluedm // Blue Diamond (Barcrest)
+m4boltbl // Bolt From The Blue (DJE)
+m4boltbla //
+m4boltblb //
+m4boltblc //
+m4bonzbn // Bingo Bonanza (unknown)
+m4booze // Booze Cruise
+m4brnze // Bronze Voyage (unknown)
+m4brnzea //
+m4brnzeb //
+m4brook // Brooklyn (Barcrest)
+m4bucks // Bucks Fizz Club (Barcrest)
+m4c2 // Circus Circus 2 (Nova)
+m4c9c // Cloud Nine Club (Barcrest)
+m4calicl // California Club (Barcrest)
+m4calicla //
+m4caliclb //
+m4caliclc //
+m4calicld //
+m4captb // Captain Bear
+m4casmul // Casino Multiplay (Barcrest)
+m4casot // Casino Old Timer (Barcrest)
+m4cbing // Cherry Bingo
+m4ccc //
+m4ccop //
+m4ccopa //
+m4ccopb //
+m4ceptr // Ceptor (Barcrest)
+m4ch30 // Unknown MPU4 'CH30' (Barcrest)
+m4chasei // Chase Invaders (Barcrest)
+m4chaseia //
+m4chaseib //
+m4chaseic //
+m4chaseid //
+m4chaseie //
+m4chaseif //
+m4clbveg // Club Vegas (Barcrest)
+m4clbvega //
+m4clbvegb //
+m4clbvegc //
+m4clbx // Club X (Barcrest)
+m4clbxa //
+m4clbxb //
+m4cld02 // Unknown MPU4 'CLD 0.2C'
+m4clr // MPU4 Meter Clear ROM
+m4coney // Coney Island (Qps)
+m4crjwl // Crown Jewels Club (Barcrest)
+m4crjwl2 // Crown Jewels Mk II Club (Barcrest)
+m4crjwl2a //
+m4crjwl2b //
+m4crjwla //
+m4crjwlb //
+m4crjwlc //
+m4crzcav // Crazy Cavern (Nova)
+m4crzcsn // Crazy Casino (Nova)
+m4crzjk // Crazy Jokers (Barcrest)
+m4crzjwl // Crown Jewels (Barcrest)
+m4crzjwla //
+m4crzjwlb //
+m4crzjwlc //
+m4crzjwld //
+m4crzjwle //
+m4crzjwlf //
+m4crzjwlg //
+m4crzjwlh //
+m4czne // Cash Zone (Bwb)
+m4dblchn // Double Chance (DJE)
+m4ddb // Ding Dong Bells (Coinworld)
+m4ddba //
+m4dnj // Double Nudge (unknown)
+m4dnja //
+m4dnjb //
+m4drac // Dracula (Barcrest - Nova)
+m4draca //
+m4dracb //
+m4dragon // Dragon (Nova)
+m4exgam // Extra Game (Fairplay - Barcrest)
+m4fortcb // Fortune Club (Barcrest)
+m4fortcba //
+m4fortcbb //
+m4fourmr // Four More (Bwb)
+m4frtgm // Fruit Game (Barcrest)
+m4fsx // Fun Spot X
+m4fsxa //
+m4fsxb //
+m4funh // Fun House
+m4gldgat // Golden Gate (Barcrest)
+m4gldjok // Golden Joker (Barcrest)
+m4gnsmk // Gun Smoke (Barcrest)
+m4goldnn // Golden Years (Nova)
+m4hapfrt // Happy Fruits (Coinworld)
+m4hapfrta //
+m4hapfrtb //
+m4hilonv // Hi Lo Casino (Nova)
+m4hirise // High Rise (Barcrest)
+m4hirisea //
+m4hiriseb //
+m4hirisec //
+m4hirised //
+m4hirisee //
+m4holdtm // Hold Timer (Barcrest)
+m4holywd // Hollywood (Bwb)
+m4hpyjok // Happy Joker (Barcrest)
+m4hslo // Unknown MPU4 'HOT 3.0'
+m4hstr // Happy Streak (Coinworld)
+m4hstra //
+m4hstrb //
+m4hstrcs // Casino Happy Streak (Coinworld)
+m4hstrcsa //
+m4hstrcsb //
+m4hstrcsc //
+m4hstrcsd //
+m4jok300 // Jokers 300 (Barcrest)
+m4jokmil // Jokers Millennium (Barcrest)
+m4joljokh //
+m4jp777 // Jackpot 777
+m4jpmcla // JPM Classic (Barcrest)
+m4jungj // Jungle Japes
+m4jungja //
+m4jungjb //
+m4jungjc //
+m4kqclub // Kings & Queens Club (Newby)
+m4lazy // Lazy Bones (Bwb)
+m4lazya //
+m4lazyb //
+m4lineup // Line Up (Bwb - Barcrest)
+m4lineupa //
+m4luck7 // Lucky 7 (Barcrest)
+m4luckdv // Lucky Devil (Barcrest) [Czech]
+m4luckdvd //
+m4luckwb // Lucky Wild Boar (Barcrest)
+m4luckwba //
+m4luckwbb //
+m4luckwbc //
+m4luckwbd //
+m4luckwbe //
+m4luckwbf //
+m4magdrg // Magic Dragon (Barcrest)
+m4maglin // Magic Liner (Barcrest)
+m4magrep // Magic Replay DeLuxe (Barcrest)
+m4magtbo // Magic Turbo
+m4matdr // Matador (unknown)
+m4mgpn // Monaco Grand Prix (Nova)
+m4nile // Nile Jewels (Barcrest)
+m4nod //
+m4nspot // Night Spot Club (Barcrest)
+m4nspota //
+m4nspotb //
+m4nudshf // Nudge Shuffle (Barcrest)
+m4nudshfa //
+m4nudshfb //
+m4nudshfc //
+m4octo // Octopus (Nova)
+m4oldtmr // Old Timer (Barcrest)
+m4ordmnd // Oriental Diamonds (Barcrest)
+m4prem // Premier (Barcrest)
+m4ptblkc // Pot Black Casino (Bwb - Barcrest)
+m4rdht // Red Heat (Barcrest)
+m4reeltm // Reel Timer (Barcrest)
+m4remag // Unknown MPU4 'ZTP 0.7'
+m4ringfr // Ring Of Fire (Barcrest)
+m4riotrp // Rio Tropico (unknown)
+m4rltst // MPU4 Reel Test (3.0)
+m4rmg // Unknown MPU4 'CTP 0.4'
+m4roadrn // Road Runner (Barcrest)
+m4royjwl // Royal Jewels (Barcrest)
+m4rwb // Red White & Blue (Barcrest)
+m4salsa // Salsa (Barcrest)
+m4sbx // Super Bear X
+m4sbxa //
+m4sbxb //
+m4sbxc //
+m4sbxd //
+m4sbxe //
+m4sctagt // Secret Agent (Nova)
+m4showtm // Show Timer (Barcrest)
+m4snookr // Snooker (Eurocoin)
+m4specu // Speculator Club (Bwb)
+m4spotln // Spotlight (Nova)
+m4stakex // Stake X (Leisurama)
+m4stakexa // Stake X (Leisurama)
+m4stand2 // Stand To Deliver (DJE)
+m4steptm // Step Timer (Barcrest)
+m4sunclb // Sun Club (Bwb)
+m4sunclba //
+m4sunday // Sunday Sport
+m4sunscl // Sunset Club (Bwb)
+m4sunscla //
+m4sunsclb //
+m4sunseta //
+m4sunsetb //
+m4sunsetc //
+m4supbf // Super Bucks Fizz Club (Barcrest)
+m4supbfa //
+m4supbjc // Super Blackjack Club (Barcrest)
+m4supbjca //
+m4supbjcb //
+m4supbjcc //
+m4supbjcd //
+m4surf // Super Surfin' (Gemini)
+m4surfa //
+m4surfb //
+m4t266 // Unknown MPU4 'TTO 1.1'
+m4take5 // Take 5 (Barcrest)
+m4tbplay // Turbo Play (Barcrest)
+m4tbplaya //
+m4tbplayb //
+m4techno // Techno Reel (Barcrest)
+m4technoa //
+m4toma // Tomahawk (Barcrest)
+m4topdk // Top Deck (Barcrest)
+m4toprn // Top Run (Barcrest)
+m4toptim // Top Timer (Barcrest)
+m4toptima //
+m4treel //
+m4treela //
+m4tropcl // Tropicana Club (Barcrest)
+m4tropcla //
+m4tropclb //
+m4tropclc //
+m4tropcld //
+m4tst2 // MPU4 Unit Test (Program 2)
+m4twintm // Twin Timer (Barcrest)
+m4twist // Twist Again (Barcrest)
+m4twista //
+m4twistb //
+m4univ // Universe (Barcrest)
+m4unkjok // Unknown MPU4 'Joker'
+m4unkjoka //
+m4unkjokb //
+m4unkjokc //
+m4vegastg //
+m4vivalvd //
+m4vivan // Viva Las Vegas (Nova)
+m4wife // Money Or Yer Wife (Gemini)
+m4wildtm // Wild Timer (Barcrest)
+m4wnud // Unknown MPU4 'W Nudge'
+m4zill // Zillionare's Challenge (Pure Leisure)
+m4zilla //
+
+//@source:mpu4avan.cpp
+m4abeaut //
+m4abeaut_1 //
+m4abeaut_2 //
+m4abeaut_3 //
+m4abeaut_4 //
+m4abeaut_5 //
+m4abeaut_6 //
+m4abeaut_7 //
+m4abeaut_8 //
+m4abeaut_9 //
+m4abeaut_c1 //
+m4abeaut_c10 //
+m4abeaut_c11 //
+m4abeaut_c12 //
+m4abeaut_c13 //
+m4abeaut_c14 //
+m4abeaut_c15 //
+m4abeaut_c16 //
+m4abeaut_c17 //
+m4abeaut_c18 //
+m4abeaut_c19 //
+m4abeaut_c2 //
+m4abeaut_c20 //
+m4abeaut_c21 //
+m4abeaut_c22 //
+m4abeaut_c23 //
+m4abeaut_c24 //
+m4abeaut_c25 //
+m4abeaut_c26 //
+m4abeaut_c27 //
+m4abeaut_c28 //
+m4abeaut_c29 //
+m4abeaut_c3 //
+m4abeaut_c30 //
+m4abeaut_c31 //
+m4abeaut_c4 //
+m4abeaut_c5 //
+m4abeaut_c6 //
+m4abeaut_c7 //
+m4abeaut_c8 //
+m4abeaut_c9 //
+m4abeaut_i1 //
+m4abeaut_i2 //
+m4abeaut_k1 //
+m4abeaut_k2 //
+m4abeaut_l1 //
+m4abeaut_l10 //
+m4abeaut_l11 //
+m4abeaut_l12 //
+m4abeaut_l13 //
+m4abeaut_l14 //
+m4abeaut_l15 //
+m4abeaut_l16 //
+m4abeaut_l17 //
+m4abeaut_l18 //
+m4abeaut_l19 //
+m4abeaut_l2 //
+m4abeaut_l20 //
+m4abeaut_l21 //
+m4abeaut_l22 //
+m4abeaut_l23 //
+m4abeaut_l24 //
+m4abeaut_l25 //
+m4abeaut_l26 //
+m4abeaut_l27 //
+m4abeaut_l28 //
+m4abeaut_l29 //
+m4abeaut_l3 //
+m4abeaut_l30 //
+m4abeaut_l31 //
+m4abeaut_l32 //
+m4abeaut_l33 //
+m4abeaut_l34 //
+m4abeaut_l35 //
+m4abeaut_l36 //
+m4abeaut_l37 //
+m4abeaut_l38 //
+m4abeaut_l4 //
+m4abeaut_l5 //
+m4abeaut_l6 //
+m4abeaut_l7 //
+m4abeaut_l8 //
+m4abeaut_l9 //
+m4abeaut_m1 //
+m4abeaut_m2 //
+m4abeaut_m3 //
+m4abeaut_m4 //
+m4abeaut_pb1 //
+m4abeaut_pb2 //
+m4abeaut_r1 //
+m4abeaut_r10 //
+m4abeaut_r11 //
+m4abeaut_r12 //
+m4abeaut_r13 //
+m4abeaut_r14 //
+m4abeaut_r2 //
+m4abeaut_r3 //
+m4abeaut_r4 //
+m4abeaut_r5 //
+m4abeaut_r6 //
+m4abeaut_r7 //
+m4abeaut_r8 //
+m4abeaut_r9 //
+m4abeaut_s1 //
+m4abeaut_s2 //
+m4abeaut_s3 //
+m4abeaut_s4 //
+m4abeaut_u1 //
+m4abeaut_u10 //
+m4abeaut_u11 //
+m4abeaut_u12 //
+m4abeaut_u13 //
+m4abeaut_u14 //
+m4abeaut_u15 //
+m4abeaut_u16 //
+m4abeaut_u17 //
+m4abeaut_u18 //
+m4abeaut_u19 //
+m4abeaut_u2 //
+m4abeaut_u20 //
+m4abeaut_u21 //
+m4abeaut_u22 //
+m4abeaut_u23 //
+m4abeaut_u24 //
+m4abeaut_u25 //
+m4abeaut_u26 //
+m4abeaut_u27 //
+m4abeaut_u28 //
+m4abeaut_u29 //
+m4abeaut_u3 //
+m4abeaut_u30 //
+m4abeaut_u31 //
+m4abeaut_u32 //
+m4abeaut_u33 //
+m4abeaut_u34 //
+m4abeaut_u35 //
+m4abeaut_u36 //
+m4abeaut_u37 //
+m4abeaut_u38 //
+m4abeaut_u39 //
+m4abeaut_u4 //
+m4abeaut_u40 //
+m4abeaut_u41 //
+m4abeaut_u42 //
+m4abeaut_u43 //
+m4abeaut_u44 //
+m4abeaut_u45 //
+m4abeaut_u46 //
+m4abeaut_u47 //
+m4abeaut_u48 //
+m4abeaut_u49 //
+m4abeaut_u5 //
+m4abeaut_u50 //
+m4abeaut_u51 //
+m4abeaut_u52 //
+m4abeaut_u53 //
+m4abeaut_u54 //
+m4abeaut_u55 //
+m4abeaut_u56 //
+m4abeaut_u57 //
+m4abeaut_u58 //
+m4abeaut_u59 //
+m4abeaut_u6 //
+m4abeaut_u60 //
+m4abeaut_u61 //
+m4abeaut_u62 //
+m4abeaut_u63 //
+m4abeaut_u64 //
+m4abeaut_u7 //
+m4abeaut_u8 //
+m4abeaut_u9 //
+m4amalad // American Aladdin
+m4amalad__a //
+m4amalad__b //
+m4amalad__c //
+m4amalad__d //
+m4amalad__e //
+m4amalad__f //
+m4amalad__g //
+m4amalad__h //
+m4amalad__i //
+m4amalad__j //
+m4amalad__k //
+m4amalad__l //
+m4amalad__m //
+m4amalad__n //
+m4bben // Big Ben
+m4bben__a //
+m4bben__b //
+m4bben__c //
+m4bben__d //
+m4bben__e //
+m4bben__f //
+m4bben__g //
+m4bben__h //
+m4bben__i //
+m4bbox // Brain Box
+m4bbox__a //
+m4bbox__b //
+m4bbox__c //
+m4bbox__d //
+m4bbox__e //
+m4bbox__f //
+m4bbox__g //
+m4bbox__h //
+m4bbox__i //
+m4blkmgc // Black Magic
+m4blkmgc_1 //
+m4blkmgc_u1 //
+m4blkmgc_u2 //
+m4blkmgc_u3 //
+m4blkmgc_u4 //
+m4blkmgc_u5 //
+m4blkmgc_u6 //
+m4cmont //
+m4cmont_1 //
+m4cmont_10 //
+m4cmont_11 //
+m4cmont_12 //
+m4cmont_13 //
+m4cmont_2 //
+m4cmont_3 //
+m4cmont_4 //
+m4cmont_5 //
+m4cmont_6 //
+m4cmont_7 //
+m4cmont_8 //
+m4cmont_9 //
+m4cmont_gt1 //
+m4cmont_gt2 //
+m4cmont_gt3 //
+m4cmont_l1 //
+m4cmont_l10 //
+m4cmont_l11 //
+m4cmont_l12 //
+m4cmont_l13 //
+m4cmont_l14 //
+m4cmont_l15 //
+m4cmont_l16 //
+m4cmont_l2 //
+m4cmont_l3 //
+m4cmont_l4 //
+m4cmont_l5 //
+m4cmont_l6 //
+m4cmont_l7 //
+m4cmont_l8 //
+m4cmont_l9 //
+m4cmont_r1 //
+m4cmont_r2 //
+m4cmont_r3 //
+m4cmont_r4 //
+m4cmont_r5 //
+m4cmont_r6 //
+m4cmont_r7 //
+m4cmont_r8 //
+m4cmont_u1 //
+m4cmont_u10 //
+m4cmont_u11 //
+m4cmont_u12 //
+m4cmont_u13 //
+m4cmont_u14 //
+m4cmont_u15 //
+m4cmont_u16 //
+m4cmont_u17 //
+m4cmont_u18 //
+m4cmont_u19 //
+m4cmont_u2 //
+m4cmont_u20 //
+m4cmont_u21 //
+m4cmont_u22 //
+m4cmont_u23 //
+m4cmont_u24 //
+m4cmont_u25 //
+m4cmont_u26 //
+m4cmont_u27 //
+m4cmont_u3 //
+m4cmont_u4 //
+m4cmont_u5 //
+m4cmont_u6 //
+m4cmont_u7 //
+m4cmont_u8 //
+m4cmont_u9 //
+m4frmtx // Fruit Matrix
+m4frmtx__a //
+m4frmtx__b //
+m4frmtx__c //
+m4frmtx__d //
+m4frmtx__e //
+m4frmtx__f //
+m4frnudg // Fruit & Nudge
+m4frnudg__a //
+m4frnudg__b //
+m4frnudg__c //
+m4jok2k // Joker 2000
+m4jok2k__a //
+m4jok2k__b //
+m4kingg // King George
+m4kingg__a //
+m4mbel //
+m4mbel__0 //
+m4mbel__1 //
+m4mbel__2 //
+m4mbel__3 //
+m4mbel__4 //
+m4mbel__5 //
+m4mbel__6 //
+m4mbel__7 //
+m4mbel__8 //
+m4mbel__9 //
+m4mbel__a //
+m4mbel__a0 //
+m4mbel__aa //
+m4mbel__ab //
+m4mbel__ac //
+m4mbel__ad //
+m4mbel__ae //
+m4mbel__af //
+m4mbel__ag //
+m4mbel__ah //
+m4mbel__ai //
+m4mbel__aj //
+m4mbel__ak //
+m4mbel__al //
+m4mbel__am //
+m4mbel__an //
+m4mbel__ao //
+m4mbel__ap //
+m4mbel__aq //
+m4mbel__ar //
+m4mbel__as //
+m4mbel__at //
+m4mbel__au //
+m4mbel__av //
+m4mbel__aw //
+m4mbel__ax //
+m4mbel__ay //
+m4mbel__az //
+m4mbel__b //
+m4mbel__c //
+m4mbel__d //
+m4mbel__e //
+m4mbel__f //
+m4mbel__g //
+m4mbel__h //
+m4mbel__i //
+m4mbel__j //
+m4mbel__k //
+m4mbel__m //
+m4mbel__n //
+m4mbel__o //
+m4mbel__p //
+m4mbel__q //
+m4mbel__r //
+m4mbel__s //
+m4mbel__t //
+m4mbel__u //
+m4mbel__v //
+m4mbel__w //
+m4mbel__x //
+m4mbel__y //
+m4mbel__z //
+m4milrou // Millennium Roulette
+m4milrou__a //
+m4mjp // Mega Jackpot
+m4mjp__a //
+m4mjp__b //
+m4mjp__c //
+m4mjp__d //
+m4mjp__e //
+m4mjp__f //
+m4mjp__g //
+m4rmtp // Reel Magic Turbo Play
+m4rmtp__a //
+m4rmtp__b //
+m4rmtp__c //
+m4rmtp__d //
+m4rmtp__e //
+m4rmtp__f //
+m4rmtp__g //
+m4rmtpd // Reel Magic Turbo Play Deluxe
+m4rmtpd__0 //
+m4rmtpd__1 //
+m4rmtpd__2 //
+m4rmtpd__3 //
+m4rmtpd__4 //
+m4rmtpd__5 //
+m4rmtpd__6 //
+m4rmtpd__7 //
+m4rmtpd__8 //
+m4rmtpd__9 //
+m4rmtpd__a //
+m4rmtpd__aa //
+m4rmtpd__ab //
+m4rmtpd__ac //
+m4rmtpd__ad //
+m4rmtpd__ae //
+m4rmtpd__af //
+m4rmtpd__ag //
+m4rmtpd__ah //
+m4rmtpd__ai //
+m4rmtpd__aj //
+m4rmtpd__ak //
+m4rmtpd__al //
+m4rmtpd__am //
+m4rmtpd__b //
+m4rmtpd__c //
+m4rmtpd__d //
+m4rmtpd__e //
+m4rmtpd__f //
+m4rmtpd__g //
+m4rmtpd__h //
+m4rmtpd__i //
+m4rmtpd__j //
+m4rmtpd__k //
+m4rmtpd__l //
+m4rmtpd__m //
+m4rmtpd__n //
+m4rmtpd__o //
+m4rmtpd__p //
+m4rmtpd__q //
+m4rmtpd__r //
+m4rmtpd__s //
+m4rmtpd__t //
+m4rmtpd__u //
+m4rmtpd__v //
+m4rmtpd__w //
+m4rmtpd__x //
+m4rmtpd__y //
+m4rmtpd__z //
+m4robo //
+m4robo__0 //
+m4robo__1 //
+m4robo__2 //
+m4robo__3 //
+m4robo__4 //
+m4robo__5 //
+m4robo__6 //
+m4robo__7 //
+m4robo__8 //
+m4robo__9 //
+m4robo__a //
+m4robo__aa //
+m4robo__ab //
+m4robo__b //
+m4robo__c //
+m4robo__d //
+m4robo__e //
+m4robo__f //
+m4robo__g //
+m4robo__h //
+m4robo__i //
+m4robo__j //
+m4robo__k //
+m4robo__l //
+m4robo__m //
+m4robo__n //
+m4robo__o //
+m4robo__p //
+m4robo__q //
+m4robo__r //
+m4robo__s //
+m4robo__t //
+m4robo__u //
+m4robo__v //
+m4robo__w //
+m4robo__x //
+m4robo__y //
+m4robo__z //
+m4trg //
+m4trg__0 //
+m4trg__1 //
+m4trg__2 //
+m4trg__3 //
+m4trg__4 //
+m4trg__a //
+m4trg__b //
+m4trg__c //
+m4trg__d //
+m4trg__e //
+m4trg__f //
+m4trg__g //
+m4trg__h //
+m4trg__i //
+m4trg__j //
+m4trg__k //
+m4trg__l //
+m4trg__m //
+m4trg__n //
+m4trg__o //
+m4trg__p //
+m4trg__q //
+m4trg__r //
+m4trg__s //
+m4trg__t //
+m4trg__u //
+m4trg__v //
+m4trg__w //
+m4trg__x //
+m4trg__y //
+m4trg__z //
+
+//@source:mpu4bwb.cpp
+m4abra // Abracadabra (Bwb)
+m4abra__a //
+m4abra__b //
+m4abra__c //
+m4bigmt // The Big Match (Bwb)
+m4bigmt__a //
+m4bigmt__b //
+m4bigmt__c //
+m4bigmt__d //
+m4bigmt__e //
+m4bigmt__f //
+m4bingbl // Bingo Belle (Bwb)
+m4bingbl__a //
+m4bingbl__b //
+m4bingbl__c //
+m4bingbl__d //
+m4bingbl__e //
+m4bingbl__f //
+m4bingbl__g //
+m4bingbs // Bingo Belle Showcase (Bwb)
+m4bingbs__a //
+m4bingbs__b //
+m4bingbs__c //
+m4bingbs__d //
+m4bingbs__e //
+m4bingbs__f //
+m4bingcl // Bingo Club (Bwb)
+m4bingcl__a //
+m4bingcl__b //
+m4blsbys // Blues Boys (Bwb)
+m4blsbys__0 //
+m4blsbys__1 //
+m4blsbys__2 //
+m4blsbys__3 //
+m4blsbys__4 //
+m4blsbys__5 //
+m4blsbys__6 //
+m4blsbys__7 //
+m4blsbys__8 //
+m4blsbys__9 //
+m4blsbys__a //
+m4blsbys__aa //
+m4blsbys__ab //
+m4blsbys__ac //
+m4blsbys__ad //
+m4blsbys__b //
+m4blsbys__c //
+m4blsbys__d //
+m4blsbys__e //
+m4blsbys__f //
+m4blsbys__g //
+m4blsbys__h //
+m4blsbys__i //
+m4blsbys__j //
+m4blsbys__k //
+m4blsbys__l //
+m4blsbys__m //
+m4blsbys__n //
+m4blsbys__o //
+m4blsbys__p //
+m4blsbys__q //
+m4blsbys__r //
+m4blsbys__s //
+m4blsbys__t //
+m4blsbys__u //
+m4blsbys__v //
+m4blsbys__w //
+m4blsbys__x //
+m4blsbys__y //
+m4blsbys__z //
+m4bluesn // Blues Boys (Nova)
+m4cfinln // Cup Final (Nova)
+m4cfinln__a //
+m4cpfinl // Cup Final (Bwb)
+m4cpfinl__a //
+m4cpfinl__b //
+m4cpfinl__c //
+m4cpfinl__d //
+m4cpfinl__e //
+m4cpfinl__f //
+m4cpfinl__g //
+m4cpfinl__h //
+m4cpfinl__i //
+m4cpfinl__j //
+m4cpfinl__k //
+m4csoc // Championship Soccer (Bwb)
+m4csoc__a //
+m4csoc__b //
+m4csoc__c //
+m4csoc__d //
+m4csoc__e //
+m4csoc__f //
+m4csoc__g //
+m4csoc__h //
+m4csoc__i //
+m4csoc__j //
+m4danced // Dancing Diamonds (Bwb)
+m4danced__a //
+m4danced__b //
+m4danced__c //
+m4danced__d //
+m4danced__e //
+m4danced__f //
+m4danced__g //
+m4danced__h //
+m4danced__i //
+m4danced__j //
+m4danced__k //
+m4danced__l //
+m4danced__m //
+m4danced__n //
+m4danced__o //
+m4danced__p //
+m4danced__q //
+m4danced__r //
+m4danced__s //
+m4danced__t //
+m4danced__u //
+m4danced__v //
+m4danced__w //
+m4daytn // Daytona (Bwb)
+m4daytn__a //
+m4daytn__b //
+m4daytn__c //
+m4daytn__d //
+m4daytn__e //
+m4daytn__f //
+m4daytn__g //
+m4daytn__h //
+m4daytn__i //
+m4daytn__j //
+m4daytn__k //
+m4daytn__l //
+m4daytn__m //
+m4daytn__n //
+m4excal // Excalibur (Bwb)
+m4excal__a //
+m4excal__b //
+m4excal__c //
+m4excal__d //
+m4excal__e //
+m4excal__f //
+m4excal__g //
+m4excal__h //
+m4excal__i //
+m4excal__j //
+m4excaln // Excalibur (Nova)
+m4excaln__a //
+m4exotic // Exotic Fruits (Bwb)
+m4exotic__a //
+m4exotic__b //
+m4exotic__c //
+m4exotic__d //
+m4exotic__e //
+m4firice // Fire & Ice (Bwb)
+m4firice__a //
+m4firice__b //
+m4firice__c //
+m4firice__d //
+m4firice__e //
+m4firice__f //
+m4firice__g //
+m4firice__h //
+m4firice__i //
+m4firice__j //
+m4ftladn // Find the Lady (Nova)
+m4harle // Harlequin (Bwb)
+m4harle__a //
+m4harle__b //
+m4harle__c //
+m4harle__d //
+m4harle__e //
+m4harle__f //
+m4harle__g //
+m4harle__h //
+m4harle__i //
+m4harle__j //
+m4harle__k //
+m4harle__l //
+m4harle__m //
+m4harle__n //
+m4harle__o //
+m4harle__p //
+m4harle__q //
+m4harle__r //
+m4harle__s //
+m4harle__t //
+m4harle__u //
+m4harle__v //
+m4harle__w //
+m4harle__x //
+m4hvhel // Heaven & Hell (Bwb)
+m4hvhel__a //
+m4hvhel__b //
+m4hvhel__c //
+m4hvhel__d //
+m4hvhel__e //
+m4hvhel__f //
+m4hvhel__g //
+m4hvhel__h //
+m4indycr // Indy Cars (Bwb)
+m4indycr__a //
+m4indycr__b //
+m4indycr__c //
+m4indycr__d //
+m4indycr__e //
+m4indycr__f //
+m4jakjok // Jackpot Jokers (Bwb)
+m4jakjok__a //
+m4jakjok__b //
+m4jakjok__c //
+m4jakjoka //
+m4jflash // Jumping Jack Flash (Bwb)
+m4jflash__a //
+m4jflash__b //
+m4jflash__c //
+m4jflash__d //
+m4jflash__e //
+m4jflash__f //
+m4jflash__g //
+m4jflash__h //
+m4jflash__i //
+m4ln7 // Lucky No7 (Bwb)
+m4ln7__a //
+m4ln7__b //
+m4ln7__c //
+m4ln7__d //
+m4madmnc // Mad Money Classic (Bwb)
+m4madmnc__a //
+m4madmnc__b //
+m4madmnc__c //
+m4madmnc__d //
+m4madmnc__e //
+m4madmnc__f //
+m4madmnc__g //
+m4madmnc__h //
+m4madmnc__i //
+m4madmnc__j //
+m4madmnc__k //
+m4madmnc__l //
+m4madmnc__m //
+m4madmnc__n //
+m4madmnc__o //
+m4madmnc__p //
+m4madmnc__q //
+m4madmnc__r //
+m4madmnc__s //
+m4madmnc__t //
+m4madmnc__u //
+m4madmnc__v //
+m4madmnc__w //
+m4madmon // Mad Money (Bwb)
+m4madmon__a //
+m4madmon__b //
+m4madmon__c //
+m4madmon__d //
+m4madmon__e //
+m4madmon__f //
+m4madmon__g //
+m4madmon__h //
+m4madmon__i //
+m4madmon__j //
+m4madmon__k //
+m4mmm // Money Mummy Money (Bwb)
+m4mmm__a //
+m4mmm__b //
+m4mmm__c //
+m4mmm__d //
+m4mmm__e //
+m4mmm__f //
+m4olygn // Olympic Gold (Nova)
+m4olygn__a //
+m4orland // Orlando Magic (Bwb)
+m4orland__a //
+m4orland__b //
+m4orland__c //
+m4orland__d //
+m4orland__e //
+m4orland__f //
+m4orland__g //
+m4orland__h //
+m4pzbing // Prize Bingo (Bwb)
+m4pzbing__a //
+m4pzbing__b //
+m4pzbing__c //
+m4pzbing__d //
+m4pzbing__e //
+m4quidin // Quids In (Bwb)
+m4quidin__a //
+m4quidin__b //
+m4quidis // Quids In Showcase (Bwb)
+m4quidis__a //
+m4quidis__b //
+m4quidis__c //
+m4quidis__d //
+m4rackem // Rack Em Up (Bwb)
+m4rackem__a //
+m4rackem__b //
+m4rackem__c //
+m4rackem__d //
+m4rbgold // Rainbow Gold (Bwb)
+m4rbgold__a //
+m4rbgold__b //
+m4rbgold__c //
+m4rbgold__d //
+m4rbgold__e //
+m4rbgold__f //
+m4rbgold__g //
+m4rbgold__h //
+m4rbgold__i //
+m4rbgold__j //
+m4rbgold__k //
+m4rbgold__l //
+m4rbgold__m //
+m4rbgold__n //
+m4rbgold__o //
+m4rbgold__p //
+m4rbgold__q //
+m4rhfev // Red Hot Fever (Bwb)
+m4rhfev__a //
+m4rhfev__b //
+m4rhfev__c //
+m4rhfev__d //
+m4sinbd // Sinbad (Bwb)
+m4sinbd__a //
+m4sinbd__b //
+m4sinbd__c //
+m4sinbd__d //
+m4sinbd__e //
+m4sinbd__f //
+m4sinbd__g //
+m4sinbd__h //
+m4sinbd__i //
+m4sinbd__j //
+m4sinbd__k //
+m4sinbd__l //
+m4sinbd__m //
+m4sinbd__n //
+m4sinbd__o //
+m4sinbd__p //
+m4sinbd__q //
+m4sinbd__r //
+m4sinbd__s //
+m4sinbd__t //
+m4sinbd__u //
+m4sinbd__v //
+m4sinbd__w //
+m4sinbd__x //
+m4sinbdn // Sinbad (Nova)
+m4sinbdn__a //
+m4sinbdn__b //
+m4sinbdn__c //
+m4sinbdn__d //
+m4sinbdn__e //
+m4sinbdn__f //
+m4sky // Sky Sports (Bwb)
+m4sky__a //
+m4sky__b //
+m4sky__c //
+m4sky__d //
+m4souls // Soul Sister (Bwb)
+m4souls__a //
+m4souls__b //
+m4souls__c //
+m4souls__d //
+m4souls__e //
+m4souls__f //
+m4spinbt // Spin The Bottle (Bwb)
+m4spinbt__a //
+m4spinbt__b //
+m4spinbt__c //
+m4spinbt__d //
+m4spinbt__e //
+m4spinbt__f //
+m4spinbt__g //
+m4starst // Stars & Stripes (Bwb)
+m4starst__a //
+m4starst__b //
+m4starst__c //
+m4starst__d //
+m4starst__e //
+m4starst__f //
+m4starst__g //
+m4starst__h //
+m4starst__i //
+m4starst__j //
+m4supleg // Super League (Bwb)
+m4supleg__a //
+m4supleg__b //
+m4supleg__c //
+m4supleg__d //
+m4suplegw //
+m4supscr // Super Soccer (Bwb)
+m4supscr__a //
+m4supscr__b //
+m4supscr__c //
+m4supscr__d //
+m4supscr__e //
+m4supscr__f //
+m4supscr__g //
+m4supscr__h //
+m4supscr__i //
+m4supscr__j //
+m4supscr__k //
+m4supscr__l //
+m4supscr__m //
+m4supscr__n //
+m4sure // Sure Thing (Bwb)
+m4sure__a //
+m4sure__b //
+m4sure__c //
+m4trex // Trex (Bwb)
+m4trex__a //
+m4trex__b //
+m4trex__c //
+m4trex__d //
+m4trex__e //
+m4trex__f //
+m4trex__g //
+m4trex__h //
+m4trex__i //
+m4trex__j //
+m4trex__k //
+m4trex__l //
+m4vdexpr // Voodoo Express (Bwb)
+m4vdexpr__a //
+m4vdexpr__b //
+m4vdexpr__c //
+m4vdexpr__d //
+m4volcan // Volcano (Bwb)
+m4volcan__a //
+m4volcan__b //
+m4volcan__c //
+m4volcan__d //
+m4volcan__e //
+m4volcan__f //
+m4volcan__g //
+m4wcnov // World Cup (Nova)
+m4xch // X-change (Bwb)
+m4xch__a //
+m4xch__b //
+m4xch__c //
+m4xch__d //
+m4xch__e //
+m4xch__f //
+m4xch__g //
+m4xch__h //
+m4xch__i //
+m4xch__j //
+m4xch__k //
+m4xs // X-s (Bwb)
+m4xs__a //
+m4xs__b //
+m4xs__c //
+m4xs__d //
+m4xs__e //
+m4xs__f //
+m4xtrm // X-treme (Bwb)
+m4xtrm__a //
+m4xtrm__b //
+
+//@source:mpu4concept.cpp
+m4nudgwc // Nudge a Win (Concept)
+m4nudgwc__a //
+m4nudgwc__b //
+m4nudgwc__c //
+m4nudgwc__d //
+m4nudgwc__e //
+m4nudgwc__f //
+m4nudgwc__g //
+m4nudgwc__h //
+m4pulwnc // Pull-a-Win (Concept)
+m4pulwnc__0 //
+m4pulwnc__1 //
+m4pulwnc__2 //
+m4pulwnc__3 //
+m4pulwnc__4 //
+m4pulwnc__a //
+m4pulwnc__b //
+m4pulwnc__c //
+m4pulwnc__d //
+m4pulwnc__e //
+m4pulwnc__f //
+m4pulwnc__g //
+m4pulwnc__h //
+m4pulwnc__i //
+m4pulwnc__j //
+m4pulwnc__k //
+m4pulwnc__l //
+m4pulwnc__m //
+m4pulwnc__n //
+m4pulwnc__o //
+m4pulwnc__p //
+m4pulwnc__q //
+m4pulwnc__r //
+m4pulwnc__s //
+m4pulwnc__t //
+m4pulwnc__u //
+m4pulwnc__v //
+m4pulwnc__w //
+m4pulwnc__x //
+m4pulwnc__y //
+m4pulwnc__z //
+m4rhfevc // Red Hot Fever (Concept)
+m4rhfevc__a //
+m4rhfevc__b //
+m4rhfevc__c //
+m4rhfevc__d //
+m4rhfevc__e //
+m4rhfevc__f //
+m4rhfevc__g //
+m4rhfevc__h //
+m4rhfevc__i //
+m4rhfevc__j //
+m4rhfevc__k //
+m4rhfevc__l //
+m4rhfevc__m //
+m4rhfevc__n //
+m4rhfevc__o //
+m4rhfevc__p //
+m4rhfevc__q //
+m4rhfevc__r //
+m4rhfevc__s //
+m4rhfevc__t //
+m4rhfevc__u //
+m4rhfevc__v //
+m4rhfevc__w //
+m4rhfevc__x //
+m4rhfevc__y //
+m4spnwnc // Spin-A-Win (Concept)
+m4spnwnc__a //
+m4spnwnc__b //
+
+//@source:mpu4crystal.cpp
+m4aladn // Aladdin's Cave (Crystal)
+m4aladna //
+m4aladnb //
+m4aladnc //
+m4aladnd //
+m4aladne //
+m4aladnf //
+m4aladng //
+m4aladnh //
+m4aladni //
+m4bagcsh // Bags Of Cash Club (Crystal)
+m4bagcsha //
+m4bucclb // Buccaneer Club (Crystal)
+m4bucclba //
+m4bucclbb //
+m4bucclbc //
+m4bullio // Bullion Club (Crystal)
+m4bullioa //
+m4bulliob //
+m4carou // Carousel Club (Crystal)
+m4caroua //
+m4caroub //
+m4carouc //
+m4cclimb // Crazy Climber (Crystal)
+m4cclimba //
+m4crzcl // Crazy Climber Club (Crystal)
+m4crzcla //
+m4crzclb //
+m4crzclc //
+m4crzcld //
+m4dz // Danger Zone (Crystal?)
+m4elitc // Elite Club (Crystal)
+m4elitca //
+m4fairg // Fairground (Crystal)
+m4frkstn // Frank 'n' Stein (unencrypted)
+m4frkstna //
+m4frkstnb //
+m4frkstnc //
+m4frkstnd //
+m4frkstne //
+m4frkstnf //
+m4frkstng //
+m4frkstnh //
+m4frmani // Fruit Mania (Crystal)
+m4frmania //
+m4frmanib //
+m4frmanic //
+m4goldfc // Gold Fever (Crystal)
+m4goldfca //
+m4goldfcb //
+m4goldxc // Gold Exchange Club (Crystal)
+m4goldxca //
+m4goldxcb //
+m4goldxcc //
+m4goldxcd //
+m4goldxce //
+m4hirol // Hi Roller Club (Crystal)
+m4hirola //
+m4kingqn // Kings & Queens Club (Crystal)
+m4kingqna //
+m4lotclb // Lottery Club (Crystal)
+m4lotclba //
+m4magi7 // Magic 7s (Crystal)
+m4magi7a //
+m4montrl // Money Trail (Crystal)
+m4montrla //
+m4montrlb //
+m4montrlc //
+m4montrld //
+m4mystiq // Mystique Club (Crystal)
+m4mystiqa //
+m4mystiqb //
+m4mystiqc //
+m4ndup // Nudge Double Up (Crystal)
+m4ndupa //
+m4ndupb //
+m4ndupc //
+m4nudwin // Nudge & Win (Crystal)
+m4nudwina //
+m4paracl // Paradise Club (Crystal)
+m4paracla //
+m4rags // Rags to Riches Club (Crystal)
+m4ragsa //
+m4ragsb //
+m4ragsc //
+m4riocr // Rio Grande (Grystal)
+m4riocra //
+m4rlpick // Reel Picks (Crystal)
+m4rlpicka //
+m4rlpickb //
+m4rlpickc //
+m4twstcl // Twister Club (Crystal)
+m4twstcla //
+m4twstclb //
+m4twstr // Twister (Crystal)
+m4twstra //
+m4twstrb //
+m4twstrc //
+m4twstrd //
+m4tylb // Thank Your Lucky Bars (Crystal)
+m4tylba //
+
+//@source:mpu4dealem.cpp
+v4dealem // Deal 'Em
+
+//@source:mpu4empire.cpp
+m4apachg // Apache Gold (Empire)
+m4apachga //
+m4apachgb //
+m4apachgc //
+m4apachgd //
+m4apachge //
+m4apachgf //
+m4bangrs // Bangers 'n' Cash (Empire)
+m4bangrsa //
+m4bangrsb //
+m4bankrd // Bank Raid (Empire)
+m4bankrda //
+m4bankrdb //
+m4bankrdc //
+m4bankrdd //
+m4bigchs // Big Cheese (Empire)
+m4bigchsa //
+m4bigchsb //
+m4chacec // Chase The Ace [Cards] (Empire)
+m4chaceca //
+m4chacef // Chase The Ace [Fruits] (Empire)
+m4chacefa //
+m4chacefb //
+m4chacefc //
+m4crfire // Crossfire (Empire)
+m4crfirea //
+m4crzcap // Crazy Capers (Empire)
+m4crzcapa //
+m4crzcapb //
+m4crzcapc //
+m4cstrik // Cash Strike (Empire)
+m4cstrika //
+m4cstrikb //
+m4cstrikc //
+m4eureka // Eureka (Empire)
+m4eurekaa //
+m4eurekab //
+m4fright // Fright Night (Empire)
+m4frighta //
+m4frightb //
+m4frightc //
+m4frightd //
+m4frighte //
+m4frightf //
+m4gamblr // The Gambler (Empire)
+m4gamblra //
+m4gamblrb //
+m4goldfv // Gold Fever (Empire)
+m4gtrain // Ghost Train (Empire)
+m4gtraina //
+m4gtrainb //
+m4gtrainc //
+m4haunt // Haunted House (Empire)
+m4haunta //
+m4hauntb //
+m4hauntc //
+m4hauntd //
+m4hisprt // High Spirits (Empire)
+m4hisprta //
+m4hisprtb //
+m4hisprtc //
+m4hisprtd //
+m4hisprte //
+m4hotcsh // Hot Cash (Empire)
+m4hotcsha //
+m4hotcshb //
+m4hotcshc //
+m4jne // The Jackpot's Not Enough (Empire?)
+m4monspn // Money Spinner (Empire)
+m4monspna //
+m4monspnb //
+m4pbnudg // Pinball Nudger (Empire)
+m4pbnudga //
+m4pbnudgb //
+m4pitfal // Pitfall (Empire)
+m4pitfala //
+m4pitfalb //
+m4pitfalc //
+m4ttrail // Treasure Trail (Empire)
+m4ttraila //
+m4ttrailb //
+
+//@source:mpu4mdm.cpp
+m42punlm // 2p Unlimited (Mdm)
+m4bigapl // The Big Apple (Mdm)
+m4bigapla //
+m4bigaplb //
+m4bigaplc //
+m4bigapld //
+m4bigaple //
+m4blztrl // Blazing Trails (Mdm)
+m4blztrla //
+m4bodymt // Body Match (Mdm)
+m4coloss // Colossus (Mdm)
+m4colossa //
+m4colossb //
+m4colossc //
+m4colossd //
+m4colosse //
+m4colossf //
+m4colossg //
+m4ctn // Tuppenny Nudger Classic (Mdm?)
+m4ewshft // Each Way Shifter
+m4excam // Excalibur (Mdm)
+m4firebl // Fireball (Mdm)
+m4firebla //
+m4fireblb //
+m4fireblc //
+m4firebld //
+m4front // Final Frontier (Mdm)
+m4mayhem // Mayhem (Mdm)
+m4mayhema //
+m4nud2p // 2p Nudger (Mdm?)
+m4nudbon // Nudge Bonanza (Mdm)
+m4nudbona //
+m4nudgem // Nudge Gems (Mdm)
+m4safar // Safari Club (Mdm)
+m4silnud // Silver Nudger (Mdm?)
+m4smshgb // Smash 'n' Grab (Mdm)
+m4smshgba //
+m4smshgbb //
+m4smshgbc //
+m4snklad // Snakes & Ladders (Mdm)
+m4snowbl //
+m4themob // The Mob (Mdm)
+m4themoba //
+m4themobb //
+
+//@source:mpu4misc.cpp
+m4bangin // Bangin' Away (Global)
+m4bangina //
+m4banginb //
+m4clab // Cash Lab (Mazooma - Qps)
+m4clab__a //
+m4clab__b //
+m4clab__c //
+m4clab__d //
+m4clab__e //
+m4clab__f //
+m4clab__g //
+m4clab__h //
+m4clab__i //
+m4clab__j //
+m4dcrls // Double Crazy Reels (Qps)
+m4dcrls__a //
+m4dcrls__b //
+m4dcrls__c //
+m4dcrls__d //
+m4dcrls__e //
+m4dcrls__f //
+m4dcrls__g //
+m4dcrls__h //
+m4dcrls__i //
+m4dcrls__j //
+m4dcrls__k //
+m4dcrls__l //
+m4dcrls__m //
+m4dcrls__n //
+m4dcrls__o //
+m4dcrls__p //
+m4dcrls__q //
+m4dcrls__r //
+m4jiggin // Jiggin' In The Riggin'
+m4jiggina //
+m4jungjk // Jungle Jackpots (Mazooma - Qps)
+m4jungjk__a //
+m4jungjk__b //
+m4jungjk__c //
+m4jungjk__d //
+m4jungjk__e //
+m4looplt // Loop The Loot (Qps)
+m4looplt__a //
+m4looplt__b //
+m4looplt__c //
+m4looplt__d //
+m4looplt__e //
+m4looplt__f //
+m4looplt__g //
+m4looplt__h //
+m4looplt__i //
+m4looplt__j //
+m4looplt__k //
+m4looplt__l //
+m4looplt__m //
+m4rdeal // Reel Deal (Qps)
+m4rdeal__a //
+m4rdeal__b //
+m4rdeal__c //
+m4rdeal__d //
+m4rdeal__e //
+m4rdeal__f //
+m4rdeal__g //
+m4rdeal__h //
+m4rdeal__i //
+m4rhnote // Red Hot Notes (Qps)
+m4rhnote__a //
+m4rhnote__b //
+m4rhnote__c //
+m4rhnote__d //
+m4rhnote__e //
+m4rhnote__f //
+m4rhnote__g //
+m4rhnote__h //
+m4rhnote__i //
+m4rhnote__j //
+m4rhnote__k //
+m4rhnote__l //
+m4rhnote__m //
+m4rhnote__n //
+m4rhnote__o //
+m4rhnote__p //
+m4rhnote__q //
+m4rhnote__r //
+m4rhnote__s //
+m4rhnote__t //
+m4rhnote__u //
+m4rhnote__v //
+m4rhnote__w //
+m4rhnote__x //
+m4rhnote__y //
+m4rhrock // Red Hot Rocks (Qps)
+m4rhrock__a //
+m4rhwhl // Red Hot Wheels (Mazooma - Qps)
+m4rhwhl__a //
+m4rhwhl__b //
+m4rhwhl__c //
+m4screw // Screwin' Around (Global)
+m4screwa //
+m4screwb //
+m4screwp //
+m4sdquid // Sundance Quid (Qps)
+m4sdquid__a //
+m4sdquid__b //
+m4sdquid__c //
+m4sdquid__d //
+m4sdquid__e //
+m4sdquid__f //
+m4sdquid__g //
+m4sdquid__h //
+m4sdquid__i //
+m4sdquid__j //
+m4sdquid__k //
+m4shkwav // Shockwave (Mazooma - Qps)
+m4shkwav__a //
+m4shkwav__b //
+m4shkwav__c //
+m4shkwav__d //
+m4shkwav__e //
+m4shkwav__f //
+m4shkwav__g //
+m4shoknr // Shock 'n' Roll (Mazooma - Qps)
+m4shoknr__a //
+m4shoknr__b //
+m4shoknr__c //
+m4tornad // Tornado (Qps - Mazooma)
+m4tornad__a //
+m4tornad__b //
+m4tornad__c //
+m4tornad__d //
+m4tornad__e //
+m4tornad__f //
+m4tornad__g //
+m4vfm // Value For Money (Global)
+m4wwc // Wacky Weekend Club (Global)
+m4wwca //
+m4wwcb //
+
+//@source:mpu4mod2sw.cpp
+m421 // Twenty One (Barcrest)
+m421club // 21 Club (Barcrest)
+m4actbnka //
+m4actbnkb //
+m4actclb // Action Club (Barcrest)
+m4actclba //
+m4actnot // Action Note (Barcrest)
+m4actpak // Action Pack (Barcrest)
+m4actpaka //
+m4alladv // All Cash Advance (Barcrest)
+m4alpha // Alphabet (Barcrest)
+m4ambass // Ambassador (Barcrest)
+m4atlan // Atlantis (Barcrest)
+m4bigbn // Big Ben (Barcrest)
+m4bigchd //
+m4bj // Black Jack (Barcrest) [Dutch]
+m4bjac // Blackjack Club (Barcrest)
+m4bjaca //
+m4bjack // Blackjack (Barcrest)
+m4bjacka //
+m4bjc // Black Jack Club (Barcrest) [Dutch]
+m4bjsm // Blackjack Super Multi (Barcrest)
+m4bjsma //
+m4blflsh // Blue Flash (Bwb)
+m4blflsha //
+m4blflshb //
+m4blflshc //
+m4blflshd //
+m4blflshe //
+m4blstbk // Blast A Bank (Barcrest)
+m4bluemn // Blue Moon (Barcrest)
+m4bluemna //
+m4bluemnb //
+m4bnknot // Bank A Note (Barcrest)
+m4brdway // Broadway (Barcrest) [Dutch]
+m4brktak // Break & Take (Barcrest)
+m4btclok // Beat The Clock (Barcrest)
+m4c999 // Cloud 999 (Barcrest)
+m4c999a //
+m4c999b //
+m4c999c //
+m4cardcs // Card Cash (Barcrest)
+m4cashcn // Cash Connect (Barcrest)
+m4cashco // Cash Counter (Barcrest)
+m4cashcoa //
+m4cashcob //
+m4cashcoc //
+m4cashcod //
+m4cashmx // Cash Matrix (Barcrest)
+m4cashmxa //
+m4cashzn // Cash Zone (Barcrest)
+m4cashzna //
+m4celclb // Celebration Club (Barcrest)
+m4centpt // Centrepoint (Barcrest)
+m4centpta // Centrepoint (Barcrest)
+m4cheryo // Cherryo (Barcrest)
+m4class // First Class (Barcrest)
+m4classa //
+m4clbclm // Club Climber (Barcrest)
+m4clbclma //
+m4clbcls // Club Classic (Barcrest)
+m4clbcnt // Club Connect (Barcrest)
+m4clbcnta //
+m4clbcntb //
+m4clbcntc //
+m4clbcntd //
+m4clbdbl // Club Double (Barcrest)
+m4clbrpl // Club Replay (PCP)
+m4conn4 // Connect 4
+m4copcsh // Coppa Cash (Barcrest)
+m4crkpot // Crackpot Club (Barcrest)
+m4crkpota //
+m4crkpotb //
+m4cshino // Cashino Deluxe (Pcp)
+m4dbl9 // Double 9's (Barcrest)
+m4dbl9a //
+m4dblup // Double Up (Barcrest)
+m4eighth // Eighth Wonder (Barcrest)
+m4eightha //
+m4eighthb //
+m4eighthc //
+m4eighthd //
+m4eighthe //
+m4eighthf //
+m4eighthg //
+m4exlin // Extra Lines (Pcp)
+m4exlina //
+m4exprs // Express (Barcrest)
+m4flash // Flash Cash (Barcrest)
+m4flshlt // Flashlite (Bwb)
+m4flshlta //
+m4flshltb //
+m4flshltc //
+m4flshltd //
+m4flshlte //
+m4flshltf //
+m4flshltg //
+m4frcrak // Fruit Cracker
+m4frtfl // Fruit Full (Barcrest)
+m4frtfla //
+m4frtflc // Fruit Full Club (Barcrest)
+m4frtlnk // Fruit Link Club (Barcrest)
+m4frtlnka //
+m4frtprs // Fruit Preserve (Barcrest)
+m4frtprsa //
+m4giant // Giant (Barcrest)
+m4gldstr // Gold Strike (Barcrest)
+m4grands // Grandstand Club (Barcrest)
+m4grandsa //
+m4grbbnk // Grab The Bank (Barcrest)
+m4grbbnka //
+m4grbbnkb //
+m4hiroll // High Roller (Barcrest)
+m4hittp2 //
+m4hittp2a //
+m4holdon // Hold On (Barcrest)
+m4intcep // Interceptor (Barcrest)
+m4intcepa //
+m4intcepb //
+m4jjc // Jumping Jack Cash (Pcp)
+m4jjca //
+m4joljok // Jolly Joker (Barcrest)
+m4joltav // Jolly Taverner (Barcrest)
+m4joltava //
+m4joltavb //
+m4jpjmp // Jackpot Jump (Barcrest)
+m4jpjmpa //
+m4libty // Liberty (Barcrest)
+m4loadmn // Loads A Money (Barcrest)
+m4loadmna //
+m4loadmnb //
+m4megbks // Mega Bucks (Barcrest)
+m4megbksa //
+m4megbksb //
+m4megbksc //
+m4meglnk // Megalink (Barcrest)
+m4milclb // Millionaire's Club (Barcrest)
+m4milclba //
+m4milclbb //
+m4milclbc //
+m4milclbd //
+m4mirage // Mirage (Barcrest)
+m4moneym // Money Maker (Barcrest)
+m4multcl // Multiplay Club (Barcrest)
+m4multwy // Multiway (Barcrest)
+m4nick // Nickelodeon (Barcrest)
+m4nicka //
+m4nickb //
+m4nickc //
+m4nickd //
+m4nicke //
+m4nifty // Nifty Fifty (Barcrest)
+m4niftya //
+m4niftyb //
+m4nudqst // Nudge Quest (Barcrest)
+m4nudup // Nudge Up (Barcrest)
+m4num1 // Number One (Barcrest)
+m4omega // Omega (Barcrest)
+m4pick // Pick A Fruit (JPM)
+m4pont // Pontoon Club (Barcrest)
+m4ponta //
+m4potlck // Pot Luck Club (Barcrest)
+m4potlcka //
+m4r2r // Reel 2 Reel (Barcrest)
+m4randr // Random Roulette (Barcrest)
+m4reelpk // Reel Poker (Barcrest)
+m4rsg // Ready Steady Go (Barcrest) (type 1)
+m4rsga //
+m4runawy // Runaway Trail (Barcrest)
+m4runawyb //
+m4samu // Samurai (Barcrest)
+m4sb5 // Unknown MPU4 'BSB 0.3' (Barcrest)
+m4sgrab // Smash 'n' Grab (Barcrest)
+m4sgraba //
+m4sgrabb //
+m4silshd // Silver Shadow (Barcrest)
+m4silshda //
+m4silshdb //
+m4solsil // Solid Silver Club (Barcrest)
+m4solsila //
+m4spnwin // Spin A Win (Cotswold Microsystems)
+m4spnwina //
+m4spton // Spot On (Pcp)
+m4stakeu // Stake Up Club (Barcrest)
+m4stakeua //
+m4starbr // Stars And Bars (Barcrest)
+m4stards // Stardust (Barcrest)
+m4stopcl // Stop the Clock (Barcrest)
+m4sunset // Sunset Boulevard (Barcrest)
+m4sunsetd //
+m4sunsete //
+m4sunsetf //
+m4sunsetg //
+m4sunseth //
+m4sunseti //
+m4sunsetj //
+m4sunsetk //
+m4sunsetl //
+m4sunsetm //
+m4sunsetn //
+m4sunseto //
+m4sunsetp //
+m4sunsetq //
+m4sunsetr //
+m4sunsets //
+m4sunsett //
+m4supjst // Super Jester (Pcp)
+m4supjsta //
+m4supjstb //
+m4supjstc //
+m4supjstd //
+m4supjste //
+m4supsl //
+m4supslt // Supa Slot (Barcrest)
+m4suptrn // Supatron (Barcrest)
+m4suptub // Super Tubes (Barcrest)
+m4suptuba //
+m4suptwo // Super Two (Barcrest)
+m4swpnot // Swap-A-Note (Barcrest)
+m4swpnota // Swap-A-Note (Barcrest)
+m4taj // Taj Mahal (Barcrest)
+m4take2 // Take Two (Barcrest)
+m4take2a //
+m4tbreel // Turbo Reel (Barcrest)
+m4tbrldx // Turbo Reel Deluxe (Barcrest)
+m4thehit // The Hit (Barcrest)
+m4tiktak // Tic Tak Cash (Barcrest)
+m4topact // Top Action (Barcrest)
+m4topacta //
+m4topgr // Top Gear (Barcrest)
+m4toplot // Top The Lot (Barcrest)
+m4topst // Top Stop (Barcrest)
+m4toptak // Top Take (Barcrest)
+m4toptena //
+m4tribnk // Triple Bank (Barcrest)
+m4tricol // Tricolor (Barcrest)
+m4tridic // Triple Dice (Barcrest)
+m4ttak // Tic Tac Take (unknown)
+m4tupen // Tuppenny Cracker (Barcrest - Bootleg)
+m4twilgt // Twilight (Barcrest)
+m4wayin // Way In (Barcrest)
+m4wayina //
+m4wildms // Wild Mystery (Barcrest)
+
+//@source:mpu4mod4yam.cpp
+m4acechs // Ace Chase (Bwb)
+m4acechs__a //
+m4acechs__b //
+m4acechs__c //
+m4acechs__d //
+m4acechs__e //
+m4acechs__f //
+m4acechs__g //
+m4acechs__h //
+m4acechs__i //
+m4acechs__j //
+m4acechs__k //
+m4acechs__l //
+m4acechs__m //
+m4acechs__n //
+m4acechs__o //
+m4acechs__p //
+m4acechs__q //
+m4acechs__r //
+m4acechs__s //
+m4acechs__t //
+m4acechs__u //
+m4clbshf // Club Shuffle (Barcrest)
+m4cojok // Carry On Joker (Barcrest)
+m4cojok__a //
+m4cojok__b //
+m4cojok__c //
+m4cojok__d //
+m4cojok__e //
+m4cojok__f //
+m4fastfw // Fast Forward (Barcrest - Bwb)
+m4fastfw__a //
+m4fastfw__b //
+m4fastfw__c //
+m4fastfw__d //
+m4fastfw__e //
+m4fastfw__f //
+m4gambal // Gamball (Barcrest)
+m4gambal__a //
+m4gambal__b //
+m4gambal__c //
+m4graff // Graffiti (Barcrest)
+m4graff__a //
+m4graff__b //
+m4graffd //
+m4joljokd //
+m4monte // Monte Carlo (Barcrest)
+m4monte__a //
+m4monte__b //
+m4monte__c //
+m4monte__d //
+m4monte__e //
+m4monte__f //
+m4monte__g //
+m4monte__h //
+m4monte__i //
+m4monte__j //
+m4monte__k //
+m4monte__l //
+m4monte__m //
+m4nudbnk // Nudge Banker (Barcrest)
+m4nudbnk__a //
+m4nudbnk__b //
+m4nudbnk__c //
+m4nudbnk__d //
+m4przmc // Prize Monte Carlo (Barcrest)
+m4przmc__a //
+m4przmc__b //
+m4przmc__c //
+m4przmc__d //
+m4przmc__e //
+m4przmc__f //
+m4przsss // Prize Spend Spend Spend (Barcrest)
+m4przsss__0 //
+m4przsss__a //
+m4przsss__b //
+m4przsss__c //
+m4przsss__d //
+m4przsss__e //
+m4przsss__f //
+m4przsss__g //
+m4przsss__h //
+m4przsss__i //
+m4przsss__j //
+m4przsss__k //
+m4przsss__l //
+m4przsss__m //
+m4przsss__n //
+m4przsss__o //
+m4przsss__p //
+m4przsss__q //
+m4przsss__r //
+m4przsss__s //
+m4przsss__t //
+m4przsss__u //
+m4przsss__v //
+m4przsss__w //
+m4przsss__x //
+m4przsss__y //
+m4przsss__z //
+m4ra // Red Alert (Barcrest)
+m4ra__a //
+m4ra__b //
+m4ra__c //
+m4ra__d //
+m4ra__e //
+m4ra__f //
+m4ra__g //
+m4ra__h //
+m4ra__i //
+m4ra__j //
+m4ra__k //
+m4ra__l //
+m4ra__m //
+m4ra__n //
+m4ra__o //
+m4ra__p //
+m4ra__q //
+m4ra__r //
+m4sayno // Say No More (Barcrest)
+m4sayno__a //
+m4sayno__b //
+m4sayno__c //
+m4sayno__d //
+m4sss // Spend Spend Spend (Barcrest)
+m4sss__a //
+m4sss__b //
+m4sss__c //
+m4sss__d //
+m4sss__e //
+m4sss__f //
+m4sss__g //
+m4sss__h //
+m4sss__i //
+m4sss__j //
+m4sss__k //
+m4sss__l //
+m4sstrek // Super Streak (bootleg)
+m4stc // Unknown MPU4 'STC 0.1' (Barcrest)
+m4supst // Super Streak (Barcrest)
+m4supst__0 //
+m4supst__1 //
+m4supst__2 //
+m4supst__3 //
+m4supst__4 //
+m4supst__5 //
+m4supst__6 //
+m4supst__7 //
+m4supst__8 //
+m4supst__9 //
+m4supst__a //
+m4supst__a0 //
+m4supst__a1 //
+m4supst__a2 //
+m4supst__a3 //
+m4supst__a4 //
+m4supst__a5 //
+m4supst__a6 //
+m4supst__a7 //
+m4supst__a8 //
+m4supst__a9 //
+m4supst__aa //
+m4supst__ab //
+m4supst__ac //
+m4supst__ad //
+m4supst__ae //
+m4supst__af //
+m4supst__ag //
+m4supst__ah //
+m4supst__ai //
+m4supst__aj //
+m4supst__ak //
+m4supst__al //
+m4supst__am //
+m4supst__an //
+m4supst__ao //
+m4supst__ap //
+m4supst__aq //
+m4supst__ar //
+m4supst__as //
+m4supst__at //
+m4supst__au //
+m4supst__av //
+m4supst__aw //
+m4supst__ax //
+m4supst__ay //
+m4supst__az //
+m4supst__b //
+m4supst__b0 //
+m4supst__b1 //
+m4supst__b2 //
+m4supst__b3 //
+m4supst__b4 //
+m4supst__b5 //
+m4supst__ba //
+m4supst__bb //
+m4supst__bc //
+m4supst__bd //
+m4supst__be //
+m4supst__bf //
+m4supst__bg //
+m4supst__bh //
+m4supst__bi //
+m4supst__bj //
+m4supst__bk //
+m4supst__bl //
+m4supst__bm //
+m4supst__bn //
+m4supst__bo //
+m4supst__bp //
+m4supst__bq //
+m4supst__br //
+m4supst__bs //
+m4supst__bt //
+m4supst__bu //
+m4supst__bv //
+m4supst__bw //
+m4supst__bx //
+m4supst__by //
+m4supst__bz //
+m4supst__c //
+m4supst__d //
+m4supst__e //
+m4supst__f //
+m4supst__g //
+m4supst__h //
+m4supst__i //
+m4supst__j //
+m4supst__k //
+m4supst__l //
+m4supst__m //
+m4supst__n //
+m4supst__o //
+m4supst__p //
+m4supst__q //
+m4supst__r //
+m4supst__s //
+m4supst__t //
+m4supst__u //
+m4supst__v //
+m4supst__w //
+m4supst__x //
+m4supst__y //
+m4supst__z //
+m4tst // MPU4 Unit Test (Program 4)
+m4vivalv // Viva Las Vegas (Barcrest)
+m4vivalv__0 //
+m4vivalv__1 //
+m4vivalv__2 //
+m4vivalv__3 //
+m4vivalv__4 //
+m4vivalv__5 //
+m4vivalv__6 //
+m4vivalv__7 //
+m4vivalv__8 //
+m4vivalv__a //
+m4vivalv__b //
+m4vivalv__c //
+m4vivalv__e //
+m4vivalv__f //
+m4vivalv__g //
+m4vivalv__h //
+m4vivalv__i //
+m4vivalv__j //
+m4vivalv__k //
+m4vivalv__l //
+m4vivalv__m //
+m4vivalv__n //
+m4vivalv__o //
+m4vivalv__p //
+m4vivalv__q //
+m4vivalv__r //
+m4vivalv__s //
+m4vivalv__t //
+m4vivalv__u //
+m4vivalv__v //
+m4vivalv__w //
+m4vivalv__x //
+m4vivalv__y //
+m4vivalv__z //
+m4voodoo // Voodoo 1000 (Barcrest)
+
+//@source:mpu4plasma.cpp
+m4apach // Apache (Barcrest)
+m4bigchf // Big Chief (Barcrest)
+m4bigchfa //
+m4bigchfb //
+m4bigchfc //
+m4click // Clickity Click (Barcrest)
+m4elite // Elite (Barcrest)
+
+//@source:mpu4sw.cpp
+m4actbnk // Action Bank (Barcrest)
+m4actbnk__a //
+m4actbnk__b //
+m4actbnk__c //
+m4actbnk__d //
+m4actbnk__e //
+m4actbnk__f //
+m4actbnk__g //
+m4actbnk__h //
+m4actbnk__i //
+m4addr // Adders & Ladders (Barcrest)
+m4addr_h1 //
+m4addr_h2 //
+m4addr10 //
+m4addr10_a //
+m4addr10c //
+m4addr10c_a //
+m4addr10d //
+m4addr10d_a //
+m4addr10yd //
+m4addr10yd_a //
+m4addr3 //
+m4addr3_a //
+m4addr3_b //
+m4addr3_c //
+m4addr3_d //
+m4addr3d //
+m4addr3d_a //
+m4addr3d_b //
+m4addr3d_c //
+m4addr3yd //
+m4addr3yd_a //
+m4addr3yd_b //
+m4addr3yd_c //
+m4addr4 //
+m4addr4_a //
+m4addr4c //
+m4addr4c_a //
+m4addr4c_b //
+m4addr4d //
+m4addr4yd //
+m4addr5 //
+m4addr5_a //
+m4addr5c //
+m4addr5c_a //
+m4addr5d //
+m4addr5d_a //
+m4addr5yd //
+m4addr5yd_a //
+m4addr6lc //
+m4addr6ld //
+m4addr6lk //
+m4addr6ly //
+m4addr6lybd //
+m4addr6lyd //
+m4addrc // Adders & Ladders Classic (Barcrest)
+m4addrc__a //
+m4addrc__b //
+m4addrc__c //
+m4addrc__d //
+m4addrc__e //
+m4addrc__f //
+m4addrc__h //
+m4addrc__i //
+m4addrc__j //
+m4addrc__k //
+m4addrc__l //
+m4addrc__m //
+m4addrc__n //
+m4addrcc // Adders & Ladders Classic Club (Barcrest)
+m4addrcc__a //
+m4addrcc__b //
+m4addrcc__c //
+m4addrcc__d //
+m4andybt // Andy's Big Time Club (Barcrest)
+m4andybt__a //
+m4andybt__b //
+m4andybt__c //
+m4andycp // Andy Capp (Barcrest)
+m4andycp10_a //
+m4andycp10c //
+m4andycp10c_a //
+m4andycp10c_b //
+m4andycp10c_c //
+m4andycp10c_d //
+m4andycp10d //
+m4andycp10k //
+m4andycp10yd //
+m4andycp20 //
+m4andycp20_a //
+m4andycp20_b //
+m4andycp8 //
+m4andycp8ad //
+m4andycp8b //
+m4andycp8c //
+m4andycp8d //
+m4andycp8k //
+m4andycp8kd //
+m4andycp8y //
+m4andycp8yd //
+m4andycpac //
+m4andycpac_a //
+m4andycpacc //
+m4andycpacc_a //
+m4andycpacc_b //
+m4andycpacc_c //
+m4andycpacc_d //
+m4andycpacc_e //
+m4andycpaccsd //
+m4andycpacd //
+m4andycpack //
+m4andycpacyd //
+m4andycpc2 //
+m4andycpc2_a //
+m4andycpc2ad //
+m4andycpc2b //
+m4andycpc2bd //
+m4andycpc2d //
+m4andycpc2k //
+m4andycpc2kd //
+m4andycpc2r //
+m4andycpc2rd //
+m4andycpc2y //
+m4andycpc2yd //
+m4andycpc5 //
+m4andycpc5ad //
+m4andycpc5b //
+m4andycpc5bd //
+m4andycpc5d //
+m4andycpc5k //
+m4andycpc5kd //
+m4andycpc5y //
+m4andycpc5yd //
+m4andycpd //
+m4andycpdc //
+m4andycpdd //
+m4andycpdk //
+m4andycpdut // (Dutch set)
+m4andycpdy //
+m4andycpdy_a //
+m4andycpdyd //
+m4andyfh // Andy's Full House (Barcrest)
+m4andyfh__0 //
+m4andyfh__1 //
+m4andyfh__2 //
+m4andyfh__3 //
+m4andyfh__4 //
+m4andyfh__5 //
+m4andyfh__6 //
+m4andyfh__7 //
+m4andyfh__8 //
+m4andyfh__9 //
+m4andyfh__a //
+m4andyfh__a0 //
+m4andyfh__a1 //
+m4andyfh__a2 //
+m4andyfh__a3 //
+m4andyfh__a4 //
+m4andyfh__aa //
+m4andyfh__ab //
+m4andyfh__ac //
+m4andyfh__ad //
+m4andyfh__ae //
+m4andyfh__af //
+m4andyfh__ag //
+m4andyfh__ah //
+m4andyfh__ai //
+m4andyfh__aj //
+m4andyfh__ak //
+m4andyfh__al //
+m4andyfh__am //
+m4andyfh__an //
+m4andyfh__ao //
+m4andyfh__ap //
+m4andyfh__aq //
+m4andyfh__ar //
+m4andyfh__as //
+m4andyfh__at //
+m4andyfh__au //
+m4andyfh__av //
+m4andyfh__aw //
+m4andyfh__ax //
+m4andyfh__ay //
+m4andyfh__az //
+m4andyfh__b //
+m4andyfh__c //
+m4andyfh__d //
+m4andyfh__e //
+m4andyfh__f //
+m4andyfh__g //
+m4andyfh__h //
+m4andyfh__i //
+m4andyfh__j //
+m4andyfh__k //
+m4andyfh__l //
+m4andyfh__m //
+m4andyfh__n //
+m4andyfh__o //
+m4andyfh__p //
+m4andyfh__q //
+m4andyfh__r //
+m4andyfh__s //
+m4andyfh__t //
+m4andyfh__u //
+m4andyfh__v //
+m4andyfh__w //
+m4andyfh__x //
+m4andyfh__y //
+m4andyfh__z //
+m4andyfl // Andy Loves Flo (Barcrest)
+m4andyfl3 //
+m4andyfl3ad //
+m4andyfl3b //
+m4andyfl3bd //
+m4andyfl3d //
+m4andyfl3k //
+m4andyfl3kd //
+m4andyfl3y //
+m4andyfl3yd //
+m4andyfl8 //
+m4andyfl8ad //
+m4andyfl8b //
+m4andyfl8bd //
+m4andyfl8bs //
+m4andyfl8c //
+m4andyfl8d //
+m4andyfl8k //
+m4andyfl8kd //
+m4andyfl8y //
+m4andyflf //
+m4andyflfb //
+m4andyflfc //
+m4andyflfk //
+m4andyflfr //
+m4andyflt //
+m4andyfltad //
+m4andyfltb //
+m4andyfltbd //
+m4andyfltd //
+m4andyfltk //
+m4andyfltkd //
+m4andyfltr //
+m4andyfltrd //
+m4andyflty //
+m4andyfltyd //
+m4andyflu //
+m4andyfluad //
+m4andyflub //
+m4andyflubd //
+m4andyflud //
+m4andyfluk //
+m4andyflukd //
+m4andyflur //
+m4andyflurd //
+m4andyfluy //
+m4andyfluyd //
+m4andyge // Andy's Great Escape (Barcrest)
+m4andyge_h1 //
+m4andyge_h2 //
+m4andyge_h3 //
+m4andyge_h4 //
+m4andyge_hx1 //
+m4andyge_hx2 //
+m4andyge_hx3 //
+m4andyge_hx4 //
+m4andyge_hx5 //
+m4andyge28 //
+m4andyge28ad //
+m4andyge28b //
+m4andyge28bd //
+m4andyge28c //
+m4andyge28d //
+m4andyge28k //
+m4andyge28kd //
+m4andyge28y //
+m4andyge28yd //
+m4andyge2t //
+m4andyge2tad //
+m4andyge2tb //
+m4andyge2tbd //
+m4andyge2td //
+m4andyge2tk //
+m4andyge2tkd //
+m4andyge2ty //
+m4andyge2tyd //
+m4andyge5t //
+m4andyge5tad //
+m4andyge5tb //
+m4andyge5tbd //
+m4andyge5td //
+m4andyge5tk //
+m4andyge5tkd //
+m4andyge5ty //
+m4andyge5tyd //
+m4andygeg_2 //
+m4andygeg_2c //
+m4andygeg_2d //
+m4andygeg_2k //
+m4andygeg_2yd //
+m4andygeg5 //
+m4andygeg5a //
+m4andygeg5c //
+m4andygeg5d //
+m4andygeg5k //
+m4andygeg5yd //
+m4andygegc2 //
+m4andygegc2d //
+m4andygen2_a //
+m4andygen2c //
+m4andygen2d //
+m4andygen2k //
+m4andygen2y //
+m4bagtel // Bagatelle (Barcrest)
+m4bagtel__0 //
+m4bagtel__1 //
+m4bagtel__2 //
+m4bagtel__3 //
+m4bagtel__4 //
+m4bagtel__5 //
+m4bagtel__6 //
+m4bagtel__7 //
+m4bagtel__8 //
+m4bagtel__9 //
+m4bagtel__a //
+m4bagtel__aa //
+m4bagtel__ab //
+m4bagtel__ac //
+m4bagtel__ad //
+m4bagtel__ae //
+m4bagtel__af //
+m4bagtel__ag //
+m4bagtel__b //
+m4bagtel__c //
+m4bagtel__d //
+m4bagtel__e //
+m4bagtel__f //
+m4bagtel__g //
+m4bagtel__h //
+m4bagtel__i //
+m4bagtel__j //
+m4bagtel__k //
+m4bagtel__l //
+m4bagtel__m //
+m4bagtel__n //
+m4bagtel__o //
+m4bagtel__p //
+m4bagtel__q //
+m4bagtel__r //
+m4bagtel__s //
+m4bagtel__t //
+m4bagtel__u //
+m4bagtel__v //
+m4bagtel__w //
+m4bagtel__x //
+m4bagtel__y //
+m4bagtel__z //
+m4bdash // Boulder Dash (Barcrest)
+m4bdash__0 //
+m4bdash__1 //
+m4bdash__2 //
+m4bdash__3 //
+m4bdash__4 //
+m4bdash__5 //
+m4bdash__6 //
+m4bdash__7 //
+m4bdash__8 //
+m4bdash__9 //
+m4bdash__a //
+m4bdash__a0 //
+m4bdash__a1 //
+m4bdash__a2 //
+m4bdash__a3 //
+m4bdash__a4 //
+m4bdash__aa //
+m4bdash__ab //
+m4bdash__ac //
+m4bdash__ad //
+m4bdash__ae //
+m4bdash__af //
+m4bdash__ag //
+m4bdash__ah //
+m4bdash__ai //
+m4bdash__aj //
+m4bdash__ak //
+m4bdash__al //
+m4bdash__am //
+m4bdash__an //
+m4bdash__ao //
+m4bdash__ap //
+m4bdash__aq //
+m4bdash__ar //
+m4bdash__as //
+m4bdash__at //
+m4bdash__au //
+m4bdash__av //
+m4bdash__aw //
+m4bdash__ax //
+m4bdash__ay //
+m4bdash__az //
+m4bdash__b //
+m4bdash__c //
+m4bdash__d //
+m4bdash__e //
+m4bdash__f //
+m4bdash__g //
+m4bdash__h //
+m4bdash__i //
+m4bdash__j //
+m4bdash__k //
+m4bdash__l //
+m4bdash__m //
+m4bdash__n //
+m4bdash__o //
+m4bdash__p //
+m4bdash__q //
+m4bdash__r //
+m4bdash__s //
+m4bdash__t //
+m4bdash__u //
+m4bdash__v //
+m4bdash__w //
+m4bdash__x //
+m4bdash__y //
+m4bdash__z //
+m4berser // Berserk (Barcrest)
+m4berser__0 //
+m4berser__1 //
+m4berser__a //
+m4berser__b //
+m4berser__c //
+m4berser__d //
+m4berser__e //
+m4berser__f //
+m4berser__g //
+m4berser__h //
+m4berser__i //
+m4berser__j //
+m4berser__k //
+m4berser__l //
+m4berser__m //
+m4berser__n //
+m4berser__o //
+m4berser__p //
+m4berser__q //
+m4berser__r //
+m4berser__s //
+m4berser__t //
+m4berser__u //
+m4berser__v //
+m4berser__w //
+m4berser__x //
+m4berser__y //
+m4berser__z //
+m4bnkrol // Bank Roller Club (Barcrest)
+m4bnkrol__a //
+m4bnkrol__b //
+m4bnkrol__c //
+m4bnkrol__d //
+m4bnkrol__e //
+m4buc // Buccaneer (Barcrest)
+m4buc__0 //
+m4buc__1 //
+m4buc__2 //
+m4buc__3 //
+m4buc__4 //
+m4buc__5 //
+m4buc__6 //
+m4buc__7 //
+m4buc__8 //
+m4buc__9 //
+m4buc__a //
+m4buc__aa //
+m4buc__ab //
+m4buc__ac //
+m4buc__ad //
+m4buc__ae //
+m4buc__af //
+m4buc__ag //
+m4buc__ah //
+m4buc__ai //
+m4buc__aj //
+m4buc__ak //
+m4buc__al //
+m4buc__am //
+m4buc__an //
+m4buc__ao //
+m4buc__ap //
+m4buc__aq //
+m4buc__ar //
+m4buc__as //
+m4buc__at //
+m4buc__au //
+m4buc__av //
+m4buc__aw //
+m4buc__ax //
+m4buc__ay //
+m4buc__az //
+m4buc__b //
+m4buc__c //
+m4buc__d //
+m4buc__e //
+m4buc__f //
+m4buc__g //
+m4buc__h //
+m4buc__i //
+m4buc__j //
+m4buc__k //
+m4buc__l //
+m4buc__m //
+m4buc__n //
+m4buc__o //
+m4buc__p //
+m4buc__q //
+m4buc__r //
+m4buc__s //
+m4buc__t //
+m4buc__u //
+m4buc__v //
+m4buc__w //
+m4buc__x //
+m4buc__y //
+m4buc__z //
+m4c9 // Cloud Nine (Barcrest)
+m4c9__0 //
+m4c9__1 //
+m4c9__2 //
+m4c9__3 //
+m4c9__4 //
+m4c9__5 //
+m4c9__6 //
+m4c9__7 //
+m4c9__8 //
+m4c9__9 //
+m4c9__a //
+m4c9__a0 //
+m4c9__a1 //
+m4c9__a2 //
+m4c9__a3 //
+m4c9__aa //
+m4c9__ab //
+m4c9__ac //
+m4c9__ad //
+m4c9__ae //
+m4c9__af //
+m4c9__ag //
+m4c9__ah //
+m4c9__ai //
+m4c9__aj //
+m4c9__ak //
+m4c9__al //
+m4c9__am //
+m4c9__an //
+m4c9__ao //
+m4c9__ap //
+m4c9__aq //
+m4c9__ar //
+m4c9__as //
+m4c9__at //
+m4c9__au //
+m4c9__av //
+m4c9__aw //
+m4c9__ax //
+m4c9__ay //
+m4c9__az //
+m4c9__b //
+m4c9__c //
+m4c9__d //
+m4c9__e //
+m4c9__f //
+m4c9__g //
+m4c9__h //
+m4c9__i //
+m4c9__j //
+m4c9__k //
+m4c9__l //
+m4c9__m //
+m4c9__n //
+m4c9__o //
+m4c9__p //
+m4c9__q //
+m4c9__r //
+m4c9__s //
+m4c9__t //
+m4c9__u //
+m4c9__v //
+m4c9__w //
+m4c9__x //
+m4c9__y //
+m4c9__z //
+m4calama // Calamari Club (Barcrest)
+m4calama__a //
+m4calama__b //
+m4calama__c //
+m4calama__d //
+m4calama__e //
+m4calama__f //
+m4calama__g //
+m4calama__h //
+m4calama__i //
+m4calama__j //
+m4cashat // Cash Attack (Barcrest)
+m4cashat__0 //
+m4cashat__1 //
+m4cashat__2 //
+m4cashat__3 //
+m4cashat__4 //
+m4cashat__5 //
+m4cashat__6 //
+m4cashat__7 //
+m4cashat__8 //
+m4cashat__9 //
+m4cashat__a //
+m4cashat__aa //
+m4cashat__ab //
+m4cashat__ac //
+m4cashat__ad //
+m4cashat__ae //
+m4cashat__af //
+m4cashat__ag //
+m4cashat__ah //
+m4cashat__ai //
+m4cashat__aj //
+m4cashat__ak //
+m4cashat__al //
+m4cashat__am //
+m4cashat__an //
+m4cashat__ao //
+m4cashat__ap //
+m4cashat__aq //
+m4cashat__ar //
+m4cashat__b //
+m4cashat__c //
+m4cashat__d //
+m4cashat__e //
+m4cashat__f //
+m4cashat__g //
+m4cashat__h //
+m4cashat__i //
+m4cashat__j //
+m4cashat__k //
+m4cashat__l //
+m4cashat__m //
+m4cashat__n //
+m4cashat__o //
+m4cashat__p //
+m4cashat__q //
+m4cashat__r //
+m4cashat__s //
+m4cashat__t //
+m4cashat__u //
+m4cashat__v //
+m4cashat__w //
+m4cashat__x //
+m4cashat__y //
+m4cashat__z //
+m4cashln // Cash Lines (Barcrest)
+m4cashln__0 //
+m4cashln__1 //
+m4cashln__2 //
+m4cashln__3 //
+m4cashln__4 //
+m4cashln__5 //
+m4cashln__6 //
+m4cashln__7 //
+m4cashln__8 //
+m4cashln__9 //
+m4cashln__a //
+m4cashln__a0 //
+m4cashln__a1 //
+m4cashln__a2 //
+m4cashln__a3 //
+m4cashln__a4 //
+m4cashln__a5 //
+m4cashln__a6 //
+m4cashln__a7 //
+m4cashln__a8 //
+m4cashln__a9 //
+m4cashln__aa //
+m4cashln__ab //
+m4cashln__ac //
+m4cashln__ad //
+m4cashln__ae //
+m4cashln__af //
+m4cashln__ag //
+m4cashln__ah //
+m4cashln__ai //
+m4cashln__aj //
+m4cashln__ak //
+m4cashln__al //
+m4cashln__am //
+m4cashln__an //
+m4cashln__ao //
+m4cashln__ap //
+m4cashln__aq //
+m4cashln__ar //
+m4cashln__as //
+m4cashln__at //
+m4cashln__au //
+m4cashln__av //
+m4cashln__aw //
+m4cashln__ax //
+m4cashln__ay //
+m4cashln__az //
+m4cashln__b //
+m4cashln__ba //
+m4cashln__bb //
+m4cashln__bc //
+m4cashln__bd //
+m4cashln__be //
+m4cashln__bf //
+m4cashln__bg //
+m4cashln__bh //
+m4cashln__bi //
+m4cashln__bj //
+m4cashln__c //
+m4cashln__d //
+m4cashln__e //
+m4cashln__f //
+m4cashln__g //
+m4cashln__h //
+m4cashln__i //
+m4cashln__j //
+m4cashln__k //
+m4cashln__l //
+m4cashln__m //
+m4cashln__n //
+m4cashln__o //
+m4cashln__p //
+m4cashln__q //
+m4cashln__r //
+m4cashln__s //
+m4cashln__t //
+m4cashln__u //
+m4cashln__v //
+m4cashln__w //
+m4cashln__x //
+m4cashln__y //
+m4cashln__z //
+m4cashmn // Cash Machine (Barcrest)
+m4cashmn__0 //
+m4cashmn__1 //
+m4cashmn__2 //
+m4cashmn__3 //
+m4cashmn__4 //
+m4cashmn__5 //
+m4cashmn__6 //
+m4cashmn__7 //
+m4cashmn__8 //
+m4cashmn__9 //
+m4cashmn__a //
+m4cashmn__aa //
+m4cashmn__ab //
+m4cashmn__ac //
+m4cashmn__ad //
+m4cashmn__ae //
+m4cashmn__af //
+m4cashmn__ag //
+m4cashmn__ah //
+m4cashmn__ai //
+m4cashmn__aj //
+m4cashmn__ak //
+m4cashmn__al //
+m4cashmn__b //
+m4cashmn__c //
+m4cashmn__d //
+m4cashmn__e //
+m4cashmn__f //
+m4cashmn__g //
+m4cashmn__h //
+m4cashmn__i //
+m4cashmn__j //
+m4cashmn__k //
+m4cashmn__l //
+m4cashmn__m //
+m4cashmn__n //
+m4cashmn__o //
+m4cashmn__p //
+m4cashmn__q //
+m4cashmn__r //
+m4cashmn__s //
+m4cashmn__t //
+m4cashmn__u //
+m4cashmn__v //
+m4cashmn__w //
+m4cashmn__x //
+m4cashmn__y //
+m4cashmn__z //
+m4cashmn__za //
+m4cashmn__zb //
+m4coscas // Cosmic Casino (Barcrest)
+m4coscas__a //
+m4coscas__b //
+m4coscas__c //
+m4coscas__d //
+m4coscas__e //
+m4coscas__f //
+m4coscas__g //
+m4coscas__h //
+m4coscas__i //
+m4coscas__j //
+m4coscas__k //
+m4coscas__l //
+m4coscas__m //
+m4coscas__n //
+m4coscas__o //
+m4coscas__p //
+m4coscas__q //
+m4coscas__r //
+m4coscas__s //
+m4coscas__t //
+m4coscas__u //
+m4coscas__v //
+m4cpycat // Copy Cat (Bwb)
+m4cpycat__0 //
+m4cpycat__1 //
+m4cpycat__2 //
+m4cpycat__3 //
+m4cpycat__4 //
+m4cpycat__5 //
+m4cpycat__6 //
+m4cpycat__7 //
+m4cpycat__8 //
+m4cpycat__a //
+m4cpycat__b //
+m4cpycat__c //
+m4cpycat__d //
+m4cpycat__e //
+m4cpycat__f //
+m4cpycat__g //
+m4cpycat__h //
+m4cpycat__i //
+m4cpycat__j //
+m4cpycat__k //
+m4cpycat__l //
+m4cpycat__m //
+m4cpycat__n //
+m4cpycat__o //
+m4cpycat__p //
+m4cpycat__q //
+m4cpycat__r //
+m4cpycat__s //
+m4cpycat__t //
+m4cpycat__u //
+m4cpycat__v //
+m4cpycat__w //
+m4cpycat__x //
+m4cpycat__y //
+m4cpycat__z //
+m4crdome // Crystal Dome (Barcrest)
+m4crdome__a //
+m4crdome__b //
+m4crdome__c //
+m4crdome__d //
+m4crdome__e //
+m4crdome__f //
+m4crdome__g //
+m4crdome__h //
+m4crdome__i //
+m4crdome__j //
+m4crdome__k //
+m4crdome__l //
+m4crdome__m //
+m4crdome__n //
+m4crmaze // Crystal Maze (Barcrest)
+m4crmaze__c //
+m4crmaze__d //
+m4crmaze__e //
+m4crmaze__f //
+m4crmaze__g //
+m4crmaze__h //
+m4crmaze__i //
+m4crmaze__j //
+m4crmaze__k //
+m4crmaze__l //
+m4crmaze__m //
+m4crmaze__n //
+m4crmaze__o //
+m4crmaze__p //
+m4crmaze__q //
+m4crmaze__r //
+m4crmaze__s //
+m4cshenc // Cash Encounters (Bwb)
+m4cshenc__a //
+m4cshenc__b //
+m4cshenc__c //
+m4cshenc__d //
+m4dbldm // Double Diamond Club (Barcrest)
+m4dbldm__a //
+m4dbldm__b //
+m4dbldm__c //
+m4denmen // Dennis The Menace (Barcrest)
+m4denmen_h1 //
+m4denmen_h2 //
+m4denmen_h3 //
+m4denmend5 //
+m4denmend5ad //
+m4denmend5b //
+m4denmend5bd //
+m4denmend5d //
+m4denmend5k //
+m4denmend5kd //
+m4denmend5y //
+m4denmend5yd //
+m4denmend8 //
+m4denmend8c //
+m4denmend8d //
+m4denmend8k //
+m4denmend8y //
+m4denmend8yd //
+m4denmendnb //
+m4denmendnc //
+m4denmendnd //
+m4denmendnk //
+m4denmendny //
+m4denmendt //
+m4denmendtad //
+m4denmendtb //
+m4denmendtbd //
+m4denmendtd //
+m4denmendtk //
+m4denmendtkd //
+m4denmendty //
+m4denmendtyd //
+m4dtyfre // Duty Free (Barcrest)
+m4dtyfre_h1 //
+m4dtyfre_h2 //
+m4dtyfrebwb //
+m4dtyfrebwb_a //
+m4dtyfrebwb_b //
+m4dtyfrebwb_c //
+m4dtyfrebwb_d //
+m4dtyfrebwb_e //
+m4dtyfrebwb_f //
+m4dtyfrebwb_g //
+m4dtyfrebwb_h //
+m4dtyfref5 //
+m4dtyfref5ad //
+m4dtyfref5b //
+m4dtyfref5bd //
+m4dtyfref5d //
+m4dtyfref5k //
+m4dtyfref5kd //
+m4dtyfref5r //
+m4dtyfref5rd //
+m4dtyfref5y //
+m4dtyfref5yd //
+m4dtyfref8 //
+m4dtyfref8c //
+m4dtyfref8d //
+m4dtyfref8k //
+m4dtyfref8y //
+m4dtyfref8yd //
+m4dtyfreft //
+m4dtyfreftad //
+m4dtyfreftb //
+m4dtyfreftbd //
+m4dtyfreftd //
+m4dtyfreftk //
+m4dtyfreftkd //
+m4dtyfrefty //
+m4dtyfreftyd //
+m4dtyfreutb //
+m4dtyfreutc //
+m4dtyfrexd //
+m4dtyfrexd_a //
+m4dtyfrexdad //
+m4dtyfrexdb //
+m4dtyfrexdbd //
+m4dtyfrexdc //
+m4dtyfrexdd //
+m4dtyfrexdk //
+m4dtyfrexdkd //
+m4dtyfrexdr //
+m4dtyfrexdrd //
+m4dtyfrexdy //
+m4dtyfrexdyd //
+m4dtyfrexf //
+m4dtyfrexfad //
+m4dtyfrexfb //
+m4dtyfrexfbd //
+m4dtyfrexfc //
+m4dtyfrexfd //
+m4dtyfrexfk //
+m4dtyfrexfkd //
+m4dtyfrexfr //
+m4dtyfrexfrd //
+m4dtyfrexfy //
+m4dtyfrexfyd //
+m4eaw // Everyone's A Winner (Barcrest)
+m4eaw__0 //
+m4eaw__1 //
+m4eaw__2 //
+m4eaw__3 //
+m4eaw__4 //
+m4eaw__5 //
+m4eaw__6 //
+m4eaw__7 //
+m4eaw__8 //
+m4eaw__9 //
+m4eaw__a //
+m4eaw__a0 //
+m4eaw__a1 //
+m4eaw__a2 //
+m4eaw__a3 //
+m4eaw__a4 //
+m4eaw__a5 //
+m4eaw__a6 //
+m4eaw__a7 //
+m4eaw__a8 //
+m4eaw__a9 //
+m4eaw__aa //
+m4eaw__ab //
+m4eaw__ac //
+m4eaw__ad //
+m4eaw__ae //
+m4eaw__af //
+m4eaw__ag //
+m4eaw__ah //
+m4eaw__ai //
+m4eaw__aj //
+m4eaw__ak //
+m4eaw__al //
+m4eaw__am //
+m4eaw__an //
+m4eaw__ao //
+m4eaw__ap //
+m4eaw__aq //
+m4eaw__ar //
+m4eaw__as //
+m4eaw__at //
+m4eaw__au //
+m4eaw__av //
+m4eaw__aw //
+m4eaw__ax //
+m4eaw__ay //
+m4eaw__az //
+m4eaw__b //
+m4eaw__ba //
+m4eaw__bb //
+m4eaw__bc //
+m4eaw__bd //
+m4eaw__be //
+m4eaw__bf //
+m4eaw__bg //
+m4eaw__bh //
+m4eaw__bi //
+m4eaw__bj //
+m4eaw__bk //
+m4eaw__bl //
+m4eaw__bm //
+m4eaw__bn //
+m4eaw__bo //
+m4eaw__bp //
+m4eaw__bq //
+m4eaw__br //
+m4eaw__bs //
+m4eaw__bt //
+m4eaw__bu //
+m4eaw__bv //
+m4eaw__bw //
+m4eaw__bx //
+m4eaw__bz //
+m4eaw__c //
+m4eaw__d //
+m4eaw__e //
+m4eaw__f //
+m4eaw__g //
+m4eaw__h //
+m4eaw__i //
+m4eaw__j //
+m4eaw__k //
+m4eaw__l //
+m4eaw__m //
+m4eaw__n //
+m4eaw__o //
+m4eaw__p //
+m4eaw__q //
+m4eaw__r //
+m4eaw__s //
+m4eaw__t //
+m4eaw__u //
+m4eaw__v //
+m4eaw__w //
+m4eaw__x //
+m4eaw__y //
+m4eaw__z //
+m4gb006 // Games Bond 006 (Barcrest)
+m4gb006__a //
+m4gb006__b //
+m4gb006__c //
+m4gbust // Ghost Buster (Barcrest)
+m4gbust__a //
+m4gbust__b //
+m4gbust__c //
+m4gbust__d //
+m4gbust__e //
+m4gbust__f //
+m4gbust__g //
+m4gbust__h //
+m4gbust__i //
+m4gbust__j //
+m4gbust__k //
+m4gbust__l //
+m4gbust__m //
+m4gbust__n //
+m4gbust__o //
+m4gbust__p //
+m4gbust__q //
+m4gbust__r //
+m4gbust__s //
+m4gbust__t //
+m4gbust__u //
+m4gbust__v //
+m4gbust__w //
+m4gclue // Give Us A Clue (Barcrest)
+m4gclue__a //
+m4gclue__b //
+m4gclue__c //
+m4gclue__d //
+m4gclue__e //
+m4gclue__f //
+m4gclue__g //
+m4gclue__h //
+m4gclue__i //
+m4gclue__j //
+m4gclue__k //
+m4gclue__l //
+m4gclue__m //
+m4gclue__n //
+m4gclue__o //
+m4gclue__p //
+m4gclue__q //
+m4gclue__r //
+m4gclue__s //
+m4gclue__t //
+m4gclue__u //
+m4gclue__v //
+m4gclue__w //
+m4goodtm // Let The Good Times Roll (Barcrest)
+m4goodtm__0 //
+m4goodtm__1 //
+m4goodtm__2 //
+m4goodtm__3 //
+m4goodtm__4 //
+m4goodtm__5 //
+m4goodtm__6 //
+m4goodtm__7 //
+m4goodtm__8 //
+m4goodtm__9 //
+m4goodtm__a //
+m4goodtm__a0 //
+m4goodtm__a1 //
+m4goodtm__a2 //
+m4goodtm__a3 //
+m4goodtm__a4 //
+m4goodtm__a5 //
+m4goodtm__a6 //
+m4goodtm__aa //
+m4goodtm__ab //
+m4goodtm__ac //
+m4goodtm__ad //
+m4goodtm__ae //
+m4goodtm__af //
+m4goodtm__ag //
+m4goodtm__ah //
+m4goodtm__ai //
+m4goodtm__aj //
+m4goodtm__ak //
+m4goodtm__al //
+m4goodtm__am //
+m4goodtm__an //
+m4goodtm__ao //
+m4goodtm__ap //
+m4goodtm__aq //
+m4goodtm__ar //
+m4goodtm__as //
+m4goodtm__at //
+m4goodtm__au //
+m4goodtm__av //
+m4goodtm__aw //
+m4goodtm__ax //
+m4goodtm__ay //
+m4goodtm__az //
+m4goodtm__b //
+m4goodtm__c //
+m4goodtm__d //
+m4goodtm__e //
+m4goodtm__f //
+m4goodtm__g //
+m4goodtm__h //
+m4goodtm__i //
+m4goodtm__j //
+m4goodtm__k //
+m4goodtm__l //
+m4goodtm__m //
+m4goodtm__n //
+m4goodtm__o //
+m4goodtm__p //
+m4goodtm__q //
+m4goodtm__r //
+m4goodtm__s //
+m4goodtm__t //
+m4goodtm__u //
+m4goodtm__v //
+m4goodtm__w //
+m4goodtm__x //
+m4goodtm__y //
+m4goodtm__z //
+m4hijinx // Hi Jinx (Barcrest)
+m4hijinx__0 //
+m4hijinx__1 //
+m4hijinx__2 //
+m4hijinx__3 //
+m4hijinx__4 //
+m4hijinx__5 //
+m4hijinx__6 //
+m4hijinx__7 //
+m4hijinx__8 //
+m4hijinx__9 //
+m4hijinx__a //
+m4hijinx__aa //
+m4hijinx__ab //
+m4hijinx__b //
+m4hijinx__c //
+m4hijinx__d //
+m4hijinx__e //
+m4hijinx__f //
+m4hijinx__g //
+m4hijinx__h //
+m4hijinx__i //
+m4hijinx__j //
+m4hijinx__k //
+m4hijinx__l //
+m4hijinx__m //
+m4hijinx__n //
+m4hijinx__o //
+m4hijinx__p //
+m4hijinx__q //
+m4hijinx__r //
+m4hijinx__s //
+m4hijinx__t //
+m4hijinx__u //
+m4hijinx__v //
+m4hijinx__w //
+m4hijinx__x //
+m4hijinx__y //
+m4hijinx__z //
+m4hittop // Hit The Top (Barcrest)
+m4hittop__0 //
+m4hittop__1 //
+m4hittop__2 //
+m4hittop__3 //
+m4hittop__4 //
+m4hittop__5 //
+m4hittop__6 //
+m4hittop__7 //
+m4hittop__8 //
+m4hittop__9 //
+m4hittop__a //
+m4hittop__aa //
+m4hittop__ab //
+m4hittop__ac //
+m4hittop__ad //
+m4hittop__ae //
+m4hittop__af //
+m4hittop__ag //
+m4hittop__ah //
+m4hittop__ai //
+m4hittop__aj //
+m4hittop__ak //
+m4hittop__al //
+m4hittop__am //
+m4hittop__an //
+m4hittop__ao //
+m4hittop__ap //
+m4hittop__aq //
+m4hittop__ar //
+m4hittop__as //
+m4hittop__at //
+m4hittop__au //
+m4hittop__av //
+m4hittop__aw //
+m4hittop__ax //
+m4hittop__b //
+m4hittop__c //
+m4hittop__d //
+m4hittop__e //
+m4hittop__f //
+m4hittop__g //
+m4hittop__h //
+m4hittop__i //
+m4hittop__j //
+m4hittop__k //
+m4hittop__l //
+m4hittop__m //
+m4hittop__n //
+m4hittop__o //
+m4hittop__p //
+m4hittop__q //
+m4hittop__r //
+m4hittop__s //
+m4hittop__t //
+m4hittop__u //
+m4hittop__v //
+m4hittop__w //
+m4hittop__x //
+m4hittop__y //
+m4hittop__z //
+m4hotrod // Hot Rod (Barcrest)
+m4hotrod__a //
+m4hotrod__b //
+m4hotrod__c //
+m4hotrod__d //
+m4hotrod__e //
+m4hotrod__f //
+m4hotrod__g //
+m4hotrod__h //
+m4hotrod__i //
+m4hotrod__j //
+m4hotrod__k //
+m4hotrod__l //
+m4hotrod__m //
+m4hotrod__n //
+m4hotrod__o //
+m4hotrod__p //
+m4hotrod__q //
+m4hotrod__r //
+m4hotrod__s //
+m4hotrod__t //
+m4hotrod__u //
+m4hotrod__v //
+m4hypclb // Hyper Viper Club (Barcrest)
+m4hypclb__a //
+m4hypclb__b //
+m4hypclb__c //
+m4hypvip // Hyper Viper (Barcrest)
+m4hypvip__a //
+m4hypvip__b //
+m4hypvip__c //
+m4hypvip__d //
+m4hypvip__e //
+m4hypvip__f //
+m4hypvip__g //
+m4hypvip__h //
+m4hypvip__i //
+m4hypvip__j //
+m4hypvip__k //
+m4hypvip__l //
+m4hypvip__m //
+m4hypvip__n //
+m4hypvip__o //
+m4hypvip__p //
+m4hypvip__q //
+m4hypvip__r //
+m4hypvip__s //
+m4hypvip__t //
+m4hypvip__u //
+m4hypvip__v //
+m4jolgem // Jolly Gems (Barcrest)
+m4jolgem__0 //
+m4jolgem__1 //
+m4jolgem__2 //
+m4jolgem__3 //
+m4jolgem__4 //
+m4jolgem__5 //
+m4jolgem__6 //
+m4jolgem__7 //
+m4jolgem__8 //
+m4jolgem__9 //
+m4jolgem__a //
+m4jolgem__aa //
+m4jolgem__ab //
+m4jolgem__ac //
+m4jolgem__ad //
+m4jolgem__ae //
+m4jolgem__af //
+m4jolgem__ag //
+m4jolgem__ah //
+m4jolgem__ai //
+m4jolgem__aj //
+m4jolgem__ak //
+m4jolgem__al //
+m4jolgem__am //
+m4jolgem__an //
+m4jolgem__ao //
+m4jolgem__ap //
+m4jolgem__b //
+m4jolgem__c //
+m4jolgem__d //
+m4jolgem__e //
+m4jolgem__f //
+m4jolgem__g //
+m4jolgem__h //
+m4jolgem__i //
+m4jolgem__j //
+m4jolgem__k //
+m4jolgem__l //
+m4jolgem__m //
+m4jolgem__n //
+m4jolgem__o //
+m4jolgem__p //
+m4jolgem__q //
+m4jolgem__r //
+m4jolgem__s //
+m4jolgem__t //
+m4jolgem__u //
+m4jolgem__v //
+m4jolgem__w //
+m4jolgem__x //
+m4jolgem__y //
+m4jolgem__z //
+m4jpgem // Jackpot Gems (Barcrest)
+m4jpgem__0 //
+m4jpgem__1 //
+m4jpgem__2 //
+m4jpgem__3 //
+m4jpgem__4 //
+m4jpgem__5 //
+m4jpgem__6 //
+m4jpgem__7 //
+m4jpgem__8 //
+m4jpgem__9 //
+m4jpgem__a //
+m4jpgem__a0 //
+m4jpgem__a1 //
+m4jpgem__a2 //
+m4jpgem__a3 //
+m4jpgem__a4 //
+m4jpgem__a5 //
+m4jpgem__a6 //
+m4jpgem__a7 //
+m4jpgem__a8 //
+m4jpgem__a9 //
+m4jpgem__aa //
+m4jpgem__ab //
+m4jpgem__ac //
+m4jpgem__ad //
+m4jpgem__ae //
+m4jpgem__af //
+m4jpgem__ag //
+m4jpgem__ah //
+m4jpgem__ai //
+m4jpgem__aj //
+m4jpgem__ak //
+m4jpgem__al //
+m4jpgem__am //
+m4jpgem__an //
+m4jpgem__ao //
+m4jpgem__ap //
+m4jpgem__aq //
+m4jpgem__ar //
+m4jpgem__as //
+m4jpgem__at //
+m4jpgem__au //
+m4jpgem__av //
+m4jpgem__aw //
+m4jpgem__ax //
+m4jpgem__ay //
+m4jpgem__az //
+m4jpgem__b //
+m4jpgem__ba //
+m4jpgem__bb //
+m4jpgem__bc //
+m4jpgem__bd //
+m4jpgem__be //
+m4jpgem__bf //
+m4jpgem__bg //
+m4jpgem__bh //
+m4jpgem__bi //
+m4jpgem__bj //
+m4jpgem__bk //
+m4jpgem__bl //
+m4jpgem__bm //
+m4jpgem__bn //
+m4jpgem__bo //
+m4jpgem__bp //
+m4jpgem__c //
+m4jpgem__d //
+m4jpgem__e //
+m4jpgem__f //
+m4jpgem__g //
+m4jpgem__h //
+m4jpgem__i //
+m4jpgem__j //
+m4jpgem__k //
+m4jpgem__l //
+m4jpgem__m //
+m4jpgem__n //
+m4jpgem__o //
+m4jpgem__p //
+m4jpgem__q //
+m4jpgem__r //
+m4jpgem__s //
+m4jpgem__t //
+m4jpgem__u //
+m4jpgem__v //
+m4jpgem__w //
+m4jpgem__x //
+m4jpgem__y //
+m4jpgem__z //
+m4jpgemc // Jackpot Gems Classic (Barcrest)
+m4jpgemc__a //
+m4jpgemc__b //
+m4jpgemc__c //
+m4jpgemc__d //
+m4jpgemc__e //
+m4jpgemc__f //
+m4jpgemc__g //
+m4jpgemc__h //
+m4jpgemc__i //
+m4jpgemc__j //
+m4jpgemc__k //
+m4jpgemc__l //
+m4jpgemc__m //
+m4jpgemc__n //
+m4jpgemc__o //
+m4jpgemc__p //
+m4jpgemc__q //
+m4jpgemc__r //
+m4jpgemc__s //
+m4jpgemc__t //
+m4jpgemc__u //
+m4jpgemc__v //
+m4jpgemc__w //
+m4jwlcwn // Jewel In the Crown (Barcrest)
+m4jwlcwn__0 //
+m4jwlcwn__1 //
+m4jwlcwn__2 //
+m4jwlcwn__3 //
+m4jwlcwn__4 //
+m4jwlcwn__5 //
+m4jwlcwn__6 //
+m4jwlcwn__a //
+m4jwlcwn__b //
+m4jwlcwn__c //
+m4jwlcwn__d //
+m4jwlcwn__e //
+m4jwlcwn__f //
+m4jwlcwn__g //
+m4jwlcwn__h //
+m4jwlcwn__i //
+m4jwlcwn__j //
+m4jwlcwn__k //
+m4jwlcwn__l //
+m4jwlcwn__m //
+m4jwlcwn__n //
+m4jwlcwn__o //
+m4jwlcwn__p //
+m4jwlcwn__q //
+m4jwlcwn__r //
+m4jwlcwn__s //
+m4jwlcwn__t //
+m4jwlcwn__u //
+m4jwlcwn__v //
+m4jwlcwn__w //
+m4jwlcwn__x //
+m4jwlcwn__y //
+m4jwlcwn__z //
+m4kingq // Kings & Queens (Bwb)
+m4kingq__a //
+m4kingq__b //
+m4kingq__c //
+m4kingq__d //
+m4kingq__e //
+m4kingq__f //
+m4kingq__g //
+m4kingq__h //
+m4kingq__i //
+m4kingq__j //
+m4kingq__k //
+m4kingq__l //
+m4kingq__m //
+m4kingq__n //
+m4kingq__o //
+m4kingq__p //
+m4kingq__r //
+m4kingq__s //
+m4kingq__t //
+m4kingqc // Kings & Queens Classic (Bwb)
+m4kingqc__0 //
+m4kingqc__1 //
+m4kingqc__2 //
+m4kingqc__3 //
+m4kingqc__4 //
+m4kingqc__5 //
+m4kingqc__a //
+m4kingqc__b //
+m4kingqc__c //
+m4kingqc__d //
+m4kingqc__e //
+m4kingqc__f //
+m4kingqc__g //
+m4kingqc__h //
+m4kingqc__i //
+m4kingqc__j //
+m4kingqc__k //
+m4kingqc__l //
+m4kingqc__m //
+m4kingqc__n //
+m4kingqc__q //
+m4kingqc__r //
+m4kingqc__s //
+m4kingqc__t //
+m4kingqc__u //
+m4kingqc__v //
+m4kingqc__w //
+m4kingqc__x //
+m4kingqc__y //
+m4kingqc__z //
+m4lucklv // Lucky Las Vegas (Barcrest)
+m4lucklv__0 //
+m4lucklv__1 //
+m4lucklv__2 //
+m4lucklv__3 //
+m4lucklv__4 //
+m4lucklv__5 //
+m4lucklv__6 //
+m4lucklv__7 //
+m4lucklv__8 //
+m4lucklv__9 //
+m4lucklv__a //
+m4lucklv__aa //
+m4lucklv__ab //
+m4lucklv__ac //
+m4lucklv__ad //
+m4lucklv__ae //
+m4lucklv__af //
+m4lucklv__ag //
+m4lucklv__ah //
+m4lucklv__ai //
+m4lucklv__b //
+m4lucklv__c //
+m4lucklv__d //
+m4lucklv__e //
+m4lucklv__f //
+m4lucklv__g //
+m4lucklv__h //
+m4lucklv__i //
+m4lucklv__j //
+m4lucklv__k //
+m4lucklv__l //
+m4lucklv__m //
+m4lucklv__n //
+m4lucklv__o //
+m4lucklv__p //
+m4lucklv__q //
+m4lucklv__r //
+m4lucklv__s //
+m4lucklv__t //
+m4lucklv__u //
+m4lucklv__v //
+m4lucklv__w //
+m4lucklv__x //
+m4lucklv__y //
+m4lucklv__z //
+m4lucksc // Lucky Strike Club (Barcrest) [MPU 4]
+m4lucksc__a //
+m4lucksc__b //
+m4lucksc__c //
+m4lucksc__d //
+m4lucksc__e //
+m4lucksc__f //
+m4lucksc__g //
+m4lucksc__h //
+m4lucksc__i //
+m4lucksc__j //
+m4lucksc__k //
+m4lucksc__l //
+m4luckst // Lucky Strike (Barcrest)
+m4luckst__0 //
+m4luckst__1 //
+m4luckst__2 //
+m4luckst__3 //
+m4luckst__4 //
+m4luckst__5 //
+m4luckst__6 //
+m4luckst__7 //
+m4luckst__8 //
+m4luckst__9 //
+m4luckst__a //
+m4luckst__aa //
+m4luckst__ab //
+m4luckst__ac //
+m4luckst__ad //
+m4luckst__ae //
+m4luckst__af //
+m4luckst__ag //
+m4luckst__ah //
+m4luckst__ai //
+m4luckst__aj //
+m4luckst__ak //
+m4luckst__al //
+m4luckst__am //
+m4luckst__an //
+m4luckst__ao //
+m4luckst__ap //
+m4luckst__aq //
+m4luckst__ar //
+m4luckst__as //
+m4luckst__at //
+m4luckst__au //
+m4luckst__av //
+m4luckst__aw //
+m4luckst__b //
+m4luckst__c //
+m4luckst__d //
+m4luckst__e //
+m4luckst__f //
+m4luckst__g //
+m4luckst__h //
+m4luckst__i //
+m4luckst__j //
+m4luckst__k //
+m4luckst__l //
+m4luckst__m //
+m4luckst__n //
+m4luckst__p //
+m4luckst__q //
+m4luckst__r //
+m4luckst__s //
+m4luckst__t //
+m4luckst__u //
+m4luckst__v //
+m4luckst__w //
+m4luckst__x //
+m4luckst__y //
+m4luckst__z //
+m4luxor // Luxor (Barcrest)
+m4luxor__a //
+m4luxor__b //
+m4luxor__c //
+m4luxor__d //
+m4luxor__e //
+m4luxor__f //
+m4luxor__g //
+m4luxor__h //
+m4luxor__i //
+m4luxor__j //
+m4luxor__k //
+m4luxor__l //
+m4luxor__m //
+m4luxor__n //
+m4luxor__o //
+m4luxor__p //
+m4luxor__q //
+m4luxor__r //
+m4luxor__s //
+m4luxor__t //
+m4luxor__u //
+m4luxor__v //
+m4luxor__w //
+m4luxor__x //
+m4luxor__y //
+m4luxor__z //
+m4lvlcl // Lucky Las Vegas Classic (Bwb)
+m4lvlcl__a //
+m4lvlcl__b //
+m4lvlcl__c //
+m4lvlcl__d //
+m4lvlcl__e //
+m4lvlcl__f //
+m4madhse // Mad House (Barcrest)
+m4madhse__0 //
+m4madhse__a //
+m4madhse__b //
+m4madhse__c //
+m4madhse__d //
+m4madhse__e //
+m4madhse__f //
+m4madhse__g //
+m4madhse__h //
+m4madhse__i //
+m4madhse__j //
+m4madhse__k //
+m4madhse__l //
+m4madhse__m //
+m4madhse__n //
+m4madhse__o //
+m4madhse__p //
+m4madhse__q //
+m4madhse__r //
+m4madhse__s //
+m4madhse__t //
+m4madhse__u //
+m4madhse__v //
+m4madhse__w //
+m4madhse__x //
+m4madhse__y //
+m4madhse__z //
+m4mag7s // Magnificent 7's (Barcrest)
+m4mag7s__0 //
+m4mag7s__1 //
+m4mag7s__2 //
+m4mag7s__3 //
+m4mag7s__4 //
+m4mag7s__5 //
+m4mag7s__6 //
+m4mag7s__7 //
+m4mag7s__8 //
+m4mag7s__9 //
+m4mag7s__a //
+m4mag7s__aa //
+m4mag7s__ab //
+m4mag7s__ac //
+m4mag7s__ad //
+m4mag7s__ae //
+m4mag7s__af //
+m4mag7s__ag //
+m4mag7s__ah //
+m4mag7s__ai //
+m4mag7s__aj //
+m4mag7s__ak //
+m4mag7s__al //
+m4mag7s__am //
+m4mag7s__an //
+m4mag7s__ao //
+m4mag7s__ap //
+m4mag7s__aq //
+m4mag7s__ar //
+m4mag7s__as //
+m4mag7s__at //
+m4mag7s__au //
+m4mag7s__av //
+m4mag7s__aw //
+m4mag7s__ax //
+m4mag7s__b //
+m4mag7s__c //
+m4mag7s__d //
+m4mag7s__e //
+m4mag7s__f //
+m4mag7s__g //
+m4mag7s__h //
+m4mag7s__i //
+m4mag7s__j //
+m4mag7s__k //
+m4mag7s__l //
+m4mag7s__m //
+m4mag7s__n //
+m4mag7s__o //
+m4mag7s__p //
+m4mag7s__q //
+m4mag7s__r //
+m4mag7s__s //
+m4mag7s__t //
+m4mag7s__u //
+m4mag7s__v //
+m4mag7s__w //
+m4mag7s__x //
+m4mag7s__y //
+m4mag7s__z //
+m4makmnt // Make A Mint (Barcrest)
+m4makmnt__0 //
+m4makmnt__1 //
+m4makmnt__2 //
+m4makmnt__3 //
+m4makmnt__4 //
+m4makmnt__5 //
+m4makmnt__6 //
+m4makmnt__7 //
+m4makmnt__8 //
+m4makmnt__9 //
+m4makmnt__a //
+m4makmnt__aa //
+m4makmnt__ab //
+m4makmnt__ac //
+m4makmnt__ad //
+m4makmnt__ae //
+m4makmnt__af //
+m4makmnt__ag //
+m4makmnt__ah //
+m4makmnt__ai //
+m4makmnt__aj //
+m4makmnt__ak //
+m4makmnt__al //
+m4makmnt__am //
+m4makmnt__an //
+m4makmnt__ao //
+m4makmnt__ap //
+m4makmnt__aq //
+m4makmnt__ar //
+m4makmnt__as //
+m4makmnt__b //
+m4makmnt__c //
+m4makmnt__d //
+m4makmnt__e //
+m4makmnt__f //
+m4makmnt__g //
+m4makmnt__h //
+m4makmnt__i //
+m4makmnt__j //
+m4makmnt__k //
+m4makmnt__l //
+m4makmnt__m //
+m4makmnt__n //
+m4makmnt__o //
+m4makmnt__p //
+m4makmnt__q //
+m4makmnt__r //
+m4makmnt__s //
+m4makmnt__t //
+m4makmnt__u //
+m4makmnt__v //
+m4makmnt__w //
+m4makmnt__x //
+m4makmnt__y //
+m4makmnt__z //
+m4nhtt // New Hit the Top (Barcrest)
+m4nhtt__a //
+m4nhtt__b //
+m4nhtt__c //
+m4nhtt__d //
+m4nhtt__e //
+m4nhtt__f //
+m4nhtt__g //
+m4nhtt__h //
+m4nhtt__i //
+m4nhtt__j //
+m4nnww // Nudge Nudge Wink Wink (Barcrest)
+m4nnww__0 //
+m4nnww__1 //
+m4nnww__2 //
+m4nnww__3 //
+m4nnww__4 //
+m4nnww__5 //
+m4nnww__6 //
+m4nnww__7 //
+m4nnww__8 //
+m4nnww__9 //
+m4nnww__a //
+m4nnww__aa //
+m4nnww__ab //
+m4nnww__ac //
+m4nnww__ad //
+m4nnww__ae //
+m4nnww__af //
+m4nnww__ag //
+m4nnww__ah //
+m4nnww__ai //
+m4nnww__aj //
+m4nnww__ak //
+m4nnww__al //
+m4nnww__am //
+m4nnww__an //
+m4nnww__ao //
+m4nnww__ap //
+m4nnww__aq //
+m4nnww__ar //
+m4nnww__as //
+m4nnww__at //
+m4nnww__au //
+m4nnww__av //
+m4nnww__aw //
+m4nnww__ax //
+m4nnww__ay //
+m4nnww__az //
+m4nnww__b //
+m4nnww__c //
+m4nnww__d //
+m4nnww__e //
+m4nnww__f //
+m4nnww__g //
+m4nnww__h //
+m4nnww__i //
+m4nnww__j //
+m4nnww__k //
+m4nnww__l //
+m4nnww__m //
+m4nnww__n //
+m4nnww__o //
+m4nnww__p //
+m4nnww__q //
+m4nnww__r //
+m4nnww__s //
+m4nnww__t //
+m4nnww__u //
+m4nnww__v //
+m4nnww__w //
+m4nnww__x //
+m4nnww__y //
+m4nnww__z //
+m4nnwwc // Nudge Nudge Wink Wink Classic (Barcrest)
+m4nnwwc__0 //
+m4nnwwc__1 //
+m4nnwwc__2 //
+m4nnwwc__3 //
+m4nnwwc__4 //
+m4nnwwc__5 //
+m4nnwwc__6 //
+m4nnwwc__7 //
+m4nnwwc__8 //
+m4nnwwc__9 //
+m4nnwwc__a //
+m4nnwwc__aa //
+m4nnwwc__ab //
+m4nnwwc__ac //
+m4nnwwc__ad //
+m4nnwwc__b //
+m4nnwwc__c //
+m4nnwwc__d //
+m4nnwwc__e //
+m4nnwwc__f //
+m4nnwwc__g //
+m4nnwwc__h //
+m4nnwwc__i //
+m4nnwwc__j //
+m4nnwwc__k //
+m4nnwwc__l //
+m4nnwwc__m //
+m4nnwwc__n //
+m4nnwwc__o //
+m4nnwwc__p //
+m4nnwwc__q //
+m4nnwwc__r //
+m4nnwwc__s //
+m4nnwwc__t //
+m4nnwwc__u //
+m4nnwwc__v //
+m4nnwwc__w //
+m4nnwwc__x //
+m4nnwwc__y //
+m4nnwwc__z //
+m4oadrac // Ooh Aah Dracula (Bwb)
+m4oadrac__a //
+m4oadrac__b //
+m4oadrac__c //
+m4oadrac__d //
+m4oadrac__e //
+m4oadrac__f //
+m4oadrac__g //
+m4oadrac__h //
+m4overmn // Over The Moon (Barcrest)
+m4overmn__0 //
+m4overmn__1 //
+m4overmn__2 //
+m4overmn__3 //
+m4overmn__4 //
+m4overmn__5 //
+m4overmn__6 //
+m4overmn__7 //
+m4overmn__8 //
+m4overmn__a //
+m4overmn__b //
+m4overmn__c //
+m4overmn__d //
+m4overmn__e //
+m4overmn__f //
+m4overmn__g //
+m4overmn__h //
+m4overmn__i //
+m4overmn__j //
+m4overmn__k //
+m4overmn__l //
+m4overmn__m //
+m4overmn__n //
+m4overmn__o //
+m4overmn__p //
+m4overmn__q //
+m4overmn__r //
+m4overmn__s //
+m4overmn__t //
+m4overmn__u //
+m4overmn__v //
+m4overmn__w //
+m4overmn__x //
+m4overmn__y //
+m4overmn__z //
+m4placbt // Place Your Bets (Barcrest)
+m4placbt__0 //
+m4placbt__1 //
+m4placbt__2 //
+m4placbt__3 //
+m4placbt__4 //
+m4placbt__5 //
+m4placbt__6 //
+m4placbt__7 //
+m4placbt__8 //
+m4placbt__9 //
+m4placbt__a //
+m4placbt__aa //
+m4placbt__ab //
+m4placbt__ac //
+m4placbt__ad //
+m4placbt__ae //
+m4placbt__af //
+m4placbt__ag //
+m4placbt__ah //
+m4placbt__ai //
+m4placbt__aj //
+m4placbt__ak //
+m4placbt__al //
+m4placbt__am //
+m4placbt__an //
+m4placbt__ao //
+m4placbt__b //
+m4placbt__c //
+m4placbt__d //
+m4placbt__e //
+m4placbt__f //
+m4placbt__g //
+m4placbt__h //
+m4placbt__i //
+m4placbt__j //
+m4placbt__k //
+m4placbt__l //
+m4placbt__m //
+m4placbt__n //
+m4placbt__o //
+m4placbt__p //
+m4placbt__q //
+m4placbt__r //
+m4placbt__s //
+m4placbt__t //
+m4placbt__u //
+m4placbt__v //
+m4placbt__w //
+m4placbt__x //
+m4placbt__y //
+m4placbt__z //
+m4potblk // Pot Black (Barcrest)
+m4potblk__0 //
+m4potblk__1 //
+m4potblk__2 //
+m4potblk__3 //
+m4potblk__4 //
+m4potblk__5 //
+m4potblk__6 //
+m4potblk__7 //
+m4potblk__8 //
+m4potblk__9 //
+m4potblk__a //
+m4potblk__aa //
+m4potblk__ab //
+m4potblk__ac //
+m4potblk__ad //
+m4potblk__ae //
+m4potblk__af //
+m4potblk__ag //
+m4potblk__ah //
+m4potblk__ai //
+m4potblk__aj //
+m4potblk__ak //
+m4potblk__al //
+m4potblk__am //
+m4potblk__an //
+m4potblk__ao //
+m4potblk__ap //
+m4potblk__aq //
+m4potblk__ar //
+m4potblk__as //
+m4potblk__at //
+m4potblk__au //
+m4potblk__av //
+m4potblk__aw //
+m4potblk__ax //
+m4potblk__b //
+m4potblk__c //
+m4potblk__d //
+m4potblk__e //
+m4potblk__f //
+m4potblk__g //
+m4potblk__h //
+m4potblk__i //
+m4potblk__j //
+m4potblk__k //
+m4potblk__l //
+m4potblk__m //
+m4potblk__n //
+m4potblk__o //
+m4potblk__p //
+m4potblk__q //
+m4potblk__r //
+m4potblk__s //
+m4potblk__t //
+m4potblk__u //
+m4potblk__v //
+m4potblk__w //
+m4potblk__x //
+m4potblk__y //
+m4potblk__z //
+m4przdty // Prize Duty Free (Barcrest)
+m4przdty__a //
+m4przdty__b //
+m4przdty__c //
+m4przdty__d //
+m4przdty__e //
+m4przdty__f //
+m4przdty__g //
+m4przdty__h //
+m4przdty__i //
+m4przdty__j //
+m4przdty__k //
+m4przdty__l //
+m4przdty__m //
+m4przdty__n //
+m4przdty__o //
+m4przdty__p //
+m4przfrt // Prize Fruit & Loot (Barcrest)
+m4przfrt__a //
+m4przfrt__b //
+m4przfrt__c //
+m4przfrt__d //
+m4przfrt__e //
+m4przfrt__f //
+m4przfrt__g //
+m4przfrt__h //
+m4przfrt__i //
+m4przfrt__j //
+m4przfrt__k //
+m4przfrt__l //
+m4przhr // Prize High Roller (Barcrest)
+m4przhr__a //
+m4przhr__b //
+m4przhr__c //
+m4przhr__d //
+m4przhr__e //
+m4przhr__f //
+m4przhr__g //
+m4przhr__h //
+m4przhr__i //
+m4przhr__j //
+m4przhr__k //
+m4przhr__l //
+m4przhr__m //
+m4przhr__n //
+m4przhr__o //
+m4przhr__p //
+m4przlux // Prize Luxor (Barcrest)
+m4przlux__a //
+m4przlux__b //
+m4przlux__c //
+m4przlux__d //
+m4przlux__e //
+m4przlux__f //
+m4przmns // Prize Money ShowCase (Barcrest)
+m4przmns__a //
+m4przmns__b //
+m4przmns__c //
+m4przmns__d //
+m4przmns__e //
+m4przmns__f //
+m4przmns__g //
+m4przmns__h //
+m4przmns__i //
+m4przmns__j //
+m4przmns__k //
+m4przmns__l //
+m4przmns__m //
+m4przmns__n //
+m4przmon // Prize Money (Barcrest)
+m4przmon__0 //
+m4przmon__1 //
+m4przmon__a //
+m4przmon__b //
+m4przmon__c //
+m4przmon__d //
+m4przmon__e //
+m4przmon__f //
+m4przmon__g //
+m4przmon__h //
+m4przmon__i //
+m4przmon__j //
+m4przmon__k //
+m4przmon__l //
+m4przmon__m //
+m4przmon__n //
+m4przmon__o //
+m4przmon__p //
+m4przmon__q //
+m4przmon__r //
+m4przmon__s //
+m4przmon__t //
+m4przmon__u //
+m4przmon__v //
+m4przmon__w //
+m4przmon__x //
+m4przmon__y //
+m4przmon__z //
+m4przrf // Prize Rich And Famous (Barcrest)
+m4przrf__a //
+m4przrf__b //
+m4przrf__c //
+m4przrf__d //
+m4przrf__e //
+m4przrf__f //
+m4przrf__g //
+m4przrf__h //
+m4przrf__i //
+m4przrf__j //
+m4przrfm // Prize Run For Your Money (Barcrest)
+m4przrfm__a //
+m4przrfm__b //
+m4przrfm__c //
+m4przrfm__d //
+m4przrfm__e //
+m4przrfm__f //
+m4przrfm__g //
+m4przrfm__h //
+m4przrfm__i //
+m4przrfm__j //
+m4przrfm__k //
+m4przrfm__l //
+m4przrfm__m //
+m4przrfm__n //
+m4przrfm__o //
+m4przve // Prize Viva Esapana (Barcrest)
+m4przve__a //
+m4przve__b //
+m4przve__c //
+m4przve__d //
+m4przve__e //
+m4przve__f //
+m4przve__g //
+m4przve__h //
+m4przve__i //
+m4przve__j //
+m4przve__k //
+m4przve__l //
+m4przve__m //
+m4przve__n //
+m4przve__o //
+m4przve__p //
+m4przwo // Prize What's On (Barcrest)
+m4przwo__a //
+m4przwo__b //
+m4przwo__c //
+m4przwo__d //
+m4przwo__e //
+m4przwo__f //
+m4przwta // Prize Winner Takes All (Barcrest)
+m4przwta__a //
+m4przwta__b //
+m4przwta__c //
+m4przwta__d //
+m4przwta__e //
+m4przwta__f //
+m4przwta__g //
+m4przwta__h //
+m4przwta__i //
+m4przwta__j //
+m4przwta__k //
+m4przwta__l //
+m4przwta__m //
+m4przwta__n //
+m4przwta__o //
+m4przwta__p //
+m4ready // Ready Steady Go (Barcrest) (type 2)
+m4ready__0 //
+m4ready__1 //
+m4ready__2 //
+m4ready__3 //
+m4ready__4 //
+m4ready__5 //
+m4ready__6 //
+m4ready__7 //
+m4ready__8 //
+m4ready__9 //
+m4ready__a //
+m4ready__a0 //
+m4ready__a1 //
+m4ready__a2 //
+m4ready__a3 //
+m4ready__a4 //
+m4ready__a5 //
+m4ready__aa //
+m4ready__ab //
+m4ready__ac //
+m4ready__ad //
+m4ready__ae //
+m4ready__af //
+m4ready__ag //
+m4ready__ah //
+m4ready__ai //
+m4ready__aj //
+m4ready__ak //
+m4ready__al //
+m4ready__am //
+m4ready__an //
+m4ready__ao //
+m4ready__ap //
+m4ready__aq //
+m4ready__ar //
+m4ready__as //
+m4ready__at //
+m4ready__au //
+m4ready__av //
+m4ready__aw //
+m4ready__ax //
+m4ready__ay //
+m4ready__az //
+m4ready__b //
+m4ready__c //
+m4ready__d //
+m4ready__e //
+m4ready__f //
+m4ready__g //
+m4ready__h //
+m4ready__i //
+m4ready__j //
+m4ready__k //
+m4ready__l //
+m4ready__m //
+m4ready__n //
+m4ready__o //
+m4ready__p //
+m4ready__q //
+m4ready__r //
+m4ready__s //
+m4ready__t //
+m4ready__u //
+m4ready__v //
+m4ready__w //
+m4ready__x //
+m4ready__y //
+m4ready__z //
+m4rfym // Run For Your Money (Barcrest)
+m4rfym__0 //
+m4rfym__1 //
+m4rfym__2 //
+m4rfym__3 //
+m4rfym__4 //
+m4rfym__5 //
+m4rfym__6 //
+m4rfym__7 //
+m4rfym__8 //
+m4rfym__9 //
+m4rfym__a //
+m4rfym__a0 //
+m4rfym__a1 //
+m4rfym__a2 //
+m4rfym__a3 //
+m4rfym__a4 //
+m4rfym__a5 //
+m4rfym__aa //
+m4rfym__ab //
+m4rfym__ac //
+m4rfym__ad //
+m4rfym__ae //
+m4rfym__af //
+m4rfym__ag //
+m4rfym__ah //
+m4rfym__ai //
+m4rfym__aj //
+m4rfym__ak //
+m4rfym__al //
+m4rfym__am //
+m4rfym__an //
+m4rfym__ao //
+m4rfym__ap //
+m4rfym__aq //
+m4rfym__ar //
+m4rfym__as //
+m4rfym__at //
+m4rfym__au //
+m4rfym__av //
+m4rfym__aw //
+m4rfym__ax //
+m4rfym__ay //
+m4rfym__az //
+m4rfym__b //
+m4rfym__c //
+m4rfym__d //
+m4rfym__e //
+m4rfym__f //
+m4rfym__g //
+m4rfym__h //
+m4rfym__i //
+m4rfym__j //
+m4rfym__k //
+m4rfym__l //
+m4rfym__m //
+m4rfym__n //
+m4rfym__o //
+m4rfym__p //
+m4rfym__q //
+m4rfym__r //
+m4rfym__s //
+m4rfym__t //
+m4rfym__u //
+m4rfym__v //
+m4rfym__w //
+m4rfym__x //
+m4rfym__y //
+m4rfym__z //
+m4rhog // Road Hog (Barcrest)
+m4rhog_h1 //
+m4rhog_h10 //
+m4rhog_h11 //
+m4rhog_h12 //
+m4rhog_h13 //
+m4rhog_h14 //
+m4rhog_h15 //
+m4rhog_h2 //
+m4rhog_h3 //
+m4rhog_h4 //
+m4rhog_h5 //
+m4rhog_h6 //
+m4rhog_h7 //
+m4rhog_h8 //
+m4rhog_h9 //
+m4rhog_roc //
+m4rhog2 // Road Hog 2 - I'm Back (Barcrest)
+m4rhog2__a //
+m4rhog2__b //
+m4rhog2__c //
+m4rhog2__d //
+m4rhog2__e //
+m4rhog2__f //
+m4rhog2__g //
+m4rhog2__h //
+m4rhog2__i //
+m4rhog2__j //
+m4rhog2__k //
+m4rhog2__l //
+m4rhog2__m //
+m4rhogc // Road Hog Club (Barcrest)
+m4rhogc__a //
+m4rhogc__b //
+m4rhogr1 //
+m4rhogr1c //
+m4rhogr1d //
+m4rhogr1k //
+m4rhogr1k_a //
+m4rhogr1y //
+m4rhogr1yd //
+m4rhogr2 //
+m4rhogr2c //
+m4rhogr2d //
+m4rhogr2k //
+m4rhogr2y //
+m4rhogr2yd //
+m4rhogr3 //
+m4rhogr6ad //
+m4rhogr6b //
+m4rhogr6c //
+m4rhogr6d //
+m4rhogr6k //
+m4rhogr6y //
+m4rhogr6y_a //
+m4rhogr6yd //
+m4rhr // Red Hot Roll (Barcrest)
+m4rhr__0 //
+m4rhr__1 //
+m4rhr__2 //
+m4rhr__3 //
+m4rhr__4 //
+m4rhr__5 //
+m4rhr__6 //
+m4rhr__7 //
+m4rhr__8 //
+m4rhr__9 //
+m4rhr__a //
+m4rhr__a0 //
+m4rhr__a1 //
+m4rhr__a2 //
+m4rhr__a3 //
+m4rhr__a4 //
+m4rhr__aa //
+m4rhr__ab //
+m4rhr__ac //
+m4rhr__ad //
+m4rhr__ae //
+m4rhr__af //
+m4rhr__ag //
+m4rhr__ah //
+m4rhr__ai //
+m4rhr__aj //
+m4rhr__ak //
+m4rhr__al //
+m4rhr__am //
+m4rhr__an //
+m4rhr__ao //
+m4rhr__ap //
+m4rhr__aq //
+m4rhr__ar //
+m4rhr__as //
+m4rhr__at //
+m4rhr__au //
+m4rhr__av //
+m4rhr__aw //
+m4rhr__ax //
+m4rhr__ay //
+m4rhr__az //
+m4rhr__b //
+m4rhr__c //
+m4rhr__d //
+m4rhr__e //
+m4rhr__f //
+m4rhr__g //
+m4rhr__h //
+m4rhr__i //
+m4rhr__j //
+m4rhr__k //
+m4rhr__l //
+m4rhr__m //
+m4rhr__n //
+m4rhr__o //
+m4rhr__p //
+m4rhr__q //
+m4rhr__r //
+m4rhr__s //
+m4rhr__t //
+m4rhr__u //
+m4rhr__v //
+m4rhr__w //
+m4rhr__x //
+m4rhr__y //
+m4rhr__z //
+m4rhrc // Red Hot Roll Classic (Barcrest)
+m4rhrc__0 //
+m4rhrc__1 //
+m4rhrc__2 //
+m4rhrc__3 //
+m4rhrc__4 //
+m4rhrc__5 //
+m4rhrc__6 //
+m4rhrc__7 //
+m4rhrc__8 //
+m4rhrc__a //
+m4rhrc__aa //
+m4rhrc__b //
+m4rhrc__c //
+m4rhrc__d //
+m4rhrc__e //
+m4rhrc__f //
+m4rhrc__g //
+m4rhrc__h //
+m4rhrc__i //
+m4rhrc__j //
+m4rhrc__k //
+m4rhrc__l //
+m4rhrc__m //
+m4rhrc__n //
+m4rhrc__o //
+m4rhrc__p //
+m4rhrc__q //
+m4rhrc__r //
+m4rhrc__s //
+m4rhrc__t //
+m4rhrc__u //
+m4rhrc__v //
+m4rhrc__w //
+m4rhrc__x //
+m4rhrc__y //
+m4rhrc__z //
+m4rhrcl // Red Hot Roll Club (Barcrest)
+m4rhrcl__a //
+m4rhrcl__b //
+m4rhrcl__c //
+m4rhs // Rocky Horror Show (Bwb)
+m4rhs__a //
+m4rhs__b //
+m4rhs__c //
+m4rhs__d //
+m4rhs__e //
+m4rhs__f //
+m4rhs__g //
+m4rhs__h //
+m4rhs__i //
+m4rhs__j //
+m4rhs__k //
+m4rhs__l //
+m4richfm // Rich & Famous (Barcrest)
+m4richfm__0 //
+m4richfm__1 //
+m4richfm__2 //
+m4richfm__3 //
+m4richfm__a //
+m4richfm__b //
+m4richfm__c //
+m4richfm__d //
+m4richfm__e //
+m4richfm__f //
+m4richfm__g //
+m4richfm__h //
+m4richfm__i //
+m4richfm__j //
+m4richfm__k //
+m4richfm__l //
+m4richfm__m //
+m4richfm__n //
+m4richfm__o //
+m4richfm__p //
+m4richfm__q //
+m4richfm__r //
+m4richfm__s //
+m4richfm__t //
+m4richfm__u //
+m4richfm__v //
+m4richfm__w //
+m4richfm__x //
+m4richfm__y //
+m4richfm__z //
+m4rockmn // Rocket Money (Barcrest)
+m4rockmn__a //
+m4rockmn__b //
+m4rockmn__c //
+m4rockmn__d //
+m4rockmn__e //
+m4rockmn__f //
+m4rockmn__g //
+m4rockmn__h //
+m4rockmn__i //
+m4rockmn__j //
+m4rockmn__k //
+m4shocm // Showcase Crystal Maze (Barcrest)
+m4shocm__a //
+m4shocm__b //
+m4shocm__c //
+m4shocm__d //
+m4shocm__e //
+m4shocm__f //
+m4shocm__g //
+m4shocm__h //
+m4shocm__i //
+m4shocm__j //
+m4shodf // Showcase Duty Free (Barcrest)
+m4shodf__a //
+m4shodf__b //
+m4shodf__c //
+m4shodf__d //
+m4shodf__e //
+m4shodf__f //
+m4shodf__g //
+m4shodf__h //
+m4shodf__i //
+m4shodf__j //
+m4shodf__k //
+m4shodf__l //
+m4squid // Squids In (Barcrest)
+m4squid__a //
+m4squid__b //
+m4squid__c //
+m4ssclas // Super Streak Classic (Bwb)
+m4ssclas__a //
+m4ssclas__b //
+m4ssclas__c //
+m4ssclas__d //
+m4ssclas__e //
+m4ssclas__f //
+m4suphv // Super Hyper Viper (Barcrest)
+m4suphv__a //
+m4suphv__b //
+m4suphv__c //
+m4suphv__d //
+m4suphv__e //
+m4suphv__f //
+m4suphv__g //
+m4suphv__h //
+m4suphv__i //
+m4suphv__j //
+m4suphv__k //
+m4suphv__l //
+m4suphv__m //
+m4suphv__n //
+m4suphv__o //
+m4suphv__p //
+m4takepk // Take Your Pick (Barcrest)
+m4takepk__0 //
+m4takepk__1 //
+m4takepk__a //
+m4takepk__b //
+m4takepk__c //
+m4takepk__d //
+m4takepk__e //
+m4takepk__f //
+m4takepk__g //
+m4takepk__h //
+m4takepk__i //
+m4takepk__j //
+m4takepk__k //
+m4takepk__l //
+m4takepk__m //
+m4takepk__n //
+m4takepk__o //
+m4takepk__p //
+m4takepk__q //
+m4takepk__r //
+m4takepk__s //
+m4takepk__t //
+m4takepk__u //
+m4takepk__v //
+m4takepk__w //
+m4takepk__x //
+m4takepk__y //
+m4takepk__z //
+m4tenten // 10 X 10 (Barcrest)
+m4tenten__0 //
+m4tenten__1 //
+m4tenten__2 //
+m4tenten__3 //
+m4tenten__4 //
+m4tenten__5 //
+m4tenten__6 //
+m4tenten__7 //
+m4tenten__8 //
+m4tenten__9 //
+m4tenten__a //
+m4tenten__a0 //
+m4tenten__a1 //
+m4tenten__a2 //
+m4tenten__aa //
+m4tenten__ab //
+m4tenten__ac //
+m4tenten__ad //
+m4tenten__ae //
+m4tenten__af //
+m4tenten__ag //
+m4tenten__ah //
+m4tenten__ai //
+m4tenten__aj //
+m4tenten__ak //
+m4tenten__al //
+m4tenten__am //
+m4tenten__an //
+m4tenten__ao //
+m4tenten__ap //
+m4tenten__aq //
+m4tenten__ar //
+m4tenten__as //
+m4tenten__at //
+m4tenten__au //
+m4tenten__av //
+m4tenten__aw //
+m4tenten__ax //
+m4tenten__ay //
+m4tenten__az //
+m4tenten__b //
+m4tenten__c //
+m4tenten__d //
+m4tenten__e //
+m4tenten__f //
+m4tenten__g //
+m4tenten__h //
+m4tenten__i //
+m4tenten__j //
+m4tenten__k //
+m4tenten__l //
+m4tenten__m //
+m4tenten__n //
+m4tenten__o //
+m4tenten__p //
+m4tenten__q //
+m4tenten__r //
+m4tenten__s //
+m4tenten__t //
+m4tenten__u //
+m4tenten__v //
+m4tenten__w //
+m4tenten__x //
+m4tenten__y //
+m4tenten__z //
+m4thestr // The Streak (Bwb)
+m4thestr__a //
+m4thestr__b //
+m4thestr__c //
+m4thestr__d //
+m4thestr__e //
+m4thestr__f //
+m4thestr__g //
+m4thestr__h //
+m4thestr__i //
+m4thestr__j //
+m4thestr__k //
+m4thestr__l //
+m4thestr__m //
+m4thestr__n //
+m4thestr__o //
+m4thestr__p //
+m4thestr__q //
+m4thestr__r //
+m4thestr__s //
+m4thestr__t //
+m4thestr__u //
+m4thestr__v //
+m4thestr__w //
+m4thestr__x //
+m4thestr__y //
+m4tic // Tic Tac Toe (Bwb)
+m4tic__a //
+m4tic__b //
+m4tic__c //
+m4tic__d //
+m4tic__e //
+m4tic__f //
+m4tic__g //
+m4tic__h //
+m4tic__i //
+m4tic__j //
+m4tic__k //
+m4tic__l //
+m4tic__m //
+m4tic__n //
+m4tic__o //
+m4tic__p //
+m4tic__r //
+m4tic__s //
+m4ticcla // Tic Tac Toe Classic (Bwb)
+m4ticcla__0 //
+m4ticcla__a //
+m4ticcla__b //
+m4ticcla__c //
+m4ticcla__d //
+m4ticcla__e //
+m4ticcla__f //
+m4ticcla__g //
+m4ticcla__h //
+m4ticcla__i //
+m4ticcla__j //
+m4ticcla__k //
+m4ticcla__l //
+m4ticcla__m //
+m4ticcla__n //
+m4ticcla__o //
+m4ticcla__p //
+m4ticcla__q //
+m4ticcla__r //
+m4ticcla__s //
+m4ticcla__t //
+m4ticcla__u //
+m4ticcla__v //
+m4ticcla__w //
+m4ticcla__x //
+m4ticcla__y //
+m4ticcla__z //
+m4ticglc // Tic Tac Toe Gold (Bwb)
+m4ticglc__a //
+m4ticglc__b //
+m4ticglc__c //
+m4ticglc__d //
+m4toot // Ten Out Of Ten (Barcrest)
+m4toot__0 //
+m4toot__1 //
+m4toot__2 //
+m4toot__3 //
+m4toot__4 //
+m4toot__5 //
+m4toot__6 //
+m4toot__7 //
+m4toot__8 //
+m4toot__9 //
+m4toot__a //
+m4toot__aa //
+m4toot__ab //
+m4toot__ac //
+m4toot__ad //
+m4toot__ae //
+m4toot__af //
+m4toot__ag //
+m4toot__ah //
+m4toot__ai //
+m4toot__aj //
+m4toot__ak //
+m4toot__al //
+m4toot__b //
+m4toot__c //
+m4toot__d //
+m4toot__e //
+m4toot__f //
+m4toot__g //
+m4toot__h //
+m4toot__i //
+m4toot__j //
+m4toot__k //
+m4toot__l //
+m4toot__m //
+m4toot__n //
+m4toot__o //
+m4toot__p //
+m4toot__q //
+m4toot__r //
+m4toot__s //
+m4toot__t //
+m4toot__u //
+m4toot__v //
+m4toot__w //
+m4toot__x //
+m4toot__y //
+m4toot__z //
+m4toot__za //
+m4toot__zb //
+m4topdog // Top Dog (Bwb)
+m4topdog__a //
+m4topdog__b //
+m4topdog__c //
+m4topdog__d //
+m4topdog__e //
+m4topdog__f //
+m4topdog__g //
+m4topdog__h //
+m4topdog__i //
+m4topdog__j //
+m4topdog__k //
+m4topdog__l //
+m4topdog__m //
+m4topdog__n //
+m4topdog__o //
+m4topdog__p //
+m4topdog__q //
+m4topdog__r //
+m4topdog__s //
+m4topdog__t //
+m4topdog__u //
+m4topdog__v //
+m4topdog__w //
+m4topdog__x //
+m4topdog__y //
+m4topdog__z //
+m4topten // Top Tenner (Barcrest)
+m4topten__0 //
+m4topten__1 //
+m4topten__2 //
+m4topten__3 //
+m4topten__4 //
+m4topten__5 //
+m4topten__6 //
+m4topten__7 //
+m4topten__8 //
+m4topten__9 //
+m4topten__a //
+m4topten__aa //
+m4topten__ab //
+m4topten__ac //
+m4topten__ad //
+m4topten__ae //
+m4topten__af //
+m4topten__ag //
+m4topten__ah //
+m4topten__ai //
+m4topten__aj //
+m4topten__ak //
+m4topten__al //
+m4topten__am //
+m4topten__an //
+m4topten__ao //
+m4topten__ap //
+m4topten__aq //
+m4topten__ar //
+m4topten__as //
+m4topten__at //
+m4topten__au //
+m4topten__av //
+m4topten__aw //
+m4topten__ax //
+m4topten__b //
+m4topten__e //
+m4topten__f //
+m4topten__g //
+m4topten__h //
+m4topten__i //
+m4topten__j //
+m4topten__k //
+m4topten__l //
+m4topten__m //
+m4topten__n //
+m4topten__o //
+m4topten__p //
+m4topten__q //
+m4topten__r //
+m4topten__s //
+m4topten__t //
+m4topten__u //
+m4topten__v //
+m4topten__w //
+m4topten__x //
+m4topten__y //
+m4topten__z //
+m4ttdia // Ten Ten Do It Again (Barcrest)
+m4ttdia__a //
+m4ttdia__b //
+m4ttdia__c //
+m4ttdia__d //
+m4ttdia__e //
+m4ttdia__f //
+m4ttdia__g //
+m4ttdia__h //
+m4ttdia__i //
+m4ttdia__j //
+m4ttdia__k //
+m4ttdia__l //
+m4ttdia__m //
+m4tutcl // Tutti Fruity Classic (Barcrest)
+m4tutcl__a //
+m4tutcl__b //
+m4tutcl__c //
+m4tutcl__d //
+m4tutcl__e //
+m4tutcl__f //
+m4tutcl__g //
+m4tutcl__h //
+m4tutcl__i //
+m4tutcl__j //
+m4tutcl__k //
+m4tutfrt // Tutti Fruity (Barcrest)
+m4tutfrt__0 //
+m4tutfrt__1 //
+m4tutfrt__2 //
+m4tutfrt__3 //
+m4tutfrt__4 //
+m4tutfrt__5 //
+m4tutfrt__6 //
+m4tutfrt__7 //
+m4tutfrt__8 //
+m4tutfrt__9 //
+m4tutfrt__a //
+m4tutfrt__a0 //
+m4tutfrt__a1 //
+m4tutfrt__a2 //
+m4tutfrt__a3 //
+m4tutfrt__a4 //
+m4tutfrt__a5 //
+m4tutfrt__aa //
+m4tutfrt__ab //
+m4tutfrt__ac //
+m4tutfrt__ad //
+m4tutfrt__ae //
+m4tutfrt__af //
+m4tutfrt__ag //
+m4tutfrt__ai //
+m4tutfrt__aj //
+m4tutfrt__ak //
+m4tutfrt__al //
+m4tutfrt__am //
+m4tutfrt__an //
+m4tutfrt__ao //
+m4tutfrt__ap //
+m4tutfrt__aq //
+m4tutfrt__ar //
+m4tutfrt__as //
+m4tutfrt__at //
+m4tutfrt__au //
+m4tutfrt__av //
+m4tutfrt__aw //
+m4tutfrt__ax //
+m4tutfrt__ay //
+m4tutfrt__az //
+m4tutfrt__b //
+m4tutfrt__c //
+m4tutfrt__d //
+m4tutfrt__e //
+m4tutfrt__f //
+m4tutfrt__g //
+m4tutfrt__h //
+m4tutfrt__i //
+m4tutfrt__j //
+m4tutfrt__k //
+m4tutfrt__l //
+m4tutfrt__m //
+m4tutfrt__n //
+m4tutfrt__o //
+m4tutfrt__p //
+m4tutfrt__q //
+m4tutfrt__r //
+m4tutfrt__s //
+m4tutfrt__t //
+m4tutfrt__u //
+m4tutfrt__v //
+m4tutfrt__w //
+m4tutfrt__x //
+m4tutfrt__y //
+m4tutfrt__z //
+m4typcl // Take Your Pick Club (Barcrest)
+m4typcl__a //
+m4typcl__b //
+m4typcl__c //
+m4typcl__d //
+m4uuaw // Up Up and Away (Barcrest)
+m4uuaw__0 //
+m4uuaw__1 //
+m4uuaw__2 //
+m4uuaw__3 //
+m4uuaw__4 //
+m4uuaw__5 //
+m4uuaw__6 //
+m4uuaw__7 //
+m4uuaw__8 //
+m4uuaw__9 //
+m4uuaw__a //
+m4uuaw__aa //
+m4uuaw__ab //
+m4uuaw__ac //
+m4uuaw__ad //
+m4uuaw__ae //
+m4uuaw__af //
+m4uuaw__ag //
+m4uuaw__ah //
+m4uuaw__ai //
+m4uuaw__aj //
+m4uuaw__ak //
+m4uuaw__al //
+m4uuaw__am //
+m4uuaw__an //
+m4uuaw__ao //
+m4uuaw__ap //
+m4uuaw__aq //
+m4uuaw__b //
+m4uuaw__c //
+m4uuaw__d //
+m4uuaw__e //
+m4uuaw__f //
+m4uuaw__g //
+m4uuaw__h //
+m4uuaw__i //
+m4uuaw__j //
+m4uuaw__k //
+m4uuaw__l //
+m4uuaw__m //
+m4uuaw__n //
+m4uuaw__o //
+m4uuaw__p //
+m4uuaw__q //
+m4uuaw__r //
+m4uuaw__s //
+m4uuaw__t //
+m4uuaw__u //
+m4uuaw__v //
+m4uuaw__w //
+m4uuaw__x //
+m4uuaw__y //
+m4uuaw__z //
+m4vegast // Vegas Strip (Barcrest)
+m4vegast__a //
+m4vegast__b //
+m4vegast__c //
+m4vegast__d //
+m4vegast__e //
+m4vegast__f //
+m4vegast__g //
+m4vegast__h //
+m4vegast__i //
+m4vegast__j //
+m4vegast__k //
+m4vegast__l //
+m4vegast__m //
+m4vegast__n //
+m4vegast__o //
+m4vegast__p //
+m4vegast__q //
+m4vegast__r //
+m4vegast__s //
+m4vegast__t //
+m4vegast__u //
+m4vegast__v //
+m4vegast__w //
+m4vegast__x //
+m4vivaes // Viva Espana (Barcrest)
+m4vivaes__0 //
+m4vivaes__1 //
+m4vivaes__2 //
+m4vivaes__3 //
+m4vivaes__4 //
+m4vivaes__5 //
+m4vivaes__6 //
+m4vivaes__7 //
+m4vivaes__8 //
+m4vivaes__9 //
+m4vivaes__a //
+m4vivaes__aa //
+m4vivaes__ab //
+m4vivaes__ac //
+m4vivaes__ad //
+m4vivaes__ae //
+m4vivaes__af //
+m4vivaes__ag //
+m4vivaes__ah //
+m4vivaes__ai //
+m4vivaes__aj //
+m4vivaes__ak //
+m4vivaes__al //
+m4vivaes__am //
+m4vivaes__an //
+m4vivaes__ao //
+m4vivaes__ap //
+m4vivaes__b //
+m4vivaes__c //
+m4vivaes__d //
+m4vivaes__e //
+m4vivaes__f //
+m4vivaes__g //
+m4vivaes__h //
+m4vivaes__i //
+m4vivaes__j //
+m4vivaes__k //
+m4vivaes__l //
+m4vivaes__m //
+m4vivaes__n //
+m4vivaes__o //
+m4vivaes__p //
+m4vivaes__q //
+m4vivaes__r //
+m4vivaes__s //
+m4vivaes__t //
+m4vivaes__u //
+m4vivaes__v //
+m4vivaes__w //
+m4vivaes__x //
+m4vivaes__y //
+m4vivaes__z //
+m4vivess // Viva Espana Showcase (Barcrest)
+m4vivess__a //
+m4vivess__b //
+m4vivess__c //
+m4vivess__d //
+m4vivess__f //
+m4vivess__g //
+m4vivess__i //
+m4vivess__j //
+m4vivess__k //
+m4vivess__l //
+m4vivess__m //
+m4vivess__n //
+m4vivess__o //
+m4vivess__p //
+m4viz // Viz (Barcrest)
+m4viz__a //
+m4viz__b //
+m4viz__c //
+m4viz__d //
+m4viz__e //
+m4viz__f //
+m4viz__g //
+m4viz__h //
+m4viz__i //
+m4viz__j //
+m4viz__k //
+m4viz__l //
+m4viz__m //
+m4viz__n //
+m4viz__o //
+m4viz__p //
+m4viz__q //
+m4viz__r //
+m4viz__s //
+m4viz__t //
+m4viz__u //
+m4viz__v //
+m4viz__w //
+m4wta // Winner Takes All (Barcrest)
+m4wta__0 //
+m4wta__1 //
+m4wta__2 //
+m4wta__3 //
+m4wta__4 //
+m4wta__5 //
+m4wta__6 //
+m4wta__7 //
+m4wta__8 //
+m4wta__9 //
+m4wta__aa //
+m4wta__ab //
+m4wta__ac //
+m4wta__ad //
+m4wta__ae //
+m4wta__af //
+m4wta__ag //
+m4wta__b //
+m4wta__d //
+m4wta__e //
+m4wta__f //
+m4wta__g //
+m4wta__h //
+m4wta__i //
+m4wta__j //
+m4wta__k //
+m4wta__l //
+m4wta__m //
+m4wta__n //
+m4wta__o //
+m4wta__p //
+m4wta__q //
+m4wta__r //
+m4wta__s //
+m4wta__t //
+m4wta__u //
+m4wta__v //
+m4wta__w //
+m4wta__x //
+m4wta__y //
+m4wta__z //
+
+//@source:mpu4union.cpp
+m4crzbn // Crazy Bingo
+m4cwalk // Cake Walk (Union)
+m4eezee // Eezee Fruits (Union)
+m4frdrop // Fruit Drop (Union)
+m4gobana // Go Bananas (Union)
+m4gobanaa //
+m4gobanab //
+m4gobanac //
+m4gobanad //
+m4gvibes // Good Vibrations (Union - Empire)
+m4gvibesa //
+m4lotty // Lotty Time (Union)
+m4maxmze // Maximize (Union)
+m4maxmzea //
+m4maxmzeb //
+m4maxmzec //
+m4maxmzed //
+m4mecca // Mecca Money (Union)
+m4purmad // Pure Madness (Union)
+m4rckrol // Rock 'n' Roll (Union - Empire)
+m4rckrola //
+m4rckrolb //
+m4revolv // Revolva (Union)
+m4rotex // Rotex (Union)
+m4select // Select (Union)
+m4supfru // Supafruits (Union)
+m4supfrua //
+m4trimad // Triple Madness (Union)
+m4unibox // Unibox (Union)
+m4uniboxa //
+m4unique // Unique (Union)
+m4uniquep //
+
+//@source:mpu4vid.cpp
+v4addlad // Adders and Ladders
+v4addlad20 //
+v4barqs2 // Barquest 2 (v0.3)
+v4barqst // Barquest (v2.6d)
+v4big40 // Big 40
+v4bigfrt // Big Fruits
+v4bios // MPU4 Video Firmware
+v4blox // Blox
+v4bloxd //
+v4bubbnk // Bubbly Bonk
+v4bulblx // Bullion Blox
+v4cmaze // The Crystal Maze (v1.3)
+v4cmaze2 // The New Crystal Maze Featuring Ocean Zone
+v4cmaze2a //
+v4cmaze2b //
+v4cmaze2c //
+v4cmaze2d //
+v4cmaze3 // The Crystal Maze Team Challenge
+v4cmaze3a //
+v4cmaze3b //
+v4cmaze3c //
+v4cmaze3d //
+v4cmazea //
+v4cmazeb //
+v4cmazec //
+v4cmazed //
+v4cmazedat //
+v4cshinf // Cash Inferno
+v4cybcas // Cyber Casino
+v4dbltak // Double Take
+v4eyedwn // Eyes Down
+v4eyedwnd //
+v4frfact // Fruit Factory
+v4gldrsh // Gold Rush
+v4mate // The Mating Game
+v4mated //
+v4mazbel // Mazooma Belle
+v4mazbla //
+v4mdice // Miami Dice
+v4megbuk // Megabucks Poker
+v4miami // Miami Dice
+v4missis // Mississippi Lady
+v4monte // Monte Carlo Or Bust
+v4opt3 // Option 3
+v4opt3d //
+v4ovrmn3 // Over Moon Pt3
+v4picdil // Piccadilly Nights
+v4psi // Prize Space Invaders
+v4psia //
+v4psib //
+v4pztet // Prize Tetris
+v4pzteta //
+v4quidgr // Ten Quid Grid
+v4quidgr2 //
+v4quidgr2d //
+v4quidgrd //
+v4redhtp // Red Hot Poker
+v4rencas // Reno Casino
+v4reno // Reno Reels
+v4rhmaz // Red Hot Mazooma Belle
+v4shpwnd // Shop Window
+v4sixx // 6-X
+v4sklcsh // Skill Cash
+v4skltrk // Skill Trek
+v4skltrka //
+v4strike // Strike it Lucky
+v4strike2 //
+v4strike2d //
+v4striked //
+v4sunbst // Sunburst
+v4tetrs // BwB Tetris v 2.2
+v4time // Time Machine
+v4timebn // Time Bandit
+v4turnov // Turnover
+v4vgpok // Vegas Poker (prototype release 2)
+v4wize // Wize Move (v1.3d)
+v4wizea // Wize Move
+
+//@source:mpu5.cpp
+m55050 // Fifty Fifty (Bwb)
+m5aceclb // Ace Of Clubs (Empire)
+m5aceclba //
+m5aceclbb //
+m5addams // Addams Family (Barcrest)
+m5addamsa //
+m5addamsb //
+m5addamsc //
+m5addamsd //
+m5addamse //
+m5addamsf //
+m5addamsg //
+m5addamsh //
+m5addamsi //
+m5addamsj //
+m5addamsk //
+m5addamsl //
+m5addamsm //
+m5addamsn //
+m5addamso //
+m5addamsp //
+m5addamsq //
+m5addamsr //
+m5addamss //
+m5addlad // Adders & Ladders (Barcrest)
+m5addlada //
+m5addladb //
+m5addladc //
+m5addladd //
+m5addlade //
+m5addladf //
+m5addladg //
+m5addladh //
+m5addladi //
+m5addladj //
+m5addladk //
+m5addladl //
+m5addladm //
+m5addladn //
+m5addlado //
+m5addladp //
+m5addladq //
+m5addladr //
+m5addlads //
+m5all41 // All 4 One (Vivid)
+m5all41a //
+m5all41b //
+m5all41c //
+m5all41d //
+m5all41e //
+m5all41f //
+m5all41g //
+m5all41h //
+m5all41i //
+m5all41j //
+m5all41k //
+m5all41l //
+m5all41low // All 4 One (Lowen)
+m5all41m //
+m5arab // Arabian Nights (Barcrest)
+m5arab03 //
+m5ashock // Aftershock (Barcrest - Red Gaming)
+m5ashocka //
+m5atlan // Atlantic (Vivid)
+m5atlana //
+m5austin // Austin Powers (Barcrest)
+m5austin10 //
+m5austin11 //
+m5bankrl // The Bank Roll (Barcrest)
+m5barkng // Barking Mad (Barcrest)
+m5barmy // Barmy Army (Barcrest)
+m5barxdx // Bar X Deluxe (Empire)
+m5baxe // Battle Axe (Barcrest)
+m5baxe04 //
+m5bbank // Break The Bank (Barcrest - Red Gaming)
+m5bbank13 //
+m5bbro // Big Brother (Barcrest)
+m5bbro02 //
+m5bbrocl // Big Brother Club (Barcrest)
+m5beans // Full Of Beans (Barcrest)
+m5beansa //
+m5bigchs // The Big Cheese (Barcrest)
+m5bigchs05 //
+m5biggam // The Big Game (Barcrest)
+m5biggam11 //
+m5bigsht // Big Shot (Barcrest - Red Gaming)
+m5bigsht04 //
+m5bigsht11 //
+m5bigsht13 //
+m5bigshta //
+m5bling // Bling King Crazy (Barcrest)
+m5blkwht // Black & White (Barcrest)
+m5blkwht01 //
+m5blkwht11 //
+m5bnkrs // Bonkers (Barcrest - Red Gaming)
+m5bnzclb // Bonanza Club (Empire)
+m5bnzclb11 //
+m5btlbnk // Bottle Bank (Vivid)
+m5bttf // Back To The Features (Vivid)
+m5bttfa //
+m5bukroo // Buckaroo (Empire)
+m5bwaves // Brain Waves (Barcrest)
+m5bwaves07 //
+m5caesc // Caesar's Cash (Vivid)
+m5carclb // Caribbean Club (Barcrest)
+m5card // Card Shark (Vivid)
+m5carou // Carousel (Empire)
+m5carpet // Magic Carpet (Bwb)
+m5carpet12 //
+m5carwsh // Car Wash (Bwb)
+m5carwsh10 //
+m5casfev // Casino Fever (Red Gaming)
+m5casfev12 //
+m5cashar // Cash Arena (Barcrest)
+m5cashar04 //
+m5cashat // Cash Attack (Barcrest)
+m5cashln // Cash Lines (Barcrest)
+m5cashrn // Cash Run (Barcrest)
+m5cashrn01 //
+m5cashrn02 //
+m5cashrn04 //
+m5casroc // Casino Royale Club (Empire)
+m5cbrun // Cannonball Run (Empire)
+m5cbw // Ca$h Bang Wallop (Barcrest)
+m5cbwa //
+m5centcl // Centurion Club (Empire)
+m5centcl20 //
+m5centcl21 //
+m5centcl21a //
+m5centcla //
+m5circlb // Circus Club (Bwb)
+m5circlb00 //
+m5circlb15 //
+m5circlb33 //
+m5circus // Circus (Bwb)
+m5circus0a //
+m5circus0b //
+m5circus11 //
+m5circus20 //
+m5circus21 //
+m5clbtro // Club Tropicana (Empire)
+m5clbtro24 //
+m5clbtro25 //
+m5clifhn // Cliffhanger (Vivid)
+m5clown // Clown In Around (Bwb)
+m5clown11 //
+m5clown13 //
+m5clr // MPU 5 Ram & Meter Clear (Barcrest)
+m5clubsn // Club Sandwich (Bwb)
+m5clubsn11 //
+m5clubsn14 //
+m5clubsn16 //
+m5cmass // Critical Mass (Barcrest - Red Gaming)
+m5cnct4 // Connect 4 (Vivid)
+m5cnct415 //
+m5cnct420 //
+m5cockdd // Cock A Doodle Dough! (Empire)
+m5cockdd05 //
+m5codft // The Codfather (Barcrest)
+m5codft02 //
+m5coloss // Colossus Club (Empire)
+m5cos // Costa Del Cash Casino (Barcrest)
+m5cosclb // Costa Del Cash Club (Barcrest)
+m5costa // Costa Del Cash (Barcrest)
+m5cpcash // Captain Cash (Barcrest)
+m5croclb // Crocodile Rock Club (Empire)
+m5crocrk // Crocodile Rock (Empire)
+m5crocrk10 //
+m5crsfir // Crossfire (Empire)
+m5crzkni // Crazy Crazy Knights (Barcrest)
+m5crzkni03 //
+m5cshkcb // Card Shark Club (Vivid)
+m5cshkcb12 //
+m5cshkcb13 //
+m5cshstx // Cash Stax (Bwb)
+m5cworan // Clockwork Oranges (Empire)
+m5cworan12 //
+m5dblfun // Double Fun (Lowen)
+m5dblqts // Double Or Quits (Bwb)
+m5dblqts1b //
+m5dblqtsa //
+m5dblqtsb //
+m5dbubl // Double Bubble (Barcrest - Red Gaming)
+m5devil // Devil Of A Deal (Vivid)
+m5dick // Dick Turnip (Bwb)
+m5dick10 //
+m5dmnf // Diamonds Are Forever (Empire)
+m5dmnf10 //
+m5dmnfcl // Diamonds Are Forever Club (Empire)
+m5dmnfcl04 //
+m5dmnstr // Demon Streak (Barcrest - Red Gaming)
+m5dmnstra //
+m5donna // Donna Kebab (Bwb)
+m5donnaa //
+m5donnad //
+m5doshpk // Do$h & Pecks (Barcrest)
+m5doshpk05 //
+m5draclb // Ooh Aah Dracula Club (Barcrest)
+m5draclb01 //
+m5draclb07 //
+m5dragnd // Dragon Drop (Barcrest - Red Gaming)
+m5dragnda //
+m5eggold // Egyptian Gold (Bwb)
+m5egr // Elvis Gold Rush (Barcrest)
+m5egra //
+m5egss // Elvis Gold Super Streak (Barcrest)
+m5egssa //
+m5elband // El Bandido Club (Vivid)
+m5elim // Eliminator (Barcrest)
+m5elim03 //
+m5elim04 //
+m5evgrhr // Elvis Gold Red Hot Roll (Barcrest)
+m5evgrhra //
+m5ewn // Each Way Nudge (Barcrest)
+m5ewn08 //
+m5extrm // Extreme (Empire)
+m5extrmm // Extreme Madness (Empire)
+m5extrmm04a //
+m5extrmm04b //
+m5extrmm10 //
+m5fair // Fairground Attraction (Vivid)
+m5fatcat // Fat Cat (Empire)
+m5fewmor // A Few Dollars More (Empire)
+m5fewmora //
+m5fewmorb //
+m5fewmorc //
+m5fiddle // On The Fiddle (Barcrest)
+m5fiddle03 //
+m5fire // All Fired Up (Barcrest)
+m5firebl // Fireball (Barcrest)
+m5fishcl // Fish Full Of Dollars Club (Empire)
+m5fishdl // Fish Full Of Dollars (Empire)
+m5fishdl10 //
+m5flipcr // Flippin Crazy (Barcrest)
+m5fmonty // The Full Monty (Empire)
+m5fmonty04a //
+m5fmonty04b //
+m5fmonty04c //
+m5fmount // Full Mountie (Empire)
+m5fnfair // Funfair (Barcrest - Red Gaming)
+m5fnfaird //
+m5fortby // Fort Boyard (Barcrest)
+m5fortby01 //
+m5frnzy // Frenzy (Barcrest)
+m5frnzya //
+m5funsun // Fun In The Sun (Barcrest)
+m5funsun03 //
+m5fusir // Fruits U Sir (Barcrest - Red Gaming)
+m5fusir11 //
+m5fusir12 //
+m5gdrag // Golden Dragon (Barcrest)
+m5gdrgcl // Golden Dragon Club (Barcrest)
+m5gdrgcl05 //
+m5ggems // Giant Gems (Vivid)
+m5ggems20 //
+m5gimmie // Gimmie Gimmie Gimmie (Barcrest)
+m5gkeys // Golden Keys (Barcrest)
+m5goape // Going Ape (Bwb)
+m5gophcl // Gopher Gold Club (Empire)
+m5gophr // Gopher Gold (Empire)
+m5gpclub // Get Plastered Club (Bwb)
+m5groll // Golden Roll (Vivid)
+m5grush // Gold Rush (Barcrest)
+m5grush01 //
+m5grush02 //
+m5grush03 //
+m5grush04 //
+m5grush10 //
+m5grush5 // Gold Rush Five Liner (Barcrest)
+m5grush504 //
+m5gruss // Gold Rush Sit Down (Barcrest)
+m5grusst // Gold Rush Stampede (Barcrest)
+m5grusst03 //
+m5grusst04 //
+m5gsstrk // Gold Super Streak (Barcrest)
+m5gsstrk07 //
+m5gstrik // Gold Strike (Barcrest)
+m5gstrik01 //
+m5gstrik01a //
+m5gstrik02 //
+m5gstrik11 //
+m5gstrika //
+m5hellrz // Hellraiser (Barcrest)
+m5hgl // Happy Go Lucky (Bwb)
+m5hgl14 //
+m5hgl16 //
+m5hiclau // High Claudius (Vivid)
+m5hifly // High Flyer (Barcrest)
+m5hifly03 //
+m5hifly04 //
+m5hilok // Hi Lo Karate (Vivid)
+m5hisprt // High Spirits (Empire)
+m5hlsumo // Hi Lo Sumo (Barcrest)
+m5hocscl // Hocus Pocus Club (Empire)
+m5hocus // Hocus Pocus (Empire)
+m5hocus10 //
+m5holy // The Holy Grail (Barcrest)
+m5holy10 //
+m5honmon // Honey Money (Vivid)
+m5honmona //
+m5hopidl // Hop Idol (Vivid)
+m5horn // Horn Of Plenty (Barcrest)
+m5hotrk // Hot Rocks (Barcrest)
+m5hotsht // Hot Shots (Empire)
+m5hotsht07a //
+m5hotsht08 //
+m5hotsht08a //
+m5hotsht10 //
+m5hotsht10a //
+m5hotslt // Hot Slot (Barcrest)
+m5hotstf // Hot Stuff (Barcrest)
+m5hula // Hula Moolah (Empire)
+m5hula10 //
+m5hulacl // Hula Moolah Club (Empire)
+m5hypalx // Hypalinx (Barcrest - Red Gaming)
+m5hypno // Hypnotic (Vivid)
+m5hypvip // Hyper Viper (Barcrest)
+m5invad // Invaders (Barcrest - Red Gaming)
+m5jackbx // Jack In The Box (Empire)
+m5jackbx03 //
+m5jackp2 // Jackpoteers 2 (Barcrest)
+m5jackp2a //
+m5jackpt // Jackpoteers (Barcrest)
+m5jackpt07 //
+m5jakjok // Jackpot Jokers (Lowen)
+m5jcptgn // Jackpot Genie (Barcrest - Red Gaming)
+m5jcy // Juicy Fruits (Empire)
+m5jlstrk // Jewel Strike (Barcrest - Red Gaming)
+m5jlyjwl // Jolly Jewels (Barcrest)
+m5jlyjwl01 //
+m5jlyjwl02 //
+m5jlyrog // Jolly Roger (Barcrest)
+m5jlyroga //
+m5jmpgem // Jumping Gems (Empire)
+m5jmpgem01 //
+m5jmpgem03 //
+m5jmpgmc // Jumping Gems Club (Empire)
+m5jmpjok // Jumpin Jokers (Vivid)
+m5jmpjok11 //
+m5jmpjoka //
+m5jmpjokb //
+m5jokpak // Joker In The Pack (Bwb)
+m5kaleid // Kaleidoscope Club (Empire)
+m5kcclb // King Cobra Club (Empire)
+m5kcclb24 //
+m5kingko // King KO (Barcrest)
+m5kingko04 //
+m5kingko05 //
+m5kingqc // Kings & Queens Club (Empire)
+m5kingqc06 //
+m5kingqc07 //
+m5kingqc08 //
+m5kkebab // King Kebab (Barcrest)
+m5kkebab10 //
+m5kkebaba //
+m5korma // Korma Chameleon (Empire)
+m5korma12 //
+m5kormcl // Korma Chameleon Club (Empire)
+m5lock // Lock 'n' Load (Barcrest - Red Gaming)
+m5lock12 //
+m5lock13 //
+m5lockcl // Lock 'n' Load Club (Barcrest - Red Gaming)
+m5lockcl14 //
+m5lockcl15 //
+m5loony // Loony Juice (Vivid)
+m5loot // Loot 'n' Khamun (Vivid)
+m5loota //
+m5lotta // Lotta Luck (Barcrest)
+m5lvwire // Live Wire (Bwb)
+m5lvwirea //
+m5mag7s // Magnificent 7s (Vivid)
+m5mag7sa //
+m5mag7sb //
+m5mag7sc //
+m5mag7sd //
+m5mag7se //
+m5martns // Money Mad Martians (Barcrest)
+m5martns07 //
+m5mega // Mega Zone (Barcrest)
+m5minesw // Minesweeper (Bwb)
+m5mmak // Money Maker (Barcrest)
+m5mmak06 //
+m5monjok // Monedin Joker (Spanish) (Barcrest)
+m5monjoka //
+m5monmst // Money Monster (Empire)
+m5monmsta //
+m5monty // Monty Python (Barcrest)
+m5mpfc // Monty Python's Flying Circus (Barcrest)
+m5mpfccl // Monty Python's Flying Circus Club (Barcrest)
+m5mprio // Monty Python Rio (Barcrest)
+m5msf // Manic Streak Features (Vivid)
+m5msfa //
+m5neptun // Neptunes Treasure (Barcrest)
+m5nitro // Nitro (Barcrest - Red Gaming)
+m5nnww // Nudge Nudge Wink Wink (Barcrest)
+m5nnwwgl // Nudge Nudge Wink Wink Gold (Barcrest)
+m5oohaah // Ooh Aah Dracula (Barcrest)
+m5oohaah01 //
+m5oohrio // Ooh Ahh Dracula Rio (Barcrest)
+m5openbx // Open The Box (Barcrest)
+m5openbx01 //
+m5openbx05 //
+m5openbx06 //
+m5overld // Overload (Barcrest)
+m5overld02 //
+m5overld10 //
+m5overld11 //
+m5paint // Paint The Town Red (Barcrest - Red Gaming)
+m5peepsh // Peep Show (Barcrest)
+m5piefac // Pie Factory (Vivid)
+m5piefac12 //
+m5piefac23 //
+m5piefaca //
+m5piefc2 // Pie Factory 2 (Vivid)
+m5piefc2a //
+m5piefc2b //
+m5piefcr // Pie Factory Rio (Vivid)
+m5ppussy // Pink Pussy (Mdm)
+m5psy2 // Psycho Cash Beast 2 (Barcrest)
+m5psyccl // Psycho Cash Beast Club (Barcrest)
+m5psyccl01 //
+m5psyccla // Psycho Cash Beast Club (Bwb)
+m5psyccla02 //
+m5psyccla24 //
+m5psycho // Psycho Cash Beast (Barcrest)
+m5psycho06 //
+m5psychoa // Psycho Cash Beast (Bwb)
+m5psychoa21 //
+m5ptyani // Party Animal (Barcrest)
+m5ptyani01 //
+m5qdraw // Quick On The Draw (Vivid)
+m5qdraw12 //
+m5qdraw14 //
+m5qdraw15 //
+m5qdrawa //
+m5qdrawb //
+m5qshot // Quack Shot (Barcrest)
+m5qshot04 //
+m5quake // Quake (Barcrest - Red Gaming)
+m5rainrn // Rainbow Runner (Barcrest - Red Gaming)
+m5rainrna //
+m5rampg // Rampage (Barcrest - Red Gaming)
+m5rampg11 //
+m5rampg12 //
+m5ramrcl // Ram Raid Club (Empire)
+m5ramrd // Ram Raid (Empire)
+m5ratpk // Rat Pack (Vivid)
+m5ratpka //
+m5rawin // Reel A Win (Vivid)
+m5razdz // Razzle Dazzle Club (Barcrest)
+m5razdz10 //
+m5razdz11 //
+m5rcx // Royal Exchange Club (Barcrest)
+m5rcxa //
+m5rdwarf // Red Dwarf (Barcrest - Red Gaming)
+m5redbal // Random Red Ball (Vivid)
+m5redrck // Ready To Rock (Barcrest)
+m5redrck10 //
+m5redrcka //
+m5redx // Red X (Barcrest - Red Gaming)
+m5redx12 //
+m5reelth // Reel Thunder (Bwb)
+m5reelwn // Reel A Win (Bwb)
+m5reelwn24 //
+m5resfrg // Reservoir Frogs (Empire)
+m5revo // Revolution (Barcrest)
+m5revo13 //
+m5revoa //
+m5rfymc // Run For Your Money Club (Barcrest)
+m5rfymc06 //
+m5rgclb // Rio Grande Club (Barcrest)
+m5rgclb01 //
+m5rgclb01a //
+m5rgclb03 //
+m5rgclb11 //
+m5rgclb12 //
+m5rgclb20 //
+m5rgclb21 //
+m5rhkni // Red Hot Knights (Barcrest)
+m5rhrg // Red Hot Roll Gold (Barcrest)
+m5rhrga //
+m5rhrgt // Red Hot Roll Triple (Barcrest)
+m5rhrgt02 //
+m5rhrgt12 //
+m5ritj // Rumble In The Jungle (Barcrest)
+m5rlup // Roll Up (Bwb)
+m5rollup // Roll Up Roll Up (Vivid)
+m5rollx // Roll X (Empire)
+m5rollx12 //
+m5ronr // Reel Or No Reel (Empire)
+m5ronr05 //
+m5ronr07 //
+m5roof // Raise The Roof (Barcrest)
+m5roofa //
+m5round // Round & Round (Bwb)
+m5roundl // Round & Round (Lowen)
+m5rthh // Return To The Haunted House (Empire)
+m5rub // Rubies & Diamonds (Barcrest)
+m5rwb // Red White & Blue (Barcrest)
+m5rwbbwb // Red White & Blue (Bwb)
+m5rwbbwb15 //
+m5rwbbwb24 //
+m5rwbbwb25 //
+m5sblz // Snail Blazer (Barcrest - Red Gaming)
+m5scfinl // Super Cup Final (Lowen)
+m5scharg // Super Charged (Barcrest)
+m5scharg05 //
+m5scharg06 //
+m5scharga //
+m5sec7 // Secret 7s (Bwb)
+m5sec7a //
+m5seven // Seven Deadly Spins (Barcrest)
+m5shark // Shark Raving Mad (Vivid)
+m5sharka //
+m5sheik // Sheik Yer Money (Barcrest)
+m5showtm // Showtime (Barcrest)
+m5sil7 // Silver 7s (Bwb)
+m5sil7a //
+m5silver // Silver Screen (Barcrest)
+m5silver03 //
+m5silver06 //
+m5sixsht // 6 Shooter (Vivid)
+m5sixshta //
+m5sixshtb //
+m5sixshtc //
+m5sixshtd //
+m5sixshte //
+m5sixshtf //
+m5sixshtg //
+m5sixshth //
+m5sixshti //
+m5sixshtj //
+m5sixshtk //
+m5sixshtl //
+m5sixshtm //
+m5sixshtn //
+m5skulcl // Skullduggery Club (Empire)
+m5skulcl20 //
+m5skulcl23 //
+m5slide // Slider (Barcrest - Red Gaming)
+m5smobik // Smokey Bikin (Bwb)
+m5smobik12 //
+m5sondr // Son Of Dracula (Barcrest)
+m5sondr05 //
+m5sondra //
+m5spddmn // Speed Demon (Vivid)
+m5speccl // Spectrum Club (Vivid)
+m5spicer // The Spice Is Right (Barcrest)
+m5spicer06 //
+m5spiker // Spiker The Biker (Barcrest)
+m5spiker02 //
+m5spikera //
+m5spins // Spinsation (Barcrest)
+m5squids // Squids In (Barcrest)
+m5squids04a //
+m5squids05 //
+m5squids06 //
+m5sstrk // Super Streak (Barcrest)
+m5sstrk02a //
+m5starcl // Stars & Stripes Club (Vivid)
+m5stars // Stars & Stripes (Vivid)
+m5stars10 //
+m5stars10a //
+m5stars13a //
+m5stars20 //
+m5stars22 //
+m5stars25 //
+m5stars25a //
+m5stars26 //
+m5startr // Stars & Stripes Triple (Vivid)
+m5stax // Stax Of Cash (Barcrest)
+m5supnov // Supernova (Barcrest)
+m5supnova //
+m5supro // Super Roulette (Vivid)
+m5suproa //
+m5supstr // Super Star (Barcrest)
+m5supstra //
+m5tball // Thunderball (Empire)
+m5tbird // Thunderbird (Barcrest)
+m5tempcl // Temple Of Treasure Club (Barcrest)
+m5tempp // Temple Of Pleasure (Vivid)
+m5tempt // Temple Of Treasure (Barcrest)
+m5tempt05 //
+m5tempt2 // Temple Of Treasure 2 (Barcrest)
+m5tempt203 //
+m5tempt2a //
+m5tempta //
+m5temptb //
+m5thtsmg // That's Magic (Barcrest - Red Gaming)
+m5tictac // Tic Tac Tut (Vivid)
+m5tictacbwb // Tic Tac Tut (Bwb)
+m5tictacbwb16 //
+m5tomb // Tomb Raiders (Empire)
+m5topdog // Top Dog (Barcrest)
+m5topdog04 //
+m5topdoga //
+m5topdol // Top Dollar (Barcrest - Red Gaming)
+m5topdola //
+m5trail // Trailblazer Club (Barcrest)
+m5trclb // Tomb Raiders Club (Empire)
+m5tsar // Tsar Wars (Empire)
+m5tst // MPU 5 Test Rom (Barcrest)
+m5ttop // Treble Top (Empire)
+m5ttop04 //
+m5ttop10 //
+m5ttopcl // Treble Top Club (Empire)
+m5ttwo // Take Two (Barcrest)
+m5ultimo // Ultimo (Barcrest)
+m5ultimo03a //
+m5ultimo04 //
+m5upover // Up & Over (Barcrest)
+m5upover15 //
+m5vampup // Vamp It Up (Barcrest)
+m5vertcl // Vertigo Club (Empire)
+m5vertgo // Vertigo (Empire)
+m5whdres // Who Dares Spins (Vivid)
+m5winway // Winning Ways (Vivid)
+m5wking // Wild King (Barcrest)
+m5wking05 //
+m5wonga // A Fish Called Wonga (Empire)
+m5wthing // Wild Thing Club (Empire)
+m5wthing11 //
+m5wthing20 //
+m5xchn // Exchanges Unlimited (Barcrest)
+m5xena // Xena Warrior Princess (Bwb)
+m5xfact // X Factor (Empire)
+m5xfact02 //
+m5xfact04 //
+m5xfact11 //
+m5zigzag // Zig Zag
+
+//@source:mpz80.cpp
+mpz80 //
+
+//@source:mquake.cpp
+mquake // (c) 1987
+
+//@source:mrdo.cpp
+mrdo // 8201 (c) 1982
+mrdofix // 8201 (c) 1982 + Taito license
+mrdot // 8201 (c) 1982 + Taito license
+mrdoy // 8201 (c) 1982
+mrdu // bootleg
+mrlo // bootleg
+yankeedo // bootleg
+
+//@source:mrflea.cpp
+mrflea // (c) 1982
+
+//@source:mrgame.cpp
+dakar //
+macattck //
+motrshow //
+motrshowa //
+wcup90 //
+
+//@source:mrjong.cpp
+blkbustr // (c) 1983 Kiwako + ECI license
+crazyblk // (c) 1983 Kiwako + ECI license
+mrjong // (c) 1983 Kiwako
+
+//@source:ms0515.cpp
+ms0515 //
+
+//@source:ms32.cpp
+47pie2 // (c) 1994
+47pie2o // (c) 1994
+akiss // (c) 1995
+bbbxing // (c) 1994
+bnstars // (c) 1997
+desertwr // (c) 1995
+f1superb // (c) 1994
+gametngk // (c) 1995
+gratia // (c) 1996
+gratiaa // (c) 1996
+hayaosi2 // (c) 1993
+hayaosi3 // (c) 1994
+kirarast // (c) 1996
+p47aces // (c) 1995
+tetrisp // (c) 1995 Jaleco / BPS
+tp2m32 // (c) 1997
+wpksocv2 // (c) 1997
+
+//@source:ms9540.cpp
+ms9540 //
+
+//@source:msbc1.cpp
+msbc1 //
+
+//@source:msisaac.cpp
+msisaac // A34 (c) 1985 Taito Corporation
+
+//@source:mstation.cpp
+mstation //
+
+//@source:msx.cpp
+ax150 //
+ax170 //
+ax350 //
+ax370 //
+bruc100 //
+canonv10 //
+canonv20 //
+canonv20e //
+canonv20f //
+canonv20g //
+canonv20s //
+canonv25 //
+canonv30 //
+canonv30f //
+canonv8 //
+cf1200 // 1984 MSX Japan
+cf2000 // 1983 MSX Japan
+cf2700 // 1984 MSX Japan
+cf2700g //
+cf3000 // 1984 MSX Japan
+cf3300 // 1985 MSX Japan
+cpc300 // 1986 MSX2 Korea
+cpc300e // 1986 MSX2 Korea
+cpc330k //
+cpc400 // 1986 MSX2 Korea
+cpc400s // 1986 MSX2 Korea
+cpc50a //
+cpc50b //
+cpc51 //
+cpc61 //
+cpc88 //
+cpg120 //
+cx5f //
+cx5f1 //
+cx5m //
+cx5m128 //
+cx5m2 //
+cx7m // 1986 MSX2
+cx7m128 // 1986 MSX2
+dpc100 // 1984 MSX Korea
+dpc180 // 1984 MSX Korea
+dpc200 // 1984 MSX Korea
+dpc200e //
+expert10 // 1983 MSX Brazil
+expert11 // 1984 MSX Brazil
+expert13 // 1984 MSX Brazil
+expert20 // 1986 MSX2 Korea
+expert3i //
+expert3t //
+expertac //
+expertdp // 1985 MSX Brazil
+expertdx //
+expertpl // 1984 MSX Brazil
+fdpc200 //
+fmx //
+fpc500 //
+fpc900 //
+fs1300 // 1985 MSX Japan
+fs4000 // 1985 MSX Japan
+fs4000a //
+fs4500 // 1986 MSX2 Japan
+fs4600 // 1986 MSX2 Japan
+fs4700 // 1986 MSX2 Japan
+fs5000 // 1986 MSX2 Japan
+fs5500f1 // 1985 MSX2 Japan
+fs5500f2 // 1985 MSX2 Japan
+fsa1 // 1986 MSX2 Japan
+fsa1a // 1986 MSX2 Japan
+fsa1f // 1987 MSX2 Japan
+fsa1fm // 1988 MSX2 Japan
+fsa1fx // 1988 MSX2+ Japan
+fsa1gt //
+fsa1mk2 // 1987 MSX2 Japan
+fsa1st //
+fsa1wsx // 1989 MSX2+ Japan
+fsa1wx // 1988 MSX2+ Japan
+fsa1wxa // 1988 MSX2+ Japan
+fspc800 //
+fstm1 //
+gfc1080 //
+gfc1080a //
+gsfc200 //
+gsfc80u //
+hb10 //
+hb101p //
+hb10p //
+hb201 // 1985 MSX Japan
+hb201p // 1985 MSX
+hb20p //
+hb501p // 1984 MSX
+hb55 //
+hb55d // 1983 MSX Germany
+hb55p // 1983 MSX
+hb701fd //
+hb75d // 1983 MSX Germany
+hb75p // 1983 MSX
+hbf1 // 1986 MSX2 Japan
+hbf12 // 1987 MSX2 Japan
+hbf1xd // 1987 MSX2 Japan
+hbf1xdj // 1988 MSX2+ Japan
+hbf1xdm2 // 1988 MSX2 Japan
+hbf1xv // 1989 MSX2+ Japan
+hbf5 //
+hbf500 // 1986 MSX2 Japan
+hbf500f //
+hbf500p // 1985 MSX2
+hbf700d // 1985 MSX2 Germany
+hbf700f // 1985 MSX2
+hbf700p // 1985 MSX2
+hbf700s // 1985 MSX2 Spain
+hbf900 // 1986 MSX2 Japan
+hbf900a // 1986 MSX2 Japan
+hbf9p // 1985 MSX2
+hbf9pr //
+hbf9s // 1985 MSX2
+hbf9sp //
+hbg900ap // 1986 MSX2
+hbg900p // 1986 MSX2
+hc5 //
+hc6 //
+hc7 //
+hotbi13b // 1985 MSX Brazil
+hotbi13p // 1985 MSX Brazil
+hotbit11 // 1985 MSX Brazil
+hotbit12 // 1985 MSX Brazil
+hotbit20 // 1986 MSX2 Brazil
+hx10 // 1984 MSX
+hx10d //
+hx10dp //
+hx10e //
+hx10f //
+hx10s // 1984 MSX
+hx10sa //
+hx20 // 1984 MSX
+hx20i //
+hx21 //
+hx21i //
+hx22 //
+hx22i //
+hx23 // 1986 MSX2
+hx23f // 1986 MSX2
+hx23i //
+hx33 //
+hx34 //
+hx34i //
+jvchc7gb //
+kmc5000 //
+mbh2 //
+mbh25 //
+mbh50 //
+mbh70 //
+mlf110 //
+mlf120 //
+mlf48 //
+mlf80 //
+mlfx1 //
+mlg1 //
+mlg10 //
+mlg3 //
+mlg30 //
+mpc10 //
+mpc100 //
+mpc200 //
+mpc200sp //
+mpc2300 //
+mpc2500f //
+mpc25fd //
+mpc27 //
+mpc64 //
+mx10 //
+mx101 //
+mx15 //
+mx64 //
+nms801 //
+nms8220 // 1986 MSX2
+nms8220a // 1986 MSX2
+nms8245 // 1986 MSX2
+nms8245f // 1986 MSX2
+nms8250 // 1986 MSX2
+nms8250f //
+nms8250j //
+nms8255 // 1986 MSX2
+nms8255f //
+nms8260 //
+nms8280 // 1986 MSX2
+nms8280f //
+nms8280g // 1986 MSX2
+perfect1 //
+phc2 //
+phc23 // 1986 MSX2 Japan
+phc28 //
+phc28l //
+phc28s //
+phc35j // 1989 MSX2+ Japan
+phc55fd2 //
+phc70fd // 1988 MSX2+ Japan
+phc70fd2 // 1988 MSX2+ Japan
+phc77 //
+piopx7 //
+piopx7uk //
+piopxv60 //
+pv16 //
+pv7 //
+spc800 //
+svi728 // 1985 MSX
+svi738 // 1985 MSX
+svi738ar //
+svi738dk //
+svi738pl // 1985 MSX
+svi738sp //
+svi738sw // 1985 MSX
+tadpc200 //
+tadpc20a //
+tpc310 // 1986 MSX2
+tpp311 //
+tps312 //
+vg8000 //
+vg8010 //
+vg8010f //
+vg802000 //
+vg802020 // 1985 MSX
+vg8020f //
+vg8230 // 1986 MSX2
+vg8230j //
+vg8235 // 1986 MSX2
+vg8235f // 1986 MSX2
+vg8240 // 1986 MSX2
+victhc90 //
+victhc95 //
+victhc95a //
+y503iiir //
+y503iiire //
+y503iir //
+y503iir2 //
+y805128 //
+y805128r2 //
+y805128r2e //
+y805256 //
+yc64 //
+yis303 //
+yis503 //
+yis503f //
+yis503ii //
+yis503m //
+yis604 //
+yis60464 //
+
+//@source:mt735.cpp
+mt735 //
+
+//@source:mtx.cpp
+mtx500 // 1983 Memotech MTX 500
+mtx512 // 1983 Memotech MTX 512
+rs128 // 1984 Memotech RS 128
+
+//@source:mugsmash.cpp
+mugsmash // (c) Electronic Devices (Italy) / 3D Games (England)
+
+//@source:multfish.cpp
+crzmon2 // (c) 2010
+crzmon2_2 // (c) 2010
+crzmon2_3 // (c) 2010
+czmon_13 // (c) 2003
+czmon_15 // (c) 2003
+czmon_16 // (c) 2003
+czmon_5 // (c) 2003
+czmon_7 // (c) 2003
+czmon_8 // (c) 2003
+czmon_9 // (c) 2003
+fcockt_10 // (c) 2003
+fcockt_11 // (c) 2003
+fcockt_12 // (c) 2003
+fcockt_14 // (c) 2003
+fcockt_3 // (c) 2003
+fcockt_5 // (c) 2003
+fcockt_6 // (c) 2003
+fcockt_7 // (c) 2003
+fcockt_8 // (c) 2003
+fcockt_9 // (c) 2003
+fcockt2 // (c) 2008
+fcockt2_3 // (c) 2008
+fcockt2_4 // (c) 2008
+fcockt2_5 // (c) 2008
+fcockt2_6 // (c) 2008
+fcockt2_7 // (c) 2008
+garage_4 // (c) 2004
+garage_5 // (c) 2004
+garage_6 // (c) 2004
+garage_7 // (c) 2004
+garage_9 // (c) 2004
+gnome // (c) 2007
+gnome_10 // (c) 2007
+gnome_11 // (c) 2007
+gnome_12 // (c) 2007
+gnome_2 // (c) 2007
+gnome_3 // (c) 2007
+gnome_4 // (c) 2007
+gnome_5 // (c) 2007
+gnome_7 // (c) 2007
+gnome_9 // (c) 2007
+goldfish // (c) 2002 - Prototype of Multifish
+island // (c) 2005
+island_2 // (c) 2005
+island2 // (c) 2006
+island2_3 // (c) 2006
+island2_4 // (c) 2006
+island2_5 // (c) 2006
+island2_6 // (c) 2006
+keks // (c) 2006
+keks_2 // (c) 2006
+keks_3 // (c) 2006
+keks_4 // (c) 2006
+keks_5 // (c) 2006
+lhaunt_10 // (c) 2003
+lhaunt_11 // (c) 2003
+lhaunt_2 // (c) 2003
+lhaunt_4 // (c) 2003
+lhaunt_5 // (c) 2003
+lhaunt_6 // (c) 2003
+lhaunt_7 // (c) 2003
+lhaunt_8 // (c) 2003
+mfish_11 // (c) 2002
+mfish_12 // (c) 2002
+mfish_13 // (c) 2002
+mfish_3 // (c) 2002
+mfish_6 // (c) 2002
+mfish_8 // (c) 2002
+pirate_2 // (c) 2005
+pirate_3 // (c) 2005
+pirate_4 // (c) 2005
+pirate2 // (c) 2006
+pirate2_2 // (c) 2006
+pirate2_3 // (c) 2006
+pirate2_4 // (c) 2006
+rclimb // (c) 2004
+rclimb_3 // (c) 2004
+rclimb_4 // (c) 2004
+rclimb_5 // (c) 2004
+rclimb_7 // (c) 2004
+resdnt // (c) 2004
+resdnt_2 // (c) 2004
+resdnt_3 // (c) 2004
+resdnt_6 // (c) 2004
+resdnt_8 // (c) 2004
+resdnt_9 // (c) 2004
+rollfr_2 // (c) 2003
+rollfr_3 // (c) 2003
+rollfr_4 // (c) 2003 (bootleg?)
+sweetl // (c) 2004
+sweetl_2 // (c) 2004
+sweetl2 // (c) 2007
+sweetl2_2 // (c) 2007
+sweetl2_3 // (c) 2007
+sweetl2_4 // (c) 2007
+windjamr // (c) 2002
+
+//@source:multfish_boot.cpp
+czmon_7a // bootleg - Crazy Monkey
+czmon_7b // bootleg
+czmon_8a // bootleg
+czmon_8b // bootleg
+czmon_8c // bootleg
+czmon_8d // bootleg
+czmon_8e // bootleg
+czmon_8f // bootleg
+czmon_9a // bootleg
+czmon_9b // bootleg
+czmon_9c // bootleg
+fcockt_6a // bootleg - Fruit Cocktail
+fcockt_6b // bootleg
+fcockt_6c // bootleg
+fcockt_6d // bootleg
+fcockt_7a // bootleg
+fcockt_7b // bootleg
+fcockt_7c // bootleg
+fcockt_7d // bootleg
+fcockt_7e // bootleg
+fcockt_7f // bootleg
+fcockt_7g // bootleg
+fcockt_7h // bootleg
+fcockt_8a // bootleg
+fcockt_8b // bootleg
+fcockt2_4a // bootleg
+fcockt2_4b // bootleg
+fcockt2_4c // bootleg
+fcockt2_4d // bootleg
+fcockt2_4e // bootleg
+fcockt2_4f // bootleg
+fcockt2a // bootleg - Fruit Cocktail 2
+garage_4a // bootleg - Garage
+garage_4b // bootleg
+garage_4c // bootleg
+garage_5a // bootleg
+garage_5b // bootleg
+garage_5c // bootleg
+garage_5d // bootleg
+garage_5e // bootleg
+gnome_2a // bootleg
+gnome_3a // bootleg
+gnome_3b // bootleg
+gnome_3c // bootleg
+gnome_5a // bootleg
+gnome_5b // bootleg
+gnomea // bootleg - Gnome
+gnomeb // bootleg
+gnomec // bootleg
+gnomed // bootleg
+gnomee // bootleg
+igromula // Multigame bootleg
+igromult // Multigame bootleg
+island2_3a // bootleg
+island2_4a // bootleg
+island2a // bootleg - Island 2
+island2b // bootleg
+island2c // bootleg
+islanda // bootleg - Island
+islandb // bootleg
+islandc // bootleg
+keks_2a // bootleg
+keks_2b // bootleg
+keks_2c // bootleg
+keks_2d // bootleg
+keks_2e // bootleg
+keks_2f // bootleg
+keks_2g // bootleg
+keks_3a // bootleg
+keks_3b // bootleg
+keksa // bootleg - Keks
+keksb // bootleg
+keksc // bootleg
+lhaunt_4a // bootleg - Lucky Haunter
+lhaunt_5a // bootleg
+lhaunt_6a // bootleg
+lhaunt_6b // bootleg
+lhaunt_6c // bootleg
+lhaunt_6d // bootleg
+lhaunt_6e // bootleg
+lhaunt_6f // bootleg
+mfish_12a // bootleg
+mfish_3a // bootleg - Multifish
+pirate2_2a // bootleg
+pirate2a // bootleg - Pirate 2
+pirate2b // bootleg
+pirate2c // bootleg
+pirate2d // bootleg
+pirate2e // bootleg
+pirate2f // bootleg
+pirate2g // bootleg
+pirate2h // bootleg
+rclimb_3a // bootleg - Rock Climber
+rclimb_3b // bootleg
+rclimb_3c // bootleg
+rclimb_3d // bootleg
+rclimb_3e // bootleg
+resdnt_2a // bootleg - Resident
+resdnt_2b // bootleg
+resdnt_2c // bootleg
+resdnt_2d // bootleg
+resdnt_2e // bootleg
+resdnt_2f // bootleg
+resdnt_2g // bootleg
+sweetl2_2a // bootleg - Sweet Life 2
+sweetl2_2b // bootleg
+sweetl2_2c // bootleg
+sweetl2_2d // bootleg
+sweetla // bootleg - Sweet Life
+sweetlb // bootleg
+
+//@source:multi16.cpp
+multi16 //
+
+//@source:multi8.cpp
+multi8 //
+
+//@source:multigam.cpp
+multigam // 1992
+multigm2 // 1992
+multigm3 // 19??
+multigmb // 1992
+multigmt //
+sgmt1 // 1994
+supergm3 // 1996
+
+//@source:munchmo.cpp
+joyfulr // A2001 (c) 1983
+mnchmobl // A2001 (c) 1983 + Centuri license
+
+//@source:murogem.cpp
+lasvegas // hack
+murogem // ???
+murogema // ???
+murogemb // ???
+
+//@source:murogmbl.cpp
+murogmbl // ???
+
+//@source:mustache.cpp
+mustache // (c) 1987 March
+
+//@source:mw18w.cpp
+18w // 653 (c) 1979 Midway
+18w2 // 653 (c) 1979 Midway
+
+//@source:mw8080bw.cpp
+280zzzap // 610 [1976]
+blueshrk // 742 [1978]
+boothill // 612 [1977]
+bowler // 730 [1978] Midway
+checkmat // 615 [1977]
+clowns // 630 [1978]
+clowns1 // 630 [1978]
+desertgu // 618 [1977]
+dogpatch // 644 [1977]
+dplay // 619 [1977]
+einning // 642 [1978] Midway
+gmissile // 623 [1977]
+gunfight // 597 [1975]
+gunfighto // 597 [1975]
+invad2ct // 851 (c) 1980 Midway
+invaders // 739 [1979]
+lagunar // 622 [1977]
+m4 // 626 [1977]
+maze // 611 [1976]
+phantom2 // 652 [1979]
+roadrunm // 618 [1977]
+seawolf // 596 [1976]
+seawolfo // 596 [1976]
+shuffle // 643 [1978]
+spacwalk // 640 [1978]
+spcenctr // 645 (c) 1980 Midway
+tornbase // 605 [1976]
+
+//@source:mwarr.cpp
+mwarr //
+
+//@source:mwsub.cpp
+submar // 760 (c) 1979 Midway
+
+//@source:mx2178.cpp
+mx2178 //
+
+//@source:myb3k.cpp
+myb3k //
+
+//@source:mycom.cpp
+mycom //
+
+//@source:mystston.cpp
+mystston // TA-0010 (c) 1984
+myststono // TA-0010 (c) 1984
+myststonoi // PCB manufactured by Itisa
+
+//@source:mystwarr.cpp
+dadandrn // GX170 (c) 1993 (Japan)
+gaiapols // GX123 (c) 1993 (Europe)
+gaiapolsj // GX123 (c) 1993 (Japan)
+gaiapolsu // GX123 (c) 1993 (US)
+metamrph // GX224 (c) 1993 (Europe)
+metamrphj // GX224 (c) 1993 (Japan)
+metamrphu // GX224 (c) 1993 (US)
+mmaulers // GX170 (c) 1993 (Europe)
+mtlchamp // GX234 (c) 1993 (World)
+mtlchamp1 // GX234 (c) 1993 (World)
+mtlchampa // GX234 (c) 1993 (Japan)
+mtlchampj // GX234 (c) 1993 (Japan)
+mtlchampu // GX234 (c) 1993 (US)
+mtlchampu1 // GX234 (c) 1993 (US)
+mystwarr // GX128 (c) 1993 (World)
+mystwarra // GX128 (c) 1993 (Asia)
+mystwarrj // GX128 (c) 1993 (Japan)
+mystwarru // GX128 (c) 1993 (US)
+viostorm // GX168 (c) 1993 (Europe)
+viostorma // GX168 (c) 1993 (Asia)
+viostormab // GX168 (c) 1993 (Asia)
+viostormeb // GX168 (c) 1993 (Europe)
+viostormj // GX168 (c) 1993 (Japan)
+viostormu // GX168 (c) 1993 (US)
+viostormub // GX168 (c) 1993 (US)
+
+//@source:myvision.cpp
+myvision //
+
+//@source:mz2000.cpp
+mz2000 // 1981 Sharp MZ2000
+mz2200 // 1981 Sharp MZ2200
+
+//@source:mz2500.cpp
+mz2500 // 1985 Sharp MZ2500
+mz2520 // 1985 Sharp MZ2520
+
+//@source:mz3500.cpp
+mz3500 // 198? Sharp MZ3500
+
+//@source:mz6500.cpp
+mz6500 // 198? Sharp MZ6500
+
+//@source:mz700.cpp
+mz1500 // 1984 Sharp MZ1500
+mz700 // 1982 Sharp MZ700
+mz700j // 1982 Sharp MZ700 Japan
+mz800 // 1984 Sharp MZ800
+
+//@source:mz80.cpp
+mz80a // 1982 Sharp MZ80A
+mz80b // 1981 Sharp MZ80B
+mz80k // 1979 Sharp MZ80K
+mz80kj // 1979 Sharp MZ80K
+
+//@source:mzr8105.cpp
+mzr8105 //
+
+//@source:n64.cpp
+n64 // Nintendo N64
+n64dd // Nintendo N64 (64DD Attachment)
+
+//@source:n8080.cpp
+bandido // (c) 1980 Exidy
+helifire // (c) 1980 Nintendo
+helifirea // (c) 1980 Nintendo
+highsplt // (c) 1979 Nintendo
+highsplta // (c) 1979 Nintendo
+highspltb // (c) 1979 Nintendo
+sheriff // (c) 1979 Nintendo
+spacefev // (c) 1979 Nintendo
+spacefevo // (c) 1979 Nintendo
+spacefevo2 // (c) 1979 Nintendo
+spacelnc // (c) 1979 Nintendo
+westgun2 // (c) 1980 Taito Corporation
+
+//@source:nakajies.cpp
+dator3k // 199? Dator 3000 (Spanish)
+drwrt100 // 199? NTS DreamWriter T100
+drwrt200 // 199? NTS DreamWriter T200
+drwrt400 // 1996 NTS DreamWriter T400
+drwrt450 // 199? NTS DreamWriter 450
+es210_es //
+wales210 // 199? Walther ES-210 (German)
+
+//@source:namcofl.cpp
+finalapr // (c) 1995
+finalaprj // (c) 1995
+finalapro // (c) 1995
+speedrcr // (c) 1995
+
+//@source:namcona1.cpp
+bkrtmaq // (c) 1992 (Japan)
+cgangpzl // (c) 1992 (US)
+cgangpzlj // (c) 1992 (Japan)
+emeralda // (c) 1993 (Japan)
+emeraldaj // (c) 1993 (Japan)
+emeraldaja // (c) 1993 (Japan)
+exvania // (c) 1992 (World)
+exvaniaj // (c) 1992 (Japan)
+fa // (c) 1992 (Japan)
+fghtatck // (c) 1992 (US)
+knckhead // (c) 1992 (World)
+knckheadj // (c) 1992 (Japan)
+knckheadjp // (c) 1992 (Japan)
+numanath // (c) 1993 (World)
+numanathj // (c) 1993 (Japan)
+quiztou // (c) 1993 (Japan)
+swcourt // (c) 1992 (Japan)
+swcourtj // (c) 1992 (Japan)
+tinklpit // (c) 1993 (Japan)
+xday2 // (c) 1995 (Japan)
+
+//@source:namconb1.cpp
+gslgr94j // (c) 1994 (Japan)
+gslgr94u // (c) 1994
+gslugrsj // (c) 1993 (Japan)
+gunbuletj // (c) 1994 (GN1 Japan)
+gunbuletw // (c) 1994 (GN3 World)
+machbrkr // (c) 1995 (Japan)
+nebulray // (c) 1994 (World)
+nebulrayj // (c) 1994 (Japan)
+outfxies // (c) 1994 (World)
+outfxiesj // (c) 1994 (Japan)
+ptblank // (c) 1994 (GN2 World)
+ptblanka // (c) 1994 (GN2 World) - Alternate labels, NRx-SPR0 (X=1 to 9)
+sws95 // (c) 1995 (Japan)
+sws96 // (c) 1996 (Japan)
+sws97 // (c) 1997 (Japan)
+vshoot // (c) 1994
+
+//@source:namcond1.cpp
+ncv1 // (c) 1995
+ncv1j // (c) 1995 (Japan)
+ncv1j2 // (c) 1995 (Japan)
+ncv2 // (c) 1996
+ncv2j // (c) 1996 (Japan)
+
+//@source:namcops2.cpp
+bldyr3b //
+cobrata //
+dragchrn //
+fateulc //
+fateulcb //
+fghtjam //
+gdvsgd //
+gdvsgdnx //
+gundzaft //
+kinniku //
+kinniku2 //
+netchu02 //
+prdgp03 //
+qgundam //
+rrvac //
+rrvac1 //
+rrvac2 //
+sbxc //
+scptour //
+soulcl2a //
+soulcl2b //
+soulcl2w //
+soulclb2 //
+soulclb3 //
+soulclb3a //
+soulclb3b //
+sukuinuf //
+superdbz //
+sys246 //
+sys256 //
+taiko10 //
+taiko7 //
+taiko8 //
+taiko9 //
+tekken4 //
+tekken4a //
+tekken4b //
+tekken4c //
+tekken51 //
+tekken51b //
+tekken5d //
+timecrs3 //
+timecrs3e //
+timecrs4 //
+vnight //
+wanganmd //
+wanganmr //
+yuyuhaku //
+zgundm //
+zgundmdx //
+zoidiexp //
+zoidsinf //
+
+//@source:namcos1.cpp
+bakutotu // (c) 1988 (Japan)
+berabohm // (c) 1988 (Japan, Rev C)
+berabohmb // (c) 1988 (Japan, Rev B)
+blastoff // (c) 1989 (Japan)
+blazer // (c) 1987 (Japan)
+boxyboy // (c) 1990 (US)
+dangseed // (c) 1989 (Japan)
+dspirit // (c) 1987 (new version (DS3))
+dspirit1 // (c) 1987 (old version (DS1))
+dspirit2 // (c) 1987 (DS2, Atari had rights to US market)
+faceoff // (c) 1988 (Japan)
+galaga88 // (c) 1987
+galaga88a // (c) 1987
+galaga88j // (c) 1987 (Japan)
+mmaze // (c) 1988 (Japan)
+pacmania // (c) 1987
+pacmaniaj // (c) 1987 (Japan)
+pacmaniao // (c) 1987
+pistoldm // (c) 1990 (Japan)
+puzlclub // (c) 1990 (Japan)
+quester // (c) 1987 (Japan)
+questers // (c) 1987 (Japan)
+rompers // (c) 1989 (Japan, new version (Rev B))
+romperso // (c) 1989 (Japan, old version)
+shadowld // (c) 1987 (YD3)
+soukobdx // (c) 1990 (Japan)
+splatter // (c) 1988 (World, SH3)
+splatter2 // (c) 1988 (World, SH2)
+splatterj // (c) 1988 (Japan)
+tankfrce // (c) 1991 (US, 2 Player)
+tankfrce4 // (c) 1991 (US, 4 Player)
+tankfrcej // (c) 1991 (Japan)
+wldcourt // (c) 1988 (Japan)
+ws // (c) 1988 (Japan)
+ws89 // (c) 1989 (Japan)
+ws90 // (c) 1990 (Japan)
+youkaidk1 // (c) 1987 (Japan, old version (YD1))
+youkaidk2 // (c) 1987 (Japan, new version (YD2, Rev B))
+
+//@source:namcos10.cpp
+chocovdr // 2002.10 Uchuu Daisakusen : Chocovader Contactee
+gamshara // 2002.08 Gamshara (10021 Ver.A)
+gjspace // 2001.12 Gekitoride-Jong Space (10011 Ver.A)
+gunbalina // 2000.12 Gunbalina (GNN1 Ver.A)
+knpuzzle // 2001.12 Kotoba no Puzzle Mojipittan (KPM1 Ver.A)
+konotako // 2003.?? Kono Tako (10021 Ver.A)
+mrdrilr2 // 2000.07 Mr Driller 2 (DR21 Ver.A)
+mrdrilrg // 2001.03 Mr. Driller G (DRG1 Ver.A)
+mrdrilrga // 2001.03 Mr. Driller G ALT (DRG1 Ver.A)
+mrdrlr2a // 2000.?? Mr Driller 2 (DR22 Ver.A)
+nflclsfb // 2003.?? NFL Classic Football
+panikuru // 2002.03 Panicuru Panekuru
+ptblank3 // 2000.12 Point Blank 3 (GNN2 Ver.A)
+startrgn // 2002.07 Star Trigon (STT1 Ver.A)
+
+//@source:namcos11.cpp
+danceyes // 1996.10 Dancing Eyes (US, DC3/VER.C)
+danceyesj // 1996.09 Dancing Eyes (Japan, DC1/VER.A)
+dunkmnia // 1996.05 Dunk Mania (Asia, DM2/VER.C)
+dunkmniajc // 1996.05 Dunk Mania (Japan, DM1/VER.C)
+myangel3 // 1998.03 Kosodate Quiz My Angel 3 (Japan, KQT1/VER.A)
+pocketrc // 1997.03 Pocket Racer (Japan, PKR1/VER.B)
+primglex // 1996.03 Prime Goal EX (Japan, PG1/VER.A)
+ptblank2ua // 1999.?? Point Blank 2 (US, GNB3/VER.A)
+souledge // 1996.05 Soul Edge Ver. II (World, SO4/VER.C)
+souledgeaa // 1996.02 Soul Edge (Asia, SO2/VER.A)
+souledgeja // 1996.02 Soul Edge (Japan, SO1/VER.A)
+souledgeua // 1996.01 Soul Edge (US, SO3/VER.A)
+souledgeuc // 1996.05 Soul Edge Ver. II (US, SO3/VER.C)
+starswep // 1997.07 Star Sweep (Japan, STP1/VER.A)
+tekken // 1995.01 Tekken (World, TE4/VER.C)
+tekken2 // 1996.04 Tekken 2 Ver.B (US, TES3/VER.D)
+tekken2aa // 1995.08 Tekken 2 (Asia, TES2/VER.A)
+tekken2ab // 1995.09 Tekken 2 Ver.B (Asia, TES2/VER.B)
+tekken2jb // 1995.09 Tekken 2 Ver.B (Japan, TES1/VER.B)
+tekken2jc // 1995.11 Tekken 2 Ver.B (Japan, TES1/VER.C)
+tekken2ub // 1995.09 Tekken 2 Ver.B (US, TES3/VER.B)
+tekkenab // 1994.12 Tekken (Asia, TE2/VER.B)
+tekkenac // 1995.01 Tekken (Asia, TE2/VER.C)
+tekkenjb // 1994.12 Tekken (Japan, TE1/VER.B)
+xevi3dg // 1996.05 Xevious 3D/G (Japan, XV31/VER.A)
+
+//@source:namcos12.cpp
+aplarail // 1998.12 Attack Pla Rail
+aquarush // 2000.02 Aqua Rush (AQ1/VER.A1, Japan)
+ehrgeiz // 1998.?? Ehrgeiz (US, EG3/VER.A)
+ehrgeizaa // 1998.?? Ehrgeiz (Asia, EG2/VER.A)
+ehrgeizja // 1998.05 Ehrgeiz (Japan, EG1/VER.A)
+fgtlayer // 1998.12 Fighting Layer (Japan, FTL0/VER.A)
+g13knd // 2000.10 Golgo 13 Kiseki no Dandou (GLS1/VER.A, Japan)
+ghlpanic // 1999.?? Ghoul Panic (Asia, OB2/VER.A)
+golgo13 // 2000.03 Golgo 13 (GLG1/VER.A, Japan)
+gunbarl // 1999.?? Gunbarl (Japan, GNB4/VER.A)
+kaiunqz // 1999.12 Kaiun Quiz (KW1/VER.A, Japan)
+kartduel // 2000.07 Kart Duel
+lbgrande // 1997.?? Libero Grande (Asia, LG2/VER.A)
+lbgrandeja // 1997.12 Libero Grande (Japan, LG1/VER.A)
+mdhorse // 1998.11 Derby Quiz My Dream Horse (Japan, MDH1/VER.A2)
+mrdrillr // 1999.11 Mr Driller (US, DRI3/VER.A2)
+mrdrillrj // 1999.11 Mr Driller (Japan, DRI1/VER.A2, Japan)
+ohbakyuun // 1999.07 Oh! Bakyuuun (Japan, OB1/VER.A)
+pacapp // 1998.12 Paca Paca Passion (Japan, PPP1/VER.A2)
+pacapp2 // 1999.07 Paca Paca Passion 2 (Japan, PKS1/VER.A)
+pacappsp // 1999.12 Paca Paca Passion Special (PSP1/VER.A, Japan)
+ptblank2 // 1999.?? Point Blank 2 (GNB5/VER.A)
+soulclbr // 1998.?? Soul Calibur (World, SOC14/VER.C)
+soulclbrja // 1998.?? Soul Calibur (Japan, SOC11/VER.A2)
+soulclbrjb // 1998.?? Soul Calibur (Japan, SOC11/VER.B)
+soulclbrjc // 1998.07 Soul Calibur (Japan, SOC11/VER.C)
+soulclbrub // 1998.?? Soul Calibur (US, SOC13/VER.B)
+soulclbruc // 1998.?? Soul Calibur (US, SOC13/VER.C)
+soulclbrwb // 1998.?? Soul Calibur (World, SOC14/VER.B)
+sws2000 // 2000.03 Super World Stadium 2000 (SS01/VER.A, Japan)
+sws2001 // 2001.04 Super World Stadium 2001 (SS11/VER.A, Japan)
+sws98 // 1998.06 Super World Stadium '98 (SS81/VER.A, Japan)
+sws99 // 1999.05 Super World Stadium '99 (Japan, SS91/VER.A3)
+technodr // 1998.07 Techno Drive
+tekken3 // 1997.03 Tekken 3 (Japan, TET1/VER.E1)
+tekken3aa // 1997.?? Tekken 3 (Asia, TET2/VER.A)
+tekken3ab // 1997.?? Tekken 3 (Asia, TET2/VER.B)
+tekken3ae // 1997.03 Tekken 3 (Asia, TET2/VER.E1)
+tekken3ja // 1997.?? Tekken 3 (Japan, TET1/VER.A)
+tekken3ua // 1997.?? Tekken 3 (US, TET3/VER.A)
+tekken3ud // 1997.?? Tekken 3 (US, TET3/VER.D)
+tektagt // 1999.?? Tekken Tag Tournament (US, TEG3/VER.C1)
+tektagtac // 1999.?? Tekken Tag Tournament (Asia, TEG2/VER.C1)
+tektagtac1 // 1999.?? Tekken Tag Tournament (Asia, TEG2/VER.C1) - alt mainboard & rom board
+tektagtja // 1999.07 Tekken Tag Tournament (Japan, TEG1/VER.A)
+tektagtjb // 1999.07 Tekken Tag Tournament (Japan, TEG1/VER.B)
+tektagtjc1 // 1999.?? Tekken Tag Tournament (Japan, TEG1/VER.C1)
+tektagtub // 1999.?? Tekken Tag Tournament (US, TEG3/VER.B)
+tenkomor // 1998.?? Tenkomori Shooting (Asia, TKM2/VER.A1)
+tenkomorja // 1998.12 Tenkomori Shooting (Japan, TKM1/VER.A1)
+toukon3 // 1997.12 Shin Nihon Pro Wrestling Toukon Retsuden 3 Arcade Edition (Japan, TR1/VER.A)
+truckk // 2000.06 Truck Kyousoukyoku (Metro)
+
+//@source:namcos2.cpp
+assault // (c) 1988
+assaultj // (c) 1988 (Japan)
+assaultp // (c) 1988 (Japan)
+bubbletr // (c) 1992
+burnforc // (c) 1989 (Japan, new version)
+burnforco // (c) 1989 (Japan, old version)
+cosmogng // (c) 1991 (US)
+cosmogngj // (c) 1991 (Japan)
+dirtfoxj // (c) 1989 (Japan)
+dsaber // (c) 1990
+dsaberj // (c) 1990 (Japan)
+finalap2 // 90.8 Final Lap 2
+finalap2j // 90.8 Final Lap 2 (Japan)
+finalap3 // 92.9 Final Lap 3
+finalap3a // 92.9 Final Lap 3
+finalap3bl // (c) 1992 (bootleg)
+finalap3j // 92.9 Final Lap 3
+finalap3jc // (c) 1992
+finallap // 87.12 Final Lap
+finallapc // 87.12 Final Lap
+finallapd // 87.12 Final Lap
+finallapjb // 87.12 Final Lap
+finallapjc // 87.12 Final Lap
+finehour // (c) 1989 (Japan)
+fourtrax // 89.11
+gollygho // 91.7 Golly Ghost
+kyukaidk // (c) 1990 (Japan, new version)
+kyukaidko // (c) 1990 (Japan, old version)
+luckywld // (c) 1992
+luckywldj // (c) 1992
+marvland // (c) 1989 (US)
+marvlandj // (c) 1989 (Japan)
+metlhawk // (c) 1988
+metlhawkj // (c) 1988
+mirninja // (c) 1988 (Japan)
+ordyne // (c) 1988
+ordynej // (c) 1988
+phelios // (c) 1988
+pheliosj // (c) 1988 (Japan)
+rthun2 // (c) 1990
+rthun2j // (c) 1990 (Japan)
+sgunner // (c) 1990
+sgunner2 // (c) 1991 (US)
+sgunner2j // (c) 1991 (Japan)
+sgunnerj // (c) 1990
+suzuk8h2 // (c) 1993 (World)
+suzuk8h2j // (c) 1993 (Japan)
+suzuka8h // (c) 1992 (World)
+suzuka8hj // (c) 1992 (Japan)
+sws // (c) 1992 (Japan)
+sws92 // (c) 1992 (Japan)
+sws92g // (c) 1992 (Japan)
+sws93 // (c) 1993 (Japan)
+valkyrie // (c) 1989 (Japan)
+
+//@source:namcos21.cpp
+aircomb // (c) 1992 (US)
+aircombj // (c) 1992 (Japan)
+cybsled // (c) 1993 (World)
+cybsledj // (c) 1993 (Japan)
+driveyes // (c) 1992?
+solvalou // (c) 1991 (Japan)
+starblad // (c) 1991 (World)
+starbladj // (c) 1991 (Japan)
+winrun // (c) 1988
+winrun91 // (c) 1991
+winrungp // (c) 1989
+
+//@source:namcos22.cpp
+acedrvrw // (c) 1994
+adillor // (c) 1997
+airco22b // (c) 1995
+alpinerc // (c) 1994
+alpinerd // (c) 1994
+alpinesa // (c) 1996
+alpinr2a // (c) 1995
+alpinr2b // (c) 1995
+aquajet // (c) 1996
+cybrcomm // (c) 1995
+cybrcycc // (c) 1995
+dirtdash // (c) 1995
+propcycl // (c) 1996
+raveracj // (c) 1995
+raveracja // (c) 1995
+raveracw // (c) 1995
+ridgera2 // (c) 1994
+ridgera2j // (c) 1994
+ridgera2ja // (c) 1994
+ridgerac // (c) 1993
+ridgerac3 // (c) 1993
+ridgeracb // (c) 1993
+ridgeracf // (c) 1993
+ridgeracj // (c) 1993
+timecris // (c) 1995
+timecrisa // (c) 1995
+tokyowar // (c) 1996
+victlapw // (c) 1996
+
+//@source:namcos23.cpp
+500gp // March 1999
+aking // Angler King - March 1999
+crszone // Crisis Zone - December 1999
+crszonev2a // Crisis Zone - December 1999
+crszonev3a // Crisis Zone - December 1999
+crszonev3b // Crisis Zone - December 1999
+crszonev3b2 // Crisis Zone - December 1999
+crszonev4a // Crisis Zone - December 1999
+downhill // March 1998
+finfurl // July 1997
+finfurl2 // March 1999
+finfurl2j // March 1999
+gunwars // September 1998 - Rev B
+gunwarsa // September 1998 - Rev A
+motoxgo // November 1997
+motoxgov1a // November 1997
+motoxgov1a2 // November 1997
+motoxgov2a // November 1997
+panicprk // May 1998
+panicprkj // May 1998
+raceon // Race On - September 1998
+rapidrvr // December 1997
+rapidrvrp // December 1997 (prototype)
+rapidrvrv2c // December 1997
+timecrs2 // April 1998
+timecrs2v2b // April 1998
+timecrs2v4a // April 1998
+
+//@source:namcos86.cpp
+genpeitd // (c) 1986
+hopmappy // (c) 1986
+roishtar // (c) 1986
+rthunder // (c) 1986
+rthunder0 // (c) 1986
+rthunder1 // (c) 1986
+rthunder2 // (c) 1986
+rthundera //
+skykiddx // (c) 1986
+skykiddxo // (c) 1986
+wndrmomo // (c) 1987
+
+//@source:nanos.cpp
+nanos //
+
+//@source:naomi.cpp
+18wheelr // 2000.01 18 Wheeler Deluxe (Rev A)
+18wheels // 2000.01 18 Wheeler (Standard)
+18wheelu // 2000.01 18 Wheeler (Upright)
+airlbios // 1999.03 Airline Pilots (BIOS)
+alienfnt // 2001.09 Alien Front (Rev T)
+alienfnta // 2001.09 Alien Front (Rev A)
+alpilota // 1999.03 Airline Pilots (Rev A)
+alpiltdx // 1999.?? Airline Pilots Deluxe (Rev B)
+anmlbskt // 2005.01 Animal Basket (date is inside of ROM, probably earlier than release)
+asndynmt // 2007.07 Dynamite Deka EX - Asian dynamite
+ausfache // 2008.02.20 Akatsuki Blitzkampf Ausf. Achse
+awbios // 2002.?? Atomiswave BIOS
+azumanga // 2002.12 Azumanga Daiou Puzzle Bobble
+basschal // 2009.07 Sega Bass Challenge Version A
+basschalo // 2009.02 Sega Bass Challenge
+bdrdown // 2003.09 Border Down (Rev A)
+beachspi // 2001.07 Beach Spikers
+capsnk // 2000.09 Capcom vs. SNK Millennium Fight 2000 (Rev C)
+capsnka // 2000.08 Capcom vs. SNK Millennium Fight 2000 (Rev A)
+capsnkb // 2000.08 Capcom vs. SNK Millennium Fight 2000
+cfield // 2004.06 Chaos Field
+chocomk // 2002.06 Musapey's Choco Marker (Rev A)
+claychal // 2008.11 Sega Clay Challenge
+cleoftp // 2002.05 Cleopatra Fortune Plus
+clubk2k3 // 2003.?? Club Kart: European Session (2003, Rev A)
+clubk2kp // 2003.?? Club Kart: European Session (2003, prototype)
+clubkcyc // 2003.?? Club Kart Cycraft Edition (Rev A)
+clubkprz // 2003.?? Club Kart Prize
+clubkpzb // 2004.01.23 Club Kart Prize Ver. B (strings in the EPROM indicate a build date of Jan. 23, 2004 for the game's program)
+clubkrt // 2001.06 Club Kart: European Session (Rev D)
+clubkrtc // 2001.?? Club Kart: European Session (Rev C)
+clubkrto // 2001.06 Club Kart: European Session
+confmiss // 2000.10.11 Confidential Mission // First GD-ROM game?
+crackndj // 2000.10 Crackin' DJ
+crakndj2 // 2001.06 Crackin' DJ Part 2
+crzytaxi // 1999.02 Crazy Taxi
+csmash // 2000.?? Cosmic Smash
+csmasho // 2000.?? Cosmic Smash (original)
+cspike // 2000.10 Gun Spike / Cannon Spike
+cvs2gd // 2001.07.05 Capcom Vs. SNK 2 Millionaire Fighting 2001 (Rev A)
+cvsgd // 2001.05 Capcom Vs. SNK Millennium Fight 2000 Pro
+deathcox // 2000.10 Death Crimson OX
+demofist // 2003.06 Demolish Fist
+derbyo2k // 2000.06 Derby Owners Club 2000 Ver.2 (Rev A)
+derbyoc // 1999.10 Derby Owners Club (Rev B)
+derbyoc2 // 2001.10 Derby Owners Club II (Rev B)
+derbyocw // 2001.?? Derby Owners Club World Edition (Rev D)
+dirtypig // 2004.09 Dirty Pig Skin Football
+doa2 // 1999.11 Dead or Alive 2
+doa2m // 2000.01 Dead or Alive 2 Millennium
+dolphin // 2003.08 Dolphin Blue
+dragntr2 // 2004.?? Dragon Treasure 2 (Rev A)
+dragntr3 // 2005.11 Dragon Treasure 3 (Rev A)
+drbyocwc // 2001.?? Derby Owners Club World Edition (Rev C)
+dybb99 // 1999.11 Dynamite Baseball '99 (Rev B)
+dybbnao // 1998.12 Dynamite Baseball NAOMI
+dygolf // 2001.04.27 Dynamic Golf / Virtua Golf (Rev A)
+f355 // 1999.07 F355 Challenge Deluxe
+f355bios // 1999.08 F355 Challenge Twin (BIOS)
+f355dlx // 1999.07 F355 Challenge Deluxe (BIOS)
+f355twin // 1999.07 F355 Challenge Twin
+f355twn2 // 2001.01 F355 Challenge 2 Twin
+fotns // 2005.12 Hokuto no Ken
+ftspeed // 2004.09 Faster than Speed
+ggisuka // 2003.12 Guilty Gear Isuka
+ggram2 // 1999.04 Giant Gram: All Japan Pro Wrestling 2
+ggx // 2000.07 Guilty Gear X
+ggx15 // 2003.03 Guilty Gear X Ver.1.5
+ggxx // 2002.05 Guilty Gear XX
+ggxxac // 2006.11 Guilty Gear XX Accent Core
+ggxxrl // 2003.03 Guilty Gear XX # Reload (Rev A)
+ggxxrlo // 2003.02 Guilty Gear XX # Reload
+ggxxsla // 2005.09 Guilty Gear XX Slash (Rev A)
+gram2000 // 2000.09 Giant Gram 2000
+gundmct // 2001.03 Mobile Suit Gundam: Federation Vs. Zeon (cartridge)
+gundmgd // 2001.03 Mobile Suit Gundam: Federation Vs. Zeon (GD-ROM)
+gundmxgd // 2001.09 Mobile Suit Gundam: Federation Vs. Zeon DX
+gunsur2 // 2001.07 Gun Survivor 2 Biohazard Code: Veronica (Asia, BHF2 Ver.E)
+gunsur2j // 2001.07 Gun Survivor 2 Biohazard Code: Veronica (Japan, BHF1 Ver.E)
+gwing2 // 2000.?? Giga Wing 2
+hmgeo // 2001.06 Heavy Metal Geomatrix (Rev B)
+hod2bios // 1998.11 The House of the Dead 2 (BIOS)
+hopper // 2002.?? SWP Hopper Board
+hotd2 // 1998.11 The House of the Dead 2
+hotd2o // 1998.11 The House of the Dead 2 (original)
+hotd2p // 1998.11 The House of the Dead 2 (prototype)
+ikaruga // 2001.12 Ikaruga
+illvelo // 2008.06 Illvelo (Illmatic Envelope)
+inidv3ca // 2006.?? Initial D Arcade Stage Ver. 3 Cycraft Edition (Rev A)
+inidv3cy // 2006.?? Initial D Arcade Stage Ver. 3 Cycraft Edition (Rev B)
+initd // 2002.03 Initial D Arcade Stage (Japan) (Rev B)
+initdexp // 2002.07.18 Initial D Arcade Stage (Export) (Rev A)
+initdexpo // 2002.?? Initial D Arcade Stage (Export)
+initdo // 2002.03 Initial D Arcade Stage (Japan)
+initdv2e // 2002.12 Initial D Arcade Stage Ver. 2 (export)
+initdv2j // 2003.05.27 Initial D Arcade Stage Ver. 2 (Japan) (Rev B)
+initdv2jo // 2002.12 Initial D Arcade Stage Ver. 2 (Japan)
+initdv3e // 2004.05.18 Initial D Arcade Stage Ver. 3 (Export)
+initdv3j // 2004.01.30 Initial D Arcade Stage Ver. 3 (Japan) (Rev C)
+initdv3jb // 2004.01 Initial D Arcade Stage Ver. 3 (Japan) (Rev B)
+inunoos // 2001.10 Inu No Osanpo / Dog Walking (Rev A)
+jambo // 1999.09 Jambo! Safari (Rev A)
+jingystm // 2006.09 Jingi Storm
+karous // 2006.11 Karous
+keyboard // 2001.11 La Keyboard
+kick4csh // 2004.?? Kick '4' Cash
+kingrt66 // 2002.02 The King of Route 66 (Rev A)
+kofnw // 2004.07 The King of Fighters Neo Wave
+kofnwj // 2004.07 The King of Fighters Neo Wave (Japan)
+kofxi // 2005.10 The King of Fighters XI
+kov7sprt // 2003.11 Knights of Valour - The Seven Sprits
+kurucham // 2006.03 Kurukuru Chameleon
+lupinsho // 2001.12 Lupin the Third: the Shooting
+luptype // 2002.04 Lupin The Third - The Typing (Rev A)
+mamonoro // 2008.07 Mamoru-kun wa Norowarete Shimatta!
+manicpnc // 2007.07 Manic Panic Ghosts!
+marstv // 1999.12 Mars TV
+maxspeed // 2002.12 Maximum Speed
+mazan // 2002.07 Mazan: Flash of the Blade (US, MAZ3 Ver.A)
+mazana // 2002.07 Mazan: Flash of the Blade (Asia, MAZ2 Ver.A)
+mbaa // 2008.12 Melty Blood Actress Again Version A (Rev A)
+mbaao // 2008.09 Melty Blood Actress Again
+meltyb // 2007.03 Melty Blood Act Cadenza Version B2 (Rev A) // Last GD-ROM game?
+meltybld // 2005.08 Melty Blood Act Cadenza Ver. A (Rev C)
+meltyblo // 2005.03 Melty Blood Act Cadenza
+meltybo // 2006.12 Melty Blood Act Cadenza Version B
+moeru // 2002.12 Moeru Casinyo
+mok // 2002.03.06 The Maze of the Kings
+monkeyba // 2001.05 Monkey Ball
+mslug6 // 2006.02 Metal Slug 6
+mtkob2 // 2003.02 MushiKing The King Of Beetle
+mushi2eo // 2005.?? Mushiking The King Of Beetles II ENG (Ver. 1.001)
+mushi2k5 // 2005.?? MushiKing The King Of Beetle 2K5 1st
+mushik2e // 2005.?? Mushiking The King Of Beetles II ENG (Ver. 2.001)
+mvsc2 // 2000.03 Marvel Vs. Capcom 2 New Age of Heroes (Rev A)
+naomi // 1998.?? Naomi BIOS
+naomi2 // 2001.?? Naomi 2 BIOS
+naomigd // 2001.?? Naomi GD-ROM Bios
+ndcfboxa // 2009.04.01 DIMM Firmware Updater for CF-BOX (Rev A)
+ngbc // 2005.07 NeoGeo Battle Colloseum
+ngbcj // 2005.07 NeoGeo Battle Colloseum (Japan)
+ngdup23a // DIMM Firmware Updater (Rev A)
+ngdup23c // DIMM Firmware Updater (Rev C)
+ngdup23e // DIMM Firmware Updater (Rev E)
+ninjaslt // 2000.11 Ninja Assault (World, NJA4 Ver.A)
+ninjaslta // 2000.11 Ninja Assault (Asia, NJA2 Ver.A)
+ninjasltj // 2000.11 Ninja Assault (Japan, NJA1 Ver.A)
+ninjasltu // 2000.11 Ninja Assault (US, NJA3 Ver.A)
+oinori // 2003.08 Oinori-daimyoujin Matsuri
+otrigger // 1999.11 OutTrigger
+pjustic // 2000.12 Moero! Justice Gakuen / Project Justice
+pokasuka // 2007.07 Pokasuka Ghost!
+pstone // 1999.02 Power Stone
+pstone2 // 2000.04 Power Stone 2
+psyvar2 // 2003.11 Psyvariar 2 - The Will To Fabricate
+puyoda // 1999.12 Puyo Puyo Da!
+puyofev // 2003.11 Puyo Puyo Fever
+puyofevp // 2003.?? Puyo Puyo Fever (prototype ver 0.01)
+qmegamis // 2000.05 Quiz Ah Megamisama
+quizqgd // 2002.?? Quiz Keitai Q mode
+radirgy // 2005.12.04 Radirgy (Rev A)
+radirgyn // 2009.06 Radirgy Noa
+radirgyo // 2005.10 Radirgy
+rangrmsn // 2004.03 Ranger Mission
+rhytngk // 2007.09 Rhythm Tengoku
+ringout // 1999.06 Ring Out 4x4
+rumblef // 2004.03 The Rumble Fish
+rumblef2 // 2005.03 The Rumble Fish 2
+rumblefp // 2004.02 The Rumble Fish (prototype)
+rumblf2p // 2005.01 The Rumble Fish 2 (prototype)
+salmankt // 2004.06 Salary Man Kintarou Net Select
+samba // 1999.12 Samba de Amigo (Rev B)
+samba2k // 2000.12 Samba de Amigo Ver.2000
+sambap // 1999.?? Samba de Amigo (prototype)
+samsptk // 2005.09 Samurai Spirits Tenkaichi Kenkakuden
+senko // 2005.08 Senko no Ronde (Rev A)
+senkoo // 2005.04 Senko no Ronde
+senkosp // 2006.08 Senkou no Rondo SP
+sfz3ugd // 2001.02 Street Fighter ZERO3 Upper
+sgtetris // 1999.10 Sega Tetris
+shaktam // 2000.12.28 Shakatto Tambourine (Rev B)
+shaktamb // 2001.10.17 Shakatto Tambourine Cho Powerup Chu (2K1 AUT)
+shaktmsp // 2001.04.04 Shakatto Tambourine Motto Norinori Shinkyoku Tsuika (2K1 SPR)
+shangril // 1999.08 Dengen Tenshi Taisen Janshi Shangri-la
+shikgam2 // 2003.04 Shikigami No Shiro II / The Castle of Shikigami II
+shootopl // 2002.?? Shootout Pool
+shootpl // 2003.?? Shootout Pool The Medal / Shootout Pool Prize (Rev A)
+shootplm // 2004.?? Shootout Pool The Medal Ver. B / Shootout Pool Prize Ver. B
+sl2007 // 2007.07 Shooting Love
+slasho // 2000.07 Slashout
+slashout // 2000.?? Slashout
+smarinef // 2000.03 Sega Marine Fishing
+smlg99 // 1999.09 Super Major League 99
+soulsurf // 2002.07 Soul Surfer
+spawn // 1999.?? Spawn In the Demon's Hand
+spkrbtl // 2001.07 Spikers Battle
+sprtjam // 2000.11.13 Sports Jam
+sprtshot // 2002.12 Sports Shooting USA
+ss2005 // 2005.04 Super Shanghai 2005 (Rev A)
+ss2005o // 2005.03 Super Shanghai 2005
+sstrkfgt // 2000.10 Sega Strike Fighter (Rev A, set 1)
+sstrkfgta // 2000.10 Sega Strike Fighter (Rev A, set 2)
+starhrcl // 2000.11.28 Star Horse (satellite)
+starhrct // 2000.12 Star Horse (server)
+starhrpr // 2009.07.27 Star Horse Progress Returns (satellite)
+starhrse // 2000.?? Star Horse (big screens)
+starhrsp // 2003.12.01 Star Horse Progress (satellite) (Rev A)
+starseek // 2001.07 Dokidoki Idol Star Seeker
+suchie3 // 1999.09 Idol Janshi Su-Chi-Pi 3
+takoron // 2006.12.16 Noukone Puzzle Takoron
+tduno // 1999.08 Touch de UNO! / Unou Nouryoku Check Machine
+tduno2 // 2000.02 Touch de UNO! 2
+tetkiwam // 2004.06 Tetris Kiwamemichi (Arcade TV Game List - P.88, Right, 11 from bottom)
+tokyobus // 1999.?? Tokyo Bus Guide (Rev A)
+totd // 2000.01 The Typing of the Dead (Rev A)
+totdo // 2000.01 The Typing of the Dead
+toukon4 // 2000.04 Shin Nihon Prowrestling Toukon Retsuden 4 Arcade Edition (TRF1 Ver. A)
+toyfight // 1999.09 Toy Fighter
+trgheart // 2006.05 Trigger Heart Exelica (Rev A)
+trizeal // 2004.09 Trizeal
+undefeat // 2005.10 Under Defeat
+usagiym // 2003.06 Usagi Yamashiro Mahjong Hen
+vathlete // 2002.03 Virtua Athletics / Virtua Athlete
+vf4 // 2002.01.31 Virtua Fighter 4 (Rev C) (cartridge)
+vf4b // 2001.08.20 Virtua Fighter 4 (Rev B) (cartridge)
+vf4cart // 2001.08.02 Virtua Fighter 4 (cartridge)
+vf4evo // 2002.12 Virtua Fighter 4 Evolution Ver.B
+vf4evoa // 2002.08 Virtua Fighter 4 Evolution
+vf4evoct // 2002.08 Virtua Fighter 4 Evolution (cartridge)
+vf4o // 2001.08.02 Virtua Fighter 4 (GD-ROM)
+vf4tuned // 2004.12 Virtua Fighter 4 Final Tuned (Rev F)
+vf4tuneda // 2004.09 Virtua Fighter 4 Final Tuned (Rev A)
+vf4tunedd // 2004.10 Virtua Fighter 4 Final Tuned (Rev D)
+vfurlong // 2005.03 Net Select Keiba Victory Furlong
+virnba // 2000.02 Virtua NBA
+virnbao // 2000.02 Virtua NBA (original)
+virnbap // 2000.02 Virtua NBA (prototype)
+vonot // 2000.06 Virtual-on Oratorio Tangram M.S.B.S. Ver.5.66 2000 Edition
+vs2_2k // 1999.08 Virtua Striker 2 version 2000 (Rev C)
+vstrik3 // 2001.04.06 Virtua Striker 3 Ver. 2002
+vstrik3c // 2001.04 Virtua Striker 3 (Rev B) (cartridge)
+vstrik3co // 2001.04 Virtua Striker 3 (cartridge)
+vtenis2c // 2001.10 Virtua Tennis 2 / Power Smash 2 (Rev A) (cart)
+vtennis // 1999.12 Virtua Tennis / Power Smash (cartridge)
+vtennis2 // 2001.08.27 Virtua Tennis 2 / Power Smash 2 (GD-ROM)
+vtennisg // 1999.?? Virtua Tennis / Power Smash (GD-ROM)
+wccf212e // 2004.12 World Club Champion Football Serie A 2002-2003 Ver.2.12
+wccf234j // 2004.12 World Club Champion Football Serie A 2002-2003 Ver.2.34
+wccf310j // 2005.06 World Club Champion Football European Clubs 2004-2005
+wccf322e // 2005.11 World Club Champion Football European Clubs 2004-2005 Ver.3.22
+wccf331e // 2005.06 World Club Champion Football European Clubs 2004-2005 Ver.1.1
+wccf420e // 2006.08 World Club Champion Football European Clubs 2005-2006
+wldkicks // 2000.03 World Kicks (US, WK3 Ver.A)
+wldkicksa // 2000.03 World Kicks (Asia, WK2 Ver.A)
+wldkicksj // 2000.03 World Kicks PCB (Japan, WKC1 Ver.A)
+wldrider // 2001.05 Wild Riders
+wrungp // 2001.08 Wave Runner GP
+wsbbgd // 2001.06 Super Major League / World Series Baseball
+wwfroyal // 2000.11 WWF Royal Rumble
+xtrmhnt2 // 2006.09 Extreme Hunting 2 Tournament Edition
+xtrmhunt // 2004.09 Extreme Hunting
+zerogu2 // 2001.05 Zero Gunner 2
+zombrvn // 1999.03 Zombie Revenge (Rev A)
+zombrvno // 1999.02 Zombie Revenge
+zunou // 2006.07 Touch de Zunou
+
+//@source:nascom1.cpp
+nascom1 // 1978 Nascom 1
+nascom2 // 1979 Nascom 2
+nascom2c // 1980 Nascom 2 (CP/M)
+
+//@source:naughtyb.cpp
+naughtyb // (c) 1982 Jaleco
+naughtyba // bootleg
+naughtybc // (c) 1982 Jaleco + Cinematronics
+popflame // (c) 1982 Jaleco
+popflamea // (c) 1982 Jaleco
+popflameb // (c) 1982 Jaleco
+popflamen // (c) 1982 Jaleco
+trvgns // bootleg
+trvmstr // (c) 1985 Enerdyne Technologies Inc.
+trvmstra // (c) 1985 Enerdyne Technologies Inc.
+trvmstrb // (c) 1985 Enerdyne Technologies Inc.
+trvmstrc // (c) 1985 Enerdyne Technologies Inc.
+
+//@source:nbmj8688.cpp
+apparel // (c) 1986 Central Denshi
+barline // (c) 1986?
+bijokkog // (c) 1988
+bijokkoy // (c) 1987
+citylove // (c) 1986
+crystal2 // (c) 1986
+crystalg // (c) 1986
+housemn2 // (c) 1987
+housemnq // (c) 1987
+idhimitu // (c) 1989 Digital Soft
+iemoto // (c) 1987
+iemotom // (c) 1987
+kaguya // (c) 1988 MIKI SYOUJI
+kaguya2 // (c) 1989 MIKI SYOUJI
+kaguya2f // (c) 1989 MIKI SYOUJI
+kanatuen // (c) 1988 Panac
+korinai // (c) 1988
+korinaim // (c) 1988
+kyuhito // (c) 1988 ROLLER TRON
+livegal // (c) 1987
+mcitylov // (c) 1986
+mjcamera // (c) 1988 MIKI SYOUJI
+mjgaiden // (c) 1987 Central Denshi
+mjsikakb // (c) 1988
+mjsikakc // (c) 1988
+mjsikakd // (c) 1988
+mjsikaku // (c) 1988
+mmsikaku // (c) 1988
+nightlov // (c) 1986
+ojousan // (c) 1987
+ojousanm // (c) 1987
+orangec // (c) 1988 Daiichi Denshi
+orangeci // (c) 1988 Daiichi Denshi
+otonano // (c) 1988 Apple
+ryuuha // (c) 1987
+secolove // (c) 1986
+seiha // (c) 1987
+seiham // (c) 1987
+vipclub // (c) 1988 Daiichi Denshi
+
+//@source:nbmj8891.cpp
+abunai // (c) 1989
+bananadr // (c) 1989 DIGITAL SOFT
+chinmoku // (c) 1990
+club90s // (c) 1990
+club90sa // (c) 1990
+gionbana // (c) 1989
+hanamomb // (c) 1988
+hanamomo // (c) 1988
+hanaoji // (c) 1991
+hanaojia // (c) 1991
+hnageman // (c) 1990 Nichibutsu/AV Japan
+hnxmasev // (c) 1990 Nichibutsu/AV Japan
+lovehous // (c) 1990
+maiko // (c) 1990
+mgion // (c) 1989
+mgmen89 // (c) 1989
+mjcamerb // (c) 1989 MIKI SYOUJI
+mjfocus // (c) 1989
+mjfocusm // (c) 1989
+mjnanpaa // (c) 1989 BROOKS
+mjnanpas // (c) 1989 BROOKS
+mjnanpau // (c) 1989 BROOKS
+mladyhtr // (c) 1990
+mmaiko // (c) 1990
+mmcamera // (c) 1988 MIKI SYOUJI
+msjiken // (c) 1988
+omotesnd // (c) 1989
+pairsnb // (c) 1989
+pairsten // (c) 1989 System Ten
+peepshow // (c) 1989 AC
+scandal // (c) 1989
+scandalm // (c) 1989
+taiwanmb // (c) 1988
+telmahjn // (c) 1988
+
+//@source:nbmj8900.cpp
+ohpaipee // (c) 1990 Nichibutsu
+togenkyo // (c) 1990 Nichibutsu
+
+//@source:nbmj8991.cpp
+av2mj1bb // (c) 1991 MIKI SYOUJI/AV JAPAN
+av2mj2rg // (c) 1991 MIKI SYOUJI/AV JAPAN
+finalbny // (c) 1991
+galkaika // (c) 1989 Nichibutsu/T.R.TEC
+galkoku // (c) 1989 Nichibutsu/T.R.TEC
+hyouban // (c) 1989 Nichibutsu/T.R.TEC
+mcontest // (c) 1989
+mjgottub // (c) 1991
+mjlstory // (c) 1991
+ntopstar // (c) 1990
+pstadium // (c) 1990
+qmhayaku // (c) 1991
+tokimbsj // (c) 1989
+tokyogal // (c) 1989
+triplew1 // (c) 1989
+triplew2 // (c) 1990
+uchuuai // (c) 1989
+vanilla // (c) 1991
+
+//@source:nbmj9195.cpp
+bakuhatu // (c) 1991
+cmehyou // (c) 1992 Nichibutsu/Kawakusu
+gal10ren // (c) 1993 FUJIC
+imekura // (c) 1994 SPHINX/AV JAPAN
+janbari // (c) 1992 Nichibutsu/Yubis/AV JAPAN
+jituroku // (c) 1993 Windom
+koinomp // (c) 1992
+mjanbari // (c) 1992 Nichibutsu/Yubis/AV JAPAN
+mjegolf // (c) 1994 FUJIC/AV JAPAN
+mjgottsu // (c) 1991
+mjkoiura // (c) 1992
+mjlaman // (c) 1993 Nichibutsu/AV JAPAN
+mjuraden // (c) 1992 Nichibutsu/Yubis
+mkeibaou // (c) 1993
+mkoiuraa // (c) 1992
+mmehyou // (c) 1992 Nichibutsu/Kawakusu
+mscoutm // (c) 1994 SPHINX/AV JAPAN
+ngpgal // (c) 1991
+otatidai // (c) 1995 SPHINX
+pachiten // (c) 1993 Nichibutsu/MIKI SYOUJI/AV JAPAN
+patimono // (c) 1992
+psailor1 // (c) 1994 SPHINX
+psailor2 // (c) 1994 SPHINX
+renaiclb // (c) 1993 FUJIC
+sailorwa // (c) 1993
+sailorwr // (c) 1993
+sailorws // (c) 1993
+shabdama // (c) 199?
+ultramhm // (c) 1993 Apple
+wcatcher // (c) 1993
+yosimotm // (c) 1994 Nichibutsu/Yoshimoto Kougyou
+yosimoto // (c) 1994 Nichibutsu/Yoshimoto Kougyou
+
+//@source:nc.cpp
+dw225 //
+nc100 // 1992 NC100
+nc150 // 1992 NC150
+nc200 // 1993 NC200
+
+//@source:nemesis.cpp
+blkpnthr // GX604 (c) 1987 (Japan)
+bubsys //
+citybomb // GX787 (c) 1987 (World)
+citybombj // GX787 (c) 1987 (Japan)
+gradius // GX456 (c) 1985
+gwarrior // GX578 (c) 1985
+hcrash // GX790 (c) 1987
+hcrashc // GX790 (c) 1987
+kittenk // GX712 (c) 1988
+konamigt // GX561 (c) 1985
+lifefrce // GX587 (c) 1986 (US)
+lifefrcej // GX587 (c) 1986 (Japan)
+nemesis // GX456 (c) 1985
+nemesisuk // GX456 (c) 1985
+nyanpani // GX712 (c) 1988 (Japan)
+rf2 // GX561 (c) 1985
+salamand // GX587 (c) 1986
+salamandj // GX587 (c) 1986
+twinbee // GX412 (c) 1985
+
+//@source:neogeo.cpp
+neogeo //
+
+//@source:neogeo_noslot.cpp
+2020bb // 0030 (c) 1991 SNK / Pallas
+2020bba // 0030 (c) 1991 SNK / Pallas
+2020bbh // 0030 (c) 1991 SNK / Pallas
+3countb // 0043 (c) 1993 SNK
+alpham2 // 0007 (c) 1991 SNK
+alpham2p // 0007 (c) 1991 SNK (prototype)
+androdun // 0049 (c) 1992 Visco
+aodk // 0074 (c) 1994 ADK / SNK
+aof // 0044 (c) 1992 SNK
+aof2 // 0056 (c) 1994 SNK
+aof2a // 0056 (c) 1994 SNK
+aof3 // 0096 (c) 1996 SNK
+aof3k // 0196 Censored Korean release of aof3
+b2b // 0071 (c) 2000 Visco (released by NCI in 2010)
+bakatono // 0036 (c) 1991 Monolith Corp.
+bangbead // 0259 (c) 2000 Visco
+bjourney // 0022 (c) 1990 Alpha Denshi Co.
+blazstar // 0239 (c) 1998 Yumekobo
+breakers // 0230 (c) 1996 Visco
+breakrev // 0245 (c) 1998 Visco
+bstars // 0002 (c) 1990 SNK
+bstars2 // 0041 (c) 1992 SNK
+bstarsh // 0002 (c) 1990 SNK
+burningf // 0018 (c) 1991 SNK
+burningfh // 0018 (c) 1991 SNK
+burningfp // 0018 (c) 1991 SNK (prototype)
+crsword // 0037 (c) 1991 Alpha Denshi Co.
+ct2k3sa // bootleg of kof2001
+ct2k3sp // bootleg of kof2001
+cthd2003 // bootleg of kof2001
+ctomaday // 0249 (c) 1999 Visco
+cyberlip // 0010 (c) 1990 SNK
+diggerma // No Game ID (unlicensed), (c) 2000 Kyle Hodgetts, prototype
+doubledr // 0082 (c) 1995 Technos
+eightman // 0025 (c) 1991 SNK / Pallas
+fatfursp // 0058 (c) 1993 SNK
+fatfurspa // 0058 (c) 1993 SNK
+fatfury1 // 0033 (c) 1991 SNK
+fatfury2 // 0047 (c) 1992 SNK
+fatfury3 // 0069 (c) 1995 SNK
+fbfrenzy // 0034 (c) 1992 SNK
+fightfev // 0060 (c) 1994 Viccom
+fightfeva // 0060 (c) 1994 Viccom
+flipshot // 0247 (c) 1998 Visco
+fswords // 0187 Korean hack of samsho3
+galaxyfg // 0078 (c) 1995 Sunsoft
+ganryu // 0252 (c) 1999 Visco
+garou // 0253 (c) 1999 SNK
+garoubl // bootleg
+garouh // 0253 (c) 1999 SNK
+garoup // 0253 (c) 1999 SNK
+ghostlop // 0228 GhostLop (prototype) 1996? Data East
+goalx3 // 0209 (c) 1995 Visco
+gowcaizr // 0094 (c) 1995 Technos
+gpilots // 0020 (c) 1991 SNK
+gpilotsh // 0020 (c) 1991 SNK
+gururin // 0067 (c) 1994 Face
+ironclad // 0220 (c) 1996 Saurus - Choutetsu Brikin'ger - Iron clad (protoype)
+ironclado // 0220 (c) 1996 Saurus - Choutetsu Brikin'ger - Iron clad (protoype, older)
+irrmaze // 0236 (c) 1997 SNK / Saurus
+janshin // 0048 (c) 1994 Aicom
+jockeygp //
+jockeygpa //
+joyjoy // 0021 (c) 1990 SNK
+kabukikl // 0092 (c) 1995 Hudson
+karnovr // 0066 (c) 1994 Data East Corporation
+kf10thep // bootleg of kof2002
+kf2k2mp // bootleg
+kf2k2mp2 // bootleg
+kf2k2pla // bootleg
+kf2k2pls // bootleg
+kf2k3bl // bootleg
+kf2k3bla // bootleg
+kf2k3pcb // 0271 (c) 2003 Playmore - JAMMA PCB
+kf2k3pl // bootleg
+kf2k3upl // bootleg
+kf2k5uni // bootleg of kof2002
+kizuna // 0216 (c) 1996 SNK
+kizuna4p // 0216 (c) 1996 SNK - same cartridge as kizuna, needs extension board and a compatible MVS to enable 4p mode
+kof10th // bootleg of kof2002
+kof2000 // 0257 (c) 2000 SNK
+kof2000n // 0257 (c) 2000 SNK
+kof2001 // 0262 (c) 2001 Eolith / SNK
+kof2001h // 0262 (c) 2001 Eolith / SNK
+kof2002 // 0265 (c) 2002 Eolith / Playmore
+kof2002b // bootleg
+kof2003 // 0271 (c) 2003 Playmore
+kof2003h // 0271 (c) 2003 Playmore
+kof2k4se // bootleg of kof2002
+kof94 // 0055 (c) 1994 SNK
+kof95 // 0084 (c) 1995 SNK
+kof95a // 0084 (c) 1995 SNK, alternate board
+kof95h // 0084 (c) 1995 SNK
+kof96 // 0214 (c) 1996 SNK
+kof96h // 0214 (c) 1996 SNK
+kof97 // 0232 (c) 1997 SNK
+kof97h // 0232 (c) 1997 SNK
+kof97k // 0232 (c) 1997 SNK
+kof97oro // bootleg of kof97
+kof97pls // bootleg of kof97
+kof98 // 0242 (c) 1998 SNK
+kof98a // 0242 (c) 1998 SNK, alternate board
+kof98h // 0242 (c) 1998 SNK
+kof98k // 0242 (c) 1998 SNK
+kof98ka // 0242 (c) 1998 SNK
+kof99 // 0251 (c) 1999 SNK
+kof99e // 0251 (c) 1999 SNK
+kof99h // 0251 (c) 1999 SNK
+kof99k // 0152 (c) 1999 SNK
+kof99p // 0251 (c) 1999 SNK
+kog // bootleg of kof97
+kotm // 0016 (c) 1991 SNK
+kotm2 // 0039 (c) 1992 SNK
+kotm2p // 0039 (c) 1992 SNK (prototype)
+kotmh // 0016 (c) 1991 SNK
+lans2004 // bootleg of shocktr2
+lastblad // 0234 (c) 1997 SNK
+lastbladh // 0234 (c) 1997 SNK
+lastbld2 // 0243 (c) 1998 SNK
+lastsold // 0196 Censored Korean release of lastblad
+lbowling // 0019 (c) 1990 SNK
+legendos // 0029 (c) 1991 SNK
+lresort // 0024 (c) 1992 SNK
+magdrop2 // 0221 (c) 1996 Data East Corporation
+magdrop3 // 0233 (c) 1997 Data East Corporation
+maglord // 0005 (c) 1990 Alpha Denshi Co.
+maglordh // 0005 (c) 1990 Alpha Denshi Co.
+mahretsu // 0004 (c) 1990 SNK
+marukodq // 0206 (c) 1995 Takara
+matrim // 0266 (c) 2002 Atlus
+matrimbl // bootleg
+miexchng // 0231 (c) 1997 Face
+minasan // 0027 (c) 1990 Monolith Corp.
+mosyougi // 0203 (c) 1995 ADK / SNK
+ms4plus // bootleg
+ms5pcb // 0268 (c) 2003 Playmore
+ms5plus // bootleg
+mslug // 0201 (c) 1996 Nazca
+mslug2 // 0241 (c) 1998 SNK
+mslug3 // 0256 (c) 2000 SNK
+mslug3b6 // bootleg
+mslug3h // 0256 (c) 2000 SNK
+mslug4 // 0263 (c) 2002 Mega Enterprise
+mslug4h // 0263 (c) 2002 Mega Enterprise
+mslug5 // 0268 (c) 2003 Playmore
+mslug5h // 0268 (c) 2003 Playmore
+mslugx // 0250 (c) 1999 SNK
+mutnat // 0014 (c) 1992 SNK
+nam1975 // 0001 (c) 1990 SNK
+ncombat // 0009 (c) 1990 Alpha Denshi Co.
+ncombath // 0009 (c) 1990 Alpha Denshi Co.
+ncommand // 0050 (c) 1992 Alpha Denshi Co.
+neobombe // 0093 (c) 1997 Hudson
+neocup98 // 0244 (c) 1998 SNK
+neodrift // 0213 (c) 1996 Visco
+neomrdo // 0207 (c) 1996 Visco
+ninjamas // 0217 (c) 1996 ADK / SNK
+nitd // 0260 (c) 2000 Eleven / Gavaking
+nitdbl // bootleg
+overtop // 0212 (c) 1996 ADK
+panicbom // 0073 (c) 1994 Eighting / Hudson
+pbobbl2n // 0248 (c) 1999 Taito (SNK license)
+pbobblen // 0083 (c) 1994 Taito
+pbobblenb // bootleg
+pgoal // 0219 (c) 1996 Saurus
+pnyaa // 0267 (c) 2003 Aiky / Taito
+popbounc // 0237 (c) 1997 Video System Co.
+preisle2 // 0255 (c) 1999 Yumekobo
+pspikes2 // 0068 (c) 1994 Video System Co.
+pulstar // 0089 (c) 1995 Aicom
+puzzldpr // 0235 (c) 1997 Taito (Visco license)
+puzzledp // 0202 (c) 1995 Taito (Visco license)
+quizdai2 // 0042 (c) 1992 SNK
+quizdais // 0023 (c) 1991 SNK
+quizdaisk // 0123 (c) 1991 SNK
+quizkof // 0080 (c) 1995 Saurus
+quizkofk // 0080 (c) 1995 Saurus
+ragnagrd // 0218 (c) 1996 Saurus
+rbff1 // 0095 (c) 1995 SNK
+rbff1a // 0095 (c) 1995 SNK
+rbff2 // 0240 (c) 1998 SNK
+rbff2h // 0240 (c) 1998 SNK
+rbff2k // 0140 Censored Korean release of rbff2
+rbffspec // 0223 (c) 1996 SNK
+rbffspeck // 0124 (c) 1996 SNK
+ridhero // 0006 (c) 1990 SNK
+ridheroh // 0006 (c) 1990 SNK
+roboarmy // 0032 (c) 1991 SNK
+rotd // 0264 (c) 2002 Evoga
+s1945p // 0254 (c) 1999 Psikyo
+samsh5sp // 0272 (c) 2004 Playmore
+samsh5sph // 0272 (c) 2004 Playmore
+samsh5spho // 0272 (c) 2004 Playmore
+samsho // 0045 (c) 1993 SNK
+samsho2 // 0063 (c) 1994 SNK
+samsho2k // 0063 (c) 1994 SNK (Korean hack)
+samsho3 // 0087 (c) 1995 SNK
+samsho3h // 0087 (c) 1995 SNK
+samsho4 // 0222 (c) 1996 SNK
+samsho4k // Censored Korean release of samsho4
+samsho5 // 0270 (c) 2003 Playmore
+samsho5b // bootleg
+samsho5h // 0270 (c) 2003 Playmore
+samshoh // 0045 (c) 1993 SNK
+savagere // 0059 (c) 1995 SNK
+sbp // (c)2004 Vektorlogik
+sdodgeb // 0208 (c) 1996 Technos
+sengoku // 0017 (c) 1991 SNK
+sengoku2 // 0040 (c) 1993 SNK
+sengoku3 // 0261 (c) 2001 Noise Factory / SNK
+sengokuh // 0017 (c) 1991 SNK
+shocktr2 // 0246 (c) 1998 Saurus
+shocktro // 0238 (c) 1997 Saurus
+shocktroa // 0238 (c) 1997 Saurus
+socbrawl // 0031 (c) 1991 SNK
+socbrawlh // 0031 (c) 1991 SNK
+sonicwi2 // 0075 (c) 1994 Video System Co.
+sonicwi3 // 0097 (c) 1995 Video System Co.
+spinmast // 0062 (c) 1993 Data East Corporation
+ssideki // 0052 (c) 1992 SNK
+ssideki2 // 0061 (c) 1994 SNK
+ssideki3 // 0081 (c) 1995 SNK
+ssideki4 // 0215 (c) 1996 SNK
+stakwin // 0088 (c) 1995 Saurus
+stakwin2 // 0227 (c) 1996 Saurus
+strhoop // 0079 (c) 1994 Data East Corporation
+superspy // 0011 (c) 1990 SNK
+svc // 0269 (c) 2003 Playmore / Capcom
+svcboot // bootleg
+svcpcb // 0269 (c) 2003 Playmore / Capcom - JAMMA PCB
+svcpcba // 0269 (c) 2003 Playmore / Capcom - JAMMA PCB
+svcplus // bootleg
+svcplusa // bootleg
+svcsplus // bootleg
+tophuntr // 0046 (c) 1994 SNK
+tophuntrh // 0046 (c) 1994 SNK
+tpgolf // 0003 (c) 1990 SNK
+trally // 0038 (c) 1991 Alpha Denshi Co.
+turfmast // 0200 (c) 1996 Nazca
+twinspri // 0224 (c) 1996 ADK
+tws96 // 0086 (c) 1996 Tecmo
+viewpoin // 0051 (c) 1992 Sammy
+vliner //
+vlinero //
+wakuwak7 // 0225 (c) 1996 Sunsoft
+wh1 // 0053 (c) 1992 Alpha Denshi Co.
+wh1h // 0053 (c) 1992 Alpha Denshi Co.
+wh1ha // 0053 (c) 1992 Alpha Denshi Co.
+wh2 // 0057 (c) 1993 ADK
+wh2j // 0064 (c) 1994 ADK / SNK
+whp // 0090 (c) 1995 ADK / SNK
+wjammers // 0065 (c) 1994 Data East Corporation
+zedblade // 0076 (c) 1994 NMK
+zintrckb // 0211 hack - this is not a genuine MVS proto, its a bootleg made from the CD version
+zupapa // 0070 Zupapa - released in 2001, 1994 prototype probably exists
+
+//@source:neoprint.cpp
+98best44 //
+neoprint //
+npcartv1 //
+nprsp //
+
+//@source:neptunp2.cpp
+neptunp2 //
+
+//@source:nes.cpp
+dendy // Dendy (Classic russian famiclone)
+drpcjr // Bung Doctor PC Jr
+famicom // Nintendo Family Computer (a.k.a. Famicom)
+famitwin // Sharp Famicom Twin System
+fds // Nintendo Family Computer (a.k.a. Famicom) + Disk System add-on
+gchinatv // Golden China TV Game Centre (Chinese famiclone)
+m82 // Nintendo M82 Display Unit
+nes // Nintendo Entertainment System
+nespal // Nintendo Entertainment System PAL
+
+//@source:newbrain.cpp
+newbrain //
+newbraina //
+newbrainmd //
+
+//@source:news.cpp
+news // "Virus"??? ((c) 1993 Poby in ROM VIRUS.4)
+newsa // "Jeansole / Poby
+
+//@source:next.cpp
+next //
+nextct //
+nextctc //
+nexts //
+nexts2 //
+nextsc //
+nextst //
+nextstc //
+
+//@source:nexus3d.cpp
+acheart //
+acheartf // (c) 2006 Examu
+
+//@source:ng_aes.cpp
+aes // NeoGeo AES
+neocd // NeoGeo CD
+neocdz // NeoGeo CDZ
+neocdzj //
+
+//@source:ngen.cpp
+386i // 199?
+ngen // 1983
+ngenb38 // 1991
+
+//@source:ngp.cpp
+ngp // NeoGeo Pocket
+ngpc // NeoGeo Pocket Color
+
+//@source:nibble.cpp
+l9nibble // unknown Nibble game.
+
+//@source:nightgal.cpp
+ngalsumr // (c) 1985
+ngtbunny // (c) 1984
+nightgal // (c) 1984
+royalngt // (c) 1984 Royal Denshi
+royalqn //
+sexygal // (c) 1985
+sweetgal // (c) 1985
+
+//@source:ninjakd2.cpp
+arkarea // UPL-87007 (c) 1988 (Arcade TV Game List - P.67, Right, 2 from top)
+jt104 // hack?
+mnight // UPL-????? (c) 1987 distributed by Kawakus
+ninjakd2 // UPL-????? (c) 1987
+ninjakd2a // UPL-????? (c) 1987
+ninjakd2b // UPL-????? (c) 1987
+ninjakd2c // UPL-????? (c) 1987
+omegaf // UPL-89016 (c) 1989
+omegafs // UPL-89016 (c) 1989
+rdaction // UPL-87003?(c) 1987 + World Games license
+robokid // UPL-88013 (c) 1988
+robokidj // UPL-88013 (c) 1988
+robokidj2 // UPL-88013 (c) 1988
+
+//@source:ninjaw.cpp
+darius2 // C07 (c) 1989 Taito Corporation (Japan)
+ninjaw // B31 (c) 1987 Taito Corporation Japan (World)
+ninjawj // B31 (c) 1987 Taito Corporation (Japan)
+ninjawu // B31 (c) 1987 Taito America Corporation (US)
+
+//@source:nitedrvr.cpp
+nitedrvr // 006321 1976/10 [6502]
+
+//@source:niyanpai.cpp
+4psimasy // (c) 1994
+mhhonban // (c) 199?
+musobana // (c) 1995
+niyanpai // (c) 1996
+zokumahj // (c) 199?
+
+//@source:nmg5.cpp
+7ordi // (c) 2002 Yun Sung
+garogun // (c) 2000 Yun Sung
+nmg5 // (c) 1998 Yun Sung
+nmg5a // (c) 1998 Yun Sung
+nmg5e // (c) 1998 Yun Sung
+pclubys // (c) 2000 Yun Sung
+pclubysa // (c) 2000 Yun Sung
+searchey // (c) 1999 Yun Sung (English, Korean, Japanese & Spanish)
+searcheya // (c) 1999 Yun Sung (English & Korean only)
+searchp2 // (c) 1999 Yun Sung
+wondstck // (c) ???? Yun Sung
+wondstcka // (c) ???? Yun Sung
+
+//@source:nmk16.cpp
+acrobatm // UPL-91073 (c) 1991 UPL + Taito license
+airattck // (c) 1996 Comad
+airattcka // (c) 1996 Comad
+arcadian // (c) 1994 NMK
+atombjt // bootleg
+bigbang // UPL-93091 (c) 1993 NMK
+bioship // UPL-90062 (c) 1990 UPL + American Sammy license
+bjtwin // UPL-93087 (c) 1993 NMK
+bjtwina // UPL-93087 (c) 1993 NMK
+bjtwinp // UPL-93087 (c) 1993 NMK
+blkheart // UPL-91069
+blkheartj // UPL-91069
+bubl2000 // (c) 1998 Tuning
+cactus // bootleg
+dolmen // (c) 1995
+firehawk // (c) 2001 ESD
+firehawkv // (c) 2001 ESD
+grdnstrm // (c) 1998 Apples Industries license
+grdnstrmg // (c) 1998
+grdnstrmj // (c) 1998 (Japan)
+grdnstrmk // (c) 1998 (Korea)
+grdnstrmv // (c) 1998 Apples Industries license
+gunnail // (c) 1993 NMK / Tecmo
+hachamf // (c) 1991 NMK
+hachamfb // bootleg
+hotbubl // (c) 1998 Pandora (Korea, Nudes)
+hotbubla // (c) 1998 Pandora (Korea)
+macross // (c) 1992 Banpresto
+macross2 // (c) 1993 Banpresto
+macross2g // review build
+mangchi // (c) 2000
+manybloc // (c) 1991 Bee-Oh
+mustang // UPL-90058 (c) 1990 UPL
+mustangb // bootleg
+mustangb2 // TAB Austria bootleg
+mustangs // UPL-90058 (c) 1990 UPL + Seoul Trading
+nouryoku // (c) 1995 Tecmo
+nouryokup // (c) 1995 Tecmo
+popspops // (c) 1999
+raphero // (c) 1994 Media Trading Corp
+redfoxwp2 // (c) 1998 (China)
+redfoxwp2a // (c) 1998 (China)
+redhawk // (c) 1997 New Vision Ent. license
+redhawkb // (c) 1997
+redhawke // (c) 1997 Excellent Co., Ltd license
+redhawki // (c) 1997 Haedong Corp. license
+redhawkk // (c) 1997
+sabotenb // (c) 1992 NMK / Tecmo
+sabotenba // (c) 1992 NMK / Tecmo
+sbsgomo // UPL-90062 (c) 1990 UPL
+spec2k // (c) 2000 Yonatech
+spec2kh // (c) 2000 Yonatech
+ssmissin // (c) 1992 Comad
+stagger1 // (c) 1998
+strahl // UPL-91074 (c) 1992 UPL (Japan)
+strahla // UPL-91074 (c) 1992 UPL (Japan)
+tdragon // (c) 1991 NMK / Tecmo
+tdragon1 // (c) 1991 NMK / Tecmo
+tdragon2 // UPL-93091 (c) 1993 NMK
+tdragon2a // UPL-93091 (c) 1993 NMK
+tdragonb // bootleg
+tharrier // UPL-89053 (c) 1989 UPL
+tharrieru // UPL-89053 (c) 1989 UPL + American Sammy license
+twinactn // (c) 1995 - bootleg of US AFF Mustang
+vandyke // UPL-90064 (c) UPL
+vandykeb // bootleg
+vandykejal // UPL-90064 (c) Jaleco
+vandykejal2 // UPL-90064 (c) Jaleco
+
+//@source:nokia_3310.cpp
+noki3210 //
+noki3310 //
+noki3330 //
+noki3410 //
+noki5210 //
+noki6210 //
+noki6250 //
+noki7110 //
+noki8210 //
+noki8250 //
+noki8850 //
+noki8890 //
+
+//@source:norautp.cpp
+bjpoker // (c) M. Kramer Inc.
+cgip30cs // (c) 1999, CGI
+df_djpkr // (c) DellFern Ltd.
+dphl // (c) 1983 M. Kramer Inc.
+dphla // unknown
+dphljp // unknown
+dphlunka // SMS Manufacturing Corp?
+dphlunkb // SMS Manufacturing Corp?
+drhl // (c) 1986 Drew, Inc.
+drhla // (c) 1986 Drew, Inc.
+fastdrwp // Stern?
+gtipoker // (c) 1983 GTI Inc
+gtipokra // (c) 1983 GTI Inc
+kimbldhl // (c) 198?, Kimble Ireland
+kimblz80 // (c) 198?, Kimble Ireland
+mainline // (c) Mainline London
+ndxron10 // 2005, unknown
+newhilop //
+noraut3a // (c) 2002 Noraut Ltd.
+noraut3b // (c) 2003 Noraut Ltd.
+norautdx // (c) 198? Noraut Ltd.
+norautjo // (c) 198? Noraut Ltd.
+norautjp // (c) 198? Noraut Ltd.
+norautp // (c) 1988 Noraut Ltd.
+norautpl // (c) 198? Prologic / Noraut Ltd.
+norautpn // (c) 199? unknown
+norautra // (c) 198? Noraut Ltd.
+norautrh // (c) 198? Noraut Ltd.
+norautu // (c) 198? Noraut Ltd.
+norautua // (c) 198? Noraut Ltd.
+norautub // (c) 198? Noraut Ltd.
+pkii_dm // Unknown Poker PKII/DM
+pma // 1983, PMA
+smshilo // (c) 1983 SMS Manufacturing Corp.
+ssjkrpkr // (c) 1982 Southern Systems & Assembly, Ltd.
+tpoker2 // (c) 1993 Micro Manufacturing, Inc.
+
+//@source:notetaker.cpp
+notetakr //
+
+//@source:nova2001.cpp
+ninjakun // UPL-84003 (c) 1984 Taito Corporation
+nova2001 // UPL-83005 (c) 1983
+nova2001h // hack?
+nova2001u // UPL-83005 (c) [1983] + Universal license
+pkunwar // UPL-????? (c) 1985 (Arcade Game TV List - P.98, Left, 22 from top)
+pkunwarj // UPL-????? (c) 1985 (Arcade Game TV List - P.98, Left, 22 from top)
+raiders5 // UPL-85004 (c) 1985
+raiders5t // UPL-85004 (c) 1985 Taito license
+
+//@source:nsm.cpp
+firebird //
+
+//@source:nsmpoker.cpp
+nsmpoker //
+
+//@source:nss.cpp
+nss //
+nss_actr // 1992 Enix
+nss_adam // 1992 Ocean
+nss_aten // 1992 Absolute Entertainment Inc.
+nss_con3 // 1992 Konami
+nss_fzer // 1991 Nintendo
+nss_lwep // 1992 Nintendo
+nss_ncaa // 1992 Sculptured Software Inc.
+nss_rob3 // 1992 Ocean
+nss_skin // 1992 Irem
+nss_smw // 1991 Nintendo
+nss_ssoc // 1992 Human Inc.
+nss_sten // 199? Nintendo
+
+//@source:nwk-tr.cpp
+racingj // GX676 (c)1998
+racingj2 // GX888 (c)1999 (EAE)
+racingj2j // GX888 (c)1999 (JAE)
+thrilld // GX713 (c)1998 Japan JAE
+thrilldae // GX713 (c)1998 Europe EAA
+thrilldb // GX713 (c)1998 Japan JAB
+
+//@source:nycaptor.cpp
+bronx // bootleg
+colt // bootleg
+cyclshtg // A97 (c) 1986 Taito Corporation
+nycaptor // A50 (c) 1985 Taito Corporation
+
+//@source:nyny.cpp
+nyny // (c) 1980 Sigma Ent. Inc.
+nynyg // (c) 1980 Sigma Ent. Inc. + Gottlieb
+warcadia // (c) 1982 Sigma Ent. Inc.
+
+//@source:ob68k1a.cpp
+ob68k1a //
+
+//@source:octopus.cpp
+octopus //
+
+//@source:odyssey2.cpp
+g7400 // 1983 Videopac Plus G7400
+jopac // 1983 Jopac JO7400
+odyssey2 // Magnavox Odyssey 2 - 1978-1983
+odyssey3 // Magnavox Odyssey 3 / Command Center (prototype)
+videopac // 1979 Videopac G7000/C52
+
+//@source:offtwall.cpp
+offtwall // 136090 (c) 1991
+offtwallc // 136090 (c) 1991
+
+//@source:ohmygod.cpp
+naname // (c) 1994 Atlus (Japan)
+ohmygod // (c) 1993 Atlus (Japan)
+
+//@source:ojankohs.cpp
+ccasino // [1987] V-System Co. (Japan)
+ojanko2 // [1987] V-System Co. (Japan)
+ojankoc // [1986] V-System Co. (Japan)
+ojankohs // [1988] V-System Co. (Japan)
+ojankoy // [1986] V-System Co. (Japan)
+
+//@source:okean240.cpp
+okean240 //
+okean240a //
+okean240t //
+
+//@source:olibochu.cpp
+olibochu // M47 (c) 1981 + "GDI presents"
+
+//@source:omegrace.cpp
+deltrace // bootleg
+omegrace // (c) 1981 Midway
+omegrace2 // (c) 1981 Midway
+
+//@source:ondra.cpp
+ondrat //
+ondrav //
+
+//@source:oneshot.cpp
+maddonna // (c) 1995 Tuning
+maddonnb // (c) 1995 Tuning
+oneshot // no copyright notice
+
+//@source:onetwo.cpp
+onetwo // (c) 1997 Barko
+onetwoe // (c) 1997 Barko
+
+//@source:onyx.cpp
+c8002 //
+
+//@source:opwolf.cpp
+opwolf // B20 (c) 1987 Taito Corporation Japan (World)
+opwolfa // B20 (c) 1987 Taito Corporation Japan (World)
+opwolfb // bootleg
+opwolfj // B20 (c) 1987 Taito Corporation (Japan)
+opwolfu // B20 (c) 1987 Taito America Corporation (US)
+
+//@source:orao.cpp
+orao //
+orao103 //
+
+//@source:orbit.cpp
+orbit // 033689-033702 1978/11 [6800]
+
+//@source:oric.cpp
+oric1 // 1983 Oric 1
+orica // 1984 Oric Atmos
+prav8d // 1985 Pravetz 8D
+prav8dd // 1989 Pravetz 8D (Disk ROM)
+telstrat // ??? Oric Telestrat/Stratos
+
+//@source:orion.cpp
+orion128 //
+orionide //
+orionidm //
+orionms //
+orionpro //
+orionz80 //
+orionzms //
+
+//@source:osbexec.cpp
+osbexec // 1982 Osborne Executive
+
+//@source:osborne1.cpp
+osborne1 // 1981 Osborne-1
+
+//@source:osi.cpp
+c1p //
+c1pmf //
+sb2m600b //
+uk101 //
+
+//@source:othello.cpp
+othello // (c) 1984 Success.
+
+//@source:othunder.cpp
+othunder // B67 (c) 1988 Taito Corporation Japan (World)
+othunderj // B67 (c) 1988 Taito Corporation (Japan)
+othunderu // B67 (c) 1988 Taito America Corporation (US)
+othunderuo // B67 (c) 1988 Taito America Corporation (US)
+
+//@source:overdriv.cpp
+overdriv // GX789 (c) 1990
+overdriva // GX789 (c) 1990
+overdrivb // GX789 (c) 1990
+
+//@source:p112.cpp
+p112 //
+
+//@source:p2000t.cpp
+p2000m // 1980 P2000M
+p2000t // 1980 P2000T
+
+//@source:p8k.cpp
+p8000 //
+p8000_16 //
+
+//@source:pachifev.cpp
+pachifev // (c) 1983?
+
+//@source:pacland.cpp
+pacland // (c) 1984
+paclandj // (c) 1984
+paclandjo // (c) 1984
+paclandjo2 // (c) 1984
+paclandm // (c) 1984 Midway
+
+//@source:pacman.cpp
+8bpm // (c) 1985 Seatongrove Ltd (Magic Eletronics USA license)
+abscam // hack
+acitya // (c) 1983 Epos Corporation
+alibaba // (c) 1982 Sega
+alibabab // Mustafa" and 40 Thieves (Ali Baba bootleg)
+beastf // (c) 1984 Epos Corporation
+bigbucks // (c) 1986 Dynasoft Inc.
+birdiy // (c) 1983 Mama Top
+bucaner // hack
+bwcasino // (c) 1983 Epos Corporation
+candory // graphics hack of Ponpoko
+cannonbp // hack
+clubpacm // Miky SRL
+clubpacma // Miky SRL
+clubpacmb // Miky SRL
+crockman // 1980 bootleg (RENE PIERRE)
+crush // (c) 1981 Kural Samno Electric Ltd
+crush2 // (c) 1981 Kural Esco Electric Ltd - bootleg?
+crush3 // Kural Electric Ltd - bootleg?
+crush4 // Kural TWT
+crushbl // bootleg
+crushbl2 // bootleg
+crushbl3 // bootleg
+crushrlf // bootleg
+crushs // 1981 bootleg
+ctrpllrp // hack
+dremshpr // (c) 1982 Sanritsu
+drivfrcp // (c) 1984 Shinkai Inc. (Magic Eletronics Inc. license)
+eggor // (c) 1983 Telko
+eyes // (c) 1982 Digitrex Techstar + "Rockola presents"
+eyes2 // (c) 1982 Techstar + "Rockola presents"
+eyesb // bootleg
+eyeszac // (c) 1982 Techstar / Zaccaria
+eyeszacb // bootleg
+gorkans // (c) 1984 Techstar
+hangly // hack
+hangly2 // hack
+hangly3 // hack
+joyman // hack
+jumpshot // (c) 1985 Bally Midway
+jumpshotp // (c) 1985 Bally Midway
+korosuke // (c) 1981 Kural Electric
+lizwiz // (c) 1985 Techstar + "Sunn presents"
+maketrax // (c) 1981 Williams, high score table says KRL (fur Kural)
+maketrxb // (c) 1981 [Kural] (Williams license)
+mbrush // 1981 bootleg
+mrtnt // (c) 1983 Telko
+mschamp // hack by RAYGLO MFG "Zola-Puc" (c) 1992/1993
+mschamps // hack (hack of the Rayglo hack?)
+msheartb // hack
+mspacii // bootleg
+mspacii2 // bootleg
+mspacmab // bootleg
+mspacman // (c) 1981 Midway // made by General Computer
+mspacmanbcc // bootleg
+mspacmanbg // bootleg
+mspacmanbgd // bootleg
+mspacmanblt // bootleg
+mspacmancr // bootleg on Crush Roller board
+mspacmat // hack
+mspacmbe // bootleg
+mspacmnf // hack
+mspacpls // hack
+newpuc2 // hack
+newpuc2b // hack
+newpuckx // hack
+nmouse // (c) 1981 Amenip (Palcom Queen River)
+nmouseb // (c) 1981 Amenip Nova Games Ltd.
+numcrash // (c) 1983 Hanshin Goraku / "Peni"
+pacgal // hack
+pacheart // hack
+pacman // (c) 1980 Midway
+pacmanf // hack
+pacmanjpm // bootleg
+pacmansp // hack
+pacmod // (c) 1981 Midway
+pacplus // (c) 1982 Namco (Midway license)
+pacuman // bootleg
+paintrlr // 1981 bootleg
+pengojpm // bootleg
+pengopac // bootleg
+piranha // GL
+piranhah // hack
+piranhao // GL
+ponpoko // (c) 1982 Sigma Ent. Inc.
+ponpokov // (c) 1982 Sigma Ent. Inc. + Venture Line license
+popeyeman // hack
+porky // (c) 1985 Shinkai Inc. (Magic Eletronics Inc. license)
+puckman // (c) 1980 Namco
+puckmanb // bootleg
+puckmanf // hack
+puckmanh // hack
+puckmod // (c) 1981 Namco
+rocktrv2 // (c) 1986 Triumph Software Inc
+shootbul // (c) 1985 Bally Midway
+sprglbpg // German bootleg
+sprglobp // (c) 1983 Epos Corporation
+superabc // hack
+superabco // hack
+theglobp // (c) 1983 Epos Corporation
+vanvan // (c) 1983 Sanritsu
+vanvanb // (c) 1983 Karateco (bootleg?)
+vanvank // (c) 1983 Karateco (bootleg?)
+woodpeca // (c) 1981 Amenip Nova Games Ltd.
+woodpeck // (c) 1981 Amenip (Palcom Queen River)
+
+//@source:palm.cpp
+palmiii // Palm III
+palmiiic // Palm IIIc
+palmm100 // Palm m100
+palmm130 // Palm m130
+palmm505 // Palm m505
+palmm515 // Palm m515
+palmpers // Palm Pilot Personal
+palmpro // Palm Pilot Professional
+palmv // Palm V
+palmvx // Palm Vx
+pilot1k // Pilot 1000
+pilot5k // Pilot 5000
+spt1500 // Symbol SPT 1500
+spt1700 // Symbol SPT 1700
+spt1740 // Symbol SPT 1740
+visor // Palm Visor Edge
+
+//@source:palmz22.cpp
+palmz22 // Palm Z22
+
+//@source:pandoras.cpp
+pandoras // GX328 (c) 1984 + Interlogic
+
+//@source:pangofun.cpp
+pangofun // (c) 1995 InfoCube
+
+//@source:panicr.cpp
+panicr // Seibu / Taito
+panicrg // Seibu / TV-Tuning (Germany)
+
+//@source:paradise.cpp
+madball // (c) 1998 Yun Sung
+madballn // (c) 1998 Yun Sung
+para2dx // (c) >1994 Yun Sung
+paradise // (c) 1994 Yun Sung
+paradisea // (c) 1994 Yun Sung
+paradisee // (c) 1994 Yun Sung (Escape license)
+paradlx // (c) >1994 Yun Sung
+penky // (c) 1995 Yun Sung
+tgtball // (c) 1995 Yun Sung
+tgtballa // (c) 1995 Yun Sung
+torus // (c) 1996 Yun Sung
+
+//@source:paranoia.cpp
+paranoia // (c) 1990 Naxat Soft
+
+//@source:parodius.cpp
+parodius // GX955 (c) 1990 (World)
+parodiusa // GX955 (c) 1990 (Asia)
+parodiuse // GX955 (c) 1990 (World)
+parodiusj // GX955 (c) 1990 (Japan)
+
+//@source:partner.cpp
+partner //
+
+//@source:pasha2.cpp
+pasha2 // (c) 1998 Dong Sung
+
+//@source:paso1600.cpp
+paso1600 //
+
+//@source:pasogo.cpp
+pasogo // KOEI PasoGo
+
+//@source:pasopia.cpp
+pasopia //
+
+//@source:pasopia7.cpp
+pasopia7 //
+pasopia7lcd //
+
+//@source:pass.cpp
+pass // (c) 1992 Oksan
+
+//@source:pastelg.cpp
+galds // (c) 1985
+pastelg // (c) 1985
+threeds // (c) 1985
+
+//@source:patinho_feio.cpp
+patinho // 1972 Patinho Feio
+
+//@source:pb1000.cpp
+ai1000 // Casio AI-1000
+pb1000 // Casio PB-1000
+pb2000c // Casio PB-2000C
+
+//@source:pbaction.cpp
+pbaction // (c) 1985 Tehkan
+pbaction2 // (c) 1985 Tehkan
+pbaction3 // (c) 1985 Tehkan
+pbaction4 // (c) 1985 Tehkan
+pbaction5 // (c) 1985 Tehkan
+
+//@source:pc.cpp
+ataripc3 //
+bw230 // 1985 Bondwell (CGA)
+compc1 // 1984 Commodore PC-1
+dgone // 1984 Data General/One
+eagle1600 //
+ibm5550 //
+iskr3104 //
+mbc16 // Sanyo MBC-16
+mc1702 //
+mk88 //
+olivm15 //
+pc10iii // 1987 Commodore PC-10 III
+pc7000 // 1985 Sharp PC-7000
+poisk2 //
+sicpc1605 //
+ssam88s //
+sx16 // Sanyo SX-16
+zdsupers //
+
+//@source:pc100.cpp
+pc100 //
+
+//@source:pc1500.cpp
+pc1500 // Pocket Computer 1500
+
+//@source:pc1512.cpp
+pc1512 //
+pc1512dd //
+pc1512hd10 //
+pc1512hd20 //
+pc1640 //
+pc1640dd //
+pc1640hd20 //
+pc1640hd30 //
+
+//@source:pc2000.cpp
+gbs5505x // 2001 Genius BrainStation 5505X (Germany)
+gl2000 // 1993 Genius Leader 2000
+gl2000c // 1994 Genius Leader 2000 Compact
+gl2000p // 1993 Genius Leader 2000 Plus
+gl3000s // 199? Genius GL3000S
+gl4000 // Genius Leader 4000 Quadro (Germany)
+gl4004 // Genius Leader 4004 Quadro L (Germany)
+gl5000 // Genius Leader 5000 (Germany)
+gl5005x // Genius Leader 5005X (Germany)
+gln // 199? Genius Leader Notebook
+glpn // Genius Leader Power Notebook (Germany)
+gmtt // 1998 Genius Master Table Top (Germany)
+lexipcm // LexiPC Mega 2000 (Germany)
+misterx // 1988 (Yeno) MisterX
+ordisava // 1988 Ordisavant (France)
+pc1000 // 1988 PreComputer 1000
+pc2000 // 1993 PreComputer 2000
+
+//@source:pc4.cpp
+pc4 //
+
+//@source:pc6001.cpp
+pc6001 //
+pc6001a //
+pc6001mk2 //
+pc6001sr //
+pc6601 //
+
+//@source:pc8001.cpp
+pc8001 //
+pc8001mk2 //
+
+//@source:pc8401a.cpp
+pc8401a // roms needed
+pc8500 //
+
+//@source:pc8801.cpp
+pc8801 //
+pc8801fa //
+pc8801ma //
+pc8801ma2 //
+pc8801mc //
+pc8801mh //
+pc8801mk2 //
+pc8801mk2fr //
+pc8801mk2mr //
+pc8801mk2sr //
+
+//@source:pc88va.cpp
+pc88va //
+pc88va2 //
+
+//@source:pc9801.cpp
+pc486mu //
+pc9801bx2 // 1993
+pc9801f // 1983
+pc9801rs // 1989
+pc9801rx // 1988
+pc9801ux // 1987
+pc9801vm // 1985
+pc9821 //
+pc9821ap2 //
+pc9821as //
+pc9821ce2 //
+pc9821ne //
+pc9821v13 //
+pc9821v20 //
+pc9821xs //
+
+//@source:pcat_dyn.cpp
+toursol // (c) 1995 Dynamo
+toursol1 // (c) 1995 Dynamo
+
+//@source:pcat_nit.cpp
+bonanza // (c) 1993
+bonanzar2 // (c) 1993
+streetg // (c) 1993
+streetg2 // (c) 1993
+streetg2r5 // (c) 1993
+streetgr3 // (c) 1993
+
+//@source:pcd.cpp
+pcd // Siemens PC-D
+pcx // Siemens PC-X
+
+//@source:pce.cpp
+pce // PC/Engine NEC 1987-1993
+sgx // SuperGrafX NEC 1989
+tg16 // Turbo Grafix-16 NEC 1989-1993
+
+//@source:pce220.cpp
+pce220 // Pocket Computer E220
+pcg850v // Pocket Computer G850V
+
+//@source:pcfx.cpp
+pcfx // PC-FX NEC 1994
+pcfxga // PC-FX NEC 199? (PC-FX on a PC ISA Card)
+
+//@source:pcktgal.cpp
+pcktgal // (c) 1987 Data East Corporation (Japan)
+pcktgal2 // (c) 1989 Data East Corporation (World?)
+pcktgal2j // (c) 1989 Data East Corporation (World?)
+pcktgalb // bootleg
+spool3 // (c) 1989 Data East Corporation (World?)
+spool3i // (c) 1990 Data East Corporation + I-Vics license
+
+//@source:pcm.cpp
+pcm // PC/M Mugler
+
+//@source:pcw.cpp
+pcw10 // 198? PCW10
+pcw8256 // 198? PCW8256
+pcw8512 // 198? PCW8512
+pcw9256 // 198? PCW9256
+pcw9512 // 198? PCW9512 (+)
+
+//@source:pcw16.cpp
+pcw16 // 1995 PCW16
+
+//@source:pcxt.cpp
+filetto // (c) 1990 Novamatic
+tetriskr // (c) 1988? bootleg
+
+//@source:pda600.cpp
+pda600 //
+
+//@source:pdp1.cpp
+pdp1 // 1961 DEC PDP1
+
+//@source:pdp11.cpp
+pdp11qb //
+pdp11ub //
+pdp11ub2 //
+sms1000 //
+
+//@source:pecom.cpp
+pecom32 //
+pecom64 //
+
+//@source:pegasus.cpp
+pegasus //
+pegasusm //
+
+//@source:pencil2.cpp
+pencil2 //
+
+//@source:pengadvb.cpp
+pengadvb // (c) 1988 Screen
+
+//@source:pengo.cpp
+jrpacmbl // bootleg on Pengo HW
+pengo // 834-0386 (c) 1982 Sega
+pengo2 // 834-0386 (c) 1982 Sega
+pengo2u // 834-0386 (c) 1982 Sega
+pengo3u // 834-0386 (c) 1982 Sega
+pengo4 // 834-0386 (c) 1982 Sega
+pengob // bootleg
+penta // bootleg
+
+//@source:pentagon.cpp
+pent1024 //
+pentagon //
+
+//@source:peoplepc.cpp
+olypeopl // Olympia People PC
+
+//@source:peplus.cpp
+pebe0014 // (c) 1994 IGT - International Game Technology
+pebe0014a // (c) 1994 IGT - International Game Technology
+peip0028 // (c) 1987 IGT - International Game Technology
+peip0029 // (c) 1987 IGT - International Game Technology
+peip0031 // (c) 1987 IGT - International Game Technology
+peip0041 // (c) 1987 IGT - International Game Technology
+peip0051 // (c) 1987 IGT - International Game Technology
+peip0058 // (c) 1987 IGT - International Game Technology
+peip0062 // (c) 1987 IGT - International Game Technology
+peip0074 // (c) 1987 IGT - International Game Technology
+peip0079 // (c) 1987 IGT - International Game Technology
+peip0101 // (c) 1987 IGT - International Game Technology
+peip0103 // (c) 1987 IGT - International Game Technology
+peip0105 // (c) 1987 IGT - International Game Technology
+peip0108 // (c) 1987 IGT - International Game Technology
+peip0111 // (c) 1987 IGT - International Game Technology
+peip0112 // (c) 1987 IGT - International Game Technology
+peip0114 // (c) 1987 IGT - International Game Technology
+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
+peivc006 // (c) 1987 IGT - International Game Technology
+peke0004 // (c) 1994 IGT - International Game Technology
+peke0017 // (c) 1994 IGT - International Game Technology
+peke1001 // (c) 1994 IGT - International Game Technology
+peke1006 // (c) 1994 IGT - International Game Technology
+peke1012 // (c) 1994 IGT - International Game Technology
+peke1012a // (c) 1994 IGT - International Game Technology
+peke1012b // (c) 1994 IGT - International Game Technology
+peke1013 // (c) 1994 IGT - International Game Technology
+peke1013a // (c) 1994 IGT - International Game Technology
+pekoc766 // (c) 1997 IGT - International Game Technology
+pekoc801 // (c) 1997 IGT - International Game Technology
+pekoc802 // (c) 1997 IGT - International Game Technology
+pekoc803 // (c) 1997 IGT - International Game Technology
+pekoc803a // (c) 1997 IGT - International Game Technology
+pekoc804 // (c) 1997 IGT - International Game Technology
+pekoc806 // (c) 1997 IGT - International Game Technology
+pekoc818 // (c) 1997 IGT - International Game Technology
+pekoc819 // (c) 1997 IGT - International Game Technology
+pekoc822 // (c) 1997 IGT - International Game Technology
+pekoc825 // (c) 1997 IGT - International Game Technology
+pemg0183 // (c) 1994 IGT - International Game Technology
+pemg0252 // (c) 1994 IGT - International Game Technology
+pepk0719 // (c) 1987 IGT - International Game Technology
+pepk0719a // (c) 1987 IGT - International Game Technology
+pepk0719b // (c) 1987 IGT - International Game Technology
+pepk0756 // (c) 1987 IGT - International Game Technology
+pepk0756a // (c) 1987 IGT - International Game Technology
+pepk0756b // (c) 1987 IGT - International Game Technology
+pepk0756c // (c) 1987 IGT - International Game Technology
+pepk0757 // (c) 1987 IGT - International Game Technology
+pepk0758 // (c) 1987 IGT - International Game Technology
+pepk0769 // (c) 1987 IGT - International Game Technology
+pepk0773 // (c) 1987 IGT - International Game Technology
+pepk0810 // (c) 1987 IGT - International Game Technology
+pepk0810a // (c) 1987 IGT - International Game Technology
+pepk0811 // (c) 1987 IGT - International Game Technology
+pepk0823 // (c) 1987 IGT - International Game Technology
+pepk0832 // (c) 1987 IGT - International Game Technology
+pepk0849 // (c) 1987 IGT - International Game Technology
+pepk0856 // (c) 1987 IGT - International Game Technology
+pepk0856a // (c) 1987 IGT - International Game Technology
+pepk0858 // (c) 1987 IGT - International Game Technology
+pepk0873 // (c) 1987 IGT - International Game Technology
+pepk0873a // (c) 1987 IGT - International Game Technology
+pepk0930 // (c) 1987 IGT - International Game Technology
+pepk0930a // (c) 1987 IGT - International Game Technology
+pepk1004 // (c) 1987 IGT - International Game Technology
+pepk1013 // (c) 1987 IGT - International Game Technology
+pepk1020 // (c) 1987 IGT - International Game Technology
+pepk1024 // (c) 1987 IGT - International Game Technology
+pepk1030 // (c) 1987 IGT - International Game Technology
+pepk1069 // (c) 1987 IGT - International Game Technology
+pepp0002 // (c) 1987 IGT - International Game Technology
+pepp0002a // (c) 1987 IGT - International Game Technology
+pepp0008 // (c) 1987 IGT - International Game Technology
+pepp0009 // (c) 1987 IGT - International Game Technology
+pepp0010 // (c) 1987 IGT - International Game Technology
+pepp0014 // (c) 1987 IGT - International Game Technology
+pepp0014a // (c) 1987 IGT - International Game Technology
+pepp0021 // (c) 1987 IGT - International Game Technology
+pepp0023 // (c) 1987 IGT - International Game Technology
+pepp0038 // (c) 1987 IGT - International Game Technology
+pepp0040 // (c) 1987 IGT - International Game Technology
+pepp0040a // (c) 1987 IGT - International Game Technology
+pepp0040b // (c) 1987 IGT - International Game Technology
+pepp0041 // (c) 1987 IGT - International Game Technology
+pepp0042 // (c) 1987 IGT - International Game Technology
+pepp0042a // (c) 1987 IGT - International Game Technology
+pepp0043 // (c) 1987 IGT - International Game Technology
+pepp0043a // (c) 1987 IGT - International Game Technology
+pepp0043b // (c) 1987 IGT - International Game Technology
+pepp0045 // (c) 1987 IGT - International Game Technology
+pepp0045a // (c) 1987 IGT - International Game Technology
+pepp0045b // (c) 1987 IGT - International Game Technology
+pepp0045c // (c) 1987 IGT - International Game Technology
+pepp0045d // (c) 1987 IGT - International Game Technology
+pepp0046 // (c) 1987 IGT - International Game Technology
+pepp0046a // (c) 1987 IGT - International Game Technology
+pepp0046b // (c) 1987 IGT - International Game Technology
+pepp0048 // (c) 1987 IGT - International Game Technology
+pepp0051 // (c) 1987 IGT - International Game Technology
+pepp0053 // (c) 1987 IGT - International Game Technology
+pepp0055 // (c) 1987 IGT - International Game Technology
+pepp0055a // (c) 1987 IGT - International Game Technology
+pepp0055b // (c) 1987 IGT - International Game Technology
+pepp0055c // (c) 1987 IGT - International Game Technology
+pepp0057 // (c) 1987 IGT - International Game Technology
+pepp0057a // (c) 1987 IGT - International Game Technology
+pepp0059 // (c) 1987 IGT - International Game Technology
+pepp0059a // (c) 1987 IGT - International Game Technology
+pepp0060 // (c) 1987 IGT - International Game Technology
+pepp0060a // (c) 1987 IGT - International Game Technology
+pepp0060b // (c) 1987 IGT - International Game Technology
+pepp0060c // (c) 1987 IGT - International Game Technology
+pepp0063 // (c) 1987 IGT - International Game Technology
+pepp0064 // (c) 1987 IGT - International Game Technology
+pepp0065 // (c) 1987 IGT - International Game Technology
+pepp0083 // (c) 1987 IGT - International Game Technology
+pepp0085 // (c) 1987 IGT - International Game Technology
+pepp0089 // (c) 1987 IGT - International Game Technology
+pepp0094 // (c) 1987 IGT - International Game Technology
+pepp0103 // (c) 1987 IGT - International Game Technology
+pepp0104 // (c) 1987 IGT - International Game Technology
+pepp0116 // (c) 1987 IGT - International Game Technology
+pepp0116a // (c) 1987 IGT - International Game Technology
+pepp0118 // (c) 1987 IGT - International Game Technology
+pepp0120 // (c) 1987 IGT - International Game Technology
+pepp0125 // (c) 1987 IGT - International Game Technology
+pepp0126 // (c) 1987 IGT - International Game Technology
+pepp0127 // (c) 1987 IGT - International Game Technology
+pepp0127a // (c) 1987 IGT - International Game Technology
+pepp0129 // (c) 1987 IGT - International Game Technology
+pepp0130 // (c) 1987 IGT - International Game Technology
+pepp0132 // (c) 1987 IGT - International Game Technology
+pepp0150 // (c) 1987 IGT - International Game Technology
+pepp0158 // (c) 1987 IGT - International Game Technology
+pepp0158a // (c) 1987 IGT - International Game Technology
+pepp0158b // (c) 1987 IGT - International Game Technology
+pepp0158c // (c) 1987 IGT - International Game Technology
+pepp0158d // (c) 1987 IGT - International Game Technology
+pepp0159 // (c) 1987 IGT - International Game Technology
+pepp0171 // (c) 1987 IGT - International Game Technology
+pepp0171a // (c) 1987 IGT - International Game Technology
+pepp0178 // (c) 1987 IGT - International Game Technology
+pepp0181 // (c) 1987 IGT - International Game Technology
+pepp0188 // (c) 1987 IGT - International Game Technology
+pepp0188a // (c) 1987 IGT - International Game Technology
+pepp0189 // (c) 1987 IGT - International Game Technology
+pepp0190 // (c) 1987 IGT - International Game Technology
+pepp0190a // (c) 1987 IGT - International Game Technology
+pepp0190b // (c) 1987 IGT - International Game Technology
+pepp0190c // (c) 1987 IGT - International Game Technology
+pepp0197 // (c) 1987 IGT - International Game Technology
+pepp0197a // (c) 1987 IGT - International Game Technology
+pepp0197b // (c) 1987 IGT - International Game Technology
+pepp0197c // (c) 1987 IGT - International Game Technology
+pepp0197d // (c) 1987 IGT - International Game Technology
+pepp0197e // (c) 1987 IGT - International Game Technology
+pepp0203 // (c) 1987 IGT - International Game Technology
+pepp0203a // (c) 1987 IGT - International Game Technology
+pepp0203b // (c) 1987 IGT - International Game Technology
+pepp0203c // (c) 1987 IGT - International Game Technology
+pepp0203d // (c) 1987 IGT - International Game Technology
+pepp0203e // (c) 1987 IGT - International Game Technology
+pepp0219 // (c) 1987 IGT - International Game Technology
+pepp0221 // (c) 1987 IGT - International Game Technology
+pepp0221a // (c) 1987 IGT - International Game Technology
+pepp0221b // (c) 1987 IGT - International Game Technology
+pepp0223 // (c) 1987 IGT - International Game Technology
+pepp0224 // (c) 1987 IGT - International Game Technology
+pepp0224a // (c) 1987 IGT - International Game Technology
+pepp0230 // (c) 1987 IGT - International Game Technology
+pepp0242 // (c) 1987 IGT - International Game Technology
+pepp0249 // (c) 1987 IGT - International Game Technology
+pepp0250 // (c) 1987 IGT - International Game Technology
+pepp0250a // (c) 1987 IGT - International Game Technology
+pepp0265 // (c) 1987 IGT - International Game Technology
+pepp0265a // (c) 1987 IGT - International Game Technology
+pepp0265b // (c) 1987 IGT - International Game Technology
+pepp0265c // (c) 1987 IGT - International Game Technology
+pepp0274 // (c) 1987 IGT - International Game Technology
+pepp0288 // (c) 1987 IGT - International Game Technology
+pepp0290 // (c) 1987 IGT - International Game Technology
+pepp0290a // (c) 1987 IGT - International Game Technology
+pepp0291 // (c) 1987 IGT - International Game Technology
+pepp0291a // (c) 1987 IGT - International Game Technology
+pepp0401 // (c) 1987 IGT - International Game Technology
+pepp0409 // (c) 1987 IGT - International Game Technology
+pepp0410 // (c) 1987 IGT - International Game Technology
+pepp0410a // (c) 1987 IGT - International Game Technology
+pepp0417 // (c) 1987 IGT - International Game Technology
+pepp0417a // (c) 1987 IGT - International Game Technology
+pepp0418 // (c) 1987 IGT - International Game Technology
+pepp0419 // (c) 1987 IGT - International Game Technology
+pepp0420 // (c) 1987 IGT - International Game Technology
+pepp0423 // (c) 1987 IGT - International Game Technology
+pepp0423a // (c) 1987 IGT - International Game Technology
+pepp0423b // (c) 1987 IGT - International Game Technology
+pepp0423c // (c) 1987 IGT - International Game Technology
+pepp0426 // (c) 1987 IGT - International Game Technology
+pepp0428 // (c) 1987 IGT - International Game Technology
+pepp0429 // (c) 1987 IGT - International Game Technology
+pepp0429a // (c) 1987 IGT - International Game Technology
+pepp0430 // (c) 1987 IGT - International Game Technology
+pepp0431 // (c) 1987 IGT - International Game Technology
+pepp0434 // (c) 1987 IGT - International Game Technology
+pepp0447 // (c) 1987 IGT - International Game Technology
+pepp0447a // (c) 1987 IGT - International Game Technology
+pepp0449 // (c) 1987 IGT - International Game Technology
+pepp0449a // (c) 1987 IGT - International Game Technology
+pepp0452 // (c) 1987 IGT - International Game Technology
+pepp0454 // (c) 1987 IGT - International Game Technology
+pepp0454a // (c) 1987 IGT - International Game Technology
+pepp0455 // (c) 1987 IGT - International Game Technology
+pepp0458 // (c) 1987 IGT - International Game Technology
+pepp0459 // (c) 1987 IGT - International Game Technology
+pepp0467 // (c) 1987 IGT - International Game Technology
+pepp0488 // (c) 1987 IGT - International Game Technology
+pepp0508 // (c) 1987 IGT - International Game Technology
+pepp0509 // (c) 1987 IGT - International Game Technology
+pepp0510 // (c) 1987 IGT - International Game Technology
+pepp0514 // (c) 1987 IGT - International Game Technology
+pepp0514a // (c) 1987 IGT - International Game Technology
+pepp0514b // (c) 1987 IGT - International Game Technology
+pepp0515 // (c) 1987 IGT - International Game Technology
+pepp0515a // (c) 1987 IGT - International Game Technology
+pepp0515b // (c) 1987 IGT - International Game Technology
+pepp0515c // (c) 1987 IGT - International Game Technology
+pepp0516 // (c) 1987 IGT - International Game Technology
+pepp0516a // (c) 1987 IGT - International Game Technology
+pepp0516b // (c) 1987 IGT - International Game Technology
+pepp0526 // (c) 1987 IGT - International Game Technology
+pepp0531 // (c) 1987 IGT - International Game Technology
+pepp0536 // (c) 1987 IGT - International Game Technology
+pepp0538 // (c) 1987 IGT - International Game Technology
+pepp0540 // (c) 1987 IGT - International Game Technology
+pepp0542 // (c) 1987 IGT - International Game Technology
+pepp0542a // (c) 1987 IGT - International Game Technology
+pepp0550 // (c) 1987 IGT - International Game Technology
+pepp0550a // (c) 1987 IGT - International Game Technology
+pepp0555 // (c) 1987 IGT - International Game Technology
+pepp0559 // (c) 1987 IGT - International Game Technology
+pepp0562 // (c) 1987 IGT - International Game Technology
+pepp0568 // (c) 1987 IGT - International Game Technology
+pepp0585 // (c) 1987 IGT - International Game Technology
+pepp0587 // (c) 1987 IGT - International Game Technology
+pepp0596 // (c) 1987 IGT - International Game Technology
+pepp0598 // (c) 1987 IGT - International Game Technology
+pepp0711 // (c) 1987 IGT - International Game Technology
+pepp0713 // (c) 1987 IGT - International Game Technology
+pepp0725 // (c) 1987 IGT - International Game Technology
+pepp0725a // (c) 1987 IGT - International Game Technology
+pepp0726 // (c) 1987 IGT - International Game Technology
+pepp0728 // (c) 1987 IGT - International Game Technology
+pepp0733 // (c) 1987 IGT - International Game Technology
+pepp0750 // (c) 1987 IGT - International Game Technology
+pepp0757 // (c) 1987 IGT - International Game Technology
+pepp0760 // (c) 1987 IGT - International Game Technology
+pepp0763 // (c) 1987 IGT - International Game Technology
+pepp0764 // (c) 1987 IGT - International Game Technology
+pepp0775 // (c) 1987 IGT - International Game Technology
+pepp0797 // (c) 1987 IGT - International Game Technology
+pepp0812 // (c) 1987 IGT - International Game Technology
+pepp0816 // (c) 1987 IGT - International Game Technology
+peps0014 // (c) 1996 IGT - International Game Technology
+peps0021 // (c) 1996 IGT - International Game Technology
+peps0022 // (c) 1996 IGT - International Game Technology
+peps0042 // (c) 1996 IGT - International Game Technology
+peps0043 // (c) 1996 IGT - International Game Technology
+peps0045 // (c) 1996 IGT - International Game Technology
+peps0047 // (c) 1996 IGT - International Game Technology
+peps0090 // (c) 1996 IGT - International Game Technology
+peps0092 // (c) 1996 IGT - International Game Technology
+peps0206 // (c) 1996 IGT - International Game Technology
+peps0207 // (c) 1996 IGT - International Game Technology
+peps0296 // (c) 1996 IGT - International Game Technology
+peps0298 // (c) 1996 IGT - International Game Technology
+peps0308 // (c) 1996 IGT - International Game Technology
+peps0358 // (c) 1996 IGT - International Game Technology
+peps0364 // (c) 1996 IGT - International Game Technology
+peps0366 // (c) 1996 IGT - International Game Technology
+peps0372 // (c) 1996 IGT - International Game Technology
+peps0373 // (c) 1996 IGT - International Game Technology
+peps0425 // (c) 1996 IGT - International Game Technology
+peps0426 // (c) 1996 IGT - International Game Technology
+peps0470 // (c) 1996 IGT - International Game Technology
+peps0581 // (c) 1996 IGT - International Game Technology
+peps0615 // (c) 1996 IGT - International Game Technology
+peps0628 // (c) 1996 IGT - International Game Technology
+peps0631 // (c) 1996 IGT - International Game Technology
+peps0708 // (c) 1996 IGT - International Game Technology
+peps0716 // (c) 1996 IGT - International Game Technology
+peps0722 // (c) 1996 IGT - International Game Technology
+peset001 // (c) 1987 IGT - International Game Technology
+peset004 // (c) 1987 IGT - International Game Technology
+peset012 // (c) 1987 IGT - International Game Technology
+peset022 // (c) 1987 IGT - International Game Technology
+peset038 // (c) 1987 IGT - International Game Technology
+peset100 // (c) 1987 IGT - International Game Technology
+peset117 // (c) 1987 IGT - International Game Technology
+pex0002p // (c) 1995 IGT - International Game Technology
+pex0002pa // (c) 1995 IGT - International Game Technology
+pex0006k // (c) 1997 IGT - International Game Technology
+pex0006p // (c) 1995 IGT - International Game Technology
+pex0013k // (c) 1997 IGT - International Game Technology
+pex0040p // (c) 1995 IGT - International Game Technology
+pex0042p // (c) 1995 IGT - International Game Technology
+pex0045p // (c) 1995 IGT - International Game Technology
+pex0046p // (c) 1995 IGT - International Game Technology
+pex0053p // (c) 1995 IGT - International Game Technology
+pex0054p // (c) 1995 IGT - International Game Technology
+pex0055p // (c) 1995 IGT - International Game Technology
+pex0055pa // (c) 1995 IGT - International Game Technology
+pex0055pb // (c) 1995 IGT - International Game Technology
+pex0055pc // (c) 1995 IGT - International Game Technology
+pex0055pd // (c) 1995 IGT - International Game Technology
+pex0055pe // (c) 1995 IGT - International Game Technology
+pex0055pf // (c) 1995 IGT - International Game Technology
+pex0055pg // (c) 1995 IGT - International Game Technology
+pex0055ph // (c) 1995 IGT - International Game Technology
+pex0055pi // (c) 1995 IGT - International Game Technology
+pex0055pj // (c) 1995 IGT - International Game Technology
+pex0055pk // (c) 1995 IGT - International Game Technology
+pex0055pl // (c) 1995 IGT - International Game Technology
+pex0055pm // (c) 1995 IGT - International Game Technology
+pex0055pn // (c) 1995 IGT - International Game Technology
+pex0055po // (c) 1995 IGT - International Game Technology
+pex0055pp // (c) 1995 IGT - International Game Technology
+pex0055pq // (c) 1995 IGT - International Game Technology
+pex0055pr // (c) 1995 IGT - International Game Technology
+pex0055ps // (c) 1995 IGT - International Game Technology
+pex0055pt // (c) 1995 IGT - International Game Technology
+pex0057p // (c) 1995 IGT - International Game Technology
+pex0057pa // (c) 1995 IGT - International Game Technology
+pex0057pb // (c) 1995 IGT - International Game Technology
+pex0057pc // (c) 1995 IGT - International Game Technology
+pex0057pd // (c) 1995 IGT - International Game Technology
+pex0057pe // (c) 1995 IGT - International Game Technology
+pex0060p // (c) 1995 IGT - International Game Technology
+pex0124p // (c) 1995 IGT - International Game Technology
+pex0150p // (c) 1995 IGT - International Game Technology
+pex0158p // (c) 1995 IGT - International Game Technology
+pex0171p // (c) 1995 IGT - International Game Technology
+pex0188p // (c) 1995 IGT - International Game Technology
+pex0190p // (c) 1995 IGT - International Game Technology
+pex0197p // (c) 1995 IGT - International Game Technology
+pex0203p // (c) 1995 IGT - International Game Technology
+pex0224p // (c) 1995 IGT - International Game Technology
+pex0225p // (c) 1995 IGT - International Game Technology
+pex0242p // (c) 1995 IGT - International Game Technology
+pex0265p // (c) 1995 IGT - International Game Technology
+pex0291p // (c) 1995 IGT - International Game Technology
+pex0417p // (c) 1995 IGT - International Game Technology
+pex0426p // (c) 1995 IGT - International Game Technology
+pex0430p // (c) 1995 IGT - International Game Technology
+pex0434p // (c) 1995 IGT - International Game Technology
+pex0447p // (c) 1995 IGT - International Game Technology
+pex0449p // (c) 1995 IGT - International Game Technology
+pex0451p // (c) 1995 IGT - International Game Technology
+pex0452p // (c) 1995 IGT - International Game Technology
+pex0454p // (c) 1995 IGT - International Game Technology
+pex0455p // (c) 1995 IGT - International Game Technology
+pex0458p // (c) 1995 IGT - International Game Technology
+pex0459p // (c) 1995 IGT - International Game Technology
+pex0459pa // (c) 1995 IGT - International Game Technology
+pex0489p // (c) 1995 IGT - International Game Technology
+pex0508p // (c) 1995 IGT - International Game Technology
+pex0514p // (c) 1995 IGT - International Game Technology
+pex0515p // (c) 1995 IGT - International Game Technology
+pex0516p // (c) 1995 IGT - International Game Technology
+pex0536p // (c) 1995 IGT - International Game Technology
+pex0537p // (c) 1995 IGT - International Game Technology
+pex0550p // (c) 1995 IGT - International Game Technology
+pex0557p // (c) 1995 IGT - International Game Technology
+pex0568p // (c) 1995 IGT - International Game Technology
+pex0578p // (c) 1995 IGT - International Game Technology
+pex0581p // (c) 1995 IGT - International Game Technology
+pex0588p // (c) 1995 IGT - International Game Technology
+pex0725p // (c) 1995 IGT - International Game Technology
+pex0726p // (c) 1995 IGT - International Game Technology
+pex0727p // (c) 1995 IGT - International Game Technology
+pex0763p // (c) 1995 IGT - International Game Technology
+pex0764p // (c) 1995 IGT - International Game Technology
+pex0838s // (c) 1997 IGT - International Game Technology
+pex0841s // (c) 1997 IGT - International Game Technology
+pex0998s // (c) 1997 IGT - International Game Technology
+pex1087s // (c) 1997 IGT - International Game Technology
+pex2010p // (c) 1995 IGT - International Game Technology
+pex2016p // (c) 1995 IGT - International Game Technology
+pex2017p // (c) 1995 IGT - International Game Technology
+pex2018p // (c) 1995 IGT - International Game Technology
+pex2021p // (c) 1995 IGT - International Game Technology
+pex2024p // (c) 1995 IGT - International Game Technology
+pex2025p // (c) 1995 IGT - International Game Technology
+pex2026p // (c) 1995 IGT - International Game Technology
+pex2027p // (c) 1995 IGT - International Game Technology
+pex2028p // (c) 1995 IGT - International Game Technology
+pex2029p // (c) 1995 IGT - International Game Technology
+pex2031p // (c) 1995 IGT - International Game Technology
+pex2033p // (c) 1995 IGT - International Game Technology
+pex2034p // (c) 1995 IGT - International Game Technology
+pex2035p // (c) 1995 IGT - International Game Technology
+pex2036p // (c) 1995 IGT - International Game Technology
+pex2037p // (c) 1995 IGT - International Game Technology
+pex2038p // (c) 1995 IGT - International Game Technology
+pex2039p // (c) 1995 IGT - International Game Technology
+pex2040p // (c) 1995 IGT - International Game Technology
+pex2042p // (c) 1995 IGT - International Game Technology
+pex2043p // (c) 1995 IGT - International Game Technology
+pex2044p // (c) 1995 IGT - International Game Technology
+pex2045p // (c) 1995 IGT - International Game Technology
+pex2066p // (c) 1995 IGT - International Game Technology
+pex2067p // (c) 1995 IGT - International Game Technology
+pex2068p // (c) 1995 IGT - International Game Technology
+pex2069p // (c) 1995 IGT - International Game Technology
+pex2070p // (c) 1995 IGT - International Game Technology
+pex2111p // (c) 1995 IGT - International Game Technology
+pex2121p // (c) 1995 IGT - International Game Technology
+pex2121pa // (c) 1995 IGT - International Game Technology
+pex2127p // (c) 1995 IGT - International Game Technology
+pex2134p // (c) 1995 IGT - International Game Technology
+pex2150p // (c) 1995 IGT - International Game Technology
+pex2152p // (c) 1995 IGT - International Game Technology
+pex2172p // (c) 1995 IGT - International Game Technology
+pex2172pa // (c) 1995 IGT - International Game Technology
+pex2173p // (c) 1995 IGT - International Game Technology
+pex2178p // (c) 1995 IGT - International Game Technology
+pex2179p // (c) 1995 IGT - International Game Technology
+pex2180p // (c) 1995 IGT - International Game Technology
+pex2211p // (c) 1995 IGT - International Game Technology
+pex2236p // (c) 1995 IGT - International Game Technology
+pex2241p // (c) 1995 IGT - International Game Technology
+pex2244p // (c) 1995 IGT - International Game Technology
+pex2245p // (c) 1995 IGT - International Game Technology
+pex2245pa // (c) 1995 IGT - International Game Technology
+pex2247p // (c) 1995 IGT - International Game Technology
+pex2250p // (c) 1995 IGT - International Game Technology
+pex2251p // (c) 1995 IGT - International Game Technology
+pex2252p // (c) 1995 IGT - International Game Technology
+pex2270p // (c) 1995 IGT - International Game Technology
+pex2272p // (c) 1995 IGT - International Game Technology
+pex2275p // (c) 1995 IGT - International Game Technology
+pex2276p // (c) 1995 IGT - International Game Technology
+pex2279p // (c) 1995 IGT - International Game Technology
+pex2283p // (c) 1995 IGT - International Game Technology
+pex2284p // (c) 1995 IGT - International Game Technology
+pex2287p // (c) 1995 IGT - International Game Technology
+pex2297p // (c) 1995 IGT - International Game Technology
+pex2297pa // (c) 1995 IGT - International Game Technology
+pex2302p // (c) 1995 IGT - International Game Technology
+pex2303p // (c) 1995 IGT - International Game Technology
+pex2306p // (c) 1995 IGT - International Game Technology
+pex2307p // (c) 1995 IGT - International Game Technology
+pex2308p // (c) 1995 IGT - International Game Technology
+pex2309p // (c) 1995 IGT - International Game Technology
+pex2310p // (c) 1995 IGT - International Game Technology
+pex2312p // (c) 1995 IGT - International Game Technology
+pex2314p // (c) 1995 IGT - International Game Technology
+pex2315p // (c) 1995 IGT - International Game Technology
+pex2374p // (c) 1995 IGT - International Game Technology
+pex2376p // (c) 1995 IGT - International Game Technology
+pex2377p // (c) 1995 IGT - International Game Technology
+pex2386p // (c) 1995 IGT - International Game Technology
+pex2412p // (c) 1995 IGT - International Game Technology
+pex2419p // (c) 1995 IGT - International Game Technology
+pex2420p // (c) 1995 IGT - International Game Technology
+pex2421p // (c) 1995 IGT - International Game Technology
+pex2440p // (c) 1995 IGT - International Game Technology
+pex2461p // (c) 1995 IGT - International Game Technology
+pex2474p // (c) 1995 IGT - International Game Technology
+pex2478p // (c) 1995 IGT - International Game Technology
+pex2479p // (c) 1995 IGT - International Game Technology
+pex2480p // (c) 1995 IGT - International Game Technology
+pex2485p // (c) 1995 IGT - International Game Technology
+pexm001p // (c) 1997 IGT - International Game Technology
+pexm002p // (c) 1997 IGT - International Game Technology
+pexm002pa // (c) 1997 IGT - International Game Technology
+pexm003p // (c) 1997 IGT - International Game Technology
+pexm004p // (c) 1997 IGT - International Game Technology
+pexm005p // (c) 1997 IGT - International Game Technology
+pexm006p // (c) 1997 IGT - International Game Technology
+pexm006pa // (c) 1997 IGT - International Game Technology
+pexm007p // (c) 1997 IGT - International Game Technology
+pexm008p // (c) 1997 IGT - International Game Technology
+pexm009p // (c) 1997 IGT - International Game Technology
+pexm013p // (c) 1997 IGT - International Game Technology
+pexmp013 // (c) 1997 IGT - International Game Technology
+pexmp017 // (c) 1997 IGT - International Game Technology
+pexmp017a // (c) 1997 IGT - International Game Technology
+pexmp017b // (c) 1997 IGT - International Game Technology
+pexmp022 // (c) 1997 IGT - International Game Technology
+pexmp026 // (c) 1997 IGT - International Game Technology
+pexmp030 // (c) 1997 IGT - International Game Technology
+pexmp030a // (c) 1997 IGT - International Game Technology
+
+//@source:pes.cpp
+pes //
+
+//@source:pet.cpp
+cbm3008 //
+cbm3016 //
+cbm3032 //
+cbm3032b //
+cbm4016 //
+cbm4032 //
+cbm4032b //
+cbm4032f //
+cbm8032 //
+cbm8032_de //
+cbm8032_fr //
+cbm8032_se //
+cbm8096 //
+cbm8296 //
+cbm8296d //
+cbm8296d_de //
+cbm8296dgv_de //
+cbm8296ed //
+cbm8296gd //
+mmf9000 //
+mmf9000_se //
+pet2001 //
+pet20018 //
+pet2001b //
+pet2001b16 //
+pet2001b32 //
+pet2001n //
+pet2001n16 //
+pet2001n32 //
+pet4016 //
+pet4032 //
+pet4032b //
+pet4032f //
+pet8032 //
+superpet //
+
+//@source:peyper.cpp
+gamatros //
+nemesisp //
+odin //
+odin_dlx //
+odisea //
+poleposn //
+solarwap //
+sonstwar //
+sonstwr2 //
+wolfman //
+
+//@source:pgm.cpp
+ddp2 // (c) 2001 DoDonPachi 2 - Bee Storm
+ddp2100 //
+ddp2100c //
+ddp2100hk //
+ddp2100j //
+ddp2100k //
+ddp2100t //
+ddp2101 //
+ddp2101c //
+ddp2101hk //
+ddp2101j //
+ddp2101k //
+ddp2101t //
+ddp2c //
+ddp2hk //
+ddp2j //
+ddp2k //
+ddp2t //
+ddpdoj // (c) 2002 DoDonPachi Dai-Ou-Jou
+ddpdoja //
+ddpdojb //
+ddpdojblk //
+ddpdojblka //
+dmnfrnt // (c) 2002 Demon Front
+dmnfrnta //
+dmnfrntb //
+dmnfrntpcb //
+drgw2 // (c) 1997 Dragon World 2
+drgw2c //
+drgw2hk //
+drgw2j //
+drgw3 // (c) 1998 Dragon World 3
+drgw3100 //
+drgw3103 //
+drgw3105 //
+dw2001 // (c) 2001 Dragon World 2001
+dw2v100x //
+dwex // (c) 1998 Dragon World 3 EX
+dwpc // (c) 2001 Dragon World Pretty Chance
+espgal // (c) 2003 Espgaluda
+happy6 // (c) 2004 Happy 6
+happy6101 //
+ket // (c) 2002 Ketsui
+ket1 //
+keta //
+ketarr // hack
+ketarr10 // hack
+ketarr15 // hack
+ketarr151 // hack
+ketarrf // hack
+ketarrs15 // hack
+ketarrs151 // hack
+ketb //
+killbld // (c) 1998 The Killing Blade
+killbld104 //
+killbldp // (c) 2004 Killing Blade Plus
+kov // (c) 1999 Knights of Valor
+kov100 //
+kov115 //
+kov2 // (c) 2000 Knights of Valor 2
+kov2100 //
+kov2101 //
+kov2102 //
+kov2103 //
+kov2106 //
+kov2p // (c) 2000 Knights of Valor 2 Nine Dragons
+kov2p202 //
+kov2p204 //
+kovlsjb // bootleg
+kovlsjba // bootleg
+kovlsqh // bootleg
+kovlsqh2 // bootleg
+kovplus // (c) 1999 Knights of Valor Plus (aka 10 Character version)
+kovplusa //
+kovqhsgs // bootleg
+kovsgqyz // bootleg
+kovsgqyza // bootleg
+kovsgqyzb // bootleg
+kovsh // (c) 1999 Knights of Valor Superheroes
+kovsh100 //
+kovsh101 //
+kovsh102 //
+kovsh103 //
+kovshp // (c) 2004 Knights of Valor Superheroes PLUS
+kovshpa //
+kovshxas // bootleg
+kovytzy // (c) 1999 Knights of Valour: Yi Tong Zhong Yuan
+martmast // (c) 2001 Martial Masters
+martmastc //
+martmastc102 //
+olds // (c) 1999 Oriental Legend Super / Special
+olds100 //
+olds100a //
+olds103t //
+oldsplus // (c) 2004 Oriental Legend Super Plus
+orlegend // (c) 1997 Oriental Legend
+orlegend105k //
+orlegend111c //
+orlegend111k //
+orlegend111t //
+orlegendc //
+orlegendca //
+orlegende //
+pgm // Base Unit
+pgm3in1 // (c) 2004 Photo Y2K2 3-in-1
+photoy2k // (c) 1999 Photo Y2k
+photoy2k102 //
+photoy2k104 //
+puzlstar // (c) 1999 Puzzle Star
+puzzli2 // (c) 1999 Puzzli 2
+puzzli2s // (c) 2001 Puzzli 2 Super
+py2k2 // (c) 2001 Photo Y2K2
+svg // (c) 2003 Spectral vs Generation
+svgpcb //
+svgtw //
+theglad // (c) 2003 The Gladiator
+theglad100 //
+theglad101 //
+thegladpcb //
+
+//@source:pgm2.cpp
+ddpdojh //
+kov2nl // (c) 2008
+kov2nlo //
+kov2nloa //
+kov3 //
+orleg2 // (c) 2007
+orleg2o //
+orleg2oa //
+
+//@source:phc25.cpp
+phc25 //
+phc25j //
+
+//@source:phoenix.cpp
+avefenix // bootleg (Video Game)
+avefenixl // bootleg (Laguna)
+avefenixrf // bootleg (Recreativos Franco)
+capitol // bootleg?
+condor // bootleg
+falcon // bootleg
+falconz // bootleg
+fenix // bootleg
+griffon // bootleg (Videotron)
+nextfase // bootleg
+phoenix // (c) 1980 Amstar
+phoenix3 // bootleg
+phoenixa // (c) 1980 Amstar + Centuri license
+phoenixass // bootleg (Assa)
+phoenixb // (c) 1980 Amstar + Centuri license
+phoenixc // bootleg
+phoenixc2 // bootleg
+phoenixc3 // bootleg
+phoenixc4 // bootleg
+phoenixdal // bootleg D&L (No copyright/title)
+phoenixj // (c) 1980 Taito
+phoenixs // bootleg (Sonic)
+phoenixt // (c) 1980 Taito
+pleiadbl // bootleg
+pleiadce // (c) 1981 Centuri + Tehkan
+pleiads // (c) 1981 Tehkan
+pleiadsb2 // bootleg
+pleiadsi // bootleg?
+pleiadsn // Niemer S.A.
+pleiadss // bootleg
+survival // (c) 1982 Rock-ola
+vautour // bootleg (Jeutel)
+vautourz // bootleg
+vautourza // bootleg (Jeutal)
+
+//@source:photon.cpp
+phklad //
+phpython //
+phtetris //
+
+//@source:photon2.cpp
+black //
+brod //
+kok //
+
+//@source:photoply.cpp
+photoply //
+
+//@source:phunsy.cpp
+phunsy //
+
+//@source:piggypas.cpp
+3lilpigs //
+dumpump //
+fidlstix //
+hoopshot //
+jackbean //
+piggypas //
+rndrndqs //
+
+//@source:pimps.cpp
+pimps //
+
+//@source:pinball2k.cpp
+rfmpb //
+rfmpbr2 //
+swe1pb //
+
+//@source:pingpong.cpp
+cashquiz // (c) 1986 Zilec-Zenitone
+merlinmm // (c) 1986 Zilec-Zenitone
+pingpong // GX555 (c) 1985
+
+//@source:pinkiri8.cpp
+janshi //
+pinkiri8 //
+ronjan //
+
+//@source:pipbug.cpp
+pipbug //
+
+//@source:pipedrm.cpp
+hatris // (c) 1990 Video System Co. (US)
+hatrisj // (c) 1990 Video System Co. (Japan)
+pipedrm // (c) 1990 Video System Co. (World)
+pipedrmj // (c) 1990 Video System Co. (Japan)
+pipedrmt // (c) 1990 Video System Co. (Taiwan)
+pipedrmu // (c) 1990 Video System Co. (US)
+
+//@source:pipeline.cpp
+pipeline // (c) 1990 Daehyun Electronics
+
+//@source:pirates.cpp
+genix // (c) 199? NIX
+pirates // (c) 1994 NIX
+piratesb // bootleg?
+
+//@source:pitagjr.cpp
+pitagjr // Pitagorin Junior
+
+//@source:pitnrun.cpp
+pitnrun // PR (c) 1984 Taito Corporation
+pitnruna // PR (c) 1984 Taito Corporation
+
+//@source:pk8000.cpp
+hobby //
+pk8002 //
+vesta //
+
+//@source:pk8020.cpp
+bk8t //
+kontur //
+korvet //
+neiva //
+
+//@source:pkscram.cpp
+pkscram // (c) 1993 Cosmo Electronics Corporation
+
+//@source:pktgaldx.cpp
+pktgaldx // MAZ (c) 1993 Data East (Euro v3.00)
+pktgaldxb // bootleg
+pktgaldxj // MAZ (c) 1993
+
+//@source:plan80.cpp
+plan80 //
+
+//@source:play_1.cpp
+bigtown //
+chance //
+lastlap //
+party //
+spcgambl //
+
+//@source:play_2.cpp
+antar //
+antar2 //
+attack //
+blkfever //
+cerberup //
+evlfight //
+madrace //
+zira //
+
+//@source:play_3.cpp
+megaaton //
+megaatona //
+
+//@source:play_5.cpp
+fldragon //
+kz26 //
+nautilus //
+rock2500 //
+sklflite //
+spain82 //
+starfirp //
+starfirpa //
+theraid //
+trailer //
+ufo_x //
+
+//@source:playch10.cpp
+pc_1942 // (c) 1985 Capcom
+pc_bball // (c) 1984 Nintendo of America
+pc_bfght // (c) 1984 Nintendo
+pc_bload // (c) 1990 Jaleco (Nintendo of America license)
+pc_bstar // (c) 1989 SNK (Nintendo of America license)
+pc_cntra // (c) 1988 Konami (Nintendo of America license)
+pc_cshwk // (c) 1989 Rare (Nintendo of America license)
+pc_cvnia // (c) 1987 Konami (Nintendo of America license)
+pc_dbldr // (c) 1987 Konami (Nintendo of America license)
+pc_ddrgn // (c) 1988 Technos
+pc_drmro // (c) 1990 Nintendo
+pc_duckh // (c) 1984 Nintendo
+pc_ebike // (c) 1984 Nintendo
+pc_ftqst // (c) 1989 Sunsoft (Nintendo of America license)
+pc_gntlt // (c) 1985 Atari/Tengen (Nintendo of America license)
+pc_golf // (c) 1984 Nintendo
+pc_goons // (c) 1986 Konami
+pc_grdue // (c) 1986 Konami
+pc_grdus // (c) 1986 Konami
+pc_hgaly // (c) 1984 Nintendo
+pc_kngfu // (c) 1984 Irem (Nintendo license)
+pc_mario // (c) 1983 Nintendo
+pc_miket // (c) 1987 Nintendo
+pc_mman3 // (c) 1990 Capcom USA (Nintendo of America license)
+pc_moglf // (c) 1991 Nintendo
+pc_mtoid // (c) 1986 Nintendo
+pc_ngai2 // (c) 1990 Tecmo (Nintendo of America license)
+pc_ngai3 // (c) 1991 Tecmo (Nintendo of America license)
+pc_ngaid // (c) 1989 Tecmo (Nintendo of America license)
+pc_pinbt // (c) 1988 Rare (Nintendo of America license)
+pc_pwbld // (c) 1991 Taito (Nintendo of America license)
+pc_pwrst // (c) 1986 Nintendo
+pc_radr2 // (c) 1990 Square (Nintendo of America license)
+pc_radrc // (c) 1987 Square
+pc_rcpam // (c) 1987 Rare
+pc_rkats // (c) 1991 Atlus (Nintendo of America license)
+pc_rnatk // (c) 1987 Konami (Nintendo of America license)
+pc_rrngr // (c) Capcom USA (Nintendo of America license)
+pc_rygar // (c) 1987 Tecmo (Nintendo of America license)
+pc_sjetm // (c) 1990 Rare
+pc_smb // (c) 1985 Nintendo
+pc_smb2 // (c) 1988 Nintendo
+pc_smb3 // (c) 1988 Nintendo
+pc_suprc // (c) 1990 Konami (Nintendo of America license)
+pc_tbowl // (c) 1989 Tecmo (Nintendo of America license)
+pc_tenis // (c) 1983 Nintendo
+pc_tkfld // (c) 1987 Konami (Nintendo of America license)
+pc_tmnt // (c) 1989 Konami (Nintendo of America license)
+pc_tmnt2 // (c) 1990 Konami (Nintendo of America license)
+pc_trjan // (c) 1986 Capcom USA (Nintendo of America license)
+pc_vball // (c) 1986 Nintendo
+pc_virus // (c) 1990 Nintendo
+pc_wcup // (c) 1990 Technos (Nintendo license)
+pc_wgnmn // (c) 1984 Nintendo
+pc_ynoid // (c) 1990 Capcom USA (Nintendo of America license)
+playch10 //
+
+//@source:playmark.cpp
+bigtwin // (c) 1995
+bigtwinb // (c) 1995
+excelsr // (c) 1995
+excelsra // (c) 1995
+hotmind // (c) 1995
+hrdtimes // (c) 1994
+hrdtimesa // (c) 1994
+luckboomh // (c) 1995
+wbeachvl // (c) 1995
+wbeachvl2 // (c) 1995
+wbeachvl3 // (c) 1995
+
+//@source:plus4.cpp
+c116 //
+c16 //
+c16_hu //
+c16p //
+c232 //
+c264 //
+plus4 //
+plus4p //
+v364 //
+
+//@source:pluto5.cpp
+hb_bar7 // Bar Seven (Fairgames)
+hb_bar7a //
+hb_bigx // Big X (JPM)
+hb_bigxa //
+hb_bigxb //
+hb_bigxc //
+hb_bigxd //
+hb_cashc // Cash Crusade (Qps)
+hb_cashca //
+hb_cashcb //
+hb_cashx // Cash X (Fairgames)
+hb_cashxa //
+hb_ccow // Cash Cow (Qps)
+hb_ccowa //
+hb_ccowb //
+hb_cr // Cash Raker (QPS)
+hb_cra //
+hb_crb //
+hb_cwf // Cherry Win Falls (Fairgames)
+hb_cwfa //
+hb_dac // Dough & Arrow Club (Qps) [c]
+hb_daca //
+hb_dacb //
+hb_dacc //
+hb_dacd //
+hb_dace //
+hb_dacf //
+hb_dacg //
+hb_dacz //
+hb_frtcl // Fruitopia Club (Qps) [c]
+hb_frtcla //
+hb_frtclb //
+hb_frtclc //
+hb_frtcld //
+hb_frtcle //
+hb_frtclf //
+hb_frtclg //
+hb_frtclh //
+hb_frtcli //
+hb_frtclj //
+hb_frtclk //
+hb_frtcll //
+hb_frtclm //
+hb_frtcln //
+hb_gldpl // Golden Palace (Mazooma)
+hb_gldpla //
+hb_gldwn // Golden Winner (Fairgames)
+hb_gldwna //
+hb_gpal // G' Palace (Qps)
+hb_gpala //
+hb_gpalb //
+hb_gpalc //
+hb_gpald //
+hb_gpale //
+hb_gpalf //
+hb_gpalg //
+hb_gpalh //
+hb_gpali //
+hb_hotst // Hot Stuff??
+hb_hotsta //
+hb_hotstb //
+hb_hotstc //
+hb_hotstd //
+hb_hotste //
+hb_hotstf //
+hb_hotstg //
+hb_hotsth //
+hb_jailb // Jail Break (Qps)
+hb_jailba //
+hb_jkrwl // Jokers Wild (Fairgames)
+hb_jkrwla //
+hb_medal // Medallion Job (Qps)
+hb_mrmon // Mr. Money (Qps)
+hb_mrmona //
+hb_mrmonb //
+hb_mrmonc //
+hb_rckrl // Rock 'n' Roll (Qps)
+hb_rckrla //
+hb_rckrlb //
+hb_rckrlc //
+hb_rckrld //
+hb_rckrle //
+hb_rckrlf //
+hb_rckrlg //
+hb_rhv // Red Hot Voucher (Qps)
+hb_rhva //
+hb_ringb // Ring A Bell (JPM)
+hb_ringba //
+hb_ringbb //
+hb_ringbc //
+hb_ringbd //
+hb_ringbe //
+hb_ydd // Yabba-Dabba-Dough (Qps)
+hb_ydda //
+
+//@source:plygonet.cpp
+plygonet // GX305 (c) 1993
+polynetw // GX305 too? (c) 1993
+
+//@source:pm68k.cpp
+pm68k //
+
+//@source:pmd85.cpp
+alfa // Alfa (PMD-85.1 clone)
+c2717 // Consul 2717 (PMD-85.2 clone)
+c2717pmd // Consul 2717 with PMD-32
+mato // Mato (PMD-85.2 clone)
+pmd851 // PMD-85.1
+pmd852 // PMD-85.2
+pmd852a // PMD-85.2A
+pmd852b // PMD-85.2B
+pmd853 // PMD-85.3
+
+//@source:pmi80.cpp
+pmi80 //
+
+//@source:pntnpuzl.cpp
+pntnpuzl // Century?
+
+//@source:pocketc.cpp
+pc1245 // Pocket Computer 1245
+pc1250 // Pocket Computer 1250
+pc1251 // Pocket Computer 1251
+pc1255 // Pocket Computer 1255
+pc1260 // Pocket Computer 1260
+pc1261 // Pocket Computer 1261
+pc1350 // Pocket Computer 1350
+pc1360 // Pocket Computer 1360
+pc1401 // Pocket Computer 1401
+pc1402 // Pocket Computer 1402
+pc1403 // Pocket Computer 1403
+pc1403h // Pocket Computer 1403H
+pc1450 // Pocket Computer 1450
+trs80pc3 // Tandy TRS80 PC-3
+
+//@source:pockstat.cpp
+pockstat // 1999 Sony PocketStation
+
+//@source:poisk1.cpp
+poisk1 //
+
+//@source:pokechmp.cpp
+billlist //
+pokechmp // Korean hack of Pocket Gal
+pokechmpa //
+
+//@source:pokemini.cpp
+pokemini // Nintendo Pokemon Mini
+
+//@source:poker72.cpp
+poker72 //
+
+//@source:polepos.cpp
+polepos // (c) 1982
+polepos2 // (c) 1983
+polepos2a // 136014 (c) 1983 + Atari license
+polepos2b // bootleg
+polepos2bi // bootleg
+poleposa1 // 136014 (c) 1982 Atari
+poleposa2 // 136014 (c) 1982 + Atari license
+poleposj // (c) 1982
+ppspeed // bootleg
+topracer // bootleg
+topracera // bootleg
+topracern // bootleg
+
+//@source:policetr.cpp
+policetr // (c) 1996 P&P Marketing
+policetr10 // (c) 1996 P&P Marketing
+policetr11 // (c) 1996 P&P Marketing
+policetr13a // (c) 1996 P&P Marketing
+policetr13b // (c) 1996 P&P Marketing
+sshooter // (c) 1998 P&P Marketing
+sshooter11 // (c) 1998 P&P Marketing
+sshooter12 // (c) 1998 P&P Marketing
+sshooter17 // (c) 1998 P&P Marketing
+
+//@source:poly.cpp
+poly1 //
+
+//@source:poly88.cpp
+poly88 //
+poly8813 //
+
+//@source:poly880.cpp
+poly880 //
+
+//@source:polyplay.cpp
+polyplay //
+
+//@source:pong.cpp
+breakout // (c) 1976 Atari
+pong // (c) 1972 Atari
+pongd // (c) 1973 Atari
+pongf // (c) 1972 Atari
+
+//@source:poolshrk.cpp
+poolshrk // 006281 1977/06 [6800]
+
+//@source:pooyan.cpp
+pootan // bootleg
+pooyan // GX320 (c) 1982
+pooyans // GX320 (c) 1982 Stern
+
+//@source:popeye.cpp
+popeye // (c) 1982
+popeyebl // bootleg
+popeyef // (c) 1982
+popeyeu // (c) 1982
+skyskipr // (c) 1981
+
+//@source:popobear.cpp
+popobear // (c) 2000 BMC
+
+//@source:popper.cpp
+popper // (c) 1983 Omori Electric Co., Ltd.
+
+//@source:portfoli.cpp
+pofo //
+
+//@source:portrait.cpp
+portrait // (c) 1983 Olympia
+portraita // (c) 1983 Olympia
+
+//@source:potgoldu.cpp
+potgoldu // (c) 200? U.S. Games
+
+//@source:powerbal.cpp
+hotminda // (c) 1995
+magicstk // (c) 1995
+powerbal // (c) 1994
+
+//@source:powerins.cpp
+powerins // (c) 1993 Atlus (USA)
+powerinsa // (c) 1993 Atlus (bootleg of USA version)
+powerinsb // (c) 1993 Atlus (bootleg of USA version)
+powerinsj // (c) 1993 Atlus (Japan)
+
+//@source:pp01.cpp
+pp01 //
+
+//@source:ppmast93.cpp
+ppmast93 // (c) 1993 Electronic Devices S.R.L.
+
+//@source:prehisle.cpp
+gensitou // A8003 'GT' (c) 1989
+prehisle // A8003 'GT' (c) 1989
+prehislek // A8003 'GT' (c) 1989
+prehisleu // A8003 'GT' (c) 1989
+
+//@source:prestige.cpp
+cars2lap // CARS 2 Laptop (Germany)
+gj4000 // Genius Junior 4000 (Germany)
+gj5000 // Genius Junior 5000 (Germany)
+gjmovie // Genius Junior Movie (Germany)
+gjrstar // Genius Junior Redstar(Germany)
+gjrstar2 // Genius Junior Redstar 2 (Germany)
+gjrstar3 // Genius Junior Redstar 3 (Germany)
+gkidabc // Genius KID ABC Fan (Germany)
+gl6000sl // Genius Leader 6000SL (Germany)
+gl6600cx // Genius Leader 6600CX (Germany)
+gl7007sl // Genius Leader 7007SL (Germany)
+glcolor // Genius Leader Color (Germany)
+glmcolor // Genius Leader Magic Color (Germany)
+glscolor // Genius Leader Super Color (Germany)
+gwnf // Genius Winner Notebook Fun (Germany)
+prestige // PreComputer Prestige Elite
+snotec // Bandai Super Note Club (Japan)
+snotecex // Bandai Super Note Club EX (Japan)
+
+//@source:primo.cpp
+primoa32 // Primo A-32
+primoa48 // Primo A-48
+primoa64 // Primo A-64
+primob32 // Primo B-32
+primob48 // Primo B-48
+primob64 // Primo B-64
+primoc64 // Primo C-64
+
+//@source:pro80.cpp
+pro80 //
+
+//@source:proconn.cpp
+pr_5xcsh // 5x Cash (Project)
+pr_7hvn // 777 Heaven (Project)
+pr_7hvna //
+pr_7hvnb //
+pr_7hvnc //
+pr_7hvnd //
+pr_7hvne //
+pr_7hvnf //
+pr_7hvng //
+pr_7hvnh //
+pr_7hvni //
+pr_7hvnj //
+pr_7hvnk //
+pr_7hvnl //
+pr_7hvnm //
+pr_7hvnn //
+pr_7hvno //
+pr_7hvnp //
+pr_7hvnq //
+pr_7hvnr //
+pr_7hvns //
+pr_7hvnt //
+pr_7hvnu //
+pr_alwy9 // Always Nine (Pcp)
+pr_alwy9a //
+pr_barbl // Bars & Bells (Project)
+pr_batls // Battleships (Project)
+pr_batlsa //
+pr_batlsb //
+pr_bears // Bear Streak (Coinworld)
+pr_bearsa //
+pr_bearsb //
+pr_bearx // Bear X (Coinworld)
+pr_bearxa //
+pr_bearxb //
+pr_bearxc //
+pr_bearxd //
+pr_bearxe //
+pr_bearxf //
+pr_bearxg //
+pr_bearxh //
+pr_bearxi //
+pr_bearxj //
+pr_bearxk //
+pr_bearxl //
+pr_bearxlp //
+pr_bearxm //
+pr_bigdp // Big Dipper (Project)
+pr_bigdpa //
+pr_btwar // Beat The Warden (Project)
+pr_btwara //
+pr_btwarb //
+pr_bulbn // Bully's Big Night (Project)
+pr_bulbna //
+pr_bulbnb //
+pr_buljp // Bully's Jackpot (Project)
+pr_buljpa //
+pr_bulls // Bullseye (Project)
+pr_bullsa //
+pr_bullsb //
+pr_cas7 // Casino Jackpot 7s (Project)
+pr_cashb // Cash Back (Project)
+pr_chico // Chico the Bandit (Project)
+pr_chicoa //
+pr_chicob //
+pr_coolm // Cool Million (Project)
+pr_coolma //
+pr_coolmb //
+pr_coyot // Crazy Coyote (Pcp)
+pr_coyota //
+pr_crz77 // Crazy 777s (Project)
+pr_crzbr // Crazy Bars (Project)
+pr_crzpy // Crazy Pays (Project)
+pr_dblup // Double Up (Project)
+pr_fire // Fircecracker (Project)
+pr_flshc // Flash The Cash (Project)
+pr_fspot // Fun Spot (Coinworld)
+pr_fspota //
+pr_fspotb //
+pr_fspotc //
+pr_fspotd //
+pr_fspote //
+pr_fspotf //
+pr_fspotg //
+pr_ftwhl // Fortune Wheel (Project)
+pr_funrn // Fun On The Run (Project)
+pr_gdft // Good Fortune (Project)
+pr_gldng // Golden Nugget (Project)
+pr_gldnl // Golden Nile (Project)
+pr_gnuc // Golden Nugget (Coinworld)
+pr_gnuca //
+pr_gogld // Go For Gold (Project)
+pr_happy // Happy Days (Project)
+pr_heato // The Heat Is On (Project)
+pr_hiclm // Hi Climber (Project)
+pr_hit6 // Hit The Six (Project)
+pr_hit6a //
+pr_hit6b //
+pr_hotcs // Hot Cash (Project)
+pr_hotsp // Hot Spots (Project)
+pr_jkpt7 // Jackpot 7's (Project)
+pr_jkrwd // Jokers Wild (Project)
+pr_jumpj // Jumping Jacks (Project)
+pr_jumpja //
+pr_lday // 'L' Of A Day (Project)
+pr_ldaya //
+pr_magln // Magic Lines (Coinworld)
+pr_maglna //
+pr_medl // Medalist (Project)
+pr_megmn // Mega Money (Project)
+pr_nifty // Nifty Fifty (Project)
+pr_nudxs // Nudge XS (Project)
+pr_qksht // Quickshot (Maygay)
+pr_rags // Rags To Riches (Project)
+pr_reflx // Reflex (Project)
+pr_roadr // Road Riot (Project)
+pr_roll // The Roll (Project)
+pr_sevab // Seven's Above (Project)
+pr_sevml // Sevens & Melons (Project)
+pr_sptb // Simply The Best (Pcp)
+pr_supbr // Super Bars (PCP)
+pr_swop // Swop It (Ace)
+pr_theme // Theme Park (Project)
+pr_trktp //
+pr_trktr // Trick or Treat (Project)
+pr_trpx // Triple X (Project)
+pr_ttrai // Treasure Trail (Project)
+pr_upnun // Up & Under (Project)
+pr_walls // Wall Street (Project)
+pr_whlft // Wheel Of Fortune (Project)
+pr_wldkn // Wild Kings (Project)
+pr_wnstk // Winning Streak (Coinworld)
+
+//@source:prof180x.cpp
+prof180x //
+prof181x //
+
+//@source:prof80.cpp
+prof80 //
+
+//@source:progolf.cpp
+progolf // (c) 1981
+progolfa // (c) 1981
+
+//@source:prophet600.cpp
+prpht600 // 1983 Sequential Circuits
+
+//@source:proteus3.cpp
+proteus3 //
+
+//@source:ps2.cpp
+i8530286 // IBM PS/2 Model 30-286
+i8530h31 // IBM PS/2 8530-H31 (Model 30/286)
+i8535043 // IBM PS/2 8535-043 (Model 35)
+i8550021 // IBM PS/2 8550-021 (Model 50)
+i8550061 // IBM PS/2 8550-061 (Model 50Z)
+i8555081 // IBM PS/2 8550-081 (Model 55SX)
+i8580071 // IBM PS/2 8580-071 (Model 80)
+i8580111 // IBM PS/2 8580-111 (Model 80)
+
+//@source:pse.cpp
+bazooka // (c) 1976 PSE
+bazookabr // (c) 1977 Taito do Brasil
+dpatrol // (c) 1977 PSE
+dpatrola // (c) 1977 PSE / Telegames
+
+//@source:psikyo.cpp
+btlkroad // (c) 1994
+btlkroadk // (c) 1994
+gunbird // (c) 1994
+gunbirdj // (c) 1994
+gunbirdk // (c) 1994
+s1945 // (c) 1995
+s1945a // (c) 1995
+s1945bl // (c) 1995 (Hong Kong bootleg)
+s1945j // (c) 1995
+s1945jn // (c) 1995
+s1945k // (c) 1995
+samuraia // (c) 1993 (World)
+sngkace // (c) 1993 (Japan)
+sngkacea // (c) 1993 (Japan)
+tengai // (c) 1996
+tengaij // (c) 1996
+
+//@source:psikyo4.cpp
+hgkairak // (c) 1998
+hotdebut // (c) 2000
+hotgm4ev // (c) 2000
+hotgmck // (c) 1997
+hotgmck3 // (c) 1999
+hotgmcki // (c) 2001
+loderndf // (c) 2000
+loderndfa // (c) 2000
+
+//@source:psikyosh.cpp
+daraku // (c) 1998
+dragnblz // (c) 2000
+gnbarich // (c) 2001
+gunbird2 // (c) 1998
+mjgtaste // (c) 2002
+s1945ii // (c) 1997
+s1945iii // (c) 1999
+sbomber // (c) 1998
+sbombera // (c) 1998
+soldivid // (c) 1997
+tgm2 // (c) 2000
+tgm2p // (c) 2000
+
+//@source:psion.cpp
+psion1 //
+psioncm //
+psionla //
+psionlam //
+psionlz //
+psionlz64 //
+psionlz64s //
+psionp200 //
+psionp350 //
+psionp464 //
+psionxp //
+
+//@source:psx.cpp
+psa // 1995 Sony PlayStation (Asia-Pacific)
+pse // 1995 Sony PlayStation (Europe)
+psj // 1994 Sony PlayStation (Japan)
+psu // 1995 Sony PlayStation (USA)
+
+//@source:psychic5.cpp
+bombsa // (c) 1988 Jaleco
+psychic5 // (c) 1987 Jaleco
+psychic5j // (c) 1987 Jaleco
+
+//@source:pt68k4.cpp
+pt68k2 //
+pt68k4 //
+
+//@source:ptcsol.cpp
+sol20 //
+
+//@source:pturn.cpp
+pturn // (c) 1984 Jaleco
+
+//@source:puckpkmn.cpp
+jzth //
+puckpkmn // (c) 2000 Genie
+puckpkmna // (c) 2000 IBS
+puckpkmnb // (c) 2000 IBS
+
+//@source:pulsar.cpp
+pulsarlb //
+
+//@source:punchout.cpp
+armwrest // (c) 1985
+punchita // bootleg
+punchout // (c) 1984
+punchouta // (c) 1984
+punchoutj // (c) 1984 (Japan)
+spnchout // (c) 1984
+spnchouta // (c) 1984
+spnchoutj // (c) 1984 (Japan)
+
+//@source:pv1000.cpp
+pv1000 // Casio PV-1000
+
+//@source:pv2000.cpp
+pv2000 // Casio PV-2000
+
+//@source:pv9234.cpp
+pv9234 //
+
+//@source:pve500.cpp
+pve500 // SONY PVE-500
+
+//@source:px4.cpp
+px4 // 1985 Epson PX-4
+px4p // 1985 Epson PX-4+
+
+//@source:px8.cpp
+px8 //
+
+//@source:pyl601.cpp
+pyl601 //
+pyl601a //
+
+//@source:pyson.cpp
+pyson // Konami Pyson Bios
+wswe // World Soccer Winning Eleven
+wswe2k3 // World Soccer Winning Eleven 2003
+
+//@source:pzletime.cpp
+pzletime //
+
+//@source:qdrmfgp.cpp
+qdrmfgp // 1994.12 GQ460 (Japan)
+qdrmfgp2 // 1995.09 GE557 (Japan)
+
+//@source:qix.cpp
+complexx // CX (c) 1984 Taito America Corporation
+elecyoyo // YY (c) 1982 Taito America Corporation
+elecyoyo2 // YY (c) 1982 Taito America Corporation
+kram // KS (c) 1982 Taito America Corporation
+kram2 // KS (c) 1982 Taito America Corporation
+kram3 // KS (c) 1982 Taito America Corporation
+qix // LK (c) 1981 Taito America Corporation
+qix2 // ?? (c) 1981 Taito America Corporation
+qixa // LK (c) 1981 Taito America Corporation
+qixb // LK (c) 1981 Taito America Corporation
+qixo // LK (c) 1981 Taito America Corporation
+sdungeon // SD (c) 1981 Taito America Corporation
+slither // (c) 1982 Century II
+slithera // (c) 1982 Century II
+zookeep // ZA (c) 1982 Taito America Corporation
+zookeep2 // ZA (c) 1982 Taito America Corporation
+zookeep3 // ZA (c) 1982 Taito America Corporation
+
+//@source:ql.cpp
+ql // 1984 Sinclair QL (UK)
+ql_de // 1984 Sinclair QL (Germany)
+ql_dk // 1984 Sinclair QL (Denmark)
+ql_es // 1984 Sinclair QL (Spain)
+ql_fr // 1984 Sinclair QL (France)
+ql_gr // 1984 Sinclair QL (Greece)
+ql_it // 1984 Sinclair QL (Italy)
+ql_se // 1984 Sinclair QL (Sweden)
+ql_us // 1984 Sinclair QL (USA)
+tonto //
+
+//@source:qtsbc.cpp
+qtsbc //
+
+//@source:quakeat.cpp
+quake // (c) 19?? Lazer-Tron / iD Software
+
+//@source:quantum.cpp
+quantum // 136016 (c) 1982 // made by Gencomp
+quantum1 // 136016 (c) 1982 // made by Gencomp
+quantump // 136016 (c) 1982 // made by Gencomp
+
+//@source:quasar.cpp
+quasar // (c) 1980 Zelco Games Italy
+quasara // (c) 1980 Zelco Games Italy
+
+//@source:queen.cpp
+queen //
+
+//@source:quizdna.cpp
+gakupara // (c) 1991 NMK
+gekiretu // (c) 1992 Face
+quizdna // (c) 1992 Face
+
+//@source:quizo.cpp
+quizo // (c) 1985 Seoul Coin Corp.
+quizoa // (c) 1985 Seoul Coin Corp.
+
+//@source:quizpani.cpp
+quizpani // (c) 1993 NMK
+
+//@source:quizpun2.cpp
+quizpun // (c) 1989 Space Computer System of Korea
+quizpun2 // (c) 1989 Space Computer System of Korea
+
+//@source:quizshow.cpp
+quizshow // 005464 1976/04 [2650]
+
+//@source:qx10.cpp
+qx10 //
+
+//@source:r2dtank.cpp
+r2dtank // (c) 1980 Sigma Ent. Inc.
+
+//@source:r2dx_v33.cpp
+nzeroteam // (c) 1997 Seibu Kaihatsu
+r2dx_v33 // (c) 1996 Seibu Kaihatsu
+r2dx_v33_r2 // (c) 1996 Seibu Kaihatsu
+zerotm2k // (c) 2000 Seibu Kaihatsu
+
+//@source:r9751.cpp
+r9751 // ROLM 9751 phone system
+
+//@source:rabbit.cpp
+rabbit // (c) 1997 Electronic Arts
+
+//@source:radio86.cpp
+impuls03 //
+kr03 //
+mikron2 //
+radio16 //
+radio4k //
+radio86 //
+radioram //
+radiorom //
+rk7007 //
+rk700716 //
+spektr01 //
+
+//@source:raiden.cpp
+raiden // (c) 1990 Seibu Kaihatsu
+raidena // (c) 1990 Seibu Kaihatsu
+raidenb // (c) 1990 Seibu Kaihatsu
+raidenk // (c) 1990 Seibu Kaihatsu + IBL Corporation license
+raident // (c) 1990 Seibu Kaihatsu + Liang HWA Electronics license
+raidenu // (c) 1990 Seibu Kaihatsu + Fabtek license
+raidenua // (c) 1990 Seibu Kaihatsu + Fabtek license
+
+//@source:raiden2.cpp
+raiden2 // (c) 1993 Seibu Kaihatsu + Fabtek license
+raiden2dx // (c) 1993 Seibu Kaihatsu
+raiden2e // (c) 1993 Seibu Kaihatsu
+raiden2ea // (c) 1993 Seibu Kaihatsu
+raiden2eu // (c) 1993 Seibu Kaihatsu + Fabtek license
+raiden2eua // (c) 1993 Seibu Kaihatsu + Fabtek license
+raiden2f // (c) 1993 Seibu Kaihatsu
+raiden2g // (c) 1993 Seibu Kaihatsu + Tuning license
+raiden2hk // (c) 1993 Seibu Kaihatsu + Metrotainment license
+raiden2i // (c) 1993 Seibu Kaihatsu
+raiden2j // (c) 1993 Seibu Kaihatsu
+raiden2nl // (c) 1993 Seibu Kaihatsu
+raiden2sw // (c) 1993 Seibu Kaihats
+raiden2u // (c) 1993 Seibu Kaihatsu + Fabtek license
+raidendx // (c) 1994 Seibu Kaihatsu
+raidendxa1 // (c) 1994 Seibu Kaihatsu + Metrotainment license
+raidendxa2 // (c) 1994 Seibu Kaihatsu + Metrotainment license
+raidendxch //
+raidendxg // (c) 1994 Seibu Kaihatsu + Tuning license
+raidendxj // (c) 1994 Seibu Kaihatsu
+raidendxk // (c) 1994 Seibu Kaihatsu
+raidendxnl // (c) 1994 Seibu Kaihatsu
+raidendxu // (c) 1994 Seibu Kaihatsu + Fabtek license
+xsedae // (c) 1995 Dream Island
+zeroteam // (c) 1993 Seibu Kaihatsu + Fabtek license
+zeroteama // (c) 1993 Seibu Kaihatsu
+zeroteamb // (c) 1993 Seibu Kaihatsu
+zeroteamc // (c) 1993 Seibu Kaihatsu + Liang Hwa license
+zeroteamd // (c) 1993 Seibu Kaihatsu + Dreamsoft license
+zeroteams // (c) 1993 Seibu Kaihatsu
+zeroteamsr // (c) 1993 Seibu Kaihatsu
+
+//@source:rainbow.cpp
+rainbow // 1983 DEC Rainbow 100-B
+rainbow100a // 1982 DEC Rainbow 100-A
+rainbow190 // 1985 DEC Rainbow 190
+
+//@source:rallyx.cpp
+commsega // (c) 1983 Sega
+cottong // bootleg
+gutangtn // GX359 (c) 1982 Konami + Sega license
+jackler // 1 9 8 2 (Jungler Bootleg)
+jungler // GX327 (c) 1981 Konami
+junglers // GX327 (c) 1981 Stern
+locoboot // bootleg
+locomotn // GX359 (c) 1982 Konami + Centuri license
+nrallyx // (c) 1981 Namco
+nrallyxb // (c) 1981 Namco
+rallyx // (c) 1980 Namco
+rallyxa // (c) 1980 Namco
+rallyxm // (c) 1980 Midway
+rallyxmr // Model Racing bootleg
+savanna // Olympia (c) 1982 (Jungler bootleg)
+tactcian // GX335 (c) 1982 Sega
+tactcian2 // GX335 (c) 1981 Sega
+
+//@source:rambo.cpp
+metamaq2 // Metamaquina 2 desktop 3d printer
+
+//@source:rampart.cpp
+rampart // 136082 (c) 1990
+rampart2p // 136082 (c) 1990
+rampartj // 136082 (c) 1990 (Japan)
+
+//@source:ramtek.cpp
+bballrmt // (c) 1974 Ramtek
+cleanswp // (c) 1974 Ramtek
+hockyrmt // (c) 1973 Ramtek
+soccrrmt // (c) 1973 Ramtek
+trivia // (c) 1976 Ramtek
+vollyrmt // (c) 1973 Ramtek
+wipeormt // (c) 1974 Ramtek
+
+//@source:rastan.cpp
+rastan // B04 (c) 1987 Taito Corporation Japan (World)
+rastana // B04 (c) 1987 Taito Corporation Japan (World)
+rastanu // B04 (c) 1987 Taito America Corporation (US)
+rastanua // B04 (c) 1987 Taito America Corporation (US)
+rastanub // B04 (c) 1987 Taito America Corporation (US)
+rastsaga // B04 (c) 1987 Taito Corporation (Japan)
+rastsagaa // B04 (c) 1987 Taito Corporation (Japan)
+
+//@source:rastersp.cpp
+fbcrazy // 1997
+rotr // 1994
+
+//@source:ravens.cpp
+ravens //
+ravens2 //
+
+//@source:rbisland.cpp
+jumping // bootleg
+jumpinga // bootleg (Seyutu)
+jumpingi // bootleg (Seyutu / Imnoe)
+rbisland // B22 (c) 1987 Taito Corporation
+rbislande // B39 (c) 1988 Taito Corporation
+rbislando // B22 (c) 1987 Taito Corporation
+
+//@source:rbmk.cpp
+rbmk // (c) 1995 GMS
+
+//@source:rc759.cpp
+rc759 // 1984 RC759
+
+//@source:rcorsair.cpp
+rcorsair // (c) 1984 Nakasawa
+
+//@source:rd100.cpp
+rd100 //
+
+//@source:rd110.cpp
+d110 //
+
+//@source:re900.cpp
+bs94 // (c) 1994 Entretenimientos GEMINIS
+re900 // (c) 1993 Entretenimientos GEMINIS
+
+//@source:realbrk.cpp
+dai2kaku // "522" DaiDaiKakumei (Japan)
+pkgnsh // "505" Pachinko Gindama Shoubu 1998 (Japan)
+pkgnshdx // "522" Pachinko Gindama Shoubu DX 1998 (Japan)
+realbrk // "600" Billiard Academy Real Break 1998 (Europe)
+realbrkj // "523" Billiard Academy Real Break 1998 (Japan)
+realbrkk // "600" Billiard Academy Real Break 1998 (Korea)
+realbrko // "600" Billiard Academy Real Break 1998 (Europe)
+
+//@source:redalert.cpp
+demoneye // M27 (c) 1981
+panther // M27 no copyright notice
+redalert // M27 (c) 1981 + "GDI presents"
+ww3 // M27 (c) 1981
+
+//@source:redclash.cpp
+redclash // (c) 1981 Tehkan
+redclasha // (c) 1981 Tehkan
+redclashk // (c) Kaneko (bootleg?)
+zerohour // 8011 (c) Universal
+zerohoura // 8011 (c) Universal
+zerohouri //
+
+//@source:relief.cpp
+relief // 136093 (c) 1992
+relief2 // 136093 (c) 1992
+relief3 // 136093 (c) 1992
+
+//@source:renegade.cpp
+kuniokun // TA-0018 (c) 1986
+kuniokunb // bootleg
+renegade // TA-0018 (c) 1986 + Taito America license
+
+//@source:replicator.cpp
+replica1 // Makerbot Replicator 1 desktop 3d printer
+
+//@source:retofinv.cpp
+retofinv // A37 (c) 1985 Taito Corporation
+retofinv1 // bootleg
+retofinv2 // bootleg
+
+//@source:rex6000.cpp
+ds2 //
+oz750 // 199? Sharp Wizard OZ-750
+rex6000 //
+
+//@source:rgum.cpp
+rgum //
+
+//@source:riscpc.cpp
+a7000 // 1995 Acorn Archimedes 7000
+a7000p // 1997 Acorn Archimedes 7000+
+rpc600 //
+rpc700 //
+sarpc //
+sarpc_j233 //
+
+//@source:rltennis.cpp
+rltennis // (c) 1993 TCH
+
+//@source:rm380z.cpp
+rm380z //
+
+//@source:rmhaihai.cpp
+rmhaihai // (c) 1985 Alba
+rmhaihib // (c) 1985 Alba
+rmhaijin // (c) 1986 Alba
+rmhaisei // (c) 1986 Visco
+themj // (c) 1987 Visco
+
+//@source:rmnimbus.cpp
+nimbus // RM Nimbus 186
+
+//@source:rmt32.cpp
+cm32l //
+mt32 //
+
+//@source:rockrage.cpp
+rockrage // GX620 (c) 1986 (World?)
+rockragea // GX620 (c) 1986 (Prototype?)
+rockragej // GX620 (c) 1986 (Japan)
+
+//@source:rocnrope.cpp
+rocnrope // GX364 (c) 1983
+rocnropek // GX364 (c) 1983 + Kosuka
+ropeman // (c) 1983 bootleg
+
+//@source:rohga.cpp
+darkseal2 // MAS (c) 1992 Data East Corporation (Japan)
+gunball // MAV (c) 1992 Data East Corporation (Japan)
+nitrobal // MAV (c) 1992 Data East Corporation (World)
+nitrobala // MAV (c) 1992 Data East Corporation (World)
+rohga // MAM (c) 1991 Data East Corporation (Asia/Euro)
+rohga1 // MAM (c) 1991 Data East Corporation (Asia/Euro)
+rohga2 // MAM (c) 1991 Data East Corporation (Asia/Euro)
+rohgah // MAM (c) 1991 Data East Corporation (Hong Kong)
+rohgau // MAM (c) 1991 Data East Corporation (US)
+schmeisr // (c) 1993 Hot B
+wizdfire // MAS (c) 1992 Data East Corporation (Over Sea)
+wizdfireu // MAS (c) 1992 Data East Corporation (US)
+wolffang // MAM (c) 1991 Data East Corporation (Japan)
+
+//@source:rollerg.cpp
+rollerg // GX999 (c) 1991 (US)
+rollergj // GX999 (c) 1991 (Japan)
+
+//@source:rollext.cpp
+rollext // (c) 1999 - Ref 991015
+
+//@source:rollrace.cpp
+fightrol // (c) 1983 Taito
+rollace // (c) 1983 Williams
+rollace2 // (c) 1983 Williams
+
+//@source:rotaryf.cpp
+rotaryf //
+
+//@source:roul.cpp
+roul // (c) 1990
+
+//@source:route16.cpp
+route16 // (c) 1981 Tehkan/Sun + Centuri license
+route16a // (c) 1981 Tehkan/Sun + Centuri license
+route16bl // bootleg
+route16c // (c) 1981 Tehkan/Sun + Centuri license
+routex // bootleg
+spacecho // bootleg
+spacecho2 // bootleg
+speakres // [Sun Electronics]
+speakresb // bootleg
+stratvox // [1980 Sun Electronics] Taito
+stratvoxb // bootleg
+ttmahjng // Taito
+
+//@source:rowamet.cpp
+heavymtl //
+
+//@source:royalmah.cpp
+cafebrk // "528" Mahjong Cafe Break (C) 1999 Nakanihon / Dynax
+cafedoll // "76" (c) 1993 Dynax
+cafepara // "001" 1999 Techno-Top
+cafetime // "63" (c) 1992 Dynax
+daisyari // (c) 1989 Best System
+dondenmj // "03" (c) 1986 Dyna Electronics
+ippatsu // 01? (c) 1986 Dyna Electronics
+janoh // (c) 1984 Toaplan
+janoha // (c) 1984 Toaplan
+janptr96 // "503" (c) 1996 Dynax
+janptrsp // "511" (c) 1997 Dynax
+janputer // (c) 1982 Taito
+jansou // (c) 1985 Dyna
+jansoua // (c) 1985 Dyna
+janyoup2 // Falcon bootleg
+majs101b // "17" (c) [1988] Dynax
+makaijan // "05" (c) 1987 Dynax
+mjapinky // "14" (c) 1988 Dynax
+mjclub // (c) 1986 Xex
+mjdejav2 // "21" (c) 1989 Dynax
+mjdejavu // "21" (c) 1989 Dynax
+mjderngr // "22" (c) 1989 Dynax
+mjdiplob // "07" (c) 1987 Dynax
+mjifb // "29" (c) 1990 Dynax
+mjifb2 // "29" (c) 1990 Dynax
+mjifb3 // "29" (c) 1990 Dynax
+mjsenka // (c) 1986 Visco
+mjsiyoub // (c) 1986 Visco
+mjtensin // "100" (c) 1995 Dynax
+mjvegas // "50" 1991 Dynax
+mjvegasa // "50" 1991 Dynax
+mjyarou // (c) 1986 Visco / Video System
+openmj // (c) 1982 Nichibutsu
+royalmah // Falcon bootleg
+royalmj // (c) 1982 Nichibutsu
+suzume // 04? (c) 1986 Dyna Electronics
+tahjong // (c) 1985 Bally Pond / Nasco
+tontonb // "09" (c) 1987 Dynax
+
+//@source:rpunch.cpp
+rabiolep // (c) 1987 V-System Co. (Japan)
+rpunch // (c) 1987 V-System Co. + Bally/Midway/Sente license (US)
+svolley // (c) 1989 V-System Co. (Japan)
+svolleybl // bootleg
+svolleyk // (c) 1989 V-System Co. (Korea)
+svolleyu // (c) 1989 V-System Co. + Data East license (US)
+
+//@source:rsc55.cpp
+sc55 // 1991 Sound Canvas SC-55
+
+//@source:rt1715.cpp
+rt1715 //
+rt1715lc // (latin/cyrillic)
+rt1715w //
+
+//@source:runaway.cpp
+qwak // (proto) (c) 1982
+runaway // (proto) (c) 1982
+
+//@source:rungun.cpp
+rungun // GX247 (c) 1993 (World)
+runguna // GX247 (c) 1993 (World)
+rungunad // GX247 (c) 1993 (World)
+rungunb // GX247 (c) 1993 (World)
+rungunbd // GX247 (c) 1993 (World)
+rungund // GX247 (c) 1993 (World)
+rungunua // GX247 (c) 1993 (US)
+rungunuad // GX247 (c) 1993 (US)
+rungunud // GX247 (c) 1993 (US)
+slmdunkj // GX247 (c) 1993 (Japan)
+slmdunkjd // GX247 (c) 1993 (Japan)
+
+//@source:rvoice.cpp
+rvoicepc //
+
+//@source:rx78.cpp
+rx78 //
+
+//@source:s11.cpp
+gmine_l2 //
+grand_l4 //
+hs_l3 //
+hs_l4 //
+rdkng_l1 //
+rdkng_l2 //
+rdkng_l3 //
+rdkng_l4 //
+shfin_l1 //
+tdawg_l1 //
+tts_l1 //
+tts_l2 //
+
+//@source:s11a.cpp
+f14_l1 //
+f14_p3 //
+f14_p4 //
+f14_p5 //
+fire_l3 //
+milln_l3 //
+pb_l2 //
+pb_l3 //
+pb_l5 //
+pb_p4 //
+
+//@source:s11b.cpp
+bcats_l2 //
+bcats_l5 //
+bguns_l7 //
+bguns_l8 //
+bguns_la //
+bguns_p1 //
+bk2k_l4 //
+bk2k_lg1 //
+bk2k_lg3 //
+bk2k_pu1 //
+bnzai_g3 //
+bnzai_l1 //
+bnzai_l3 //
+bnzai_pa //
+cycln_l4 //
+cycln_l5 //
+eatpm_4g //
+eatpm_4u //
+eatpm_l1 //
+eatpm_l2 //
+eatpm_l4 //
+eatpm_p7 //
+esha_la1 //
+esha_la3 //
+esha_lg1 //
+esha_lg2 //
+esha_ma3 //
+esha_pa1 //
+esha_pr4 //
+jokrz_l3 //
+jokrz_l6 //
+mousn_l1 //
+mousn_l4 //
+mousn_lu //
+mousn_lx //
+polic_l2 //
+polic_l3 //
+polic_l4 //
+spstn_l5 //
+swrds_l2 //
+taxi_l3 //
+taxi_l4 //
+taxi_lg1 //
+tsptr_l3 //
+whirl_l2 //
+whirl_l3 //
+whirl_lg3 //
+
+//@source:s11c.cpp
+bbnny_l2 //
+bbnny_lu //
+dd_l2 //
+dd_p6 //
+diner_l1 //
+diner_l3 //
+diner_l4 //
+gs_l3 //
+gs_l4 //
+pool_l5 //
+pool_l6 //
+pool_l7 //
+pool_le2 //
+pool_p7 //
+radcl_g1 //
+radcl_l1 //
+radcl_p3 //
+rollr_e1 //
+rollr_ex //
+rollr_g3 //
+rollr_l2 //
+rollr_l3 //
+rollr_p2 //
+rvrbt_l3 //
+strax_p7 //
+
+//@source:s3.cpp
+cntct_l1 //
+disco_l1 //
+httip_l1 //
+lucky_l1 //
+phnix_l1 //
+pkrno_l1 //
+wldcp_l1 //
+
+//@source:s4.cpp
+arist_l1 //
+bstrk_l1 //
+flash_l1 //
+flash_l2 //
+flash_t1 //
+kingt_l1 //
+omni_l1 //
+pomp_l1 //
+stlwr_l2 //
+taurs_l1 //
+tmwrp_l2 //
+tmwrp_t2 //
+topaz_l1 //
+trizn_l1 //
+trizn_t1 //
+tstrk_l1 //
+
+//@source:s6.cpp
+blkou_f1 //
+blkou_l1 //
+blkou_t1 //
+frpwr_l2 //
+frpwr_l6 //
+frpwr_t6 //
+grgar_l1 //
+grgar_t1 //
+lzbal_l2 //
+lzbal_t2 //
+scrpn_l1 //
+scrpn_t1 //
+
+//@source:s6a.cpp
+algar_l1 //
+alpok_f6 //
+alpok_l2 //
+alpok_l6 //
+
+//@source:s7.cpp
+barra_l1 //
+bk_f4 //
+bk_l3 //
+bk_l4 //
+csmic_l1 //
+dfndr_l4 //
+fpwr2_l2 //
+hypbl_l2 //
+hypbl_l4 //
+jngld_l1 //
+jngld_l2 //
+jst_l1 //
+jst_l2 //
+lsrcu_l2 //
+pharo_l2 //
+solar_l2 //
+strlt_l1 //
+thund_p1 //
+thund_p2 //
+thund_p3 //
+tmfnt_l5 //
+vrkon_l1 //
+wrlok_l3 //
+
+//@source:s8.cpp
+pfevr_l2 //
+pfevr_p3 //
+
+//@source:s8a.cpp
+scrzy_l1 //
+
+//@source:s9.cpp
+alcat_l7 //
+comet_l4 //
+comet_l5 //
+ratrc_l1 //
+sorcr_l1 //
+sorcr_l2 //
+sshtl_l7 //
+szone_l2 //
+szone_l5 //
+
+//@source:sacstate.cpp
+sacstate //
+
+//@source:safarir.cpp
+safarir // (c) 1980 Shin Nihon Kikaku (SNK) + Taito license
+safarirj // (c) 1979 Shin Nihon Kikaku (SNK)
+
+//@source:sage2.cpp
+sage2 //
+
+//@source:sam.cpp
+24_130 //
+24_140 //
+24_144 //
+24_150 //
+bbh_140 //
+bbh_150 //
+bbh_160 //
+bdk_130 //
+bdk_150 //
+bdk_160 //
+bdk_200 //
+bdk_210 //
+bdk_220 //
+bdk_290 //
+bdk_294 //
+csi_102 //
+csi_103 //
+csi_104 //
+csi_200 //
+csi_210 //
+csi_230 //
+csi_240 //
+fg_1000af //
+fg_1000ag //
+fg_1000ai //
+fg_1000al //
+fg_110af //
+fg_110ag //
+fg_110ai //
+fg_110al //
+fg_120af //
+fg_120ag //
+fg_120ai //
+fg_120al //
+fg_300ai //
+fg_400a //
+fg_400ag //
+fg_700af //
+fg_700al //
+fg_800al //
+im2_100 //
+im2_110 //
+im2_120 //
+im2_140 //
+indy_113a //
+indy_113f //
+indy_113g //
+indy_113i //
+indy_113l //
+indy_114a //
+indy_114f //
+indy_114g //
+indy_114i //
+indy_114l //
+indy_116a //
+indy_116f //
+indy_116g //
+indy_116i //
+indy_116l //
+indy_210 //
+indy_210f //
+nba_500 //
+nba_600 //
+nba_700 //
+nba_801 //
+nba_802 //
+potc_110af //
+potc_110ai //
+potc_110gf //
+potc_111as //
+potc_113af //
+potc_113ai //
+potc_113as //
+potc_113gf //
+potc_115af //
+potc_115ai //
+potc_115as //
+potc_115gf //
+potc_300af //
+potc_300ai //
+potc_300as //
+potc_300gf //
+potc_400af //
+potc_400ai //
+potc_400as //
+potc_400gf //
+potc_600 //
+potc_600ai //
+potc_600as //
+potc_600gf //
+sh_141 //
+skc_090 //
+skc_103 //
+skc_105 //
+sman_130ef //
+sman_130ei //
+sman_130es //
+sman_130gf //
+sman_140e //
+sman_140ef //
+sman_140ei //
+sman_140es //
+sman_140gf //
+sman_142e //
+sman_160e //
+sman_160ef //
+sman_160ei //
+sman_160es //
+sman_160gf //
+sman_170e //
+sman_170ef //
+sman_170ei //
+sman_170es //
+sman_170gf //
+sman_190e //
+sman_190ef //
+sman_190ei //
+sman_190es //
+sman_190gf //
+sman_192e //
+sman_192ef //
+sman_192ei //
+sman_192es //
+sman_192gf //
+sman_200e //
+sman_210e //
+sman_210ei //
+sman_210es //
+sman_210f //
+sman_210gf //
+sman_220e //
+sman_230e //
+sman_240 //
+wof_100a //
+wof_200a //
+wof_200f //
+wof_200g //
+wof_200i //
+wof_300a //
+wof_300f //
+wof_300g //
+wof_300i //
+wof_300l //
+wof_400a //
+wof_400f //
+wof_400g //
+wof_400i //
+wof_400l //
+wof_500a //
+wof_500f //
+wof_500g //
+wof_500i //
+wof_500l //
+wpt_103a //
+wpt_105a //
+wpt_106a //
+wpt_106f //
+wpt_106g //
+wpt_106i //
+wpt_106l //
+wpt_108a //
+wpt_108f //
+wpt_108g //
+wpt_108i //
+wpt_108l //
+wpt_109a //
+wpt_109f //
+wpt_109f2 //
+wpt_109g //
+wpt_109i //
+wpt_109l //
+wpt_111a //
+wpt_111af //
+wpt_111ai //
+wpt_111al //
+wpt_111f //
+wpt_111g //
+wpt_111gf //
+wpt_111i //
+wpt_111l //
+wpt_112a //
+wpt_112af //
+wpt_112ai //
+wpt_112al //
+wpt_112f //
+wpt_112g //
+wpt_112gf //
+wpt_112i //
+wpt_112l //
+wpt_1400 //
+wpt_1400af //
+wpt_1400ai //
+wpt_1400al //
+wpt_1400f //
+wpt_1400g //
+wpt_1400gf //
+wpt_1400i //
+wpt_1400l //
+
+//@source:samcoupe.cpp
+samcoupe // 1989 Sam Coupe
+
+//@source:sandscrp.cpp
+sandscrp // (c) 1992 Face
+sandscrpa // (c) 1992 Face
+sandscrpb // (c) 1992 Face
+
+//@source:sangho.cpp
+pzlestar // (c) 199? Sang Ho Soft
+sexyboom // (c) 1992 Sang Ho Soft
+
+//@source:sanremmg.cpp
+sanremmg // San Remo / Elsy
+
+//@source:sanremo.cpp
+number1 // 1996 San Remo Games
+
+//@source:sansa_fuze.cpp
+sanfuze2 //
+
+//@source:sapi1.cpp
+sapi1 //
+sapizps2 //
+sapizps3 //
+sapizps3a //
+sapizps3b //
+
+//@source:saturn.cpp
+hisaturn // Hitachi HiSaturn
+saturn // 1995 Sega Saturn (USA)
+saturneu // 1995 Sega Saturn (Europe)
+saturnjp // 1994 Sega Saturn (Japan)
+vsaturn // JVC V-Saturn
+
+//@source:sauro.cpp
+sauro // (c) 1987
+saurop // (c) 1987
+saurorr // (c) 1987
+trckydoc // (c) 1987
+trckydoca // (c) 1987
+
+//@source:savia84.cpp
+savia84 //
+
+//@source:savquest.cpp
+savquest //
+
+//@source:sbasketb.cpp
+sbasketb // GX405 (c) 1984 (Version I, Encrypted)
+sbaskete // GX405 (c) 1984 (Version E, Encrypted)
+sbasketg // GX405 (c) 1984 (Version G, Encrypted)
+sbasketh // GX405 (c) 1984 (Version H, Unprotected)
+
+//@source:sbc6510.cpp
+sbc6510 //
+
+//@source:sbowling.cpp
+sbowling // KB (c) 1982 Taito Corporation
+
+//@source:sbrain.cpp
+sbrain //
+
+//@source:sbrkout.cpp
+sbrkout // 033453-033455 1978/09 [6502]
+sbrkout3 // 033442-033452 1978/09 [6502]
+sbrkoutc // unrealeased proto
+sbrkoutct // 034555-034559 proto ???? [6502]
+
+//@source:sbugger.cpp
+sbugger // (c) 1981 Game-A-Tron
+sbuggera // (c) 1981 Game-A-Tron
+
+//@source:sc1.cpp
+sc1 //
+
+//@source:sc2.cpp
+sc2 //
+
+//@source:scm_500.cpp
+scm_500 //
+
+//@source:scobra.cpp
+aponow // bootleg
+billiard // bootleg
+darkplnt // (c) 1982 Stern
+hustler // GX343 (c) 1981 Konami
+hustlerb // bootleg
+hustlerb2 // bootleg
+hustlerb4 // bootleg
+hustlerd // GX343 (c) 1981 Konami + Dynamo Games license
+mimonkey // (c) 1982 Universal Video Games (US Copyright Office info - http://cocatalog.loc.gov)
+mimonsco // (c) 1982 bootleg
+minefld // (c) 1983 Stern
+minefldfe // bootleg
+rescue // (c) 1982 Stern
+rescueb // (c) Videl Games (Rescue bootleg)
+rescuefe // bootleg
+stratgys // GX306 (c) 1981 Stern
+stratgyx // GX306 (c) 1981 Konami
+strongx // bootleg
+tazmani2 // (c) 1982 Stern
+
+//@source:scorpion.cpp
+bestzx //
+kay1024 //
+profi //
+quorum //
+scorpio //
+
+//@source:scotrsht.cpp
+scotrsht // GX545 (c) 1985
+
+//@source:scramble.cpp
+800fath // (c) 1981 Amenip + U.S. Billiards license
+ad2083 // (c) 1983 Midcoin
+cavelon // (c) 1983 Jetsoft
+ckongs // bootleg
+conquer // (c) 1982 ????
+devilfsh // (c) 1982 Artic
+harem // [1983] I.G.R.
+hncholms // (c) 1984 Century
+hotshock // (c) 1982 E.G. Felaco (Domino license)
+hotshockb // bootleg
+hunchbks // (c) 1983 Century
+hunchbks2 // bootleg
+knockout // (c) 1982 KKK
+knockoutb // bootleg
+knockoutc //
+mariner // (c) 1981 Amenip
+mars // (c) 1981 Artic
+mimonscr // (c) 1982 bootleg
+mimonscra // (c) 1982 bootleg
+mrkougar // (c) 1984 ATW
+mrkougar2 // (c) 1984 ATW
+mrkougb // bootleg
+mrkougb2 // bootleg
+newsin7 // (c) 1983 ATW USA, Inc.
+newsin7a // (c) 1982 ATW USA, Inc.
+triplep // (c) 1982 KKI / made by Sanritsu?
+triplepa // (c) 1982 KKI / made by Sanritsu?
+turpins // (c) 1981 bootleg
+
+//@source:scregg.cpp
+dommy // TA-00?? (c) 1983 (Arcade TV Game List - P.90, Left, 13 from top)
+eggs // TA-0002 (c) 1983 Universal USA
+rockduck // bootleg? 1983 Datel SAS
+scregg // TA-0001 (c) 1983
+
+//@source:scv.cpp
+scv //
+scv_pal //
+
+//@source:sderby.cpp
+croupier // (c) 1997 Playmark
+croupiera // (c) 1997 Playmark
+luckboom //
+sderby // (c) 1996
+sderbya // (c) 1996
+spacewin //
+
+//@source:sdk80.cpp
+sdk80 //
+
+//@source:sdk85.cpp
+sdk85 //
+
+//@source:sdk86.cpp
+sdk86 //
+
+//@source:seabattl.cpp
+seabattl // (c) 1980
+seabattla // (c) 1980
+
+//@source:sealy.cpp
+crzyddz // (c) 2004? Sealy
+
+//@source:seattle.cpp
+biofreak // (c) 1997 Midway Games (prototype)
+blitz // (c) 1997 Midway Games
+blitz11 // (c) 1997 Midway Games
+blitz2k // (c) 1999 Midway Games
+blitz99 // (c) 1998 Midway Games
+blitz99a // (c) 1998 Midway Games
+calspeed // (c) 1996 Atari Games
+calspeeda // (c) 1996 Atari Games
+calspeedb // (c) 1996 Atari Games
+carnevil // (c) 1998 Midway Games (v1.0.3)
+carnevil1 // (c) 1998 Midway Games (v1.0.1)
+hyprdriv // (c) 1998 Midway Games
+mace // (c) 1996 Atari Games
+macea // (c) 1996 Atari Games
+sfrush // (c) 1996 Atari Games
+sfrushrk // (c) 1996 Atari Games
+vaportrx // (c) 1998 Atari Games
+vaportrxp // (c) 1998 Atari Games
+wg3dh // (c) 1996 Atari Games
+
+//@source:seattlecmp.cpp
+seattle //
+
+//@source:sega_sawatte.cpp
+sawatte //
+
+//@source:segac2.cpp
+bloxeedc // (c) 1989 Sega / Elorg
+bloxeedu // (c) 1989 Sega / Elorg
+borench // (c) 1990 Sega
+borencha // (c) 1990 Sega
+column2j // (c) 1990 Sega
+columns // (c) 1990 Sega
+columns2 // (c) 1990 Sega
+columnsj // (c) 1990 Sega
+columnsu // (c) 1990 Sega
+ichir // (c) 1994 Sega
+ichirj // (c) 1994 Sega
+ichirjbl // bootleg
+ichirk // (c) 1994 Sega
+pclubj //
+pclubjv2 //
+pclubjv4 //
+pclubjv5 //
+potopoto // (c) 1994 Sega
+puyo // (c) 1992 Sega / Compile
+puyobl // bootleg
+puyoj // (c) 1992 Sega / Compile
+puyoja // (c) 1992 Sega / Compile
+puyopuy2 // (c) 1994 Compile + Sega license
+ribbit // (c) 1991 Sega
+soniccar // (c) 1991 Sega
+sonicpop // (c) 1993 Sega
+stkclmns // (c) 1994 Sega
+stkclmnsj // (c) 1994 Sega
+tantr // (c) 1992 Sega
+tantrbl // bootleg
+tantrbl2 // bootleg
+tantrbl3 // bootleg
+tantrkor // (c) 1992 Sega
+tfrceac // (c) 1990 Sega / Technosoft
+tfrceacb // bootleg
+tfrceacj // (c) 1990 Sega / Technosoft
+twinsqua // (c) 1991 Sega
+wwmarine // (c) 1992 Sega
+zunkyou // (c) 1994 Sega
+
+//@source:segacoin.cpp
+westdrm //
+
+//@source:segae.cpp
+astrofl // 834-5803 (c) 1986
+fantzn2 // (c) 1988
+hangonjr // (c) 1985
+opaopa //
+ridleofp // (c) 1986 Sega / Nasco
+tetrisse // (c) 1988
+transfrm // 834-5803 (c) 1986
+
+//@source:segag80r.cpp
+005 // (c) 1981
+astrob // (c) 1981
+astrob1 // (c) 1981
+astrob2 // (c) 1981
+astrob2a // (c) 1981
+astrobg // (c) 1981
+monsterb // (c) 1982
+monsterb2 // (c) 1982
+pignewt // (c) 1983
+pignewta // (c) 1983
+sindbadm // 834-5244 (c) 1983 Sega
+spaceod // (c) 1981
+spaceod2 // (c) 1981
+
+//@source:segag80v.cpp
+elim2 // (c) 1981 Gremlin
+elim2a // (c) 1981 Gremlin
+elim2c // (c) 1981 Gremlin
+elim4 // (c) 1981 Gremlin
+elim4p // (c) 1981 Gremlin
+spacfury // (c) 1981
+spacfurya // no copyright notice
+spacfuryb // no copyright notice
+startrek // (c) 1982
+tacscan // (c) 1982
+zektor // (c) 1982
+
+//@source:segahang.cpp
+endurob2 // (c) 1985 (Beta bootleg)
+endurobl // (c) 1985 (Herb bootleg)
+enduror // (c) 1985 (FD1089B)
+enduror1 // (c) 1985 (FD1089B)
+enduror1d // bootleg
+endurord // bootleg
+hangon // (c) 1985 (Rev A)
+hangon1 // (c) 1985
+hangon2 // (c) 1985
+shangonrb // (c) 1992 (but bootleg, hangon hw?)
+shangonro // (c) 1987 (FD1094)
+sharrier // (c) 1985
+sharrier1 // (c) 1985
+
+//@source:segajw.cpp
+segajw //
+
+//@source:segald.cpp
+astron // (c) 1983
+astronp // (c) 1983
+cobraseg // (c) ????
+galaxyr // (c) 1983
+galaxyrp // (c) 1983
+sblazerp // (c) 1983
+
+//@source:segam1.cpp
+bingpty // ?
+
+//@source:segaorun.cpp
+outrun // Revision B
+outrunb // 1986 (protected beta bootleg)
+outrundx // Deluxe version
+outrundxa // Deluxe version (ealier??)
+outrundxeh // hack
+outrundxj // 1986.09 Deluxe version (Japan, FD1089A)
+outruneh // hack
+outrunra // Revision A (added support for Standard and Mini cabinets)
+shangon // 1987 (unprotected)
+shangon1 // 1987 (FD1089B)
+shangon2 // 1987 (FD1089B)
+shangon3 // 1987 (FD1089B)
+shangon3d // bootleg
+shangonle // 1991 (Unprotected)
+toutrun // 1987 (FD1094)
+toutrun1 // 1987 (FD1094)
+toutrun2 // 1987 (FD1094)
+toutrun2d // bootleg
+toutrun3 // 1987 (FD1094)
+toutrun3d // bootleg
+toutrund // bootleg
+toutrunj // 1989.02 Turbo Outrun (Japan, FD1094)
+toutrunj1 // 1987 (FD1094)
+toutrunj1d // bootleg
+toutrunjd // bootleg
+
+//@source:segapico.cpp
+copera // 1993 Sega / Yamaha
+pico // 1994 Sega Pico (Europe)
+picoj // 1993 Sega Pico (Japan)
+picou // 1994 Sega Pico (USA)
+
+//@source:segapm.cpp
+segapm // 1996 Sega Picture Magic (32x type hardware)
+
+//@source:segas16a.cpp
+aceattaca // (c) 1988 (FD1094)
+afighter // (c) 1986 (FD1089A)
+alexkidd // (c) 1986 (Unprotected)
+alexkidd1 // (c) 1986 (FD1089A)
+aliensyn2 // (c) 1987 (FD1089A)
+aliensyn5 // (c) 1987 (FD1089B)
+aliensynjo // (c) 1987 (FD1089A)
+bodyslam // (c) 1986 (8751)
+dumpmtmt // (c) 1986 (Japan)
+fantzone // (c) 1986 (Unprotected Rev A)
+fantzone1 // (c) 1986 (Unprotected)
+fantzonep // (c) 1986 (NEC 0317-5000, encrypted)
+fantzonepr //
+mjleague // (c) 1985
+passsht16a // (c) 1988 (FD1094)
+quartet // (c) 1986 (8751)
+quartet2 // (c) 1986 (8751)
+quartet2a // (c) 1986
+quarteta // (c) 1986 (8751)
+sdi // (c) 1987 (FD1089B)
+sdia // (c) 1987 (FD1089B)
+shinobi // (c) 1987 (Unprotected)
+shinobi1 // (c) 1987 (FD1094)
+shinobi1d //
+shinoblb // (c) 1987 (but bootleg)
+shinobls // (c) 1987 (Star bootleg)
+sjryuko1 // (c) 1988 White Board (FD1089B)
+tetris // (c) 1988 (FD1094)
+tetris3 // (c) 1988 (FD1094)
+tetris3d //
+tetrisd //
+timescan1 // (c) 1987 (FD1089B)
+wb31 // (c) 1988 Sega / Westone (FD1094)
+wb31d //
+wb35 // (c) 1988 Sega / Westone (FD1089A)
+wb35d //
+
+//@source:segas16b.cpp
+aceattac // (c) 1988 (FD1094)
+aliensyn // (c) 1987 (Unprotected)
+aliensyn3 // (c) 1987 (FD1089A)
+aliensyn7 // (c) 1987 (MC-8123B)
+aliensynj // (c) 1987 (FD1089A)
+altbeast // (c) 1988 (8751)
+altbeast2 // (c) 1988 (MC-8123B)
+altbeast4 // (c) 1988 (MC-8123B)
+altbeast5 // (c) 1988 (FD1094)
+altbeast5d //
+altbeast6 // (c) 1988 (8751)
+altbeastj // (c) 1988 (8751)
+altbeastj1 // (c) 1988 (protected)
+altbeastj3 // (c) 1988 (FD1094)
+altbeastj3d //
+atomicp // (c) 1990 Philko - korean clone board
+aurail // (c) 1990 Sega / Westone
+aurail1 // (c) 1990 Sega / Westone (FD1089B)
+aurail1d //
+aurailj // (C) 1990 Sega / Westone (FD1089A)
+aurailjd //
+bayroute // (c) 1989 Sunsoft / Sega (FD1094)
+bayroute1 // (c) 1989 Sunsoft / Sega (Unprotected)
+bayrouted //
+bayroutej // (c) 1989 Sunsoft / Sega (FD1094)
+bayroutejd //
+bullet // (c) 1987 (FD1094)
+bulletd //
+cencourt // (c) 1988 (MC-8123B)
+cotton // (c) 1990 (FD1094)
+cottond //
+cottonj // (c) 1990 (FD1094)
+cottonja // (c) 1990 (FD1094)
+cottonjad //
+cottonjd //
+cottonu // (c) 1990 (FD1094)
+cottonud //
+ddux // (c) 1989 (FD1094)
+ddux1 // (c) 1989 (8751)
+dduxd //
+dduxj // (c) 1989 (FD1094)
+dduxjd //
+defense // (c) 1987 (FD1094)
+dunkshot // (c) 1986 (FD1089A)
+dunkshota // (c) 1986 (FD1089A)
+dunkshoto // (c) 1986 (FD1089A)
+eswat // (c) 1989 (FD1094)
+eswatd //
+eswatj // (c) 1989 (FD1094)
+eswatj1 // (c) 1989 (FD1094)
+eswatj1d //
+eswatjd //
+eswatu // (c) 1989 (FD1094)
+eswatud //
+exctleag // (c) 1988 (FD1094)
+exctleagd //
+fantzn2x // (c) 2008 Sega / M2
+fantzn2xp // (c) 2008 Sega / M2
+fantzoneta // (c) 2008 Sega / M2 (bootleg conversion)
+fpoint // (c) 1989 (Japan, FD1094)
+fpoint1 // (c) 1989 (Japan, FD1094)
+fpoint1d //
+fpointbj // (c) 1989 (Datsu bootleg, Japan)
+fpointbl // (c) 1989 (Datsu bootleg)
+fpointd //
+goldnaxe // (c) 1989 (8751)
+goldnaxe1 // (c) 1989 (FD1094)
+goldnaxe1d //
+goldnaxe2 // (c) 1989 (8751)
+goldnaxe3 // (c) 1989 (FD1094)
+goldnaxe3d //
+goldnaxej // (c) 1989 (FD1094)
+goldnaxejd //
+goldnaxeu // (c) 1989 (FD1094)
+goldnaxeud //
+hwchamp // (c) 1987 (Unprotected)
+hwchampj // (c) 1987 (FD1094)
+hwchampjd //
+isgsm //
+lockonph //
+mvp // (c) 1989 (FD1094)
+mvpd //
+mvpj // (c) 1989 (FD1094)
+mvpjd //
+passsht // (c) 1988 (FD1094)
+passshta // (c) 1988 (FD1094)
+passshtad //
+passshtd //
+passshtj // (c) 1988 (FD1094)
+passshtjd //
+riotcity // (c) 1991 Sega / Westone (Unprotected)
+ryukyu // (c) 1990 (FD1094)
+ryukyud //
+sdib // (c) 1987 (FD1089A)
+sdibl // (c) 1987 bootleg
+sdibl2 // bootleg
+sdibl3 // bootleg
+sdibl4 // bootleg
+sdibl5 // bootleg
+sdibl6 // bootleg
+shinfz //
+shinobi2 // (c) 1987 (FD1094)
+shinobi2d //
+shinobi3 // (c) 1987 (MC-8123B)
+shinobi4 // (c) 1987 (MC-8123B)
+shinobi5 // (c) 1987 (Unprotected)
+sjryuko // (c) 1988 White Board (FD1094)
+snapper // (c) 1990 Philko - korean clone board
+sonicbom // (c) 1987 (FD1094)
+sonicbomd //
+suprleag // (c) 1987 (FD1094)
+tetrbx //
+tetris1 // (c) 1988 (FD1094) S16B
+tetris1d //
+tetris2 // (c) 1988 (FD1094) S16B
+tetris2d //
+timescan // (c) 1987 (Unprotected)
+toryumon // (c) 1995 (Unprotected)
+tturf // (c) 1989 Sega / Sunsoft (8751)
+tturfu // (c) 1989 Sega / Sunsoft (8751)
+wb3 // (c) 1988 Sega / Westone (8751)
+wb32 // (c) 1988 Sega / Westone (FD1094)
+wb32d //
+wb33 // (c) 1988 Sega / Westone (FD1094)
+wb33d //
+wb34 // (c) 1988 Sega / Westone (FD1094)
+wb34d //
+wrestwar // (c) 1989 (8751)
+wrestwar1 // (c) 1989 (FD1094)
+wrestwar1d //
+wrestwar2 // (c) 1989 (FD1094)
+wrestwar2d //
+
+//@source:segas18.cpp
+astorm // 1990.?? Alien Storm (World, FD1094, 2 Players)
+astorm3 // 1990.?? Alien Storm (World, FD1094)
+astorm3d //
+astormj // 1990.05 Alien Storm (Japan, FD1094)
+astormjd //
+astormu // 1990.04 Alien Storm (US, FD1094)
+astormud //
+bloxeed // 1989.12 Bloxeed (Japan, FD1094)
+bloxeedd //
+cltchitr // 1991.02 Clutch Hitter (US, FD1094)
+cltchitrd //
+cltchitrj // 1991.05 Clutch Hitter (Japan, FD1094)
+cltchitrjd //
+ddcrew // 1991.?? D.D.Crew (World, FD1094)
+ddcrew1 // 1991.?? D.D.Crew (World, FD1094)
+ddcrew1d //
+ddcrew2 // 1991.?? D.D.Crew (World, FD1094)
+ddcrew2d //
+ddcrewd //
+ddcrewj // 1991.07 D.D.Crew (Japan, FD1094)
+ddcrewj2 // 1991.07 D.D.Crew (Japan, FD1094)
+ddcrewj2d //
+ddcrewjd //
+ddcrewu // 1991.09 D.D.Crew (US, FD1094)
+ddcrewud //
+desertbr // 1993.?? Desert Breaker (World, FD1094)
+desertbrd //
+desertbrj // 1992.10 Desert Breaker (Japan, FD1094)
+desertbrjd //
+hamaway // prototype
+lghost // 1990.?? Laser Ghost (World, FD1094)
+lghostd //
+lghostj // 1990.12 Laser Ghost (Japan)
+lghostu // 1991.01 Laser Ghost (US, FD1094)
+lghostud //
+mwalk // 1990.?? Micheal Jackson's Moonwalker (World, FD1094+8751)
+mwalkd //
+mwalkj // 1990.08 Micheal Jackson's Moonwalker (Japan, FD1094+8751)
+mwalkjd //
+mwalku // 1990.08 Micheal Jackson's Moonwalker (US, FD1094+8751)
+mwalkud //
+pontoon //
+shdancer // 1989.05 Shadow Dancer (US)
+shdancer1 // 1989.?? Shadow Dancer (World)
+shdancerj // 1989.11 Shadow Dancer (Japan)
+wwallyj // 1992.06 Wally wo Sagase! (Japan, FD1094)
+wwallyja // 1992.06 Wally wo Sagase! (Japan, FD1094)
+wwallyjad //
+wwallyjd //
+
+//@source:segas24.cpp
+bnzabros // 1990.08 Bonanza Bros. (US)
+bnzabrosj // 1990.06 Bonanza Bros. (Japan)
+crkdown // 1989.?? Crack Down (World, FD1094)
+crkdownj // 1989.03 Crack Down (Japan, FD1094)
+crkdownu // 1989.06 Crack Down (US, FD1094)
+dcclub // 1991.?? Dynamic Country Club (World)
+dcclubfd // 1991.07 Dynamic Country Club (US)
+dcclubj // 1991.06 Dynamic Country Club (Japan)
+gground // 1989.?? Gain Ground (World, FD1094)
+ggroundj // 1988.11 Gain Ground (Japan, FD1094)
+hotrod // 1988.?? Hot Rod (World)
+hotroda //
+hotrodj // 1988.03 Hot Rod (Japan)
+hotrodja // 1988.03 Hot Rod (Japan)
+mahmajn // 1992.12 Tokorosan no Mahmahjong (Japan)
+mahmajn2 // 1994.05 Tokorosan no Mahmahjong 2 (Japan)
+qgh // 1994.09 Quiz Ghost Hunter
+qrouka // 1991.12 Quiz Rouka ni Tattenasai! (Japan)
+qsww // 1991.02 Quiz Syukudai wo Wasuremashita! (Japan)
+quizmeku // 1993.05 Quiz Mekurumeku Story (Japan)
+roughrac // 1990.03 Rough Racer (Japan, FD1094)
+sgmast // 1989.?? Super Masters Golf (World, FD1094)
+sgmastc // 1989.?? Jumbo Ozaki Super Masters Golf (World, FD1094)
+sgmastj // 1989.06 Jumbo Ozaki Super Masters (Japan, FD1094)
+sspiritj // 1988.10 Scramble Spirits (Japan)
+sspirits // 1988.?? Scramble Spirits (World)
+sspirtfc // 1988.?? Scramble Spirits (FD1094)
+
+//@source:segas32.cpp
+alien3 // 1993.?? Aliens 3 (World)
+alien3u // 1993.11 Aliens 3 (US)
+arabfgt // 1992.?? Arabian Fight (World)
+arabfgtj // 1992.03 Arabian Fight (Japan)
+arabfgtu // 1992.03 Arabian Fight (US)
+arescue // 1992.03 Air Rescue (US)
+arescuej // 1992.04 Air Rescue (Japan)
+brival // 1993.?? Burning Rival (World)
+brivalj // 1993.08 Burning Rival (Japan)
+darkedge // 1993.?? Dark Edge (World)
+darkedgej // 1993.03 Dark Edge (Japan)
+dbzvrvs // 1994.03 Dragon Ball Z V.R.V.S. (Japan)
+f1en // 1991.?? F-1 Exhaust Note (World)
+f1enj // 1991.11 F-1 Exhaust Note (Japan)
+f1enu // 1992.01 F-1 Exhaust Note (US)
+f1lap // 1993.?? F-1 Super Lap (World)
+f1lapj // 1993.09 F-1 Super Lap (Japan)
+ga2 // 1992.?? Golden Axe II (World)
+ga2j // 1992.10 Golden Axe Death Adder no Fukusyuu (Japan)
+ga2u // 1992.09 Golden Axe II (US)
+harddunk // 1994.?? Hard Dunk 3on3 (World)
+harddunkj // 1994.04 Hard Dunk 3on3 (Japan)
+holo // 1992.?? Hologram Holosseum (US)
+jleague // 1994.07 The J League 1994 (Japan)
+jpark // 1994.?? Jurassic Park (World)
+jparkj // 1994.02 Jurassic Park (Japan) - Deluxe with moving cabinet, Rev A
+jparkja // 1994.02 Jurassic Park (Japan) - Deluxe with moving cabinet
+jparkjc // 1994.02 Jurassic Park (Japan) - Cabinet conversion kit
+kokoroj2 // 1993.12 Soreike! Kokoroji 2 (Japan)
+orunners // 1993.?? Outrunners (World)
+orunnersj // 1993.05 Outrunners (Japan)
+orunnersu // 1993.06 Outrunners (US)
+radm // 1991.?? Rad Mobile (World)
+radmu // 1991.03 Rad Mobile (US)
+radr // 1991.?? Rad Rally (World)
+radrj // 1991.07 Rad Rally (Japan)
+radru // 1991.09 Rad Rally (US)
+scross // 1992.?? Stadium Cross (World)
+scrossa // 1992.?? Stadium Cross (World, alt)
+scrossu // 1992.09 Stadium Cross (US)
+slipstrm // 1995.?? Slip Stream (950515 Brazil) (c) Capcom
+slipstrmh // 1995.?? Slip Stream (950515 Hispanic) (c) Capcom
+sonic // 1993.09 Sonic the Hedgehog (Japan)
+sonicp // 1993.?? Sonic the Hedgehog (proto, Japan)
+spidman // 1991.?? Spiderman (World)
+spidmanj // 1991.09 Spiderman (Japan)
+spidmanu // 1991.09 Spiderman (US)
+svf // 1994.?? Super Visual Football
+svs // 1994.?? Super Visual Soccer
+titlef // 1993.?? Title Fight (World)
+titlefj // 1993.03 Title Fight (Japan)
+titlefu // 1993.04 Title Fight (US)
+
+//@source:segasp.cpp
+brickppl //
+dinoki25 //
+dinoking // 2005.09 Kodai Ouja Kyouryuu King / Ancient Ruler Dinosaur King
+dinokior //
+loveber3 //
+lovebero //
+lovebery // 2004.10 Oshare Majo Love and Berry / Fashionable Witch Love and Berry
+segasp //
+tetgiano //
+tetgiant //
+
+//@source:segaufo.cpp
+newufo //
+newufo_nfl //
+newufo_sonic //
+newufo_xmas //
+ufo21 //
+ufo800 //
+ufomini //
+
+//@source:segaxbd.cpp
+abcop // 1990.?? A.B.Cop (World, FD1094)
+abcopd //
+abcopj // 1991.01 A.B.Cop (Japan, FD1094)
+abcopjd //
+aburner // 1987.07 After Burner (Japan)
+aburner2 // 1987.09 After Burner II (Japan)
+aburner2g // 1987.09 After Burner II (German)
+gprider // as above
+gpriderj // as above
+gpriderjs // 1990.10 GP Rider (Japan, FD1094)
+gpriders // 1990.?? GP Rider (World, FD1094)
+gprideru // as above
+gpriderus // 1990.12 GP Rider (US, FD1094)
+lastsurv // 1989.01 Last Survivor (Japan, FD1094)
+lastsurvd //
+loffire // 1989.?? Line of Fire (World, FD1094)
+loffired //
+loffirej // 1989.12 Line of Fire (Japan, FD1094)
+loffirejd //
+loffireu // 1990.04 Line of Fire (US, FD1094)
+loffireud //
+rachero // 1990.?? Racing Hero (World, FD1094)
+racherod //
+rascot // 1991.?? Royal Ascot (Japan)
+smgp // 1989.?? Super Monaco GP (World, FD1094)
+smgp5 // 1989.?? Super Monaco GP (World, FD1094)
+smgp5d //
+smgp6 // 1989.?? Super Monaco GP (World, FD1094)
+smgp6d //
+smgpd //
+smgpj // 1989.06 Super Monaco GP (Japan, FD1094)
+smgpja // 1989.06 Super Monaco GP (Japan, FD1094)
+smgpjd //
+smgpu // 1989.08 Super Monaco GP (US, FD1094)
+smgpu1 // 1989.08 Super Monaco GP (US, FD1094)
+smgpu1d //
+smgpu2 // 1989.08 Super Monaco GP (US, FD1094)
+smgpu2d //
+smgpud //
+thndrbld // 1988.02 Thunder Blade (US?, upright, FD1094)
+thndrbld1 // 1987.12 Thunder Blade (Japan, deluxe/standard)
+thndrbldd //
+
+//@source:segaybd.cpp
+gforce2 // 1988.?? Galaxy Force II (World)
+gforce2j // 1988.07 Galaxy Force II (Japan)
+gforce2ja // 1988.07 Galaxy Force II (Japan)
+gforce2sd // 1988.?? Galaxy Force II (World, Super Deluxe unit)
+gloc // 1990.?? G-LOC Air Battle (World)
+glocr360 // 1990.?? G-LOC (R360, World?)
+glocu // 1990.04 G-LOC Air Battle (US)
+pdrift // 1988.?? Power Drift (World)
+pdrifta // 1988.?? Power Drift (World)
+pdrifte // 1988.?? Power Drift (World)
+pdriftj // 1988.09 Power Drift (Japan)
+pdriftl //
+rchase // 1991.09 Rail Chase (World)
+rchasej // 1991.09 Rail Chase (Japan)
+strkfgtr // 1991.06 Strike Fighter (World)
+strkfgtrj // 1991.06 Strike Fighter (Japan)
+
+//@source:seibuspi.cpp
+batlball // (c) 1995 Seibu Kaihatsu (Tuning License)
+batlballa // (c) 1995 Seibu Kaihatsu (Metrotainment License)
+batlballe // (c) 1995 Seibu Kaihatsu (Metrotainment License)
+batlballu // (c) 1995 Seibu Kaihatsu (Fabtek license)
+ejanhs // (c) 1996 Seibu Kaihatsu
+ejsakura // (c) 1999 Seibu Kaihatsu
+ejsakura12 // (c) 1999 Seibu Kaihatsu
+rdft // (c) 1996 Seibu Kaihatsu (Tuning License)
+rdft2 // (c) 1997 Seibu Kaihatsu (Tuning License)
+rdft22kc // (c) 2000 Seibu Kaihatsu
+rdft2a // (c) 1997 Seibu Kaihatsu (Metrotainment license)
+rdft2aa // (c) 1997 Seibu Kaihatsu (Dream Island license)
+rdft2it // (c) 1997 Seibu Kaihatsu
+rdft2j // (c) 1997 Seibu Kaihatsu
+rdft2ja // (c) 1997 Seibu Kaihatsu
+rdft2t // (c) 1997 Seibu Kaihatsu
+rdft2u // (c) 1997 Seibu Kaihatsu (Fabtek license)
+rdft2us // (c) 1997 Seibu Kaihatsu (Fabtek license)
+rdfta // (c) 1996 Seibu Kaihatsu
+rdftadi // (c) 1996 Seibu Kaihatsu (Dream Island license)
+rdftam // (c) 1996 Seibu Kaihatsu (Metrotainment license)
+rdftau // (c) 1996 Seibu Kaihatsu
+rdftauge // (c) 1996 Seibu Kaihatsu (Tuning license and text display, but Australia region code)
+rdftit // (c) 1996 Seibu Kaihatsu
+rdftj // (c) 1996 Seibu Kaihatsu
+rdftja // (c) 1996 Seibu Kaihatsu
+rdftjb // (c) 1996 Seibu Kaihatsu
+rdfts // (c) 1996 Seibu Kaihatsu (Explorer System Corp.)
+rdftu // (c) 1996 Seibu Kaihatsu (Fabtek license)
+rfjet // (c) 1998 Seibu Kaihatsu (Tuning License)
+rfjet2kc // (c) 2000 Seibu Kaihatsu
+rfjeta // (c) 1998 Seibu Kaihatsu (Dream Island license)
+rfjetj // (c) 1998 Seibu Kaihatsu
+rfjets // (c) 1998 Seibu Kaihatsu
+rfjetsa // (c) 1998 Seibu Kaihatsu
+rfjett // (c) 1998 Seibu Kaihatsu (Taiwan license)
+rfjetu // (c) 1998 Seibu Kaihatsu (Fabtek license)
+senkyu // (c) 1995 Seibu Kaihatsu
+senkyua // (c) 1995 Seibu Kaihatsu
+viprp1 // (c) 1995 Seibu Kaihatsu
+viprp1h // (c) 1995 Seibu Kaihatsu
+viprp1hk // (c) 1995 Seibu Kaihatsu (Metrotainment License)
+viprp1j // (c) 1995 Seibu Kaihatsu
+viprp1k // (c) 1995 Seibu Kaihatsu (Dream Island license)
+viprp1oj // (c) 1995 Seibu Kaihatsu
+viprp1ot // (c) 1995 Seibu Kaihatsu (Tuning License)
+viprp1s // (c) 1995 Seibu Kaihatsu
+viprp1u // (c) 1995 Seibu Kaihatsu (Fabtek license)
+viprp1ua // (c) 1995 Seibu Kaihatsu (Fabtek license)
+
+//@source:seicross.cpp
+friskyt // (c) 1981
+friskyta // (c) 1981
+friskytb // (c) 1981
+radrad // (c) 1982 Nichibutsu USA
+sectrzon // (c) 1984 + Alice
+seicross // (c) 1984 + Alice
+
+//@source:selz80.cpp
+dagz80 //
+selz80 //
+
+//@source:sengokmj.cpp
+sengokmj // (c) 1991 Sigma
+
+//@source:senjyo.cpp
+baluba // (c) 1986 Able Corp.
+megaforc // (c) 1985 Tehkan + Video Ware license
+senjyo // (c) 1983 Tehkan
+starforc // (c) 1984 Tehkan
+starforca // (c) 1984 Tehkan
+starforcb // (c) 1984 Tehkan
+starforce // (c) 1984 Tehkan
+
+//@source:seta.cpp
+arbalest // UK (c) 1989 + Jordan, Romstar or Taito license (DSW)
+atehate // (C) 1993 Athena
+blandia // (c) 1992 Allumer
+blandiap // (c) 1992 Allumer
+blockcar // (c) 1992 Visco
+blockcarb // bootleg
+calibr50 // UH (c) 1989 + Romstar or Taito license (DSW)
+crazyfgt // (c) 1998 Subsino
+daioh // (C) 1993 Athena
+daioha // (C) 1993 Athena
+daiohc // (C) 1993 Athena (93111A PCB conversion)
+daiohp // (C) 1993 Athena (prototype)
+downtown // UD-2 (c) 1989 + Romstar or Taito license (DSW)
+downtown2 // UD-2 (c) 1989 + Romstar or Taito license (DSW)
+downtownj // UD-2 (c) 1989 + Romstar or Taito license (DSW)
+downtownp // UD-2 (c) 1989 + Romstar or Taito license (DSW)
+drgnunit // (c) 1989 Athena / Seta + Romstar or Taito license (DSW)
+eightfrc // (c) 1994 Tecmo
+extdwnhl // (c) 1995 Sammy Japan
+gundhara // (c) 1995 Banpresto
+gundharac // (c) 1995 Banpresto (Chinese, bootleg?)
+inttoote // (c) 1998 Coinmaster
+inttootea // (c) 1998 Coinmaster
+jjsquawk // (c) 1993 Athena / Able
+jjsquawkb // bootleg
+jjsquawkb2 // bootleg
+jjsquawko // (c) 1993 Athena / Able
+jockeyc // (c) 1990 [Seta] (Visco license)
+kamenrid // (c) 1993 Toei / Banpresto
+keroppi // (c) 1993 Sammy
+keroppij // (c) 1993 Sammy
+kiwame // (c) 1994 Athena
+krzybowl // (c) 1994 American Sammy
+madshark // (c) 1993 Allumer
+magspeed // (c) 1994 Allumer
+metafox // UP (c) 1989 + Jordan, Romstar or Taito license (DSW)
+msgundam // (c) 1993 Banpresto
+msgundam1 // (c) 1993 Banpresto
+neobattl // (c) 1992 Banpresto / Sotsu Agency. Sunrise
+oisipuzl // (c) 1993 SunSoft / Atlus
+orbs // (c) 1994 American Sammy
+pairlove // (c) 1991 Athena
+qzkklgy2 // (c) 1993 Tecmo
+qzkklogy // (c) 1992 Tecmo
+rezon // (c) 1991 Allumer
+rezont // (c) 1991 Allumer / Taito
+setaroul // UF (c) 19?? Seta / Visco
+sokonuke // (c) 1995 Sammy Industries
+stg // (c) 1991 Athena / Tecmo
+superbar // (c) 1994 Promat (not genuine seta hardware, but based on thunderl code)
+thunderl // (c) 1990 Seta + Romstar or Visco license (DSW)
+thunderlbl // (c) 1990 Seta + Romstar or Visco license (DSW) - bootleg with Tetris sound
+tndrcade // UA-0 (c) 1987 Taito
+tndrcadej // UA-0 (c) 1987 Taito
+triplfun // bootleg
+twineagl // UA-2 (c) 1988 + Taito license
+umanclub // (c) 1992 Tsuburaya Prod. / Banpresto
+usclssic // UE (c) 1989 + Romstar or Taito license (DSW)
+utoukond // (c) 1993 Banpresto + Tsuburaya Prod.
+wiggie // (c) 1994 Promat (not genuine seta hardware, but based on thunderl code)
+wits // (c) 1989 Athena (Visco license)
+wrofaero // (c) 1993 Yang Cheng
+zingzip // UY (c) 1992 Allumer + Tecmo
+zingzipbl // bootleg
+zombraid // (c) 1995 American Sammy
+zombraidp // (c) 1995 American Sammy
+zombraidpj // (c) 1995 Sammy Industries Co.,Ltd.
+
+//@source:seta2.cpp
+deerhunt // (c) 2000 Sammy USA Corporation
+deerhunta // (c) 2000 Sammy USA Corporation
+deerhuntb // (c) 2000 Sammy USA Corporation
+deerhuntc // (c) 2000 Sammy USA Corporation
+deerhuntd // (c) 2000 Sammy USA Corporation
+deerhunte // (c) 2000 Sammy USA Corporation
+endrichs // (c) 199? E.N.Tiger
+funcube // (c) 2000 Namco
+funcube2 // (c) 2001 Namco
+funcube3 // (c) 2001 Namco
+funcube4 // (c) 2001 Namco
+funcube5 // (c) 2002 Namco
+grdians // (c) 1995 Banpresto
+gundamex // (c) 1994 Banpresto
+mj4simai // (c) 1996 Maboroshi Ware
+myangel // (c) 1996 Namco
+myangel2 // (c) 1997 Namco
+namcostr // (c) 2000 Namco
+penbros // (c) 2000 Subsino
+pzlbowl // (c) 1999 Nihon System / Moss
+reelquak // (c) 1997 <unknown>
+trophyh // (c) 2002 Sammy USA Corporation
+turkhunt // (c) 2001 Sammy USA Corporation
+wschamp // (c) 2001 Sammy USA Corporation
+wschampa // (c) 2001 Sammy USA Corporation
+wschampb // (c) 2001 Sammy USA Corporation
+
+//@source:sf.cpp
+sf // 8/1987 (c) 1987 (US)
+sfan // 8/1987 (c) 1987 (World)
+sfj // 8/1987 (c) 1987 (Japan)
+sfp // 8/1987 (c) 1987
+sfua // 8/1987 (c) 1987 (US)
+
+//@source:sfbonus.cpp
+abnudge // (c) 2003 Amcoe - Animal Bonus Nudge
+abnudgeb // (c) 2003 Amcoe
+abnudged // (c) 2003 Amcoe
+abnudgeo // (c) 2003 Amcoe
+act2000 // (c) 1999 Amcoe - Action 2000
+act2000b1 // (c) 1999 Amcoe
+act2000bx // (c) 1999 Amcoe
+act2000d1 // (c) 1999 Amcoe
+act2000dx // (c) 1999 Amcoe
+act2000o // (c) 1999 Amcoe
+act2000o2 // (c) 1999 Amcoe
+act2000o3 // (c) 1999 Amcoe
+act2000v1 // (c) 1999 Amcoe
+act2000vx // (c) 1999 Amcoe
+amclink // (c) 200? Amcoe - Amcoe Link Control Box?
+anibonus // (c) 2003 Amcoe - Animal Bonus
+anibonusb1 // (c) 2003 Amcoe
+anibonusb2 // (c) 2003 Amcoe
+anibonusd1 // (c) 2003 Amcoe
+anibonusd2 // (c) 2003 Amcoe
+anibonuso // (c) 2003 Amcoe
+anibonuso2 // (c) 2003 Amcoe
+anibonuso3 // (c) 2003 Amcoe
+anibonusv1 // (c) 2003 Amcoe
+anibonusv2 // (c) 2003 Amcoe
+anibonusxo // (c) 2003 Amcoe
+anibonusxo2 // (c) 2003 Amcoe
+anibonusxo3 // (c) 2003 Amcoe
+anithunt // (c) 2003 Amcoe - Animal Treasure Hunt
+anithuntd1 // (c) 2003 Amcoe
+anithunto // (c) 2003 Amcoe
+anithunto2 // (c) 2003 Amcoe
+anithuntv1 // (c) 2003 Amcoe
+atworld // (c) 2007 Amcoe - Around The World
+atworldd1 // (c) 2007 Amcoe
+atworlde1 // (c) 2007 Amcoe
+bugfever // (c) 2006 Amcoe - Bug Fever
+bugfeverd // (c) 2006 Amcoe
+bugfevero // (c) 2006 Amcoe
+bugfeverv // (c) 2006 Amcoe
+bugfeverv2 // (c) 2006 Amcoe
+ch2000 // (c) 2000 Amcoe - Fruit Bonus 2000 / New Cherry 2000
+ch2000b1 // (c) 2000 Amcoe
+ch2000b2 // (c) 2000 Amcoe
+ch2000c1 // (c) 2000 Amcoe
+ch2000c2 // (c) 2000 Amcoe
+ch2000d1 // (c) 2000 Amcoe
+ch2000d2 // (c) 2000 Amcoe
+ch2000o // (c) 2000 Amcoe
+ch2000o2 // (c) 2000 Amcoe
+ch2000o3 // (c) 2000 Amcoe
+ch2000v1 // (c) 2000 Amcoe
+ch2000v2 // (c) 2000 Amcoe
+classice // (c) 2004 Amcoe - Classic Edition
+classice1 // (c) 2004 Amcoe
+classice2 // (c) 2004 Amcoe
+classiced1 // (c) 2004 Amcoe
+classiced2 // (c) 2004 Amcoe
+classicev // (c) 2004 Amcoe
+classicev1 // (c) 2004 Amcoe
+classicev2 // (c) 2004 Amcoe
+dblchal // (c) 2003 Amcoe - Double Challenge
+dblchalc1 // (c) 2003 Amcoe
+dblchald1 // (c) 2003 Amcoe
+dblchalo // (c) 2003 Amcoe
+dblchalv1 // (c) 2003 Amcoe
+dvisland // (c) 2006 Amcoe - Devil's Island
+dvislando // (c) 2006 Amcoe
+fb2gen // (c) 2004 Amcoe - Fruit Bonus 2nd Generation
+fb2genc1 // (c) 2004 Amcoe
+fb2genc2 // (c) 2004 Amcoe
+fb2gend1 // (c) 2004 Amcoe
+fb2gend2 // (c) 2004 Amcoe
+fb2geno // (c) 2004 Amcoe
+fb2geno2 // (c) 2004 Amcoe
+fb2genv1 // (c) 2004 Amcoe
+fb2genv2 // (c) 2004 Amcoe
+fb2nd // (c) 2004 Amcoe - Fruit Bonus 2nd Edition
+fb2ndc2 // (c) 2004 Amcoe
+fb2ndd1 // (c) 2004 Amcoe
+fb2ndd2 // (c) 2004 Amcoe
+fb2ndo // (c) 2004 Amcoe
+fb2ndv1 // (c) 2004 Amcoe
+fb2ndv2 // (c) 2004 Amcoe
+fb3g // (c) 200? Amcoe - Fruit Bonus 3G
+fb4 // (c) 2004 Amcoe - Fruit Bonus 2004
+fb4b2 // (c) 2004 Amcoe
+fb4c1 // (c) 2004 Amcoe
+fb4c2 // (c) 2004 Amcoe
+fb4d1 // (c) 2004 Amcoe
+fb4d2 // (c) 2004 Amcoe
+fb4exp // (c) 2004 Amcoe
+fb4o // (c) 2004 Amcoe
+fb4o2 // (c) 2004 Amcoe
+fb4v1 // (c) 2004 Amcoe
+fb4v2 // (c) 2004 Amcoe
+fb5 // (c) 2005 Amcoe - Fruit Bonus 2005
+fb5c // (c) 2005 Amcoe
+fb5d // (c) 2005 Amcoe
+fb5v // (c) 2005 Amcoe
+fb6 // (c) 2006 Amcoe - Fruit Bonus '06 - 10th anniversary
+fb6d1 // (c) 2006 Amcoe
+fb6d2 // (c) 2006 Amcoe
+fb6s1 // (c) 2006 Amcoe
+fb6s2 // (c) 2006 Amcoe
+fb6s3 // (c) 2006 Amcoe
+fb6se // (c) 2006 Amcoe - Fruit Bonus 2006 Special Edition
+fb6sed1 // (c) 2006 Amcoe
+fb6sed2 // (c) 2006 Amcoe
+fb6sev // (c) 2006 Amcoe
+fb6sev1 // (c) 2006 Amcoe
+fb6sev2 // (c) 2006 Amcoe
+fb6v // (c) 2006 Amcoe
+fb6v1 // (c) 2006 Amcoe
+fb6v2 // (c) 2006 Amcoe
+fbdeluxe // (c) 200? Amcoe - Fruit Bonus Deluxe
+fbdeluxeo // (c) 200? Amcoe
+fcnudge // (c) 2003 Amcoe - Fruit Carnival Nudge
+fcnudgeo // (c) 2003 Amcoe
+fcnudgeo2 // (c) 2003 Amcoe
+fcnudgeo3 // (c) 2003 Amcoe
+funriver // (c) 2005 Amcoe - Fun River
+funriverd1 // (c) 2005 Amcoe
+funriverv // (c) 2005 Amcoe
+getrich // (c) 200? Amcoe - Get Rich
+hldspin1 // (c) 2000 Amcoe - Hold & Spin I
+hldspin1dt // (c) 2000 Amcoe
+hldspin1o // (c) 2000 Amcoe
+hldspin1vt // (c) 2000 Amcoe
+hldspin2 // (c) 2000 Amcoe - Hold & Spin II
+hldspin2d1 // (c) 2000 Amcoe
+hldspin2o // (c) 2000 Amcoe
+hldspin2v1 // (c) 2000 Amcoe
+moneymac // (c) 200? Amcoe - Money Machine
+moneymacd1 // (c) 200? Amcoe
+moneymacd2 // (c) 200? Amcoe
+moneymacv1 // (c) 200? Amcoe
+moneymacv2 // (c) 200? Amcoe
+parrot3 // (c) 2003 Amcoe - Parrot Poker III
+parrot3b1 // (c) 2004 Amcoe
+parrot3d1 // (c) 2004 Amcoe
+parrot3o // (c) 2004 Amcoe
+parrot3v1 // (c) 2004 Amcoe
+pickwin // (c) 2001 Amcoe - Pick 'n Win
+pickwinb1 // (c) 2001 Amcoe
+pickwinbt // (c) 2001 Amcoe
+pickwind1 // (c) 2001 Amcoe
+pickwindt // (c) 2001 Amcoe
+pickwino // (c) 2001 Amcoe
+pickwino2 // (c) 2001 Amcoe
+pickwinv1 // (c) 2001 Amcoe
+pickwinvt // (c) 2001 Amcoe
+pir2001 // (c) 2001 Amcoe - Pirate 2001
+pir2001b1 // (c) 2001 Amcoe
+pir2001bx // (c) 2001 Amcoe
+pir2001d1 // (c) 2001 Amcoe
+pir2001dx // (c) 2001 Amcoe
+pir2001o // (c) 2001 Amcoe
+pir2001o2 // (c) 2001 Amcoe
+pir2001o3 // (c) 2001 Amcoe
+pir2001v1 // (c) 2001 Amcoe
+pir2001vx // (c) 2001 Amcoe
+pir2002 // (c) 2001 Amcoe - Pirate 2002
+pir2002b1 // (c) 2001 Amcoe
+pir2002bx // (c) 2001 Amcoe
+pir2002d1 // (c) 2001 Amcoe
+pir2002dx // (c) 2001 Amcoe
+pir2002o // (c) 2001 Amcoe
+pir2002o2 // (c) 2001 Amcoe
+pir2002o3 // (c) 2001 Amcoe
+pir2002v1 // (c) 2001 Amcoe
+pir2002vx // (c) 2001 Amcoe
+pirpok2 // (c) 2003 Amcoe - Pirate Poker II
+pirpok2b1 // (c) 2003 Amcoe
+pirpok2d1 // (c) 2003 Amcoe
+pirpok2o // (c) 2003 Amcoe
+pirpok2v1 // (c) 2003 Amcoe
+robadv // (c) 2004 Amcoe - Robin's Adventure
+robadv2 // (c) 2004 Amcoe - Robin's Adventure 2
+robadv2c1 // (c) 2004 Amcoe
+robadv2c2 // (c) 2004 Amcoe
+robadv2c3 // (c) 2004 Amcoe
+robadv2d1 // (c) 2004 Amcoe
+robadv2d2 // (c) 2004 Amcoe
+robadv2d3 // (c) 2004 Amcoe
+robadv2o // (c) 2004 Amcoe
+robadv2o2 // (c) 2004 Amcoe
+robadv2v1 // (c) 2004 Amcoe
+robadv2v2 // (c) 2004 Amcoe
+robadv2v3 // (c) 2004 Amcoe
+robadvc1 // (c) 2004 Amcoe
+robadvd1 // (c) 2004 Amcoe
+robadvo // (c) 2004 Amcoe
+robadvv1 // (c) 2004 Amcoe
+seawld // (c) 200? Amcoe - Sea World
+seawldd1 // (c) 200? Amcoe
+sfbonus // (c) 2003 Amcoe - Skill Fruit Bonus
+sfbonusd1 // (c) 2003 Amcoe
+sfbonuso // (c) 2003 Amcoe
+sfbonuso2 // (c) 2003 Amcoe
+sfbonusv1 // (c) 2003 Amcoe
+sfruitb // (c) 2002 Amcoe - Super Fruit Bonus
+sfruitbb1 // (c) 2002 Amcoe
+sfruitbb2 // (c) 2002 Amcoe
+sfruitbbh // (c) 2002 Amcoe
+sfruitbd1 // (c) 2002 Amcoe
+sfruitbd2 // (c) 2002 Amcoe
+sfruitbdh // (c) 2002 Amcoe
+sfruitbh // (c) 2002 Amcoe
+sfruitbo // (c) 2002 Amcoe
+sfruitbo2 // (c) 2002 Amcoe
+sfruitboh // (c) 2002 Amcoe
+sfruitbv1 // (c) 2002 Amcoe
+sfruitbv2 // (c) 2002 Amcoe
+sfruitbvh // (c) 2002 Amcoe
+spooky // (c) 200? Amcoe - Spooky Night (2nd Edition)
+spookyo // (c) 200? Amcoe - Spooky Night
+suprball // (c) 2002 Amcoe - Skill based
+tighook // (c) 2004 Amcoe - Tiger Hook
+tighookc1 // (c) 2004 Amcoe
+tighookc2 // (c) 2004 Amcoe
+tighookd1 // (c) 2004 Amcoe
+tighookd2 // (c) 2004 Amcoe
+tighooko // (c) 2004 Amcoe
+tighooko2 // (c) 2004 Amcoe
+tighookv1 // (c) 2004 Amcoe
+tighookv2 // (c) 2004 Amcoe
+version4 // (c) 2006 Amcoe - Version 4
+version4d2 // (c) 2006 Amcoe
+version4d3 // (c) 2006 Amcoe
+version4o // (c) 2006 Amcoe
+version4v // (c) 2006 Amcoe
+version4v2 // (c) 2006 Amcoe
+version4v3 // (c) 2006 Amcoe
+
+//@source:sfcbox.cpp
+pss61 // 199? Nintendo
+pss62 // 199? T & E Soft / I'Max
+pss63 // 199? Nintendo / BPS
+pss64 // 199? Nintendo / Hudson Soft
+sfcbox //
+
+//@source:sfkick.cpp
+sfkick // (c) 1988 Haesung/HJ Corp
+sfkicka // (c) 198? Haesung
+spinkick // (c) 1988 Haesung/Seojin
+
+//@source:sg1000.cpp
+omv1000 // Tsukuda Original Othello Multivision FG-1000
+omv2000 // Tsukuda Original Othello Multivision FG-2000
+sc3000 // Sega SC-3000 (Japan)
+sc3000h // Sega SC-3000H (Japan)
+sf7000 // Sega SC-3000 w/ SF-7000 (Japan)
+sg1000 // Sega SG-1000 (Japan)
+sg1000m2 // Sega SG-1000 Mark II (Japan)
+
+//@source:sg1000a.cpp
+chboxing // (c) 1984
+chwrestl // (c) 1985
+dokidoki // (c) 1985
+
+//@source:sh4robot.cpp
+sh4robot //
+
+//@source:shadfrce.cpp
+shadfrce // TA-0032 (c) 1993 (World)
+shadfrcej // TA-0032 (c) 1993 (Japan)
+shadfrceu // TA-0032 (c) 1993 (US)
+
+//@source:shangha3.cpp
+blocken // (c) 1994 KID / Visco
+heberpop // (c) 1994 Sunsoft / Atlus
+shangha3 // (c) 1993 Sunsoft
+shangha3j // (c) 1993 Sunsoft
+shangha3u // (c) 1993 Sunsoft
+
+//@source:shanghai.cpp
+kothello // (c) 1990 Success.
+shangha2 // (c) 1989 Sunsoft (Sun Electronics)
+shangha2a // (c) 1989 Sunsoft (Sun Electronics)
+shanghai // (c) 1988 Sunsoft (Sun Electronics)
+shanghaij // (c) 1988 Sunsoft (Sun Electronics)
+
+//@source:shangkid.cpp
+chinhero // (c) 1984 Taiyo
+chinhero2 // (c) 1984 Taiyo
+chinhero3 // (c) 1984 Taiyo
+chinherot // (c) 1984 Taiyo
+dynamski // (c) 1984 Taiyo
+hiryuken // (c) 1985 Taito
+shangkid // (c) 1985 Taiyo + Data East license
+
+//@source:shaolins.cpp
+kicker // GX477 (c) 1985
+shaolinb // bootleg
+shaolins // GX477 (c) 1985
+
+//@source:shisen.cpp
+matchit // (c) 1989 Tamtex
+shisen // (c) 1989 Tamtex
+sichuan2 // (c) 1989 Tamtex
+sichuan2a // (c) 1989 Tamtex
+
+//@source:shootout.cpp
+shootout // (c) 1985 Data East USA (US)
+shootoutb // bootleg
+shootoutj // (c) 1985 Data East USA (Japan)
+
+//@source:shougi.cpp
+shougi // (c) 1982 (Arcade TV Game List - P.80, Left, 9 from top)
+shougi2 // (c) 1982 (Arcade TV Game List - P.80, Left, 10 from top)
+
+//@source:shtzone.cpp
+shtzone // (c) 1987
+
+//@source:shuuz.cpp
+shuuz // 136083 (c) 1990
+shuuz2 // 136083 (c) 1990
+
+//@source:sidearms.cpp
+dyger // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+dygera // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+sidearms // 12/1986 (c) 1986 (World)
+sidearmsj // 12/1986 (c) 1986 (Japan)
+sidearmsu // 12/1986 (c) 1986 + Romstar license (US)
+sidearmsur1 // 12/1986 (c) 1986 + Romstar license (US)
+turtship // (c) 1988 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+turtshipj // (c) 1988 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+turtshipk // (c) 1988 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+turtshipkn // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+turtshipko // (c) 1988 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+twinfalc // (c) 1989 Philko (Poara Enterprises license) (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+whizz // (c) 1989 Philko (NOT A CAPCOM GAME but runs on modified Sidearms hardware)
+
+//@source:sidepckt.cpp
+sidepckt // (c) 1986 Data East Corporation
+sidepcktb // bootleg
+sidepcktj // (c) 1986 Data East Corporation
+
+//@source:sigmab52.cpp
+jwildb52 // (c) 199? Sigma
+jwildb52a // (c) 199? Sigma
+jwildb52h // (c) 199? Sigma
+s8waysfc // (c) 199? Sigma
+
+//@source:sigmab98.cpp
+animalc // (c) 2000 Sammy
+b3rinsya // b9805 (c) 1997 Sigma
+dashhero // b9811 (c) 1999 Sigma
+dodghero // b9802 (c) 1997 Sigma
+gegege // b9804 (c) 1997 Sigma / Banpresto
+haekaka // (c) 2001 Sammy
+itazuram // (c) 2000 Sammy
+pepsiman // b9806 (c) 1997 Sigma
+pyenaget // (c) 2000 Sammy
+sammymdl // (c) 2000-2003 Sammy
+sushimar // b9803 (c) 1997 Sigma
+tbeastw2 // b9808 (c) 1998 Sigma / Transformer Production Company / Takara
+tdoboon // (c) 2000 Sammy
+ucytokyu // b9809 (c) 1997 Sigma
+
+//@source:silkroad.cpp
+silkroad // (c) 1999
+silkroada // (c) 1999
+
+//@source:silvmil.cpp
+puzzlove // (c) 1994 Para
+puzzlovek // (c) 1994 Para
+silvmil // (c) 1995 Para
+
+//@source:simpl156.cpp
+candance // MCF (c) 1996 Mitchell
+chainrec // MCC (c) 1994
+charlien // MBR (c) 1994 Mitchell
+gangonta // MCB (c) 1995 Mitchell
+joemacr // MBN (c) 1994 Data East Corporation (World)
+joemacra // MBN (c) 1994 Data East Corporation (World)
+joemacrj // MBN (c) 1994 Data East Corporation (Japan)
+magdrop // MCC (c) 1995 Data East
+magdropp // MCC (c) 1995 Data East
+osman // MCF (c) 1996 Mitchell
+prtytime // MCB (c) 1995 Mitchell
+
+//@source:simple_st0016.cpp
+dcrown // 199? unknown
+dcrowna // 199? unknown
+gostop // 2001 Visco
+koikois // (c) 1995 Seta
+mayjinsn // (c) 1994 Seta
+mayjisn2 // (c) 1994 Seta
+nratechu // (c) 1996 Seta
+renju // (c) 1994 Visco
+
+//@source:simpsons.cpp
+simpsons // GX072 (c) 1991
+simpsons2p // GX072 (c) 1991
+simpsons2p2 // GX072 (c) 1991
+simpsons2p3 // GX072 (c) 1991
+simpsons2pa // GX072 (c) 1991 (Asia)
+simpsons2pj // GX072 (c) 1991 (Japan)
+simpsons4pa // GX072 (c) 1991
+
+//@source:sitcom.cpp
+sitcom //
+
+//@source:skeetsht.cpp
+popshot // (c) 1991 (prototype)
+skeetsht // (c) 1991
+
+//@source:skimaxx.cpp
+skimaxx // (c) 1996 Kyle Hodgetts/ICE
+
+//@source:skullxbo.cpp
+skullxbo // 136072 (c) 1989
+skullxbo1 // 136072 (c) 1989
+skullxbo2 // 136072 (c) 1989
+skullxbo3 // 136072 (c) 1989
+skullxbo4 // 136072 (c) 1989
+
+//@source:skyarmy.cpp
+skyarmy // (c) 1982 Shoei
+
+//@source:skydiver.cpp
+skydiver // 009787 1978/06 [6800]
+
+//@source:skyfox.cpp
+exerizer // (c) 1987? Jaleco
+exerizerb // bootleg
+skyfox // (c) 1987 Jaleco + Nichibutsu USA license
+
+//@source:skykid.cpp
+drgnbstr // (c) 1984
+skykid // (c) 1985
+skykidd // (c) 1985
+skykido // (c) 1985
+skykids // (c) 1985
+
+//@source:skylncr.cpp
+butrfly // (c) 1995 Bordun International
+gallag50 // Bootleg?
+leader // Bootleg?
+madzoo // (c) 1995 Bordun International
+mbutrfly // (c) 1999 (Bordun International?)
+neraidou // Bootleg?
+skylncr // (c) 1995 Bordun International
+sstar97 // (c) 199? Bordun International
+
+//@source:skyraid.cpp
+skyraid // 009709 1978/03 [6502]
+
+//@source:slapfght.cpp
+alcon // A77 / TP-???
+getstarb1 // GX-006 bootleg but (c) 1986 Taito Corporation
+getstarb2 // GX-006 bootleg but (c) 1986 Taito Corporation
+getstarj // A68 (c) 1986 Taito Corporation
+grdian // A68 (c) 1986 Taito Corporation
+perfrman // (c) 1985 Data East Corporation (Japan)
+perfrmanu // (c) 1985 Data East USA (US)
+slapfigh // A77 / TP-???
+slapfigha // A76 / TP-???
+slapfighb1 // bootleg but (c) 1986 Taito Corporation
+slapfighb2 // bootleg but (c) 1986 Taito Corporation
+slapfighb3 // bootleg but (c) 1986 Taito Corporation
+tigerh // A47 (c) 1985 Taito America Corporation GX-551 [not a Konami board!]
+tigerhb1 // bootleg but (c) 1985 Taito Corporation
+tigerhb2 // bootleg but (c) 1985 Taito Corporation
+tigerhb3 // bootleg but (c) 1985 Taito Corporation
+tigerhj // A47 (c) 1985 Taito Corporation GX-551 [not a Konami board!]
+
+//@source:slapshot.cpp
+opwolf3 // D74 (c) 1994 Taito
+opwolf3u // D74 (c) 1994 Taito
+slapshot // D71 (c) 1994 Taito Corporation (Japan)
+
+//@source:slc1.cpp
+slc1 //
+
+//@source:sleic.cpp
+sleicpin //
+
+//@source:slicer.cpp
+slicer // 1983 Slicer Computers
+
+//@source:sliver.cpp
+sliver // (c) 1996 Hollow Corp
+slivera //
+
+//@source:slotcarn.cpp
+slotcarn // (c) 1985 Wing Co. Ltd
+spielbud // (c) 1985 ADP
+
+//@source:sm1800.cpp
+sm1800 //
+
+//@source:smc777.cpp
+smc777 //
+
+//@source:sms.cpp
+gamegeaj // Sega GameGear (Japan)
+gamegear // Sega GameGear
+sg1000m3 // Sega SG-1000 Mark III (Japan)
+sms // Sega Master System II (NTSC)
+sms1 // Sega Master System I (NTSC)
+sms1kr // Samsung Gam*Boy I (Korea)
+sms1krfm // Samsung Gam*Boy I (Korea) with FM Chip
+sms1pal // Sega Master System I (PAL)
+smsj // Sega Master System (Japan) with FM Chip
+smskr // Samsung Gam*Boy II (Korea)
+smspal // Sega Master System II (PAL)
+smssdisp // Sega Master System Store Display Unit
+
+//@source:smsmcorp.cpp
+secondch // (c) 1985 SMS MFG CORP
+sureshot // (c) 1985 SMS MFG CORP
+trvhang // (c) 1984 SMS MFG CORP
+trvhanga // (c) 1984 SMS MFG CORP
+
+//@source:snes.cpp
+snes // Nintendo Super Nintendo NTSC
+snespal // Nintendo Super Nintendo PAL
+
+//@source:snesb.cpp
+denseib // bootleg
+endless // bootleg
+ffight2b // bootleg
+iron // bootleg
+kinstb // bootleg
+mk3snes // bootleg
+sblast2b // bootleg
+
+//@source:snk.cpp
+alphamis // (c) 1985
+arian // (c) 1985
+aso // (c) 1985
+athena // 'UP' (c) 1986
+bermudat // (c) 1987
+bermudata // A6004 'WW' (c) 1987
+bermudatj // (c) 1987
+chopper // A7003 'KK' (c) 1988
+choppera // A7003 'KK' (c) 1988
+chopperb // A7003 'KK' (c) 1988
+countryc // A7004 'CC' (c) 1988
+dogosokb // bootleg
+dogosoke // A6002 (c) 1986
+fitegolf // 'GU' (c) 1988
+fitegolf2 //
+fitegolfu // 'GU' (c) 1988
+fsoccer // A6006 'FS' (c) 1988
+fsoccerb // (c) 1988
+fsoccerba // (c) 1988
+fsoccerj // A6006 'FS' (c) 1988
+gwar // A7003 'GV' (c) 1987
+gwara // A7003 'GV' (c) 1987
+gwarb // bootleg
+gwarj // A7003 'GV' (c) 1987 (Japan)
+hal21 // A4031 (c) 1985
+hal21j // (c) 1985 (Japan)
+ikari // A5004 'IW' (c) 1986
+ikaria // A5004 'IW' (c) 1986
+ikarijp // A5004 'IW' (c) 1986 (Japan)
+ikarijpb // bootleg
+ikarinc // A5004 'IW' (c) 1986
+ikariram // bootleg
+jcross // A3006 (c) 1984
+legofair // A7003 'KK' (c) 1988
+madcrash // A2005 (c) 1984
+madcrush // A2005 (c) 1984
+marvins // A2003 (c) 1983
+psychos // 'PS' (c) 1987
+psychosj // 'PS' (c) 1987 (Japan)
+sgladiat // A3006 (c) 1984
+tdfever // A6006 'TD' (c) 1987
+tdfever2 // A6006 'TD'?(c) 1988
+tdfeverj // A6006 'TD' (c) 1987
+tnk3 // A5001 (c) 1985
+tnk3j // A5001 (c) 1985
+vangrd2 // A2005 (c) 1984
+victroad // A6002 (c) 1986
+worldwar // A6004 'WW' (c) 1987
+
+//@source:snk6502.cpp
+fantasy // (c) 1981 SNK
+fantasyj // (c) 1981 SNK
+fantasyu // (c) 1981 Rock-Ola
+nibbler // (c) 1982 Rock-ola (version 9)
+nibbler6 // (c) 1982 Rock-ola (vresion 6)
+nibbler8 // (c) 1982 Rock-ola (version 8)
+nibblero // (c) 1983 Olympia/Rock-Ola (version 8)
+nibblerp // (c) 1982 Rock-ola (pballoon conversion)
+pballoon // (c) 1982 SNK
+pballoonr // (c) 1982 SNK (Rock-Ola license)
+sasuke // [1980] Shin Nihon Kikaku (SNK)
+satansat // (c) 1981 SNK
+satansata // (c) 1981 SNK
+satansatind // bootleg
+vanguard // (c) 1981 SNK
+vanguardc // (c) 1981 SNK + Centuri
+vanguardj // (c) 1981 SNK
+zarzon // (c) 1981 Taito, gameplay says SNK
+
+//@source:snk68.cpp
+ikari3 // A7007 'IK3'(c) 1989
+ikari3j // A7007 'IK3'(c) 1989
+ikari3k // A7007 'IK3'(c) 1989
+ikari3u // A7007 'IK3'(c) 1989
+pow // A7008 'DG' (c) 1988
+powj // A7008 'DG' (c) 1988
+searchar // A8007 'BH' (c) 1989
+searcharj // A8007 'BH' (c) 1989
+searcharu // A8007 'BH' (c) 1989
+streetsm // A8007 'S2' (c) 1989
+streetsm1 // A7008 'S2' (c) 1989
+streetsmj // A8007 'S2' (c) 1989
+streetsmw // (c) 1989
+
+//@source:snookr10.cpp
+apple10 // (c) 1998 Sandii'
+crystalc // 199? unknown
+snookr10 // (c) 1998 Sandii'
+tenballs // 1997 unknown
+
+//@source:snowbros.cpp
+3in1semi // (c) 1998 SemiCom
+4in1boot // (c) 2002 KISoft (includes hacks of Semicom games + Snowbros)
+ballboy // bootleg
+cookbib2 // (c) 1996 SemiCom
+cookbib3 // (c) 1997 SemiCom
+finalttr // (c) 1993 Jeil Computer System
+honeydol // (c) 1995 Barko Corp
+hyperpac // (c) 1995 SemiCom
+hyperpacb // bootleg
+mcheonru // (c) 1999 SemiCom
+moremore // (c) 1999 SemiCom + Exit
+moremorp // (c) 1999 SemiCom + Exit
+multi96 // (c) 1996 Barko Corp
+pzlbreak // (c) 1997 SemiCom
+snowbro3 // (c) 2002 Syrmex
+snowbros // MIN16-02 (c) 1990 Toaplan + Romstar license
+snowbrosa // MIN16-02 (c) 1990 Toaplan + Romstar license
+snowbrosb // MIN16-02 (c) 1990 Toaplan + Romstar license
+snowbrosc // MIN16-02 (c) 1990 Toaplan + Romstar license
+snowbrosd // MIN16-02 (c) 1990 Toaplan + Dooyong license
+snowbrosj // MIN16-02 (c) 1990 Toaplan
+snowbroswb //
+suhosong // (c) 1997 SemiCom
+toppyrap // (c) 1996 SemiCom
+toto //
+twinadv // (c) 1995 Barko Corp
+twinadvk // (c) 1995 Barko Corp
+twinkle // (c) 1997 SemiCom
+wintbob // bootleg
+
+//@source:socrates.cpp
+iqunlimz // 1991 IQ Unlimited (Z80)
+profweis // 1988 (Yeno) Professor Weiss-Alles (Germany)
+socrates // 1988 Socrates Educational Video System (USA)
+socratfc // 1988 Socrates SAITOUT (French Canada)
+
+//@source:softbox.cpp
+softbox //
+
+//@source:solomon.cpp
+solomon // (c) 1986 Tecmo
+solomonj // (c) 1986 Tecmo
+
+//@source:sonson.cpp
+sonson // 7/1984 (c) 1984
+sonsonj // 7/1984 (c) 1984 (Japan)
+
+//@source:sorcerer.cpp
+sorcerer // Sorcerer
+sorcerer2 // monitor 1.1 1979
+sorcererd // Sorcerer with floppies
+
+//@source:sothello.cpp
+sothello // (c) 1986 Success / Fujiwara.
+
+//@source:spacefb.cpp
+spacebrd // bootleg
+spacedem // (c) 1980 Fortrek + made by Nintendo
+spacefb // (c) [1980?] Nintendo
+spacefba // (c) [1980?] Nintendo
+spacefbb // bootleg
+spacefbe // (c) [1980?] Nintendo
+spacefbe2 // (c) [1980?] Nintendo
+spacefbg // 834-0031 (c) 1980 Gremlin
+starwarr // Potomac Mortgage
+
+//@source:spaceg.cpp
+spaceg // (c) 19??
+
+//@source:spbactn.cpp
+spbactn // 9002 - (c) 1991 Tecmo
+spbactnj // 9002 - (c) 1991 Tecmo
+spbactnp // prototype
+
+//@source:spc1000.cpp
+spc1000 //
+
+//@source:spc1500.cpp
+spc1500 //
+
+//@source:spcforce.cpp
+meteor // (c) 1981 Venture Line
+meteors // (c) 1981 Amusement World
+spcforc2 // bootleg
+spcforce // (c) 1980 Venture Line
+
+//@source:spdodgeb.cpp
+nkdodge // TA-0022 (c) 1987 (Japan)
+nkdodgeb // TA-0022 (c) 1987 (Japan)
+spdodgeb // TA-0022 (c) 1987
+
+//@source:spec128.cpp
+hc128 // 1991 HC-128
+hc2000 // 1992 HC-2000
+spec128 // 1986 ZX Spectrum 128
+specpls2 // 1986 ZX Spectrum +2
+
+//@source:special.cpp
+erik //
+lik //
+pioner //
+special //
+specialm //
+specialp //
+specimx //
+
+//@source:specpls3.cpp
+sp3e8bit // 2002 ZX Spectrum +3e 8bit IDE
+sp3eata // 2002 ZX Spectrum +3e ZXATASP
+sp3ezcf // 2002 ZX Spectrum +3e ZXCF
+specpl2a // 1987 ZX Spectrum +2a
+specpl3e // 2000 ZX Spectrum +3e
+specpls3 // 1987 ZX Spectrum +3
+
+//@source:spectra.cpp
+spectra //
+
+//@source:spectrum.cpp
+blitzs // 1990 Blic
+byte // 1990 Byte
+cip01 // 1987 CIP-01
+cip03 // 1988 CIP-03
+cobra80 //
+cobrasp //
+compani1 // 1990 Kompanion 1
+dgama87 // 1987 Didaktik Gama 87
+dgama88 // 1988 Didaktik Gama 88
+dgama89 // 1989 Didaktik Gama 89
+didakm91 // 1991 Didaktik M 91
+didakm92 // 1992 Didaktik M 92
+didakm93 // 1993 Didaktik M 93
+didakt90 // 1990 Didaktik Skalica 90
+didaktk // 1992 Didaktik Kompakt
+hc85 // 1985 HC-85
+hc88 // 1988 HC-88
+hc90 // 1990 HC-90
+hc91 // 1991 HC-91
+inves // 1986 Inves Spectrum 48K+
+jet // 1990 JET
+magic6 // 1993 Magic 6
+mistrum // 1988 Mistrum
+orizon // 199? Orizon-Micro
+quorum48 // 1993 Kvorum 48K
+spec80k // 1987 ZX Spectrum 80k
+specide // 1995 ZX Spectrum IDE
+spectrum // 1982 ZX Spectrum
+spektrbk // 1990 Spektr BK-001
+tk90x // 1985 TK90x Color Computer
+tk95 // 1986 TK95 Color Computer
+zvezda // 1990 Zvezda
+
+//@source:speedatk.cpp
+speedatk // CB-0 (c) SetaKikaku
+
+//@source:speedbal.cpp
+musicbal // (c) 1987
+speedbal // (c) 1987
+
+//@source:speedspn.cpp
+speedspn // (c) 1994
+
+//@source:speglsht.cpp
+speglsht // (c) 1994 Seta
+
+//@source:spiders.cpp
+spiders // (c) 1981 Sigma Ent. Inc.
+spiders2 // (c) 1981 Sigma Ent. Inc.
+spiders3 // (c) 1981 Sigma Ent. Inc.
+spinner // bootleg
+
+//@source:spinb.cpp
+bushido //
+bushidoa //
+jolypark //
+mach2 //
+vrnwrld //
+
+//@source:splash.cpp
+funystrp // not a gaelco game but on similar hw to splash
+paintlad // (c) 1992 - ver 1.3
+puckpepl // not a gaelco game but on similar hw to splash
+rebus // not a gaelco game but on similar hw to splash
+roldfrog // not a gaelco game but based on splash code
+roldfroga // not a gaelco game but based on splash code
+splash // (c) 1992 - Ref 922804
+splash10 // (c) 1992 - Ref 922804
+
+//@source:splus.cpp
+spss4240 //
+
+//@source:spoker.cpp
+3super8 // unknown
+spk115it // (c) 199? IGS
+spk116it // (c) 199? IGS
+
+//@source:spool99.cpp
+spool99 // (c) 1998 Electronic Projects
+spool99a // (c) 1998 Electronic Projects
+spool99b // (c) 1998 Electronic Projects
+spool99c // (c) 1998 Electronic Projects
+vcarn // (c) 1999 Electronic Projects
+
+//@source:sprcros2.cpp
+sprcros2 // (c) 1986 GM Shoji
+sprcros2a // (c) 1986 GM Shoji
+
+//@source:sprint2.cpp
+dominos // 007305 1977/01 [6502]
+dominos4 // 007754-007765 ??????? [6502]
+sprint1 // 006443 1978/01 [6502]
+sprint2 // 005922 1976/11 [6502]
+sprint2a // 005922 1976/11 [6502]
+sprint2h // 005922 romkit
+
+//@source:sprint4.cpp
+sprint4 // 008716 1977/12 [6502]
+sprint4a // 008716 1977/12 [6502]
+
+//@source:sprint8.cpp
+sprint8 // ?????? 1977/05 [6800]
+sprint8a // ?????? 1977/05 [6800]
+
+//@source:spy.cpp
+spy // GX857 (c) 1989 (World)
+spyu // GX857 (c) 1989 (US)
+
+//@source:squale.cpp
+squale //
+
+//@source:srmp2.cpp
+mjyuugi // (c) 1990 Visco
+mjyuugia // (c) 1990 Visco
+ponchin // (c) 1991 Visco
+ponchina // (c) 1991 Visco
+rmgoldyh // ZF-0? (c) 1988
+srmp1 // UB or UC?? (c) 1987
+srmp2 // UB or UC?? (c) 1987
+srmp3 // ZA-0? (c) 1988
+
+//@source:srmp5.cpp
+srmp5 // (c) 199? Seta
+
+//@source:srmp6.cpp
+srmp6 // (c) 1996 Seta (Japan)
+
+//@source:srumbler.cpp
+rushcrsh // 9/1986 (c) 1986
+srumbler // 9/1986 (c) 1986
+srumbler2 // 9/1986 (c) 1986
+srumbler3 // 9/1986 (c) 1986 + Tecfri
+
+//@source:ssem.cpp
+ssem // Manchester Small-Scale Experimental Machine, "Baby"
+
+//@source:ssfindo.cpp
+ppcar // (c) 1999 Icarus
+ssfindo // (c) 1999 Icarus
+tetfight // (c) 2001 Sego
+
+//@source:sshangha.cpp
+sshangha // (c) 1992 Hot-B
+sshanghab // bootleg
+
+//@source:sshot.cpp
+gunchamps // (c) 1980 Model Racing (sshot.cpp)
+sshot // (c) 1979 Model Racing
+
+//@source:ssingles.cpp
+atamanot // (c) 1983 Yachiyo Denki / Uni Enterprize
+ssingles // Yachiyo?
+
+//@source:sslam.cpp
+powerbals // (c) 1994
+sslam // (c) 1993 - hack of Namco's Super World Court
+sslama // ^
+sslamb // ^
+
+//@source:ssozumo.cpp
+ssozumo // TA-0008 (c) 1984
+
+//@source:sspeedr.cpp
+sspeedr // 1979 Midway
+
+//@source:ssrj.cpp
+ssrj // A40 (c) 1985 Taito Corporation
+
+//@source:sstrangr.cpp
+sstrangr // (c) 1978 Yachiyo Electronics, Ltd.
+sstrangr2 // (c) 1979 Yachiyo Electronics, Ltd.
+
+//@source:ssv.cpp
+cairblad // (c) 1999 Sammy
+drifto94 // (c) 1994 Visco
+dynagear // (c) 1993 Sammy
+eaglshot // (c) 1994 Sammy
+gdfs // (c) 1995 Banpresto
+hypreac2 // (c) 1997 Sammy
+hypreact // (c) 1995 Sammy
+janjans1 // (c) 1996 Visco
+janjans2 // (c) 2000 Visco
+jsk // (c) 1997 Visco
+keithlcy // (c) 1993 Visco
+koikois2 // (c) 1997 Visco
+meosism // (c) 1996?Sammy
+mslider // (c) 1997 Visco / Datt Japan
+ryorioh // (c) 1998 Visco
+srmp4 // (c) 1993 Seta
+srmp4o // (c) 1993 Seta
+srmp7 // (c) 1997 Seta
+stmblade // (c) 1996 Visco
+stmbladej // (c) 1996 Visco
+survarts // (c) 1993 Sammy
+survartsj // (c) 1993 Sammy
+survartsu // (c) 1993 Sammy (American)
+sxyreac2 // (c) 1999 Sammy
+sxyreact // (c) 1998 Sammy
+twineag2 // (c) 1994 Seta
+ultrax // (c) 1995 Banpresto
+ultraxg // review build
+vasara // (c) 2000 Visco
+vasara2 // (c) 2001 Visco
+vasara2a // (c) 2001 Visco
+
+//@source:ssystem3.cpp
+ssystem3 // Chess Champion Super System III / MK III
+
+//@source:st_mp100.cpp
+dracula //
+hothand //
+lectrono //
+magic //
+memlane //
+nugent //
+pinball //
+princess //
+stars //
+stingray //
+trident //
+wildfyre //
+
+//@source:st_mp200.cpp
+ali //
+biggame //
+blkshpsq //
+catacomp //
+cheetah //
+dragfist //
+flight2k //
+freefall //
+galaxypi //
+gamatron //
+ironmaid //
+lazrlord //
+lightnin //
+meteorp //
+nineball //
+orbitor1 //
+quicksil //
+seawitch //
+spltsecp //
+st_game //
+stargzr //
+viperp //
+
+//@source:st17xx.cpp
+st1700h //
+st1701 //
+st1702 //
+st1703 //
+st1704 //
+st1705 //
+st1706 //
+st1707 //
+st1708 //
+st1714 //
+
+//@source:stactics.cpp
+stactics // (c) 1981 Sega
+
+//@source:stadhero.cpp
+stadhero // (c) 1988 Data East Corporation (Japan)
+
+//@source:starcrus.cpp
+starcrus // (c) 1977 Ramtek
+
+//@source:starfire.cpp
+fireone // (c) 1979 Exidy
+starfir2 // (c) 1979 Exidy
+starfire // Exidy [1979?]
+starfirea // Exidy [1979?]
+
+//@source:starshp1.cpp
+starshp1 // 007513-007531 1977/07 [6502]
+starshpp // 007513-007531 1977/07 [6502]
+
+//@source:starwars.cpp
+esb // 136031 (c) 1985
+starwars // 136021 (c) 1983
+starwars1 // 136021 (c) 1983
+starwarso // 136021 (c) 1983
+tomcatsw // (proto) (c) 1983
+
+//@source:statriv2.cpp
+cstripxi // (c) 1981 Status Games
+funcsino // (c) 1981 Status Games
+hangman // (c) 1984 Status Games
+quaquiz2 // (c) 1985 Status Games
+sextriv // (c) 1985 Status Games
+statriv2 // (c) 1984 Status Games
+statriv2v // (c) 1984 Status Games
+statriv4 // (c) 1985 Status Games
+statusbj // (c) 1981 Status Games
+supertr2 // (c) 1986 Status Games
+supertr3 // (c) 1986 Status Games
+tripdraw // (c) 1981 Status Games
+trivquiz // (c) 1984 Status Games
+
+//@source:stellafr.cpp
+st_ohla //
+st_vulkn //
+
+//@source:stfight.cpp
+cshooter // (c) 1987 Taito
+empcity // (c) 1986 Seibu Kaihatsu (bootleg?)
+empcityi // (c) 1986 Seibu Kaihatsu (Eurobed license)
+empcityj // (c) 1986 Taito Corporation (Japan)
+empcityu // (c) 1986 Taito (Romstar License)
+stfight // (c) 1986 Seibu Kaihatsu (Germany) (bootleg?)
+stfighta // (c) 1986 Seibu Kaihatsu (bootleg?)
+
+//@source:stlforce.cpp
+stlforce // (c) 1994 Electronic Devices (Italy) / Ecogames S.L. (Spain)
+twinbrat // (c) 1995
+twinbrata // (c) 1995
+
+//@source:stratos.cpp
+stratos // Kasparov Stratos Chess Computer
+
+//@source:strnskil.cpp
+banbam // TVG16 (c) 1984 Sun Electronics
+guiness // TVG15 (c) 1984 Sun Electronics
+pettanp // TVG16 (c) 1984 Sun Electronics (Japan)
+strnskil // TVG15 (c) 1984 Sun Electronics
+
+//@source:studio2.cpp
+apollo80 //
+cm1200 //
+mpt02 //
+mpt02h //
+mtc9016 // 1978 Mustang 9016 Telespiel Computer
+shmc1200 //
+studio2 // 1977 Studio II
+visicom //
+
+//@source:stuntair.cpp
+stuntair // (c) 1983 Nuova Videotron
+
+//@source:stv.cpp
+astrass // 1998.06 Astra Super Stars (Sunsoft)
+bakubaku // 1995.04 Bakubaku Animal
+batmanfr // 1996.02 Batman Forever (Acclaim)
+colmns97 // 1997.01 Columns 97
+cotton2 // 1997.11 Cotton 2 (Success)
+cottonbm // 1998.09 Cotton Boomerang (Success)
+critcrsh // 1995.?? Critter Crusher
+danchih // 1999.06 Danchi de Hanafuda Okusan Komeya Desuyo! (Altron (Tecmo License))
+danchiq // 2000.12 Danchi de Quiz Okusan Yontaku Desuyo! (Altron)
+decathlt // 1996.05 Decathlete
+decathlto // 1996.05 Decathlete
+diehard // 1996.08 Die Hard Arcade
+dnmtdeka // 1996.07 Dynamite Deka
+ejihon // 1995.07 Ejihon Tantei Jimusyo
+elandore // 1998.11 Touryuu Densetsu Elandore (Sai-Mate)
+ffreveng // 1999.09 Final Fight Revenge (Capcom) (V1.100)
+ffrevng10 // 1999.09 Final Fight Revenge (Capcom) (V1.000)
+fhboxers // 1996.02 Funky Head Boxers
+findlove // 1997.12 Find Love (Daiki / FCF)
+finlarch // 1995.07 Final Arch
+gaxeduel // 1995.02 Golden Axe the Duel
+grdforce // 1998.05 Guardian Force (Success)
+groovef // 1997.05 Groove on Fight (Atlus)
+hanagumi // 1997.11 Sakura Taisen Hanagumi Taisen Columns
+introdon // 1996.04 Karaoke Quiz Intro Dondon (Sunsoft / Success)
+kiwames // 1995.11 Pro Mahjong Kiwame S (Athena)
+magzun // 1996.11 Magical Zunou Power
+maruchan // 1997.12 Maruchan de Goo!!!
+mausuke // 1996.07 Mausuke no Ojama the World (Data East)
+micrombc // 1999.03 Microman Battle Charge
+myfairld // 1998.07 My Fair Lady (Micronet)
+nameclub //
+nclubv2 //
+nclubv3 // 1997.07 Name Club Ver. 3
+othellos // 1998.07 Othello Shiyouyo (Success)
+pblbeach // 1996.03 Pebble Beach the Great Shot (T&E Soft)
+pclb2elk // 1997.07 Print Club Custom
+pclove //
+pclove2 //
+pclub2 // 1997.09 Print Club 2
+pclub26w //
+pclub27s //
+pclub2fc // 1997.04 Print Club 2 Felix The Cat
+pclub2kc // 1997.02 Print Club Kome Kome Club
+pclub2pe //
+pclub2pf //
+pclub2v3 // 1999.03 Print Club 2 Vol. 3
+pclub2wb //
+pclubol // 1998.07 Print Club Olive
+pclubor // 1999.11 Print Club Goukakenran
+pclubpok // 1999.11 Print Club Pokemon
+pclubyo2 //
+prc297wi // 1997.10 Print Club 2 '97 Winter Ver
+prc297wia //
+prc298au // 1998.08 Print Club 2 '98 Autumn Ver
+prc298sp // 1997.10 Print Club 2 '98 Spring Ver
+prc298su //
+prikura // 1996.10 Prikura Daisakusen (Atlus)
+puyosun // 1996.12 Puyo Puyo SUN (Compile)
+rsgun // 1998.05 Radient Silver Gun (Treasure)
+sandor // 1995.11 Nido Aru Koto wa Sando-R
+sanjeon // 1999.04 Sanjun Sujun (Sega / Deniam)
+sasissu // 1998.02 Taisen Tanto-R Sasissu!!
+seabass // 1998.02 Sea Bass Fishing (A wave Inc (Able License))
+sfish2 // 1995.11 Sports Fishing 2 (Export)
+sfish2j // 1995.08 Sports Fishing 2 (Japan)
+shanhigw // 1995.08 Shanghai Banri no Choujou
+shienryu // 1997.02 Shienryu (Warashi)
+smleague // 1996.04 Super Major League
+sokyugrt // 1996.09 Soukyuu Gurentai (Raizing / 8ing)
+sss // 1998.12 Steep Slope Sliders (Capcom / Cave / Victor)
+stress // 1998.10 Stress Busters
+stvbios //
+suikoenb // 1995.03 Suiko Enbu (Data East)
+techbowl // 1997.12 Technical Bowling
+thunt // 1997.09 Puzzle & Action Treasure Hunt (Sega (Deniam License))
+thuntk //
+twcup98 // 1998.04 Tecmo World Cup '98 (Tecmo)
+vfkids // 1996.03 Virtua Fighter Kids
+vfremix // 1995.06 Virtua Fighter Remix
+vmahjong // 1997.02 Virtual Mahjong (Micronet)
+winterht // 1997.10 Winter Heat (Data East)
+znpwfv // 1997.12 Zen Nippon Pro Wrestling featuring Virtua
+
+//@source:su2000.cpp
+su2000 // (c) 1993 Virtuality
+
+//@source:sub.cpp
+sub // (c) 1985 Sigma Ent. Inc.
+
+//@source:subhuntr.cpp
+subhuntr // 1979 Model Racing
+
+//@source:subs.cpp
+subs // 033714 1979/05 [6502]
+
+//@source:subsino.cpp
+crsbingo // (c) 1991 Subsino
+mtrainnv // (c) 1996 Subsino
+sharkpy // (c) 1996 Subsino
+sharkpya // (c) 1996 Subsino
+sharkpye // (c) 1996 Subsino (Alpha license)
+smoto16 // (c) 1996 Subsino
+smoto20 // (c) 1996 Subsino
+stbsub // (c) 1995 Subsino (Alpha license)
+stisub // (c) 1995 Subsino
+tesorone // (c) 1995 Subsino
+tesorone230 // (c) 1995 Subsino
+tesorone240 // (c) 1995 Subsino
+tisub // (c) 1992 Subsino
+tisuba // (c) 1992 Subsino
+victor21 // (c) 1990 Subsino
+victor5 // (c) 1990 Subsino
+victor6 // (c) 1995 Subsino (Alpha license)
+victor6a // (c) 1995 Subsino (Alpha license)
+victor6b // (c) 1995 Subsino (Alpha license)
+
+//@source:subsino2.cpp
+bishjan // (c) 1999 Subsino
+expcard // (c) 1998 American Alpha
+mtrain // (c) 1996 Subsino
+ptrain // (c) 1999 Subsino
+saklove // (c) 1998 Subsino
+wtrnymph // (c) 1996 Subsino
+xplan // (c) 2006 Subsino
+xtrain // (c) 1999 Subsino
+
+//@source:summit.cpp
+pushover // (c)1981 Summit Coin
+
+//@source:sumt8035.cpp
+sm_ngacc // Nudge Accumulator
+sm_ultng // Ultimate Nudge
+
+//@source:sun1.cpp
+sun1 //
+
+//@source:sun2.cpp
+sun2_120 //
+sun2_50 //
+
+//@source:sun3.cpp
+sun3_110 //
+sun3_150 //
+sun3_260 //
+sun3_460 //
+sun3_50 //
+sun3_60 //
+sun3_80 //
+sun3_e //
+
+//@source:sun4.cpp
+sun_s10 //
+sun_s20 //
+sun4_20 //
+sun4_300 //
+sun4_40 //
+sun4_50 //
+sun4_60 //
+sun4_75 //
+
+//@source:suna16.cpp
+bestbest // (c) 1994 SunA
+bssoccer // (c) 1996 SunA
+bssoccera // (c) 1996 SunA
+sunaq // (c) 1994 SunA
+uballoon // (c) 1996 SunA
+
+//@source:suna8.cpp
+brickzn // (c) 1992 SunA
+brickzn11 // (c) 1992 SunA
+brickznv4 // (c) 1992 SunA
+brickznv5 // (c) 1992 SunA
+hardhea2 // (c) 1991 SunA
+hardhea2b // bootleg
+hardhead // (c) 1988 SunA
+hardheadb // bootleg
+hardheadb2 // bootleg
+pop_hh // bootleg
+rranger // (c) 1988 SunA + Sharp Image license (distributed by CAPCOM)
+rrangerb // bootleg
+sparkman // (c) 1989 SunA
+sparkmana // (c) 1989 SunA
+sranger // (c) 1988
+srangerb // bootleg
+srangern // (c) 1988 SunA (NOVA License)
+srangero // (c) 1988
+srangerw // (c) 1988 SunA (WDK License)
+starfigh // (c) 1990 SunA
+
+//@source:supbtime.cpp
+chinatwn // MAK (c) 1991 Data East Corporation (Japan)
+supbtime // MAE (c) 1990 Data East Corporation (World)
+supbtimea // MAE (c) 1990 Data East Corporation (World)
+supbtimej // MAE (c) 1990 Data East Corporation (Japan)
+
+//@source:supdrapo.cpp
+supdrapo // (c) 1983 + Stern license
+supdrapoa // (c) 1983 + Jeutel license?
+supdrapob // bootleg
+
+//@source:supduck.cpp
+supduck // (c) Comad
+
+//@source:super6.cpp
+super6 //
+
+//@source:super80.cpp
+super80 //
+super80d //
+super80e //
+super80m //
+super80r //
+super80v //
+
+//@source:superchs.cpp
+superchs // D46 (c) 1992 Taito Corporation Japan (World)
+superchsj // D46 (c) 1992 Taito Corporation (Japan)
+superchsp // prototype
+superchsu // D46 (c) 1992 Taito America Corporation (US)
+
+//@source:supercon.cpp
+supercon //
+
+//@source:supercrd.cpp
+fruitstr // (c) 1992 Fun World
+supercrd // (c) 1992 Fun World
+
+//@source:superdq.cpp
+superdq // ???? (c) 1984
+superdqa // ???? (c) 1984
+superdqs // ???? (c) 1984
+
+//@source:superqix.cpp
+hotsmash // B18 (c) 1987 Taito
+pbillian // (c) 1986 Taito
+perestro // (c) 1994 Promat
+perestrof // (c) 1993 Promat / Fuuki
+sqix // B03 1987
+sqixb1 // bootleg? but (c) 1987
+sqixb2 // bootleg? but (c) 1987
+sqixr1 // B03 1987
+sqixu // B03 1987
+
+//@source:superslave.cpp
+superslv //
+
+//@source:supertnk.cpp
+supertnk // (c) 1981 VIDEO GAMES GmbH, W.-GERMANY
+
+//@source:superwng.cpp
+superwng // (c) 1985 Wing Co. Ltd
+
+//@source:supracan.cpp
+supracan //
+
+//@source:suprgolf.cpp
+albatross //
+suprgolf // (c) 1989 Nasco
+
+//@source:suprloco.cpp
+suprloco // (c) 1982 Sega
+suprlocoo // (c) 1982 Sega
+
+//@source:suprnova.cpp
+cyvern // 1998.02 (c) 1998 Kaneko (US)
+cyvernj // 1998.02 (c) 1998 Kaneko (Japan)
+galpani4 // 1996.09 (c) 1996 Kaneko (Japan)
+galpani4k // 1996.09 (c) 1996 Kaneko (Korea)
+galpanis // 1997.04 (c) 1997 Kaneko (Europe)
+galpanisj // 1997.04 (c) 1997 Kaneko (Japan)
+galpanisk // 1997.04 (c) 1997 Kaneko (Korea)
+galpans2 // 1999.02 (c) 1999 Kaneko (Japan)
+galpans2a // 1999.?? (c) 1999 Kaneko (Asia)
+galpans3 // 2002.07 (c) 2002 Kaneko (Japan)
+galpansu // 1999.?? (c) 1999 Kaneko (Korea)
+gutsn // 2000.06 (c) 2000 Kaneko / Kouyousha (Japan)
+jjparad2 // 1997.12 (c) 1997 Electro Design Co. (Japan)
+jjparads // 1996.12 (c) 1996 Electro Design Co. (Japan)
+panicstr // 1999.09 (c) 1999 Kaneko (Japan)
+puzzloop // 1998.?? (c) 1998 Mitchell (Europe)
+puzzloopa // 1998.?? (c) 1998 Mitchell (Asia)
+puzzloope // 1998.?? (c) 1998 Mitchell (Europe)
+puzzloopj // 1998.12 (c) 1998 Mitchell (Japan)
+puzzloopk // 1998.?? (c) 1998 Mitchell (Korea)
+puzzloopu // 1999.05 (c) 1998 Mitchell (USA)
+ryouran // 1998.07 (c) 1998 Electro Design Co. (Japan)
+ryourano // 1998.07 (c) 1998 Electro Design Co. (Japan)
+sarukani // 1997.01 (c) 1997 Kaneko / Mediaworks (Japan)
+sengekis // 1997.?? (c) 1997 Kaneko / Warashi (Asia)
+sengekisj // 1997.07 (c) 1997 Kaneko / Warashi (Japan)
+senknow // 1999.04 (c) 1999 Kaneko / Kouyousha (Japan)
+skns //
+teljan // 1999.11 (c) 1999 Electro Design Co. (Japan)
+vblokbrk // 1997.?? (c) 1997 Kaneko / Mediaworks (Asia)
+
+//@source:suprridr.cpp
+suprridr // (c) 1983 Venture Line + Taito license
+
+//@source:suprslam.cpp
+suprslam // (c) 1995 Banpresto
+
+//@source:surpratk.cpp
+suratk // GX911 (c) 1990 (World)
+suratka // GX911 (c) 1990 (Asia)
+suratkj // GX911 (c) 1990 (Japan)
+
+//@source:sv8000.cpp
+sv8000 // Super Vision 8000
+
+//@source:svi318.cpp
+sv328n80 // SVI-328 (NTSC) + SVI-806 80 column card
+sv328p80 // SVI-328 (PAL) + SVI-806 80 column card
+svi318 // SVI-318 (PAL)
+svi318n // SVI-318 (NTSC)
+svi328 // SVI-328 (PAL)
+svi328n // SVI-328 (NTSC)
+
+//@source:svision.cpp
+svision // Supervision Handheld
+svisionn //
+svisionp //
+svisions //
+tvlinkp //
+
+//@source:svmu.cpp
+svmu // 1998 Sega Visual Memory Unit
+
+//@source:swtpc.cpp
+swtpc //
+
+//@source:swtpc09.cpp
+swtpc09 // S09, DMF2 Floppy SBUG rom - FLEX
+swtpc09d3 // S09, DMF3 Floppy UNIBUG U3 rom - UniFLEX U3
+swtpc09i // S09, DC4 Floppy + PIA IDE SBUG rom - FLEX
+swtpc09u // S09, DMF2 Floppy UNIBUG rom - UniFLEX
+
+//@source:swyft.cpp
+swyft //
+
+//@source:sym1.cpp
+sym1 // Synertek SYM-1
+
+//@source:sys2900.cpp
+sys2900 //
+
+//@source:systec.cpp
+systec //
+
+//@source:system1.cpp
+4dwarrio // 834-5918 (c) 1985 Coreland / Sega (S1)
+blockgal // 834-6303 (S1)
+blockgalb // bootleg
+brain // (c) 1986 Coreland / Sega (S2?)
+bullfgt // 834-5478 (c) 1984 Sega / Coreland (S1)
+choplift // 834-5795 (c) 1985, (c) 1982 Dan Gorlin (S2)
+chopliftbl // bootleg (S2)
+chopliftu // 834-5795 (c) 1985, (c) 1982 Dan Gorlin (S2)
+dakkochn // 836-6483 (S2)
+flicky // (c) 1984 (S1)
+flickyo // (c) 1984 (S1)
+flickys1 // (c) 1984 (S1)
+flickys2 // (c) 1984 (S1)
+gardia // 834-6119 (S2?)
+gardiab // bootleg
+gardiaj //
+hvymetal // 834-5745 (c) 1985 (S2?)
+imsorry // 834-5707 (c) 1985 Coreland / Sega (S1)
+imsorryj // 834-5707 (c) 1985 Coreland / Sega (S1)
+mrviking // 834-5383 (c) 1984 (S1)
+mrvikingj // 834-5383 (c) 1984 (S1)
+myhero // 834-5755 (c) 1985 (S1)
+myherok // 834-5755 (c) 1985 Coreland / Sega (S1)
+ninja // 834-5677 (c) 1985 (S1)
+nob // (c) Data East
+nobb // bootleg
+nprinces // 834-5677 (c) 1985 (S1)
+nprincesb // bootleg? (S1)
+nprinceso // 834-5677 (c) 1985 (S1)
+nprincesu // 834-5677 (c) 1985 (S1)
+pitfall2 // 834-5627 [1985?] reprogrammed, (c) 1984 Activision (S1)
+pitfall2a // 834-5627 [1985?] reprogrammed, (c) 1984 Activision (S1)
+pitfall2u // 834-5627 [1985?] reprogrammed, (c) 1984 Activision (S1)
+raflesia // 834-5753 (c) 1985 Coreland / Sega (S1)
+regulus // 834-5328?(c) 1983 (S1)
+reguluso // 834-5328?(c) 1983 (S1)
+regulusu // 834-5328?(c) 1983 (S1)
+seganinj // 834-5677 (c) 1985 (S1)
+seganinju // 834-5677 (c) 1985 (S1)
+shtngmst // 834-5719/5720 (c) 1985 (S2)
+shtngmste // 834-5719/5720 (c) 1985 (S2)
+spatter // 834-5583 (c) 1984 (S1)
+spattera // 834-5583 (c) 1984 (S1)
+ssanchan // 834-5583 (c) 1984 (S1)
+sscandal // 834-5755 (c) 1985 Coreland / Sega (S1)
+starjack // 834-5191 (c) 1983 (S1)
+starjacks // (c) 1983 Stern (S1)
+swat // 834-5388 (c) 1984 Coreland / Sega (S1)
+teddybb // 834-5712 (c) 1985 (S1)
+teddybbo // 834-5712 (c) 1985 (S1)
+teddybbobl // bootleg
+thetogyu // 834-5478 (c) 1984 Sega / Coreland (S1)
+tokisens // (c) 1987 (from a bootleg board) (S2)
+ufosensi // 834-6659 (S2)
+ufosensib // bootleg
+upndown // (c) 1983 (S1)
+upndownu // (c) 1983 (S1)
+wbdeluxe // (c) 1986 + Escape license (S1)
+wbml // bootleg (S2)
+wbmlb // bootleg? (S2)
+wbmlbg // bootleg (Galaxy Electronics)
+wbmlbge // bootleg (Gecas)
+wbmljb // (c) 1987 Sega/Westone (S2)
+wbmljo // (c) 1987 Sega/Westone (S2)
+wbmlvc // Virtual Console
+wboy // 834-5984 (c) 1986 + Escape license (S1)
+wboy2 // 834-5984 (c) 1986 + Escape license (S1)
+wboy2u // 834-5984 (c) 1986 + Escape license (S1)
+wboy3 // 834-5984 (c) 1986 + Escape license (S1)
+wboy4 // 834-5984 (c) 1986 + Escape license (S1)
+wboy5 // 834-5984 (c) 1986 + Escape license (S1)
+wboyo // 834-5984 (c) 1986 + Escape license (S1)
+wboysys2 // 834-5984 (c) 1986 + Escape license (S1)
+wboyu // 834-5753 (? maybe a conversion) (c) 1986 + Escape license (S1)
+wboyub // bootleg of wboyu
+wmatch // (c) 1984 (S1)
+
+//@source:system16.cpp
+altbeastbl //
+astormb2 // BOOTLEG
+astormbl // BOOTLEG
+bayrouteb1 // (c) 1989 (protected) (bootleg)
+bayrouteb2 // (c) 1989 (protected) (bootleg)
+beautyb // (c) 1991 AMT
+ddcrewbl //
+dduxbl // (c) 1989 (Datsu bootleg)
+eswatbl // bootleg
+goldnaxeb1 // bootleg
+goldnaxeb2 // bootleg
+iqpipe // (c) 1991 AMT
+mwalkbl // BOOTLEG
+passht4b // bootleg
+passshtb // bootleg
+shdancbl // BOOTLEG
+shdancbla // BOOTLEG
+shinobld // (c) 1987 (but bootleg)
+shinoblda //
+tetrisbl // (c) 1988 (but bootleg)
+tturfbl // (c) 1989 (Datsu bootleg)
+wb3bbl // bootleg
+wb3bble // bootleg
+
+//@source:tagteam.cpp
+bigprowr // TA-0007 (c) 1983
+tagteam // TA-0007 (c) 1983 + Data East license
+
+//@source:tail2nos.cpp
+sformula // [1989] V-System Co. (Japan)
+sformulaa // [1989] V-System Co. (Japan)
+tail2nos // [1989] V-System Co.
+
+//@source:taito.cpp
+cavnegro //
+cavnegro1 //
+cavnegro2 //
+cosmic //
+drakor //
+fireact //
+fireactd //
+gemini2k //
+gemini2k1 //
+gork //
+hawkman //
+hawkman1 //
+ladylukt //
+lunelle //
+meteort //
+mrblack //
+mrblack1 //
+mrblkz80 //
+obaoba //
+obaoba1 //
+polar //
+rally //
+sharkt //
+shock //
+snake //
+sshuttle //
+sshuttle1 //
+stest //
+sureshop //
+taitest //
+titan //
+titan1 //
+vegast //
+voleybal //
+vortexp //
+zarza //
+zarza1 //
+
+//@source:taito_b.cpp
+ashura // C43 (c) 1990 Taito Corporation Japan (World)
+ashuraj // C43 (c) 1990 Taito Corporation (Japan)
+ashurau // C43 (c) 1990 Taito America Corporation (US)
+crimec // B99 (c) 1989 Taito Corporation Japan (World)
+crimecj // B99 (c) 1989 Taito Corporation (Japan)
+crimecu // B99 (c) 1989 Taito America Corporation (US)
+hitice // C59 (c) 1990 Williams (US)
+hiticej // C59 (c) 1990 Midway/Taito Corporation (Japan)
+masterw // B72 (c) 1989 Taito Corporation Japan (World)
+masterwj // B72 (c) 1989 Taito Corporation (Japan)
+masterwu // B72 (c) 1989 Taito America Corporation (US)
+nastar // B81 (c) 1988 Taito Corporation Japan (World)
+nastarw // B81 (c) 1988 Taito America Corporation (US)
+pbobble // ??? (c) 1994 Taito Corporation (Japan)
+qzshowby // D72 (c) 1993 Taito Corporation (Japan)
+rambo3 // B93 (c) 1989 Taito Europe Corporation (Europe)
+rambo3p // B93 (c) 1989 Taito Europe Corporation (Europe) Proto or bootleg???
+rambo3u // B93 (c) 1989 Taito America Corporation (US)
+rastsag2 // B81 (c) 1988 Taito Corporation (Japan)
+realpunc // D76 (c) 1994 Taito Corporation (Japan)
+ryujin // ??? (c) 1993 Taito Corporation (Japan)
+sbm // C69 (c) 1990 Taito Corporation (Japan)
+selfeena // ??? (c) 1991 East Technology
+silentd // ??? (c) 1992 Taito Corporation Japan (World)
+silentdj // ??? (c) 1992 Taito Corporation (Japan)
+silentdu // ??? (c) 1992 Taito Corporation Japan (World)
+spacedx // D89 (c) 1994 Taito Corporation (US)
+spacedxj // D89 (c) 1994 Taito Corporation (Japan)
+spacedxo // D89 (c) 1994 Taito Corporation (Japan)
+tetrist // C12 (c) 1988 Sega Enterprises,Ltd. (Japan)
+tetrista // C35 (c) 1988 Sega Enterprises,Ltd. (Japan)
+viofight // C16 (c) 1989 Taito Corporation Japan (World)
+viofightj // C16 (c) 1989 Taito Corporation (Japan)
+viofightu // C16 (c) 1989 Taito America Corporation (US)
+yukiwo // prototype
+
+//@source:taito_f2.cpp
+cameltry // 1990.?? C38 (c) 1989 Taito America Corporation (US)
+cameltrya // 1990.?? C38 (c) 1989 Taito America Corporation (US)
+cameltryau // 1990.?? C38 (c) 1989 Taito America Corporation (US)
+cameltryj // 1990.04 C38 (c) 1989 Taito Corporation (Japan)
+deadconx // 1992.?? D28 (c) 1992 Taito Corporation Japan (World)
+deadconxj // 1992.08 D28 (c) 1992 Taito Corporation (Japan)
+dinorex // 1992.?? D39 (c) 1992 Taito Corporation Japan (World)
+dinorexj // 1992.11 D39 (c) 1992 Taito Corporation (Japan)
+dinorexu // 1992.?? D39 (c) 1992 Taito America Corporation (US)
+dondokod // 1989.?? B95 (c) 1989 Taito Corporation Japan (World)
+dondokodj // 1989.07 B95 (c) 1989 Taito Corporation (Japan)
+dondokodu // 1989.?? B95 (c) 1989 Taito America Corporation (US)
+driftout // 1991.10 (c) 1991 Visco (Europe)
+driftoutj // 1991.10 (c) 1991 Visco (Japan)
+driveout // bootleg
+euroch92 // 1991.?? (c) 1992 Taito Corporation Japan (World)
+finalb // 1989.?? B82 (c) 1988 Taito Corporation Japan (World)
+finalbj // 1989.04 B82 (c) 1988 Taito Corporation (Japan)
+finalbu // 1989.06 B82 (c) 1988 Taito America Corporation (US)
+footchmp // 1991.?? C80 (c) 1990 Taito Corporation Japan (World)
+footchmpbl // bootleg
+growl // 1991.?? C74 (c) 1990 Taito Corporation Japan (World)
+growla // 1991.?? C74 (c) 1990 Taito Corporation Japan (World)
+growlp // 1991.?? C74 (c) 1990 Taito Corporation Japan (World, prototype)
+growlu // 1991.02 C74 (c) 1990 Taito America Corporation (US)
+gunfront // 1991.?? C71 (c) 1990 Taito Corporation Japan (World)
+gunfrontj // 1991.01 C71 (c) 1990 Taito Corporation (Japan)
+hthero // 1991.03 C80 (c) 1990 Taito Corporation (Japan)
+koshien // 1991.04 C81 (c) 1990 Taito Corporation (Japan)
+liquidk // 1990.?? C49 (c) 1990 Taito Corporation Japan (World)
+liquidku // 1990.?? C49 (c) 1990 Taito America Corporation (US)
+majest12 // 1990.11 C64 (c) 1990 Taito Corporation (Japan)
+megablst // 1989.?? C11 (c) 1989 Taito Corporation Japan (World)
+megablstj // 1989.11 C11 (c) 1989 Taito Corporation (Japan)
+megablstu // 1989.?? C11 (c) 1989 Taito America Corporation (US)
+metalb // 1991.?? D16? (c) 1991 Taito Corporation Japan (World)
+metalbj // 1991.11 D12 (c) 1991 Taito Corporation (Japan)
+mizubaku // 1990.08 C49 (c) 1990 Taito Corporation (Japan)
+mjnquest // 1991.05 C77 (c) 1990 Taito Corporation (Japan)
+mjnquestb // 1991.05 C77 (c) 1990 Taito Corporation (Japan)
+ninjak // 1991.?? C85 (c) 1990 Taito Corporation Japan (World)
+ninjakj // 1991.04 C85 (c) 1990 Taito Corporation (Japan)
+ninjaku // 1991.03 C85 (c) 1990 Taito Corporation (Japan)
+pulirula // 1991.?? C98 (c) 1991 Taito Corporation Japan (World)
+pulirulaj // 1991.11 C98 (c) 1991 Taito Corporation (Japan)
+qcrayon // 1993.08 D55 (c) 1993 Taito Corporation (Japan)
+qcrayon2 // 1994.01 D63 (c) 1993 Taito Corporation (Japan)
+qjinsei // 1993.03 D48 (c) 1992 Taito Corporation (Japan)
+qtorimon // 1990.02 C41 (c) 1990 Taito Corporation (Japan)
+quizhq // 1990.07 C53 (c) 1990 Taito Corporation (Japan)
+qzchikyu // 1992.02 D19 (c) 1991 Taito Corporation (Japan)
+qzquest // 1991.07 C92 (c) 1991 Taito Corporation (Japan)
+runark // 1991.02 C74 (c) 1990 Taito Corporation (Japan)
+solfigtr // 1991.?? C91 (c) 1991 Taito Corporation Japan (World)
+ssi // 1990.?? C64 (c) 1990 Taito Corporation Japan (World)
+ssia // 1990.?? C64 (c) 1990 Taito Corporation Japan (World)
+thundfox // 1990.?? C28 (c) 1990 Taito Corporation Japan (World)
+thundfoxj // 1990.07 C28 (c) 1990 Taito Corporation (Japan)
+thundfoxu // 1990.06 C28 (c) 1990 Taito America Corporation (US)
+yesnoj // 1992.03 D20 (c) 1992 Taito Corporation (Japan)
+yuyugogo // 1991.03 C83 (c) 1990 Taito Corporation (Japan)
+
+//@source:taito_f3.cpp
+akkanvdr // 1995.07 E06 (c) 1995 Taito Corporation (Japan)
+arabianm // 1992.?? D29 (c) 1992 Taito Corporation Japan (World)
+arabianmj // 1992.09 D29 (c) 1992 Taito Corporation (Japan)
+arabianmu // 1992.10 D29 (c) 1992 Taito America Corporation (US)
+arkretrn // 1997.03 E36 (c) 1997 Taito Corporation (World)
+arkretrnj // 1997.03 E36 (c) 1997 Taito Corporation (Japan)
+arkretrnu // 1997.03 E36 (c) 1997 Taito Corporation (US)
+bubblem // 1996.?? E21 (c) 1995 Taito Corporation Japan (World)
+bubblemj // 1996.04 E21 (c) 1995 Taito Corporation (Japan)
+bublbob2 // 1994.?? D90 (c) 1994 Taito Corporation Japan (World)
+bublbob2o // 1994.?? D90 (c) 1994 Taito Corporation Japan (World)
+bublbob2p // prototype
+bubsymphb // bootleg
+bubsymphe // 1994.?? D90 (c) 1994 Taito Corporation Japan (Europe)
+bubsymphj // 1994.10 D90 (c) 1994 Taito Corporation (Japan)
+bubsymphu // 1994.10 D90 (c) 1994 Taito America Corporation (US)
+cleopatr // 1996.10 E28 (c) 1996 Taito Corporation (Japan)
+commandw // prototype
+cupfinal // 1993.?? D49 (c) 1993 Taito Corporation Japan (World)
+dankuga // 1994.?? D84? (c) 1994 Taito Corporation (Japan)
+dariusg // 1994.?? D87 (c) 1994 Taito Corporation Japan (World)
+dariusgj // 1994.09 D87 (c) 1994 Taito Corporation (Japan)
+dariusgu // 1994.11 D87 (c) 1994 Taito America Corporation (US)
+dariusgx // 1994.?? D87 (c) 1994 Taito Corporation
+dungeonm // 1994.?? D69 (c) 1993 Taito Corporation Japan (World)
+dungeonmu // 1994.?? D69 (c) 1993 Taito America Corporation (US)
+elvact2u // 1995.05 E02 (c) 1994 Taito America Corporation (US)
+elvactr // 1995.?? E02 (c) 1994 Taito Corporation Japan (World)
+elvactrj // 1995.03 E02 (c) 1994 Taito Corporation (Japan)
+gblchmp // 1994.10 D84 (c) 1994 Taito America Corporation (US)
+gekiridn // 1995.11 E11 (c) 1995 Taito Corporation Japan (World)
+gekiridnj // 1995.11 E11 (c) 1995 Taito Corporation (Japan)
+gseeker // 1992.?? D40 (c) 1992 Taito Corporation Japan (World)
+gseekerj // 1992.12 D40 (c) 1992 Taito Corporation (Japan)
+gseekeru // 1992.?? D40 (c) 1992 Taito America Corporation (US)
+gunlock // 1994.?? D66 (c) 1993 Taito Corporation Japan (World)
+hthero93 // 1993.03 D49 (c) 1992 Taito Corporation (Japan)
+hthero93u // 1993.04 D49 (c) 1992 Taito America Corporation (US)
+hthero94 // 1994.09 D78 (c) 1994 Taito (US)
+hthero95 // 1994.11 D94 (c) 1995 Taito Corporation (Japan)
+hthero95u // 1995.05 D94 (c) 1995 Taito America Corporation (US)
+intcup94 // 1994.?? D78 (c) 1994 Taito (World)
+kaiserkn // 1994.?? D84 (c) 1994 Taito Corporation Japan (World)
+kaiserknj // 1994.08 D84 (c) 1994 Taito Corporation (Japan)
+kirameki // 1997.09 E44 (c) 1997 Taito Corporation (Japan)
+ktiger2 // 1996.02 E15 (c) 1995 Taito Corporation (Japan)
+landmakr // 1998.08 E61 (c) 1998 Taito Corporation (Japan)
+landmakrp // 1998.?? E61 (c) 1998 Taito Corporation (World, prototype)
+lightbr // 1994.03 D69 (c) 1993 Taito Corporation Japan (World)
+lightbrj // 1994.03 D69 (c) 1993 Taito Corporation (Japan)
+pbobble2 // 1995.?? E10 (c) 1995 Taito Corporation Japan (World)
+pbobble2j // 1995.09 E10 (c) 1995 Taito Corporation (Japan)
+pbobble2o // 1995.?? E10 (c) 1995 Taito Corporation Japan (World)
+pbobble2u // 1995.11 E10 (c) 1995 Taito America Corporation (US)
+pbobble2x // 1995.12 E10 (c) 1995 Taito Corporation (Japan)
+pbobble3 // 1996.?? E29 (c) 1996 Taito Corporation (World)
+pbobble3j // 1996.11 E29 (c) 1996 Taito Corporation (Japan)
+pbobble3u // 1996.11 E29 (c) 1996 Taito Corporation (US)
+pbobble4 // 1998.?? E49 (c) 1997 Taito Corporation (World)
+pbobble4j // 1998.02 E49 (c) 1997 Taito Corporation (Japan)
+pbobble4u // 1998.?? E49 (c) 1997 Taito Corporation (US)
+popnpop // 1998.?? E51 (c) 1997 Taito Corporation (World)
+popnpopj // 1998.03 E51 (c) 1997 Taito Corporation (Japan)
+popnpopu // 1998.?? E51 (c) 1997 Taito Corporation (US)
+prmtmfgt // 1993.08 D53 (c) 1993 Taito Corporation (US)
+prmtmfgto // 1993.08 D53 (c) 1993 Taito Corporation (US)
+puchicar // 1997.?? E46 (c) 1997 Taito Corporation (World)
+puchicarj // 1997.12 E46 (c) 1997 Taito Corporation (Japan)
+pwrgoal // 1994.?? D94 (c) 1995 Taito Corporation Japan (World)
+qtheater // 1995.01 D95 (c) 1994 Taito Corporation (Japan)
+quizhuhu // 1995.07 E08 (c) 1995 Taito Corporation (Japan)
+rayforce // 1994.?? D66 (c) 1993 Taito America Corporation (US)
+rayforcej // 1994.02 D66 (c) 1993 Taito Corporation (Japan)
+recalh // prototype
+ridingf // 1992.?? D34 (c) 1992 Taito Corporation Japan (World)
+ridingfj // 1992.12 D34 (c) 1992 Taito Corporation (Japan)
+ridingfu // 1992.?? D34 (c) 1992 Taito America Corporation (US)
+ringrage // 1992.?? D21 (c) 1992 Taito Corporation Japan (World)
+ringragej // 1992.09 D21 (c) 1992 Taito Corporation (Japan)
+ringrageu // 1992.02 D21 (c) 1992 Taito America Corporation (US)
+scfinals // 1994.?? D68 (c) 1993 Taito Corporation Japan (World)
+scfinalso // 1994.?? D68 (c) 1993 Taito Corporation Japan (World)
+spcinv95 // 1995.?? E06 (c) 1995 Taito Corporation Japan (World)
+spcinv95u // 1995.05 E06 (c) 1995 Taito America Corporation (US)
+spcinvdj // 1994.09 D93 (c) 1994 Taito Corporation (Japan)
+tcobra2 // 1996.?? E15 (c) 1995 Taito Corporation (World)
+tcobra2u // 1996.?? E15 (c) 1995 Taito Corporation (US)
+trstar // 1993.?? D53 (c) 1993 Taito Corporation Japan (World)
+trstarj // 1993.07 D53 (c) 1993 Taito Corporation (Japan)
+trstaro // 1993.?? D53 (c) 1993 Taito Corporation (World)
+trstaroj // 1993.07 D53 (c) 1993 Taito Corporation (Japan)
+twinqix // 1995.03 ??? (c) 1995 Taito America Corporation (US)
+
+//@source:taito_h.cpp
+dleague // C02 (c) 1990 Taito America Corporation (US)
+dleaguej // C02 (c) 1990 Taito Corporation (Japan)
+gogold // B56 (c) 1988 Taito Corporation (Japan)
+recordbr // B56 (c) 1988 Taito Corporation Japan (World)
+syvalion // B51 (c) 1988 Taito Corporation (Japan)
+syvalionp //
+tetristh // C26 (c) 1988 Sega Enterprises,Ltd. (Japan)
+
+//@source:taito_l.cpp
+cachat // ??? (c) 1993 Taito Corporation (Japan)
+champwr // C01 (c) 1989 Taito Corporation Japan (World)
+champwrj // C01 (c) 1989 Taito Corporation (Japan)
+champwru // C01 (c) 1989 Taito America Corporation (US)
+cubybop // ??? no copyright message
+evilston // C67 (c) 1990 Spacy Industrial, Ltd
+fhawk // B70 (c) 1988 Taito Corporation Japan (World)
+fhawkj // B70 (c) 1988 Taito Corporation (Japan)
+flipull // B96 (c) 1989 Taito Corporation Japan (World)
+horshoes // C47 (c) 1990 Taito America Corporation (US)
+kurikint // B42 (c) 1988 Taito Corporation Japan (World)
+kurikinta // B42 (c) 1988 Taito Corporation Japan (World)
+kurikintj // B42 (c) 1988 Taito Corporation (Japan)
+kurikintu // B42 (c) 1988 Taito America Corporation (US)
+lagirl // plgirls bootleg?
+palamed // C63 (c) 1990 Taito Corporation (Japan)
+plgirls // (c) 1992 Hot-B.
+plgirls2 // (c) 1993 Hot-B.
+plgirls2b //
+plotting // B96 (c) 1989 Taito Corporation Japan (World)
+plottinga // B96 (c) 1989 Taito Corporation Japan (World)
+plottingb // B96 (c) 1989 Taito Corporation Japan (World)
+plottingu // B96 (c) 1989 Taito Corporation Japan (US)
+puzznic // C20 (c) 1989 Taito Corporation (Japan)
+puzznicb // bootleg
+puzznicba // bootleg
+puzznici // bootleg
+puzznicj // C20 (c) 1989 Taito Corporation (Japan)
+raimais // B36 (c) 1988 Taito Corporation (Japan)
+raimaisj // B36 (c) 1988 Taito Corporation
+raimaisjo // B36 (c) 1988 Taito Corporation
+tubeit // ??? no copyright message
+
+//@source:taito_o.cpp
+parentj // C42 (c) 199? Taito
+
+//@source:taito_x.cpp
+ballbros // no copyright notice
+daisenpu // B87 (c) 1989 Taito Corporation (Japan)
+gigandes // (c) 1989 East Technology
+gigandesa // (c) 1989 East Technology
+kyustrkr // (c) 1989 East Technology
+superman // B61 (c) 1988 Taito Corporation
+supermanj // B61 (c) 1988 Taito Corporation
+supermanu // B61 (c) 1988 Taito Corporation
+twinhawk // B87 (c) 1989 Taito Corporation Japan (World)
+twinhawku // B87 (c) 1989 Taito America Corporation (US)
+
+//@source:taito_z.cpp
+aquajack // B77 (c) 1990 Taito Corporation Japan (World)
+aquajackj // B77 (c) 1990 Taito Corporation (Japan)
+aquajacku // B77 (c) 1990 Taito America Corporation (US)
+bshark // C34 (c) 1989 Taito Corporation Japan (World)
+bsharkj // C34 (c) 1989 Taito Corporation (Japan)
+bsharkjjs // C34 (c) 1989 Taito Corporation (Japan) (Joystick version)
+bsharku // C34 (c) 1989 Taito America Corporation (US)
+chasehq // B52 (c) 1988 Taito Corporation Japan (World)
+chasehqj // B52 (c) 1988 Taito Corporation (Japan)
+chasehqju // B52 (c) 1988 Taito Corporation (Japan)
+chasehqu // B52 (c) 1988 Taito America Corporation (US)
+contcirc // B33 (c) 1987 Taito Corporation Japan (World)
+contcircj // B33 (c) 1987 Taito Corporation (Japan)
+contcircu // B33 (c) 1987 Taito America Corporation (US)
+contcircua // B33 (c) 1987 Taito America Corporation (US)
+dblaxle // C78 (c) 1991 Taito America Corporation (US)
+dblaxleu // C78 (c) 1991 Taito America Corporation (US)
+enforce // B58 (c) 1988 Taito Corporation Japan (World)
+enforcej // B58 (c) 1988 Taito Corporation (Japan)
+enforceja // B58 (c) 1988 Taito Corporation (Japan)
+nightstr // B91 (c) 1989 Taito Corporation Japan (World)
+nightstrj // B91 (c) 1989 Taito Corporation (Japan)
+nightstru // B91 (c) 1989 Taito America Corporation (US)
+pwheelsj // C78 (c) 1991 Taito Corporation (Japan)
+racingb // C84 (c) 1991 Taito Corporation Japan (World)
+racingbj // C84 (c) 1991 Taito Corporation (Japan)
+sci // C09 (c) 1989 Taito Corporation Japan (World)
+scia // C09 (c) 1989 Taito Corporation Japan (World)
+scij // C09 (c) 1989 Taito Corporation Japan (World)
+scin // C09 (c) 1991 Taito Corporation Japan (Negro Torino hack)
+sciu // C09 (c) 1989 Taito America Corporation (US)
+spacegun // C57 (c) 1990 Taito Corporation Japan (World)
+spacegunj // C57 (c) 1990 Taito Corporation (Japan)
+spacegunu // C57 (c) 1990 Taito America Corporation (US)
+
+//@source:taitoair.cpp
+ainferno // C45 (c) 1990 Taito America Corporation (US)
+ainfernoj // C45 (c) 1990 Taito Corporation (Japan)
+topland // B62 (c) 1988 Taito Corporation Japan (World)
+
+//@source:taitogn.cpp
+chaoshea // 1998.10 Chaos Heat (V2.09O)
+chaosheaj // 1998.10 Chaos Heat (V2.08J)
+flipmaze // 1999.09 Flip Maze (V2.04J)
+gobyrc // 1999.?? Go By RC (V2.03O)
+kollon // 2003.11 Kollon (V2.04J)
+kollonc // 2003.11 Kollon (V2.04JC, Compact Flash version)
+mahjngoh // 1999.12 Mahjong Oh (V2.06J)
+nightrai // 2001.05 Night Raid (V2.03J)
+otenamhf // 2005.04 Otenami Haiken Final (V2.07JC)
+otenamih // 1999.02 Otenami Haiken (Success)
+otenki // 2001.10 Otenki Kororin
+psyvaria // 2000.03 Psyvariar -Medium Unit- (V2.04J)
+psyvarrv // 2000.09 Psyvariar -Revision- (V2.04J)
+raycris // 1998.12 Ray Crisis (V2.03J)
+rcdego // 1999.06 RC De Go (V2.03J)
+shanghss // 2000.07 Shanghai Shoryu Sairin (V2.03J)
+shangtou // 2002.02 Shanghai Sangokuhaitougi
+shikigam // 2001.09 Shikigami no Shiro
+sianniv // 2003.10 Space Invaders Anniversary (V2.02J)
+soutenry // 2001.02 Soutenryu (V2.07J)
+spuzbobl // 1999.?? Super Puzzle Bobble (V2.05O)
+spuzboblj // 1999.03 Super Puzzle Bobble (Japan)
+taitogn //
+usagi // 2001.12 Usagi (V2.02J)
+xiistag // 2002.07 XII Stag (V2.01J)
+zokuoten // 2000.12 Zoku Otenamihaiken (V2.03J)
+zooo // 2004.05 Zooo
+
+//@source:taitojc.cpp
+dangcurv // 1995.?? E09 (c) 1995 Taito Corporation
+dendego // 1997.03 E35 (c) 1996 Taito Corporation (Japan) - Ver 2.2 J
+dendego2 // 1998.03 E52 (c) 1998 Taito Corporation (Japan) - Ver 2.5 J
+dendego23k // 1998.08 E52 (c) 1998 Taito Corporation (Japan) - Ver 2.20 J
+dendegox // 1997.09 E35 (c) 1996 Taito Corporation (Japan) - Ver 2.4 J
+landgear // 1996.?? E17 (c) 1995 Taito Corporation Japan (World) - Ver 4.2 O
+landgeara // 1996.?? E17 (c) 1995 Taito Corporation Japan (World) - Ver 3.1 O
+landgearj // 1996.?? E17 (c) 1996 Taito Corporation (Japan) - Ver 4.2 J
+landgearja // 1996.03 E17 (c) 1996 Taito Corporation (Japan) - Ver 3.0 J
+sidebs // 1996.07 E23 (c) 1996 Taito Corporation (Japan) - Ver 2.7 J
+sidebs2 // 1997.?? E38 (c) 1997 Taito Corporation (US) - Ver 2.6 A
+sidebs2j // 1997.07 E38 (c) 1997 Taito Corporation (Japan) - Ver 2.4 J
+sidebsja // 1996.07 E23 (c) 1996 Taito Corporation (Japan) - Ver 2.5 J
+
+//@source:taitopjc.cpp
+optiger // 1998.09 E63 (c) 1998 Taito
+
+//@source:taitosj.cpp
+alpine // RH (c) 1982 Taito Corporation
+alpinea // RH (c) 1982 Taito Corporation
+bioatack // AA8 (c) 1983 Taito Corporation + Fox Video Games license
+elevator // EA (c) 1983 Taito Corporation
+elevatorb // bootleg
+frontlin // FL (c) 1982 Taito Corporation
+hwrace // AC4 (c) 1983 Taito Corporation
+jungleby // bootleg
+jungleh // KN (c) 1982 Taito America Corporation
+junglehbr // KN (c) 1982 Taito do Brasil
+junglek // KN (c) 1982 Taito Corporation
+junglekas // KN (c) 1982 Taito Corporation (alternate sound)
+junglekj2 // KN (c) 1982 Taito Corporation
+kikstart // A20 (c) 1984 Taito Corporation
+piratpet // KN (c) 1982 Taito America Corporation
+sfposeid // A14 (c) 1984 Taito Corporation
+spacecr // CG (c) 1981 Taito Corporation
+spaceskr // EB (c) 1981 Taito Corporation
+timetunl // UN (c) 1982 Taito Corporation
+tinstar // A10 (c) 1983 Taito Corporation
+tinstar2 // A10 (c) 1983 Taito Corporation
+waterski // A03 (c) 1983 Taito Corporation
+wwestern // WW (c) 1982 Taito Corporation
+wwestern1 // WW (c) 1982 Taito Corporation
+
+//@source:taitottl.cpp
+gunman // (c) 1977 Taito
+missilex // (c) 1977 Taito
+ttblock // (c) 1977 Taito
+zzblock // (c) 1979 Taito
+
+//@source:taitotx.cpp
+chaosbrk // (c) 2004 Taito Corporation
+chasehq2 // (c) 2006 Taito Corporation
+goketsuj // (c) 2009 Atlus
+gwinggen // (c) 2004 Takumi Corporation
+homura // (c) 2005 SKonec Entertainment
+hotgmkmp // (c) 2005 XNauts
+kof98um // (c) 2008 SNK
+raiden3 // (c) 2005 Seibu Kaihatsu/Moss Ltd
+raiden4 // (c) 2007 Seibu Kaihatsu/Moss Ltd
+samspsen // (c) 2008 SNK Playmore
+shikiga3 // (c) 2006 Alfa System/SKonec Entertainment
+spicaadv // (c) 2005 Taito Corporation
+trbwtchs // (c) 2008 Adventure Planning Service/Studio SiestA
+usagiol // (c) 2005 Taito Corporation/Warashi
+wontmuch // (c) 2006 Capcom
+
+//@source:taitotz.cpp
+batlgear // E68 (c) 1999 Taito
+batlgr2 // E87 (c) 2000 Taito (2.04J)
+batlgr2a // E87 (c) 2000 Taito (2.01J)
+landhigh // E82 (c) 1999 Taito
+pwrshovl // E74 (c) 1999 Taito
+pwrshovla //
+raizpin // F14 (c) 2002 Taito
+raizpinj //
+styphp // E98 (c) 2000 Taito
+taitotz //
+
+//@source:taitowlf.cpp
+pf2012 // E59 (c) 1997 Taito
+
+//@source:tamag1.cpp
+tama // Bandai
+
+//@source:tandy1t.cpp
+t1000hx // 1987 Tandy 1000 HX (similiar to PCJr)
+t1000rl // 1989 Tandy 1000 RL
+t1000sl2 // 198? Tandy 1000 SL/2
+t1000sx // 1987 Tandy 1000 SX (similiar to PCJr)
+t1000tl2 // 1989 Tandy 1000 TL/2
+t1000tx // 1987 Tandy 1000 TX
+
+//@source:tandy2k.cpp
+tandy2k //
+tandy2khd //
+
+//@source:tank8.cpp
+tank8 // ?????? 1976/04 [6800]
+tank8a // ?????? 1976/04 [6800]
+tank8b // ?????? 1976/04 [6800]
+tank8c // ?????? 1976/04 [6800]
+tank8d // ?????? 1976/04 [6800]
+
+//@source:tankbatt.cpp
+tankbatt // (c) 1980 Namco
+tankbattb // bootleg
+
+//@source:tankbust.cpp
+tankbust // (c) 1985
+
+//@source:taotaido.cpp
+taotaido // (c) 1993 Video System Co.
+taotaido3 // (c) 1993 Video System Co.
+taotaidoa // (c) 1993 Video System Co.
+
+//@source:tapatune.cpp
+smartoss //
+srockbwl //
+tapatune //
+
+//@source:targeth.cpp
+targeth // (c) 1994 - Ref 940531
+targetha // (c) 1994 - Ref 940531
+
+//@source:tasman.cpp
+dragsphr //
+ivorytsk //
+kingtut //
+moneybnk //
+vikingt //
+
+//@source:tatsumi.cpp
+apache3 // (c) 1988 Tatsumi
+apache3a // (c) 1988 Tatsumi + Kana Corporation license
+bigfight // (c) 1992 Tatsumi
+cyclwarr // (c) 1991 Tatsumi
+cyclwarra // (c) 1991 Tatsumi
+roundup5 // (c) 1989 Tatsumi
+
+//@source:tattack.cpp
+tattack // (c) 198? Shonan
+
+//@source:tavernie.cpp
+cpu09 //
+ivg09 //
+
+//@source:taxidriv.cpp
+taxidriv // [1984 Graphic Techno]
+
+//@source:tb303.cpp
+tb303 // Roland
+
+//@source:tbowl.cpp
+tbowl // 6206 - (c) 1987 Tecmo
+tbowlj // 6206 - (c) 1987 Tecmo
+tbowlp // Suspected proto of Japanese version for US Market
+
+//@source:tceptor.cpp
+tceptor // (c) 1986
+tceptor2 // (c) 1986
+
+//@source:tcl.cpp
+tcl // (c) 1995 Uniwang
+
+//@source:tdv2324.cpp
+tdv2324 //
+
+//@source:tec1.cpp
+tec1 // Talking Electronics Computer
+tecjmon // Talking Electronics Computer
+
+//@source:techno.cpp
+xforce //
+
+//@source:tecmo.cpp
+backfirt // bootleg [(c) 1988 Tecmo]
+gemini // (c) 1987 Tecmo
+rygar // 6002 - (c) 1986 Tecmo
+rygar2 // 6002 - (c) 1986 Tecmo
+rygar3 // 6002 - (c) 1986 Tecmo
+rygarj // 6002 - (c) 1986 Tecmo
+silkworm // 6217 - (c) 1988 Tecmo
+silkwormj // 6217 - (c) 1988 Tecmo
+
+//@source:tecmo16.cpp
+fstarfrc // (c) 1992 Tecmo
+fstarfrcj // (c) 1992 Tecmo
+ginkun // (c) 1995 Tecmo
+riot // (c) 1992 NMK
+
+//@source:tecmosys.cpp
+deroon // (c) 1996 Tecmo
+tkdensho // (c) 1996 Tecmo
+tkdenshoa // (c) 1996 Tecmo
+
+//@source:tecnbras.cpp
+tecnbras //
+
+//@source:tehkanwc.cpp
+gridiron // (c) 1985 Tehkan
+teedoff // 6102 - (c) 1986 Tecmo
+tehkanwc // (c) 1985 Tehkan
+tehkanwcb // bootleg
+tehkanwcc // bootleg
+
+//@source:tek405x.cpp
+tek4051 //
+tek4052a //
+
+//@source:tek410x.cpp
+tek4107a //
+tek4109a //
+
+//@source:tekxp33x.cpp
+tekxp330 //
+
+//@source:tempest.cpp
+tempest // 136002 (c) 1980
+tempest1 // 136002 (c) 1980
+tempest1r // 136002 (c) 1980
+tempest2 // 136002 (c) 1980
+tempest3 // 136002 (c) 1980
+temptube // (hack)
+
+//@source:terak.cpp
+terak //
+
+//@source:terracre.cpp
+amatelas // (c) 1986
+amazon // (c) 1986
+boobhack // bootleg
+horekid // (c) 1987
+horekidb // bootleg
+terracre // (c) 1985
+terracrea // (c) 1985
+terracren // (c) 1985
+terracreo // (c) 1985
+
+//@source:test_t400.cpp
+test410 //
+test420 //
+
+//@source:tetrisp2.cpp
+nndmseal // (c) 1997 I'Max/Jaleco
+nndmseala // (c) 1997 I'Max/Jaleco
+rockn // (c) 1999 Jaleco
+rockn2 // (c) 1999 Jaleco
+rockn3 // (c) 1999 Jaleco
+rockn4 // (c) 2000 Jaleco
+rockna // (c) 1999 Jaleco
+rocknms // (c) 1999 Jaleco
+step3 // (c) 1999 Jaleco
+stepstag // (c) 1999 Jaleco
+tetrisp2 // (c) 1997 Jaleco
+tetrisp2j // (c) 1997 Jaleco
+tetrisp2ja // (c) 1997 Jaleco
+
+//@source:tgtpanic.cpp
+tgtpanic // GX601 (c) 1996
+
+//@source:thayers.cpp
+thayers // (c) 1983 RDI Video Systems
+thayersa // (c) 1983 RDI Video Systems
+
+//@source:thedealr.cpp
+thedealr // Visco Games
+
+//@source:thedeep.cpp
+rundeep // (c) 1988 Cream (bootleg?)
+thedeep // (c) 1987 Wood Place
+
+//@source:thepit.cpp
+desertdn // (c) 1982 Video Optics
+dockman // (c) 1982 Taito Corp.
+fitter // (c) 1981 Taito
+fitterbl // bootleg
+funnymou // (c) 1982 Chuo Co. Ltd
+intrepid // (c) 1983 Nova Games Ltd.
+intrepid2 // (c) 1983 Nova Games Ltd.
+intrepidb // bootleg
+intrepidb2 // bootleg
+intrepidb3 // bootleg
+machomou // (c) 1982 Techstar
+portman // (c) 1982 Nova Games Ltd.
+roundup // (c) 1981 Amenip/Centuri
+rtriv // (c) 198? Romar
+suprmous // (c) 1982 Taito
+thepit // (c) 1982 Zilec
+thepitj // (c) 1982 Taito (licensed)
+thepitu1 // (c) 1982 Centuri (licensed)
+thepitu2 // (c) 1982 Centuri (licensed)
+ttfitter // bootleg
+zaryavos // (c) 1983 Nova Games of Canada (prototype)
+
+//@source:thief.cpp
+natodef // (c) 1982
+natodefa // (c) 1982
+sharkatt // (c) 1980
+thief // (c) 1981
+
+//@source:thomson.cpp
+mo5 // 1984 Thomson MO5
+mo5e // 1986 Thomson MO5E (export version)
+mo5nr // 1986 Thomson MO5 NR
+mo6 // 1986 Thomson MO6
+pro128 // 1986 Olivetti Prodest PC 128
+t9000 // 1980 Thomson T9000 (TO7 prototype)
+to7 // 1982 Thomson TO7
+to770 // 1984 Thomson TO7/70
+to770a // 198? Thomson TO7/70 arabic version
+to8 // 1986 Thomson T08
+to8d // 1987 Thomson T08D
+to9 // 1985 Thomson T09
+to9p // 1986 Thomson T09+
+
+//@source:thoop2.cpp
+thoop2 // (c) 1994 - Ref ???
+
+//@source:thunderj.cpp
+thunderj // 136076 (c) 1990
+thunderja // 136076 (c) 1990
+
+//@source:thunderx.cpp
+crazycop // GX878 (c) 1988 (Japan)
+gbusters // GX878 (c) 1988
+gbustersa // GX878 (c) 1988
+scontra // GX775 (c) 1988
+scontraj // GX775 (c) 1988 (Japan)
+thunderx // GX873 (c) 1988
+thunderxa // GX873 (c) 1988
+thunderxb // GX873 (c) 1988
+thunderxj // GX873 (c) 1988 (Japan)
+
+//@source:ti630.cpp
+ti630 //
+
+//@source:ti74.cpp
+ti74 // 1985 TI-74
+ti95 // 1986 TI-95
+
+//@source:ti85.cpp
+ti73 // 1990 TI-73
+ti81 // 1990 TI-81 (Z80 2 MHz)
+ti81v2 // 1990 TI-81 (Z80 2 MHz)
+ti82 // 1993 TI-82 (Z80 6 MHz)
+ti83 // 1996 TI-83 (Z80 6 MHz)
+ti83p // 1999 TI-83 Plus (Z80 6 MHz)
+ti83pse // 2001 TI-83 Plus Silver Edition
+ti84p // 2004 TI-84 Plus
+ti84pse // 2004 TI-84 Plus Silver Edition
+ti85 // 1992 TI-85 (Z80 6 MHz)
+ti86 // 1997 TI-86 (Z80 6 MHz)
+
+//@source:ti89.cpp
+ti89 // 1998 TI-89
+ti89t // 2004 TI-89 Titanium
+ti92 // 1995 TI-92
+ti92p // 1999 TI-92 Plus
+v200 // 2002 Voyage 200 PLT
+
+//@source:ti99_2.cpp
+ti99_224 // 1983 TI 99/2 (24kb ROMs)
+ti99_232 // 1983 TI 99/2 (32kb ROMs)
+
+//@source:ti99_4p.cpp
+ti99_4p // 1996 SNUG 99/4P (a.k.a. SGCPU)
+
+//@source:ti99_4x.cpp
+ti99_4 // 1979 TI-99/4
+ti99_4a // 1981 TI-99/4A
+ti99_4ae // 1981 TI-99/4A with 50Hz video
+ti99_4e // 1980 TI-99/4 with 50Hz video
+ti99_4ev // 1994 TI-99/4A with EVPC video card
+ti99_4qe // 1983 TI-99/4QI with 50Hz video
+ti99_4qi // 1983 TI-99/4QI
+
+//@source:ti99_8.cpp
+ti99_8 // 1983 TI-99/8
+ti99_8e // 1983 TI-99/8 with 50Hz video
+
+//@source:ti990_10.cpp
+ti990_10 // 1975 TI 990/10
+
+//@source:ti990_4.cpp
+ti990_4 // 1976 TI 990/4
+ti990_4v // 1976 TI 990/4 with video display terminal
+
+//@source:tiamc1.cpp
+bilyard // (c) 1988 Terminal
+konek // (c) 1988 Terminal
+koroleva // (c) 1988 Terminal
+sosterm // (c) 1988 Terminal
+
+//@source:ticalc1x.cpp
+dataman //
+lilprof //
+lilprof78 //
+ti1000 //
+ti1250 //
+ti125076 //
+ti1270 //
+ti30 //
+tibusan //
+tiprog //
+tisr16 //
+tisr16ii //
+wizatron //
+
+//@source:tickee.cpp
+ghoshunt // (c) 1995? Hanaho Games
+maletmad // (c) 1999 Hanaho Games, licensed to Capcom
+mouseatk // (c) 1996 ICE
+rapidfir // (c) 1998 Hanaho Games
+rapidfira // (c) 1998 Hanaho Games
+rapidfire // (c) 1998 Hanaho Games
+tickee // (c) 1994 Raster Elite
+tutstomb // (c) 199?? Island Design
+
+//@source:tigeroad.cpp
+bballs // (c) 1991 Comad
+bballsa // (c) 1991 Comad
+f1dream // 4/1988 (c) 1988 + Romstar
+f1dreamb // bootleg
+f1dreamba // bootleg
+pushman // (c) 1990 Comad
+pushmana // (c) 1990 Comad
+pushmans // (c) 1990 Comad + American Sammy license
+pushmant // (c) 1990 Comad + Top Tronic license
+tigeroad // 11/1987 (c) 1987 (US)
+tigeroadb // bootleg
+tigeroadu // 11/1987 (c) 1987 + Romstar (US)
+toramich // 11/1987 (c) 1987 (Japan
+
+//@source:tiki100.cpp
+kontiki //
+tiki100 //
+
+//@source:tim011.cpp
+tim011 //
+
+//@source:tim100.cpp
+tim100 //
+
+//@source:timelimt.cpp
+progress // (c) 1984 Chuo Co. Ltd
+timelimt // (c) 1983 Chuo Co. Ltd
+
+//@source:timeplt.cpp
+bikkuric // Peni Soft (NOT Konami)
+chkun // Peni Soft (NOT Konami)
+psurge // (c) 1988 unknown (NOT Konami)
+spaceplt // bootleg
+timeplt // GX393 (c) 1982
+timeplta // GX393 (c) 1982 + Atari license
+timepltc // GX393 (c) 1982 + Centuri license
+
+//@source:timetrv.cpp
+timetrv // (c) 1991.10 Virtual Image Productions
+
+//@source:timex.cpp
+tc2048 // 198? TC2048
+ts2068 // 1983 TS2068
+uk2086 // 1986 UK2086
+
+//@source:tispeak.cpp
+k28m2 // Tiger Electronics
+lantutor //
+snmath //
+snmatha //
+snmathp //
+snread //
+snspell //
+snspellc //
+snspellca //
+snspellcuk //
+snspellfr //
+snspellit //
+snspelljp //
+snspellp //
+snspellua //
+snspellub //
+snspelluk //
+snspelluka //
+tntell //
+tntellfr //
+tntellp //
+tntelluk //
+vocaid //
+
+//@source:tispellb.cpp
+mrchalgr //
+spellb //
+
+//@source:tk2000.cpp
+tk2000 // Microdigital TK2000
+
+//@source:tk80.cpp
+ics8080 //
+mikrolab //
+nd80z //
+nectk85 //
+tk80 //
+
+//@source:tk80bs.cpp
+tk80bs //
+
+//@source:tm990189.cpp
+990189 // 1978 TM 990/189
+990189v // 1980 TM 990/189 with Color Video Board
+
+//@source:tmaster.cpp
+galgame2 // (c) 1998 Creative Electronics & Software (CES) / Namco
+galgbios // (c) 1998 Creative Electronics & Software (CES)
+tm // (c) 1996 Midway Games
+tm2k // (c) 1996 Midway Games
+tm2ka // (c) 1996 Midway Games
+tm2kb // (c) 1996 Midway Games
+tm3k // (c) 1997 Midway Games
+tm3ka // (c) 1997 Midway Games
+tm4k // (c) 1998 Midway Games
+tm4ka // (c) 1998 Midway Games
+tm4kb // (c) 1998 Midway Games
+tm4kca // (c) 1998 Midway Games
+tm4kmn // (c) 1998 Midway Games
+tm4knj // (c) 1998 Midway Games
+tm5k // (c) 1998 Midway Games
+tm5ka // (c) 1998 Midway Games
+tm5kca // (c) 1998 Midway Games
+tm5kmn // (c) 1998 Midway Games
+tm7k // (c) 1999 Midway Games
+tm7ka // (c) 1999 Midway Games
+tm7keval // (c) 1999 Midway Games
+tm7kmn // (c) 1999 Midway Games
+tm7kmna // (c) 1999 Midway Games
+tm7knj // (c) 1999 Midway Games
+tm8k // (c) 2000 Midway Games
+tm8k902 // (c) 2000 Midway Games
+tmdo // (c) 1996 Midway Games
+
+//@source:tmc1800.cpp
+nano //
+tmc2000 //
+
+//@source:tmc2000e.cpp
+tmc2000e //
+
+//@source:tmc600.cpp
+tmc600s2 //
+
+//@source:tmmjprd.cpp
+tmmjprd // (c) 1997 Media / Sonnet
+tmpdoki // (c) 1998 Media Syouji
+
+//@source:tmnt.cpp
+blswhstl // GX060 (c) 1991 (World)
+blswhstla // GX060 (c) 1991 (Asia)
+cuebrick // GX903 (c) 1989
+detatwin // GX060 (c) 1991 (Japan)
+glfgreat // GX061 (c) 1991
+glfgreatj // GX061 (c) 1991 (Japan)
+lgtnfght // GX939 (c) 1990 (World)
+lgtnfghta // GX939 (c) 1990 (Asia)
+lgtnfghtu // GX939 (c) 1990 (US)
+mia // GX808 (c) 1989
+mia2 // GX808 (c) 1989
+prmrsocr // GX101 (c) 1993 (Europe)
+prmrsocrj // GX101 (c) 1993 (Japan)
+punkshot // GX907 (c) 1990 (US)
+punkshot2 // GX907 (c) 1990 (US)
+punkshotj // GX907 (c) 1990 (Japan)
+qgakumon // GX248 (c) 1993 (Japan)
+ssriders // GX064 (c) 1991 (World)
+ssriders2 // bootleg
+ssridersabd // GX064 (c) 1991 (Asia)
+ssridersadd // GX064 (c) 1991 (Asia)
+ssridersb // bootleg
+ssriderseaa // GX064 (c) 1991 (US)
+ssridersebc // GX064 (c) 1991 (World)
+ssridersebd // GX064 (c) 1991 (World)
+ssridersjac // GX064 (c) 1991 (Japan)
+ssridersjad // GX064 (c) 1991 (Japan)
+ssridersjbd // GX064 (c) 1991 (Japan)
+ssridersuab // GX064 (c) 1991 (US)
+ssridersuac // GX064 (c) 1991 (US)
+ssridersubc // GX064 (c) 1991 (US)
+ssridersuda // GX064 (c) 1991 (US)
+thndrx2 // GX073 (c) 1991 (World)
+thndrx2a // GX073 (c) 1991 (Asia)
+thndrx2j // GX073 (c) 1991 (Japan)
+tmht // GX963 (c) 1989 (UK)
+tmht22pe // GX063 (c) 1991 (UK)
+tmht2p // GX963 (c) 1989 (UK)
+tmht2pa // GX963 (c) 1989 (UK)
+tmhta // GX963 (c) 1989 (UK)
+tmhtb // GX963 (c) 1989 (UK?)
+tmnt // GX963 (c) 1989 (World)
+tmnt2 // GX063 (c) 1991 (US)
+tmnt22pu // GX063 (c) 1991 (US)
+tmnt2a // GX063 (c) 1991 (Asia)
+tmnt2pj // GX963 (c) 1990 (Japan)
+tmnt2po // GX963 (c) 1989 (Oceania)
+tmntj // GX963 (c) 1990 (Japan)
+tmntu // GX963 (c) 1989 (US)
+tmntua // GX963 (c) 1989 (US)
+trigon // GX939 (c) 1990 (Japan)
+
+//@source:tmspoker.cpp
+tmspoker //
+
+//@source:tnzs.cpp
+arknoid2 // B08 (c) 1987 Taito Corporation Japan (World)
+arknoid2b // B08 (c) 1987 (bootleg)
+arknoid2j // B08 (c) 1987 Taito Corporation (Japan)
+arknoid2u // B08 (c) 1987 Taito America Corporation + Romstar license (US)
+chukatai // B44 (c) 1988 Taito Corporation Japan (World)
+chukataij // B44 (c) 1988 Taito Corporation (Japan)
+chukataiu // B44 (c) 1988 Taito Corporation (US)
+drtoppel // B19 (c) 1987 Taito Corporation Japan (World)
+drtoppelj // B19 (c) 1987 Taito Corporation (Japan)
+drtoppelu // B19 (c) 1987 Taito Corporation (US)
+extrmatn // B06 (c) 1987 Taito Corporation Japan (World)
+extrmatnj // B06 (c) 1987 Taito Corporation (Japan)
+extrmatnu // B06 (c) 1987 World Games
+insectx // B97 (c) 1989 Taito Corporation Japan (World)
+insectxj // B97 (c) 1989 Taito Corporation (Japan)
+jpopnics // (c)1992 NICs, based on Plump Pop code
+kabukiz // B50 (c) 1988 Taito Corporation Japan (World)
+kabukizj // B50 (c) 1988 Taito Corporation (Japan)
+kageki // B35 (c) 1988 Taito America Corporation + Romstar license (US)
+kagekih // B35 (c) 1992 (hack)
+kagekij // B35 (c) 1988 Taito Corporation (Japan)
+plumppop // A98 (c) 1987 Taito Corporation (Japan)
+tnzs // B53 (c) 1988 Taito Corporation Japan (World) (new logo)
+tnzsj // B53 (c) 1988 Taito Corporation (Japan) (new logo)
+tnzsjo // B53 (c) 1988 Taito Corporation (Japan) (new logo)
+tnzso // B53 (c) 1988 Taito Corporation Japan (World) (old logo)
+tnzsop // B53?(c) 1988 Taito Corporation Japan (World) (old logo)
+
+//@source:toaplan1.cpp
+demonwld // TP-O16 (c) 1990 Toaplan (+ Taito license when set to Japan)
+demonwld1 // TP-O16 (c) 1989 Toaplan + Taito license
+demonwld2 // TP-O16 (c) 1989 Toaplan
+demonwld3 // TP-O16 (c) 1989 Toaplan
+fireshrk // TP-O17 (c) 1990 Toaplan
+fireshrka // TP-O17 (c) 1989 Toaplan
+fireshrkd // TP-O17 (c) 1990 Toaplan
+fireshrkdh // TP-O17 (c) 1990 Toaplan
+hellfire // B90 / TP-??? (c) 1989 Toaplan + Taito license
+hellfire1 // B90 / TP-??? (c) 1989 Toaplan + Taito license
+hellfire1a // B90 / TP-??? (c) 1989 Toaplan + Taito license
+hellfire2a // B90 / TP-??? (c) 1989 Toaplan + Taito license
+outzone // TP-O18 (c) 1990 Toaplan
+outzonea // TP-O18 (c) 1990 Toaplan
+outzoneb // TP-O18 (c) 1990 Toaplan
+outzonec // TP-O18 (c) 1990 Toaplan
+outzoneh // TP-O18 (c) 1990 Toaplan
+rallybik // B45 / TP-O12 (c) 1988 Taito
+samesame // TP-O17 (c) 1989 Toaplan
+samesame2 // TP-O17 (c) 1989 Toaplan
+truxton // B65 / TP-O13B (c) 1988 Taito
+vimana // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan)
+vimanaj // TP-O19 (c) 1991 Toaplan (+ Tecmo license when set to Japan)
+vimanan // TP-O19 (c) 1991 Toaplan (+ Nova Apparate GmbH & Co license)
+zerowing // TP-O15 (c) 1989 Toaplan
+zerowing1 // TP-O15 (c) 1989 Toaplan
+zerowingw // TP-O15 (c) 1989 Williams Electronics
+
+//@source:toaplan2.cpp
+batrider // (c) 1998 Raizing/8ing
+batriderc // (c) 1998 Raizing/8ing
+batriderhk // (c) 1998 Raizing/8ing
+batriderj // (c) 1998 Raizing/8ing
+batriderja // (c) 1998 Raizing/8ing
+batriderk // (c) 1998 Raizing/8ing
+batridert // (c) 1998 Raizing/8ing
+batrideru // (c) 1998 Raizing/8ing
+batsugun // TP-030 (c) 1993 Toaplan
+batsuguna // TP-030 (c) 1993 Toaplan
+batsugunb //
+batsugunsp // TP-030 (c) 1993 Toaplan
+bbakraid // (c) 1999 8ing
+bbakraidc // (c) 1999 8ing
+bbakraidj // (c) 1999 8ing
+bbakraidja // (c) 1999 8ing
+bgaregga // (c) 1996 Raizing/8ing
+bgareggabl // hack
+bgareggabla // hack
+bgareggacn // (c) 1996 Raizing/8ing
+bgareggahk // (c) 1996 Raizing/8ing
+bgaregganv // (c) 1996 Raizing/8ing
+bgareggat2 // (c) 1996 Raizing/8ing
+bgareggatw // (c) 1996 Raizing/8ing
+dogyuun // TP-022 (c) 1992 Toaplan
+dogyuuna // TP-022 (c) 1992 Toaplan
+dogyuunt // TP-022 (c) 1992 Toaplan
+fixeight // TP-026 (c) 1992 + Taito license
+fixeighta // TP-026 (c) 1992 + Taito license
+fixeightat // TP-026 (c) 1992 + Taito license
+fixeightbl // bootleg
+fixeighth // TP-026 (c) 1992 + Taito license
+fixeightht // TP-026 (c) 1992 + Taito license
+fixeightj // TP-026 (c) 1992 + Taito license
+fixeightjt // TP-026 (c) 1992 + Taito license
+fixeightk // TP-026 (c) 1992 + Taito license
+fixeightkt // TP-026 (c) 1992 + Taito license
+fixeightt // TP-026 (c) 1992 + Taito license
+fixeighttw // TP-026 (c) 1992 + Taito license
+fixeighttwt // TP-026 (c) 1992 + Taito license
+fixeightu // TP-026 (c) 1992 + Taito license
+fixeightut // TP-026 (c) 1992 + Taito license
+ghox // TP-021 (c) 1991 Toaplan
+ghoxj // TP-021 (c) 1991 Toaplan
+grindstm // TP-027 (c) 1993 Toaplan + Unite Trading license (Korea)
+grindstma // TP-027 (c) 1993 Toaplan + Unite Trading license (Korea)
+kbash // TP-023 (c) 1993 Toaplan
+kbash2 // bootleg
+kbashk // TP-023 (c) 1993 Toaplan
+kingdmgp // (c) 1994 Raizing/8ing
+mahoudai // (c) 1993 Raizing + Able license
+othldrby // (c) 1995 Sunwise
+pipibibs // TP-025
+pipibibsa // TP-025
+pipibibsbl // (c) 1991 Ryouta Kikaku (bootleg)
+pipibibsp // TP-025
+pwrkick // (c) 1994 Sunwise
+shippumd // (c) 1994 Raizing/8ing
+snowbro2 // TP-033 (c) 1994 Hanafram
+snowbro2b //
+sstriker // (c) 1993 Raizing
+sstrikera // (c) 1993 Raizing
+tekipaki // TP-020 (c) 1991 Toaplan
+truxton2 // TP-024 (c) 1992 Toaplan
+vfive // TP-027 (c) 1993 Toaplan (Japan)
+whoopee // TP-025
+
+//@source:toki.cpp
+juju // (c) 1989 Tad (Japan)
+jujub // bootleg
+jujuba // bootleg
+toki // (c) 1989 Tad (World)
+tokia // (c) 1989 Tad (World)
+tokib // bootleg
+tokiu // (c) 1989 Tad + Fabtek license (US)
+tokiua // (c) 1989 Tad + Fabtek license (US)
+
+//@source:tokyocop.cpp
+tokyocop // (c) 2003 (Arcade TV Game List - P.168, Right, 19 from bottom)
+
+//@source:tomcat.cpp
+tomcat // (proto) (c) 1985
+
+//@source:tonton.cpp
+tonton // (c) 199? Success / Taiyo Jidoki.
+
+//@source:toobin.cpp
+toobin // 136061 (c) 1988
+toobin1 // 136061 (c) 1988
+toobin2 // 136061 (c) 1988
+toobin2e // 136061 (c) 1988
+toobine // 136061 (c) 1988
+toobing // 136061 (c) 1988
+
+//@source:topspeed.cpp
+fullthrl // B14 (c) 1987 Taito Corporation (Japan)
+topspeed // B14 (c) 1987 Taito Corporation Japan (World)
+topspeedu // B14 (c) 1987 Taito America Corporation (US)
+
+//@source:toratora.cpp
+toratora // (c) 1980 Game Plan
+toratorab // (c) 1980 Game Plan
+
+//@source:tourtabl.cpp
+tourtab2 // 030170 1978/03 [6507]
+tourtabl // 030170 1978/03 [6507]
+
+//@source:tourvis.cpp
+tourvis // (c) ???? Tourvision
+tv1943 // (c) 1991 Capcom / Nexat Soft (Tourvision bootleg)
+tvablast // (c) 1990 Hudson / Kaneko (Tourvision bootleg)
+tvaburn // (c) 1990 Sega / Nec Avenue (Tourvision bootleg)
+tvarmedf // (c) 1990 Nichibutsu / Big Don (Tourvision bootleg)
+tvbalstx // (c) 1991 Psygnosis / Coconuts Japan (Tourvision bootleg)
+tvbeball // (c) 1990 Hudson (Tourvision bootleg)
+tvbomber // (c) 1990 Hudson (Tourvision bootleg)
+tvbrabho // (c) 1990 Namco / Namcot (Tourvision bootleg)
+tvcolumn // (c) 1991 Telenet Japan (Tourvision bootleg)
+tvcoryon // (c) 1991 Naxat Soft (Tourvision bootleg)
+tvdensho // (c) 1989 Big Club / Wolf Team (Tourvision bootleg)
+tvdevilc // (c) 1990 Naxat / Red (Tourvision bootleg)
+tvdmoon // (c) 1991 T.S.S. (Tourvision bootleg)
+tvdodgeb // (c) 1990 Technos Japan Corp / Naxat Soft (Tourvision bootleg)
+tvdormon // (c) 1989 Hudson / Fujiko-Shogakukan-TV Asahi (Tourvision bootleg)
+tvdrgnst // (c) 1988 Namcot (Tourvision bootleg)
+tvdsenpu // (c) 1990 Toaplan / Nec Avenue (Tourvision bootleg)
+tvdunexp // (c) 1989 Hudson / Atlus (Tourvision bootleg)
+tveigues // (c) 1990 Victor Musical Industries, Inc. (Tourvision bootleg)
+tvfblast // (c) 1990 Namco / Namcot (Tourvision bootleg)
+tvflaptw // (c) 1989 Namco (Tourvision bootleg)
+tvfsoc90 // (c) 1990 Human (Tourvision bootleg)
+tvftenis // (c) 1991 Human (Tourvision bootleg)
+tvgomola // (c) 1990 Human (Tourvision bootleg)
+tvgunhed // (c) 1989 Hudson / Toho Sunrise (Tourvision bootleg)
+tvhtdaka // (c) 1991 Taito(Tourvision bootleg)
+tvjchan // (c) 1991 Hudson (Tourvision bootleg)
+tvkaikai // (c) 1990 Taito (Tourvision bootleg)
+tvlegaxe // (c) 1988 Victor Musical Industries, Inc. (Tourvision bootleg)
+tvlqkids // (c) 1992 Taito (Tourvision bootleg)
+tvmrheli // (c) 1989 IREM Corp (Tourvision bootleg)
+tvninjar // (c) 1992 Tecmo / Hudson Soft (Tourvision bootleg)
+tvninjas // (c) 1990 IREM Corp (Tourvision bootleg)
+tvopwolf // (c) 1990 Taito / Nec Avenue (Tourvision bootleg)
+tvovride // (c) 1990 Sting / Data East Corporation (Tourvision bootleg)
+tvpaclnd // (c) 1991 Namco / Namcot (Tourvision bootleg)
+tvpcgen2 // (c) 1991 Hudson Soft / Red (Tourvision bootleg)
+tvpchasr // (c) 1990 Naxat Soft (Tourvision bootleg)
+tvpcybrg // (c) 1992 Hudson Soft / Red (Tourvision bootleg)
+tvpdrift // (c) 1991 Sega / Asmik Corporation (Tourvision bootleg)
+tvpow11 // (c) 1991 Hudson (Tourvision bootleg)
+tvpros91 // (c) 1991 Namco / Namcot (Tourvision bootleg)
+tvpwlg4 // (c) 1991 Hudson (Tourvision bootleg)
+tvpzlboy // (c) 1991 Atlus / Telenet Japan (Tourvision bootleg)
+tvraiden // (c) 1991 Seibu Kaihatsu inc / Hudson Soft (Tourvision bootleg)
+tvrs2 // (c) 1990 Taito (Tourvision bootleg)
+tvrtype2 // (c) 1991 IREM (Tourvision bootleg)
+tvsci // (c) 1991 Taito (Tourvision bootleg)
+tvsdarms // (c) 1989 Capcom / Nec Avenue (Tourvision bootleg)
+tvshnobi // (c) 1989 Sega / Asmik Corporation (Tourvision bootleg)
+tvskweek // (c) 1991 Victor Musical Industries, Inc. (Tourvision bootleg)
+tvslmndr // (c) 1991 Konami (Tourvision bootleg)
+tvsson2 // (c) 1989 Capcom / Nec Avenue (Tourvision bootleg)
+tvsssold // (c) 1990 Hudson / Kaneko (Tourvision bootleg)
+tvsvball // (c) 1990 Video System (Tourvision bootleg)
+tvtaisen // (c) 1992 Taito (Tourvision bootleg)
+tvtcrst2 // (c) 1992 Nichibutsu / Nihon Bussan Co., Ltd (Tourvision bootleg)
+tvthbld // (c) 1990 Sega / NEC Avenue (Tourvision bootleg)
+tvtonma // (c) 1991 IREM Corp (Tourvision bootleg)
+tvtsboys // (c) 1990 Victor Musical Industries, Inc. (Tourvision bootleg)
+tvtsujin // (c) 1992 Toaplan Co Ltd / Taito Corporation (Tourvision bootleg)
+tvusapb // (c) 1989 Aicom (Tourvision bootleg)
+tvvolfd // (c) 1989 Taito (Tourvision bootleg)
+tvwnshot // (c) 1989 Data East Corp. (Tourvision bootleg)
+tvwring // (c) 1990 Naxat Soft (Tourvision bootleg)
+tvxvious // (c) 1990 Namco Ltd. / Namcot (Tourvision bootleg)
+
+//@source:toypop.cpp
+liblrabl // (c) 1983
+toypop // (c) 1986
+
+//@source:tp84.cpp
+tp84 // GX388 (c) 1984
+tp84a // GX388 (c) 1984
+tp84b // GX388 (c) 1984
+
+//@source:tr606.cpp
+tr606 // Roland
+
+//@source:trackfld.cpp
+atlantol // bootleg
+hyprolym // GX361 (c) 1983
+hyprolymb // bootleg
+hyprolymba // bootleg
+mastkin // (c) 1988 Du Tech
+reaktor // (c) 1985 Zilec
+trackfld // GX361 (c) 1983
+trackfldc // GX361 (c) 1983 + Centuri license
+trackfldnz // (c) 1982 Goldberg Enterprizes Inc.
+wizzquiz // (c) 1985 Konami
+wizzquiza // (c) 1985 Zilec-Zenitone
+yieartf // GX361 (c) 1985
+
+//@source:travrusa.cpp
+motorace // (c) 1983 Williams license
+mototour // (c) 1983 Tecfri
+shtrider // (c) 1984 Seibu Kaihatsu
+shtridera // (c) 1984 Seibu Kaihatsu
+shtriderb // bootleg
+travrusa // (c) 1983
+travrusab // (c) 1983 I.P. (bootleg)
+
+//@source:tricep.cpp
+tricep //
+
+//@source:triforce.cpp
+avalnc12 // 2004.03 The Key Of Avalon 1.20 - Summon The New Monsters (client) (Rev A)
+avalnc13 // 2004.06.08 The Key Of Avalon 1.30 - Chaotic Sabbat (client) (Rev C)
+avalns12 // 2004.03 The Key Of Avalon 1.20 - Summon The New Monsters (server) (Rev A)
+avalns13 // 2004.06.08 The Key Of Avalon 1.30 - Chaotic Sabbat (server) (Rev C)
+avalon20 // 2004.11.02 The Key Of Avalon 2 - Eutaxy Commandment (client) (Rev B)
+avalonc // 2003.11 The Key Of Avalon: The Wizard Master (client) (Rev G)
+avalonce // 2003.08 The Key Of Avalon: The Wizard Master (client) (Rev E)
+avaloncf // 2003.09 The Key Of Avalon: The Wizard Master (client) (Rev F)
+avalons // 2003.11 The Key Of Avalon: The Wizard Master (server) (Rev G)
+avalonsc // 2003.07 The Key Of Avalon: The Wizard Master (server) (Rev C)
+avalonse // 2003.08 The Key Of Avalon: The Wizard Master (server) (Rev E)
+avalonsf // 2003.09 The Key Of Avalon: The Wizard Master (server) (Rev F)
+fzeroax // 2003.12 F-Zero AX (Rev E)
+fzeroaxc // 2003.06.11 F-Zero AX (Rev C)
+gekpurya // 2003.10 Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev C)
+gekpuryb // 2003.10 Gekitou Pro Yakyuu Mizushima Shinji All Stars vs. Pro Yakyuu (Rev B)
+mkartag2 // 2007.03 Mario Kart Arcade GP 2 (MK21 Ver.A)
+mkartag2a // 2007.03 Mario Kart Arcade GP 2 (MK21 Ver.A, alt dump)
+mkartagp // 2005.12 Mario Kart Arcade GP (MKA2 Ver.B)
+tcfboxa // 2006.?? Firmware Update For Compact Flash Box (Rev A)
+tfupdate // 2004.?? Triforce GDROM Boot Update
+triforce // 2002.?? Triforce BIOS
+vs2002ex // 2002.07.30 Virtua Striker 2002 (Export)
+vs2002j // 2002.10 Virtua Striker 2002 (Japan)
+vs4 // 2004.12.02 Virtua Striker 4 (Export)
+vs42006 // 2006.05 Virtua Striker 4 Ver.2006 (Japan) (Rev D)
+vs42k6ex // 2006.01.31 Virtua Striker 4 Ver.2006 (Export)
+vs4j // 2004.10 Virtua Striker 4 (Japan) (Rev E)
+
+//@source:triplhnt.cpp
+triplhnt // 008422-008791 1977/04 [6800]
+
+//@source:trs80.cpp
+ht108064 // Hradstechnika Szvetkezet HT-1080Z/64
+ht1080z // Hradstechnika Szvetkezet HT-1080Z
+ht1080z2 // Hradstechnika Szvetkezet HT-1080Z Series II
+lnw80 // LNW Research LNW-80
+meritum //
+meritum_net //
+radionic // Radionic
+sys80 // EACA System 80
+trs80 // TRS-80 Model I - Level I BASIC
+trs80l2 // TRS-80 Model I - Level II BASIC
+trs80m3 // TRS-80 Model III - Radio Shack/Tandy
+trs80m4 //
+trs80m4p //
+
+//@source:trs80m2.cpp
+trs80m16 //
+trs80m2 //
+
+//@source:truco.cpp
+truco // (c) 198? Playtronic SRL
+
+//@source:trucocl.cpp
+trucocl // (c) 1991 Miky SRL
+
+//@source:trvmadns.cpp
+trvmadns // (c) 1985 Thunderhead Inc.
+trvmadnsa // (c) 1985 Thunderhead Inc.
+
+//@source:trvquest.cpp
+trvquest // (c) 1984 Sunn / Techstar
+
+//@source:tryout.cpp
+tryout // (c) 1985 Data East Corporation (Japan)
+
+//@source:ts802.cpp
+ts802 //
+ts802h //
+
+//@source:ts803.cpp
+ts803h //
+
+//@source:ts816.cpp
+ts816 //
+
+//@source:tsamurai.cpp
+alphaxz // AZ (c) 1986 Ed/Wood Place
+ladymstr // A49 (c) 1985 Taito
+m660 // ??? (c) 1986 Taito America Corporation
+m660b // bootleg
+m660j // ??? (c) 1986 Taito Corporation (Japan)
+nunchaku // ??? (c) 1985 Taito
+ringfgt // (c) 1984 Taito
+ringfgt2 // (c) 1984 Taito
+tsamurai // A35 (c) 1985 Taito
+tsamurai2 // A35 (c) 1985 Taito
+tsamuraih // bootleg
+vsgongf // (c) 1984 Kaneko
+yamagchi // A38 (c) 1985 Taito
+
+//@source:tsispch.cpp
+prose2k //
+prose2ko //
+
+//@source:ttchamp.cpp
+ttchamp //
+ttchampa //
+
+//@source:tubep.cpp
+rjammer // (c) 1984 + Alice
+tubep // (c) 1984 + Fujitek
+tubepb // (c) 1984 + bootleg
+
+//@source:tugboat.cpp
+berenstn // (c) 1984 Enter-Tech
+noahsark // (c) 1983 Enter-Tech
+tugboat // (c) 1982 ETM
+
+//@source:tumbleb.cpp
+bcstry // (c) 1997 SemiCom
+bcstrya // (c) 1997 SemiCom
+carket //
+chokchok // (c) 1995 SemiCom
+cookbib // (c) 1995 SemiCom
+cookbiba //
+dquizgo // (c) 1998 SemiCom
+fncywld // (c) 1996 Unico
+htchctch // (c) 1995 SemiCom
+jumpkids // (c) 1993 Comad
+magicbal // (c) 1994 SemiCom
+metlsavr // (c) 1994 First Amusements
+pangpang // (c) 1994 Dong Gue La Mi Ltd.
+sdfight // (c) 1996 SemiCom
+semibase // (c) 1997 SemiCom
+suprtrio // (c) 1994 GameAce
+tumbleb // bootleg
+tumbleb2 // bootleg
+tumblepba //
+wlstar // (c) 1995 Mijin
+wondl96 // (c) 1996 SemiCom
+
+//@source:tumblep.cpp
+tumblep // MAP (c) 1991 Data East Corporation (World)
+tumblepj // MAP (c) 1991 Data East Corporation (Japan)
+
+//@source:tunhunt.cpp
+tunhunt // 136000 (c) 1979
+tunhuntc // 136000 (c) 1981 // licensed to / distributed by Centuri
+
+//@source:turbo.cpp
+buckrog // (c) 1982 Sega
+buckrogn // (c) 1982 Sega
+buckrogn2 // (c) 1982 Sega
+subroc3d // (c) 1982 Sega
+turbo // (c) 1981 Sega
+turboa // (c) 1981 Sega
+turbob // (c) 1981 Sega
+turbobl // bootleg
+turboc // (c) 1981 Sega
+turbod // (c) 1981 Sega
+zoom909 // (c) 1982 Sega
+
+//@source:turrett.cpp
+turrett // (c) 2001 licensed from Dell Electronics
+
+//@source:tutankhm.cpp
+tutankhm // GX350 (c) 1982 Konami
+tutankhms // GX350 (c) 1982 Stern
+
+//@source:tutor.cpp
+pyuuta // 1982 Tomy Pyuuta
+pyuutajr // 1982 Tomy Pyuuta Jr.
+tutor // 1983? Tomy Tutor
+
+//@source:tv950.cpp
+tv950 //
+
+//@source:tvc.cpp
+tvc64 //
+tvc64p //
+tvc64pru //
+
+//@source:tvcapcom.cpp
+tvcapcom //
+
+//@source:tvgame.cpp
+tvgame //
+
+//@source:twin16.cpp
+cuebrickj // GX903 (c) 1989 (Japan)
+darkadv // GX687 (c) 1987
+devilw // GX687 (c) 1987
+fround // GX870 (c) 1988
+froundl // GX870 (c) 1988
+gradius2 // GX785 (c) 1988 (Japan)
+gradius2a // GX785 (c) 1988 (Japan)
+gradius2b // GX785 (c) 1988 (Japan)
+hpuncher // GX870 (c) 1988 (Japan)
+majuu // GX687 (c) 1987 (Japan)
+miaj // GX808 (c) 1989 (Japan)
+vulcan // GX785 (c) 1988
+vulcana // GX785 (c) 1988
+vulcanb // GX785 (c) 1988
+
+//@source:twincobr.cpp
+fnshark // bootleg
+fshark // B02 / TP-007 (c) 1987 Taito Corporation (World)
+fsharkbt // bootleg
+gulfwar2 // (c) 1991 Comad
+gulfwar2a //
+hishouza // B02 / TP-007 (c) 1987 Taito Corporation (Japan)
+ktiger // B30 / TP-011 (c) 1987 Taito Corporation (Japan)
+skyshark // B02 / TP-007 (c) 1987 Taito America Corporation + Romstar license (US)
+skysharka // B02 / TP-007 (c) 1987 Taito America Corporation + Romstar license (US)
+twincobr // B30 / TP-011 (c) 1987 Taito Corporation (World)
+twincobru // B30 / TP-011 (c) 1987 Taito America Corporation + Romstar license (US)
+
+//@source:twinkle.cpp
+bmiidx //
+bmiidx2 //
+bmiidx3 //
+bmiidx3a //
+bmiidx4 //
+bmiidx5 //
+bmiidx6 //
+bmiidx6a //
+bmiidx7 //
+bmiidx8 //
+bmiidxa //
+bmiidxc //
+bmiidxc2 //
+bmiidxca //
+bmiidxs //
+gq863 //
+
+//@source:twins.cpp
+spider //
+twins // (c) 1994
+twinsa // (c) 1994
+
+//@source:tx0.cpp
+tx0_64kw // April 1956 MIT TX-0 (64kw RAM)
+tx0_8kw // 1962 MIT TX-0 (8kw RAM)
+
+//@source:tx1.cpp
+buggyboy // (c) 1985 Tatsumi
+buggyboyjr // (c) 1986 Tatsumi
+tx1 // (c) 1983 Tatsumi + Atari, Namco and Taito license
+tx1jb // (c) 1983 Tatsumi
+tx1jc // (c) 1983 Tatsumi
+
+//@source:uapce.cpp
+aliencr // (c) 1989 Hudson Soft
+blazlaz // (c) 1989 Hudson Soft
+keith // (c) 1989 Hudson Soft
+paclandp // (c) 1989 Namco
+
+//@source:uknc.cpp
+uknc //
+
+//@source:ultraman.cpp
+ultraman // GX910 (c) 1991 Banpresto/Bandai
+
+//@source:ultratnk.cpp
+ultratnk // 009801 1978/02 [6502]
+
+//@source:ultrsprt.cpp
+fiveside // GX479 (c)1995
+
+//@source:umipoker.cpp
+saiyukip //
+umipoker //
+
+//@source:undrfire.cpp
+cbombers // D83 (c) 1993 Taito Corporation Japan (World)
+cbombersj // D83 (c) 1993 Taito Corporation (Japan)
+cbombersp //
+undrfire // D67 (c) 1993 Taito Corporation Japan (World)
+undrfirej // D67 (c) 1993 Taito Corporation (Japan)
+undrfireu // D67 (c) 1993 Taito America Corporation (US)
+
+//@source:unichamp.cpp
+unichamp //
+
+//@source:unico.cpp
+burglarx // (c) 1997
+zeropnt // (c) 1998
+zeropnt2 // (c) 1999
+zeropnta // (c) 1998
+zeropntj // (c) 1998 (Japan)
+
+//@source:unior.cpp
+unior //
+
+//@source:unistar.cpp
+unistar //
+
+//@source:univac.cpp
+uts20 //
+
+//@source:unixpc.cpp
+3b1 // 3B1 "Unix PC"
+
+//@source:unkhorse.cpp
+unkhorse //
+
+//@source:upscope.cpp
+upscope // (c) 1986 Grand products
+
+//@source:usgames.cpp
+superten // (c) 1988
+usg182 // (c) 1989
+usg185 // (c) 1990
+usg187c // (c) 1991
+usg32 // (c) 1987
+usg82 // (c) 1988
+usg83x // (c) 1988
+usgames // (c) 1992
+
+//@source:ut88.cpp
+ut88 //
+ut88mini //
+
+//@source:uzebox.cpp
+uzebox //
+
+//@source:v1050.cpp
+v1050 //
+
+//@source:v6809.cpp
+v6809 //
+
+//@source:vamphalf.cpp
+aoh // (c) 2001
+boonggab // (c) 2001 Taff System
+coolmini // (c) 1999 SemiCom
+dquizgo2 // (c) 2000 Semicom
+dtfamily // (c) 2001 Semicom
+finalgdr // (c) 2001 Semicom
+jmpbreak // (c) 1999 F2 System
+luplup // (c) 1999 Omega System
+luplup29 // (c) 1999 Omega System
+misncrft // (c) 2000 Sun
+misncrfta // (c) 2000 Sun
+mrdig // (c) 2000 Sun
+mrkicker // (c) 2001 Semicom
+mrkickera // (c) 2001 Semicom
+puzlbang // (c) 1999 Omega System
+puzlbanga // (c) 1999 Omega System
+suplup // (c) 1999 Omega System
+toyland // (c) 2001 Semicom
+vamphalf // (c) 1999 DanBi & F2 System
+vamphalfk // (c) 1999 DanBi & F2 System
+wivernwg // (c) 2001 Semicom
+wyvernwg // (c) 2001 Semicom / Game Vision
+wyvernwga // (c) 2001 Semicom / Game Vision
+yorijori // (c)
+
+//@source:vaportra.cpp
+kuhga // MAA (c) 1989 Data East Corporation (Japan)
+vaportra // MAA (c) 1989 Data East Corporation (World)
+vaportra3 // MAA (c) 1989 Data East Corporation (World)
+vaportrau // MAA (c) 1989 Data East Corporation (US)
+
+//@source:vastar.cpp
+pprobe // Kyugo?
+vastar // (c) 1983 Sesame Japan
+vastar2 // (c) 1983 Sesame Japan
+vastar3 // (c) 1983 Sesame Japan
+vastar4 // (c) 1983 Sesame Japan
+
+//@source:vax11.cpp
+vax785 //
+
+//@source:vball.cpp
+vball // TA-0025 (c) 1988 (US)
+vball2pj // TA-0025 (c) 1988 (Japan)
+vball2pjb // bootleg (of Japan set)
+vballb // bootleg (of US set)
+
+//@source:vboy.cpp
+vboy //
+
+//@source:vc4000.cpp
+1292apvs //
+1392apvs //
+cx3000tc //
+database //
+elektor //
+f1392 //
+fforce2 //
+h21 // TRQ Video Computer H-21
+hmg1292 //
+hmg1392 //
+krvnjvtv //
+lnsy1392 //
+mpt05 //
+mpu1000 //
+mpu2000 //
+oc2000 //
+pp1292 //
+pp1392 //
+rwtrntcs //
+spc4000 //
+telngtcs //
+tvc4000 //
+vc4000 // Interton vc4000
+vc6000 //
+vmdtbase //
+
+//@source:vcombat.cpp
+shadfgtr // (c) 1993 DUTECH Inc.
+vcombat // (c) 1993 VR8 Inc.
+
+//@source:vcs80.cpp
+vcs80 //
+
+//@source:vd.cpp
+break86 //
+papillon //
+
+//@source:vector06.cpp
+krista2 //
+pk6128c //
+vec1200 //
+vector06 //
+
+//@source:vector4.cpp
+vector4 //
+
+//@source:vectrex.cpp
+raaspec // (c) Roy Abel & Associates 1984
+vectrex // General Consumer Electric Vectrex - 1982-1984
+
+//@source:vega.cpp
+vega // (c) 19?? Olympia?
+
+//@source:vegaeo.cpp
+crazywar // (c) 2002 Eolith
+
+//@source:vegas.cpp
+cartfury // (c) 2000 Midway Games
+gauntdl // (c) 1999 Midway Games
+gauntdl24 // (c) 1999 Midway Games
+gauntleg // (c) 1998 Atari Games
+gauntleg12 // (c) 1998 Atari Games
+nbagold // (c) 2000 Midway Games
+nbanfl // (c) 1999 Midway Games
+nbashowt // (c) 1998 Midway Games
+roadburn // (c) 1999 Atari Games
+sf2049 // (c) 1999 Atari Games
+sf2049se // (c) 1999 Atari Games
+sf2049te // (c) 1999 Atari Games
+tenthdeg // (c) 1998 Atari Games (prototype)
+warfa // (c) 1999 Atari Games
+warfaa // (c) 1999 Atari Games
+
+//@source:vendetta.cpp
+esckids // GX975 (c) 1991 (Asia)
+esckidsj // GX975 (c) 1991 (Japan)
+vendetta // GX081 (c) 1991 (World)
+vendetta2p // GX081 (c) 1991 (World)
+vendetta2pd // GX081 (c) 1991 (Asia)
+vendetta2peba // GX081 (c) 1991 (World)
+vendetta2pu // GX081 (c) 1991 (Asia)
+vendettaj // GX081 (c) 1991 (Japan)
+vendettar // GX081 (c) 1991 (World)
+vendettaz // GX081 (c) 1991 (World)
+
+//@source:vertigo.cpp
+topgunnr // (c) 1986
+
+//@source:vg5k.cpp
+vg5k // 1984 VG-5000
+
+//@source:vic10.cpp
+vic10 // Commodore Max Machine (Japan)
+
+//@source:vic20.cpp
+vic1001 // Commodore VIC-1001 (Japan)
+vic20 // Commodore VIC 20 (NTSC)
+vic20_se // Commodore VIC 20 (Swedish Expanson Kit)
+vic20p // Commodore VIC 20 (PAL)
+
+//@source:vicdual.cpp
+alphaho // Data East
+brdrlinb // Karateco bootleg
+brdrline // (c) 1980 Sega
+brdrlinet // (c) 1981 Sega
+brdrlins // Sidam bootleg
+car2 // bootleg
+carhntds //
+carnival // 651-666 (c) 1980 Sega
+carnivalc // 501-516 (c) 1980 Sega
+carnivalh //
+carnivalha //
+depthch // 50-55 [1977 Gremlin?]
+depthcho // ? [1977 Gremlin?]
+digger // 684-691 no copyright notice
+frogs // 112-119 [1978 Gremlin?]
+headon // 163-167/192-193 (c) Gremlin
+headon1 // 163-167/192-193 (c) Gremlin
+headon2 // ???-??? (c) 1979 Sega
+headon2s // Sidam bootleg
+headonmz // bootleg
+headons // Sidam bootleg
+headonsa // Sidam bootleg
+heiankyo // (c) [1979?] Denki Onkyo
+hocrash // bootleg
+invds // 367-382 (c) 1979 Sega
+invho2 // 271-286 (c) 1979 Sega
+invinco // 310-318 (c) 1979 Sega
+nsub // 268-275 (c) 1980 Sega
+pulsar // 790-805 (c) 1981 Sega
+safari // 57-66 [1977 Gremlin?]
+safaria // bootleg?
+samurai // 289-302 + upgrades (c) 1980 Sega
+spacetrk // 630-645 (c) 1980 Sega
+spacetrkc // (c) 1980 Sega
+sspacaho // ? epr00001.bin - epr00008.bin
+sspaceat // 155-162 (c)
+sspaceat2 // 155-162 (c) 1979 Sega
+sspaceat3 // 155-162 (c) 1979 Sega
+sspaceatc // 139-146 (c)
+starrkr // (c) 1981 Sega
+startrks // Sidam bootleg
+subhunt // ? [1977 Taito]
+supcrash // bootleg
+tranqgun // 413-428 (c) 1980 Sega
+
+//@source:victor9k.cpp
+victor9k //
+
+//@source:victory.cpp
+victorba // (c) 1982
+victory // (c) 1982
+
+//@source:vidbrain.cpp
+vidbrain //
+
+//@source:videopin.cpp
+solarwar // 036154-036169 1979 [6502]
+videopin // 034253-034267 1979/02 [6502]
+
+//@source:videopkr.cpp
+babydad // (c) 1987 Recreativos Franco
+babypkr // (c) 1987 Recreativos Franco
+blckjack // (c) 1984 InterFlip
+bpoker // (c) 198? Codere?
+fortune1 // (c) 1984 IGT
+videocba // (c) 1987 InterFlip
+videodad // (c) 1987 InterFlip
+videopkr // (c) 1984 InterFlip
+
+//@source:vigilant.cpp
+buccanrs // (c) 1989 Duintronic
+buccanrsa // (c) 1989 Duintronic
+kikcubic // (c) 1988 (Japan)
+kikcubicb // bootleg
+vigilant // (c) 1988 (World Rev E)
+vigilanta // (c) 1988 (World Rev A)
+vigilantb // (c) 1988 (US Rev B)
+vigilantbl // bootleg
+vigilantc // (c) 1988 (World Rev C)
+vigilantd // (c) 1988 (Japan Rev D)
+vigilantg // (c) 1988 (US Rev G)
+vigilanto // (c) 1988 (US)
+
+//@source:vii.cpp
+batmantv // The Batman, 2004
+vii // Chintendo / KenSingTon / Jungle Soft / Siatronics Vii
+vsmile //
+vsmilef //
+walle //
+
+//@source:vindictr.cpp
+vindictr // 136059 (c) 1988
+vindictr1 // 136059 (c) 1988
+vindictr2 // 136059 (c) 1988
+vindictr4 // 136059 (c) 1988
+vindictre // 136059 (c) 1988
+vindictre3 // 136059 (c) 1988
+vindictre4 // 136059 (c) 1988
+vindictrg // 136059 (c) 1988
+
+//@source:vip.cpp
+vip // 1977 Cosmac VIP VP-711
+vp111 // 1977 Cosmac VIP VP-111
+
+//@source:viper.cpp
+boxingm // 2001
+code1d // 2000
+code1db // 2000
+gticlub2 // 2001
+gticlub2ea // 2001
+jpark3 // 2001
+jpark3u // 2001
+kviper // 1999
+mfightc // 2002
+mfightcc // 2002
+mocapb // 2001
+mocapbj // 2001
+mocapglf // 2001
+p911 // 2001
+p9112 // 2001
+p911e // 2001
+p911ea // 2001
+p911j // 2001
+p911kc // 2001
+p911uc // 2001
+popn9 // 2003
+ppp2nd // 2001
+sogeki // 2001
+sscopefh // 2002
+sscopex // 2001
+thrild2 // 2001
+thrild2a // 2001
+thrild2ab // 2001
+thrild2ac // 2001
+thrild2c // 2001
+tsurugi // 2001
+tsurugie // 2001
+tsurugij // 2001
+wcombat // 2002
+wcombatb // 2002
+wcombatj // 2002
+wcombatk // 2002
+wcombatu // 2002
+xtrial // 2002
+
+//@source:vixen.cpp
+vixen //
+
+//@source:vk100.cpp
+vk100 // 1980 Digital Equipment Corporation
+
+//@source:vlc.cpp
+nevada //
+
+//@source:volfied.cpp
+volfied // C04 (c) 1989 Taito Corporation Japan (World)
+volfiedj // C04 (c) 1989 Taito Corporation (Japan)
+volfiedjo // C04 (c) 1989 Taito Corporation (Japan)
+volfiedo // C04 (c) 1989 Taito Corporation Japan (World)
+volfiedu // C04 (c) 1989 Taito America Corporation (US)
+volfieduo // C04 (c) 1989 Taito America Corporation (US)
+
+//@source:votrpss.cpp
+votrpss // 1982 Votrax Personal Speech System
+
+//@source:votrtnt.cpp
+votrtnt // 1980 Votrax Type-'N-Talk
+
+//@source:voyager.cpp
+voyager // (c) 2002 Team Play, Inc.
+
+//@source:vp101.cpp
+jnero // (c) 2004 ICE/Play Mechanix
+specfrce // (c) 2002 ICE/Play Mechanix
+
+//@source:vpoker.cpp
+5acespkr // (c) 198?
+vpoker // (c) 198?
+
+//@source:vroulet.cpp
+vroulet // (c) 1989 World Game
+
+//@source:vsnes.cpp
+balonfgt // (c) 1984 Nintendo
+bnglngby // (c) 1985 Nintendo licensed by Broderbund Software Inc.
+btlecity // (c) 1985 Namco
+cluclu // (c) 1984 Nintendo
+cstlevna // (c) 1987 Konami licensed to Nintendo
+drmario // (c) 1990 Nintendo
+duckhunt // (c) 1985 Nintendo
+excitebk // (c) 1984 Nintendo
+excitebka // (c) 1984 Nintendo
+goonies // (c) 1986 Konami
+hogalley // (c) 1985 Nintendo
+iceclimb // (c) 1984 Nintendo
+iceclimba // (c) 1984 Nintendo
+iceclmrd // (c) 1984 Nintendo (Dual game version)
+jajamaru // (c) 1985 Jaleco
+ladygolf // (c) 1984 Nintendo
+ladygolfe // (c) 1984 Nintendo
+machridr // (c) 1985 Nintendo
+machridra // (c) 1985 Nintendo
+mightybj // (c) 1986 Tecmo
+platoon // (c) 1987 Ocean
+rbibb // (c) 1987 Namco
+rbibba // (c) 1987 Namco
+skatekds // (c) 1988 (hack)
+smgolf // (c) 1984 Nintendo
+smgolfb // (c) 1984 Nintendo
+smgolfj // (c) 1984 Nintendo Co., Ltd.
+starlstr // (c) 1985 Namco
+suprmrio // (c) 1986 Nintendo
+suprmrioa // (c) 1986 Nintendo
+suprmriobl // bootleg
+suprmriobl2 // bootleg
+supxevs // (c) 1986 Nintendo
+tkoboxng // (c) 1987 Data East
+topgun // (c) 1987 Konami
+vsbball // (c) 1984 Nintendo of America
+vsbballj // (c) 1984 Nintendo Co., Ltd.
+vsbballja // (c) 1984 Nintendo Co., Ltd.
+vsbballjb // (c) 1984 Nintendo Co., Ltd.
+vsfdf // (c) 1986 Sunsoft licensed by Nintendo of America
+vsgradus // (c) 1986 Konami licensed to Nintendo
+vsgshoe // (c) 1986 Nintendo
+vsmahjng // (c) 1984 Nintendo Co., Ltd.
+vspinbal // (c) 1984 Nintendo
+vspinbalj // (c) 1984 Nintendo Co., Ltd.
+vsskykid // (c) 1986 Namco
+vsslalom // (c) 1986 Rare Coin-It Inc. licensed to Nintendo
+vssoccer // (c) 1985 Nintendo
+vssoccera // (c) 1985 Nintendo
+vstennis // (c) 1984 Nintendo Co., Ltd. / Nintendo of America
+vstennisa // (c) 1984 Nintendo Co., Ltd. / Nintendo of America
+vstennisb // (c) 1984 Nintendo Co., Ltd. / Nintendo of America
+vstetris // (c) 1988 Atari
+wrecking // (c) 1984 Nintendo
+
+//@source:vt100.cpp
+vt100 // 1978 Digital Equipment Corporation
+vt101 // 1981 Digital Equipment Corporation
+vt102 // 1981 Digital Equipment Corporation
+vt105 // 1978 Digital Equipment Corporation
+vt131 // 1981 Digital Equipment Corporation
+vt180 // 1981 Digital Equipment Corporation
+
+//@source:vt220.cpp
+vt220 // 1983 Digital Equipment Corporation
+
+//@source:vt240.cpp
+mc7105 // Elektronika MC7105
+vt240 // 1983 Digital Equipment Corporation
+
+//@source:vt320.cpp
+vt320 // 1987 Digital Equipment Corporation
+
+//@source:vt520.cpp
+vt520 // 1994 Digital Equipment Corporation
+
+//@source:vta2000.cpp
+vta2000 //
+
+//@source:vtech1.cpp
+fellow // 1983 Salora Fellow
+laser110 // 1983 Laser 110
+laser200 // 1983 Laser 200
+laser210 // 1984 Laser 210
+laser310 // 1984 Laser 310
+laser310h // 1984 Laser 310 with SHRG mod
+tx8000 // 1983 Texet TX-8000
+vz200 // 1984 Dick Smith Electronics VZ-200
+vz200de // 1983 VZ-200 (Germany)
+vz300 // 1984 Dick Smith Electronics VZ-300
+
+//@source:vtech2.cpp
+laser350 // 1984? Laser 350
+laser500 // 1984? Laser 500
+laser700 // 1984? Laser 700
+
+//@source:vulgus.cpp
+vulgus // 5/1984 (c) 1984
+vulgusa // 5/1984 (c) 1984
+vulgusj // 5/1984 (c) 1984
+
+//@source:wacky_gator.cpp
+wackygtr // Wacky Gator
+
+//@source:wallc.cpp
+brkblast // bootleg (Fadesa)
+sidampkr //
+wallc // (c) 1984 Midcoin
+wallca // (c) 1984 Midcoin
+
+//@source:wangpc.cpp
+wangpc //
+
+//@source:wardner.cpp
+pyros // B25 / TP-009 (c) 1987 Taito America Corporation (US)
+wardner // B25 / TP-009 (c) 1987 Taito Corporation Japan (World)
+wardnerj // B25 / TP-009 (c) 1987 Taito Corporation (Japan)
+
+//@source:warpsped.cpp
+warpsped // 197?
+
+//@source:warpwarp.cpp
+bombbee // [1979] Namco
+cutieq // (c) 1979 Namco
+geebee // [1978] Namco
+geebeeb // [1978] Namco (F.lli Bertolino license)
+geebeeg // [1978] Gremlin
+kaitei // [1980] K.K. Tokki
+kaitein // [1980] Namco
+navarone // (c) 1980 Namco
+sos // [1980] Namco
+warpwarp // (c) 1981 Namco
+warpwarpr // (c) 1981 [Namco] (Rock-ola license)
+warpwarpr2 // (c) 1981 [Namco] (Rock-ola license)
+
+//@source:warriorb.cpp
+darius2d // C07 (c) 1989 Taito Corporation (Japan)
+darius2do // C07 (c) 1989 Taito Corporation (Japan)
+sagaia // C07 (c) 1989 Taito Corporation Japan (World)
+warriorb // D24 (c) 1991 Taito Corporation (Japan)
+
+//@source:wc90.cpp
+pac90 // bootleg
+wc90 // (c) 1989 Tecmo
+wc90a // (c) 1989 Tecmo
+wc90b // (c) 1989 Tecmo
+wc90t // (c) 1989 Tecmo
+
+//@source:wc90b.cpp
+wc90b1 // bootleg
+wc90b2 // bootleg
+wc90ba // bootleg
+
+//@source:wecleman.cpp
+hotchase // GX763 (c) 1988
+hotchasea //
+wecleman // GX602 (c) 1986
+weclemana // GX602?(c) 1988
+weclemanb // GX602 (c) 1986
+
+//@source:welltris.cpp
+quiz18k // (c) 1992 EIM (Welltris hardware)
+welltris // (c) 1991 Video System Co. (Japan)
+welltrisj // (c) 1991 Video System Co. (Japan)
+
+//@source:wgp.cpp
+wgp // C32 (c) 1989 Taito America Corporation (US)
+wgp2 // C73 (c) 1990 Taito Corporation (Japan)
+wgpj // C32 (c) 1989 Taito Corporation (Japan)
+wgpjoy // C32 (c) 1989 Taito Corporation (Japan)
+wgpjoya // C32 (c) 1989 Taito Corporation (Japan)
+
+//@source:wheelfir.cpp
+wheelfir // (c) 199? TCH
+
+//@source:white_mod.cpp
+elvisf //
+elvisf302 //
+elvisf303 //
+elvisf4 //
+elvisg //
+elvisg302 //
+elvisg303 //
+elvisg4 //
+elvisi //
+elvisi302 //
+elvisi303 //
+elvisi4 //
+elvisl //
+elvisl302 //
+elvisl303 //
+elvisl4 //
+elvisp //
+elvisp302 //
+elvisp303 //
+elvisp4 //
+gprix //
+gprix_301 //
+gprix_340 //
+gprix_350 //
+gprix_352 //
+gprix_400 //
+gprixf //
+gprixf_301 //
+gprixf_340 //
+gprixf_350 //
+gprixf_352 //
+gprixf_400 //
+gprixg //
+gprixg_301 //
+gprixg_340 //
+gprixg_350 //
+gprixg_352 //
+gprixg_400 //
+gprixi //
+gprixi_301 //
+gprixi_340 //
+gprixi_350 //
+gprixi_352 //
+gprixi_400 //
+gprixl //
+gprixl_301 //
+gprixl_340 //
+gprixl_350 //
+gprixl_352 //
+gprixl_400 //
+lotr //
+lotr_fr //
+lotr_fr401 //
+lotr_fr410 //
+lotr_fr5 //
+lotr_fr501 //
+lotr_fr6 //
+lotr_fr7 //
+lotr_fr8 //
+lotr_fr9 //
+lotr_gr //
+lotr_gr401 //
+lotr_gr410 //
+lotr_gr5 //
+lotr_gr501 //
+lotr_gr6 //
+lotr_gr7 //
+lotr_gr8 //
+lotr_gr9 //
+lotr_it //
+lotr_it401 //
+lotr_it410 //
+lotr_it5 //
+lotr_it501 //
+lotr_it6 //
+lotr_it7 //
+lotr_it8 //
+lotr_it9 //
+lotr_le //
+lotr_sp //
+lotr_sp401 //
+lotr_sp5 //
+lotr_sp501 //
+lotr_sp6 //
+lotr_sp7 //
+lotr_sp8 //
+lotr_sp9 //
+lotr401 //
+lotr410 //
+lotr5 //
+lotr501 //
+lotr6 //
+lotr7 //
+lotr8 //
+lotr9 //
+nascar //
+nascar_301 //
+nascar_340 //
+nascar_350 //
+nascar_352 //
+nascar_400 //
+nascarl //
+nascarl_301 //
+nascarl_340 //
+nascarl_350 //
+nascarl_352 //
+nascarl_400 //
+rip300 //
+rip301 //
+rip302 //
+rip310 //
+ripf300 //
+ripf301 //
+ripf302 //
+ripf310 //
+ripg300 //
+ripg301 //
+ripg302 //
+ripg310 //
+ripi300 //
+ripi301 //
+ripi302 //
+ripi310 //
+ripl300 //
+ripl301 //
+ripl302 //
+ripl310 //
+ripleys //
+ripleysf //
+ripleysg //
+ripleysi //
+ripleysl //
+sopranof //
+sopranof_107 //
+sopranof_300 //
+sopranof_400 //
+sopranog //
+sopranog_107 //
+sopranog_300 //
+sopranog_400 //
+sopranoi //
+sopranoi_107 //
+sopranoi_300 //
+sopranoi_400 //
+sopranol //
+sopranol_107 //
+sopranol_300 //
+sopranol_400 //
+sopranos //
+sopranos_204 //
+sopranos_300 //
+sopranos_400 //
+
+//@source:whitestar.cpp
+apollo13 //
+apollo13_10 //
+aust201 //
+aust300 //
+aust301 //
+austin //
+austinf //
+austing //
+austini //
+austnew //
+ctchzdlx //
+gldneye //
+godzillp //
+goldcue //
+harl_a10 //
+harl_a13 //
+harl_a18 //
+harl_a30 //
+harl_a40 //
+harl_f13 //
+harl_f18 //
+harl_f30 //
+harl_f40 //
+harl_g13 //
+harl_g18 //
+harl_g30 //
+harl_g40 //
+harl_i13 //
+harl_i18 //
+harl_i30 //
+harl_i40 //
+harl_l13 //
+harl_l18 //
+harl_l30 //
+harl_l40 //
+harl_u13 //
+hirol_fr //
+hirol_gr //
+hirol_gr_210 //
+hirol_it //
+hirolcas //
+hirolcas_210 //
+hirolcat //
+hironew //
+id4 //
+id4_201 //
+jplstw20 //
+jplstw22 //
+lostspc //
+mononew //
+monop233 //
+monop251 //
+monop301 //
+monop303 //
+monopolf //
+monopolg //
+monopoli //
+monopoll //
+monopolp //
+monopred //
+nfl //
+playboyf //
+playboyf_203 //
+playboyf_300 //
+playboyf_302 //
+playboyf_303 //
+playboyf_401 //
+playboyg //
+playboyg_203 //
+playboyg_300 //
+playboyg_302 //
+playboyg_303 //
+playboyg_401 //
+playboyi //
+playboyi_203 //
+playboyi_300 //
+playboyi_302 //
+playboyi_303 //
+playboyi_401 //
+playboyl //
+playboyl_203 //
+playboyl_300 //
+playboyl_302 //
+playboyl_303 //
+playboyl_401 //
+playboys //
+playboys_203 //
+playboys_300 //
+playboys_302 //
+playboys_303 //
+playboys_401 //
+playnew //
+rctnew //
+rctycn //
+rctycn_400 //
+rctycn_600 //
+rctycn_701 //
+rctycnf //
+rctycnf_400 //
+rctycnf_600 //
+rctycnf_701 //
+rctycng //
+rctycng_400 //
+rctycng_701 //
+rctycni //
+rctycni_400 //
+rctycni_600 //
+rctycni_701 //
+rctycnl //
+rctycnl_400 //
+rctycnl_600 //
+rctycnl_701 //
+shrknew //
+shrky_207 //
+shrkyfr //
+shrkyfr_207 //
+shrkygr //
+shrkygr_207 //
+shrkyit //
+shrkyit_207 //
+shrkysht //
+simpnew //
+simpprtf //
+simpprtf_204 //
+simpprtf_300 //
+simpprtf_400 //
+simpprtg //
+simpprtg_400 //
+simpprti //
+simpprti_204 //
+simpprti_300 //
+simpprti_400 //
+simpprtl //
+simpprtl_204 //
+simpprtl_300 //
+simpprtl_400 //
+simpprty //
+simpprty_204 //
+simpprty_300 //
+simpprty_400 //
+spacejam //
+spacejmf //
+spacejmg //
+spacejmi //
+sprk_090 //
+sprk_096 //
+sprk_103 //
+startrp //
+strikext //
+strknew //
+strxt_fr //
+strxt_gr //
+strxt_it //
+strxt_sp //
+strxt_uk //
+swtril41 //
+swtril43 //
+t3new //
+term3 //
+term3_205 //
+term3_301 //
+term3f //
+term3f_205 //
+term3f_301 //
+term3g //
+term3g_301 //
+term3i //
+term3i_205 //
+term3i_301 //
+term3l //
+term3l_205 //
+term3l_301 //
+titanic //
+twst_300 //
+twst_404 //
+twst_405 //
+viprsega //
+wackadoo //
+xfiles2 //
+xfilesp //
+
+//@source:wicat.cpp
+wicat //
+
+//@source:wico.cpp
+aftor //
+
+//@source:wildfire.cpp
+wildfire // Parker Bros
+
+//@source:wildpkr.cpp
+tabpkr // 199?, TAB Austira
+wildpkr // 199?, TAB Austria.
+
+//@source:williams.cpp
+alienar // (c) 1985 Duncan Brown
+alienaru // (c) 1985 Duncan Brown
+batlzone // bootleg?
+blaster // (c) 1983
+blasterkit // (c) 1983
+blastero // (c) 1983
+bubbles // (c) 1982
+bubblesp // (c) 1982
+bubblesr // (c) 1982
+colony7 // (c) 1981 Taito
+colony7a // (c) 1981 Taito
+defcmnd // bootleg
+defence // bootleg
+defender // (c) 1980
+defenderb // (c) 1980
+defenderg // (c) 1980
+defenderw // (c) 1980
+defndjeu // bootleg
+inferno // (c) 1984
+jin // Falcon bootleg/hack
+joust // (c) 1982
+joust2 // (c) 1986
+joust2r1 // (c) 1986
+joustr // (c) 1982
+joustwr // (c) 1982
+lottofun // (c) 1987 H.A.R. Management
+mayday // bootleg
+maydaya // bootleg
+maydayb // bootleg
+mysticm // (c) 1983
+mysticmp // (c) 1983 Prototype
+playball // (c) 1983
+robotron // (c) 1982
+robotronyo // (c) 1982
+sinistar // (c) 1982
+sinistar1 // (c) 1982
+sinistar2 // (c) 1982
+spdball // (c) 1985
+splat // (c) 1982
+stargate // (c) 1981
+startrkd // bootleg
+tornado1 // bootleg
+tornado2 // bootleg
+tshoot // (c) 1984
+zero // bootleg
+zero2 // bootleg
+
+//@source:wink.cpp
+wink // (c) 1985 Midcoin
+winka // (c) 1985 Midcoin
+
+//@source:wiping.cpp
+rugrats // (c) 1983
+wiping // (c) 1982
+
+//@source:witch.cpp
+pbchmp95 // (c) 1995 Veltmeijer Automaten
+witch // (c) 1992 Excellent System
+witchb // (c) 1992 Excellent System
+witchs // (c) 1992 Sega / Vic Tokai license
+
+//@source:wiz.cpp
+kungfut // (c) 1984 Seibu Kaihatsu
+kungfuta // (c) 1984 Seibu Kaihatsu
+scion // (c) 1984 Seibu Denshi
+scionc // (c) 1984 Seibu Denshi + Cinematronics license
+stinger // (c) 1983 Seibu Denshi
+stinger2 // (c) 1983 Seibu Denshi
+wiz // (c) 1985 Seibu Kaihatsu
+wizt // (c) 1985 Taito Corporation
+wizta // (c) 1985 Taito Corporation
+
+//@source:wmg.cpp
+wmg // Williams 6in1 Multigame, Clay Cowgill
+
+//@source:wms.cpp
+btippers // Big Tippers (Russian)
+cashcrop // Cash Crop (Russian)
+filthyr // Filthy Rich (Russian)
+hottop // Hot Toppings (English)
+hottopa // Hot Toppings (Russian?)
+inwinner // In Winner (Russian)
+jptparty // Jackpot Party (Russian)
+leprgld // Leprecorns Gold (Russian)
+leprglds // Leprecorns Gold (Spanish)
+lol // Life of Luxury (Russian)
+lovewin // Love To Win (Russian)
+mtburn // Money To Burn (Russian)
+otchart // Off The Charts (Russian)
+perfect // Perfect Game (Russian)
+reelemin // Reel 'Em In (Russian)
+sonoth // Sum Of Nothing (Russian)
+swingin // Swingin' Green (Russian)
+wdun // Who Dunnit (Russian)
+winbid // Winning Bid (Russian)
+wldstrek // Wild Streak (Russian)
+wms // Set Chips
+wmsa //
+wmsb //
+wmsboom // Boom (Russian)
+wmstopb // Top Banana (Russian)
+yukongld // Yukon Gold (Russian)
+
+//@source:wolfpack.cpp
+wolfpack // ?????? prototype [6502]
+
+//@source:wpc_95.cpp
+afm_10 //
+afm_11 //
+afm_113 //
+afm_113b //
+afm_11u //
+cc_10 //
+cc_104 //
+cc_12 //
+cc_13 //
+congo_11 //
+congo_13 //
+congo_20 //
+congo_21 //
+cp_15 //
+cp_16 //
+cv_10 //
+cv_11 //
+cv_13 //
+cv_14 //
+cv_20h //
+jy_03 //
+jy_11 //
+jy_12 //
+mb_10 //
+mb_106 //
+mb_106b //
+mm_05 //
+mm_10 //
+mm_109 //
+mm_109b //
+mm_109c //
+mm_10u //
+nbaf_11 //
+nbaf_115 //
+nbaf_11a //
+nbaf_11s //
+nbaf_21 //
+nbaf_22 //
+nbaf_23 //
+nbaf_31 //
+nbaf_31a //
+ngg_10 //
+ngg_13 //
+ngg_p06 //
+sc_091 //
+sc_14 //
+sc_17 //
+sc_17n //
+sc_18 //
+sc_18n //
+sc_18s2 //
+ss_01 //
+ss_03 //
+ss_12 //
+ss_14 //
+ss_15 //
+tf95_12 //
+totan_04 //
+totan_12 //
+totan_13 //
+totan_14 //
+ttt_10 //
+
+//@source:wpc_an.cpp
+bop_l2 //
+bop_l3 //
+bop_l4 //
+bop_l5 //
+bop_l6 //
+bop_l7 //
+dd_p06 //
+dd_p7 //
+fh_905h //
+fh_l3 //
+fh_l4 //
+fh_l5 //
+fh_l9 //
+fh_l9b //
+hd_l1 //
+hd_l3 //
+tfa_13 //
+
+//@source:wpc_dcs.cpp
+afv_l4 //
+dm_h5 //
+dm_h6 //
+dm_la1 //
+dm_lx3 //
+dm_lx4 //
+dm_pa2 //
+dm_px5 //
+ij_l3 //
+ij_l4 //
+ij_l5 //
+ij_l6 //
+ij_l7 //
+ij_lg7 //
+jd_l1 //
+jd_l4 //
+jd_l5 //
+jd_l6 //
+jd_l7 //
+pop_la4 //
+pop_lx5 //
+pop_pa3 //
+sttng_g7 //
+sttng_l1 //
+sttng_l2 //
+sttng_l3 //
+sttng_l7 //
+sttng_p4 //
+sttng_p5 //
+sttng_p8 //
+sttng_s7 //
+sttng_x7 //
+
+//@source:wpc_dot.cpp
+gi_l3 //
+gi_l4 //
+gi_l6 //
+gi_l9 //
+hshot_p8 //
+hurr_l2 //
+pz_f4 //
+pz_l1 //
+pz_l2 //
+pz_l3 //
+sf_l1 //
+t2_l2 //
+t2_l3 //
+t2_l4 //
+t2_l6 //
+t2_l8 //
+t2_p2f //
+tfdmd_l3 //
+
+//@source:wpc_flip1.cpp
+taf_h4 //
+taf_l1 //
+taf_l2 //
+taf_l3 //
+taf_l4 //
+taf_l5 //
+taf_l6 //
+taf_l7 //
+taf_p2 //
+
+//@source:wpc_flip2.cpp
+br_l1 //
+br_l3 //
+br_l4 //
+br_p17 //
+cftbl_l3 //
+cftbl_l4 //
+drac_l1 //
+drac_p11 //
+dw_l1 //
+dw_l2 //
+dw_p5 //
+ft_l3 //
+ft_l4 //
+ft_l5 //
+ft_p4 //
+gw_l1 //
+gw_l2 //
+gw_l3 //
+gw_l5 //
+gw_p7 //
+gw_pb //
+gw_pc //
+lc_11 //
+strik_l4 //
+tafg_h3 //
+tafg_la2 //
+tafg_la3 //
+tafg_lx3 //
+tz_92 //
+tz_94ch //
+tz_94h //
+tz_h7 //
+tz_h8 //
+tz_ifpa //
+tz_l1 //
+tz_l2 //
+tz_l3 //
+tz_l4 //
+tz_p3 //
+tz_p4 //
+tz_pa1 //
+ww_l2 //
+ww_l3 //
+ww_l4 //
+ww_l5 //
+ww_lh5 //
+ww_lh6 //
+ww_p1 //
+ww_p8 //
+
+//@source:wpc_s.cpp
+corv_21 //
+corv_la1 //
+corv_lx1 //
+corv_lx2 //
+corv_px4 //
+dh_lx2 //
+fs_lx2 //
+fs_lx4 //
+fs_lx5 //
+fs_sp2 //
+i500_10r //
+i500_11b //
+i500_11r //
+jb_10b //
+jb_10r //
+jm_05r //
+jm_12b //
+jm_12r //
+nf_10 //
+nf_20 //
+nf_22 //
+nf_23 //
+nf_23f //
+nf_23x //
+rs_l6 //
+rs_la4 //
+rs_la5 //
+rs_lx2 //
+rs_lx3 //
+rs_lx4 //
+rs_lx5 //
+tfs_12 //
+tom_06 //
+tom_10f //
+tom_12 //
+tom_13 //
+tom_14h //
+ts_la2 //
+ts_la4 //
+ts_lf6 //
+ts_lh6 //
+ts_lm6 //
+ts_lx4 //
+ts_lx5 //
+ts_pa1 //
+wcs_l2 //
+wcs_la2 //
+wcs_p2 //
+wcs_p3 //
+wd_03r //
+wd_048r //
+wd_10f //
+wd_10g //
+wd_10r //
+wd_11 //
+wd_12 //
+wd_12g //
+
+//@source:wrally.cpp
+wrally // (c) 1993 - Ref 930705
+wrallya // (c) 1993 - Ref 930705
+wrallyat // (c) 1993 - Ref 930217
+wrallyb // (c) 1993 - Ref 930217
+
+//@source:wswan.cpp
+wscolor // Bandai WonderSwan Color Handheld
+wswan // Bandai WonderSwan Handheld
+
+//@source:wwfsstar.cpp
+wwfsstar // TA-0024 (c) 1989 (Europe)
+wwfsstarb // TA-0024 (c) 1989 (Japan)
+wwfsstarj // TA-0024 (c) 1989 (Japan)
+wwfsstaru // TA-0024 (c) 1989 (US, newer)
+wwfsstarua // TA-0024 (c) 1989 (US)
+
+//@source:wyvernf0.cpp
+wyvernf0 // A39 (c) 1985 Taito Corporation (Japan)
+
+//@source:x07.cpp
+x07 //
+
+//@source:x1.cpp
+x1 // 1982 Sharp X1
+x1turbo // 1984 Sharp X1 Turbo (Model 10)
+x1turbo40 // 1985 Sharp X1 Turbo (Model 40)
+
+//@source:x1twin.cpp
+x1twin // 1986 Sharp X1 Twin
+
+//@source:x68k.cpp
+x68000 // Sharp X68000 (1987)
+x68030 // Sharp X68030 (1993)
+x68ksupr // Sharp X68000 Super (1990)
+x68kxvi // Sharp X68000 XVI (1991)
+
+//@source:xain.cpp
+solrwarr // TA-0019 (c) 1986 + Taito / Memetron license
+xsleena // TA-0019 (c) 1986 + Taito license
+xsleenab // bootleg
+xsleenaba // bootleg
+xsleenaj // TA-0019 (c) 1986
+
+//@source:xavix.cpp
+taitons1 //
+
+//@source:xbox.cpp
+xbox //
+
+//@source:xerox820.cpp
+bigboard //
+mk82 //
+mk83 //
+x168 //
+x820 //
+x820ii //
+
+//@source:xexex.cpp
+orius // GX067 (c) 1991 (USA)
+xexex // GX067 (c) 1991 (World)
+xexexa // GX067 (c) 1991 (Asia)
+xexexj // GX067 (c) 1991 (Japan)
+
+//@source:xmen.cpp
+xmen // GX065 (c) 1992 (US)
+xmen2pa // GX065 (c) 1992 (Asia)
+xmen2pe // GX065 (c) 1992 (World)
+xmen2pj // GX065 (c) 1992 (Japan)
+xmen2pu // GX065 (c) 1992 (US)
+xmen6p // GX065 (c) 1992 (World)
+xmen6pu // GX065 (c) 1992 (US)
+xmena // GX065 (c) 1992 (Asia)
+xmenaa // GX065 (c) 1992 (Asia)
+xmene // GX065 (c) 1992 (World)
+xmenj // GX065 (c) 1992 (Japan)
+
+//@source:xor100.cpp
+xor100 //
+
+//@source:xorworld.cpp
+xorworld // (c) 1990 - prototype
+
+//@source:xtheball.cpp
+xtheball // (c) 1991 Rare
+
+//@source:xtom3d.cpp
+xtom3d //
+
+//@source:xxmissio.cpp
+xxmissio // UPL-86001 [1986]
+
+//@source:xybots.cpp
+xybots // 136054 (c) 1987
+xybots0 // 136054 (c) 1987
+xybots1 // 136054 (c) 1987
+xybotsf // 136054 (c) 1987
+xybotsg // 136054 (c) 1987
+
+//@source:xyonix.cpp
+xyonix // [1989 Philko]
+
+//@source:yiear.cpp
+yiear // GX407 (c) 1985
+yiear2 // GX407 (c) 1985
+
+//@source:ymmu100.cpp
+mu100 // 1997 MU-100
+mu100r // 1997 MU-100 Rackable version
+
+//@source:yunsun16.cpp
+bombkick // (c) 1998 Yun Sung
+bombkicka // (c) 1998 Yun Sung
+magicbub // (c) Yun Sung
+magicbuba // (c) Yun Sung
+magicbubb // (c) Yun Sung
+paprazzi // (c) 1996 Yun Sung
+shocking // (c) 1997 Yun Sung
+shockingk // (c) 1997 Yun Sung
+shockingko // (c) 1997 Yun Sung
+
+//@source:yunsung8.cpp
+cannball // (c) 1995 Yun Sung / Soft Visio
+cannballv // (c) 1995 Yun Sung / T&K
+magix // (c) 1995 Yun Sung
+magixb // bootleg
+rocktris // (c) 1994? Yun Sung
+
+//@source:z100.cpp
+z100 //
+
+//@source:z1013.cpp
+z1013 //
+z1013a2 //
+z1013k69 //
+z1013k76 //
+z1013s60 //
+
+//@source:z80dev.cpp
+z80dev //
+
+//@source:z80ne.cpp
+z80ne // 1980 - Z80NE
+z80net // 1980 - Z80NE + LX388 Video Interface
+z80netb // 1980 - Z80NE + LX388 Video Interface + 16Kb BASIC
+z80netf // 1980 - Z80NE + LX.388 Video Interface + LX.390 FD Controller
+
+//@source:z88.cpp
+z88 // Z88 (UK)
+z88ch // Z88 (Swiss)
+z88de // Z88 (German)
+z88dk // Z88 (Danish)
+z88es // Z88 (Spanish)
+z88fi // Z88 (Finnish)
+z88fr // Z88 (French)
+z88it // Z88 (Italian)
+z88no // Z88 (Norwegian)
+z88se // Z88 (Swedish)
+z88tr // Z88 (Turkish)
+
+//@source:z9001.cpp
+kc85_111 //
+kc87_10 //
+kc87_11 //
+kc87_20 //
+kc87_21 //
+z9001 //
+
+//@source:zac_1.cpp
+ewf //
+firemntn //
+futurwld //
+hod //
+hotwheel //
+locomotp //
+sshtlzac //
+stargod //
+stargoda //
+strapids //
+wsports //
+
+//@source:zac_2.cpp
+bbeltzac //
+clown //
+dvlrider //
+dvlriderg //
+dvlrideri //
+farfalla //
+farfallag //
+farfallai //
+mcastle //
+mcastlef //
+mcastleg //
+mcastlei //
+mexico //
+nstrphnx //
+pinchamp //
+pinchamp7 //
+pinchamp7g //
+pinchamp7i //
+pinchampg //
+pinchampi //
+poolcham //
+poolchama //
+poolchami //
+robot //
+robotf //
+robotg //
+roboti //
+scram_tp //
+socrking //
+socrkingg //
+socrkingi //
+spookyi //
+spookyp //
+strsphnx //
+tmachzac //
+tmachzacf //
+tmachzacg //
+zankor //
+
+//@source:zac_proto.cpp
+skijump //
+spacecty //
+strike //
+
+//@source:zac2650.cpp
+dodgem // (c) 1979
+sia2650 // (c) 1978
+tinv2650 // (c) 1978
+
+//@source:zaccaria.cpp
+jackrabt // (c) 1984
+jackrabt2 // (c) 1984
+jackrabts // (c) 1984
+monymony // (c) 1983
+
+//@source:zapcomputer.cpp
+zapcomp // (1981) ZAP computer - Z80 Applications Processor
+
+//@source:zaurus.cpp
+zsl5500 // Sharp Zaurus SL-5500 "Collie"
+zsl5600 // Sharp Zaurus SL-5600 / SL-B500 "Poodle"
+zslc1000 // Sharp Zaurus SL-C1000 "Akita"
+zslc3000 // Sharp Zaurus SL-C3000 "Spitz"
+zslc750 // Sharp Zaurus SL-C750 "Shepherd"
+zslc760 // Sharp Zaurus SL-C760 "Husky"
+
+//@source:zaxxon.cpp
+congo // 605-5167 (c) 1983 (2 board stack)
+congoa // 605-5167 (c) 1983 (3 board stack)
+futspy // (c) 1984
+ixion // (c) 1983
+razmataz // modified 834-0213, 834-0214 (c) 1983
+szaxxon // (c) 1982
+tiptop // 605-5167 (c) 1983 (3 board stack)
+zaxxon // (c) 1982
+zaxxon2 // (c) 1982
+zaxxon3 // (c) 1982
+zaxxonb // bootleg
+zaxxonj // (c) 1982
+
+//@source:zerozone.cpp
+lvgirl94 // (c) 1994 Comad
+zerozone // (c) 1993 Comad
+
+//@source:zexall.cpp
+zexall // zexall z80 test suite with kevtris' preloader/serial interface at 0000-00ff
+
+//@source:zn.cpp
+1on1gov // 1 on 1 Government (JAPAN)
+acpsx //
+aerofgts // Aero Fighters Special (TAIWAN)
+atluspsx //
+atpsx //
+bam2 // Bust a Move 2 (JAPANESE ROM ver. 1999/07/17 10:00:00)
+beastrzr // Beastorizer (USA)
+beastrzrb // Beastorizer (USA Bootleg)
+bldyroar // Bloody Roar (JAPAN)
+bldyror2 // Bloody Roar 2 (WORLD)
+bldyror2a // Bloody Roar 2 (ASIA)
+bldyror2j // Bloody Roar 2 (JAPAN)
+bldyror2u // Bloody Roar 2 (USA)
+brvblade // Brave Blade (WORLD)
+brvbladea // Brave Blade (ASIA)
+brvbladej // Brave Blade (JAPAN)
+brvbladeu // Brave Blade (USA)
+cbaj // Cool Boaders Arcade Jam
+cpzn1 //
+cpzn2 //
+doapp // Dead Or Alive ++ (JAPAN)
+flamegun // Flame Gunner (USA)
+flamegunj // Flame Gunner (JAPAN)
+ftimpact // Fighters' Impact (Ver 2.02O)
+ftimpactj // Fighters' Impact (Ver 2.02J)
+ftimpactu // Fighters' Impact (Ver 2.02A)
+ftimpcta // Fighters' Impact A (Ver 2.00J)
+gdarius // G-Darius (Ver 2.01J)
+gdarius2 // G-Darius Ver.2 (Ver 2.03J)
+gdariusb // G-Darius (Ver 2.02A)
+glpracr // Gallop Racer (English Ver 10.17.K)
+glpracr2 // Gallop Racer 2 (USA)
+glpracr2j // Gallop Racer 2 (JAPAN)
+glpracr2l // Gallop Racer 2 Link HW (JAPAN)
+glpracr3 // Gallop Racer 3 (Export)
+glpracr3j // Gallop Racer 3 (JAPAN)
+glpracrj // Gallop Racer (Japanese Ver 9.01.12)
+hvnsgate // Heaven's Gate (JAPAN)
+jdredd // Judge Dredd (Rev C)
+jdreddb // Judge Dredd (Rev B)
+jgakuen // Justice Gakuen (JAPAN 971117)
+kikaioh // Kikaioh (JAPAN 980914)
+lpadv // Logic Pro Adventure (JAPAN)
+mfjump // Monster Farm Jump (JAPAN)
+mgcldate // Magical Date (JAPAN Ver 2.02J)
+mgcldtex // Magical Date EX (JAPAN Ver 2.01J)
+nbajamex // NBA Jam Extreme
+plsmaswd // Plasma Sword (USA 980316)
+plsmaswda // Plasma Sword (ASIA 980316)
+primrag2 // Primal Rage 2
+psarc95 //
+psyforce // Psychic Force (Ver 2.4O)
+psyforcej // Psychic Force (Ver 2.4J)
+psyforcex // Psychic Force EX (Ver 2.0J)
+raystorm // Ray Storm (Ver 2.06A)
+raystormj // Ray Storm (Ver 2.05J)
+raystormo // Ray Storm (Ver 2.05O)
+raystormu // Ray Storm (Ver 2.05A)
+rvschool // Rival Schools (EURO 971117)
+rvschoola // Rival Schools (ASIA 971117)
+rvschoolu // Rival Schools (USA 971117)
+sfchamp // Super Football Champ (Ver 2.5O)
+sfchampj // Super Football Champ (Ver 2.4J)
+sfchampo // Super Football Champ (Ver 2.4O)
+sfchampu // Super Football Champ (Ver 2.4A)
+sfex // Street Fighter EX (EURO 961219)
+sfex2 // Street Fighter EX 2 (USA 980526)
+sfex2a // Street Fighter EX 2 (ASIA 980312)
+sfex2h // Street Fighter EX 2 (HISPANIC 980312)
+sfex2j // Street Fighter EX 2 (JAPAN 980312)
+sfex2p // Street Fighter EX 2 Plus (USA 990611)
+sfex2pa // Street Fighter EX 2 Plus (ASIA 990611)
+sfex2ph // Street Fighter EX 2 Plus (HISPANIC 990611)
+sfex2pj // Street Fighter EX 2 Plus (JAPAN 990611)
+sfexa // Street Fighter EX (ASIA 961219)
+sfexj // Street Fighter EX (JAPAN 961130)
+sfexp // Street Fighter EX Plus (USA 970407)
+sfexpj // Street Fighter EX Plus (JAPAN 970407)
+sfexpj1 // Street Fighter EX Plus (JAPAN 970311)
+sfexpu1 // Street Fighter EX Plus (USA 970311)
+sfexu // Street Fighter EX (USA 961219)
+shiryu2 // Strider Hiryu 2 (JAPAN 991213)
+shngmtkb // Shanghai Matekibuyuu
+sncwgltd // Sonic Wings Limited (JAPAN)
+starglad // Star Gladiator (USA 960627)
+stargladj // Star Gladiator (JAPAN 960627)
+stargld2 // Star Gladiator 2 (JAPAN 980316)
+strider2 // Strider 2 (USA 991213)
+strider2a // Strider 2 (ASIA 991213)
+taitofx1 //
+tblkkuzu // The Block Kuzushi (JAPAN)
+techromn // Tech Romancer (EURO 980914)
+techromnu // Tech Romancer (USA 980914)
+tecmowcm // Tecmo World Cup Millennium (JAPAN)
+tgmj // Tetris The Grand Master (JAPAN 980710)
+tondemo // Tondemo Crisis (JAPAN)
+tps //
+ts2 // Battle Arena Toshinden 2 (USA 951124)
+ts2a // Battle Arena Toshinden 2 (USA 951124)
+ts2j // Battle Arena Toshinden 2 (JAPAN 951124)
+vspsx //
+
+//@source:zodiack.cpp
+bounty // (c) 1982 Orca
+dogfight // (c) 1983 Thunderbolt
+moguchan // (c) 1982 Orca + Eastern Commerce Inc. license (doesn't appear on screen)
+percuss // (c) 1981 Orca
+zodiack // (c) 1983 Orca + Esco Trading Co license
+
+//@source:zorba.cpp
+zorba //
+
+//@source:zr107.cpp
+jetwave // GX678 (c)1996 Euro EAB
+jetwavej // GX678 (c)1996 Japan JAB
+midnrun // GX476 (c)1995 Europe EAA
+midnruna // GX477 (c)1995 Asia AAA
+waveshrk // GX678 (c)1996 USA UAB
+windheat // GX677 (c)1996 Europe EAA
+windheata // GX677 (c)1996 Asia AAA
+windheatj // GX677 (c)1996 Japan JAA
+windheatu // GX677 (c)1996 USA UBC
+
+//@source:zrt80.cpp
+zrt80 //
+
+//@source:zsbc3.cpp
+zsbc3 //
+
+//@source:zx.cpp
+lambda // Lambda 8300
+pc8300 // Your Computer - PC8300
+pow3000 // Creon Enterprises - Power 3000
+ringo470 // Ringo 470
+tk85 // Microdigital TK85
+ts1000 // 1982 Timex Sinclair 1000
+ts1500 // Timex Sinclair 1500
+zx80 // 1980 Sinclair ZX-80
+zx81 // 1981 Sinclair ZX-81
+zx97 //
+
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
new file mode 100644
index 00000000000..00289661e14
--- /dev/null
+++ b/src/mame/mess.flt
@@ -0,0 +1,674 @@
+3do.cpp
+4004clk.cpp
+4dpi.cpp
+68ksbc.cpp
+a2600.cpp
+a310.cpp
+a5105.cpp
+a51xx.cpp
+a6809.cpp
+a7150.cpp
+a7800.cpp
+abc1600.cpp
+abc80.cpp
+abc80x.cpp
+ac1.cpp
+acrnsys1.cpp
+adam.cpp
+advision.cpp
+aim65.cpp
+aim65_40.cpp
+alesis.cpp
+alphasma.cpp
+alphatro.cpp
+altair.cpp
+alto2.cpp
+altos5.cpp
+amico2k.cpp
+amiga.cpp
+ampro.cpp
+amstr_pc.cpp
+amstrad.cpp
+amust.cpp
+apc.cpp
+apexc.cpp
+apf.cpp
+apogee.cpp
+apollo.cpp
+apple1.cpp
+apple2.cpp
+apple2e.cpp
+apple2gs.cpp
+apple3.cpp
+applix.cpp
+apricot.cpp
+apricotf.cpp
+apricotp.cpp
+aquarius.cpp
+arcadia.cpp
+argo.cpp
+argox.cpp
+asst128.cpp
+astrohome.cpp
+at.cpp
+atari400.cpp
+atarist.cpp
+atm.cpp
+atom.cpp
+atpci.cpp
+attache.cpp
+aussiebyte.cpp
+avigo.cpp
+ax20.cpp
+b16.cpp
+b2m.cpp
+babbage.cpp
+banctec.cpp
+basic52.cpp
+bbc.cpp
+bbcbc.cpp
+bcs3.cpp
+bebox.cpp
+beehive.cpp
+besta.cpp
+beta.cpp
+bigbord2.cpp
+binbug.cpp
+bitgraph.cpp
+bk.cpp
+bmjr.cpp
+bml3.cpp
+bob85.cpp
+br8641.cpp
+bullet.cpp
+busicom.cpp
+bw12.cpp
+bw2.cpp
+c10.cpp
+c128.cpp
+c64.cpp
+c64dtv.cpp
+c65.cpp
+c80.cpp
+c900.cpp
+camplynx.cpp
+canon_s80.cpp
+casloopy.cpp
+cat.cpp
+cbm2.cpp
+cc40.cpp
+ccs2810.cpp
+ccs300.cpp
+cd2650.cpp
+cdc721.cpp
+cdi.cpp
+cfx9850.cpp
+cgc7900.cpp
+cgenie.cpp
+channelf.cpp
+chaos.cpp
+chessmst.cpp
+chesstrv.cpp
+clcd.cpp
+cm1800.cpp
+coco12.cpp
+coco3.cpp
+codata.cpp
+coleco.cpp
+compis.cpp
+compucolor.cpp
+comquest.cpp
+comx35.cpp
+concept.cpp
+cortex.cpp
+cosmicos.cpp
+cp1.cpp
+cps1.cpp
+craft.cpp
+crvision.cpp
+ct486.cpp
+cvicny.cpp
+cxhumax.cpp
+cybiko.cpp
+czk80.cpp
+d6800.cpp
+d6809.cpp
+dai.cpp
+daruma.cpp
+dccons.cpp
+dct11em.cpp
+dectalk.cpp
+decwritr.cpp
+dgn_beta.cpp
+didact.cpp
+digel804.cpp
+dim68k.cpp
+dm7000.cpp
+dms5000.cpp
+dms86.cpp
+dmv.cpp
+dolphunk.cpp
+dps1.cpp
+dragon.cpp
+dsb46.cpp
+dual68.cpp
+dvk_kcgd.cpp
+dvk_ksm.cpp
+eacc.cpp
+ec184x.cpp
+ec65.cpp
+einstein.cpp
+elecbowl.cpp
+electron.cpp
+elekscmp.cpp
+elf.cpp
+elwro800.cpp
+enmirage.cpp
+ep64.cpp
+esq1.cpp
+esq5505.cpp
+esqasr.cpp
+esqkt.cpp
+esqmr.cpp
+et3400.cpp
+eti660.cpp
+europc.cpp
+evmbug.cpp
+excali64.cpp
+exelv.cpp
+exp85.cpp
+fanucs15.cpp
+fanucspmg.cpp
+fb01.cpp
+fc100.cpp
+fidel6502.cpp
+fidel68k.cpp
+fidelz80.cpp
+fk1.cpp
+fm7.cpp
+fmtowns.cpp
+force68k.cpp
+fp1100.cpp
+fp200.cpp
+fp6000.cpp
+ft68m.cpp
+galaxy.cpp
+galeb.cpp
+gamate.cpp
+gamecom.cpp
+gameking.cpp
+gamepock.cpp
+gb.cpp
+gba.cpp
+geneve.cpp
+geniusiq.cpp
+genpc.cpp
+gimix.cpp
+gizmondo.cpp
+glasgow.cpp
+gmaster.cpp
+goupil.cpp
+gp2x.cpp
+gp32.cpp
+grfd2301.cpp
+h19.cpp
+h8.cpp
+h89.cpp
+harriet.cpp
+hec2hrp.cpp
+hh_cop400.cpp
+hh_hmcs40.cpp
+hh_melps4.cpp
+hh_pic16.cpp
+hh_sm510.cpp
+hh_tms1k.cpp
+hh_ucom4.cpp
+hk68v10.cpp
+homelab.cpp
+homez80.cpp
+horizon.cpp
+hp_ipc.cpp
+hp16500.cpp
+hp48.cpp
+hp49gp.cpp
+hp64k.cpp
+hp9845.cpp
+hp9k.cpp
+hp9k_3xx.cpp
+hprot1.cpp
+hpz80unk.cpp
+ht68k.cpp
+huebler.cpp
+hunter2.cpp
+hx20.cpp
+hyperscan.cpp
+i7000.cpp
+ibm6580.cpp
+ibmpc.cpp
+ibmpcjr.cpp
+icatel.cpp
+ie15.cpp
+if800.cpp
+imds.cpp
+imds2.cpp
+imsai.cpp
+indiana.cpp
+indigo.cpp
+indy_indigo2.cpp
+instruct.cpp
+interact.cpp
+intv.cpp
+ipc.cpp
+ipds.cpp
+iq151.cpp
+iris3130.cpp
+irisha.cpp
+isbc.cpp
+iskr103x.cpp
+itt3030.cpp
+jade.cpp
+jaguar.cpp
+jonos.cpp
+jr100.cpp
+jr200.cpp
+jtc.cpp
+juicebox.cpp
+junior.cpp
+jupace.cpp
+jupiter.cpp
+k1003.cpp
+k28.cpp
+k8915.cpp
+kaypro.cpp
+kc.cpp
+kim1.cpp
+konamim2.cpp
+konin.cpp
+kramermc.cpp
+kyocera.cpp
+laser3k.cpp
+lc80.cpp
+lcmate2.cpp
+leapster.cpp
+lft.cpp
+lg-dvd.cpp
+lisa.cpp
+llc.cpp
+lola8a.cpp
+lviv.cpp
+lynx.cpp
+m20.cpp
+m24.cpp
+m5.cpp
+m6805evs.cpp
+m79152pc.cpp
+mac.cpp
+macpci.cpp
+marywu.cpp
+mbc200.cpp
+mbc55x.cpp
+mbdtower.cpp
+mbee.cpp
+mc10.cpp
+mc1000.cpp
+mc1502.cpp
+mc80.cpp
+mcb216.cpp
+mccpm.cpp
+megadriv.cpp
+mekd2.cpp
+mephisto.cpp
+mes.cpp
+mice.cpp
+micral.cpp
+microdec.cpp
+microkit.cpp
+micronic.cpp
+microtan.cpp
+microvsn.cpp
+mikro80.cpp
+mikromik.cpp
+mikrosha.cpp
+mini2440.cpp
+minicom.cpp
+mits680b.cpp
+mk1.cpp
+mk14.cpp
+mk2.cpp
+mk85.cpp
+mk90.cpp
+mkit09.cpp
+mmd1.cpp
+mmodular.cpp
+mod8.cpp
+modellot.cpp
+molecular.cpp
+monty.cpp
+mpf1.cpp
+mps1230.cpp
+mpz80.cpp
+ms0515.cpp
+ms9540.cpp
+msbc1.cpp
+mstation.cpp
+msx.cpp
+mt735.cpp
+mtx.cpp
+multi16.cpp
+multi8.cpp
+mx2178.cpp
+myb3k.cpp
+mycom.cpp
+myvision.cpp
+mz2000.cpp
+mz2500.cpp
+mz3500.cpp
+mz6500.cpp
+mz700.cpp
+mz80.cpp
+mzr8105.cpp
+n64.cpp
+nakajies.cpp
+nanos.cpp
+nascom1.cpp
+nc.cpp
+nes.cpp
+newbrain.cpp
+next.cpp
+ng_aes.cpp
+ngen.cpp
+ngp.cpp
+nokia_3310.cpp
+notetaker.cpp
+ob68k1a.cpp
+octopus.cpp
+odyssey2.cpp
+okean240.cpp
+ondra.cpp
+onyx.cpp
+orao.cpp
+oric.cpp
+orion.cpp
+osbexec.cpp
+osborne1.cpp
+osi.cpp
+p112.cpp
+p2000t.cpp
+p8k.cpp
+palm.cpp
+palmz22.cpp
+partner.cpp
+paso1600.cpp
+pasogo.cpp
+pasopia.cpp
+pasopia7.cpp
+patinho_feio.cpp
+pb1000.cpp
+pc.cpp
+pc100.cpp
+pc1500.cpp
+pc1512.cpp
+pc2000.cpp
+pc4.cpp
+pc6001.cpp
+pc8001.cpp
+pc8401a.cpp
+pc8801.cpp
+pc88va.cpp
+pc9801.cpp
+pcd.cpp
+pce.cpp
+pce220.cpp
+pcfx.cpp
+pcm.cpp
+pcw.cpp
+pcw16.cpp
+pda600.cpp
+pdp1.cpp
+pdp11.cpp
+pecom.cpp
+pegasus.cpp
+pencil2.cpp
+pentagon.cpp
+peoplepc.cpp
+pes.cpp
+pet.cpp
+phc25.cpp
+phunsy.cpp
+pimps.cpp
+pipbug.cpp
+pitagjr.cpp
+pk8000.cpp
+pk8020.cpp
+plan80.cpp
+plus4.cpp
+pm68k.cpp
+pmd85.cpp
+pmi80.cpp
+pocketc.cpp
+pockstat.cpp
+poisk1.cpp
+pokemini.cpp
+poly.cpp
+poly88.cpp
+poly880.cpp
+portfoli.cpp
+pp01.cpp
+prestige.cpp
+primo.cpp
+pro80.cpp
+prof180x.cpp
+prof80.cpp
+prophet600.cpp
+proteus3.cpp
+ps2.cpp
+psion.cpp
+psx.cpp
+pt68k4.cpp
+ptcsol.cpp
+pulsar.cpp
+pv1000.cpp
+pv2000.cpp
+pv9234.cpp
+pve500.cpp
+px4.cpp
+px8.cpp
+pyl601.cpp
+ql.cpp
+qtsbc.cpp
+qx10.cpp
+r9751.cpp
+radio86.cpp
+rainbow.cpp
+rambo.cpp
+ravens.cpp
+rc759.cpp
+rd100.cpp
+rd110.cpp
+replicator.cpp
+rex6000.cpp
+riscpc.cpp
+rm380z.cpp
+rmnimbus.cpp
+rmt32.cpp
+rsc55.cpp
+rt1715.cpp
+rvoice.cpp
+rx78.cpp
+sacstate.cpp
+sage2.cpp
+samcoupe.cpp
+sansa_fuze.cpp
+sapi1.cpp
+saturn.cpp
+savia84.cpp
+sbc6510.cpp
+sbrain.cpp
+sc1.cpp
+sc2.cpp
+scorpion.cpp
+scv.cpp
+sdk80.cpp
+sdk85.cpp
+sdk86.cpp
+seattlecmp.cpp
+sega_sawatte.cpp
+segapico.cpp
+segapm.cpp
+selz80.cpp
+sg1000.cpp
+sh4robot.cpp
+sitcom.cpp
+slc1.cpp
+slicer.cpp
+sm1800.cpp
+smc777.cpp
+sms.cpp
+snes.cpp
+socrates.cpp
+softbox.cpp
+sorcerer.cpp
+spc1000.cpp
+spc1500.cpp
+spec128.cpp
+special.cpp
+specpls3.cpp
+spectrum.cpp
+squale.cpp
+ssem.cpp
+ssystem3.cpp
+st17xx.cpp
+stratos.cpp
+studio2.cpp
+sun1.cpp
+sun2.cpp
+sun3.cpp
+sun4.cpp
+super6.cpp
+super80.cpp
+supercon.cpp
+superslave.cpp
+supracan.cpp
+sv8000.cpp
+svi318.cpp
+svision.cpp
+svmu.cpp
+swtpc.cpp
+swtpc09.cpp
+swyft.cpp
+sym1.cpp
+sys2900.cpp
+systec.cpp
+tamag1.cpp
+tandy1t.cpp
+tandy2k.cpp
+tavernie.cpp
+tb303.cpp
+tdv2324.cpp
+tec1.cpp
+tecnbras.cpp
+tek405x.cpp
+tek410x.cpp
+tekxp33x.cpp
+terak.cpp
+test_t400.cpp
+thomson.cpp
+ti630.cpp
+ti74.cpp
+ti85.cpp
+ti89.cpp
+ti99_2.cpp
+ti99_4p.cpp
+ti99_4x.cpp
+ti99_8.cpp
+ti990_10.cpp
+ti990_4.cpp
+ticalc1x.cpp
+tiki100.cpp
+tim011.cpp
+tim100.cpp
+timex.cpp
+tispeak.cpp
+tispellb.cpp
+tk2000.cpp
+tk80.cpp
+tk80bs.cpp
+tm990189.cpp
+tmc1800.cpp
+tmc2000e.cpp
+tmc600.cpp
+tr606.cpp
+tricep.cpp
+trs80.cpp
+trs80m2.cpp
+ts802.cpp
+ts803.cpp
+ts816.cpp
+tsispch.cpp
+tutor.cpp
+tv950.cpp
+tvc.cpp
+tvgame.cpp
+tx0.cpp
+uknc.cpp
+unichamp.cpp
+unior.cpp
+unistar.cpp
+univac.cpp
+unixpc.cpp
+ut88.cpp
+uzebox.cpp
+v1050.cpp
+v6809.cpp
+vax11.cpp
+vboy.cpp
+vc4000.cpp
+vcs80.cpp
+vector06.cpp
+vector4.cpp
+vectrex.cpp
+vg5k.cpp
+vic10.cpp
+vic20.cpp
+victor9k.cpp
+vidbrain.cpp
+vii.cpp
+vip.cpp
+vixen.cpp
+vk100.cpp
+votrpss.cpp
+votrtnt.cpp
+vt100.cpp
+vt220.cpp
+vt240.cpp
+vt320.cpp
+vt520.cpp
+vta2000.cpp
+vtech1.cpp
+vtech2.cpp
+wangpc.cpp
+wicat.cpp
+wildfire.cpp
+wswan.cpp
+x07.cpp
+x1.cpp
+x1twin.cpp
+x68k.cpp
+xavix.cpp
+xbox.cpp
+xerox820.cpp
+xor100.cpp
+ymmu100.cpp
+z100.cpp
+z1013.cpp
+z80dev.cpp
+z80ne.cpp
+z88.cpp
+z9001.cpp
+zapcomputer.cpp
+zaurus.cpp
+zexall.cpp
+zorba.cpp
+zrt80.cpp
+zsbc3.cpp
+zx.cpp
diff --git a/src/mame/mess.lst b/src/mame/mess.lst
deleted file mode 100644
index 0d6cdc46abb..00000000000
--- a/src/mame/mess.lst
+++ /dev/null
@@ -1,2865 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-/******************************************************************************
-
- mess.lst
-
- List of all enabled drivers in the system. This file is parsed by
- makelist.exe, sorted, and output as C code describing the drivers.
-
-******************************************************************************/
-
-// 3DO
-3do // 3DO consoles
-3do_pal
-3do_m2
-
-// Atari
-a2600 // Atari 2600
-a2600p // Atari 2600 PAL
-a5200 // Atari 5200
-a7800 // Atari 7800 NTSC
-a7800p // Atari 7800 PAL
-lynx // Atari Lynx Handheld
-//lynx2 // Atari Lynx II Handheld redesigned, no additions
-jaguar // Atari Jaguar
-jaguarcd // Atari Jaguar CD
-
-//BancTec
-banctec // BancTec ESeries panel
-
-// Nintendo
-nes // Nintendo Entertainment System
-nespal // Nintendo Entertainment System PAL
-m82 // Nintendo M82 Display Unit
-famicom // Nintendo Family Computer (a.k.a. Famicom)
-fds // Nintendo Family Computer (a.k.a. Famicom) + Disk System add-on
-famitwin // Sharp Famicom Twin System
-drpcjr // Bung Doctor PC Jr
-dendy // Dendy (Classic russian famiclone)
-gchinatv // Golden China TV Game Centre (Chinese famiclone)
-gameboy // Nintendo Game Boy Handheld
-supergb // Nintendo Super Game Boy SNES Cartridge
-supergb2
-gbpocket // Nintendo Game Boy Pocket Handheld
-gbcolor // Nintendo Game Boy Color Handheld
-gba // Nintendo Game Boy Advance Handheld
-snes // Nintendo Super Nintendo NTSC
-snespal // Nintendo Super Nintendo PAL
-n64 // Nintendo N64
-n64dd // Nintendo N64 (64DD Attachment)
-pokemini // Nintendo Pokemon Mini
-
-megaduck // Megaduck
-
-// SEGA
-sg1000 // Sega SG-1000 (Japan)
-sg1000m2 // Sega SG-1000 Mark II (Japan)
-sc3000 // Sega SC-3000 (Japan)
-sc3000h // Sega SC-3000H (Japan)
-sf7000 // Sega SC-3000 w/ SF-7000 (Japan)
-omv1000 // Tsukuda Original Othello Multivision FG-1000
-omv2000 // Tsukuda Original Othello Multivision FG-2000
-
-gamegear // Sega GameGear
-gamegeaj // Sega GameGear (Japan)
-sms // Sega Master System II (NTSC)
-sms1 // Sega Master System I (NTSC)
-sms1pal // Sega Master System I (PAL)
-smspal // Sega Master System II (PAL)
-smsj // Sega Master System (Japan) with FM Chip
-sg1000m3 // Sega SG-1000 Mark III (Japan)
-sms1krfm // Samsung Gam*Boy I (Korea) with FM Chip
-sms1kr // Samsung Gam*Boy I (Korea)
-smskr // Samsung Gam*Boy II (Korea)
-smssdisp // Sega Master System Store Display Unit
-
-megadrij // 1988 Sega Mega Drive (Japan)
-genesis // 1989 Sega Genesis (USA)
-megadriv // 1990 Sega Mega Drive (Europe)
-genesis_tmss //
-pico // 1994 Sega Pico (Europe)
-picou // 1994 Sega Pico (USA)
-picoj // 1993 Sega Pico (Japan)
-copera // 1993 Sega / Yamaha
-sawatte //
-segacd // 1992 Sega Sega CD (USA)
-megacd // 1993 Sega Mega-CD (Europe)
-megacda // 1993 Sega Mega-CD (Asia)
-megacdj // 1991 Sega Mega-CD (Japan)
-segacd2 // 1993 Sega Sega CD 2 (USA)
-megacd2 // 1993 Sega Mega-CD 2 (Europe)
-megacd2j // 1993 Sega Mega-CD 2 (Japan)
-laseract // 1993 Pioneer LaserActive (USA)
-laseractj // 1993 Pioneer LaserActive (Japan)
-xeye // 1993 JVC X'eye (USA)
-wmega // 1992 Sega Wondermega (Japan)
-wmegam2 // 1993 Victor Wondermega M2 (Japan)
-aiwamcd // 1994 AIWA Mega-CD CSD-G1M (Japan)
-cdx // 1994 Sega CDX (USA)
-multmega // 1994 Sega Multi-Mega (Europe)
-32x // 1994 Sega 32X (USA)
-32xe
-32xj
-32x_scd // 1994 Sega Sega CD (USA w/32X addon)
-32x_mcd // 1995 Sega Mega-CD (Europe w/32X addon)
-32x_mcdj // 1994 Sega Mega-CD (Japan w/32X addon)
-segapm // 1996 Sega Picture Magic (32x type hardware)
-
-saturnjp // 1994 Sega Saturn (Japan)
-saturn // 1995 Sega Saturn (USA)
-saturneu // 1995 Sega Saturn (Europe)
-vsaturn // JVC V-Saturn
-hisaturn // Hitachi HiSaturn
-
-dcjp // 1998 Sega Dreamcast (Japan)
-dc // 1999 Sega Dreamcast (USA)
-dceu // 1999 Sega Dreamcast (Europe)
-dcdev // 1998 Sega HKT-0120 Sega Dreamcast Development Box
-
-svmu // 1998 Sega Visual Memory Unit
-
-// Sequential Circuits
-prpht600 // 1983 Sequential Circuits
-
-// Sony
-psj // 1994 Sony PlayStation (Japan)
-psu // 1995 Sony PlayStation (USA)
-pse // 1995 Sony PlayStation (Europe)
-psa // 1995 Sony PlayStation (Asia-Pacific)
-pockstat // 1999 Sony PocketStation
-pve500 // SONY PVE-500
-
-// Bally
-astrocde // Bally Professional Arcade / Astrocade
-astrocdl // Bally Home Library Computer
-astrocdw // Bally Computer System (white case)
-
-// RCA
-microkit
-vip // 1977 Cosmac VIP VP-711
-vp111 // 1977 Cosmac VIP VP-111
-studio2 // 1977 Studio II
-visicom
-mpt02
-eti660
-mpt02h
-mtc9016 // 1978 Mustang 9016 Telespiel Computer
-shmc1200
-cm1200
-apollo80
-d6800 // Dream 6800
-
-// Ensoniq
-enmirage // 1985 Mirage Digital Multi-Sampler
-esq1 // 1986 ESQ-1 Digital Wave Synthesizer
-esqm // 1986 ESQ-M rack-mount ESQ-1
-sq80 // 1988 SQ-80 Digital Wave Synthesizer
-eps // 1988 EPS
-vfx // 1989 VFX
-vfxsd // 1989 VFX-SD
-eps16p // 1990 EPS 16 Plus
-sd1 // 1990 SD-1
-sq1 // 1990 SQ-1
-sqrack // 1990 SQ-Rack
-sd132 // 1991 SD-1 32
-asr10 // 1992 ASR-10
-kt76 // 1996 KT-76
-mr61 // 1996 MR-61
-mrrack // 1996 MR-Rack
-asrx // 1997 ASR-X
-
-// Fairchild
-channelf // Fairchild Channel F VES - 1976
-sabavdpl // SABA Videoplay - 1977 (PAL)
-luxorves // Luxor Video Entertainment System (PAL)
-channlf2 // Fairchild Channel F II - 1978
-sabavpl2 // SABA Videoplay 2 (PAL)
-luxorvec // Luxor Video Entertainment Computer (PAL)
-itttelma // ITT Tele-Match Processor (PAL)
-ingtelma // Ingelen Tele-Match Processor (PAL)
-
-// Casio
-pv1000 // Casio PV-1000
-pv2000 // Casio PV-2000
-pb1000 // Casio PB-1000
-pb2000c // Casio PB-2000C
-ai1000 // Casio AI-1000
-cfx9850 // Casio CFX-9850
-
-// Coleco
-coleco // ColecoVision (Original BIOS)
-colecop // Colecovision PAL (Italy)
-svi603 // Spectravideo SVI-603 Coleco Game Adapter
-czz50 // Bit Corporation Chuang Zao Zhe 50
-dina // Telegames Dina
-prsarcde // Telegames Personal Arcade
-adam // Coleco Adam
-onyx // Microdigital ONYX (Brazilian Coleco clone / unreleased prototype)
-
-// NEC
-pce // PC/Engine NEC 1987-1993
-tg16 // Turbo Grafix-16 NEC 1989-1993
-sgx // SuperGrafX NEC 1989
-pcfx // PC-FX NEC 1994
-pcfxga // PC-FX NEC 199? (PC-FX on a PC ISA Card)
-
-// Arcadia 2001 family
-advsnha // Advision Home Arcade
-bndarc // Bandai Arcadia
-arcadia // Emerson Arcadia 2001
-tccosmos // Tele-Computer Cosmos
-dynavisn // Dynavision
-ekusera // Ekusera
-hanihac // Hanimex Home Arcade Centre
-hmg2650 // Hanimex HMG-2650
-intmpt03 // Intelligent Game MPT-03
-ixl2000 // Intercord XL 2000 System
-intervsn // Intervision 2001
-itmcmtp3 // ITMC MPT-03
-lvision // Leisure-Vision
-leonardo // Leonardo
-mratlus // Mr. Altus Tele Brain
-ormatu // Ormatu 2001
-plldium // Palladium Video-Computer-Game
-polyvcg // Polybrain Video Computer Game
-poppympt // Poppy MPT-03 Tele Computer Spiel
-prestmpt // Prestige Video Computer Game MPT-03
-rowtrn2k // Rowtron 2000
-tvg2000 // Schmid TVG 2000
-sheenhvc // Sheen Home Video Centre 2001
-soundic // Soundic MPT-03
-telefevr // Tchibo Tele-Fever
-tempestm // Tempest MPT-03
-tbbympt3 // Tobby MPT-03
-trakcvg // Trakton Computer Video Game
-tunixha // Tunix Home Arcade
-tryomvgc // Tryom Video Game Center
-orbituvi // UVI Compu-Game
-vdmaster // Video Master
-
-// Radofin 1292 Advanced Programmable Video System family
-vc4000 // Interton vc4000
-spc4000
-cx3000tc
-tvc4000
-1292apvs
-1392apvs
-mpu1000
-mpu2000
-pp1292
-pp1392
-f1392
-fforce2
-hmg1292
-hmg1392
-lnsy1392
-vc6000
-database
-vmdtbase
-rwtrntcs
-telngtcs
-krvnjvtv
-oc2000
-mpt05
-h21 // TRQ Video Computer H-21
-
-
-// Game Park
-gp32 // GP32 2001
-gp2x // GP2X 2005
-
-// GCE
-vectrex // General Consumer Electric Vectrex - 1982-1984
-// (aka Milton-Bradley Vectrex)
-
-// Mattel
-intv // Mattel Intellivision - 1979 AKA INTV
-intv2 // Mattel Intellivision II- 1982?
-intvsrs // Intellivision (Sears License) - 19??
-intvoice // Mattel Intellivision + IntelliVoice expansion - 1982
-
-// Capcom
-sfach // CPS Changer (Street Fighter Alpha)
-sfzbch // CPS Changer (Street Fighter ZERO Brazil)
-sfzch // CPS Changer (Street Fighter ZERO)
-wofch // CPS Changer (Tenchi Wo Kurau II)
-
-// Magnavox
-odyssey2 // Magnavox Odyssey 2 - 1978-1983
-odyssey3 // Magnavox Odyssey 3 / Command Center (prototype)
-
-// Makerbot
-replica1 // Makerbot Replicator 1 desktop 3d printer
-
-// Metamaquina
-metamaq2 // Metamaquina 2 desktop 3d printer
-
-// Hartung, Watara, ...
-gmaster // Hartung Gamemaster
-
-// Watara
-svision // Supervision Handheld
-svisions
-svisionp
-svisionn
-tvlinkp
-
-// BANDAI
-sv8000 // Super Vision 8000
-wswan // Bandai WonderSwan Handheld
-wscolor // Bandai WonderSwan Color Handheld
-
-// EPOCH
-gamepock // Epoch Game Pocket Computer
-
-// Bit Corp
-gamate // Bit Corp Gamate
-
-// KOEI
-pasogo // KOEI PasoGo
-
-// SNK
-ngp // NeoGeo Pocket
-ngpc // NeoGeo Pocket Color
-aes // NeoGeo AES
-neocd // NeoGeo CD
-neocdz // NeoGeo CDZ
-neocdzj //
-
-// Philips
-cdimono1 // Philips CD-i model 200 (Mono-I board, PAL)
-cdimono2 // Philips CD-i model 220 (Mono-II board, NTSC)
-cdi910 //
-cdi490a //
-
-// Yamaha
-mu100 // 1997 MU-100
-mu100r // 1997 MU-100 Rackable version
-fb01 // 1986 FB-01
-
-// Roland
-mt32
-cm32l
-d110
-sc55 // 1991 Sound Canvas SC-55
-
-//***************COMPUTERS**************************************************
-
-// Acorn
-acrnsys1 // 1979 Acorn System 1 (Microcomputer Kit)
-a6809
-atom // 1979 Acorn Atom
-atomeb // 1979 Acorn Atom
-atombb // 1979 Acorn Atom
-//prophet2
-bbca // 1981 BBC Micro Model A
-bbcb // 1981 BBC Micro Model B w/8271 FDC
-torchf // 1982 Torch CF240
-torchh10 // 1982 Torch CH240/10
-torchh21 // 1982 Torch CH240/21
-bbcb_de // 1982 BBC Micro Model B (German)
-bbcb_us // 1983 BBC Micro Model B (US)
-electron // 1983 Acorn Electron
-bbcb1770 // 1984 BBC Micro Model B w/1770 FDC
-bbcbp // 1985 BBC Micro Model B+ 64K
-bbcbp128 // 1985 BBC Micro Model B+ 128K
-abc110 // 1985 ABC 110
-acw443 // 1985 ABC 210/Cambridge Workstation
-abc310 // 1985 ABC 310
-reutapm // 1985 Reuters APM Board
-bbcm // 1986 BBC Master 128
-bbcmt // 1986 BBC Master Turbo
-bbcmaiv // 1986 BBC Master AIV
-bbcmet // 1986 BBC Master ET
-bbcm512 // 1986 BBC Master 512
-bbcmarm // 1986 ARM Evaluation System
-bbcmc // 1986 BBC Master Compact
-bbcmc_ar // 1986 BBC Master Compact (Arabic)
-pro128s // 1987 Olivetti Prodest PC 128S
-bbcbc // 1985 BBC Bridge Companion
-a310 // 1988 Acorn Archimedes 310
-a3010 // 1988 Acorn Archimedes 3010
-a3020 // 1988 Acorn Archimedes 3020
-a7000 // 1995 Acorn Archimedes 7000
-a7000p // 1997 Acorn Archimedes 7000+
-rpc600
-rpc700
-sarpc
-sarpc_j233
-
-// ACT
-apricot // 1983 ACT
-apricotxi // 1984 ACT
-f1
-f1e
-f2
-f10
-fp
-
-// Cambridge Computers
-z88 // Z88 (UK)
-z88de // Z88 (German)
-z88es // Z88 (Spanish)
-z88fr // Z88 (French)
-z88it // Z88 (Italian)
-z88se // Z88 (Swedish)
-z88fi // Z88 (Finnish)
-z88no // Z88 (Norwegian)
-z88dk // Z88 (Danish)
-z88ch // Z88 (Swiss)
-z88tr // Z88 (Turkish)
-
-// Amstrad / Schneider
-cpc464 // Amstrad (Schneider in Germany) 1984
-cpc664 // Amstrad (Schneider in Germany) 1985
-cpc6128 // Amstrad (Schneider in Germany) 1985
-cpc6128s // Amstrad (Schneider in Germany) 1985
-cpc6128f // Amstrad (Schneider in Germany) 1985 (AZERTY)
-cpc464p // Amstrad CPC464 Plus - 1990
-cpc6128p // Amstrad CPC6128 Plus - 1990
-gx4000 // Amstrad GX4000 - 1990
-kccomp // VEB KC compact
-al520ex // Patisonic Aleste 520EX (1993)
-pcw8256 // 198? PCW8256
-pcw8512 // 198? PCW8512
-pcw9256 // 198? PCW9256
-pcw9512 // 198? PCW9512 (+)
-pcw10 // 198? PCW10
-pcw16 // 1995 PCW16
-nc100 // 1992 NC100
-dw225
-nc150 // 1992 NC150
-nc200 // 1993 NC200
-
-// Apollo
-dn3500 // Apollo Workstation DN3500 15" Color (1989)
-dn3500_19i // Apollo Workstation DN3500 19" Monochrome (1989)
-dsp3500 // Apollo Server DSP3500 (1989)
-dn3000 // Apollo Workstation DN3000 15" Color (1988)
-dn3000_19i // Apollo Workstation DN3000 19" Monochrome (1987)
-dsp3000 // Apollo Server DSP3000 (1987)
-dn5500 // Apollo Workstation DN5500 15" Color (1991)
-dn5500_19i // Apollo Workstation DN5500 19" Monochrome (1991)
-dsp5500 // Apollo Server DSP5500 (1991)
-
-// Apple
-apple1 // Jul 1976 Apple 1
-apple2 // Apr 1977 Apple ][
-apple2p // Jun 1979 Apple ][+
-elppa // 198? Victor do Brasil Elppa II+
-maxxi // 1982 Polymax Maxxi
-prav82 // Pravetz 82
-prav8m // Pravetz 8M
-uniap2en // 1982 Unitron AP II (in English)
-uniap2pt // 1982 Unitron AP II (in Brazilian Portuguese)
-uniap2ti // 1982 Unitron AP II+ (Teclado Inteligente)
-microeng // 1982 Micro Engenho (Brazilian Apple2 clone) - Spectrum/SCOPUS
-apple2jp // ??? ???? Apple ][j+
-apple2e // Jan 1983 Apple //e
-apple2euk // Jan 1983 Apple //e (UK)
-mprof3 // Microprofessor III
-apple2ee // Mar 1985 Apple //e Enhanced
-apple2eeuk // Mar 1985 Apple //e Enhanced (UK)
-apple2ep // Jan 1987 Apple //e Platinum
-apple2c // Apr 1984 Apple //c
-tk2000 // Microdigital TK2000
-tk3000 // Microdigital TK3000
-prav8c // Pravetz 8C
-apple2c0 // ??? 1985 Apple //c (3.5 ROM)
-apple2c3 // Sep 1986 Apple //c (Original Mem. Exp.)
-apple2c4 // ??? 198? Apple //c (rev 4)
-apple2cp // Sep 1988 Apple //c+
-apple2gsr0p // June 19, 1986 Apple IIgs ROM00 prototype
-apple2gsr0p2 // March 10, 1986 Apple IIgs ROM00 prototype
-apple2gsr0 // Sep 1986 Apple IIgs ROM00
-apple2gsr1 // Sep 1987 Apple IIgs ROM01
-apple2gs // Aug 1989 Apple IIgs ROM03
-apple2gsr3p // ??? 198? Apple IIgs ROM03 prototype
-apple2gsr3lp // ??? 1989 Apple IIgs ROM03 late? prototype
-apple3 // May 1980 Apple ///
-// Dec 1983 Apple ///+
-ace100 // ??? 1982 Franklin Ace 100
-laser128 // ??? 1987 Laser 128
-las128ex // ??? 1988 Laser 128 EX
-las128e2 // ??? Laser 128 EX2
-ivelultr // Ivasim Ivel Ultra
-agat7 // Agat-7
-agat9 // Agat-9
-space84 // 1985 IBS/ComputerTechnik Space 84
-am64 // 1985 ASEM AM 64 (motherboard is marked AM-100 but it boots as "AM 64")
-//laba2p // Lab equipment Apple II Plus Clone
-
-// Lisa January 1983
-// Lisa 2 January 1984
-// Macintosh XL January 1985
-
-lisa // 1983 Apple Lisa
-lisa2 // 1984 Apple Lisa 2
-lisa210 // 1984 Apple Lisa 2/10
-macxl // 1985 Apple Macintosh XL
-
-// Macintosh January 1984
-// Macintosh 512k July? 1984
-// Macintosh 512ke April 1986
-// Macintosh Plus January 1986
-// Macintosh SE March 1987
-// Macintosh II March 1987
-
-//mactw // Macintosh (4.3T Prototype) - missing roms?
-mac128k // 1984 Apple Macintosh
-mac512k // 1985 Apple Macintosh 512k
-mac512ke // 1986 Apple Macintosh 512ke
-unitron // 1985 Unitron
-macplus // 1986 Apple Macintosh Plus
-macse // 1987 Apple Macintosh SE
-macii // 1987 Apple Macintosh II
-maciihmu // 1987 Apple Macintosh II (w/o 68851 MMU)
-macsefd // 1988 Apple Macintosh SE (FDHD)
-mac2fdhd // 1988 Apple Macintosh II (FDHD)
-maciix // 1988 Apple Macintosh IIx
-macprtb // 1989 Apple Macintosh Portable
-macse30 // 1989 Apple Macintosh SE/30
-maciicx // 1989 Apple Macintosh IIcx
-maciici // 1989 Apple Macintosh IIci
-maciifx // 1990 Apple Macintosh IIfx
-macclasc // 1990 Apple Macintosh Classic
-maclc // 1990 Apple Macintosh LC
-maciisi // 1990 Apple Macintosh IIsi
-macpb100 // 1991 Apple Macintosh PowerBook 100
-macpb140 // 1991 Apple Macintosh PowerBook 140
-macpb170 // 1991 Apple Macintosh PowerBook 170
-macqd700 // 1991 Apple Macintosh Quadra 700
-macclas2 // 1991 Apple Macintosh Classic II
-maclc2 // 1991 Apple Macintosh LC II
-macpb145 // 1992 Apple Macintosh PowerBook 145
-macpb160 // 1992 Apple Macintosh PowerBook 160
-macpb180 // 1992 Apple Macintosh PowerBook 180
-macpb180c // 1992 Apple Macintosh PowerBook 180c
-macpd210 // 1992 Apple Macintosh PowerBook Duo 210
-maccclas // 1993 Apple Macintosh Color Classic
-macpb145b // 1993 Apple Macintosh PowerBook 145B
-maclc3 // 1993 Apple Macintosh LC III
-maciivx // 1993 Apple Macintosh IIvx
-maciivi // 1993 Apple Macintosh IIvi
-maclc520 // 1993 Apple Macintosh LC 520
-pmac6100 // 1993 Apple Power Macintosh 6100
-
-// Atari
-a400 // 1979 Atari 400
-a400pal // 1979 Atari 400 PAL
-a800 // 1979 Atari 800
-a800pal // 1979 Atari 800 PAL
-a1200xl // 1982 Atari 1200 XL
-a600xl // 1983 Atari 600 XL
-a800xl // 1983 Atari 800 XL
-a800xlp // 1983 Atari 800 XL (PAL)
-a65xe // 1986 Atari 65 XE (XL Extended)
-a65xea // 1986? Atari 65 XE Arabic
-a130xe // 1986 Atari 130 XE
-a800xe // 1986 Atari 800 XE
-xegs // 1987 Atari XE Game System
-st // Atari ST
-st_uk
-st_de
-st_es
-st_nl
-st_fr
-st_se
-st_sg
-megast // Atari Mega ST
-megast_uk
-megast_de
-megast_fr
-megast_se
-megast_sg
-//stacy // Atari STacy
-ste // Atari STe
-ste_uk
-ste_de
-ste_es
-ste_fr
-ste_it
-ste_se
-ste_sg
-//stbook // Atari STBook
-megaste // Atari Mega STe
-megaste_uk
-megaste_de
-megaste_es
-megaste_fr
-megaste_it
-megaste_se
-//stpad // Atari STPad (prototype)
-tt030 // Atari TT030
-tt030_uk
-tt030_de
-tt030_fr
-tt030_pl
-//fx1 // Atari FX-1 (prototype)
-falcon30 // Atari Falcon030
-falcon40 // Atari Falcon040 (prototype)
-
-// AT&T
-3b1 // 3B1 "Unix PC"
-
-// Commodore
-kim1 // Commodore (MOS) KIM-1 1975
-sym1 // Synertek SYM-1
-aim65 // Rockwell AIM65
-aim65_40 // Rockwell AIM65/40
-
-pet2001
-pet20018
-pet2001n
-pet2001n16
-pet2001n32
-cbm3008
-cbm3016
-cbm3032
-pet2001b
-pet2001b16
-pet2001b32
-cbm3032b
-pet4016
-pet4032
-pet4032f
-cbm4016
-cbm4032
-cbm4032f
-pet4032b
-cbm4032b
-pet8032
-cbm8032
-cbm8032_de
-cbm8032_fr
-cbm8032_se
-superpet
-mmf9000
-mmf9000_se
-cbm8096
-cbm8296
-cbm8296ed
-cbm8296d
-cbm8296d_de
-cbm8296gd
-cbm8296dgv_de
-
-vic1001 // Commodore VIC-1001 (Japan)
-vic20 // Commodore VIC 20 (NTSC)
-vic20p // Commodore VIC 20 (PAL)
-vic20_se // Commodore VIC 20 (Swedish Expanson Kit)
-
-vic10 // Commodore Max Machine (Japan)
-c64
-c64p // Commodore 64 (PAL)
-c64_jp // Commodore 64 (Japan)
-c64_se // Commodore 64 (Sweden)
-pet64 // Commodore PET 64
-edu64 // Commodore Educator 64
-//clipper // C64 in a briefcase with 3" floppy, electroluminescent flat screen, thermal printer - roms needed - not in driver
-sx64
-sx64p
-vip64 // Commodore VIP64 (SX64, PAL, Swedish)
-dx64 // Commodore DX-64 - Prototype
-tesa6240
-c64c
-c64cp // Commodore 64C (PAL)
-c64c_es
-c64c_se
-c64g // Commodore 64G (PAL)
-c64gs // Commodore 64 Games System
-c64dtv // Commodore 64 Direct-to-TV
-clcd // Commodore LCD
-
-b500 // Commodore B500
-b128 // Commodore B128
-b256 // Commodore B256
-cbm610 // Commodore CBM 610
-cbm620 // Commodore CBM 620
-cbm620_hu // Commodore CBM 620 (Hungary)
-b128hp // Commodore B128HP
-b256hp // Commodore B256HP
-bx256hp // Commodore BX256HP
-cbm710 // Commodore CBM 710
-cbm720 // Commodore CBM 720
-cbm720_de
-cbm720_se // Commodore CBM 720 (Sweden / Finland)
-cbm730
-p500 // Commodore P500 (proto, a.k.a. C128-40, PET-II)
-p500p
-
-c264
-plus4
-plus4p
-c16
-c16p
-c16_hu
-c116
-c232
-v364
-
-c128
-c128p
-c128_de
-//c128_fr
-//c128_no
-c128_se
-c128d
-c128dp
-c128cr
-c128dcr
-c128dcrp
-c128dcr_de
-//c128dcr_it
-c128dcr_se
-c128d81
-
-a1000 // Commodore Amiga 1000
-a1000n
-a2000 // Commodore Amiga 2000
-a2000n
-a500 // Commodore Amiga 500
-a500n
-cdtv // Commodore CDTV
-cdtvn
-a3000 // Commodore Amiga 3000
-a3000n
-a500p // Commodore Amiga 500 Plus
-a500pn
-a600 // Commodore Amiga 600
-a600n
-a1200 // Commodore Amiga 1200
-a1200n
-a4000 // Commodore Amiga 4000/040
-a4000n
-a400030 // Commodore Amiga 4000/030
-a400030n
-cd32 // Commodore Amiga CD32
-cd32n
-a4000t // Commodore Amiga 4000T
-a4000tn
-
-c65 // 1991 C65 / C64DX (Prototype, NTSC)
-c64dx // 1991 C65 / C64DX (Prototype, German PAL)
-
-mps1000 // 1986 Commodore MPS-1000 (dot matrix printer)
-mps1230 // 1988 Commodore MPS-1230 near-letter-quality dot matrix printer
-
-// Epson
-px4 // 1985 Epson PX-4
-px4p // 1985 Epson PX-4+
-px8
-qx10
-ehx20
-ehx20e
-
-// IBM PC & Clones
-ibm5150 // 1981 IBM 5150
-ibm5155 // 1982 IBM 5155
-ibm5140 // 1985 IBM 5140
-ibm5550
-dgone // 1984 Data General/One
-pcmda // 1987 PC with MDA
-pcherc // 1987 PC with Hercules (for testing hercules)
-pc // 1987 PC with CGA
-pcega // 1987 PC with EGA
-bw230 // 1985 Bondwell (CGA)
-europc // 1988 Schneider Euro PC (CGA or Hercules)
-compc1 // 1984 Commodore PC-1
-pc10iii // 1987 Commodore PC-10 III
-pc7000 // 1985 Sharp PC-7000
-sx16 // Sanyo SX-16
-mbc16 // Sanyo MBC-16
-ataripc3
-ssam88s
-sicpc1605
-eagle1600
-
-// Non-PC msdos
-pcd // Siemens PC-D
-pcx // Siemens PC-X
-slicer // 1983 Slicer Computers
-olypeopl // Olympia People PC
-
-// PC Junior
-ibmpcjr // 1984 IBM PC Jr
-ibmpcjx // 1985 IBM PC JX
-t1000hx // 1987 Tandy 1000 HX (similiar to PCJr)
-t1000sx // 1987 Tandy 1000 SX (similiar to PCJr)
-t1000tx // 1987 Tandy 1000 TX
-t1000rl // 1989 Tandy 1000 RL
-t1000tl2 // 1989 Tandy 1000 TL/2
-t1000sl2 // 198? Tandy 1000 SL/2
-
-// XT
-ibm5160 // 1982 IBM XT 5160
-ibm5162 // 1986 IBM XT 5162 (XT w/80286)
-pc200 // 1988 Sinclair PC200
-pc20 // 1988 Amstrad PC20
-ppc512 // 1987 Amstrad PPC512
-ppc640 // 1987 Amstrad PPC640
-pc1512
-pc1512dd
-pc1512hd10
-pc1512hd20
-pc1640
-pc1640dd
-pc1640hd20
-pc1640hd30
-pc2086
-pc3086
-pc2386
-
-xtvga // 198? PC-XT (VGA, MF2 Keyboard)
-zdsupers
-m24
-m240
-olivm15
-
-// Various PC and XT clones produced in ex-USSR and Soviet bloc
-asst128
-ec1840
-ec1841
-ec1842
-ec1845
-ec1847
-iskr1030m
-iskr1031
-iskr3104
-mc1502
-mc1702
-mk88
-pk88
-poisk1
-poisk2
-
-// AT
-ibm5170 // 1984 IBM PC/AT 5170, original 6 MHz model
-ibm5170a // 1985 IBM PC/AT 5170, enhanced 8 MHz model
-i8530h31 // IBM PS/2 8530-H31 (Model 30/286)
-i8530286 // IBM PS/2 Model 30-286
-i8535043 // IBM PS/2 8535-043 (Model 35)
-i8550021 // IBM PS/2 8550-021 (Model 50)
-i8550061 // IBM PS/2 8550-061 (Model 50Z)
-i8555081 // IBM PS/2 8550-081 (Model 55SX)
-i8580071 // IBM PS/2 8580-071 (Model 80)
-i8580111 // IBM PS/2 8580-111 (Model 80)
-ibmps1es // IBM PS/1 (Spanish)
-
-at // 1987 AMI Bios and Diagnostics
-atvga // 19?? AT VGA
-neat // 1989 New Enhanced AT chipset, AMI BIOS
-at386 // 19?? IBM AT 386
-//at386sx // no bios for this currently
-ct386sx
-at486 // 19?? IBM AT 486
-ct486 // 1993? 486 with CS4031
-ficpio2 // 1995 FIC 486-PIO-2
-at586 // 19?? AT 586
-at586x3 // 19?? AT 586
-c386sx16 // 1990 Commodore 386SX-16
-xb42663 // 1988 Apricot Qi 300 (Rev D,E & F Motherboard)
-qi600 // 1988 Apricot Qi 600 (Neptune Motherboard
-qi900 // 1990 Apricot Qi 900 (Scorpion Motherboard)
-aplanst // 1990 Apricot LANstation (Krypton Motherboard)
-ftsserv // 1991 Apricot FTs (Scorpion)
-aplannb // 1990 Apricot LANstation (Novell Remote Boot)
-apxeni // 1987 Apricot XEN-i 386 (Leopard Motherboard)
-xb42639 // 1989 Apricot XEN-S (Venus I Motherboard 286) (Bios:3.10.17i)
-xb42639a // 1990 Apricot XEN-S (Venus II Motherboard 286) (Bios:1.02.17)
-xb42664 // 1989 Apricot XEN-S (Venus I Motherboard 386) (Bios:3.10.17i)
-xb42664a // 1990 Apricot XEN-S (Venus II Motherboard 386) (Bios:1.02.17)
-aplscar // 1992 Apricot LS Pro (Caracal Motherboard)
-aplsbon // 1992 Apricot LS Pro (Bonsai Motherboard)
-ficvt503 // 1997 FIC VT-503
-apxenls3 // 1991 Apricot XEN-LS (Venus IV Motherboard)
-apxlsam // 1993 Apricot XEN-LS II (Samurai Motherboard)
-apvxft // 1989 Apricot VX FT server
-apxena1 // 1993 Apricot XEN PC (A1 Motherboard)
-apxenp2 // 1993 Apricot XEN PC (P2 Motherboard)
-aprpand
-aprfte
-megapc // 1992 Amstrad plc
-megapcpl
-megapcpla // AMI BIOS version with Winbond WINBUS chipset
-ec1849
-t2000sx
-k286i // 1985 Kaypro 286i
-cmdpc30
-
-
-// 3Com / Palm / USRobotics
-pilot1k // Pilot 1000
-pilot5k // Pilot 5000
-palmpers // Palm Pilot Personal
-palmpro // Palm Pilot Professional
-palmiii // Palm III
-palmiiic // Palm IIIc
-palmv // Palm V
-palmvx // Palm Vx
-palmm100 // Palm m100
-palmm130 // Palm m130
-palmm505 // Palm m505
-palmm515 // Palm m515
-palmz22 // Palm Z22
-visor // Palm Visor Edge
-spt1500 // Symbol SPT 1500
-spt1700 // Symbol SPT 1700
-spt1740 // Symbol SPT 1740
-
-
-// Osborne
-osborne1 // 1981 Osborne-1
-osbexec // 1982 Osborne Executive
-
-// Regnecentralen
-rc759 // 1984 RC759
-
-// Research Machines
-nimbus // RM Nimbus 186
-
-// Sanyo
-mbc55x // Sanyo MBC-550, MBC-555
-
-// Sinclair Research
-zx80 // 1980 Sinclair ZX-80
-zx81 // 1981 Sinclair ZX-81
-ts1000 // 1982 Timex Sinclair 1000
-ts1500 // Timex Sinclair 1500
-ringo470 // Ringo 470
-pc8300 // Your Computer - PC8300
-pow3000 // Creon Enterprises - Power 3000
-lambda // Lambda 8300
-tk85 // Microdigital TK85
-
-spectrum // 1982 ZX Spectrum
-spec80k // 1987 ZX Spectrum 80k
-specide // 1995 ZX Spectrum IDE
-inves // 1986 Inves Spectrum 48K+
-tk90x // 1985 TK90x Color Computer
-tk95 // 1986 TK95 Color Computer
-tc2048 // 198? TC2048
-ts2068 // 1983 TS2068
-uk2086 // 1986 UK2086
-
-spec128 // 1986 ZX Spectrum 128
-specpls2 // 1986 ZX Spectrum +2
-specpl2a // 1987 ZX Spectrum +2a
-specpls3 // 1987 ZX Spectrum +3
-specpl3e // 2000 ZX Spectrum +3e
-sp3e8bit // 2002 ZX Spectrum +3e 8bit IDE
-sp3ezcf // 2002 ZX Spectrum +3e ZXCF
-sp3eata // 2002 ZX Spectrum +3e ZXATASP
-scorpio
-profi
-kay1024
-quorum
-pentagon
-pent1024
-atm
-//atmtb1
-atmtb2
-//turbo2
-bestzx
-
-ql // 1984 Sinclair QL (UK)
-ql_us // 1984 Sinclair QL (USA)
-ql_es // 1984 Sinclair QL (Spain)
-ql_fr // 1984 Sinclair QL (France)
-ql_de // 1984 Sinclair QL (Germany)
-ql_it // 1984 Sinclair QL (Italy)
-ql_se // 1984 Sinclair QL (Sweden)
-ql_dk // 1984 Sinclair QL (Denmark)
-ql_gr // 1984 Sinclair QL (Greece)
-tonto
-//megaopd
-
-// Sharp
-pc1245 // Pocket Computer 1245
-pc1250 // Pocket Computer 1250
-pc1251 // Pocket Computer 1251
-pc1255 // Pocket Computer 1255
-trs80pc3 // Tandy TRS80 PC-3
-pc1260 // Pocket Computer 1260
-pc1261 // Pocket Computer 1261
-pc1401 // Pocket Computer 1401
-pc1402 // Pocket Computer 1402
-pc1350 // Pocket Computer 1350
-pc1360 // Pocket Computer 1360
-pc1403 // Pocket Computer 1403
-pc1403h // Pocket Computer 1403H
-pc1450 // Pocket Computer 1450
-pc1500 // Pocket Computer 1500
-pce220 // Pocket Computer E220
-pcg850v // Pocket Computer G850V
-
-mz700 // 1982 Sharp MZ700
-mz700j // 1982 Sharp MZ700 Japan
-mz800 // 1984 Sharp MZ800
-mz1500 // 1984 Sharp MZ1500
-mz2500 // 1985 Sharp MZ2500
-mz2520 // 1985 Sharp MZ2520
-
-mz80kj // 1979 Sharp MZ80K
-mz80k // 1979 Sharp MZ80K
-mz80a // 1982 Sharp MZ80A
-mz80b // 1981 Sharp MZ80B
-mz2000 // 1981 Sharp MZ2000
-mz2200 // 1981 Sharp MZ2200
-
-mz3500 // 198? Sharp MZ3500
-
-mz6500 // 198? Sharp MZ6500
-
-x1 // 1982 Sharp X1
-x1twin // 1986 Sharp X1 Twin
-x1turbo // 1984 Sharp X1 Turbo (Model 10)
-x1turbo40 // 1985 Sharp X1 Turbo (Model 40)
-//x1turboz // 1986 Sharp X1 TurboZ
-
-x68000 // Sharp X68000 (1987)
-x68ksupr // Sharp X68000 Super (1990)
-x68kxvi // Sharp X68000 XVI (1991)
-x68030 // Sharp X68030 (1993)
-
-zsl5500 // Sharp Zaurus SL-5500 "Collie"
-zsl5600 // Sharp Zaurus SL-5600 / SL-B500 "Poodle"
-zslc750 // Sharp Zaurus SL-C750 "Shepherd"
-zslc760 // Sharp Zaurus SL-C760 "Husky"
-zslc3000 // Sharp Zaurus SL-C3000 "Spitz"
-zslc1000 // Sharp Zaurus SL-C1000 "Akita"
-
-// Silicon Graphics
-sgi_ip2 // IP2: IRIS 3xx0, 68020, 16MHz
-sgi_ip6 // IP6: 4D/PI, R2000, 20MHz
-indigo3k // IP12: Indigo 1, R3000, 33MHz
-indigo4k // IP20: Indigo 1, R4400, 150MHz
-ip225015 // IP22: Indy, R5000, 150MHz
-ip224613 // IP22: Indy, R4600, 133MHz
-ip244415 // IP24: Indigo 2, R4400, 150MHz
-
-// Texas Instruments
-ti990_10 // 1975 TI 990/10
-ti990_4 // 1976 TI 990/4
-ti990_4v // 1976 TI 990/4 with video display terminal
-990189 // 1978 TM 990/189
-990189v // 1980 TM 990/189 with Color Video Board
-cc40 // 1983 TI CC-40
-
-ti99_224 // 1983 TI 99/2 (24kb ROMs)
-ti99_232 // 1983 TI 99/2 (32kb ROMs)
-ti99_4 // 1979 TI-99/4
-ti99_4e // 1980 TI-99/4 with 50Hz video
-ti99_4a // 1981 TI-99/4A
-ti99_4ae // 1981 TI-99/4A with 50Hz video
-ti99_4ev // 1994 TI-99/4A with EVPC video card
-ti99_4qe // 1983 TI-99/4QI with 50Hz video
-ti99_4qi // 1983 TI-99/4QI
-ti99_8 // 1983 TI-99/8
-ti99_8e // 1983 TI-99/8 with 50Hz video
-
-// TI 99 clones
-tutor // 1983? Tomy Tutor
-pyuuta // 1982 Tomy Pyuuta
-pyuutajr // 1982 Tomy Pyuuta Jr.
-geneve // 1987? Myarc Geneve 9640
-ti99_4p // 1996 SNUG 99/4P (a.k.a. SGCPU)
-
-avigo // 1997 Avigo
-avigo_de // 1997 Avigo (German)
-avigo_fr // 1997 Avigo (French)
-avigo_es // 1997 Avigo (Spanish)
-avigo_it // 1997 Avigo (Italian)
-
-// Texas Instruments Calculators
-ti73 // 1990 TI-73
-ti74 // 1985 TI-74
-ti95 // 1986 TI-95
-ti81 // 1990 TI-81 (Z80 2 MHz)
-ti81v2 // 1990 TI-81 (Z80 2 MHz)
-ti85 // 1992 TI-85 (Z80 6 MHz)
-ti82 // 1993 TI-82 (Z80 6 MHz)
-ti83 // 1996 TI-83 (Z80 6 MHz)
-ti86 // 1997 TI-86 (Z80 6 MHz)
-ti83p // 1999 TI-83 Plus (Z80 6 MHz)
-ti83pse // 2001 TI-83 Plus Silver Edition
-ti84p // 2004 TI-84 Plus
-ti84pse // 2004 TI-84 Plus Silver Edition
-//ti84cse // 2013 TI-84 Plus C Silver Edition (color screen)
-ti89 // 1998 TI-89
-ti92 // 1995 TI-92
-ti92p // 1999 TI-92 Plus
-v200 // 2002 Voyage 200 PLT
-ti89t // 2004 TI-89 Titanium
-evmbug
-
-// Exelvision (founded by former TI employees)
-exl100
-exeltel
-
-// NEC
-pc6001
-pc6001a
-pc6001mk2
-pc6601
-pc6001sr
-
-apc
-
-pc8001
-pc8001mk2
-
-pc8801
-pc8801mk2
-pc8801mk2sr
-//pc8801mk2tr
-pc8801mk2fr
-pc8801mk2mr
-//pc8801fh
-pc8801mh
-pc8801fa
-pc8801ma
-//pc8801fe
-pc8801ma2
-//pc8801fe2
-pc8801mc
-//pc98do
-//pc98dop
-pc88va
-pc88va2
-//pc88va3
-pc100
-
-pc9801f // 1983
-pc9801rs // 1989
-pc9801rx // 1988
-pc9801ux // 1987
-pc9801vm // 1985
-pc9801bx2 // 1993
-
-pc9821
-pc9821as
-pc9821ap2
-pc9821ce2
-pc9821ne
-pc9821v13
-pc9821v20
-pc9821xs
-
-// Cantab
-jupace // Jupiter Ace
-
-// Sord
-m5
-m5p
-m5p_brno
-
-// APF Electronics Inc.
-apfm1000
-apfimag
-
-// Tatung
-einstein
-einstei2
-einst256
-
-// Intelligent Software
-ep64 // Enterprise 64
-ep128 // Enterprise 128
-phc64 // Hegener & Glaser Mephisto PHC 64
-
-// Non-Linear Systems
-kaypro2x // Kaypro 2 - 2/84
-kaypro4a // Kaypro 4 - 4/84
-kayproii // Kaypro II - 2/83
-kaypro4 // Kaypro 4 - 4/83
-kaypro4p88 // Kaypro 4 - 4/83 w/plus88 board installed
-kaypro10 // Kaypro 10
-omni2 // Omni II
-robie // Kaypro Robie
-
-// VEB Mikroelektronik
-// KC compact is partial CPC compatible
-kc85_2 // VEB KC 85/2
-kc85_3 // VEB KC 85/3
-kc85_4 // VEB KC 85/4
-kc85_5 // VEB KC 85/5
-mc8020 // MC 80.2x
-mc8030 // MC 80.3x
-lc80
-lc80_2
-sc80
-
-// Microbee Systems
-mbee // Microbee 16 Standard or Plus
-mbeeic // Microbee 32 IC
-mbeepc // Microbee 32 PC
-mbeepc85 // Microbee 32 PC85
-mbeepc85b // Microbee 32 PC85 (Business version)
-mbeepc85s // Microbee 32 PC85 (Swedish)
-mbeeppc // Microbee 32 PPC85
-mbeett // Microbee Teleterm
-mbee56 // Microbee 56K (CP/M)
-mbee128 // Microbee 128K standard (CP/M)
-mbee128p // Microbee 128K premium (CP/M)
-mbee256 // Microbee 256TC (CP/M)
-
-// Tandy / Radio Shack
-trs80 // TRS-80 Model I - Level I BASIC
-trs80l2 // TRS-80 Model I - Level II BASIC
-sys80 // EACA System 80
-lnw80 // LNW Research LNW-80
-trs80m2
-trs80m16
-//trs80m12
-//trs80m16b
-//tandy6k
-trs80m3 // TRS-80 Model III - Radio Shack/Tandy
-trs80m4
-trs80m4p
-ht1080z // Hradstechnika Szvetkezet HT-1080Z
-ht1080z2 // Hradstechnika Szvetkezet HT-1080Z Series II
-ht108064 // Hradstechnika Szvetkezet HT-1080Z/64
-radionic // Radionic
-tandy2k
-tandy2khd
-
-coco // Color Computer
-cocoe // Color Computer (Extended BASIC 1.0)
-coco2 // Color Computer 2
-coco2b // Color Computer 2B (uses M6847T1 video chip)
-coco3 // Color Computer 3 (NTSC)
-coco3p // Color Computer 3 (PAL)
-coco3h // Hacked Color Computer 3 (6309)
-coco3dw1 // Coco 3 with HDB-DOS
-dragon32 // Dragon 32
-dragon64 // Dragon 64
-dragon200 // Dragon 200
-dragon200e // Dragon 200E
-d64plus // Dragon 64 + Compusense Plus addon
-dgnalpha // Dragon Alpha
-dgnbeta // Dragon Beta
-tanodr64 // Tano Dragon 64 (NTSC)
-cp400 // Prologica CP400
-lzcolor64 // Digiponto LZ Color64
-mx1600 // Dynacom MX-1600
-mc10 // MC-10
-alice // Matra & Hachette Ordinateur Alice
-alice32 // Matra & Hachette Alice 32
-alice90 // Matra & Hachette Alice 90
-
-// EACA
-cgenie // Colour Genie EG2000
-cgenienz // Colour Genie EG2000 (New Zealand)
-// System 80 trs80 compatible
-
-// Video Technology
-crvision // 1981 creatiVision
-fnvision // 1983 FunVision
-crvisioj
-wizzard
-rameses
-vz2000
-crvisio2
-//lasr2001
-//vz2001
-manager
-
-// Video Technology Laser Generation 1 machines
-laser110 // 1983 Laser 110
-laser200 // 1983 Laser 200
-vz200de // 1983 VZ-200 (Germany)
-fellow // 1983 Salora Fellow
-tx8000 // 1983 Texet TX-8000
-laser210 // 1984 Laser 210
-vz200 // 1984 Dick Smith Electronics VZ-200
-laser310 // 1984 Laser 310
-laser310h // 1984 Laser 310 with SHRG mod
-vz300 // 1984 Dick Smith Electronics VZ-300
-
-// Video Technology Laser Generation 2 machines
-laser350 // 1984? Laser 350
-laser500 // 1984? Laser 500
-laser700 // 1984? Laser 700
-
-socrates // 1988 Socrates Educational Video System (USA)
-socratfc // 1988 Socrates SAITOUT (French Canada)
-profweis // 1988 (Yeno) Professor Weiss-Alles (Germany)
-gl8008cx // 1999 Genius Leader 8008 CX (Germany)
-bs9009cx // 1999 BrainStation 9009 CXL (Germany)
-iq128_fr // 1997 Genius PC (France)
-iq128 // 1997 Genius IQ 128 (Germany)
-iqtv512 // IQ TV512 (Germany)
-pc1000 // 1988 PreComputer 1000
-misterx // 1988 (Yeno) MisterX
-ordisava // 1988 Ordisavant (France)
-pc2000 // 1993 PreComputer 2000
-gl2000 // 1993 Genius Leader 2000
-gl2000p // 1993 Genius Leader 2000 Plus
-gl2000c // 1994 Genius Leader 2000 Compact
-gln // 199? Genius Leader Notebook
-itunlim // 199? IT Unlimited
-iqunlim // 199? IQ Unlimited (680x0)
-iqunlimz // 1991 IQ Unlimited (Z80)
-gl3000s // 199? Genius GL3000S
-glmmc // 199? Genius Master Mega Color
-gl4000 // Genius Leader 4000 Quadro (Germany)
-gl4004 // Genius Leader 4004 Quadro L (Germany)
-gl5000 // Genius Leader 5000 (Germany)
-gl5005x // Genius Leader 5005X (Germany)
-gmtt // 1998 Genius Master Table Top (Germany)
-gbs5505x // 2001 Genius BrainStation 5505X (Germany)
-prestige // PreComputer Prestige Elite
-gwnf // Genius Winner Notebook Fun (Germany)
-gl6000sl // Genius Leader 6000SL (Germany)
-gl7007sl // Genius Leader 7007SL (Germany)
-glcolor // Genius Leader Color (Germany)
-snotec // Bandai Super Note Club (Japan)
-snotecex // Bandai Super Note Club EX (Japan)
-glmcolor // Genius Leader Magic Color (Germany)
-glscolor // Genius Leader Super Color (Germany)
-gjrstar3 // Genius Junior Redstar 3 (Germany)
-gj4000 // Genius Junior 4000 (Germany)
-gjmovie // Genius Junior Movie (Germany)
-gjrstar // Genius Junior Redstar(Germany)
-gjrstar2 // Genius Junior Redstar 2 (Germany)
-gj5000 // Genius Junior 5000 (Germany)
-gl6600cx // Genius Leader 6600CX (Germany)
-gkidabc // Genius KID ABC Fan (Germany)
-cars2lap // CARS 2 Laptop (Germany)
-glpn // Genius Leader Power Notebook (Germany)
-lexipcm // LexiPC Mega 2000 (Germany)
-pitagjr // Pitagorin Junior
-
-// Other Video Technology Laser machines
-las3000 // 1983 Laser 3000
-
-
-// Tangerine
-microtan // 1979 Microtan 65
-
-oric1 // 1983 Oric 1
-orica // 1984 Oric Atmos
-prav8d // 1985 Pravetz 8D
-prav8dd // 1989 Pravetz 8D (Disk ROM)
-telstrat // ??? Oric Telestrat/Stratos
-
-// Philips
-p2000t // 1980 P2000T
-p2000m // 1980 P2000M
-videopac // 1979 Videopac G7000/C52
-g7400 // 1983 Videopac Plus G7400
-vg5k // 1984 VG-5000
-
-// Brandt
-jopac // 1983 Jopac JO7400
-
-// Compukit
-uk101
-
-// Ohio Scientific
-sb2m600b
-//sb2m600c
-c1p
-c1pmf
-
-// ASCII & Microsoft
-// MSX1
-ax150
-ax170
-canonv8
-canonv10
-canonv20
-canonv20e
-canonv20f
-canonv20g
-canonv20s
-canons80
-mx10
-mx101
-mx15
-pv7
-pv16
-cpc88
-dpc100 // 1984 MSX Korea
-dpc180 // 1984 MSX Korea
-dpc200 // 1984 MSX Korea
-dpc200e
-cpc50a
-cpc50b
-cpc51
-fdpc200
-fpc500
-fspc800
-bruc100
-fmx
-gsfc80u
-gsfc200
-gfc1080
-gfc1080a
-expert10 // 1983 MSX Brazil
-expert11 // 1984 MSX Brazil
-expert13 // 1984 MSX Brazil
-expertdp // 1985 MSX Brazil
-expertpl // 1984 MSX Brazil
-mbh2
-mbh25
-mbh50
-jvchc7gb
-mlf48
-mlf80
-mlf110
-mlf120
-mlfx1
-cf1200 // 1984 MSX Japan
-cf2000 // 1983 MSX Japan
-cf2700 // 1984 MSX Japan
-cf3000 // 1984 MSX Japan
-cf3300 // 1985 MSX Japan
-fs1300 // 1985 MSX Japan
-fs4000 // 1985 MSX Japan
-fs4000a
-phc2
-phc28
-cf2700g
-perfect1
-nms801
-vg8000
-vg8010
-vg8010f
-vg802000
-vg802020 // 1985 MSX
-vg8020f
-piopx7
-piopx7uk
-piopxv60
-spc800
-mpc64
-mpc100
-mpc200
-mpc200sp
-phc28l
-phc28s
-mpc10
-hotbit11 // 1985 MSX Brazil
-hotbit12 // 1985 MSX Brazil
-hotbi13b // 1985 MSX Brazil
-hotbi13p // 1985 MSX Brazil
-hotbit20 // 1986 MSX2 Brazil
-hb10
-hb10p
-hb20p
-hb201 // 1985 MSX Japan
-hb201p // 1985 MSX
-hb501p // 1984 MSX
-hb55
-hb55d // 1983 MSX Germany
-hb55p // 1983 MSX
-hb75d // 1983 MSX Germany
-hb75p // 1983 MSX
-hb101p
-hb701fd
-svi728 // 1985 MSX
-svi738 // 1985 MSX
-svi738ar
-svi738dk
-svi738sw // 1985 MSX
-svi738pl // 1985 MSX
-svi738sp
-tadpc200
-tadpc20a
-hx10 // 1984 MSX
-hx10d
-hx10dp
-hx10e
-hx10f
-hx10s // 1984 MSX
-hx10sa
-hx20 // 1984 MSX
-hx20i
-hx21
-hx21i
-hx22
-hx22i
-hc5
-hc6
-hc7
-cx5f1
-cx5f
-cx5m
-cx5m128
-cx5m2
-yis303
-yis503
-yis503f
-yis503ii
-y503iir
-y503iir2
-yis503m
-yc64
-mx64
-// MSX2
-ax350
-ax370
-canonv25
-canonv30
-canonv30f
-fpc900
-mbh70
-kmc5000
-hbf9p // 1985 MSX2
-hbf9pr
-hbf9s // 1985 MSX2
-hbf500f
-hbf500p // 1985 MSX2
-hbf700d // 1985 MSX2 Germany
-hbf700f // 1985 MSX2
-hbf700p // 1985 MSX2
-hbf700s // 1985 MSX2 Spain
-hbg900ap // 1986 MSX2
-hbg900p // 1986 MSX2
-nms8220 // 1986 MSX2
-nms8220a // 1986 MSX2
-vg8230 // 1986 MSX2
-vg8230j
-vg8235 // 1986 MSX2
-vg8235f // 1986 MSX2
-vg8240 // 1986 MSX2
-nms8245 // 1986 MSX2
-nms8245f // 1986 MSX2
-nms8250 // 1986 MSX2
-nms8250f
-nms8250j
-nms8255 // 1986 MSX2
-nms8255f
-nms8260
-nms8280 // 1986 MSX2
-nms8280f
-nms8280g // 1986 MSX2
-mpc27
-phc55fd2
-phc77
-tpc310 // 1986 MSX2
-tpp311
-tps312
-hx23 // 1986 MSX2
-hx23f // 1986 MSX2
-hx23i
-hx33
-hx34
-hx34i
-fstm1
-cx7m // 1986 MSX2
-cx7m128 // 1986 MSX2
-y503iiir
-y503iiire
-yis60464
-yis604
-y805128
-y805128r2
-y805128r2e
-y805256
-mlg1
-mlg3
-mlg10
-mlg30
-fs5500f1 // 1985 MSX2 Japan
-fs5500f2 // 1985 MSX2 Japan
-fs4500 // 1986 MSX2 Japan
-fs4700 // 1986 MSX2 Japan
-fs5000 // 1986 MSX2 Japan
-fs4600 // 1986 MSX2 Japan
-fsa1 // 1986 MSX2 Japan
-fsa1a // 1986 MSX2 Japan
-fsa1mk2 // 1987 MSX2 Japan
-fsa1f // 1987 MSX2 Japan
-fsa1fm // 1988 MSX2 Japan
-hbf5
-hbf500 // 1986 MSX2 Japan
-hbf900 // 1986 MSX2 Japan
-hbf900a // 1986 MSX2 Japan
-hbf1 // 1986 MSX2 Japan
-hbf12 // 1987 MSX2 Japan
-hbf1xd // 1987 MSX2 Japan
-hbf1xdm2 // 1988 MSX2 Japan
-mpc2300
-mpc2500f
-mpc25fd
-phc23 // 1986 MSX2 Japan
-cpc300 // 1986 MSX2 Korea
-cpc300e // 1986 MSX2 Korea
-cpc330k
-cpc400 // 1986 MSX2 Korea
-cpc400s // 1986 MSX2 Korea
-cpc61
-cpg120
-expert20 // 1986 MSX2 Korea
-victhc90
-victhc95
-victhc95a
-// MSX2+
-expert3i
-expert3t
-expertac
-expertdx
-fsa1fx // 1988 MSX2+ Japan
-fsa1wx // 1988 MSX2+ Japan
-fsa1wxa // 1988 MSX2+ Japan
-fsa1wsx // 1989 MSX2+ Japan
-hbf1xdj // 1988 MSX2+ Japan
-hbf1xv // 1989 MSX2+ Japan
-phc70fd // 1988 MSX2+ Japan
-phc70fd2 // 1988 MSX2+ Japan
-phc35j // 1989 MSX2+ Japan
-hbf9sp
-// MSX Turbo-R
-fsa1gt
-fsa1st
-
-// Microsoft
-xbox
-
-// NASCOM Microcomputers
-nascom1 // 1978 Nascom 1
-nascom2 // 1979 Nascom 2
-nascom2c // 1980 Nascom 2 (CP/M)
-
-// Miles Gordon Technology
-samcoupe // 1989 Sam Coupe
-
-// Motorola
-mekd2 // 1977 Motorola Evaluation Kit
-
-// DEC
-pdp1 // 1961 DEC PDP1
-la120 // 1978 Digital Equipment Corporation
-vt100 // 1978 Digital Equipment Corporation
-//vt100wp // 1978 Digital Equipment Corporation
-//vt100stp // 1978 Digital Equipment Corporation
-vt101 // 1981 Digital Equipment Corporation
-vt102 // 1981 Digital Equipment Corporation
-//vt103 // 1979 Digital Equipment Corporation
-vt105 // 1978 Digital Equipment Corporation
-//vt110 // 1978 Digital Equipment Corporation
-//vt125 // 1981 Digital Equipment Corporation
-vt131 // 1981 Digital Equipment Corporation
-//vt132 // 1978 Digital Equipment Corporation
-vt180 // 1981 Digital Equipment Corporation
-vt220 // 1983 Digital Equipment Corporation
-vt320 // 1987 Digital Equipment Corporation
-//vt330
-//vt340
-//vt340p
-//vt510
-vt520 // 1994 Digital Equipment Corporation
-//vt525
-vk100 // 1980 Digital Equipment Corporation
-dectalk // 1983 Digital Equipment Corporation
-vt240 // 1983 Digital Equipment Corporation
-//vt241
-mc7105 // Elektronika MC7105
-rainbow100a // 1982 DEC Rainbow 100-A
-rainbow // 1983 DEC Rainbow 100-B
-rainbow190 // 1985 DEC Rainbow 190
-//dtc03 // 1985 Digital Equipment Corporation
-
-// Memotech
-mtx512 // 1983 Memotech MTX 512
-mtx500 // 1983 Memotech MTX 500
-rs128 // 1984 Memotech RS 128
-
-// Mattel
-intvkbd // 1981 - Mattel Intellivision Keyboard Component
-// (Test marketed, later recalled)
-intvecs // 1983 - Mattel Intellivision w/ECS and IntelliVoice expansions
-aquarius // 1983 Aquarius
-//aquariu2 // 1984 Aquarius II
-juicebox
-hs
-
-// Exidy, Inc.
-sorcerer // Sorcerer
-sorcerer2 // monitor 1.1 1979
-sorcererd // Sorcerer with floppies
-
-// Galaksija
-galaxy
-galaxyp
-
-// Lviv/L'vov
-lviv // Lviv/L'vov
-
-// Tesla
-pmd851 // PMD-85.1
-pmd852 // PMD-85.2
-pmd852a // PMD-85.2A
-pmd852b // PMD-85.2B
-pmd853 // PMD-85.3
-
-// Didaktik
-alfa // Alfa (PMD-85.1 clone)
-
-// Statny
-mato // Mato (PMD-85.2 clone)
-
-// Zbrojovka Brno
-c2717 // Consul 2717 (PMD-85.2 clone)
-c2717pmd // Consul 2717 with PMD-32
-
-// Microkey
-primoa32 // Primo A-32
-primoa48 // Primo A-48
-primoa64 // Primo A-64
-primob32 // Primo B-32
-primob48 // Primo B-48
-primob64 // Primo B-64
-primoc64 // Primo C-64
-
-// Team Concepts
-// CPU not known, else should be easy, look into drivers/comquest.c
-comquest // Comquest Plus German
-
-// Hewlett Packard
-hp38g
-hp39g
-hp48s // HP 48S
-hp48sx // HP 48SX
-hp48g // HP 48G
-hp48gx // HP 48GX
-hp48gp // HP 48G+
-hp49g
-hp49gp // HP 49G+
-hp1650b
-hp1651b
-hp165ka0
-hp16500b
-hp9816
-hp9845a
-hp9845s
-hp9835a
-hp9835b
-hp9845b
-hp9845t
-hp9845c
-hp9k310
-hp9k320
-hp9k330
-hp9k340
-hp9k370
-hp9k380
-hp9k382
-hp64k
-
-// SpectraVideo
-svi318 // SVI-318 (PAL)
-svi318n // SVI-318 (NTSC)
-svi328 // SVI-328 (PAL)
-svi328n // SVI-328 (NTSC)
-sv328p80 // SVI-328 (PAL) + SVI-806 80 column card
-sv328n80 // SVI-328 (NTSC) + SVI-806 80 column card
-
-// Andrew Donald Booth (this is the name of the designer, not a company)
-//apexc53 // 1951(?) APEXC: All-Purpose Electronic X-ray Computer
-apexc // 1955(?) APEXC: All-Purpose Electronic X-ray Computer
-
-// Corvus
-concept // 1982 Corvus Concept
-
-// DAI
-dai // DAI
-
-// Telenova
-compis // 1985 Telenova Compis
-compis2 // 1985 Telenova Compis
-
-// Multitech
-mpf1 // 1979 Multitech Micro Professor 1
-mpf1b // 1979 Multitech Micro Professor 1B
-
-// Telercas Oy
-//tmc1800
-tmc2000
-tmc2000e
-//tmc600s1
-tmc600s2
-
-// OSCOM Oy
-//osc1000b
-nano
-
-// Escola Politecnica da USP (Brazil)
-patinho // 1972 Patinho Feio
-
-// MIT
-tx0_64kw // April 1956 MIT TX-0 (64kw RAM)
-tx0_8kw // 1962 MIT TX-0 (8kw RAM)
-
-// Luxor Datorer AB
-abc80
-abc802
-abc800m
-abc800c
-abc806
-abc1600
-
-// Be Incorporated
-bebox // BeBox Dual603-66
-bebox2 // BeBox Dual603-133
-
-// Tiger Electronics
-gamecom // Tiger Game.com
-
-// Tiger Telematics
-gizmondo
-
-// Thomson
-t9000 // 1980 Thomson T9000 (TO7 prototype)
-to7 // 1982 Thomson TO7
-to770 // 1984 Thomson TO7/70
-to770a // 198? Thomson TO7/70 arabic version
-mo5 // 1984 Thomson MO5
-mo5e // 1986 Thomson MO5E (export version)
-to9 // 1985 Thomson T09
-to8 // 1986 Thomson T08
-to8d // 1987 Thomson T08D
-to9p // 1986 Thomson T09+
-mo6 // 1986 Thomson MO6
-mo5nr // 1986 Thomson MO5 NR
-pro128 // 1986 Olivetti Prodest PC 128
-
-// Cybiko, Inc.
-cybikov1 // Cybiko Wireless Intertainment System - Classic V1
-cybikov2 // Cybiko Wireless Intertainment System - Classic V2
-cybikoxt // Cybiko Wireless Intertainment System - Xtreme
-
-// Dick Smith
-super80
-super80d
-super80e
-super80m
-super80r
-super80v
-
-// Galeb
-galeb
-
-// Orao
-orao
-orao103
-
-// UT-88
-ut88
-ut88mini
-
-// Mikro-80
-mikro80
-radio99
-kristall2
-
-// Specialist
-special
-specialm
-specialp
-lik
-erik
-specimx
-pioner
-
-// Steve Ciarcia (this is the name of the designer, not a company) / BYTE / McGRAW-HILL
-zapcomp // (1981) ZAP computer - Z80 Applications Processor
-
-// Orion
-orion128
-orionms
-orionz80
-orionide
-orionzms
-orionidm
-orionpro
-
-// BK
-bk0010
-bk001001
-bk0010fd
-bk0011m
-
-// Bashkiria-2M
-b2m
-b2mrom
-
-// Radio-86RK
-radio86
-radio16
-radio4k
-rk7007
-rk700716
-radiorom
-radioram
-spektr01
-mikron2
-kr03
-apogee
-mikrosha
-partner
-impuls03
-m86rk
-
-// Homelab
-homelab2
-homelab3
-homelab4
-brailab4
-braiplus
-
-// Irisha
-irisha
-
-// PK-8020
-korvet
-kontur
-neiva
-bk8t
-
-// Vector-06c
-vector06
-vec1200
-pk6128c
-krista2
-
-// Robotron 1715
-rt1715
-rt1715lc // (latin/cyrillic)
-rt1715w
-
-// Z1013
-z1013
-z1013a2
-z1013k76
-z1013s60
-z1013k69
-
-// LLC
-llc1
-llc2
-
-// PP-01
-pp01
-
-// Ondra
-ondrat
-ondrav
-
-// SAPI-1
-sapi1
-sapizps2
-sapizps3
-sapizps3a
-sapizps3b
-
-// Spectrum clones
-
-// ICE-Felix
-hc85 // 1985 HC-85
-hc88 // 1988 HC-88
-hc90 // 1990 HC-90
-hc91 // 1991 HC-91
-hc128 // 1991 HC-128
-hc2000 // 1992 HC-2000
-
-cobrasp
-cobra80
-
-cip01 // 1987 CIP-01
-cip03 // 1988 CIP-03
-jet // 1990 JET
-
-// Didaktik Skalica
-dgama87 // 1987 Didaktik Gama 87
-dgama88 // 1988 Didaktik Gama 88
-dgama89 // 1989 Didaktik Gama 89
-didakt90 // 1990 Didaktik Skalica 90
-didakm91 // 1991 Didaktik M 91
-didakm92 // 1992 Didaktik M 92
-didaktk // 1992 Didaktik Kompakt
-didakm93 // 1993 Didaktik M 93
-
-mistrum // 1988 Mistrum
-
-// Russian clones
-blitzs // 1990 Blic
-byte // 1990 Byte
-orizon // 199? Orizon-Micro
-quorum48 // 1993 Kvorum 48K
-magic6 // 1993 Magic 6
-compani1 // 1990 Kompanion 1
-spektrbk // 1990 Spektr BK-001
-zvezda // 1990 Zvezda
-
-// Kramer
-kramermc // 1987 Kramer MC
-
-// AC1
-ac1 // 1984 Amateurcomputer AC1
-ac1_32 // 1984 Amateurcomputer AC1 (32 lines)
-ac1scch // 1984 Amateurcomputer AC1 SCCH
-
-pcm // PC/M Mugler
-
-// Ei Nis
-pecom32
-pecom64
-
-// Samsung Electronics
-spc1000
-spc1500
-
-// PolyMorphic Systems
-poly88
-poly8813
-
-// Bondwell
-bw2
-
-// Comx World Operations Ltd
-comx35p
-comx35n
-
-// Grundy Business Systems Ltd
-newbrain
-newbraineim
-newbraina
-newbrainmd
-
-// Nokia Data
-mm1m6
-mm1m7
-
-noki3210
-noki7110
-noki8210
-noki8850
-noki3310
-noki6210
-noki6250
-noki8250
-noki8890
-noki3330
-noki3410
-noki5210
-
-// Nuova Elettronica
-z80ne // 1980 - Z80NE
-z80net // 1980 - Z80NE + LX388 Video Interface
-z80netb // 1980 - Z80NE + LX388 Video Interface + 16Kb BASIC
-z80netf // 1980 - Z80NE + LX.388 Video Interface + LX.390 FD Controller
-
-// Talking Electronics Magazine
-tec1 // Talking Electronics Computer
-tecjmon // Talking Electronics Computer
-
-// Kyocera (and clones)
-kc85
-m10
-//m10m
-trsm100
-tandy102
-tandy200
-pc8201
-pc8201a
-npc8300
-pc8401a // roms needed
-//pc8401bd
-pc8500
-
-// Nakajima manufactured eletronic typewriters
-es210_es
-drwrt100 // 199? NTS DreamWriter T100
-drwrt200 // 199? NTS DreamWriter T200
-drwrt400 // 1996 NTS DreamWriter T400
-drwrt450 // 199? NTS DreamWriter 450
-wales210 // 199? Walther ES-210 (German)
-dator3k // 199? Dator 3000 (Spanish)
-
-// Fujitsu
-fm8 // 1981
-fm7
-fmnew7
-fm77av
-fm7740sx
-fm11 // 1982 FM-11 EX
-fm16beta // 1983 FM-16 Beta
-fmtowns // 1989 Fujitsu FM-Towns
-fmtownsa
-fmtownsux // 1991.11 FM-Towns II UX
-fmtownssj // FM-Towns II SJ
-fmtownshr // 1992 FM-Towns II HR
-fmtownsmx // FM-Towns II MX
-fmtownsftv // 1994 FM-Towns II FreshTV
-fmtmarty // 1993 Fujitsu FM-Towns Marty
-fmtmarty2 // 1993 Fujitsu FM-Towns Marty 2
-carmarty // Fujitsu FM-Towns Car Marty
-
-// Camputers
-lynx48k
-lynx96k
-lynx128k
-
-// Votrax
-votrtnt // 1980 Votrax Type-'N-Talk
-votrpss // 1982 Votrax Personal Speech System
-
-// Conitec Datensysteme
-prof80
-prof180x
-prof181x
-
-// SWTPC S/09
-swtpc09 // S09, DMF2 Floppy SBUG rom - FLEX
-swtpc09i // S09, DC4 Floppy + PIA IDE SBUG rom - FLEX
-swtpc09u // S09, DMF2 Floppy UNIBUG rom - UniFLEX
-swtpc09d3 // S09, DMF3 Floppy UNIBUG U3 rom - UniFLEX U3
-
-// Intel
-imds2 // Intellec MDS series-II
-
-//***************Games******************************************************
-
-// Computer Electronic
-ccmk1 // Chess Champion MK I
-// Quelle International
-ccmk2 // Chess Champion MK II
-
-// Novag
-ssystem3 // Chess Champion Super System III / MK III
-supercon
-sfortea // 1987 Novag Super Forte A Chess Computer
-sforteb // 1988 Novag Super Forte B Chess Computer
-sforteba // 1988 Novag Super Forte B Chess Computer (ALT)
-sexpertb // 1988 Novag Expert B Chess Computer
-sfortec // 1989 Novag Super Forte C Chess Computer
-sexpertc // 1989 Novag Super Expert C Chess Computer
-diablo68 // 1991 Novag Diablo 68000 Chess Computer
-
-// Fidelity
-cc10
-cc7
-vcc // VCC: Voice Chess Challenger (English)
-vccg // * Spanish
-vccfr // * German
-vccsp // * French
-uvc // UVC: Advanced Voice Chess Challenger (English)
-uvcsp // * Spanish
-uvcg // * German
-uvcfr // * French
-vsc // VSC: Voice Sensory Chess Challenger (English)
-vscsp // * Spanish
-vscg // * German
-vscfr // * French
-vbrc
-bridgec3
-
-csc // CSC: Champion Sensory Chess Challenger (English)
-cscsp // * Spanish
-cscg // * German
-cscfr // * French
-fscc12
-fexcel
-fexcelv
-
-feagv2
-feagv7
-feagv10
-feagv11
-
-// Hegener & Glaser Munich
-//mephisto // Mephisto 1 - roms needed - not in driver
-mm2 // Mephisto 2
-mm4 // Mephisto 4
-mm4tk // Mephisto 4 Turbo Kit
-mm5 // Mephisto 5.1 ROM
-mm5tk // Mephisto 5.1 ROM Turbo Kit Speed
-mm50 // Mephisto 5.0 ROM
-rebel5 // Mephisto 5
-glasgow // Glasgow
-amsterd // Amsterdam
-dallas // Dallas
-dallas16 // Dallas
-dallas32 // Dallas
-roma // Roma
-roma32 // Roma
-polgar // 1986 Mephisto Polgar Schachcomputer
-alm16 // 1988 Mephisto Almeria 68000
-alm32 // 1988 Mephisto Alimera 68020
-academy // 1989 Mephisto Academy Schachcomputer
-megaiv // 1989 Mephisto Mega IV Schachcomputer
-milano // 1989 Mephisto Milano Schachcomputer
-//montec4 // 1989 Mephisto Monte Carlo IV
-lyon16 // 1990 Mephisto Lyon 68000
-lyon32 // 1990 Mephisto Lyon 68020
-monteciv // 1990 Mephisto Monte Carlo IV LE Schachcomputer
-van16 // 1991 Mephisto Vancouver 68000
-van32 // 1991 Mephisto Vancouver 68020
-gen32 // 1993 Mephisto Genius030 V4.00
-gen32_41 // 1993 Mephisto Genius030 V4.01
-berlinp // 1994 Mephisto Berlin Pro 68020
-bpl32 // 1996 Mephisto Berlin Pro London Upgrade V5.00
-lond020 // 1996 Mephisto London 68020 32 Bit
-lond030 // 1996 Mephisto Genius030 London Upgrade V5.00
-
-// Saitek
-risc // Saitek 2500 14MHZ (skeleton)
-stratos // Kasparov Stratos Chess Computer
-
-// JAKKS Pacific, Inc. / HotGen, Ltd.
-batmantv // The Batman, 2004
-
-// Quantel
-//paintbox // 1981 // No driver or roms as of yet, but a driver is being worked on: https://www.youtube.com/watch?v=-s5yN0_7Dok
-harriet // 1990
-
-// Fanuc
-fanucspg // 1983
-fanucspgm // 1983
-fanucs15 // 1990
-
-// Convergent
-ngen // 1983
-ngenb38 // 1991
-386i // 199?
-
-//********** Dedicated handhelds/tabletops ******************
-
-// hh_cop400
-ctstein // Castle Toy
-h2hbaskb // Coleco
-einvaderc // Entex
-funjacks // Mattel
-funrlgl // Mattel
-plus1 // Milton Bradley
-lightfgt // Milton Bradley
-
-// hh_hmcs40
-bambball // Bambino
-bmboxing // Bambino
-bfriskyt // Bandai
-packmon // Bandai
-msthawk // Bandai/Mattel
-bzaxxon // Bandai
-zackman // Bandai
-bpengo // Bandai
-bbtime // Bandai
-bdoramon // Bandai
-bultrman // Bandai
-machiman // Bandai
-pairmtch // Bandai
-alnattck // Coleco
-cdkong // Coleco
-cgalaxn // Coleco
-cpacman // Coleco
-cpacmanr1 // Coleco (rev 1)
-cmspacmn // Coleco
-egalaxn2 // Entex
-epacman2 // Entex
-estargte // Entex
-eturtles // Entex
-ghalien // Gakken
-gckong // Gakken
-gdigdug // Gakken
-mwcbaseb // Mattel
-pbqbert // Parker Brothers
-kingman // Tomy
-tmtron // Tomy
-vinvader // VTech
-
-// hh_melps4
-cfrogger // Coleco
-gjungler // Gakken
-
-// hh_pic16
-maniac // Ideal
-
-// hh_sm510
-ktopgun // Konami
-ktmnt // Konami
-gnwmndon // Nintendo
-
-// hh_tms1k
-mathmagi // APF
-amaztron // Coleco
-zodiac // Coleco
-cqback // Coleco
-h2hbaseb // Coleco
-h2hfootb // Coleco
-tc4 // Coleco
-cnfball2 // Conic
-ebball // Entex
-ebball2 // Entex
-ebball3 // Entex
-einvader // Entex
-efootb4 // Entex
-ebaskb2 // Entex
-raisedvl // Entex
-gpoker // Gakken
-gjackpot // Gakken
-elecdet // Ideal
-starwbc // Kenner
-starwbcp // Kenner (patent)
-astro // Kosmos
-mdndclab // Mattel
-comp4 // Milton Bradley
-simon // Milton Bradley
-ssimon // Milton Bradley
-bigtrak // Milton Bradley
-cnsector // Parker Bros
-merlin // Parker Bros
-stopthie // Parker Bros
-stopthiep // Parker Bros (patent)
-bankshot // Parker Bros
-splitsec // Parker Bros
-mmerlin // Parker Bros
-lostreas // Parker Bros
-tandy12 // Tandy Radio Shack
-tbreakup // Tomy
-phpball // Tomy
-
-// hh_tms1k derivatives
-elecbowl // Marx
-mbdtower // Milton Bradley
-
-// hh_tms1k ticalc1x.cpp
-tisr16
-tisr16ii
-ti1250
-ti125076
-ti1270
-ti1000
-ti30
-tiprog
-tibusan
-wizatron
-lilprof
-lilprof78
-dataman
-
-// hh_tms1k tispellb.cpp
-spellb
-mrchalgr
-
-// hh_tms1k tispeak.cpp
-snspell
-snspellp
-snspellua
-snspellub
-snspelluk
-snspelluka
-snspelljp
-snspellfr
-snspellit
-snspellc
-snspellca
-snspellcuk
-snmath
-snmatha
-snmathp
-snread
-lantutor
-tntell
-tntelluk
-tntellfr
-tntellp
-vocaid
-k28m2 // Tiger Electronics
-
-// hh_ucom4
-ufombs // Bambino
-ssfball // Bambino
-bmsoccer // Bambino
-bmsafari // Bambino
-splasfgt // Bambino
-bcclimbr // Bandai
-tactix // Castle Toy
-invspace // Epoch
-efball // Epoch
-galaxy2 // Epoch
-astrocmd // Epoch
-edracula // Epoch
-mcompgin // Mattel
-mvbfree // Mego
-tccombat // Tomy
-tmpacman // Tomy
-tmtennis // Tomy
-tmscramb // Tomy
-tcaveman // Tomy
-alnchase // Tomy
-
-// hh_ucom4 derivatives
-tb303 // Roland
-tr606 // Roland
-
-// other
-tama // Bandai
-advision // Entex
-microvsn // Milton Bradley
-monty // Ritam
-mmonty // Ritam
-wildfire // Parker Bros
-k28 // Tiger Electronics
-
-
-//********** Misc **********************************************************
-
-ssem // Manchester Small-Scale Experimental Machine, "Baby"
-craft // Craft, by [lft]
-r9751 // ROLM 9751 phone system
-
-//********** To sort (mostly skeleton drivers) *****************************
-
-a5105
-attache
-bcs3
-bcs3a
-bcs3b
-bcs3c
-bcs3d
-bob85
-c80
-ds348 //Sigtron Daruma
-mc1000
-d6809
-mp68a
-md6802
-mk85
-mk90
-elwro800
-fk1
-et3400
-amu880
-i7000
-icatel
-interact
-jr100
-jr100u
-jr200
-jr200u
-myb3k
-h8
-h19
-h89
-hec2hrp
-hec2hr
-hec2hrx
-hec2mdhrx
-hec2mx80
-hec2mx40
-hector1
-os214
-victor
-poly880
-sc1
-sc2
-chessmst
-sys2900
-pmi80
-kontiki
-tiki100
-vcs80
-v1050
-x820
-x820ii
-notetakr
-x168
-xor100
-iq151
-pyl601
-pyl601a
-m20
-m40
-nanos
-a5120
-a5130
-beehive
-uts20
-uknc
-zx97
-x07
-vesta
-hobby
-pk8002
-unior
-tvc64
-tvc64p
-tvc64pru
-bw12
-bw14
-sdk86
-vboy
-zrt80
-exp85
-z9001
-kc85_111
-kc87_10
-kc87_11
-kc87_20
-kc87_21
-cat
-swyft
-mmd1
-mmd2
-mpf1p
-amico2k
-jtc
-jtces88
-jtces23
-jtces40
-ec65
-ec65k
-junior
-beta
-elf2
-pippin
-sol20
-4004clk
-busicom
-p8000
-p8000_16
-cosmicos
-a7150
-next
-nexts
-nexts2
-nextsc
-nextst
-nextstc
-nextct
-nextctc
-pda600
-mod8
-k1003
-mk14
-elekscmp
-ht68k
-mits680b
-basic52
-basic31
-al8800bt
-sun1
-sun2_50
-sun2_120
-sun3_50
-sun3_60
-sun3_110
-sun3_150
-sun3_260
-sun3_e
-sun3_80
-sun3_460
-sun4_300
-sun4_40
-sun4_50
-sun4_20
-sun4_60
-sun4_75
-sun_s10
-sun_s20
-micronic
-plan80
-pro80
-pimps
-sage2
-zexall // zexall z80 test suite with kevtris' preloader/serial interface at 0000-00ff
-nshrz
-vector1
-tricep
-indiana
-vector4
-unistar
-dual68
-sdk80
-sdk85
-rpc86
-isbc86
-isbc286
-isbc2861
-swtpc
-md2
-md3
-ccs2422
-ccs2810
-ccs300
-qtsbc
-msbc1
-ipb // intel
-ipc // intel
-ipds // intel
-imds // intel
-sbc6510
-supracan
-scv
-scv_pal
-vii // Chintendo / KenSingTon / Jungle Soft / Siatronics Vii
-vsmile
-vsmilef
-walle
-zsbc3
-dms5000
-dms86
-codata
-rvoicepc
-victor9k
-phc25
-phc25j
-pv9234
-dm7000
-dm5620
-dm500
-cgc7900
-hr16
-hr16b
-mmt8
-sr16
-vidbrain
-cd2650
-pipbug
-elektor
-instruct
-dauphin
-chaos
-z80dev
-pegasus
-pegasusm
-pasopia
-pasopia7
-pasopia7lcd
-paso1600
-smc777
-multi8
-multi16
-rx78
-bmjr
-bml3
-bml3mk2
-bml3mk5
-b16
-psion1
-psioncm
-psionla
-psionxp
-psionp200
-psionp350
-psionlam
-psionlz64
-psionlz64s
-psionlz
-psionp464
-rex6000
-ds2
-mycom
-tk80
-tk80bs
-czk80
-c10
-k8915
-mes
-systec
-p112
-selz80
-dagz80
-mccpm
-casloopy
-fp200
-fp1100
-fp6000
-tim011
-wmbullet
-wmbulletf
-pc4
-pofo
-homez80
-tek4051
-tek4052a
-//tek4054
-tek4107a
-tek4109a
-tekxp330
-phunsy
-ob68k1a
-vta2000
-dct11em
-sm1800
-mikrolab
-dim68k
-okean240
-okean240a
-okean240t
-vixen
-pt68k2
-pt68k4
-jupiter2
-jupiter3
-bigboard
-mk82
-mk83
-bigbord2
-savia84
-pes
-pdp11ub
-pdp11ub2
-pdp11qb
-sms1000
-terak
-ti630
-sacstate
-prose2k
-prose2ko
-eacc
-argo
-applix
-mzr8105
-hk68v10
-fccpu1
-68ksbc
-lcmate2
-cm1800
-if800
-super6
-superslv
-mpz80
-poly1
-z100
-v6809
-tdv2324
-slc1
-digel804
-ep804
-uzebox
-sitcom
-babbage
-cvicny
-pc486mu
-mstation
-mbc200
-chesstrv
-alphatro
-ax20
-mini2440
-meritum
-meritum_net
-konin
-m79152pc
-dmv
-rm380z
-wangpc
-borisdpl
-cp1
-c900
-cortex
-test410
-test420
-hxhdci2k
-hpz80unk
-itt3030
-vax785
-ms0515
-ie15
-dvk_kcgd
-dvk_ksm
-dvk_ksm01
-asmapro
-asma2k
-altos5
-ts802
-ts802h
-ts803h
-ts816
-tv950
-modellot
-tim100
-pencil2
-br8641
-nectk85
-nd80z
-binbug
-dg680
-besta88
-ravens
-ravens2
-softbox
-dps1
-octopus
-dsb46
-grfd2301
-cdc721
-seattle
-c8002
-sbrain
-ibm6580
-zorba
-mice
-lola8a
-ics8080
-ms9540
-wicat
-ampro
-pm68k
-lft1230
-lft1510
-imsai
-jade
-jonos
-ft68m
-molecula
-taitons1
-sh4robot
-mcb216
-cb308
-myvision
-mkit09
-mkit09a
-cpu09
-ivg09
-pulsarlb
-hprot1
-hprotr8a
-hprot2r6
-compclr2
-m6805evs
-mx2178
-hunter2
-amust
-fc100
-alto2
-gimix
-tecnbras
-minicom
-mcom4_02
-gameking
-gamekin3
-leapster
-leapstertv
-excali64
-bitgrpha
-bitgrphb
-tvgame
-aussieby
-hp_ipc
-lggp40
-mt735
-squale
-goupilg1
-micral
-rd100
-proteus3
-unichamp
-st1700h
-st1701
-st1702
-st1703
-st1704
-st1705
-st1706
-st1707
-st1708
-st1714
-sanfuze2
-marywu
diff --git a/src/mame/video/chihiro.cpp b/src/mame/video/chihiro.cpp
index f5d413e814e..e581ebf852e 100644
--- a/src/mame/video/chihiro.cpp
+++ b/src/mame/video/chihiro.cpp
@@ -2698,7 +2698,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
}
}
else {
- machine().logerror("Unsupported primitive %d for method 0x1810\n", primitive_type);
+ machine().logerror("Unsupported primitive %d for method 0x1810\n", int(primitive_type));
}
countlen--;
}
@@ -2845,7 +2845,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
}
}
else {
- machine().logerror("Unsupported primitive %d for method 0x1800/8\n", primitive_type);
+ machine().logerror("Unsupported primitive %d for method 0x1800/8\n", int(primitive_type));
countlen = 0;
}
while (countlen > 0) {
@@ -3025,7 +3025,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
}
}
else {
- machine().logerror("Unsupported primitive %d for method 0x1818\n", primitive_type);
+ machine().logerror("Unsupported primitive %d for method 0x1818\n", int(primitive_type));
countlen = 0;
}
}
@@ -3164,7 +3164,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
bytespixel_rendertarget = 1;
break;
default:
- machine().logerror("Unknown render target color format %d\n\r", colorformat_rendertarget);
+ machine().logerror("Unknown render target color format %d\n\r", int(colorformat_rendertarget));
bytespixel_rendertarget = 4;
break;
}
@@ -3174,7 +3174,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
pitch_rendertarget=data & 0xffff;
pitch_depthbuffer=(data >> 16) & 0xffff;
#ifdef LOG_NV2A
- printf("Pitch color %04X zbuffer %04X\n\r",pitch_rendertarget,pitch_depthbuffer);
+ printf("Pitch color %04X zbuffer %04X\n\r", pitch_rendertarget, pitch_depthbuffer);
#endif
countlen--;
}
diff --git a/src/mame/video/gaelco.cpp b/src/mame/video/gaelco.cpp
index ebcd8b2dead..75f01e38ac4 100644
--- a/src/mame/video/gaelco.cpp
+++ b/src/mame/video/gaelco.cpp
@@ -114,7 +114,7 @@ VIDEO_START_MEMBER(gaelco_state,maniacsq)
1 | xxxxxxxx xxxxxxxx | not used
2 | -------x xxxxxxxx | x position
2 | -xxxxxx- -------- | sprite color
- 3 | -------- ------xx | sprite code (8x8 cuadrant)
+ 3 | -------- ------xx | sprite code (8x8 quadrant)
3 | xxxxxxxx xxxxxx-- | sprite code
*/
diff --git a/src/mame/video/galpanic.cpp b/src/mame/video/galpanic.cpp
index cf33cb88bdd..94e23bfe38f 100644
--- a/src/mame/video/galpanic.cpp
+++ b/src/mame/video/galpanic.cpp
@@ -8,7 +8,7 @@
void galpanic_state::video_start()
{
m_screen->register_screen_bitmap(m_bitmap);
-
+
save_item(NAME(m_bitmap));
}
diff --git a/src/mame/video/megasys1.cpp b/src/mame/video/megasys1.cpp
index 7e04cec112d..f140b29d717 100644
--- a/src/mame/video/megasys1.cpp
+++ b/src/mame/video/megasys1.cpp
@@ -893,7 +893,7 @@ void megasys1_state::megasys1_priority_create()
{
const UINT8 *color_prom = memregion("proms")->base();
int pri_code, offset, i, order;
-
+
/* convert PROM to something we can use */
for (pri_code = 0; pri_code < 0x10 ; pri_code++) // 16 priority codes
diff --git a/src/mame/video/newbrain.cpp b/src/mame/video/newbrain.cpp
index dd0ae2bd776..8e6b9f0cc7a 100644
--- a/src/mame/video/newbrain.cpp
+++ b/src/mame/video/newbrain.cpp
@@ -4,39 +4,81 @@
#include "rendlay.h"
#include "newbrain.lh"
+#define LOG 0
+
+#define NEWBRAIN_VIDEO_RV 0x01
+#define NEWBRAIN_VIDEO_FS 0x02
+#define NEWBRAIN_VIDEO_32_40 0x04
+#define NEWBRAIN_VIDEO_UCR 0x08
+#define NEWBRAIN_VIDEO_80L 0x40
+
+void newbrain_state::tvl(UINT8 data, int a6)
+{
+ /* latch video address counter bits A5-A0 */
+ m_tvl = m_80l ? 0x04 : 0x02;
+
+ /* latch video address counter bit A6 */
+ m_tvl |= a6 << 6;
+
+ /* latch data to video address counter bits A14-A7 */
+ m_tvl |= (data << 7);
+
+ if (LOG) logerror("%s %s TVL %04x\n", machine().time().as_string(), machine().describe_context(), m_tvl);
+}
+
+WRITE8_MEMBER( newbrain_state::tvtl_w )
+{
+ /*
+
+ bit signal description
+
+ 0 RV 1 reverses video over entire field, ie. black on white
+ 1 FS 0 generates 128 characters and 128 reverse field characters from 8 bit character code. 1 generates 256 characters from 8 bit character code
+ 2 32/_40 0 generates 320 or 640 horizontal dots in pixel graphics mode. 1 generates 256 or 512 horizontal dots in pixel graphics mode
+ 3 UCR 0 selects 256 characters expressed in an 8x10 matrix, and 25 lines (max) displayed. 1 selects 256 characters in an 8x8 matrix, and 31 lines (max) displayed
+ 4
+ 5
+ 6 80L 0 selects 40 character line length. 1 selects 80 character line length
+ 7
+
+ */
+
+ if (LOG) logerror("%s %s TVTL %02x\n", machine().time().as_string(), machine().describe_context(), data);
+
+ m_rv = BIT(data, 0);
+ m_fs = BIT(data, 1);
+ m_32_40 = BIT(data, 2);
+ m_ucr = BIT(data, 3);
+ m_80l = BIT(data, 6);
+}
+
void newbrain_state::video_start()
{
- /* register for state saving */
- save_item(NAME(m_tvcnsl));
- save_item(NAME(m_tvctl));
- save_item(NAME(m_tvram));
- save_item(NAME(m_segment_data));
+ // state saving
+ save_item(NAME(m_rv));
+ save_item(NAME(m_fs));
+ save_item(NAME(m_32_40));
+ save_item(NAME(m_ucr));
+ save_item(NAME(m_80l));
+ save_item(NAME(m_tvl));
}
void newbrain_state::screen_update(bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- address_space &program = m_maincpu->space(AS_PROGRAM);
-
- int y, sx;
- int columns = (m_tvctl & NEWBRAIN_VIDEO_80L) ? 80 : 40;
- int excess = (m_tvctl & NEWBRAIN_VIDEO_32_40) ? 24 : 4;
- int ucr = (m_tvctl & NEWBRAIN_VIDEO_UCR) ? 1 : 0;
- int fs = (m_tvctl & NEWBRAIN_VIDEO_FS) ? 1 : 0;
- int rv = (m_tvctl & NEWBRAIN_VIDEO_RV) ? 1 : 0;
+ int columns = m_80l ? 80 : 40;
+ int excess = m_32_40 ? 4 : 24;
int gr = 0;
- UINT16 videoram_addr = m_tvram;
+ UINT16 videoram_addr = m_tvl;
UINT8 rc = 0;
- for (y = 0; y < 250; y++)
+ for (int y = 0; y < 200; y++)
{
int x = 0;
- for (sx = 0; sx < columns; sx++)
+ for (int sx = 0; sx < columns; sx++)
{
- int bit;
-
- UINT8 videoram_data = program.read_byte(videoram_addr + sx);
+ UINT8 videoram_data = m_ram->pointer()[(videoram_addr + sx) & 0x7fff];
UINT8 charrom_data;
if (gr)
@@ -47,25 +89,25 @@ void newbrain_state::screen_update(bitmap_rgb32 &bitmap, const rectangle &clipre
else
{
/* render character rom data */
- UINT16 charrom_addr = (rc << 8) | ((BIT(videoram_data, 7) & fs) << 7) | (videoram_data & 0x7f);
+ UINT16 charrom_addr = (rc << 8) | ((BIT(videoram_data, 7) && m_fs) << 7) | (videoram_data & 0x7f);
charrom_data = m_char_rom->base()[charrom_addr & 0xfff];
- if ((videoram_data & 0x80) && !fs)
+ if ((videoram_data & 0x80) && !m_fs)
{
/* invert character */
charrom_data ^= 0xff;
}
- if ((videoram_data & 0x60) && !ucr)
+ if ((videoram_data & 0x60) && !m_ucr)
{
/* strip bit D0 */
charrom_data &= 0xfe;
}
}
- for (bit = 0; bit < 8; bit++)
+ for (int bit = 0; bit < 8; bit++)
{
- int color = BIT(charrom_data, 7) ^ rv;
+ int color = BIT(charrom_data, 7) ^ m_rv;
bitmap.pix32(y, x++) = m_palette->pen(color);
@@ -89,7 +131,7 @@ void newbrain_state::screen_update(bitmap_rgb32 &bitmap, const rectangle &clipre
/* increase row counter */
rc++;
- if (rc == (ucr ? 8 : 10))
+ if (rc == (m_ucr ? 8 : 10))
{
/* reset row counter */
rc = 0;
@@ -103,7 +145,7 @@ void newbrain_state::screen_update(bitmap_rgb32 &bitmap, const rectangle &clipre
UINT32 newbrain_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- if (m_enrg1 & NEWBRAIN_ENRG1_TVP)
+ if (m_tvp)
{
screen_update(bitmap, cliprect);
}
@@ -115,6 +157,24 @@ UINT32 newbrain_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap
return 0;
}
+/* F4 Character Displayer */
+static const gfx_layout newbrain_charlayout =
+{
+ 8, 10, /* 8 x 10 characters */
+ 256, /* 256 characters */
+ 1, /* 1 bits per pixel */
+ { 0 }, /* no bitplanes */
+ /* x offsets */
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ /* y offsets */
+ { 0*256*8, 1*256*8, 2*256*8, 3*256*8, 4*256*8, 5*256*8, 6*256*8, 7*256*8, 8*256*8, 9*256*8, 10*256*8, 11*256*8, 12*256*8, 13*256*8, 14*256*8, 15*256*8 },
+ 8 /* every char takes 16 x 1 bytes */
+};
+
+static GFXDECODE_START( newbrain )
+ GFXDECODE_ENTRY( "chargen", 0x0000, newbrain_charlayout, 0, 1 )
+GFXDECODE_END
+
/* Machine Drivers */
MACHINE_CONFIG_FRAGMENT( newbrain_video )
@@ -127,5 +187,7 @@ MACHINE_CONFIG_FRAGMENT( newbrain_video )
MCFG_SCREEN_SIZE(640, 250)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 249)
- MCFG_PALETTE_ADD_BLACK_AND_WHITE("palette")
+ MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
+
+ MCFG_GFXDECODE_ADD("gfxdecode", "palette", newbrain)
MACHINE_CONFIG_END
diff --git a/src/mame/video/sega16sp.h b/src/mame/video/sega16sp.h
index f3b462f788a..ed758b1299f 100644
--- a/src/mame/video/sega16sp.h
+++ b/src/mame/video/sega16sp.h
@@ -40,16 +40,18 @@
bootleg_sys16a_sprite_device::static_set_remap(*device, _0,_1,_2,_3,_4,_5,_6,_7);
#define MCFG_BOOTLEG_SYS16A_SPRITES_XORIGIN(_xorigin) \
- bootleg_sys16a_sprite_device::static_set_xorigin(*device, _xorigin);
+ bootleg_sys16a_sprite_device::set_local_originx(*device, _xorigin);
#define MCFG_BOOTLEG_SYS16A_SPRITES_YORIGIN(_yorigin) \
- bootleg_sys16a_sprite_device::static_set_yorigin(*device, _yorigin);
+ bootleg_sys16a_sprite_device::set_local_originy(*device, _yorigin);
#define MCFG_BOOTLEG_SYS16B_SPRITES_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, SEGA_SYS16B_SPRITES, 0)
#define MCFG_BOOTLEG_SYS16B_SPRITES_XORIGIN(_xorigin) \
- bootleg_sys16a_sprite_device::static_set_xorigin(*device, _xorigin);
+ sega_sys16b_sprite_device::set_local_originx(*device, _xorigin);
+#define MCFG_BOOTLEG_SYS16B_SPRITES_YORIGIN(_yorigin) \
+ sega_sys16b_sprite_device::set_local_originy(*device, _yorigin);
@@ -86,6 +88,20 @@ public:
set_origin(x, y);
}
+ void set_local_originx_(int x) { m_xoffs_flipped = m_xoffs = x; set_origin(x, m_yoffs); }
+ void set_local_originy_(int y) { m_yoffs_flipped = m_yoffs = y; set_origin(m_xoffs, y); }
+
+ static void set_local_originx(device_t &device, int x)
+ {
+ sega_16bit_sprite_device &dev = downcast<sega_16bit_sprite_device &>(device);
+ dev.set_local_originx_(x);
+ };
+
+ static void set_local_originy(device_t &device, int y)
+ {
+ sega_16bit_sprite_device &dev = downcast<sega_16bit_sprite_device &>(device);
+ dev.set_local_originy_(y);
+ };
// write trigger memory handler
DECLARE_WRITE16_MEMBER( draw_write );
diff --git a/src/mame/video/segaic16.cpp b/src/mame/video/segaic16.cpp
index b551707645e..908114af488 100644
--- a/src/mame/video/segaic16.cpp
+++ b/src/mame/video/segaic16.cpp
@@ -384,8 +384,16 @@ segaic16_video_device::segaic16_video_device(const machine_config &mconfig, cons
{
memset(m_rotate, 0, sizeof(m_rotate));
memset(m_bg_tilemap, 0, sizeof(m_bg_tilemap));
+ m_pagelatch_cb = segaic16_video_pagelatch_delegate(FUNC(segaic16_video_device::tilemap_16b_fill_latch), this);
}
+void segaic16_video_device::set_pagelatch_cb(device_t &device,segaic16_video_pagelatch_delegate newtilecb)
+{
+ segaic16_video_device &dev = downcast<segaic16_video_device &>(device);
+ dev.m_pagelatch_cb = newtilecb;
+}
+
+
//-------------------------------------------------
// static_set_gfxdecode_tag: Set the tag of the
// gfx decoder
@@ -403,6 +411,8 @@ void segaic16_video_device::device_start()
throw device_missing_dependencies();
save_item(NAME(m_display_enable));
+
+ m_pagelatch_cb.bind_relative_to(*owner());
}
void segaic16_video_device::device_reset()
@@ -1012,6 +1022,16 @@ void tilemap_16b_draw_layer(screen_device &screen, struct tilemap_info *info, bi
}
+
+
+void segaic16_video_device::tilemap_16b_fill_latch(int i, UINT16* latched_pageselect, UINT16* latched_yscroll, UINT16* latched_xscroll, UINT16* textram)
+{
+ latched_pageselect[i] = textram[0xe80 / 2 + i];
+ latched_yscroll[i] = textram[0xe90/2 + i];
+ latched_xscroll[i] = textram[0xe98/2 + i];
+// printf("%02x returning latched page select %04x scrollx %04x scrolly %04x\n", i, latched_pageselect[i], latched_xscroll[i], latched_yscroll[i]);
+}
+
TIMER_CALLBACK_MEMBER( segaic16_video_device::tilemap_16b_latch_values )
{
struct tilemap_info *info = &m_bg_tilemap[param];
@@ -1021,9 +1041,7 @@ TIMER_CALLBACK_MEMBER( segaic16_video_device::tilemap_16b_latch_values )
/* latch the scroll and page select values */
for (i = 0; i < 4; i++)
{
- info->latched_pageselect[i] = textram[0xe80/2 + i];
- info->latched_yscroll[i] = textram[0xe90/2 + i];
- info->latched_xscroll[i] = textram[0xe98/2 + i];
+ m_pagelatch_cb(i, info->latched_pageselect, info->latched_yscroll, info->latched_xscroll, textram);
}
/* set a timer to do this again next frame */
diff --git a/src/mame/video/segaic16.h b/src/mame/video/segaic16.h
index ff0c4f754e1..ce15f9a9c97 100644
--- a/src/mame/video/segaic16.h
+++ b/src/mame/video/segaic16.h
@@ -10,6 +10,10 @@
#ifndef __SEGAIC16VID_H__
#define __SEGAIC16VID_H__
+typedef device_delegate<void (int, UINT16*, UINT16*, UINT16*, UINT16*)> segaic16_video_pagelatch_delegate;
+
+#define MCFG_SEGAIC16_VIDEO_SET_PAGELATCH_CB( _class, _method) \
+ segaic16_video_device::set_pagelatch_cb(*device, segaic16_video_pagelatch_delegate(&_class::_method, #_class "::" #_method, NULL, (_class *)0));
/* tilemap systems */
@@ -100,6 +104,7 @@ public:
// static configuration
static void static_set_gfxdecode_tag(device_t &device, const char *tag);
+ static void set_pagelatch_cb(device_t &device,segaic16_video_pagelatch_delegate newtilecb);
UINT8 m_display_enable;
optional_shared_ptr<UINT16> m_tileram;
@@ -117,6 +122,8 @@ public:
// void draw_virtual_tilemap(screen_device &screen, struct tilemap_info *info, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT16 pages, UINT16 xscroll, UINT16 yscroll, UINT32 flags, UINT32 priority);
// void tilemap_16b_reset(screen_device &screen, struct tilemap_info *info);
+ segaic16_video_pagelatch_delegate m_pagelatch_cb;
+ void tilemap_16b_fill_latch(int i, UINT16* latched_pageselect, UINT16* latched_yscroll, UINT16* latched_xscroll, UINT16* textram);
TIMER_CALLBACK_MEMBER( tilemap_16b_latch_values );
struct rotate_info m_rotate[SEGAIC16_MAX_ROTATE];
diff --git a/src/mame/video/segas16b.cpp b/src/mame/video/segas16b.cpp
index ab69cbef1f7..7c5f468dd8c 100644
--- a/src/mame/video/segas16b.cpp
+++ b/src/mame/video/segas16b.cpp
@@ -84,7 +84,7 @@ UINT32 segas16b_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
// otherwise, just add in sprite palette base
else
- dest[x] = 0x400 | (pix & 0x3ff);
+ dest[x] = m_spritepalbase | (pix & 0x3ff);
}
}
}
diff --git a/src/mame/video/snk68.cpp b/src/mame/video/snk68.cpp
index 7cc4faf59b0..22ab084c421 100644
--- a/src/mame/video/snk68.cpp
+++ b/src/mame/video/snk68.cpp
@@ -79,36 +79,6 @@ VIDEO_START_MEMBER(snk68_state,searchar)
***************************************************************************/
-READ16_MEMBER(snk68_state::spriteram_r)
-{
- // streetsj expects the MSB of every 32-bit word to be FF. Presumably RAM
- // exists only for 3 bytes out of 4 and the fourth is unmapped.
- if (!(offset & 1))
- return m_spriteram[offset] | 0xff00;
- else
- return m_spriteram[offset];
-}
-
-WRITE16_MEMBER(snk68_state::spriteram_w)
-{
- UINT16 newword = m_spriteram[offset];
-
- if (!(offset & 1))
- data |= 0xff00;
-
- COMBINE_DATA(&newword);
-
- if (m_spriteram[offset] != newword)
- {
- int vpos = m_screen->vpos();
-
- if (vpos > 0)
- m_screen->update_partial(vpos - 1);
-
- m_spriteram[offset] = newword;
- }
-}
-
READ16_MEMBER(snk68_state::pow_fg_videoram_r)
{
// RAM is only 8-bit
@@ -134,7 +104,7 @@ WRITE16_MEMBER(snk68_state::pow_flipscreen_w)
if (ACCESSING_BITS_0_7)
{
flip_screen_set(data & 0x08);
-
+ m_sprites->set_flip(data & 0x08);
m_sprite_flip_axis = data & 0x04; // for streetsm? though might not be present on this board
if (m_fg_tile_offset != ((data & 0x70) << 4))
@@ -150,6 +120,7 @@ WRITE16_MEMBER(snk68_state::searchar_flipscreen_w)
if (ACCESSING_BITS_0_7)
{
flip_screen_set(data & 0x08);
+ m_sprites->set_flip(data & 0x08);
m_sprite_flip_axis = data & 0x04;
}
}
@@ -161,99 +132,12 @@ WRITE16_MEMBER(snk68_state::searchar_flipscreen_w)
***************************************************************************/
-void snk68_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int group)
-{
- const UINT16* tiledata = &m_spriteram[0x800*group];
-
- // pow has 0x4000 tiles and independent x/y flipping
- // the other games have > 0x4000 tiles and flipping in only one direction
- // (globally selected)
- bool const is_pow = (m_gfxdecode->gfx(1)->elements() <= 0x4000);
- bool const flip = flip_screen();
-
- for (int offs = 0; offs < 0x800; offs += 0x40)
- {
- int mx = (m_spriteram[offs + 2*group] & 0xff) << 4;
- int my = m_spriteram[offs + 2*group + 1];
- int i;
-
- mx = mx | (my >> 12);
-
- mx = ((mx + 16) & 0x1ff) - 16;
- my = -my;
-
- if (flip)
- {
- mx = 240 - mx;
- my = 240 - my;
- }
-
- // every sprite is a column 32 tiles (512 pixels) tall
- for (i = 0; i < 0x20; ++i)
- {
- my &= 0x1ff;
-
- if (my <= cliprect.max_y && my + 15 >= cliprect.min_y)
- {
- int color = *(tiledata++) & 0x7f;
- int tile = *(tiledata++);
- int fx,fy;
-
- if (is_pow)
- {
- fx = tile & 0x4000;
- fy = tile & 0x8000;
- tile &= 0x3fff;
- }
- else
- {
- if (m_sprite_flip_axis)
- {
- fx = 0;
- fy = tile & 0x8000;
- }
- else
- {
- fx = tile & 0x8000;
- fy = 0;
- }
- tile &= 0x7fff;
- }
-
- if (flip)
- {
- fx = !fx;
- fy = !fy;
- }
-
- m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
- tile,
- color,
- fx, fy,
- mx, my, 0);
- }
- else
- {
- tiledata += 2;
- }
-
- if (flip)
- my -= 16;
- else
- my += 16;
- }
- }
-}
-
UINT32 snk68_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(0x7ff, cliprect);
- /* This appears to be the correct priority order */
- draw_sprites(bitmap, cliprect, 2);
- draw_sprites(bitmap, cliprect, 3);
- draw_sprites(bitmap, cliprect, 1);
+ m_sprites->draw_sprites_all(bitmap, cliprect);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
diff --git a/src/mame/video/snk68_spr.cpp b/src/mame/video/snk68_spr.cpp
new file mode 100644
index 00000000000..b55e7b18056
--- /dev/null
+++ b/src/mame/video/snk68_spr.cpp
@@ -0,0 +1,180 @@
+// license:BSD-3-Clause
+// copyright-holders:Bryan McPhail, Acho A. Tang, Nicola Salmoria
+
+/* SNK68 Sprites */
+#include "emu.h"
+#include "snk68_spr.h"
+
+const device_type SNK68_SPR = &device_creator<snk68_spr_device>;
+
+snk68_spr_device::snk68_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, SNK68_SPR, "SNK68 Sprites", tag, owner, clock, "snk68_spr", __FILE__),
+ m_gfxdecode(*this),
+ m_palette(*this),
+ m_spriteram(*this, "^spriteram"),
+ m_screen(*this, "^screen"),
+ m_flipscreen(0),
+ m_partialupdates(1)
+{
+ m_newtilecb = snk68_tile_indirection_delegate(FUNC(snk68_spr_device::tile_callback_noindirect), this);
+}
+
+void snk68_spr_device::tile_callback_noindirect(int &tile, int& fx, int& fy, int& region)
+{
+
+}
+
+
+//-------------------------------------------------
+// static_set_gfxdecode_tag: Set the tag of the
+// gfx decoder
+//-------------------------------------------------
+
+void snk68_spr_device::static_set_gfxdecode_tag(device_t &device, const char *tag)
+{
+ downcast<snk68_spr_device &>(device).m_gfxdecode.set_tag(tag);
+}
+
+//-------------------------------------------------
+// static_set_palette_tag: Set the tag of the
+// palette device
+//-------------------------------------------------
+
+void snk68_spr_device::static_set_palette_tag(device_t &device, const char *tag)
+{
+ downcast<snk68_spr_device &>(device).m_palette.set_tag(tag);
+}
+
+// static
+void snk68_spr_device::set_tile_indirect_cb(device_t &device,snk68_tile_indirection_delegate newtilecb)
+{
+ snk68_spr_device &dev = downcast<snk68_spr_device &>(device);
+ dev.m_newtilecb = newtilecb;
+}
+
+void snk68_spr_device::static_set_no_partial(device_t &device)
+{
+ snk68_spr_device &dev = downcast<snk68_spr_device &>(device);
+ dev.m_partialupdates = 0;
+}
+
+void snk68_spr_device::device_start()
+{
+ // bind our handler
+ m_newtilecb.bind_relative_to(*owner());
+}
+
+void snk68_spr_device::device_reset()
+{
+}
+
+READ16_MEMBER(snk68_spr_device::spriteram_r)
+{
+ // streetsj expects the MSB of every 32-bit word to be FF. Presumably RAM
+ // exists only for 3 bytes out of 4 and the fourth is unmapped.
+ if (!(offset & 1))
+ return m_spriteram[offset] | 0xff00;
+ else
+ return m_spriteram[offset];
+}
+
+WRITE16_MEMBER(snk68_spr_device::spriteram_w)
+{
+ UINT16 newword = m_spriteram[offset];
+
+ if (!(offset & 1))
+ data |= 0xff00;
+
+ COMBINE_DATA(&newword);
+
+ if (m_spriteram[offset] != newword)
+ {
+ int vpos = m_screen->vpos();
+
+ if (vpos > 0)
+ if (m_partialupdates) m_screen->update_partial(vpos - 1);
+
+ m_spriteram[offset] = newword;
+ }
+}
+
+void snk68_spr_device::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int group)
+{
+ const UINT16* tiledata = &m_spriteram[0x800*group];
+
+ bool const flip = m_flipscreen;
+
+ for (int offs = 0; offs < 0x800; offs += 0x40)
+ {
+ int mx = (m_spriteram[offs + 2*group] & 0xff) << 4;
+ int my = m_spriteram[offs + 2*group + 1];
+ int i;
+
+ mx = mx | (my >> 12);
+
+ mx = ((mx + 16) & 0x1ff) - 16;
+ my = -my;
+
+ if (flip)
+ {
+ mx = 240 - mx;
+ my = 240 - my;
+ }
+
+ // every sprite is a column 32 tiles (512 pixels) tall
+ for (i = 0; i < 0x20; ++i)
+ {
+ my &= 0x1ff;
+
+ if (my <= cliprect.max_y && my + 15 >= cliprect.min_y)
+ {
+ int color = *(tiledata++) & 0x7f;
+ int tile = *(tiledata++);
+ int fx = 0,fy = 0;
+ int region = 0;
+
+ m_newtilecb(tile, fx, fy, region);
+
+ // the black touch '96 cloned hardware has some tiles
+ // as 8bpp, we need to shift the colour bits in those cases
+ int depth = m_gfxdecode->gfx(region)->depth();
+ if (depth == 256) color >>= 4;
+
+ if (flip)
+ {
+ fx = !fx;
+ fy = !fy;
+ }
+
+ m_gfxdecode->gfx(region)->transpen(bitmap,cliprect,
+ tile,
+ color,
+ fx, fy,
+ mx, my, 0);
+ }
+ else
+ {
+ tiledata += 2;
+ }
+
+ if (flip)
+ my -= 16;
+ else
+ my += 16;
+ }
+ }
+}
+
+void snk68_spr_device::draw_sprites_all(bitmap_ind16 &bitmap, const rectangle &cliprect)
+{
+ /* This appears to be the correct priority order */
+ draw_sprites(bitmap, cliprect, 2);
+ draw_sprites(bitmap, cliprect, 3);
+ draw_sprites(bitmap, cliprect, 1);
+}
+
+void snk68_spr_device::set_flip(int flip)
+{
+ if (flip) m_flipscreen = 1;
+ else m_flipscreen = 0;
+} \ No newline at end of file
diff --git a/src/mame/video/snk68_spr.h b/src/mame/video/snk68_spr.h
new file mode 100644
index 00000000000..8a0494e0a7b
--- /dev/null
+++ b/src/mame/video/snk68_spr.h
@@ -0,0 +1,50 @@
+typedef device_delegate<void (int&, int&, int&, int&)> snk68_tile_indirection_delegate;
+
+#define MCFG_SNK68_SPR_GFXDECODE(_gfxtag) \
+ snk68_spr_device::static_set_gfxdecode_tag(*device, "^" _gfxtag);
+#define MCFG_SNK68_SPR_PALETTE(_palette_tag) \
+ snk68_spr_device::static_set_palette_tag(*device, "^" _palette_tag);
+#define MCFG_SNK68_SPR_SET_TILE_INDIRECT( _class, _method) \
+ snk68_spr_device::set_tile_indirect_cb(*device, snk68_tile_indirection_delegate(&_class::_method, #_class "::" #_method, NULL, (_class *)0));
+#define MCFG_SNK68_SPR_NO_PARTIAL \
+ snk68_spr_device::static_set_no_partial(*device);
+
+
+class snk68_spr_device : public device_t
+{
+public:
+ snk68_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // static configuration
+ static void static_set_gfxdecode_tag(device_t &device, const char *tag);
+ static void static_set_palette_tag(device_t &device, const char *tag);
+ static void set_tile_indirect_cb(device_t &device,snk68_tile_indirection_delegate newtilecb);
+ static void static_set_no_partial(device_t &device);
+
+ DECLARE_READ16_MEMBER(spriteram_r);
+ DECLARE_WRITE16_MEMBER(spriteram_w);
+ void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int group);
+ void draw_sprites_all(bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ snk68_tile_indirection_delegate m_newtilecb;
+
+ void tile_callback_noindirect(int& tile, int& fx, int& fy, int& region);
+ void set_flip(int flip);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ optional_device<gfxdecode_device> m_gfxdecode;
+ optional_device<palette_device> m_palette;
+ required_shared_ptr<UINT16> m_spriteram;
+ required_device<screen_device> m_screen;
+ int m_flipscreen;
+ int m_partialupdates; // the original hardware needs this, the cloned hardware does not.
+};
+
+
+extern const device_type SNK68_SPR;
+
+
diff --git a/src/mame/video/system16.cpp b/src/mame/video/system16.cpp
index f25c59d1446..24309dbf991 100644
--- a/src/mame/video/system16.cpp
+++ b/src/mame/video/system16.cpp
@@ -34,14 +34,7 @@
void segas1x_bootleg_state::setup_system16_bootleg_spritebanking( )
{
- if (m_spritebank_type == 1)
- {
- static const UINT8 default_banklist[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
- int i;
- for (i = 0; i < 16; i++)
- m_sprites->set_bank(i, default_banklist[i]);
- }
- else
+ if (m_spritebank_type == 0)
{
static const UINT8 alternate_banklist[] = { 0,255,255,255, 255,255,255,3, 255,255,255,2, 255,1,0,255 };
int i;
diff --git a/src/mame/video/targeth.cpp b/src/mame/video/targeth.cpp
index 1341680752d..5b3eafe14b1 100644
--- a/src/mame/video/targeth.cpp
+++ b/src/mame/video/targeth.cpp
@@ -34,7 +34,7 @@
1 | xxxxxxxx x------- | not used?
*/
-TILE_GET_INFO_MEMBER(targeth_state::get_tile_info_targeth_screen0)
+TILE_GET_INFO_MEMBER(targeth_state::get_tile_info_screen0)
{
int data = m_videoram[tile_index << 1];
int data2 = m_videoram[(tile_index << 1) + 1];
@@ -43,7 +43,7 @@ TILE_GET_INFO_MEMBER(targeth_state::get_tile_info_targeth_screen0)
SET_TILE_INFO_MEMBER(0, code, data2 & 0x1f, TILE_FLIPXY((data2 >> 5) & 0x03));
}
-TILE_GET_INFO_MEMBER(targeth_state::get_tile_info_targeth_screen1)
+TILE_GET_INFO_MEMBER(targeth_state::get_tile_info_screen1)
{
int data = m_videoram[(0x2000/2) + (tile_index << 1)];
int data2 = m_videoram[(0x2000/2) + (tile_index << 1) + 1];
@@ -58,7 +58,7 @@ TILE_GET_INFO_MEMBER(targeth_state::get_tile_info_targeth_screen1)
***************************************************************************/
-WRITE16_MEMBER(targeth_state::targeth_vram_w)
+WRITE16_MEMBER(targeth_state::vram_w)
{
m_videoram[offset] = data;
m_pant[(offset & 0x1fff) >> 12]->mark_tile_dirty(((offset << 1) & 0x1fff) >> 2);
@@ -73,8 +73,8 @@ WRITE16_MEMBER(targeth_state::targeth_vram_w)
void targeth_state::video_start()
{
- m_pant[0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(targeth_state::get_tile_info_targeth_screen0),this),TILEMAP_SCAN_ROWS,16,16,64,32);
- m_pant[1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(targeth_state::get_tile_info_targeth_screen1),this),TILEMAP_SCAN_ROWS,16,16,64,32);
+ m_pant[0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(targeth_state::get_tile_info_screen0),this),TILEMAP_SCAN_ROWS,16,16,64,32);
+ m_pant[1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(targeth_state::get_tile_info_screen1),this),TILEMAP_SCAN_ROWS,16,16,64,32);
m_pant[0]->set_transparent_pen(0);
}
@@ -105,10 +105,9 @@ void targeth_state::video_start()
void targeth_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int i;
gfx_element *gfx = m_gfxdecode->gfx(0);
- for (i = 3; i < (0x1000 - 6)/2; i += 4){
+ for (int i = 3; i < (0x1000 - 6)/2; i += 4){
int sx = m_spriteram[i+2] & 0x03ff;
int sy = (240 - (m_spriteram[i] & 0x00ff)) & 0x00ff;
int number = m_spriteram[i+3] & 0x3fff;
@@ -130,7 +129,7 @@ void targeth_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
***************************************************************************/
-UINT32 targeth_state::screen_update_targeth(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 targeth_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* set scroll registers */
m_pant[0]->set_scrolly(0, m_vregs[0]);
diff --git a/src/mame/video/thoop2.cpp b/src/mame/video/thoop2.cpp
index e2b826941c5..91b87645583 100644
--- a/src/mame/video/thoop2.cpp
+++ b/src/mame/video/thoop2.cpp
@@ -38,7 +38,7 @@
1 | x------- -------- | flip y
*/
-TILE_GET_INFO_MEMBER(thoop2_state::get_tile_info_thoop2_screen0)
+TILE_GET_INFO_MEMBER(thoop2_state::get_tile_info_screen0)
{
int data = m_videoram[tile_index << 1];
int data2 = m_videoram[(tile_index << 1) + 1];
@@ -50,7 +50,7 @@ TILE_GET_INFO_MEMBER(thoop2_state::get_tile_info_thoop2_screen0)
}
-TILE_GET_INFO_MEMBER(thoop2_state::get_tile_info_thoop2_screen1)
+TILE_GET_INFO_MEMBER(thoop2_state::get_tile_info_screen1)
{
int data = m_videoram[(0x1000/2) + (tile_index << 1)];
int data2 = m_videoram[(0x1000/2) + (tile_index << 1) + 1];
@@ -67,7 +67,7 @@ TILE_GET_INFO_MEMBER(thoop2_state::get_tile_info_thoop2_screen1)
***************************************************************************/
-WRITE16_MEMBER(thoop2_state::thoop2_vram_w)
+WRITE16_MEMBER(thoop2_state::vram_w)
{
COMBINE_DATA(&m_videoram[offset]);
m_pant[offset >> 11]->mark_tile_dirty(((offset << 1) & 0x0fff) >> 2);
@@ -81,17 +81,18 @@ WRITE16_MEMBER(thoop2_state::thoop2_vram_w)
void thoop2_state::video_start()
{
- int i;
-
- m_pant[0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(thoop2_state::get_tile_info_thoop2_screen0),this),TILEMAP_SCAN_ROWS,16,16,32,32);
- m_pant[1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(thoop2_state::get_tile_info_thoop2_screen1),this),TILEMAP_SCAN_ROWS,16,16,32,32);
+ m_pant[0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(thoop2_state::get_tile_info_screen0),this),TILEMAP_SCAN_ROWS,16,16,32,32);
+ m_pant[1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(thoop2_state::get_tile_info_screen1),this),TILEMAP_SCAN_ROWS,16,16,32,32);
m_pant[0]->set_transmask(0,0xff01,0x00ff); /* pens 1-7 opaque, pens 0, 8-15 transparent */
m_pant[1]->set_transmask(0,0xff01,0x00ff); /* pens 1-7 opaque, pens 0, 8-15 transparent */
- for (i = 0; i < 5; i++){
+ for (int i = 0; i < 5; i++){
m_sprite_table[i] = std::make_unique<int[]>(512);
+ save_pointer(NAME(m_sprite_table[i].get()), 512, i);
}
+
+ save_item(NAME(m_sprite_count));
}
/***************************************************************************
@@ -100,17 +101,15 @@ void thoop2_state::video_start()
***************************************************************************/
-void thoop2_state::thoop2_sort_sprites()
+void thoop2_state::sort_sprites()
{
- int i;
-
m_sprite_count[0] = 0;
m_sprite_count[1] = 0;
m_sprite_count[2] = 0;
m_sprite_count[3] = 0;
m_sprite_count[4] = 0;
- for (i = 3; i < (0x1000 - 6)/2; i += 4){
+ for (int i = 3; i < (0x1000 - 6)/2; i += 4){
int color = (m_spriteram[i+2] & 0x7e00) >> 9;
int priority = (m_spriteram[i] & 0x3000) >> 12;
@@ -194,7 +193,7 @@ void thoop2_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect,
***************************************************************************/
-UINT32 thoop2_state::screen_update_thoop2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 thoop2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* set scroll registers */
m_pant[0]->set_scrolly(0, m_vregs[0]);
@@ -202,7 +201,7 @@ UINT32 thoop2_state::screen_update_thoop2(screen_device &screen, bitmap_ind16 &b
m_pant[1]->set_scrolly(0, m_vregs[2]);
m_pant[1]->set_scrollx(0, m_vregs[3]);
- thoop2_sort_sprites();
+ sort_sprites();
bitmap.fill(0, cliprect );
diff --git a/src/osd/eigccppc.h b/src/osd/eigccppc.h
index dacf6b5efc3..d9cd2ee1828 100644
--- a/src/osd/eigccppc.h
+++ b/src/osd/eigccppc.h
@@ -285,193 +285,6 @@ _count_leading_ones(UINT32 value)
}
-
-/***************************************************************************
- INLINE SYNCHRONIZATION FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- compare_exchange32 - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
--------------------------------------------------*/
-
-#define compare_exchange32 _compare_exchange32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
-{
- INT32 result;
-
- __asm__ __volatile__ (
- "1: lwarx %[result], 0, %[ptr] \n"
- " cmpw %[compare], %[result] \n"
- " bne 2f \n"
- " stwcx. %[exchange], 0, %[ptr] \n"
- " bne- 1b \n"
- " lwsync \n"
- "2: "
- : [dummy] "+m" (*ptr) /* Lets GCC know that *ptr will be read/written in case it's not marked volatile */
- , [result] "=&r" (result)
- : [ptr] "r" (ptr)
- , [exchange] "r" (exchange)
- , [compare] "r" (compare)
- : "cr0"
- );
-
- return result;
-}
-
-
-/*-------------------------------------------------
- compare_exchange64 - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
--------------------------------------------------*/
-
-#if defined(__ppc64__) || defined(__PPC64__)
-#define compare_exchange64 _compare_exchange64
-static inline INT64 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
-{
- INT64 result;
-
- __asm__ __volatile__ (
- "1: ldarx %[result], 0, %[ptr] \n"
- " cmpd %[compare], %[result] \n"
- " bne 2f \n"
- " stdcx. %[exchange], 0, %[ptr] \n"
- " bne- 1b \n"
- " lwsync \n"
- "2: "
- : [dummy] "+m" (*ptr) /* Lets GCC know that *ptr will be read/written in case it's not marked volatile */
- , [result] "=&r" (result)
- : [ptr] "r" (ptr)
- , [exchange] "r" (exchange)
- , [compare] "r" (compare)
- : "cr0"
- );
-
- return result;
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_exchange32 - atomically exchange the
- exchange value with the memory at 'ptr',
- returning the original value.
--------------------------------------------------*/
-
-#define atomic_exchange32 _atomic_exchange32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
-{
- INT32 result;
-
- __asm__ __volatile__ (
- "1: lwarx %[result], 0, %[ptr] \n"
- " stwcx. %[exchange], 0, %[ptr] \n"
- " bne- 1b \n"
- " lwsync \n"
- : [dummy] "+m" (*ptr) /* Lets GCC know that *ptr will be read/written in case it's not marked volatile */
- , [result] "=&r" (result)
- : [ptr] "r" (ptr)
- , [exchange] "r" (exchange)
- : "cr0"
- );
-
- return result;
-}
-
-
-/*-------------------------------------------------
- atomic_add32 - atomically add the delta value
- to the memory at 'ptr', returning the final
- result.
--------------------------------------------------*/
-
-#define atomic_add32 _atomic_add32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_atomic_add32(INT32 volatile *ptr, INT32 delta)
-{
- INT32 result;
-
- __asm__ __volatile__ (
- "1: lwarx %[result], 0, %[ptr] \n"
- " add %[result], %[result], %[delta] \n"
- " stwcx. %[result], 0, %[ptr] \n"
- " bne- 1b \n"
- " lwsync \n"
- : [dummy] "+m" (*ptr) /* Lets GCC know that *ptr will be read/written in case it's not marked volatile */
- , [result] "=&b" (result)
- : [ptr] "r" (ptr)
- , [delta] "r" (delta)
- : "cr0"
- );
-
- return result;
-}
-
-
-/*-------------------------------------------------
- atomic_increment32 - atomically increment the
- 32-bit value in memory at 'ptr', returning the
- final result.
--------------------------------------------------*/
-
-#define atomic_increment32 _atomic_increment32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_atomic_increment32(INT32 volatile *ptr)
-{
- INT32 result;
-
- __asm__ __volatile__ (
- "1: lwarx %[result], 0, %[ptr] \n"
- " addi %[result], %[result], 1 \n"
- " stwcx. %[result], 0, %[ptr] \n"
- " bne- 1b \n"
- " lwsync \n"
- : [dummy] "+m" (*ptr) /* Lets GCC know that *ptr will be read/written in case it's not marked volatile */
- , [result] "=&b" (result)
- : [ptr] "r" (ptr)
- : "cr0"
- );
-
- return result;
-}
-
-
-/*-------------------------------------------------
- atomic_decrement32 - atomically decrement the
- 32-bit value in memory at 'ptr', returning the
- final result.
--------------------------------------------------*/
-
-#define atomic_decrement32 _atomic_decrement32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_atomic_decrement32(INT32 volatile *ptr)
-{
- INT32 result;
-
- __asm__ __volatile__ (
- "1: lwarx %[result], 0, %[ptr] \n"
- " addi %[result], %[result], -1 \n"
- " stwcx. %[result], 0, %[ptr] \n"
- " bne- 1b \n"
- " lwsync \n"
- : [dummy] "+m" (*ptr) /* Lets GCC know that *ptr will be read/written in case it's not marked volatile */
- , [result] "=&b" (result)
- : [ptr] "r" (ptr)
- : "cr0"
- );
-
- return result;
-}
-
-
-
/***************************************************************************
INLINE TIMING FUNCTIONS
***************************************************************************/
diff --git a/src/osd/eigccx86.h b/src/osd/eigccx86.h
index 2be2164a165..3494e33b5db 100644
--- a/src/osd/eigccx86.h
+++ b/src/osd/eigccx86.h
@@ -521,162 +521,6 @@ _count_leading_ones(UINT32 value)
return result;
}
-
-
-/***************************************************************************
- INLINE SYNCHRONIZATION FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- compare_exchange32 - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
--------------------------------------------------*/
-
-#define compare_exchange32 _compare_exchange32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
-{
- INT32 result;
-
- __asm__ __volatile__ (
- " lock ; cmpxchgl %[exchange], %[ptr] ;"
- : [ptr] "+m" (*ptr)
- , [result] "=a" (result)
- : [compare] "1" (compare)
- , [exchange] "q" (exchange)
- : "cc"
- );
-
- return result;
-}
-
-
-/*-------------------------------------------------
- compare_exchange64 - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
--------------------------------------------------*/
-
-#ifdef __x86_64__
-#define compare_exchange64 _compare_exchange64
-static inline INT64 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
-{
- INT64 result;
-
- __asm__ __volatile__ (
- " lock ; cmpxchgq %[exchange], %[ptr] ;"
- : [ptr] "+m" (*ptr)
- , [result] "=a" (result)
- : [compare] "1" (compare)
- , [exchange] "q" (exchange)
- : "cc"
- );
-
- return result;
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_exchange32 - atomically exchange the
- exchange value with the memory at 'ptr',
- returning the original value.
--------------------------------------------------*/
-
-#define atomic_exchange32 _atomic_exchange32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
-{
- INT32 result;
-
- __asm__ __volatile__ (
- " lock ; xchgl %[exchange], %[ptr] ;"
- : [ptr] "+m" (*ptr)
- , [result] "=r" (result)
- : [exchange] "1" (exchange)
- );
-
- return result;
-}
-
-
-/*-------------------------------------------------
- atomic_add32 - atomically add the delta value
- to the memory at 'ptr', returning the final
- result.
--------------------------------------------------*/
-
-#define atomic_add32 _atomic_add32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_atomic_add32(INT32 volatile *ptr, INT32 delta)
-{
- INT32 result = delta;
-
- __asm__ __volatile__ (
- " lock ; xaddl %[result], %[ptr] ;"
- : [ptr] "+m" (*ptr)
- , [result] "+r" (result)
- :
- : "cc"
- );
-
- return result + delta;
-}
-
-
-/*-------------------------------------------------
- atomic_increment32 - atomically increment the
- 32-bit value in memory at 'ptr', returning the
- final result.
--------------------------------------------------*/
-
-#define atomic_increment32 _atomic_increment32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_atomic_increment32(INT32 volatile *ptr)
-{
- INT32 result = 1;
-
- __asm__ __volatile__ (
- " lock ; xaddl %[result], %[ptr] ;"
- : [ptr] "+m" (*ptr)
- , [result] "+r" (result)
- :
- : "cc"
- );
-
- return result + 1;
-}
-
-
-/*-------------------------------------------------
- atomic_decrement32 - atomically decrement the
- 32-bit value in memory at 'ptr', returning the
- final result.
--------------------------------------------------*/
-
-#define atomic_decrement32 _atomic_decrement32
-static inline INT32 ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_atomic_decrement32(INT32 volatile *ptr)
-{
- INT32 result = -1;
-
- __asm__ __volatile__ (
- " lock ; xaddl %[result], %[ptr] ;"
- : [ptr] "+m" (*ptr)
- , [result] "+r" (result)
- :
- : "cc"
- );
-
- return result - 1;
-}
-
-
-
/***************************************************************************
INLINE TIMING FUNCTIONS
***************************************************************************/
diff --git a/src/osd/eivc.h b/src/osd/eivc.h
index 3794e7ff169..bdd2eeb9407 100644
--- a/src/osd/eivc.h
+++ b/src/osd/eivc.h
@@ -20,19 +20,9 @@
#pragma warning(pop)
#else
-extern "C" long __cdecl _InterlockedIncrement(long volatile *);
-extern "C" long __cdecl _InterlockedDecrement(long volatile *);
-extern "C" long _InterlockedExchange(long volatile *, long);
-extern "C" long _InterlockedCompareExchange (long volatile *, long, long);
-extern "C" long _InterlockedExchangeAdd(long volatile *, long);
extern "C" unsigned char _BitScanReverse(unsigned long *Index, unsigned long Mask);
#endif
-#pragma intrinsic(_InterlockedIncrement)
-#pragma intrinsic(_InterlockedDecrement)
-#pragma intrinsic(_InterlockedCompareExchange)
-#pragma intrinsic(_InterlockedExchange)
-#pragma intrinsic(_InterlockedExchangeAdd)
#if (_MSC_VER >= 1310)
#pragma intrinsic(_BitScanReverse)
#endif
@@ -71,104 +61,4 @@ static inline UINT8 _count_leading_ones(UINT32 value)
}
#endif
-
-
-/***************************************************************************
- INLINE SYNCHRONIZATION FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- compare_exchange32 - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
--------------------------------------------------*/
-
-#ifndef compare_exchange32
-#define compare_exchange32 _compare_exchange32
-static inline INT32 _compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
-{
- return _InterlockedCompareExchange((volatile long *)ptr, exchange, compare);
-}
-#endif
-
-
-/*-------------------------------------------------
- compare_exchange64 - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
--------------------------------------------------*/
-
-#ifdef PTR64
-#ifndef compare_exchange64
-#define compare_exchange64 _compare_exchange64
-static inline INT64 _compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
-{
- return _InterlockedCompareExchange64(ptr, exchange, compare);
-}
-#endif
-#endif
-
-
-/*-------------------------------------------------
- atomic_exchange32 - atomically exchange the
- exchange value with the memory at 'ptr',
- returning the original value.
--------------------------------------------------*/
-
-#ifndef atomic_exchange32
-#define atomic_exchange32 _atomic_exchange32
-static inline INT32 _atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
-{
- return _InterlockedExchange((volatile long *)ptr, exchange);
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_add32 - atomically add the delta value
- to the memory at 'ptr', returning the final
- result.
--------------------------------------------------*/
-
-#ifndef atomic_add32
-#define atomic_add32 _atomic_add32
-static inline INT32 _atomic_add32(INT32 volatile *ptr, INT32 delta)
-{
- return _InterlockedExchangeAdd((volatile long *)ptr, delta) + delta;
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_increment32 - atomically increment the
- 32-bit value in memory at 'ptr', returning the
- final result.
--------------------------------------------------*/
-
-#ifndef atomic_increment32
-#define atomic_increment32 _atomic_increment32
-static inline INT32 _atomic_increment32(INT32 volatile *ptr)
-{
- return _InterlockedIncrement((volatile long *)ptr);
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_decrement32 - atomically decrement the
- 32-bit value in memory at 'ptr', returning the
- final result.
--------------------------------------------------*/
-
-#ifndef atomic_decrement32
-#define atomic_decrement32 _atomic_decrement32
-static inline INT32 _atomic_decrement32(INT32 volatile *ptr)
-{
- return _InterlockedDecrement((volatile long *)ptr);
-}
-#endif
-
-
#endif /* __EIVC__ */
diff --git a/src/osd/eminline.h b/src/osd/eminline.h
index 80b31437f2a..519b2b93154 100644
--- a/src/osd/eminline.h
+++ b/src/osd/eminline.h
@@ -17,77 +17,6 @@
#if defined(__GNUC__)
#if defined(__i386__) || defined(__x86_64__)
-
-
-static inline void ATTR_FORCE_INLINE
-osd_yield_processor(void)
-{
- __asm__ __volatile__ ( " rep ; nop ;" );
-}
-
-
-#if defined(__x86_64__)
-
-//============================================================
-// osd_exchange64
-//============================================================
-
-static inline INT64 ATTR_UNUSED ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_osd_exchange64(INT64 volatile *ptr, INT64 exchange)
-{
- INT64 ret;
- __asm__ __volatile__ (
- " lock ; xchg %[exchange], %[ptr] ;"
- : [ptr] "+m" (*ptr)
- , [ret] "=r" (ret)
- : [exchange] "1" (exchange)
- );
- return ret;
-}
-#define osd_exchange64 _osd_exchange64
-
-#endif /* __x86_64__ */
-
-
-#elif defined(__ppc__) || defined (__PPC__) || defined(__ppc64__) || defined(__PPC64__)
-
-
-static inline void ATTR_FORCE_INLINE
-osd_yield_processor(void)
-{
- __asm__ __volatile__ ( " nop \n nop \n" );
-}
-
-
-
-#if defined(__ppc64__) || defined(__PPC64__)
-
-//============================================================
-// osd_exchange64
-//============================================================
-
-static inline INT64 ATTR_UNUSED ATTR_NONNULL(1) ATTR_FORCE_INLINE
-_osd_exchange64(INT64 volatile *ptr, INT64 exchange)
-{
- INT64 ret;
- __asm__ __volatile__ (
- "1: ldarx %[ret], 0, %[ptr] \n"
- " stdcx. %[exchange], 0, %[ptr] \n"
- " bne- 1b \n"
- : [ret] "=&r" (ret)
- : [ptr] "r" (ptr)
- , [exchange] "r" (exchange)
- : "cr0"
- );
- return ret;
-}
-#define osd_exchange64 _osd_exchange64
-
-#endif /* __ppc64__ || __PPC64__ */
-
-#endif
-
-#if defined(__i386__) || defined(__x86_64__)
#include "eigccx86.h"
#elif defined(__ppc__) || defined (__PPC__) || defined(__ppc64__) || defined(__PPC64__)
#include "eigccppc.h"
@@ -105,33 +34,6 @@ _osd_exchange64(INT64 volatile *ptr, INT64 exchange)
#include "eivc.h"
-INT32 win_compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange);
-INT32 win_atomic_exchange32(INT32 volatile *ptr, INT32 exchange);
-INT32 win_atomic_add32(INT32 volatile *ptr, INT32 delta);
-
-#ifdef PTR64
-INT64 win_compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange);
-#endif
-
-
-#ifndef compare_exchange32
-#define compare_exchange32 win_compare_exchange32
-#endif /* compare_exchange32 */
-
-#ifdef PTR64
-#ifndef compare_exchange64
-#define compare_exchange64 win_compare_exchange64
-#endif /* compare_exchange64 */
-#endif
-
-#ifndef atomic_exchange32
-#define atomic_exchange32 win_atomic_exchange32
-#endif /* atomic_exchange32 */
-
-
-#ifndef atomic_add32
-#define atomic_add32 win_atomic_add32
-#endif /* atomic_add32 */
#else
#error "no matching assembler implementations found - please compile with NOASM=1"
@@ -391,160 +293,6 @@ static inline UINT8 count_leading_ones(UINT32 val)
#endif
-
-/***************************************************************************
- INLINE SYNCHRONIZATION FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- compare_exchange32 - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
-
- Note that the default implementation does
- no synchronization. You MUST override this
- in osinline.h for it to be useful in a
- multithreaded environment!
--------------------------------------------------*/
-
-#ifndef compare_exchange32
-static inline INT32 compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
-{
- INT32 oldval = *ptr;
- if (*ptr == compare)
- *ptr = exchange;
- return oldval;
-}
-#endif
-
-
-/*-------------------------------------------------
- compare_exchange64 - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
-
- Note that the default implementation does
- no synchronization. You MUST override this
- in osinline.h for it to be useful in a
- multithreaded environment!
--------------------------------------------------*/
-
-#ifdef PTR64
-#ifndef compare_exchange64
-static inline INT64 compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
-{
- INT64 oldval = *ptr;
- if (*ptr == compare)
- *ptr = exchange;
- return oldval;
-}
-#endif
-#endif
-
-
-/*-------------------------------------------------
- compare_exchange_ptr - compare the 'compare'
- value against the memory at 'ptr'; if equal,
- swap in the 'exchange' value. Regardless,
- return the previous value at 'ptr'.
--------------------------------------------------*/
-
-#ifndef compare_exchange_ptr
-static inline void *compare_exchange_ptr(void * volatile *ptr, void *compare, void *exchange)
-{
-#ifdef PTR64
- INT64 result;
- result = compare_exchange64((INT64 volatile *)ptr, (INT64)compare, (INT64)exchange);
-#else
- INT32 result;
- result = compare_exchange32((INT32 volatile *)ptr, (INT32)compare, (INT32)exchange);
-#endif
- return (void *)result;
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_exchange32 - atomically exchange the
- exchange value with the memory at 'ptr',
- returning the original value.
-
- Note that the default implementation does
- no synchronization. You MUST override this
- in osinline.h for it to be useful in a
- multithreaded environment!
--------------------------------------------------*/
-
-#ifndef atomic_exchange32
-static inline INT32 atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
-{
- INT32 oldval = *ptr;
- *ptr = exchange;
- return oldval;
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_add32 - atomically add the delta value
- to the memory at 'ptr', returning the final
- result.
-
- Note that the default implementation does
- no synchronization. You MUST override this
- in osinline.h for it to be useful in a
- multithreaded environment!
--------------------------------------------------*/
-
-#ifndef atomic_add32
-static inline INT32 atomic_add32(INT32 volatile *ptr, INT32 delta)
-{
- return (*ptr += delta);
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_increment32 - atomically increment the
- 32-bit value in memory at 'ptr', returning the
- final result.
-
- Note that the default implementation does
- no synchronization. You MUST override this
- in osinline.h for it to be useful in a
- multithreaded environment!
--------------------------------------------------*/
-
-#ifndef atomic_increment32
-static inline INT32 atomic_increment32(INT32 volatile *ptr)
-{
- return atomic_add32(ptr, 1);
-}
-#endif
-
-
-/*-------------------------------------------------
- atomic_decrement32 - atomically decrement the
- 32-bit value in memory at 'ptr', returning the
- final result.
-
- Note that the default implementation does
- no synchronization. You MUST override this
- in osinline.h for it to be useful in a
- multithreaded environment!
--------------------------------------------------*/
-
-#ifndef atomic_decrement32
-static inline INT32 atomic_decrement32(INT32 volatile *ptr)
-{
- return atomic_add32(ptr, -1);
-}
-#endif
-
-
-
/***************************************************************************
INLINE TIMING FUNCTIONS
***************************************************************************/
diff --git a/src/osd/modules/debugger/debugint.cpp b/src/osd/modules/debugger/debugint.cpp
index 40a6e2a297b..205af4e1f15 100644
--- a/src/osd/modules/debugger/debugint.cpp
+++ b/src/osd/modules/debugger/debugint.cpp
@@ -1763,8 +1763,6 @@ static void handle_menus(running_machine &machine)
static void followers_set_cpu(device_t *device)
{
- std::string title;
-
for (DView *dv = list; dv != nullptr; dv = dv->next)
{
if (dview_is_state(dv, VIEW_STATE_FOLLOW_CPU))
@@ -1775,8 +1773,7 @@ static void followers_set_cpu(device_t *device)
case DVT_DISASSEMBLY:
case DVT_STATE:
dv->view->set_source(*source);
- strprintf(title, "%s", source->name());
- dview_set_title(dv, title);
+ dview_set_title(dv, string_format("%s", source->name()));
break;
}
}
diff --git a/src/osd/modules/debugger/debugwin.cpp b/src/osd/modules/debugger/debugwin.cpp
index b31d12ea67a..634332899c3 100644
--- a/src/osd/modules/debugger/debugwin.cpp
+++ b/src/osd/modules/debugger/debugwin.cpp
@@ -25,7 +25,8 @@
#include "debugger.h"
#include "window.h"
-#include "../../windows/input.h"
+#include "../input/input_common.h"
+#include "../input/input_windows.h"
class debugger_windows : public osd_module, public debug_module, protected debugger_windows_interface
@@ -121,7 +122,7 @@ void debugger_windows::wait_for_debugger(device_t &device, bool firststop)
show_all();
// run input polling to ensure that our status is in sync
- wininput_poll(*m_machine);
+ downcast<windows_osd_interface&>(machine().osd()).poll_input(*m_machine);
// get and process messages
MSG message;
@@ -202,7 +203,7 @@ bool debugger_windows::seq_pressed() const
else
{
// handle everything else as a series of ANDs
- int const vkey = wininput_vkey_for_mame_code(code);
+ int const vkey = keyboard_trans_table::instance().vkey_for_mame_code(code);
bool const pressed = (vkey != 0) && ((GetAsyncKeyState(vkey) & 0x8000) != 0);
if (first) // if this is the first in the sequence, result is set equal
diff --git a/src/osd/modules/debugger/qt/mainwindow.cpp b/src/osd/modules/debugger/qt/mainwindow.cpp
index ef4a3ea809c..3ec15065b46 100644
--- a/src/osd/modules/debugger/qt/mainwindow.cpp
+++ b/src/osd/modules/debugger/qt/mainwindow.cpp
@@ -144,9 +144,8 @@ void MainWindow::setProcessor(device_t* processor)
m_dasmFrame->view()->verticalScrollBar()->setValue(m_dasmFrame->view()->view()->visible_position().y);
// Window title
- std::string title;
- strprintf(title,"Debug: %s - %s '%s'", m_machine->system().name, processor->name(), processor->tag());
- setWindowTitle(title.c_str());
+ string_format("Debug: %s - %s '%s'", m_machine->system().name, processor->name(), processor->tag());
+ setWindowTitle(string_format("Debug: %s - %s '%s'", m_machine->system().name, processor->name(), processor->tag()).c_str());
}
@@ -236,11 +235,11 @@ void MainWindow::toggleBreakpointAtCursor(bool changedTo)
std::string command;
if (bpindex == -1)
{
- strprintf(command,"bpset 0x%X", address);
+ command = string_format("bpset 0x%X", address);
}
else
{
- strprintf(command,"bpclear 0x%X", bpindex);
+ command = string_format("bpclear 0x%X", bpindex);
}
debug_console_execute_command(*m_machine, command.c_str(), 1);
}
@@ -265,8 +264,7 @@ void MainWindow::enableBreakpointAtCursor(bool changedTo)
if (bp != NULL)
{
INT32 const bpindex = bp->index();
- std::string command;
- strprintf(command,bp->enabled() ? "bpdisable 0x%X" : "bpenable 0x%X", bpindex);
+ std::string command = string_format(bp->enabled() ? "bpdisable 0x%X" : "bpenable 0x%X", bpindex);
debug_console_execute_command(*m_machine, command.c_str(), 1);
}
}
@@ -281,8 +279,7 @@ void MainWindow::runToCursor(bool changedTo)
if (dasmView->cursor_visible() && (debug_cpu_get_visible_cpu(*m_machine) == dasmView->source()->device()))
{
offs_t address = downcast<debug_view_disasm*>(dasmView)->selected_address();
- std::string command;
- strprintf(command,"go 0x%X", address);
+ std::string command = string_format("go 0x%X", address);
debug_console_execute_command(*m_machine, command.c_str(), 1);
}
}
@@ -475,8 +472,7 @@ void MainWindow::createImagesMenu()
image_interface_iterator iter(m_machine->root_device());
for (device_image_interface *img = iter.first(); img != NULL; img = iter.next())
{
- std::string menuName;
- strprintf(menuName,"%s : %s", img->device().name(), img->exists() ? img->filename() : "[empty slot]");
+ std::string menuName = string_format("%s : %s", img->device().name(), img->exists() ? img->filename() : "[empty slot]");
QMenu* interfaceMenu = imagesMenu->addMenu(menuName.c_str());
interfaceMenu->setObjectName(img->device().name());
diff --git a/src/osd/modules/debugger/win/consolewininfo.cpp b/src/osd/modules/debugger/win/consolewininfo.cpp
index 50c0fced670..a5423631ce4 100644
--- a/src/osd/modules/debugger/win/consolewininfo.cpp
+++ b/src/osd/modules/debugger/win/consolewininfo.cpp
@@ -43,9 +43,7 @@ consolewin_info::consolewin_info(debugger_windows_interface &debugger) :
m_devices_menu = CreatePopupMenu();
for ( ; img != NULL; img = iter.next())
{
- std::string temp;
- strprintf(temp,"%s : %s", img->device().name(), img->exists() ? img->filename() : "[no image]");
- TCHAR *tc_buf = tstring_from_utf8(temp.c_str());
+ TCHAR *tc_buf = tstring_from_utf8(string_format("%s : %s", img->device().name(), img->exists() ? img->filename() : "[no image]").c_str());
if (tc_buf != NULL)
{
AppendMenu(m_devices_menu, MF_ENABLED, 0, tc_buf);
@@ -106,9 +104,8 @@ void consolewin_info::set_cpu(device_t &device)
// then update the caption
char curtitle[256];
- std::string title;
- strprintf(title, "Debug: %s - %s '%s'", device.machine().system().name, device.name(), device.tag());
+ std::string title = string_format("Debug: %s - %s '%s'", device.machine().system().name, device.name(), device.tag());
win_get_window_text_utf8(window(), curtitle, ARRAY_LENGTH(curtitle));
if (title.compare(curtitle) != 0)
win_set_window_text_utf8(window(), title.c_str());
@@ -200,9 +197,7 @@ void consolewin_info::update_menu()
AppendMenu(devicesubmenu, flags_for_exists, new_item + DEVOPTION_CASSETTE_FASTFORWARD, TEXT("Fast Forward"));
}
- std::string temp;
- strprintf(temp,"%s :%s", img->device().name(), img->exists() ? img->filename() : "[empty slot]");
- TCHAR *tc_buf = tstring_from_utf8(temp.c_str());
+ TCHAR *tc_buf = tstring_from_utf8(string_format("%s :%s", img->device().name(), img->exists() ? img->filename() : "[empty slot]").c_str());
if (tc_buf != NULL)
{
ModifyMenu(m_devices_menu, cnt, MF_BYPOSITION | MF_POPUP, (UINT_PTR)devicesubmenu, tc_buf);
diff --git a/src/osd/modules/debugger/win/disasmbasewininfo.cpp b/src/osd/modules/debugger/win/disasmbasewininfo.cpp
index 0cc9287bb0a..597e6b54b75 100644
--- a/src/osd/modules/debugger/win/disasmbasewininfo.cpp
+++ b/src/osd/modules/debugger/win/disasmbasewininfo.cpp
@@ -197,9 +197,9 @@ bool disasmbasewin_info::handle_command(WPARAM wparam, LPARAM lparam)
{
std::string command;
if (bpindex == -1)
- strprintf(command, "bpset 0x%X", address);
+ command = string_format("bpset 0x%X", address);
else
- strprintf(command, "bpclear 0x%X", bpindex);
+ command = string_format("bpclear 0x%X", bpindex);
debug_console_execute_command(machine(), command.c_str(), 1);
}
}
@@ -229,7 +229,7 @@ bool disasmbasewin_info::handle_command(WPARAM wparam, LPARAM lparam)
else if (dasmview->source_is_visible_cpu())
{
std::string command;
- strprintf(command, bp->enabled() ? "bpdisable 0x%X" : "bpenable 0x%X", (UINT32)bp->index());
+ command = string_format(bp->enabled() ? "bpdisable 0x%X" : "bpenable 0x%X", (UINT32)bp->index());
debug_console_execute_command(machine(), command.c_str(), 1);
}
}
@@ -243,7 +243,7 @@ bool disasmbasewin_info::handle_command(WPARAM wparam, LPARAM lparam)
if (dasmview->source_is_visible_cpu())
{
std::string command;
- strprintf(command, "go 0x%X", address);
+ command = string_format("go 0x%X", address);
debug_console_execute_command(machine(), command.c_str(), 1);
}
else
diff --git a/src/osd/modules/font/font_dwrite.cpp b/src/osd/modules/font/font_dwrite.cpp
new file mode 100644
index 00000000000..8f78badda3b
--- /dev/null
+++ b/src/osd/modules/font/font_dwrite.cpp
@@ -0,0 +1,708 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles, Brad Hughes
+/*
+* font_dwrite.c
+*
+*/
+
+#include "font_module.h"
+#include "modules/osdmodule.h"
+
+// We take dependencies on WRL client headers and
+// we can only build with a high enough version
+#if defined(OSD_WINDOWS) && (_WIN32_WINNT >= 0x0602)
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <tchar.h>
+
+#include <memory>
+
+// Windows Imaging Components
+#include <wincodec.h>
+
+// Load InitGuid after WIC to work around missing format problem
+#include <initguid.h>
+
+// Direct2D
+#include <dxgi1_2.h>
+#include <d2d1_1.h>
+#include <dwrite_1.h>
+
+// WIC GUIDs
+DEFINE_GUID(CLSID_WICImagingFactory, 0xcacaf262, 0x9370, 0x4615, 0xa1, 0x3b, 0x9f, 0x55, 0x39, 0xda, 0x4c, 0xa);
+DEFINE_GUID(GUID_WICPixelFormat8bppAlpha, 0xe6cd0116, 0xeeba, 0x4161, 0xaa, 0x85, 0x27, 0xdd, 0x9f, 0xb3, 0xa8, 0x95);
+
+#include <wrl\client.h>
+#undef interface
+
+#include "emu.h"
+#include "strconv.h"
+#include "corestr.h"
+#include "corealloc.h"
+#include "fileio.h"
+#include "winutil.h"
+
+using namespace Microsoft::WRL;
+
+//-------------------------------------------------
+// Some formulas and constants
+//-------------------------------------------------
+
+//#define DEFAULT_CELL_HEIGHT (200)
+#define DEFAULT_EM_HEIGHT (166.5f)
+
+// 1DIP = 1/96in vs 1pt = 1/72in (or 4 / 3)
+static const float DIPS_PER_POINT = (4.0f / 3.0f);
+static const float POINTS_PER_DIP = (3.0f / 4.0f);
+
+//-------------------------------------------------
+// Error handling macros
+//-------------------------------------------------
+
+// Macro to check for a failed HRESULT and if failed, return 0
+#define HR_RET( CALL, ret ) do { \
+ result = CALL; \
+ if (FAILED(result)) { \
+ osd_printf_error(#CALL " failed with error 0x%X\n", (unsigned int)result); \
+ return ret; } \
+} while (0)
+
+#define HR_RETHR( CALL ) HR_RET(CALL, result)
+#define HR_RET0( CALL ) HR_RET(CALL, 0)
+#define HR_RET1( CALL ) HR_RET(CALL, 1)
+
+// Typedefs for dynamically loaded functions
+typedef lazy_loaded_function_p4<HRESULT, D2D1_FACTORY_TYPE, REFIID, const D2D1_FACTORY_OPTIONS*, void**> d2d_create_factory_fn;
+typedef lazy_loaded_function_p3<HRESULT, DWRITE_FACTORY_TYPE, REFIID, IUnknown**> dwrite_create_factory_fn;
+
+// Debugging functions
+#ifdef DWRITE_DEBUGGING
+
+//-------------------------------------------------
+// Save image to file
+//-------------------------------------------------
+
+void SaveBitmap(IWICBitmap* bitmap, GUID pixelFormat, const WCHAR *filename)
+{
+ HRESULT result = S_OK;
+ ComPtr<IWICStream> stream;
+ ComPtr<ID2D1Factory1> d2dfactory;
+ ComPtr<IDWriteFactory> dwriteFactory;
+ ComPtr<IWICImagingFactory> wicFactory;
+
+ d2d_create_factory_fn pfn_D2D1CreateFactory("D2D1CreateFactory", L"D2d1.dll");
+ dwrite_create_factory_fn pfn_DWriteCreateFactory("DWriteCreateFactory", L"Dwrite.dll");
+ HR_RET(pfn_D2D1CreateFactory.initialize());
+ HR_RET(pfn_DWriteCreateFactory.initialize());
+
+ // Create a Direct2D factory
+ HR_RET(pfn_D2D1CreateFactory(
+ D2D1_FACTORY_TYPE_SINGLE_THREADED,
+ __uuidof(ID2D1Factory1),
+ nullptr,
+ reinterpret_cast<void**>(d2dfactory.GetAddressOf())));
+
+ // Initialize COM - ignore failure
+ CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+
+ // Create a DirectWrite factory.
+ HR_RET(pfn_DWriteCreateFactory(
+ DWRITE_FACTORY_TYPE_SHARED,
+ __uuidof(IDWriteFactory),
+ reinterpret_cast<IUnknown **>(dwriteFactory.GetAddressOf())));
+
+ HR_RET(CoCreateInstance(
+ CLSID_WICImagingFactory,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ __uuidof(IWICImagingFactory),
+ (void**)&wicFactory));
+
+ HR_RET(wicFactory->CreateStream(&stream));
+ HR_RET(stream->InitializeFromFilename(filename, GENERIC_WRITE));
+
+ ComPtr<IWICBitmapEncoder> encoder;
+ HR_RET(wicFactory->CreateEncoder(GUID_ContainerFormatBmp, NULL, &encoder));
+ HR_RET(encoder->Initialize(stream.Get(), WICBitmapEncoderNoCache));
+
+ ComPtr<IWICBitmapFrameEncode> frameEncode;
+ HR_RET(encoder->CreateNewFrame(&frameEncode, NULL));
+ HR_RET(frameEncode->Initialize(NULL));
+
+ UINT width, height;
+ HR_RET(bitmap->GetSize(&width, &height));
+ HR_RET(frameEncode->SetSize(width, height));
+ HR_RET(frameEncode->SetPixelFormat(&pixelFormat));
+
+ HR_RET(frameEncode->WriteSource(bitmap, NULL));
+
+ HR_RET(frameEncode->Commit());
+ HR_RET(encoder->Commit());
+}
+
+void SaveBitmap2(bitmap_argb32 &bitmap, const WCHAR *filename)
+{
+ HRESULT result;
+
+ // Convert the bitmap into a form we understand and save it
+ std::unique_ptr<UINT32> pBitmap(new UINT32[bitmap.width() * bitmap.height()]);
+ for (int y = 0; y < bitmap.height(); y++)
+ {
+ UINT32* pRow = pBitmap.get() + (y * bitmap.width());
+ for (int x = 0; x < bitmap.width(); x++)
+ {
+ UINT32 pixel = bitmap.pix32(y, x);
+ pRow[x] = (pixel == 0xFFFFFFFF) ? rgb_t(0xFF, 0x00, 0x00, 0x00) : pRow[x] = rgb_t(0xFF, 0xFF, 0xFF, 0xFF);
+ }
+ }
+
+ ComPtr<IWICImagingFactory> wicFactory;
+ HR_RET(CoCreateInstance(
+ CLSID_WICImagingFactory,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ __uuidof(IWICImagingFactory),
+ (void**)&wicFactory));
+
+ // Save bitmap
+ ComPtr<IWICBitmap> bmp2 = nullptr;
+ wicFactory->CreateBitmapFromMemory(
+ bitmap.width(),
+ bitmap.height(),
+ GUID_WICPixelFormat32bppRGBA,
+ bitmap.width() * sizeof(UINT32),
+ bitmap.width() * bitmap.height() * sizeof(UINT32),
+ (BYTE*)pBitmap.get(),
+ &bmp2);
+
+ SaveBitmap(bmp2.Get(), GUID_WICPixelFormat32bppRGBA, filename);
+}
+
+#endif
+
+//-------------------------------------------------
+// FontDimension class - holds a font dimension
+// and makes it availabile in different formats
+//-------------------------------------------------
+
+class FontDimension
+{
+private:
+ UINT16 m_designUnitsPerEm;
+ float m_emSizeInDip;
+ float m_designUnits;
+
+public:
+ FontDimension(UINT16 designUnitsPerEm, float emSizeInDip, float designUnits)
+ {
+ m_designUnitsPerEm = designUnitsPerEm;
+ m_emSizeInDip = emSizeInDip;
+ m_designUnits = designUnits;
+ }
+
+ UINT16 DesignUnitsPerEm()
+ {
+ return m_designUnitsPerEm;
+ }
+
+ float EmSizeInDip()
+ {
+ return m_emSizeInDip;
+ }
+
+ float DesignUnits()
+ {
+ return m_designUnits;
+ }
+
+ int Dips()
+ {
+ return (int)floor((m_designUnits * m_emSizeInDip) / m_designUnitsPerEm);
+ }
+
+ float Points()
+ {
+ return Dips() * POINTS_PER_DIP;
+ }
+
+ FontDimension operator-(const FontDimension &other)
+ {
+ if (m_designUnitsPerEm != other.m_designUnitsPerEm || m_emSizeInDip != other.m_emSizeInDip)
+ {
+ throw emu_fatalerror("Attempted subtraction of FontDimension with different scale.");
+ }
+
+ return FontDimension(m_designUnitsPerEm, m_emSizeInDip, m_designUnits - other.m_designUnits);
+ }
+
+ FontDimension operator+(const FontDimension &other)
+ {
+ if (m_designUnitsPerEm != other.m_designUnitsPerEm || m_emSizeInDip != other.m_emSizeInDip)
+ {
+ throw emu_fatalerror("Attempted addition of FontDimension with different scale.");
+ }
+
+ return FontDimension(m_designUnitsPerEm, m_emSizeInDip, m_designUnits + other.m_designUnits);
+ }
+};
+
+//-------------------------------------------------
+// FontABCWidths class - hold width-related
+// font dimensions for a glyph
+//-------------------------------------------------
+
+class FontABCWidths
+{
+private:
+ FontDimension m_advanceWidth;
+ FontDimension m_a;
+ FontDimension m_c;
+
+public:
+ FontABCWidths(const FontDimension &advanceWidth, const FontDimension &leftSideBearing, const FontDimension &rightsideBearing) :
+ m_advanceWidth(advanceWidth),
+ m_a(leftSideBearing),
+ m_c(rightsideBearing)
+ {
+ }
+
+ FontDimension advanceWidth() { return m_advanceWidth; }
+ FontDimension abcA() { return m_a; }
+
+ // Relationship between advanceWidth and B is ADV = A + B + C so B = ADV - A - C
+ FontDimension abcB() { return advanceWidth() - abcA() - abcC(); }
+ FontDimension abcC() { return m_c; }
+};
+
+//-------------------------------------------------
+// FontDimensionFactory class - simple way of
+// creating font dimensions
+//-------------------------------------------------
+
+class FontDimensionFactory
+{
+private:
+ UINT16 m_designUnitsPerEm;
+ float m_emSizeInDip;
+
+public:
+ float EmSizeInDip()
+ {
+ return m_emSizeInDip;
+ }
+
+ FontDimensionFactory(UINT16 designUnitsPerEm, float emSizeInDip)
+ {
+ m_designUnitsPerEm = designUnitsPerEm;
+ m_emSizeInDip = emSizeInDip;
+ }
+
+ FontDimension FromDip(float dip)
+ {
+ float sizeInDesignUnits = (dip / m_emSizeInDip) * m_designUnitsPerEm;
+ return FontDimension(m_designUnitsPerEm, m_emSizeInDip, sizeInDesignUnits);
+ }
+
+ FontDimension FromDesignUnit(float designUnits)
+ {
+ return FontDimension(m_designUnitsPerEm, m_emSizeInDip, designUnits);
+ }
+
+ FontDimension FromPoint(float pointSize)
+ {
+ float sizeInDip = pointSize * (4.0f / 3.0f);
+ float sizeInDesignUnits = (sizeInDip / m_emSizeInDip) * m_designUnitsPerEm;
+ return FontDimension(m_designUnitsPerEm, m_emSizeInDip, sizeInDesignUnits);
+ }
+
+ FontABCWidths CreateAbcWidths(float advanceWidth, float leftSideBearing, float rightSideBearing)
+ {
+ return FontABCWidths(
+ FromDesignUnit(advanceWidth),
+ FromDesignUnit(leftSideBearing),
+ FromDesignUnit(rightSideBearing));
+ }
+};
+
+//-------------------------------------------------
+// font_open - attempt to "open" a handle to the
+// font with the given name
+//-------------------------------------------------
+
+class osd_font_dwrite : public osd_font
+{
+private:
+ ComPtr<ID2D1Factory> m_d2dfactory;
+ ComPtr<IDWriteFactory> m_dwriteFactory;
+ ComPtr<IWICImagingFactory> m_wicFactory;
+ ComPtr<IDWriteFont> m_font;
+ float m_fontEmHeightInDips;
+
+public:
+ osd_font_dwrite(ComPtr<ID2D1Factory> d2dfactory, ComPtr<IDWriteFactory> dwriteFactory, ComPtr<IWICImagingFactory> wicFactory)
+ : m_d2dfactory(d2dfactory), m_dwriteFactory(dwriteFactory), m_wicFactory(wicFactory)
+ {
+ }
+
+ virtual bool open(const char *font_path, const char *_name, int &height) override
+ {
+ if (m_d2dfactory == nullptr || m_dwriteFactory == nullptr || m_wicFactory == nullptr)
+ return false;
+
+ HRESULT result;
+
+ // accept qualifiers from the name
+ std::string name(_name);
+ if (name.compare("default") == 0) name = "Tahoma";
+ bool bold = (strreplace(name, "[B]", "") + strreplace(name, "[b]", "") > 0);
+ bool italic = (strreplace(name, "[I]", "") + strreplace(name, "[i]", "") > 0);
+
+ // convert the face name
+ auto familyName = std::wstring(std::unique_ptr<WCHAR, void(*)(void *)>(wstring_from_utf8(name.c_str()), osd_free).get());
+
+ // find the font
+ HR_RET0(find_font(
+ familyName.c_str(),
+ bold ? DWRITE_FONT_WEIGHT_BOLD : DWRITE_FONT_WEIGHT_NORMAL,
+ DWRITE_FONT_STRETCH_NORMAL,
+ italic ? DWRITE_FONT_STYLE_ITALIC : DWRITE_FONT_STYLE_NORMAL,
+ m_font.GetAddressOf()));
+
+ DWRITE_FONT_METRICS metrics;
+ m_font->GetMetrics(&metrics);
+
+ m_fontEmHeightInDips = DEFAULT_EM_HEIGHT;
+ height = (int)round(m_fontEmHeightInDips * DIPS_PER_POINT);
+
+ return true;
+ }
+
+ //-------------------------------------------------
+ // font_close - release resources associated with
+ // a given OSD font
+ //-------------------------------------------------
+
+ virtual void close() override
+ {
+ m_font = nullptr;
+ m_fontEmHeightInDips = 0;
+ }
+
+ //-------------------------------------------------
+ // font_get_bitmap - allocate and populate a
+ // BITMAP_FORMAT_ARGB32 bitmap containing the
+ // pixel values rgb_t(0xff,0xff,0xff,0xff)
+ // or rgb_t(0x00,0xff,0xff,0xff) for each
+ // pixel of a black & white font
+ //-------------------------------------------------
+
+ virtual bool get_bitmap(unicode_char chnum, bitmap_argb32 &bitmap, INT32 &width, INT32 &xoffs, INT32 &yoffs) override
+ {
+ const int MEM_ALIGN_CONST = 31;
+ const int BITMAP_PAD = 50;
+
+ HRESULT result;
+ UINT cbData;
+ BYTE* pixels = nullptr;
+
+ ComPtr<ID2D1BitmapRenderTarget> target;
+ ComPtr<ID2D1SolidColorBrush> pWhiteBrush;
+ ComPtr<IWICBitmap> wicBitmap;
+ ComPtr<IWICBitmapLock> lock;
+
+ ComPtr<IDWriteFontFace> face;
+ HR_RET0(m_font->CreateFontFace(face.GetAddressOf()));
+
+ // get the GDI metrics
+ DWRITE_FONT_METRICS gdi_metrics;
+ HR_RET0(face->GetGdiCompatibleMetrics(
+ m_fontEmHeightInDips,
+ 1.0f,
+ nullptr,
+ &gdi_metrics));
+
+ FontDimensionFactory fdf(gdi_metrics.designUnitsPerEm, m_fontEmHeightInDips);
+
+ UINT32 tempChar = chnum;
+ UINT16 glyphIndex;
+ HR_RET0(face->GetGlyphIndicesW(&tempChar, 1, &glyphIndex));
+
+ // get the width of this character
+ DWRITE_GLYPH_METRICS glyph_metrics = { 0 };
+ HR_RET0(face->GetGdiCompatibleGlyphMetrics(
+ m_fontEmHeightInDips,
+ 1.0f,
+ nullptr,
+ FALSE,
+ &glyphIndex,
+ 1,
+ &glyph_metrics));
+
+ // The height is the ascent added to the descent
+ // By definition, the Em is equal to Cell Height minus Internal Leading (topSide bearing).
+ //auto cellheight = fdf.FromDesignUnit(gdi_metrics.ascent + gdi_metrics.descent + gdi_metrics.);
+ auto ascent = fdf.FromDesignUnit(gdi_metrics.ascent);
+ auto descent = fdf.FromDesignUnit(gdi_metrics.descent);
+ auto charHeight = ascent + descent;
+
+ auto abc = fdf.CreateAbcWidths(
+ glyph_metrics.advanceWidth,
+ glyph_metrics.leftSideBearing,
+ glyph_metrics.rightSideBearing);
+
+ width = abc.abcA().Dips() + abc.abcB().Dips() + abc.abcC().Dips();
+
+ // determine desired bitmap size
+ int bmwidth = (BITMAP_PAD + abc.abcA().Dips() + abc.abcB().Dips() + abc.abcC().Dips() + BITMAP_PAD + MEM_ALIGN_CONST) & ~MEM_ALIGN_CONST;
+ int bmheight = BITMAP_PAD + charHeight.Dips() + BITMAP_PAD;
+
+ // GUID_WICPixelFormat8bppAlpha is 8 bits per pixel
+ const REFWICPixelFormatGUID source_bitmap_wic_format = GUID_WICPixelFormat8bppAlpha;
+ const DXGI_FORMAT source_bitmap_dxgi_format = DXGI_FORMAT_A8_UNORM;
+ const D2D1_ALPHA_MODE source_bitmap_d2d_alpha_mode = D2D1_ALPHA_MODE_STRAIGHT;
+
+ // describe the bitmap we want
+ HR_RET0(m_wicFactory->CreateBitmap(
+ bmwidth,
+ bmheight,
+ source_bitmap_wic_format,
+ WICBitmapCacheOnLoad,
+ wicBitmap.GetAddressOf()));
+
+ D2D1_RENDER_TARGET_PROPERTIES targetProps;
+ targetProps = D2D1::RenderTargetProperties();
+ targetProps.pixelFormat = D2D1::PixelFormat(source_bitmap_dxgi_format, source_bitmap_d2d_alpha_mode);
+
+ // create a DIB to render to
+ HR_RET0(this->m_d2dfactory->CreateWicBitmapRenderTarget(
+ wicBitmap.Get(),
+ &targetProps,
+ reinterpret_cast<ID2D1RenderTarget**>(target.GetAddressOf())));
+
+ target->SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE_ALIASED);
+
+ // Create our brush
+ HR_RET0(target->CreateSolidColorBrush(D2D1::ColorF(1.0f, 1.0f, 1.0f, 1.0f), pWhiteBrush.GetAddressOf()));
+
+ // Signal the start of the frame
+ target->BeginDraw();
+
+ // clear the bitmap
+ // In the alpha mask, it will look like 0x00 per pixel
+ target->Clear(D2D1::ColorF(0.0f, 0.0f, 0.0f, 0.0f));
+
+ // now draw the character
+ DWRITE_GLYPH_RUN run = { 0 };
+ DWRITE_GLYPH_OFFSET offsets;
+ offsets.advanceOffset = 0;
+ offsets.ascenderOffset = 0;
+ float advanceWidth = abc.advanceWidth().Dips();
+
+ run.fontEmSize = m_fontEmHeightInDips;
+ run.fontFace = face.Get();
+ run.glyphCount = 1;
+ run.glyphIndices = &glyphIndex;
+ run.glyphAdvances = &advanceWidth;
+ run.glyphOffsets = &offsets;
+
+ auto baseline_origin = D2D1::Point2F(BITMAP_PAD + abc.abcA().Dips() + 1, BITMAP_PAD + ascent.Dips());
+ target->DrawGlyphRun(
+ baseline_origin,
+ &run,
+ pWhiteBrush.Get(),
+ DWRITE_MEASURING_MODE_GDI_CLASSIC);
+
+ HR_RET0(target->EndDraw());
+
+#ifdef DWRITE_DEBUGGING
+ // Save to file for debugging
+ SaveBitmap(wicBitmap.Get(), GUID_WICPixelFormatBlackWhite, L"C:\\temp\\ddraw_step1.bmp");
+#endif
+
+ // characters are expected to be full-height
+ rectangle actbounds;
+ actbounds.min_y = BITMAP_PAD;
+ actbounds.max_y = BITMAP_PAD + charHeight.Dips() - 1;
+
+ // Lock the bitmap and get the data pointer
+ WICRect rect = { 0, 0, bmwidth, bmheight };
+ HR_RET0(wicBitmap->Lock(&rect, WICBitmapLockRead, lock.GetAddressOf()));
+ HR_RET0(lock->GetDataPointer(&cbData, (BYTE**)&pixels));
+
+ // determine the actual left of the character
+ for (actbounds.min_x = 0; actbounds.min_x < bmwidth; actbounds.min_x++)
+ {
+ BYTE *offs = pixels + actbounds.min_x;
+ UINT8 summary = 0;
+ for (int y = 0; y < bmheight; y++)
+ summary |= offs[y * bmwidth];
+ if (summary != 0)
+ {
+ break;
+ }
+ }
+
+ // determine the actual right of the character
+ // Start from the right edge, and move in until we find a pixel
+ for (actbounds.max_x = bmwidth - 1; actbounds.max_x >= 0; actbounds.max_x--)
+ {
+ BYTE *offs = pixels + actbounds.max_x;
+ UINT8 summary = 0;
+
+ // Go through the entire column and build a summary
+ for (int y = 0; y < bmheight; y++)
+ summary |= offs[y * bmwidth];
+ if (summary != 0)
+ {
+ break;
+ }
+ }
+
+ // allocate a new bitmap
+ if (actbounds.max_x >= actbounds.min_x && actbounds.max_y >= actbounds.min_y)
+ {
+ bitmap.allocate(actbounds.max_x + 1 - actbounds.min_x, actbounds.max_y + 1 - actbounds.min_y);
+
+ // copy the bits into it
+ for (int y = 0; y < bitmap.height(); y++)
+ {
+ UINT32 *dstrow = &bitmap.pix32(y);
+ UINT8 *srcrow = &pixels[(y + actbounds.min_y) * bmwidth];
+ for (int x = 0; x < bitmap.width(); x++)
+ {
+ int effx = x + actbounds.min_x;
+ dstrow[x] = rgb_t(srcrow[effx], 0xff, 0xff, 0xff);
+ }
+ }
+
+ // set the final offset values
+ xoffs = actbounds.min_x - (BITMAP_PAD + abc.abcA().Dips());
+ yoffs = actbounds.max_y - (BITMAP_PAD + ascent.Dips());
+
+#ifdef DWRITE_DEBUGGING
+ SaveBitmap2(bitmap, L"C:\\temp\\dwrite_final.bmp");
+#endif
+ }
+
+ BOOL success = bitmap.valid();
+
+#ifdef DWRITE_DEBUGGING
+ osd_printf_debug(
+ "dwr: %s, c'%S' w%i x%i y%i asc%i dsc%i a%ib%ic%i\n",
+ success ? "Success" : "Error",
+ (WCHAR*)&chnum,
+ width,
+ xoffs,
+ yoffs,
+ ascent.Dips(),
+ descent.Dips(),
+ abc.abcA().Dips(),
+ abc.abcB().Dips(),
+ abc.abcC().Dips());
+#endif
+ return success;
+ }
+
+private:
+
+ //-------------------------------------------------
+ // find_font - finds a font, given attributes
+ //-------------------------------------------------
+
+ HRESULT find_font(std::wstring familyName, DWRITE_FONT_WEIGHT weight, DWRITE_FONT_STRETCH stretch, DWRITE_FONT_STYLE style, IDWriteFont ** ppfont)
+ {
+ HRESULT result = S_OK;
+
+ ComPtr<IDWriteFontCollection> fonts;
+ HR_RETHR(m_dwriteFactory->GetSystemFontCollection(fonts.GetAddressOf()));
+
+ UINT family_index; BOOL exists;
+ HR_RETHR(fonts->FindFamilyName(familyName.c_str(), &family_index, &exists));
+ if (!exists)
+ {
+ osd_printf_error("Font with family name %S does not exist", familyName.c_str());
+ return E_FAIL;
+ }
+
+ ComPtr<IDWriteFontFamily> family;
+ HR_RETHR(fonts->GetFontFamily(family_index, family.GetAddressOf()));
+
+ ComPtr<IDWriteFont> font;
+ HR_RETHR(family->GetFirstMatchingFont(weight, stretch, style, font.GetAddressOf()));
+
+ *ppfont = font.Detach();
+ return result;
+ }
+};
+
+//-------------------------------------------------
+// font_dwrite - the DirectWrite font module
+//-------------------------------------------------
+
+class font_dwrite : public osd_module, public font_module
+{
+private:
+ d2d_create_factory_fn m_pfnD2D1CreateFactory;
+ dwrite_create_factory_fn m_pfnDWriteCreateFactory;
+ ComPtr<ID2D1Factory> m_d2dfactory;
+ ComPtr<IDWriteFactory> m_dwriteFactory;
+ ComPtr<IWICImagingFactory> m_wicFactory;
+
+public:
+ font_dwrite() :
+ osd_module(OSD_FONT_PROVIDER, "dwrite"),
+ font_module(),
+ m_pfnD2D1CreateFactory("D2D1CreateFactory", L"D2d1.dll"),
+ m_pfnDWriteCreateFactory("DWriteCreateFactory", L"Dwrite.dll"),
+ m_d2dfactory(nullptr),
+ m_dwriteFactory(nullptr),
+ m_wicFactory(nullptr)
+ {
+ }
+
+ virtual int init(const osd_options &options) override
+ {
+ HRESULT result;
+
+ // Make sure we can initialize our api functions
+ HR_RET1(m_pfnD2D1CreateFactory.initialize());
+ HR_RET1(m_pfnDWriteCreateFactory.initialize());
+
+ // Create a Direct2D factory.
+ HR_RET1(m_pfnD2D1CreateFactory(
+ D2D1_FACTORY_TYPE_SINGLE_THREADED,
+ __uuidof(ID2D1Factory),
+ nullptr,
+ reinterpret_cast<void**>(this->m_d2dfactory.GetAddressOf())));
+
+ // Initialize COM
+ CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
+
+ // Create a DirectWrite factory.
+ HR_RET1(m_pfnDWriteCreateFactory(
+ DWRITE_FACTORY_TYPE_SHARED,
+ __uuidof(IDWriteFactory),
+ reinterpret_cast<IUnknown **>(m_dwriteFactory.GetAddressOf())));
+
+ HR_RET1(CoCreateInstance(
+ CLSID_WICImagingFactory,
+ NULL,
+ CLSCTX_INPROC_SERVER,
+ __uuidof(IWICImagingFactory),
+ (void**)&m_wicFactory));
+
+ return 0;
+ }
+
+ virtual osd_font *font_alloc() override
+ {
+ return global_alloc(osd_font_dwrite(m_d2dfactory, m_dwriteFactory, m_wicFactory));
+ }
+};
+
+#else
+MODULE_NOT_SUPPORTED(font_dwrite, OSD_FONT_PROVIDER, "dwrite")
+#endif
+
+MODULE_DEFINITION(FONT_DWRITE, font_dwrite) \ No newline at end of file
diff --git a/src/osd/modules/input/input_common.cpp b/src/osd/modules/input/input_common.cpp
new file mode 100644
index 00000000000..c3d6367da5f
--- /dev/null
+++ b/src/osd/modules/input/input_common.cpp
@@ -0,0 +1,266 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert, R. Belmont, Brad Hughes
+//============================================================
+//
+// input_common.cpp - Common code for all MAME input modules
+//
+// SDLMAME by Olivier Galibert and R. Belmont
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+#include "modules/lib/osdobj_common.h"
+
+#include <mutex>
+#include <memory>
+
+// MAME headers
+#include "emu.h"
+
+// winnt.h defines this
+#ifdef DELETE
+#undef DELETE
+#endif
+
+#include "input_common.h"
+
+//============================================================
+// Keyboard translation table
+//============================================================
+
+#if defined(OSD_WINDOWS)
+#include <windows.h>
+#define KEY_TRANS_ENTRY0(mame, sdlsc, sdlkey, disc, virtual, ascii, UI) { ITEM_ID_##mame, KEY_ ## disc, virtual, ascii, "ITEM_ID_"#mame, (char *) UI }
+#define KEY_TRANS_ENTRY1(mame, sdlsc, sdlkey, disc, virtual, ascii) { ITEM_ID_##mame, KEY_ ## disc, virtual, ascii, "ITEM_ID_"#mame, (char*) #mame }
+#else
+// SDL include
+#include <sdlinc.h>
+#define KEY_TRANS_ENTRY0(mame, sdlsc, sdlkey, disc, virtual, ascii, UI) { ITEM_ID_##mame, SDL_SCANCODE_ ## sdlsc, SDLK_ ## sdlkey, ascii, "ITEM_ID_"#mame, (char *) UI }
+#define KEY_TRANS_ENTRY1(mame, sdlsc, sdlkey, disc, virtual, ascii) { ITEM_ID_##mame, SDL_SCANCODE_ ## sdlsc, SDLK_ ## sdlkey, ascii, "ITEM_ID_"#mame, (char*) #mame }
+#endif
+
+key_trans_entry keyboard_trans_table::s_default_table[] =
+{
+ // MAME key sdl scancode sdl key di scancode virtual key ascii ui
+ KEY_TRANS_ENTRY0(ESC, ESCAPE, ESCAPE, ESCAPE, VK_ESCAPE, 27, "ESCAPE"),
+ KEY_TRANS_ENTRY1(1, 1, 1, 1, '1', '1'),
+ KEY_TRANS_ENTRY1(2, 2, 2, 2, '2', '2'),
+ KEY_TRANS_ENTRY1(3, 3, 3, 3, '3', '3'),
+ KEY_TRANS_ENTRY1(4, 4, 4, 4, '4', '4'),
+ KEY_TRANS_ENTRY1(5, 5, 5, 5, '5', '5'),
+ KEY_TRANS_ENTRY1(6, 6, 6, 6, '6', '6'),
+ KEY_TRANS_ENTRY1(7, 7, 7, 7, '7', '7'),
+ KEY_TRANS_ENTRY1(8, 8, 8, 8, '8', '8'),
+ KEY_TRANS_ENTRY1(9, 9, 9, 9, '9', '9'),
+ KEY_TRANS_ENTRY1(0, 0, 0, 0, '0', '0'),
+ KEY_TRANS_ENTRY1(MINUS, MINUS, MINUS, MINUS, VK_OEM_MINUS, '-'),
+ KEY_TRANS_ENTRY1(EQUALS, EQUALS, EQUALS, EQUALS, VK_OEM_PLUS, '='),
+ KEY_TRANS_ENTRY1(BACKSPACE, BACKSPACE, BACKSPACE, BACK, VK_BACK, 8),
+ KEY_TRANS_ENTRY1(TAB, TAB, TAB, TAB, VK_TAB, 9),
+ KEY_TRANS_ENTRY1(Q, Q, q, Q, 'Q', 'Q'),
+ KEY_TRANS_ENTRY1(W, W, w, W, 'W', 'W'),
+ KEY_TRANS_ENTRY1(E, E, e, E, 'E', 'E'),
+ KEY_TRANS_ENTRY1(R, R, r, R, 'R', 'R'),
+ KEY_TRANS_ENTRY1(T, T, t, T, 'T', 'T'),
+ KEY_TRANS_ENTRY1(Y, Y, y, Y, 'Y', 'Y'),
+ KEY_TRANS_ENTRY1(U, U, u, U, 'U', 'U'),
+ KEY_TRANS_ENTRY1(I, I, i, I, 'I', 'I'),
+ KEY_TRANS_ENTRY1(O, O, o, O, 'O', 'O'),
+ KEY_TRANS_ENTRY1(P, P, p, P, 'P', 'P'),
+ KEY_TRANS_ENTRY1(OPENBRACE, LEFTBRACKET, LEFTBRACKET, LBRACKET, VK_OEM_4, '['),
+ KEY_TRANS_ENTRY1(CLOSEBRACE, RIGHTBRACKET, RIGHTBRACKET, RBRACKET, VK_OEM_6, ']'),
+ KEY_TRANS_ENTRY0(ENTER, RETURN, RETURN, RETURN, VK_RETURN, 13, "RETURN"),
+ KEY_TRANS_ENTRY1(LCONTROL, LCTRL, LCTRL, LCONTROL, VK_LCONTROL, 0),
+ KEY_TRANS_ENTRY1(A, A, a, A, 'A', 'A'),
+ KEY_TRANS_ENTRY1(S, S, s, S, 'S', 'S'),
+ KEY_TRANS_ENTRY1(D, D, d, D, 'D', 'D'),
+ KEY_TRANS_ENTRY1(F, F, f, F, 'F', 'F'),
+ KEY_TRANS_ENTRY1(G, G, g, G, 'G', 'G'),
+ KEY_TRANS_ENTRY1(H, H, h, H, 'H', 'H'),
+ KEY_TRANS_ENTRY1(J, J, j, J, 'J', 'J'),
+ KEY_TRANS_ENTRY1(K, K, k, K, 'K', 'K'),
+ KEY_TRANS_ENTRY1(L, L, l, L, 'L', 'L'),
+ KEY_TRANS_ENTRY1(COLON, SEMICOLON, SEMICOLON, SEMICOLON, VK_OEM_1, ';'),
+ KEY_TRANS_ENTRY1(QUOTE, APOSTROPHE, QUOTE, APOSTROPHE, VK_OEM_7, '\''),
+ KEY_TRANS_ENTRY1(TILDE, GRAVE, BACKQUOTE, GRAVE, VK_OEM_3, '`'),
+ KEY_TRANS_ENTRY1(LSHIFT, LSHIFT, LSHIFT, LSHIFT, VK_LSHIFT, 0),
+ KEY_TRANS_ENTRY1(BACKSLASH, BACKSLASH, BACKSLASH, BACKSLASH, VK_OEM_5, '\\'),
+ KEY_TRANS_ENTRY1(BACKSLASH2, 0, 0, OEM_102, VK_OEM_102, '<'),
+ KEY_TRANS_ENTRY1(Z, Z, z, Z, 'Z', 'Z'),
+ KEY_TRANS_ENTRY1(X, X, x, X, 'X', 'X'),
+ KEY_TRANS_ENTRY1(C, C, c, C, 'C', 'C'),
+ KEY_TRANS_ENTRY1(V, V, v, V, 'V', 'V'),
+ KEY_TRANS_ENTRY1(B, B, b, B, 'B', 'B'),
+ KEY_TRANS_ENTRY1(N, N, n, N, 'N', 'N'),
+ KEY_TRANS_ENTRY1(M, M, m, M, 'M', 'M'),
+ KEY_TRANS_ENTRY1(COMMA, COMMA, COMMA, COMMA, VK_OEM_COMMA, ','),
+ KEY_TRANS_ENTRY1(STOP, PERIOD, PERIOD, PERIOD, VK_OEM_PERIOD, '.'),
+ KEY_TRANS_ENTRY1(SLASH, SLASH, SLASH, SLASH, VK_OEM_2, '/'),
+ KEY_TRANS_ENTRY1(RSHIFT, RSHIFT, RSHIFT, RSHIFT, VK_RSHIFT, 0),
+ KEY_TRANS_ENTRY1(ASTERISK, KP_MULTIPLY, KP_MULTIPLY, MULTIPLY, VK_MULTIPLY, '*'),
+ KEY_TRANS_ENTRY1(LALT, LALT, LALT, LMENU, VK_LMENU, 0),
+ KEY_TRANS_ENTRY1(SPACE, SPACE, SPACE, SPACE, VK_SPACE, ' '),
+ KEY_TRANS_ENTRY1(CAPSLOCK, CAPSLOCK, CAPSLOCK, CAPITAL, VK_CAPITAL, 0),
+ KEY_TRANS_ENTRY1(F1, F1, F1, F1, VK_F1, 0),
+ KEY_TRANS_ENTRY1(F2, F2, F2, F2, VK_F2, 0),
+ KEY_TRANS_ENTRY1(F3, F3, F3, F3, VK_F3, 0),
+ KEY_TRANS_ENTRY1(F4, F4, F4, F4, VK_F4, 0),
+ KEY_TRANS_ENTRY1(F5, F5, F5, F5, VK_F5, 0),
+ KEY_TRANS_ENTRY1(F6, F6, F6, F6, VK_F6, 0),
+ KEY_TRANS_ENTRY1(F7, F7, F7, F7, VK_F7, 0),
+ KEY_TRANS_ENTRY1(F8, F8, F8, F8, VK_F8, 0),
+ KEY_TRANS_ENTRY1(F9, F9, F9, F9, VK_F9, 0),
+ KEY_TRANS_ENTRY1(F10, F10, F10, F10, VK_F10, 0),
+ KEY_TRANS_ENTRY1(NUMLOCK, NUMLOCKCLEAR, NUMLOCKCLEAR, NUMLOCK, VK_NUMLOCK, 0),
+ KEY_TRANS_ENTRY1(SCRLOCK, SCROLLLOCK, SCROLLLOCK, SCROLL, VK_SCROLL, 0),
+ KEY_TRANS_ENTRY1(7_PAD, KP_7, KP_7, NUMPAD7, VK_NUMPAD7, 0),
+ KEY_TRANS_ENTRY1(8_PAD, KP_8, KP_8, NUMPAD8, VK_NUMPAD8, 0),
+ KEY_TRANS_ENTRY1(9_PAD, KP_9, KP_9, NUMPAD9, VK_NUMPAD9, 0),
+ KEY_TRANS_ENTRY1(MINUS_PAD, KP_MINUS, KP_MINUS, SUBTRACT, VK_SUBTRACT, 0),
+ KEY_TRANS_ENTRY1(4_PAD, KP_4, KP_4, NUMPAD4, VK_NUMPAD4, 0),
+ KEY_TRANS_ENTRY1(5_PAD, KP_5, KP_5, NUMPAD5, VK_NUMPAD5, 0),
+ KEY_TRANS_ENTRY1(6_PAD, KP_6, KP_6, NUMPAD6, VK_NUMPAD6, 0),
+ KEY_TRANS_ENTRY1(PLUS_PAD, KP_PLUS, KP_PLUS, ADD, VK_ADD, 0),
+ KEY_TRANS_ENTRY1(1_PAD, KP_1, KP_1, NUMPAD1, VK_NUMPAD1, 0),
+ KEY_TRANS_ENTRY1(2_PAD, KP_2, KP_2, NUMPAD2, VK_NUMPAD2, 0),
+ KEY_TRANS_ENTRY1(3_PAD, KP_3, KP_3, NUMPAD3, VK_NUMPAD3, 0),
+ KEY_TRANS_ENTRY1(0_PAD, KP_0, KP_0, NUMPAD0, VK_NUMPAD0, 0),
+ KEY_TRANS_ENTRY1(DEL_PAD, KP_PERIOD, KP_PERIOD, DECIMAL, VK_DECIMAL, 0),
+ KEY_TRANS_ENTRY1(F11, F11, F11, F11, VK_F11, 0),
+ KEY_TRANS_ENTRY1(F12, F12, F12, F12, VK_F12, 0),
+ KEY_TRANS_ENTRY1(F13, F13, F13, F13, VK_F13, 0),
+ KEY_TRANS_ENTRY1(F14, F14, F14, F14, VK_F14, 0),
+ KEY_TRANS_ENTRY1(F15, F15, F15, F15, VK_F15, 0),
+ KEY_TRANS_ENTRY1(ENTER_PAD, KP_ENTER, KP_ENTER, NUMPADENTER, VK_RETURN, 0),
+ KEY_TRANS_ENTRY1(RCONTROL, RCTRL, RCTRL, RCONTROL, VK_RCONTROL, 0),
+ KEY_TRANS_ENTRY1(SLASH_PAD, KP_DIVIDE, KP_DIVIDE, DIVIDE, VK_DIVIDE, 0),
+ KEY_TRANS_ENTRY1(PRTSCR, PRINTSCREEN, PRINTSCREEN, SYSRQ, 0, 0),
+ KEY_TRANS_ENTRY1(RALT, RALT, RALT, RMENU, VK_RMENU, 0),
+ KEY_TRANS_ENTRY1(HOME, HOME, HOME, HOME, VK_HOME, 0),
+ KEY_TRANS_ENTRY1(UP, UP, UP, UP, VK_UP, 0),
+ KEY_TRANS_ENTRY1(PGUP, PAGEUP, PAGEUP, PRIOR, VK_PRIOR, 0),
+ KEY_TRANS_ENTRY1(LEFT, LEFT, LEFT, LEFT, VK_LEFT, 0),
+ KEY_TRANS_ENTRY1(RIGHT, RIGHT, RIGHT, RIGHT, VK_RIGHT, 0),
+ KEY_TRANS_ENTRY1(END, END, END, END, VK_END, 0),
+ KEY_TRANS_ENTRY1(DOWN, DOWN, DOWN, DOWN, VK_DOWN, 0),
+ KEY_TRANS_ENTRY1(PGDN, PAGEDOWN, PAGEDOWN, NEXT, VK_NEXT, 0),
+ KEY_TRANS_ENTRY1(INSERT, INSERT, INSERT, INSERT, VK_INSERT, 0),
+ KEY_TRANS_ENTRY0(DEL, DELETE, DELETE, DELETE, VK_DELETE, 0, "DELETE"),
+ KEY_TRANS_ENTRY1(LWIN, LGUI, LGUI, LWIN, VK_LWIN, 0),
+ KEY_TRANS_ENTRY1(RWIN, RGUI, RGUI, RWIN, VK_RWIN, 0),
+ KEY_TRANS_ENTRY1(MENU, MENU, MENU, APPS, VK_APPS, 0),
+ KEY_TRANS_ENTRY1(PAUSE, PAUSE, PAUSE, PAUSE, VK_PAUSE, 0),
+ KEY_TRANS_ENTRY0(CANCEL, UNKNOWN, UNKNOWN, UNKNOWN, 0, 0, "CANCEL"),
+
+ // New keys introduced in Windows 2000. These have no MAME codes to
+ // preserve compatibility with old config files that may refer to them
+ // as e.g. FORWARD instead of e.g. KEYCODE_WEBFORWARD. They need table
+ // entries anyway because otherwise they aren't recognized when
+ // GetAsyncKeyState polling is used (as happens currently when MAME is
+ // paused). Some codes are missing because the mapping to vkey codes
+ // isn't clear, and MapVirtualKey is no help.
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, MUTE, MUTE, MUTE, VK_VOLUME_MUTE, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, VOLUMEDOWN, VOLUMEDOWN, VOLUMEDOWN, VK_VOLUME_DOWN, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, VOLUMEUP, VOLUMEUP, VOLUMEUP, VK_VOLUME_UP, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, AC_HOME, AC_HOME, WEBHOME, VK_BROWSER_HOME, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, AC_SEARCH, AC_SEARCH, WEBSEARCH, VK_BROWSER_SEARCH, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, AC_BOOKMARKS, AC_BOOKMARKS, WEBFAVORITES, VK_BROWSER_FAVORITES, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, AC_REFRESH, AC_REFRESH, WEBREFRESH, VK_BROWSER_REFRESH, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, AC_STOP, AC_STOP, WEBSTOP, VK_BROWSER_STOP, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, AC_FORWARD, AC_FORWARD, WEBFORWARD, VK_BROWSER_FORWARD, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, AC_BACK, AC_BACK, WEBBACK, VK_BROWSER_BACK, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, MAIL, MAIL, MAIL, VK_LAUNCH_MAIL, 0),
+ KEY_TRANS_ENTRY1(OTHER_SWITCH, MEDIASELECT, MEDIASELECT, MEDIASELECT, VK_LAUNCH_MEDIA_SELECT, 0),
+ KEY_TRANS_ENTRY0(INVALID, UNKNOWN, UNKNOWN, ESCAPE, 0, 0, "INVALID")
+};
+
+// The private constructor to create the default instance
+keyboard_trans_table::keyboard_trans_table()
+{
+ m_table = s_default_table;
+ m_table_size = ARRAY_LENGTH(s_default_table);
+}
+
+// public constructor to allow creation of non-default instances
+keyboard_trans_table::keyboard_trans_table(std::unique_ptr<key_trans_entry[]> entries, unsigned int size)
+{
+ m_custom_table = std::move(entries);
+ m_table = m_custom_table.get();
+ m_table_size = size;
+}
+
+int keyboard_trans_table::lookup_mame_index(const char *scode)
+{
+ for (int i = 0; i < m_table_size; i++)
+ {
+ if (!strcmp(scode, m_table[i].mame_key_name))
+ return i;
+ }
+ return -1;
+}
+
+input_item_id keyboard_trans_table::lookup_mame_code(const char *scode)
+{
+ int const index = lookup_mame_index(scode);
+ if (index >= 0)
+ return m_table[index].mame_key;
+ else
+ return ITEM_ID_INVALID;
+}
+
+// Windows specific lookup methods
+#if defined(OSD_WINDOWS)
+
+input_item_id keyboard_trans_table::map_di_scancode_to_itemid(int scancode)
+{
+ int tablenum;
+
+ // scan the table for a match
+ for (tablenum = 0; tablenum < m_table_size; tablenum++)
+ if (m_table[tablenum].scan_code == scancode)
+ return m_table[tablenum].mame_key;
+
+ // default to an "other" switch
+ return ITEM_ID_OTHER_SWITCH;
+}
+
+//============================================================
+// wininput_vkey_for_mame_code
+//============================================================
+
+int keyboard_trans_table::vkey_for_mame_code(input_code code)
+{
+ // only works for keyboard switches
+ if (code.device_class() == DEVICE_CLASS_KEYBOARD && code.item_class() == ITEM_CLASS_SWITCH)
+ {
+ input_item_id id = code.item_id();
+ int tablenum;
+
+ // scan the table for a match
+ for (tablenum = 0; tablenum < m_table_size; tablenum++)
+ if (m_table[tablenum].mame_key == id)
+ return m_table[tablenum].virtual_key;
+ }
+ return 0;
+}
+
+#endif
+
+
+int input_module_base::init(const osd_options &options)
+{
+ m_options = &options;
+
+ m_mouse_enabled = options.mouse();
+ m_lightgun_enabled = options.lightgun();
+
+ int result = init_internal();
+ if (result != 0)
+ return result;
+
+ m_input_paused = false;
+ m_input_enabled = true;
+
+ return 0;
+} \ No newline at end of file
diff --git a/src/osd/modules/input/input_common.h b/src/osd/modules/input/input_common.h
new file mode 100644
index 00000000000..23d9c958c8c
--- /dev/null
+++ b/src/osd/modules/input/input_common.h
@@ -0,0 +1,605 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert, R. Belmont, Brad Hughes
+//============================================================
+//
+// input_common.h - Common code for all MAME input modules
+//
+// SDLMAME by Olivier Galibert and R. Belmont
+//
+//============================================================
+
+#ifndef INPUT_COMMON_H_
+#define INPUT_COMMON_H_
+
+#include <memory>
+#include <chrono>
+#include <string>
+#include <queue>
+
+//============================================================
+// PARAMETERS
+//============================================================
+
+enum
+{
+ POVDIR_LEFT = 0,
+ POVDIR_RIGHT,
+ POVDIR_UP,
+ POVDIR_DOWN
+};
+
+#define MAX_KEYS 256
+#define MAX_AXES 32
+#define MAX_BUTTONS 32
+#define MAX_HATS 8
+#define MAX_POV 4
+
+/****************************************************************************
+* DirectInput compatible keyboard scan codes
+****************************************************************************/
+#define KEY_UNKNOWN 0x00
+#define KEY_ESCAPE 0x01
+#define KEY_1 0x02
+#define KEY_2 0x03
+#define KEY_3 0x04
+#define KEY_4 0x05
+#define KEY_5 0x06
+#define KEY_6 0x07
+#define KEY_7 0x08
+#define KEY_8 0x09
+#define KEY_9 0x0A
+#define KEY_0 0x0B
+#define KEY_MINUS 0x0C /* - on main keyboard */
+#define KEY_EQUALS 0x0D
+#define KEY_BACK 0x0E /* backspace */
+#define KEY_TAB 0x0F
+#define KEY_Q 0x10
+#define KEY_W 0x11
+#define KEY_E 0x12
+#define KEY_R 0x13
+#define KEY_T 0x14
+#define KEY_Y 0x15
+#define KEY_U 0x16
+#define KEY_I 0x17
+#define KEY_O 0x18
+#define KEY_P 0x19
+#define KEY_LBRACKET 0x1A
+#define KEY_RBRACKET 0x1B
+#define KEY_RETURN 0x1C /* Enter on main keyboard */
+#define KEY_LCONTROL 0x1D
+#define KEY_A 0x1E
+#define KEY_S 0x1F
+#define KEY_D 0x20
+#define KEY_F 0x21
+#define KEY_G 0x22
+#define KEY_H 0x23
+#define KEY_J 0x24
+#define KEY_K 0x25
+#define KEY_L 0x26
+#define KEY_SEMICOLON 0x27
+#define KEY_APOSTROPHE 0x28
+#define KEY_GRAVE 0x29 /* accent grave */
+#define KEY_LSHIFT 0x2A
+#define KEY_BACKSLASH 0x2B
+#define KEY_Z 0x2C
+#define KEY_X 0x2D
+#define KEY_C 0x2E
+#define KEY_V 0x2F
+#define KEY_B 0x30
+#define KEY_N 0x31
+#define KEY_M 0x32
+#define KEY_COMMA 0x33
+#define KEY_PERIOD 0x34 /* . on main keyboard */
+#define KEY_SLASH 0x35 /* / on main keyboard */
+#define KEY_RSHIFT 0x36
+#define KEY_MULTIPLY 0x37 /* * on numeric keypad */
+#define KEY_LMENU 0x38 /* left Alt */
+#define KEY_SPACE 0x39
+#define KEY_CAPITAL 0x3A
+#define KEY_F1 0x3B
+#define KEY_F2 0x3C
+#define KEY_F3 0x3D
+#define KEY_F4 0x3E
+#define KEY_F5 0x3F
+#define KEY_F6 0x40
+#define KEY_F7 0x41
+#define KEY_F8 0x42
+#define KEY_F9 0x43
+#define KEY_F10 0x44
+#define KEY_NUMLOCK 0x45
+#define KEY_SCROLL 0x46 /* Scroll Lock */
+#define KEY_NUMPAD7 0x47
+#define KEY_NUMPAD8 0x48
+#define KEY_NUMPAD9 0x49
+#define KEY_SUBTRACT 0x4A /* - on numeric keypad */
+#define KEY_NUMPAD4 0x4B
+#define KEY_NUMPAD5 0x4C
+#define KEY_NUMPAD6 0x4D
+#define KEY_ADD 0x4E /* + on numeric keypad */
+#define KEY_NUMPAD1 0x4F
+#define KEY_NUMPAD2 0x50
+#define KEY_NUMPAD3 0x51
+#define KEY_NUMPAD0 0x52
+#define KEY_DECIMAL 0x53 /* . on numeric keypad */
+#define KEY_OEM_102 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */
+#define KEY_F11 0x57
+#define KEY_F12 0x58
+#define KEY_F13 0x64 /* (NEC PC98) */
+#define KEY_F14 0x65 /* (NEC PC98) */
+#define KEY_F15 0x66 /* (NEC PC98) */
+#define KEY_KANA 0x70 /* (Japanese keyboard) */
+#define KEY_ABNT_C1 0x73 /* /? on Brazilian keyboard */
+#define KEY_CONVERT 0x79 /* (Japanese keyboard) */
+#define KEY_NOCONVERT 0x7B /* (Japanese keyboard) */
+#define KEY_YEN 0x7D /* (Japanese keyboard) */
+#define KEY_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */
+#define KEY_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */
+#define KEY_PREVTRACK 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
+#define KEY_AT 0x91 /* (NEC PC98) */
+#define KEY_COLON 0x92 /* (NEC PC98) */
+#define KEY_UNDERLINE 0x93 /* (NEC PC98) */
+#define KEY_KANJI 0x94 /* (Japanese keyboard) */
+#define KEY_STOP 0x95 /* (NEC PC98) */
+#define KEY_AX 0x96 /* (Japan AX) */
+#define KEY_UNLABELED 0x97 /* (J3100) */
+#define KEY_NEXTTRACK 0x99 /* Next Track */
+#define KEY_NUMPADENTER 0x9C /* Enter on numeric keypad */
+#define KEY_RCONTROL 0x9D
+#define KEY_MUTE 0xA0 /* Mute */
+#define KEY_CALCULATOR 0xA1 /* Calculator */
+#define KEY_PLAYPAUSE 0xA2 /* Play / Pause */
+#define KEY_MEDIASTOP 0xA4 /* Media Stop */
+#define KEY_VOLUMEDOWN 0xAE /* Volume - */
+#define KEY_VOLUMEUP 0xB0 /* Volume + */
+#define KEY_WEBHOME 0xB2 /* Web home */
+#define KEY_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */
+#define KEY_DIVIDE 0xB5 /* / on numeric keypad */
+#define KEY_SYSRQ 0xB7
+#define KEY_RMENU 0xB8 /* right Alt */
+#define KEY_PAUSE 0xC5 /* Pause */
+#define KEY_HOME 0xC7 /* Home on arrow keypad */
+#define KEY_UP 0xC8 /* UpArrow on arrow keypad */
+#define KEY_PRIOR 0xC9 /* PgUp on arrow keypad */
+#define KEY_LEFT 0xCB /* LeftArrow on arrow keypad */
+#define KEY_RIGHT 0xCD /* RightArrow on arrow keypad */
+#define KEY_END 0xCF /* End on arrow keypad */
+#define KEY_DOWN 0xD0 /* DownArrow on arrow keypad */
+#define KEY_NEXT 0xD1 /* PgDn on arrow keypad */
+#define KEY_INSERT 0xD2 /* Insert on arrow keypad */
+#define KEY_DELETE 0xD3 /* Delete on arrow keypad */
+#define KEY_LWIN 0xDB /* Left Windows key */
+#define KEY_RWIN 0xDC /* Right Windows key */
+#define KEY_APPS 0xDD /* AppMenu key */
+#define KEY_POWER 0xDE /* System Power */
+#define KEY_SLEEP 0xDF /* System Sleep */
+#define KEY_WAKE 0xE3 /* System Wake */
+#define KEY_WEBSEARCH 0xE5 /* Web Search */
+#define KEY_WEBFAVORITES 0xE6 /* Web Favorites */
+#define KEY_WEBREFRESH 0xE7 /* Web Refresh */
+#define KEY_WEBSTOP 0xE8 /* Web Stop */
+#define KEY_WEBFORWARD 0xE9 /* Web Forward */
+#define KEY_WEBBACK 0xEA /* Web Back */
+#define KEY_MYCOMPUTER 0xEB /* My Computer */
+#define KEY_MAIL 0xEC /* Mail */
+#define KEY_MEDIASELECT 0xED /* Media Select */
+
+//============================================================
+// device_info
+//============================================================
+
+class input_device_list;
+
+class device_info
+{
+ friend input_device_list;
+
+private:
+ std::string m_name;
+ input_device * m_device;
+ running_machine & m_machine;
+ input_module & m_module;
+ input_device_class m_deviceclass;
+
+public:
+ // Constructor
+ device_info(running_machine &machine, const char *name, input_device_class deviceclass, input_module &module)
+ : m_name(name),
+ m_device(nullptr),
+ m_machine(machine),
+ m_module(module),
+ m_deviceclass(deviceclass)
+ {
+ }
+
+ // Destructor
+ virtual ~device_info() {}
+
+ // Getters
+ running_machine & machine() const { return m_machine; }
+ const char * name() { return m_name.c_str(); }
+ input_device * device() { return m_device; }
+ input_module & module() const { return m_module; }
+ input_device_class deviceclass() { return m_deviceclass; }
+
+ // Poll and reset methods
+ virtual void poll() {};
+ virtual void reset() = 0;
+};
+
+//============================================================
+// event_based_device
+//============================================================
+
+#define DEFAULT_EVENT_QUEUE_SIZE 20
+
+template <class TEvent>
+class event_based_device : public device_info
+{
+private:
+ std::queue<TEvent> m_event_queue;
+
+protected:
+ std::mutex m_device_lock;
+
+ virtual void process_event(TEvent &ev) = 0;
+
+public:
+ event_based_device(running_machine &machine, const char *name, input_device_class deviceclass, input_module &module)
+ : device_info(machine, name, deviceclass, module)
+ {
+ }
+
+ void queue_events(const TEvent *events, int count)
+ {
+ std::lock_guard<std::mutex> scope_lock(m_device_lock);
+ for (int i = 0; i < count; i++)
+ m_event_queue.push(events[i]);
+
+ // If we've gone over the size, remove old events from the queue
+ while (m_event_queue.size() > DEFAULT_EVENT_QUEUE_SIZE)
+ m_event_queue.pop();
+ }
+
+ void virtual poll() override
+ {
+ std::lock_guard<std::mutex> scope_lock(m_device_lock);
+
+ // Process each event until the queue is empty
+ while (!m_event_queue.empty())
+ {
+ TEvent &next_event = m_event_queue.front();
+ process_event(next_event);
+ m_event_queue.pop();
+ }
+ }
+};
+
+//============================================================
+// input_device_list class
+//============================================================
+
+class input_device_list
+{
+protected:
+ std::vector<std::unique_ptr<device_info>> m_list;
+
+public:
+ input_device_list()
+ {
+ }
+
+ void poll_devices()
+ {
+ for (auto iter = m_list.begin(); iter != m_list.end(); iter++)
+ iter->get()->poll();
+ }
+
+ void reset_devices()
+ {
+ for (auto iter = m_list.begin(); iter != m_list.end(); iter++)
+ iter->get()->reset();
+ }
+
+ void free_device(device_info * devinfo)
+ {
+ // remove us from the list
+ for (auto iter = m_list.begin(); iter != m_list.end(); iter++)
+ {
+ if (iter->get() == devinfo)
+ {
+ m_list.erase(iter);
+ break;
+ }
+ }
+ }
+
+ int find_index(device_info* devinfo)
+ {
+ // remove us from the list
+ int i = 0;
+ for (auto iter = m_list.begin(); iter != m_list.end(); iter++)
+ {
+ if (iter->get() == devinfo)
+ {
+ break;
+ }
+
+ i++;
+ }
+
+ // return the index or -1 if we couldn't find it
+ return i == m_list.size() ? -1 : i;
+ }
+
+ void free_all_devices()
+ {
+ while (!m_list.empty())
+ m_list.pop_back();
+ }
+
+ int size()
+ {
+ return m_list.size();
+ }
+
+ device_info* at(int index)
+ {
+ return m_list.at(index).get();
+ }
+
+ template <typename TActual>
+ TActual* create_device(running_machine &machine, const char *name, input_module &module)
+ {
+ // allocate the device object
+ auto devinfo = std::make_unique<TActual>(machine, name, module);
+
+ // Add the device to the machine
+ devinfo->m_device = machine.input().device_class(devinfo->deviceclass()).add_device(devinfo->name(), devinfo.get());
+
+ // append us to the list
+ m_list.push_back(std::move(devinfo));
+
+ return (TActual*)m_list.back().get();
+ }
+
+ template <class TActual>
+ TActual* at(int index)
+ {
+ return (TActual*)m_list.at(index).get();
+ }
+};
+
+// keyboard translation table
+
+struct key_trans_entry {
+ input_item_id mame_key;
+
+#if !defined(OSD_WINDOWS)
+ int sdl_scancode;
+ int sdl_key;
+#else
+ int scan_code;
+ unsigned char virtual_key;
+#endif
+
+ char ascii_key;
+ char const * mame_key_name;
+ char * ui_name;
+};
+
+class keyboard_trans_table
+{
+private:
+ // default constructor is private
+ keyboard_trans_table();
+
+ static key_trans_entry s_default_table[];
+ std::unique_ptr<key_trans_entry[]> m_custom_table;
+
+ key_trans_entry * m_table;
+ UINT32 m_table_size;
+
+public:
+ // constructor
+ keyboard_trans_table(std::unique_ptr<key_trans_entry[]> table, unsigned int size);
+
+ // getters/setters
+ UINT32 size() { return m_table_size; }
+
+ // public methods
+ input_item_id lookup_mame_code(const char * scode);
+ int lookup_mame_index(const char * scode);
+
+#if defined(OSD_WINDOWS)
+ input_item_id map_di_scancode_to_itemid(int di_scancode);
+ int vkey_for_mame_code(input_code code);
+#endif
+
+ static keyboard_trans_table& instance()
+ {
+ static keyboard_trans_table s_instance;
+ return s_instance;
+ }
+
+ key_trans_entry & operator [](int i) { return m_table[i]; }
+};
+
+//============================================================
+// input_module_base - base class for input modules
+//============================================================
+
+class osd_options;
+
+typedef std::chrono::high_resolution_clock clock_type;
+typedef std::chrono::time_point<std::chrono::high_resolution_clock> timepoint_type;
+
+// 10 milliseconds polling interval
+#define MIN_POLLING_INTERVAL 10
+
+class input_module_base : public input_module
+{
+public:
+ input_module_base(const char *type, const char* name)
+ : input_module(type, name),
+ m_input_enabled(FALSE),
+ m_mouse_enabled(FALSE),
+ m_lightgun_enabled(FALSE),
+ m_input_paused(FALSE)
+ {
+ }
+
+private:
+ bool m_input_enabled;
+ bool m_mouse_enabled;
+ bool m_lightgun_enabled;
+ bool m_input_paused;
+ const osd_options * m_options;
+ input_device_list m_devicelist;
+ clock_type m_clock;
+ timepoint_type m_last_poll;
+
+protected:
+ void set_mouse_enabled(bool value) { m_mouse_enabled = value; }
+
+public:
+
+ const osd_options * options() { return m_options; }
+ input_device_list * devicelist() { return &m_devicelist; }
+ bool input_enabled() { return m_input_enabled; }
+ bool input_paused() { return m_input_paused; }
+ bool mouse_enabled() { return m_mouse_enabled; }
+ bool lightgun_enabled() { return m_lightgun_enabled; }
+
+ int init(const osd_options &options) override;
+
+ void poll_if_necessary(running_machine &machine) override
+ {
+ auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(m_clock.now() - m_last_poll);
+ if (elapsed.count() >= MIN_POLLING_INTERVAL)
+ {
+ poll(machine);
+ }
+ }
+
+ virtual void poll(running_machine &machine)
+ {
+ // ignore if not enabled
+ if (m_input_enabled)
+ {
+ // grab the current time
+ m_last_poll = m_clock.now();
+
+ before_poll(machine);
+
+ // track if mouse/lightgun is enabled, for mouse hiding purposes
+ m_mouse_enabled = machine.input().device_class(DEVICE_CLASS_MOUSE).enabled();
+ m_lightgun_enabled = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).enabled();
+ }
+
+ // poll all of the devices
+ if (should_poll_devices(machine))
+ {
+ m_devicelist.poll_devices();
+ }
+ else
+ {
+ m_devicelist.reset_devices();
+ }
+ }
+
+ virtual void pause() override
+ {
+ // keep track of the paused state
+ m_input_paused = true;
+ }
+
+ virtual void resume() override
+ {
+ // keep track of the paused state
+ m_input_paused = false;
+ }
+
+ virtual void exit() override
+ {
+ devicelist()->free_all_devices();
+ }
+
+protected:
+ virtual int init_internal() { return 0; }
+ virtual bool should_poll_devices(running_machine &machine) = 0;
+ virtual void before_poll(running_machine &machine) {}
+};
+
+inline static int generic_button_get_state(void *device_internal, void *item_internal)
+{
+ device_info *devinfo = (device_info *)device_internal;
+ unsigned char *itemdata = (unsigned char*)item_internal;
+
+ // return the current state
+ devinfo->module().poll_if_necessary(devinfo->machine());
+ return *itemdata >> 7;
+}
+
+inline static int generic_axis_get_state(void *device_internal, void *item_internal)
+{
+ device_info *devinfo = (device_info *)device_internal;
+ int *axisdata = (int*)item_internal;
+
+ // return the current state
+ devinfo->module().poll_if_necessary(devinfo->machine());
+ return *axisdata;
+}
+
+//============================================================
+// default_button_name
+//============================================================
+
+inline static const char *default_button_name(int which)
+{
+ static char buffer[20];
+ snprintf(buffer, ARRAY_LENGTH(buffer), "B%d", which);
+ return buffer;
+}
+
+//============================================================
+// default_pov_name
+//============================================================
+
+inline static const char *default_pov_name(int which)
+{
+ static char buffer[20];
+ snprintf(buffer, ARRAY_LENGTH(buffer), "POV%d", which);
+ return buffer;
+}
+
+// default axis names
+const char *const default_axis_name[] =
+{
+ "X", "Y", "Z", "RX",
+ "RY", "RZ", "SL1", "SL2"
+};
+
+inline static INT32 normalize_absolute_axis(INT32 raw, INT32 rawmin, INT32 rawmax)
+{
+ INT32 center = (rawmax + rawmin) / 2;
+
+ // make sure we have valid data
+ if (rawmin >= rawmax)
+ return raw;
+
+ // above center
+ if (raw >= center)
+ {
+ INT32 result = (INT64)(raw - center) * (INT64)INPUT_ABSOLUTE_MAX / (INT64)(rawmax - center);
+ return MIN(result, INPUT_ABSOLUTE_MAX);
+ }
+
+ // below center
+ else
+ {
+ INT32 result = -((INT64)(center - raw) * (INT64)-INPUT_ABSOLUTE_MIN / (INT64)(center - rawmin));
+ return MAX(result, INPUT_ABSOLUTE_MIN);
+ }
+}
+
+#endif
diff --git a/src/osd/modules/input/input_dinput.cpp b/src/osd/modules/input/input_dinput.cpp
new file mode 100644
index 00000000000..a80eb4c994d
--- /dev/null
+++ b/src/osd/modules/input/input_dinput.cpp
@@ -0,0 +1,683 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles, Brad Hughes
+//============================================================
+//
+// input_dinput.cpp - Windows DirectInput support
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+#if defined(OSD_WINDOWS)
+
+// standard windows headers
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winioctl.h>
+#include <tchar.h>
+
+// undef WINNT for dinput.h to prevent duplicate definition
+#undef WINNT
+#include <dinput.h>
+#undef interface
+
+#include <mutex>
+#include <thread>
+
+// MAME headers
+#include "emu.h"
+#include "osdepend.h"
+#include "ui/ui.h"
+#include "strconv.h"
+
+// MAMEOS headers
+#include "winmain.h"
+#include "window.h"
+#include "winutil.h"
+
+#include "input_common.h"
+#include "input_windows.h"
+
+#define STRUCTSIZE(x) (m_dinput_version == 0x0300) ? sizeof(x##_DX3) : sizeof(x)
+
+static INT32 dinput_joystick_pov_get_state(void *device_internal, void *item_internal);
+
+//============================================================
+// dinput_set_dword_property
+//============================================================
+
+static HRESULT dinput_set_dword_property(LPDIRECTINPUTDEVICE device, REFGUID property_guid, DWORD object, DWORD how, DWORD value)
+{
+ DIPROPDWORD dipdw;
+
+ dipdw.diph.dwSize = sizeof(dipdw);
+ dipdw.diph.dwHeaderSize = sizeof(dipdw.diph);
+ dipdw.diph.dwObj = object;
+ dipdw.diph.dwHow = how;
+ dipdw.dwData = value;
+
+ return IDirectInputDevice_SetProperty(device, property_guid, &dipdw.diph);
+}
+
+//============================================================
+// dinput_device - base directinput device
+//============================================================
+
+// DirectInput-specific information about a device
+struct dinput_api_state
+{
+ LPDIRECTINPUTDEVICE device;
+ LPDIRECTINPUTDEVICE2 device2;
+ DIDEVCAPS caps;
+ LPCDIDATAFORMAT format;
+};
+
+class dinput_device : public device_info
+{
+public:
+ dinput_api_state dinput;
+
+ dinput_device(running_machine &machine, const char *name, input_device_class deviceclass, input_module &module)
+ : device_info(machine, name, deviceclass, module),
+ dinput({0})
+ {
+ }
+
+protected:
+ HRESULT poll_dinput(LPVOID pState)
+ {
+ HRESULT result;
+
+ // first poll the device, then get the state
+ if (dinput.device2 != NULL)
+ IDirectInputDevice2_Poll(dinput.device2);
+
+ // GetDeviceState returns the immediate state
+ result = IDirectInputDevice_GetDeviceState(dinput.device, dinput.format->dwDataSize, pState);
+
+ // handle lost inputs here
+ if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED)
+ {
+ result = IDirectInputDevice_Acquire(dinput.device);
+ if (result == DI_OK)
+ result = IDirectInputDevice_GetDeviceState(dinput.device, dinput.format->dwDataSize, pState);
+ }
+
+ return result;
+ }
+};
+
+//============================================================
+// dinput_keyboard_device - directinput keyboard device
+//============================================================
+
+class dinput_keyboard_device : public dinput_device
+{
+private:
+ HANDLE m_dataEvent;
+ HANDLE m_exitEvent;
+ std::mutex m_device_lock;
+
+public:
+ keyboard_state keyboard;
+
+ dinput_keyboard_device(running_machine &machine, const char *name, input_module &module)
+ : dinput_device(machine, name, DEVICE_CLASS_KEYBOARD, module),
+ keyboard({0})
+ {
+ }
+
+ // Polls the direct input immediate state
+ void poll() override
+ {
+ std::lock_guard<std::mutex> scope_lock(m_device_lock);
+
+ // Poll the state
+ dinput_device::poll_dinput(&keyboard.state);
+ }
+
+ void reset() override
+ {
+ memset(&keyboard, 0, sizeof(keyboard));
+ }
+};
+
+//============================================================
+// dinput_module - base directinput module
+//============================================================
+
+class dinput_module : public wininput_module
+{
+private:
+ LPDIRECTINPUT m_dinput;
+ int m_dinput_version;
+ int didevtype_keyboard;
+ int didevtype_mouse;
+
+public:
+ dinput_module(const char* type, const char* name)
+ : wininput_module(type, name)
+ {
+ }
+
+ int init_internal() override
+ {
+ HRESULT result = S_OK;
+
+#if DIRECTINPUT_VERSION >= 0x800
+ m_dinput_version = DIRECTINPUT_VERSION;
+ result = DirectInput8Create(GetModuleHandleUni(), m_dinput_version, IID_IDirectInput8, (void **)&m_dinput, NULL);
+ if (result != DI_OK)
+ {
+ m_dinput_version = 0;
+ return result;
+ }
+#else
+ // first attempt to initialize DirectInput at the current version
+ m_dinput_version = DIRECTINPUT_VERSION;
+ result = DirectInputCreate(GetModuleHandleUni(), m_dinput_version, &m_dinput, NULL);
+ if (result != DI_OK)
+ {
+ // if that fails, try version 5
+ m_dinput_version = 0x0500;
+ result = DirectInputCreate(GetModuleHandleUni(), m_dinput_version, &m_dinput, NULL);
+ if (result != DI_OK)
+ {
+ // if that fails, try version 3
+ m_dinput_version = 0x0300;
+ result = DirectInputCreate(GetModuleHandleUni(), m_dinput_version, &m_dinput, NULL);
+ if (result != DI_OK)
+ {
+ m_dinput_version = 0;
+ return result;
+ }
+ }
+ }
+#endif
+
+ osd_printf_verbose("DirectInput: Using DirectInput %d\n", m_dinput_version >> 8);
+ return 0;
+ }
+
+ void exit() override
+ {
+ wininput_module::exit();
+ }
+
+ virtual BOOL device_enum_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref) = 0;
+
+ struct dinput_callback_context
+ {
+ dinput_module * self;
+ running_machine * machine;
+ };
+
+ static BOOL CALLBACK enum_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref)
+ {
+ return ((dinput_callback_context*)ref)->self->device_enum_callback(instance, ((dinput_callback_context*)ref)->machine);
+ }
+ void input_init(running_machine &machine) override
+ {
+ dinput_callback_context context = { this, &machine };
+
+ HRESULT result = IDirectInput_EnumDevices(m_dinput, dinput_devclass(), enum_callback, &context, DIEDFL_ATTACHEDONLY);
+ if (result != DI_OK)
+ fatalerror("DirectInput: Unable to enumerate keyboards (result=%08X)\n", (UINT32)result);
+ }
+
+protected:
+ virtual int dinput_devclass() = 0;
+
+ template <class TDevice>
+ TDevice* create_dinput_device(
+ running_machine &machine,
+ LPCDIDEVICEINSTANCE instance,
+ LPCDIDATAFORMAT format1,
+ LPCDIDATAFORMAT format2,
+ DWORD cooperative_level)
+ {
+ HRESULT result;
+
+ // convert instance name to utf8
+ auto osd_deleter = [](void *ptr) { osd_free(ptr); };
+ auto utf8_instance_name = std::unique_ptr<char, decltype(osd_deleter)>(utf8_from_tstring(instance->tszInstanceName), osd_deleter);
+
+ // allocate memory for the device object
+ TDevice* devinfo = devicelist()->create_device<TDevice>(machine, utf8_instance_name.get(), *this);
+
+ // attempt to create a device
+ result = IDirectInput_CreateDevice(m_dinput, WRAP_REFIID(instance->guidInstance), &devinfo->dinput.device, NULL);
+ if (result != DI_OK)
+ goto error;
+
+ // try to get a version 2 device for it
+ result = IDirectInputDevice_QueryInterface(devinfo->dinput.device, WRAP_REFIID(IID_IDirectInputDevice2), (void **)&devinfo->dinput.device2);
+ if (result != DI_OK)
+ devinfo->dinput.device2 = NULL;
+
+ // get the caps
+ devinfo->dinput.caps.dwSize = STRUCTSIZE(DIDEVCAPS);
+ result = IDirectInputDevice_GetCapabilities(devinfo->dinput.device, &devinfo->dinput.caps);
+ if (result != DI_OK)
+ goto error;
+
+ // attempt to set the data format
+ devinfo->dinput.format = format1;
+ result = IDirectInputDevice_SetDataFormat(devinfo->dinput.device, devinfo->dinput.format);
+ if (result != DI_OK)
+ {
+ // use the secondary format if available
+ if (format2 != NULL)
+ {
+ devinfo->dinput.format = format2;
+ result = IDirectInputDevice_SetDataFormat(devinfo->dinput.device, devinfo->dinput.format);
+ }
+ if (result != DI_OK)
+ goto error;
+ }
+
+ // set the cooperative level
+ result = IDirectInputDevice_SetCooperativeLevel(devinfo->dinput.device, win_window_list->m_hwnd, cooperative_level);
+ if (result != DI_OK)
+ goto error;
+ return devinfo;
+
+ error:
+ devicelist()->free_device(devinfo);
+ return NULL;
+ }
+
+ std::string device_item_name(dinput_device * devinfo, int offset, const char * defstring, const TCHAR * suffix)
+ {
+ DIDEVICEOBJECTINSTANCE instance = { 0 };
+ HRESULT result;
+
+ // query the key name
+ instance.dwSize = STRUCTSIZE(DIDEVICEOBJECTINSTANCE);
+ result = IDirectInputDevice_GetObjectInfo(devinfo->dinput.device, &instance, offset, DIPH_BYOFFSET);
+
+ // if we got an error and have no default string, just return NULL
+ if (result != DI_OK)
+ {
+ if (defstring == nullptr)
+ return nullptr;
+
+ // Return the default value
+ return std::string(defstring);
+ }
+
+ auto osd_free_deleter = [](char *p) { osd_free(p); };
+
+ // convert the name to utf8
+ auto namestring = std::unique_ptr<char, decltype(osd_free_deleter)>(utf8_from_tstring(instance.tszName), osd_free_deleter);
+
+ // if no suffix, return as-is
+ if (suffix == nullptr)
+ {
+ return std::string(namestring.get());
+ }
+
+ // otherwise, allocate space to add the suffix
+ auto combined = std::make_unique<char[]>(strlen(namestring.get()) + 1 + _tcslen(suffix) + 1);
+
+ // convert the suffix to utf8
+ auto suffix_utf8 = std::unique_ptr<char, decltype(osd_free_deleter)>(utf8_from_tstring(suffix), osd_free_deleter);
+
+ // Concat the name and suffix
+ strcpy(combined.get(), namestring.get());
+ strcat(combined.get(), " ");
+ strcat(combined.get(), suffix_utf8.get());
+
+ return std::string(combined.get());
+ }
+};
+
+class keyboard_input_dinput : public dinput_module
+{
+public:
+ keyboard_input_dinput() :
+ dinput_module(OSD_KEYBOARDINPUT_PROVIDER, "dinput")
+ {
+ }
+
+ int dinput_devclass() override
+ {
+#if DIRECTINPUT_VERSION >= 0x800
+ return DI8DEVCLASS_KEYBOARD;
+#else
+ return DIDEVTYPE_KEYBOARD;
+#endif
+ }
+
+ BOOL device_enum_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref) override
+ {
+ running_machine &machine = *(running_machine *)ref;
+ dinput_keyboard_device *devinfo;
+ int keynum;
+
+ // allocate and link in a new device
+ devinfo = create_dinput_device<dinput_keyboard_device>(machine, instance, &c_dfDIKeyboard, NULL, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
+ if (devinfo == NULL)
+ goto exit;
+
+ // populate it
+ for (keynum = 0; keynum < MAX_KEYS; keynum++)
+ {
+ input_item_id itemid = keyboard_trans_table::instance().map_di_scancode_to_itemid(keynum);
+ char defname[20];
+ std::string name;
+
+ // generate/fetch the name
+ snprintf(defname, ARRAY_LENGTH(defname), "Scan%03d", keynum);
+ name = device_item_name(devinfo, keynum, defname, NULL);
+
+ // add the item to the device
+ devinfo->device()->add_item(name.c_str(), itemid, generic_button_get_state, &devinfo->keyboard.state[keynum]);
+ }
+
+ exit:
+ return DIENUM_CONTINUE;
+ }
+};
+
+class dinput_mouse_device : public dinput_device
+{
+public:
+ mouse_state mouse;
+
+ dinput_mouse_device(running_machine &machine, const char *name, input_module &module)
+ : dinput_device(machine, name, DEVICE_CLASS_MOUSE, module),
+ mouse({0})
+ {
+ }
+
+ void poll() override
+ {
+ // poll
+ dinput_device::poll_dinput(&mouse);
+
+ // scale the axis data
+ mouse.lX *= INPUT_RELATIVE_PER_PIXEL;
+ mouse.lY *= INPUT_RELATIVE_PER_PIXEL;
+ mouse.lZ *= INPUT_RELATIVE_PER_PIXEL;
+ }
+
+ void reset() override
+ {
+ memset(&mouse, 0, sizeof(mouse));
+ }
+};
+
+class mouse_input_dinput : public dinput_module
+{
+public:
+ mouse_input_dinput() :
+ dinput_module(OSD_MOUSEINPUT_PROVIDER, "dinput")
+ {
+ }
+
+ int dinput_devclass() override
+ {
+#if DIRECTINPUT_VERSION >= 0x800
+ return DI8DEVCLASS_POINTER;
+#else
+ return DIDEVTYPE_MOUSE;
+#endif
+ }
+
+ BOOL device_enum_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref) override
+ {
+ dinput_mouse_device *devinfo = NULL;
+ running_machine &machine = *(running_machine *)ref;
+ int axisnum, butnum;
+ HRESULT result;
+
+ // allocate and link in a new device
+ devinfo = create_dinput_device<dinput_mouse_device>(machine, instance, &c_dfDIMouse2, &c_dfDIMouse, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
+ if (devinfo == NULL)
+ goto exit;
+
+ // set relative mode on the mouse device
+ result = dinput_set_dword_property(devinfo->dinput.device, DIPROP_AXISMODE, 0, DIPH_DEVICE, DIPROPAXISMODE_REL);
+ if (result != DI_OK && result != DI_PROPNOEFFECT)
+ {
+ osd_printf_error("DirectInput: Unable to set relative mode for mouse %d (%s)\n", devicelist()->size(), devinfo->name());
+ goto error;
+ }
+
+ // cap the number of axes and buttons based on the format
+ devinfo->dinput.caps.dwAxes = MIN(devinfo->dinput.caps.dwAxes, 3);
+ devinfo->dinput.caps.dwButtons = MIN(devinfo->dinput.caps.dwButtons, (devinfo->dinput.format == &c_dfDIMouse) ? 4 : 8);
+
+ // populate the axes
+ for (axisnum = 0; axisnum < devinfo->dinput.caps.dwAxes; axisnum++)
+ {
+ // add to the mouse device and optionally to the gun device as well
+ std::string name = device_item_name(devinfo, offsetof(DIMOUSESTATE, lX) + axisnum * sizeof(LONG), default_axis_name[axisnum], NULL);
+ devinfo->device()->add_item(name.c_str(), (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.lX + axisnum);
+ }
+
+ // populate the buttons
+ for (butnum = 0; butnum < devinfo->dinput.caps.dwButtons; butnum++)
+ {
+ FPTR offset = (FPTR)(&((DIMOUSESTATE *)NULL)->rgbButtons[butnum]);
+
+ // add to the mouse device
+ std::string name = device_item_name(devinfo, offset, default_button_name(butnum), NULL);
+ devinfo->device()->add_item(name.c_str(), (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.rgbButtons[butnum]);
+ }
+
+ exit:
+ return DIENUM_CONTINUE;
+
+ error:
+ if (devinfo != NULL)
+ devicelist()->free_device(devinfo);
+ goto exit;
+ }
+};
+
+// state information for a joystick; DirectInput state must be first element
+struct dinput_joystick_state
+{
+ DIJOYSTATE state;
+ LONG rangemin[8];
+ LONG rangemax[8];
+};
+
+class dinput_joystick_device : public dinput_device
+{
+public:
+ dinput_joystick_state joystick;
+
+ dinput_joystick_device(running_machine &machine, const char *name, input_module &module)
+ : dinput_device(machine, name, DEVICE_CLASS_JOYSTICK, module),
+ joystick({0})
+ {
+ }
+
+ void reset() override
+ {
+ memset(&joystick, 0, sizeof(joystick));
+ }
+
+ void poll() override
+ {
+ int axisnum;
+
+ // poll the device first
+ dinput_device::poll_dinput(&joystick.state);
+
+ // normalize axis values
+ for (axisnum = 0; axisnum < 8; axisnum++)
+ {
+ LONG *axis = (&joystick.state.lX) + axisnum;
+ *axis = normalize_absolute_axis(*axis, joystick.rangemin[axisnum], joystick.rangemax[axisnum]);
+ }
+ }
+};
+
+class joystick_input_dinput : public dinput_module
+{
+public:
+ joystick_input_dinput() :
+ dinput_module(OSD_JOYSTICKINPUT_PROVIDER, "dinput")
+ {
+ }
+
+ int dinput_devclass() override
+ {
+#if DIRECTINPUT_VERSION >= 0x800
+ return DI8DEVCLASS_GAMECTRL;
+#else
+ return DIDEVTYPE_JOYSTICK;
+#endif
+ }
+
+ BOOL device_enum_callback(LPCDIDEVICEINSTANCE instance, LPVOID ref) override
+ {
+ DWORD cooperative_level = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
+ int axisnum, axiscount, povnum, butnum;
+ running_machine &machine = *(running_machine *)ref;
+ dinput_joystick_device *devinfo;
+ HRESULT result;
+
+ if (win_window_list != NULL && win_window_list->win_has_menu()) {
+ cooperative_level = DISCL_BACKGROUND | DISCL_NONEXCLUSIVE;
+ }
+ // allocate and link in a new device
+ devinfo = create_dinput_device<dinput_joystick_device>(machine, instance, &c_dfDIJoystick, NULL, cooperative_level);
+ if (devinfo == NULL)
+ goto exit;
+
+ // set absolute mode
+ result = dinput_set_dword_property(devinfo->dinput.device, DIPROP_AXISMODE, 0, DIPH_DEVICE, DIPROPAXISMODE_ABS);
+ if (result != DI_OK && result != DI_PROPNOEFFECT)
+ osd_printf_warning("DirectInput: Unable to set absolute mode for joystick %d (%s)\n", devicelist()->size(), devinfo->name());
+
+ // turn off deadzone; we do our own calculations
+ result = dinput_set_dword_property(devinfo->dinput.device, DIPROP_DEADZONE, 0, DIPH_DEVICE, 0);
+ if (result != DI_OK && result != DI_PROPNOEFFECT)
+ osd_printf_warning("DirectInput: Unable to reset deadzone for joystick %d (%s)\n", devicelist()->size(), devinfo->name());
+
+ // turn off saturation; we do our own calculations
+ result = dinput_set_dword_property(devinfo->dinput.device, DIPROP_SATURATION, 0, DIPH_DEVICE, 10000);
+ if (result != DI_OK && result != DI_PROPNOEFFECT)
+ osd_printf_warning("DirectInput: Unable to reset saturation for joystick %d (%s)\n", devicelist()->size(), devinfo->name());
+
+ // cap the number of axes, POVs, and buttons based on the format
+ devinfo->dinput.caps.dwAxes = MIN(devinfo->dinput.caps.dwAxes, 8);
+ devinfo->dinput.caps.dwPOVs = MIN(devinfo->dinput.caps.dwPOVs, 4);
+ devinfo->dinput.caps.dwButtons = MIN(devinfo->dinput.caps.dwButtons, 128);
+
+ // populate the axes
+ for (axisnum = axiscount = 0; axiscount < devinfo->dinput.caps.dwAxes && axisnum < 8; axisnum++)
+ {
+ DIPROPRANGE dipr;
+ std::string name;
+
+ // fetch the range of this axis
+ dipr.diph.dwSize = sizeof(dipr);
+ dipr.diph.dwHeaderSize = sizeof(dipr.diph);
+ dipr.diph.dwObj = offsetof(DIJOYSTATE2, lX) + axisnum * sizeof(LONG);
+ dipr.diph.dwHow = DIPH_BYOFFSET;
+ result = IDirectInputDevice_GetProperty(devinfo->dinput.device, DIPROP_RANGE, &dipr.diph);
+ if (result != DI_OK)
+ continue;
+
+ devinfo->joystick.rangemin[axisnum] = dipr.lMin;
+ devinfo->joystick.rangemax[axisnum] = dipr.lMax;
+
+ // populate the item description as well
+ name = device_item_name(devinfo, offsetof(DIJOYSTATE2, lX) + axisnum * sizeof(LONG), default_axis_name[axisnum], NULL);
+ devinfo->device()->add_item(name.c_str(), (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->joystick.state.lX + axisnum);
+
+ axiscount++;
+ }
+
+ // populate the POVs
+ for (povnum = 0; povnum < devinfo->dinput.caps.dwPOVs; povnum++)
+ {
+ std::string name;
+
+ // left
+ name = device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("L"));
+ devinfo->device()->add_item(name.c_str(), ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_LEFT));
+
+ // right
+ name = device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("R"));
+ devinfo->device()->add_item(name.c_str(), ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_RIGHT));
+
+ // up
+ name = device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("U"));
+ devinfo->device()->add_item(name.c_str(), ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_UP));
+
+ // down
+ name = device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("D"));
+ devinfo->device()->add_item(name.c_str(), ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_DOWN));
+ }
+
+ // populate the buttons
+ for (butnum = 0; butnum < devinfo->dinput.caps.dwButtons; butnum++)
+ {
+ FPTR offset = (FPTR)(&((DIJOYSTATE2 *)NULL)->rgbButtons[butnum]);
+ std::string name = device_item_name(devinfo, offset, default_button_name(butnum), NULL);
+
+ input_item_id itemid;
+
+ if (butnum < INPUT_MAX_BUTTONS)
+ itemid = (input_item_id)(ITEM_ID_BUTTON1 + butnum);
+ else if (butnum < INPUT_MAX_BUTTONS + INPUT_MAX_ADD_SWITCH)
+ itemid = (input_item_id)(ITEM_ID_ADD_SWITCH1 - INPUT_MAX_BUTTONS + butnum);
+ else
+ itemid = ITEM_ID_OTHER_SWITCH;
+
+ devinfo->device()->add_item(name.c_str(), itemid, generic_button_get_state, &devinfo->joystick.state.rgbButtons[butnum]);
+ }
+
+ exit:
+ return DIENUM_CONTINUE;
+ }
+};
+
+//============================================================
+// dinput_joystick_pov_get_state
+//============================================================
+
+static INT32 dinput_joystick_pov_get_state(void *device_internal, void *item_internal)
+{
+ dinput_joystick_device *devinfo = (dinput_joystick_device *)device_internal;
+ int povnum = (FPTR)item_internal / 4;
+ int povdir = (FPTR)item_internal % 4;
+ INT32 result = 0;
+ DWORD pov;
+
+ // get the current state
+ devinfo->module().poll_if_necessary(devinfo->machine());
+ pov = devinfo->joystick.state.rgdwPOV[povnum];
+
+ // if invalid, return 0
+ if ((pov & 0xffff) == 0xffff)
+ return result;
+
+ // return the current state
+ switch (povdir)
+ {
+ case POVDIR_LEFT: result = (pov >= 22500 && pov <= 31500); break;
+ case POVDIR_RIGHT: result = (pov >= 4500 && pov <= 13500); break;
+ case POVDIR_UP: result = (pov >= 31500 || pov <= 4500); break;
+ case POVDIR_DOWN: result = (pov >= 13500 && pov <= 22500); break;
+ }
+ return result;
+}
+
+#else
+MODULE_NOT_SUPPORTED(keyboard_input_dinput, OSD_KEYBOARDINPUT_PROVIDER, "dinput")
+MODULE_NOT_SUPPORTED(mouse_input_dinput, OSD_MOUSEINPUT_PROVIDER, "dinput")
+MODULE_NOT_SUPPORTED(joystick_input_dinput, OSD_JOYSTICKINPUT_PROVIDER, "dinput")
+#endif
+
+MODULE_DEFINITION(KEYBOARDINPUT_DINPUT, keyboard_input_dinput)
+MODULE_DEFINITION(MOUSEINPUT_DINPUT, mouse_input_dinput)
+MODULE_DEFINITION(JOYSTICKINPUT_DINPUT, joystick_input_dinput) \ No newline at end of file
diff --git a/src/osd/modules/input/input_module.h b/src/osd/modules/input/input_module.h
new file mode 100644
index 00000000000..f031bbb6fad
--- /dev/null
+++ b/src/osd/modules/input/input_module.h
@@ -0,0 +1,39 @@
+// license:BSD-3-Clause
+// copyright-holders:Brad Hughes
+//============================================================
+//
+// input_module.h - OSD input module contracts
+//
+//============================================================
+
+#ifndef INPUT_MODULE_H_
+#define INPUT_MODULE_H_
+
+#include "osdepend.h"
+#include "modules/osdmodule.h"
+
+class input_module : public osd_module
+{
+public:
+ input_module(const char *type, const char *name)
+ : osd_module(type, name)
+ {
+ }
+
+ virtual void input_init(running_machine &machine) = 0;
+ virtual void poll_if_necessary(running_machine &machine) = 0;
+ virtual void pause() = 0;
+ virtual void resume() = 0;
+ virtual void exit() override {};
+};
+
+//============================================================
+// CONSTANTS
+//============================================================
+
+#define OSD_KEYBOARDINPUT_PROVIDER "keyboardprovider"
+#define OSD_MOUSEINPUT_PROVIDER "mouseprovider"
+#define OSD_LIGHTGUNINPUT_PROVIDER "lightgunprovider"
+#define OSD_JOYSTICKINPUT_PROVIDER "joystickprovider"
+
+#endif /* INPUT_MODULE_H_ */
diff --git a/src/osd/modules/input/input_none.cpp b/src/osd/modules/input/input_none.cpp
new file mode 100644
index 00000000000..e485faca4f6
--- /dev/null
+++ b/src/osd/modules/input/input_none.cpp
@@ -0,0 +1,66 @@
+// license:BSD-3-Clause
+// copyright-holders:Brad Hughes
+//============================================================
+//
+// input_none.cpp - Default unimplemented input modules
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+class keyboard_input_none : public input_module
+{
+public:
+ keyboard_input_none()
+ : input_module(OSD_KEYBOARDINPUT_PROVIDER, "none") {}
+ int init(const osd_options &options) override { return 0; }
+ void poll_if_necessary(running_machine &machine) override {};
+ void input_init(running_machine &machine) override {};
+ void pause() override {};
+ void resume() override {};
+};
+
+MODULE_DEFINITION(KEYBOARD_NONE, keyboard_input_none)
+
+class mouse_input_none : public input_module
+{
+public:
+ mouse_input_none()
+ : input_module(OSD_MOUSEINPUT_PROVIDER, "none") {}
+ int init(const osd_options &options) override { return 0; }
+ void input_init(running_machine &machine) override {};
+ void poll_if_necessary(running_machine &machine) override {};
+ void pause() override {};
+ void resume() override {};
+};
+
+MODULE_DEFINITION(MOUSE_NONE, mouse_input_none)
+
+class lightgun_input_none : public input_module
+{
+public:
+ lightgun_input_none()
+ : input_module(OSD_LIGHTGUNINPUT_PROVIDER, "none") {}
+ int init(const osd_options &options) override { return 0; }
+ void input_init(running_machine &machine) override {};
+ void poll_if_necessary(running_machine &machine) override {};
+ void pause() override {};
+ void resume() override {};
+};
+
+MODULE_DEFINITION(LIGHTGUN_NONE, lightgun_input_none)
+
+class joystick_input_none : public input_module
+{
+public:
+ joystick_input_none()
+ : input_module(OSD_JOYSTICKINPUT_PROVIDER, "none") {}
+ int init(const osd_options &options) override { return 0; }
+ void input_init(running_machine &machine) override {};
+ void poll_if_necessary(running_machine &machine) override {};
+ void pause() override {};
+ void resume() override {};
+};
+
+MODULE_DEFINITION(JOYSTICK_NONE, joystick_input_none) \ No newline at end of file
diff --git a/src/osd/modules/input/input_rawinput.cpp b/src/osd/modules/input/input_rawinput.cpp
new file mode 100644
index 00000000000..5f930e5d780
--- /dev/null
+++ b/src/osd/modules/input/input_rawinput.cpp
@@ -0,0 +1,648 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles, Brad Hughes
+//============================================================
+//
+// input_rawinput.cpp - Windows RawInput input implementation
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+#if defined(OSD_WINDOWS)
+
+// standard windows headers
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winioctl.h>
+#include <tchar.h>
+#undef interface
+
+#include <mutex>
+
+// MAME headers
+#include "emu.h"
+#include "osdepend.h"
+#include "ui/ui.h"
+#include "strconv.h"
+
+// MAMEOS headers
+#include "winmain.h"
+#include "window.h"
+
+#include "input_common.h"
+#include "input_windows.h"
+
+//============================================================
+// MACROS
+//============================================================
+
+#ifdef UNICODE
+#define UNICODE_SUFFIX "W"
+#else
+#define UNICODE_SUFFIX "A"
+#endif
+
+// RawInput APIs
+typedef /*WINUSERAPI*/ INT(WINAPI *get_rawinput_device_list_ptr)(OUT PRAWINPUTDEVICELIST pRawInputDeviceList, IN OUT PINT puiNumDevices, IN UINT cbSize);
+typedef /*WINUSERAPI*/ INT(WINAPI *get_rawinput_data_ptr)(IN HRAWINPUT hRawInput, IN UINT uiCommand, OUT LPVOID pData, IN OUT PINT pcbSize, IN UINT cbSizeHeader);
+typedef /*WINUSERAPI*/ INT(WINAPI *get_rawinput_device_info_ptr)(IN HANDLE hDevice, IN UINT uiCommand, OUT LPVOID pData, IN OUT PINT pcbSize);
+typedef /*WINUSERAPI*/ BOOL(WINAPI *register_rawinput_devices_ptr)(IN PCRAWINPUTDEVICE pRawInputDevices, IN UINT uiNumDevices, IN UINT cbSize);
+
+//============================================================
+// reg_query_string
+//============================================================
+
+static TCHAR *reg_query_string(HKEY key, const TCHAR *path)
+{
+ TCHAR *buffer;
+ DWORD datalen;
+ LONG result;
+
+ // first query to get the length
+ result = RegQueryValueEx(key, path, NULL, NULL, NULL, &datalen);
+ if (result != ERROR_SUCCESS)
+ return NULL;
+
+ // allocate a buffer
+ buffer = global_alloc_array(TCHAR, datalen + sizeof(*buffer));
+ buffer[datalen / sizeof(*buffer)] = 0;
+
+ // now get the actual data
+ result = RegQueryValueEx(key, path, NULL, NULL, (LPBYTE)buffer, &datalen);
+ if (result == ERROR_SUCCESS)
+ return buffer;
+
+ // otherwise return a NULL buffer
+ global_free_array(buffer);
+ return NULL;
+}
+
+//============================================================
+// rawinput_device_improve_name
+//============================================================
+
+static TCHAR *rawinput_device_improve_name(TCHAR *name)
+{
+ static const TCHAR usbbasepath[] = TEXT("SYSTEM\\CurrentControlSet\\Enum\\USB");
+ static const TCHAR basepath[] = TEXT("SYSTEM\\CurrentControlSet\\Enum\\");
+ TCHAR *regstring = NULL;
+ TCHAR *parentid = NULL;
+ TCHAR *regpath = NULL;
+ const TCHAR *chsrc;
+ HKEY regkey = NULL;
+ int usbindex;
+ TCHAR *chdst;
+ LONG result;
+
+ // The RAW name received is formatted as:
+ // \??\type-id#hardware-id#instance-id#{DeviceClasses-id}
+ // XP starts with "\??\"
+ // Vista64 starts with "\\?\"
+
+ // ensure the name is something we can handle
+ if (_tcsncmp(name, TEXT("\\\\?\\"), 4) != 0 && _tcsncmp(name, TEXT("\\??\\"), 4) != 0)
+ return name;
+
+ // allocate a temporary string and concatenate the base path plus the name
+ regpath = global_alloc_array(TCHAR, _tcslen(basepath) + 1 + _tcslen(name));
+ _tcscpy(regpath, basepath);
+ chdst = regpath + _tcslen(regpath);
+
+ // convert all # to \ in the name
+ for (chsrc = name + 4; *chsrc != 0; chsrc++)
+ *chdst++ = (*chsrc == '#') ? '\\' : *chsrc;
+ *chdst = 0;
+
+ // remove the final chunk
+ chdst = _tcsrchr(regpath, '\\');
+ if (chdst == NULL)
+ goto exit;
+ *chdst = 0;
+
+ // now try to open the registry key
+ result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regpath, 0, KEY_READ, &regkey);
+ if (result != ERROR_SUCCESS)
+ goto exit;
+
+ // fetch the device description; if it exists, we are finished
+ regstring = reg_query_string(regkey, TEXT("DeviceDesc"));
+ if (regstring != NULL)
+ goto convert;
+
+ // close this key
+ RegCloseKey(regkey);
+ regkey = NULL;
+
+ // if the key name does not contain "HID", it's not going to be in the USB tree; give up
+ if (_tcsstr(regpath, TEXT("HID")) == NULL)
+ goto exit;
+
+ // extract the expected parent ID from the regpath
+ parentid = _tcsrchr(regpath, '\\');
+ if (parentid == NULL)
+ goto exit;
+ parentid++;
+
+ // open the USB key
+ result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, usbbasepath, 0, KEY_READ, &regkey);
+ if (result != ERROR_SUCCESS)
+ goto exit;
+
+ // enumerate the USB key
+ for (usbindex = 0; result == ERROR_SUCCESS && regstring == NULL; usbindex++)
+ {
+ TCHAR keyname[MAX_PATH];
+ DWORD namelen;
+
+ // get the next enumerated subkey and scan it
+ namelen = ARRAY_LENGTH(keyname) - 1;
+ result = RegEnumKeyEx(regkey, usbindex, keyname, &namelen, NULL, NULL, NULL, NULL);
+ if (result == ERROR_SUCCESS)
+ {
+ LONG subresult;
+ int subindex;
+ HKEY subkey;
+
+ // open the subkey
+ subresult = RegOpenKeyEx(regkey, keyname, 0, KEY_READ, &subkey);
+ if (subresult != ERROR_SUCCESS)
+ continue;
+
+ // enumerate the subkey
+ for (subindex = 0; subresult == ERROR_SUCCESS && regstring == NULL; subindex++)
+ {
+ // get the next enumerated subkey and scan it
+ namelen = ARRAY_LENGTH(keyname) - 1;
+ subresult = RegEnumKeyEx(subkey, subindex, keyname, &namelen, NULL, NULL, NULL, NULL);
+ if (subresult == ERROR_SUCCESS)
+ {
+ TCHAR *endparentid;
+ LONG endresult;
+ HKEY endkey;
+
+ // open this final key
+ endresult = RegOpenKeyEx(subkey, keyname, 0, KEY_READ, &endkey);
+ if (endresult != ERROR_SUCCESS)
+ continue;
+
+ // do we have a match?
+ endparentid = reg_query_string(endkey, TEXT("ParentIdPrefix"));
+ if (endparentid != NULL && _tcsncmp(parentid, endparentid, _tcslen(endparentid)) == 0)
+ regstring = reg_query_string(endkey, TEXT("DeviceDesc"));
+
+ // free memory and close the key
+ if (endparentid != NULL)
+ global_free_array(endparentid);
+ RegCloseKey(endkey);
+ }
+ }
+
+ // close the subkey
+ RegCloseKey(subkey);
+ }
+ }
+
+ // if we didn't find anything, go to the exit
+ if (regstring == NULL)
+ goto exit;
+
+convert:
+ // replace the name with the nicer one
+ global_free_array(name);
+
+ // remove anything prior to the final semicolon
+ chsrc = _tcsrchr(regstring, ';');
+ if (chsrc != NULL)
+ chsrc++;
+ else
+ chsrc = regstring;
+ name = global_alloc_array(TCHAR, _tcslen(chsrc) + 1);
+ _tcscpy(name, chsrc);
+
+exit:
+ if (regstring != NULL)
+ global_free_array(regstring);
+ if (regpath != NULL)
+ global_free_array(regpath);
+ if (regkey != NULL)
+ RegCloseKey(regkey);
+
+ return name;
+}
+
+
+//============================================================
+// rawinput_device class
+//============================================================
+
+class rawinput_device : public event_based_device<RAWINPUT>
+{
+private:
+ HANDLE m_handle;
+
+public:
+ rawinput_device(running_machine& machine, const char* name, input_device_class deviceclass, input_module& module)
+ : event_based_device(machine, name, deviceclass, module)
+ {
+ }
+
+ HANDLE device_handle() { return m_handle; }
+ void set_handle(HANDLE handle) { m_handle = handle; }
+};
+
+//============================================================
+// rawinput_keyboard_device
+//============================================================
+
+class rawinput_keyboard_device : public rawinput_device
+{
+public:
+ keyboard_state keyboard;
+
+ rawinput_keyboard_device(running_machine& machine, const char* name, input_module& module)
+ : rawinput_device(machine, name, DEVICE_CLASS_KEYBOARD, module),
+ keyboard({0})
+ {
+ }
+
+ void reset() override
+ {
+ memset(&keyboard, 0, sizeof(keyboard));
+ }
+
+ void process_event(RAWINPUT &rawinput) override
+ {
+ // determine the full DIK-compatible scancode
+ UINT8 scancode = (rawinput.data.keyboard.MakeCode & 0x7f) | ((rawinput.data.keyboard.Flags & RI_KEY_E0) ? 0x80 : 0x00);
+
+ // scancode 0xaa is a special shift code we need to ignore
+ if (scancode == 0xaa)
+ return;
+
+ // set or clear the key
+ keyboard.state[scancode] = (rawinput.data.keyboard.Flags & RI_KEY_BREAK) ? 0x00 : 0x80;
+ }
+};
+
+//============================================================
+// rawinput_mouse_device
+//============================================================
+
+struct rawinput_mouse_state
+{
+ int raw_x;
+ int raw_y;
+ int raw_z;
+};
+
+class rawinput_mouse_device : public rawinput_device
+{
+private:
+ std::mutex m_device_lock;
+public:
+ //rawinput_mouse_state raw_mouse;
+ mouse_state mouse;
+
+ rawinput_mouse_device(running_machine& machine, const char* name, input_module& module)
+ : rawinput_device(machine, name, DEVICE_CLASS_MOUSE, module),
+ mouse({0})
+ {
+ }
+
+ void poll() override
+ {
+ mouse.lX = 0;
+ mouse.lY = 0;
+ mouse.lZ = 0;
+
+ rawinput_device::poll();
+
+ //std::lock_guard<std::mutex> scope_lock(m_device_lock);
+
+ //// copy the accumulated raw state to the actual state
+ //mouse.lX = raw_mouse.raw_x;
+ //mouse.lY = raw_mouse.raw_y;
+ //mouse.lZ = raw_mouse.raw_z;
+ //raw_mouse.raw_x = 0;
+ //raw_mouse.raw_y = 0;
+ //raw_mouse.raw_z = 0;
+
+ //osd_printf_verbose("At poll: lX=%d, lY=%d, lZ=%d\n", (int)mouse.lX, (int)mouse.lY, (int)mouse.lZ);
+ }
+
+ void reset() override
+ {
+ memset(&mouse, 0, sizeof(mouse));
+ }
+
+ void process_event(RAWINPUT &rawinput) override
+ {
+ // If this data was intended for a rawinput lightgun, ignore it.
+ if (rawinput.data.mouse.usFlags & MOUSE_MOVE_ABSOLUTE)
+ return;
+
+ mouse.lX += rawinput.data.mouse.lLastX * INPUT_RELATIVE_PER_PIXEL;
+ mouse.lY += rawinput.data.mouse.lLastY * INPUT_RELATIVE_PER_PIXEL;
+
+ /*osd_printf_verbose(
+ "Mouse Abs : lastX = %d, lastY = %d, rawx = %d, rawy = %d\n",
+ (int)rawinput.data.mouse.lLastX,
+ (int)rawinput.data.mouse.lLastY,
+ (int)raw_mouse.raw_x,
+ (int)raw_mouse.raw_y);*/
+
+ // update zaxis
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_WHEEL)
+ mouse.lZ += (INT16)rawinput.data.mouse.usButtonData * INPUT_RELATIVE_PER_PIXEL;
+
+ // update the button states; always update the corresponding mouse buttons
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_1_DOWN) mouse.rgbButtons[0] = 0x80;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_1_UP) mouse.rgbButtons[0] = 0x00;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_2_DOWN) mouse.rgbButtons[1] = 0x80;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_2_UP) mouse.rgbButtons[1] = 0x00;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_3_DOWN) mouse.rgbButtons[2] = 0x80;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_3_UP) mouse.rgbButtons[2] = 0x00;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_4_DOWN) mouse.rgbButtons[3] = 0x80;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_4_UP) mouse.rgbButtons[3] = 0x00;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_5_DOWN) mouse.rgbButtons[4] = 0x80;
+ if (rawinput.data.mouse.usButtonFlags & RI_MOUSE_BUTTON_5_UP) mouse.rgbButtons[4] = 0x00;
+ }
+};
+
+//============================================================
+// rawinput_module - base class for rawinput modules
+//============================================================
+
+class rawinput_module : public wininput_module
+{
+private:
+ // RawInput variables
+ get_rawinput_device_list_ptr get_rawinput_device_list;
+ get_rawinput_data_ptr get_rawinput_data;
+ get_rawinput_device_info_ptr get_rawinput_device_info;
+ register_rawinput_devices_ptr register_rawinput_devices;
+ std::mutex m_module_lock;
+
+public:
+ rawinput_module(const char *type, const char* name)
+ : wininput_module(type, name),
+ get_rawinput_device_list(nullptr),
+ get_rawinput_data(nullptr),
+ get_rawinput_device_info(nullptr),
+ register_rawinput_devices(nullptr)
+ {
+ }
+
+ void input_init(running_machine &machine) override
+ {
+ // get the number of devices, allocate a device list, and fetch it
+ int device_count = 0;
+ if ((*get_rawinput_device_list)(NULL, &device_count, sizeof(RAWINPUTDEVICELIST)) != 0)
+ return;
+
+ if (device_count == 0)
+ return;
+
+ auto rawinput_devices = std::make_unique<RAWINPUTDEVICELIST[]>(device_count);
+ if ((*get_rawinput_device_list)(rawinput_devices.get(), &device_count, sizeof(RAWINPUTDEVICELIST)) == -1)
+ return;
+
+ // iterate backwards through devices; new devices are added at the head
+ for (int devnum = device_count - 1; devnum >= 0; devnum--)
+ {
+ RAWINPUTDEVICELIST *device = &rawinput_devices[devnum];
+ add_rawinput_device(machine, device);
+ }
+
+ // don't enable global inputs when debugging
+ if (!machine.options().debug())
+ {
+ m_global_inputs_enabled = downcast<windows_options &>(machine.options()).global_inputs();
+ }
+
+ // If we added no devices, no need to register for notifications
+ if (devicelist()->size() == 0)
+ return;
+
+ // finally, register to receive raw input WM_INPUT messages if we found devices
+ RAWINPUTDEVICE registration;
+ registration.usUsagePage = usagepage();
+ registration.usUsage = usage();
+ registration.dwFlags = m_global_inputs_enabled ? 0x00000100 : 0;
+ registration.hwndTarget = win_window_list->m_hwnd;
+
+ // register the device
+ (*register_rawinput_devices)(&registration, 1, sizeof(registration));
+ }
+
+protected:
+ virtual void add_rawinput_device(running_machine& machine, RAWINPUTDEVICELIST * device) = 0;
+ virtual USHORT usagepage() = 0;
+ virtual USHORT usage() = 0;
+
+ int init_internal() override
+ {
+ HMODULE user32;
+
+ // look in user32 for the raw input APIs
+ user32 = LoadLibrary(TEXT("user32.dll"));
+ if (user32 == NULL)
+ return 1;
+
+ // look up the entry points
+ register_rawinput_devices = (register_rawinput_devices_ptr)GetProcAddress(user32, "RegisterRawInputDevices");
+ get_rawinput_device_list = (get_rawinput_device_list_ptr)GetProcAddress(user32, "GetRawInputDeviceList");
+ get_rawinput_device_info = (get_rawinput_device_info_ptr)GetProcAddress(user32, "GetRawInputDeviceInfo" UNICODE_SUFFIX);
+ get_rawinput_data = (get_rawinput_data_ptr)GetProcAddress(user32, "GetRawInputData");
+ if (register_rawinput_devices == NULL || get_rawinput_device_list == NULL || get_rawinput_device_info == NULL || get_rawinput_data == NULL)
+ return 1;
+
+ osd_printf_verbose("RawInput: APIs detected\n");
+
+ return 0;
+ }
+
+ template<class TDevice>
+ TDevice* create_rawinput_device(running_machine &machine, PRAWINPUTDEVICELIST rawinputdevice)
+ {
+ TDevice* devinfo = nullptr;
+ INT name_length = 0;
+ // determine the length of the device name, allocate it, and fetch it if not nameless
+ if ((*get_rawinput_device_info)(rawinputdevice->hDevice, RIDI_DEVICENAME, NULL, &name_length) != 0)
+ return nullptr;
+
+ std::unique_ptr<TCHAR[]> tname = std::make_unique<TCHAR[]>(name_length + 1);
+ if (name_length > 1 && (*get_rawinput_device_info)(rawinputdevice->hDevice, RIDI_DEVICENAME, tname.get(), &name_length) == -1)
+ return nullptr;
+
+ // if this is an RDP name, skip it
+ if (_tcsstr(tname.get(), TEXT("Root#RDP_")) != NULL)
+ return nullptr;
+
+ // improve the name and then allocate a device
+ tname = std::unique_ptr<TCHAR[]>(rawinput_device_improve_name(tname.release()));
+
+ // convert name to utf8
+ auto osd_deleter = [](void *ptr) { osd_free(ptr); };
+ auto utf8_name = std::unique_ptr<char, decltype(osd_deleter)>(utf8_from_tstring(tname.get()), osd_deleter);
+
+ devinfo = devicelist()->create_device<TDevice>(machine, utf8_name.get(), *this);
+
+ // Add the handle
+ devinfo->set_handle(rawinputdevice->hDevice);
+
+ return devinfo;
+ }
+
+ bool handle_input_event(input_event eventid, void* eventdata) override
+ {
+ // Only handle raw input data
+ if (!input_enabled() || eventid != INPUT_EVENT_RAWINPUT)
+ return FALSE;
+
+ HRAWINPUT rawinputdevice = *(HRAWINPUT*)eventdata;
+
+ BYTE small_buffer[4096];
+ std::unique_ptr<BYTE[]> larger_buffer;
+ LPBYTE data = small_buffer;
+ BOOL result = FALSE;
+ int size;
+
+ // ignore if not enabled
+ if (!input_enabled())
+ return FALSE;
+
+ // determine the size of databuffer we need
+ if ((*get_rawinput_data)(rawinputdevice, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)) != 0)
+ return FALSE;
+
+ // if necessary, allocate a temporary buffer and fetch the data
+ if (size > sizeof(small_buffer))
+ {
+ larger_buffer = std::make_unique<BYTE[]>(size);
+ data = larger_buffer.get();
+ if (data == NULL)
+ return FALSE;
+ }
+
+ // fetch the data and process the appropriate message types
+ result = (*get_rawinput_data)((HRAWINPUT)rawinputdevice, RID_INPUT, data, &size, sizeof(RAWINPUTHEADER));
+ if (result)
+ {
+ std::lock_guard<std::mutex> scope_lock(m_module_lock);
+
+ rawinput_device *devinfo;
+ // find the device in the list and update
+ for (int i = 0; i < devicelist()->size(); i++)
+ {
+ devinfo = dynamic_cast<rawinput_device*>(devicelist()->at(i));
+ RAWINPUT *input = reinterpret_cast<RAWINPUT*>(data);
+ if (input->header.hDevice == devinfo->device_handle())
+ {
+ devinfo->queue_events(input, 1);
+ result = TRUE;
+ }
+ }
+ }
+
+ return result;
+ }
+};
+
+//============================================================
+// keyboard_input_rawinput - rawinput keyboard module
+//============================================================
+
+class keyboard_input_rawinput : public rawinput_module
+{
+public:
+ keyboard_input_rawinput()
+ : rawinput_module(OSD_KEYBOARDINPUT_PROVIDER, "rawinput")
+ {
+ }
+
+protected:
+ USHORT usagepage() { return 1; }
+ USHORT usage() { return 6; }
+ void add_rawinput_device(running_machine& machine, RAWINPUTDEVICELIST * device) override
+ {
+ // make sure this is a keyboard
+ if (device->dwType != RIM_TYPEKEYBOARD)
+ return;
+
+ // allocate and link in a new device
+ rawinput_keyboard_device *devinfo = create_rawinput_device<rawinput_keyboard_device>(machine, device);
+ if (devinfo == NULL)
+ return;
+
+ keyboard_trans_table &table = keyboard_trans_table::instance();
+
+ // populate it
+ for (int keynum = 0; keynum < MAX_KEYS; keynum++)
+ {
+ input_item_id itemid = table.map_di_scancode_to_itemid(keynum);
+ TCHAR keyname[100];
+ char *name;
+
+ // generate the name
+ if (GetKeyNameText(((keynum & 0x7f) << 16) | ((keynum & 0x80) << 17), keyname, ARRAY_LENGTH(keyname)) == 0)
+ _sntprintf(keyname, ARRAY_LENGTH(keyname), TEXT("Scan%03d"), keynum);
+ name = utf8_from_tstring(keyname);
+
+ // add the item to the device
+ devinfo->device()->add_item(name, itemid, generic_button_get_state, &devinfo->keyboard.state[keynum]);
+ osd_free(name);
+ }
+ }
+};
+
+//============================================================
+// mouse_input_rawinput - rawinput mouse module
+//============================================================
+
+class mouse_input_rawinput : public rawinput_module
+{
+public:
+ mouse_input_rawinput()
+ : rawinput_module(OSD_MOUSEINPUT_PROVIDER, "rawinput")
+ {
+ }
+
+protected:
+ USHORT usagepage() { return 1; }
+ USHORT usage() { return 2; }
+ void add_rawinput_device(running_machine& machine, RAWINPUTDEVICELIST * device) override
+ {
+ // make sure this is a mouse
+ if (device->dwType != RIM_TYPEMOUSE)
+ return;
+
+ // allocate and link in a new device
+ rawinput_mouse_device *devinfo = create_rawinput_device<rawinput_mouse_device>(machine, device);
+ if (devinfo == NULL)
+ return;
+
+ // populate the axes
+ for (int axisnum = 0; axisnum < 3; axisnum++)
+ {
+ devinfo->device()->add_item(default_axis_name[axisnum], (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.lX + axisnum);
+ }
+
+ // populate the buttons
+ for (int butnum = 0; butnum < 5; butnum++)
+ {
+ devinfo->device()->add_item(default_button_name(butnum), (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.rgbButtons[butnum]);
+ }
+ }
+};
+
+#else
+MODULE_NOT_SUPPORTED(keyboard_input_rawinput, OSD_KEYBOARDINPUT_PROVIDER, "rawinput")
+MODULE_NOT_SUPPORTED(mouse_input_rawinput, OSD_MOUSEINPUT_PROVIDER, "rawinput")
+//MODULE_NOT_SUPPORTED(lightgun_input_rawinput, OSD_LIGHTGUNINPUT_PROVIDER, "rawinput")
+#endif
+
+MODULE_DEFINITION(KEYBOARDINPUT_RAWINPUT, keyboard_input_rawinput)
+MODULE_DEFINITION(MOUSEINPUT_RAWINPUT, mouse_input_rawinput)
+//MODULE_DEFINITION(LIGHTGUNINPUT_RAWINPUT, lightgun_input_rawinput) \ No newline at end of file
diff --git a/src/osd/modules/input/input_sdl.cpp b/src/osd/modules/input/input_sdl.cpp
new file mode 100644
index 00000000000..3894f25e1b4
--- /dev/null
+++ b/src/osd/modules/input/input_sdl.cpp
@@ -0,0 +1,843 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert, R. Belmont, Brad Hughes
+//============================================================
+//
+// input_sdl.cpp - SDL 2.0 implementation of MAME input routines
+//
+// SDLMAME by Olivier Galibert and R. Belmont
+//
+// SixAxis info: left analog is axes 0 & 1, right analog is axes 2 & 3,
+// analog L2 is axis 12 and analog L3 is axis 13
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+#if defined(SDLMAME_SDL2)
+
+// standard sdl header
+#include "sdlinc.h"
+#include <ctype.h>
+#include <stddef.h>
+#include <mutex>
+#include <memory>
+#include <queue>
+
+// MAME headers
+#include "emu.h"
+#include "osdepend.h"
+#include "ui/ui.h"
+#include "uiinput.h"
+#include "strconv.h"
+
+// MAMEOS headers
+#include "input_common.h"
+#include "../lib/osdobj_common.h"
+#include "input_sdlcommon.h"
+#include "../../sdl/osdsdl.h"
+#include "../../sdl/window.h"
+
+// winnt.h defines this
+#ifdef DELETE
+#undef DELETE
+#endif
+
+
+// FIXME: sdl does not properly report the window for certain OS.
+#define GET_FOCUS_WINDOW(ev) focus_window()
+//#define GET_FOCUS_WINDOW(ev) window_from_id((ev)->windowID)
+
+struct key_lookup_table
+{
+ int code;
+ const char *name;
+};
+
+#define KE(x) { SDL_SCANCODE_ ## x, "SDL_SCANCODE_" #x },
+#define KE8(A, B, C, D, E, F, G, H) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G) KE(H)
+#define KE7(A, B, C, D, E, F, G) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G)
+#define KE5(A, B, C, D, E) KE(A) KE(B) KE(C) KE(D) KE(E)
+#define KE3(A, B, C) KE(A) KE(B) KE(C)
+
+static key_lookup_table sdl_lookup_table[] =
+{
+ KE7(UNKNOWN, BACKSPACE, TAB, CLEAR, RETURN, PAUSE, ESCAPE)
+ KE(SPACE)
+ KE5(COMMA, MINUS, PERIOD, SLASH, 0)
+ KE8(1, 2, 3, 4, 5, 6, 7, 8)
+ KE3(9, SEMICOLON, EQUALS)
+ KE5(LEFTBRACKET,BACKSLASH, RIGHTBRACKET, A, B)
+ KE8(C, D, E, F, G, H, I, J)
+ KE8(K, L, M, N, O, P, Q, R)
+ KE8(S, T, U, V, W, X, Y, Z)
+ KE8(DELETE, KP_0, KP_1, KP_2, KP_3, KP_4, KP_5, KP_6)
+ KE8(KP_7, KP_8, KP_9, KP_PERIOD, KP_DIVIDE, KP_MULTIPLY,KP_MINUS, KP_PLUS)
+ KE8(KP_ENTER, KP_EQUALS, UP, DOWN, RIGHT, LEFT, INSERT, HOME)
+ KE8(END, PAGEUP, PAGEDOWN, F1, F2, F3, F4, F5)
+ KE8(F6, F7, F8, F9, F10, F11, F12, F13)
+ KE8(F14, F15, NUMLOCKCLEAR, CAPSLOCK, SCROLLLOCK, RSHIFT, LSHIFT, RCTRL)
+ KE5(LCTRL, RALT, LALT, LGUI, RGUI)
+ KE8(GRAVE, LEFTBRACKET,RIGHTBRACKET, SEMICOLON, APOSTROPHE, BACKSLASH, PRINTSCREEN,MENU)
+ KE(UNDO)
+{
+ -1, ""
+}
+};
+
+//============================================================
+// lookup_sdl_code
+//============================================================
+
+static int lookup_sdl_code(const char *scode)
+{
+ int i = 0;
+
+ while (sdl_lookup_table[i].code >= 0)
+ {
+ if (!strcmp(scode, sdl_lookup_table[i].name))
+ return sdl_lookup_table[i].code;
+ i++;
+ }
+ return -1;
+}
+
+//============================================================
+// sdl_device
+//============================================================
+
+class sdl_device : public event_based_device<SDL_Event>
+{
+public:
+ sdl_device(running_machine &machine, const char* name, input_device_class devclass, input_module &module)
+ : event_based_device(machine, name, devclass, module)
+ {
+ }
+
+protected:
+ sdl_window_info * focus_window()
+ {
+ return sdl_event_manager::instance().focus_window();
+ }
+};
+
+//============================================================
+// sdl_keyboard_device
+//============================================================
+
+#define OSD_SDL_INDEX_KEYSYM(keysym) ((keysym)->scancode)
+class sdl_keyboard_device : public sdl_device
+{
+public:
+ keyboard_state keyboard;
+
+ sdl_keyboard_device(running_machine &machine, const char* name, input_module &module)
+ : sdl_device(machine, name, DEVICE_CLASS_KEYBOARD, module),
+ keyboard({{0}})
+ {
+ }
+
+ void process_event(SDL_Event &sdlevent) override
+ {
+ switch (sdlevent.type)
+ {
+ case SDL_KEYDOWN:
+ keyboard.state[OSD_SDL_INDEX_KEYSYM(&sdlevent.key.keysym)] = 0x80;
+ if (sdlevent.key.keysym.sym < 0x20)
+ machine().ui_input().push_char_event(sdl_window_list->target(), sdlevent.key.keysym.sym);
+ break;
+
+ case SDL_KEYUP:
+ keyboard.state[OSD_SDL_INDEX_KEYSYM(&sdlevent.key.keysym)] = 0x00;
+ break;
+
+ case SDL_TEXTINPUT:
+ if (*sdlevent.text.text)
+ {
+ sdl_window_info *window = GET_FOCUS_WINDOW(&event.text);
+ //printf("Focus window is %p - wl %p\n", window, sdl_window_list);
+ unicode_char result;
+ if (window != NULL)
+ {
+ osd_uchar_from_osdchar(&result, sdlevent.text.text, 1);
+ machine().ui_input().push_char_event(window->target(), result);
+ }
+ }
+ break;
+ }
+ }
+
+ void reset() override
+ {
+ memset(&keyboard.state, 0, sizeof(keyboard.state));
+ }
+};
+
+//============================================================
+// sdl_mouse_device
+//============================================================
+
+class sdl_mouse_device : public sdl_device
+{
+public:
+ mouse_state mouse;
+
+ sdl_mouse_device(running_machine &machine, const char* name, input_module &module)
+ : sdl_device(machine, name, DEVICE_CLASS_MOUSE, module),
+ mouse({0})
+ {
+ }
+
+ void reset() override
+ {
+ memset(&mouse, 0, sizeof(mouse));
+ }
+
+ void poll() override
+ {
+ mouse.lX = 0;
+ mouse.lY = 0;
+ sdl_device::poll();
+ }
+
+ virtual void process_event(SDL_Event &sdlevent) override
+ {
+ switch (sdlevent.type)
+ {
+ case SDL_MOUSEMOTION:
+ mouse.lX += sdlevent.motion.xrel * INPUT_RELATIVE_PER_PIXEL;
+ mouse.lY += sdlevent.motion.yrel * INPUT_RELATIVE_PER_PIXEL;
+
+ {
+ int cx = -1, cy = -1;
+ sdl_window_info *window = GET_FOCUS_WINDOW(&sdlevent.motion);
+
+ if (window != NULL && window->xy_to_render_target(sdlevent.motion.x, sdlevent.motion.y, &cx, &cy))
+ machine().ui_input().push_mouse_move_event(window->target(), cx, cy);
+ }
+ break;
+
+ case SDL_MOUSEBUTTONDOWN:
+ mouse.buttons[sdlevent.button.button - 1] = 0x80;
+ //printf("But down %d %d %d %d %s\n", event.button.which, event.button.button, event.button.x, event.button.y, devinfo->name.c_str());
+ if (sdlevent.button.button == 1)
+ {
+ // FIXME Move static declaration
+ static osd_ticks_t last_click = 0;
+ static int last_x = 0;
+ static int last_y = 0;
+ int cx, cy;
+ osd_ticks_t click = osd_ticks() * 1000 / osd_ticks_per_second();
+ sdl_window_info *window = GET_FOCUS_WINDOW(&sdlevent.button);
+ if (window != NULL && window->xy_to_render_target(sdlevent.button.x, sdlevent.button.y, &cx, &cy))
+ {
+ machine().ui_input().push_mouse_down_event(window->target(), cx, cy);
+ // FIXME Parameter ?
+ if ((click - last_click < 250)
+ && (cx >= last_x - 4 && cx <= last_x + 4)
+ && (cy >= last_y - 4 && cy <= last_y + 4))
+ {
+ last_click = 0;
+ machine().ui_input().push_mouse_double_click_event(window->target(), cx, cy);
+ }
+ else
+ {
+ last_click = click;
+ last_x = cx;
+ last_y = cy;
+ }
+ }
+ }
+ break;
+
+ case SDL_MOUSEBUTTONUP:
+ mouse.buttons[sdlevent.button.button - 1] = 0;
+ //printf("But up %d %d %d %d\n", event.button.which, event.button.button, event.button.x, event.button.y);
+
+ if (sdlevent.button.button == 1)
+ {
+ int cx, cy;
+ sdl_window_info *window = GET_FOCUS_WINDOW(&sdlevent.button);
+
+ if (window != NULL && window->xy_to_render_target(sdlevent.button.x, sdlevent.button.y, &cx, &cy))
+ {
+ machine().ui_input().push_mouse_up_event(window->target(), cx, cy);
+ }
+ }
+ break;
+
+ case SDL_MOUSEWHEEL:
+ sdl_window_info *window = GET_FOCUS_WINDOW(&sdlevent.wheel);
+ if (window != NULL)
+ machine().ui_input().push_mouse_wheel_event(window->target(), 0, 0, sdlevent.wheel.y, 3);
+ break;
+ }
+ }
+};
+
+//============================================================
+// sdl_joystick_device
+//============================================================
+
+// state information for a joystick
+struct sdl_joystick_state
+{
+ INT32 axes[MAX_AXES];
+ INT32 buttons[MAX_BUTTONS];
+ INT32 hatsU[MAX_HATS], hatsD[MAX_HATS], hatsL[MAX_HATS], hatsR[MAX_HATS];
+ INT32 balls[MAX_AXES];
+};
+
+struct sdl_api_state
+{
+ SDL_Joystick *device;
+ SDL_JoystickID joystick_id;
+};
+
+class sdl_joystick_device : public sdl_device
+{
+public:
+ sdl_joystick_state joystick;
+ sdl_api_state sdl_state;
+
+ sdl_joystick_device(running_machine &machine, const char *name, input_module &module)
+ : sdl_device(machine, name, DEVICE_CLASS_JOYSTICK, module),
+ joystick({{0}}),
+ sdl_state({0})
+ {
+ }
+
+ ~sdl_joystick_device()
+ {
+ if (sdl_state.device != nullptr)
+ {
+ SDL_JoystickClose(sdl_state.device);
+ sdl_state.device = nullptr;
+ }
+ }
+
+ void reset() override
+ {
+ memset(&joystick, 0, sizeof(joystick));
+ }
+
+ void process_event(SDL_Event &sdlevent) override
+ {
+ switch (sdlevent.type)
+ {
+ case SDL_JOYAXISMOTION:
+ joystick.axes[sdlevent.jaxis.axis] = (sdlevent.jaxis.value * 2);
+ break;
+
+ case SDL_JOYBALLMOTION:
+ //printf("Ball %d %d\n", sdlevent.jball.xrel, sdlevent.jball.yrel);
+ joystick.balls[sdlevent.jball.ball * 2] = sdlevent.jball.xrel * INPUT_RELATIVE_PER_PIXEL;
+ joystick.balls[sdlevent.jball.ball * 2 + 1] = sdlevent.jball.yrel * INPUT_RELATIVE_PER_PIXEL;
+ break;
+
+ case SDL_JOYHATMOTION:
+ if (sdlevent.jhat.value & SDL_HAT_UP)
+ {
+ joystick.hatsU[sdlevent.jhat.hat] = 0x80;
+ }
+ else
+ {
+ joystick.hatsU[sdlevent.jhat.hat] = 0;
+ }
+ if (sdlevent.jhat.value & SDL_HAT_DOWN)
+ {
+ joystick.hatsD[sdlevent.jhat.hat] = 0x80;
+ }
+ else
+ {
+ joystick.hatsD[sdlevent.jhat.hat] = 0;
+ }
+ if (sdlevent.jhat.value & SDL_HAT_LEFT)
+ {
+ joystick.hatsL[sdlevent.jhat.hat] = 0x80;
+ }
+ else
+ {
+ joystick.hatsL[sdlevent.jhat.hat] = 0;
+ }
+ if (sdlevent.jhat.value & SDL_HAT_RIGHT)
+ {
+ joystick.hatsR[sdlevent.jhat.hat] = 0x80;
+ }
+ else
+ {
+ joystick.hatsR[sdlevent.jhat.hat] = 0;
+ }
+ break;
+
+ case SDL_JOYBUTTONDOWN:
+ case SDL_JOYBUTTONUP:
+ joystick.buttons[sdlevent.jbutton.button] = (sdlevent.jbutton.state == SDL_PRESSED) ? 0x80 : 0;
+ break;
+ }
+ }
+};
+
+class sdl_sixaxis_joystick_device : public sdl_joystick_device
+{
+public:
+ sdl_sixaxis_joystick_device(running_machine &machine, const char *name, input_module &module)
+ : sdl_joystick_device(machine, name, module)
+ {
+ }
+
+ void process_event(SDL_Event &sdlevent) override
+ {
+ switch (sdlevent.type)
+ {
+ case SDL_JOYAXISMOTION:
+ {
+ int axis = sdlevent.jaxis.axis;
+
+ if (axis <= 3)
+ {
+ joystick.axes[sdlevent.jaxis.axis] = (sdlevent.jaxis.value * 2);
+ }
+ else
+ {
+ int magic = (sdlevent.jaxis.value / 2) + 16384;
+ joystick.axes[sdlevent.jaxis.axis] = magic;
+ }
+ }
+ break;
+
+ default:
+ // Call the base for other events
+ sdl_joystick_device::process_event(sdlevent);
+ break;
+ }
+ }
+};
+
+//============================================================
+// sdl_input_module
+//============================================================
+
+class sdl_input_module : public input_module_base, public sdl_event_subscriber
+{
+public:
+ sdl_input_module(const char *type)
+ : input_module_base(type, "sdl")
+ {
+ }
+
+ void input_init(running_machine &machine) override
+ {
+ if (machine.debug_flags & DEBUG_FLAG_OSD_ENABLED)
+ {
+ osd_printf_warning("Debug Build: Disabling input grab for -debug\n");
+ set_mouse_enabled(false);
+ }
+ }
+
+ void before_poll(running_machine& machine) override
+ {
+ // Tell the event manager to process events and push them to the devices
+ sdl_event_manager::instance().process_events(machine);
+ }
+
+ bool should_poll_devices(running_machine& machine) override
+ {
+ return sdl_event_manager::instance().app_has_mouse_focus() && input_enabled();
+ }
+
+ virtual void handle_event(SDL_Event &sdlevent) override
+ {
+ // By default dispatch event to every device
+ for (int i = 0; i < devicelist()->size(); i++)
+ downcast<sdl_device*>(devicelist()->at(i))->queue_events(&sdlevent, 1);
+ }
+};
+
+//============================================================
+// sdl_keyboard_module
+//============================================================
+
+class sdl_keyboard_module : public sdl_input_module
+{
+ keyboard_trans_table * m_key_trans_table;
+public:
+ sdl_keyboard_module()
+ : sdl_input_module(OSD_KEYBOARDINPUT_PROVIDER)
+ {
+ }
+
+ void input_init(running_machine &machine) override
+ {
+ sdl_input_module::input_init(machine);
+
+ SDL_EventType event_types[] = { SDL_KEYDOWN, SDL_KEYUP, SDL_TEXTINPUT };
+ sdl_event_manager::instance().subscribe(reinterpret_cast<int*>(event_types), ARRAY_LENGTH(event_types), this);
+
+ sdl_keyboard_device *devinfo;
+
+ // Read our keymap and store a pointer to our table
+ m_key_trans_table = sdlinput_read_keymap(machine);
+
+ keyboard_trans_table& local_table = *m_key_trans_table;
+
+ osd_printf_verbose("Keyboard: Start initialization\n");
+
+ // SDL only has 1 keyboard add it now
+ devinfo = devicelist()->create_device<sdl_keyboard_device>(machine, "System keyboard", *this);
+
+ // populate it
+ for (int keynum = 0; local_table[keynum].mame_key != ITEM_ID_INVALID; keynum++)
+ {
+ input_item_id itemid = local_table[keynum].mame_key;
+
+ // generate the default / modified name
+ char defname[20];
+ snprintf(defname, sizeof(defname) - 1, "%s", local_table[keynum].ui_name);
+
+ devinfo->device()->add_item(defname, itemid, generic_button_get_state, &devinfo->keyboard.state[local_table[keynum].sdl_scancode]);
+ }
+
+ osd_printf_verbose("Keyboard: Registered %s\n", devinfo->name());
+ osd_printf_verbose("Keyboard: End initialization\n");
+ }
+
+private:
+ static keyboard_trans_table* sdlinput_read_keymap(running_machine &machine)
+ {
+ char *keymap_filename;
+ FILE *keymap_file;
+ int line = 1;
+ int index, i, sk, vk, ak;
+ char buf[256];
+ char mks[41];
+ char sks[41];
+ char kns[41];
+ int sdl2section = 0;
+
+ keyboard_trans_table &default_table = keyboard_trans_table::instance();
+
+ if (!machine.options().bool_value(SDLOPTION_KEYMAP))
+ return &default_table;
+
+ keymap_filename = (char *)downcast<sdl_options &>(machine.options()).keymap_file();
+ osd_printf_verbose("Keymap: Start reading keymap_file %s\n", keymap_filename);
+
+ keymap_file = fopen(keymap_filename, "r");
+ if (keymap_file == NULL)
+ {
+ osd_printf_warning("Keymap: Unable to open keymap %s, using default\n", keymap_filename);
+ return &default_table;
+ }
+
+ // Allocate a block of translation entries big enough to hold what's in the default table
+ auto key_trans_entries = std::make_unique<key_trans_entry[]>(default_table.size());
+
+ // copy the elements from the default table
+ for (int i = 0; i < default_table.size(); i++)
+ key_trans_entries[i] = default_table[i];
+
+ // Allocate the trans table to be associated with the machine so we don't have to free it
+ keyboard_trans_table *custom_table = auto_alloc(machine, keyboard_trans_table(std::move(key_trans_entries), default_table.size()));
+
+ while (!feof(keymap_file))
+ {
+ char *ret = fgets(buf, 255, keymap_file);
+ if (ret && buf[0] != '\n' && buf[0] != '#')
+ {
+ buf[255] = 0;
+ i = strlen(buf);
+ if (i && buf[i - 1] == '\n')
+ buf[i - 1] = 0;
+ if (strncmp(buf, "[SDL2]", 6) == 0)
+ {
+ sdl2section = 1;
+ }
+ else if (((SDLMAME_SDL2) ^ sdl2section) == 0)
+ {
+ mks[0] = 0;
+ sks[0] = 0;
+ memset(kns, 0, ARRAY_LENGTH(kns));
+ sscanf(buf, "%40s %40s %x %x %40c\n",
+ mks, sks, &vk, &ak, kns);
+
+ index = default_table.lookup_mame_index(mks);
+ sk = lookup_sdl_code(sks);
+
+ if (sk >= 0 && index >= 0)
+ {
+ key_trans_entry &entry = (*custom_table)[index];
+ entry.sdl_key = sk;
+ // vk and ak are not really needed
+ //key_trans_table[index][VIRTUAL_KEY] = vk;
+ //key_trans_table[index][ASCII_KEY] = ak;
+ entry.ui_name = auto_alloc_array(machine, char, strlen(kns) + 1);
+ strcpy(entry.ui_name, kns);
+ osd_printf_verbose("Keymap: Mapped <%s> to <%s> with ui-text <%s>\n", sks, mks, kns);
+ }
+ else
+ osd_printf_warning("Keymap: Error on line %d - %s key not found: %s\n", line, (sk<0) ? "sdl" : "mame", buf);
+ }
+ }
+ line++;
+ }
+ fclose(keymap_file);
+ osd_printf_verbose("Keymap: Processed %d lines\n", line);
+
+ return custom_table;
+ }
+};
+
+//============================================================
+// sdl_mouse_module
+//============================================================
+
+class sdl_mouse_module : public sdl_input_module
+{
+public:
+ sdl_mouse_module()
+ : sdl_input_module(OSD_MOUSEINPUT_PROVIDER)
+ {
+ }
+
+ virtual void input_init(running_machine &machine) override
+ {
+ sdl_input_module::input_init(machine);
+
+ SDL_EventType event_types[] = { SDL_MOUSEMOTION, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_MOUSEWHEEL };
+ sdl_event_manager::instance().subscribe(reinterpret_cast<int*>(event_types), ARRAY_LENGTH(event_types), this);
+
+ sdl_mouse_device *devinfo;
+ char defname[20];
+ int button;
+
+ osd_printf_verbose("Mouse: Start initialization\n");
+
+ // SDL currently only supports one mouse
+ devinfo = devicelist()->create_device<sdl_mouse_device>(machine, "System mouse", *this);
+
+ // add the axes
+ devinfo->device()->add_item("X", ITEM_ID_XAXIS, generic_axis_get_state, &devinfo->mouse.lX);
+ devinfo->device()->add_item("Y", ITEM_ID_YAXIS, generic_axis_get_state, &devinfo->mouse.lY);
+
+ for (button = 0; button < 4; button++)
+ {
+ input_item_id itemid = (input_item_id)(ITEM_ID_BUTTON1 + button);
+ snprintf(defname, sizeof(defname), "B%d", button + 1);
+
+ devinfo->device()->add_item(defname, itemid, generic_button_get_state, &devinfo->mouse.buttons[button]);
+ }
+
+ osd_printf_verbose("Mouse: Registered %s\n", devinfo->name());
+ osd_printf_verbose("Mouse: End initialization\n");
+ }
+};
+
+
+static void devmap_register(device_map_t *devmap, int physical_idx, const std::string &name)
+{
+ int found = 0;
+ int stick, i;
+
+ for (i = 0; i < MAX_DEVMAP_ENTRIES; i++)
+ {
+ if (strcmp(name.c_str(), devmap->map[i].name.c_str()) == 0 && devmap->map[i].physical < 0)
+ {
+ devmap->map[i].physical = physical_idx;
+ found = 1;
+ devmap->logical[physical_idx] = i;
+ }
+ }
+
+ if (found == 0)
+ {
+ stick = devmap_leastfree(devmap);
+ devmap->map[stick].physical = physical_idx;
+ devmap->map[stick].name = name;
+ devmap->logical[physical_idx] = stick;
+ }
+
+}
+
+//============================================================
+// sdl_joystick_module
+//============================================================
+
+class sdl_joystick_module : public sdl_input_module
+{
+private:
+ device_map_t m_joy_map;
+ bool m_sixaxis_mode;
+public:
+ sdl_joystick_module()
+ : sdl_input_module(OSD_JOYSTICKINPUT_PROVIDER)
+ {
+ }
+
+ virtual void input_init(running_machine &machine) override
+ {
+ sdl_input_module::input_init(machine);
+
+ char tempname[512];
+
+ m_sixaxis_mode = downcast<const sdl_options*>(options())->sixaxis();
+
+ devmap_init(machine, &m_joy_map, SDLOPTION_JOYINDEX, 8, "Joystick mapping");
+
+ osd_printf_verbose("Joystick: Start initialization\n");
+ int physical_stick;
+ for (physical_stick = 0; physical_stick < SDL_NumJoysticks(); physical_stick++)
+ {
+ SDL_Joystick *joy = SDL_JoystickOpen(physical_stick);
+ std::string joy_name = remove_spaces(SDL_JoystickName(joy));
+ SDL_JoystickClose(joy);
+
+ devmap_register(&m_joy_map, physical_stick, joy_name.c_str());
+ }
+
+ for (int stick = 0; stick < MAX_DEVMAP_ENTRIES; stick++)
+ {
+ sdl_joystick_device *devinfo = create_joystick_device(machine, &m_joy_map, stick, DEVICE_CLASS_JOYSTICK);
+
+ if (devinfo == NULL)
+ continue;
+
+ physical_stick = m_joy_map.map[stick].physical;
+
+ SDL_Joystick *joy = SDL_JoystickOpen(physical_stick);
+
+ devinfo->sdl_state.device = joy;
+ devinfo->sdl_state.joystick_id = SDL_JoystickInstanceID(joy);
+
+ osd_printf_verbose("Joystick: %s\n", devinfo->name());
+ osd_printf_verbose("Joystick: ... %d axes, %d buttons %d hats %d balls\n", SDL_JoystickNumAxes(joy), SDL_JoystickNumButtons(joy), SDL_JoystickNumHats(joy), SDL_JoystickNumBalls(joy));
+ osd_printf_verbose("Joystick: ... Physical id %d mapped to logical id %d\n", physical_stick, stick + 1);
+
+ // loop over all axes
+ for (int axis = 0; axis < SDL_JoystickNumAxes(joy); axis++)
+ {
+ input_item_id itemid;
+
+ if (axis < INPUT_MAX_AXIS)
+ itemid = (input_item_id)(ITEM_ID_XAXIS + axis);
+ else if (axis < INPUT_MAX_AXIS + INPUT_MAX_ADD_ABSOLUTE)
+ itemid = (input_item_id)(ITEM_ID_ADD_ABSOLUTE1 - INPUT_MAX_AXIS + axis);
+ else
+ itemid = ITEM_ID_OTHER_AXIS_ABSOLUTE;
+
+ snprintf(tempname, sizeof(tempname), "A%d %s", axis, devinfo->name());
+ devinfo->device()->add_item(tempname, itemid, generic_axis_get_state, &devinfo->joystick.axes[axis]);
+ }
+
+ // loop over all buttons
+ for (int button = 0; button < SDL_JoystickNumButtons(joy); button++)
+ {
+ input_item_id itemid;
+
+ devinfo->joystick.buttons[button] = 0;
+
+ if (button < INPUT_MAX_BUTTONS)
+ itemid = (input_item_id)(ITEM_ID_BUTTON1 + button);
+ else if (button < INPUT_MAX_BUTTONS + INPUT_MAX_ADD_SWITCH)
+ itemid = (input_item_id)(ITEM_ID_ADD_SWITCH1 - INPUT_MAX_BUTTONS + button);
+ else
+ itemid = ITEM_ID_OTHER_SWITCH;
+
+ snprintf(tempname, sizeof(tempname), "button %d", button);
+ devinfo->device()->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.buttons[button]);
+ }
+
+ // loop over all hats
+ for (int hat = 0; hat < SDL_JoystickNumHats(joy); hat++)
+ {
+ input_item_id itemid;
+
+ snprintf(tempname, sizeof(tempname), "hat %d Up", hat);
+ itemid = (input_item_id)((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1UP + 4 * hat : ITEM_ID_OTHER_SWITCH);
+ devinfo->device()->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsU[hat]);
+ snprintf(tempname, sizeof(tempname), "hat %d Down", hat);
+ itemid = (input_item_id)((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1DOWN + 4 * hat : ITEM_ID_OTHER_SWITCH);
+ devinfo->device()->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsD[hat]);
+ snprintf(tempname, sizeof(tempname), "hat %d Left", hat);
+ itemid = (input_item_id)((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1LEFT + 4 * hat : ITEM_ID_OTHER_SWITCH);
+ devinfo->device()->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsL[hat]);
+ snprintf(tempname, sizeof(tempname), "hat %d Right", hat);
+ itemid = (input_item_id)((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1RIGHT + 4 * hat : ITEM_ID_OTHER_SWITCH);
+ devinfo->device()->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsR[hat]);
+ }
+
+ // loop over all (track)balls
+ for (int ball = 0; ball < SDL_JoystickNumBalls(joy); ball++)
+ {
+ int itemid;
+
+ if (ball * 2 < INPUT_MAX_ADD_RELATIVE)
+ itemid = ITEM_ID_ADD_RELATIVE1 + ball * 2;
+ else
+ itemid = ITEM_ID_OTHER_AXIS_RELATIVE;
+
+ snprintf(tempname, sizeof(tempname), "R%d %s", ball * 2, devinfo->name());
+ devinfo->device()->add_item(tempname, (input_item_id)itemid, generic_axis_get_state, &devinfo->joystick.balls[ball * 2]);
+ snprintf(tempname, sizeof(tempname), "R%d %s", ball * 2 + 1, devinfo->name());
+ devinfo->device()->add_item(tempname, (input_item_id)(itemid + 1), generic_axis_get_state, &devinfo->joystick.balls[ball * 2 + 1]);
+ }
+ }
+
+ SDL_EventType event_types[] = { SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYHATMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP };
+ sdl_event_manager::instance().subscribe(reinterpret_cast<int*>(event_types), ARRAY_LENGTH(event_types), this);
+
+ osd_printf_verbose("Joystick: End initialization\n");
+ }
+
+ virtual void handle_event(SDL_Event &sdlevent) override
+ {
+ // Figure out which joystick this event id destined for
+ for (int i = 0; i < devicelist()->size(); i++)
+ {
+ auto joy = downcast<sdl_joystick_device*>(devicelist()->at(i));
+
+ // If we find a matching joystick, dispatch the event to the joystick
+ if (joy->sdl_state.joystick_id == sdlevent.jdevice.which)
+ joy->queue_events(&sdlevent, 1);
+ }
+ }
+
+private:
+ sdl_joystick_device* create_joystick_device(running_machine &machine, device_map_t *devmap, int index, input_device_class devclass)
+ {
+ sdl_joystick_device *devinfo = NULL;
+ char tempname[20];
+
+ if (devmap->map[index].name.length() == 0)
+ {
+ /* only map place holders if there were mappings specified is enabled */
+ if (devmap->initialized)
+ {
+ snprintf(tempname, ARRAY_LENGTH(tempname), "NC%d", index);
+ devinfo = m_sixaxis_mode
+ ? devicelist()->create_device<sdl_sixaxis_joystick_device>(machine, tempname, *this)
+ : devicelist()->create_device<sdl_joystick_device>(machine, tempname, *this);
+ }
+
+ return NULL;
+ }
+ else
+ {
+ devinfo = m_sixaxis_mode
+ ? devicelist()->create_device<sdl_sixaxis_joystick_device>(machine, devmap->map[index].name.c_str(), *this)
+ : devicelist()->create_device<sdl_joystick_device>(machine, devmap->map[index].name.c_str(), *this);
+ }
+
+ return devinfo;
+ }
+};
+
+#else
+MODULE_NOT_SUPPORTED(sdl_keyboard_module, OSD_KEYBOARDINPUT_PROVIDER, "sdl")
+MODULE_NOT_SUPPORTED(sdl_mouse_module, OSD_MOUSEINPUT_PROVIDER, "sdl")
+MODULE_NOT_SUPPORTED(sdl_joystick_module, OSD_JOYSTICKINPUT_PROVIDER, "sdl")
+#endif
+
+MODULE_DEFINITION(KEYBOARDINPUT_SDL, sdl_keyboard_module)
+MODULE_DEFINITION(MOUSEINPUT_SDL, sdl_mouse_module)
+MODULE_DEFINITION(JOYSTICKINPUT_SDL, sdl_joystick_module) \ No newline at end of file
diff --git a/src/osd/modules/input/input_sdlcommon.cpp b/src/osd/modules/input/input_sdlcommon.cpp
new file mode 100644
index 00000000000..e22606f9fb3
--- /dev/null
+++ b/src/osd/modules/input/input_sdlcommon.cpp
@@ -0,0 +1,283 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert, R. Belmont, Brad Hughes
+//============================================================
+//
+// input_sdlcommon.cpp - SDL Common code shared by SDL modules
+//
+// Note: this code is also used by the X11 input modules
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+#if defined(OSD_SDL)
+
+// standard sdl header
+#include "sdlinc.h"
+#include <ctype.h>
+#include <stddef.h>
+#include <mutex>
+#include <memory>
+
+// MAME headers
+#include "emu.h"
+#include "osdepend.h"
+#include "ui/ui.h"
+#include "uiinput.h"
+#include "window.h"
+#include "strconv.h"
+
+#include "../../sdl/osdsdl.h"
+#include "input_common.h"
+#include "input_sdlcommon.h"
+
+#define GET_WINDOW(ev) window_from_id((ev)->windowID)
+//#define GET_WINDOW(ev) ((ev)->windowID)
+
+static inline sdl_window_info * window_from_id(Uint32 windowID)
+{
+ sdl_window_info *w;
+ SDL_Window *window = SDL_GetWindowFromID(windowID);
+
+ for (w = sdl_window_list; w != NULL; w = w->m_next)
+ {
+ //printf("w->window_id: %d\n", w->window_id);
+ if (w->sdl_window() == window)
+ {
+ return w;
+ }
+ }
+ return NULL;
+}
+
+void sdl_event_manager::process_events(running_machine &machine)
+{
+ std::lock_guard<std::mutex> scope_lock(m_lock);
+ SDL_Event sdlevent;
+ while (SDL_PollEvent(&sdlevent))
+ {
+ // process window events if they come in
+ if (sdlevent.type == SDL_WINDOWEVENT)
+ process_window_event(machine, sdlevent);
+
+ // Find all subscribers for the event type
+ auto subscribers = m_subscription_index.equal_range(sdlevent.type);
+
+ // Dispatch the events
+ for (auto iter = subscribers.first; iter != subscribers.second; iter++)
+ iter->second->handle_event(sdlevent);
+ }
+}
+
+void sdl_event_manager::process_window_event(running_machine &machine, SDL_Event &sdlevent)
+{
+ sdl_window_info *window = GET_WINDOW(&sdlevent.window);
+
+ if (window == NULL)
+ return;
+
+ switch (sdlevent.window.event)
+ {
+ case SDL_WINDOWEVENT_CLOSE:
+ machine.schedule_exit();
+ break;
+
+ case SDL_WINDOWEVENT_LEAVE:
+ machine.ui_input().push_mouse_leave_event(window->target());
+ m_app_has_mouse_focus = 0;
+ break;
+
+ case SDL_WINDOWEVENT_MOVED:
+ window->notify_changed();
+ m_focus_window = window;
+ break;
+
+ case SDL_WINDOWEVENT_RESIZED:
+#ifndef SDLMAME_WIN32
+ /* FIXME: SDL2 sends some spurious resize events on Ubuntu
+ * while in fullscreen mode. Ignore them for now.
+ */
+ if (!window->fullscreen())
+#endif
+ {
+ //printf("event data1,data2 %d x %d %ld\n", event.window.data1, event.window.data2, sizeof(SDL_Event));
+ window->resize(sdlevent.window.data1, sdlevent.window.data2);
+ }
+ m_focus_window = window;
+ break;
+
+ case SDL_WINDOWEVENT_ENTER:
+ m_app_has_mouse_focus = 1;
+ /* fall through */
+ case SDL_WINDOWEVENT_FOCUS_GAINED:
+ case SDL_WINDOWEVENT_EXPOSED:
+ case SDL_WINDOWEVENT_MAXIMIZED:
+ case SDL_WINDOWEVENT_RESTORED:
+ m_focus_window = window;
+ break;
+ }
+}
+
+//============================================================
+// customize_input_type_list
+//============================================================
+
+void sdl_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist)
+{
+ input_item_id mameid_code;
+ input_code ui_code;
+ input_type_entry *entry;
+ const char* uimode;
+ char fullmode[64];
+
+ // loop over the defaults
+ for (entry = typelist.first(); entry != NULL; entry = entry->next())
+ {
+ switch (entry->type())
+ {
+ // configurable UI mode switch
+ case IPT_UI_TOGGLE_UI:
+ uimode = options().ui_mode_key();
+ if (!strcmp(uimode, "auto"))
+ {
+#if defined(__APPLE__) && defined(__MACH__)
+ mameid_code = keyboard_trans_table::instance().lookup_mame_code("ITEM_ID_INSERT");
+#else
+ mameid_code = keyboard_trans_table::instance().lookup_mame_code("ITEM_ID_SCRLOCK");
+#endif
+ }
+ else
+ {
+ snprintf(fullmode, 63, "ITEM_ID_%s", uimode);
+ mameid_code = keyboard_trans_table::instance().lookup_mame_code(fullmode);
+ }
+ ui_code = input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, input_item_id(mameid_code));
+ entry->defseq(SEQ_TYPE_STANDARD).set(ui_code);
+ break;
+ // alt-enter for fullscreen
+ case IPT_OSD_1:
+ entry->configure_osd("TOGGLE_FULLSCREEN", "Toggle Fullscreen");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_ENTER, KEYCODE_LALT);
+ break;
+
+ // disable UI_SELECT when LALT is down, this stops selecting
+ // things in the menu when toggling fullscreen with LALT+ENTER
+ /* case IPT_UI_SELECT:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_ENTER, input_seq::not_code, KEYCODE_LALT);
+ break;*/
+
+ // page down for fastforward (must be OSD_3 as per src/emu/ui.c)
+ case IPT_UI_FAST_FORWARD:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_PGDN);
+ break;
+
+ // OSD hotkeys use LCTRL and start at F3, they start at
+ // F3 because F1-F2 are hardcoded into many drivers to
+ // various dipswitches, and pressing them together with
+ // LCTRL will still press/toggle these dipswitches.
+
+ // LCTRL-F3 to toggle fullstretch
+ case IPT_OSD_2:
+ entry->configure_osd("TOGGLE_FULLSTRETCH", "Toggle Uneven stretch");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F3, KEYCODE_LCONTROL);
+ break;
+ // add a Not lcrtl condition to the reset key
+ case IPT_UI_SOFT_RESET:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F3, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LSHIFT);
+ break;
+
+ // LCTRL-F4 to toggle keep aspect
+ case IPT_OSD_4:
+ entry->configure_osd("TOGGLE_KEEP_ASPECT", "Toggle Keepaspect");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F4, KEYCODE_LCONTROL);
+ break;
+ // add a Not lcrtl condition to the show gfx key
+ case IPT_UI_SHOW_GFX:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F4, input_seq::not_code, KEYCODE_LCONTROL);
+ break;
+
+ // LCTRL-F5 to toggle OpenGL filtering
+ case IPT_OSD_5:
+ entry->configure_osd("TOGGLE_FILTER", "Toggle Filter");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F5, KEYCODE_LCONTROL);
+ break;
+ // add a Not lcrtl condition to the toggle debug key
+ case IPT_UI_TOGGLE_DEBUG:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F5, input_seq::not_code, KEYCODE_LCONTROL);
+ break;
+
+ // LCTRL-F6 to decrease OpenGL prescaling
+ case IPT_OSD_6:
+ entry->configure_osd("DECREASE_PRESCALE", "Decrease Prescaling");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F6, KEYCODE_LCONTROL);
+ break;
+ // add a Not lcrtl condition to the toggle cheat key
+ case IPT_UI_TOGGLE_CHEAT:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F6, input_seq::not_code, KEYCODE_LCONTROL);
+ break;
+
+ // LCTRL-F7 to increase OpenGL prescaling
+ case IPT_OSD_7:
+ entry->configure_osd("INCREASE_PRESCALE", "Increase Prescaling");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F7, KEYCODE_LCONTROL);
+ break;
+ // add a Not lcrtl condition to the load state key
+ case IPT_UI_LOAD_STATE:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F7, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LSHIFT);
+ break;
+
+ // add a Not lcrtl condition to the throttle key
+ case IPT_UI_THROTTLE:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F10, input_seq::not_code, KEYCODE_LCONTROL);
+ break;
+
+ // disable the config menu if the ALT key is down
+ // (allows ALT-TAB to switch between apps)
+ case IPT_UI_CONFIGURE:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_TAB, input_seq::not_code, KEYCODE_LALT, input_seq::not_code, KEYCODE_RALT);
+ break;
+
+ // leave everything else alone
+ default:
+ break;
+ }
+ }
+}
+
+void sdl_osd_interface::poll_inputs(running_machine &machine)
+{
+ m_keyboard_input->poll_if_necessary(machine);
+ m_mouse_input->poll_if_necessary(machine);
+ m_lightgun_input->poll_if_necessary(machine);
+ m_joystick_input->poll_if_necessary(machine);
+}
+
+void sdl_osd_interface::release_keys()
+{
+ downcast<input_module_base*>(m_keyboard_input)->devicelist()->reset_devices();
+}
+
+bool sdl_osd_interface::should_hide_mouse()
+{
+ // if we are paused, no
+ if (machine().paused())
+ return false;
+
+ // if neither mice nor lightguns enabled in the core, then no
+ if (!options().mouse() && !options().lightgun())
+ return false;
+
+ if (!sdl_event_manager::instance().app_has_mouse_focus())
+ return false;
+
+ // otherwise, yes
+ return true;
+}
+
+void sdl_osd_interface::process_events_buf()
+{
+ SDL_PumpEvents();
+}
+
+#endif \ No newline at end of file
diff --git a/src/osd/modules/input/input_sdlcommon.h b/src/osd/modules/input/input_sdlcommon.h
new file mode 100644
index 00000000000..a4bde246967
--- /dev/null
+++ b/src/osd/modules/input/input_sdlcommon.h
@@ -0,0 +1,204 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert, R. Belmont, Brad Hughes
+//============================================================
+//
+// input_sdlcommon.h - SDL Common code shared by SDL modules
+//
+// Note: this code is also used by the X11 input modules
+//
+//============================================================
+
+#ifndef INPUT_SDLCOMMON_H_
+#define INPUT_SDLCOMMON_H_
+
+#include <vector>
+#include <unordered_map>
+#include <algorithm>
+#include <queue>
+
+#define MAX_DEVMAP_ENTRIES 16
+#define SDL_MODULE_EVENT_BUFFER_SIZE 5
+
+// state information for a keyboard
+struct keyboard_state
+{
+ INT32 state[0x3ff]; // must be INT32!
+ INT8 oldkey[MAX_KEYS];
+ INT8 currkey[MAX_KEYS];
+};
+
+// state information for a mouse
+struct mouse_state
+{
+ INT32 lX, lY;
+ INT32 buttons[MAX_BUTTONS];
+};
+
+
+// state information for a joystick; DirectInput state must be first element
+struct joystick_state
+{
+ SDL_Joystick *device;
+ INT32 axes[MAX_AXES];
+ INT32 buttons[MAX_BUTTONS];
+ INT32 hatsU[MAX_HATS], hatsD[MAX_HATS], hatsL[MAX_HATS], hatsR[MAX_HATS];
+ INT32 balls[MAX_AXES];
+};
+
+struct device_map_t
+{
+ struct {
+ std::string name;
+ int physical;
+ } map[MAX_DEVMAP_ENTRIES];
+ int logical[MAX_DEVMAP_ENTRIES];
+ int initialized;
+};
+
+//============================================================
+// event_manager_t
+//============================================================
+
+class sdl_event_subscriber
+{
+public:
+ virtual void handle_event(SDL_Event &sdlevent) = 0;
+};
+
+template <class TSubscriber>
+class event_manager_t
+{
+protected:
+ std::mutex m_lock;
+ std::unordered_multimap<int, TSubscriber*> m_subscription_index;
+ event_manager_t()
+ {
+ }
+
+public:
+ void subscribe(int* event_types, int num_event_types, TSubscriber *subscriber)
+ {
+ std::lock_guard<std::mutex> scope_lock(m_lock);
+
+ // Add the subscription
+ for (int i = 0; i < num_event_types; i++)
+ {
+ m_subscription_index.emplace(event_types[i], subscriber);
+ }
+ }
+
+ void unsubscribe(TSubscriber *subscriber)
+ {
+ std::lock_guard<std::mutex> scope_lock(m_lock);
+
+ // Loop over the entries and find ones that match our subscriber
+ // remove those that match
+ for (auto iter = m_subscription_index.begin(); iter != m_subscription_index.end(); iter++)
+ {
+ if (iter->second == subscriber)
+ m_subscription_index.erase(iter);
+ }
+ }
+
+ virtual void process_events(running_machine &machine) = 0;
+};
+
+class sdl_window_info;
+
+// REVIEW: Do we need to handle SDLMAME_EVENTS_IN_WORKER_THREAD eventually?
+class sdl_event_manager : public event_manager_t<sdl_event_subscriber>
+{
+private:
+ bool m_app_has_mouse_focus;
+ sdl_window_info * m_focus_window;
+
+ sdl_event_manager()
+ : m_app_has_mouse_focus(true),
+ m_focus_window(nullptr)
+ {
+ }
+
+public:
+ bool app_has_mouse_focus() { return m_app_has_mouse_focus; }
+ sdl_window_info * focus_window() { return m_focus_window; }
+
+ static sdl_event_manager& instance()
+ {
+ static sdl_event_manager s_instance;
+ return s_instance;
+ }
+
+ void process_events(running_machine &machine) override;
+
+private:
+ void process_window_event(running_machine &machine, SDL_Event &sdlevent);
+};
+
+//============================================================
+// INLINE FUNCTIONS
+//============================================================
+
+static inline int devmap_leastfree(device_map_t *devmap)
+{
+ int i;
+ for (i = 0; i < MAX_DEVMAP_ENTRIES; i++)
+ {
+ if (devmap->map[i].name.length() == 0)
+ return i;
+ }
+ return -1;
+}
+
+static inline std::string remove_spaces(const char *s)
+{
+ // Remove the spaces
+ auto output = std::string(s);
+ output.erase(std::remove_if(output.begin(), output.end(), isspace), output.end());
+
+ return output;
+}
+
+//============================================================
+// devmap_init - initializes a device_map based on
+// an input option prefix and max number of devices
+//============================================================
+
+static inline void devmap_init(running_machine &machine, device_map_t *devmap, const char *opt, int max_devices, const char *label)
+{
+ int dev;
+ char defname[20];
+
+ // The max devices the user specified, better not be bigger than the max the arrays can old
+ assert(max_devices <= MAX_DEVMAP_ENTRIES);
+
+ // Initialize the map to default uninitialized values
+ for (dev = 0; dev < MAX_DEVMAP_ENTRIES; dev++)
+ {
+ devmap->map[dev].physical = -1;
+ devmap->logical[dev] = -1;
+ }
+ devmap->initialized = 0;
+
+ // populate the device map up to the max number of devices
+ for (dev = 0; dev < max_devices; dev++)
+ {
+ const char *dev_name;
+
+ // derive the parameter name from the option name and index. For instance: lightgun_index1 to lightgun_index8
+ sprintf(defname, "%s%d", opt, dev + 1);
+
+ // Get the user-specified name that matches the parameter
+ dev_name = machine.options().value(defname);
+
+ // If they've specified a name and it's not "auto", treat it as a custom mapping
+ if (dev_name && *dev_name && strcmp(dev_name, OSDOPTVAL_AUTO))
+ {
+ // remove the spaces from the name store it in the index
+ devmap->map[dev].name = remove_spaces(dev_name);
+ osd_printf_verbose("%s: Logical id %d: %s\n", label, dev + 1, devmap->map[dev].name.c_str());
+ devmap->initialized = 1;
+ }
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/src/osd/modules/input/input_win32.cpp b/src/osd/modules/input/input_win32.cpp
new file mode 100644
index 00000000000..e1b69c8091c
--- /dev/null
+++ b/src/osd/modules/input/input_win32.cpp
@@ -0,0 +1,426 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles, Brad Hughes
+//============================================================
+//
+// input_win32.cpp - Win32 input implementation
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+#if defined(OSD_WINDOWS)
+
+// standard windows headers
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winioctl.h>
+#include <tchar.h>
+#undef interface
+
+#include <mutex>
+
+// MAME headers
+#include "emu.h"
+#include "osdepend.h"
+#include "ui/ui.h"
+#include "strconv.h"
+
+// MAMEOS headers
+#include "winmain.h"
+#include "window.h"
+
+#include "input_common.h"
+#include "input_windows.h"
+
+//============================================================
+// win32_keyboard_device
+//============================================================
+
+// This device is purely event driven so the implementation is in the module
+class win32_keyboard_device : public event_based_device<KeyPressEventArgs>
+{
+public:
+ keyboard_state keyboard;
+
+ win32_keyboard_device(running_machine& machine, const char *name, input_module &module)
+ : event_based_device(machine, name, DEVICE_CLASS_KEYBOARD, module),
+ keyboard({0})
+ {
+ }
+
+ void reset() override
+ {
+ memset(&keyboard, 0, sizeof(keyboard));
+ }
+
+protected:
+ void process_event(KeyPressEventArgs &args) override
+ {
+ keyboard.state[args.scancode] = args.event_id == INPUT_EVENT_KEYDOWN ? 0x80 : 0x00;
+ }
+};
+
+//============================================================
+// keyboard_input_win32 - win32 keyboard input module
+//============================================================
+
+class keyboard_input_win32 : public wininput_module
+{
+private:
+ const osd_options * m_options;
+
+public:
+ keyboard_input_win32()
+ : wininput_module(OSD_KEYBOARDINPUT_PROVIDER, "win32")
+ {
+ }
+
+ virtual void input_init(running_machine &machine) override
+ {
+ // Add a single win32 keyboard device that we'll monitor using Win32
+ win32_keyboard_device *devinfo = devicelist()->create_device<win32_keyboard_device>(machine, "Win32 Keyboard 1", *this);
+
+ keyboard_trans_table &table = keyboard_trans_table::instance();
+
+ // populate it
+ for (int keynum = 0; keynum < MAX_KEYS; keynum++)
+ {
+ input_item_id itemid = table.map_di_scancode_to_itemid(keynum);
+ char name[20];
+
+ // generate/fetch the name
+ _snprintf(name, ARRAY_LENGTH(name), "Scan%03d", keynum);
+
+ // add the item to the device
+ devinfo->device()->add_item(name, itemid, generic_button_get_state, &devinfo->keyboard.state[keynum]);
+ }
+ }
+
+ bool handle_input_event(input_event eventid, void *eventdata) override
+ {
+ if (!input_enabled())
+ return FALSE;
+
+ KeyPressEventArgs *args = nullptr;
+
+ switch (eventid)
+ {
+ case INPUT_EVENT_KEYDOWN:
+ case INPUT_EVENT_KEYUP:
+ args = (KeyPressEventArgs*)eventdata;
+ for (int i = 0; i < devicelist()->size(); i++)
+ downcast<win32_keyboard_device*>(devicelist()->at(i))->queue_events(args, 1);
+
+ return TRUE;
+
+ default:
+ return FALSE;
+ }
+ }
+};
+
+//============================================================
+// win32_mouse_device
+//============================================================
+
+struct win32_mouse_state
+{
+ POINT last_point;
+};
+
+class win32_mouse_device : public event_based_device<MouseButtonEventArgs>
+{
+public:
+ mouse_state mouse;
+ win32_mouse_state win32_mouse;
+
+ win32_mouse_device(running_machine& machine, const char *name, input_module &module)
+ : event_based_device(machine, name, DEVICE_CLASS_MOUSE, module),
+ mouse({0}),
+ win32_mouse({0})
+ {
+ }
+
+ void poll() override
+ {
+ event_based_device::poll();
+
+ CURSORINFO cursor_info = {0};
+ cursor_info.cbSize = sizeof(CURSORINFO);
+ GetCursorInfo(&cursor_info);
+
+ // We only take over the mouse if the cursor isn't showing
+ // This should happen anyway in mouse mode
+ if (!(cursor_info.flags & CURSOR_SHOWING))
+ {
+ // We measure the position change from the previously set center position
+ mouse.lX = (cursor_info.ptScreenPos.x - win32_mouse.last_point.x) * INPUT_RELATIVE_PER_PIXEL;
+ mouse.lY = (cursor_info.ptScreenPos.y - win32_mouse.last_point.y) * INPUT_RELATIVE_PER_PIXEL;
+
+ RECT window_pos = {0};
+ GetWindowRect(win_window_list->m_hwnd, &window_pos);
+
+ // We reset the cursor position to the middle of the window each frame
+ win32_mouse.last_point.x = window_pos.left + (window_pos.right - window_pos.left) / 2;
+ win32_mouse.last_point.y = window_pos.top + (window_pos.bottom - window_pos.top) / 2;
+
+ SetCursorPos(win32_mouse.last_point.x, win32_mouse.last_point.y);
+ }
+ }
+
+ void reset() override
+ {
+ memset(&mouse, 0, sizeof(mouse));
+ }
+
+protected:
+ void process_event(MouseButtonEventArgs &args)
+ {
+ // set the button state
+ mouse.rgbButtons[args.button] = args.keydown ? 0x80 : 0x00;
+
+ // Make sure we have a fresh mouse position on button down
+ if (args.keydown)
+ module().poll_if_necessary(machine());
+ }
+};
+
+//============================================================
+// mouse_input_win32 - win32 mouse input module
+//============================================================
+
+class mouse_input_win32 : public wininput_module
+{
+private:
+ const osd_options * m_options;
+
+public:
+ mouse_input_win32()
+ : wininput_module(OSD_MOUSEINPUT_PROVIDER, "win32")
+ {
+ }
+
+ virtual void input_init(running_machine &machine) override
+ {
+ win32_mouse_device *devinfo;
+ int axisnum, butnum;
+
+ if (!input_enabled() || !mouse_enabled())
+ return;
+
+ // allocate a device
+ devinfo = devicelist()->create_device<win32_mouse_device>(machine, "Win32 Mouse 1", *this);
+ if (devinfo == NULL)
+ return;
+
+ // populate the axes
+ for (axisnum = 0; axisnum < 2; axisnum++)
+ {
+ devinfo->device()->add_item(default_axis_name[axisnum], (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.lX + axisnum);
+ }
+
+ // populate the buttons
+ for (butnum = 0; butnum < 2; butnum++)
+ {
+ devinfo->device()->add_item(default_button_name(butnum), (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.rgbButtons[butnum]);
+ }
+ }
+
+ bool handle_input_event(input_event eventid, void *eventdata) override
+ {
+ if (!input_enabled() || !mouse_enabled() || eventid != INPUT_EVENT_MOUSE_BUTTON)
+ return FALSE;
+
+ auto args = static_cast<MouseButtonEventArgs*>(eventdata);
+ for (int i = 0; i < devicelist()->size(); i++)
+ downcast<win32_mouse_device*>(devicelist()->at(i))->queue_events(args, 1);
+
+ return TRUE;
+ }
+};
+
+//============================================================
+// win32_lightgun_device
+//============================================================
+
+class win32_lightgun_device : public event_based_device<MouseButtonEventArgs>
+{
+private:
+ BOOL m_lightgun_shared_axis_mode;
+ int m_gun_index;
+
+public:
+ mouse_state mouse;
+
+ win32_lightgun_device(running_machine& machine, const char *name, input_module &module)
+ : event_based_device(machine, name, DEVICE_CLASS_LIGHTGUN, module),
+ m_lightgun_shared_axis_mode(FALSE),
+ m_gun_index(0)
+ {
+ m_lightgun_shared_axis_mode = downcast<windows_options &>(machine.options()).dual_lightgun();
+
+ // Since we are about to be added to the list, the current size is the zero-based index of where we will be
+ m_gun_index = downcast<wininput_module&>(module).devicelist()->size();
+ }
+
+ void poll() override
+ {
+ event_based_device::poll();
+
+ INT32 xpos = 0, ypos = 0;
+ POINT mousepos;
+
+ // if we are using the shared axis hack, the data is updated via Windows messages only
+ if (m_lightgun_shared_axis_mode)
+ return;
+
+ // get the cursor position and transform into final results
+ GetCursorPos(&mousepos);
+ if (win_window_list != NULL)
+ {
+ RECT client_rect;
+
+ // get the position relative to the window
+ GetClientRect(win_window_list->m_hwnd, &client_rect);
+ ScreenToClient(win_window_list->m_hwnd, &mousepos);
+
+ // convert to absolute coordinates
+ xpos = normalize_absolute_axis(mousepos.x, client_rect.left, client_rect.right);
+ ypos = normalize_absolute_axis(mousepos.y, client_rect.top, client_rect.bottom);
+ }
+
+ // update the X/Y positions
+ mouse.lX = xpos;
+ mouse.lY = ypos;
+ }
+
+ void reset() override
+ {
+ memset(&mouse, 0, sizeof(mouse));
+ }
+
+protected:
+ void process_event(MouseButtonEventArgs &args)
+ {
+ // Are we in shared axis mode?
+ if (m_lightgun_shared_axis_mode)
+ {
+ handle_shared_axis_mode(args);
+ }
+ else
+ {
+ // In non-shared axis mode, just update the button state
+ mouse.rgbButtons[args.button] = args.keydown ? 0x80 : 0x00;
+ }
+ }
+
+private:
+ void handle_shared_axis_mode(MouseButtonEventArgs &args)
+ {
+ int button = args.button;
+
+ // We only handle the first four buttons in shared axis mode
+ if (button > 3)
+ return;
+
+ // First gun doesn't handle buttons 2 & 3
+ if (button >= 2 && m_gun_index == 0)
+ return;
+
+ // Second gun doesn't handle buttons 0 & 1
+ if (button < 2 && m_gun_index == 1)
+ return;
+
+ // Adjust the button if we're the second lightgun
+ int logical_button = m_gun_index == 1 ? button - 2 : button;
+
+ // set the button state
+ mouse.rgbButtons[logical_button] = args.keydown ? 0x80 : 0x00;
+ if (args.keydown)
+ {
+ RECT client_rect;
+ POINT mousepos;
+
+ // get the position relative to the window
+ GetClientRect(win_window_list->m_hwnd, &client_rect);
+ mousepos.x = args.xpos;
+ mousepos.y = args.ypos;
+ ScreenToClient(win_window_list->m_hwnd, &mousepos);
+
+ // convert to absolute coordinates
+ mouse.lX = normalize_absolute_axis(mousepos.x, client_rect.left, client_rect.right);
+ mouse.lY = normalize_absolute_axis(mousepos.y, client_rect.top, client_rect.bottom);
+ }
+ }
+};
+
+//============================================================
+// lightgun_input_win32 - win32 lightgun input module
+//============================================================
+
+class lightgun_input_win32 : public wininput_module
+{
+public:
+ lightgun_input_win32()
+ : wininput_module(OSD_LIGHTGUNINPUT_PROVIDER, "win32")
+ {
+ }
+
+ int init_internal() override
+ {
+ return 0;
+ }
+
+ virtual void input_init(running_machine &machine) override
+ {
+ int max_guns = downcast<windows_options&>(machine.options()).dual_lightgun() ? 2 : 1;
+
+ // allocate the lightgun devices
+ for (int gunnum = 0; gunnum < max_guns; gunnum++)
+ {
+ static const char *const gun_names[] = { "Win32 Gun 1", "Win32 Gun 2" };
+ win32_lightgun_device *devinfo;
+ int axisnum, butnum;
+
+ // allocate a device
+ devinfo = devicelist()->create_device<win32_lightgun_device>(machine, gun_names[gunnum], *this);
+ if (devinfo == NULL)
+ break;
+
+ // populate the axes
+ for (axisnum = 0; axisnum < 2; axisnum++)
+ {
+ devinfo->device()->add_item(default_axis_name[axisnum], (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.lX + axisnum);
+ }
+
+ // populate the buttons
+ for (butnum = 0; butnum < 2; butnum++)
+ {
+ devinfo->device()->add_item(default_button_name(butnum), (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.rgbButtons[butnum]);
+ }
+ }
+ }
+
+ bool handle_input_event(input_event eventid, void* eventdata) override
+ {
+ if (!input_enabled() || !lightgun_enabled() || eventid != INPUT_EVENT_MOUSE_BUTTON)
+ return false;
+
+ for (int i = 0; i < devicelist()->size(); i++)
+ downcast<win32_lightgun_device*>(devicelist()->at(i))->queue_events(static_cast<MouseButtonEventArgs*>(eventdata), 1);
+
+ return true;
+ }
+};
+
+#else
+MODULE_NOT_SUPPORTED(keyboard_input_win32, OSD_KEYBOARDINPUT_PROVIDER, "win32")
+MODULE_NOT_SUPPORTED(mouse_input_win32, OSD_MOUSEINPUT_PROVIDER, "win32")
+MODULE_NOT_SUPPORTED(lightgun_input_win32, OSD_LIGHTGUNINPUT_PROVIDER, "win32")
+#endif
+
+MODULE_DEFINITION(KEYBOARDINPUT_WIN32, keyboard_input_win32)
+MODULE_DEFINITION(MOUSEINPUT_WIN32, mouse_input_win32)
+MODULE_DEFINITION(LIGHTGUNINPUT_WIN32, lightgun_input_win32)
+
diff --git a/src/osd/modules/input/input_windows.cpp b/src/osd/modules/input/input_windows.cpp
new file mode 100644
index 00000000000..2f7a6bc6d76
--- /dev/null
+++ b/src/osd/modules/input/input_windows.cpp
@@ -0,0 +1,143 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles, Brad Hughes
+//============================================================
+//
+// input_windows.cpp - Common code used by Windows input modules
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+#if defined(OSD_WINDOWS)
+
+// standard windows headers
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winioctl.h>
+#include <tchar.h>
+#undef interface
+
+// MAME headers
+#include "emu.h"
+#include "osdepend.h"
+#include "ui/ui.h"
+
+// MAMEOS headers
+#include "winmain.h"
+#include "window.h"
+
+#include "input_common.h"
+#include "input_windows.h"
+
+bool windows_osd_interface::should_hide_mouse()
+{
+ bool hidemouse = false;
+ hidemouse |= downcast<wininput_module*>(m_keyboard_input)->should_hide_mouse();
+ hidemouse |= downcast<wininput_module*>(m_mouse_input)->should_hide_mouse();
+ hidemouse |= downcast<wininput_module*>(m_lightgun_input)->should_hide_mouse();
+ hidemouse |= downcast<wininput_module*>(m_joystick_input)->should_hide_mouse();
+ return hidemouse;
+}
+
+bool windows_osd_interface::handle_input_event(input_event eventid, void* eventdata)
+{
+ bool handled = false;
+ handled |= downcast<wininput_module*>(m_keyboard_input)->handle_input_event(eventid, eventdata);
+ handled |= downcast<wininput_module*>(m_mouse_input)->handle_input_event(eventid, eventdata);
+ handled |= downcast<wininput_module*>(m_lightgun_input)->handle_input_event(eventid, eventdata);
+ handled |= downcast<wininput_module*>(m_joystick_input)->handle_input_event(eventid, eventdata);
+ return handled;
+}
+
+void windows_osd_interface::poll_input(running_machine &machine)
+{
+ m_keyboard_input->poll_if_necessary(machine);
+ m_mouse_input->poll_if_necessary(machine);
+ m_lightgun_input->poll_if_necessary(machine);
+ m_joystick_input->poll_if_necessary(machine);
+}
+
+//============================================================
+// customize_input_type_list
+//============================================================
+
+void windows_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist)
+{
+ input_type_entry *entry;
+ const char* uimode;
+
+ // loop over the defaults
+ for (entry = typelist.first(); entry != NULL; entry = entry->next())
+ switch (entry->type())
+ {
+ // disable the config menu if the ALT key is down
+ // (allows ALT-TAB to switch between windows apps)
+ case IPT_UI_CONFIGURE:
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_TAB, input_seq::not_code, KEYCODE_LALT, input_seq::not_code, KEYCODE_RALT);
+ break;
+
+ // configurable UI mode switch
+ case IPT_UI_TOGGLE_UI:
+ uimode = options().ui_mode_key();
+ if (strcmp(uimode, "auto"))
+ {
+ std::string fullmode = "ITEM_ID_";
+ fullmode += uimode;
+ input_item_id const mameid_code = keyboard_trans_table::instance().lookup_mame_code(fullmode.c_str());
+ if (ITEM_ID_INVALID != mameid_code)
+ {
+ input_code const ui_code = input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, input_item_id(mameid_code));
+ entry->defseq(SEQ_TYPE_STANDARD).set(ui_code);
+ }
+ }
+ break;
+
+ // alt-enter for fullscreen
+ case IPT_OSD_1:
+ entry->configure_osd("TOGGLE_FULLSCREEN", "Toggle Fullscreen");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_ENTER, KEYCODE_LALT, input_seq::or_code, KEYCODE_ENTER, KEYCODE_RALT);
+ break;
+
+ // lalt-F12 for fullscreen snap (HLSL)
+ case IPT_OSD_2:
+ entry->configure_osd("RENDER_SNAP", "Take Rendered Snapshot");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, KEYCODE_LALT, input_seq::not_code, KEYCODE_LSHIFT);
+ break;
+ // add a NOT-lalt to our default F12
+ case IPT_UI_SNAPSHOT: // emu/input.c: input_seq(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT)
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT, input_seq::not_code, KEYCODE_LALT);
+ break;
+
+ // lshift-lalt-F12 for fullscreen video (HLSL)
+ case IPT_OSD_3:
+ entry->configure_osd("RENDER_AVI", "Record Rendered Video");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, KEYCODE_LSHIFT, KEYCODE_LALT);
+ break;
+ // add a NOT-lalt to our default shift-F12
+ case IPT_UI_RECORD_MOVIE: // emu/input.c: input_seq(KEYCODE_F12, KEYCODE_LSHIFT)
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, KEYCODE_LSHIFT, input_seq::not_code, KEYCODE_LALT);
+ break;
+
+ // add a NOT-lalt to write timecode file
+ case IPT_UI_TIMECODE: // emu/input.c: input_seq(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT)
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT, input_seq::not_code, KEYCODE_LALT);
+ break;
+
+ // lctrl-lalt-F5 to toggle post-processing
+ case IPT_OSD_4:
+ entry->configure_osd("POST_PROCESS", "Toggle Post-Processing");
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F5, KEYCODE_LALT, KEYCODE_LCONTROL);
+ break;
+ // add a NOT-lctrl-lalt to our default F5
+ case IPT_UI_TOGGLE_DEBUG: // emu/input.c: input_seq(KEYCODE_F5)
+ entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F5, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LALT);
+ break;
+
+ // leave everything else alone
+ default:
+ break;
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/src/osd/modules/input/input_windows.h b/src/osd/modules/input/input_windows.h
new file mode 100644
index 00000000000..b79560c97a7
--- /dev/null
+++ b/src/osd/modules/input/input_windows.h
@@ -0,0 +1,83 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles, Brad Hughes
+//============================================================
+//
+// input_windows.h - Common code used by Windows input modules
+//
+//============================================================
+
+#ifndef INPUT_WIN_H_
+#define INPUT_WIN_H_
+
+//============================================================
+// TYPEDEFS
+//============================================================
+
+// state information for a keyboard
+struct keyboard_state
+{
+ UINT8 state[MAX_KEYS];
+ INT8 oldkey[MAX_KEYS];
+ INT8 currkey[MAX_KEYS];
+};
+
+// state information for a mouse (matches DIMOUSESTATE exactly)
+struct mouse_state
+{
+ LONG lX;
+ LONG lY;
+ LONG lZ;
+ BYTE rgbButtons[8];
+};
+
+class wininput_module : public input_module_base
+{
+protected:
+ bool m_global_inputs_enabled;
+
+public:
+ wininput_module(const char * type, const char * name)
+ : input_module_base(type, name)
+ {
+ }
+
+ virtual bool should_hide_mouse()
+ {
+ if (winwindow_has_focus() // has focus
+ && (!video_config.windowed || !win_window_list->win_has_menu()) // not windowed or doesn't have a menu
+ && (input_enabled() && !input_paused()) // input enabled and not paused
+ && (mouse_enabled() || lightgun_enabled())) // either mouse or lightgun enabled in the core
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ virtual bool handle_input_event(input_event eventid, void* data)
+ {
+ return false;
+ }
+
+protected:
+
+ void before_poll(running_machine& machine) override
+ {
+ // periodically process events, in case they're not coming through
+ // this also will make sure the mouse state is up-to-date
+ winwindow_process_events_periodic(machine);
+ }
+
+ bool should_poll_devices(running_machine &machine) override
+ {
+ return input_enabled() && (m_global_inputs_enabled || winwindow_has_focus());
+ }
+};
+
+//============================================================
+// INLINE FUNCTIONS
+//============================================================
+
+INT32 generic_button_get_state(void *device_internal, void *item_internal);
+INT32 generic_axis_get_state(void *device_internal, void *item_internal);
+#endif \ No newline at end of file
diff --git a/src/osd/modules/input/input_x11.cpp b/src/osd/modules/input/input_x11.cpp
new file mode 100644
index 00000000000..3a4073ef8c7
--- /dev/null
+++ b/src/osd/modules/input/input_x11.cpp
@@ -0,0 +1,605 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert, R. Belmont, Brad Hughes
+//============================================================
+//
+// input_x11.cpp - X11 XLib/XInput routines
+//
+// SDLMAME by Olivier Galibert and R. Belmont
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+#if defined(SDLMAME_SDL2) && !defined(SDLMAME_WIN32) && defined(USE_XINPUT) && USE_XINPUT
+
+// for X11 xinput
+#include <X11/Xlib.h>
+#include <X11/extensions/XInput.h>
+#include <X11/Xutil.h>
+
+// standard sdl header
+#include "sdlinc.h"
+#include <ctype.h>
+#include <stddef.h>
+#include <mutex>
+#include <memory>
+#include <queue>
+#include <string>
+
+// MAME headers
+#include "emu.h"
+#include "osdepend.h"
+
+// MAMEOS headers
+#include "../lib/osdobj_common.h"
+#include "input_common.h"
+#include "../../sdl/osdsdl.h"
+#include "input_sdlcommon.h"
+
+#define MAX_DEVMAP_ENTRIES 16
+
+#define INVALID_EVENT_TYPE -1
+static int motion_type = INVALID_EVENT_TYPE;
+static int button_press_type = INVALID_EVENT_TYPE;
+static int button_release_type = INVALID_EVENT_TYPE;
+static int key_press_type = INVALID_EVENT_TYPE;
+static int key_release_type = INVALID_EVENT_TYPE;
+static int proximity_in_type = INVALID_EVENT_TYPE;
+static int proximity_out_type = INVALID_EVENT_TYPE;
+
+// state information for a lightgun
+struct lightgun_state
+{
+ INT32 lX, lY;
+ INT32 buttons[MAX_BUTTONS];
+};
+
+struct x11_api_state
+{
+ XID deviceid; // X11 device id
+ INT32 maxx, maxy;
+ INT32 minx, miny;
+};
+
+//============================================================
+// DEBUG MACROS
+//============================================================
+
+#if defined(XINPUT_DEBUG) && XINPUT_DEBUG
+#define XI_DBG(format, ...) osd_printf_verbose(format, __VA_ARGS__)
+
+#define print_motion_event(motion) print_motion_event_impl(motion)
+static inline void print_motion_event_impl(XDeviceMotionEvent *motion)
+{
+ /*
+ * print a lot of debug informations of the motion event(s).
+ */
+ osd_printf_verbose(
+ "XDeviceMotionEvent:\n"
+ " type: %d\n"
+ " serial: %lu\n"
+ " send_event: %d\n"
+ " display: %p\n"
+ " window: --\n"
+ " deviceid: %lu\n"
+ " root: --\n"
+ " subwindow: --\n"
+ " time: --\n"
+ " x: %d, y: %d\n"
+ " x_root: %d, y_root: %d\n"
+ " state: %u\n"
+ " is_hint: %2.2X\n"
+ " same_screen: %d\n"
+ " device_state: %u\n"
+ " axes_count: %2.2X\n"
+ " first_axis: %2.2X\n"
+ " axis_data[6]: {%d,%d,%d,%d,%d,%d}\n",
+ motion->type,
+ motion->serial,
+ motion->send_event,
+ motion->display,
+ /* motion->window, */
+ motion->deviceid,
+ /* motion->root */
+ /* motion->subwindow */
+ /* motion->time, */
+ motion->x, motion->y,
+ motion->x_root, motion->y_root,
+ motion->state,
+ motion->is_hint,
+ motion->same_screen,
+ motion->device_state,
+ motion->axes_count,
+ motion->first_axis,
+ motion->axis_data[0], motion->axis_data[1], motion->axis_data[2], motion->axis_data[3], motion->axis_data[4], motion->axis_data[5]
+ );
+}
+#else
+#define XI_DBG(format, ...) while(0) {}
+#define print_motion_event(motion) while(0) {}
+#endif
+
+//============================================================
+// lightgun helpers: copy-past from xinfo
+//============================================================
+
+XDeviceInfo*
+find_device_info(Display *display,
+ const char *name,
+ bool only_extended)
+{
+ XDeviceInfo *devices;
+ XDeviceInfo *found = NULL;
+ int loop;
+ int num_devices;
+ int len = strlen(name);
+ bool is_id = true;
+ XID id = (XID)-1;
+
+ for(loop = 0; loop < len; loop++)
+ {
+ if (!isdigit(name[loop]))
+ {
+ is_id = false;
+ break;
+ }
+ }
+
+ if (is_id)
+ {
+ id = atoi(name);
+ }
+
+ devices = XListInputDevices(display, &num_devices);
+
+ for(loop = 0; loop < num_devices; loop++)
+ {
+ osd_printf_verbose("Evaluating device with name: %s\n", devices[loop].name);
+
+ // if only extended devices and our device isn't extended, skip
+ if (only_extended && devices[loop].use < IsXExtensionDevice)
+ continue;
+
+ // Adjust name to remove spaces for accurate comparison
+ std::string name_no_space = remove_spaces(devices[loop].name);
+ if ((!is_id && strcmp(name_no_space.c_str(), name) == 0)
+ || (is_id && devices[loop].id == id))
+ {
+ if (found)
+ {
+ osd_printf_verbose(
+ "Warning: There are multiple devices named \"%s\".\n"
+ "To ensure the correct one is selected, please use "
+ "the device ID instead.\n\n", name);
+ }
+ else
+ {
+ found = &devices[loop];
+ }
+ }
+ }
+
+ return found;
+}
+
+//Copypasted from xinfo
+static int
+register_events(
+ Display *dpy,
+ XDeviceInfo *info,
+ const char *dev_name,
+ bool handle_proximity)
+{
+ int number = 0; /* number of events registered */
+ XEventClass event_list[7];
+ int i;
+ XDevice * device;
+ Window root_win;
+ unsigned long screen;
+ XInputClassInfo * ip;
+
+ screen = DefaultScreen(dpy);
+ root_win = RootWindow(dpy, screen);
+
+ device = XOpenDevice(dpy, info->id);
+ if (device == nullptr)
+ {
+ osd_printf_verbose("unable to open device %s\n", dev_name);
+ return 0;
+ }
+
+ if (device->num_classes > 0)
+ {
+ for (ip = device->classes, i = 0; i < info->num_classes; ip++, i++)
+ {
+ switch (ip->input_class)
+ {
+ case KeyClass:
+ DeviceKeyPress(device, key_press_type, event_list[number]); number++;
+ DeviceKeyRelease(device, key_release_type, event_list[number]); number++;
+ break;
+
+ case ButtonClass:
+ DeviceButtonPress(device, button_press_type, event_list[number]); number++;
+ DeviceButtonRelease(device, button_release_type, event_list[number]); number++;
+ break;
+
+ case ValuatorClass:
+ DeviceMotionNotify(device, motion_type, event_list[number]); number++;
+ osd_printf_verbose("Motion = %i\n",motion_type);
+ if (handle_proximity)
+ {
+ ProximityIn(device, proximity_in_type, event_list[number]); number++;
+ ProximityOut(device, proximity_out_type, event_list[number]); number++;
+ }
+ break;
+
+ default:
+ osd_printf_verbose("unknown class\n");
+ break;
+ }
+ }
+
+ if (XSelectExtensionEvent(dpy, root_win, event_list, number))
+ {
+ osd_printf_verbose("error selecting extended events\n");
+ return 0;
+ }
+ }
+
+ return number;
+}
+
+//============================================================
+// x11_event_manager
+//============================================================
+
+class x11_event_handler
+{
+public:
+ virtual void handle_event(XEvent &xevent) = 0;
+};
+
+class x11_event_manager : public event_manager_t<x11_event_handler>
+{
+private:
+ Display * m_display;
+
+ x11_event_manager()
+ : event_manager_t(),
+ m_display(nullptr)
+ {
+ }
+public:
+ Display * display() { return m_display; }
+
+ static x11_event_manager& instance()
+ {
+ static x11_event_manager s_instance;
+ return s_instance;
+ }
+
+ int initialize()
+ {
+ std::lock_guard<std::mutex> scope_lock(m_lock);
+
+ if (m_display != nullptr)
+ return 0;
+
+ m_display = XOpenDisplay(NULL);
+ if (m_display == nullptr)
+ {
+ osd_printf_verbose("Unable to connect to X server\n");
+ return -1;
+ }
+
+ XExtensionVersion *version = XGetExtensionVersion(m_display, INAME);
+ if (!version || (version == (XExtensionVersion*)NoSuchExtension))
+ {
+ osd_printf_verbose("xinput extension not available!\n");
+ return -1;
+ }
+
+ return 0;
+ }
+
+ void process_events(running_machine &machine) override
+ {
+ std::lock_guard<std::mutex> scope_lock(m_lock);
+ XEvent xevent;
+
+ //Get XInput events
+ while (XPending(m_display) != 0)
+ {
+ XNextEvent(m_display, &xevent);
+
+ // Find all subscribers for the event type
+ auto subscribers = m_subscription_index.equal_range(xevent.type);
+
+ // Dispatch the events
+ for (auto iter = subscribers.first; iter != subscribers.second; iter++)
+ iter->second->handle_event(xevent);
+ }
+ }
+};
+
+//============================================================
+// x11_input_device
+//============================================================
+
+class x11_input_device : public event_based_device<XEvent>
+{
+public:
+ x11_api_state x11_state;
+
+ x11_input_device(running_machine &machine, const char* name, input_device_class devclass, input_module &module)
+ : event_based_device(machine, name, devclass, module),
+ x11_state({0})
+ {
+ }
+};
+
+//============================================================
+// x11_lightgun_device
+//============================================================
+
+class x11_lightgun_device : public x11_input_device
+{
+public:
+ lightgun_state lightgun;
+
+ x11_lightgun_device(running_machine &machine, const char* name, input_module &module)
+ : x11_input_device(machine, name, DEVICE_CLASS_LIGHTGUN, module),
+ lightgun({0})
+ {
+ }
+
+ void process_event(XEvent &xevent) override
+ {
+ if (xevent.type == motion_type)
+ {
+ XDeviceMotionEvent *motion = (XDeviceMotionEvent *)&xevent;
+ print_motion_event(motion);
+
+ /*
+ * We have to check with axis will start on array index 0.
+ * We have also to check the number of axes that are stored in the array.
+ */
+ switch (motion->first_axis)
+ {
+ /*
+ * Starting with x, check number of axis, if there is also the y axis stored.
+ */
+ case 0:
+ if (motion->axes_count >= 1)
+ {
+ lightgun.lX = normalize_absolute_axis(motion->axis_data[0], x11_state.minx, x11_state.maxx);
+ if (motion->axes_count >= 2)
+ {
+ lightgun.lY = normalize_absolute_axis(motion->axis_data[1], x11_state.miny, x11_state.maxy);
+ }
+ }
+ break;
+
+ /*
+ * Starting with y, ...
+ */
+ case 1:
+ if (motion->axes_count >= 1)
+ {
+ lightgun.lY = normalize_absolute_axis(motion->axis_data[0], x11_state.miny, x11_state.maxy);
+ }
+ break;
+ }
+ }
+ else if (xevent.type == button_press_type || xevent.type == button_release_type)
+ {
+ XDeviceButtonEvent *button = (XDeviceButtonEvent *)&xevent;
+ lightgun.buttons[button->button] = (xevent.type == button_press_type) ? 0x80 : 0;
+ }
+ }
+
+ void reset() override
+ {
+ memset(&lightgun, 0, sizeof(lightgun));
+ }
+};
+
+//============================================================
+// x11_lightgun_module
+//============================================================
+
+class x11_lightgun_module : public input_module_base, public x11_event_handler
+{
+private:
+ device_map_t m_lightgun_map;
+ Display * m_display;
+public:
+ x11_lightgun_module()
+ : input_module_base(OSD_LIGHTGUNINPUT_PROVIDER, "x11")
+ {
+ }
+
+ void input_init(running_machine &machine) override
+ {
+ int index;
+
+ osd_printf_verbose("Lightgun: Begin initialization\n");
+
+ devmap_init(machine, &m_lightgun_map, SDLOPTION_LIGHTGUNINDEX, 8, "Lightgun mapping");
+
+ x11_event_manager::instance().initialize();
+ m_display = x11_event_manager::instance().display();
+
+ // Loop through all 8 possible devices
+ for (index = 0; index < 8; index++)
+ {
+ XDeviceInfo *info;
+
+ // Skip if the name is empty
+ if (m_lightgun_map.map[index].name.length() == 0)
+ continue;
+
+ x11_lightgun_device *devinfo;
+ std::string const &name = m_lightgun_map.map[index].name;
+ char defname[512];
+
+ // Register and add the device
+ devinfo = create_lightgun_device(machine, index);
+ osd_printf_verbose("%i: %s\n", index, name.c_str());
+
+ // Find the device info associated with the name
+ info = find_device_info(m_display, name.c_str(), 0);
+
+ // If we couldn't find the device, skip
+ if (info == nullptr)
+ {
+ osd_printf_verbose("Can't find device %s!\n", name.c_str());
+ continue;
+ }
+
+ //Grab device info and translate to stuff mame can use
+ if (info->num_classes > 0)
+ {
+ // Add the lightgun buttons based on what we read
+ add_lightgun_buttons((XAnyClassPtr)info->inputclassinfo, info->num_classes, devinfo);
+
+ // Also, set the axix min/max ranges if we got them
+ set_lightgun_axis_props((XAnyClassPtr)info->inputclassinfo, info->num_classes, devinfo);
+ }
+
+ // Add X and Y axis
+ sprintf(defname, "X %s", devinfo->name());
+ devinfo->device()->add_item(defname, ITEM_ID_XAXIS, generic_axis_get_state, &devinfo->lightgun.lX);
+
+ sprintf(defname, "Y %s", devinfo->name());
+ devinfo->device()->add_item(defname, ITEM_ID_YAXIS, generic_axis_get_state, &devinfo->lightgun.lY);
+
+ // Save the device id
+ devinfo->x11_state.deviceid = info->id;
+
+ // Register this device to receive event notifications
+ int events_registered = register_events(m_display, info, m_lightgun_map.map[index].name.c_str(), 0);
+ osd_printf_verbose("Device %i: Registered %i events.\n", (int)info->id, events_registered);
+
+ // register ourself to handle events from event manager
+ int event_types[] = { motion_type, button_press_type, button_release_type };
+ osd_printf_verbose("Events types to register: motion:%d, press:%d, release:%d\n", motion_type, button_press_type, button_release_type);
+ x11_event_manager::instance().subscribe(event_types, ARRAY_LENGTH(event_types), this);
+ }
+
+ osd_printf_verbose("Lightgun: End initialization\n");
+ }
+
+ bool should_poll_devices(running_machine &machine) override
+ {
+ return sdl_event_manager::instance().app_has_mouse_focus();
+ }
+
+ void before_poll(running_machine &machine) override
+ {
+ if (!should_poll_devices(machine))
+ return;
+
+ // Tell the event manager to process events and push them to the devices
+ x11_event_manager::instance().process_events(machine);
+
+ // Also trigger the SDL event manager so it can process window events
+ sdl_event_manager::instance().process_events(machine);
+ }
+
+ void handle_event(XEvent &xevent) override
+ {
+ for (int i = 0; i < devicelist()->size(); i++)
+ {
+ downcast<x11_input_device*>(devicelist()->at(i))->queue_events(&xevent, 1);
+ }
+ }
+
+private:
+ x11_lightgun_device* create_lightgun_device(running_machine &machine, int index)
+ {
+ x11_lightgun_device *devinfo = nullptr;
+ char tempname[20];
+
+ if (m_lightgun_map.map[index].name.length() == 0)
+ {
+ if (m_lightgun_map.initialized)
+ {
+ snprintf(tempname, ARRAY_LENGTH(tempname), "NC%d", index);
+ devinfo = devicelist()->create_device<x11_lightgun_device>(machine, tempname, *this);
+ }
+
+ return nullptr;
+ }
+ else
+ {
+ devinfo = devicelist()->create_device<x11_lightgun_device>(machine, m_lightgun_map.map[index].name.c_str(), *this);
+ }
+
+ return devinfo;
+ }
+
+ void add_lightgun_buttons(XAnyClassPtr first_info_class, int num_classes, x11_lightgun_device *devinfo)
+ {
+ XAnyClassPtr any = first_info_class;
+
+ for (int i = 0; i < num_classes; i++)
+ {
+ switch (any->c_class)
+ {
+ case ButtonClass:
+ XButtonInfoPtr b = (XButtonInfoPtr)any;
+ for (int button = 0; button < b->num_buttons; button++)
+ {
+ input_item_id itemid = (input_item_id)(ITEM_ID_BUTTON1 + button);
+ devinfo->device()->add_item(default_button_name(button), itemid, generic_button_get_state, &devinfo->lightgun.buttons[button]);
+ }
+ break;
+ }
+
+ any = (XAnyClassPtr)((char *)any + any->length);
+ }
+ }
+
+ void set_lightgun_axis_props(XAnyClassPtr first_info_class, int num_classes, x11_lightgun_device *devinfo)
+ {
+ XAnyClassPtr any = first_info_class;
+
+ for (int i = 0; i < num_classes; i++)
+ {
+ switch (any->c_class)
+ {
+ case ValuatorClass:
+ XValuatorInfoPtr valuator_info = (XValuatorInfoPtr)any;
+ XAxisInfoPtr axis_info = (XAxisInfoPtr)((char *)valuator_info + sizeof(XValuatorInfo));
+ for (int j = 0; j < valuator_info->num_axes; j++, axis_info++)
+ {
+ if (j == 0)
+ {
+ XI_DBG("Set minx=%d, maxx=%d\n", axis_info->min_value, axis_info->max_value);
+ devinfo->x11_state.maxx = axis_info->max_value;
+ devinfo->x11_state.minx = axis_info->min_value;
+ }
+
+ if (j == 1)
+ {
+ XI_DBG("Set miny=%d, maxy=%d\n", axis_info->min_value, axis_info->max_value);
+ devinfo->x11_state.maxy = axis_info->max_value;
+ devinfo->x11_state.miny = axis_info->min_value;
+ }
+ }
+ break;
+ }
+
+ any = (XAnyClassPtr)((char *)any + any->length);
+ }
+ }
+};
+
+#else
+MODULE_NOT_SUPPORTED(x11_lightgun_module, OSD_LIGHTGUNINPUT_PROVIDER, "x11")
+#endif
+
+MODULE_DEFINITION(LIGHTGUN_X11, x11_lightgun_module) \ No newline at end of file
diff --git a/src/osd/modules/input/input_xinput.cpp b/src/osd/modules/input/input_xinput.cpp
new file mode 100644
index 00000000000..588ac0a9e5f
--- /dev/null
+++ b/src/osd/modules/input/input_xinput.cpp
@@ -0,0 +1,427 @@
+// license:BSD-3-Clause
+// copyright-holders:Brad Hughes
+//============================================================
+//
+// input_xinput.cpp - XInput API input support for Windows
+//
+//============================================================
+
+#include "input_module.h"
+#include "modules/osdmodule.h"
+
+#if defined(OSD_WINDOWS)
+
+// standard windows headers
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+// XInput header
+#include <Xinput.h>
+
+#undef interface
+
+// MAME headers
+#include "emu.h"
+#include "osdepend.h"
+#include "ui/ui.h"
+
+// MAMEOS headers
+#include "winmain.h"
+#include "window.h"
+
+#include "input_common.h"
+#include "input_windows.h"
+
+#define XINPUT_MAX_POV 4
+#define XINPUT_MAX_BUTTONS 10
+#define XINPUT_MAX_AXIS 4
+
+#define XINPUT_AXIS_MINVALUE -32767
+#define XINPUT_AXIS_MAXVALUE 32767
+
+// default axis names
+static const char *const xinput_axis_name[] =
+{
+ "LSX",
+ "LSY",
+ "RSX",
+ "RSY"
+};
+
+static const input_item_id xinput_axis_ids[] =
+{
+ ITEM_ID_XAXIS,
+ ITEM_ID_YAXIS,
+ ITEM_ID_RXAXIS,
+ ITEM_ID_RYAXIS
+};
+
+static const USHORT xinput_pov_dir[] = {
+ XINPUT_GAMEPAD_DPAD_UP,
+ XINPUT_GAMEPAD_DPAD_DOWN,
+ XINPUT_GAMEPAD_DPAD_LEFT,
+ XINPUT_GAMEPAD_DPAD_RIGHT
+};
+
+static const char *const xinput_pov_names[] = {
+ "DPAD Up",
+ "DPAD Down",
+ "DPAD Left",
+ "DPAD Right"
+};
+
+static const USHORT xinput_buttons[] = {
+ XINPUT_GAMEPAD_A,
+ XINPUT_GAMEPAD_B,
+ XINPUT_GAMEPAD_X,
+ XINPUT_GAMEPAD_Y,
+ XINPUT_GAMEPAD_LEFT_SHOULDER,
+ XINPUT_GAMEPAD_RIGHT_SHOULDER,
+ XINPUT_GAMEPAD_START,
+ XINPUT_GAMEPAD_BACK,
+ XINPUT_GAMEPAD_LEFT_THUMB,
+ XINPUT_GAMEPAD_RIGHT_THUMB,
+};
+
+static const char *const xinput_button_names[] = {
+ "A",
+ "B",
+ "X",
+ "Y",
+ "Left Shoulder",
+ "Right Shoulder",
+ "Start",
+ "Back",
+ "Left Thumb",
+ "Right Thumb"
+};
+
+struct gamepad_state
+{
+ BYTE rgbButtons[XINPUT_MAX_BUTTONS];
+ BYTE rgbPov[XINPUT_MAX_POV];
+ BYTE bLeftTrigger;
+ BYTE bRightTrigger;
+ LONG sThumbLX;
+ LONG sThumbLY;
+ LONG sThumbRX;
+ LONG sThumbRY;
+};
+
+// state information for a gamepad; state must be first element
+struct xinput_api_state
+{
+ UINT32 playerIndex;
+ XINPUT_STATE xstate;
+ XINPUT_CAPABILITIES caps;
+};
+
+// Typedef for pointers to XInput Functions
+typedef DWORD(__stdcall* PFN_XINPUTGETSTATE)(DWORD, XINPUT_STATE*);
+typedef DWORD(__stdcall* PFN_XINPUTGETCAPS)(DWORD, DWORD, XINPUT_CAPABILITIES*);
+
+class xinput_interface
+{
+private:
+ HMODULE m_xinput_module;
+ PFN_XINPUTGETSTATE m_pfnXInputGetState;
+ PFN_XINPUTGETCAPS m_pfnXInputGetCapabilities;
+ bool m_initialized;
+
+ xinput_interface()
+ : m_xinput_module(NULL),
+ m_pfnXInputGetState(nullptr),
+ m_pfnXInputGetCapabilities(nullptr),
+ m_initialized(false)
+ {
+ }
+
+ int initialize()
+ {
+ if (m_initialized)
+ return 0;
+
+ m_xinput_module = load_xinput_library();
+ if (m_xinput_module == NULL)
+ {
+ osd_printf_error("Failed to load xinput library. Error: %u\n", (unsigned int)GetLastError());
+ return -1;
+ }
+
+ if (load_xinput_exports() != 0)
+ {
+ osd_printf_error("Failed to load exported XInput functions from library\n");
+ return -1;
+ }
+
+ m_initialized = true;
+ return 0;
+ }
+
+ DWORD load_xinput_exports()
+ {
+ m_pfnXInputGetState = (PFN_XINPUTGETSTATE)GetProcAddress(m_xinput_module, "XInputGetState");
+ m_pfnXInputGetCapabilities = (PFN_XINPUTGETCAPS)GetProcAddress(m_xinput_module, "XInputGetCapabilities");
+
+ if (m_pfnXInputGetState == nullptr
+ || m_pfnXInputGetCapabilities == nullptr)
+ {
+ return ERROR_NOT_FOUND;
+ }
+
+ return 0;
+ }
+
+ static HMODULE load_xinput_library()
+ {
+ // Attempt to load the Windows 8/10 version of Xinput first
+ HMODULE module = LoadLibrary(L"xinput1_4.dll");
+
+ // Fall back to the one from DX SDK
+ if (module == NULL)
+ {
+ module = LoadLibrary(L"xinput9_1_0.dll");
+ }
+
+ // If we still didn't load it, fail
+ if (module == NULL)
+ {
+ osd_printf_warning("Could not load any verions of the XInput Library.\n");
+ SetLastError(ERROR_DLL_NOT_FOUND);
+ }
+
+ return module;
+ }
+
+public:
+ inline DWORD XInputGetState(DWORD dwUserIndex, XINPUT_STATE* pState)
+ {
+ return m_pfnXInputGetState(dwUserIndex, pState);
+ }
+
+ inline DWORD XInputGetCapabilities(DWORD dwUserIndex, DWORD dwFlags, XINPUT_CAPABILITIES* pCapabilities)
+ {
+ return m_pfnXInputGetCapabilities(dwUserIndex, dwFlags, pCapabilities);
+ }
+
+ static DWORD get_interface(xinput_interface **ppinterface)
+ {
+ static xinput_interface s_instance;
+ DWORD error = s_instance.initialize();
+ if (error == 0)
+ {
+ *ppinterface = &s_instance;
+ }
+
+ return error;
+ }
+};
+
+//============================================================
+// xinput_joystick_device
+//============================================================
+
+class xinput_joystick_device : public device_info
+{
+public:
+ gamepad_state gamepad;
+ xinput_api_state xinput_state;
+
+private:
+ xinput_interface* xinput_api;
+
+public:
+ xinput_joystick_device(running_machine &machine, const char *name, input_module &module)
+ : device_info(machine, name, DEVICE_CLASS_JOYSTICK, module),
+ gamepad({0}),
+ xinput_state({0})
+ {
+ // Attempt to get the xinput interface
+ xinput_api = nullptr;
+ xinput_interface::get_interface(&xinput_api);
+ }
+
+ void poll() override
+ {
+ // Nothing we can do if for some reason the API couldn't be loaded
+ if (xinput_api == nullptr)
+ return;
+
+ // poll the device first
+ HRESULT result = xinput_api->XInputGetState(xinput_state.playerIndex, &xinput_state.xstate);
+
+ // If we can't poll the device, skip
+ if (FAILED(result))
+ return;
+
+ // Copy the XState into State
+ // Start with the POV (DPAD)
+ for (int povindex = 0; povindex < XINPUT_MAX_POV; povindex++)
+ {
+ int currentPov = xinput_pov_dir[povindex];
+ gamepad.rgbPov[currentPov] = (xinput_state.xstate.Gamepad.wButtons & currentPov) ? 0xFF : 0;
+ }
+
+ // Now do the buttons
+ for (int buttonindex = 0; buttonindex < XINPUT_MAX_BUTTONS; buttonindex++)
+ {
+ int currentButton = xinput_buttons[buttonindex];
+ gamepad.rgbButtons[buttonindex] = (xinput_state.xstate.Gamepad.wButtons & currentButton) ? 0xFF : 0;
+ }
+
+ // Now grab the axis values
+ // Each of the thumbstick axis members is a signed value between -32768 and 32767 describing the position of the thumbstick
+ // However, the Y axis values are inverted from what MAME expects, so multiply by -1 first
+ gamepad.sThumbLX = normalize_absolute_axis(xinput_state.xstate.Gamepad.sThumbLX, XINPUT_AXIS_MINVALUE, XINPUT_AXIS_MAXVALUE);
+ gamepad.sThumbLY = normalize_absolute_axis(xinput_state.xstate.Gamepad.sThumbLY * -1, XINPUT_AXIS_MINVALUE, XINPUT_AXIS_MAXVALUE);
+ gamepad.sThumbRX = normalize_absolute_axis(xinput_state.xstate.Gamepad.sThumbRX, XINPUT_AXIS_MINVALUE, XINPUT_AXIS_MAXVALUE);
+ gamepad.sThumbRY = normalize_absolute_axis(xinput_state.xstate.Gamepad.sThumbRY * -1, XINPUT_AXIS_MINVALUE, XINPUT_AXIS_MAXVALUE);
+
+ // Now the triggers
+ gamepad.bLeftTrigger = xinput_state.xstate.Gamepad.bLeftTrigger;
+ gamepad.bRightTrigger = xinput_state.xstate.Gamepad.bRightTrigger;
+ }
+
+ void reset() override
+ {
+ memset(&gamepad, 0, sizeof(gamepad));
+ }
+};
+
+//============================================================
+// xinput_joystick_module
+//============================================================
+
+class xinput_joystick_module : public wininput_module
+{
+private:
+ xinput_interface* xinput_api;
+
+public:
+ xinput_joystick_module()
+ : wininput_module(OSD_JOYSTICKINPUT_PROVIDER, "xinput"),
+ xinput_api(nullptr)
+ {
+ }
+
+ int init(const osd_options &options) override
+ {
+ // Call the base
+ int status = wininput_module::init(options);
+ if (status != 0)
+ return status;
+
+ // Make sure we can get the xinput API
+ status = xinput_interface::get_interface(&xinput_api);
+ if (status != 0)
+ {
+ osd_printf_error("xinput_joystick_module failed to get XInput interface! Error: %u\n", (unsigned int)status);
+ return -1;
+ }
+
+ return 0;
+ }
+
+protected:
+ virtual void input_init(running_machine &machine) override
+ {
+ // The Xinput API should have been obtained already
+ assert(xinput_api != nullptr);
+
+ xinput_joystick_device *devinfo;
+
+ // Loop through each gamepad to determine if they are connected
+ for (UINT i = 0; i < XUSER_MAX_COUNT; i++)
+ {
+ XINPUT_STATE state = {0};
+
+ if (xinput_api->XInputGetState(i, &state) == ERROR_SUCCESS)
+ {
+ // allocate and link in a new device
+ devinfo = create_xinput_device(machine, i);
+ if (devinfo == nullptr)
+ continue;
+
+ // Add the axes
+ for (int i = 0; i < XINPUT_MAX_AXIS; i++)
+ {
+ devinfo->device()->add_item(
+ xinput_axis_name[i],
+ xinput_axis_ids[i],
+ generic_axis_get_state,
+ &devinfo->gamepad.sThumbLX + i);
+ }
+
+ // Populate the POVs
+ // For XBOX, we treat the DPAD as a hat switch
+ for (int povnum = 0; povnum < XINPUT_MAX_POV; povnum++)
+ {
+ devinfo->device()->add_item(
+ xinput_pov_names[povnum],
+ ITEM_ID_OTHER_SWITCH,
+ generic_button_get_state,
+ &devinfo->gamepad.rgbPov[povnum]);
+ }
+
+ // populate the buttons
+ for (int butnum = 0; butnum < XINPUT_MAX_BUTTONS; butnum++)
+ {
+ devinfo->device()->add_item(
+ xinput_button_names[butnum],
+ (input_item_id)(ITEM_ID_BUTTON1 + butnum),
+ generic_button_get_state,
+ &devinfo->gamepad.rgbButtons[butnum]);
+ }
+
+ devinfo->device()->add_item(
+ "Left Trigger",
+ (input_item_id)(ITEM_ID_BUTTON1 + XINPUT_MAX_BUTTONS),
+ generic_button_get_state,
+ &devinfo->gamepad.bLeftTrigger);
+
+ devinfo->device()->add_item(
+ "Right Trigger",
+ (input_item_id)(ITEM_ID_BUTTON1 + XINPUT_MAX_BUTTONS + 1),
+ generic_button_get_state,
+ &devinfo->gamepad.bRightTrigger);
+ }
+ }
+ }
+
+ private:
+ //============================================================
+ // create_xinput_device
+ //============================================================
+
+ xinput_joystick_device * create_xinput_device(running_machine &machine, UINT index)
+ {
+ xinput_joystick_device *devinfo;
+
+ XINPUT_CAPABILITIES caps = {0};
+ if (FAILED(xinput_api->XInputGetCapabilities(index, 0, &caps)))
+ {
+ // If we can't get the capabilities skip this device
+ return nullptr;
+ }
+
+ char device_name[16];
+ snprintf(device_name, sizeof(device_name), "XInput Player %u", index + 1);
+
+ // allocate the device object
+ devinfo = devicelist()->create_device<xinput_joystick_device>(machine, device_name, *this);
+
+ // Set the player ID
+ devinfo->xinput_state.playerIndex = index;
+
+ // Assign the caps we captured earlier
+ devinfo->xinput_state.caps = caps;
+
+ return devinfo;
+ }
+};
+
+#else
+MODULE_NOT_SUPPORTED(xinput_joystick_module, OSD_KEYBOARDINPUT_PROVIDER, "xinput")
+#endif
+
+MODULE_DEFINITION(JOYSTICKINPUT_XINPUT, xinput_joystick_module) \ No newline at end of file
diff --git a/src/osd/modules/lib/osdlib_os2.cpp b/src/osd/modules/lib/osdlib_os2.cpp
deleted file mode 100644
index c1aea62f489..00000000000
--- a/src/osd/modules/lib/osdlib_os2.cpp
+++ /dev/null
@@ -1,292 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// sdlos_*.c - OS specific low level code
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-//============================================================
-
-// standard sdl header
-#include "sdlinc.h"
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-
-#define INCL_DOS
-#include <os2.h>
-
-// MAME headers
-#include "osdcore.h"
-#include "osdlib.h"
-
-//============================================================
-// osd_getenv
-//============================================================
-
-const char *osd_getenv(const char *name)
-{
- return getenv(name);
-}
-
-//============================================================
-// osd_setenv
-//============================================================
-
-int osd_setenv(const char *name, const char *value, int overwrite)
-{
- return setenv(name, value, overwrite);
-}
-
-//============================================================
-// osd_process_kill
-//============================================================
-
-void osd_process_kill(void)
-{
- PPIB ppib;
-
- DosGetInfoBlocks(NULL, &ppib);
- DosKillProcess(DKP_PROCESSTREE, ppib->pib_ulpid);
-}
-
-//============================================================
-// osd_num_processors
-//============================================================
-
-int osd_get_num_processors(void)
-{
- ULONG numprocs = 1;
-
- DosQuerySysInfo(QSV_NUMPROCESSORS, QSV_NUMPROCESSORS, &numprocs, sizeof(numprocs));
-
- return numprocs;
-}
-
-//============================================================
-// osd_malloc
-//============================================================
-
-void *osd_malloc(size_t size)
-{
-#ifndef MALLOC_DEBUG
- return malloc(size);
-#else
-#error "MALLOC_DEBUG not yet supported"
-#endif
-}
-
-
-//============================================================
-// osd_malloc_array
-//============================================================
-
-void *osd_malloc_array(size_t size)
-{
-#ifndef MALLOC_DEBUG
- return malloc(size);
-#else
-#error "MALLOC_DEBUG not yet supported"
-#endif
-}
-
-
-//============================================================
-// osd_free
-//============================================================
-
-void osd_free(void *ptr)
-{
-#ifndef MALLOC_DEBUG
- free(ptr);
-#else
-#error "MALLOC_DEBUG not yet supported"
-#endif
-}
-
-
-//============================================================
-// osd_alloc_executable
-//
-// allocates "size" bytes of executable memory. this must take
-// things like NX support into account.
-//============================================================
-
-void *osd_alloc_executable(size_t size)
-{
- void *p;
-
- DosAllocMem( &p, size, fALLOC );
- return p;
-}
-
-//============================================================
-// osd_free_executable
-//
-// frees memory allocated with osd_alloc_executable
-//============================================================
-
-void osd_free_executable(void *ptr, size_t size)
-{
- DosFreeMem( ptr );
-}
-
-//============================================================
-// osd_break_into_debugger
-//============================================================
-
-void osd_break_into_debugger(const char *message)
-{
- printf("Ignoring MAME exception: %s\n", message);
-}
-
-//============================================================
-// PROTOTYPES
-//============================================================
-
-
-static osd_ticks_t init_cycle_counter(void);
-static osd_ticks_t performance_cycle_counter(void);
-
-//============================================================
-// STATIC VARIABLES
-//============================================================
-
-// global cycle_counter function and divider
-static osd_ticks_t (*cycle_counter)(void) = init_cycle_counter;
-static osd_ticks_t (*ticks_counter)(void) = init_cycle_counter;
-static osd_ticks_t ticks_per_second;
-
-//============================================================
-// init_cycle_counter
-//
-// to avoid total grossness, this function is split by subarch
-//============================================================
-
-static osd_ticks_t init_cycle_counter(void)
-{
- osd_ticks_t start, end;
- osd_ticks_t a, b;
-
- ULONG frequency;
- PTIB ptib;
- ULONG ulClass;
- ULONG ulDelta;
-
- DosGetInfoBlocks( &ptib, NULL );
- ulClass = HIBYTE( ptib->tib_ptib2->tib2_ulpri );
- ulDelta = LOBYTE( ptib->tib_ptib2->tib2_ulpri );
-
- if ( DosTmrQueryFreq( &frequency ) == 0 )
- {
- // use performance counter if available as it is constant
- cycle_counter = performance_cycle_counter;
- ticks_counter = performance_cycle_counter;
-
- ticks_per_second = frequency;
-
- // return the current cycle count
- return (*cycle_counter)();
- }
- else
- {
- fprintf(stderr, "No Timer available!\n");
- exit(-1);
- }
-
- // temporarily set our priority higher
- DosSetPriority( PRTYS_THREAD, PRTYC_TIMECRITICAL, PRTYD_MAXIMUM, 0 );
-
- // wait for an edge on the timeGetTime call
- a = SDL_GetTicks();
- do
- {
- b = SDL_GetTicks();
- } while (a == b);
-
- // get the starting cycle count
- start = (*cycle_counter)();
-
- // now wait for 1/4 second total
- do
- {
- a = SDL_GetTicks();
- } while (a - b < 250);
-
- // get the ending cycle count
- end = (*cycle_counter)();
-
- // compute ticks_per_sec
- ticks_per_second = (end - start) * 4;
-
- // restore our priority
- DosSetPriority( PRTYS_THREAD, ulClass, ulDelta, 0 );
-
- // return the current cycle count
- return (*cycle_counter)();
-}
-
-//============================================================
-// performance_cycle_counter
-//============================================================
-
-static osd_ticks_t performance_cycle_counter(void)
-{
- QWORD qwTime;
-
- DosTmrQueryTime( &qwTime );
- return (osd_ticks_t)qwTime.ulLo;
-}
-
-//============================================================
-// osd_ticks
-//============================================================
-
-osd_ticks_t osd_ticks(void)
-{
- return (*cycle_counter)();
-}
-
-
-//============================================================
-// osd_ticks_per_second
-//============================================================
-
-osd_ticks_t osd_ticks_per_second(void)
-{
- if (ticks_per_second == 0)
- {
- // if we haven't computed the value yet, there's no time like the present
- init_cycle_counter();
- }
- return ticks_per_second;
-}
-
-
-//============================================================
-// osd_sleep
-//============================================================
-
-void osd_sleep(osd_ticks_t duration)
-{
- UINT32 msec;
-
- // make sure we've computed ticks_per_second
- if (ticks_per_second == 0)
- (void)osd_ticks();
-
- // convert to milliseconds, rounding down
- msec = (UINT32)(duration * 1000 / ticks_per_second);
-
- // only sleep if at least 2 full milliseconds
- if (msec >= 2)
- {
- // take a couple of msecs off the top for good measure
- msec -= 2;
- usleep(msec*1000);
- }
-}
diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp
index 7317876eaca..5cb7cb85da4 100644
--- a/src/osd/modules/lib/osdobj_common.cpp
+++ b/src/osd/modules/lib/osdobj_common.cpp
@@ -25,6 +25,12 @@ const options_entry osd_options::s_option_entries[] =
{ nullptr, nullptr, OPTION_HEADER, "OSD FONT OPTIONS" },
{ OSD_FONT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for ui font: " },
+ { nullptr, nullptr, OPTION_HEADER, "OSD INPUT OPTIONS" },
+ { OSD_KEYBOARDINPUT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for keyboard input: " },
+ { OSD_MOUSEINPUT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for mouse input: " },
+ { OSD_LIGHTGUNINPUT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for lightgun input: " },
+ { OSD_JOYSTICKINPUT_PROVIDER, OSDOPTVAL_AUTO, OPTION_STRING, "provider for joystick input: " },
+
{ nullptr, nullptr, OPTION_HEADER, "OSD CLI OPTIONS" },
{ OSDCOMMAND_LIST_MIDI_DEVICES ";mlist", "0", OPTION_COMMAND, "list available MIDI I/O devices" },
{ OSDCOMMAND_LIST_NETWORK_ADAPTERS ";nlist", "0", OPTION_COMMAND, "list available network adapters" },
@@ -155,7 +161,11 @@ osd_common_t::osd_common_t(osd_options &options)
m_options(options),
m_print_verbose(false),
m_sound(nullptr),
- m_debugger(nullptr)
+ m_debugger(nullptr),
+ m_keyboard_input(nullptr),
+ m_mouse_input(nullptr),
+ m_lightgun_input(nullptr),
+ m_joystick_input(nullptr)
{
osd_output::push(this);
}
@@ -178,6 +188,7 @@ void osd_common_t::register_options()
{
REGISTER_MODULE(m_mod_man, FONT_OSX);
REGISTER_MODULE(m_mod_man, FONT_WINDOWS);
+ REGISTER_MODULE(m_mod_man, FONT_DWRITE);
REGISTER_MODULE(m_mod_man, FONT_SDL);
REGISTER_MODULE(m_mod_man, FONT_NONE);
@@ -207,6 +218,27 @@ void osd_common_t::register_options()
#endif
REGISTER_MODULE(m_mod_man, MIDI_NONE);
+ REGISTER_MODULE(m_mod_man, KEYBOARDINPUT_SDL);
+ REGISTER_MODULE(m_mod_man, KEYBOARDINPUT_RAWINPUT);
+ REGISTER_MODULE(m_mod_man, KEYBOARDINPUT_DINPUT);
+ REGISTER_MODULE(m_mod_man, KEYBOARDINPUT_WIN32);
+ REGISTER_MODULE(m_mod_man, KEYBOARD_NONE);
+
+ REGISTER_MODULE(m_mod_man, MOUSEINPUT_SDL);
+ REGISTER_MODULE(m_mod_man, MOUSEINPUT_RAWINPUT);
+ REGISTER_MODULE(m_mod_man, MOUSEINPUT_DINPUT);
+ REGISTER_MODULE(m_mod_man, MOUSEINPUT_WIN32);
+ REGISTER_MODULE(m_mod_man, MOUSE_NONE);
+
+ REGISTER_MODULE(m_mod_man, LIGHTGUN_X11);
+ REGISTER_MODULE(m_mod_man, LIGHTGUNINPUT_WIN32);
+ REGISTER_MODULE(m_mod_man, LIGHTGUN_NONE);
+
+ REGISTER_MODULE(m_mod_man, JOYSTICKINPUT_SDL);
+ REGISTER_MODULE(m_mod_man, JOYSTICKINPUT_DINPUT);
+ REGISTER_MODULE(m_mod_man, JOYSTICKINPUT_XINPUT);
+ REGISTER_MODULE(m_mod_man, JOYSTICK_NONE);
+
// after initialization we know which modules are supported
const char *names[20];
@@ -217,6 +249,30 @@ void osd_common_t::register_options()
dnames.push_back(names[i]);
update_option(OSD_FONT_PROVIDER, dnames);
+ m_mod_man.get_module_names(OSD_KEYBOARDINPUT_PROVIDER, 20, &num, names);
+ dnames.clear();
+ for (int i = 0; i < num; i++)
+ dnames.push_back(names[i]);
+ update_option(OSD_KEYBOARDINPUT_PROVIDER, dnames);
+
+ m_mod_man.get_module_names(OSD_MOUSEINPUT_PROVIDER, 20, &num, names);
+ dnames.clear();
+ for (int i = 0; i < num; i++)
+ dnames.push_back(names[i]);
+ update_option(OSD_MOUSEINPUT_PROVIDER, dnames);
+
+ m_mod_man.get_module_names(OSD_LIGHTGUNINPUT_PROVIDER, 20, &num, names);
+ dnames.clear();
+ for (int i = 0; i < num; i++)
+ dnames.push_back(names[i]);
+ update_option(OSD_LIGHTGUNINPUT_PROVIDER, dnames);
+
+ m_mod_man.get_module_names(OSD_JOYSTICKINPUT_PROVIDER, 20, &num, names);
+ dnames.clear();
+ for (int i = 0; i < num; i++)
+ dnames.push_back(names[i]);
+ update_option(OSD_JOYSTICKINPUT_PROVIDER, dnames);
+
m_mod_man.get_module_names(OSD_SOUND_PROVIDER, 20, &num, names);
dnames.clear();
for (int i = 0; i < num; i++)
@@ -545,15 +601,14 @@ void osd_common_t::init_subsystems()
exit(-1);
}
- input_init();
- // we need pause callbacks
- machine().add_notifier(MACHINE_NOTIFY_PAUSE, machine_notify_delegate(FUNC(osd_common_t::input_pause), this));
- machine().add_notifier(MACHINE_NOTIFY_RESUME, machine_notify_delegate(FUNC(osd_common_t::input_resume), this));
-
output_init();
- m_font_module = select_module_options<font_module *>(options(), OSD_FONT_PROVIDER);
+ m_keyboard_input = select_module_options<input_module *>(options(), OSD_KEYBOARDINPUT_PROVIDER);
+ m_mouse_input = select_module_options<input_module *>(options(), OSD_MOUSEINPUT_PROVIDER);
+ m_lightgun_input = select_module_options<input_module *>(options(), OSD_LIGHTGUNINPUT_PROVIDER);
+ m_joystick_input = select_module_options<input_module *>(options(), OSD_JOYSTICKINPUT_PROVIDER);
+ m_font_module = select_module_options<font_module *>(options(), OSD_FONT_PROVIDER);
m_sound = select_module_options<sound_module *>(options(), OSD_SOUND_PROVIDER);
m_sound->m_sample_rate = options().sample_rate();
m_sound->m_audio_latency = options().audio_latency();
@@ -566,6 +621,10 @@ void osd_common_t::init_subsystems()
m_mod_man.init(options());
+ input_init();
+ // we need pause callbacks
+ machine().add_notifier(MACHINE_NOTIFY_PAUSE, machine_notify_delegate(FUNC(osd_common_t::input_pause), this));
+ machine().add_notifier(MACHINE_NOTIFY_RESUME, machine_notify_delegate(FUNC(osd_common_t::input_resume), this));
}
bool osd_common_t::video_init()
@@ -589,15 +648,27 @@ void osd_common_t::video_register()
bool osd_common_t::input_init()
{
+ m_keyboard_input->input_init(machine());
+ m_mouse_input->input_init(machine());
+ m_lightgun_input->input_init(machine());
+ m_joystick_input->input_init(machine());
return true;
}
void osd_common_t::input_pause()
{
+ m_keyboard_input->pause();
+ m_mouse_input->pause();
+ m_lightgun_input->pause();
+ m_joystick_input->pause();
}
void osd_common_t::input_resume()
{
+ m_keyboard_input->resume();
+ m_mouse_input->resume();
+ m_lightgun_input->resume();
+ m_joystick_input->resume();
}
bool osd_common_t::output_init()
@@ -622,6 +693,10 @@ void osd_common_t::window_exit()
void osd_common_t::input_exit()
{
+ m_keyboard_input->exit();
+ m_mouse_input->exit();
+ m_lightgun_input->exit();
+ m_joystick_input->exit();
}
void osd_common_t::output_exit()
diff --git a/src/osd/modules/lib/osdobj_common.h b/src/osd/modules/lib/osdobj_common.h
index d4fba565964..592391b5161 100644
--- a/src/osd/modules/lib/osdobj_common.h
+++ b/src/osd/modules/lib/osdobj_common.h
@@ -16,6 +16,7 @@
#include "osdepend.h"
#include "modules/osdmodule.h"
#include "modules/font/font_module.h"
+#include "modules/input/input_module.h"
#include "modules/sound/sound_module.h"
#include "modules/debugger/debug_module.h"
#include "modules/netdev/netdev_module.h"
@@ -118,10 +119,10 @@ public:
const char *aspect() const { return value(OSDOPTION_ASPECT); }
const char *resolution() const { return value(OSDOPTION_RESOLUTION); }
const char *view() const { return value(OSDOPTION_VIEW); }
- const char *screen(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_SCREEN, index); return value(temp.c_str()); }
- const char *aspect(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_ASPECT, index); return value(temp.c_str()); }
- const char *resolution(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_RESOLUTION, index); return value(temp.c_str()); }
- const char *view(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_VIEW, index); return value(temp.c_str()); }
+ const char *screen(int index) const { return value(string_format("%s%d", OSDOPTION_SCREEN, index).c_str()); }
+ const char *aspect(int index) const { return value(string_format("%s%d", OSDOPTION_ASPECT, index).c_str()); }
+ const char *resolution(int index) const { return value(string_format("%s%d", OSDOPTION_RESOLUTION, index).c_str()); }
+ const char *view(int index) const { return value(string_format("%s%d", OSDOPTION_VIEW, index).c_str()); }
// full screen options
bool switch_res() const { return bool_value(OSDOPTION_SWITCHRES); }
@@ -137,8 +138,8 @@ public:
bool gl_pbo() const { return bool_value(OSDOPTION_GL_PBO); }
bool gl_glsl() const { return bool_value(OSDOPTION_GL_GLSL); }
bool glsl_filter() const { return bool_value(OSDOPTION_GLSL_FILTER); }
- const char *shader_mame(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_SHADER_MAME, index); return value(temp.c_str()); }
- const char *shader_screen(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_SHADER_SCREEN, index); return value(temp.c_str()); }
+ const char *shader_mame(int index) const { return value(string_format("%s%d", OSDOPTION_SHADER_MAME, index).c_str()); }
+ const char *shader_screen(int index) const { return value(string_format("%s%d", OSDOPTION_SHADER_SCREEN, index).c_str()); }
// sound options
const char *sound() const { return value(OSDOPTION_SOUND); }
@@ -146,7 +147,7 @@ public:
// CoreAudio specific options
const char *audio_output() const { return value(OSDOPTION_AUDIO_OUTPUT); }
- const char *audio_effect(int index) const { std::string temp; strprintf(temp, "%s%d", OSDOPTION_AUDIO_EFFECT, index); return value(temp.c_str()); }
+ const char *audio_effect(int index) const { return value(string_format("%s%d", OSDOPTION_AUDIO_EFFECT, index).c_str()); }
private:
static const options_entry s_option_entries[];
@@ -269,6 +270,10 @@ protected:
sound_module* m_sound;
debug_module* m_debugger;
midi_module* m_midi;
+ input_module* m_keyboard_input;
+ input_module* m_mouse_input;
+ input_module* m_lightgun_input;
+ input_module* m_joystick_input;
private:
std::vector<const char *> m_video_names;
};
diff --git a/src/osd/modules/netdev/pcap.cpp b/src/osd/modules/netdev/pcap.cpp
index 1e4f7dbea5e..4c85c1367c0 100644
--- a/src/osd/modules/netdev/pcap.cpp
+++ b/src/osd/modules/netdev/pcap.cpp
@@ -314,8 +314,8 @@ int pcap_module::init(const osd_options &options)
void pcap_module::exit()
{
clear_netdev();
- FreeLibrary(handle);
- handle = NULL;
+ //FreeLibrary(handle);
+ //handle = NULL;
}
#else
#include "modules/osdmodule.h"
diff --git a/src/osd/modules/osdwindow.cpp b/src/osd/modules/osdwindow.cpp
index 29b77cd52e5..2894092ac30 100644
--- a/src/osd/modules/osdwindow.cpp
+++ b/src/osd/modules/osdwindow.cpp
@@ -60,4 +60,4 @@ osd_renderer* osd_renderer::make_for_type(int mode, osd_window* window, int extr
default:
return nullptr;
}
-} \ No newline at end of file
+}
diff --git a/src/osd/modules/osdwindow.h b/src/osd/modules/osdwindow.h
index 5d9d7977968..6081d47c010 100644
--- a/src/osd/modules/osdwindow.h
+++ b/src/osd/modules/osdwindow.h
@@ -192,8 +192,8 @@ public:
render_primitive_list *m_primlist;
osd_window_config m_win_config;
- int m_index;
- osd_window *m_main;
+ int m_index;
+ osd_window *m_main;
protected:
int m_prescale;
};
@@ -241,11 +241,11 @@ public:
protected:
/* Internal flags */
static const int FI_CHANGED = 0x010000;
- bool m_sliders_dirty;
+ bool m_sliders_dirty;
private:
- osd_window *m_window;
- int m_flags;
+ osd_window *m_window;
+ int m_flags;
};
diff --git a/src/osd/modules/render/bgfx/blendreader.cpp b/src/osd/modules/render/bgfx/blendreader.cpp
index 45020a08027..f96f20a4ba8 100644
--- a/src/osd/modules/render/bgfx/blendreader.cpp
+++ b/src/osd/modules/render/bgfx/blendreader.cpp
@@ -11,41 +11,41 @@
#include "blendreader.h"
const blend_reader::string_to_enum blend_reader::EQUATION_NAMES[blend_reader::EQUATION_COUNT] = {
- { "add", BGFX_STATE_BLEND_EQUATION_ADD },
- { "sub", BGFX_STATE_BLEND_EQUATION_SUB },
- { "subtract", BGFX_STATE_BLEND_EQUATION_SUB },
- { "revSub", BGFX_STATE_BLEND_EQUATION_REVSUB },
- { "revSubtract", BGFX_STATE_BLEND_EQUATION_REVSUB },
- { "min", BGFX_STATE_BLEND_EQUATION_MIN },
- { "max", BGFX_STATE_BLEND_EQUATION_MAX }
+ { "add", BGFX_STATE_BLEND_EQUATION_ADD },
+ { "sub", BGFX_STATE_BLEND_EQUATION_SUB },
+ { "subtract", BGFX_STATE_BLEND_EQUATION_SUB },
+ { "revSub", BGFX_STATE_BLEND_EQUATION_REVSUB },
+ { "revSubtract", BGFX_STATE_BLEND_EQUATION_REVSUB },
+ { "min", BGFX_STATE_BLEND_EQUATION_MIN },
+ { "max", BGFX_STATE_BLEND_EQUATION_MAX }
};
const blend_reader::string_to_enum blend_reader::FUNCTION_NAMES[blend_reader::FUNCTION_COUNT] = {
- { "0", BGFX_STATE_BLEND_ZERO },
- { "zero", BGFX_STATE_BLEND_ZERO },
- { "1", BGFX_STATE_BLEND_ONE },
- { "one", BGFX_STATE_BLEND_ONE },
- { "srcColor", BGFX_STATE_BLEND_SRC_COLOR },
- { "1-srcColor", BGFX_STATE_BLEND_INV_SRC_COLOR },
- { "invSrcColor", BGFX_STATE_BLEND_INV_SRC_COLOR },
- { "dstColor", BGFX_STATE_BLEND_DST_COLOR },
- { "1-dstColor", BGFX_STATE_BLEND_INV_DST_COLOR },
- { "invDstColor", BGFX_STATE_BLEND_INV_DST_COLOR },
- { "srcAlpha", BGFX_STATE_BLEND_SRC_ALPHA },
- { "1-srcAlpha", BGFX_STATE_BLEND_INV_SRC_ALPHA },
- { "invSrcAlpha", BGFX_STATE_BLEND_INV_SRC_ALPHA },
- { "dstAlpha", BGFX_STATE_BLEND_DST_ALPHA },
- { "1-dstAlpha", BGFX_STATE_BLEND_INV_DST_ALPHA },
- { "invDstAlpha", BGFX_STATE_BLEND_INV_DST_ALPHA }
+ { "0", BGFX_STATE_BLEND_ZERO },
+ { "zero", BGFX_STATE_BLEND_ZERO },
+ { "1", BGFX_STATE_BLEND_ONE },
+ { "one", BGFX_STATE_BLEND_ONE },
+ { "srcColor", BGFX_STATE_BLEND_SRC_COLOR },
+ { "1-srcColor", BGFX_STATE_BLEND_INV_SRC_COLOR },
+ { "invSrcColor", BGFX_STATE_BLEND_INV_SRC_COLOR },
+ { "dstColor", BGFX_STATE_BLEND_DST_COLOR },
+ { "1-dstColor", BGFX_STATE_BLEND_INV_DST_COLOR },
+ { "invDstColor", BGFX_STATE_BLEND_INV_DST_COLOR },
+ { "srcAlpha", BGFX_STATE_BLEND_SRC_ALPHA },
+ { "1-srcAlpha", BGFX_STATE_BLEND_INV_SRC_ALPHA },
+ { "invSrcAlpha", BGFX_STATE_BLEND_INV_SRC_ALPHA },
+ { "dstAlpha", BGFX_STATE_BLEND_DST_ALPHA },
+ { "1-dstAlpha", BGFX_STATE_BLEND_INV_DST_ALPHA },
+ { "invDstAlpha", BGFX_STATE_BLEND_INV_DST_ALPHA }
};
uint64_t blend_reader::read_from_value(const Value& value)
{
- uint64_t equation = get_enum_from_value(value, "equation", BGFX_STATE_BLEND_EQUATION_ADD, EQUATION_NAMES, EQUATION_COUNT);
- uint64_t srccolor = get_enum_from_value(value, "srcColor", BGFX_STATE_BLEND_ONE, FUNCTION_NAMES, FUNCTION_COUNT);
- uint64_t dstcolor = get_enum_from_value(value, "dstColor", BGFX_STATE_BLEND_ZERO, FUNCTION_NAMES, FUNCTION_COUNT);
- uint64_t srcalpha = get_enum_from_value(value, "srcAlpha", BGFX_STATE_BLEND_ONE, FUNCTION_NAMES, FUNCTION_COUNT);
- uint64_t dstalpha = get_enum_from_value(value, "dstAlpha", BGFX_STATE_BLEND_ZERO, FUNCTION_NAMES, FUNCTION_COUNT);
+ uint64_t equation = get_enum_from_value(value, "equation", BGFX_STATE_BLEND_EQUATION_ADD, EQUATION_NAMES, EQUATION_COUNT);
+ uint64_t srccolor = get_enum_from_value(value, "srcColor", BGFX_STATE_BLEND_ONE, FUNCTION_NAMES, FUNCTION_COUNT);
+ uint64_t dstcolor = get_enum_from_value(value, "dstColor", BGFX_STATE_BLEND_ZERO, FUNCTION_NAMES, FUNCTION_COUNT);
+ uint64_t srcalpha = get_enum_from_value(value, "srcAlpha", BGFX_STATE_BLEND_ONE, FUNCTION_NAMES, FUNCTION_COUNT);
+ uint64_t dstalpha = get_enum_from_value(value, "dstAlpha", BGFX_STATE_BLEND_ZERO, FUNCTION_NAMES, FUNCTION_COUNT);
- return BGFX_STATE_BLEND_EQUATION(equation) | BGFX_STATE_BLEND_FUNC_SEPARATE(srccolor, dstcolor, srcalpha, dstalpha);
+ return BGFX_STATE_BLEND_EQUATION(equation) | BGFX_STATE_BLEND_FUNC_SEPARATE(srccolor, dstcolor, srcalpha, dstalpha);
}
diff --git a/src/osd/modules/render/bgfx/blendreader.h b/src/osd/modules/render/bgfx/blendreader.h
index 6dd16ae5d88..732ab47b1da 100644
--- a/src/osd/modules/render/bgfx/blendreader.h
+++ b/src/osd/modules/render/bgfx/blendreader.h
@@ -19,13 +19,13 @@ using namespace rapidjson;
class blend_reader : public state_reader {
public:
- static uint64_t read_from_value(const Value& value);
+ static uint64_t read_from_value(const Value& value);
private:
- static const int EQUATION_COUNT = 7;
- static const string_to_enum EQUATION_NAMES[EQUATION_COUNT];
- static const int FUNCTION_COUNT = 16;
- static const string_to_enum FUNCTION_NAMES[FUNCTION_COUNT];
+ static const int EQUATION_COUNT = 7;
+ static const string_to_enum EQUATION_NAMES[EQUATION_COUNT];
+ static const int FUNCTION_COUNT = 16;
+ static const string_to_enum FUNCTION_NAMES[FUNCTION_COUNT];
};
-#endif // __DRAWBGFX_BLEND_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_BLEND_READER__
diff --git a/src/osd/modules/render/bgfx/chain.cpp b/src/osd/modules/render/bgfx/chain.cpp
index 271695b56a1..6827864df7e 100644
--- a/src/osd/modules/render/bgfx/chain.cpp
+++ b/src/osd/modules/render/bgfx/chain.cpp
@@ -23,6 +23,18 @@ bgfx_chain::bgfx_chain(std::string name, std::string author, std::vector<bgfx_sl
bgfx_chain::~bgfx_chain()
{
+ for (bgfx_slider* slider : m_sliders)
+ {
+ delete slider;
+ }
+ for (bgfx_parameter* param : m_params)
+ {
+ delete param;
+ }
+ for (bgfx_chain_entry* entry : m_entries)
+ {
+ delete entry;
+ }
}
void bgfx_chain::submit(render_primitive* prim, int view)
diff --git a/src/osd/modules/render/bgfx/chain.h b/src/osd/modules/render/bgfx/chain.h
index c34b1830681..7721bbaf74b 100644
--- a/src/osd/modules/render/bgfx/chain.h
+++ b/src/osd/modules/render/bgfx/chain.h
@@ -22,17 +22,17 @@ class render_primitive;
class bgfx_chain
{
public:
- bgfx_chain(std::string name, std::string author, std::vector<bgfx_slider*> sliders, std::vector<bgfx_parameter*> params, std::vector<bgfx_chain_entry*> entries);
- ~bgfx_chain();
+ bgfx_chain(std::string name, std::string author, std::vector<bgfx_slider*> sliders, std::vector<bgfx_parameter*> params, std::vector<bgfx_chain_entry*> entries);
+ ~bgfx_chain();
- void submit(render_primitive* prim, int view);
+ void submit(render_primitive* prim, int view);
private:
- std::string m_name;
- std::string m_author;
- std::vector<bgfx_slider*> m_sliders;
- std::vector<bgfx_parameter*> m_params;
- std::vector<bgfx_chain_entry*> m_entries;
+ std::string m_name;
+ std::string m_author;
+ std::vector<bgfx_slider*> m_sliders;
+ std::vector<bgfx_parameter*> m_params;
+ std::vector<bgfx_chain_entry*> m_entries;
};
-#endif // __DRAWBGFX_CHAIN__ \ No newline at end of file
+#endif // __DRAWBGFX_CHAIN__
diff --git a/src/osd/modules/render/bgfx/chainentry.h b/src/osd/modules/render/bgfx/chainentry.h
index d607dd4ec7d..83a615d28a5 100644
--- a/src/osd/modules/render/bgfx/chainentry.h
+++ b/src/osd/modules/render/bgfx/chainentry.h
@@ -27,19 +27,19 @@ class bgfx_target;
class bgfx_chain_entry
{
public:
- bgfx_chain_entry(std::string name, bgfx_effect* effect, std::vector<bgfx_input_pair>& inputs, bgfx_target* output);
- ~bgfx_chain_entry();
+ bgfx_chain_entry(std::string name, bgfx_effect* effect, std::vector<bgfx_input_pair>& inputs, bgfx_target* output);
+ ~bgfx_chain_entry();
- void submit(render_primitive* prim, int view);
+ void submit(render_primitive* prim, int view);
- // Getters
- std::string name() const { return m_name; }
+ // Getters
+ std::string name() const { return m_name; }
private:
- std::string m_name;
- bgfx_effect* m_effect;
- std::vector<bgfx_input_pair> m_inputs;
- bgfx_target* m_output;
+ std::string m_name;
+ bgfx_effect* m_effect;
+ std::vector<bgfx_input_pair> m_inputs;
+ bgfx_target* m_output;
};
-#endif // __DRAWBGFX_CHAIN_ENTRY__ \ No newline at end of file
+#endif // __DRAWBGFX_CHAIN_ENTRY__
diff --git a/src/osd/modules/render/bgfx/chainentryreader.cpp b/src/osd/modules/render/bgfx/chainentryreader.cpp
index 39338359e81..ef9322782ee 100644
--- a/src/osd/modules/render/bgfx/chainentryreader.cpp
+++ b/src/osd/modules/render/bgfx/chainentryreader.cpp
@@ -20,7 +20,7 @@
bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects)
{
- validate_parameters(value);
+ validate_parameters(value);
bgfx_effect* effect = effects.effect(value["effect"].GetString());
@@ -53,4 +53,4 @@ void chain_entry_reader::validate_parameters(const Value& value)
assert(value["shader"].IsString());
assert(value.HasMember("output"));
assert(value["output"].IsString());
-} \ No newline at end of file
+}
diff --git a/src/osd/modules/render/bgfx/chainentryreader.h b/src/osd/modules/render/bgfx/chainentryreader.h
index 8aeb1b402de..09001a6ea70 100644
--- a/src/osd/modules/render/bgfx/chainentryreader.h
+++ b/src/osd/modules/render/bgfx/chainentryreader.h
@@ -21,10 +21,10 @@ class effect_manager;
class chain_entry_reader : public state_reader
{
public:
- static bgfx_chain_entry* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects);
+ static bgfx_chain_entry* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects);
private:
- static void validate_parameters(const Value& value);
+ static void validate_parameters(const Value& value);
};
-#endif // __DRAWBGFX_CHAIN_ENTRY_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_CHAIN_ENTRY_READER__
diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp
new file mode 100644
index 00000000000..547694bd1f8
--- /dev/null
+++ b/src/osd/modules/render/bgfx/chainmanager.cpp
@@ -0,0 +1,66 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//============================================================
+//
+// chainmanager.cpp - BGFX shader chain manager
+//
+// Maintains a string-to-entry lookup of BGFX shader effect
+// chains, defined by chain.h and read by chainreader.h
+//
+//============================================================
+
+#include "emu.h"
+
+#include <rapidjson/document.h>
+
+#include <bgfx/bgfxplatform.h>
+#include <bgfx/bgfx.h>
+#include <bx/readerwriter.h>
+
+#include "chainmanager.h"
+#include "chainreader.h"
+#include "chain.h"
+
+using namespace rapidjson;
+
+chain_manager::~chain_manager()
+{
+ for (std::pair<std::string, bgfx_chain*> chain : m_chains)
+ {
+ delete chain.second;
+ }
+ m_chains.clear();
+}
+
+bgfx_chain* chain_manager::chain(std::string name)
+{
+ std::map<std::string, bgfx_chain*>::iterator iter = m_chains.find(name);
+ if (iter != m_chains.end())
+ {
+ return iter->second;
+ }
+
+ return load_chain(name);
+}
+
+bgfx_chain* chain_manager::load_chain(std::string name) {
+ std::string path = "bgfx/chains/" + name + ".json";
+
+ bx::CrtFileReader reader;
+ bx::open(&reader, path.c_str());
+
+ int32_t size = (uint32_t)bx::getSize(&reader);
+
+ char* data = new char[size + 1];
+ bx::read(&reader, reinterpret_cast<void*>(data), size);
+ bx::close(&reader);
+ data[size] = 0;
+
+ Document document;
+ document.Parse<0>(data);
+ bgfx_chain* chain = chain_reader::read_from_value(document, m_textures, m_targets, m_effects, m_width, m_height);
+
+ m_chains[name] = chain;
+
+ return chain;
+}
diff --git a/src/osd/modules/render/bgfx/chainmanager.h b/src/osd/modules/render/bgfx/chainmanager.h
new file mode 100644
index 00000000000..63c97215dec
--- /dev/null
+++ b/src/osd/modules/render/bgfx/chainmanager.h
@@ -0,0 +1,54 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz
+//============================================================
+//
+// chainmanager.h - BGFX shader chain manager
+//
+// Maintains a string-to-entry lookup of BGFX shader
+// effect chains, defined by chain.h and read by chainreader.h
+//
+//============================================================
+
+#pragma once
+
+#ifndef __DRAWBGFX_CHAIN_MANAGER__
+#define __DRAWBGFX_CHAIN_MANAGER__
+
+#include <map>
+#include <string>
+
+#include <bgfx/bgfx.h>
+
+#include "texturemanager.h"
+#include "targetmanager.h"
+#include "effectmanager.h"
+
+class bgfx_chain;
+
+class chain_manager {
+public:
+ chain_manager(texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t width, uint32_t height)
+ : m_textures(textures)
+ , m_targets(targets)
+ , m_effects(effects)
+ , m_width(width)
+ , m_height(height)
+ {
+ }
+ ~chain_manager();
+
+ // Getters
+ bgfx_chain* chain(std::string name);
+
+private:
+ bgfx_chain* load_chain(std::string name);
+
+ texture_manager& m_textures;
+ target_manager& m_targets;
+ effect_manager& m_effects;
+ uint32_t m_width;
+ uint32_t m_height;
+ std::map<std::string, bgfx_chain*> m_chains;
+};
+
+#endif // __DRAWBGFX_CHAIN_MANAGER__
diff --git a/src/osd/modules/render/bgfx/chainreader.cpp b/src/osd/modules/render/bgfx/chainreader.cpp
index 8a69e007872..392fb93fb65 100644
--- a/src/osd/modules/render/bgfx/chainreader.cpp
+++ b/src/osd/modules/render/bgfx/chainreader.cpp
@@ -20,11 +20,12 @@
bgfx_chain* chain_reader::read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height)
{
- validate_parameters(value);
+ validate_parameters(value);
std::string name = value["name"].GetString();
std::string author = value["author"].GetString();
+ // Parse sliders
std::vector<bgfx_slider*> sliders;
if (value.HasMember("sliders"))
{
@@ -35,6 +36,7 @@ bgfx_chain* chain_reader::read_from_value(const Value& value, texture_manager& t
}
}
+ // Parse parameters
std::vector<bgfx_parameter*> parameters;
if (value.HasMember("parameters"))
{
@@ -45,6 +47,7 @@ bgfx_chain* chain_reader::read_from_value(const Value& value, texture_manager& t
}
}
+ // Parse chain entries
std::vector<bgfx_chain_entry*> entries;
if (value.HasMember("passes"))
{
@@ -55,6 +58,7 @@ bgfx_chain* chain_reader::read_from_value(const Value& value, texture_manager& t
}
}
+ // Create targets
if (value.HasMember("targets"))
{
const Value& target_array = value["targets"];
@@ -92,4 +96,4 @@ void chain_reader::validate_parameters(const Value& value)
assert(value.HasMember("author"));
assert(value["author"].IsString());
assert(value.HasMember("passes"));
-} \ No newline at end of file
+}
diff --git a/src/osd/modules/render/bgfx/chainreader.h b/src/osd/modules/render/bgfx/chainreader.h
index 6e803516189..fb5dccf0d1c 100644
--- a/src/osd/modules/render/bgfx/chainreader.h
+++ b/src/osd/modules/render/bgfx/chainreader.h
@@ -21,10 +21,10 @@ class effect_manager;
class chain_reader : public state_reader
{
public:
- static bgfx_chain* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height);
+ static bgfx_chain* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height);
private:
- static void validate_parameters(const Value& value);
+ static void validate_parameters(const Value& value);
};
-#endif // __DRAWBGFX_CHAIN_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_CHAIN_READER__
diff --git a/src/osd/modules/render/bgfx/cullreader.cpp b/src/osd/modules/render/bgfx/cullreader.cpp
index 0890d731583..593e712fecb 100644
--- a/src/osd/modules/render/bgfx/cullreader.cpp
+++ b/src/osd/modules/render/bgfx/cullreader.cpp
@@ -11,12 +11,12 @@
#include "cullreader.h"
const cull_reader::string_to_enum cull_reader::MODE_NAMES[cull_reader::MODE_COUNT] = {
- { "none", 0 },
- { "cw", BGFX_STATE_CULL_CW },
- { "ccw", BGFX_STATE_CULL_CCW }
+ { "none", 0 },
+ { "cw", BGFX_STATE_CULL_CW },
+ { "ccw", BGFX_STATE_CULL_CCW }
};
uint64_t cull_reader::read_from_value(const Value& value)
{
- return get_enum_from_value(value, "mode", BGFX_STATE_CULL_CCW, MODE_NAMES, MODE_COUNT);
+ return get_enum_from_value(value, "mode", BGFX_STATE_CULL_CCW, MODE_NAMES, MODE_COUNT);
}
diff --git a/src/osd/modules/render/bgfx/cullreader.h b/src/osd/modules/render/bgfx/cullreader.h
index 432ed494cf2..5c521a108a2 100644
--- a/src/osd/modules/render/bgfx/cullreader.h
+++ b/src/osd/modules/render/bgfx/cullreader.h
@@ -15,11 +15,11 @@
class cull_reader : public state_reader {
public:
- static uint64_t read_from_value(const Value& value);
+ static uint64_t read_from_value(const Value& value);
private:
- static const int MODE_COUNT = 3;
- static const string_to_enum MODE_NAMES[MODE_COUNT];
+ static const int MODE_COUNT = 3;
+ static const string_to_enum MODE_NAMES[MODE_COUNT];
};
-#endif // __DRAWBGFX_CULL_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_CULL_READER__
diff --git a/src/osd/modules/render/bgfx/depthreader.cpp b/src/osd/modules/render/bgfx/depthreader.cpp
index 077137159fe..cdcfa1b2046 100644
--- a/src/osd/modules/render/bgfx/depthreader.cpp
+++ b/src/osd/modules/render/bgfx/depthreader.cpp
@@ -11,26 +11,26 @@
#include "depthreader.h"
const depth_reader::string_to_enum depth_reader::FUNCTION_NAMES[depth_reader::FUNCTION_COUNT] = {
- { "never", BGFX_STATE_DEPTH_TEST_NEVER },
- { "less", BGFX_STATE_DEPTH_TEST_LESS },
- { "equal", BGFX_STATE_DEPTH_TEST_EQUAL },
- { "lequal", BGFX_STATE_DEPTH_TEST_LEQUAL },
- { "greater", BGFX_STATE_DEPTH_TEST_GREATER },
- { "notequal", BGFX_STATE_DEPTH_TEST_NOTEQUAL },
- { "gequal", BGFX_STATE_DEPTH_TEST_GEQUAL },
- { "always", BGFX_STATE_DEPTH_TEST_ALWAYS }
+ { "never", BGFX_STATE_DEPTH_TEST_NEVER },
+ { "less", BGFX_STATE_DEPTH_TEST_LESS },
+ { "equal", BGFX_STATE_DEPTH_TEST_EQUAL },
+ { "lequal", BGFX_STATE_DEPTH_TEST_LEQUAL },
+ { "greater", BGFX_STATE_DEPTH_TEST_GREATER },
+ { "notequal", BGFX_STATE_DEPTH_TEST_NOTEQUAL },
+ { "gequal", BGFX_STATE_DEPTH_TEST_GEQUAL },
+ { "always", BGFX_STATE_DEPTH_TEST_ALWAYS }
};
uint64_t depth_reader::read_from_value(const Value& value)
{
- uint64_t write_enable = 0;
- if (value.HasMember("writeEnable"))
- {
- assert(value["writeEnable"].IsBool());
- write_enable = value["writeEnable"].GetBool() ? BGFX_STATE_DEPTH_WRITE: 0;
- }
+ uint64_t write_enable = 0;
+ if (value.HasMember("writeEnable"))
+ {
+ assert(value["writeEnable"].IsBool());
+ write_enable = value["writeEnable"].GetBool() ? BGFX_STATE_DEPTH_WRITE: 0;
+ }
- uint64_t function = get_enum_from_value(value, "function", BGFX_STATE_DEPTH_TEST_ALWAYS, FUNCTION_NAMES, FUNCTION_COUNT);
+ uint64_t function = get_enum_from_value(value, "function", BGFX_STATE_DEPTH_TEST_ALWAYS, FUNCTION_NAMES, FUNCTION_COUNT);
- return write_enable | function;
+ return write_enable | function;
}
diff --git a/src/osd/modules/render/bgfx/depthreader.h b/src/osd/modules/render/bgfx/depthreader.h
index 5b2fc4e374c..761a1653323 100644
--- a/src/osd/modules/render/bgfx/depthreader.h
+++ b/src/osd/modules/render/bgfx/depthreader.h
@@ -15,11 +15,11 @@
class depth_reader : public state_reader {
public:
- static uint64_t read_from_value(const Value& value);
+ static uint64_t read_from_value(const Value& value);
private:
- static const int FUNCTION_COUNT = 8;
- static const string_to_enum FUNCTION_NAMES[FUNCTION_COUNT];
+ static const int FUNCTION_COUNT = 8;
+ static const string_to_enum FUNCTION_NAMES[FUNCTION_COUNT];
};
-#endif // __DRAWBGFX_DEPTH_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_DEPTH_READER__
diff --git a/src/osd/modules/render/bgfx/effect.cpp b/src/osd/modules/render/bgfx/effect.cpp
index bf6ccb963c5..98bf317a50c 100644
--- a/src/osd/modules/render/bgfx/effect.cpp
+++ b/src/osd/modules/render/bgfx/effect.cpp
@@ -9,24 +9,24 @@
#include "effect.h"
bgfx_effect::bgfx_effect(uint64_t state, bgfx::ShaderHandle vertex_shader, bgfx::ShaderHandle fragment_shader, std::vector<bgfx_uniform*> uniforms)
- : m_state(state)
+ : m_state(state)
{
- m_program_handle = bgfx::createProgram(vertex_shader, fragment_shader, false);
+ m_program_handle = bgfx::createProgram(vertex_shader, fragment_shader, false);
- for (int i = 0; i < uniforms.size(); i++)
- {
- m_uniforms[uniforms[i]->name()] = uniforms[i];
- }
+ for (int i = 0; i < uniforms.size(); i++)
+ {
+ m_uniforms[uniforms[i]->name()] = uniforms[i];
+ }
}
bgfx_effect::~bgfx_effect()
{
- for (std::pair<std::string, bgfx_uniform*> uniform : m_uniforms)
- {
- delete uniform.second;
- }
- m_uniforms.clear();
- bgfx::destroyProgram(m_program_handle);
+ for (std::pair<std::string, bgfx_uniform*> uniform : m_uniforms)
+ {
+ delete uniform.second;
+ }
+ m_uniforms.clear();
+ bgfx::destroyProgram(m_program_handle);
}
void bgfx_effect::submit(int view)
@@ -35,18 +35,18 @@ void bgfx_effect::submit(int view)
{
(uniform_pair.second)->upload();
}
- bgfx::setState(m_state);
- bgfx::submit(view, m_program_handle);
+ bgfx::setState(m_state);
+ bgfx::submit(view, m_program_handle);
}
bgfx_uniform* bgfx_effect::uniform(std::string name)
{
- std::map<std::string, bgfx_uniform*>::iterator iter = m_uniforms.find(name);
+ std::map<std::string, bgfx_uniform*>::iterator iter = m_uniforms.find(name);
- if (iter != m_uniforms.end())
- {
- return iter->second;
- }
+ if (iter != m_uniforms.end())
+ {
+ return iter->second;
+ }
- return nullptr;
-} \ No newline at end of file
+ return nullptr;
+}
diff --git a/src/osd/modules/render/bgfx/effect.h b/src/osd/modules/render/bgfx/effect.h
index e87f418022e..2bbc4b8fda9 100644
--- a/src/osd/modules/render/bgfx/effect.h
+++ b/src/osd/modules/render/bgfx/effect.h
@@ -22,19 +22,19 @@
class bgfx_effect
{
public:
- bgfx_effect(uint64_t state, bgfx::ShaderHandle vertexShader, bgfx::ShaderHandle fragmentShader, std::vector<bgfx_uniform*> uniforms);
- ~bgfx_effect();
+ bgfx_effect(uint64_t state, bgfx::ShaderHandle vertexShader, bgfx::ShaderHandle fragmentShader, std::vector<bgfx_uniform*> uniforms);
+ ~bgfx_effect();
- void submit(int view);
+ void submit(int view);
- // Getters
- bgfx_uniform* uniform(std::string name);
- bgfx::ProgramHandle get_program() const { return m_program_handle; }
+ // Getters
+ bgfx_uniform* uniform(std::string name);
+ bgfx::ProgramHandle get_program() const { return m_program_handle; }
private:
- uint64_t m_state;
- bgfx::ProgramHandle m_program_handle;
- std::map<std::string, bgfx_uniform*> m_uniforms;
+ uint64_t m_state;
+ bgfx::ProgramHandle m_program_handle;
+ std::map<std::string, bgfx_uniform*> m_uniforms;
};
-#endif // __DRAWBGFX_EFFECT__ \ No newline at end of file
+#endif // __DRAWBGFX_EFFECT__
diff --git a/src/osd/modules/render/bgfx/effectmanager.cpp b/src/osd/modules/render/bgfx/effectmanager.cpp
index ea35020ad85..dc2550354f2 100644
--- a/src/osd/modules/render/bgfx/effectmanager.cpp
+++ b/src/osd/modules/render/bgfx/effectmanager.cpp
@@ -25,22 +25,22 @@ using namespace rapidjson;
effect_manager::~effect_manager()
{
- for (std::pair<std::string, bgfx_effect*> effect : m_effects)
- {
+ for (std::pair<std::string, bgfx_effect*> effect : m_effects)
+ {
delete effect.second;
- }
- m_effects.clear();
+ }
+ m_effects.clear();
}
bgfx_effect* effect_manager::effect(std::string name)
{
- std::map<std::string, bgfx_effect*>::iterator iter = m_effects.find(name);
- if (iter != m_effects.end())
- {
- return iter->second;
- }
+ std::map<std::string, bgfx_effect*>::iterator iter = m_effects.find(name);
+ if (iter != m_effects.end())
+ {
+ return iter->second;
+ }
- return load_effect(name);
+ return load_effect(name);
}
bgfx_effect* effect_manager::load_effect(std::string name) {
@@ -60,7 +60,7 @@ bgfx_effect* effect_manager::load_effect(std::string name) {
document.Parse<0>(data);
bgfx_effect* effect = effect_reader::read_from_value(m_shaders, document);
- m_effects[name] = effect;
+ m_effects[name] = effect;
- return effect;
+ return effect;
}
diff --git a/src/osd/modules/render/bgfx/effectmanager.h b/src/osd/modules/render/bgfx/effectmanager.h
index e86b24669ad..e3d1666d26e 100644
--- a/src/osd/modules/render/bgfx/effectmanager.h
+++ b/src/osd/modules/render/bgfx/effectmanager.h
@@ -25,17 +25,17 @@ class bgfx_effect;
class effect_manager {
public:
- effect_manager(shader_manager& shaders) : m_shaders(shaders) { }
- ~effect_manager();
+ effect_manager(shader_manager& shaders) : m_shaders(shaders) { }
+ ~effect_manager();
- // Getters
- bgfx_effect* effect(std::string name);
+ // Getters
+ bgfx_effect* effect(std::string name);
private:
- bgfx_effect* load_effect(std::string name);
+ bgfx_effect* load_effect(std::string name);
- shader_manager& m_shaders;
- std::map<std::string, bgfx_effect*> m_effects;
+ shader_manager& m_shaders;
+ std::map<std::string, bgfx_effect*> m_effects;
};
-#endif // __DRAWBGFX_EFFECT_MANAGER__ \ No newline at end of file
+#endif // __DRAWBGFX_EFFECT_MANAGER__
diff --git a/src/osd/modules/render/bgfx/effectreader.cpp b/src/osd/modules/render/bgfx/effectreader.cpp
index 978c004337f..63a6a925a64 100644
--- a/src/osd/modules/render/bgfx/effectreader.cpp
+++ b/src/osd/modules/render/bgfx/effectreader.cpp
@@ -24,54 +24,54 @@
bgfx_effect* effect_reader::read_from_value(shader_manager& shaders, const Value& value)
{
- validate_parameters(value);
+ validate_parameters(value);
- uint64_t blend = blend_reader::read_from_value(value["blend"]);
- uint64_t depth = depth_reader::read_from_value(value["depth"]);
- uint64_t cull = cull_reader::read_from_value(value["cull"]);
- uint64_t write = write_reader::read_from_value(value["write"]);
+ uint64_t blend = blend_reader::read_from_value(value["blend"]);
+ uint64_t depth = depth_reader::read_from_value(value["depth"]);
+ uint64_t cull = cull_reader::read_from_value(value["cull"]);
+ uint64_t write = write_reader::read_from_value(value["write"]);
- std::vector<bgfx_uniform*> uniforms;
- const Value& uniform_array = value["uniforms"];
- for (UINT32 i = 0; i < uniform_array.Size(); i++)
- {
- uniforms.push_back(uniform_reader::read_from_value(uniform_array[i]));
- }
+ std::vector<bgfx_uniform*> uniforms;
+ const Value& uniform_array = value["uniforms"];
+ for (UINT32 i = 0; i < uniform_array.Size(); i++)
+ {
+ uniforms.push_back(uniform_reader::read_from_value(uniform_array[i]));
+ }
- std::string vertex_name(value["vertex"].GetString());
+ std::string vertex_name(value["vertex"].GetString());
bgfx::ShaderHandle vertex_shader = shaders.shader(vertex_name);
std::string fragment_name("");
if (value.HasMember("fragment"))
{
- fragment_name = value["fragment"].GetString();
+ fragment_name = value["fragment"].GetString();
}
else if (value.HasMember("pixel"))
{
- fragment_name = value["pixel"].GetString();
+ fragment_name = value["pixel"].GetString();
}
bgfx::ShaderHandle fragment_shader = shaders.shader(fragment_name);
- return new bgfx_effect(blend | depth | cull | write, vertex_shader, fragment_shader, uniforms);
+ return new bgfx_effect(blend | depth | cull | write, vertex_shader, fragment_shader, uniforms);
}
void effect_reader::validate_parameters(const Value& value)
{
- assert(value.HasMember("blend"));
- assert(value.HasMember("depth"));
- assert(value.HasMember("cull"));
- assert(value.HasMember("write"));
- assert(value.HasMember("vertex"));
- assert(value["vertex"].IsString());
- assert(value.HasMember("fragment") || value.HasMember("pixel"));
- if (value.HasMember("fragment"))
- {
- assert(value["fragment"].IsString());
+ assert(value.HasMember("blend"));
+ assert(value.HasMember("depth"));
+ assert(value.HasMember("cull"));
+ assert(value.HasMember("write"));
+ assert(value.HasMember("vertex"));
+ assert(value["vertex"].IsString());
+ assert(value.HasMember("fragment") || value.HasMember("pixel"));
+ if (value.HasMember("fragment"))
+ {
+ assert(value["fragment"].IsString());
}
- if (value.HasMember("pixel"))
- {
- assert(value["pixel"].IsString());
+ if (value.HasMember("pixel"))
+ {
+ assert(value["pixel"].IsString());
}
- assert(value.HasMember("uniforms"));
- assert(value["uniforms"].IsArray());
-} \ No newline at end of file
+ assert(value.HasMember("uniforms"));
+ assert(value["uniforms"].IsArray());
+}
diff --git a/src/osd/modules/render/bgfx/effectreader.h b/src/osd/modules/render/bgfx/effectreader.h
index cc0c3ea69e5..a48500131e0 100644
--- a/src/osd/modules/render/bgfx/effectreader.h
+++ b/src/osd/modules/render/bgfx/effectreader.h
@@ -19,10 +19,10 @@ class shader_manager;
class effect_reader : public state_reader
{
public:
- static bgfx_effect* read_from_value(shader_manager& shaders, const Value& value);
+ static bgfx_effect* read_from_value(shader_manager& shaders, const Value& value);
private:
- static void validate_parameters(const Value& value);
+ static void validate_parameters(const Value& value);
};
-#endif // __DRAWBGFX_EFFECT_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_EFFECT_READER__
diff --git a/src/osd/modules/render/bgfx/fs_blit.sc b/src/osd/modules/render/bgfx/fs_blit.sc
new file mode 100644
index 00000000000..5130d1bebb5
--- /dev/null
+++ b/src/osd/modules/render/bgfx/fs_blit.sc
@@ -0,0 +1,13 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+SAMPLER2D(s_tex, 0);
+
+void main()
+{
+ gl_FragColor = texture2D(s_tex, v_texcoord0) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/fs_phosphor.sc b/src/osd/modules/render/bgfx/fs_phosphor.sc
new file mode 100644
index 00000000000..2df6b3f827d
--- /dev/null
+++ b/src/osd/modules/render/bgfx/fs_phosphor.sc
@@ -0,0 +1,20 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+uniform vec4 u_passthrough;
+uniform vec4 u_phosphor;
+
+SAMPLER2D(s_tex, 0);
+SAMPLER2D(s_prev, 1);
+
+void main()
+{
+ vec4 curr = texture2D(s_tex, v_texcoord0);
+ vec4 prev = texture2D(s_prev, v_texcoord0);
+ vec4 phosphored = vec4(max(curr.r, prev.r * u_phosphor.r), max(curr.g, prev.g * u_phosphor.g), max(curr.b, prev.b * u_phosphor.b), curr.a);
+ gl_FragColor = mix(phosphored, curr, u_passthrough.x) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/fs_ratios.sc b/src/osd/modules/render/bgfx/fs_ratios.sc
new file mode 100644
index 00000000000..c45050d4a4f
--- /dev/null
+++ b/src/osd/modules/render/bgfx/fs_ratios.sc
@@ -0,0 +1,23 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+uniform vec4 u_ratio_amount;
+uniform vec4 u_red_ratios;
+uniform vec4 u_grn_ratios;
+uniform vec4 u_blu_ratios;
+
+SAMPLER2D(s_tex, 0);
+
+void main()
+{
+ vec4 texel = texture2D(s_tex, v_texcoord0);
+ float red = dot(texel.rgb, u_red_ratios.rgb);
+ float grn = dot(texel.rgb, u_grn_ratios.rgb);
+ float blu = dot(texel.rgb, u_blu_ratios.rgb);
+ vec3 mixed = mix(texel.rgb, vec3(red, grn, blu), u_ratio_amount.x);
+ gl_FragColor = vec4(mixed, texel.a) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/fs_tint.sc b/src/osd/modules/render/bgfx/fs_tint.sc
new file mode 100644
index 00000000000..3e79f1e16e6
--- /dev/null
+++ b/src/osd/modules/render/bgfx/fs_tint.sc
@@ -0,0 +1,16 @@
+$input v_color0, v_texcoord0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+uniform vec4 u_tint;
+uniform vec4 u_shift;
+
+SAMPLER2D(s_tex, 0);
+
+void main()
+{
+ gl_FragColor = texture2D(s_tex, v_texcoord0 + u_shift.xy) * u_tint * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/inputpair.cpp b/src/osd/modules/render/bgfx/inputpair.cpp
index bcebb755ab6..e28372db3ce 100644
--- a/src/osd/modules/render/bgfx/inputpair.cpp
+++ b/src/osd/modules/render/bgfx/inputpair.cpp
@@ -23,4 +23,4 @@ bgfx_input_pair::bgfx_input_pair(int index, std::string sampler, bgfx_texture* t
void bgfx_input_pair::bind(bgfx_effect *effect)
{
bgfx::setTexture(m_index, effect->uniform(m_sampler)->handle(), m_texture->handle());
-} \ No newline at end of file
+}
diff --git a/src/osd/modules/render/bgfx/inputpair.h b/src/osd/modules/render/bgfx/inputpair.h
index 2cab7ff2363..196165c69f4 100644
--- a/src/osd/modules/render/bgfx/inputpair.h
+++ b/src/osd/modules/render/bgfx/inputpair.h
@@ -24,14 +24,14 @@ class bgfx_texture;
class bgfx_input_pair
{
public:
- bgfx_input_pair(int index, std::string sampler, bgfx_texture* texture);
+ bgfx_input_pair(int index, std::string sampler, bgfx_texture* texture);
void bind(bgfx_effect *effect);
private:
- int m_index;
- std::string m_sampler;
- bgfx_texture* m_texture;
+ int m_index;
+ std::string m_sampler;
+ bgfx_texture* m_texture;
};
-#endif // __DRAWBGFX_INPUT_PAIR__ \ No newline at end of file
+#endif // __DRAWBGFX_INPUT_PAIR__
diff --git a/src/osd/modules/render/bgfx/parameter.h b/src/osd/modules/render/bgfx/parameter.h
index 76defb439c4..b31b25d8a75 100644
--- a/src/osd/modules/render/bgfx/parameter.h
+++ b/src/osd/modules/render/bgfx/parameter.h
@@ -27,8 +27,8 @@ public:
PARAM_FRAME_MASK
};
- bgfx_parameter(std::string name, parameter_type type, int period);
- ~bgfx_parameter();
+ bgfx_parameter(std::string name, parameter_type type, int period);
+ ~bgfx_parameter();
void frame();
bool active();
@@ -40,4 +40,4 @@ private:
UINT32 m_frame;
};
-#endif // __DRAWBGFX_PARAMETER__ \ No newline at end of file
+#endif // __DRAWBGFX_PARAMETER__
diff --git a/src/osd/modules/render/bgfx/paramreader.cpp b/src/osd/modules/render/bgfx/paramreader.cpp
index f1391ec761e..39a995a1489 100644
--- a/src/osd/modules/render/bgfx/paramreader.cpp
+++ b/src/osd/modules/render/bgfx/paramreader.cpp
@@ -13,12 +13,12 @@
#include "parameter.h"
const parameter_reader::string_to_enum parameter_reader::TYPE_NAMES[parameter_reader::TYPE_COUNT] = {
- { "frame_mask", uint64_t(bgfx_parameter::parameter_type::PARAM_FRAME_MASK) }
+ { "frame_mask", uint64_t(bgfx_parameter::parameter_type::PARAM_FRAME_MASK) }
};
bgfx_parameter* parameter_reader::read_from_value(const Value& value)
{
- validate_parameters(value);
+ validate_parameters(value);
std::string name = value["name"].GetString();
bgfx_parameter::parameter_type type = bgfx_parameter::parameter_type(get_enum_from_value(value, "type", uint64_t(bgfx_parameter::parameter_type::PARAM_FRAME_MASK), TYPE_NAMES, TYPE_COUNT));
@@ -35,4 +35,4 @@ void parameter_reader::validate_parameters(const Value& value)
assert(value["type"].IsString());
assert(value.HasMember("period"));
assert(value["period"].IsDouble());
-} \ No newline at end of file
+}
diff --git a/src/osd/modules/render/bgfx/paramreader.h b/src/osd/modules/render/bgfx/paramreader.h
index 12df9185dfc..4b31db52528 100644
--- a/src/osd/modules/render/bgfx/paramreader.h
+++ b/src/osd/modules/render/bgfx/paramreader.h
@@ -18,13 +18,13 @@ class bgfx_parameter;
class parameter_reader : public state_reader
{
public:
- static bgfx_parameter* read_from_value(const Value& value);
+ static bgfx_parameter* read_from_value(const Value& value);
private:
- static void validate_parameters(const Value& value);
+ static void validate_parameters(const Value& value);
- static const int TYPE_COUNT = 1;
- static const string_to_enum TYPE_NAMES[TYPE_COUNT];
+ static const int TYPE_COUNT = 1;
+ static const string_to_enum TYPE_NAMES[TYPE_COUNT];
};
-#endif // __DRAWBGFX_PARAM_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_PARAM_READER__
diff --git a/src/osd/modules/render/bgfx/shadermanager.cpp b/src/osd/modules/render/bgfx/shadermanager.cpp
index 20821721ea8..f7e7b30e7ec 100644
--- a/src/osd/modules/render/bgfx/shadermanager.cpp
+++ b/src/osd/modules/render/bgfx/shadermanager.cpp
@@ -20,22 +20,22 @@
shader_manager::~shader_manager()
{
- for (std::pair<std::string, bgfx::ShaderHandle> shader : m_shaders)
- {
- bgfx::destroyShader(shader.second);
- }
- m_shaders.clear();
+ for (std::pair<std::string, bgfx::ShaderHandle> shader : m_shaders)
+ {
+ bgfx::destroyShader(shader.second);
+ }
+ m_shaders.clear();
}
bgfx::ShaderHandle shader_manager::shader(std::string name)
{
- std::map<std::string, bgfx::ShaderHandle>::iterator iter = m_shaders.find(name);
- if (iter != m_shaders.end())
- {
- return iter->second;
- }
+ std::map<std::string, bgfx::ShaderHandle>::iterator iter = m_shaders.find(name);
+ if (iter != m_shaders.end())
+ {
+ return iter->second;
+ }
- return load_shader(name);
+ return load_shader(name);
}
bgfx::ShaderHandle shader_manager::load_shader(std::string name) {
@@ -65,9 +65,9 @@ bgfx::ShaderHandle shader_manager::load_shader(std::string name) {
bgfx::ShaderHandle handle = bgfx::createShader(load_mem(shader_path + name + ".bin"));
- m_shaders[name] = handle;
+ m_shaders[name] = handle;
- return handle;
+ return handle;
}
const bgfx::Memory* shader_manager::load_mem(std::string name) {
diff --git a/src/osd/modules/render/bgfx/shadermanager.h b/src/osd/modules/render/bgfx/shadermanager.h
index a3dbb425088..5cc971ca829 100644
--- a/src/osd/modules/render/bgfx/shadermanager.h
+++ b/src/osd/modules/render/bgfx/shadermanager.h
@@ -21,17 +21,17 @@
class shader_manager {
public:
- shader_manager() {}
- ~shader_manager();
+ shader_manager() {}
+ ~shader_manager();
- // Getters
- bgfx::ShaderHandle shader(std::string name);
+ // Getters
+ bgfx::ShaderHandle shader(std::string name);
private:
- bgfx::ShaderHandle load_shader(std::string name);
- static const bgfx::Memory* load_mem(std::string name);
+ bgfx::ShaderHandle load_shader(std::string name);
+ static const bgfx::Memory* load_mem(std::string name);
- std::map<std::string, bgfx::ShaderHandle> m_shaders;
+ std::map<std::string, bgfx::ShaderHandle> m_shaders;
};
-#endif // __DRAWBGFX_SHADER_MANAGER__ \ No newline at end of file
+#endif // __DRAWBGFX_SHADER_MANAGER__
diff --git a/src/osd/modules/render/bgfx/slider.h b/src/osd/modules/render/bgfx/slider.h
index 6c3054d7cc2..efff831a4da 100644
--- a/src/osd/modules/render/bgfx/slider.h
+++ b/src/osd/modules/render/bgfx/slider.h
@@ -31,8 +31,8 @@ public:
SLIDER_VEC2
};
- bgfx_slider(slider_type type, std::string name, std::string description, void *defaults, void *min, void *max);
- ~bgfx_slider();
+ bgfx_slider(slider_type type, std::string name, std::string description, void *defaults, void *min, void *max);
+ ~bgfx_slider();
static size_t size(slider_type type);
static size_t storage_size(slider_type type);
@@ -41,9 +41,9 @@ protected:
slider_type m_type;
std::string m_name;
std::string m_description;
- char* m_data;
- char* m_min;
- char* m_max;
+ char* m_data;
+ char* m_min;
+ char* m_max;
};
-#endif // __DRAWBGFX_SLIDER__ \ No newline at end of file
+#endif // __DRAWBGFX_SLIDER__
diff --git a/src/osd/modules/render/bgfx/sliderreader.cpp b/src/osd/modules/render/bgfx/sliderreader.cpp
index 7bd2d8c59fa..2cd56d52457 100644
--- a/src/osd/modules/render/bgfx/sliderreader.cpp
+++ b/src/osd/modules/render/bgfx/sliderreader.cpp
@@ -13,16 +13,16 @@
#include "slider.h"
const slider_reader::string_to_enum slider_reader::TYPE_NAMES[slider_reader::TYPE_COUNT] = {
- { "bool", uint64_t(bgfx_slider::slider_type::SLIDER_BOOL) },
- { "float", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT) },
- { "int", uint64_t(bgfx_slider::slider_type::SLIDER_INT) },
- { "color", uint64_t(bgfx_slider::slider_type::SLIDER_COLOR) },
- { "vec2", uint64_t(bgfx_slider::slider_type::SLIDER_VEC2) }
+ { "bool", uint64_t(bgfx_slider::slider_type::SLIDER_BOOL) },
+ { "float", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT) },
+ { "int", uint64_t(bgfx_slider::slider_type::SLIDER_INT) },
+ { "color", uint64_t(bgfx_slider::slider_type::SLIDER_COLOR) },
+ { "vec2", uint64_t(bgfx_slider::slider_type::SLIDER_VEC2) }
};
bgfx_slider* slider_reader::read_from_value(const Value& value)
{
- validate_parameters(value);
+ validate_parameters(value);
bgfx_slider::slider_type type = bgfx_slider::slider_type(get_enum_from_value(value, "type", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT), TYPE_NAMES, TYPE_COUNT));
std::string name = value["name"].GetString();
@@ -71,4 +71,4 @@ void slider_reader::validate_parameters(const Value& value)
assert(value.HasMember("text"));
assert(value["text"].IsString());
assert(value.HasMember("default"));
-} \ No newline at end of file
+}
diff --git a/src/osd/modules/render/bgfx/sliderreader.h b/src/osd/modules/render/bgfx/sliderreader.h
index 9253b9b9130..9140fded836 100644
--- a/src/osd/modules/render/bgfx/sliderreader.h
+++ b/src/osd/modules/render/bgfx/sliderreader.h
@@ -18,14 +18,14 @@ class bgfx_slider;
class slider_reader : public state_reader
{
public:
- static bgfx_slider* read_from_value(const Value& value);
+ static bgfx_slider* read_from_value(const Value& value);
private:
static void get_values(const Value& value, std::string name, float* values);
- static void validate_parameters(const Value& value);
+ static void validate_parameters(const Value& value);
- static const int TYPE_COUNT = 5;
- static const string_to_enum TYPE_NAMES[TYPE_COUNT];
+ static const int TYPE_COUNT = 5;
+ static const string_to_enum TYPE_NAMES[TYPE_COUNT];
};
-#endif // __DRAWBGFX_SLIDER_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_SLIDER_READER__
diff --git a/src/osd/modules/render/bgfx/statereader.cpp b/src/osd/modules/render/bgfx/statereader.cpp
index 2f222b19bdf..93fb021be5c 100644
--- a/src/osd/modules/render/bgfx/statereader.cpp
+++ b/src/osd/modules/render/bgfx/statereader.cpp
@@ -2,77 +2,77 @@
uint64_t state_reader::get_enum_from_value(const Value& value, std::string name, const uint64_t default_value, const string_to_enum* enums, const int count)
{
- if (value.HasMember(name.c_str()))
- {
- assert(value[name.c_str()].IsString());
- return get_param_from_string(value[name.c_str()].GetString(), enums, count);
- }
- else
- {
- return default_value;
- }
+ if (value.HasMember(name.c_str()))
+ {
+ assert(value[name.c_str()].IsString());
+ return get_param_from_string(value[name.c_str()].GetString(), enums, count);
+ }
+ else
+ {
+ return default_value;
+ }
}
uint64_t state_reader::get_param_from_string(std::string value, const string_to_enum* enums, const int count)
{
- for (int i = 0; i < count; i++)
- {
- if (value == enums[i].m_string)
- {
- return enums[i].m_enum;
- }
- }
- assert(false);
- return 0;
+ for (int i = 0; i < count; i++)
+ {
+ if (value == enums[i].m_string)
+ {
+ return enums[i].m_enum;
+ }
+ }
+ assert(false);
+ return 0;
}
void state_reader::validate_array_parameter(const Value& value, std::string typeName, std::string paramName, const int count)
{
- const char* name = paramName.c_str();
- if (value.HasMember(name))
- {
- assert(value[name].IsArray());
- assert(value[name].Size() == count);
- }
+ const char* name = paramName.c_str();
+ if (value.HasMember(name))
+ {
+ assert(value[name].IsArray());
+ assert(value[name].Size() == count);
+ }
}
void state_reader::validate_double_parameter(const Value& value, std::string typeName, std::string name)
{
- if (value.HasMember(name.c_str()))
- {
- assert(value[name.c_str()].IsDouble());
- }
+ if (value.HasMember(name.c_str()))
+ {
+ assert(value[name.c_str()].IsDouble());
+ }
}
void state_reader::validate_string_parameter(const Value& value, std::string typeName, std::string name)
{
- if (value.HasMember(name.c_str()))
- {
- assert(value[name.c_str()].IsString());
- }
+ if (value.HasMember(name.c_str()))
+ {
+ assert(value[name.c_str()].IsString());
+ }
}
void state_reader::validate_boolean_parameter(const Value& value, std::string typeName, std::string name)
{
- if (value.HasMember(name.c_str()))
- {
- assert(value[name.c_str()].IsBool());
- }
+ if (value.HasMember(name.c_str()))
+ {
+ assert(value[name.c_str()].IsBool());
+ }
}
bool state_reader::get_bool(const Value& value, const std::string name, const bool default_value)
{
- if (value.HasMember(name.c_str()))
- {
- return value[name.c_str()].GetBool();
- }
- return default_value;
+ if (value.HasMember(name.c_str()))
+ {
+ return value[name.c_str()].GetBool();
+ }
+ return default_value;
}
void state_reader::get_float(const Value& value, const std::string name, float* out, float* default_value, int count)
{
- if (value.HasMember(name.c_str()))
- {
+ if (value.HasMember(name.c_str()))
+ {
if (count == 1)
{
*out = (float) value[name.c_str()].GetDouble();
@@ -82,26 +82,26 @@ void state_reader::get_float(const Value& value, const std::string name, float*
{
get_vec_values(value[name.c_str()], out, count);
}
- }
- for (int def = 0; def < count; def++)
- {
+ }
+ for (int def = 0; def < count; def++)
+ {
out[def] = default_value[def];
}
}
void state_reader::get_vec_values(const Value& value_array, float* data, const unsigned int count)
{
- for (unsigned int i = 0; i < count && i < value_array.Size(); i++)
- {
- data[i] = (float) value_array[i].GetDouble();
- }
+ for (unsigned int i = 0; i < count && i < value_array.Size(); i++)
+ {
+ data[i] = (float) value_array[i].GetDouble();
+ }
}
std::string state_reader::get_string(const Value& value, const std::string name, const std::string default_value)
{
- if (value.HasMember(name.c_str()))
- {
- return std::string(value[name.c_str()].GetString());
- }
- return default_value;
+ if (value.HasMember(name.c_str()))
+ {
+ return std::string(value[name.c_str()].GetString());
+ }
+ return default_value;
}
diff --git a/src/osd/modules/render/bgfx/statereader.h b/src/osd/modules/render/bgfx/statereader.h
index 57edea1d28e..d32cf52c817 100644
--- a/src/osd/modules/render/bgfx/statereader.h
+++ b/src/osd/modules/render/bgfx/statereader.h
@@ -13,26 +13,26 @@ using namespace rapidjson;
class state_reader
{
protected:
- struct string_to_enum
- {
- std::string m_string;
- const UINT64 m_enum;
- };
+ struct string_to_enum
+ {
+ std::string m_string;
+ const UINT64 m_enum;
+ };
- static void validate_array_parameter(const Value& value, std::string type_name, std::string name, const int count);
- static void validate_double_parameter(const Value& value, std::string type_name, std::string name);
- static void validate_string_parameter(const Value& value, std::string type_name, std::string name);
- static void validate_boolean_parameter(const Value& value, std::string type_name, std::string name);
+ static void validate_array_parameter(const Value& value, std::string type_name, std::string name, const int count);
+ static void validate_double_parameter(const Value& value, std::string type_name, std::string name);
+ static void validate_string_parameter(const Value& value, std::string type_name, std::string name);
+ static void validate_boolean_parameter(const Value& value, std::string type_name, std::string name);
- static bool get_bool(const Value& value, const std::string name, const bool default_value);
- static void get_float(const Value& value, const std::string name, float* out, float* default_value, const int count = 1);
- static std::string get_string(const Value& value, const std::string name, const std::string default_value);
+ static bool get_bool(const Value& value, const std::string name, const bool default_value);
+ static void get_float(const Value& value, const std::string name, float* out, float* default_value, const int count = 1);
+ static std::string get_string(const Value& value, const std::string name, const std::string default_value);
- static uint64_t get_enum_from_value(const Value& value, std::string name, const uint64_t default_value, const string_to_enum* enums, const int count);
- static uint64_t get_param_from_string(std::string value, const string_to_enum* enums, const int count);
+ static uint64_t get_enum_from_value(const Value& value, std::string name, const uint64_t default_value, const string_to_enum* enums, const int count);
+ static uint64_t get_param_from_string(std::string value, const string_to_enum* enums, const int count);
private:
- static void get_vec_values(const Value& value_array, float* data, const unsigned int count);
+ static void get_vec_values(const Value& value_array, float* data, const unsigned int count);
};
-#endif // __DRAWBGFX_STATE_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_STATE_READER__
diff --git a/src/osd/modules/render/bgfx/target.h b/src/osd/modules/render/bgfx/target.h
index 099288cbec1..19bf429e606 100644
--- a/src/osd/modules/render/bgfx/target.h
+++ b/src/osd/modules/render/bgfx/target.h
@@ -16,15 +16,16 @@
class bgfx_target : public bgfx_texture
{
public:
- bgfx_target(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, bool filter = false);
- bgfx_target(std::string name, void *handle, uint32_t width, uint32_t height);
- virtual ~bgfx_target();
+ bgfx_target(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, bool filter = false);
+ bgfx_target(std::string name, void *handle, uint32_t width, uint32_t height);
+ virtual ~bgfx_target();
- // Getters
- bgfx::FrameBufferHandle target() const { return m_target; }
+ // Getters
+ bgfx::FrameBufferHandle target() const { return m_target; }
+ virtual bool is_target() const override { return true; }
private:
bgfx::FrameBufferHandle m_target;
};
-#endif // __DRAWBGFX_TARGET__ \ No newline at end of file
+#endif // __DRAWBGFX_TARGET__
diff --git a/src/osd/modules/render/bgfx/targetmanager.cpp b/src/osd/modules/render/bgfx/targetmanager.cpp
index 88bf6a9d96f..88a3013350e 100644
--- a/src/osd/modules/render/bgfx/targetmanager.cpp
+++ b/src/osd/modules/render/bgfx/targetmanager.cpp
@@ -16,16 +16,15 @@
target_manager::~target_manager()
{
- for (std::pair<std::string, bgfx_target*> target : m_targets)
- {
+ for (std::pair<std::string, bgfx_target*> target : m_targets)
+ {
delete target.second;
- }
- m_targets.clear();
+ }
+ m_targets.clear();
}
bgfx_target* target_manager::create_target(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, bool filter)
{
- printf("Creating %s\n", name.c_str());
bgfx_target* target = new bgfx_target(name, format, width, height, filter);
m_targets[name] = target;
@@ -35,7 +34,6 @@ bgfx_target* target_manager::create_target(std::string name, bgfx::TextureFormat
bgfx_target* target_manager::create_target(std::string name, void *handle, uint32_t width, uint32_t height)
{
- printf("Creating %s\n", name.c_str());
bgfx_target* target = new bgfx_target(name, handle, width, height);
m_targets[name] = target;
@@ -45,11 +43,11 @@ bgfx_target* target_manager::create_target(std::string name, void *handle, uint3
bgfx_target* target_manager::target(std::string name)
{
- std::map<std::string, bgfx_target*>::iterator iter = m_targets.find(name);
- if (iter != m_targets.end())
- {
- return iter->second;
- }
+ std::map<std::string, bgfx_target*>::iterator iter = m_targets.find(name);
+ if (iter != m_targets.end())
+ {
+ return iter->second;
+ }
- return nullptr;
+ return nullptr;
}
diff --git a/src/osd/modules/render/bgfx/targetmanager.h b/src/osd/modules/render/bgfx/targetmanager.h
index 9cc957d1c38..0d5f6f5f020 100644
--- a/src/osd/modules/render/bgfx/targetmanager.h
+++ b/src/osd/modules/render/bgfx/targetmanager.h
@@ -25,20 +25,20 @@ class bgfx_target;
class target_manager {
public:
- target_manager(texture_manager& textures) : m_textures(textures) { }
- ~target_manager();
+ target_manager(texture_manager& textures) : m_textures(textures) { }
+ ~target_manager();
bgfx_target* create_target(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, bool filter = false);
bgfx_target* create_target(std::string name, void *handle, uint32_t width, uint32_t height);
- // Getters
- bgfx_target* target(std::string name);
+ // Getters
+ bgfx_target* target(std::string name);
private:
- bgfx_target* create_target(std::string name);
+ bgfx_target* create_target(std::string name);
- std::map<std::string, bgfx_target*> m_targets;
- texture_manager& m_textures;
+ std::map<std::string, bgfx_target*> m_targets;
+ texture_manager& m_textures;
};
-#endif // __DRAWBGFX_TARGET_MANAGER__ \ No newline at end of file
+#endif // __DRAWBGFX_TARGET_MANAGER__
diff --git a/src/osd/modules/render/bgfx/texture.h b/src/osd/modules/render/bgfx/texture.h
index 833ab230917..70dad1c13b6 100644
--- a/src/osd/modules/render/bgfx/texture.h
+++ b/src/osd/modules/render/bgfx/texture.h
@@ -18,22 +18,23 @@
class bgfx_texture
{
public:
- bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, void* data = nullptr, uint32_t flags = BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP);
- virtual ~bgfx_texture();
+ bgfx_texture(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, void* data = nullptr, uint32_t flags = BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP);
+ virtual ~bgfx_texture();
- // Getters
- std::string name() const { return m_name; }
- bgfx::TextureFormat::Enum format() const { return m_format; }
- uint32_t width() const { return m_width; }
- uint32_t height() const { return m_height; }
- bgfx::TextureHandle handle() const { return m_handle; }
+ // Getters
+ std::string name() const { return m_name; }
+ bgfx::TextureFormat::Enum format() const { return m_format; }
+ uint32_t width() const { return m_width; }
+ uint32_t height() const { return m_height; }
+ bgfx::TextureHandle handle() const { return m_handle; }
+ virtual bool is_target() const { return false; }
protected:
- std::string m_name;
- bgfx::TextureFormat::Enum m_format;
- uint32_t m_width;
- uint32_t m_height;
- bgfx::TextureHandle m_handle;
+ std::string m_name;
+ bgfx::TextureFormat::Enum m_format;
+ uint32_t m_width;
+ uint32_t m_height;
+ bgfx::TextureHandle m_handle;
};
-#endif // __DRAWBGFX_TEXTURE__ \ No newline at end of file
+#endif // __DRAWBGFX_TEXTURE__
diff --git a/src/osd/modules/render/bgfx/texturemanager.cpp b/src/osd/modules/render/bgfx/texturemanager.cpp
index bb8f49494da..4da872978dd 100644
--- a/src/osd/modules/render/bgfx/texturemanager.cpp
+++ b/src/osd/modules/render/bgfx/texturemanager.cpp
@@ -16,11 +16,14 @@
texture_manager::~texture_manager()
{
- for (std::pair<std::string, bgfx_texture*> texture : m_textures)
- {
- delete texture.second;
- }
- m_textures.clear();
+ for (std::pair<std::string, bgfx_texture*> texture : m_textures)
+ {
+ if (!(texture.second)->is_target())
+ {
+ delete texture.second;
+ }
+ }
+ m_textures.clear();
}
void texture_manager::add_texture(std::string name, bgfx_texture* texture)
@@ -37,11 +40,11 @@ bgfx_texture* texture_manager::create_texture(std::string name, bgfx::TextureFor
bgfx_texture* texture_manager::texture(std::string name)
{
- std::map<std::string, bgfx_texture*>::iterator iter = m_textures.find(name);
- if (iter != m_textures.end())
- {
- return iter->second;
- }
+ std::map<std::string, bgfx_texture*>::iterator iter = m_textures.find(name);
+ if (iter != m_textures.end())
+ {
+ return iter->second;
+ }
- return nullptr;
+ return nullptr;
}
diff --git a/src/osd/modules/render/bgfx/texturemanager.h b/src/osd/modules/render/bgfx/texturemanager.h
index 627e6689fa9..69608c03616 100644
--- a/src/osd/modules/render/bgfx/texturemanager.h
+++ b/src/osd/modules/render/bgfx/texturemanager.h
@@ -23,19 +23,19 @@ class bgfx_texture;
class texture_manager {
public:
- texture_manager() { }
- ~texture_manager();
+ texture_manager() { }
+ ~texture_manager();
bgfx_texture* create_texture(std::string name, bgfx::TextureFormat::Enum format, uint32_t width, uint32_t height, void* data = nullptr, uint32_t flags = BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP);
void add_texture(std::string name, bgfx_texture* texture);
- // Getters
- bgfx_texture* texture(std::string name);
+ // Getters
+ bgfx_texture* texture(std::string name);
private:
- bgfx_texture* create_texture(std::string name);
+ bgfx_texture* create_texture(std::string name);
- std::map<std::string, bgfx_texture*> m_textures;
+ std::map<std::string, bgfx_texture*> m_textures;
};
-#endif // __DRAWBGFX_TEXTURE_MANAGER__ \ No newline at end of file
+#endif // __DRAWBGFX_TEXTURE_MANAGER__
diff --git a/src/osd/modules/render/bgfx/uniform.cpp b/src/osd/modules/render/bgfx/uniform.cpp
index bfc00d800e1..2898c27a5b8 100644
--- a/src/osd/modules/render/bgfx/uniform.cpp
+++ b/src/osd/modules/render/bgfx/uniform.cpp
@@ -10,72 +10,73 @@
#include <cstring>
bgfx_uniform::bgfx_uniform(std::string name, bgfx::UniformType::Enum type)
- : m_name(name)
- , m_type(type)
+ : m_name(name)
+ , m_type(type)
{
- m_handle = bgfx::createUniform(m_name.c_str(), m_type);
- m_data_size = get_size_for_type(type);
- if (m_data_size > 0)
- {
- m_data = new uint8_t[m_data_size];
- }
+ m_handle = bgfx::createUniform(m_name.c_str(), m_type);
+ m_data_size = get_size_for_type(type);
+ if (m_data_size > 0)
+ {
+ m_data = new uint8_t[m_data_size];
+ }
}
bgfx_uniform::~bgfx_uniform()
{
- bgfx::destroyUniform(m_handle);
- delete [] m_data;
+ bgfx::destroyUniform(m_handle);
+ delete [] m_data;
}
void bgfx_uniform::upload()
{
- bgfx::setUniform(m_handle, m_data);
+ if (m_type != bgfx::UniformType::Int1) // Avoid samplers; set separately!
+ bgfx::setUniform(m_handle, m_data);
}
bgfx_uniform* bgfx_uniform::set(float* value)
{
- return set(value, get_size_for_type(bgfx::UniformType::Vec4));
+ return set(value, get_size_for_type(bgfx::UniformType::Vec4));
}
bgfx_uniform* bgfx_uniform::set_int(int value)
{
- return set(&value, get_size_for_type(bgfx::UniformType::Int1));
+ return set(&value, get_size_for_type(bgfx::UniformType::Int1));
}
bgfx_uniform* bgfx_uniform::set_mat3(float* value)
{
- return set(value, get_size_for_type(bgfx::UniformType::Mat3));
+ return set(value, get_size_for_type(bgfx::UniformType::Mat3));
}
bgfx_uniform* bgfx_uniform::set_mat4(float* value)
{
- return set(value, get_size_for_type(bgfx::UniformType::Mat4));
+ return set(value, get_size_for_type(bgfx::UniformType::Mat4));
}
bgfx_uniform* bgfx_uniform::set(void* data, size_t size)
{
- int min_size = (size < m_data_size) ? size : m_data_size;
- memcpy(m_data, data, min_size);
- return this;
+ int min_size = (size < m_data_size) ? size : m_data_size;
+ memcpy(m_data, data, min_size);
+ return this;
}
size_t bgfx_uniform::get_size_for_type(bgfx::UniformType::Enum type)
{
- switch (type)
- {
- case bgfx::UniformType::Vec4:
- return sizeof(float) * 4;
+ switch (type)
+ {
+ case bgfx::UniformType::Vec4:
+ return sizeof(float) * 4;
- case bgfx::UniformType::Int1:
- return sizeof(int);
+ case bgfx::UniformType::Int1:
+ return sizeof(int);
- case bgfx::UniformType::Mat3:
- return sizeof(float) * 3 * 3;
+ case bgfx::UniformType::Mat3:
+ return sizeof(float) * 3 * 3;
- case bgfx::UniformType::Mat4:
- return sizeof(float) * 4 * 4;
+ case bgfx::UniformType::Mat4:
+ return sizeof(float) * 4 * 4;
- default:
- return 0;
- }
-} \ No newline at end of file
+ default:
+ return 0;
+ }
+}
diff --git a/src/osd/modules/render/bgfx/uniform.h b/src/osd/modules/render/bgfx/uniform.h
index 6bb45f50d06..aa4c2cc097a 100644
--- a/src/osd/modules/render/bgfx/uniform.h
+++ b/src/osd/modules/render/bgfx/uniform.h
@@ -18,31 +18,31 @@
class bgfx_uniform
{
public:
- bgfx_uniform(std::string name, bgfx::UniformType::Enum type);
- virtual ~bgfx_uniform();
+ bgfx_uniform(std::string name, bgfx::UniformType::Enum type);
+ virtual ~bgfx_uniform();
- virtual void upload();
+ virtual void upload();
- // Getters
- std::string name() { return m_name; }
- bgfx::UniformType::Enum type() const { return m_type; }
- bgfx::UniformHandle handle() const { return m_handle; }
+ // Getters
+ std::string name() { return m_name; }
+ bgfx::UniformType::Enum type() const { return m_type; }
+ bgfx::UniformHandle handle() const { return m_handle; }
- // Setters
- bgfx_uniform* set(float* value);
- bgfx_uniform* set_int(int value);
- bgfx_uniform* set_mat3(float* value);
- bgfx_uniform* set_mat4(float* value);
- bgfx_uniform* set(void* data, size_t size);
+ // Setters
+ bgfx_uniform* set(float* value);
+ bgfx_uniform* set_int(int value);
+ bgfx_uniform* set_mat3(float* value);
+ bgfx_uniform* set_mat4(float* value);
+ bgfx_uniform* set(void* data, size_t size);
- static size_t get_size_for_type(bgfx::UniformType::Enum type);
+ static size_t get_size_for_type(bgfx::UniformType::Enum type);
protected:
- bgfx::UniformHandle m_handle;
- std::string m_name;
- bgfx::UniformType::Enum m_type;
- uint8_t* m_data;
- size_t m_data_size;
+ bgfx::UniformHandle m_handle;
+ std::string m_name;
+ bgfx::UniformType::Enum m_type;
+ uint8_t* m_data;
+ size_t m_data_size;
};
-#endif // __DRAWBGFX_UNIFORM__ \ No newline at end of file
+#endif // __DRAWBGFX_UNIFORM__
diff --git a/src/osd/modules/render/bgfx/uniformreader.cpp b/src/osd/modules/render/bgfx/uniformreader.cpp
index 863c20e6e4f..141bc657121 100644
--- a/src/osd/modules/render/bgfx/uniformreader.cpp
+++ b/src/osd/modules/render/bgfx/uniformreader.cpp
@@ -10,44 +10,44 @@
#include "uniform.h"
const uniform_reader::string_to_enum uniform_reader::TYPE_NAMES[uniform_reader::TYPE_COUNT] = {
- { "int", bgfx::UniformType::Int1 },
- { "vec4", bgfx::UniformType::Vec4 },
- { "mat3", bgfx::UniformType::Mat3 },
- { "mat4", bgfx::UniformType::Mat4 },
- { "camera", bgfx::UniformType::Mat4 }
+ { "int", bgfx::UniformType::Int1 },
+ { "vec4", bgfx::UniformType::Vec4 },
+ { "mat3", bgfx::UniformType::Mat3 },
+ { "mat4", bgfx::UniformType::Mat4 },
+ { "camera", bgfx::UniformType::Mat4 }
};
bgfx_uniform* uniform_reader::read_from_value(const Value& value)
{
- assert(value.HasMember("name"));
- assert(value["name"].IsString());
- const char* name = value["name"].GetString();
+ assert(value.HasMember("name"));
+ assert(value["name"].IsString());
+ const char* name = value["name"].GetString();
- assert(value.HasMember("type"));
- bgfx::UniformType::Enum type = bgfx::UniformType::Enum(get_enum_from_value(value, "type", bgfx::UniformType::Vec4, TYPE_NAMES, TYPE_COUNT));
- const size_t type_size = bgfx_uniform::get_size_for_type(type);
+ assert(value.HasMember("type"));
+ bgfx::UniformType::Enum type = bgfx::UniformType::Enum(get_enum_from_value(value, "type", bgfx::UniformType::Vec4, TYPE_NAMES, TYPE_COUNT));
+ const size_t type_size = bgfx_uniform::get_size_for_type(type);
- assert(value.HasMember("values"));
- assert(value["values"].IsArray());
- const Value& value_array = value["values"];
- const size_t array_size = value_array.Size() * sizeof(float);
+ assert(value.HasMember("values"));
+ assert(value["values"].IsArray());
+ const Value& value_array = value["values"];
+ const size_t array_size = value_array.Size() * sizeof(float);
- const size_t alloc_size = (type_size > array_size) ? type_size : array_size;
- float* data = reinterpret_cast<float*>(new char[alloc_size]);
+ const size_t alloc_size = (type_size > array_size) ? type_size : array_size;
+ float* data = reinterpret_cast<float*>(new char[alloc_size]);
- unsigned int index = 0;
- for (; index < type_size / 4 && index < value_array.Size(); index++)
- {
- data[index] = (float)value_array[index].GetDouble();
- }
+ unsigned int index = 0;
+ for (; index < type_size / 4 && index < value_array.Size(); index++)
+ {
+ data[index] = (float)value_array[index].GetDouble();
+ }
- for (; index < type_size / 4; index++) {
- data[index] = 0.0f;
- }
+ for (; index < type_size / 4; index++) {
+ data[index] = 0.0f;
+ }
- bgfx_uniform* uniform = new bgfx_uniform(name, type);
- uniform->set((void*)data, type_size);
- delete [] data;
+ bgfx_uniform* uniform = new bgfx_uniform(name, type);
+ uniform->set((void*)data, type_size);
+ delete [] data;
- return uniform;
+ return uniform;
}
diff --git a/src/osd/modules/render/bgfx/uniformreader.h b/src/osd/modules/render/bgfx/uniformreader.h
index ead4bb0cefe..40bedf8b732 100644
--- a/src/osd/modules/render/bgfx/uniformreader.h
+++ b/src/osd/modules/render/bgfx/uniformreader.h
@@ -19,23 +19,23 @@ class bgfx_uniform;
enum uniform_type
{
- TYPE_INT1 = bgfx::UniformType::Int1,
- TYPE_VEC4 = bgfx::UniformType::Vec4,
- TYPE_MAT3 = bgfx::UniformType::Mat3,
- TYPE_MAT4 = bgfx::UniformType::Mat4,
- TYPE_CAMERA, // Alias for the current ortho camera, used to auto-bind on material load
+ TYPE_INT1 = bgfx::UniformType::Int1,
+ TYPE_VEC4 = bgfx::UniformType::Vec4,
+ TYPE_MAT3 = bgfx::UniformType::Mat3,
+ TYPE_MAT4 = bgfx::UniformType::Mat4,
+ TYPE_CAMERA, // Alias for the current ortho camera, used to auto-bind on material load
- TYPE_COUNT = 5
+ TYPE_COUNT = 5
};
class uniform_reader : public state_reader
{
public:
- static bgfx_uniform* read_from_value(const Value& value);
+ static bgfx_uniform* read_from_value(const Value& value);
private:
- static const int TYPE_COUNT = uniform_type::TYPE_COUNT;
- static const string_to_enum TYPE_NAMES[TYPE_COUNT];
+ static const int TYPE_COUNT = uniform_type::TYPE_COUNT;
+ static const string_to_enum TYPE_NAMES[TYPE_COUNT];
};
-#endif // __DRAWBGFX_UNIFORM_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_UNIFORM_READER__
diff --git a/src/osd/modules/render/bgfx/vs_blit.sc b/src/osd/modules/render/bgfx/vs_blit.sc
new file mode 100644
index 00000000000..c3699f6fbd9
--- /dev/null
+++ b/src/osd/modules/render/bgfx/vs_blit.sc
@@ -0,0 +1,14 @@
+$input a_position, a_texcoord0, a_color0
+$output v_texcoord0, v_color0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+void main()
+{
+ gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0));
+ v_texcoord0 = a_texcoord0;
+ v_color0 = a_color0;
+}
diff --git a/src/osd/modules/render/bgfx/vs_phosphor.sc b/src/osd/modules/render/bgfx/vs_phosphor.sc
new file mode 100644
index 00000000000..c3699f6fbd9
--- /dev/null
+++ b/src/osd/modules/render/bgfx/vs_phosphor.sc
@@ -0,0 +1,14 @@
+$input a_position, a_texcoord0, a_color0
+$output v_texcoord0, v_color0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+void main()
+{
+ gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0));
+ v_texcoord0 = a_texcoord0;
+ v_color0 = a_color0;
+}
diff --git a/src/osd/modules/render/bgfx/vs_ratios.sc b/src/osd/modules/render/bgfx/vs_ratios.sc
new file mode 100644
index 00000000000..c3699f6fbd9
--- /dev/null
+++ b/src/osd/modules/render/bgfx/vs_ratios.sc
@@ -0,0 +1,14 @@
+$input a_position, a_texcoord0, a_color0
+$output v_texcoord0, v_color0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+void main()
+{
+ gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0));
+ v_texcoord0 = a_texcoord0;
+ v_color0 = a_color0;
+}
diff --git a/src/osd/modules/render/bgfx/vs_tint.sc b/src/osd/modules/render/bgfx/vs_tint.sc
new file mode 100644
index 00000000000..c3699f6fbd9
--- /dev/null
+++ b/src/osd/modules/render/bgfx/vs_tint.sc
@@ -0,0 +1,14 @@
+$input a_position, a_texcoord0, a_color0
+$output v_texcoord0, v_color0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "../../../../../3rdparty/bgfx/examples/common/common.sh"
+
+void main()
+{
+ gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0));
+ v_texcoord0 = a_texcoord0;
+ v_color0 = a_color0;
+}
diff --git a/src/osd/modules/render/bgfx/writereader.cpp b/src/osd/modules/render/bgfx/writereader.cpp
index b10220908c8..5d6ca0fcf93 100644
--- a/src/osd/modules/render/bgfx/writereader.cpp
+++ b/src/osd/modules/render/bgfx/writereader.cpp
@@ -3,22 +3,22 @@
#include "writereader.h"
const write_reader::string_to_enum write_reader::RGB_NAMES[write_reader::RGB_COUNT] = {
- { "true", BGFX_STATE_RGB_WRITE },
- { "false", 0 },
- { "1", BGFX_STATE_RGB_WRITE },
- { "0", 0 }
+ { "true", BGFX_STATE_RGB_WRITE },
+ { "false", 0 },
+ { "1", BGFX_STATE_RGB_WRITE },
+ { "0", 0 }
};
const write_reader::string_to_enum write_reader::ALPHA_NAMES[write_reader::ALPHA_COUNT] = {
- { "true", BGFX_STATE_ALPHA_WRITE },
- { "false", 0 },
- { "1", BGFX_STATE_ALPHA_WRITE },
- { "0", 0 }
+ { "true", BGFX_STATE_ALPHA_WRITE },
+ { "false", 0 },
+ { "1", BGFX_STATE_ALPHA_WRITE },
+ { "0", 0 }
};
uint64_t write_reader::read_from_value(const Value& value)
{
- uint64_t rgb = get_enum_from_value(value, "rgb", 0, RGB_NAMES, RGB_COUNT);
- uint64_t alpha = get_enum_from_value(value, "alpha", 0, ALPHA_NAMES, ALPHA_COUNT);
- return rgb | alpha;
+ uint64_t rgb = get_enum_from_value(value, "rgb", 0, RGB_NAMES, RGB_COUNT);
+ uint64_t alpha = get_enum_from_value(value, "alpha", 0, ALPHA_NAMES, ALPHA_COUNT);
+ return rgb | alpha;
}
diff --git a/src/osd/modules/render/bgfx/writereader.h b/src/osd/modules/render/bgfx/writereader.h
index 854505bc9cf..5210a8df286 100644
--- a/src/osd/modules/render/bgfx/writereader.h
+++ b/src/osd/modules/render/bgfx/writereader.h
@@ -7,13 +7,13 @@
class write_reader : public state_reader {
public:
- static uint64_t read_from_value(const Value& value);
+ static uint64_t read_from_value(const Value& value);
private:
- static const int RGB_COUNT = 4;
- static const int ALPHA_COUNT = 4;
- static const string_to_enum RGB_NAMES[RGB_COUNT];
- static const string_to_enum ALPHA_NAMES[ALPHA_COUNT];
+ static const int RGB_COUNT = 4;
+ static const int ALPHA_COUNT = 4;
+ static const string_to_enum RGB_NAMES[RGB_COUNT];
+ static const string_to_enum ALPHA_NAMES[ALPHA_COUNT];
};
-#endif // __DRAWBGFX_WRITE_READER__ \ No newline at end of file
+#endif // __DRAWBGFX_WRITE_READER__
diff --git a/src/osd/modules/render/binpacker.cpp b/src/osd/modules/render/binpacker.cpp
index 2054dfa54cf..fcd126f5c14 100644
--- a/src/osd/modules/render/binpacker.cpp
+++ b/src/osd/modules/render/binpacker.cpp
@@ -11,185 +11,185 @@
bool rectangle_packer::pack(const std::vector<packable_rectangle>& rects, std::vector<std::vector<packed_rectangle>>& packs, int pack_size)
{
- clear();
-
- m_pack_size = pack_size;
-
- // Add rects to member array, and check to make sure none is too big
- for (size_t rect = 0; rect < rects.size(); rect++)
- {
- m_rects.push_back(rectangle(0, 0, rects[rect].width(), rects[rect].height(), rects[rect].hash(), rects[rect].format(), rects[rect].rowpixels(), rects[rect].palette(), rects[rect].base()));
- }
-
- // Sort from greatest to least area
- std::sort(m_rects.rbegin(), m_rects.rend());
-
- // Pack
- while (m_num_packed < (int)m_rects.size())
- {
- int i = m_packs.size();
- m_packs.push_back(rectangle(m_pack_size));
- m_roots.push_back(i);
- if (!fill(i))
- {
+ clear();
+
+ m_pack_size = pack_size;
+
+ // Add rects to member array, and check to make sure none is too big
+ for (size_t rect = 0; rect < rects.size(); rect++)
+ {
+ m_rects.push_back(rectangle(0, 0, rects[rect].width(), rects[rect].height(), rects[rect].hash(), rects[rect].format(), rects[rect].rowpixels(), rects[rect].palette(), rects[rect].base()));
+ }
+
+ // Sort from greatest to least area
+ std::sort(m_rects.rbegin(), m_rects.rend());
+
+ // Pack
+ while (m_num_packed < (int)m_rects.size())
+ {
+ int i = m_packs.size();
+ m_packs.push_back(rectangle(m_pack_size));
+ m_roots.push_back(i);
+ if (!fill(i))
+ {
return false;
}
- }
+ }
- // Write out
- packs.resize(m_roots.size());
- for (size_t i = 0; i < m_roots.size(); ++i)
- {
- packs[i].clear();
- add_pack_to_array(m_roots[i], packs[i]);
- }
+ // Write out
+ packs.resize(m_roots.size());
+ for (size_t i = 0; i < m_roots.size(); ++i)
+ {
+ packs[i].clear();
+ add_pack_to_array(m_roots[i], packs[i]);
+ }
- return true;
+ return true;
}
void rectangle_packer::clear()
{
- m_pack_size = 0;
- m_num_packed = 0;
- m_rects.clear();
- m_packs.clear();
- m_roots.clear();
+ m_pack_size = 0;
+ m_num_packed = 0;
+ m_rects.clear();
+ m_packs.clear();
+ m_roots.clear();
}
bool rectangle_packer::fill(int pack)
{
- // For each rect
- for (size_t rect = 0; rect < m_rects.size(); ++rect)
- {
- // If it's not already packed
- if (!m_rects[rect].packed)
- {
- // If it fits in the current working area
- if (fits(m_rects[rect], m_packs[pack]))
- {
- // Store in lower-left of working area, split, and recurse
- m_num_packed++;
- split(pack, rect);
- fill(m_packs[pack].children[0]);
- fill(m_packs[pack].children[1]);
- return true;
- }
- }
- }
- return false;
+ // For each rect
+ for (size_t rect = 0; rect < m_rects.size(); ++rect)
+ {
+ // If it's not already packed
+ if (!m_rects[rect].packed)
+ {
+ // If it fits in the current working area
+ if (fits(m_rects[rect], m_packs[pack]))
+ {
+ // Store in lower-left of working area, split, and recurse
+ m_num_packed++;
+ split(pack, rect);
+ fill(m_packs[pack].children[0]);
+ fill(m_packs[pack].children[1]);
+ return true;
+ }
+ }
+ }
+ return false;
}
void rectangle_packer::split(int pack, int rect)
{
- // Split the working area either horizontally or vertically with respect
- // to the rect we're storing, such that we get the largest possible child
- // area.
-
- rectangle left = m_packs[pack];
- rectangle right = m_packs[pack];
- rectangle bottom = m_packs[pack];
- rectangle top = m_packs[pack];
-
- left.y += m_rects[rect].h;
- left.w = m_rects[rect].w;
- left.h -= m_rects[rect].h;
-
- right.x += m_rects[rect].w;
- right.w -= m_rects[rect].w;
-
- bottom.x += m_rects[rect].w;
- bottom.h = m_rects[rect].h;
- bottom.w -= m_rects[rect].w;
-
- top.y += m_rects[rect].h;
- top.h -= m_rects[rect].h;
-
- int max_lr_area = left.get_area();
- if (right.get_area() > max_lr_area)
- {
- max_lr_area = right.get_area();
- }
-
- int max_bt_area = bottom.get_area();
- if (top.get_area() > max_bt_area)
- {
- max_bt_area = top.get_area();
- }
-
- if (max_lr_area > max_bt_area)
- {
- if (left.get_area() > right.get_area())
- {
- m_packs.push_back(left);
- m_packs.push_back(right);
- }
- else
- {
- m_packs.push_back(right);
- m_packs.push_back(left);
- }
- }
- else
- {
- if (bottom.get_area() > top.get_area())
- {
- m_packs.push_back(bottom);
- m_packs.push_back(top);
- }
- else
- {
- m_packs.push_back(top);
- m_packs.push_back(bottom);
- }
- }
-
- // This pack area now represents the rect we've just stored, so save the
- // relevant info to it, and assign children.
- m_packs[pack].w = m_rects[rect].w;
- m_packs[pack].h = m_rects[rect].h;
- m_packs[pack].hash = m_rects[rect].hash;
- m_packs[pack].format = m_rects[rect].format;
- m_packs[pack].rowpixels = m_rects[rect].rowpixels;
- m_packs[pack].palette = m_rects[rect].palette;
- m_packs[pack].base = m_rects[rect].base;
- m_packs[pack].children[0] = m_packs.size() - 2;
- m_packs[pack].children[1] = m_packs.size() - 1;
-
- // Done with the rect
- m_rects[rect].packed = true;
+ // Split the working area either horizontally or vertically with respect
+ // to the rect we're storing, such that we get the largest possible child
+ // area.
+
+ rectangle left = m_packs[pack];
+ rectangle right = m_packs[pack];
+ rectangle bottom = m_packs[pack];
+ rectangle top = m_packs[pack];
+
+ left.y += m_rects[rect].h;
+ left.w = m_rects[rect].w;
+ left.h -= m_rects[rect].h;
+
+ right.x += m_rects[rect].w;
+ right.w -= m_rects[rect].w;
+
+ bottom.x += m_rects[rect].w;
+ bottom.h = m_rects[rect].h;
+ bottom.w -= m_rects[rect].w;
+
+ top.y += m_rects[rect].h;
+ top.h -= m_rects[rect].h;
+
+ int max_lr_area = left.get_area();
+ if (right.get_area() > max_lr_area)
+ {
+ max_lr_area = right.get_area();
+ }
+
+ int max_bt_area = bottom.get_area();
+ if (top.get_area() > max_bt_area)
+ {
+ max_bt_area = top.get_area();
+ }
+
+ if (max_lr_area > max_bt_area)
+ {
+ if (left.get_area() > right.get_area())
+ {
+ m_packs.push_back(left);
+ m_packs.push_back(right);
+ }
+ else
+ {
+ m_packs.push_back(right);
+ m_packs.push_back(left);
+ }
+ }
+ else
+ {
+ if (bottom.get_area() > top.get_area())
+ {
+ m_packs.push_back(bottom);
+ m_packs.push_back(top);
+ }
+ else
+ {
+ m_packs.push_back(top);
+ m_packs.push_back(bottom);
+ }
+ }
+
+ // This pack area now represents the rect we've just stored, so save the
+ // relevant info to it, and assign children.
+ m_packs[pack].w = m_rects[rect].w;
+ m_packs[pack].h = m_rects[rect].h;
+ m_packs[pack].hash = m_rects[rect].hash;
+ m_packs[pack].format = m_rects[rect].format;
+ m_packs[pack].rowpixels = m_rects[rect].rowpixels;
+ m_packs[pack].palette = m_rects[rect].palette;
+ m_packs[pack].base = m_rects[rect].base;
+ m_packs[pack].children[0] = m_packs.size() - 2;
+ m_packs[pack].children[1] = m_packs.size() - 1;
+
+ // Done with the rect
+ m_rects[rect].packed = true;
}
bool rectangle_packer::fits(rectangle& rect1, const rectangle& rect2)
{
- // Check to see if rect1 fits in rect2
-
- if (rect1.w <= rect2.w && rect1.h <= rect2.h)
- {
- return true;
- }
- else
- {
- return false;
- }
+ // Check to see if rect1 fits in rect2
+
+ if (rect1.w <= rect2.w && rect1.h <= rect2.h)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
}
void rectangle_packer::add_pack_to_array(int pack, std::vector<packed_rectangle>& array) const
{
- if (m_packs[pack].hash != 0)
- {
+ if (m_packs[pack].hash != 0)
+ {
array.push_back(packed_rectangle(m_packs[pack].hash, m_packs[pack].format,
m_packs[pack].w, m_packs[pack].h, m_packs[pack].x, m_packs[pack].y,
m_packs[pack].rowpixels, m_packs[pack].palette, m_packs[pack].base));
- if (m_packs[pack].children[0] != -1)
- {
- add_pack_to_array(m_packs[pack].children[0], array);
- }
+ if (m_packs[pack].children[0] != -1)
+ {
+ add_pack_to_array(m_packs[pack].children[0], array);
+ }
- if (m_packs[pack].children[1] != -1)
- {
- add_pack_to_array(m_packs[pack].children[1], array);
- }
- }
+ if (m_packs[pack].children[1] != -1)
+ {
+ add_pack_to_array(m_packs[pack].children[1], array);
+ }
+ }
}
diff --git a/src/osd/modules/render/binpacker.h b/src/osd/modules/render/binpacker.h
index 677083b5c09..696bd18eb7d 100644
--- a/src/osd/modules/render/binpacker.h
+++ b/src/osd/modules/render/binpacker.h
@@ -10,18 +10,18 @@
class rectangle_packer
{
public:
- // The input and output are in terms of vectors of ints to avoid
- // dependencies (although I suppose a public member struct could have been
- // used). The parameters are:
-
- // packs : After packing, the outer array contains the packs (therefore
- // the number of packs is packs.size()). Each inner array contains a
- // sequence of sets of 3 ints. Each set represents a rectangle in the
- // pack. The elements in the set are 1) the rect ID, 2) the x position
- // of the rect with respect to the pack, and 3) the y position of the rect
- // with respect to the pack. The widths and heights of the rects are not
- // included, as it's assumed they are stored on the caller's side (they
- // were after all the input to the function).
+ // The input and output are in terms of vectors of ints to avoid
+ // dependencies (although I suppose a public member struct could have been
+ // used). The parameters are:
+
+ // packs : After packing, the outer array contains the packs (therefore
+ // the number of packs is packs.size()). Each inner array contains a
+ // sequence of sets of 3 ints. Each set represents a rectangle in the
+ // pack. The elements in the set are 1) the rect ID, 2) the x position
+ // of the rect with respect to the pack, and 3) the y position of the rect
+ // with respect to the pack. The widths and heights of the rects are not
+ // included, as it's assumed they are stored on the caller's side (they
+ // were after all the input to the function).
class packable_rectangle
{
@@ -107,77 +107,77 @@ public:
void* m_base;
};
- bool pack(const std::vector<packable_rectangle>& rects, std::vector<std::vector<packed_rectangle>>& packs, int pack_size);
+ bool pack(const std::vector<packable_rectangle>& rects, std::vector<std::vector<packed_rectangle>>& packs, int pack_size);
private:
- struct rectangle
- {
- rectangle(int size)
- : x(0)
- , y(0)
- , w(size)
- , h(size)
- , hash(-1)
- , format(0)
+ struct rectangle
+ {
+ rectangle(int size)
+ : x(0)
+ , y(0)
+ , w(size)
+ , h(size)
+ , hash(-1)
+ , format(0)
, rowpixels(0)
, palette(nullptr)
, base(nullptr)
- , packed(false)
- {
- children[0] = -1;
- children[1] = -1;
- }
-
- rectangle(int x, int y, int w, int h, int hash, UINT32 format, int rowpixels, const rgb_t *palette, void *base)
- : x(x)
- , y(y)
- , w(w)
- , h(h)
- , hash(hash)
- , format(format)
+ , packed(false)
+ {
+ children[0] = -1;
+ children[1] = -1;
+ }
+
+ rectangle(int x, int y, int w, int h, int hash, UINT32 format, int rowpixels, const rgb_t *palette, void *base)
+ : x(x)
+ , y(y)
+ , w(w)
+ , h(h)
+ , hash(hash)
+ , format(format)
, rowpixels(rowpixels)
, palette(palette)
, base(base)
- , packed(false)
- {
- children[0] = -1;
- children[1] = -1;
- }
-
- int get_area() const
- {
- return w * h;
- }
-
- bool operator<(const rectangle& rect) const
- {
- return get_area() < rect.get_area();
- }
-
- int x;
- int y;
- int w;
- int h;
- int hash;
- UINT32 format;
- int rowpixels;
- const rgb_t* palette;
- void* base;
- int children[2];
- bool packed;
- };
-
- void clear();
- bool fill(int pack);
- void split(int pack, int rect);
- bool fits(rectangle& rect1, const rectangle& rect2);
- void add_pack_to_array(int pack, std::vector<packed_rectangle>& array) const;
-
- int m_pack_size;
- int m_num_packed;
- std::vector<rectangle> m_rects;
- std::vector<rectangle> m_packs;
- std::vector<int> m_roots;
+ , packed(false)
+ {
+ children[0] = -1;
+ children[1] = -1;
+ }
+
+ int get_area() const
+ {
+ return w * h;
+ }
+
+ bool operator<(const rectangle& rect) const
+ {
+ return get_area() < rect.get_area();
+ }
+
+ int x;
+ int y;
+ int w;
+ int h;
+ int hash;
+ UINT32 format;
+ int rowpixels;
+ const rgb_t* palette;
+ void* base;
+ int children[2];
+ bool packed;
+ };
+
+ void clear();
+ bool fill(int pack);
+ void split(int pack, int rect);
+ bool fits(rectangle& rect1, const rectangle& rect2);
+ void add_pack_to_array(int pack, std::vector<packed_rectangle>& array) const;
+
+ int m_pack_size;
+ int m_num_packed;
+ std::vector<rectangle> m_rects;
+ std::vector<rectangle> m_packs;
+ std::vector<int> m_roots;
};
-#endif // __RECTPACKER_H__ \ No newline at end of file
+#endif // __RECTPACKER_H__
diff --git a/src/osd/modules/render/d3d/d3dcomm.h b/src/osd/modules/render/d3d/d3dcomm.h
index 9c444fd9cf0..6240deb3011 100644
--- a/src/osd/modules/render/d3d/d3dcomm.h
+++ b/src/osd/modules/render/d3d/d3dcomm.h
@@ -224,7 +224,7 @@ struct vertex
{
float x, y, z; // X,Y,Z coordinates
float rhw; // RHW when no HLSL, padding when HLSL
- D3DCOLOR color; // diffuse color
+ D3DCOLOR color; // diffuse color
float u0, v0; // texture stage 0 coordinates
float u1, v1; // additional info for vector data
};
diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp
index 1b635b94c8f..c55c679be54 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.cpp
+++ b/src/osd/modules/render/d3d/d3dhlsl.cpp
@@ -52,7 +52,7 @@ static void get_vector(const char *data, int count, float *out, bool report_erro
//============================================================
typedef HRESULT (WINAPI *direct3dx9_loadeffect_ptr)(LPDIRECT3DDEVICE9 pDevice, LPCTSTR pSrcFile, const D3DXMACRO *pDefines, LPD3DXINCLUDE pInclude, DWORD Flags, LPD3DXEFFECTPOOL pPool, LPD3DXEFFECT *ppEffect, LPD3DXBUFFER *ppCompilationErrors);
-static direct3dx9_loadeffect_ptr g_load_effect = NULL;
+static direct3dx9_loadeffect_ptr g_load_effect = nullptr;
//============================================================
@@ -60,12 +60,12 @@ static direct3dx9_loadeffect_ptr g_load_effect = NULL;
//============================================================
shaders::shaders() :
- d3dintf(NULL), machine(NULL), d3d(NULL), num_screens(0), curr_screen(0), curr_frame(0),
- vecbuf_type(), vecbuf_index(0), vecbuf_count(0), avi_output_file(NULL), avi_frame(0), avi_copy_surface(NULL), avi_copy_texture(NULL), avi_final_target(NULL), avi_final_texture(NULL),
- black_surface(NULL), black_texture(NULL), render_snap(false), snap_rendered(false), snap_copy_target(NULL), snap_copy_texture(NULL), snap_target(NULL), snap_texture(NULL),
- snap_width(0), snap_height(0), lines_pending(false), backbuffer(NULL), curr_effect(NULL), default_effect(NULL), prescale_effect(NULL), post_effect(NULL), distortion_effect(NULL),
- focus_effect(NULL), phosphor_effect(NULL), deconverge_effect(NULL), color_effect(NULL), ntsc_effect(NULL), bloom_effect(NULL),
- downsample_effect(NULL), vector_effect(NULL), fsfx_vertices(NULL), curr_texture(NULL), curr_render_target(NULL), curr_poly(NULL)
+ d3dintf(nullptr), machine(nullptr), d3d(nullptr), num_screens(0), curr_screen(0), curr_frame(0),
+ vecbuf_type(), vecbuf_index(0), vecbuf_count(0), avi_output_file(nullptr), avi_frame(0), avi_copy_surface(nullptr), avi_copy_texture(nullptr), avi_final_target(nullptr), avi_final_texture(nullptr),
+ black_surface(nullptr), black_texture(nullptr), render_snap(false), snap_rendered(false), snap_copy_target(nullptr), snap_copy_texture(nullptr), snap_target(nullptr), snap_texture(nullptr),
+ snap_width(0), snap_height(0), lines_pending(false), backbuffer(nullptr), curr_effect(nullptr), default_effect(nullptr), prescale_effect(nullptr), post_effect(nullptr), distortion_effect(nullptr),
+ focus_effect(nullptr), phosphor_effect(nullptr), deconverge_effect(nullptr), color_effect(nullptr), ntsc_effect(nullptr), bloom_effect(nullptr),
+ downsample_effect(nullptr), vector_effect(nullptr), fsfx_vertices(nullptr), curr_texture(nullptr), curr_render_target(nullptr), curr_poly(nullptr)
{
master_enable = false;
vector_enable = true;
@@ -73,8 +73,8 @@ shaders::shaders() :
options = NULL;
paused = true;
lastidx = -1;
- targethead = NULL;
- cachehead = NULL;
+ targethead = nullptr;
+ cachehead = nullptr;
initialized = false;
}
@@ -85,8 +85,13 @@ shaders::shaders() :
shaders::~shaders()
{
+ for (slider* slider : sliders)
+ {
+ delete slider;
+ }
+
cache_target *currcache = cachehead;
- while(cachehead != NULL)
+ while(cachehead != nullptr)
{
cachehead = currcache->next;
global_free(currcache);
@@ -94,7 +99,7 @@ shaders::~shaders()
}
d3d_render_target *currtarget = targethead;
- while(targethead != NULL)
+ while(targethead != nullptr)
{
targethead = currtarget->next;
global_free(currtarget);
@@ -149,7 +154,7 @@ void shaders::window_record()
windows_options &options = downcast<windows_options &>(machine->options());
const char *filename = options.d3d_hlsl_write();
- if (avi_output_file != NULL)
+ if (avi_output_file != nullptr)
{
end_avi_recording();
}
@@ -187,7 +192,7 @@ void shaders::avi_update_snap(surface *surface)
}
// lock the texture
- result = (*d3dintf->surface.lock_rect)(avi_copy_surface, &rect, NULL, D3DLOCK_DISCARD);
+ result = (*d3dintf->surface.lock_rect)(avi_copy_surface, &rect, nullptr, D3DLOCK_DISCARD);
if (result != D3D_OK)
{
return;
@@ -244,7 +249,7 @@ void shaders::render_snapshot(surface *surface)
}
// lock the texture
- result = (*d3dintf->surface.lock_rect)(snap_copy_target, &rect, NULL, D3DLOCK_DISCARD);
+ result = (*d3dintf->surface.lock_rect)(snap_copy_target, &rect, nullptr, D3DLOCK_DISCARD);
if (result != D3D_OK)
{
return;
@@ -271,7 +276,7 @@ void shaders::render_snapshot(surface *surface)
int idx = cy * 2 + cx;
emu_file file(machine->options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
- file_error filerr = open_next(d3d, file, NULL, "png", idx);
+ file_error filerr = open_next(d3d, file, nullptr, "png", idx);
if (filerr != FILERR_NONE)
{
return;
@@ -285,7 +290,7 @@ void shaders::render_snapshot(surface *surface)
png_add_text(&pnginfo, "System", text2.c_str());
// now do the actual work
- png_error error = png_write_bitmap(file, &pnginfo, avi_snap, 1 << 24, NULL);
+ png_error error = png_write_bitmap(file, &pnginfo, avi_snap, 1 << 24, nullptr);
if (error != PNGERR_NONE)
{
osd_printf_error("Error generating PNG for HLSL snapshot: png_error = %d\n", error);
@@ -300,28 +305,28 @@ void shaders::render_snapshot(surface *surface)
result = (*d3dintf->surface.unlock_rect)(snap_copy_target);
if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during texture unlock_rect call\n", (int)result);
- if (snap_texture != NULL)
+ if (snap_texture != nullptr)
{
(*d3dintf->texture.release)(snap_texture);
- snap_texture = NULL;
+ snap_texture = nullptr;
}
- if (snap_target != NULL)
+ if (snap_target != nullptr)
{
(*d3dintf->surface.release)(snap_target);
- snap_target = NULL;
+ snap_target = nullptr;
}
- if (snap_copy_texture != NULL)
+ if (snap_copy_texture != nullptr)
{
(*d3dintf->texture.release)(snap_copy_texture);
- snap_copy_texture = NULL;
+ snap_copy_texture = nullptr;
}
- if (snap_copy_target != NULL)
+ if (snap_copy_target != nullptr)
{
(*d3dintf->surface.release)(snap_copy_target);
- snap_copy_target = NULL;
+ snap_copy_target = nullptr;
}
}
@@ -340,7 +345,7 @@ void shaders::record_texture()
surface *surface = avi_final_target;
// ignore if nothing to do
- if (avi_output_file == NULL || surface == NULL)
+ if (avi_output_file == nullptr || surface == nullptr)
{
return;
}
@@ -380,12 +385,12 @@ void shaders::end_avi_recording()
return;
}
- if (avi_output_file != NULL)
+ if (avi_output_file != nullptr)
{
avi_close(avi_output_file);
}
- avi_output_file = NULL;
+ avi_output_file = nullptr;
avi_frame = 0;
}
@@ -403,7 +408,7 @@ void shaders::toggle()
// free shader resources before renderer resources
delete_resources(false);
- g_slider_list = NULL;
+ g_slider_list = nullptr;
}
master_enable = !master_enable;
@@ -457,7 +462,7 @@ void shaders::begin_avi_recording(const char *name)
// build up information about this new movie
avi_movie_info info;
info.video_format = 0;
- info.video_timescale = 1000 * ((machine->first_screen() != NULL) ? ATTOSECONDS_TO_HZ(machine->first_screen()->frame_period().m_attoseconds) : screen_device::DEFAULT_FRAME_RATE);
+ info.video_timescale = 1000 * ((machine->first_screen() != nullptr) ? ATTOSECONDS_TO_HZ(machine->first_screen()->frame_period().m_attoseconds) : screen_device::DEFAULT_FRAME_RATE);
info.video_sampletime = 1000;
info.video_numsamples = 0;
info.video_width = snap_width;
@@ -477,13 +482,13 @@ void shaders::begin_avi_recording(const char *name)
std::string fullpath;
{
emu_file tempfile(machine->options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
- if (name != NULL)
+ if (name != nullptr)
{
filerr = tempfile.open(name);
}
else
{
- filerr = open_next(d3d, tempfile, NULL, "avi", 0);
+ filerr = open_next(d3d, tempfile, nullptr, "avi", 0);
}
// compute the frame time
@@ -517,19 +522,19 @@ void shaders::begin_avi_recording(const char *name)
void shaders::remove_cache_target(cache_target *cache)
{
- if (cache != NULL)
+ if (cache != nullptr)
{
if (cache == cachehead)
{
cachehead = cachehead->next;
}
- if (cache->prev != NULL)
+ if (cache->prev != nullptr)
{
cache->prev->next = cache->next;
}
- if (cache->next != NULL)
+ if (cache->next != nullptr)
{
cache->next->prev = cache->prev;
}
@@ -551,7 +556,7 @@ void shaders::remove_render_target(texture_info *texture)
void shaders::remove_render_target(int width, int height, UINT32 screen_index, UINT32 page_index)
{
d3d_render_target *target = find_render_target(width, height, screen_index, page_index);
- if (target != NULL)
+ if (target != nullptr)
{
remove_render_target(target);
}
@@ -559,25 +564,25 @@ void shaders::remove_render_target(int width, int height, UINT32 screen_index, U
void shaders::remove_render_target(d3d_render_target *rt)
{
- if (rt != NULL)
+ if (rt != nullptr)
{
if (rt == targethead)
{
targethead = targethead->next;
}
- if (rt->prev != NULL)
+ if (rt->prev != nullptr)
{
rt->prev->next = rt->next;
}
- if (rt->next != NULL)
+ if (rt->next != nullptr)
{
rt->next->prev = rt->prev;
}
cache_target *cache = find_cache_target(rt->screen_index, rt->width, rt->height);
- if (cache != NULL)
+ if (cache != nullptr)
{
remove_cache_target(cache);
}
@@ -606,7 +611,7 @@ void shaders::set_texture(texture_info *texture)
return;
}
- if (texture != NULL)
+ if (texture != nullptr)
{
paused = texture->paused();
texture->advance_frame();
@@ -614,14 +619,14 @@ void shaders::set_texture(texture_info *texture)
// set initial texture to use
texture_info *default_texture = d3d->get_default_texture();
- default_effect->set_texture("Diffuse", (texture == NULL) ? default_texture->get_finaltex() : texture->get_finaltex());
+ default_effect->set_texture("Diffuse", (texture == nullptr) ? default_texture->get_finaltex() : texture->get_finaltex());
if (options->yiq_enable)
{
- ntsc_effect->set_texture("Diffuse", (texture == NULL) ? default_texture->get_finaltex() : texture->get_finaltex());
+ ntsc_effect->set_texture("Diffuse", (texture == nullptr) ? default_texture->get_finaltex() : texture->get_finaltex());
}
else
{
- color_effect->set_texture("Diffuse", (texture == NULL) ? default_texture->get_finaltex() : texture->get_finaltex());
+ color_effect->set_texture("Diffuse", (texture == nullptr) ? default_texture->get_finaltex() : texture->get_finaltex());
}
}
@@ -638,7 +643,7 @@ void shaders::init(d3d_base *d3dintf, running_machine *machine, renderer_d3d9 *r
}
g_load_effect = (direct3dx9_loadeffect_ptr)GetProcAddress(d3dintf->libhandle, "D3DXCreateEffectFromFileW");
- if (g_load_effect == NULL)
+ if (g_load_effect == nullptr)
{
printf("Direct3D: Unable to find D3DXCreateEffectFromFileW\n");
d3dintf->post_fx_available = false;
@@ -760,7 +765,7 @@ void shaders::init_fsfx_quad(void *vertbuf)
// get a pointer to the vertex buffer
fsfx_vertices = (vertex *)vertbuf;
- if (fsfx_vertices == NULL)
+ if (fsfx_vertices == nullptr)
{
return;
}
@@ -851,7 +856,7 @@ int shaders::create_resources(bool reset)
(*d3dintf->texture.get_surface_level)(black_texture, 0, &black_surface);
result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, black_surface);
if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result);
- result = (*d3dintf->device.clear)(d3d->get_device(), 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0);
+ result = (*d3dintf->device.clear)(d3d->get_device(), 0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0);
if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device clear call\n", (int)result);
result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, backbuffer);
if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result);
@@ -873,7 +878,7 @@ int shaders::create_resources(bool reset)
(*d3dintf->texture.get_surface_level)(avi_final_texture, 0, &avi_final_target);
emu_file file(machine->options().art_path(), OPEN_FLAG_READ);
- render_load_png(shadow_bitmap, file, NULL, options->shadow_mask_texture);
+ render_load_png(shadow_bitmap, file, nullptr, options->shadow_mask_texture);
// experimental: if we have a shadow bitmap, create a texture for it
if (shadow_bitmap.valid())
@@ -885,7 +890,7 @@ int shaders::create_resources(bool reset)
texture.rowpixels = shadow_bitmap.rowpixels();
texture.width = shadow_bitmap.width();
texture.height = shadow_bitmap.height();
- texture.palette = NULL;
+ texture.palette = nullptr;
texture.seqid = 0;
// now create it (no prescale, but wrap)
@@ -1062,7 +1067,7 @@ void shaders::blit(
{
HRESULT result;
- if (dst != NULL)
+ if (dst != nullptr)
{
result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, dst);
if (result != D3D_OK)
@@ -1072,7 +1077,7 @@ void shaders::blit(
if (clear_dst)
{
- result = (*d3dintf->device.clear)(d3d->get_device(), 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(1,0,0,0), 0, 0);
+ result = (*d3dintf->device.clear)(d3d->get_device(), 0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(1,0,0,0), 0, 0);
if (result != D3D_OK)
{
osd_printf_verbose("Direct3D: Error %08X during device clear call\n", (int)result);
@@ -1147,7 +1152,7 @@ d3d_render_target* shaders::find_render_target(texture_info *info)
UINT32 page_index = screen_index_data & 1;
d3d_render_target *curr = targethead;
- while (curr != NULL && (
+ while (curr != nullptr && (
curr->screen_index != screen_index ||
curr->page_index != page_index ||
curr->width != info->get_texinfo().width ||
@@ -1167,7 +1172,7 @@ d3d_render_target* shaders::find_render_target(texture_info *info)
d3d_render_target* shaders::find_render_target(int width, int height, UINT32 screen_index, UINT32 page_index)
{
d3d_render_target *curr = targethead;
- while (curr != NULL && (
+ while (curr != nullptr && (
curr->width != width ||
curr->height != height ||
curr->screen_index != screen_index ||
@@ -1187,7 +1192,7 @@ d3d_render_target* shaders::find_render_target(int width, int height, UINT32 scr
cache_target* shaders::find_cache_target(UINT32 screen_index, int width, int height)
{
cache_target *curr = cachehead;
- while (curr != NULL && (
+ while (curr != nullptr && (
curr->screen_index != screen_index ||
curr->width != width ||
curr->height != height))
@@ -1404,7 +1409,7 @@ int shaders::post_pass(d3d_render_target *rt, int source_index, poly_info *poly,
curr_effect = post_effect;
curr_effect->update_uniforms();
- curr_effect->set_texture("ShadowTexture", shadow_texture == NULL ? NULL : shadow_texture->get_finaltex());
+ curr_effect->set_texture("ShadowTexture", shadow_texture == nullptr ? nullptr : shadow_texture->get_finaltex());
curr_effect->set_int("ShadowTileMode", options->shadow_mask_tile_mode);
curr_effect->set_texture("DiffuseTexture", rt->target_texture[next_index]);
curr_effect->set_vector("BackColor", 3, back_color);
@@ -1620,7 +1625,7 @@ int shaders::screen_pass(d3d_render_target *rt, int source_index, poly_info *pol
// we do not clear the backbuffe here because multiple screens might be rendered into
blit(backbuffer, false, poly->get_type(), vertnum, poly->get_count());
- if (avi_output_file != NULL)
+ if (avi_output_file != nullptr)
{
blit(avi_final_target, false, poly->get_type(), vertnum, poly->get_count());
}
@@ -1641,7 +1646,7 @@ void shaders::ui_pass(poly_info *poly, int vertnum)
curr_effect->update_uniforms();
curr_effect->set_technique("UiTechnique");
- blit(NULL, false, poly->get_type(), vertnum, poly->get_count());
+ blit(nullptr, false, poly->get_type(), vertnum, poly->get_count());
}
@@ -1659,14 +1664,14 @@ void shaders::render_quad(poly_info *poly, int vertnum)
curr_texture = poly->get_texture();
curr_poly = poly;
- if (PRIMFLAG_GET_SCREENTEX(d3d->get_last_texture_flags()) && curr_texture != NULL)
+ if (PRIMFLAG_GET_SCREENTEX(d3d->get_last_texture_flags()) && curr_texture != nullptr)
{
curr_screen = curr_screen < num_screens ? curr_screen : 0;
curr_render_target = find_render_target(curr_texture);
d3d_render_target *rt = curr_render_target;
- if (rt == NULL)
+ if (rt == nullptr)
{
osd_printf_verbose("Direct3D: No raster render target\n");
return;
@@ -1713,7 +1718,7 @@ void shaders::render_quad(poly_info *poly, int vertnum)
curr_render_target = find_render_target(d3d->get_width(), d3d->get_height(), 0, 0);
d3d_render_target *rt = curr_render_target;
- if (rt == NULL)
+ if (rt == nullptr)
{
osd_printf_verbose("Direct3D: No vector render target\n");
return;
@@ -1736,7 +1741,7 @@ void shaders::render_quad(poly_info *poly, int vertnum)
curr_render_target = find_render_target(d3d->get_width(), d3d->get_height(), 0, 0);
d3d_render_target *rt = curr_render_target;
- if (rt == NULL)
+ if (rt == nullptr)
{
osd_printf_verbose("Direct3D: No vector buffer render target\n");
return;
@@ -1780,9 +1785,9 @@ void shaders::render_quad(poly_info *poly, int vertnum)
ui_pass(poly, vertnum);
}
- curr_render_target = NULL;
- curr_texture = NULL;
- curr_poly = NULL;
+ curr_render_target = nullptr;
+ curr_texture = nullptr;
+ curr_poly = nullptr;
}
@@ -1814,7 +1819,7 @@ bool shaders::add_cache_target(renderer_d3d9* d3d, texture_info* info, int width
return false;
}
- if (info != NULL)
+ if (info != nullptr)
{
target->width = info->get_texinfo().width;
target->height = info->get_texinfo().height;
@@ -1826,11 +1831,11 @@ bool shaders::add_cache_target(renderer_d3d9* d3d, texture_info* info, int width
}
target->next = cachehead;
- target->prev = NULL;
+ target->prev = nullptr;
target->screen_index = screen_index;
- if (cachehead != NULL)
+ if (cachehead != nullptr)
{
cachehead->prev = target;
}
@@ -1843,7 +1848,7 @@ d3d_render_target* shaders::get_vector_target()
{
if (!vector_enable)
{
- return NULL;
+ return nullptr;
}
return find_render_target(d3d->get_width(), d3d->get_height(), 0, 0);
@@ -1854,7 +1859,7 @@ void shaders::create_vector_target(render_primitive *prim)
int width = d3d->get_width();
int height = d3d->get_height();
- if (!add_render_target(d3d, NULL, width, height, width, height))
+ if (!add_render_target(d3d, nullptr, width, height, width, height))
{
vector_enable = false;
}
@@ -1869,10 +1874,10 @@ bool shaders::add_render_target(renderer_d3d9* d3d, texture_info* info, int widt
{
UINT32 screen_index = 0;
UINT32 page_index = 0;
- if (info != NULL)
+ if (info != nullptr)
{
d3d_render_target *existing_target = find_render_target(info);
- if (existing_target != NULL)
+ if (existing_target != nullptr)
{
remove_render_target(existing_target);
}
@@ -1884,7 +1889,7 @@ bool shaders::add_render_target(renderer_d3d9* d3d, texture_info* info, int widt
else
{
d3d_render_target *existing_target = find_render_target(d3d->get_width(), d3d->get_height(), 0, 0);
- if (existing_target != NULL)
+ if (existing_target != nullptr)
{
remove_render_target(existing_target);
}
@@ -1898,7 +1903,7 @@ bool shaders::add_render_target(renderer_d3d9* d3d, texture_info* info, int widt
return false;
}
- if (info != NULL)
+ if (info != nullptr)
{
target->width = info->get_texinfo().width;
target->height = info->get_texinfo().height;
@@ -1911,7 +1916,7 @@ bool shaders::add_render_target(renderer_d3d9* d3d, texture_info* info, int widt
HRESULT result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, target->target_surface[0]);
if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result);
- result = (*d3dintf->device.clear)(d3d->get_device(), 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0);
+ result = (*d3dintf->device.clear)(d3d->get_device(), 0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0,0,0,0), 0, 0);
if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device clear call\n", (int)result);
result = (*d3dintf->device.set_render_target)(d3d->get_device(), 0, backbuffer);
if (result != D3D_OK) osd_printf_verbose("Direct3D: Error %08X during device set_render_target call\n", (int)result);
@@ -1920,7 +1925,7 @@ bool shaders::add_render_target(renderer_d3d9* d3d, texture_info* info, int widt
target->page_index = page_index;
cache_target* cache = find_cache_target(target->screen_index, target->width, target->height);
- if (cache == NULL)
+ if (cache == nullptr)
{
if (!add_cache_target(d3d, info, target_width, target_height, target->screen_index))
{
@@ -1930,9 +1935,9 @@ bool shaders::add_render_target(renderer_d3d9* d3d, texture_info* info, int widt
}
target->next = targethead;
- target->prev = NULL;
+ target->prev = nullptr;
- if (targethead != NULL)
+ if (targethead != nullptr)
{
targethead->prev = target;
}
@@ -1987,16 +1992,16 @@ void shaders::delete_resources(bool reset)
return;
}
- if (options != NULL)
+ if (options != nullptr)
{
last_options = *options;
- options = NULL;
+ options = nullptr;
}
initialized = false;
cache_target *currcache = cachehead;
- while(cachehead != NULL)
+ while(cachehead != nullptr)
{
cachehead = currcache->next;
global_free(currcache);
@@ -2004,113 +2009,113 @@ void shaders::delete_resources(bool reset)
}
d3d_render_target *currtarget = targethead;
- while(targethead != NULL)
+ while(targethead != nullptr)
{
targethead = currtarget->next;
global_free(currtarget);
currtarget = targethead;
}
- if (downsample_effect != NULL)
+ if (downsample_effect != nullptr)
{
delete downsample_effect;
- downsample_effect = NULL;
+ downsample_effect = nullptr;
}
- if (bloom_effect != NULL)
+ if (bloom_effect != nullptr)
{
delete bloom_effect;
- bloom_effect = NULL;
+ bloom_effect = nullptr;
}
- if (vector_effect != NULL)
+ if (vector_effect != nullptr)
{
delete vector_effect;
- vector_effect = NULL;
+ vector_effect = nullptr;
}
- if (default_effect != NULL)
+ if (default_effect != nullptr)
{
delete default_effect;
- default_effect = NULL;
+ default_effect = nullptr;
}
- if (post_effect != NULL)
+ if (post_effect != nullptr)
{
delete post_effect;
- post_effect = NULL;
+ post_effect = nullptr;
}
- if (distortion_effect != NULL)
+ if (distortion_effect != nullptr)
{
delete distortion_effect;
- distortion_effect = NULL;
+ distortion_effect = nullptr;
}
- if (prescale_effect != NULL)
+ if (prescale_effect != nullptr)
{
delete prescale_effect;
- prescale_effect = NULL;
+ prescale_effect = nullptr;
}
- if (phosphor_effect != NULL)
+ if (phosphor_effect != nullptr)
{
delete phosphor_effect;
- phosphor_effect = NULL;
+ phosphor_effect = nullptr;
}
- if (focus_effect != NULL)
+ if (focus_effect != nullptr)
{
delete focus_effect;
- focus_effect = NULL;
+ focus_effect = nullptr;
}
- if (deconverge_effect != NULL)
+ if (deconverge_effect != nullptr)
{
delete deconverge_effect;
- deconverge_effect = NULL;
+ deconverge_effect = nullptr;
}
- if (color_effect != NULL)
+ if (color_effect != nullptr)
{
delete color_effect;
- color_effect = NULL;
+ color_effect = nullptr;
}
- if (ntsc_effect != NULL)
+ if (ntsc_effect != nullptr)
{
delete ntsc_effect;
- ntsc_effect = NULL;
+ ntsc_effect = nullptr;
}
- if (backbuffer != NULL)
+ if (backbuffer != nullptr)
{
(*d3dintf->surface.release)(backbuffer);
- backbuffer = NULL;
+ backbuffer = nullptr;
}
- if (black_surface != NULL)
+ if (black_surface != nullptr)
{
(*d3dintf->surface.release)(black_surface);
- black_surface = NULL;
+ black_surface = nullptr;
}
- if (black_texture != NULL)
+ if (black_texture != nullptr)
{
(*d3dintf->texture.release)(black_texture);
- black_texture = NULL;
+ black_texture = nullptr;
}
- if (avi_copy_texture != NULL)
+ if (avi_copy_texture != nullptr)
{
(*d3dintf->texture.release)(avi_copy_texture);
- avi_copy_texture = NULL;
+ avi_copy_texture = nullptr;
}
- if (avi_copy_surface != NULL)
+ if (avi_copy_surface != nullptr)
{
(*d3dintf->surface.release)(avi_copy_surface);
- avi_copy_surface = NULL;
+ avi_copy_surface = nullptr;
}
- if (avi_final_texture != NULL)
+ if (avi_final_texture != nullptr)
{
(*d3dintf->texture.release)(avi_final_texture);
- avi_final_texture = NULL;
+ avi_final_texture = nullptr;
}
- if (avi_final_target != NULL)
+ if (avi_final_target != nullptr)
{
(*d3dintf->surface.release)(avi_final_target);
- avi_final_target = NULL;
+ avi_final_target = nullptr;
}
shadow_bitmap.reset();
@@ -2175,619 +2180,74 @@ static slider_state *slider_alloc(running_machine &machine, int id, const char *
// assorted global slider accessors
//============================================================
-static INT32 slider_set(float *option, float scale, const char *fmt, std::string *str, INT32 newval)
-{
- if (option != NULL && newval != SLIDER_NOCHANGE)
- {
- *option = (float)newval * scale;
- }
- if (str != NULL)
- {
- strprintf(*str, fmt, *option);
- }
-
- return floor(*option / scale + 0.5f);
-}
-
-static INT32 slider_shadow_mask_tile_mode(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- hlsl_options *options = (hlsl_options*)arg;
- if (newval != SLIDER_NOCHANGE)
- {
- options->shadow_mask_tile_mode = newval;
- }
- if (str != NULL)
- {
- strprintf(*str, "%s", options->shadow_mask_tile_mode == 0 ? "Screen" : "Source");
- }
- options->params_dirty = true;
-
- return options->shadow_mask_tile_mode;
-}
-
-static INT32 slider_shadow_mask_alpha(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->shadow_mask_alpha), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_shadow_mask_x_count(running_machine &machine, void *arg, std::string *str, INT32 newval)
+enum slider_type
{
- hlsl_options *options = (hlsl_options*)arg;
- if (newval != SLIDER_NOCHANGE)
- {
- options->shadow_mask_count_x = newval;
- }
- if (str != NULL)
- {
- strprintf(*str, "%d", options->shadow_mask_count_x);
- }
- options->params_dirty = true;
-
- return options->shadow_mask_count_x;
-}
+ SLIDER_FLOAT,
+ SLIDER_INT_ENUM,
+ SLIDER_INT,
+ SLIDER_COLOR,
+ SLIDER_VEC2
+};
-static INT32 slider_shadow_mask_y_count(running_machine &machine, void *arg, std::string *str, INT32 newval)
+INT32 slider::update(std::string *str, INT32 newval)
{
- hlsl_options *options = (hlsl_options*)arg;
- if (newval != SLIDER_NOCHANGE)
+ switch (m_desc->slider_type)
{
- options->shadow_mask_count_y = newval;
- }
- if (str != NULL)
- {
- strprintf(*str, "%d", options->shadow_mask_count_y);
- }
- options->params_dirty = true;
-
- return options->shadow_mask_count_y;
-}
-
-static INT32 slider_shadow_mask_usize(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->shadow_mask_u_size), 1.0f / 32.0f, "%2.5f", str, newval);
-}
-
-static INT32 slider_shadow_mask_vsize(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->shadow_mask_v_size), 1.0f / 32.0f, "%2.5f", str, newval);
-}
-
-static INT32 slider_shadow_mask_uoffset(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->shadow_mask_u_offset), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_shadow_mask_voffset(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->shadow_mask_v_offset), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_curvature(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->curvature), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_round_corner(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->round_corner), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_smooth_border(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->smooth_border), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_reflection(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->reflection), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_vignetting(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->vignetting), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_scanline_alpha(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scanline_alpha), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_scanline_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scanline_scale), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_scanline_height(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scanline_height), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_scanline_bright_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scanline_bright_scale), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_scanline_bright_offset(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scanline_bright_offset), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_scanline_jitter(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scanline_jitter), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_hum_bar_alpha(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->hum_bar_alpha), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_defocus_x(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->defocus[0]), 0.1f, "%2.1f", str, newval);
-}
-
-static INT32 slider_defocus_y(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->defocus[1]), 0.1f, "%2.1f", str, newval);
-}
-
-static INT32 slider_red_converge_x(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->converge_x[0]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_red_converge_y(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->converge_y[0]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_green_converge_x(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->converge_x[1]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_green_converge_y(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->converge_y[1]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_blue_converge_x(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->converge_x[2]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_blue_converge_y(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->converge_y[2]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_red_radial_converge_x(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->radial_converge_x[0]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_red_radial_converge_y(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->radial_converge_y[0]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_green_radial_converge_x(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->radial_converge_x[1]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_green_radial_converge_y(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->radial_converge_y[1]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_blue_radial_converge_x(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->radial_converge_x[2]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_blue_radial_converge_y(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->radial_converge_y[2]), 0.1f, "%3.1f", str, newval);
-}
-
-static INT32 slider_red_from_r(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->red_ratio[0]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_red_from_g(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->red_ratio[1]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_red_from_b(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->red_ratio[2]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_green_from_r(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->grn_ratio[0]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_green_from_g(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->grn_ratio[1]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_green_from_b(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->grn_ratio[2]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_blue_from_r(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->blu_ratio[0]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_blue_from_g(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->blu_ratio[1]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_blue_from_b(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->blu_ratio[2]), 0.005f, "%2.3f", str, newval);
-}
-
-static INT32 slider_red_offset(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->offset[0]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_green_offset(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->offset[1]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_blue_offset(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->offset[2]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_red_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scale[0]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_green_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scale[1]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_blue_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->scale[2]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_red_power(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->power[0]), 0.05f, "%2.2f", str, newval);
-}
-
-static INT32 slider_green_power(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->power[1]), 0.05f, "%2.2f", str, newval);
-}
-
-static INT32 slider_blue_power(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->power[2]), 0.05f, "%2.2f", str, newval);
-}
-
-static INT32 slider_red_floor(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->floor[0]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_green_floor(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->floor[1]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_blue_floor(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->floor[2]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_red_phosphor_life(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->phosphor[0]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_green_phosphor_life(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->phosphor[1]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_blue_phosphor_life(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->phosphor[2]), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_saturation(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->saturation), 0.01f, "%2.2f", str, newval);
-}
-
-static INT32 slider_vector_attenuation(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->vector_length_scale), 0.01f, "%1.2f", str, newval);
-}
+ case SLIDER_INT_ENUM:
+ {
+ INT32 *val_ptr = reinterpret_cast<INT32 *>(m_value);
+ *m_dirty = true;
+ if (newval != SLIDER_NOCHANGE)
+ {
+ *val_ptr = newval;
+ }
+ if (str != nullptr)
+ {
+ *str = string_format(m_desc->format, m_desc->strings[*val_ptr]);
+ }
+ return *val_ptr;
+ }
-static INT32 slider_vector_length_max(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->vector_length_ratio), 1.0f, "%4f", str, newval);
-}
+ case SLIDER_INT:
+ {
+ int *val_ptr = reinterpret_cast<int *>(m_value);
+ *m_dirty = true;
+ if (newval != SLIDER_NOCHANGE)
+ {
+ *val_ptr = newval;
+ }
+ if (str != nullptr)
+ {
+ *str = string_format(m_desc->format, *val_ptr);
+ }
+ return *val_ptr;
+ }
-static INT32 slider_bloom_blend_mode(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- hlsl_options *options = (hlsl_options*)arg;
- if (newval != SLIDER_NOCHANGE)
- {
- options->bloom_blend_mode = newval;
- }
- if (str != NULL)
- {
- strprintf(*str, "%s", options->bloom_blend_mode == 0 ? "Addition" : "Darken");
+ default:
+ {
+ float *val_ptr = reinterpret_cast<float *>(m_value);
+ *m_dirty = true;
+ if (newval != SLIDER_NOCHANGE)
+ {
+ *val_ptr = (float)newval * m_desc->scale;
+ }
+ if (str != nullptr)
+ {
+ *str = string_format(m_desc->format, *val_ptr);
+ }
+ return (INT32)floor(*val_ptr / m_desc->scale + 0.5f);
+ }
}
- options->params_dirty = true;
-
- return options->bloom_blend_mode;
-}
-
-static INT32 slider_bloom_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_scale), 0.001f, "%1.3f", str, newval);
-}
-
-static INT32 slider_bloom_red_overdrive(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_overdrive[0]), 0.001f, "%1.3f", str, newval);
-}
-
-static INT32 slider_bloom_green_overdrive(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_overdrive[1]), 0.001f, "%1.3f", str, newval);
-}
-
-static INT32 slider_bloom_blue_overdrive(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_overdrive[2]), 0.001f, "%1.3f", str, newval);
-}
-
-static INT32 slider_bloom_lvl0_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level0_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl1_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level1_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl2_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level2_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl3_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level3_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl4_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level4_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl5_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level5_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl6_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level6_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl7_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level7_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl8_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level8_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl9_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level9_weight), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_bloom_lvl10_scale(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->bloom_level10_weight), 0.01f, "%1.2f", str, newval);
+ return 0;
}
-
-static INT32 slider_ntsc_enable(running_machine &machine, void *arg, std::string *str, INT32 newval)
+static INT32 slider_update_trampoline(running_machine &machine, void *arg, std::string *str, INT32 newval)
{
- hlsl_options *options = (hlsl_options*)arg;
- if (newval != SLIDER_NOCHANGE)
+ if (arg != nullptr)
{
- options->yiq_enable = newval;
+ return reinterpret_cast<slider *>(arg)->update(str, newval);
}
- if (str != NULL)
- {
- strprintf(*str, "%s", options->yiq_enable == 0 ? "Off" : "On");
- }
- options->params_dirty = true;
-
- return options->yiq_enable;
-}
-
-// static INT32 slider_ntsc_phase_count(running_machine &machine, void *arg, std::string *str, INT32 newval)
-// {
-// hlsl_options *options = (hlsl_options*)arg;
-// if (newval != SLIDER_NOCHANGE)
-// {
-// options->yiq_phase_count = newval;
-// }
-// if (str != NULL)
-// {
-// strprintf(*str, "%d", options->yiq_phase_count);
-// }
-// options->params_dirty = true;
-
-// return options->yiq_phase_count;
-// }
-
-static INT32 slider_ntsc_jitter(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_jitter), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_ntsc_a_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_a), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_ntsc_b_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_b), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_ntsc_p_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_p), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_ntsc_o_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_o), 0.01f, "%1.2f", str, newval);
-}
-
-static INT32 slider_ntsc_cc_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_cc), 0.0001f, "%1.4f", str, newval);
-}
-
-static INT32 slider_ntsc_n_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_n), 0.01f, "%1.4f", str, newval);
-}
-
-static INT32 slider_ntsc_y_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_y), 0.01f, "%1.4f", str, newval);
-}
-
-static INT32 slider_ntsc_i_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_i), 0.01f, "%1.4f", str, newval);
-}
-
-static INT32 slider_ntsc_q_value(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_q), 0.01f, "%1.4f", str, newval);
-}
-
-static INT32 slider_ntsc_scan_time(running_machine &machine, void *arg, std::string *str, INT32 newval)
-{
- ((hlsl_options*)arg)->params_dirty = true;
- return slider_set(&(((hlsl_options*)arg)->yiq_scan_time), 0.01f, "%1.2f", str, newval);
+ return 0;
}
hlsl_options shaders::last_options = { false };
@@ -2816,50 +2276,23 @@ enum slider_option
SLIDER_SCANLINE_BRIGHT_OFFSET,
SLIDER_SCANLINE_JITTER,
SLIDER_HUM_BAR_ALPHA,
- SLIDER_DEFOCUS_X,
- SLIDER_DEFOCUS_Y,
- SLIDER_RED_CONVERGE_X,
- SLIDER_RED_CONVERGE_Y,
- SLIDER_GREEN_CONVERGE_X,
- SLIDER_GREEN_CONVERGE_Y,
- SLIDER_BLUE_CONVERGE_X,
- SLIDER_BLUE_CONVERGE_Y,
- SLIDER_RED_RADIAL_CONVERGE_X,
- SLIDER_RED_RADIAL_CONVERGE_Y,
- SLIDER_GREEN_RADIAL_CONVERGE_X,
- SLIDER_GREEN_RADIAL_CONVERGE_Y,
- SLIDER_BLUE_RADIAL_CONVERGE_X,
- SLIDER_BLUE_RADIAL_CONVERGE_Y,
- SLIDER_RED_FROM_R,
- SLIDER_RED_FROM_G,
- SLIDER_RED_FROM_B,
- SLIDER_GREEN_FROM_R,
- SLIDER_GREEN_FROM_G,
- SLIDER_GREEN_FROM_B,
- SLIDER_BLUE_FROM_R,
- SLIDER_BLUE_FROM_G,
- SLIDER_BLUE_FROM_B,
+ SLIDER_DEFOCUS,
+ SLIDER_CONVERGE_X,
+ SLIDER_CONVERGE_Y,
+ SLIDER_RADIAL_CONVERGE_X,
+ SLIDER_RADIAL_CONVERGE_Y,
+ SLIDER_RED_RATIO,
+ SLIDER_GREEN_RATIO,
+ SLIDER_BLUE_RATIO,
SLIDER_SATURATION,
- SLIDER_RED_OFFSET,
- SLIDER_GREEN_OFFSET,
- SLIDER_BLUE_OFFSET,
- SLIDER_RED_SCALE,
- SLIDER_GREEN_SCALE,
- SLIDER_BLUE_SCALE,
- SLIDER_RED_POWER,
- SLIDER_GREEN_POWER,
- SLIDER_BLUE_POWER,
- SLIDER_RED_FLOOR,
- SLIDER_GREEN_FLOOR,
- SLIDER_BLUE_FLOOR,
- SLIDER_RED_PHOSPHOR,
- SLIDER_GREEN_PHOSPHOR,
- SLIDER_BLUE_PHOSPHOR,
+ SLIDER_OFFSET,
+ SLIDER_SCALE,
+ SLIDER_POWER,
+ SLIDER_FLOOR,
+ SLIDER_PHOSPHOR,
SLIDER_BLOOM_BLEND_MODE,
SLIDER_BLOOM_SCALE,
- SLIDER_BLOOM_RED_OVERDRIVE,
- SLIDER_BLOOM_GREEN_OVERDRIVE,
- SLIDER_BLOOM_BLUE_OVERDRIVE,
+ SLIDER_BLOOM_OVERDRIVE,
SLIDER_BLOOM_LVL0_SCALE,
SLIDER_BLOOM_LVL1_SCALE,
SLIDER_BLOOM_LVL2_SCALE,
@@ -2885,98 +2318,81 @@ enum slider_option
SLIDER_NTSC_SCAN_TIME
};
-shaders::slider_desc shaders::s_sliders[] =
-{
- { "Vector Length Attenuation", 0, 50, 100, 1, SLIDER_SCREEN_TYPE_VECTOR, slider_vector_attenuation, SLIDER_VECTOR_ATTENUATION },
- { "Vector Attenuation Length Limit", 1, 500, 1000, 1, SLIDER_SCREEN_TYPE_VECTOR, slider_vector_length_max, SLIDER_VECTOR_LENGTH_MAX },
- { "Shadow Mask Tile Mode", 0, 0, 1, 1, SLIDER_SCREEN_TYPE_ANY, slider_shadow_mask_tile_mode, SLIDER_SHADOW_MASK_TILE_MODE },
- { "Shadow Mask Darkness", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_shadow_mask_alpha, SLIDER_SHADOW_MASK_ALPHA },
- { "Shadow Mask X Count", 1, 1, 1024, 1, SLIDER_SCREEN_TYPE_ANY, slider_shadow_mask_x_count, SLIDER_SHADOW_MASK_X_COUNT },
- { "Shadow Mask Y Count", 1, 1, 1024, 1, SLIDER_SCREEN_TYPE_ANY, slider_shadow_mask_y_count, SLIDER_SHADOW_MASK_Y_COUNT },
- { "Shadow Mask Pixel Count X", 1, 1, 64, 1, SLIDER_SCREEN_TYPE_ANY, slider_shadow_mask_usize, SLIDER_SHADOW_MASK_U_SIZE },
- { "Shadow Mask Pixel Count Y", 1, 1, 64, 1, SLIDER_SCREEN_TYPE_ANY, slider_shadow_mask_vsize, SLIDER_SHADOW_MASK_V_SIZE },
- { "Shadow Mask Offset X", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_shadow_mask_uoffset, SLIDER_SHADOW_MASK_U_OFFSET },
- { "Shadow Mask Offset Y", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_shadow_mask_voffset, SLIDER_SHADOW_MASK_V_OFFSET },
- { "Screen Curvature", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_curvature, SLIDER_CURVATURE },
- { "Screen Round Corner", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_round_corner, SLIDER_ROUND_CORNER },
- { "Screen Smooth Border", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_smooth_border, SLIDER_SMOOTH_BORDER },
- { "Screen Reflection", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_reflection, SLIDER_REFLECTION },
- { "Image Vignetting", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_vignetting, SLIDER_VIGNETTING },
- { "Scanline Darkness", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_scanline_alpha, SLIDER_SCANLINE_ALPHA },
- { "Scanline Screen Scale", 0, 100, 400, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_scanline_scale, SLIDER_SCANLINE_SCALE },
- { "Scanline Height", 0, 100, 400, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_scanline_height, SLIDER_SCANLINE_HEIGHT },
- { "Scanline Brightness", 0, 100, 400, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_scanline_bright_scale, SLIDER_SCANLINE_BRIGHT_SCALE },
- { "Scanline Brightness Overdrive", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_scanline_bright_offset, SLIDER_SCANLINE_BRIGHT_OFFSET },
- { "Scanline Jitter", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_scanline_jitter, SLIDER_SCANLINE_JITTER },
- { "Hum Bar Darkness", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_hum_bar_alpha, SLIDER_HUM_BAR_ALPHA },
- { "Defocus X", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_defocus_x, SLIDER_DEFOCUS_X },
- { "Defocus Y", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_defocus_y, SLIDER_DEFOCUS_Y },
- { "Red Position Offset X", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_converge_x, SLIDER_RED_CONVERGE_X },
- { "Red Position Offset Y", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_converge_y, SLIDER_RED_CONVERGE_Y },
- { "Green Position Offset X", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_converge_x, SLIDER_GREEN_CONVERGE_X },
- { "Green Position Offset Y", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_converge_y, SLIDER_GREEN_CONVERGE_Y },
- { "Blue Position Offset X", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_converge_x, SLIDER_BLUE_CONVERGE_X },
- { "Blue Position Offset Y", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_converge_y, SLIDER_BLUE_CONVERGE_Y },
- { "Red Convergence X", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_radial_converge_x, SLIDER_RED_RADIAL_CONVERGE_X },
- { "Red Convergence Y", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_radial_converge_y, SLIDER_RED_RADIAL_CONVERGE_Y },
- { "Green Convergence X", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_radial_converge_x, SLIDER_GREEN_RADIAL_CONVERGE_X },
- { "Green Convergence Y", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_radial_converge_y, SLIDER_GREEN_RADIAL_CONVERGE_Y },
- { "Blue Convergence X", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_radial_converge_x, SLIDER_BLUE_RADIAL_CONVERGE_X },
- { "Blue Convergence Y", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_radial_converge_y, SLIDER_BLUE_RADIAL_CONVERGE_Y },
- { "Red Output from Red Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_red_from_r, SLIDER_RED_FROM_R },
- { "Red Output from Green Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_red_from_g, SLIDER_RED_FROM_G },
- { "Red Output from Blue Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_red_from_b, SLIDER_RED_FROM_B },
- { "Green Output from Red Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_green_from_r, SLIDER_GREEN_FROM_R },
- { "Green Output from Green Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_green_from_g, SLIDER_GREEN_FROM_G },
- { "Green Output from Blue Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_green_from_b, SLIDER_GREEN_FROM_B },
- { "Blue Output from Red Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_blue_from_r, SLIDER_BLUE_FROM_R },
- { "Blue Output from Green Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_blue_from_g, SLIDER_BLUE_FROM_G },
- { "Blue Output from Blue Input", -400, 0, 400, 5, SLIDER_SCREEN_TYPE_ANY, slider_blue_from_b, SLIDER_BLUE_FROM_B },
- { "Saturation", 0, 100, 400, 1, SLIDER_SCREEN_TYPE_ANY, slider_saturation, SLIDER_SATURATION },
- { "Red DC Offset", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_offset, SLIDER_RED_OFFSET },
- { "Green DC Offset", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_offset, SLIDER_GREEN_OFFSET },
- { "Blue DC Offset", -100, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_offset, SLIDER_BLUE_OFFSET },
- { "Red Scale", -200, 100, 200, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_scale, SLIDER_RED_SCALE },
- { "Green Scale", -200, 100, 200, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_scale, SLIDER_GREEN_SCALE },
- { "Blue Scale", -200, 100, 200, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_scale, SLIDER_BLUE_SCALE },
- { "Red Gamma", -80, 0, 80, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_power, SLIDER_RED_POWER },
- { "Green Gamma", -80, 0, 80, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_power, SLIDER_GREEN_POWER },
- { "Blue Gamma", -80, 0, 80, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_power, SLIDER_BLUE_POWER },
- { "Red Floor", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_floor, SLIDER_RED_FLOOR },
- { "Green Floor", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_floor, SLIDER_GREEN_FLOOR },
- { "Blue Floor", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_floor, SLIDER_BLUE_FLOOR },
- { "Red Phosphor Life", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_red_phosphor_life, SLIDER_RED_PHOSPHOR },
- { "Green Phosphor Life", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_green_phosphor_life, SLIDER_GREEN_PHOSPHOR },
- { "Blue Phosphor Life", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_blue_phosphor_life, SLIDER_BLUE_PHOSPHOR },
- { "Bloom Blend Mode", 0, 0, 1, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_blend_mode, SLIDER_BLOOM_BLEND_MODE },
- { "Bloom Scale", 0, 0, 2000, 5, SLIDER_SCREEN_TYPE_ANY, slider_bloom_scale, SLIDER_BLOOM_SCALE },
- { "Bloom Red Overdrive", 0, 0, 2000, 5, SLIDER_SCREEN_TYPE_ANY, slider_bloom_red_overdrive, SLIDER_BLOOM_RED_OVERDRIVE },
- { "Bloom Green Overdrive", 0, 0, 2000, 5, SLIDER_SCREEN_TYPE_ANY, slider_bloom_green_overdrive, SLIDER_BLOOM_GREEN_OVERDRIVE },
- { "Bloom Blue Overdrive", 0, 0, 2000, 5, SLIDER_SCREEN_TYPE_ANY, slider_bloom_blue_overdrive, SLIDER_BLOOM_BLUE_OVERDRIVE },
- { "Bloom Level 0 Scale", 0, 100, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl0_scale, SLIDER_BLOOM_LVL0_SCALE },
- { "Bloom Level 1 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl1_scale, SLIDER_BLOOM_LVL1_SCALE },
- { "Bloom Level 2 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl2_scale, SLIDER_BLOOM_LVL2_SCALE },
- { "Bloom Level 3 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl3_scale, SLIDER_BLOOM_LVL3_SCALE },
- { "Bloom Level 4 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl4_scale, SLIDER_BLOOM_LVL4_SCALE },
- { "Bloom Level 5 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl5_scale, SLIDER_BLOOM_LVL5_SCALE },
- { "Bloom Level 6 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl6_scale, SLIDER_BLOOM_LVL6_SCALE },
- { "Bloom Level 7 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl7_scale, SLIDER_BLOOM_LVL7_SCALE },
- { "Bloom Level 8 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl8_scale, SLIDER_BLOOM_LVL8_SCALE },
- { "Bloom Level 9 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl9_scale, SLIDER_BLOOM_LVL9_SCALE },
- { "Bloom Level 10 Scale", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_ANY, slider_bloom_lvl10_scale, SLIDER_BLOOM_LVL10_SCALE },
- { "NTSC processing", 0, 0, 1, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_enable, SLIDER_NTSC_ENABLE },
- { "Signal Jitter", 0, 0, 100, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_jitter, SLIDER_NTSC_JITTER },
- { "A Value", -100, 50, 100, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_a_value, SLIDER_NTSC_A_VALUE },
- { "B Value", -100, 50, 100, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_b_value, SLIDER_NTSC_B_VALUE },
- { "Incoming Pixel Clock Scaling", -300, 100, 300, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_p_value, SLIDER_NTSC_P_VALUE },
- { "Outgoing Color Carrier Phase", -300, 0, 300, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_o_value, SLIDER_NTSC_O_VALUE },
- { "Color Carrier Frequency", 0, 35795, 60000, 5, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_cc_value, SLIDER_NTSC_CC_VALUE },
- { "Y Notch", 0, 100, 600, 5, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_n_value, SLIDER_NTSC_N_VALUE },
- { "Y Frequency", 0, 600, 600, 5, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_y_value, SLIDER_NTSC_Y_VALUE },
- { "I Frequency", 0, 120, 600, 5, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_i_value, SLIDER_NTSC_I_VALUE },
- { "Q Frequency", 0, 60, 600, 5, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_q_value, SLIDER_NTSC_Q_VALUE },
- { "Scanline Duration", 0, 5260, 10000, 1, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, slider_ntsc_scan_time, SLIDER_NTSC_SCAN_TIME },
- { NULL, 0, 0, 0, 0, 0, NULL, -1 },
+enum slider_screen_type
+{
+ SLIDER_SCREEN_TYPE_NONE = 0,
+ SLIDER_SCREEN_TYPE_RASTER = 1,
+ SLIDER_SCREEN_TYPE_VECTOR = 2,
+ SLIDER_SCREEN_TYPE_LCD = 4,
+ SLIDER_SCREEN_TYPE_LCD_OR_RASTER = SLIDER_SCREEN_TYPE_RASTER | SLIDER_SCREEN_TYPE_LCD,
+ SLIDER_SCREEN_TYPE_ANY = SLIDER_SCREEN_TYPE_RASTER | SLIDER_SCREEN_TYPE_VECTOR | SLIDER_SCREEN_TYPE_LCD
+};
+
+slider_desc shaders::s_sliders[] =
+{
+ { "Vector Length Attenuation", 0, 50, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_VECTOR, SLIDER_VECTOR_ATTENUATION, 0.01f, "%1.2f", {} },
+ { "Vector Attenuation Length Limit", 1, 500, 1000, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_VECTOR, SLIDER_VECTOR_LENGTH_MAX, 1.0f, "%4f", {} },
+ { "Shadow Mask Tile Mode", 0, 0, 1, 1, SLIDER_INT_ENUM, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_TILE_MODE, 0, "%s", { "Screen", "Source" } },
+ { "Shadow Mask Darkness", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_ALPHA, 0.01f, "%1.2f", {} },
+ { "Shadow Mask X Count", 1, 1, 1024, 1, SLIDER_INT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_X_COUNT, 0, "%d", {} },
+ { "Shadow Mask Y Count", 1, 1, 1024, 1, SLIDER_INT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_Y_COUNT, 0, "%d", {} },
+ { "Shadow Mask Pixel Count X", 1, 1, 64, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_U_SIZE, 0.03125f, "%2.5f", {} },
+ { "Shadow Mask Pixel Count Y", 1, 1, 64, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_V_SIZE, 0.03125f, "%2.5f", {} },
+ { "Shadow Mask Offset X", -100, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_U_OFFSET, 0.01f, "%1.2f", {} },
+ { "Shadow Mask Offset Y", -100, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SHADOW_MASK_V_OFFSET, 0.01f, "%1.2f", {} },
+ { "Screen Curvature", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_CURVATURE, 0.01f, "%2.2f", {} },
+ { "Screen Round Corner", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_ROUND_CORNER, 0.01f, "%1.2f", {} },
+ { "Screen Smooth Border", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SMOOTH_BORDER, 0.01f, "%1.2f", {} },
+ { "Screen Reflection", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_REFLECTION, 0.01f, "%1.2f", {} },
+ { "Image Vignetting", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_VIGNETTING, 0.01f, "%1.2f", {} },
+ { "Scanline Darkness", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_SCANLINE_ALPHA, 0.01f, "%1.2f", {} },
+ { "Scanline Screen Scale", 0, 100, 400, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_SCANLINE_SCALE, 0.01f, "%1.2f", {} },
+ { "Scanline Height", 0, 100, 400, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_SCANLINE_HEIGHT, 0.01f, "%1.2f", {} },
+ { "Scanline Brightness", 0, 100, 400, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_SCANLINE_BRIGHT_SCALE, 0.01f, "%1.2f", {} },
+ { "Scanline Brightness Overdrive", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_SCANLINE_BRIGHT_OFFSET, 0.01f, "%1.2f", {} },
+ { "Scanline Jitter", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_SCANLINE_JITTER, 0.01f, "%1.2f", {} },
+ { "Hum Bar Darkness", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_HUM_BAR_ALPHA, 0.01f, "%2.2f", {} },
+ { "Defocus", 0, 0, 100, 1, SLIDER_VEC2, SLIDER_SCREEN_TYPE_ANY, SLIDER_DEFOCUS, 0.1f, "%2.1f", {} },
+ { "Position Offset X,", -100, 0, 100, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_CONVERGE_X, 0.1f, "%3.1f", {} },
+ { "Position Offset Y,", -100, 0, 100, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_CONVERGE_Y, 0.1f, "%3.1f", {} },
+ { "Convergence X,", -100, 0, 100, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_RADIAL_CONVERGE_X, 0.1f, "%3.1f", {} },
+ { "Convergence Y,", -100, 0, 100, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_RADIAL_CONVERGE_Y, 0.1f, "%3.1f", {} },
+ { "Red Input Percent in", -400, 0, 400, 5, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_RED_RATIO, 0.005f, "%2.3f", {} },
+ { "Green Input Percent in", -400, 0, 400, 5, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_GREEN_RATIO, 0.005f, "%2.3f", {} },
+ { "Blue Input Percent in", -400, 0, 400, 5, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLUE_RATIO, 0.005f, "%2.3f", {} },
+ { "Saturation", 0, 100, 400, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_SATURATION, 0.1f, "%2.2f", {} },
+ { "DC Offset,", -100, 0, 100, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_OFFSET, 0.01f, "%2.2f", {} },
+ { "Scale,", -200, 100, 200, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_SCALE, 0.01f, "%2.2f", {} },
+ { "Gamma,", -80, 0, 80, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_POWER, 0.1f, "%2.2f", {} },
+ { "Floor,", 0, 0, 100, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_FLOOR, 0.01f, "%2.2f", {} },
+ { "Phosphor Life,", 0, 0, 100, 1, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_PHOSPHOR, 0.01f, "%2.2f", {} },
+ { "Bloom Blend Mode", 0, 0, 1, 1, SLIDER_INT_ENUM, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_BLEND_MODE, 0, "%s", { "Brighten", "Darken" } },
+ { "Bloom Scale", 0, 0, 2000, 5, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_SCALE, 0.001f, "%1.3f", {} },
+ { "Bloom Overdrive,", 0, 0, 2000, 5, SLIDER_COLOR, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_OVERDRIVE, 0.001f, "%1.3f", {} },
+ { "Bloom Level 0 Scale", 0, 100, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL0_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 1 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL1_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 2 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL2_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 3 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL3_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 4 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL4_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 5 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL5_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 6 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL6_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 7 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL7_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 8 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL8_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 9 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL9_SCALE, 0.01f, "%1.2f", {} },
+ { "Bloom Level 10 Scale", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_ANY, SLIDER_BLOOM_LVL10_SCALE, 0.01f, "%1.2f", {} },
+ { "NTSC processing", 0, 0, 1, 1, SLIDER_INT_ENUM, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_ENABLE, 0, "%s", { "Off", "On" } },
+ { "Signal Jitter", 0, 0, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_JITTER, 0.01f, "%1.2f", {} },
+ { "A Value", -100, 50, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_A_VALUE, 0.01f, "%1.2f", {} },
+ { "B Value", -100, 50, 100, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_B_VALUE, 0.01f, "%1.2f", {} },
+ { "Incoming Pixel Clock Scaling", -300, 100, 300, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_P_VALUE, 0.01f, "%1.2f", {} },
+ { "Outgoing Color Carrier Phase", -300, 0, 300, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_O_VALUE, 0.01f, "%1.2f", {} },
+ { "Color Carrier Frequency", 0, 35795, 60000, 5, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_CC_VALUE, 0.001f, "%1.4f", {} },
+ { "Y Notch", 0, 100, 600, 5, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_N_VALUE, 0.01f, "%1.4f", {} },
+ { "Y Frequency", 0, 600, 600, 5, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_Y_VALUE, 0.01f, "%1.4f", {} },
+ { "I Frequency", 0, 120, 600, 5, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_I_VALUE, 0.01f, "%1.4f", {} },
+ { "Q Frequency", 0, 60, 600, 5, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_Q_VALUE, 0.01f, "%1.4f", {} },
+ { "Scanline Duration", 0, 5260, 10000, 1, SLIDER_FLOAT, SLIDER_SCREEN_TYPE_LCD_OR_RASTER, SLIDER_NTSC_SCAN_TIME, 0.01f, "%1.2f", {} },
+ { nullptr, 0, 0, 0, 0, 0, 0, -1, 0, nullptr, {} }
};
@@ -2984,28 +2400,134 @@ shaders::slider_desc shaders::s_sliders[] =
// init_slider_list
//============================================================
+void *shaders::get_slider_option(int id, int index)
+{
+ switch (id)
+ {
+ case SLIDER_VECTOR_ATTENUATION: return &(options->vector_length_scale);
+ case SLIDER_VECTOR_LENGTH_MAX: return &(options->vector_length_ratio);
+ case SLIDER_SHADOW_MASK_TILE_MODE: return &(options->shadow_mask_tile_mode);
+ case SLIDER_SHADOW_MASK_ALPHA: return &(options->shadow_mask_alpha);
+ case SLIDER_SHADOW_MASK_X_COUNT: return &(options->shadow_mask_count_x);
+ case SLIDER_SHADOW_MASK_Y_COUNT: return &(options->shadow_mask_count_y);
+ case SLIDER_SHADOW_MASK_U_SIZE: return &(options->shadow_mask_u_size);
+ case SLIDER_SHADOW_MASK_V_SIZE: return &(options->shadow_mask_v_size);
+ case SLIDER_SHADOW_MASK_U_OFFSET: return &(options->shadow_mask_u_offset);
+ case SLIDER_SHADOW_MASK_V_OFFSET: return &(options->shadow_mask_v_offset);
+ case SLIDER_CURVATURE: return &(options->curvature);
+ case SLIDER_ROUND_CORNER: return &(options->round_corner);
+ case SLIDER_SMOOTH_BORDER: return &(options->smooth_border);
+ case SLIDER_REFLECTION: return &(options->reflection);
+ case SLIDER_VIGNETTING: return &(options->vignetting);
+ case SLIDER_SCANLINE_ALPHA: return &(options->scanline_alpha);
+ case SLIDER_SCANLINE_SCALE: return &(options->scanline_scale);
+ case SLIDER_SCANLINE_HEIGHT: return &(options->scanline_height);
+ case SLIDER_SCANLINE_BRIGHT_SCALE: return &(options->scanline_bright_scale);
+ case SLIDER_SCANLINE_BRIGHT_OFFSET: return &(options->scanline_bright_offset);
+ case SLIDER_SCANLINE_JITTER: return &(options->scanline_jitter);
+ case SLIDER_HUM_BAR_ALPHA: return &(options->hum_bar_alpha);
+ case SLIDER_DEFOCUS: return &(options->defocus[index]);
+ case SLIDER_CONVERGE_X: return &(options->converge_x[index]);
+ case SLIDER_CONVERGE_Y: return &(options->converge_y[index]);
+ case SLIDER_RADIAL_CONVERGE_X: return &(options->radial_converge_x[index]);
+ case SLIDER_RADIAL_CONVERGE_Y: return &(options->radial_converge_y[index]);
+ case SLIDER_RED_RATIO: return &(options->red_ratio[index]);
+ case SLIDER_GREEN_RATIO: return &(options->grn_ratio[index]);
+ case SLIDER_BLUE_RATIO: return &(options->blu_ratio[index]);
+ case SLIDER_SATURATION: return &(options->saturation);
+ case SLIDER_OFFSET: return &(options->offset[index]);
+ case SLIDER_SCALE: return &(options->scale[index]);
+ case SLIDER_POWER: return &(options->power[index]);
+ case SLIDER_FLOOR: return &(options->floor[index]);
+ case SLIDER_PHOSPHOR: return &(options->phosphor[index]);
+ case SLIDER_BLOOM_BLEND_MODE: return &(options->bloom_blend_mode);
+ case SLIDER_BLOOM_SCALE: return &(options->bloom_scale);
+ case SLIDER_BLOOM_OVERDRIVE: return &(options->bloom_overdrive[index]);
+ case SLIDER_BLOOM_LVL0_SCALE: return &(options->bloom_level0_weight);
+ case SLIDER_BLOOM_LVL1_SCALE: return &(options->bloom_level1_weight);
+ case SLIDER_BLOOM_LVL2_SCALE: return &(options->bloom_level2_weight);
+ case SLIDER_BLOOM_LVL3_SCALE: return &(options->bloom_level3_weight);
+ case SLIDER_BLOOM_LVL4_SCALE: return &(options->bloom_level4_weight);
+ case SLIDER_BLOOM_LVL5_SCALE: return &(options->bloom_level5_weight);
+ case SLIDER_BLOOM_LVL6_SCALE: return &(options->bloom_level6_weight);
+ case SLIDER_BLOOM_LVL7_SCALE: return &(options->bloom_level7_weight);
+ case SLIDER_BLOOM_LVL8_SCALE: return &(options->bloom_level8_weight);
+ case SLIDER_BLOOM_LVL9_SCALE: return &(options->bloom_level9_weight);
+ case SLIDER_BLOOM_LVL10_SCALE: return &(options->bloom_level10_weight);
+ case SLIDER_NTSC_ENABLE: return &(options->yiq_enable);
+ case SLIDER_NTSC_JITTER: return &(options->yiq_jitter);
+ case SLIDER_NTSC_A_VALUE: return &(options->yiq_a);
+ case SLIDER_NTSC_B_VALUE: return &(options->yiq_b);
+ case SLIDER_NTSC_P_VALUE: return &(options->yiq_p);
+ case SLIDER_NTSC_O_VALUE: return &(options->yiq_o);
+ case SLIDER_NTSC_CC_VALUE: return &(options->yiq_cc);
+ case SLIDER_NTSC_N_VALUE: return &(options->yiq_n);
+ case SLIDER_NTSC_Y_VALUE: return &(options->yiq_y);
+ case SLIDER_NTSC_I_VALUE: return &(options->yiq_i);
+ case SLIDER_NTSC_Q_VALUE: return &(options->yiq_q);
+ case SLIDER_NTSC_SCAN_TIME: return &(options->yiq_scan_time);
+ }
+ return nullptr;
+}
+
slider_state *shaders::init_slider_list()
{
if (!master_enable || !d3dintf->post_fx_available)
{
- g_slider_list = NULL;
- return NULL;
+ g_slider_list = nullptr;
+ return nullptr;
}
- slider_state *listhead = NULL;
+ slider_state *listhead = nullptr;
slider_state **tailptr = &listhead;
- for (int index = 0; s_sliders[index].name != NULL; index++)
+ for (int index = 0; s_sliders[index].name != nullptr; index++)
{
- slider_desc *slider = &s_sliders[index];
+ slider_desc *desc = &s_sliders[index];
int screen_type = machine->first_screen()->screen_type();
- if ((screen_type == SCREEN_TYPE_VECTOR && (slider->screen_type & SLIDER_SCREEN_TYPE_VECTOR) == SLIDER_SCREEN_TYPE_VECTOR) ||
- (screen_type == SCREEN_TYPE_RASTER && (slider->screen_type & SLIDER_SCREEN_TYPE_RASTER) == SLIDER_SCREEN_TYPE_RASTER) ||
- (screen_type == SCREEN_TYPE_LCD && (slider->screen_type & SLIDER_SCREEN_TYPE_LCD) == SLIDER_SCREEN_TYPE_LCD))
+ if ((screen_type == SCREEN_TYPE_VECTOR && (desc->screen_type & SLIDER_SCREEN_TYPE_VECTOR) == SLIDER_SCREEN_TYPE_VECTOR) ||
+ (screen_type == SCREEN_TYPE_RASTER && (desc->screen_type & SLIDER_SCREEN_TYPE_RASTER) == SLIDER_SCREEN_TYPE_RASTER) ||
+ (screen_type == SCREEN_TYPE_LCD && (desc->screen_type & SLIDER_SCREEN_TYPE_LCD) == SLIDER_SCREEN_TYPE_LCD))
{
- *tailptr = slider_alloc(*machine, slider->id, slider->name, slider->minval, slider->defval, slider->maxval, slider->step, slider->adjustor, (void*)options);
- tailptr = &(*tailptr)->next;
+ int count;
+ switch (desc->slider_type)
+ {
+ case SLIDER_VEC2:
+ count = 2;
+ break;
+ case SLIDER_COLOR:
+ count = 3;
+ break;
+ default:
+ count = 1;
+ break;
+ }
+ for (int index = 0; index < count; index++)
+ {
+ slider* slider_arg = new slider(desc, get_slider_option(desc->id, index), &options->params_dirty);
+ sliders.push_back(slider_arg);
+ std::string name = desc->name;
+ switch (desc->slider_type)
+ {
+ case SLIDER_VEC2:
+ {
+ std::string names[2] = { " X", " Y" };
+ name = name + names[index];
+ break;
+ }
+ case SLIDER_COLOR:
+ {
+ std::string names[3] = { " Red", " Green", " Blue" };
+ name = name + names[index];
+ break;
+ }
+ default:
+ break;
+ }
+ *tailptr = slider_alloc(*machine, desc->id, name.c_str(), desc->minval, desc->defval, desc->maxval, desc->step, slider_update_trampoline, slider_arg);
+ tailptr = &(*tailptr)->next;
+ }
}
}
@@ -3021,13 +2543,13 @@ uniform::uniform(effect *shader, const char *name, uniform_type type, int id)
{
m_shader = shader;
m_type = type;
- m_next = NULL;
- m_handle = m_shader->get_parameter(NULL, name);
+ m_next = nullptr;
+ m_handle = m_shader->get_parameter(nullptr, name);
m_ival = 0;
m_bval = false;
memset(m_vec, 0, sizeof(float) * 4);
- m_mval = NULL;
- m_texture = NULL;
+ m_mval = nullptr;
+ m_texture = nullptr;
m_id = id;
switch (type)
@@ -3080,7 +2602,7 @@ void uniform::update()
}
case CU_SOURCE_DIMS:
{
- if (shadersys->curr_texture != NULL)
+ if (shadersys->curr_texture != nullptr)
{
vec2f sourcedims = shadersys->curr_texture->get_rawdims();
m_shader->set_vector("SourceDims", 2, &sourcedims.c.x);
@@ -3094,7 +2616,7 @@ void uniform::update()
}
case CU_SOURCE_RECT:
{
- if (shadersys->curr_texture != NULL)
+ if (shadersys->curr_texture != nullptr)
{
vec2f delta = shadersys->curr_texture->get_uvstop() - shadersys->curr_texture->get_uvstart();
m_shader->set_vector("SourceRect", 2, &delta.c.x);
@@ -3108,7 +2630,7 @@ void uniform::update()
}
case CU_TARGET_DIMS:
{
- if (shadersys->curr_render_target != NULL)
+ if (shadersys->curr_render_target != nullptr)
{
float targetdims[2] = {
static_cast<float>(shadersys->curr_render_target->target_width),
@@ -3119,7 +2641,7 @@ void uniform::update()
}
case CU_QUAD_DIMS:
{
- if (shadersys->curr_poly != NULL)
+ if (shadersys->curr_poly != nullptr)
{
float quaddims[2] = {
shadersys->curr_poly->get_prim_width(),
@@ -3169,7 +2691,7 @@ void uniform::update()
break;
}
case CU_VECTOR_SCREEN:
- {
+ {
bool vector_screen =
d3d->window().machine().first_screen()->screen_type() == SCREEN_TYPE_VECTOR;
m_shader->set_bool("VectorScreen", vector_screen);
@@ -3266,7 +2788,7 @@ void uniform::update()
m_shader->set_float("SmoothBorderAmount", options->smooth_border);
break;
case CU_POST_SHADOW_ALPHA:
- m_shader->set_float("ShadowAlpha", shadersys->shadow_texture == NULL ? 0.0f : options->shadow_mask_alpha);
+ m_shader->set_float("ShadowAlpha", shadersys->shadow_texture == nullptr ? 0.0f : options->shadow_mask_alpha);
break;
case CU_POST_SHADOW_COUNT:
{
@@ -3408,22 +2930,22 @@ void uniform::upload()
effect::effect(shaders *shadersys, device *dev, const char *name, const char *path)
{
IDirect3DDevice9 *device = (IDirect3DDevice9 *)dev;
- LPD3DXBUFFER buffer_errors = NULL;
+ LPD3DXBUFFER buffer_errors = nullptr;
m_shaders = shadersys;
- m_uniform_head = NULL;
- m_uniform_tail = NULL;
- m_effect = NULL;
+ m_uniform_head = nullptr;
+ m_uniform_tail = nullptr;
+ m_effect = nullptr;
m_valid = false;
char name_cstr[1024];
sprintf(name_cstr, "%s\\%s", path, name);
TCHAR *effect_name = tstring_from_utf8(name_cstr);
- HRESULT hr = (*g_load_effect)(device, effect_name, NULL, NULL, 0, NULL, &m_effect, &buffer_errors);
+ HRESULT hr = (*g_load_effect)(device, effect_name, nullptr, nullptr, 0, nullptr, &m_effect, &buffer_errors);
if (FAILED(hr))
{
- if (buffer_errors != NULL)
+ if (buffer_errors != nullptr)
{
LPVOID compile_errors = buffer_errors->GetBufferPointer();
printf("Unable to compile shader: %s\n", (const char*)compile_errors); fflush(stdout);
@@ -3444,31 +2966,31 @@ effect::effect(shaders *shadersys, device *dev, const char *name, const char *pa
effect::~effect()
{
m_effect->Release();
- m_effect = NULL;
+ m_effect = nullptr;
uniform *curr = m_uniform_head;
- while (curr != NULL)
+ while (curr != nullptr)
{
uniform *next = curr->get_next();
delete curr;
curr = next;
}
- m_uniform_head = NULL;
- m_uniform_tail = NULL;
+ m_uniform_head = nullptr;
+ m_uniform_tail = nullptr;
}
void effect::add_uniform(const char *name, uniform::uniform_type type, int id)
{
uniform *newuniform = new uniform(this, name, type, id);
- if (newuniform == NULL)
+ if (newuniform == nullptr)
{
return;
}
- if (m_uniform_head == NULL)
+ if (m_uniform_head == nullptr)
{
m_uniform_head = newuniform;
}
- if (m_uniform_tail != NULL)
+ if (m_uniform_tail != nullptr)
{
m_uniform_tail->set_next(newuniform);
}
@@ -3478,7 +3000,7 @@ void effect::add_uniform(const char *name, uniform::uniform_type type, int id)
void effect::update_uniforms()
{
uniform *curr = m_uniform_head;
- while(curr != NULL)
+ while(curr != nullptr)
{
curr->update();
curr = curr->get_next();
@@ -3592,7 +3114,7 @@ static file_error open_next(renderer_d3d9 *d3d, emu_file &file, const char *temp
// handle defaults
const char *snapname = templ ? templ : d3d->window().machine().options().snap_name();
- if (snapname == NULL || snapname[0] == 0)
+ if (snapname == nullptr || snapname[0] == 0)
{
snapname = "%g/%i";
}
@@ -3654,7 +3176,7 @@ static file_error open_next(renderer_d3d9 *d3d, emu_file &file, const char *temp
// verify that there is such a device for this system
image_interface_iterator iter(d3d->window().machine().root_device());
- for (device_image_interface *image = iter.first(); image != NULL; iter.next())
+ for (device_image_interface *image = iter.first(); image != nullptr; iter.next())
{
// get the device name
std::string tempdevname(image->brief_instance_name());
@@ -3662,7 +3184,7 @@ static file_error open_next(renderer_d3d9 *d3d, emu_file &file, const char *temp
if (snapdevname.compare(tempdevname) == 0)
{
// verify that such a device has an image mounted
- if (image->basename() != NULL)
+ if (image->basename() != nullptr)
{
std::string filename(image->basename());
@@ -3705,13 +3227,11 @@ static file_error open_next(renderer_d3d9 *d3d, emu_file &file, const char *temp
else
{
// try until we succeed
- std::string seqtext;
file.set_openflags(OPEN_FLAG_READ);
for (int seq = 0; ; seq++)
{
// build up the filename
- strprintf(seqtext, "%04d_%d", seq, idx);
- strreplace(fname.assign(snapstr), "%i", seqtext.c_str());
+ strreplace(fname.assign(snapstr), "%i", string_format("%04d_%d", seq, idx).c_str());
// try to open the file; stop when we fail
file_error filerr = file.open(fname.c_str());
diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h
index caab833e7d7..0c3bc095d4c 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.h
+++ b/src/osd/modules/render/d3d/d3dhlsl.h
@@ -9,6 +9,7 @@
#ifndef __WIN_D3DHLSL__
#define __WIN_D3DHLSL__
+#include <vector>
#include "aviio.h"
//============================================================
@@ -227,7 +228,7 @@ struct hlsl_options
float saturation;
// NTSC
- bool yiq_enable;
+ int yiq_enable;
float yiq_jitter;
float yiq_cc;
float yiq_a;
@@ -262,6 +263,34 @@ struct hlsl_options
float bloom_level10_weight;
};
+struct slider_desc
+{
+ const char * name;
+ int minval;
+ int defval;
+ int maxval;
+ int step;
+ int slider_type;
+ int screen_type;
+ int id;
+ float scale;
+ const char * format;
+ std::vector<const char *> strings;
+};
+
+class slider
+{
+public:
+ slider(slider_desc *desc, void *value, bool *dirty) : m_desc(desc), m_value(value), m_dirty(dirty) { }
+
+ INT32 update(std::string *str, INT32 newval);
+
+private:
+ slider_desc * m_desc;
+ void * m_value;
+ bool * m_dirty;
+};
+
class shaders
{
friend class effect;
@@ -296,7 +325,7 @@ public:
void window_save();
void window_record();
- bool recording() { return avi_output_file != NULL; }
+ bool recording() { return avi_output_file != nullptr; }
void avi_update_snap(surface *surface);
void render_snapshot(surface *surface);
@@ -314,28 +343,7 @@ public:
// slider-related functions
slider_state *init_slider_list();
-
- enum slider_screen_type
- {
- SLIDER_SCREEN_TYPE_NONE = 0,
- SLIDER_SCREEN_TYPE_RASTER = 1,
- SLIDER_SCREEN_TYPE_VECTOR = 2,
- SLIDER_SCREEN_TYPE_LCD = 4,
- SLIDER_SCREEN_TYPE_LCD_OR_RASTER = SLIDER_SCREEN_TYPE_RASTER | SLIDER_SCREEN_TYPE_LCD,
- SLIDER_SCREEN_TYPE_ANY = SLIDER_SCREEN_TYPE_RASTER | SLIDER_SCREEN_TYPE_VECTOR | SLIDER_SCREEN_TYPE_LCD
- };
-
- struct slider_desc
- {
- const char * name;
- int minval;
- int defval;
- int maxval;
- int step;
- int screen_type;
- INT32(*adjustor)(running_machine &, void *, std::string *, INT32);
- int id;
- };
+ void *get_slider_option(int id, int index = 0);
private:
void blit(surface *dst, bool clear_dst, D3DPRIMITIVETYPE prim_type, UINT32 prim_index, UINT32 prim_count);
@@ -369,7 +377,7 @@ private:
d3d_base * d3dintf; // D3D interface
running_machine * machine;
- renderer_d3d9 * d3d; // D3D renderer
+ renderer_d3d9 * d3d; // D3D renderer
bool master_enable; // overall enable flag
bool vector_enable; // vector post-processing enable flag
@@ -433,6 +441,8 @@ private:
d3d_render_target * targethead;
cache_target * cachehead;
+ std::vector<slider*> sliders;
+
static slider_desc s_sliders[];
static hlsl_options last_options; // last used options
};
diff --git a/src/osd/modules/render/d3dtarget.h b/src/osd/modules/render/d3dtarget.h
index 9179b2d43ba..566b1dbdfcd 100644
--- a/src/osd/modules/render/d3dtarget.h
+++ b/src/osd/modules/render/d3dtarget.h
@@ -11,4 +11,4 @@
#ifndef __D3DTARGET__
#define __D3DTARGET__
-#endif // __D3DTARGET__ \ No newline at end of file
+#endif // __D3DTARGET__
diff --git a/src/osd/modules/render/draw13.h b/src/osd/modules/render/draw13.h
index 8923f53317a..e6d15a757bb 100644
--- a/src/osd/modules/render/draw13.h
+++ b/src/osd/modules/render/draw13.h
@@ -41,7 +41,7 @@ struct quad_setup_data
void compute(const render_primitive &prim, const int prescale);
- INT32 dudx, dvdx, dudy, dvdy;
+ INT32 dudx, dvdx, dudy, dvdy;
INT32 startu, startv;
INT32 rotwidth, rotheight;
};
@@ -210,4 +210,4 @@ private:
static const copy_info_t s_blit_info_default[];
};
-#endif // __DRAW13__ \ No newline at end of file
+#endif // __DRAW13__
diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp
index e359de4624a..b9e3c2626e6 100644
--- a/src/osd/modules/render/drawbgfx.cpp
+++ b/src/osd/modules/render/drawbgfx.cpp
@@ -35,9 +35,11 @@
#include "bgfx/targetmanager.h"
#include "bgfx/shadermanager.h"
#include "bgfx/effectmanager.h"
+#include "bgfx/chainmanager.h"
#include "bgfx/effect.h"
#include "bgfx/texture.h"
#include "bgfx/target.h"
+#include "bgfx/chain.h"
//============================================================
// DEBUGGING
@@ -47,11 +49,15 @@
// CONSTANTS
//============================================================
+const uint16_t renderer_bgfx::CACHE_SIZE = 1024;
+const uint32_t renderer_bgfx::PACKABLE_SIZE = 128;
+const uint32_t renderer_bgfx::WHITE_HASH = 0x87654321;
+
//============================================================
// MACROS
//============================================================
-#define GIBBERISH (0)
+#define GIBBERISH (0)
//============================================================
// INLINES
@@ -78,17 +84,17 @@ static void* sdlNativeWindowHandle(SDL_Window* _window)
return nullptr;
}
-# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
+# if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
return (void*)wmi.info.x11.window;
-# elif BX_PLATFORM_OSX
+# elif BX_PLATFORM_OSX
return wmi.info.cocoa.window;
-# elif BX_PLATFORM_WINDOWS
+# elif BX_PLATFORM_WINDOWS
return wmi.info.win.window;
-# elif BX_PLATFORM_STEAMLINK
+# elif BX_PLATFORM_STEAMLINK
return wmi.info.vivante.window;
# elif BX_PLATFORM_EMSCRIPTEN
return nullptr;
-# endif // BX_PLATFORM_
+# endif // BX_PLATFORM_
}
#endif
@@ -121,7 +127,7 @@ int renderer_bgfx::create()
bgfx::init();
bgfx::reset(m_width[window().m_index], m_height[window().m_index], video_config.waitvsync ? BGFX_RESET_VSYNC : BGFX_RESET_NONE);
// Enable debug text.
- bgfx::setDebug(BGFX_DEBUG_TEXT); //BGFX_DEBUG_STATS
+ bgfx::setDebug(window().machine().options().verbose() ? BGFX_DEBUG_STATS : BGFX_DEBUG_TEXT);
m_dimensions = osd_dim(m_width[0], m_height[0]);
}
@@ -129,16 +135,17 @@ int renderer_bgfx::create()
m_targets = new target_manager(*m_textures);
m_shaders = new shader_manager();
m_effects = new effect_manager(*m_shaders);
+ m_chains = new chain_manager(*m_textures, *m_targets, *m_effects, m_width[window().m_index], m_height[window().m_index]);
- if (window().m_index != 0)
- {
+ if (window().m_index != 0)
+ {
#ifdef OSD_WINDOWS
- m_framebuffer = m_targets->create_target("backbuffer", window().m_hwnd, m_width[window().m_index], m_height[window().m_index]);
+ m_framebuffer = m_targets->create_target("backbuffer", window().m_hwnd, m_width[window().m_index], m_height[window().m_index]);
#else
- m_framebuffer = m_targets->create_target("backbuffer", sdlNativeWindowHandle(window().sdl_window()), m_width[window().m_index], m_height[window().m_index]);
+ m_framebuffer = m_targets->create_target("backbuffer", sdlNativeWindowHandle(window().sdl_window()), m_width[window().m_index], m_height[window().m_index]);
#endif
- bgfx::touch(window().m_index);
- }
+ bgfx::touch(window().m_index);
+ }
// Create program from shaders.
m_gui_effect[0] = m_effects->effect("gui_opaque");
@@ -151,6 +158,8 @@ int renderer_bgfx::create()
m_screen_effect[2] = m_effects->effect("screen_multiply");
m_screen_effect[3] = m_effects->effect("screen_add");
+ //m_screen_chain[0] = m_chains->chain("test");
+
uint32_t flags = BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP | BGFX_TEXTURE_MIN_POINT | BGFX_TEXTURE_MAG_POINT | BGFX_TEXTURE_MIP_POINT;
m_texture_cache = m_textures->create_texture("#cache", bgfx::TextureFormat::RGBA8, CACHE_SIZE, CACHE_SIZE, nullptr, flags);
@@ -167,10 +176,11 @@ int renderer_bgfx::create()
renderer_bgfx::~renderer_bgfx()
{
// Cleanup.
- delete m_targets;
- delete m_textures;
+ delete m_chains;
delete m_effects;
delete m_shaders;
+ delete m_textures;
+ delete m_targets;
}
void renderer_bgfx::exit()
@@ -209,11 +219,11 @@ void renderer_bgfx::put_packed_quad(render_primitive *prim, UINT32 hash, ScreenV
float v0 = float(rect.y()) / float(CACHE_SIZE);
float u1 = u0 + float(rect.width()) / float(CACHE_SIZE);
float v1 = v0 + float(rect.height()) / float(CACHE_SIZE);
- u1 -= 0.5f / float(CACHE_SIZE);
- v1 -= 0.5f / float(CACHE_SIZE);
- u0 += 0.5f / float(CACHE_SIZE);
- v0 += 0.5f / float(CACHE_SIZE);
- UINT32 rgba = u32Color(prim->color.r * 255, prim->color.g * 255, prim->color.b * 255, prim->color.a * 255);
+ u1 -= 0.5f / float(CACHE_SIZE);
+ v1 -= 0.5f / float(CACHE_SIZE);
+ u0 += 0.5f / float(CACHE_SIZE);
+ v0 += 0.5f / float(CACHE_SIZE);
+ UINT32 rgba = u32Color(prim->color.r * 255, prim->color.g * 255, prim->color.b * 255, prim->color.a * 255);
float x[4] = { prim->bounds.x0, prim->bounds.x1, prim->bounds.x0, prim->bounds.x1 };
float y[4] = { prim->bounds.y0, prim->bounds.y0, prim->bounds.y1, prim->bounds.y1 };
@@ -781,11 +791,11 @@ int renderer_bgfx::draw(int update)
}
}
- if (index != 0)
- {
- bgfx::setViewFrameBuffer(index, m_framebuffer->target());
- }
- bgfx::setViewSeq(index, true);
+ if (index != 0)
+ {
+ bgfx::setViewFrameBuffer(index, m_framebuffer->target());
+ }
+ bgfx::setViewSeq(index, true);
bgfx::setViewRect(index, 0, 0, m_width[index], m_height[index]);
// Setup view transform.
@@ -1020,8 +1030,8 @@ bool renderer_bgfx::check_for_dirty_atlas()
const UINT32 hash = get_texture_hash(prim);
// If this texture is packable and not currently in the atlas, prepare the texture for putting in the atlas
if ((hash != 0 && m_hash_to_entry[hash].hash() == 0 && acquired_infos[hash].hash() == 0)
- || (hash != 0 && m_hash_to_entry[hash].hash() != hash && acquired_infos[hash].hash() == 0))
- { // Create create the texture and mark the atlas dirty
+ || (hash != 0 && m_hash_to_entry[hash].hash() != hash && acquired_infos[hash].hash() == 0))
+ { // Create create the texture and mark the atlas dirty
atlas_dirty = true;
m_texinfo.push_back(rectangle_packer::packable_rectangle(hash, prim->flags & PRIMFLAG_TEXFORMAT_MASK,
@@ -1096,4 +1106,4 @@ void renderer_bgfx::allocate_buffer(render_primitive *prim, UINT32 blend, bgfx::
slider_state* renderer_bgfx::get_slider_list()
{
return nullptr;
-} \ No newline at end of file
+}
diff --git a/src/osd/modules/render/drawbgfx.h b/src/osd/modules/render/drawbgfx.h
index 924ee0add29..62e00dd7d1d 100644
--- a/src/osd/modules/render/drawbgfx.h
+++ b/src/osd/modules/render/drawbgfx.h
@@ -14,9 +14,11 @@ class texture_manager;
class target_manager;
class shader_manager;
class effect_manager;
+class chain_manager;
class bgfx_texture;
class bgfx_effect;
class bgfx_target;
+class bgfx_chain;
/* sdl_info is the information about SDL for the current screen */
class renderer_bgfx : public osd_renderer
@@ -107,8 +109,11 @@ private:
target_manager* m_targets;
shader_manager* m_shaders;
effect_manager* m_effects;
+ chain_manager* m_chains;
+
bgfx_effect* m_gui_effect[4];
bgfx_effect* m_screen_effect[4];
+ //bgfx_chain* m_screen_chain[4];
std::map<UINT32, rectangle_packer::packed_rectangle> m_hash_to_entry;
std::vector<rectangle_packer::packable_rectangle> m_texinfo;
@@ -117,9 +122,9 @@ private:
uint32_t m_width[16];
uint32_t m_height[16];
uint32_t m_white[16*16];
- enum : uint16_t { CACHE_SIZE = 1024 };
- enum : uint32_t { PACKABLE_SIZE = 128 };
- enum : UINT32 { WHITE_HASH = 0x87654321 };
+ static const uint16_t CACHE_SIZE;
+ static const uint32_t PACKABLE_SIZE;
+ static const uint32_t WHITE_HASH;
static bool s_window_set;
};
diff --git a/src/osd/modules/render/drawd3d.h b/src/osd/modules/render/drawd3d.h
index 02f63dd65e3..474f9ef8487 100644
--- a/src/osd/modules/render/drawd3d.h
+++ b/src/osd/modules/render/drawd3d.h
@@ -112,9 +112,9 @@ public:
bool is_mod2x_supported() { return (bool)m_mod2x_supported; }
bool is_mod4x_supported() { return (bool)m_mod4x_supported; }
- D3DFORMAT get_screen_format() { return m_screen_format; }
- D3DFORMAT get_pixel_format() { return m_pixformat; }
- D3DDISPLAYMODE get_origmode() { return m_origmode; }
+ D3DFORMAT get_screen_format() { return m_screen_format; }
+ D3DFORMAT get_pixel_format() { return m_pixformat; }
+ D3DDISPLAYMODE get_origmode() { return m_origmode; }
UINT32 get_last_texture_flags() { return m_last_texture_flags; }
@@ -134,9 +134,9 @@ private:
device * m_device; // pointer to the Direct3DDevice object
int m_gamma_supported; // is full screen gamma supported?
- present_parameters m_presentation; // set of presentation parameters
- D3DDISPLAYMODE m_origmode; // original display mode for the adapter
- D3DFORMAT m_pixformat; // pixel format we are using
+ present_parameters m_presentation; // set of presentation parameters
+ D3DDISPLAYMODE m_origmode; // original display mode for the adapter
+ D3DFORMAT m_pixformat; // pixel format we are using
vertex_buffer * m_vertexbuf; // pointer to the vertex buffer object
vertex * m_lockedbuf; // pointer to the locked vertex buffer
@@ -145,14 +145,14 @@ private:
vertex * m_vectorbatch; // pointer to the vector batch buffer
int m_batchindex; // current index into the vector batch
- poly_info m_poly[VERTEX_BUFFER_SIZE/3];// array to hold polygons as they are created
+ poly_info m_poly[VERTEX_BUFFER_SIZE/3];// array to hold polygons as they are created
int m_numpolys; // number of accumulated polygons
bool m_restarting; // if we're restarting
int m_mod2x_supported; // is D3DTOP_MODULATE2X supported?
int m_mod4x_supported; // is D3DTOP_MODULATE4X supported?
- D3DFORMAT m_screen_format; // format to use for screen textures
+ D3DFORMAT m_screen_format; // format to use for screen textures
texture_info * m_last_texture; // previous texture
UINT32 m_last_texture_flags; // previous texture flags
@@ -161,8 +161,8 @@ private:
int m_last_blendsrc; // previous blendmode
int m_last_blenddst; // previous blendmode
int m_last_filter; // previous texture filter
- UINT32 m_last_wrap; // previous wrap state
- int m_last_modmode; // previous texture modulation
+ UINT32 m_last_wrap; // previous wrap state
+ int m_last_modmode; // previous texture modulation
void * m_hlsl_buf; // HLSL vertex data
shaders * m_shaders; // HLSL interface
@@ -175,4 +175,4 @@ private:
#endif // OSD_WINDOWS
-#endif // __WIN_DRAWD3D__ \ No newline at end of file
+#endif // __WIN_DRAWD3D__
diff --git a/src/osd/modules/render/drawgdi.h b/src/osd/modules/render/drawgdi.h
index 016eb487dee..7606bf14738 100644
--- a/src/osd/modules/render/drawgdi.h
+++ b/src/osd/modules/render/drawgdi.h
@@ -54,4 +54,4 @@ private:
size_t m_bmsize;
};
-#endif // __DRAWGDI__ \ No newline at end of file
+#endif // __DRAWGDI__
diff --git a/src/osd/modules/render/drawnone.h b/src/osd/modules/render/drawnone.h
index a426805683e..08873860e61 100644
--- a/src/osd/modules/render/drawnone.h
+++ b/src/osd/modules/render/drawnone.h
@@ -33,4 +33,4 @@ public:
virtual void toggle_fsfx() override { }
};
-#endif // __DRAWNONE__ \ No newline at end of file
+#endif // __DRAWNONE__
diff --git a/src/osd/modules/render/drawogl.h b/src/osd/modules/render/drawogl.h
index 8427ec62cce..3d3d3235e6e 100644
--- a/src/osd/modules/render/drawogl.h
+++ b/src/osd/modules/render/drawogl.h
@@ -228,8 +228,8 @@ private:
INT32 m_surf_h;
GLfloat m_texVerticex[8];
- static bool s_shown_video_info;
- static bool s_dll_loaded;
+ static bool s_shown_video_info;
+ static bool s_dll_loaded;
};
-#endif // __DRAWOGL__ \ No newline at end of file
+#endif // __DRAWOGL__
diff --git a/src/osd/modules/render/drawsdl.h b/src/osd/modules/render/drawsdl.h
index 9e864019a6c..5fac2653fcc 100644
--- a/src/osd/modules/render/drawsdl.h
+++ b/src/osd/modules/render/drawsdl.h
@@ -83,4 +83,4 @@ struct sdl_scale_mode
void (*yuv_blit)(const UINT16 *bitmap, UINT8 *ptr, const int pitch, const UINT32 *lookup, const int width, const int height);
};
-#endif // __DRAWSDL2__ \ No newline at end of file
+#endif // __DRAWSDL2__
diff --git a/src/osd/modules/render/sdlglcontext.h b/src/osd/modules/render/sdlglcontext.h
index 27c0bbe68a6..5a284ef289d 100644
--- a/src/osd/modules/render/sdlglcontext.h
+++ b/src/osd/modules/render/sdlglcontext.h
@@ -64,4 +64,4 @@ private:
char m_error[256];
};
-#endif // __SDL_GL_CONTEXT__ \ No newline at end of file
+#endif // __SDL_GL_CONTEXT__
diff --git a/src/osd/modules/render/winglcontext.h b/src/osd/modules/render/winglcontext.h
index 44a30888fa5..de8e6537707 100644
--- a/src/osd/modules/render/winglcontext.h
+++ b/src/osd/modules/render/winglcontext.h
@@ -167,4 +167,4 @@ private:
static HMODULE m_module;
};
-#endif // __WIN_GL_CONTEXT__ \ No newline at end of file
+#endif // __WIN_GL_CONTEXT__
diff --git a/src/osd/modules/sync/osdsync.cpp b/src/osd/modules/sync/osdsync.cpp
new file mode 100644
index 00000000000..30628e2d674
--- /dev/null
+++ b/src/osd/modules/sync/osdsync.cpp
@@ -0,0 +1,133 @@
+// license:BSD-3-Clause
+// copyright-holders:Aaron Giles,Miodrag Milanovic
+//============================================================
+//
+// osdsync.cpp -OSD core synchronization functions
+//
+//============================================================
+// MAME headers
+#include "osdcore.h"
+#include "osdsync.h"
+
+#include <stdlib.h>
+
+// C++ headers
+#include <mutex>
+#include <atomic>
+#include <condition_variable>
+//============================================================
+// TYPE DEFINITIONS
+//============================================================
+
+struct osd_event {
+ std::mutex *mutex;
+ std::condition_variable *cond;
+ std::atomic<INT32> autoreset;
+ std::atomic<INT32> signalled;
+};
+
+//============================================================
+// osd_event_alloc
+//============================================================
+
+osd_event *osd_event_alloc(int manualreset, int initialstate)
+{
+ osd_event *ev;
+
+ ev = (osd_event *)calloc(1, sizeof(osd_event));
+ if (ev == nullptr)
+ return nullptr;
+
+ ev->mutex = new std::mutex();
+ ev->cond = new std::condition_variable();
+ ev->signalled = initialstate;
+ ev->autoreset = !manualreset;
+
+ return ev;
+}
+
+//============================================================
+// osd_event_free
+//============================================================
+
+void osd_event_free(osd_event *event)
+{
+ delete event->mutex;
+ delete event->cond;
+ free(event);
+}
+
+//============================================================
+// osd_event_set
+//============================================================
+
+void osd_event_set(osd_event *event)
+{
+ event->mutex->lock();
+ if (event->signalled == FALSE)
+ {
+ event->signalled = TRUE;
+ if (event->autoreset)
+ event->cond->notify_one();
+ else
+ event->cond->notify_all();
+ }
+ event->mutex->unlock();
+}
+
+//============================================================
+// osd_event_reset
+//============================================================
+
+void osd_event_reset(osd_event *event)
+{
+ event->mutex->lock();
+ event->signalled = FALSE;
+ event->mutex->unlock();
+}
+
+//============================================================
+// osd_event_wait
+//============================================================
+
+int osd_event_wait(osd_event *event, osd_ticks_t timeout)
+{
+ if (timeout == OSD_EVENT_WAIT_INFINITE)
+ timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
+
+ std::unique_lock<std::mutex> lock(*event->mutex);
+ if (!timeout)
+ {
+ if (!event->signalled)
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (!event->signalled)
+ {
+ UINT64 msec = timeout * 1000 / osd_ticks_per_second();
+
+ do {
+ if (event->cond->wait_for(lock, std::chrono::milliseconds(msec)) == std::cv_status::timeout)
+ {
+ if (!event->signalled)
+ {
+ return FALSE;
+ }
+ else
+ break;
+ } else
+ break;
+
+ } while (TRUE);
+ }
+ }
+
+ if (event->autoreset)
+ event->signalled = 0;
+
+ return TRUE;
+}
+
diff --git a/src/osd/modules/sync/osdsync.h b/src/osd/modules/sync/osdsync.h
index e6e5e2f99c9..e88d4a223f2 100644
--- a/src/osd/modules/sync/osdsync.h
+++ b/src/osd/modules/sync/osdsync.h
@@ -103,75 +103,4 @@ void osd_event_set(osd_event *event);
-----------------------------------------------------------------------------*/
void osd_event_free(osd_event *event);
-/***************************************************************************
- SYNCHRONIZATION INTERFACES - Threads
-***************************************************************************/
-
-/* osd_thread is an opaque type which represents a thread */
-struct osd_thread;
-
-
-/* osd_thread_callback is a callback function that will be called from the thread */
-typedef void *(*osd_thread_callback)(void *param);
-
-
-/*-----------------------------------------------------------------------------
- osd_thread_create: create a new thread
-
- Parameters:
-
- callback - The callback function to be called once the thread is up
- cbparam - The parameter to pass to the callback function.
-
- Return value:
-
- A pointer to the created thread.
------------------------------------------------------------------------------*/
-osd_thread *osd_thread_create(osd_thread_callback callback, void *cbparam);
-
-/*-----------------------------------------------------------------------------
- osd_thread_adjust_priority: adjust priority of a thread
-
- Parameters:
-
- thread - A pointer to a previously created thread.
- adjust - signed integer to add to the thread priority
-
- Return value:
-
- TRUE on success, FALSE on failure
------------------------------------------------------------------------------*/
-int osd_thread_adjust_priority(osd_thread *thread, int adjust);
-
-
-/*-----------------------------------------------------------------------------
- osd_thread_cpu_affinity: change cpu affinity of a thread
-
- Parameters:
-
- thread - A pointer to a previously created thread
- or NULL for main thread
- mask - bitmask to which cpus to bind
- i.e. 0x01 1st cpu, 0x02, 2nd cpu, 0x04 3rd cpu
-
- Return value:
-
- TRUE on success, FALSE on failure
------------------------------------------------------------------------------*/
-int osd_thread_cpu_affinity(osd_thread *thread, UINT32 mask);
-
-
-/*-----------------------------------------------------------------------------
- osd_thread_wait_free: wait for thread to finish and free resources
-
- Parameters:
-
- thread - A pointer to a previously created thread.
-
- Return value:
-
- None.
------------------------------------------------------------------------------*/
-void osd_thread_wait_free(osd_thread *thread);
-
#endif /* __OSDSYNC__ */
diff --git a/src/osd/modules/sync/sync_mini.cpp b/src/osd/modules/sync/sync_mini.cpp
deleted file mode 100644
index 5829eb6d63c..00000000000
--- a/src/osd/modules/sync/sync_mini.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-//============================================================
-//
-// sdlsync_mini.c - Minimal core synchronization functions
-//
-//============================================================
-
-#include "osdcore.h"
-#include "osdsync.h"
-
-struct _osd_event
-{
- void * ptr;
-};
-
-struct _osd_thread {
- void * ptr;
-};
-
-
-//============================================================
-// osd_event_alloc
-//============================================================
-
-osd_event *osd_event_alloc(int manualreset, int initialstate)
-{
- return nullptr;
-}
-
-
-//============================================================
-// osd_event_free
-//============================================================
-
-void osd_event_free(osd_event *event)
-{
-}
-
-
-//============================================================
-// osd_event_set
-//============================================================
-
-void osd_event_set(osd_event *event)
-{
-}
-
-
-//============================================================
-// osd_event_reset
-//============================================================
-
-void osd_event_reset(osd_event *event)
-{
-}
-
-
-//============================================================
-// osd_event_wait
-//============================================================
-
-int osd_event_wait(osd_event *event, osd_ticks_t timeout)
-{
- return TRUE;
-}
-
-
-//============================================================
-// osd_thread_create
-//============================================================
-
-osd_thread *osd_thread_create(osd_thread_callback callback, void *cbparam)
-{
- return nullptr;
-}
-
-
-//============================================================
-// osd_thread_adjust_priority
-//============================================================
-
-int osd_thread_adjust_priority(osd_thread *thread, int adjust)
-{
- return FALSE;
-}
-
-
-//============================================================
-// osd_thread_cpu_affinity
-//============================================================
-
-int osd_thread_cpu_affinity(osd_thread *thread, UINT32 mask)
-{
- return TRUE;
-}
-
-
-//============================================================
-// osd_thread_wait_free
-//============================================================
-
-void osd_thread_wait_free(osd_thread *thread)
-{
-}
diff --git a/src/osd/modules/sync/sync_ntc.cpp b/src/osd/modules/sync/sync_ntc.cpp
deleted file mode 100644
index c78f67ce64a..00000000000
--- a/src/osd/modules/sync/sync_ntc.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// sdlsync.c - SDL core synchronization functions
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-//============================================================
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE // for PTHREAD_MUTEX_RECURSIVE; needs to be here before other glibc headers are included
-#endif
-
-#include "sdlinc.h"
-
-#ifdef SDLMAME_MACOSX
-#include <mach/mach.h>
-#include <signal.h>
-#endif
-
-#if defined(SDLMAME_NETBSD) || defined(SDLMAME_OPENBSD)
-/* for SIGKILL */
-#include <signal.h>
-#endif
-
-// standard C headers
-#include <math.h>
-#include <unistd.h>
-
-// MAME headers
-#include "osdcore.h"
-#include "osdsync.h"
-
-#include "eminline.h"
-
-#include <pthread.h>
-#include <errno.h>
-#include <sys/time.h>
-
-struct osd_event {
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- volatile INT32 autoreset;
- volatile INT32 signalled;
-#ifdef PTR64
- INT8 padding[40]; // Fill a 64-byte cache line
-#else
- INT8 padding[48]; // A bit more padding
-#endif
-};
-
-
-//============================================================
-// TYPE DEFINITIONS
-//============================================================
-
-struct osd_thread {
- pthread_t thread;
-};
-
-//============================================================
-// osd_event_alloc
-//============================================================
-
-osd_event *osd_event_alloc(int manualreset, int initialstate)
-{
- osd_event *ev;
- pthread_mutexattr_t mtxattr;
-
- ev = (osd_event *)calloc(1, sizeof(osd_event));
- if (ev == NULL)
- return NULL;
-
- pthread_mutexattr_init(&mtxattr);
- pthread_mutex_init(&ev->mutex, &mtxattr);
- pthread_cond_init(&ev->cond, NULL);
- ev->signalled = initialstate;
- ev->autoreset = !manualreset;
-
- return ev;
-}
-
-//============================================================
-// osd_event_free
-//============================================================
-
-void osd_event_free(osd_event *event)
-{
- pthread_mutex_destroy(&event->mutex);
- pthread_cond_destroy(&event->cond);
- free(event);
-}
-
-//============================================================
-// osd_event_set
-//============================================================
-
-void osd_event_set(osd_event *event)
-{
- pthread_mutex_lock(&event->mutex);
- if (event->signalled == FALSE)
- {
- event->signalled = TRUE;
- if (event->autoreset)
- pthread_cond_signal(&event->cond);
- else
- pthread_cond_broadcast(&event->cond);
- }
- pthread_mutex_unlock(&event->mutex);
-}
-
-//============================================================
-// osd_event_reset
-//============================================================
-
-void osd_event_reset(osd_event *event)
-{
- pthread_mutex_lock(&event->mutex);
- event->signalled = FALSE;
- pthread_mutex_unlock(&event->mutex);
-}
-
-//============================================================
-// osd_event_wait
-//============================================================
-
-int osd_event_wait(osd_event *event, osd_ticks_t timeout)
-{
- if (timeout == OSD_EVENT_WAIT_INFINITE)
- timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
-
- pthread_mutex_lock(&event->mutex);
- if (!timeout)
- {
- if (!event->signalled)
- {
- pthread_mutex_unlock(&event->mutex);
- return FALSE;
- }
- }
- else
- {
- if (!event->signalled)
- {
- struct timespec ts;
- struct timeval tp;
- UINT64 msec = timeout * 1000 / osd_ticks_per_second();
- UINT64 nsec;
-
- gettimeofday(&tp, NULL);
-
- ts.tv_sec = tp.tv_sec;
- nsec = (UINT64) tp.tv_usec * (UINT64) 1000 + (msec * (UINT64) 1000000);
- ts.tv_nsec = nsec % (UINT64) 1000000000;
- ts.tv_sec += nsec / (UINT64) 1000000000;
-
- do {
- int ret = pthread_cond_timedwait(&event->cond, &event->mutex, &ts);
- if ( ret == ETIMEDOUT )
- {
- if (!event->signalled)
- {
- pthread_mutex_unlock(&event->mutex);
- return FALSE;
- }
- else
- break;
- }
- if (ret == 0)
- break;
- if ( ret != EINTR)
- {
- printf("Error %d while waiting for pthread_cond_timedwait: %s\n", ret, strerror(ret));
- }
-
- } while (TRUE);
- }
- }
-
- if (event->autoreset)
- event->signalled = 0;
-
- pthread_mutex_unlock(&event->mutex);
-
- return TRUE;
-}
-
-//============================================================
-// osd_thread_create
-//============================================================
-
-osd_thread *osd_thread_create(osd_thread_callback callback, void *cbparam)
-{
- osd_thread *thread;
- pthread_attr_t attr;
-
- thread = (osd_thread *)calloc(1, sizeof(osd_thread));
- if (thread == NULL)
- return NULL;
- pthread_attr_init(&attr);
-#ifndef SDLMAME_HAIKU
- pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED);
-#endif
- if ( pthread_create(&thread->thread, &attr, callback, cbparam) != 0 )
- {
- free(thread);
- return NULL;
- }
- return thread;
-}
-
-//============================================================
-// osd_thread_adjust_priority
-//============================================================
-
-int osd_thread_adjust_priority(osd_thread *thread, int adjust)
-{
- struct sched_param sched;
- int policy;
-
- if ( pthread_getschedparam( thread->thread, &policy, &sched ) == 0 )
- {
- sched.sched_priority += adjust;
- if ( pthread_setschedparam(thread->thread, policy, &sched ) == 0)
- return TRUE;
- else
- return FALSE;
- }
- else
- return FALSE;
-}
-
-//============================================================
-// osd_thread_cpu_affinity
-//============================================================
-
-int osd_thread_cpu_affinity(osd_thread *thread, UINT32 mask)
-{
- return TRUE;
-}
-
-//============================================================
-// osd_thread_wait_free
-//============================================================
-
-void osd_thread_wait_free(osd_thread *thread)
-{
- pthread_join(thread->thread, NULL);
- free(thread);
-}
diff --git a/src/osd/modules/sync/sync_os2.cpp b/src/osd/modules/sync/sync_os2.cpp
deleted file mode 100644
index 6e3265bb198..00000000000
--- a/src/osd/modules/sync/sync_os2.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// sdlsync.c - SDL core synchronization functions
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-//============================================================
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE // for PTHREAD_MUTEX_RECURSIVE; needs to be here before other glibc headers are included
-#endif
-
-#include "sdlinc.h"
-
-// standard C headers
-#include <math.h>
-#include <unistd.h>
-
-// MAME headers
-#include "osdcore.h"
-#include "osdsync.h"
-
-#include "eminline.h"
-
-#define INCL_DOS
-#include <os2.h>
-
-#include <stdlib.h>
-#define pthread_t int
-#define pthread_self _gettid
-
-struct osd_event {
- HMTX hmtx;
- HEV hev;
- volatile INT32 autoreset;
- INT8 padding[52]; // Fill a 64-byte cache line
-};
-
-//============================================================
-// TYPE DEFINITIONS
-//============================================================
-
-struct osd_thread {
- pthread_t thread;
- osd_thread_callback callback;
- void *param;
-};
-
-//============================================================
-// osd_event_alloc
-//============================================================
-
-osd_event *osd_event_alloc(int manualreset, int initialstate)
-{
- osd_event *ev;
-
- ev = (osd_event *)calloc(1, sizeof(osd_event));
- if (ev == NULL)
- return NULL;
-
- DosCreateMutexSem(NULL, &ev->hmtx, 0, FALSE);
- DosCreateEventSem(NULL, &ev->hev, 0, initialstate);
- ev->autoreset = !manualreset;
-
- return ev;
-}
-
-//============================================================
-// osd_event_free
-//============================================================
-
-void osd_event_free(osd_event *event)
-{
- DosCloseMutexSem(event->hmtx);
- DosCloseEventSem(event->hev);
- free(event);
-}
-
-//============================================================
-// osd_event_set
-//============================================================
-
-void osd_event_set(osd_event *event)
-{
- DosPostEventSem(event->hev);
-}
-
-//============================================================
-// osd_event_reset
-//============================================================
-
-void osd_event_reset(osd_event *event)
-{
- ULONG ulCount;
-
- DosResetEventSem(event->hev, &ulCount);
-}
-
-//============================================================
-// osd_event_wait
-//============================================================
-
-int osd_event_wait(osd_event *event, osd_ticks_t timeout)
-{
- ULONG rc;
- ULONG timeout_param;
-
- if (timeout == OSD_EVENT_WAIT_INFINITE)
- timeout_param = SEM_INDEFINITE_WAIT;
- else
- timeout_param = timeout * 1000 / osd_ticks_per_second();
-
- if(event->autoreset)
- DosRequestMutexSem(event->hmtx, -1);
-
- rc = DosWaitEventSem(event->hev, timeout_param);
-
- if(event->autoreset)
- {
- ULONG ulCount;
-
- if(rc == 0)
- DosResetEventSem(event->hev, &ulCount);
-
- DosReleaseMutexSem(event->hmtx);
- }
-
- return (rc == 0);
-}
-
-//============================================================
-// osd_thread_create
-//============================================================
-
-static void worker_thread_entry(void *param)
-{
- osd_thread *thread = (osd_thread *) param;
-
- thread->callback(thread->param);
-}
-
-osd_thread *osd_thread_create(osd_thread_callback callback, void *cbparam)
-{
- osd_thread *thread;
-
- thread = (osd_thread *)calloc(1, sizeof(osd_thread));
- if (thread == NULL)
- return NULL;
- thread->callback = callback;
- thread->param = cbparam;
- thread->thread = _beginthread(worker_thread_entry, NULL, 65535, thread);
- if ( thread->thread == -1 )
- {
- free(thread);
- return NULL;
- }
- return thread;
-}
-
-//============================================================
-// osd_thread_adjust_priority
-//============================================================
-
-int osd_thread_adjust_priority(osd_thread *thread, int adjust)
-{
- PTIB ptib;
-
- DosGetInfoBlocks(&ptib, NULL);
-
- if ( DosSetPriority(PRTYS_THREAD, PRTYC_NOCHANGE,
- ((BYTE)ptib->tib_ptib2->tib2_ulpri) + adjust, thread->thread ))
- return FALSE;
-
-
- return TRUE;
-}
-
-//============================================================
-// osd_thread_cpu_affinity
-//============================================================
-
-int osd_thread_cpu_affinity(osd_thread *thread, UINT32 mask)
-{
- return TRUE;
-}
-
-//============================================================
-// osd_thread_wait_free
-//============================================================
-
-void osd_thread_wait_free(osd_thread *thread)
-{
- TID tid = thread->thread;
-
- DosWaitThread(&tid, 0);
- free(thread);
-}
diff --git a/src/osd/modules/sync/sync_sdl.cpp b/src/osd/modules/sync/sync_sdl.cpp
deleted file mode 100644
index 73b735fefb3..00000000000
--- a/src/osd/modules/sync/sync_sdl.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// sdlsync.c - SDL core synchronization functions
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-//============================================================
-
-#include "sdlinc.h"
-
-// standard C headers
-#include <unistd.h>
-#include <sys/types.h>
-#include <signal.h>
-
-// MAME headers
-#include "osdcore.h"
-#include "osdsync.h"
-
-#include "eminline.h"
-
-#define VERBOSE (0)
-
-#if VERBOSE
-#define LOG( x ) do { printf x; printf("\n"); } while (0)
-#else
-#define LOG( x )
-#endif
-struct hidden_mutex_t {
- SDL_mutex * id;
- volatile INT32 locked;
- volatile INT32 threadid;
-};
-
-struct osd_event {
- SDL_mutex * mutex;
- SDL_cond * cond;
- volatile INT32 autoreset;
- volatile INT32 signalled;
-};
-
-//============================================================
-// TYPE DEFINITIONS
-//============================================================
-
-struct osd_thread {
- SDL_Thread * thread;
- osd_thread_callback callback;
- void *param;
-};
-
-
-//============================================================
-// osd_event_alloc
-//============================================================
-
-osd_event *osd_event_alloc(int manualreset, int initialstate)
-{
- osd_event *ev;
-
- ev = (osd_event *)calloc(1, sizeof(osd_event));
- if (ev == NULL)
- return NULL;
-
- ev->mutex = SDL_CreateMutex();
- ev->cond = SDL_CreateCond();
- ev->signalled = initialstate;
- ev->autoreset = !manualreset;
-
- return ev;
-}
-
-//============================================================
-// osd_event_free
-//============================================================
-
-void osd_event_free(osd_event *event)
-{
- SDL_DestroyMutex(event->mutex);
- SDL_DestroyCond(event->cond);
- free(event);
-}
-
-//============================================================
-// osd_event_set
-//============================================================
-
-void osd_event_set(osd_event *event)
-{
- LOG(("osd_event_set"));
- SDL_mutexP(event->mutex);
- if (event->signalled == FALSE)
- {
- event->signalled = TRUE;
- if (event->autoreset)
- SDL_CondSignal(event->cond);
- else
- SDL_CondBroadcast(event->cond);
- }
- SDL_mutexV(event->mutex);
-}
-
-//============================================================
-// osd_event_reset
-//============================================================
-
-void osd_event_reset(osd_event *event)
-{
- LOG(("osd_event_reset"));
- SDL_mutexP(event->mutex);
- event->signalled = FALSE;
- SDL_mutexV(event->mutex);
-}
-
-//============================================================
-// osd_event_wait
-//============================================================
-
-int osd_event_wait(osd_event *event, osd_ticks_t timeout)
-{
- LOG(("osd_event_wait"));
- if (timeout == OSD_EVENT_WAIT_INFINITE)
- timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
- SDL_mutexP(event->mutex);
- if (!timeout)
- {
- if (!event->signalled)
- {
- SDL_mutexV(event->mutex);
- return FALSE;
- }
- }
- else
- {
- if (!event->signalled)
- {
- UINT64 msec = (timeout * 1000) / osd_ticks_per_second();
-
- do {
- int ret = SDL_CondWaitTimeout(event->cond, event->mutex, msec);
- if ( ret == SDL_MUTEX_TIMEDOUT )
- {
- if (!event->signalled)
- {
- SDL_mutexV(event->mutex);
- return FALSE;
- }
- else
- break;
- }
- if (ret == 0)
- break;
- printf("Error %d while waiting for pthread_cond_timedwait: %s\n", ret, strerror(ret));
- } while (TRUE);
- }
- }
-
- if (event->autoreset)
- event->signalled = 0;
-
- SDL_mutexV(event->mutex);
-
- return TRUE;
-}
-
-//============================================================
-// osd_thread_create
-//============================================================
-
-static int worker_thread_entry(void *param)
-{
- osd_thread *thread = (osd_thread *) param;
- void *res;
-
- res = thread->callback(thread->param);
-#ifdef PTR64
- return (int) (INT64) res;
-#else
- return (int) res;
-#endif
-}
-
-osd_thread *osd_thread_create(osd_thread_callback callback, void *cbparam)
-{
- osd_thread *thread;
-
- thread = (osd_thread *)calloc(1, sizeof(osd_thread));
- if (thread == NULL)
- return NULL;
- thread->callback = callback;
- thread->param = cbparam;
- thread->thread = SDL_CreateThread(worker_thread_entry, "Thread", thread);
- if ( thread->thread == NULL )
- {
- free(thread);
- return NULL;
- }
- return thread;
-}
-
-//============================================================
-// osd_thread_adjust_priority
-//============================================================
-
-int osd_thread_adjust_priority(osd_thread *thread, int adjust)
-{
- return TRUE;
-}
-
-//============================================================
-// osd_thread_cpu_affinity
-//============================================================
-
-int osd_thread_cpu_affinity(osd_thread *thread, UINT32 mask)
-{
- return TRUE;
-}
-
-//============================================================
-// osd_thread_wait_free
-//============================================================
-
-void osd_thread_wait_free(osd_thread *thread)
-{
- int status;
- SDL_WaitThread(thread->thread, &status);
- free(thread);
-}
diff --git a/src/osd/modules/sync/sync_tc.cpp b/src/osd/modules/sync/sync_tc.cpp
deleted file mode 100644
index 64a6a760e96..00000000000
--- a/src/osd/modules/sync/sync_tc.cpp
+++ /dev/null
@@ -1,273 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// sdlsync.c - SDL core synchronization functions
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-//============================================================
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE // for PTHREAD_MUTEX_RECURSIVE; needs to be here before other glibc headers are included
-#endif
-
-#include "sdlinc.h"
-
-#ifdef SDLMAME_MACOSX
-#include <mach/mach.h>
-#endif
-
-// standard C headers
-#include <math.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-// MAME headers
-#include "osdcomm.h"
-#include "osdcore.h"
-
-#include "osdsync.h"
-
-#include <pthread.h>
-#include <errno.h>
-#include <signal.h>
-#include <sys/time.h>
-
-struct hidden_mutex_t {
- pthread_mutex_t id;
-};
-
-struct osd_event {
- pthread_mutex_t mutex;
- pthread_cond_t cond;
- volatile INT32 autoreset;
- volatile INT32 signalled;
-#ifdef PTR64
- INT8 padding[40]; // Fill a 64-byte cache line
-#else
- INT8 padding[48]; // A bit more padding
-#endif
-};
-
-//============================================================
-// TYPE DEFINITIONS
-//============================================================
-
-struct osd_thread {
- pthread_t thread;
-};
-
-//============================================================
-// osd_event_alloc
-//============================================================
-
-osd_event *osd_event_alloc(int manualreset, int initialstate)
-{
- osd_event *ev;
- pthread_mutexattr_t mtxattr;
-
- ev = (osd_event *)calloc(1, sizeof(osd_event));
- if (ev == NULL)
- return NULL;
-
- pthread_mutexattr_init(&mtxattr);
- pthread_mutex_init(&ev->mutex, &mtxattr);
- pthread_cond_init(&ev->cond, NULL);
- ev->signalled = initialstate;
- ev->autoreset = !manualreset;
-
- return ev;
-}
-
-//============================================================
-// osd_event_free
-//============================================================
-
-void osd_event_free(osd_event *event)
-{
- pthread_mutex_destroy(&event->mutex);
- pthread_cond_destroy(&event->cond);
- free(event);
-}
-
-//============================================================
-// osd_event_set
-//============================================================
-
-void osd_event_set(osd_event *event)
-{
- pthread_mutex_lock(&event->mutex);
- if (event->signalled == FALSE)
- {
- event->signalled = TRUE;
- if (event->autoreset)
- pthread_cond_signal(&event->cond);
- else
- pthread_cond_broadcast(&event->cond);
- }
- pthread_mutex_unlock(&event->mutex);
-}
-
-//============================================================
-// osd_event_reset
-//============================================================
-
-void osd_event_reset(osd_event *event)
-{
- pthread_mutex_lock(&event->mutex);
- event->signalled = FALSE;
- pthread_mutex_unlock(&event->mutex);
-}
-
-//============================================================
-// osd_event_wait
-//============================================================
-
-int osd_event_wait(osd_event *event, osd_ticks_t timeout)
-{
- if (timeout == OSD_EVENT_WAIT_INFINITE)
- timeout = osd_ticks_per_second() * (osd_ticks_t)10000;
-
- pthread_mutex_lock(&event->mutex);
- if (!timeout)
- {
- if (!event->signalled)
- {
- pthread_mutex_unlock(&event->mutex);
- return FALSE;
- }
- }
- else
- {
- if (!event->signalled)
- {
- struct timespec ts;
- struct timeval tp;
- UINT64 msec = timeout * 1000 / osd_ticks_per_second();
- UINT64 nsec;
-
- gettimeofday(&tp, NULL);
-
- ts.tv_sec = tp.tv_sec;
- nsec = (UINT64) tp.tv_usec * (UINT64) 1000 + (msec * (UINT64) 1000000);
- ts.tv_nsec = nsec % (UINT64) 1000000000;
- ts.tv_sec += nsec / (UINT64) 1000000000;
-
- do {
- int ret = pthread_cond_timedwait(&event->cond, &event->mutex, &ts);
- if ( ret == ETIMEDOUT )
- {
- if (!event->signalled)
- {
- pthread_mutex_unlock(&event->mutex);
- return FALSE;
- }
- else
- break;
- }
- if (ret == 0)
- break;
- if ( ret != EINTR)
- {
- printf("Error %d while waiting for pthread_cond_timedwait: %s\n", ret, strerror(ret));
- }
-
- } while (TRUE);
- }
- }
-
- if (event->autoreset)
- event->signalled = 0;
-
- pthread_mutex_unlock(&event->mutex);
-
- return TRUE;
-}
-
-//============================================================
-// osd_thread_create
-//============================================================
-
-osd_thread *osd_thread_create(osd_thread_callback callback, void *cbparam)
-{
- osd_thread *thread;
- pthread_attr_t attr;
-
- thread = (osd_thread *)calloc(1, sizeof(osd_thread));
- if (thread == NULL)
- return NULL;
- pthread_attr_init(&attr);
- pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED);
- if ( pthread_create(&thread->thread, &attr, callback, cbparam) != 0 )
- {
- free(thread);
- return NULL;
- }
- return thread;
-}
-
-//============================================================
-// osd_thread_adjust_priority
-//============================================================
-
-int osd_thread_adjust_priority(osd_thread *thread, int adjust)
-{
- struct sched_param sched;
- int policy;
-
- if ( pthread_getschedparam( thread->thread, &policy, &sched ) == 0 )
- {
- sched.sched_priority += adjust;
- if ( pthread_setschedparam(thread->thread, policy, &sched ) == 0)
- return TRUE;
- else
- return FALSE;
- }
- else
- return FALSE;
-}
-
-//============================================================
-// osd_thread_cpu_affinity
-//============================================================
-
-int osd_thread_cpu_affinity(osd_thread *thread, UINT32 mask)
-{
-#if !defined(NO_AFFINITY_NP)
- cpu_set_t cmask;
- pthread_t lthread;
- int bitnum;
-
- CPU_ZERO(&cmask);
- for (bitnum=0; bitnum<32; bitnum++)
- if (mask & (1<<bitnum))
- CPU_SET(bitnum, &cmask);
-
- if (thread == NULL)
- lthread = pthread_self();
- else
- lthread = thread->thread;
-
- if (pthread_setaffinity_np(lthread, sizeof(cmask), &cmask) <0)
- {
- /* Not available during link in all targets */
- fprintf(stderr, "error %d setting cpu affinity to mask %08x", errno, mask);
- return FALSE;
- }
- else
- return TRUE;
-#else
- return TRUE;
-#endif
-}
-
-//============================================================
-// osd_thread_wait_free
-//============================================================
-
-void osd_thread_wait_free(osd_thread *thread)
-{
- pthread_join(thread->thread, NULL);
- free(thread);
-}
diff --git a/src/osd/modules/sync/sync_windows.cpp b/src/osd/modules/sync/sync_windows.cpp
deleted file mode 100644
index c744f345e6f..00000000000
--- a/src/osd/modules/sync/sync_windows.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-//============================================================
-//
-// winsync.c - Win32 OSD core synchronization functions
-//
-//============================================================
-
-// standard windows headers
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <stdlib.h>
-#include <process.h>
-
-// MAME headers
-#include "osdcore.h"
-#include "eminline.h"
-#include "osdsync.h"
-
-
-//============================================================
-// DEBUGGING
-//============================================================
-
-#define DEBUG_SLOW_LOCKS 0
-
-
-//============================================================
-// TYPE DEFINITIONS
-//============================================================
-
-typedef BOOL (WINAPI *try_enter_critical_section_ptr)(LPCRITICAL_SECTION lpCriticalSection);
-
-struct osd_event
-{
- void * ptr;
-};
-
-struct osd_thread {
- HANDLE handle;
- osd_thread_callback callback;
- void *param;
-};
-
-//============================================================
-// win_compare_exchange32
-//============================================================
-
-INT32 win_compare_exchange32(INT32 volatile *ptr, INT32 compare, INT32 exchange)
-{
- return InterlockedCompareExchange((LPLONG)ptr, (LONG)exchange, (LONG)compare);
-}
-
-
-//============================================================
-// win_compare_exchange64
-//============================================================
-
-#ifdef PTR64
-INT64 win_compare_exchange64(INT64 volatile *ptr, INT64 compare, INT64 exchange)
-{
- return InterlockedCompareExchange64((LONGLONG*)ptr, (LONGLONG)exchange, (LONGLONG)compare);
-}
-#endif
-
-
-//============================================================
-// win_atomic_exchange32
-//============================================================
-
-INT32 win_atomic_exchange32(INT32 volatile *ptr, INT32 exchange)
-{
- return InterlockedExchange((LONG *) ptr, exchange);
-}
-
-
-//============================================================
-// win_atomic_add32
-//============================================================
-
-INT32 win_atomic_add32(INT32 volatile *ptr, INT32 delta)
-{
- return InterlockedExchangeAdd((LONG *) ptr, delta) + delta;
-}
-
-//============================================================
-// osd_event_alloc
-//============================================================
-
-osd_event *osd_event_alloc(int manualreset, int initialstate)
-{
- return (osd_event *) CreateEvent(nullptr, manualreset, initialstate, nullptr);
-}
-
-//============================================================
-// osd_event_free
-//============================================================
-
-void osd_event_free(osd_event *event)
-{
- CloseHandle((HANDLE) event);
-}
-
-//============================================================
-// osd_event_set
-//============================================================
-
-void osd_event_set(osd_event *event)
-{
- SetEvent((HANDLE) event);
-}
-
-//============================================================
-// osd_event_reset
-//============================================================
-
-void osd_event_reset(osd_event *event)
-{
- ResetEvent((HANDLE) event);
-}
-
-//============================================================
-// osd_event_wait
-//============================================================
-
-int osd_event_wait(osd_event *event, osd_ticks_t timeout)
-{
- DWORD timeout_param;
- if (timeout == OSD_EVENT_WAIT_INFINITE)
- timeout_param = INFINITE;
- else
- timeout_param = timeout * 1000 / osd_ticks_per_second();
-
- int ret = WaitForSingleObject((HANDLE) event, timeout_param);
- return (ret == WAIT_OBJECT_0);
-}
-
-//============================================================
-// osd_thread_create
-//============================================================
-
-static unsigned __stdcall worker_thread_entry(void *param)
-{
- osd_thread *thread = (osd_thread *) param;
- void *res;
- res = thread->callback(thread->param);
-#ifdef PTR64
- return (unsigned) (long long) res;
-#else
- return (unsigned) res;
-#endif
-}
-
-osd_thread *osd_thread_create(osd_thread_callback callback, void *cbparam)
-{
- osd_thread *thread;
- uintptr_t handle;
-
- thread = (osd_thread *)calloc(1, sizeof(osd_thread));
- if (thread == nullptr)
- return nullptr;
- thread->callback = callback;
- thread->param = cbparam;
- handle = _beginthreadex(nullptr, 0, worker_thread_entry, thread, 0, nullptr);
- if (handle == 0)
- {
- free(thread);
- return nullptr;
- }
- thread->handle = (HANDLE) handle;
- return thread;
-}
-
-//============================================================
-// osd_thread_wait_free
-//============================================================
-
-void osd_thread_wait_free(osd_thread *thread)
-{
- WaitForSingleObject(thread->handle, INFINITE);
- CloseHandle(thread->handle);
- free(thread);
-}
-
-//============================================================
-// osd_thread_adjust_priority
-//============================================================
-
-int osd_thread_adjust_priority(osd_thread *thread, int adjust)
-{
- if (adjust)
- SetThreadPriority(thread->handle, THREAD_PRIORITY_ABOVE_NORMAL);
- else
- SetThreadPriority(thread->handle, GetThreadPriority(GetCurrentThread()));
- return TRUE;
-}
-
-//============================================================
-// osd_thread_cpu_affinity
-//============================================================
-
-int osd_thread_cpu_affinity(osd_thread *thread, UINT32 mask)
-{
- return TRUE;
-}
diff --git a/src/osd/modules/sync/work_mini.cpp b/src/osd/modules/sync/work_mini.cpp
deleted file mode 100644
index 3d4b10fc539..00000000000
--- a/src/osd/modules/sync/work_mini.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-//============================================================
-//
-// miniwork.c - Minimal core work item functions
-//
-//============================================================
-
-#include "osdcore.h"
-#include <stdlib.h>
-
-
-//============================================================
-// TYPE DEFINITIONS
-//============================================================
-
-struct osd_work_item
-{
- void *result;
-};
-
-//============================================================
-// GLOBAL VARIABLES
-//============================================================
-
-int osd_num_processors = 0;
-
-//============================================================
-// osd_work_queue_alloc
-//============================================================
-
-osd_work_queue *osd_work_queue_alloc(int flags)
-{
- // this minimal implementation doesn't need to keep any state
- // so we just return a non-NULL pointer
- return (osd_work_queue *)1;
-}
-
-
-//============================================================
-// osd_work_queue_items
-//============================================================
-
-int osd_work_queue_items(osd_work_queue *queue)
-{
- // we never have pending items
- return 0;
-}
-
-
-//============================================================
-// osd_work_queue_wait
-//============================================================
-
-int osd_work_queue_wait(osd_work_queue *queue, osd_ticks_t timeout)
-{
- // never anything to wait for, so do nothing
- return TRUE;
-}
-
-
-//============================================================
-// osd_work_queue_free
-//============================================================
-
-void osd_work_queue_free(osd_work_queue *queue)
-{
- // never allocated anything, so nothing to do
-}
-
-
-//============================================================
-// osd_work_item_queue
-//============================================================
-
-osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_callback callback, INT32 numitems, void *parambase, INT32 paramstep, UINT32 flags)
-{
- osd_work_item *item;
- int itemnum;
-
- // allocate memory to hold the result
- item = (osd_work_item *)malloc(sizeof(*item));
- if (item == nullptr)
- return nullptr;
-
- // loop over all requested items
- for (itemnum = 0; itemnum < numitems; itemnum++)
- {
- // execute the call directly
- item->result = (*callback)(parambase, 0);
-
- // advance the param
- parambase = (UINT8 *)parambase + paramstep;
- }
-
- // free the item if requested
- if (flags & WORK_ITEM_FLAG_AUTO_RELEASE)
- {
- free(item);
- item = nullptr;
- }
- return item;
-}
-
-
-//============================================================
-// osd_work_item_wait
-//============================================================
-
-int osd_work_item_wait(osd_work_item *item, osd_ticks_t timeout)
-{
- // never anything to wait for, so do nothing
- return TRUE;
-}
-
-
-//============================================================
-// osd_work_item_result
-//============================================================
-
-void *osd_work_item_result(osd_work_item *item)
-{
- return item->result;
-}
-
-
-//============================================================
-// osd_work_item_release
-//============================================================
-
-void osd_work_item_release(osd_work_item *item)
-{
- free(item);
-}
diff --git a/src/osd/modules/sync/work_osd.cpp b/src/osd/modules/sync/work_osd.cpp
index 3238fdfe792..67cb08b5f2b 100644
--- a/src/osd/modules/sync/work_osd.cpp
+++ b/src/osd/modules/sync/work_osd.cpp
@@ -5,8 +5,7 @@
// sdlwork.c - SDL OSD core work item functions
//
//============================================================
-
-#if defined(OSD_WINDOWS)
+#if defined(OSD_WINDOWS) || defined(SDLMAME_WIN32)
// standard windows headers
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
@@ -19,6 +18,8 @@
#endif
#endif
#include <mutex>
+#include <atomic>
+#include <thread>
// MAME headers
#include "osdcore.h"
@@ -31,7 +32,9 @@
#if defined(SDLMAME_MACOSX)
#include "osxutils.h"
#endif
-
+#if defined(SDLMAME_LINUX) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU) || defined(SDLMAME_EMSCRIPTEN) || defined(SDLMAME_MACOSX)
+#include <pthread.h>
+#endif
#if defined(OSD_SDL)
typedef void *PVOID;
#endif
@@ -56,7 +59,7 @@ typedef void *PVOID;
//============================================================
#if KEEP_STATISTICS
-#define add_to_stat(v,x) do { atomic_add32((v), (x)); } while (0)
+#define add_to_stat(v,x) do { (v) += (x); } while (0)
#define begin_timing(v) do { (v) -= get_profile_ticks(); } while (0)
#define end_timing(v) do { (v) += get_profile_ticks(); } while (0)
#else
@@ -65,8 +68,8 @@ typedef void *PVOID;
#define end_timing(v) do { } while (0)
#endif
-template<typename _PtrType>
-static void spin_while(const volatile _PtrType * volatile ptr, const _PtrType val, const osd_ticks_t timeout, const int invert = 0)
+template<typename _AtomType, typename _MainType>
+static void spin_while(const volatile _AtomType * volatile atom, const _MainType val, const osd_ticks_t timeout, const int invert = 0)
{
osd_ticks_t stopspin = osd_ticks() + timeout;
@@ -74,16 +77,16 @@ static void spin_while(const volatile _PtrType * volatile ptr, const _PtrType va
int spin = 10000;
while (--spin)
{
- if ((*ptr != val) ^ invert)
+ if ((*atom != val) ^ invert)
return;
}
- } while (((*ptr == val) ^ invert) && osd_ticks() < stopspin);
+ } while (((*atom == val) ^ invert) && osd_ticks() < stopspin);
}
-template<typename _PtrType>
-static void spin_while_not(const volatile _PtrType * volatile ptr, const _PtrType val, const osd_ticks_t timeout)
+template<typename _AtomType, typename _MainType>
+static void spin_while_not(const volatile _AtomType * volatile atom, const _MainType val, const osd_ticks_t timeout)
{
- spin_while(ptr, val, timeout, 1);
+ spin_while<_AtomType, _MainType>(atom, val, timeout, 1);
}
@@ -94,9 +97,9 @@ static void spin_while_not(const volatile _PtrType * volatile ptr, const _PtrTyp
struct work_thread_info
{
osd_work_queue * queue; // pointer back to the queue
- osd_thread * handle; // handle to the thread
+ std::thread * handle; // handle to the thread
osd_event * wakeevent; // wake event for the thread
- volatile INT32 active; // are we actively processing work?
+ std::atomic<INT32> active; // are we actively processing work?
#if KEEP_STATISTICS
INT32 itemsdone;
@@ -110,24 +113,24 @@ struct work_thread_info
struct osd_work_queue
{
- std::mutex *lock; // lock for protecting the queue
- osd_work_item * volatile list; // list of items in the queue
+ std::mutex *lock; // lock for protecting the queue
+ std::atomic<osd_work_item *> list; // list of items in the queue
osd_work_item ** volatile tailptr; // pointer to the tail pointer of work items in the queue
- osd_work_item * volatile free; // free list of work items
- volatile INT32 items; // items in the queue
- volatile INT32 livethreads; // number of live threads
- volatile INT32 waiting; // is someone waiting on the queue to complete?
- volatile INT32 exiting; // should the threads exit on their next opportunity?
+ std::atomic<osd_work_item *> free; // free list of work items
+ std::atomic<INT32> items; // items in the queue
+ std::atomic<INT32> livethreads; // number of live threads
+ std::atomic<INT32> waiting; // is someone waiting on the queue to complete?
+ std::atomic<INT32> exiting; // should the threads exit on their next opportunity?
UINT32 threads; // number of threads in this queue
UINT32 flags; // creation flags
work_thread_info * thread; // array of thread information
osd_event * doneevent; // event signalled when work is complete
#if KEEP_STATISTICS
- volatile INT32 itemsqueued; // total items queued
- volatile INT32 setevents; // number of times we called SetEvent
- volatile INT32 extraitems; // how many extra items we got after the first in the queue loop
- volatile INT32 spinloops; // how many times spinning bought us more items
+ std::atomic<INT32> itemsqueued; // total items queued
+ std::atomic<INT32> setevents; // number of times we called SetEvent
+ std::atomic<INT32> extraitems; // how many extra items we got after the first in the queue loop
+ std::atomic<INT32> spinloops; // how many times spinning bought us more items
#endif
};
@@ -141,7 +144,7 @@ struct osd_work_item
void * result; // callback result
osd_event * event; // event signalled when complete
UINT32 flags; // creation flags
- volatile INT32 done; // is the item done?
+ std::atomic<INT32> done; // is the item done?
};
//============================================================
@@ -159,6 +162,33 @@ static void * worker_thread_entry(void *param);
static void worker_thread_process(osd_work_queue *queue, work_thread_info *thread);
static bool queue_has_list_items(osd_work_queue *queue);
+//============================================================
+// osd_thread_adjust_priority
+//============================================================
+
+int thread_adjust_priority(std::thread *thread, int adjust)
+{
+#if defined(OSD_WINDOWS) || defined(SDLMAME_WIN32)
+ if (adjust)
+ SetThreadPriority((HANDLE)thread->native_handle(), THREAD_PRIORITY_ABOVE_NORMAL);
+ else
+ SetThreadPriority((HANDLE)thread->native_handle(), GetThreadPriority(GetCurrentThread()));
+#endif
+#if defined(SDLMAME_LINUX) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU) || defined(SDLMAME_EMSCRIPTEN) || defined(SDLMAME_DARWIN)
+ struct sched_param sched;
+ int policy;
+
+ if (pthread_getschedparam(thread->native_handle(), &policy, &sched) == 0)
+ {
+ sched.sched_priority += adjust;
+ if (pthread_setschedparam(thread->native_handle(), policy, &sched) == 0)
+ return TRUE;
+ else
+ return FALSE;
+ }
+#endif
+ return TRUE;
+}
//============================================================
// osd_work_queue_alloc
@@ -236,16 +266,16 @@ osd_work_queue *osd_work_queue_alloc(int flags)
goto error;
// create the thread
- thread->handle = osd_thread_create(worker_thread_entry, thread);
- if (thread->handle == NULL)
+ thread->handle = new std::thread(worker_thread_entry, thread);
+ if (thread->handle == nullptr)
goto error;
// set its priority: I/O threads get high priority because they are assumed to be
// blocked most of the time; other threads just match the creator's priority
if (flags & WORK_QUEUE_FLAG_IO)
- osd_thread_adjust_priority(thread->handle, 1);
+ thread_adjust_priority(thread->handle, 1);
else
- osd_thread_adjust_priority(thread->handle, 0);
+ thread_adjust_priority(thread->handle, 0);
}
// start a timer going for "waittime" on the main thread
@@ -301,7 +331,7 @@ int osd_work_queue_wait(osd_work_queue *queue, osd_ticks_t timeout)
{
// spin until we're done
begin_timing(thread->spintime);
- spin_while_not(&queue->items, 0, timeout);
+ spin_while_not<std::atomic<int>,int>(&queue->items, 0, timeout);
end_timing(thread->spintime);
begin_timing(thread->waittime);
@@ -312,10 +342,10 @@ int osd_work_queue_wait(osd_work_queue *queue, osd_ticks_t timeout)
// reset our done event and double-check the items before waiting
osd_event_reset(queue->doneevent);
- atomic_exchange32(&queue->waiting, TRUE);
+ queue->waiting = TRUE;
if (queue->items != 0)
osd_event_wait(queue->doneevent, timeout);
- atomic_exchange32(&queue->waiting, FALSE);
+ queue->waiting = FALSE;
// return TRUE if we actually hit 0
return (queue->items == 0);
@@ -340,7 +370,7 @@ void osd_work_queue_free(osd_work_queue *queue)
}
// signal all the threads to exit
- atomic_exchange32(&queue->exiting, TRUE);
+ queue->exiting = TRUE;
for (threadnum = 0; threadnum < queue->threads; threadnum++)
{
work_thread_info *thread = &queue->thread[threadnum];
@@ -356,7 +386,8 @@ void osd_work_queue_free(osd_work_queue *queue)
// block on the thread going away, then close the handle
if (thread->handle != NULL)
{
- osd_thread_wait_free(thread->handle);
+ thread->handle->join();
+ delete thread->handle;
}
// clean up the wake event
@@ -396,7 +427,7 @@ void osd_work_queue_free(osd_work_queue *queue)
osd_event_free(queue->doneevent);
// free all items in the free list
- while (queue->free != NULL)
+ while (queue->free.load() != nullptr)
{
osd_work_item *item = (osd_work_item *)queue->free;
queue->free = item->next;
@@ -406,7 +437,7 @@ void osd_work_queue_free(osd_work_queue *queue)
}
// free all items in the active list
- while (queue->list != NULL)
+ while (queue->list.load() != nullptr)
{
osd_work_item *item = (osd_work_item *)queue->list;
queue->list = item->next;
@@ -445,12 +476,11 @@ osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_call
// first allocate a new work item; try the free list first
{
- queue->lock->lock();
+ std::lock_guard<std::mutex> lock(*queue->lock);
do
{
item = (osd_work_item *)queue->free;
- } while (item != NULL && compare_exchange_ptr((PVOID volatile *)&queue->free, item, item->next) != item);
- queue->lock->unlock();
+ } while (item != NULL && !queue->free.compare_exchange_weak(item, item->next, std::memory_order_release, std::memory_order_relaxed));
}
// if nothing, allocate something new
@@ -466,7 +496,7 @@ osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_call
}
else
{
- atomic_exchange32(&item->done, FALSE); // needs to be set this way to prevent data race/usage of uninitialized memory on Linux
+ item->done = FALSE; // needs to be set this way to prevent data race/usage of uninitialized memory on Linux
}
// fill in the basics
@@ -485,15 +515,14 @@ osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_call
// enqueue the whole thing within the critical section
{
- queue->lock->lock();
+ std::lock_guard<std::mutex> lock(*queue->lock);
*queue->tailptr = itemlist;
- queue->tailptr = item_tailptr;
- queue->lock->unlock();
+ queue->tailptr = item_tailptr;
}
// increment the number of items in the queue
- atomic_add32(&queue->items, numitems);
- add_to_stat(&queue->itemsqueued, numitems);
+ queue->items += numitems;
+ add_to_stat(queue->itemsqueued, numitems);
// look for free threads to do the work
if (queue->livethreads < queue->threads)
@@ -509,7 +538,7 @@ osd_work_item *osd_work_item_queue_multiple(osd_work_queue *queue, osd_work_call
if (!thread->active)
{
osd_event_set(thread->wakeevent);
- add_to_stat(&queue->setevents, 1);
+ add_to_stat(queue->setevents, 1);
// for non-shared, the first one we find is good enough
if (--numitems == 0)
@@ -543,9 +572,8 @@ int osd_work_item_wait(osd_work_item *item, osd_ticks_t timeout)
// if we don't have an event, create one
if (item->event == NULL)
{
- item->queue->lock->lock();
- item->event = osd_event_alloc(TRUE, FALSE); // manual reset, not signalled
- item->queue->lock->unlock();
+ std::lock_guard<std::mutex> lock(*item->queue->lock);
+ item->event = osd_event_alloc(TRUE, FALSE); // manual reset, not signalled
}
else
osd_event_reset(item->event);
@@ -554,7 +582,7 @@ int osd_work_item_wait(osd_work_item *item, osd_ticks_t timeout)
if (item->event == NULL)
{
// TODO: do we need to measure the spin time here as well? and how can we do it?
- spin_while(&item->done, 0, timeout);
+ spin_while<std::atomic<int>,int>(&item->done, 0, timeout);
}
// otherwise, block on the event until done
@@ -588,13 +616,12 @@ void osd_work_item_release(osd_work_item *item)
osd_work_item_wait(item, 100 * osd_ticks_per_second());
// add us to the free list on our queue
- item->queue->lock->lock();
+ std::lock_guard<std::mutex> lock(*item->queue->lock);
do
{
next = (osd_work_item *)item->queue->free;
item->next = next;
- } while (compare_exchange_ptr((PVOID volatile *)&item->queue->free, next, item) != next);
- item->queue->lock->unlock();
+ } while (!item->queue->free.compare_exchange_weak(next, item, std::memory_order_release, std::memory_order_relaxed));
}
@@ -659,8 +686,8 @@ static void *worker_thread_entry(void *param)
break;
// indicate that we are live
- atomic_exchange32(&thread->active, TRUE);
- atomic_increment32(&queue->livethreads);
+ thread->active = TRUE;
+ ++queue->livethreads;
// process work items
for ( ;; )
@@ -669,23 +696,23 @@ static void *worker_thread_entry(void *param)
worker_thread_process(queue, thread);
// if we're a high frequency queue, spin for a while before giving up
- if (queue->flags & WORK_QUEUE_FLAG_HIGH_FREQ && queue->list == NULL)
+ if (queue->flags & WORK_QUEUE_FLAG_HIGH_FREQ && queue->list.load() == nullptr)
{
// spin for a while looking for more work
begin_timing(thread->spintime);
- spin_while(&queue->list, (osd_work_item *)NULL, SPIN_LOOP_TIME);
+ spin_while<std::atomic<osd_work_item *>, osd_work_item *>(&queue->list, (osd_work_item *)nullptr, SPIN_LOOP_TIME);
end_timing(thread->spintime);
}
// if nothing more, release the processor
if (!queue_has_list_items(queue))
break;
- add_to_stat(&queue->spinloops, 1);
+ add_to_stat(queue->spinloops, 1);
}
// decrement the live thread count
- atomic_exchange32(&thread->active, FALSE);
- atomic_decrement32(&queue->livethreads);
+ thread->active = FALSE;
+ --queue->livethreads;
}
#if defined(SDLMAME_MACOSX)
@@ -715,8 +742,9 @@ static void worker_thread_process(osd_work_queue *queue, work_thread_info *threa
// use a critical section to synchronize the removal of items
{
- queue->lock->lock();
- if (queue->list == NULL)
+ std::lock_guard<std::mutex> lock(*queue->lock);
+
+ if (queue->list.load() == nullptr)
{
end_loop = true;
}
@@ -727,11 +755,10 @@ static void worker_thread_process(osd_work_queue *queue, work_thread_info *threa
if (item != NULL)
{
queue->list = item->next;
- if (queue->list == NULL)
+ if (queue->list.load() == nullptr)
queue->tailptr = (osd_work_item **)&queue->list;
}
}
- queue->lock->unlock();
}
if (end_loop)
@@ -746,9 +773,9 @@ static void worker_thread_process(osd_work_queue *queue, work_thread_info *threa
end_timing(thread->actruntime);
// decrement the item count after we are done
- atomic_decrement32(&queue->items);
- atomic_exchange32(&item->done, TRUE);
- add_to_stat(&thread->itemsdone, 1);
+ --queue->items;
+ item->done = TRUE;
+ add_to_stat(thread->itemsdone, 1);
// if it's an auto-release item, release it
if (item->flags & WORK_ITEM_FLAG_AUTO_RELEASE)
@@ -757,18 +784,18 @@ static void worker_thread_process(osd_work_queue *queue, work_thread_info *threa
// set the result and signal the event
else
{
- queue->lock->lock();
+ std::lock_guard<std::mutex> lock(*queue->lock);
+
if (item->event != NULL)
{
osd_event_set(item->event);
- add_to_stat(&item->queue->setevents, 1);
+ add_to_stat(item->queue->setevents, 1);
}
- queue->lock->unlock();
}
// if we removed an item and there's still work to do, bump the stats
if (queue_has_list_items(queue))
- add_to_stat(&queue->extraitems, 1);
+ add_to_stat(queue->extraitems, 1);
}
}
@@ -776,7 +803,7 @@ static void worker_thread_process(osd_work_queue *queue, work_thread_info *threa
if (queue->waiting)
{
osd_event_set(queue->doneevent);
- add_to_stat(&queue->setevents, 1);
+ add_to_stat(queue->setevents, 1);
}
end_timing(thread->runtime);
@@ -784,8 +811,7 @@ static void worker_thread_process(osd_work_queue *queue, work_thread_info *threa
bool queue_has_list_items(osd_work_queue *queue)
{
- queue->lock->lock();
- bool has_list_items = (queue->list != NULL);
- queue->lock->unlock();
+ std::lock_guard<std::mutex> lock(*queue->lock);
+ bool has_list_items = (queue->list.load() != nullptr);
return has_list_items;
}
diff --git a/src/osd/osdcomm.h b/src/osd/osdcomm.h
index c4c5501f2e0..0a94ec0c284 100644
--- a/src/osd/osdcomm.h
+++ b/src/osd/osdcomm.h
@@ -88,11 +88,7 @@ using INT64 = signed long long;
#endif
/* pointer-sized values */
-#ifdef PTR64
-using FPTR = UINT64;
-#else
-using FPTR = UINT32;
-#endif
+using FPTR = uintptr_t;
diff --git a/src/osd/osdcore.h b/src/osd/osdcore.h
index cd08fa8aa4e..dec4a5c030b 100644
--- a/src/osd/osdcore.h
+++ b/src/osd/osdcore.h
@@ -28,7 +28,7 @@
/* Make sure we have a path separator (default to /) */
#ifndef PATH_SEPARATOR
-#if defined(_WIN32) || defined (__OS2__)
+#if defined(_WIN32)
#define PATH_SEPARATOR "\\"
#else
#define PATH_SEPARATOR "/"
@@ -203,6 +203,21 @@ file_error osd_truncate(osd_file *file, UINT64 offset);
/*-----------------------------------------------------------------------------
+ osd_fflus: flush file buffers
+
+ Parameters:
+
+ file - handle to a file previously opened via osd_open
+
+ Return value:
+
+ a file_error describing any error that occurred while writing to
+ the file, or FILERR_NONE if no error occurred
+-----------------------------------------------------------------------------*/
+file_error osd_fflush(osd_file *file);
+
+
+/*-----------------------------------------------------------------------------
osd_rmfile: deletes a file
Parameters:
diff --git a/src/osd/osdmini/minifile.cpp b/src/osd/osdmini/minifile.cpp
index b30b566585c..b963634da51 100644
--- a/src/osd/osdmini/minifile.cpp
+++ b/src/osd/osdmini/minifile.cpp
@@ -128,6 +128,22 @@ file_error osd_truncate(osd_file *file, UINT64 offset)
return FILERR_NONE;
}
+//============================================================
+// osd_fflush
+//============================================================
+
+file_error osd_fflush(osd_file *file)
+{
+ if (!file)
+ return FILERR_FAILURE;
+
+ int result = fflush((FILE *)file);
+ if (result == EOF)
+ return FILERR_FAILURE;
+
+ return FILERR_NONE;
+}
+
//============================================================
// osd_rmfile
diff --git a/src/osd/osdmini/minitime.cpp b/src/osd/osdmini/minitime.cpp
index 0de48bcb007..b0d8ff17bb7 100644
--- a/src/osd/osdmini/minitime.cpp
+++ b/src/osd/osdmini/minitime.cpp
@@ -10,6 +10,14 @@
#include <time.h>
+//============================================================
+// osd_num_processors
+//============================================================
+
+int osd_get_num_processors(void)
+{
+ return 1;
+}
//============================================================
// osd_ticks
diff --git a/src/osd/sdl/input.cpp b/src/osd/sdl/input.cpp
deleted file mode 100644
index 9cfcdb1cf16..00000000000
--- a/src/osd/sdl/input.cpp
+++ /dev/null
@@ -1,2128 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// input.c - SDL implementation of MAME input routines
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-// SixAxis info: left analog is axes 0 & 1, right analog is axes 2 & 3,
-// analog L2 is axis 12 and analog L3 is axis 13
-//
-//============================================================
-
-// standard sdl header
-#include "sdlinc.h"
-#include <ctype.h>
-#include <stddef.h>
-#include <mutex>
-
-#if USE_XINPUT
-// for xinput
-#include <X11/Xlib.h>
-#include <X11/extensions/XInput.h>
-#include <X11/Xutil.h>
-#endif
-
-// MAME headers
-#include "emu.h"
-#include "ui/ui.h"
-#include "uiinput.h"
-#include "emuopts.h"
-
-
-// MAMEOS headers
-#include "input.h"
-#include "osdsdl.h"
-#include "window.h"
-
-// winnt.h defines this
-#ifdef DELETE
-#undef DELETE
-#endif
-
-//============================================================
-// PARAMETERS
-//============================================================
-
-enum
-{
- POVDIR_LEFT = 0,
- POVDIR_RIGHT,
- POVDIR_UP,
- POVDIR_DOWN
-};
-
-#define MAX_KEYS 256
-#define MAX_AXES 32
-#define MAX_BUTTONS 32
-#define MAX_HATS 8
-#define MAX_POV 4
-#define MAX_DEVMAP_ENTRIES 16
-
-#if (USE_XINPUT)
-//For xinput
-#define INVALID_EVENT_TYPE -1
-static int motion_type = INVALID_EVENT_TYPE;
-static int button_press_type = INVALID_EVENT_TYPE;
-static int button_release_type = INVALID_EVENT_TYPE;
-static int key_press_type = INVALID_EVENT_TYPE;
-static int key_release_type = INVALID_EVENT_TYPE;
-static int proximity_in_type = INVALID_EVENT_TYPE;
-static int proximity_out_type = INVALID_EVENT_TYPE;
-#endif
-
-//============================================================
-// MACROS
-//============================================================
-
-// introduced in 1.3
-
-#ifndef SDLK_INDEX
-#define SDLK_INDEX(x) (x)
-#endif
-
-
-//============================================================
-// TYPEDEFS
-//============================================================
-
-// state information for a keyboard
-struct keyboard_state
-{
- INT32 state[0x3ff]; // must be INT32!
- INT8 oldkey[MAX_KEYS];
- INT8 currkey[MAX_KEYS];
-};
-
-
-// state information for a mouse
-struct mouse_state
-{
- INT32 lX, lY;
- INT32 buttons[MAX_BUTTONS];
-};
-
-
-// state information for a joystick; DirectInput state must be first element
-struct joystick_state
-{
- SDL_Joystick *device;
- INT32 axes[MAX_AXES];
- INT32 buttons[MAX_BUTTONS];
- INT32 hatsU[MAX_HATS], hatsD[MAX_HATS], hatsL[MAX_HATS], hatsR[MAX_HATS];
- INT32 balls[MAX_AXES];
-};
-
-#if (USE_XINPUT)
-// state information for a lightgun
-struct lightgun_state
-{
- INT32 lX, lY;
- INT32 buttons[MAX_BUTTONS];
- XID deviceid; //Xinput device id
- INT32 maxx,maxy;
- INT32 minx,miny;
-};
-#endif
-
-// generic device information
-struct device_info
-{
- // device information
- device_info ** head;
- device_info * next;
- std::string name;
-
- // MAME information
- input_device * device;
-
- // device state
- union
- {
- keyboard_state keyboard;
- mouse_state mouse;
- joystick_state joystick;
-#if (USE_XINPUT)
- lightgun_state lightgun;
-#endif
- };
-};
-
-
-//============================================================
-// LOCAL VARIABLES
-//============================================================
-
-// global states
-static std::mutex input_lock;
-static UINT8 input_paused;
-
-static sdl_window_info * focus_window = NULL;
-
-// input buffer - only for SDLMAME_EVENTS_IN_WORKER_THREAD
-#define MAX_BUF_EVENTS (1000) /* 100 not enough for SDL 1.3 */
-static SDL_Event event_buf[MAX_BUF_EVENTS];
-static int event_buf_count;
-
-// keyboard states
-static device_info * keyboard_list;
-
-// mouse states
-static UINT8 app_has_mouse_focus;
-static UINT8 mouse_enabled;
-static device_info * mouse_list;
-
-// lightgun states
-static UINT8 lightgun_enabled;
-static device_info * lightgun_list;
-
-// joystick states
-static device_info * joystick_list;
-
-// joystick mapper
-
-struct device_map_t
-{
- struct {
- char *name;
- int physical;
- } map[MAX_DEVMAP_ENTRIES];
- int logical[MAX_DEVMAP_ENTRIES];
- int initialized;
-};
-
-static device_map_t joy_map;
-static device_map_t mouse_map;
-static device_map_t keyboard_map;
-#if (USE_XINPUT)
-static device_map_t lightgun_map;
-Display *XDisplay;
-#endif
-
-static int sixaxis_mode;
-
-
-//============================================================
-// PROTOTYPES
-//============================================================
-
-// deivce list management
-static void device_list_reset_devices(device_info *devlist_head);
-static void device_list_free_devices(device_info **devlist_head);
-
-// generic device management
-static device_info *generic_device_alloc(device_info **devlist_head_ptr, const char *name);
-static void generic_device_free(device_info *devinfo);
-static int generic_device_index(device_info *devlist_head, device_info *devinfo);
-static void generic_device_reset(device_info *devinfo);
-static INT32 generic_button_get_state(void *device_internal, void *item_internal);
-static INT32 generic_axis_get_state(void *device_internal, void *item_internal);
-static device_info *generic_device_find_index(device_info *devlist_head, int index);
-
-
-//============================================================
-// KEYBOARD/JOYSTICK LIST
-//============================================================
-
-// master keyboard translation table
-struct kt_table {
- input_item_id mame_key;
- INT32 sdl_key;
- //const char * vkey;
- //const char * ascii;
- const char * mame_key_name;
- char * ui_name;
-};
-
-
-#define OSD_SDL_INDEX(x) (x)
-#define OSD_SDL_INDEX_KEYSYM(keysym) ((keysym)->scancode)
-
-#define GET_WINDOW(ev) window_from_id((ev)->windowID)
-//#define GET_WINDOW(ev) ((ev)->windowID)
-// FIXME: sdl does not properly report the window for certain OS.
-#define GET_FOCUS_WINDOW(ev) focus_window
-//#define GET_FOCUS_WINDOW(ev) window_from_id((ev)->windowID)
-
-
-#define KTT_ENTRY0(MAME, SDL, VK, AS, UI) { ITEM_ID_ ## MAME, SDL_SCANCODE_ ## SDL, "ITEM_ID_" #MAME, (char *) UI }
-#define KTT_ENTRY1(MAME, SDL) KTT_ENTRY0(MAME, SDL, MAME, MAME, #MAME)
-// only for reference ...
-#define KTT_ENTRY2(MAME, SDL) KTT_ENTRY0(MAME, SDL, 0, 0, #MAME)
-
-
-static kt_table sdl_key_trans_table[] =
-{
- // MAME key SDL key vkey ascii
- KTT_ENTRY0( ESC, ESCAPE, 0x1b, 0x1b, "ESC" ), // 0
- KTT_ENTRY1( 1, 1 ), // 1
- KTT_ENTRY1( 2, 2 ), // 2
- KTT_ENTRY1( 3, 3 ), // 3
- KTT_ENTRY1( 4, 4 ), // 4
- KTT_ENTRY1( 5, 5 ), // 5
- KTT_ENTRY1( 6, 6 ), // 6
- KTT_ENTRY1( 7, 7 ), // 7
- KTT_ENTRY1( 8, 8 ), // 8
- KTT_ENTRY1( 9, 9 ), // 9
- KTT_ENTRY1( 0, 0 ), // 10
- KTT_ENTRY0( MINUS, MINUS, 0xbd, '-', "MINUS" ), // 11
- KTT_ENTRY0( EQUALS, EQUALS, 0xbb, '=', "EQUALS" ), // 12
- KTT_ENTRY0( BACKSPACE, BACKSPACE, 0x08, 0x08, "BACKSPACE" ), // 13
- KTT_ENTRY0( TAB, TAB, 0x09, 0x09, "TAB" ), // 14
- KTT_ENTRY1( Q, Q ), // 15
- KTT_ENTRY1( W, W ), // 16
- KTT_ENTRY1( E, E ), // 17
- KTT_ENTRY1( R, R ), // 18
- KTT_ENTRY1( T, T ), // 19
- KTT_ENTRY1( Y, Y ), // 20
- KTT_ENTRY1( U, U ), // 21
- KTT_ENTRY1( I, I ), // 22
- KTT_ENTRY1( O, O ), // 23
- KTT_ENTRY1( P, P ), // 24
- KTT_ENTRY0( OPENBRACE, LEFTBRACKET, 0xdb, '[', "OPENBRACE" ), // 25
- KTT_ENTRY0( CLOSEBRACE,RIGHTBRACKET, 0xdd, ']', "CLOSEBRACE" ), // 26
- KTT_ENTRY0( ENTER, RETURN, 0x0d, 0x0d, "RETURN" ), // 27
- KTT_ENTRY2( LCONTROL, LCTRL ), // 28
- KTT_ENTRY1( A, A ), // 29
- KTT_ENTRY1( S, S ), // 30
- KTT_ENTRY1( D, D ), // 31
- KTT_ENTRY1( F, F ), // 32
- KTT_ENTRY1( G, G ), // 33
- KTT_ENTRY1( H, H ), // 34
- KTT_ENTRY1( J, J ), // 35
- KTT_ENTRY1( K, K ), // 36
- KTT_ENTRY1( L, L ), // 37
- KTT_ENTRY0( COLON, SEMICOLON, 0xba, ';', "COLON" ), // 38
- KTT_ENTRY0( QUOTE, APOSTROPHE, 0xde, '\'', "QUOTE" ), // 39
- KTT_ENTRY2( LSHIFT, LSHIFT ), // 40
- KTT_ENTRY0( BACKSLASH, BACKSLASH, 0xdc, '\\', "BACKSLASH" ), // 41
- KTT_ENTRY1( Z, Z ), // 42
- KTT_ENTRY1( X, X ), // 43
- KTT_ENTRY1( C, C ), // 44
- KTT_ENTRY1( V, V ), // 45
- KTT_ENTRY1( B, B ), // 46
- KTT_ENTRY1( N, N ), // 47
- KTT_ENTRY1( M, M ), // 48
- KTT_ENTRY0( COMMA, COMMA, 0xbc, ',', "COMMA" ), // 49
- KTT_ENTRY0( STOP, PERIOD, 0xbe, '.', "STOP" ), // 50
- KTT_ENTRY0( SLASH, SLASH, 0xbf, '/', "SLASH" ), // 51
- KTT_ENTRY2( RSHIFT, RSHIFT ), // 52
- KTT_ENTRY0( ASTERISK, KP_MULTIPLY, '*', '*', "ASTERIX" ), // 53
- KTT_ENTRY2( LALT, LALT ), // 54
- KTT_ENTRY0( SPACE, SPACE, ' ', ' ', "SPACE" ), // 55
- KTT_ENTRY2( CAPSLOCK, CAPSLOCK ), // 56
- KTT_ENTRY2( F1, F1 ), // 57
- KTT_ENTRY2( F2, F2 ), // 58
- KTT_ENTRY2( F3, F3 ), // 59
- KTT_ENTRY2( F4, F4 ), // 60
- KTT_ENTRY2( F5, F5 ), // 61
- KTT_ENTRY2( F6, F6 ), // 62
- KTT_ENTRY2( F7, F7 ), // 63
- KTT_ENTRY2( F8, F8 ), // 64
- KTT_ENTRY2( F9, F9 ), // 65
- KTT_ENTRY2( F10, F10 ), // 66
- KTT_ENTRY2( NUMLOCK, NUMLOCKCLEAR ), // 67
- KTT_ENTRY2( SCRLOCK, SCROLLLOCK ), // 68
- KTT_ENTRY2( 7_PAD, KP_7 ), // 69
- KTT_ENTRY2( 8_PAD, KP_8 ),
- KTT_ENTRY2( 9_PAD, KP_9 ),
- KTT_ENTRY2( MINUS_PAD, KP_MINUS ),
- KTT_ENTRY2( 4_PAD, KP_4 ),
- KTT_ENTRY2( 5_PAD, KP_5 ),
- KTT_ENTRY2( 6_PAD, KP_6 ),
- KTT_ENTRY2( PLUS_PAD, KP_PLUS ),
- KTT_ENTRY2( 1_PAD, KP_1 ),
- KTT_ENTRY2( 2_PAD, KP_2 ),
- KTT_ENTRY2( 3_PAD, KP_3 ),
- KTT_ENTRY2( 0_PAD, KP_0 ),
- KTT_ENTRY2( DEL_PAD, KP_PERIOD ),
- KTT_ENTRY2( F11, F11 ),
- KTT_ENTRY2( F12, F12 ),
- KTT_ENTRY2( F13, F13 ),
- KTT_ENTRY2( F14, F14 ),
- KTT_ENTRY2( F15, F15 ),
- KTT_ENTRY2( ENTER_PAD, KP_ENTER ),
- KTT_ENTRY2( RCONTROL, RCTRL ),
- KTT_ENTRY2( SLASH_PAD, KP_DIVIDE ),
- KTT_ENTRY2( PRTSCR, PRINTSCREEN ),
- KTT_ENTRY2( RALT, RALT ),
- KTT_ENTRY2( HOME, HOME ),
- KTT_ENTRY2( UP, UP ),
- KTT_ENTRY2( PGUP, PAGEUP ),
- KTT_ENTRY2( LEFT, LEFT ),
- KTT_ENTRY2( RIGHT, RIGHT ),
- KTT_ENTRY2( END, END ),
- KTT_ENTRY2( DOWN, DOWN ),
- KTT_ENTRY2( PGDN, PAGEDOWN ),
- KTT_ENTRY2( INSERT, INSERT ),
- { ITEM_ID_DEL, SDL_SCANCODE_DELETE, "ITEM_ID_DEL", (char *)"DELETE" },
- KTT_ENTRY2( LWIN, LGUI ),
- KTT_ENTRY2( RWIN, RGUI ),
- KTT_ENTRY2( MENU, MENU ),
- KTT_ENTRY0( TILDE, GRAVE, 0xc0, '`', "TILDE" ),
- KTT_ENTRY0( BACKSLASH2, NONUSBACKSLASH, 0xdc, '\\', "BACKSLASH2" ),
- { ITEM_ID_INVALID }
-};
-
-struct key_lookup_table
-{
- int code;
- const char *name;
-};
-
-#define KE(x) { SDL_SCANCODE_ ## x, "SDL_SCANCODE_" #x },
-#define KE8(A, B, C, D, E, F, G, H) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G) KE(H)
-#define KE7(A, B, C, D, E, F, G) KE(A) KE(B) KE(C) KE(D) KE(E) KE(F) KE(G)
-#define KE5(A, B, C, D, E) KE(A) KE(B) KE(C) KE(D) KE(E)
-#define KE3(A, B, C) KE(A) KE(B) KE(C)
-
-static key_lookup_table sdl_lookup_table[] =
-{
- KE7(UNKNOWN, BACKSPACE, TAB, CLEAR, RETURN, PAUSE, ESCAPE )
- KE(SPACE)
- KE5(COMMA, MINUS, PERIOD, SLASH, 0 )
- KE8(1, 2, 3, 4, 5, 6, 7, 8 )
- KE3(9, SEMICOLON, EQUALS)
- KE5(LEFTBRACKET,BACKSLASH, RIGHTBRACKET, A, B )
- KE8(C, D, E, F, G, H, I, J )
- KE8(K, L, M, N, O, P, Q, R )
- KE8(S, T, U, V, W, X, Y, Z )
- KE8(DELETE, KP_0, KP_1, KP_2, KP_3, KP_4, KP_5, KP_6 )
- KE8(KP_7, KP_8, KP_9, KP_PERIOD, KP_DIVIDE, KP_MULTIPLY,KP_MINUS, KP_PLUS )
- KE8(KP_ENTER, KP_EQUALS, UP, DOWN, RIGHT, LEFT, INSERT, HOME )
- KE8(END, PAGEUP, PAGEDOWN, F1, F2, F3, F4, F5 )
- KE8(F6, F7, F8, F9, F10, F11, F12, F13 )
- KE8(F14, F15, NUMLOCKCLEAR, CAPSLOCK, SCROLLLOCK, RSHIFT, LSHIFT, RCTRL )
- KE5(LCTRL, RALT, LALT, LGUI, RGUI)
- KE8(GRAVE, LEFTBRACKET,RIGHTBRACKET, SEMICOLON, APOSTROPHE, BACKSLASH, PRINTSCREEN,MENU )
- KE(UNDO)
- {-1, ""}
-};
-
-//============================================================
-// INLINE FUNCTIONS
-//============================================================
-
-static int devmap_leastfree(device_map_t *devmap)
-{
- int i;
- for (i=0;i<MAX_DEVMAP_ENTRIES;i++)
- {
- if (*devmap->map[i].name == 0)
- return i;
- }
- return -1;
-}
-
-static char *remove_spaces(running_machine &machine, const char *s)
-{
- char *r, *p;
- static const char *def_name[] = { "Unknown" };
-
- while (*s && *s == ' ')
- s++;
-
- if (strlen(s) == 0)
- {
- r = auto_alloc_array(machine, char, strlen((char *)def_name) + 1);
- strcpy(r, (char *)def_name);
- return r;
- }
-
- r = auto_alloc_array(machine, char, strlen(s) + 1);
- p = r;
- while (*s)
- {
- if (*s != ' ')
- *p++ = *s++;
- else
- {
- while (*s && *s == ' ')
- s++;
- if (*s)
- *p++ = ' ';
- }
- }
- *p = 0;
- return r;
-}
-
-static void devmap_register(device_map_t *devmap, int physical_idx, char *name)
-{
- int found = 0;
- int stick, i;
-
- for (i=0;i<MAX_DEVMAP_ENTRIES;i++)
- {
- if (strcmp(name,devmap->map[i].name) == 0 && devmap->map[i].physical < 0)
- {
- devmap->map[i].physical = physical_idx;
- found = 1;
- devmap->logical[physical_idx] = i;
- }
- }
- if (found == 0)
- {
- stick = devmap_leastfree(devmap);
- devmap->map[stick].physical = physical_idx;
- devmap->map[stick].name = name;
- devmap->logical[physical_idx] = stick;
- }
-
-}
-
-//============================================================
-// init_joymap
-//============================================================
-
-static void devmap_init(running_machine &machine, device_map_t *devmap, const char *opt, int max_devices, const char *label)
-{
- int dev;
- char defname[20];
-
- assert(max_devices <= MAX_DEVMAP_ENTRIES);
-
- for (dev = 0; dev < MAX_DEVMAP_ENTRIES; dev++)
- {
- devmap->map[dev].name = (char *)"";
- devmap->map[dev].physical = -1;
- devmap->logical[dev] = -1;
- }
- devmap->initialized = 0;
-
- for (dev = 0; dev < max_devices; dev++)
- {
- const char *dev_name;
- sprintf(defname, "%s%d", opt, dev + 1);
-
- dev_name = machine.options().value(defname);
- if (dev_name && *dev_name && strcmp(dev_name,OSDOPTVAL_AUTO))
- {
- devmap->map[dev].name = remove_spaces(machine, dev_name);
- osd_printf_verbose("%s: Logical id %d: %s\n", label, dev + 1, devmap->map[dev].name);
- devmap->initialized = 1;
- }
- }
-}
-
-static device_info *devmap_class_register(running_machine &machine, device_map_t *devmap,
- int index, device_info **devlist, input_device_class devclass)
-{
- device_info *devinfo = NULL;
- char tempname[20];
-
- if (*devmap->map[index].name == 0)
- {
- /* only map place holders if there were mappings specified is enabled */
- if (devmap->initialized)
- {
- sprintf(tempname, "NC%d", index);
- devinfo = generic_device_alloc(devlist, tempname);
- devinfo->device = machine.input().device_class(devclass).add_device(devinfo->name.c_str(), devinfo);
- }
- return NULL;
- }
- else
- {
- devinfo = generic_device_alloc(devlist, devmap->map[index].name);
- devinfo->device = machine.input().device_class(devclass).add_device(devinfo->name.c_str(), devinfo);
- }
- return devinfo;
-}
-
-
-//============================================================
-// sdlinput_register_joysticks
-//============================================================
-
-static void sdlinput_register_joysticks(running_machine &machine)
-{
- device_info *devinfo;
- int physical_stick, axis, button, hat, stick, ball;
- char tempname[512];
- SDL_Joystick *joy;
-
- devmap_init(machine, &joy_map, SDLOPTION_JOYINDEX, 8, "Joystick mapping");
-
- osd_printf_verbose("Joystick: Start initialization\n");
- for (physical_stick = 0; physical_stick < SDL_NumJoysticks(); physical_stick++)
- {
- char *joy_name;
-
- joy = SDL_JoystickOpen(physical_stick);
- joy_name = remove_spaces(machine, SDL_JoystickName(joy));
- SDL_JoystickClose(joy);
- devmap_register(&joy_map, physical_stick, joy_name);
- }
-
- for (stick = 0; stick < MAX_DEVMAP_ENTRIES; stick++)
- {
- devinfo = devmap_class_register(machine, &joy_map, stick, &joystick_list, DEVICE_CLASS_JOYSTICK);
-
- if (devinfo == NULL)
- continue;
-
- physical_stick = joy_map.map[stick].physical;
-
- joy = SDL_JoystickOpen(physical_stick);
-
- devinfo->joystick.device = joy;
-
- osd_printf_verbose("Joystick: %s\n", devinfo->name.c_str());
- osd_printf_verbose("Joystick: ... %d axes, %d buttons %d hats %d balls\n", SDL_JoystickNumAxes(joy), SDL_JoystickNumButtons(joy), SDL_JoystickNumHats(joy), SDL_JoystickNumBalls(joy));
- osd_printf_verbose("Joystick: ... Physical id %d mapped to logical id %d\n", physical_stick, stick + 1);
-
- // loop over all axes
- for (axis = 0; axis < SDL_JoystickNumAxes(joy); axis++)
- {
- input_item_id itemid;
-
- if (axis < INPUT_MAX_AXIS)
- itemid = (input_item_id) (ITEM_ID_XAXIS + axis);
- else if (axis < INPUT_MAX_AXIS + INPUT_MAX_ADD_ABSOLUTE)
- itemid = (input_item_id) (ITEM_ID_ADD_ABSOLUTE1 - INPUT_MAX_AXIS + axis);
- else
- itemid = ITEM_ID_OTHER_AXIS_ABSOLUTE;
-
- sprintf(tempname, "A%d %s", axis, devinfo->name.c_str());
- devinfo->device->add_item(tempname, itemid, generic_axis_get_state, &devinfo->joystick.axes[axis]);
- }
-
- // loop over all buttons
- for (button = 0; button < SDL_JoystickNumButtons(joy); button++)
- {
- input_item_id itemid;
-
- devinfo->joystick.buttons[button] = 0;
-
- if (button < INPUT_MAX_BUTTONS)
- itemid = (input_item_id) (ITEM_ID_BUTTON1 + button);
- else if (button < INPUT_MAX_BUTTONS + INPUT_MAX_ADD_SWITCH)
- itemid = (input_item_id) (ITEM_ID_ADD_SWITCH1 - INPUT_MAX_BUTTONS + button);
- else
- itemid = ITEM_ID_OTHER_SWITCH;
-
- sprintf(tempname, "button %d", button);
- devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.buttons[button]);
- }
-
- // loop over all hats
- for (hat = 0; hat < SDL_JoystickNumHats(joy); hat++)
- {
- input_item_id itemid;
-
- sprintf(tempname, "hat %d Up", hat);
- itemid = (input_item_id) ((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1UP + 4 * hat : ITEM_ID_OTHER_SWITCH);
- devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsU[hat]);
- sprintf(tempname, "hat %d Down", hat);
- itemid = (input_item_id) ((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1DOWN + 4 * hat : ITEM_ID_OTHER_SWITCH);
- devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsD[hat]);
- sprintf(tempname, "hat %d Left", hat);
- itemid = (input_item_id) ((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1LEFT + 4 * hat : ITEM_ID_OTHER_SWITCH);
- devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsL[hat]);
- sprintf(tempname, "hat %d Right", hat);
- itemid = (input_item_id) ((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1RIGHT + 4 * hat : ITEM_ID_OTHER_SWITCH);
- devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsR[hat]);
- }
-
- // loop over all (track)balls
- for (ball = 0; ball < SDL_JoystickNumBalls(joy); ball++)
- {
- int itemid;
-
- if (ball * 2 < INPUT_MAX_ADD_RELATIVE)
- itemid = ITEM_ID_ADD_RELATIVE1 + ball * 2;
- else
- itemid = ITEM_ID_OTHER_AXIS_RELATIVE;
-
- sprintf(tempname, "R%d %s", ball * 2, devinfo->name.c_str());
- devinfo->device->add_item(tempname, (input_item_id) itemid, generic_axis_get_state, &devinfo->joystick.balls[ball * 2]);
- sprintf(tempname, "R%d %s", ball * 2 + 1, devinfo->name.c_str());
- devinfo->device->add_item(tempname, (input_item_id) (itemid + 1), generic_axis_get_state, &devinfo->joystick.balls[ball * 2 + 1]);
- }
- }
- osd_printf_verbose("Joystick: End initialization\n");
-}
-
-//============================================================
-// sdlinput_deregister_joysticks
-//============================================================
-
-static void sdlinput_deregister_joysticks(running_machine &machine)
-{
- device_info *curdev;
-
- osd_printf_verbose("Joystick: Start deinitialization\n");
-
- for (curdev = joystick_list; curdev != NULL; curdev = curdev->next)
- {
- SDL_JoystickClose(curdev->joystick.device);
- }
-
- osd_printf_verbose("Joystick: End deinitialization\n");
-}
-
-//============================================================
-// sdlinput_register_mice
-//============================================================
-
-#if defined(SDL2_MULTIAPI) && 0
-static void sdlinput_register_mice(running_machine &machine)
-{
- int index, physical_mouse;
-
- mouse_enabled = machine.options().mouse();
-
- devmap_init(machine, &mouse_map, SDLOPTION_MOUSEINDEX, 8, "Mouse mapping");
-
- for (physical_mouse = 0; physical_mouse < SDL_GetNumMice(); physical_mouse++)
- {
- char *mouse_name = remove_spaces(machine, SDL_GetMouseName(physical_mouse));
-
- devmap_register(&mouse_map, physical_mouse, mouse_name);
- }
-
- osd_printf_verbose("Mouse: Start initialization\n");
- for (index = 0; index < MAX_DEVMAP_ENTRIES; index++)
- {
- device_info *devinfo;
- char defname[90];
- int button;
-
- devinfo = devmap_class_register(machine, &mouse_map, index, &mouse_list, DEVICE_CLASS_MOUSE);
-
- if (devinfo == NULL)
- continue;
-
- // add the axes
- sprintf(defname, "X %s", devinfo->name.c_str());
- devinfo->device->add_item(defname, ITEM_ID_XAXIS, generic_axis_get_state, &devinfo->mouse.lX);
- sprintf(defname, "Y %s", devinfo->name.c_str());
- devinfo->device->add_item(defname, ITEM_ID_YAXIS, generic_axis_get_state, &devinfo->mouse.lY);
-
- for (button = 0; button < 4; button++)
- {
- input_item_id itemid;
-
- sprintf(defname, "B%d", button + 1);
- itemid = (input_item_id) (ITEM_ID_BUTTON1+button);
-
- devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->mouse.buttons[button]);
- }
-
- if (0 && mouse_enabled)
- SDL_SetRelativeMouseMode(index, SDL_TRUE);
- osd_printf_verbose("Mouse: Registered %s\n", devinfo->name.c_str());
- }
- osd_printf_verbose("Mouse: End initialization\n");
-}
-#else
-static void sdlinput_register_mice(running_machine &machine)
-{
- device_info *devinfo;
- char defname[20];
- int button;
-
- osd_printf_verbose("Mouse: Start initialization\n");
-
- mouse_map.logical[0] = 0;
-
- // SDL 1.2 has only 1 mouse - 1.3+ will also change that, so revisit this then
- devinfo = generic_device_alloc(&mouse_list, "System mouse");
- devinfo->device = machine.input().device_class(DEVICE_CLASS_MOUSE).add_device(devinfo->name.c_str(), devinfo);
-
- mouse_enabled = machine.options().mouse();
-
- // add the axes
- devinfo->device->add_item("X", ITEM_ID_XAXIS, generic_axis_get_state, &devinfo->mouse.lX);
- devinfo->device->add_item("Y", ITEM_ID_YAXIS, generic_axis_get_state, &devinfo->mouse.lY);
-
- for (button = 0; button < 4; button++)
- {
- input_item_id itemid = (input_item_id) (ITEM_ID_BUTTON1+button);
- sprintf(defname, "B%d", button + 1);
-
- devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->mouse.buttons[button]);
- }
-
- osd_printf_verbose("Mouse: Registered %s\n", devinfo->name.c_str());
- osd_printf_verbose("Mouse: End initialization\n");
-}
-#endif
-
-#if (USE_XINPUT)
-//============================================================
-// lightgun helpers: copy-past from xinfo
-//============================================================
-
-XDeviceInfo*
-find_device_info(Display *display,
- char *name,
- Bool only_extended)
-{
- XDeviceInfo *devices;
- XDeviceInfo *found = NULL;
- int loop;
- int num_devices;
- int len = strlen(name);
- Bool is_id = True;
- XID id = (XID)-1;
-
- for(loop=0; loop<len; loop++) {
- if (!isdigit(name[loop])) {
- is_id = False;
- break;
- }
- }
-
- if (is_id) {
- id = atoi(name);
- }
-
- devices = XListInputDevices(display, &num_devices);
-
- for(loop=0; loop<num_devices; loop++) {
- if ((!only_extended || (devices[loop].use >= IsXExtensionDevice)) &&
- ((!is_id && strcmp(devices[loop].name, name) == 0) ||
- (is_id && devices[loop].id == id))) {
- if (found) {
- fprintf(stderr,
- "Warning: There are multiple devices named \"%s\".\n"
- "To ensure the correct one is selected, please use "
- "the device ID instead.\n\n", name);
- } else {
- found = &devices[loop];
- }
- }
- }
- return found;
-}
-
-//Copypasted from xinfo
-static int
-register_events(Display *dpy,
- XDeviceInfo *info,
- char *dev_name,
- Bool handle_proximity)
-{
- int number = 0; /* number of events registered */
- XEventClass event_list[7];
- int i;
- XDevice *device;
- Window root_win;
- unsigned long screen;
- XInputClassInfo *ip;
-
- screen = DefaultScreen(dpy);
- root_win = RootWindow(dpy, screen);
-
- device = XOpenDevice(dpy, info->id);
-
- if (!device) {
- fprintf(stderr, "unable to open device %s\n", dev_name);
- return 0;
- }
-
- if (device->num_classes > 0) {
- for (ip = device->classes, i=0; i<info->num_classes; ip++, i++) {
- switch (ip->input_class) {
- case KeyClass:
- DeviceKeyPress(device, key_press_type, event_list[number]); number++;
- DeviceKeyRelease(device, key_release_type, event_list[number]); number++;
- break;
-
- case ButtonClass:
- DeviceButtonPress(device, button_press_type, event_list[number]); number++;
- DeviceButtonRelease(device, button_release_type, event_list[number]); number++;
- break;
-
- case ValuatorClass:
- DeviceMotionNotify(device, motion_type, event_list[number]); number++;
- fprintf(stderr, "Motion = %i\n",motion_type);
- if (handle_proximity) {
- ProximityIn(device, proximity_in_type, event_list[number]); number++;
- ProximityOut(device, proximity_out_type, event_list[number]); number++;
- }
- break;
-
- default:
- fprintf(stderr, "unknown class\n");
- break;
- }
- }
-
- if (XSelectExtensionEvent(dpy, root_win, event_list, number)) {
- fprintf(stderr, "error selecting extended events\n");
- return 0;
- }
- }
- return number;
-}
-
-//============================================================
-// sdlinput_register_lightguns
-//============================================================
-
-static void sdlinput_register_lightguns(running_machine &machine)
-{
- int index;
- XExtensionVersion *version;
-
- lightgun_enabled = machine.options().lightgun();
- devmap_init(machine, &lightgun_map, SDLOPTION_LIGHTGUNINDEX, 8, "Lightgun mapping");
-
- XDisplay = XOpenDisplay(NULL);
-
- if (XDisplay == NULL) {
- fprintf(stderr, "Unable to connect to X server\n");
- return;
- }
-
- version = XGetExtensionVersion(XDisplay, INAME);
-
- if (!version || (version == (XExtensionVersion*) NoSuchExtension)) {
- fprintf(stderr, "xinput extension not available!\n");
- return;
- }
-
-
- for (index=0; index<8; index++) {
- XDeviceInfo *info;
- if (strlen(lightgun_map.map[index].name)!=0) {
- device_info *devinfo;
- char *name=lightgun_map.map[index].name;
- char defname[512];
- devinfo = devmap_class_register(machine, &lightgun_map, index, &lightgun_list, DEVICE_CLASS_LIGHTGUN);
- fprintf(stderr, "%i: %s\n",index, name);
- info=find_device_info(XDisplay, name, 0);
- if (!info) continue;
-
- //Grab device info and translate to stuff mame can use
- if (info->num_classes > 0) {
- XAnyClassPtr any = (XAnyClassPtr) (info->inputclassinfo);
- int i;
- for (i=0; i<info->num_classes; i++) {
- int button;
- XValuatorInfoPtr v;
- XAxisInfoPtr a;
- int j;
- XButtonInfoPtr b;
-#if defined(__cplusplus) || defined(c_plusplus)
- switch (any->c_class) {
-#else
- switch (any->class) {
-#endif
- case ButtonClass:
- b = (XButtonInfoPtr) any;
- for (button = 0; button < b->num_buttons; button++)
- {
- input_item_id itemid;
- itemid = (input_item_id) (ITEM_ID_BUTTON1 + button);
- sprintf(defname, "B%d", button + 1);
- devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->lightgun.buttons[button]);
- }
- break;
- case ValuatorClass:
- v = (XValuatorInfoPtr) any;
- a = (XAxisInfoPtr) ((char *) v + sizeof (XValuatorInfo));
- for (j=0; j<v->num_axes; j++, a++) {
- if (j==0) {
-#if (USE_XINPUT_DEBUG)
- fprintf(stderr, "For index %d: Set minx=%d, maxx=%d\n",
- index,
- a->min_value, a->max_value);
-#endif
- devinfo->lightgun.maxx=a->max_value;
- devinfo->lightgun.minx=a->min_value;
- }
- if (j==1) {
-#if (USE_XINPUT_DEBUG)
- fprintf(stderr, "For index %d: Set miny=%d, maxy=%d\n",
- index,
- a->min_value, a->max_value);
-#endif
- devinfo->lightgun.maxy=a->max_value;
- devinfo->lightgun.miny=a->min_value;
- }
- }
- break;
- }
- any = (XAnyClassPtr) ((char *) any + any->length);
- }
- }
-
-
- sprintf(defname, "X %s", devinfo->name.c_str());
- devinfo->device->add_item(defname, ITEM_ID_XAXIS, generic_axis_get_state, &devinfo->lightgun.lX);
- sprintf(defname, "Y %s", devinfo->name.c_str());
- devinfo->device->add_item(defname, ITEM_ID_YAXIS, generic_axis_get_state, &devinfo->lightgun.lY);
-
-
- devinfo->lightgun.deviceid=info->id;
- if (!info) {
- fprintf(stderr, "Can't find device %s!\n", lightgun_map.map[index].name);
- } else {
- fprintf(stderr, "Device %i: Registered %i events.\n",(int)info->id, register_events(XDisplay, info, lightgun_map.map[index].name, 0));
- }
- }
- }
- osd_printf_verbose("Lightgun: End initialization\n");
-}
-#endif
-
-//============================================================
-// lookup_sdl_code
-//============================================================
-
-static int lookup_sdl_code(const char *scode)
-{
- int i=0;
-
- while (sdl_lookup_table[i].code>=0)
- {
- if (!strcmp(scode, sdl_lookup_table[i].name))
- return sdl_lookup_table[i].code;
- i++;
- }
- return -1;
-}
-
-
-//============================================================
-// lookup_mame_code
-//============================================================
-
-static int lookup_mame_index(const char *scode)
-{
- int index, i;
-
- index=-1;
- i=0;
- while (sdl_key_trans_table[i].mame_key != ITEM_ID_INVALID)
- {
- if (!strcmp(scode, sdl_key_trans_table[i].mame_key_name))
- {
- index=i;
- break;
- }
- i++;
- }
- return index;
-}
-
-static input_item_id lookup_mame_code(const char *scode)
-{
- int index;
- index = lookup_mame_index(scode);
- if (index >= 0)
- return sdl_key_trans_table[index].mame_key;
- else
- return ITEM_ID_INVALID;
-}
-
-
-//============================================================
-// sdlinput_read_keymap
-//============================================================
-
-static kt_table * sdlinput_read_keymap(running_machine &machine)
-{
- char *keymap_filename;
- kt_table *key_trans_table;
- FILE *keymap_file;
- int line = 1;
- int index,i, sk, vk, ak;
- char buf[256];
- char mks[41];
- char sks[41];
- char kns[41];
- int sdl2section=0;
-
- if (!machine.options().bool_value(SDLOPTION_KEYMAP))
- return sdl_key_trans_table;
-
- keymap_filename = (char *)downcast<sdl_options &>(machine.options()).keymap_file();
- osd_printf_verbose("Keymap: Start reading keymap_file %s\n", keymap_filename);
-
- keymap_file = fopen(keymap_filename, "r");
- if (keymap_file == NULL)
- {
- osd_printf_warning( "Keymap: Unable to open keymap %s, using default\n", keymap_filename);
- return sdl_key_trans_table;
- }
-
- key_trans_table = auto_alloc_array(machine, kt_table, ARRAY_LENGTH(sdl_key_trans_table));
- memcpy((void *) key_trans_table, sdl_key_trans_table, sizeof(sdl_key_trans_table));
-
- while (!feof(keymap_file))
- {
- char *ret = fgets(buf, 255, keymap_file);
- if (ret && buf[0] != '\n' && buf[0] != '#')
- {
- buf[255]=0;
- i=strlen(buf);
- if (i && buf[i-1] == '\n')
- buf[i-1] = 0;
- if (strncmp(buf,"[SDL2]",6) == 0)
- {
- sdl2section = 1;
- }
- else if (((1) ^ sdl2section) == 0)
- {
- mks[0]=0;
- sks[0]=0;
- memset(kns, 0, ARRAY_LENGTH(kns));
- sscanf(buf, "%40s %40s %x %x %40c\n",
- mks, sks, &vk, &ak, kns);
-
- index=lookup_mame_index(mks);
- sk = lookup_sdl_code(sks);
-
- if ( sk >= 0 && index >=0)
- {
- key_trans_table[index].sdl_key = sk;
- // vk and ak are not really needed
- //key_trans_table[index][VIRTUAL_KEY] = vk;
- //key_trans_table[index][ASCII_KEY] = ak;
- key_trans_table[index].ui_name = auto_alloc_array(machine, char, strlen(kns)+1);
- strcpy(key_trans_table[index].ui_name, kns);
- osd_printf_verbose("Keymap: Mapped <%s> to <%s> with ui-text <%s>\n", sks, mks, kns);
- }
- else
- osd_printf_warning("Keymap: Error on line %d - %s key not found: %s\n", line, (sk<0) ? "sdl" : "mame", buf);
- }
- }
- line++;
- }
- fclose(keymap_file);
- osd_printf_verbose("Keymap: Processed %d lines\n", line);
-
- return key_trans_table;
-}
-
-
-//============================================================
-// sdlinput_register_keyboards
-//============================================================
-
-#ifdef SDL2_MULTIAPI
-static void sdlinput_register_keyboards(running_machine &machine)
-{
- int physical_keyboard;
- int index;
- kt_table *key_trans_table;
-
- key_trans_table = sdlinput_read_keymap(machine);
-
- devmap_init(machine, &keyboard_map, SDLOPTION_KEYBINDEX, 8, "Keyboard mapping");
-
- for (physical_keyboard = 0; physical_keyboard < SDL_GetNumKeyboards(); physical_keyboard++)
- {
- //char defname[90];
- //snprintf(defname, sizeof(defname)-1, "Keyboard #%d", physical_keyboard + 1);
- char *defname = remove_spaces(machine, SDL_GetKeyboardName(SDL_GetKeyboard(physical_keyboard) ));
-
- devmap_register(&keyboard_map, physical_keyboard, defname);
- }
-
- osd_printf_verbose("Keyboard: Start initialization\n");
- for (index = 0; index < MAX_DEVMAP_ENTRIES; index++)
- {
- device_info *devinfo;
- char defname[90];
- int keynum;
-
- devinfo = devmap_class_register(machine, &keyboard_map, index, &keyboard_list, DEVICE_CLASS_KEYBOARD);
-
- if (devinfo == NULL)
- continue;
-
- // populate it
- for (keynum = 0; sdl_key_trans_table[keynum].mame_key!= ITEM_ID_INVALID; keynum++)
- {
- input_item_id itemid;
-
- itemid = key_trans_table[keynum].mame_key;
-
- // generate the default / modified name
- snprintf(defname, sizeof(defname)-1, "%s", key_trans_table[keynum].ui_name);
-
- // add the item to the device
- devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->keyboard.state[OSD_SDL_INDEX(key_trans_table[keynum].sdl_key)]);
- }
-
- osd_printf_verbose("Keyboard: Registered %s\n", devinfo->name.c_str());
- }
- osd_printf_verbose("Keyboard: End initialization\n");
-}
-#else
-static void sdlinput_register_keyboards(running_machine &machine)
-{
- device_info *devinfo;
- char defname[20];
- int keynum;
- kt_table *key_trans_table;
-
- key_trans_table = sdlinput_read_keymap(machine);
-
- keyboard_map.logical[0] = 0;
-
- osd_printf_verbose("Keyboard: Start initialization\n");
-
- // SDL 1.2 only has 1 keyboard (1.3+ will have multiple, this must be revisited then)
- // add it now
- devinfo = generic_device_alloc(&keyboard_list, "System keyboard");
- devinfo->device = machine.input().device_class(DEVICE_CLASS_KEYBOARD).add_device(devinfo->name.c_str(), devinfo);
-
- // populate it
- for (keynum = 0; sdl_key_trans_table[keynum].mame_key != ITEM_ID_INVALID; keynum++)
- {
- input_item_id itemid;
-
- itemid = key_trans_table[keynum].mame_key;
-
- // generate the default / modified name
- snprintf(defname, sizeof(defname)-1, "%s", key_trans_table[keynum].ui_name);
-
- // add the item to the device
-// printf("Keynum %d => sdl key %d\n", keynum, OSD_SDL_INDEX(key_trans_table[keynum].sdl_key));
- devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->keyboard.state[OSD_SDL_INDEX(key_trans_table[keynum].sdl_key)]);
- }
-
- osd_printf_verbose("Keyboard: Registered %s\n", devinfo->name.c_str());
- osd_printf_verbose("Keyboard: End initialization\n");
-}
-#endif
-
-//============================================================
-// input_init
-//============================================================
-
-bool sdl_osd_interface::input_init()
-{
- keyboard_list = NULL;
- joystick_list = NULL;
- mouse_list = NULL;
- lightgun_list = NULL;
-
- app_has_mouse_focus = 1;
-
- // register the keyboards
- sdlinput_register_keyboards(machine());
-
- // register the mice
- sdlinput_register_mice(machine());
-
-#if (USE_XINPUT)
- // register the lightguns
- sdlinput_register_lightguns(machine());
-#endif
-
- if (machine().debug_flags & DEBUG_FLAG_OSD_ENABLED)
- {
- osd_printf_warning("Debug Build: Disabling input grab for -debug\n");
- mouse_enabled = 0;
- }
-
- // get Sixaxis special mode info
- sixaxis_mode = options().sixaxis();
-
- // register the joysticks
- sdlinput_register_joysticks(machine());
-
- // now reset all devices
- device_list_reset_devices(keyboard_list);
- device_list_reset_devices(mouse_list);
- device_list_reset_devices(joystick_list);
-#if (USE_XINPUT)
- device_list_reset_devices(lightgun_list);
-#endif
- return true;
-}
-
-
-//============================================================
-// sdlinput_pause
-//============================================================
-
-void sdl_osd_interface::input_pause()
-{
- // keep track of the paused state
- input_paused = true;
-}
-
-void sdl_osd_interface::input_resume()
-{
- // keep track of the paused state
- input_paused = false;
-}
-
-
-//============================================================
-// sdlinput_exit
-//============================================================
-
-void sdl_osd_interface::input_exit()
-{
- // deregister
-
- sdlinput_deregister_joysticks(machine());
-
- // free all devices
- device_list_free_devices(&keyboard_list);
- device_list_free_devices(&mouse_list);
- device_list_free_devices(&joystick_list);
-}
-
-
-//============================================================
-// sdlinput_get_focus_window
-//============================================================
-
-sdl_window_info *sdlinput_get_focus_window()
-{
- if (focus_window) // only be set on SDL >= 1.3
- return focus_window;
- else
- return sdl_window_list;
-}
-
-#if (USE_XINPUT)
-device_info *get_lightgun_info_for_deviceid(XID deviceid) {
- device_info *devinfo;
- int index;
- //Find lightgun according to device id
- for (index=0; ; index++) {
- devinfo = generic_device_find_index(lightgun_list, index);
- if (devinfo==NULL) break;
- if (devinfo->lightgun.deviceid==deviceid) break;
- }
- return devinfo;
-}
-
-INT32 normalize_absolute_axis(INT32 raw, INT32 rawmin, INT32 rawmax)
-{
- INT32 rv;
-
- INT32 center = ((INT64)rawmax + (INT64)rawmin) / 2;
-
- // make sure we have valid data
- if (rawmin >= rawmax)
- {
- rv = raw;
- goto out;
- }
-
- // above center
- if (raw >= center)
- {
- INT32 result = (INT64)(raw - center) * (INT64)INPUT_ABSOLUTE_MAX / (INT64)(rawmax - center);
- rv = MIN(result, INPUT_ABSOLUTE_MAX);
- goto out;
- }
-
- // below center
- else
- {
- INT32 result = -((INT64)(center - raw) * (INT64)-INPUT_ABSOLUTE_MIN / (INT64)(center - rawmin));
- rv = MAX(result, INPUT_ABSOLUTE_MIN);
- goto out;
- }
-
- out:
-
-#if (USE_XINPUT_DEBUG)
- fprintf(stderr, "raw: %d, rawmin: %d, rawmax: %d, center: %d, rv: %d, ABS_MIN: %d, ABS_MAX: %d\n",
- raw, rawmin, rawmax, center, rv, INPUT_ABSOLUTE_MIN, INPUT_ABSOLUTE_MAX);
-#endif
-
- return rv;
-}
-#endif
-
-//============================================================
-// sdlinput_poll
-//============================================================
-
-static inline sdl_window_info * window_from_id(Uint32 windowID)
-{
- sdl_window_info *w;
- SDL_Window *window = SDL_GetWindowFromID(windowID);
-
- for (w = sdl_window_list; w != NULL; w = w->m_next)
- {
- //printf("w->window_id: %d\n", w->window_id);
- if (w->sdl_window() == window)
- {
- return w;
- }
- }
- return NULL;
-}
-
-static inline void resize_all_windows(void)
-{
- sdl_window_info *w;
- osd_ticks_t now = osd_ticks();
-
- if (SDL13_COMBINE_RESIZE)
- {
- for (w = sdl_window_list; w != NULL; w = w->m_next)
- {
- if (w->m_resize_width && w->m_resize_height && ((now - w->m_last_resize) > osd_ticks_per_second() / 10))
- {
- w->resize(w->m_resize_width, w->m_resize_height);
- w->m_resize_width = 0;
- w->m_resize_height = 0;
- }
- }
- }
-}
-
-void sdlinput_process_events_buf()
-{
- SDL_Event event;
-
- if (SDLMAME_EVENTS_IN_WORKER_THREAD)
- {
- std::lock_guard<std::mutex> lock(input_lock);
- /* Make sure we get all pending events */
- SDL_PumpEvents();
- while(SDL_PollEvent(&event))
- {
- if (event_buf_count < MAX_BUF_EVENTS)
- event_buf[event_buf_count++] = event;
- else
- osd_printf_warning("Event Buffer Overflow!\n");
- }
- }
- else
- SDL_PumpEvents();
-}
-
-
-void sdlinput_poll(running_machine &machine)
-{
- device_info *devinfo;
- SDL_Event event;
- int index;
-
- // only for SDLMAME_EVENTS_IN_WORKER_THREAD
- SDL_Event loc_event_buf[MAX_BUF_EVENTS];
- int loc_event_buf_count;
- int bufp;
-
-#if (USE_XINPUT)
- XEvent xevent;
-#endif
-
- for (index=0; ;index++)
- {
- devinfo = generic_device_find_index( mouse_list, index);
- if (devinfo == NULL)
- break;
- devinfo->mouse.lX = 0;
- devinfo->mouse.lY = 0;
- }
-
-#if (USE_XINPUT)
- //Get XInput events
- while (XPending(XDisplay)!=0)
- {
- XNextEvent(XDisplay, &xevent);
- if (xevent.type==motion_type)
- {
- XDeviceMotionEvent *motion = (XDeviceMotionEvent *) &xevent;
-
-#if (USE_XINPUT_DEBUG)
- /*
- * print a lot of debug informations of the motion event(s).
- */
- fprintf(stderr,
- "XDeviceMotionEvent:\n"
- " type: %d\n"
- " serial: %lu\n"
- " send_event: %d\n"
- " display: %p\n"
- " window: --\n"
- " deviceid: %lu\n"
- " root: --\n"
- " subwindow: --\n"
- " time: --\n"
- " x: %d, y: %d\n"
- " x_root: %d, y_root: %d\n"
- " state: %u\n"
- " is_hint: %2.2X\n"
- " same_screen: %d\n"
- " device_state: %u\n"
- " axes_count: %2.2X\n"
- " first_axis: %2.2X\n"
- " axis_data[6]: {%d,%d,%d,%d,%d,%d}\n",
- motion->type,
- motion->serial,
- motion->send_event,
- motion->display,
- /* motion->window, */
- motion->deviceid,
- /* motion->root */
- /* motion->subwindow */
- /* motion->time, */
- motion->x, motion->y,
- motion->x_root, motion->y_root,
- motion->state,
- motion->is_hint,
- motion->same_screen,
- motion->device_state,
- motion->axes_count,
- motion->first_axis,
- motion->axis_data[0], motion->axis_data[1], motion->axis_data[2], motion->axis_data[3], motion->axis_data[4], motion->axis_data[5]
- );
-#endif
-
- devinfo=get_lightgun_info_for_deviceid(motion->deviceid);
-
- /*
- * We have to check with axis will start on array index 0.
- * We have also to check the number of axes that are stored in the array.
- */
- switch (motion->first_axis)
- {
- /*
- * Starting with x, check number of axis, if there is also the y axis stored.
- */
- case 0:
- if (motion->axes_count >= 1)
- {
- devinfo->lightgun.lX=normalize_absolute_axis(motion->axis_data[0], devinfo->lightgun.minx, devinfo->lightgun.maxx);
- if (motion->axes_count >= 2)
- {
- devinfo->lightgun.lY=normalize_absolute_axis(motion->axis_data[1], devinfo->lightgun.miny, devinfo->lightgun.maxy);
- }
- }
- break;
-
- /*
- * Starting with y, ...
- */
- case 1:
- if (motion->axes_count >= 1)
- {
- devinfo->lightgun.lY=normalize_absolute_axis(motion->axis_data[0], devinfo->lightgun.miny, devinfo->lightgun.maxy);
- }
- break;
- }
- }
- else if (xevent.type==button_press_type || xevent.type==button_release_type)
- {
- XDeviceButtonEvent *button = (XDeviceButtonEvent *) &xevent;
- devinfo=get_lightgun_info_for_deviceid(button->deviceid);
- devinfo->lightgun.buttons[button->button]=(xevent.type==button_press_type)?0x80:0;
- }
- }
-#endif
-
- if (SDLMAME_EVENTS_IN_WORKER_THREAD)
- {
- std::lock_guard<std::mutex> lock(input_lock);
- memcpy(loc_event_buf, event_buf, sizeof(event_buf));
- loc_event_buf_count = event_buf_count;
- event_buf_count = 0;
- bufp = 0;
- }
-
- while (TRUE)
- {
- if (SDLMAME_EVENTS_IN_WORKER_THREAD)
- {
- if (bufp >= loc_event_buf_count)
- break;
- event = loc_event_buf[bufp++];
- }
- else
- {
- if (!SDL_PollEvent(&event))
- break;
- }
- switch(event.type) {
- case SDL_KEYDOWN:
-#ifdef SDL2_MULTIAPI
- devinfo = generic_device_find_index( keyboard_list, keyboard_map.logical[event.key.which]);
- //printf("Key down %d %d %s => %d %s (scrlock keycode is %d)\n", event.key.which, event.key.keysym.scancode, devinfo->name.c_str(), OSD_SDL_INDEX_KEYSYM(&event.key.keysym), sdl_key_trans_table[event.key.keysym.scancode].mame_key_name, KEYCODE_SCRLOCK);
-#else
- devinfo = generic_device_find_index( keyboard_list, keyboard_map.logical[0]);
-#endif
- devinfo->keyboard.state[OSD_SDL_INDEX_KEYSYM(&event.key.keysym)] = 0x80;
- if (event.key.keysym.sym < 0x20)
- machine.ui_input().push_char_event(sdl_window_list->target(), event.key.keysym.sym);
- break;
- case SDL_KEYUP:
-#ifdef SDL2_MULTIAPI
- devinfo = generic_device_find_index( keyboard_list, keyboard_map.logical[event.key.which]);
- //printf("Key up: %d %d\n", OSD_SDL_INDEX_KEYSYM(&event.key.keysym), event.key.which);
-#else
- devinfo = generic_device_find_index( keyboard_list, keyboard_map.logical[0]);
-#endif
- devinfo->keyboard.state[OSD_SDL_INDEX_KEYSYM(&event.key.keysym)] = 0x00;
- break;
- case SDL_JOYAXISMOTION:
- devinfo = generic_device_find_index(joystick_list, joy_map.logical[event.jaxis.which]);
- if (devinfo)
- {
- if (sixaxis_mode)
- {
- int axis = event.jaxis.axis;
-
- if (axis <= 3)
- {
- devinfo->joystick.axes[event.jaxis.axis] = (event.jaxis.value * 2);
- }
- else
- {
- int magic = (event.jaxis.value / 2) + 16384;
-
- devinfo->joystick.axes[event.jaxis.axis] = magic;
- }
- }
- else
- {
- devinfo->joystick.axes[event.jaxis.axis] = (event.jaxis.value * 2);
- }
- }
- break;
- case SDL_JOYHATMOTION:
- devinfo = generic_device_find_index(joystick_list, joy_map.logical[event.jhat.which]);
- if (devinfo)
- {
- if (event.jhat.value & SDL_HAT_UP)
- {
- devinfo->joystick.hatsU[event.jhat.hat] = 0x80;
- }
- else
- {
- devinfo->joystick.hatsU[event.jhat.hat] = 0;
- }
- if (event.jhat.value & SDL_HAT_DOWN)
- {
- devinfo->joystick.hatsD[event.jhat.hat] = 0x80;
- }
- else
- {
- devinfo->joystick.hatsD[event.jhat.hat] = 0;
- }
- if (event.jhat.value & SDL_HAT_LEFT)
- {
- devinfo->joystick.hatsL[event.jhat.hat] = 0x80;
- }
- else
- {
- devinfo->joystick.hatsL[event.jhat.hat] = 0;
- }
- if (event.jhat.value & SDL_HAT_RIGHT)
- {
- devinfo->joystick.hatsR[event.jhat.hat] = 0x80;
- }
- else
- {
- devinfo->joystick.hatsR[event.jhat.hat] = 0;
- }
- }
- break;
- case SDL_JOYBUTTONDOWN:
- case SDL_JOYBUTTONUP:
- devinfo = generic_device_find_index(joystick_list, joy_map.logical[event.jbutton.which]);
- if (devinfo)
- {
- devinfo->joystick.buttons[event.jbutton.button] = (event.jbutton.state == SDL_PRESSED) ? 0x80 : 0;
- }
- break;
- case SDL_MOUSEBUTTONDOWN:
-#ifdef SDL2_MULTIAPI
- devinfo = generic_device_find_index(mouse_list, mouse_map.logical[event.button.which]);
-#else
- devinfo = generic_device_find_index(mouse_list, mouse_map.logical[0]);
-#endif
- devinfo->mouse.buttons[event.button.button-1] = 0x80;
- //printf("But down %d %d %d %d %s\n", event.button.which, event.button.button, event.button.x, event.button.y, devinfo->name.c_str());
- if (event.button.button == 1)
- {
- // FIXME Move static declaration
- static osd_ticks_t last_click = 0;
- static int last_x = 0;
- static int last_y = 0;
- int cx, cy;
- osd_ticks_t click = osd_ticks() * 1000 / osd_ticks_per_second();
- sdl_window_info *window = GET_FOCUS_WINDOW(&event.button);
- if (window != NULL && window->xy_to_render_target(event.button.x,event.button.y, &cx, &cy) )
- {
- machine.ui_input().push_mouse_down_event(window->target(), cx, cy);
- // FIXME Parameter ?
- if ((click-last_click < 250)
- && (cx >= last_x - 4 && cx <= last_x + 4)
- && (cy >= last_y - 4 && cy <= last_y + 4) )
- {
- last_click = 0;
- machine.ui_input().push_mouse_double_click_event(window->target(), cx, cy);
- }
- else
- {
- last_click = click;
- last_x = cx;
- last_y = cy;
- }
- }
- }
- break;
- case SDL_MOUSEWHEEL:
-#ifdef SDL2_MULTIAPI
- devinfo = generic_device_find_index(mouse_list, mouse_map.logical[event.wheel.which]);
-#else
- devinfo = generic_device_find_index(mouse_list, mouse_map.logical[0]);
-#endif
- if (devinfo)
- {
- sdl_window_info *window = GET_FOCUS_WINDOW(&event.wheel);
- if (window != NULL)
- machine.ui_input().push_mouse_wheel_event(window->target(), 0, 0, event.wheel.y, 3);
- }
- break;
- case SDL_MOUSEBUTTONUP:
-#ifdef SDL2_MULTIAPI
- devinfo = generic_device_find_index(mouse_list, mouse_map.logical[event.button.which]);
-#else
- devinfo = generic_device_find_index(mouse_list, mouse_map.logical[0]);
-#endif
- devinfo->mouse.buttons[event.button.button-1] = 0;
- //printf("But up %d %d %d %d\n", event.button.which, event.button.button, event.button.x, event.button.y);
-
- if (event.button.button == 1)
- {
- int cx, cy;
- sdl_window_info *window = GET_FOCUS_WINDOW(&event.button);
-
- if (window != NULL && window->xy_to_render_target(event.button.x,event.button.y, &cx, &cy) )
- {
- machine.ui_input().push_mouse_up_event(window->target(), cx, cy);
- }
- }
- break;
- case SDL_MOUSEMOTION:
-#ifdef SDL2_MULTIAPI
- devinfo = generic_device_find_index(mouse_list, mouse_map.logical[event.motion.which]);
-#else
- devinfo = generic_device_find_index(mouse_list, mouse_map.logical[0]);
-#endif
- // FIXME: may apply to 1.2 as well ...
- //printf("Motion %d %d %d %s\n", event.motion.which, event.motion.x, event.motion.y, devinfo->name.c_str());
- devinfo->mouse.lX += event.motion.xrel * INPUT_RELATIVE_PER_PIXEL;
- devinfo->mouse.lY += event.motion.yrel * INPUT_RELATIVE_PER_PIXEL;
- {
- int cx=-1, cy=-1;
- sdl_window_info *window = GET_FOCUS_WINDOW(&event.motion);
-
- if (window != NULL && window->xy_to_render_target(event.motion.x, event.motion.y, &cx, &cy) )
- machine.ui_input().push_mouse_move_event(window->target(), cx, cy);
- }
- break;
- case SDL_JOYBALLMOTION:
- devinfo = generic_device_find_index(joystick_list, joy_map.logical[event.jball.which]);
- //printf("Ball %d %d\n", event.jball.xrel, event.jball.yrel);
- devinfo->joystick.balls[event.jball.ball * 2] = event.jball.xrel * INPUT_RELATIVE_PER_PIXEL;
- devinfo->joystick.balls[event.jball.ball * 2 + 1] = event.jball.yrel * INPUT_RELATIVE_PER_PIXEL;
- break;
- case SDL_TEXTINPUT:
- if (*event.text.text)
- {
- sdl_window_info *window = GET_FOCUS_WINDOW(&event.text);
- //printf("Focus window is %p - wl %p\n", window, sdl_window_list);
- unicode_char result;
- if (window != NULL )
- {
- osd_uchar_from_osdchar(&result, event.text.text, 1);
- machine.ui_input().push_char_event(window->target(), result);
- }
- }
- break;
- case SDL_WINDOWEVENT:
- {
- sdl_window_info *window = GET_WINDOW(&event.window);
-
- if (window == NULL)
- break;
-
- switch (event.window.event)
- {
- case SDL_WINDOWEVENT_CLOSE:
- machine.schedule_exit();
- break;
- case SDL_WINDOWEVENT_LEAVE:
- machine.ui_input().push_mouse_leave_event(window->target());
- app_has_mouse_focus = 0;
- break;
- case SDL_WINDOWEVENT_MOVED:
- window->notify_changed();
- focus_window = window;
- break;
- case SDL_WINDOWEVENT_RESIZED:
- if (SDL13_COMBINE_RESIZE)
- {
- window->m_resize_width = event.window.data1;
- window->m_resize_height = event.window.data2;
- window->m_last_resize = osd_ticks();
- }
- else
- {
-#ifndef SDLMAME_WIN32
- /* FIXME: SDL2 sends some spurious resize events on Ubuntu
- * while in fullscreen mode. Ignore them for now.
- */
- if (!window->fullscreen())
-#endif
- {
- //printf("event data1,data2 %d x %d %ld\n", event.window.data1, event.window.data2, sizeof(SDL_Event));
- window->resize(event.window.data1, event.window.data2);
- }
- }
- focus_window = window;
- break;
- case SDL_WINDOWEVENT_ENTER:
- app_has_mouse_focus = 1;
- /* fall through */
- case SDL_WINDOWEVENT_FOCUS_GAINED:
- case SDL_WINDOWEVENT_EXPOSED:
- case SDL_WINDOWEVENT_MAXIMIZED:
- case SDL_WINDOWEVENT_RESTORED:
- focus_window = window;
- break;
- }
- break;
- }
- }
- }
- resize_all_windows();
-}
-
-
-//============================================================
-// sdlinput_release_keys
-//============================================================
-
-
-void sdlinput_release_keys()
-{
- device_info *devinfo;
- int index;
-
- for (index = 0; ;index++)
- {
- devinfo = generic_device_find_index( keyboard_list, index);
- if (devinfo == NULL)
- break;
- memset(&devinfo->keyboard.state, 0, sizeof(devinfo->keyboard.state));
- }
-}
-
-
-//============================================================
-// sdlinput_should_hide_mouse
-//============================================================
-
-int sdlinput_should_hide_mouse()
-{
- // if we are paused, no
- if (input_paused)
- return FALSE;
-
- // if neither mice nor lightguns enabled in the core, then no
- if (!mouse_enabled && !lightgun_enabled)
- return FALSE;
-
- if (!app_has_mouse_focus)
- return FALSE;
-
- // otherwise, yes
- return TRUE;
-}
-
-
-//============================================================
-// customize_input_type_list
-//============================================================
-
-void sdl_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist)
-{
- input_item_id mameid_code;
- input_code ui_code;
- input_type_entry *entry;
- const char* uimode;
- char fullmode[64];
-
- // loop over the defaults
- for (entry = typelist.first(); entry != NULL; entry = entry->next())
- {
- switch (entry->type())
- {
- // configurable UI mode switch
- case IPT_UI_TOGGLE_UI:
- uimode = options().ui_mode_key();
- if(!strcmp(uimode,"auto"))
- {
- #if defined(__APPLE__) && defined(__MACH__)
- mameid_code = lookup_mame_code("ITEM_ID_INSERT");
- #else
- mameid_code = lookup_mame_code("ITEM_ID_SCRLOCK");
- #endif
- }
- else
- {
- snprintf(fullmode, 63, "ITEM_ID_%s", uimode);
- mameid_code = lookup_mame_code(fullmode);
- }
- ui_code = input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, input_item_id(mameid_code));
- entry->defseq(SEQ_TYPE_STANDARD).set(ui_code);
- break;
- // alt-enter for fullscreen
- case IPT_OSD_1:
- entry->configure_osd("TOGGLE_FULLSCREEN", "Toggle Fullscreen");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_ENTER, KEYCODE_LALT);
- break;
-
- // disable UI_SELECT when LALT is down, this stops selecting
- // things in the menu when toggling fullscreen with LALT+ENTER
-/* case IPT_UI_SELECT:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_ENTER, input_seq::not_code, KEYCODE_LALT);
- break;*/
-
- // page down for fastforward (must be OSD_3 as per src/emu/ui.c)
- case IPT_UI_FAST_FORWARD:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_PGDN);
- break;
-
- // OSD hotkeys use LCTRL and start at F3, they start at
- // F3 because F1-F2 are hardcoded into many drivers to
- // various dipswitches, and pressing them together with
- // LCTRL will still press/toggle these dipswitches.
-
- // LCTRL-F3 to toggle fullstretch
- case IPT_OSD_2:
- entry->configure_osd("TOGGLE_FULLSTRETCH", "Toggle Uneven stretch");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F3, KEYCODE_LCONTROL);
- break;
- // add a Not lcrtl condition to the reset key
- case IPT_UI_SOFT_RESET:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F3, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LSHIFT);
- break;
-
- // LCTRL-F4 to toggle keep aspect
- case IPT_OSD_4:
- entry->configure_osd("TOGGLE_KEEP_ASPECT", "Toggle Keepaspect");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F4, KEYCODE_LCONTROL);
- break;
- // add a Not lcrtl condition to the show gfx key
- case IPT_UI_SHOW_GFX:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F4, input_seq::not_code, KEYCODE_LCONTROL);
- break;
-
- // LCTRL-F5 to toggle OpenGL filtering
- case IPT_OSD_5:
- entry->configure_osd("TOGGLE_FILTER", "Toggle Filter");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F5, KEYCODE_LCONTROL);
- break;
- // add a Not lcrtl condition to the toggle debug key
- case IPT_UI_TOGGLE_DEBUG:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F5, input_seq::not_code, KEYCODE_LCONTROL);
- break;
-
- // LCTRL-F6 to decrease OpenGL prescaling
- case IPT_OSD_6:
- entry->configure_osd("DECREASE_PRESCALE", "Decrease Prescaling");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F6, KEYCODE_LCONTROL);
- break;
- // add a Not lcrtl condition to the toggle cheat key
- case IPT_UI_TOGGLE_CHEAT:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F6, input_seq::not_code, KEYCODE_LCONTROL);
- break;
-
- // LCTRL-F7 to increase OpenGL prescaling
- case IPT_OSD_7:
- entry->configure_osd("INCREASE_PRESCALE", "Increase Prescaling");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F7, KEYCODE_LCONTROL);
- break;
- // add a Not lcrtl condition to the load state key
- case IPT_UI_LOAD_STATE:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F7, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LSHIFT);
- break;
-
- // add a Not lcrtl condition to the throttle key
- case IPT_UI_THROTTLE:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F10, input_seq::not_code, KEYCODE_LCONTROL);
- break;
-
- // disable the config menu if the ALT key is down
- // (allows ALT-TAB to switch between apps)
- case IPT_UI_CONFIGURE:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_TAB, input_seq::not_code, KEYCODE_LALT, input_seq::not_code, KEYCODE_RALT);
- break;
-
- // leave everything else alone
- default:
- break;
- }
- }
-}
-
-
-//============================================================
-// device_list_reset_devices
-//============================================================
-
-static void device_list_reset_devices(device_info *devlist_head)
-{
- device_info *curdev;
-
- for (curdev = devlist_head; curdev != NULL; curdev = curdev->next)
- generic_device_reset(curdev);
-}
-
-
-//============================================================
-// device_list_free_devices
-//============================================================
-
-static void device_list_free_devices(device_info **devlist_head)
-{
- device_info *curdev, *next;
-
- for (curdev = *devlist_head; curdev != NULL; )
- {
- next = curdev->next;
- generic_device_free(curdev);
- curdev = next;
- }
- *devlist_head = NULL;
-}
-
-
-//============================================================
-// generic_device_alloc
-//============================================================
-
-static device_info *generic_device_alloc(device_info **devlist_head_ptr, const char *name)
-{
- device_info **curdev_ptr;
- device_info *devinfo;
-
- // allocate memory for the device object
- devinfo = global_alloc_clear<device_info>();
- devinfo->head = devlist_head_ptr;
-
- // allocate a UTF8 copy of the name
- devinfo->name.assign(name);
-
- // append us to the list
- for (curdev_ptr = devinfo->head; *curdev_ptr != NULL; curdev_ptr = &(*curdev_ptr)->next) ;
- *curdev_ptr = devinfo;
-
- return devinfo;
-}
-
-
-//============================================================
-// generic_device_free
-//============================================================
-
-static void generic_device_free(device_info *devinfo)
-{
- device_info **curdev_ptr;
-
- // remove us from the list
- for (curdev_ptr = devinfo->head; *curdev_ptr != devinfo && *curdev_ptr != NULL; curdev_ptr = &(*curdev_ptr)->next) ;
- if (*curdev_ptr == devinfo)
- *curdev_ptr = devinfo->next;
-
- // and now free the info
- global_free(devinfo);
-}
-
-
-//============================================================
-// generic_device_index
-//============================================================
-
-static int generic_device_index(device_info *devlist_head, device_info *devinfo)
-{
- int index = 0;
- while (devlist_head != NULL)
- {
- if (devlist_head == devinfo)
- return index;
- index++;
- devlist_head = devlist_head->next;
- }
- return -1;
-}
-
-
-static device_info *generic_device_find_index(device_info *devlist_head, int index)
-{
- device_info *orig_head = devlist_head;
-
- while (devlist_head != NULL)
- {
- if (generic_device_index(orig_head, devlist_head) == index)
- {
- return devlist_head;
- }
-
- devlist_head = devlist_head->next;
- }
- return NULL;
-}
-
-
-//============================================================
-// generic_device_reset
-//============================================================
-
-static void generic_device_reset(device_info *devinfo)
-{
- // keyboard case
- if (devinfo->head == &keyboard_list)
- memset(&devinfo->keyboard, 0, sizeof(devinfo->keyboard));
-
- // mouse/lightgun case
- else if (devinfo->head == &mouse_list || devinfo->head == &lightgun_list)
- memset(&devinfo->mouse, 0, sizeof(devinfo->mouse));
-
- // joystick case
- else if (devinfo->head == &joystick_list)
- {
- memset(&devinfo->joystick, 0, sizeof(devinfo->joystick));
- }
-}
-
-
-//============================================================
-// generic_button_get_state
-//============================================================
-
-static INT32 generic_button_get_state(void *device_internal, void *item_internal)
-{
- INT32 *itemdata = (INT32 *) item_internal;
-
- // return the current state
- return *itemdata >> 7;
-}
-
-
-//============================================================
-// generic_axis_get_state
-//============================================================
-
-static INT32 generic_axis_get_state(void *device_internal, void *item_internal)
-{
- INT32 *axisdata = (INT32 *) item_internal;
-
- // return the current state
- return *axisdata;
-}
diff --git a/src/osd/sdl/input.h b/src/osd/sdl/input.h
deleted file mode 100644
index aa87375a663..00000000000
--- a/src/osd/sdl/input.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// input.h - SDL implementation of MAME input routines
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-//============================================================
-
-#ifndef __SDLINPUT_H__
-#define __SDLINPUT_H__
-
-#include "window.h"
-
-//============================================================
-// PROTOTYPES
-//============================================================
-
-void sdlinput_poll(running_machine &machine);
-int sdlinput_should_hide_mouse();
-
-sdl_window_info *sdlinput_get_focus_window();
-
-void sdlinput_process_events_buf();
-void sdlinput_release_keys();
-
-#endif /* __SDLINPUT_H__ */
diff --git a/src/osd/sdl/man/mame.6 b/src/osd/sdl/man/mame.6
index a2449f15df3..87e260ced5b 100644
--- a/src/osd/sdl/man/mame.6
+++ b/src/osd/sdl/man/mame.6
@@ -359,6 +359,11 @@ make things consistent, you should only record and playback with all
configuration (.cfg), NVRAM (.nv), and memory card files deleted. The
default is NULL (no playback).
.TP
+.B \-[no]exit_after_playback
+If play back is enabled (see \-playback option) the program exits when
+end of file is reached. Otherwise the machine will continue to run.
+Default is OFF (\-noexit_after_playback).
+.TP
.B \-record, \-rec \fIfilename
Specifies a file to record all input from a game session. This can be
used to record a game session for later playback. This feature does not
diff --git a/src/osd/sdl/man/mess.6 b/src/osd/sdl/man/mess.6
index 1c7142080d6..3062b2a613b 100644
--- a/src/osd/sdl/man/mess.6
+++ b/src/osd/sdl/man/mess.6
@@ -365,6 +365,11 @@ make things consistent, you should only record and playback with all
configuration (.cfg), NVRAM (.nv), and memory card files deleted. The
default is NULL (no playback).
.TP
+.B \-[no]exit_after_playback
+If play back is enabled (see \-playback option) the program exits when
+end of file is reached. Otherwise the machine will continue to run.
+Default is OFF (\-noexit_after_playback).
+.TP
.B \-record, \-rec \fIfilename
Specifies a file to record all input from a system session. This can be
used to record a system session for later playback. This feature does not
diff --git a/src/osd/sdl/osdsdl.h b/src/osd/sdl/osdsdl.h
index bca299eb49d..e61008275ec 100644
--- a/src/osd/sdl/osdsdl.h
+++ b/src/osd/sdl/osdsdl.h
@@ -113,11 +113,11 @@ public:
const char *keymap_file() const { return value(SDLOPTION_KEYMAP_FILE); }
// joystick mapping
- const char *joy_index(int index) const { return value(strformat("%s%d", SDLOPTION_JOYINDEX, index).c_str()); }
+ const char *joy_index(int index) const { return value(string_format("%s%d", SDLOPTION_JOYINDEX, index).c_str()); }
bool sixaxis() const { return bool_value(SDLOPTION_SIXAXIS); }
- const char *mouse_index(int index) const { return value(strformat("%s%d", SDLOPTION_MOUSEINDEX, index).c_str()); }
- const char *keyboard_index(int index) const { return value(strformat("%s%d", SDLOPTION_KEYBINDEX, index).c_str()); }
+ const char *mouse_index(int index) const { return value(string_format("%s%d", SDLOPTION_MOUSEINDEX, index).c_str()); }
+ const char *keyboard_index(int index) const { return value(string_format("%s%d", SDLOPTION_KEYBINDEX, index).c_str()); }
const char *video_driver() const { return value(SDLOPTION_VIDEODRIVER); }
const char *render_driver() const { return value(SDLOPTION_RENDERDRIVER); }
@@ -149,18 +149,28 @@ public:
virtual bool video_init() override;
virtual bool window_init() override;
+#ifdef USE_OLD_SDL_INPUT
virtual bool input_init() override;
virtual void input_pause() override;
virtual void input_resume() override;
+#endif
virtual bool output_init() override;
//virtual bool midi_init();
virtual void video_exit() override;
virtual void window_exit() override;
+#ifdef USE_OLD_SDL_INPUT
virtual void input_exit() override;
+#endif
virtual void output_exit() override;
//virtual void midi_exit();
+ // sdl specific
+ void poll_inputs(running_machine &machine);
+ void release_keys();
+ bool should_hide_mouse();
+ void process_events_buf();
+
sdl_options &options() { return m_options; }
private:
diff --git a/src/osd/sdl/output.cpp b/src/osd/sdl/output.cpp
index 34cf7523d8b..f2348f592e2 100644
--- a/src/osd/sdl/output.cpp
+++ b/src/osd/sdl/output.cpp
@@ -34,10 +34,8 @@
#ifdef PTR64
#define PID_FMT "%ld"
-#define PID_CAST long
#else
#define PID_FMT "%d"
-#define PID_CAST int
#endif
//============================================================
@@ -60,9 +58,9 @@ static void notifier_callback(const char *outname, INT32 value, void *param);
// osd_get_pid
//============================================================
-PID_CAST osd_getpid(void)
+intptr_t osd_getpid(void)
{
- return (PID_CAST) getpid();
+ return intptr_t(getpid());
}
//============================================================
diff --git a/src/osd/sdl/sdldir.cpp b/src/osd/sdl/sdldir.cpp
index 251210ba400..3d5071171d8 100644
--- a/src/osd/sdl/sdldir.cpp
+++ b/src/osd/sdl/sdldir.cpp
@@ -38,7 +38,7 @@
#include "osdcore.h"
#include "modules/lib/osdlib.h"
-#if defined(SDLMAME_WIN32) || defined(SDLMAME_OS2)
+#if defined(SDLMAME_WIN32)
#define PATHSEPCH '\\'
#define INVPATHSEPCH '/'
#else
@@ -46,7 +46,7 @@
#define INVPATHSEPCH '\\'
#endif
-#if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_OS2) || defined(SDLMAME_HAIKU) || defined(SDLMAME_EMSCRIPTEN)
+#if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU) || defined(SDLMAME_EMSCRIPTEN)
typedef struct dirent sdl_dirent;
typedef struct stat sdl_stat;
#define sdl_readdir readdir
diff --git a/src/osd/sdl/sdlfile.cpp b/src/osd/sdl/sdlfile.cpp
index 1f6832b03dd..aa57e3356a0 100644
--- a/src/osd/sdl/sdlfile.cpp
+++ b/src/osd/sdl/sdlfile.cpp
@@ -53,7 +53,7 @@ extern const char *sdlfile_ptty_identifier;
// CONSTANTS
//============================================================
-#if defined(SDLMAME_WIN32) || defined(SDLMAME_OS2)
+#if defined(SDLMAME_WIN32)
#define PATHSEPCH '\\'
#define INVPATHSEPCH '/'
#else
@@ -112,7 +112,7 @@ file_error osd_open(const char *path, UINT32 openflags, osd_file **file, UINT64
UINT32 access;
const char *src;
char *dst;
- #if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_OS2) || defined(SDLMAME_HAIKU)
+ #if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU)
struct stat st;
#else
struct stat64 st;
@@ -172,12 +172,12 @@ file_error osd_open(const char *path, UINT32 openflags, osd_file **file, UINT64
osd_subst_env(&tmpstr, (*file)->filename);
- #if defined(SDLMAME_WIN32) || defined(SDLMAME_OS2)
+ #if defined(SDLMAME_WIN32)
access |= O_BINARY;
#endif
// attempt to open the file
- #if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_OS2) || defined(SDLMAME_HAIKU)
+ #if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU)
(*file)->handle = open(tmpstr, access, 0666);
#else
(*file)->handle = open64(tmpstr, access, 0666);
@@ -200,7 +200,7 @@ file_error osd_open(const char *path, UINT32 openflags, osd_file **file, UINT64
// attempt to reopen the file
if (error == NO_ERROR)
{
- #if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_OS2) || defined(SDLMAME_HAIKU)
+ #if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU)
(*file)->handle = open(tmpstr, access, 0666);
#else
(*file)->handle = open64(tmpstr, access, 0666);
@@ -220,7 +220,7 @@ file_error osd_open(const char *path, UINT32 openflags, osd_file **file, UINT64
}
// get the file size
- #if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_OS2) || defined(SDLMAME_HAIKU)
+ #if defined(SDLMAME_DARWIN) || defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_HAIKU)
fstat((*file)->handle, &st);
#else
fstat64((*file)->handle, &st);
@@ -255,7 +255,7 @@ file_error osd_read(osd_file *file, void *buffer, UINT64 offset, UINT32 count, U
#if defined(SDLMAME_DARWIN) || defined(SDLMAME_BSD) || defined(SDLMAME_EMSCRIPTEN)
result = pread(file->handle, buffer, count, offset);
if (result < 0)
-#elif defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_OS2)
+#elif defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO)
lseek(file->handle, (UINT32)offset&0xffffffff, SEEK_SET);
result = read(file->handle, buffer, count);
if (result < 0)
@@ -298,7 +298,7 @@ file_error osd_write(osd_file *file, const void *buffer, UINT64 offset, UINT32 c
#if defined(SDLMAME_DARWIN) || defined(SDLMAME_BSD) || defined(SDLMAME_EMSCRIPTEN)
result = pwrite(file->handle, buffer, count, offset);
if (!result)
-#elif defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO) || defined(SDLMAME_OS2)
+#elif defined(SDLMAME_WIN32) || defined(SDLMAME_NO64BITIO)
lseek(file->handle, (UINT32)offset&0xffffffff, SEEK_SET);
result = write(file->handle, buffer, count);
if (!result)
@@ -369,6 +369,25 @@ file_error osd_truncate(osd_file *file, UINT64 offset)
}
}
+//============================================================
+// osd_truncate
+//============================================================
+
+file_error osd_fflush(osd_file *file)
+{
+ if (!file || !file->handle)
+ return FILERR_FAILURE;
+
+ switch (file->type)
+ {
+ case SDLFILE_FILE:
+ return FILERR_NONE;
+
+ default:
+ return FILERR_FAILURE;
+ }
+}
+
//============================================================
// osd_close
@@ -471,7 +490,7 @@ int osd_is_absolute_path(const char *path)
if (osd_is_path_separator(path[0]))
result = TRUE;
-#if !defined(SDLMAME_WIN32) && !defined(SDLMAME_OS2)
+#if !defined(SDLMAME_WIN32)
else if (path[0] == '.')
result = TRUE;
#else
@@ -494,13 +513,13 @@ osd_directory_entry *osd_stat(const char *path)
{
int err;
osd_directory_entry *result = NULL;
- #if defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_DARWIN) || defined(SDLMAME_OS2)
+ #if defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_DARWIN)
struct stat st;
#else
struct stat64 st;
#endif
- #if defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_DARWIN) || defined(SDLMAME_OS2)
+ #if defined(SDLMAME_NO64BITIO) || defined(SDLMAME_BSD) || defined(SDLMAME_DARWIN)
err = stat(path, &st);
#else
err = stat64(path, &st);
diff --git a/src/osd/sdl/sdlmain.cpp b/src/osd/sdl/sdlmain.cpp
index 530aa41c9d4..1a52a105fd5 100644
--- a/src/osd/sdl/sdlmain.cpp
+++ b/src/osd/sdl/sdlmain.cpp
@@ -21,7 +21,7 @@
#endif
// standard includes
-#if !defined(SDLMAME_WIN32) && !defined(SDLMAME_OS2)
+#if !defined(SDLMAME_WIN32)
#include <unistd.h>
#endif
@@ -31,12 +31,6 @@
#include <windows.h>
#endif
-
-#ifdef SDLMAME_OS2
-#define INCL_DOS
-#include <os2.h>
-#endif
-
#include "sdlinc.h"
// MAME headers
@@ -48,7 +42,6 @@
// OSD headers
#include "video.h"
-#include "input.h"
#include "osdsdl.h"
#include "modules/lib/osdlib.h"
@@ -67,7 +60,7 @@
//============================================================
#ifndef INI_PATH
-#if defined(SDLMAME_WIN32) || defined(SDLMAME_OS2)
+#if defined(SDLMAME_WIN32)
#define INI_PATH ".;ini"
#elif defined(SDLMAME_MACOSX)
#define INI_PATH "$HOME/Library/Application Support/APP_NAME;$HOME/.APP_NAME;.;ini"
@@ -173,23 +166,6 @@ const options_entry sdl_options::s_option_entries[] =
};
//============================================================
-// OS2 specific
-//============================================================
-
-#ifdef SDLMAME_OS2
-void MorphToPM()
-{
- PPIB pib;
- PTIB tib;
-
- DosGetInfoBlocks(&tib, &pib);
-
- // Change flag from VIO to PM:
- if (pib->pib_ultype==2) pib->pib_ultype = 3;
-}
-#endif
-
-//============================================================
// sdl_options
//============================================================
@@ -231,10 +207,6 @@ int main(int argc, char *argv[])
#endif
#endif
-#ifdef SDLMAME_OS2
- MorphToPM();
-#endif
-
{
sdl_options options;
sdl_osd_interface osd(options);
@@ -326,7 +298,6 @@ static void defines_verbose(void)
MACRO_VERBOSE(SDLMAME_UNIX);
MACRO_VERBOSE(SDLMAME_X11);
MACRO_VERBOSE(SDLMAME_WIN32);
- MACRO_VERBOSE(SDLMAME_OS2);
MACRO_VERBOSE(SDLMAME_MACOSX);
MACRO_VERBOSE(SDLMAME_DARWIN);
MACRO_VERBOSE(SDLMAME_LINUX);
@@ -552,3 +523,4 @@ void sdl_osd_interface::init(running_machine &machine)
SDL_EventState(SDL_TEXTINPUT, SDL_TRUE);
#endif
}
+
diff --git a/src/osd/sdl/sdlos_os2.cpp b/src/osd/sdl/sdlos_os2.cpp
deleted file mode 100644
index d559d43b553..00000000000
--- a/src/osd/sdl/sdlos_os2.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// sdlos_*.c - OS specific low level code
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-//============================================================
-
-// standard sdl header
-#include "sdlinc.h"
-#include <unistd.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-
-#define INCL_DOS
-#include <os2.h>
-
-// MAME headers
-#include "osdcore.h"
-
-//============================================================
-// osd_get_clipboard_text
-// - used in MESS
-//============================================================
-
-char *osd_get_clipboard_text(void)
-{
- char *result = NULL;
-
- return result;
-}
diff --git a/src/osd/sdl/sdlprefix.h b/src/osd/sdl/sdlprefix.h
index 1da6e9d5b8b..2acc6a9d98e 100644
--- a/src/osd/sdl/sdlprefix.h
+++ b/src/osd/sdl/sdlprefix.h
@@ -59,10 +59,6 @@
#define SDLMAME_BSD 1
#endif
-#if defined(__OS2__)
-#define SDLMAME_OS2 1
-#endif
-
#if defined(__HAIKU__)
#define SDLMAME_HAIKU 1
#define SDLMAME_NO64BITIO 1
diff --git a/src/osd/sdl/sdlptty_os2.cpp b/src/osd/sdl/sdlptty_os2.cpp
deleted file mode 100644
index 763cc4ea437..00000000000
--- a/src/osd/sdl/sdlptty_os2.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Olivier Galibert, R. Belmont
-//============================================================
-//
-// sdlptty_os2 - SDL psuedo tty access functions
-// (OS/2 has no pttys - maybe named pipes?)
-//
-// SDLMAME by Olivier Galibert and R. Belmont
-//
-//============================================================
-
-#include "sdlfile.h"
-
-const char *sdlfile_ptty_identifier = "";
-
-file_error sdl_open_ptty(const char *path, UINT32 openflags, osd_file **file, UINT64 *filesize)
-{
- return FILERR_ACCESS_DENIED;
-}
-
-file_error sdl_read_ptty(osd_file *file, void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
-{
- return FILERR_ACCESS_DENIED;
-}
-
-file_error sdl_write_ptty(osd_file *file, const void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
-{
- return FILERR_ACCESS_DENIED;
-}
-
-file_error sdl_close_ptty(osd_file *file)
-{
- return FILERR_ACCESS_DENIED;
-}
-
-file_error sdl_slave_name_ptty(osd_file *file , char *name , size_t name_len)
-{
- return FILERR_ACCESS_DENIED;
-}
diff --git a/src/osd/sdl/sdlptty_unix.cpp b/src/osd/sdl/sdlptty_unix.cpp
index bd1751c15c2..063b999b75d 100644
--- a/src/osd/sdl/sdlptty_unix.cpp
+++ b/src/osd/sdl/sdlptty_unix.cpp
@@ -8,7 +8,7 @@
//
//============================================================
-#if (!defined(SDLMAME_SOLARIS) && !(defined(SDLMAME_OS2)))
+#if (!defined(SDLMAME_SOLARIS))
#include <sys/types.h>
#include <sys/uio.h>
diff --git a/src/osd/sdl/testkeys.cpp b/src/osd/sdl/testkeys.cpp
index 850ec1ad506..0f8157aa524 100644
--- a/src/osd/sdl/testkeys.cpp
+++ b/src/osd/sdl/testkeys.cpp
@@ -111,10 +111,6 @@ int main(int argc, char *argv[])
break;
}
event.type = 0;
-
- #ifdef SDLMAME_OS2
- SDL_Delay( 10 );
- #endif
}
SDL_Quit();
return(0);
diff --git a/src/osd/sdl/video.cpp b/src/osd/sdl/video.cpp
index b0d2e383c11..3df00d90078 100644
--- a/src/osd/sdl/video.cpp
+++ b/src/osd/sdl/video.cpp
@@ -20,7 +20,6 @@
// MAMEOS headers
#include "video.h"
#include "window.h"
-#include "input.h"
#include "osdsdl.h"
#include "modules/lib/osdlib.h"
@@ -163,7 +162,8 @@ void sdl_osd_interface::update(bool skip_redraw)
}
// poll the joystick values here
- sdlinput_poll(machine());
+ downcast<sdl_osd_interface&>(machine().osd()).poll_inputs(machine());
+
check_osd_inputs(machine());
// if we're running, disable some parts of the debugger
if ((machine().debug_flags & DEBUG_FLAG_OSD_ENABLED) != 0)
@@ -286,7 +286,12 @@ finishit:
static void check_osd_inputs(running_machine &machine)
{
+#ifdef USE_OLD_SDL_INPUT
sdl_window_info *window = sdlinput_get_focus_window();
+#else
+ // BUG: TODO: Fix focus window support
+ sdl_window_info *window = sdl_window_list;
+#endif
// check for toggling fullscreen mode
if (machine.ui_input().pressed(IPT_OSD_1))
@@ -364,6 +369,8 @@ void sdl_osd_interface::extract_video_config()
{
#if (defined SDLMAME_MACOSX || defined SDLMAME_WIN32)
stemp = "opengl";
+#elif (defined __STEAMLINK__)
+ stemp = "bgfx";
#else
stemp = "soft";
#endif
@@ -378,8 +385,10 @@ void sdl_osd_interface::extract_video_config()
if (options().seconds_to_run() == 0)
osd_printf_warning("Warning: -video none doesn't make much sense without -seconds_to_run\n");
}
- else if (USE_OPENGL && (strcmp(stemp, SDLOPTVAL_OPENGL) == 0))
+#if (USE_OPENGL)
+ else if (strcmp(stemp, SDLOPTVAL_OPENGL) == 0)
video_config.mode = VIDEO_MODE_OPENGL;
+#endif
else if ((strcmp(stemp, SDLOPTVAL_SDL2ACCEL) == 0))
{
video_config.mode = VIDEO_MODE_SDL2ACCEL;
diff --git a/src/osd/sdl/watchdog.cpp b/src/osd/sdl/watchdog.cpp
index 01d98f460dc..eaa216dd0f8 100644
--- a/src/osd/sdl/watchdog.cpp
+++ b/src/osd/sdl/watchdog.cpp
@@ -45,15 +45,16 @@ watchdog::watchdog(void)
{
m_do_exit = 0;
m_event = osd_event_alloc(1, 0);
- m_thread = osd_thread_create(watchdog_thread, this);
+ m_thread = new std::thread(watchdog_thread, this);
m_timeout = 60 * osd_ticks_per_second();
}
watchdog::~watchdog(void)
{
- atomic_exchange32(&m_do_exit, 1);
+ m_do_exit = 1;
osd_event_set(m_event);
- osd_thread_wait_free(m_thread);
+ m_thread->join();
+ delete m_thread;
osd_event_free(m_event);
}
diff --git a/src/osd/sdl/watchdog.h b/src/osd/sdl/watchdog.h
index 0f15b68f469..cddba0100ef 100644
--- a/src/osd/sdl/watchdog.h
+++ b/src/osd/sdl/watchdog.h
@@ -11,6 +11,8 @@
//============================================================
#include "modules/sync/osdsync.h"
+#include <atomic>
+#include <thread>
class watchdog
{
@@ -26,8 +28,8 @@ public:
void setTimeout(int timeout);
private:
osd_event * m_event;
- osd_thread * m_thread;
- volatile INT32 m_do_exit;
+ std::thread* m_thread;
+ std::atomic<INT32> m_do_exit;
osd_ticks_t m_timeout;
};
diff --git a/src/osd/sdl/window.cpp b/src/osd/sdl/window.cpp
index eed3a9afd67..0c5bb7a51ca 100644
--- a/src/osd/sdl/window.cpp
+++ b/src/osd/sdl/window.cpp
@@ -34,7 +34,6 @@
// OSD headers
#include "window.h"
-#include "input.h"
#include "osdsdl.h"
#include "modules/render/drawbgfx.h"
#include "modules/render/drawsdl.h"
@@ -250,14 +249,14 @@ bool sdl_osd_interface::window_init()
if (renderer_sdl2::init(machine()))
{
video_config.mode = VIDEO_MODE_SOFT;
- }
+ }
}
if (video_config.mode == VIDEO_MODE_SOFT)
{
if (renderer_sdl1::init(machine()))
{
return false;
- }
+ }
}
/* We may want to set a number of the hints SDL2 provides.
@@ -579,7 +578,8 @@ OSDWORK_CALLBACK( sdl_window_info::sdlwindow_toggle_full_screen_wt )
SDL_SetWindowFullscreen(window->sdl_window(), SDL_WINDOW_FULLSCREEN); // Try to set mode
}
SDL_DestroyWindow(window->sdl_window());
- sdlinput_release_keys();
+
+ downcast<sdl_osd_interface &>(window->machine().osd()).release_keys();
window->set_renderer(osd_renderer::make_for_type(video_config.mode, reinterpret_cast<osd_window *>(window)));
@@ -651,7 +651,12 @@ void sdl_window_info::update_cursor_state()
{
//FIXME: SDL1.3: really broken: the whole SDL code
// will only work correct with relative mouse movements ...
- if (!fullscreen() && !sdlinput_should_hide_mouse())
+#ifdef USE_OLD_SDL_INPUT
+ bool should_hide_mouse = sdlinput_should_hide_mouse();
+#else
+ bool should_hide_mouse = downcast<sdl_osd_interface&>(machine().osd()).should_hide_mouse();
+#endif
+ if (!fullscreen() && !should_hide_mouse)
{
SDL_ShowCursor(SDL_ENABLE);
if (SDL_GetWindowGrab(sdl_window() ))
@@ -666,7 +671,7 @@ void sdl_window_info::update_cursor_state()
SDL_SetRelativeMouseMode(SDL_TRUE);
}
SDL_SetCursor(nullptr); // Force an update in case the underlying driver has changed visibility
- }
+ }
#endif
}
@@ -775,7 +780,11 @@ OSDWORK_CALLBACK( sdl_window_info::sdlwindow_video_window_destroy_wt )
}
SDL_DestroyWindow(window->sdl_window());
// release all keys ...
+#ifdef USE_OLD_SDL_INPUT
sdlinput_release_keys();
+#else
+ downcast<sdl_osd_interface &>(window->machine().osd()).release_keys();
+#endif
osd_free(wp);
@@ -1119,11 +1128,11 @@ OSDWORK_CALLBACK( sdl_window_info::complete_create_wt )
for (auto w = sdl_window_list; w != nullptr; w = w->m_next)
{
if (w->m_index == 0)
- {
+ {
window->m_main = w;
break;
- }
- }
+ }
+ }
}
window->monitor()->refresh();
// initialize the drawing backend
@@ -1194,7 +1203,11 @@ OSDWORK_CALLBACK( sdl_window_info::draw_video_contents_wt )
ASSERT_REDRAW_THREAD();
// Some configurations require events to be polled in the worker thread
+#ifdef USE_OLD_SDL_INPUT
sdlinput_process_events_buf();
+#else
+ downcast< sdl_osd_interface& >(window->machine().osd()).process_events_buf();
+#endif
// Check whether window has vector screens
diff --git a/src/osd/sdl/window.h b/src/osd/sdl/window.h
index f10bf6fbd92..6cb2a497ebb 100644
--- a/src/osd/sdl/window.h
+++ b/src/osd/sdl/window.h
@@ -17,18 +17,15 @@
#include "modules/osdwindow.h"
-// I don't like this, but we're going to get spurious "cast to integer of different size" warnings on
-// at least one architecture without doing it this way.
-#ifdef PTR64
-typedef UINT64 HashT;
-#else
-typedef UINT32 HashT;
-#endif
+#include <cstdint>
+
//============================================================
// TYPE DEFINITIONS
//============================================================
+typedef uintptr_t HashT;
+
#define OSDWORK_CALLBACK(name) void *name(void *param, ATTR_UNUSED int threadid)
class sdl_window_info : public osd_window
diff --git a/src/osd/windows/input.cpp b/src/osd/windows/input.cpp
deleted file mode 100644
index 6a9d534a2f6..00000000000
--- a/src/osd/windows/input.cpp
+++ /dev/null
@@ -1,2255 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-//============================================================
-//
-// input.c - Win32 implementation of MAME input routines
-//
-//============================================================
-
-// For testing purposes: force DirectInput
-#define FORCE_DIRECTINPUT 0
-
-// standard windows headers
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <winioctl.h>
-#include <tchar.h>
-
-// undef WINNT for dinput.h to prevent duplicate definition
-#undef WINNT
-#include <dinput.h>
-#undef interface
-
-// standard C headers
-#include <conio.h>
-#include <ctype.h>
-#include <stddef.h>
-
-// MAME headers
-#include "emu.h"
-#include "osdepend.h"
-#include "ui/ui.h"
-
-// MAMEOS headers
-#include "winmain.h"
-#include "window.h"
-#include "input.h"
-#include "video.h"
-#include "strconv.h"
-#include "config.h"
-
-#include "winutil.h"
-#include <mutex>
-
-//============================================================
-// PARAMETERS
-//============================================================
-
-enum
-{
- POVDIR_LEFT = 0,
- POVDIR_RIGHT,
- POVDIR_UP,
- POVDIR_DOWN
-};
-
-#define MAX_KEYS 256
-
-
-
-//============================================================
-// MACROS
-//============================================================
-
-#define STRUCTSIZE(x) ((dinput_version == 0x0300) ? sizeof(x##_DX3) : sizeof(x))
-
-#ifdef UNICODE
-#define UNICODE_SUFFIX "W"
-#else
-#define UNICODE_SUFFIX "A"
-#endif
-
-
-
-//============================================================
-// TYPEDEFS
-//============================================================
-
-// state information for a keyboard; DirectInput state must be first element
-struct keyboard_state
-{
- UINT8 state[MAX_KEYS];
- INT8 oldkey[MAX_KEYS];
- INT8 currkey[MAX_KEYS];
-};
-
-
-// state information for a mouse; DirectInput state must be first element
-struct mouse_state
-{
- DIMOUSESTATE2 state;
- LONG raw_x, raw_y, raw_z;
-};
-
-
-// state information for a joystick; DirectInput state must be first element
-struct joystick_state
-{
- DIJOYSTATE state;
- LONG rangemin[8];
- LONG rangemax[8];
-};
-
-
-// DirectInput-specific information about a device
-struct dinput_device_info
-{
- LPDIRECTINPUTDEVICE device;
- LPDIRECTINPUTDEVICE2 device2;
- DIDEVCAPS caps;
- LPCDIDATAFORMAT format;
-};
-
-
-// RawInput-specific information about a device
-struct rawinput_device_info
-{
- HANDLE device;
-};
-
-
-// generic device information
-class device_info
-{
-public:
- device_info(running_machine &machine)
- : head(NULL), next(NULL), name(NULL), poll(NULL), device(NULL), m_machine(machine) { }
-
- running_machine &machine() const { return m_machine; }
-
- // device information
- device_info ** head;
- device_info * next;
- const char * name;
- void (*poll)(device_info *info);
-
- // MAME information
- input_device * device;
-
- // device state
- union
- {
- keyboard_state keyboard;
- mouse_state mouse;
- joystick_state joystick;
- };
-
- // DirectInput/RawInput-specific state
- dinput_device_info dinput;
- rawinput_device_info rawinput;
-
-private:
- running_machine & m_machine;
-};
-
-
-// RawInput APIs
-typedef /*WINUSERAPI*/ INT (WINAPI *get_rawinput_device_list_ptr)(OUT PRAWINPUTDEVICELIST pRawInputDeviceList, IN OUT PINT puiNumDevices, IN UINT cbSize);
-typedef /*WINUSERAPI*/ INT (WINAPI *get_rawinput_data_ptr)(IN HRAWINPUT hRawInput, IN UINT uiCommand, OUT LPVOID pData, IN OUT PINT pcbSize, IN UINT cbSizeHeader);
-typedef /*WINUSERAPI*/ INT (WINAPI *get_rawinput_device_info_ptr)(IN HANDLE hDevice, IN UINT uiCommand, OUT LPVOID pData, IN OUT PINT pcbSize);
-typedef /*WINUSERAPI*/ BOOL (WINAPI *register_rawinput_devices_ptr)(IN PCRAWINPUTDEVICE pRawInputDevices, IN UINT uiNumDevices, IN UINT cbSize);
-
-
-
-//============================================================
-// LOCAL VARIABLES
-//============================================================
-
-// global states
-static bool input_enabled;
-static std::mutex input_lock;
-static bool input_paused;
-static DWORD last_poll;
-
-// DirectInput variables
-static LPDIRECTINPUT dinput;
-static int dinput_version;
-
-// RawInput variables
-static get_rawinput_device_list_ptr get_rawinput_device_list;
-static get_rawinput_data_ptr get_rawinput_data;
-static get_rawinput_device_info_ptr get_rawinput_device_info;
-static register_rawinput_devices_ptr register_rawinput_devices;
-static bool global_inputs_enabled;
-
-// keyboard states
-static bool keyboard_win32_reported_key_down;
-static device_info * keyboard_list;
-
-// mouse states
-static bool mouse_enabled;
-static device_info * mouse_list;
-
-// lightgun states
-static UINT8 lightgun_shared_axis_mode;
-static bool lightgun_enabled;
-static device_info * lightgun_list;
-
-// joystick states
-static device_info * joystick_list;
-
-// default axis names
-static const TCHAR *const default_axis_name[] =
-{
- TEXT("X"), TEXT("Y"), TEXT("Z"), TEXT("RX"),
- TEXT("RY"), TEXT("RZ"), TEXT("SL1"), TEXT("SL2")
-};
-
-
-
-//============================================================
-// PROTOTYPES
-//============================================================
-
-// device list management
-static void device_list_poll_devices(device_info *devlist_head);
-static void device_list_reset_devices(device_info *devlist_head);
-
-// generic device management
-static device_info *generic_device_alloc(running_machine &machine, device_info **devlist_head_ptr, const TCHAR *name);
-static void generic_device_free(device_info *devinfo);
-static int generic_device_index(device_info *devlist_head, device_info *devinfo);
-static void generic_device_reset(device_info *devinfo);
-static INT32 generic_button_get_state(void *device_internal, void *item_internal);
-static INT32 generic_axis_get_state(void *device_internal, void *item_internal);
-
-// Win32-specific input code
-static void win32_init(running_machine &machine);
-static void win32_exit(running_machine &machine);
-static void win32_keyboard_poll(device_info *devinfo);
-static void win32_lightgun_poll(device_info *devinfo);
-
-// DirectInput-specific code
-static void dinput_init(running_machine &machine);
-static void dinput_exit(running_machine &machine);
-static HRESULT dinput_set_dword_property(LPDIRECTINPUTDEVICE device, REFGUID property_guid, DWORD object, DWORD how, DWORD value);
-static device_info *dinput_device_create(running_machine &machine, device_info **devlist_head_ptr, LPCDIDEVICEINSTANCE instance, LPCDIDATAFORMAT format1, LPCDIDATAFORMAT format2, DWORD cooperative_level);
-static void dinput_device_release(device_info *devinfo);
-static char *dinput_device_item_name(device_info *devinfo, int offset, const TCHAR *defstring, const TCHAR *suffix);
-static HRESULT dinput_device_poll(device_info *devinfo);
-static BOOL CALLBACK dinput_keyboard_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref);
-static void dinput_keyboard_poll(device_info *devinfo);
-static BOOL CALLBACK dinput_mouse_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref);
-static void dinput_mouse_poll(device_info *devinfo);
-static BOOL CALLBACK dinput_joystick_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref);
-static void dinput_joystick_poll(device_info *devinfo);
-static INT32 dinput_joystick_pov_get_state(void *device_internal, void *item_internal);
-
-// RawInput-specific code
-static void rawinput_init(running_machine &machine);
-static void rawinput_exit(running_machine &machine);
-static device_info *rawinput_device_create(running_machine &machine, device_info **devlist_head_ptr, PRAWINPUTDEVICELIST device);
-static void rawinput_device_release(device_info *info);
-static TCHAR *rawinput_device_improve_name(TCHAR *name);
-static void rawinput_keyboard_enum(running_machine &machine, PRAWINPUTDEVICELIST device);
-static void rawinput_keyboard_update(HANDLE device, RAWKEYBOARD *data);
-static void rawinput_mouse_enum(running_machine &machine, PRAWINPUTDEVICELIST device);
-static void rawinput_mouse_update(HANDLE device, RAWMOUSE *data);
-static void rawinput_mouse_poll(device_info *devinfo);
-
-// misc utilities
-static TCHAR *reg_query_string(HKEY key, const TCHAR *path);
-static const TCHAR *default_button_name(int which);
-static const TCHAR *default_pov_name(int which);
-
-
-
-//============================================================
-// KEYBOARD/JOYSTICK LIST
-//============================================================
-
-// master keyboard translation table
-struct key_trans_entry {
- input_item_id mame_key;
- INT32 di_key;
- unsigned char virtual_key;
- char ascii_key;
- char const * mame_key_name;
-};
-#define KEY_TRANS_ENTRY(mame, di, virtual, ascii) { ITEM_ID_##mame, DIK_##di, virtual, ascii, "ITEM_ID_"#mame }
-static const key_trans_entry win_key_trans_table[] =
-{
- // MAME key dinput key virtual key ascii
- KEY_TRANS_ENTRY(ESC, ESCAPE, VK_ESCAPE, 27),
- KEY_TRANS_ENTRY(1, 1, '1', '1'),
- KEY_TRANS_ENTRY(2, 2, '2', '2'),
- KEY_TRANS_ENTRY(3, 3, '3', '3'),
- KEY_TRANS_ENTRY(4, 4, '4', '4'),
- KEY_TRANS_ENTRY(5, 5, '5', '5'),
- KEY_TRANS_ENTRY(6, 6, '6', '6'),
- KEY_TRANS_ENTRY(7, 7, '7', '7'),
- KEY_TRANS_ENTRY(8, 8, '8', '8'),
- KEY_TRANS_ENTRY(9, 9, '9', '9'),
- KEY_TRANS_ENTRY(0, 0, '0', '0'),
- KEY_TRANS_ENTRY(MINUS, MINUS, VK_OEM_MINUS, '-'),
- KEY_TRANS_ENTRY(EQUALS, EQUALS, VK_OEM_PLUS, '='),
- KEY_TRANS_ENTRY(BACKSPACE, BACK, VK_BACK, 8),
- KEY_TRANS_ENTRY(TAB, TAB, VK_TAB, 9),
- KEY_TRANS_ENTRY(Q, Q, 'Q', 'Q'),
- KEY_TRANS_ENTRY(W, W, 'W', 'W'),
- KEY_TRANS_ENTRY(E, E, 'E', 'E'),
- KEY_TRANS_ENTRY(R, R, 'R', 'R'),
- KEY_TRANS_ENTRY(T, T, 'T', 'T'),
- KEY_TRANS_ENTRY(Y, Y, 'Y', 'Y'),
- KEY_TRANS_ENTRY(U, U, 'U', 'U'),
- KEY_TRANS_ENTRY(I, I, 'I', 'I'),
- KEY_TRANS_ENTRY(O, O, 'O', 'O'),
- KEY_TRANS_ENTRY(P, P, 'P', 'P'),
- KEY_TRANS_ENTRY(OPENBRACE, LBRACKET, VK_OEM_4, '['),
- KEY_TRANS_ENTRY(CLOSEBRACE, RBRACKET, VK_OEM_6, ']'),
- KEY_TRANS_ENTRY(ENTER, RETURN, VK_RETURN, 13),
- KEY_TRANS_ENTRY(LCONTROL, LCONTROL, VK_LCONTROL, 0),
- KEY_TRANS_ENTRY(A, A, 'A', 'A'),
- KEY_TRANS_ENTRY(S, S, 'S', 'S'),
- KEY_TRANS_ENTRY(D, D, 'D', 'D'),
- KEY_TRANS_ENTRY(F, F, 'F', 'F'),
- KEY_TRANS_ENTRY(G, G, 'G', 'G'),
- KEY_TRANS_ENTRY(H, H, 'H', 'H'),
- KEY_TRANS_ENTRY(J, J, 'J', 'J'),
- KEY_TRANS_ENTRY(K, K, 'K', 'K'),
- KEY_TRANS_ENTRY(L, L, 'L', 'L'),
- KEY_TRANS_ENTRY(COLON, SEMICOLON, VK_OEM_1, ';'),
- KEY_TRANS_ENTRY(QUOTE, APOSTROPHE, VK_OEM_7, '\''),
- KEY_TRANS_ENTRY(TILDE, GRAVE, VK_OEM_3, '`'),
- KEY_TRANS_ENTRY(LSHIFT, LSHIFT, VK_LSHIFT, 0),
- KEY_TRANS_ENTRY(BACKSLASH, BACKSLASH, VK_OEM_5, '\\'),
- KEY_TRANS_ENTRY(BACKSLASH2, OEM_102, VK_OEM_102, '<'),
- KEY_TRANS_ENTRY(Z, Z, 'Z', 'Z'),
- KEY_TRANS_ENTRY(X, X, 'X', 'X'),
- KEY_TRANS_ENTRY(C, C, 'C', 'C'),
- KEY_TRANS_ENTRY(V, V, 'V', 'V'),
- KEY_TRANS_ENTRY(B, B, 'B', 'B'),
- KEY_TRANS_ENTRY(N, N, 'N', 'N'),
- KEY_TRANS_ENTRY(M, M, 'M', 'M'),
- KEY_TRANS_ENTRY(COMMA, COMMA, VK_OEM_COMMA, ','),
- KEY_TRANS_ENTRY(STOP, PERIOD, VK_OEM_PERIOD, '.'),
- KEY_TRANS_ENTRY(SLASH, SLASH, VK_OEM_2, '/'),
- KEY_TRANS_ENTRY(RSHIFT, RSHIFT, VK_RSHIFT, 0),
- KEY_TRANS_ENTRY(ASTERISK, MULTIPLY, VK_MULTIPLY, '*'),
- KEY_TRANS_ENTRY(LALT, LMENU, VK_LMENU, 0),
- KEY_TRANS_ENTRY(SPACE, SPACE, VK_SPACE, ' '),
- KEY_TRANS_ENTRY(CAPSLOCK, CAPITAL, VK_CAPITAL, 0),
- KEY_TRANS_ENTRY(F1, F1, VK_F1, 0),
- KEY_TRANS_ENTRY(F2, F2, VK_F2, 0),
- KEY_TRANS_ENTRY(F3, F3, VK_F3, 0),
- KEY_TRANS_ENTRY(F4, F4, VK_F4, 0),
- KEY_TRANS_ENTRY(F5, F5, VK_F5, 0),
- KEY_TRANS_ENTRY(F6, F6, VK_F6, 0),
- KEY_TRANS_ENTRY(F7, F7, VK_F7, 0),
- KEY_TRANS_ENTRY(F8, F8, VK_F8, 0),
- KEY_TRANS_ENTRY(F9, F9, VK_F9, 0),
- KEY_TRANS_ENTRY(F10, F10, VK_F10, 0),
- KEY_TRANS_ENTRY(NUMLOCK, NUMLOCK, VK_NUMLOCK, 0),
- KEY_TRANS_ENTRY(SCRLOCK, SCROLL, VK_SCROLL, 0),
- KEY_TRANS_ENTRY(7_PAD, NUMPAD7, VK_NUMPAD7, 0),
- KEY_TRANS_ENTRY(8_PAD, NUMPAD8, VK_NUMPAD8, 0),
- KEY_TRANS_ENTRY(9_PAD, NUMPAD9, VK_NUMPAD9, 0),
- KEY_TRANS_ENTRY(MINUS_PAD, SUBTRACT, VK_SUBTRACT, 0),
- KEY_TRANS_ENTRY(4_PAD, NUMPAD4, VK_NUMPAD4, 0),
- KEY_TRANS_ENTRY(5_PAD, NUMPAD5, VK_NUMPAD5, 0),
- KEY_TRANS_ENTRY(6_PAD, NUMPAD6, VK_NUMPAD6, 0),
- KEY_TRANS_ENTRY(PLUS_PAD, ADD, VK_ADD, 0),
- KEY_TRANS_ENTRY(1_PAD, NUMPAD1, VK_NUMPAD1, 0),
- KEY_TRANS_ENTRY(2_PAD, NUMPAD2, VK_NUMPAD2, 0),
- KEY_TRANS_ENTRY(3_PAD, NUMPAD3, VK_NUMPAD3, 0),
- KEY_TRANS_ENTRY(0_PAD, NUMPAD0, VK_NUMPAD0, 0),
- KEY_TRANS_ENTRY(DEL_PAD, DECIMAL, VK_DECIMAL, 0),
- KEY_TRANS_ENTRY(F11, F11, VK_F11, 0),
- KEY_TRANS_ENTRY(F12, F12, VK_F12, 0),
- KEY_TRANS_ENTRY(F13, F13, VK_F13, 0),
- KEY_TRANS_ENTRY(F14, F14, VK_F14, 0),
- KEY_TRANS_ENTRY(F15, F15, VK_F15, 0),
- KEY_TRANS_ENTRY(ENTER_PAD, NUMPADENTER, VK_RETURN, 0),
- KEY_TRANS_ENTRY(RCONTROL, RCONTROL, VK_RCONTROL, 0),
- KEY_TRANS_ENTRY(SLASH_PAD, DIVIDE, VK_DIVIDE, 0),
- KEY_TRANS_ENTRY(PRTSCR, SYSRQ, 0, 0),
- KEY_TRANS_ENTRY(RALT, RMENU, VK_RMENU, 0),
- KEY_TRANS_ENTRY(HOME, HOME, VK_HOME, 0),
- KEY_TRANS_ENTRY(UP, UP, VK_UP, 0),
- KEY_TRANS_ENTRY(PGUP, PRIOR, VK_PRIOR, 0),
- KEY_TRANS_ENTRY(LEFT, LEFT, VK_LEFT, 0),
- KEY_TRANS_ENTRY(RIGHT, RIGHT, VK_RIGHT, 0),
- KEY_TRANS_ENTRY(END, END, VK_END, 0),
- KEY_TRANS_ENTRY(DOWN, DOWN, VK_DOWN, 0),
- KEY_TRANS_ENTRY(PGDN, NEXT, VK_NEXT, 0),
- KEY_TRANS_ENTRY(INSERT, INSERT, VK_INSERT, 0),
- KEY_TRANS_ENTRY(DEL, DELETE, VK_DELETE, 0),
- KEY_TRANS_ENTRY(LWIN, LWIN, VK_LWIN, 0),
- KEY_TRANS_ENTRY(RWIN, RWIN, VK_RWIN, 0),
- KEY_TRANS_ENTRY(MENU, APPS, VK_APPS, 0),
- KEY_TRANS_ENTRY(PAUSE, PAUSE, VK_PAUSE, 0),
- { ITEM_ID_CANCEL, 0, VK_CANCEL, 0, "ITEM_ID_CANCEL" },
-
- // New keys introduced in Windows 2000. These have no MAME codes to
- // preserve compatibility with old config files that may refer to them
- // as e.g. FORWARD instead of e.g. KEYCODE_WEBFORWARD. They need table
- // entries anyway because otherwise they aren't recognized when
- // GetAsyncKeyState polling is used (as happens currently when MAME is
- // paused). Some codes are missing because the mapping to vkey codes
- // isn't clear, and MapVirtualKey is no help.
-
- KEY_TRANS_ENTRY(OTHER_SWITCH, MUTE, VK_VOLUME_MUTE, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, VOLUMEDOWN, VK_VOLUME_DOWN, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, VOLUMEUP, VK_VOLUME_UP, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, WEBHOME, VK_BROWSER_HOME, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, WEBSEARCH, VK_BROWSER_SEARCH, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, WEBFAVORITES, VK_BROWSER_FAVORITES, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, WEBREFRESH, VK_BROWSER_REFRESH, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, WEBSTOP, VK_BROWSER_STOP, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, WEBFORWARD, VK_BROWSER_FORWARD, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, WEBBACK, VK_BROWSER_BACK, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, MAIL, VK_LAUNCH_MAIL, 0),
- KEY_TRANS_ENTRY(OTHER_SWITCH, MEDIASELECT, VK_LAUNCH_MEDIA_SELECT, 0),
-};
-
-
-//============================================================
-// INLINE FUNCTIONS
-//============================================================
-
-static inline void poll_if_necessary(running_machine &machine)
-{
- // make sure we poll at least once every 1/4 second
- if (GetTickCount() > last_poll + 1000 / 4)
- wininput_poll(machine);
-}
-
-
-static inline input_item_id keyboard_map_scancode_to_itemid(int scancode)
-{
- int tablenum;
-
- // scan the table for a match
- for (tablenum = 0; tablenum < ARRAY_LENGTH(win_key_trans_table); tablenum++)
- if (win_key_trans_table[tablenum].di_key == scancode)
- return (input_item_id)win_key_trans_table[tablenum].mame_key;
-
- // default to an "other" switch
- return ITEM_ID_OTHER_SWITCH;
-}
-
-
-static inline INT32 normalize_absolute_axis(INT32 raw, INT32 rawmin, INT32 rawmax)
-{
- INT32 center = (rawmax + rawmin) / 2;
-
- // make sure we have valid data
- if (rawmin >= rawmax)
- return raw;
-
- // above center
- if (raw >= center)
- {
- INT32 result = (INT64)(raw - center) * (INT64)INPUT_ABSOLUTE_MAX / (INT64)(rawmax - center);
- return MIN(result, INPUT_ABSOLUTE_MAX);
- }
-
- // below center
- else
- {
- INT32 result = -((INT64)(center - raw) * (INT64)-INPUT_ABSOLUTE_MIN / (INT64)(center - rawmin));
- return MAX(result, INPUT_ABSOLUTE_MIN);
- }
-}
-
-
-
-//============================================================
-// input_init
-//============================================================
-
-bool windows_osd_interface::input_init()
-{
- // decode the options
- lightgun_shared_axis_mode = downcast<windows_options &>(machine().options()).dual_lightgun();
-
- // initialize RawInput and DirectInput (RawInput first so we can fall back)
- rawinput_init(machine());
- dinput_init(machine());
- win32_init(machine());
-
- // poll once to get the initial states
- input_enabled = true;
- wininput_poll(machine());
- return true;
-}
-
-
-//============================================================
-// wininput_pause
-//============================================================
-
-void windows_osd_interface::input_pause()
-{
- // keep track of the paused state
- input_paused = true;
-}
-
-void windows_osd_interface::input_resume()
-{
- // keep track of the paused state
- input_paused = false;
-}
-
-
-//============================================================
-// wininput_exit
-//============================================================
-
-void windows_osd_interface::input_exit()
-{
- // acquire the lock and turn off input (this ensures everyone is done)
- std::lock_guard<std::mutex> lock(input_lock);
- input_enabled = false;
-}
-
-
-//============================================================
-// wininput_poll
-//============================================================
-
-void wininput_poll(running_machine &machine)
-{
- // ignore if not enabled
- if (input_enabled)
- {
- // remember when this happened
- last_poll = GetTickCount();
-
- // periodically process events, in case they're not coming through
- // this also will make sure the mouse state is up-to-date
- winwindow_process_events_periodic(machine);
-
- // track if mouse/lightgun is enabled, for mouse hiding purposes
- mouse_enabled = machine.input().device_class(DEVICE_CLASS_MOUSE).enabled();
- lightgun_enabled = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).enabled();
- }
-
- bool polldevices = input_enabled && (global_inputs_enabled || winwindow_has_focus());
-
- // poll all of the devices
- if (polldevices)
- {
- device_list_poll_devices(keyboard_list);
- device_list_poll_devices(mouse_list);
- device_list_poll_devices(lightgun_list);
- device_list_poll_devices(joystick_list);
- }
- else
- {
- device_list_reset_devices(keyboard_list);
- device_list_reset_devices(mouse_list);
- device_list_reset_devices(lightgun_list);
- device_list_reset_devices(joystick_list);
- }
-}
-
-
-//============================================================
-// wininput_should_hide_mouse
-//============================================================
-
-bool wininput_should_hide_mouse(void)
-{
- // if we are paused or disabled, no
- if (input_paused || !input_enabled)
- return false;
-
- // if neither mice nor lightguns enabled in the core, then no
- if (!mouse_enabled && !lightgun_enabled)
- return false;
-
- // if the window has a menu, no
- if (win_window_list != NULL && win_window_list->win_has_menu())
- return false;
-
- // otherwise, yes
- return true;
-}
-
-
-//============================================================
-// wininput_handle_mouse_button
-//============================================================
-
-BOOL wininput_handle_mouse_button(int button, int down, int x, int y)
-{
- device_info *devinfo;
-
- // ignore if not enabled
- if (!input_enabled)
- return FALSE;
-
- // only need this for shared axis hack
- if (!lightgun_shared_axis_mode || button >= 4)
- return FALSE;
-
- // choose a device based on the button
- devinfo = lightgun_list;
- if (button >= 2 && devinfo != NULL)
- {
- button -= 2;
- devinfo = devinfo->next;
- }
-
- // take the lock
- std::lock_guard<std::mutex> lock(input_lock);
-
- // set the button state
- devinfo->mouse.state.rgbButtons[button] = down ? 0x80 : 0x00;
- if (down)
- {
- RECT client_rect;
- POINT mousepos;
-
- // get the position relative to the window
- GetClientRect(win_window_list->m_hwnd, &client_rect);
- mousepos.x = x;
- mousepos.y = y;
- ScreenToClient(win_window_list->m_hwnd, &mousepos);
-
- // convert to absolute coordinates
- devinfo->mouse.state.lX = normalize_absolute_axis(mousepos.x, client_rect.left, client_rect.right);
- devinfo->mouse.state.lY = normalize_absolute_axis(mousepos.y, client_rect.top, client_rect.bottom);
- }
- return TRUE;
-}
-
-
-//============================================================
-// wininput_handle_raw
-//============================================================
-
-BOOL wininput_handle_raw(HANDLE device)
-{
- BYTE small_buffer[4096];
- LPBYTE data = small_buffer;
- BOOL result = FALSE;
- int size;
-
- // ignore if not enabled
- if (!input_enabled)
- return result;
-
- // determine the size of databuffer we need
- if ((*get_rawinput_data)((HRAWINPUT)device, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)) != 0)
- return result;
-
- // if necessary, allocate a temporary buffer and fetch the data
- if (size > sizeof(small_buffer))
- {
- data = global_alloc_array_nothrow(BYTE, size);
- if (data == NULL)
- return result;
- }
-
- // fetch the data and process the appropriate message types
- result = (*get_rawinput_data)((HRAWINPUT)device, RID_INPUT, data, &size, sizeof(RAWINPUTHEADER));
- if (result != 0)
- {
- RAWINPUT *input = (RAWINPUT *)data;
-
- // handle keyboard input
- if (input->header.dwType == RIM_TYPEKEYBOARD)
- {
- std::lock_guard<std::mutex> lock(input_lock);
- rawinput_keyboard_update(input->header.hDevice, &input->data.keyboard);
- result = TRUE;
- }
-
- // handle mouse input
- else if (input->header.dwType == RIM_TYPEMOUSE)
- {
- std::lock_guard<std::mutex> lock(input_lock);
- rawinput_mouse_update(input->header.hDevice, &input->data.mouse);
- result = TRUE;
- }
- }
-
- // free the temporary buffer and return the result
- if (data != small_buffer)
- global_free_array(data);
- return result;
-}
-
-
-//============================================================
-// wininput_vkey_for_mame_code
-//============================================================
-
-int wininput_vkey_for_mame_code(input_code code)
-{
- // only works for keyboard switches
- if (code.device_class() == DEVICE_CLASS_KEYBOARD && code.item_class() == ITEM_CLASS_SWITCH)
- {
- input_item_id id = code.item_id();
- int tablenum;
-
- // scan the table for a match
- for (tablenum = 0; tablenum < ARRAY_LENGTH(win_key_trans_table); tablenum++)
- if (win_key_trans_table[tablenum].mame_key == id)
- return win_key_trans_table[tablenum].virtual_key;
- }
- return 0;
-}
-
-
-//============================================================
-// lookup_mame_code
-//============================================================
-
-static int lookup_mame_index(const char *scode)
-{
- for (int i = 0; i < ARRAY_LENGTH(win_key_trans_table); i++)
- {
- if (!strcmp(scode, win_key_trans_table[i].mame_key_name))
- return i;
- }
- return -1;
-}
-
-static input_item_id lookup_mame_code(const char *scode)
-{
- int const index = lookup_mame_index(scode);
- if (index >= 0)
- return win_key_trans_table[index].mame_key;
- else
- return ITEM_ID_INVALID;
-}
-
-
-//============================================================
-// customize_input_type_list
-//============================================================
-
-void windows_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist)
-{
- input_type_entry *entry;
- const char* uimode;
-
- // loop over the defaults
- for (entry = typelist.first(); entry != NULL; entry = entry->next())
- switch (entry->type())
- {
- // disable the config menu if the ALT key is down
- // (allows ALT-TAB to switch between windows apps)
- case IPT_UI_CONFIGURE:
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_TAB, input_seq::not_code, KEYCODE_LALT, input_seq::not_code, KEYCODE_RALT);
- break;
-
- // configurable UI mode switch
- case IPT_UI_TOGGLE_UI:
- uimode = options().ui_mode_key();
- if (strcmp(uimode,"auto"))
- {
- std::string fullmode = "ITEM_ID_";
- fullmode += uimode;
- input_item_id const mameid_code = lookup_mame_code(fullmode.c_str());
- if (ITEM_ID_INVALID != mameid_code)
- {
- input_code const ui_code = input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, input_item_id(mameid_code));
- entry->defseq(SEQ_TYPE_STANDARD).set(ui_code);
- }
- }
- break;
-
- // alt-enter for fullscreen
- case IPT_OSD_1:
- entry->configure_osd("TOGGLE_FULLSCREEN", "Toggle Fullscreen");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_ENTER, KEYCODE_LALT, input_seq::or_code, KEYCODE_ENTER, KEYCODE_RALT);
- break;
-
- // lalt-F12 for fullscreen snap (HLSL)
- case IPT_OSD_2:
- entry->configure_osd("RENDER_SNAP", "Take Rendered Snapshot");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, KEYCODE_LALT, input_seq::not_code, KEYCODE_LSHIFT);
- break;
- // add a NOT-lalt to our default F12
- case IPT_UI_SNAPSHOT: // emu/input.c: input_seq(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT)
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT, input_seq::not_code, KEYCODE_LALT);
- break;
-
- // lshift-lalt-F12 for fullscreen video (HLSL)
- case IPT_OSD_3:
- entry->configure_osd("RENDER_AVI", "Record Rendered Video");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, KEYCODE_LSHIFT, KEYCODE_LALT);
- break;
- // add a NOT-lalt to our default shift-F12
- case IPT_UI_RECORD_MOVIE: // emu/input.c: input_seq(KEYCODE_F12, KEYCODE_LSHIFT)
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, KEYCODE_LSHIFT, input_seq::not_code, KEYCODE_LALT);
- break;
-
- // add a NOT-lalt to write timecode file
- case IPT_UI_TIMECODE: // emu/input.c: input_seq(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT)
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT, input_seq::not_code, KEYCODE_LALT);
- break;
-
- // lctrl-lalt-F5 to toggle post-processing
- case IPT_OSD_4:
- entry->configure_osd("POST_PROCESS", "Toggle Post-Processing");
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F5, KEYCODE_LALT, KEYCODE_LCONTROL);
- break;
- // add a NOT-lctrl-lalt to our default F5
- case IPT_UI_TOGGLE_DEBUG: // emu/input.c: input_seq(KEYCODE_F5)
- entry->defseq(SEQ_TYPE_STANDARD).set(KEYCODE_F5, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LALT);
- break;
-
- // leave everything else alone
- default:
- break;
- }
-}
-
-
-//============================================================
-// device_list_poll_devices
-//============================================================
-
-static void device_list_poll_devices(device_info *devlist_head)
-{
- device_info *curdev;
-
- for (curdev = devlist_head; curdev != NULL; curdev = curdev->next)
- if (curdev->poll != NULL)
- (*curdev->poll)(curdev);
-}
-
-
-//============================================================
-// device_list_reset_devices
-//============================================================
-
-static void device_list_reset_devices(device_info *devlist_head)
-{
- device_info *curdev;
-
- for (curdev = devlist_head; curdev != NULL; curdev = curdev->next)
- generic_device_reset(curdev);
-}
-
-
-//============================================================
-// generic_device_alloc
-//============================================================
-
-static device_info *generic_device_alloc(running_machine &machine, device_info **devlist_head_ptr, const TCHAR *name)
-{
- device_info **curdev_ptr;
- device_info *devinfo;
-
- // allocate memory for the device object
- devinfo = global_alloc_clear<device_info>(machine);
- devinfo->head = devlist_head_ptr;
-
- // allocate a UTF8 copy of the name
- devinfo->name = utf8_from_tstring(name);
- if (devinfo->name == NULL)
- goto error;
-
- // append us to the list
- for (curdev_ptr = devinfo->head; *curdev_ptr != NULL; curdev_ptr = &(*curdev_ptr)->next) ;
- *curdev_ptr = devinfo;
-
- return devinfo;
-
-error:
- global_free(devinfo);
- return NULL;
-}
-
-
-//============================================================
-// generic_device_free
-//============================================================
-
-static void generic_device_free(device_info *devinfo)
-{
- device_info **curdev_ptr;
-
- // remove us from the list
- for (curdev_ptr = devinfo->head; *curdev_ptr != devinfo && *curdev_ptr != NULL; curdev_ptr = &(*curdev_ptr)->next) ;
- if (*curdev_ptr == devinfo)
- *curdev_ptr = devinfo->next;
-
- // free the copy of the name if present
- if (devinfo->name != NULL)
- osd_free((void *)devinfo->name);
- devinfo->name = NULL;
-
- // and now free the info
- global_free(devinfo);
-}
-
-
-//============================================================
-// generic_device_index
-//============================================================
-
-static int generic_device_index(device_info *devlist_head, device_info *devinfo)
-{
- int index = 0;
- while (devlist_head != NULL)
- {
- if (devlist_head == devinfo)
- return index;
- index++;
- devlist_head = devlist_head->next;
- }
- return -1;
-}
-
-
-//============================================================
-// generic_device_reset
-//============================================================
-
-static void generic_device_reset(device_info *devinfo)
-{
- // keyboard case
- if (devinfo->head == &keyboard_list)
- memset(devinfo->keyboard.state, 0, sizeof(devinfo->keyboard.state));
-
- // mouse/lightgun case
- else if (devinfo->head == &mouse_list || devinfo->head == &lightgun_list)
- memset(&devinfo->mouse.state, 0, sizeof(devinfo->mouse.state));
-
- // joystick case
- else if (devinfo->head == &joystick_list)
- {
- int povnum;
-
- memset(&devinfo->joystick.state, 0, sizeof(devinfo->joystick.state));
- for (povnum = 0; povnum < ARRAY_LENGTH(devinfo->joystick.state.rgdwPOV); povnum++)
- devinfo->joystick.state.rgdwPOV[povnum] = 0xffff;
- }
-}
-
-
-//============================================================
-// generic_button_get_state
-//============================================================
-
-static INT32 generic_button_get_state(void *device_internal, void *item_internal)
-{
- device_info *devinfo = (device_info *)device_internal;
- BYTE *itemdata = (BYTE *)item_internal;
-
- // return the current state
- poll_if_necessary(devinfo->machine());
- return *itemdata >> 7;
-}
-
-
-//============================================================
-// generic_axis_get_state
-//============================================================
-
-static INT32 generic_axis_get_state(void *device_internal, void *item_internal)
-{
- device_info *devinfo = (device_info *)device_internal;
- LONG *axisdata = (LONG *)item_internal;
-
- // return the current state
- poll_if_necessary(devinfo->machine());
- return *axisdata;
-}
-
-
-//============================================================
-// win32_init
-//============================================================
-
-static void win32_init(running_machine &machine)
-{
- int gunnum;
-
- // we don't need any initialization unless we are using shared axis mode for lightguns
- if (!lightgun_shared_axis_mode)
- return;
-
- // we need an exit callback
- machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(win32_exit), &machine));
-
- // allocate two lightgun devices
- for (gunnum = 0; gunnum < 2; gunnum++)
- {
- static const TCHAR *const gun_names[] = { TEXT("Shared Axis Gun 1"), TEXT("Shared Axis Gun 2") };
- device_info *devinfo;
- int axisnum, butnum;
-
- // allocate a device
- devinfo = generic_device_alloc(machine, &lightgun_list, gun_names[gunnum]);
- if (devinfo == NULL)
- break;
-
- // add the device
- devinfo->device = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).add_device(devinfo->name, devinfo);
-
- // populate the axes
- for (axisnum = 0; axisnum < 2; axisnum++)
- {
- char *name = utf8_from_tstring(default_axis_name[axisnum]);
- devinfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.state.lX + axisnum);
- osd_free(name);
- }
-
- // populate the buttons
- for (butnum = 0; butnum < 2; butnum++)
- {
- char *name = utf8_from_tstring(default_button_name(butnum));
- devinfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.state.rgbButtons[butnum]);
- osd_free(name);
- }
- }
-}
-
-
-//============================================================
-// win32_exit
-//============================================================
-
-static void win32_exit(running_machine &machine)
-{
- // skip if we're in shared axis mode
- if (!lightgun_shared_axis_mode)
- return;
-
- // delete the lightgun devices
- while (lightgun_list != NULL)
- generic_device_free(lightgun_list);
-}
-
-
-//============================================================
-// win32_keyboard_poll
-//============================================================
-
-static void win32_keyboard_poll(device_info *devinfo)
-{
- int keynum;
-
- // clear the flag that says we detected a key down via win32
- keyboard_win32_reported_key_down = false;
-
- // reset the keyboard state and then repopulate
- memset(devinfo->keyboard.state, 0, sizeof(devinfo->keyboard.state));
-
- // iterate over keys
- for (keynum = 0; keynum < ARRAY_LENGTH(win_key_trans_table); keynum++)
- {
- int vk = win_key_trans_table[keynum].virtual_key;
- if (vk != 0 && (GetAsyncKeyState(vk) & 0x8000) != 0)
- {
- int dik = win_key_trans_table[keynum].di_key;
-
- // conver the VK code to a scancode (DIK code)
- if (dik != 0)
- devinfo->keyboard.state[dik] = 0x80;
-
- // set this flag so that we continue to use win32 until all keys are up
- keyboard_win32_reported_key_down = true;
- }
- }
-}
-
-
-//============================================================
-// win32_lightgun_poll
-//============================================================
-
-static void win32_lightgun_poll(device_info *devinfo)
-{
- INT32 xpos = 0, ypos = 0;
- POINT mousepos;
-
- // if we are using the shared axis hack, the data is updated via Windows messages only
- if (lightgun_shared_axis_mode)
- return;
-
- // get the cursor position and transform into final results
- GetCursorPos(&mousepos);
- if (win_window_list != NULL)
- {
- RECT client_rect;
-
- // get the position relative to the window
- GetClientRect(win_window_list->m_hwnd, &client_rect);
- ScreenToClient(win_window_list->m_hwnd, &mousepos);
-
- // convert to absolute coordinates
- xpos = normalize_absolute_axis(mousepos.x, client_rect.left, client_rect.right);
- ypos = normalize_absolute_axis(mousepos.y, client_rect.top, client_rect.bottom);
- }
-
- // update the X/Y positions
- devinfo->mouse.state.lX = xpos;
- devinfo->mouse.state.lY = ypos;
-}
-
-
-//============================================================
-// dinput_init
-//============================================================
-
-static void dinput_init(running_machine &machine)
-{
- HRESULT result;
-#if DIRECTINPUT_VERSION >= 0x800
- int didevtype_keyboard = DI8DEVCLASS_KEYBOARD;
- int didevtype_mouse = DI8DEVCLASS_POINTER;
- int didevtype_joystick = DI8DEVCLASS_GAMECTRL;
-
- dinput_version = DIRECTINPUT_VERSION;
- result = DirectInput8Create(GetModuleHandleUni(), dinput_version, IID_IDirectInput8, (void **)&dinput, NULL);
- if (result != DI_OK)
- {
- dinput_version = 0;
- return;
- }
-#else
- int didevtype_keyboard = DIDEVTYPE_KEYBOARD;
- int didevtype_mouse = DIDEVTYPE_MOUSE;
- int didevtype_joystick = DIDEVTYPE_JOYSTICK;
-
- // first attempt to initialize DirectInput at the current version
- dinput_version = DIRECTINPUT_VERSION;
- result = DirectInputCreate(GetModuleHandleUni(), dinput_version, &dinput, NULL);
- if (result != DI_OK)
- {
- // if that fails, try version 5
- dinput_version = 0x0500;
- result = DirectInputCreate(GetModuleHandleUni(), dinput_version, &dinput, NULL);
- if (result != DI_OK)
- {
- // if that fails, try version 3
- dinput_version = 0x0300;
- result = DirectInputCreate(GetModuleHandleUni(), dinput_version, &dinput, NULL);
- if (result != DI_OK)
- {
- dinput_version = 0;
- return;
- }
- }
- }
-#endif
-
- osd_printf_verbose("DirectInput: Using DirectInput %d\n", dinput_version >> 8);
-
- // we need an exit callback
- machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(dinput_exit), &machine));
-
- // initialize keyboard devices, but only if we don't have any yet
- if (keyboard_list == NULL)
- {
- // enumerate the ones we have
- result = IDirectInput_EnumDevices(dinput, didevtype_keyboard, dinput_keyboard_enum, &machine, DIEDFL_ATTACHEDONLY);
- if (result != DI_OK)
- fatalerror("DirectInput: Unable to enumerate keyboards (result=%08X)\n", (UINT32)result);
- }
-
- // initialize mouse & lightgun devices, but only if we don't have any yet
- if (mouse_list == NULL)
- {
- // enumerate the ones we have
- result = IDirectInput_EnumDevices(dinput, didevtype_mouse, dinput_mouse_enum, &machine, DIEDFL_ATTACHEDONLY);
- if (result != DI_OK)
- fatalerror("DirectInput: Unable to enumerate mice (result=%08X)\n", (UINT32)result);
- }
-
- // initialize joystick devices
- result = IDirectInput_EnumDevices(dinput, didevtype_joystick, dinput_joystick_enum, &machine, DIEDFL_ATTACHEDONLY);
- if (result != DI_OK)
- fatalerror("DirectInput: Unable to enumerate joysticks (result=%08X)\n", (UINT32)result);
-}
-
-
-//============================================================
-// dinput_exit
-//============================================================
-
-static void dinput_exit(running_machine &machine)
-{
- // release all our devices
- while (joystick_list != NULL && joystick_list->dinput.device != NULL)
- dinput_device_release(joystick_list);
- while (lightgun_list != NULL)
- generic_device_free(lightgun_list);
- while (mouse_list != NULL && mouse_list->dinput.device != NULL)
- dinput_device_release(mouse_list);
- while (keyboard_list != NULL && keyboard_list->dinput.device != NULL)
- dinput_device_release(keyboard_list);
-
- // release DirectInput
- if (dinput != NULL)
- IDirectInput_Release(dinput);
- dinput = NULL;
-}
-
-
-//============================================================
-// dinput_set_dword_property
-//============================================================
-
-static HRESULT dinput_set_dword_property(LPDIRECTINPUTDEVICE device, REFGUID property_guid, DWORD object, DWORD how, DWORD value)
-{
- DIPROPDWORD dipdw;
-
- dipdw.diph.dwSize = sizeof(dipdw);
- dipdw.diph.dwHeaderSize = sizeof(dipdw.diph);
- dipdw.diph.dwObj = object;
- dipdw.diph.dwHow = how;
- dipdw.dwData = value;
-
- return IDirectInputDevice_SetProperty(device, property_guid, &dipdw.diph);
-}
-
-
-//============================================================
-// dinput_device_create
-//============================================================
-
-static device_info *dinput_device_create(running_machine &machine, device_info **devlist_head_ptr, LPCDIDEVICEINSTANCE instance, LPCDIDATAFORMAT format1, LPCDIDATAFORMAT format2, DWORD cooperative_level)
-{
- device_info *devinfo;
- HRESULT result;
-
- // allocate memory for the device object
- devinfo = generic_device_alloc(machine, devlist_head_ptr, instance->tszInstanceName);
-
- // attempt to create a device
- result = IDirectInput_CreateDevice(dinput, WRAP_REFIID(instance->guidInstance), &devinfo->dinput.device, NULL);
- if (result != DI_OK)
- goto error;
-
- // try to get a version 2 device for it
- result = IDirectInputDevice_QueryInterface(devinfo->dinput.device, WRAP_REFIID(IID_IDirectInputDevice2), (void **)&devinfo->dinput.device2);
- if (result != DI_OK)
- devinfo->dinput.device2 = NULL;
-
- // get the caps
- devinfo->dinput.caps.dwSize = STRUCTSIZE(DIDEVCAPS);
- result = IDirectInputDevice_GetCapabilities(devinfo->dinput.device, &devinfo->dinput.caps);
- if (result != DI_OK)
- goto error;
-
- // attempt to set the data format
- devinfo->dinput.format = format1;
- result = IDirectInputDevice_SetDataFormat(devinfo->dinput.device, devinfo->dinput.format);
- if (result != DI_OK)
- {
- // use the secondary format if available
- if (format2 != NULL)
- {
- devinfo->dinput.format = format2;
- result = IDirectInputDevice_SetDataFormat(devinfo->dinput.device, devinfo->dinput.format);
- }
- if (result != DI_OK)
- goto error;
- }
-
- // set the cooperative level
- result = IDirectInputDevice_SetCooperativeLevel(devinfo->dinput.device, win_window_list->m_hwnd, cooperative_level);
- if (result != DI_OK)
- goto error;
- return devinfo;
-
-error:
- dinput_device_release(devinfo);
- return NULL;
-}
-
-
-//============================================================
-// dinput_device_release
-//============================================================
-
-static void dinput_device_release(device_info *devinfo)
-{
- // release the version 2 device if present
- if (devinfo->dinput.device2 != NULL)
- IDirectInputDevice_Release(devinfo->dinput.device2);
- devinfo->dinput.device2 = NULL;
-
- // release the regular device if present
- if (devinfo->dinput.device != NULL)
- IDirectInputDevice_Release(devinfo->dinput.device);
- devinfo->dinput.device = NULL;
-
- // free the item list
- generic_device_free(devinfo);
-}
-
-
-//============================================================
-// dinput_device_item_name
-//============================================================
-
-static char *dinput_device_item_name(device_info *devinfo, int offset, const TCHAR *defstring, const TCHAR *suffix)
-{
- DIDEVICEOBJECTINSTANCE instance = { 0 };
- const TCHAR *namestring = instance.tszName;
- TCHAR *combined;
- HRESULT result;
- char *utf8;
-
- // query the key name
- instance.dwSize = STRUCTSIZE(DIDEVICEOBJECTINSTANCE);
- result = IDirectInputDevice_GetObjectInfo(devinfo->dinput.device, &instance, offset, DIPH_BYOFFSET);
-
- // if we got an error and have no default string, just return NULL
- if (result != DI_OK)
- {
- if (defstring == NULL)
- return NULL;
- namestring = defstring;
- }
-
- // if no suffix, return as-is
- if (suffix == NULL)
- return utf8_from_tstring(namestring);
-
- // otherwise, allocate space to add the suffix
- combined = global_alloc_array(TCHAR, _tcslen(namestring) + 1 + _tcslen(suffix) + 1);
- _tcscpy(combined, namestring);
- _tcscat(combined, TEXT(" "));
- _tcscat(combined, suffix);
-
- // convert to UTF8, free the temporary string, and return
- utf8 = utf8_from_tstring(combined);
- global_free_array(combined);
- return utf8;
-}
-
-
-//============================================================
-// dinput_device_poll
-//============================================================
-
-static HRESULT dinput_device_poll(device_info *devinfo)
-{
- HRESULT result;
-
- // first poll the device, then get the state
- if (devinfo->dinput.device2 != NULL)
- IDirectInputDevice2_Poll(devinfo->dinput.device2);
- result = IDirectInputDevice_GetDeviceState(devinfo->dinput.device, devinfo->dinput.format->dwDataSize, &devinfo->joystick.state);
-
- // handle lost inputs here
- if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED)
- {
- result = IDirectInputDevice_Acquire(devinfo->dinput.device);
- if (result == DI_OK)
- result = IDirectInputDevice_GetDeviceState(devinfo->dinput.device, devinfo->dinput.format->dwDataSize, &devinfo->joystick.state);
- }
-
- return result;
-}
-
-
-//============================================================
-// dinput_keyboard_enum
-//============================================================
-
-static BOOL CALLBACK dinput_keyboard_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref)
-{
- running_machine &machine = *(running_machine *)ref;
- device_info *devinfo;
- int keynum;
-
- // allocate and link in a new device
- devinfo = dinput_device_create(machine, &keyboard_list, instance, &c_dfDIKeyboard, NULL, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
- if (devinfo == NULL)
- goto exit;
-
- // add the device
- devinfo->device = machine.input().device_class(DEVICE_CLASS_KEYBOARD).add_device(devinfo->name, devinfo);
- devinfo->poll = dinput_keyboard_poll;
-
- // populate it
- for (keynum = 0; keynum < MAX_KEYS; keynum++)
- {
- input_item_id itemid = keyboard_map_scancode_to_itemid(keynum);
- TCHAR defname[20];
- char *name;
-
- // generate/fetch the name
- _sntprintf(defname, ARRAY_LENGTH(defname), TEXT("Scan%03d"), keynum);
- name = dinput_device_item_name(devinfo, keynum, defname, NULL);
-
- // add the item to the device
- devinfo->device->add_item(name, itemid, generic_button_get_state, &devinfo->keyboard.state[keynum]);
- osd_free(name);
- }
-
-exit:
- return DIENUM_CONTINUE;
-}
-
-
-//============================================================
-// dinput_keyboard_poll
-//============================================================
-
-static void dinput_keyboard_poll(device_info *devinfo)
-{
- HRESULT result = dinput_device_poll(devinfo);
-
- // for the first device, if we errored, or if we previously reported win32 keys,
- // then ignore the dinput state and poll using win32
- if (devinfo == keyboard_list && (result != DI_OK || keyboard_win32_reported_key_down))
- win32_keyboard_poll(devinfo);
-}
-
-
-//============================================================
-// dinput_mouse_enum
-//============================================================
-
-static BOOL CALLBACK dinput_mouse_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref)
-{
- device_info *devinfo, *guninfo = NULL;
- running_machine &machine = *(running_machine *)ref;
- int axisnum, butnum;
- HRESULT result;
-
- // allocate and link in a new device
- devinfo = dinput_device_create(machine, &mouse_list, instance, &c_dfDIMouse2, &c_dfDIMouse, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
- if (devinfo == NULL)
- goto exit;
-
- // allocate a second device for the gun (unless we are using the shared axis mode)
- // we only support a single gun in dinput mode, so only add one
- if (!lightgun_shared_axis_mode && devinfo == mouse_list)
- {
- guninfo = generic_device_alloc(machine, &lightgun_list, instance->tszInstanceName);
- if (guninfo == NULL)
- goto exit;
- }
-
- // set relative mode on the mouse device
- result = dinput_set_dword_property(devinfo->dinput.device, DIPROP_AXISMODE, 0, DIPH_DEVICE, DIPROPAXISMODE_REL);
- if (result != DI_OK && result != DI_PROPNOEFFECT)
- {
- osd_printf_error("DirectInput: Unable to set relative mode for mouse %d (%s)\n", generic_device_index(mouse_list, devinfo), devinfo->name);
- goto error;
- }
-
- // add the device
- devinfo->device = machine.input().device_class(DEVICE_CLASS_MOUSE).add_device(devinfo->name, devinfo);
- devinfo->poll = dinput_mouse_poll;
- if (guninfo != NULL)
- {
- guninfo->device = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).add_device(guninfo->name, guninfo);
- guninfo->poll = win32_lightgun_poll;
- }
-
- // cap the number of axes and buttons based on the format
- devinfo->dinput.caps.dwAxes = MIN(devinfo->dinput.caps.dwAxes, 3);
- devinfo->dinput.caps.dwButtons = MIN(devinfo->dinput.caps.dwButtons, (devinfo->dinput.format == &c_dfDIMouse) ? 4 : 8);
-
- // populate the axes
- for (axisnum = 0; axisnum < devinfo->dinput.caps.dwAxes; axisnum++)
- {
- char *name = dinput_device_item_name(devinfo, offsetof(DIMOUSESTATE, lX) + axisnum * sizeof(LONG), default_axis_name[axisnum], NULL);
-
- // add to the mouse device and optionally to the gun device as well
- devinfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.state.lX + axisnum);
- if (guninfo != NULL && axisnum < 2)
- guninfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &guninfo->mouse.state.lX + axisnum);
-
- osd_free(name);
- }
-
- // populate the buttons
- for (butnum = 0; butnum < devinfo->dinput.caps.dwButtons; butnum++)
- {
- FPTR offset = (FPTR)(&((DIMOUSESTATE *)NULL)->rgbButtons[butnum]);
- char *name = dinput_device_item_name(devinfo, offset, default_button_name(butnum), NULL);
-
- // add to the mouse device and optionally to the gun device as well
- // note that the gun device points to the mouse buttons rather than its own
- devinfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.state.rgbButtons[butnum]);
- if (guninfo != NULL)
- guninfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.state.rgbButtons[butnum]);
-
- osd_free(name);
- }
-
-exit:
- return DIENUM_CONTINUE;
-
-error:
- if (guninfo != NULL)
- generic_device_free(guninfo);
- if (devinfo != NULL)
- dinput_device_release(devinfo);
- goto exit;
-}
-
-
-//============================================================
-// dinput_mouse_poll
-//============================================================
-
-static void dinput_mouse_poll(device_info *devinfo)
-{
- // poll
- dinput_device_poll(devinfo);
-
- // scale the axis data
- devinfo->mouse.state.lX *= INPUT_RELATIVE_PER_PIXEL;
- devinfo->mouse.state.lY *= INPUT_RELATIVE_PER_PIXEL;
- devinfo->mouse.state.lZ *= INPUT_RELATIVE_PER_PIXEL;
-}
-
-
-//============================================================
-// dinput_joystick_enum
-//============================================================
-
-static BOOL CALLBACK dinput_joystick_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref)
-{
- DWORD cooperative_level = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
- int axisnum, axiscount, povnum, butnum;
- running_machine &machine = *(running_machine *)ref;
- device_info *devinfo;
- HRESULT result;
-
- if (win_window_list != NULL && win_window_list->win_has_menu()) {
- cooperative_level = DISCL_BACKGROUND | DISCL_NONEXCLUSIVE;
- }
- // allocate and link in a new device
- devinfo = dinput_device_create(machine, &joystick_list, instance, &c_dfDIJoystick, NULL, cooperative_level);
- if (devinfo == NULL)
- goto exit;
-
- // set absolute mode
- result = dinput_set_dword_property(devinfo->dinput.device, DIPROP_AXISMODE, 0, DIPH_DEVICE, DIPROPAXISMODE_ABS);
- if (result != DI_OK && result != DI_PROPNOEFFECT)
- osd_printf_warning("DirectInput: Unable to set absolute mode for joystick %d (%s)\n", generic_device_index(joystick_list, devinfo), devinfo->name);
-
- // turn off deadzone; we do our own calculations
- result = dinput_set_dword_property(devinfo->dinput.device, DIPROP_DEADZONE, 0, DIPH_DEVICE, 0);
- if (result != DI_OK && result != DI_PROPNOEFFECT)
- osd_printf_warning("DirectInput: Unable to reset deadzone for joystick %d (%s)\n", generic_device_index(joystick_list, devinfo), devinfo->name);
-
- // turn off saturation; we do our own calculations
- result = dinput_set_dword_property(devinfo->dinput.device, DIPROP_SATURATION, 0, DIPH_DEVICE, 10000);
- if (result != DI_OK && result != DI_PROPNOEFFECT)
- osd_printf_warning("DirectInput: Unable to reset saturation for joystick %d (%s)\n", generic_device_index(joystick_list, devinfo), devinfo->name);
-
- // cap the number of axes, POVs, and buttons based on the format
- devinfo->dinput.caps.dwAxes = MIN(devinfo->dinput.caps.dwAxes, 8);
- devinfo->dinput.caps.dwPOVs = MIN(devinfo->dinput.caps.dwPOVs, 4);
- devinfo->dinput.caps.dwButtons = MIN(devinfo->dinput.caps.dwButtons, 128);
-
- // add the device
- devinfo->device = machine.input().device_class(DEVICE_CLASS_JOYSTICK).add_device(devinfo->name, devinfo);
- devinfo->poll = dinput_joystick_poll;
-
- // populate the axes
- for (axisnum = axiscount = 0; axiscount < devinfo->dinput.caps.dwAxes && axisnum < 8; axisnum++)
- {
- DIPROPRANGE dipr;
- char *name;
-
- // fetch the range of this axis
- dipr.diph.dwSize = sizeof(dipr);
- dipr.diph.dwHeaderSize = sizeof(dipr.diph);
- dipr.diph.dwObj = offsetof(DIJOYSTATE2, lX) + axisnum * sizeof(LONG);
- dipr.diph.dwHow = DIPH_BYOFFSET;
- result = IDirectInputDevice_GetProperty(devinfo->dinput.device, DIPROP_RANGE, &dipr.diph);
- if (result != DI_OK)
- continue;
- devinfo->joystick.rangemin[axisnum] = dipr.lMin;
- devinfo->joystick.rangemax[axisnum] = dipr.lMax;
-
- // populate the item description as well
- name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, lX) + axisnum * sizeof(LONG), default_axis_name[axisnum], NULL);
- devinfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->joystick.state.lX + axisnum);
- osd_free(name);
-
- axiscount++;
- }
-
- // populate the POVs
- for (povnum = 0; povnum < devinfo->dinput.caps.dwPOVs; povnum++)
- {
- char *name;
-
- // left
- name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("L"));
- devinfo->device->add_item(name, ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_LEFT));
- osd_free(name);
-
- // right
- name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("R"));
- devinfo->device->add_item(name, ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_RIGHT));
- osd_free(name);
-
- // up
- name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("U"));
- devinfo->device->add_item(name, ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_UP));
- osd_free(name);
-
- // down
- name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("D"));
- devinfo->device->add_item(name, ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_DOWN));
- osd_free(name);
- }
-
- // populate the buttons
- for (butnum = 0; butnum < devinfo->dinput.caps.dwButtons; butnum++)
- {
- FPTR offset = (FPTR)(&((DIJOYSTATE2 *)NULL)->rgbButtons[butnum]);
- char *name = dinput_device_item_name(devinfo, offset, default_button_name(butnum), NULL);
-
- input_item_id itemid;
-
- if (butnum < INPUT_MAX_BUTTONS)
- itemid = (input_item_id) (ITEM_ID_BUTTON1 + butnum);
- else if (butnum < INPUT_MAX_BUTTONS + INPUT_MAX_ADD_SWITCH)
- itemid = (input_item_id) (ITEM_ID_ADD_SWITCH1 - INPUT_MAX_BUTTONS + butnum);
- else
- itemid = ITEM_ID_OTHER_SWITCH;
-
- devinfo->device->add_item(name, itemid, generic_button_get_state, &devinfo->joystick.state.rgbButtons[butnum]);
- osd_free(name);
- }
-
-exit:
- return DIENUM_CONTINUE;
-}
-
-
-//============================================================
-// dinput_joystick_poll
-//============================================================
-
-static void dinput_joystick_poll(device_info *devinfo)
-{
- int axisnum;
-
- // poll the device first
- dinput_device_poll(devinfo);
-
- // normalize axis values
- for (axisnum = 0; axisnum < 8; axisnum++)
- {
- LONG *axis = (&devinfo->joystick.state.lX) + axisnum;
- *axis = normalize_absolute_axis(*axis, devinfo->joystick.rangemin[axisnum], devinfo->joystick.rangemax[axisnum]);
- }
-}
-
-
-//============================================================
-// dinput_joystick_pov_get_state
-//============================================================
-
-static INT32 dinput_joystick_pov_get_state(void *device_internal, void *item_internal)
-{
- device_info *devinfo = (device_info *)device_internal;
- int povnum = (FPTR)item_internal / 4;
- int povdir = (FPTR)item_internal % 4;
- INT32 result = 0;
- DWORD pov;
-
- // get the current state
- poll_if_necessary(devinfo->machine());
- pov = devinfo->joystick.state.rgdwPOV[povnum];
-
- // if invalid, return 0
- if ((pov & 0xffff) == 0xffff)
- return result;
-
- // return the current state
- switch (povdir)
- {
- case POVDIR_LEFT: result = (pov >= 22500 && pov <= 31500); break;
- case POVDIR_RIGHT: result = (pov >= 4500 && pov <= 13500); break;
- case POVDIR_UP: result = (pov >= 31500 || pov <= 4500); break;
- case POVDIR_DOWN: result = (pov >= 13500 && pov <= 22500); break;
- }
- return result;
-}
-
-
-//============================================================
-// rawinput_init
-//============================================================
-
-static void rawinput_init(running_machine &machine)
-{
- RAWINPUTDEVICELIST *devlist = NULL;
- int device_count, devnum, regcount;
- RAWINPUTDEVICE reglist[2];
- HMODULE user32;
-
- // we need pause and exit callbacks
- machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(rawinput_exit), &machine));
-
- // look in user32 for the raw input APIs
- user32 = LoadLibrary(TEXT("user32.dll"));
- if (user32 == NULL)
- goto error;
-
- // look up the entry points
- register_rawinput_devices = (register_rawinput_devices_ptr)GetProcAddress(user32, "RegisterRawInputDevices");
- get_rawinput_device_list = (get_rawinput_device_list_ptr)GetProcAddress(user32, "GetRawInputDeviceList");
- get_rawinput_device_info = (get_rawinput_device_info_ptr)GetProcAddress(user32, "GetRawInputDeviceInfo" UNICODE_SUFFIX);
- get_rawinput_data = (get_rawinput_data_ptr)GetProcAddress(user32, "GetRawInputData");
- if (register_rawinput_devices == NULL || get_rawinput_device_list == NULL || get_rawinput_device_info == NULL || get_rawinput_data == NULL)
- goto error;
- osd_printf_verbose("RawInput: APIs detected\n");
-
- // get the number of devices, allocate a device list, and fetch it
- if ((*get_rawinput_device_list)(NULL, &device_count, sizeof(*devlist)) != 0)
- goto error;
- if (device_count == 0)
- goto error;
- devlist = global_alloc_array(RAWINPUTDEVICELIST, device_count);
- if ((*get_rawinput_device_list)(devlist, &device_count, sizeof(*devlist)) == -1)
- goto error;
-
- // iterate backwards through devices; new devices are added at the head
- for (devnum = device_count - 1; devnum >= 0; devnum--)
- {
- RAWINPUTDEVICELIST *device = &devlist[devnum];
-
- // handle keyboards
- if (!FORCE_DIRECTINPUT && device->dwType == RIM_TYPEKEYBOARD)
- rawinput_keyboard_enum(machine, device);
-
- // handle mice
- else if (!FORCE_DIRECTINPUT && device->dwType == RIM_TYPEMOUSE)
- rawinput_mouse_enum(machine, device);
- }
-
- // don't enable global inputs when testing direct input or debugging
- if (!FORCE_DIRECTINPUT && !machine.options().debug())
- {
- global_inputs_enabled = downcast<windows_options &>(machine.options()).global_inputs();
- }
-
- // finally, register to receive raw input WM_INPUT messages
- regcount = 0;
- if (keyboard_list != NULL)
- {
- reglist[regcount].usUsagePage = 0x01;
- reglist[regcount].usUsage = 0x06;
-
- if (global_inputs_enabled)
- {
- reglist[regcount].dwFlags = 0x00000100;
- }
- else
- {
- reglist[regcount].dwFlags = 0;
- }
-
- reglist[regcount].hwndTarget = win_window_list->m_hwnd;
- regcount++;
- }
- if (mouse_list != NULL)
- {
- reglist[regcount].usUsagePage = 0x01;
- reglist[regcount].usUsage = 0x02;
-
- if (global_inputs_enabled)
- {
- reglist[regcount].dwFlags = 0x00000100;
- }
- else
- {
- reglist[regcount].dwFlags = 0;
- }
-
- reglist[regcount].hwndTarget = win_window_list->m_hwnd;
- regcount++;
- }
-
- // if the registration fails, we need to back off
- if (regcount > 0)
- if (!(*register_rawinput_devices)(reglist, regcount, sizeof(reglist[0])))
- goto error;
-
- global_free_array(devlist);
- return;
-
-error:
- if (devlist != NULL)
- global_free_array(devlist);
-}
-
-
-//============================================================
-// rawinput_exit
-//============================================================
-
-static void rawinput_exit(running_machine &machine)
-{
- // release all our devices
- while (lightgun_list != NULL && lightgun_list->rawinput.device != NULL)
- rawinput_device_release(lightgun_list);
- while (mouse_list != NULL && mouse_list->rawinput.device != NULL)
- rawinput_device_release(mouse_list);
- while (keyboard_list != NULL && keyboard_list->rawinput.device != NULL)
- rawinput_device_release(keyboard_list);
-}
-
-
-//============================================================
-// rawinput_device_create
-//============================================================
-
-static device_info *rawinput_device_create(running_machine &machine, device_info **devlist_head_ptr, PRAWINPUTDEVICELIST device)
-{
- device_info *devinfo = NULL;
- TCHAR *tname = NULL;
- INT name_length = 0;
-
- // determine the length of the device name, allocate it, and fetch it if not nameless
- if ((*get_rawinput_device_info)(device->hDevice, RIDI_DEVICENAME, NULL, &name_length) != 0)
- goto error;
- tname = global_alloc_array_clear<TCHAR>(name_length+1);
- if (name_length > 1 && (*get_rawinput_device_info)(device->hDevice, RIDI_DEVICENAME, tname, &name_length) == -1)
- goto error;
-
- // if this is an RDP name, skip it
- if (_tcsstr(tname, TEXT("Root#RDP_")) != NULL)
- goto error;
-
- // improve the name and then allocate a device
- tname = rawinput_device_improve_name(tname);
- devinfo = generic_device_alloc(machine, devlist_head_ptr, tname);
- global_free_array(tname);
-
- // copy the handle
- devinfo->rawinput.device = device->hDevice;
- return devinfo;
-
-error:
- if (tname != NULL)
- global_free_array(tname);
- if (devinfo != NULL)
- rawinput_device_release(devinfo);
- return NULL;
-}
-
-
-//============================================================
-// rawinput_device_release
-//============================================================
-
-static void rawinput_device_release(device_info *devinfo)
-{
- // free the item list
- generic_device_free(devinfo);
-}
-
-
-//============================================================
-// rawinput_device_improve_name
-//============================================================
-
-static TCHAR *rawinput_device_improve_name(TCHAR *name)
-{
- static const TCHAR usbbasepath[] = TEXT("SYSTEM\\CurrentControlSet\\Enum\\USB");
- static const TCHAR basepath[] = TEXT("SYSTEM\\CurrentControlSet\\Enum\\");
- TCHAR *regstring = NULL;
- TCHAR *parentid = NULL;
- TCHAR *regpath = NULL;
- const TCHAR *chsrc;
- HKEY regkey = NULL;
- int usbindex;
- TCHAR *chdst;
- LONG result;
-
- // The RAW name received is formatted as:
- // \??\type-id#hardware-id#instance-id#{DeviceClasses-id}
- // XP starts with "\??\"
- // Vista64 starts with "\\?\"
-
- // ensure the name is something we can handle
- if (_tcsncmp(name, TEXT("\\\\?\\"), 4) != 0 && _tcsncmp(name, TEXT("\\??\\"), 4) != 0)
- return name;
-
- // allocate a temporary string and concatenate the base path plus the name
- regpath = global_alloc_array(TCHAR, _tcslen(basepath) + 1 + _tcslen(name));
- _tcscpy(regpath, basepath);
- chdst = regpath + _tcslen(regpath);
-
- // convert all # to \ in the name
- for (chsrc = name + 4; *chsrc != 0; chsrc++)
- *chdst++ = (*chsrc == '#') ? '\\' : *chsrc;
- *chdst = 0;
-
- // remove the final chunk
- chdst = _tcsrchr(regpath, '\\');
- if (chdst == NULL)
- goto exit;
- *chdst = 0;
-
- // now try to open the registry key
- result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, regpath, 0, KEY_READ, &regkey);
- if (result != ERROR_SUCCESS)
- goto exit;
-
- // fetch the device description; if it exists, we are finished
- regstring = reg_query_string(regkey, TEXT("DeviceDesc"));
- if (regstring != NULL)
- goto convert;
-
- // close this key
- RegCloseKey(regkey);
- regkey = NULL;
-
- // if the key name does not contain "HID", it's not going to be in the USB tree; give up
- if (_tcsstr(regpath, TEXT("HID")) == NULL)
- goto exit;
-
- // extract the expected parent ID from the regpath
- parentid = _tcsrchr(regpath, '\\');
- if (parentid == NULL)
- goto exit;
- parentid++;
-
- // open the USB key
- result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, usbbasepath, 0, KEY_READ, &regkey);
- if (result != ERROR_SUCCESS)
- goto exit;
-
- // enumerate the USB key
- for (usbindex = 0; result == ERROR_SUCCESS && regstring == NULL; usbindex++)
- {
- TCHAR keyname[MAX_PATH];
- DWORD namelen;
-
- // get the next enumerated subkey and scan it
- namelen = ARRAY_LENGTH(keyname) - 1;
- result = RegEnumKeyEx(regkey, usbindex, keyname, &namelen, NULL, NULL, NULL, NULL);
- if (result == ERROR_SUCCESS)
- {
- LONG subresult;
- int subindex;
- HKEY subkey;
-
- // open the subkey
- subresult = RegOpenKeyEx(regkey, keyname, 0, KEY_READ, &subkey);
- if (subresult != ERROR_SUCCESS)
- continue;
-
- // enumerate the subkey
- for (subindex = 0; subresult == ERROR_SUCCESS && regstring == NULL; subindex++)
- {
- // get the next enumerated subkey and scan it
- namelen = ARRAY_LENGTH(keyname) - 1;
- subresult = RegEnumKeyEx(subkey, subindex, keyname, &namelen, NULL, NULL, NULL, NULL);
- if (subresult == ERROR_SUCCESS)
- {
- TCHAR *endparentid;
- LONG endresult;
- HKEY endkey;
-
- // open this final key
- endresult = RegOpenKeyEx(subkey, keyname, 0, KEY_READ, &endkey);
- if (endresult != ERROR_SUCCESS)
- continue;
-
- // do we have a match?
- endparentid = reg_query_string(endkey, TEXT("ParentIdPrefix"));
- if (endparentid != NULL && _tcsncmp(parentid, endparentid, _tcslen(endparentid)) == 0)
- regstring = reg_query_string(endkey, TEXT("DeviceDesc"));
-
- // free memory and close the key
- if (endparentid != NULL)
- global_free_array(endparentid);
- RegCloseKey(endkey);
- }
- }
-
- // close the subkey
- RegCloseKey(subkey);
- }
- }
-
- // if we didn't find anything, go to the exit
- if (regstring == NULL)
- goto exit;
-
-convert:
- // replace the name with the nicer one
- global_free_array(name);
-
- // remove anything prior to the final semicolon
- chsrc = _tcsrchr(regstring, ';');
- if (chsrc != NULL)
- chsrc++;
- else
- chsrc = regstring;
- name = global_alloc_array(TCHAR, _tcslen(chsrc) + 1);
- _tcscpy(name, chsrc);
-
-exit:
- if (regstring != NULL)
- global_free_array(regstring);
- if (regpath != NULL)
- global_free_array(regpath);
- if (regkey != NULL)
- RegCloseKey(regkey);
-
- return name;
-}
-
-
-//============================================================
-// rawinput_keyboard_enum
-//============================================================
-
-static void rawinput_keyboard_enum(running_machine &machine, PRAWINPUTDEVICELIST device)
-{
- device_info *devinfo;
- int keynum;
-
- // allocate and link in a new device
- devinfo = rawinput_device_create(machine, &keyboard_list, device);
- if (devinfo == NULL)
- return;
-
- // add the device
- devinfo->device = machine.input().device_class(DEVICE_CLASS_KEYBOARD).add_device(devinfo->name, devinfo);
-
- // populate it
- for (keynum = 0; keynum < MAX_KEYS; keynum++)
- {
- input_item_id itemid = keyboard_map_scancode_to_itemid(keynum);
- TCHAR keyname[100];
- char *name;
-
- // generate the name
- if (GetKeyNameText(((keynum & 0x7f) << 16) | ((keynum & 0x80) << 17), keyname, ARRAY_LENGTH(keyname)) == 0)
- _sntprintf(keyname, ARRAY_LENGTH(keyname), TEXT("Scan%03d"), keynum);
- name = utf8_from_tstring(keyname);
-
- // add the item to the device
- devinfo->device->add_item(name, itemid, generic_button_get_state, &devinfo->keyboard.state[keynum]);
- osd_free(name);
- }
-}
-
-
-//============================================================
-// rawinput_keyboard_update
-//============================================================
-
-static void rawinput_keyboard_update(HANDLE device, RAWKEYBOARD *data)
-{
- device_info *devinfo;
-
- // find the keyboard in the list and process
- for (devinfo = keyboard_list; devinfo != NULL; devinfo = devinfo->next)
- if (devinfo->rawinput.device == device)
- {
- // determine the full DIK-compatible scancode
- UINT8 scancode = (data->MakeCode & 0x7f) | ((data->Flags & RI_KEY_E0) ? 0x80 : 0x00);
-
- // scancode 0xaa is a special shift code we need to ignore
- if (scancode == 0xaa)
- break;
-
- // set or clear the key
- if (!(data->Flags & RI_KEY_BREAK))
- devinfo->keyboard.state[scancode] = 0x80;
- else
- devinfo->keyboard.state[scancode] = 0x00;
- break;
- }
-}
-
-
-//============================================================
-// rawinput_mouse_enum
-//============================================================
-
-static void rawinput_mouse_enum(running_machine &machine, PRAWINPUTDEVICELIST device)
-{
- device_info *devinfo, *guninfo = NULL;
- int axisnum, butnum;
-
- // allocate and link in a new mouse device
- devinfo = rawinput_device_create(machine, &mouse_list, device);
- if (devinfo == NULL)
- return;
- devinfo->poll = rawinput_mouse_poll;
-
- // allocate a second device for the gun (unless we are using the shared axis mode)
- if (!lightgun_shared_axis_mode)
- {
- guninfo = rawinput_device_create(machine, &lightgun_list, device);
- assert(guninfo != NULL);
- }
-
- // add the device
- devinfo->device = machine.input().device_class(DEVICE_CLASS_MOUSE).add_device(devinfo->name, devinfo);
- if (guninfo != NULL)
- {
- guninfo->device = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).add_device(guninfo->name, guninfo);
- guninfo->poll = NULL;
- }
-
- // populate the axes
- for (axisnum = 0; axisnum < 3; axisnum++)
- {
- char *name = utf8_from_tstring(default_axis_name[axisnum]);
-
- // add to the mouse device and optionally to the gun device as well
- devinfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.state.lX + axisnum);
- if (guninfo != NULL && axisnum < 2)
- guninfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &guninfo->mouse.state.lX + axisnum);
-
- osd_free(name);
- }
-
- // populate the buttons
- for (butnum = 0; butnum < 5; butnum++)
- {
- char *name = utf8_from_tstring(default_button_name(butnum));
-
- // add to the mouse device and optionally to the gun device as well
- devinfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.state.rgbButtons[butnum]);
- if (guninfo != NULL)
- guninfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &guninfo->mouse.state.rgbButtons[butnum]);
-
- osd_free(name);
- }
-}
-
-
-//============================================================
-// rawinput_mouse_update
-//============================================================
-
-static void rawinput_mouse_update(HANDLE device, RAWMOUSE *data)
-{
- device_info *devlist = (data->usFlags & MOUSE_MOVE_ABSOLUTE) ? lightgun_list : mouse_list;
- device_info *devinfo;
-
- // find the mouse in the list and process
- for (devinfo = devlist; devinfo != NULL; devinfo = devinfo->next)
- if (devinfo->rawinput.device == device)
- {
- // if we got relative data, update it as a mouse
- if (!(data->usFlags & MOUSE_MOVE_ABSOLUTE))
- {
- devinfo->mouse.raw_x += data->lLastX * INPUT_RELATIVE_PER_PIXEL;
- devinfo->mouse.raw_y += data->lLastY * INPUT_RELATIVE_PER_PIXEL;
-
- // update zaxis
- if (data->usButtonFlags & RI_MOUSE_WHEEL)
- devinfo->mouse.raw_z += (INT16)data->usButtonData * INPUT_RELATIVE_PER_PIXEL;
- }
-
- // otherwise, update it as a lightgun
- else
- {
- devinfo->mouse.state.lX = normalize_absolute_axis(data->lLastX, 0, 0xffff);
- devinfo->mouse.state.lY = normalize_absolute_axis(data->lLastY, 0, 0xffff);
- }
-
- // update the button states; always update the corresponding mouse buttons
- if (data->usButtonFlags & RI_MOUSE_BUTTON_1_DOWN) devinfo->mouse.state.rgbButtons[0] = 0x80;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_1_UP) devinfo->mouse.state.rgbButtons[0] = 0x00;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_2_DOWN) devinfo->mouse.state.rgbButtons[1] = 0x80;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_2_UP) devinfo->mouse.state.rgbButtons[1] = 0x00;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_3_DOWN) devinfo->mouse.state.rgbButtons[2] = 0x80;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_3_UP) devinfo->mouse.state.rgbButtons[2] = 0x00;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_4_DOWN) devinfo->mouse.state.rgbButtons[3] = 0x80;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_4_UP) devinfo->mouse.state.rgbButtons[3] = 0x00;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_5_DOWN) devinfo->mouse.state.rgbButtons[4] = 0x80;
- if (data->usButtonFlags & RI_MOUSE_BUTTON_5_UP) devinfo->mouse.state.rgbButtons[4] = 0x00;
- break;
- }
-}
-
-
-//============================================================
-// rawinput_mouse_poll
-//============================================================
-
-static void rawinput_mouse_poll(device_info *devinfo)
-{
- poll_if_necessary(devinfo->machine());
-
- // copy the accumulated raw state to the actual state
- std::lock_guard<std::mutex> lock(input_lock);
- devinfo->mouse.state.lX = devinfo->mouse.raw_x;
- devinfo->mouse.state.lY = devinfo->mouse.raw_y;
- devinfo->mouse.state.lZ = devinfo->mouse.raw_z;
- devinfo->mouse.raw_x = 0;
- devinfo->mouse.raw_y = 0;
- devinfo->mouse.raw_z = 0;
-}
-
-
-//============================================================
-// reg_query_string
-//============================================================
-
-static TCHAR *reg_query_string(HKEY key, const TCHAR *path)
-{
- TCHAR *buffer;
- DWORD datalen;
- LONG result;
-
- // first query to get the length
- result = RegQueryValueEx(key, path, NULL, NULL, NULL, &datalen);
- if (result != ERROR_SUCCESS)
- return NULL;
-
- // allocate a buffer
- buffer = global_alloc_array(TCHAR, datalen + sizeof(*buffer));
- buffer[datalen / sizeof(*buffer)] = 0;
-
- // now get the actual data
- result = RegQueryValueEx(key, path, NULL, NULL, (LPBYTE)buffer, &datalen);
- if (result == ERROR_SUCCESS)
- return buffer;
-
- // otherwise return a NULL buffer
- global_free_array(buffer);
- return NULL;
-}
-
-
-//============================================================
-// default_button_name
-//============================================================
-
-static const TCHAR *default_button_name(int which)
-{
- static TCHAR buffer[20];
- _sntprintf(buffer, ARRAY_LENGTH(buffer), TEXT("B%d"), which);
- return buffer;
-}
-
-
-//============================================================
-// default_pov_name
-//============================================================
-
-static const TCHAR *default_pov_name(int which)
-{
- static TCHAR buffer[20];
- _sntprintf(buffer, ARRAY_LENGTH(buffer), TEXT("POV%d"), which);
- return buffer;
-}
diff --git a/src/osd/windows/input.h b/src/osd/windows/input.h
deleted file mode 100644
index 983d1867d6f..00000000000
--- a/src/osd/windows/input.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Aaron Giles
-//============================================================
-//
-// input.h - Win32 implementation of MAME input routines
-//
-//============================================================
-
-#ifndef __INPUT_H
-#define __INPUT_H
-
-
-//============================================================
-// PROTOTYPES
-//============================================================
-
-void wininput_poll(running_machine &machine);
-
-BOOL wininput_handle_mouse_button(int button, int down, int x, int y);
-BOOL wininput_handle_raw(HANDLE device);
-
-bool wininput_should_hide_mouse(void);
-
-int wininput_vkey_for_mame_code(input_code code);
-
-
-#endif /* __INPUT_H */
diff --git a/src/osd/windows/video.cpp b/src/osd/windows/video.cpp
index b2fa493469d..a90ed28ac21 100644
--- a/src/osd/windows/video.cpp
+++ b/src/osd/windows/video.cpp
@@ -21,7 +21,6 @@
#include "winmain.h"
#include "video.h"
#include "window.h"
-#include "input.h"
#include "strconv.h"
#include "modules/osdwindow.h"
@@ -206,7 +205,7 @@ void windows_osd_interface::update(bool skip_redraw)
// poll the joystick values here
winwindow_process_events(machine(), TRUE, FALSE);
- wininput_poll(machine());
+ poll_input(machine());
check_osd_inputs(machine());
// if we're running, disable some parts of the debugger
if ((machine().debug_flags & DEBUG_FLAG_OSD_ENABLED) != 0)
diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp
index bb81f0b9de5..52d0a898df7 100644
--- a/src/osd/windows/window.cpp
+++ b/src/osd/windows/window.cpp
@@ -12,9 +12,12 @@
// Needed for RAW Input
#define WM_INPUT 0x00FF
+#include <stdio.h> // must be here otherwise issues with I64FMT in MINGW
// standard C headers
#include <process.h>
+#include <atomic>
+
// MAME headers
#include "emu.h"
#include "uiinput.h"
@@ -23,7 +26,6 @@
#include "winmain.h"
#include "window.h"
#include "video.h"
-#include "input.h"
#include "winutf8.h"
#include "winutil.h"
@@ -36,6 +38,12 @@
#include "modules/render/drawogl.h"
#endif
+#define NOT_ALREADY_DOWN(x) (x & 0x40000000) == 0
+#define SCAN_CODE(x) ((x >> 16) & 0xff)
+#define IS_EXTENDED(x) (0x01000000 & x)
+#define MAKE_DI_SCAN(scan, isextended) (scan & 0x7f) | (isextended ? 0x80 : 0x00)
+#define WINOSD(machine) downcast<windows_osd_interface*>(&machine.osd())
+
//============================================================
// PARAMETERS
//============================================================
@@ -122,11 +130,11 @@ struct mtlog
};
static mtlog mtlog[100000];
-static volatile INT32 mtlogindex;
+static std::atomic<INT32> mtlogindex;
void mtlog_add(const char *event)
{
- int index = atomic_increment32((INT32 *) &mtlogindex) - 1;
+ int index = mtlogindex++;
if (index < ARRAY_LENGTH(mtlog))
{
mtlog[index].timestamp = osd_ticks();
@@ -144,7 +152,7 @@ static void mtlog_dump(void)
for (i = 0; i < mtlogindex; i++)
{
osd_ticks_t curr = mtlog[i].timestamp * 1000000 / cps;
- fprintf(f, "%20I64d %10I64d %s\n", curr, curr - last, mtlog[i].event);
+ fprintf(f, "%20" I64FMT "d %10" I64FMT "d %s\n", (UINT64)curr, (UINT64)(curr - last), mtlog[i].event);
last = curr;
}
fclose(f);
@@ -188,7 +196,7 @@ bool windows_osd_interface::window_init()
fatalerror("Failed to create window thread ready event\n");
// create a thread to run the windows from
- temp = _beginthreadex(nullptr, 0, win_window_info::thread_entry, nullptr, 0, (unsigned *)&window_threadid);
+ temp = _beginthreadex(nullptr, 0, win_window_info::thread_entry, this, 0, (unsigned *)&window_threadid);
window_thread = (HANDLE)temp;
if (window_thread == nullptr)
fatalerror("Failed to create window thread\n");
@@ -205,19 +213,19 @@ bool windows_osd_interface::window_init()
}
const int fallbacks[VIDEO_MODE_COUNT] = {
- -1, // NONE -> no fallback
- VIDEO_MODE_NONE, // GDI -> NONE
- VIDEO_MODE_D3D, // BGFX -> D3D
+ -1, // NONE -> no fallback
+ VIDEO_MODE_NONE, // GDI -> NONE
+ VIDEO_MODE_D3D, // BGFX -> D3D
#if (USE_OPENGL)
- VIDEO_MODE_GDI, // OPENGL -> GDI
+ VIDEO_MODE_GDI, // OPENGL -> GDI
#endif
- -1, // No SDL2ACCEL on Windows OSD
+ -1, // No SDL2ACCEL on Windows OSD
#if (USE_OPENGL)
- VIDEO_MODE_OPENGL, // D3D -> OPENGL
+ VIDEO_MODE_OPENGL, // D3D -> OPENGL
#else
- VIDEO_MODE_GDI, // D3D -> GDI
+ VIDEO_MODE_GDI, // D3D -> GDI
#endif
- -1 // No SOFT on Windows OSD
+ -1 // No SOFT on Windows OSD
};
int current_mode = video_config.mode;
@@ -225,7 +233,7 @@ bool windows_osd_interface::window_init()
{
bool error = false;
switch(current_mode)
- {
+ {
case VIDEO_MODE_NONE:
error = renderer_none::init(machine());
break;
@@ -401,7 +409,7 @@ win_window_info::~win_window_info()
if (m_renderer != nullptr)
{
delete m_renderer;
- }
+}
}
@@ -437,7 +445,31 @@ static BOOL is_mame_window(HWND hwnd)
return FALSE;
}
+inline static BOOL handle_mouse_button(windows_osd_interface *osd, int button, int down, int x, int y)
+{
+ MouseButtonEventArgs args;
+ args.button = button;
+ args.keydown = down;
+ args.xpos = x;
+ args.ypos = y;
+
+ bool handled = osd->handle_input_event(INPUT_EVENT_MOUSE_BUTTON, &args);
+
+ // When in lightgun mode or mouse mode, the mouse click may be routed to the input system
+ // because the mouse interactions in the UI are routed from the video_window_proc below
+ // we need to make sure they aren't suppressed in these cases.
+ return handled && !osd->options().lightgun() && !osd->options().mouse();
+}
+inline static BOOL handle_keypress(windows_osd_interface *osd, int vkey, int down, int scancode, BOOL extended_key)
+{
+ KeyPressEventArgs args;
+ args.event_id = down ? INPUT_EVENT_KEYDOWN : INPUT_EVENT_KEYUP;
+ args.scancode = MAKE_DI_SCAN(scancode, extended_key);
+ args.vkey = vkey;
+
+ return osd->handle_input_event(args.event_id, &args);
+}
//============================================================
// winwindow_process_events
@@ -478,36 +510,45 @@ void winwindow_process_events(running_machine &machine, int ingame, bool nodispa
// forward mouse button downs to the input system
case WM_LBUTTONDOWN:
- dispatch = !wininput_handle_mouse_button(0, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(WINOSD(machine), 0, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_RBUTTONDOWN:
- dispatch = !wininput_handle_mouse_button(1, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(WINOSD(machine), 1, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_MBUTTONDOWN:
- dispatch = !wininput_handle_mouse_button(2, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(WINOSD(machine), 2, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_XBUTTONDOWN:
- dispatch = !wininput_handle_mouse_button(3, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(WINOSD(machine), 3, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
// forward mouse button ups to the input system
case WM_LBUTTONUP:
- dispatch = !wininput_handle_mouse_button(0, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(WINOSD(machine), 0, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_RBUTTONUP:
- dispatch = !wininput_handle_mouse_button(1, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(WINOSD(machine), 1, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_MBUTTONUP:
- dispatch = !wininput_handle_mouse_button(2, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(WINOSD(machine), 2, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_XBUTTONUP:
- dispatch = !wininput_handle_mouse_button(3, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(WINOSD(machine), 3, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ break;
+
+ case WM_KEYDOWN:
+ if (NOT_ALREADY_DOWN(message.lParam))
+ dispatch = !handle_keypress(WINOSD(machine), message.wParam, TRUE, SCAN_CODE(message.lParam), IS_EXTENDED(message.lParam));
+ break;
+
+ case WM_KEYUP:
+ dispatch = !handle_keypress(WINOSD(machine), message.wParam, FALSE, SCAN_CODE(message.lParam), IS_EXTENDED(message.lParam));
break;
}
}
@@ -688,7 +729,7 @@ void winwindow_update_cursor_state(running_machine &machine)
// 2. we also hide the cursor in full screen mode and when the window doesn't have a menu
// 3. we also hide the cursor in windowed mode if we're not paused and
// the input system requests it
- if (winwindow_has_focus() && ((!video_config.windowed && !win_window_list->win_has_menu()) || (!machine.paused() && wininput_should_hide_mouse())))
+ if (winwindow_has_focus() && ((!video_config.windowed && !win_window_list->win_has_menu()) || (!machine.paused() && downcast<windows_osd_interface&>(machine.osd()).should_hide_mouse())))
{
win_window_info *window = win_window_list;
RECT bounds;
@@ -1152,6 +1193,7 @@ int win_window_info::wnd_extra_height()
unsigned __stdcall win_window_info::thread_entry(void *param)
{
MSG message;
+ windows_osd_interface *osd = static_cast<windows_osd_interface*>(param);
// make a bogus user call to make us a message thread
PeekMessage(&message, nullptr, 0, 0, PM_NOREMOVE);
@@ -1179,36 +1221,36 @@ unsigned __stdcall win_window_info::thread_entry(void *param)
// forward mouse button downs to the input system
case WM_LBUTTONDOWN:
- dispatch = !wininput_handle_mouse_button(0, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(osd, 0, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_RBUTTONDOWN:
- dispatch = !wininput_handle_mouse_button(1, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(osd, 1, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_MBUTTONDOWN:
- dispatch = !wininput_handle_mouse_button(2, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(osd, 2, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_XBUTTONDOWN:
- dispatch = !wininput_handle_mouse_button(3, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(osd, 3, TRUE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
// forward mouse button ups to the input system
case WM_LBUTTONUP:
- dispatch = !wininput_handle_mouse_button(0, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(osd, 0, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_RBUTTONUP:
- dispatch = !wininput_handle_mouse_button(1, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(osd, 1, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_MBUTTONUP:
- dispatch = !wininput_handle_mouse_button(2, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(osd, 2, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
case WM_XBUTTONUP:
- dispatch = !wininput_handle_mouse_button(3, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
+ dispatch = !handle_mouse_button(osd, 3, FALSE, GET_X_LPARAM(message.lParam), GET_Y_LPARAM(message.lParam));
break;
// a terminate message to the thread posts a quit
@@ -1369,7 +1411,7 @@ LRESULT CALLBACK win_window_info::video_window_proc(HWND wnd, UINT message, WPAR
// input: handle the raw input
case WM_INPUT:
- wininput_handle_raw((HRAWINPUT)lparam);
+ downcast<windows_osd_interface&>(window->machine().osd()).handle_input_event(INPUT_EVENT_RAWINPUT, &lparam);
break;
// syskeys - ignore
@@ -1613,6 +1655,12 @@ void win_window_info::draw_video_contents(HDC dc, int update)
}
+static inline int better_mode(int width0, int height0, int width1, int height1, float desired_aspect)
+{
+ float aspect0 = (float)width0 / (float)height0;
+ float aspect1 = (float)width1 / (float)height1;
+ return (fabs(desired_aspect - aspect0) < fabs(desired_aspect - aspect1)) ? 0 : 1;
+}
//============================================================
// constrain_to_aspect_ratio
@@ -1626,15 +1674,19 @@ osd_rect win_window_info::constrain_to_aspect_ratio(const osd_rect &rect, int ad
INT32 propwidth, propheight;
INT32 minwidth, minheight;
INT32 maxwidth, maxheight;
- INT32 viswidth, visheight;
INT32 adjwidth, adjheight;
- float pixel_aspect;
+ float desired_aspect = 1.0f;
+ osd_dim window_dim = get_size();
+ INT32 target_width = window_dim.width();
+ INT32 target_height = window_dim.height();
+ INT32 xscale = 1, yscale = 1;
+ int newwidth, newheight;
osd_monitor_info *monitor = winwindow_video_window_monitor(&rect);
assert(GetCurrentThreadId() == window_threadid);
// get the pixel aspect ratio for the target monitor
- pixel_aspect = monitor->aspect();
+ float pixel_aspect = monitor->aspect();
// determine the proposed width/height
propwidth = rect.width() - extrawidth;
@@ -1662,6 +1714,58 @@ osd_rect win_window_info::constrain_to_aspect_ratio(const osd_rect &rect, int ad
// get the minimum width/height for the current layout
m_target->compute_minimum_size(minwidth, minheight);
+ // compute the appropriate visible area if we're trying to keepaspect
+ if (video_config.keepaspect)
+ {
+ // make sure the monitor is up-to-date
+ m_target->compute_visible_area(target_width, target_height, m_monitor->aspect(), m_target->orientation(), target_width, target_height);
+ desired_aspect = (float)target_width / (float)target_height;
+ }
+
+ // non-integer scaling - often gives more pleasing results in full screen
+ newwidth = target_width;
+ newheight = target_height;
+ if (!video_config.fullstretch)
+ {
+ // compute maximum integral scaling to fit the window
+ xscale = (target_width + 2) / newwidth;
+ yscale = (target_height + 2) / newheight;
+
+ // try a little harder to keep the aspect ratio if desired
+ if (video_config.keepaspect)
+ {
+ // if we could stretch more in the X direction, and that makes a better fit, bump the xscale
+ while (newwidth * (xscale + 1) <= window_dim.width() &&
+ better_mode(newwidth * xscale, newheight * yscale, newwidth * (xscale + 1), newheight * yscale, desired_aspect))
+ xscale++;
+
+ // if we could stretch more in the Y direction, and that makes a better fit, bump the yscale
+ while (newheight * (yscale + 1) <= window_dim.height() &&
+ better_mode(newwidth * xscale, newheight * yscale, newwidth * xscale, newheight * (yscale + 1), desired_aspect))
+ yscale++;
+
+ // now that we've maxed out, see if backing off the maximally stretched one makes a better fit
+ if (window_dim.width() - newwidth * xscale < window_dim.height() - newheight * yscale)
+ {
+ while (better_mode(newwidth * xscale, newheight * yscale, newwidth * (xscale - 1), newheight * yscale, desired_aspect) && (xscale >= 0))
+ xscale--;
+ }
+ else
+ {
+ while (better_mode(newwidth * xscale, newheight * yscale, newwidth * xscale, newheight * (yscale - 1), desired_aspect) && (yscale >= 0))
+ yscale--;
+ }
+ }
+
+ // ensure at least a scale factor of 1
+ if (xscale <= 0) xscale = 1;
+ if (yscale <= 0) yscale = 1;
+
+ // apply the final scale
+ newwidth *= xscale;
+ newheight *= yscale;
+ }
+
// clamp against the absolute minimum
propwidth = MAX(propwidth, MIN_WINDOW_DIM);
propheight = MAX(propheight, MIN_WINDOW_DIM);
@@ -1692,12 +1796,9 @@ osd_rect win_window_info::constrain_to_aspect_ratio(const osd_rect &rect, int ad
propwidth = MIN(propwidth, maxwidth);
propheight = MIN(propheight, maxheight);
- // compute the visible area based on the proposed rectangle
- m_target->compute_visible_area(propwidth, propheight, pixel_aspect, m_target->orientation(), viswidth, visheight);
-
// compute the adjustments we need to make
- adjwidth = (viswidth + extrawidth) - rect.width();
- adjheight = (visheight + extraheight) - rect.height();
+ adjwidth = (propwidth + extrawidth) - rect.width();
+ adjheight = (propheight + extraheight) - rect.height();
// based on which corner we're adjusting, constrain in different ways
osd_rect ret(rect);
@@ -1724,6 +1825,7 @@ osd_rect win_window_info::constrain_to_aspect_ratio(const osd_rect &rect, int ad
ret = rect.move_by(0, -adjheight).resize(rect.width() + adjwidth, rect.height() + adjheight);
break;
}
+
return ret;
}
@@ -1815,10 +1917,13 @@ osd_dim win_window_info::get_max_bounds(int constrain)
// constrain to fit
if (constrain)
+ {
maximum = constrain_to_aspect_ratio(maximum, WMSZ_BOTTOMRIGHT);
+ }
else
{
- maximum = maximum.resize(maximum.width() - wnd_extra_width(), maximum.height() - wnd_extra_height());
+ // No - the maxima returned by usable_position_size are in window units, not usable units
+ //maximum = maximum.resize(maximum.width() - wnd_extra_width(), maximum.height() - wnd_extra_height());
}
return maximum.dim();
}
diff --git a/src/osd/windows/winfile.cpp b/src/osd/windows/winfile.cpp
index b83f0e041d9..e8fcc30ab2c 100644
--- a/src/osd/windows/winfile.cpp
+++ b/src/osd/windows/winfile.cpp
@@ -281,6 +281,31 @@ file_error osd_truncate(osd_file *file, UINT64 offset)
return FILERR_NONE;
}
+//============================================================
+// osd_fflush
+//============================================================
+
+file_error osd_fflush(osd_file *file)
+{
+ if (!file || !file->handle)
+ return FILERR_FAILURE;
+
+ switch (file->type)
+ {
+ case WINFILE_FILE:
+ // attempt to flush file buffers
+ if (!FlushFileBuffers(file->handle))
+ return win_error_to_mame_file_error(GetLastError());
+ break;
+ case WINFILE_SOCKET:
+ return FILERR_FAILURE;
+ case WINFILE_PTTY:
+ return FILERR_FAILURE;
+
+ }
+ return FILERR_NONE;
+}
+
//============================================================
// osd_close
diff --git a/src/osd/windows/winmain.cpp b/src/osd/windows/winmain.cpp
index 5277fcec3d0..bd611c470e4 100644
--- a/src/osd/windows/winmain.cpp
+++ b/src/osd/windows/winmain.cpp
@@ -588,11 +588,9 @@ void windows_osd_interface::init(running_machine &machine)
osd_common_t::init_subsystems();
// notify listeners of screen configuration
- std::string tempstring;
for (win_window_info *info = win_window_list; info != nullptr; info = info->m_next)
{
- strprintf(tempstring, "Orientation(%s)", info->m_monitor->devicename());
- machine.output().set_value(tempstring.c_str(), info->m_targetorient);
+ machine.output().set_value(string_format("Orientation(%s)", info->m_monitor->devicename()).c_str(), info->m_targetorient);
}
// hook up the debugger log
@@ -1027,7 +1025,7 @@ symbol_manager::symbol_manager(const char *argv0)
#endif
// expand the buffer to be decently large up front
- strprintf(m_buffer,"%500s", "");
+ m_buffer = string_format("%500s", "");
}
@@ -1294,13 +1292,13 @@ bool symbol_manager::parse_map_line(const char *line, FPTR &address, std::string
void symbol_manager::format_symbol(const char *name, UINT32 displacement, const char *filename, int linenumber)
{
// start with the address and offset
- strprintf(m_buffer, " (%s", name);
+ m_buffer = string_format(" (%s", name);
if (displacement != 0)
- strcatprintf(m_buffer, "+0x%04x", (UINT32)displacement);
+ m_buffer.append(string_format("+0x%04x", (UINT32)displacement));
// append file/line if present
if (filename != nullptr)
- strcatprintf(m_buffer, ", %s:%d", filename, linenumber);
+ m_buffer.append(string_format(", %s:%d", filename, linenumber));
// close up the string
m_buffer.append(")");
diff --git a/src/osd/windows/winmain.h b/src/osd/windows/winmain.h
index 666c533e182..b7d87525f81 100644
--- a/src/osd/windows/winmain.h
+++ b/src/osd/windows/winmain.h
@@ -234,6 +234,29 @@ private:
// TYPE DEFINITIONS
//============================================================
+enum input_event
+{
+ INPUT_EVENT_KEYDOWN,
+ INPUT_EVENT_KEYUP,
+ INPUT_EVENT_RAWINPUT,
+ INPUT_EVENT_MOUSE_BUTTON
+};
+
+struct KeyPressEventArgs
+{
+ input_event event_id;
+ UINT8 vkey;
+ UINT8 scancode;
+};
+
+struct MouseButtonEventArgs
+{
+ int button;
+ int keydown;
+ int xpos;
+ int ypos;
+};
+
class windows_osd_interface : public osd_common_t
{
public:
@@ -248,25 +271,25 @@ public:
// video overridables
virtual slider_state *get_slider_list() override;
- // input overridables
virtual void customize_input_type_list(simple_list<input_type_entry> &typelist) override;
virtual void video_register() override;
virtual bool video_init() override;
virtual bool window_init() override;
- virtual bool input_init() override;
- virtual void input_pause() override;
- virtual void input_resume() override;
virtual bool output_init() override;
virtual void video_exit() override;
virtual void window_exit() override;
- virtual void input_exit() override;
virtual void output_exit() override;
void extract_video_config();
+ // windows osd specific
+ bool handle_input_event(input_event eventid, void *eventdata);
+ bool should_hide_mouse();
+ void poll_input(running_machine &machine);
+
windows_options &options() { return m_options; }
private:
@@ -274,8 +297,8 @@ private:
void build_slider_list();
void update_slider_list();
- windows_options & m_options;
- slider_state * m_sliders;
+ windows_options & m_options;
+ slider_state * m_sliders;
static const int DEFAULT_FONT_HEIGHT = 200;
};
diff --git a/src/osd/windows/winutil.cpp b/src/osd/windows/winutil.cpp
index f7d120e6ea2..fe835301907 100644
--- a/src/osd/windows/winutil.cpp
+++ b/src/osd/windows/winutil.cpp
@@ -11,6 +11,9 @@
#include <windows.h>
#include <direct.h>
+// MAME headers
+#include "emu.h"
+
// MAMEOS headers
#include "winutil.h"
#include "strconv.h"
@@ -146,3 +149,61 @@ HMODULE WINAPI GetModuleHandleUni()
VirtualQuery((LPCVOID)GetModuleHandleUni, &mbi, sizeof(mbi));
return (HMODULE)mbi.AllocationBase;
}
+
+//-----------------------------------------------------------
+// Lazy loaded function using LoadLibrary / GetProcAddress
+//-----------------------------------------------------------
+
+lazy_loaded_function::lazy_loaded_function(const char * name, const wchar_t* dll_name)
+ : lazy_loaded_function(name, &dll_name, 1)
+{
+}
+
+lazy_loaded_function::lazy_loaded_function(const char * name, const wchar_t** dll_names, int dll_count)
+ : m_name(name), m_initialized(false), m_pfn(nullptr)
+{
+ for (int i = 0; i < dll_count; i++)
+ m_dll_names.push_back(std::wstring(dll_names[i]));
+}
+
+lazy_loaded_function::~lazy_loaded_function()
+{
+ if (m_module != nullptr)
+ {
+ FreeLibrary(m_module);
+ m_module = nullptr;
+ }
+}
+
+int lazy_loaded_function::initialize()
+{
+ if (m_module == nullptr)
+ {
+ for (int i = 0; i < m_dll_names.size(); i++)
+ {
+ m_module = LoadLibraryW(m_dll_names[i].c_str());
+ if (m_module != NULL)
+ break;
+ }
+
+ if (m_module == NULL)
+ return ERROR_DLL_NOT_FOUND;
+ }
+
+ if (m_pfn == nullptr)
+ {
+ m_pfn = GetProcAddress(m_module, m_name.c_str());
+ if (m_pfn == nullptr)
+ return ERROR_NOT_FOUND;
+ }
+
+ m_initialized = true;
+
+ return 0;
+}
+
+void lazy_loaded_function::check_init()
+{
+ if (!m_initialized)
+ fatalerror("Attempt to use function pointer for function %s prior to init!", name());
+}
diff --git a/src/osd/windows/winutil.h b/src/osd/windows/winutil.h
index c8d1190b6a8..8f205e5a8ba 100644
--- a/src/osd/windows/winutil.h
+++ b/src/osd/windows/winutil.h
@@ -10,6 +10,8 @@
#define __WINUTIL__
#include "osdcore.h"
+#include <string>
+#include <vector>
// Shared code
file_error win_error_to_file_error(DWORD error);
@@ -17,4 +19,138 @@ osd_dir_entry_type win_attributes_to_entry_type(DWORD attributes);
BOOL win_is_gui_application(void);
HMODULE WINAPI GetModuleHandleUni();
+//-----------------------------------------------------------
+// Lazy loaded function using LoadLibrary / GetProcAddress
+//-----------------------------------------------------------
+
+class lazy_loaded_function
+{
+private:
+ std::string m_name;
+ std::vector<std::wstring> m_dll_names;
+ HMODULE m_module;
+ bool m_initialized;
+
+protected:
+ void check_init();
+ FARPROC m_pfn;
+
+public:
+ lazy_loaded_function(const char * name, const wchar_t* dll_name);
+ lazy_loaded_function(const char * name, const wchar_t** dll_names, int dll_count);
+ ~lazy_loaded_function();
+ int initialize();
+ const char * name() { return m_name.c_str(); }
+};
+
+// No parameters
+template <class TRet>
+class lazy_loaded_function_ret : public lazy_loaded_function
+{
+public:
+ lazy_loaded_function_ret(const char * name, const wchar_t* dll_name)
+ : lazy_loaded_function(name, &dll_name, 1)
+ {
+ }
+
+ lazy_loaded_function_ret(const char * name, const wchar_t** dll_names, int dll_count)
+ : lazy_loaded_function(name, dll_names, dll_count)
+ {
+ }
+
+ TRet operator ()()
+ {
+ check_init();
+ return ((TRet(__stdcall *) ())m_pfn)();
+ }
+};
+
+// One parameter
+template <class TRet, class P1>
+class lazy_loaded_function_p1 : public lazy_loaded_function
+{
+public:
+ lazy_loaded_function_p1(const char * name, const wchar_t* dll_name)
+ : lazy_loaded_function(name, &dll_name, 1)
+ {
+ }
+
+ lazy_loaded_function_p1(const char * name, const wchar_t** dll_names, int dll_count)
+ : lazy_loaded_function(name, dll_names, dll_count)
+ {
+ }
+
+ TRet operator ()(P1 p1)
+ {
+ check_init();
+ return ((TRet(__stdcall *) (P1))m_pfn)(p1);
+ }
+};
+
+// Two parameters
+template <class TRet, class P1, class P2>
+class lazy_loaded_function_p2 : public lazy_loaded_function
+{
+public:
+ lazy_loaded_function_p2(const char * name, const wchar_t* dll_name)
+ : lazy_loaded_function(name, &dll_name, 1)
+ {
+ }
+
+ lazy_loaded_function_p2(const char * name, const wchar_t** dll_names, int dll_count)
+ : lazy_loaded_function(name, dll_names, dll_count)
+ {
+ }
+
+ TRet operator ()(P1 p1, P2 p2)
+ {
+ check_init();
+ return ((TRet(__stdcall *) (P1, P2))m_pfn)(p1, p2);
+ }
+};
+
+// Three parameters
+template <class TRet, class P1, class P2, class P3>
+class lazy_loaded_function_p3 : public lazy_loaded_function
+{
+public:
+ lazy_loaded_function_p3(const char * name, const wchar_t* dll_name)
+ : lazy_loaded_function(name, &dll_name, 1)
+ {
+ }
+
+ lazy_loaded_function_p3(const char * name, const wchar_t** dll_names, int dll_count)
+ : lazy_loaded_function(name, dll_names, dll_count)
+ {
+ }
+
+ TRet operator ()(P1 p1, P2 p2, P3 p3)
+ {
+ check_init();
+ return ((TRet(__stdcall *) (P1, P2, P3))m_pfn)(p1, p2, p3);
+ }
+};
+
+// Four parameters
+template <class TRet, class P1, class P2, class P3, class P4>
+class lazy_loaded_function_p4 : public lazy_loaded_function
+{
+public:
+ lazy_loaded_function_p4(const char * name, const wchar_t* dll_name)
+ : lazy_loaded_function(name, &dll_name, 1)
+ {
+ }
+
+ lazy_loaded_function_p4(const char * name, const wchar_t** dll_names, int dll_count)
+ : lazy_loaded_function(name, dll_names, dll_count)
+ {
+ }
+
+ TRet operator ()(P1 p1, P2 p2, P3 p3, P4 p4)
+ {
+ check_init();
+ return ((TRet(__stdcall *) (P1, P2, P3, P4))m_pfn)(p1, p2, p3, p4);
+ }
+};
+
#endif // __WINUTIL__
diff --git a/src/tools/chdman.cpp b/src/tools/chdman.cpp
index 8a2f8bc5299..94ea358e825 100644
--- a/src/tools/chdman.cpp
+++ b/src/tools/chdman.cpp
@@ -840,8 +840,7 @@ const char *big_int_string(std::string &str, UINT64 intvalue)
int chunk = intvalue % 1000;
intvalue /= 1000;
- std::string insert;
- strprintf(insert, (intvalue != 0) ? "%03d" : "%d", chunk);
+ std::string insert = string_format((intvalue != 0) ? "%03d" : "%d", chunk);
if (!first)
str.insert(0, ",").c_str();
@@ -859,7 +858,7 @@ const char *big_int_string(std::string &str, UINT64 intvalue)
const char *msf_string_from_frames(std::string &str, UINT32 frames)
{
- strprintf(str, "%02d:%02d:%02d", frames / (75 * 60), (frames / 75) % 60, frames % 75);
+ str = string_format("%02d:%02d:%02d", frames / (75 * 60), (frames / 75) % 60, frames % 75);
return str.c_str();
}
@@ -1249,7 +1248,7 @@ void output_track_metadata(int mode, core_file *file, int tracknum, const cdrom_
{
case CD_TRACK_MODE1:
case CD_TRACK_MODE1_RAW:
- strprintf(tempstr,"MODE1/%04d", info.datasize);
+ tempstr = string_format("MODE1/%04d", info.datasize);
break;
case CD_TRACK_MODE2:
@@ -1257,7 +1256,7 @@ void output_track_metadata(int mode, core_file *file, int tracknum, const cdrom_
case CD_TRACK_MODE2_FORM2:
case CD_TRACK_MODE2_FORM_MIX:
case CD_TRACK_MODE2_RAW:
- strprintf(tempstr,"MODE2/%04d", info.datasize);
+ tempstr = string_format("MODE2/%04d", info.datasize);
break;
case CD_TRACK_AUDIO:
@@ -1301,9 +1300,9 @@ void output_track_metadata(int mode, core_file *file, int tracknum, const cdrom_
// write out the track type
std::string modesubmode;
if (info.subtype != CD_SUB_NONE)
- strprintf(modesubmode,"%s %s", cdrom_get_type_string(info.trktype), cdrom_get_subtype_string(info.subtype));
+ modesubmode = string_format("%s %s", cdrom_get_type_string(info.trktype), cdrom_get_subtype_string(info.subtype));
else
- strprintf(modesubmode,"%s", cdrom_get_type_string(info.trktype));
+ modesubmode = string_format("%s", cdrom_get_type_string(info.trktype));
core_fprintf(file, "TRACK %s\n", modesubmode.c_str());
// write out the attributes
@@ -1819,8 +1818,7 @@ static void do_create_hd(parameters_t &params)
report_error(1, "Error creating CHD file (%s): %s", output_chd_str->c_str(), chd_file::error_string(err));
// add the standard hard disk metadata
- std::string metadata;
- strprintf(metadata, HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, sector_size);
+ std::string metadata = string_format(HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, sector_size);
err = chd->write_metadata(HARD_DISK_METADATA_TAG, 0, metadata);
if (err != CHDERR_NONE)
report_error(1, "Error adding hard disk metadata: %s", chd_file::error_string(err));
@@ -2040,8 +2038,7 @@ static void do_create_ld(parameters_t &params)
report_error(1, "Error creating CHD file (%s): %s", output_chd_str->c_str(), chd_file::error_string(err));
// write the core A/V metadata
- std::string metadata;
- strprintf(metadata, AV_METADATA_FORMAT, info.fps_times_1million / 1000000, info.fps_times_1million % 1000000, info.width, info.height, info.interlaced, info.channels, info.rate);
+ std::string metadata = string_format(AV_METADATA_FORMAT, info.fps_times_1million / 1000000, info.fps_times_1million % 1000000, info.width, info.height, info.interlaced, info.channels, info.rate);
err = chd->write_metadata(AV_METADATA_TAG, 0, metadata);
if (err != CHDERR_NONE)
report_error(1, "Error adding AV metadata: %s\n", chd_file::error_string(err));
diff --git a/src/tools/imgtool/imghd.cpp b/src/tools/imgtool/imghd.cpp
index b3161ae2caf..715076b63b4 100644
--- a/src/tools/imgtool/imghd.cpp
+++ b/src/tools/imgtool/imghd.cpp
@@ -49,19 +49,15 @@ static imgtoolerr_t map_chd_error(chd_error chderr)
imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 hunksize, UINT32 cylinders, UINT32 heads, UINT32 sectors, UINT32 seclen)
{
imgtoolerr_t err = IMGTOOLERR_SUCCESS;
- dynamic_buffer cache;
chd_file chd;
chd_error rc;
- UINT64 logicalbytes;
- int hunknum, totalhunks;
- std::string metadata;
chd_codec_type compression[4] = { CHD_CODEC_NONE };
/* sanity check args */
if (hunksize >= 2048)
{
err = IMGTOOLERR_PARAMCORRUPT;
- goto done;
+ return err;
}
if (hunksize <= 0)
hunksize = 1024; /* default value */
@@ -70,18 +66,18 @@ imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 hunksize, UINT32 cylind
if (stream_isreadonly(stream))
{
err = IMGTOOLERR_READONLY;
- goto done;
+ return err;
}
/* calculations */
- logicalbytes = (UINT64)cylinders * heads * sectors * seclen;
+ const UINT64 logicalbytes = (UINT64)cylinders * heads * sectors * seclen;
/* create the new hard drive */
rc = chd.create(*stream_core_file(stream), logicalbytes, hunksize, seclen, compression);
if (rc != CHDERR_NONE)
{
err = map_chd_error(rc);
- goto done;
+ return err;
}
/* open the new hard drive */
@@ -90,35 +86,35 @@ imgtoolerr_t imghd_create(imgtool_stream *stream, UINT32 hunksize, UINT32 cylind
if (rc != CHDERR_NONE)
{
err = map_chd_error(rc);
- goto done;
+ return err;
}
/* write the metadata */
- strprintf(metadata,HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, seclen);
+ const std::string metadata = string_format(HARD_DISK_METADATA_FORMAT, cylinders, heads, sectors, seclen);
err = (imgtoolerr_t)chd.write_metadata(HARD_DISK_METADATA_TAG, 0, metadata);
if (rc != CHDERR_NONE)
{
err = map_chd_error(rc);
- goto done;
+ return err;
}
/* alloc and zero buffer */
+ dynamic_buffer cache;
cache.resize(hunksize);
memset(&cache[0], 0, hunksize);
/* zero out every hunk */
- totalhunks = (logicalbytes + hunksize - 1) / hunksize;
- for (hunknum = 0; hunknum < totalhunks; hunknum++)
+ const int totalhunks = (logicalbytes + hunksize - 1) / hunksize;
+ for (int hunknum = 0; hunknum < totalhunks; hunknum++)
{
rc = chd.write_units(hunknum, &cache[0]);
if (rc)
{
err = IMGTOOLERR_WRITEERROR;
- goto done;
+ return err;
}
}
-done:
return err;
}
diff --git a/src/tools/jedutil.cpp b/src/tools/jedutil.cpp
index a6cfc279e2a..9f3b54c3474 100644
--- a/src/tools/jedutil.cpp
+++ b/src/tools/jedutil.cpp
@@ -535,14 +535,14 @@ static pin_fuse_rows peel18cv8pinfuserows[] = {
{19, 2304, 0, 252}};
static pin_fuse_rows ampal18p8pinfuserows[] = {
- {12, 2268, 2304, 2556},
- {13, 1944, 1980, 2232},
- {14, 1620, 1656, 1908},
- {15, 1296, 1332, 1584},
- {16, 972, 1008, 1260},
- {17, 648, 684, 936},
- {18, 324, 360, 612},
- {19, 0, 36, 288}};
+ {12, 2268, 2304, 2556},
+ {13, 1944, 1980, 2232},
+ {14, 1620, 1656, 1908},
+ {15, 1296, 1332, 1584},
+ {16, 972, 1008, 1260},
+ {17, 648, 684, 936},
+ {18, 324, 360, 612},
+ {19, 0, 36, 288}};
static pin_fuse_rows gal18v10pinfuserows[] = {
{9, 3096, 3132, 3384},
@@ -2019,13 +2019,13 @@ static pal_data paldata[] = {
config_peel18cv8_pins,
nullptr,
get_peel18cv8_pin_fuse_state},
- {"AMPAL18P8", 2600,
- ampal18p8pinfuserows, ARRAY_LENGTH(ampal18p8pinfuserows),
- ampal18p8pinfusecolumns, ARRAY_LENGTH(ampal18p8pinfusecolumns),
- print_ampal18p8_product_terms,
- config_ampal18p8_pins,
- nullptr,
- nullptr},
+ {"AMPAL18P8", 2600,
+ ampal18p8pinfuserows, ARRAY_LENGTH(ampal18p8pinfuserows),
+ ampal18p8pinfusecolumns, ARRAY_LENGTH(ampal18p8pinfusecolumns),
+ print_ampal18p8_product_terms,
+ config_ampal18p8_pins,
+ nullptr,
+ nullptr},
{"GAL18V10", 3540,
gal18v10pinfuserows, ARRAY_LENGTH(gal18v10pinfuserows),
gal18v10pinfusecolumns, ARRAY_LENGTH(gal18v10pinfusecolumns),
@@ -5312,7 +5312,7 @@ static void config_ampal18p8_pins(const pal_data* pal, const jed_data* jed)
output_pins[output_pin_count].pin = pal->pinfuserows[index].pin;
output_pins[output_pin_count].flags = OUTPUT_COMBINATORIAL | OUTPUT_FEEDBACK_OUTPUT;
- if (jed_get_fuse(jed, 2591 + (8 - index)))
+ if (jed_get_fuse(jed, 2591 + (8 - index)))
{
output_pins[output_pin_count].flags |= OUTPUT_ACTIVEHIGH;
}
diff --git a/src/tools/regrep.cpp b/src/tools/regrep.cpp
index d533121574a..16eaa21f7de 100644
--- a/src/tools/regrep.cpp
+++ b/src/tools/regrep.cpp
@@ -686,7 +686,7 @@ static void output_report(std::string &dirname, std::string &tempheader, std::st
*buckettailptr[bucknum] = nullptr;
/* output header */
- strprintf(tempname,"%s" PATH_SEPARATOR "%s", dirname.c_str(), "index.html");
+ tempname = string_format("%s" PATH_SEPARATOR "%s", dirname.c_str(), "index.html");
indexfile = create_file_and_output_header(tempname, tempheader, title);
if (indexfile == nullptr)
{
@@ -732,7 +732,7 @@ static int compare_screenshots(summary_file *curfile)
core_file *file;
/* get the filename for the image */
- strprintf(fullname,"%s" PATH_SEPARATOR "snap" PATH_SEPARATOR "%s" PATH_SEPARATOR "final.png", lists[listnum].dir, curfile->name);
+ fullname = string_format("%s" PATH_SEPARATOR "snap" PATH_SEPARATOR "%s" PATH_SEPARATOR "final.png", lists[listnum].dir, curfile->name);
/* open the file */
filerr = core_fopen(fullname.c_str(), OPEN_FLAG_READ, &file);
@@ -741,7 +741,7 @@ static int compare_screenshots(summary_file *curfile)
if (filerr != FILERR_NONE)
{
/* get the filename for the image */
- strprintf(fullname, "%s" PATH_SEPARATOR "snap" PATH_SEPARATOR "_%s.png", lists[listnum].dir, curfile->name);
+ fullname = string_format("%s" PATH_SEPARATOR "snap" PATH_SEPARATOR "_%s.png", lists[listnum].dir, curfile->name);
/* open the file */
filerr = core_fopen(fullname.c_str(), OPEN_FLAG_READ, &file);
@@ -843,14 +843,14 @@ static int generate_png_diff(const summary_file *curfile, std::string &destdir,
int starty;
/* generate the common source filename */
- strprintf(dstfilename,"%s" PATH_SEPARATOR "%s", destdir.c_str(), destname);
- strprintf(srcimgname,"snap" PATH_SEPARATOR "%s" PATH_SEPARATOR "final.png", curfile->name);
+ dstfilename = string_format("%s" PATH_SEPARATOR "%s", destdir.c_str(), destname);
+ srcimgname = string_format("snap" PATH_SEPARATOR "%s" PATH_SEPARATOR "final.png", curfile->name);
/* open and load all unique bitmaps */
for (listnum = 0; listnum < list_count; listnum++)
if (curfile->matchbitmap[listnum] == listnum)
{
- strprintf(tempname, "%s" PATH_SEPARATOR "%s", lists[listnum].dir, srcimgname.c_str());
+ tempname = string_format("%s" PATH_SEPARATOR "%s", lists[listnum].dir, srcimgname.c_str());
/* open the source image */
filerr = core_fopen(tempname.c_str(), OPEN_FLAG_READ, &file);
@@ -957,11 +957,11 @@ static void create_linked_file(std::string &dirname, const summary_file *curfile
int listnum;
/* create the filename */
- strprintf(filename,"%s.html", curfile->name);
+ filename = string_format("%s.html", curfile->name);
/* output header */
- strprintf(title, "%s Regressions (%s)", curfile->name, curfile->source);
- strprintf(linkname,"%s" PATH_SEPARATOR "%s", dirname.c_str(), filename.c_str());
+ title = string_format("%s Regressions (%s)", curfile->name, curfile->source);
+ linkname = string_format("%s" PATH_SEPARATOR "%s", dirname.c_str(), filename.c_str());
linkfile = create_file_and_output_header(linkname, tempheader, title);
if (linkfile == nullptr)
{
diff --git a/src/tools/split.cpp b/src/tools/split.cpp
index 043d93b3a78..a6b97e7175d 100644
--- a/src/tools/split.cpp
+++ b/src/tools/split.cpp
@@ -152,7 +152,7 @@ static int split_file(const char *filename, const char *basename, UINT32 splitsi
core_fprintf(splitfile, "hash=%s file=%s.%03d\n", computedhash.c_str(), basefilename.c_str(), partnum);
// compute the full filename for this guy
- strprintf(outfilename,"%s.%03d", basename, partnum);
+ outfilename = string_format("%s.%03d", basename, partnum);
// create it
filerr = core_fopen(outfilename.c_str(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE, &outfile);
diff --git a/src/tools/src2html.cpp b/src/tools/src2html.cpp
index e5d2f8f496c..557313f1b3e 100644
--- a/src/tools/src2html.cpp
+++ b/src/tools/src2html.cpp
@@ -332,7 +332,7 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
// create an index file
std::string indexname;
- strprintf(indexname,"%s%c%s", dstdir.c_str(), PATH_SEPARATOR[0], "index.html");
+ indexname = string_format("%s%c%s", dstdir.c_str(), PATH_SEPARATOR[0], "index.html");
core_file *indexfile = create_file_and_output_header(indexname, tempheader, srcdir_subpath);
// output the directory navigation
@@ -402,7 +402,7 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
// build the source filename
std::string srcfile;
- strprintf(srcfile, "%s%c%s", srcdir.c_str(), PATH_SEPARATOR[0], curlist->name.c_str());
+ srcfile = string_format("%s%c%s", srcdir.c_str(), PATH_SEPARATOR[0], curlist->name.c_str());
// if we have a file, output it
std::string dstfile;
@@ -420,7 +420,7 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
// if we got a valid file, process it
if (type != FILE_TYPE_INVALID)
{
- strprintf(dstfile, "%s%c%s.html", dstdir.c_str(), PATH_SEPARATOR[0], curlist->name.c_str());
+ dstfile = string_format("%s%c%s.html", dstdir.c_str(), PATH_SEPARATOR[0], curlist->name.c_str());
if (indexfile != nullptr)
core_fprintf(indexfile, "\t<li><a href=\"%s.html\">%s</a></li>\n", curlist->name.c_str(), curlist->name.c_str());
result = output_file(type, srcrootlen, dstrootlen, srcfile, dstfile, srcdir.compare(dstdir) == 0, tempheader, tempfooter);
@@ -430,7 +430,7 @@ static int recurse_dir(int srcrootlen, int dstrootlen, std::string &srcdir, std:
// if we have a directory, recurse
else
{
- strprintf(dstfile, "%s%c%s", dstdir.c_str(), PATH_SEPARATOR[0], curlist->name.c_str());
+ dstfile = string_format("%s%c%s", dstdir.c_str(), PATH_SEPARATOR[0], curlist->name.c_str());
if (indexfile != nullptr)
core_fprintf(indexfile, "\t<li><a href=\"%s/index.html\">%s/</a></li>\n", curlist->name.c_str(), curlist->name.c_str());
result = recurse_dir(srcrootlen, dstrootlen, srcfile, dstfile, tempheader, tempfooter);
@@ -544,11 +544,12 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
int linenum = 1;
bool in_comment = false;
char srcline[4096];
+ std::ostringstream dstline;
while (core_fgets(srcline, ARRAY_LENGTH(srcline), src) != nullptr)
{
// start with the line number
- std::string dstline;
- strcatprintf(dstline, "<span class=\"linenum\">%5d</span>&nbsp;&nbsp;", linenum++);
+ dstline.str("");
+ util::stream_format(dstline, "<span class=\"linenum\">%5d</span>&nbsp;&nbsp;", linenum++);
// iterate over characters in the source line
bool escape = false;
@@ -568,7 +569,7 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
{
if (!in_comment && ch == comment_start[0] && strncmp(srcptr - 1, comment_start, strlen(comment_start)) == 0)
{
- strcatprintf(dstline, "<span class=\"comment\">%s", comment_start_esc);
+ util::stream_format(dstline, "<span class=\"comment\">%s", comment_start_esc);
curcol += strlen(comment_start);
srcptr += strlen(comment_start) - 1;
ch = 0;
@@ -576,7 +577,7 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
}
else if (in_comment && ch == comment_end[0] && strncmp(srcptr - 1, comment_end, strlen(comment_end)) == 0)
{
- strcatprintf(dstline, "%s</span>", comment_end_esc);
+ util::stream_format(dstline, "%s</span>", comment_end_esc);
curcol += strlen(comment_end);
srcptr += strlen(comment_end) - 1;
ch = 0;
@@ -587,7 +588,7 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
// track whether or not we are within an inline (C++-style) comment
if (!in_quotes && !in_comment && !in_inline_comment && ch == comment_inline[0] && strncmp(srcptr - 1, comment_inline, strlen(comment_inline)) == 0)
{
- strcatprintf(dstline, "<span class=\"comment\">%s", comment_inline_esc);
+ util::stream_format(dstline, "<span class=\"comment\">%s", comment_inline_esc);
curcol += strlen(comment_inline);
srcptr += strlen(comment_inline) - 1;
ch = 0;
@@ -611,7 +612,7 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
for (curtoken = token_table; curtoken->token != nullptr; curtoken++)
if (strncmp(srcptr - 1, curtoken->token, toklength) == 0 && strlen(curtoken->token) == toklength)
{
- strcatprintf(dstline, "<span class=\"%s\">%s</span>", curtoken->color, curtoken->token);
+ util::stream_format(dstline, "<span class=\"%s\">%s</span>", curtoken->color, curtoken->token);
curcol += strlen(curtoken->token);
srcptr += strlen(curtoken->token) - 1;
ch = 0;
@@ -631,7 +632,7 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
int spaces = 4 - curcol % 4;
while (spaces--)
{
- dstline.push_back(' ');
+ dstline.put(' ');
curcol++;
}
}
@@ -643,9 +644,9 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
if (!in_comment && !in_inline_comment && !in_quotes && (ch == '"' || ch == '\''))
{
if (color_quotes)
- strcatprintf(dstline, "<span class=\"string\">%c", ch);
+ util::stream_format(dstline, "<span class=\"string\">%c", ch);
else
- dstline.push_back(ch);
+ dstline.put(ch);
in_quotes = true;
curquote = ch;
@@ -659,7 +660,7 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
std::string target;
if (find_include_file(target, srcrootlen, dstrootlen, srcfile, dstfile, filename))
{
- strcatprintf(dstline, "<a href=\"%s\">", target.c_str());
+ util::stream_format(dstline, "<a href=\"%s\">", target.c_str());
quotes_are_linked = true;
}
}
@@ -670,11 +671,11 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
else if (!in_comment && !in_inline_comment && in_quotes && (ch == curquote) && !escape)
{
if (quotes_are_linked)
- dstline.append("</a>");
+ dstline << "</a>";
if (color_quotes)
- strcatprintf(dstline, "%c</span>", ch);
+ util::stream_format(dstline, "%c</span>", ch);
else
- dstline.push_back(ch);
+ dstline.put(ch);
in_quotes = false;
curquote = 0;
quotes_are_linked = false;
@@ -682,13 +683,13 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
// else just output the current character
else if (ch == '&')
- dstline.append("&amp;");
+ dstline << "&amp;";
else if (ch == '<')
- dstline.append("&lt;");
+ dstline << "&lt;";
else if (ch == '>')
- dstline.append("&gt;");
+ dstline << "&gt;";
else
- dstline.push_back(ch);
+ dstline.put(ch);
curcol++;
}
@@ -700,13 +701,13 @@ static int output_file(file_type type, int srcrootlen, int dstrootlen, std::stri
// finish inline comments
if (in_inline_comment)
{
- dstline.append("</span>");
+ dstline << "</span>";
in_inline_comment = false;
}
// append a break and move on
- dstline.append("\n");
- core_fputs(dst, dstline.c_str());
+ dstline.put('\n');
+ core_fputs(dst, dstline.str().c_str());
}
// close tags
diff --git a/src/version.cpp b/src/version.cpp
index 65db62b5d62..0e42f37eb5d 100644
--- a/src/version.cpp
+++ b/src/version.cpp
@@ -8,7 +8,7 @@
***************************************************************************/
-#define BARE_BUILD_VERSION "0.170"
+#define BARE_BUILD_VERSION "0.171"
extern const char bare_build_version[];
extern const char build_version[];